ax-common-ui-lib 1.0.0-qa.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/ax-common-ui-lib.d.ts +5 -0
- package/esm2020/ax-common-ui-lib.mjs +5 -0
- package/esm2020/lib/app-list/app-list-dto.mjs +29 -0
- package/esm2020/lib/app-list/app-list.component.mjs +421 -0
- package/esm2020/lib/app-list/my-app-list.service.mjs +142 -0
- package/esm2020/lib/app-list/organization-list-dto.mjs +29 -0
- package/esm2020/lib/ax-app-common-lib.component.mjs +26 -0
- package/esm2020/lib/ax-app-common-lib.module.mjs +147 -0
- package/esm2020/lib/ax-app-common-lib.service.mjs +14 -0
- package/esm2020/lib/axo-filters/axo-filters.component.mjs +422 -0
- package/esm2020/lib/axo-filters/axo-filters.module.mjs +59 -0
- package/esm2020/lib/axo-filters/axo-filters.service.mjs +85 -0
- package/esm2020/lib/axo-map/axo-map.component.mjs +40 -0
- package/esm2020/lib/axo-map/axo-map.mjs +37 -0
- package/esm2020/lib/axo-map/axo-map.module.mjs +41 -0
- package/esm2020/lib/axo-map/public-api.mjs +7 -0
- package/esm2020/lib/axo-search-bar/axo-search-bar.component.mjs +84 -0
- package/esm2020/lib/axo-search-bar/axo-search-bar.module.mjs +38 -0
- package/esm2020/lib/axo-search-bar/public.api.mjs +3 -0
- package/esm2020/lib/axo-snack-bar/axo-snack-bar.component.mjs +155 -0
- package/esm2020/lib/axo-snack-bar/axo-snack-bar.module.mjs +34 -0
- package/esm2020/lib/axo-snack-bar/axo-snack-bar.service.mjs +29 -0
- package/esm2020/lib/axo-snack-bar/public-api.mjs +3 -0
- package/esm2020/lib/axo-state-manager/axo-state-manager.module.mjs +27 -0
- package/esm2020/lib/axo-state-manager/axo-state-manager.service.mjs +37 -0
- package/esm2020/lib/axo-state-manager/public-api.mjs +3 -0
- package/esm2020/lib/axo-utils/axo-utils.mjs +149 -0
- package/esm2020/lib/axo-utils/axo-utils.module.mjs +25 -0
- package/esm2020/lib/axo-utils/constants.mjs +3 -0
- package/esm2020/lib/axo-utils/data-source-types.mjs +12 -0
- package/esm2020/lib/axo-utils/field-list-search-pipe.mjs +32 -0
- package/esm2020/lib/axo-utils/filter-search-pipe.mjs +16 -0
- package/esm2020/lib/axo-utils/public-api.mjs +2 -0
- package/esm2020/lib/axo-utils/search-pipe/choice-search.pipe.mjs +33 -0
- package/esm2020/lib/axo-utils/search-pipe.mjs +36 -0
- package/esm2020/lib/bread-crumbs/bread-crumbs.component.mjs +196 -0
- package/esm2020/lib/bread-crumbs/bread-crumbs.module.mjs +29 -0
- package/esm2020/lib/bread-crumbs/bread-crumbs.service.mjs +122 -0
- package/esm2020/lib/code-editor/code-editor-modes.mjs +11 -0
- package/esm2020/lib/code-editor/code-editor-themes.mjs +8 -0
- package/esm2020/lib/code-editor/code-editor.component.mjs +60 -0
- package/esm2020/lib/code-editor/code-editor.module.mjs +36 -0
- package/esm2020/lib/code-editor/icode-editor-options.mjs +2 -0
- package/esm2020/lib/code-editor/public-api.mjs +3 -0
- package/esm2020/lib/common-dto/attributes-dto.mjs +39 -0
- package/esm2020/lib/common-dto/dashboard-dto.mjs +12 -0
- package/esm2020/lib/common-dto/dataListFilter-dto.mjs +13 -0
- package/esm2020/lib/common-dto/elements-dto.mjs +61 -0
- package/esm2020/lib/common-dto/form-dto.mjs +48 -0
- package/esm2020/lib/common-lib-configuration.service.mjs +21 -0
- package/esm2020/lib/common-property-panel/properties/properties.service.mjs +30 -0
- package/esm2020/lib/common-utils/entity-base.mjs +12 -0
- package/esm2020/lib/common-utils/iFlatten.mjs +2 -0
- package/esm2020/lib/common-utils/report.mjs +45 -0
- package/esm2020/lib/common.service.mjs +78 -0
- package/esm2020/lib/converters/convert-to-new-service.mjs +11 -0
- package/esm2020/lib/converters/convert-to-old-service.mjs +168 -0
- package/esm2020/lib/core/auth/auth.service.mjs +146 -0
- package/esm2020/lib/core/core.module.mjs +37 -0
- package/esm2020/lib/core/icons/icons.module.mjs +255 -0
- package/esm2020/lib/core/transloco/transloco.http-loader.mjs +32 -0
- package/esm2020/lib/core/transloco/transloco.module.mjs +94 -0
- package/esm2020/lib/core/user/axo-user.mjs +46 -0
- package/esm2020/lib/core/user/user-data.service.mjs +46 -0
- package/esm2020/lib/core/user/user.service.mjs +87 -0
- package/esm2020/lib/core/user/user.types.mjs +2 -0
- package/esm2020/lib/dashboard-lib/dashboard-builder.service.mjs +56 -0
- package/esm2020/lib/dashboard-lib/dashboard-control.service.mjs +92 -0
- package/esm2020/lib/dashboard-lib/dashboard-element/dashboard-element.mjs +11 -0
- package/esm2020/lib/dashboard-lib/dashboard-element-property/dashboard-property/dashboard-element-property.mjs +9 -0
- package/esm2020/lib/dashboard-lib/dashboard-filter/dashboard-filter.component.mjs +107 -0
- package/esm2020/lib/dashboard-lib/dashboard-lib.module.mjs +111 -0
- package/esm2020/lib/dashboard-lib/dashboard-list.service.mjs +73 -0
- package/esm2020/lib/dashboard-lib/dashboard.mjs +15 -0
- package/esm2020/lib/dashboard-lib/send-to-dashboard.service.mjs +96 -0
- package/esm2020/lib/dashboard-lib/show-dashboards/show-dashboards.component.mjs +241 -0
- package/esm2020/lib/dashboard-lib/show-dashboards/show-dashboards.service.mjs +32 -0
- package/esm2020/lib/data-view-lib/data-view/axo-card.mjs +26 -0
- package/esm2020/lib/data-view-lib/data-view/axo-tag.mjs +48 -0
- package/esm2020/lib/data-view-lib/data-view/board-column.mjs +24 -0
- package/esm2020/lib/data-view-lib/data-view/board-view.mjs +45 -0
- package/esm2020/lib/data-view-lib/data-view/cardConfig.mjs +26 -0
- package/esm2020/lib/data-view-lib/data-view/conditional-formatting.mjs +25 -0
- package/esm2020/lib/data-view-lib/data-view/coordinate.mjs +21 -0
- package/esm2020/lib/data-view-lib/data-view/data-view-enums.mjs +68 -0
- package/esm2020/lib/data-view-lib/data-view/data-view-filter.mjs +47 -0
- package/esm2020/lib/data-view-lib/data-view/data-view.mjs +66 -0
- package/esm2020/lib/data-view-lib/data-view/idata-view.mjs +2 -0
- package/esm2020/lib/data-view-lib/data-view/image-style.mjs +21 -0
- package/esm2020/lib/data-view-lib/data-view/info-window.mjs +23 -0
- package/esm2020/lib/data-view-lib/data-view/location.mjs +21 -0
- package/esm2020/lib/data-view-lib/data-view/map-view.mjs +41 -0
- package/esm2020/lib/data-view-lib/data-view/prefix-style.mjs +28 -0
- package/esm2020/lib/data-view-lib/data-view/tag-style.mjs +28 -0
- package/esm2020/lib/data-view-lib/data-view/tagConfig.mjs +63 -0
- package/esm2020/lib/data-view-lib/data-view/task-asset-form-object-dto.mjs +72 -0
- package/esm2020/lib/data-view-lib/data-view/task-column-value.mjs +43 -0
- package/esm2020/lib/data-view-lib/data-view/task-view.mjs +31 -0
- package/esm2020/lib/data-view-lib/data-view/task.mjs +199 -0
- package/esm2020/lib/data-view-lib/data-view/value-style.mjs +25 -0
- package/esm2020/lib/data-view-lib/data-view-filters/data-view-filters.component.mjs +661 -0
- package/esm2020/lib/data-view-lib/data-view-filters/data-view-filters.service.mjs +102 -0
- package/esm2020/lib/data-view-lib/data-view-header/data-view-header.component.mjs +536 -0
- package/esm2020/lib/data-view-lib/data-view-lib.module.mjs +88 -0
- package/esm2020/lib/data-view-lib/data-view.service.mjs +211 -0
- package/esm2020/lib/data-view-lib/public-api.mjs +28 -0
- package/esm2020/lib/directive/adjust-font-size.mjs +49 -0
- package/esm2020/lib/drill-through/drill-through.component.mjs +153 -0
- package/esm2020/lib/drill-through/drill-through.module.mjs +33 -0
- package/esm2020/lib/drill-through/drill-through.resolver.mjs +80 -0
- package/esm2020/lib/drill-through/drill-through.service.mjs +218 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-column.mjs +37 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-date-list.mjs +37 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-date-range-value.mjs +37 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-date-range.mjs +34 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-date-time-list.mjs +36 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-date-time-range-value.mjs +37 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-date-time-range.mjs +34 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-date-time.mjs +36 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-date-value.mjs +36 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-number-list.mjs +36 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-number-range-value.mjs +37 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-number-value.mjs +36 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-text-list.mjs +36 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-text.mjs +36 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-time-list.mjs +36 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-time-range-value.mjs +37 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-time-range.mjs +38 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-time.mjs +36 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-toggle.mjs +36 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-expression-value.mjs +32 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-expression.mjs +415 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-number-range.mjs +34 -0
- package/esm2020/lib/enlighten-lib/ax-expression/exp-sub-type.mjs +29 -0
- package/esm2020/lib/enlighten-lib/ax-expression/public-api.mjs +24 -0
- package/esm2020/lib/enlighten-lib/data-model/attribute.mjs +247 -0
- package/esm2020/lib/enlighten-lib/data-model/data-model.mjs +52 -0
- package/esm2020/lib/enlighten-lib/data-model/dependee.mjs +24 -0
- package/esm2020/lib/enlighten-lib/data-model/dependent.mjs +24 -0
- package/esm2020/lib/enlighten-lib/data-model/entity.mjs +71 -0
- package/esm2020/lib/enlighten-lib/data-model-tree/attributes-dragdrop-layout/attributes-dragdrop-layout.component.mjs +100 -0
- package/esm2020/lib/enlighten-lib/data-model-tree/attributes-selection-layout/attributes-selection-layout.component.mjs +100 -0
- package/esm2020/lib/enlighten-lib/data-model-tree/categories-tree/categories-tree.component.mjs +113 -0
- package/esm2020/lib/enlighten-lib/data-model-tree/data-model-tree-enums.mjs +6 -0
- package/esm2020/lib/enlighten-lib/data-model-tree/data-model-tree.component.mjs +301 -0
- package/esm2020/lib/enlighten-lib/data-model-tree/data-model-tree.module.mjs +67 -0
- package/esm2020/lib/enlighten-lib/elements/Property.mjs +3 -0
- package/esm2020/lib/enlighten-lib/elements/ax-element.mjs +55 -0
- package/esm2020/lib/enlighten-lib/elements/element-factory.mjs +38 -0
- package/esm2020/lib/enlighten-lib/enlighten-lib.module.mjs +308 -0
- package/esm2020/lib/enlighten-lib/enums/bread-crumbs-style.mjs +6 -0
- package/esm2020/lib/enlighten-lib/enums/operator-text-enum.mjs +11 -0
- package/esm2020/lib/enlighten-lib/fields/attribute-data.mjs +167 -0
- package/esm2020/lib/enlighten-lib/fields/entity.mjs +16 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-audio.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-barcode.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-childrecord.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-counter.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-date.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-decimal.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-document.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-file.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-image.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-location.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-number.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-qrcode.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-signature.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-staticmedia.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-text.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-time.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-uniqueid.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/axo-timestamp.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/choicelist.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/datetime.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/hyperlink.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ienlighten-type.mjs +2 -0
- package/esm2020/lib/enlighten-lib/fields/types/toggle.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/video.mjs +6 -0
- package/esm2020/lib/enlighten-lib/filters/ax-filter.mjs +74 -0
- package/esm2020/lib/enlighten-lib/filters/ax-operator.mjs +88 -0
- package/esm2020/lib/enlighten-lib/filters/chart-filter-type.mjs +7 -0
- package/esm2020/lib/enlighten-lib/filters/condition-type.mjs +49 -0
- package/esm2020/lib/enlighten-lib/filters/dataList-searchNode.mjs +48 -0
- package/esm2020/lib/enlighten-lib/filters/dataListFilterExpression.mjs +32 -0
- package/esm2020/lib/enlighten-lib/filters/dataListFilterOperator.mjs +43 -0
- package/esm2020/lib/enlighten-lib/filters/dataListSeachQueryTree.mjs +25 -0
- package/esm2020/lib/enlighten-lib/filters/filter-category.mjs +78 -0
- package/esm2020/lib/enlighten-lib/filters/general-filter-type.mjs +13 -0
- package/esm2020/lib/enlighten-lib/filters/gridster-properties.mjs +31 -0
- package/esm2020/lib/enlighten-lib/filters/iax-filter.mjs +2 -0
- package/esm2020/lib/enlighten-lib/filters/search-node.mjs +50 -0
- package/esm2020/lib/enlighten-lib/filters/static-widget.mjs +24 -0
- package/esm2020/lib/enlighten-lib/property/element-property.mjs +11 -0
- package/esm2020/lib/enlighten-lib/property/filter-category-property.mjs +9 -0
- package/esm2020/lib/enlighten-lib/property/filter-property.mjs +9 -0
- package/esm2020/lib/enlighten-lib/report/chart-filter/chart-filter.component.mjs +393 -0
- package/esm2020/lib/enlighten-lib/report/element.service.mjs +115 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/bar-chart/bar-chart.component.mjs +1002 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/bar-chart/bar-chart.mjs +144 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/bar-chart/bar-chart.service.mjs +15 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/card-chart/card-chart.component.mjs +576 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/card-chart/card-chart.mjs +66 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/card-chart/card-chart.service.mjs +15 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/border.mjs +18 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/chart-factory.mjs +80 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/chart-property.mjs +4 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/chart-type.mjs +15 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/chart.mjs +123 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/common-chart.service.mjs +32 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/conditional-formatting.mjs +8 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/dimension.mjs +8 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/font.mjs +32 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/fontStyle.mjs +28 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/label.mjs +6 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/legend.mjs +28 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/matrix.mjs +26 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/shadow.mjs +7 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/style.mjs +14 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/text-style.mjs +34 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/title.mjs +12 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/graphical-report.component.mjs +357 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/graphical-report.directive.mjs +16 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/ichart-component.mjs +2 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/igraphical-report.component.mjs +2 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/line-chart/line-chart.component.mjs +856 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/line-chart/line-chart.mjs +97 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/line-chart/line-chart.service.mjs +15 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/page/page.mjs +48 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/pie-chart/pie-chart.component.mjs +934 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/pie-chart/pie-chart.mjs +103 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/pie-chart/pie-chart.service.mjs +15 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/text/text-chart.mjs +56 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/text/text.component.mjs +302 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/text/text.service.mjs +15 -0
- package/esm2020/lib/enlighten-lib/report/iproperty.component.mjs +8 -0
- package/esm2020/lib/enlighten-lib/report/ireport.mjs +14 -0
- package/esm2020/lib/enlighten-lib/report/report-builder-master.service.mjs +83 -0
- package/esm2020/lib/enlighten-lib/report/report-filter/report-filter.component.mjs +313 -0
- package/esm2020/lib/enlighten-lib/report/report-filter/report-filter.module.mjs +71 -0
- package/esm2020/lib/enlighten-lib/report/report-filter/report-filter.service.mjs +246 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/aggregate.mjs +10 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/axo-percentage.pipe.mjs +26 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/column-style.mjs +7 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/itabular-report.component.mjs +2 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/orderby-type.mjs +7 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/row-style.mjs +7 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/table-style.mjs +47 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/tabular/column-group-view/column-group-view.component.mjs +4464 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/tabular/detail-group-view/detail-group-view.component.mjs +1583 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/tabular/resize-column-directive.mjs +70 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/tabular/row-group-view/row-group-view.component.mjs +1837 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/tabular/tabular.component.mjs +756 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/tabular-report.component.mjs +156 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/tabular-report.mjs +245 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/tabular-report.service.mjs +960 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/tabular.mjs +196 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/value-formatting.mjs +9 -0
- package/esm2020/lib/enlighten-lib/report-control.service.mjs +41 -0
- package/esm2020/lib/enlighten-lib/utils/utils.mjs +26 -0
- package/esm2020/lib/field-list-lib/fields-list.service.mjs +299 -0
- package/esm2020/lib/filters/calender-filter/calender-filter.component.mjs +351 -0
- package/esm2020/lib/filters/category-filter/category-filter.component.mjs +207 -0
- package/esm2020/lib/filters/category-filter/category-filter.service.mjs +31 -0
- package/esm2020/lib/filters/category-filter/category.service.mjs +45 -0
- package/esm2020/lib/filters/choice-list-filter/choice-list-filter.component.mjs +178 -0
- package/esm2020/lib/filters/choice-list-filter/choice-list-filter.service.mjs +53 -0
- package/esm2020/lib/filters/common-filter/common-filter.component.mjs +310 -0
- package/esm2020/lib/filters/common-filter/common-filter.service.mjs +106 -0
- package/esm2020/lib/filters/custom-scroll-directives.mjs +45 -0
- package/esm2020/lib/filters/date-time-filter/date-time-filter.component.mjs +345 -0
- package/esm2020/lib/filters/filter-footer/filter-footer.component.mjs +62 -0
- package/esm2020/lib/filters/filters.component.mjs +688 -0
- package/esm2020/lib/filters/filters.module.mjs +196 -0
- package/esm2020/lib/filters/filters.service.mjs +147 -0
- package/esm2020/lib/filters/meta-column-filter-builder/meta-column-filter-builder.service.mjs +202 -0
- package/esm2020/lib/filters/metaColumnTypes.mjs +36 -0
- package/esm2020/lib/filters/multi-select-filter/multi-select-filter.component.mjs +211 -0
- package/esm2020/lib/filters/multi-select-filter/multi-select-filter.service.mjs +214 -0
- package/esm2020/lib/filters/number-filter/number-filter.component.mjs +321 -0
- package/esm2020/lib/filters/public-api.mjs +15 -0
- package/esm2020/lib/filters/reference-list-filter/reference-list-filter.component.mjs +180 -0
- package/esm2020/lib/filters/reference-list-filter/reference-list-filter.service.mjs +151 -0
- package/esm2020/lib/filters/single-select-filter/single-select-filter.component.mjs +177 -0
- package/esm2020/lib/filters/time-filter/time-filter.component.mjs +301 -0
- package/esm2020/lib/filters/user-filter/user-filter.component.mjs +178 -0
- package/esm2020/lib/filters/user-filter/user-filter.service.mjs +62 -0
- package/esm2020/lib/form-object/form-object-list/form-object-list-filter/form-object-list-filter.component.mjs +346 -0
- package/esm2020/lib/form-object/form-object-list/form-object-list-filter/form-object-list-filter.service.mjs +105 -0
- package/esm2020/lib/form-object/form-object-list/form-object-list-header/form-object-list-header.component.mjs +41 -0
- package/esm2020/lib/form-object/form-object-list/form-object-list-header/widget-header-type-handler.mjs +10 -0
- package/esm2020/lib/form-object/form-object-list/form-object-list-header/widgets/text-box-header/text-box-header.component.mjs +21 -0
- package/esm2020/lib/form-object/form-object-list/form-object-list-header/widgets-header.directive.mjs +16 -0
- package/esm2020/lib/form-object/form-object-list/form-object-list.component.mjs +823 -0
- package/esm2020/lib/form-object/form-object-list/form-object-list.mjs +211 -0
- package/esm2020/lib/form-object/form-object-list/form-object-list.module.mjs +224 -0
- package/esm2020/lib/form-object/form-object-list/form-object-list.service.mjs +171 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/form-object-value-handler.mjs +94 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/form-object-value.directive.mjs +16 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/form-object-widget-value.component.mjs +60 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-apply-geo-fence-value/formobject-apply-geo-fence-value.component.mjs +33 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-audio-value/formobject-audio-value.component.mjs +40 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-auto-number-value/formobject-auto-number-value.component.mjs +31 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-bar-code-value/formobject-bar-code-value.component.mjs +98 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-child-records-value/formobject-child-records-value.component.mjs +86 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-choicelist-value/formobject-choicelist-value.component.mjs +180 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-counter-value/formobject-counter-value.component.mjs +45 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-date-time-value/formobject-date-time-value.component.mjs +54 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-document-value/formobject-document-value.component.mjs +163 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-formula-value/formobject-formula-value.component.mjs +45 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-geo-fence-value/formobject-geo-fence-value.component.mjs +61 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-gps-value/formobject-gps-value.component.mjs +64 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-group-header-value/formobject-group-header-value.component.mjs +21 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-image-value/formobject-image-value.component.mjs +119 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-languages-value/formobject-languages-value.component.mjs +37 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-payment-value/formobject-payment-value.component.mjs +21 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-qr-code-value/formobject-qr-code-value.component.mjs +98 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-signature-value/formobject-signature-value.component.mjs +60 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-static-media-value/formobject-static-media-value.component.mjs +62 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-stop-watch-value/formobject-stop-watch-value.component.mjs +24 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-sub-form-value/formobject-sub-form-value.component.mjs +19 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-textbox-value/formobject-textbox-value.component.mjs +49 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-time-stamp-value/formobject-time-stamp-value.component.mjs +50 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-toggle-value/formobject-toggle-value.component.mjs +25 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-unique-id-value/formobject-unique-id-value.component.mjs +33 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-verification-value/formobject-verification-value.component.mjs +60 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-video-value/formobject-video-value.component.mjs +65 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-web-link-value/formobject-web-link-value.component.mjs +28 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-widget-mat-dialog/formobject-widget-mat-dialog.component.mjs +89 -0
- package/esm2020/lib/form-object/form-object-view/data-detail-view-dto.mjs +55 -0
- package/esm2020/lib/form-object/form-object-view/dynamic-view/dynamic-view.component.mjs +85 -0
- package/esm2020/lib/form-object/form-object-view/dynamic-view/dynamic-view.directive.mjs +16 -0
- package/esm2020/lib/form-object/form-object-view/form-object-view.component.mjs +209 -0
- package/esm2020/lib/form-object/form-object-view/form-object-view.module.mjs +273 -0
- package/esm2020/lib/form-object/form-object-view/form-object-view.service.mjs +268 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/apply-geo-fence-widget-view/apply-geo-fence-widget-view.component.mjs +83 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/audio-widget-view/audio-widget-view.component.mjs +92 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/auto-number-widget-view/auto-number-widget-view.component.mjs +68 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/bar-code-widget-view/bar-code-widget-view.component.mjs +155 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/child-records-widget-view/child-records-widget-view.component.mjs +158 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/choice-list-widget-view/choice-list-widget-view.component.mjs +248 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/counter-widget-view/counter-widget-view.component.mjs +93 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/date-time-widget-view/date-time-widget-view.component.mjs +179 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/document-widget-view/document-widget-view.component.mjs +210 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/form-object-widget-type-handler.mjs +93 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/form-object-widgets-view.component.mjs +58 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/form-object-widgets-view.directive.mjs +16 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/formula-widget-view/formula-widget-view.component.mjs +76 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/geo-fence-widget-view/geo-fence-widget-view.component.mjs +89 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/gps-widget-view/gps-widget-view.component.mjs +263 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/group-header-widget-view/group-header-widget-view.component.mjs +17 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/image-widget-view/image-annotation-data-dto.mjs +335 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/image-widget-view/image-map-view/image-map-view.component.mjs +270 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/image-widget-view/image-widget-lightbox-view/image-widget-lightbox-view.component.mjs +498 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/image-widget-view/image-widget-view.component.mjs +203 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/language-widget-view/language-widget-view.component.mjs +70 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/payment-widget-view/payment-widget-view.component.mjs +21 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/qr-code-widget-view/qr-code-widget-view.component.mjs +146 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/signature-widget-view/signature-widget-view.component.mjs +92 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/static-media-widget-view/static-media-widget-view.component.mjs +84 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/stop-watch-widget-view/stop-watch-widget-view.component.mjs +82 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/sub-form-widget-view/sub-form-widget-view.component.mjs +93 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/text-box-widget-view/text-box-widget-view.component.mjs +144 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/time-stamp-widget-view/time-stamp-widget-view.component.mjs +95 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/toggle-widget-view/toggle-widget-view.component.mjs +83 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/unique-id-widget-view/unique-id-widget-view.component.mjs +82 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/verification-widget-view/verification-widget-view.component.mjs +79 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/video-widget-view/video-widget-view.component.mjs +113 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/web-link-widget-view/web-link-widget-view.component.mjs +89 -0
- package/esm2020/lib/form-object/form-object-view/meta-section/meta-section.component.mjs +157 -0
- package/esm2020/lib/form-object/form-object-view/section/section.component.mjs +75 -0
- package/esm2020/lib/form-object/form-object-view/section-field/section-field.component.mjs +30 -0
- package/esm2020/lib/form-object/form-object-view/section-view/section-view.component.mjs +110 -0
- package/esm2020/lib/form-object/public-api.mjs +3 -0
- package/esm2020/lib/form-permission.service.mjs +106 -0
- package/esm2020/lib/forms/ax-form.mjs +212 -0
- package/esm2020/lib/forms/iform.mjs +2 -0
- package/esm2020/lib/forms/page/common/axo-response-status.mjs +6 -0
- package/esm2020/lib/forms/page/common/constants.mjs +399 -0
- package/esm2020/lib/forms/page/common/detail-view-enums.mjs +8 -0
- package/esm2020/lib/forms/page/common/flatten-status-enum.mjs +10 -0
- package/esm2020/lib/forms/page/common/form.constant.mjs +87 -0
- package/esm2020/lib/forms/page/common/property-panel-field.mjs +5 -0
- package/esm2020/lib/forms/page/common/widget-enums.mjs +269 -0
- package/esm2020/lib/forms/page/common/widget-value-handler.mjs +321 -0
- package/esm2020/lib/forms/page/data-detail-view/ax-section.mjs +51 -0
- package/esm2020/lib/forms/page/data-detail-view/collection-view.mjs +30 -0
- package/esm2020/lib/forms/page/data-detail-view/data-details.mjs +60 -0
- package/esm2020/lib/forms/page/data-detail-view/section-field.mjs +32 -0
- package/esm2020/lib/forms/page/data-detail-view/section.mjs +33 -0
- package/esm2020/lib/forms/page/data-list/data-list-column.mjs +45 -0
- package/esm2020/lib/forms/page/data-list/data-list.mjs +64 -0
- package/esm2020/lib/forms/page/form-object.mjs +17 -0
- package/esm2020/lib/forms/page/form-page.mjs +28 -0
- package/esm2020/lib/forms/page/value-converters/displayMode-to-bool.mjs +16 -0
- package/esm2020/lib/forms/page/value-converters/form-type-converter.mjs +23 -0
- package/esm2020/lib/forms/page/value-converters/geo-fence-value-converter.mjs +24 -0
- package/esm2020/lib/forms/page/value-converters/image-annotation-value-converter.mjs +20 -0
- package/esm2020/lib/forms/page/value-converters/language-source-value-converter.mjs +24 -0
- package/esm2020/lib/forms/page/value-converters/list-view-title-converter.mjs +20 -0
- package/esm2020/lib/forms/page/value-converters/parse-float-converter.mjs +15 -0
- package/esm2020/lib/forms/page/value-converters/parse-int-converter.mjs +20 -0
- package/esm2020/lib/forms/page/value-converters/parse-string-converter.mjs +20 -0
- package/esm2020/lib/forms/page/value-converters/publicUrls-string-to-array.mjs +20 -0
- package/esm2020/lib/forms/page/value-converters/record-limit-type-converter.mjs +23 -0
- package/esm2020/lib/forms/page/value-converters/restriction-mode-converter.mjs +23 -0
- package/esm2020/lib/forms/page/value-converters/string-to-bool-converter.mjs +16 -0
- package/esm2020/lib/forms/page/value-converters/string-to-bool-value-converter.mjs +16 -0
- package/esm2020/lib/forms/page/value-converters/string-to-date-time-converter.mjs +19 -0
- package/esm2020/lib/forms/page/value-converters/string-to-number -converter.mjs +20 -0
- package/esm2020/lib/forms/page/value-converters/textBox-mask-converter.mjs +16 -0
- package/esm2020/lib/forms/page/value-converters/validate-converter.mjs +20 -0
- package/esm2020/lib/forms/page/value-converters/value-without-mask-converter.mjs +20 -0
- package/esm2020/lib/forms/page/value-converters/widget-concrete-class-converter.mjs +22 -0
- package/esm2020/lib/forms/page/value-converters/widget-deserializer.mjs +149 -0
- package/esm2020/lib/forms/page/widgets/apply-geofences.mjs +65 -0
- package/esm2020/lib/forms/page/widgets/auto-number.mjs +87 -0
- package/esm2020/lib/forms/page/widgets/ax-audio.mjs +154 -0
- package/esm2020/lib/forms/page/widgets/ax-document.mjs +149 -0
- package/esm2020/lib/forms/page/widgets/ax-image.mjs +183 -0
- package/esm2020/lib/forms/page/widgets/bar-code.mjs +212 -0
- package/esm2020/lib/forms/page/widgets/child-record.mjs +193 -0
- package/esm2020/lib/forms/page/widgets/choicelist.mjs +375 -0
- package/esm2020/lib/forms/page/widgets/counter.mjs +69 -0
- package/esm2020/lib/forms/page/widgets/datetime.mjs +247 -0
- package/esm2020/lib/forms/page/widgets/formula.mjs +106 -0
- package/esm2020/lib/forms/page/widgets/geofence.mjs +127 -0
- package/esm2020/lib/forms/page/widgets/gps.mjs +192 -0
- package/esm2020/lib/forms/page/widgets/group-header.mjs +200 -0
- package/esm2020/lib/forms/page/widgets/languages.mjs +129 -0
- package/esm2020/lib/forms/page/widgets/link.mjs +107 -0
- package/esm2020/lib/forms/page/widgets/payment.mjs +104 -0
- package/esm2020/lib/forms/page/widgets/qr-code.mjs +129 -0
- package/esm2020/lib/forms/page/widgets/script-condition.mjs +115 -0
- package/esm2020/lib/forms/page/widgets/signature.mjs +81 -0
- package/esm2020/lib/forms/page/widgets/static-media.mjs +130 -0
- package/esm2020/lib/forms/page/widgets/stopwatch.mjs +117 -0
- package/esm2020/lib/forms/page/widgets/sub-form.mjs +114 -0
- package/esm2020/lib/forms/page/widgets/textbox.mjs +338 -0
- package/esm2020/lib/forms/page/widgets/timestamp.mjs +155 -0
- package/esm2020/lib/forms/page/widgets/toggle.mjs +115 -0
- package/esm2020/lib/forms/page/widgets/unique-id.mjs +75 -0
- package/esm2020/lib/forms/page/widgets/verification.mjs +207 -0
- package/esm2020/lib/forms/page/widgets/video.mjs +151 -0
- package/esm2020/lib/forms/page/widgets/widget-value/apply-geo-fence-widget-value.mjs +74 -0
- package/esm2020/lib/forms/page/widgets/widget-value/audio-video-widget-value.mjs +36 -0
- package/esm2020/lib/forms/page/widgets/widget-value/child-record-value.mjs +114 -0
- package/esm2020/lib/forms/page/widgets/widget-value/choice-list-options.mjs +84 -0
- package/esm2020/lib/forms/page/widgets/widget-value/choices-ml.mjs +107 -0
- package/esm2020/lib/forms/page/widgets/widget-value/dateRangeValue.mjs +38 -0
- package/esm2020/lib/forms/page/widgets/widget-value/deviceProfileParams.mjs +9 -0
- package/esm2020/lib/forms/page/widgets/widget-value/deviceProfilesTemp.mjs +72 -0
- package/esm2020/lib/forms/page/widgets/widget-value/document-widget-value.mjs +56 -0
- package/esm2020/lib/forms/page/widgets/widget-value/geo-fence-location-value.mjs +54 -0
- package/esm2020/lib/forms/page/widgets/widget-value/geo-fence-widget-value.mjs +50 -0
- package/esm2020/lib/forms/page/widgets/widget-value/gps-widget-value.mjs +58 -0
- package/esm2020/lib/forms/page/widgets/widget-value/image-widget-value.mjs +99 -0
- package/esm2020/lib/forms/page/widgets/widget-value/language-widget-value.mjs +43 -0
- package/esm2020/lib/forms/page/widgets/widget-value/location-object-value.mjs +44 -0
- package/esm2020/lib/forms/page/widgets/widget-value/multiple-languages.mjs +106 -0
- package/esm2020/lib/forms/page/widgets/widget-value/reference-list-object-value.mjs +72 -0
- package/esm2020/lib/forms/page/widgets/widget-value/verification-widget-value.mjs +126 -0
- package/esm2020/lib/forms/page/widgets/widget.mjs +429 -0
- package/esm2020/lib/ghost-loader/ghost-loader.component.mjs +708 -0
- package/esm2020/lib/ghost-loader/ghost-loader.module.mjs +27 -0
- package/esm2020/lib/ghost-loader/public-api.mjs +3 -0
- package/esm2020/lib/map-dialog/map-dialog.component.mjs +46 -0
- package/esm2020/lib/map-dialog/map-dialog.module.mjs +39 -0
- package/esm2020/lib/map-dialog/public-api.mjs +6 -0
- package/esm2020/lib/reports-container/public-api.mjs +8 -0
- package/esm2020/lib/reports-container/report-group/report-group.component.mjs +77 -0
- package/esm2020/lib/reports-container/reports-container-models/report-group.mjs +42 -0
- package/esm2020/lib/reports-container/reports-container-models/report-property.mjs +30 -0
- package/esm2020/lib/reports-container/reports-container-models/reports-container-enums.mjs +16 -0
- package/esm2020/lib/reports-container/reports-container-models/reports-container.mjs +29 -0
- package/esm2020/lib/reports-container/reports-container.component.mjs +60 -0
- package/esm2020/lib/reports-container/reports-container.module.mjs +52 -0
- package/esm2020/lib/reports-container/reports-container.service.mjs +29 -0
- package/esm2020/lib/scrollbar/index.mjs +3 -0
- package/esm2020/lib/scrollbar/public-api.mjs +3 -0
- package/esm2020/lib/scrollbar/scrollbar.directive.mjs +351 -0
- package/esm2020/lib/scrollbar/scrollbar.module.mjs +21 -0
- package/esm2020/lib/scrollbar/scrollbar.types.mjs +15 -0
- package/esm2020/lib/sculptor-lib/widgets/audio/audio.component.mjs +115 -0
- package/esm2020/lib/sculptor-lib/widgets/barcode/barcode.component.mjs +118 -0
- package/esm2020/lib/sculptor-lib/widgets/child-record/child-record.component.mjs +115 -0
- package/esm2020/lib/sculptor-lib/widgets/choice-list/choice-list.component.mjs +105 -0
- package/esm2020/lib/sculptor-lib/widgets/date-time/date-time.component.mjs +136 -0
- package/esm2020/lib/sculptor-lib/widgets/document/document.component.mjs +118 -0
- package/esm2020/lib/sculptor-lib/widgets/geofence/geofence.component.mjs +115 -0
- package/esm2020/lib/sculptor-lib/widgets/gps/gps.component.mjs +115 -0
- package/esm2020/lib/sculptor-lib/widgets/group-header/group-header.component.mjs +109 -0
- package/esm2020/lib/sculptor-lib/widgets/image/image.component.mjs +131 -0
- package/esm2020/lib/sculptor-lib/widgets/language/language.component.mjs +105 -0
- package/esm2020/lib/sculptor-lib/widgets/link/link.component.mjs +115 -0
- package/esm2020/lib/sculptor-lib/widgets/qr-code/qr-code.component.mjs +118 -0
- package/esm2020/lib/sculptor-lib/widgets/stopwatch/stopwatch.component.mjs +105 -0
- package/esm2020/lib/sculptor-lib/widgets/subform/subform.component.mjs +109 -0
- package/esm2020/lib/sculptor-lib/widgets/textbox/textbox.component.mjs +177 -0
- package/esm2020/lib/sculptor-lib/widgets/timestamp/timestamp.component.mjs +115 -0
- package/esm2020/lib/sculptor-lib/widgets/toggle/toggle.component.mjs +112 -0
- package/esm2020/lib/sculptor-lib/widgets/video/video.component.mjs +118 -0
- package/esm2020/lib/sculptor-lib/widgets/widgets.service.mjs +58 -0
- package/esm2020/lib/shared/comfirmation-modal/confirmation-modal.component.mjs +63 -0
- package/esm2020/lib/shared/conditional-formatting/conditional-formatting/conditional-formatting.component.mjs +83 -0
- package/esm2020/lib/shared/shared.module.mjs +51 -0
- package/esm2020/public-api.mjs +138 -0
- package/fesm2015/ax-common-ui-lib.mjs +56598 -0
- package/fesm2015/ax-common-ui-lib.mjs.map +1 -0
- package/fesm2020/ax-common-ui-lib.mjs +52373 -0
- package/fesm2020/ax-common-ui-lib.mjs.map +1 -0
- package/lib/app-list/app-list-dto.d.ts +15 -0
- package/lib/app-list/app-list.component.d.ts +62 -0
- package/lib/app-list/my-app-list.service.d.ts +69 -0
- package/lib/app-list/organization-list-dto.d.ts +15 -0
- package/lib/ax-app-common-lib.component.d.ts +8 -0
- package/lib/ax-app-common-lib.module.d.ts +24 -0
- package/lib/ax-app-common-lib.service.d.ts +6 -0
- package/lib/axo-filters/axo-filters.component.d.ts +86 -0
- package/lib/axo-filters/axo-filters.module.d.ts +16 -0
- package/lib/axo-filters/axo-filters.service.d.ts +36 -0
- package/lib/axo-map/axo-map.component.d.ts +9 -0
- package/lib/axo-map/axo-map.d.ts +14 -0
- package/lib/axo-map/axo-map.module.d.ts +10 -0
- package/lib/axo-map/public-api.d.ts +6 -0
- package/lib/axo-search-bar/axo-search-bar.component.d.ts +21 -0
- package/lib/axo-search-bar/axo-search-bar.module.d.ts +10 -0
- package/lib/axo-search-bar/public.api.d.ts +2 -0
- package/lib/axo-snack-bar/axo-snack-bar.component.d.ts +20 -0
- package/lib/axo-snack-bar/axo-snack-bar.module.d.ts +9 -0
- package/lib/axo-snack-bar/axo-snack-bar.service.d.ts +16 -0
- package/lib/axo-snack-bar/public-api.d.ts +2 -0
- package/lib/axo-state-manager/axo-state-manager.module.d.ts +7 -0
- package/lib/axo-state-manager/axo-state-manager.service.d.ts +15 -0
- package/lib/axo-state-manager/public-api.d.ts +2 -0
- package/lib/axo-utils/axo-utils.d.ts +72 -0
- package/lib/axo-utils/axo-utils.module.d.ts +10 -0
- package/lib/axo-utils/constants.d.ts +2 -0
- package/lib/axo-utils/data-source-types.d.ts +10 -0
- package/lib/axo-utils/field-list-search-pipe.d.ts +7 -0
- package/lib/axo-utils/filter-search-pipe.d.ts +7 -0
- package/lib/axo-utils/public-api.d.ts +1 -0
- package/lib/axo-utils/search-pipe/choice-search.pipe.d.ts +7 -0
- package/lib/axo-utils/search-pipe.d.ts +7 -0
- package/lib/bread-crumbs/bread-crumbs.component.d.ts +48 -0
- package/lib/bread-crumbs/bread-crumbs.module.d.ts +9 -0
- package/lib/bread-crumbs/bread-crumbs.service.d.ts +76 -0
- package/lib/code-editor/code-editor-modes.d.ts +9 -0
- package/lib/code-editor/code-editor-themes.d.ts +6 -0
- package/lib/code-editor/code-editor.component.d.ts +20 -0
- package/lib/code-editor/code-editor.module.d.ts +10 -0
- package/lib/code-editor/icode-editor-options.d.ts +51 -0
- package/lib/code-editor/public-api.d.ts +2 -0
- package/lib/common-dto/attributes-dto.d.ts +24 -0
- package/lib/common-dto/dashboard-dto.d.ts +10 -0
- package/lib/common-dto/dataListFilter-dto.d.ts +10 -0
- package/lib/common-dto/elements-dto.d.ts +51 -0
- package/lib/common-dto/form-dto.d.ts +17 -0
- package/lib/common-lib-configuration.service.d.ts +13 -0
- package/lib/common-property-panel/properties/properties.service.d.ts +18 -0
- package/lib/common-utils/entity-base.d.ts +10 -0
- package/lib/common-utils/iFlatten.d.ts +13 -0
- package/lib/common-utils/report.d.ts +26 -0
- package/lib/common.service.d.ts +50 -0
- package/lib/converters/convert-to-new-service.d.ts +6 -0
- package/lib/converters/convert-to-old-service.d.ts +26 -0
- package/lib/core/auth/auth.service.d.ts +75 -0
- package/lib/core/core.module.d.ts +12 -0
- package/lib/core/icons/icons.module.d.ts +14 -0
- package/lib/core/transloco/transloco.http-loader.d.ts +19 -0
- package/lib/core/transloco/transloco.module.d.ts +7 -0
- package/lib/core/user/axo-user.d.ts +9 -0
- package/lib/core/user/user-data.service.d.ts +25 -0
- package/lib/core/user/user.service.d.ts +45 -0
- package/lib/core/user/user.types.d.ts +9 -0
- package/lib/dashboard-lib/dashboard-builder.service.d.ts +27 -0
- package/lib/dashboard-lib/dashboard-control.service.d.ts +31 -0
- package/lib/dashboard-lib/dashboard-element/dashboard-element.d.ts +9 -0
- package/lib/dashboard-lib/dashboard-element-property/dashboard-property/dashboard-element-property.d.ts +7 -0
- package/lib/dashboard-lib/dashboard-filter/dashboard-filter.component.d.ts +37 -0
- package/lib/dashboard-lib/dashboard-lib.module.d.ts +26 -0
- package/lib/dashboard-lib/dashboard-list.service.d.ts +24 -0
- package/lib/dashboard-lib/dashboard.d.ts +14 -0
- package/lib/dashboard-lib/send-to-dashboard.service.d.ts +39 -0
- package/lib/dashboard-lib/show-dashboards/show-dashboards.component.d.ts +53 -0
- package/lib/dashboard-lib/show-dashboards/show-dashboards.service.d.ts +11 -0
- package/lib/data-view-lib/data-view/axo-card.d.ts +11 -0
- package/lib/data-view-lib/data-view/axo-tag.d.ts +26 -0
- package/lib/data-view-lib/data-view/board-column.d.ts +12 -0
- package/lib/data-view-lib/data-view/board-view.d.ts +23 -0
- package/lib/data-view-lib/data-view/cardConfig.d.ts +11 -0
- package/lib/data-view-lib/data-view/conditional-formatting.d.ts +11 -0
- package/lib/data-view-lib/data-view/coordinate.d.ts +8 -0
- package/lib/data-view-lib/data-view/data-view-enums.d.ts +58 -0
- package/lib/data-view-lib/data-view/data-view-filter.d.ts +25 -0
- package/lib/data-view-lib/data-view/data-view.d.ts +33 -0
- package/lib/data-view-lib/data-view/idata-view.d.ts +7 -0
- package/lib/data-view-lib/data-view/image-style.d.ts +8 -0
- package/lib/data-view-lib/data-view/info-window.d.ts +10 -0
- package/lib/data-view-lib/data-view/location.d.ts +8 -0
- package/lib/data-view-lib/data-view/map-view.d.ts +21 -0
- package/lib/data-view-lib/data-view/prefix-style.d.ts +12 -0
- package/lib/data-view-lib/data-view/tag-style.d.ts +12 -0
- package/lib/data-view-lib/data-view/tagConfig.d.ts +34 -0
- package/lib/data-view-lib/data-view/task-asset-form-object-dto.d.ts +19 -0
- package/lib/data-view-lib/data-view/task-column-value.d.ts +48 -0
- package/lib/data-view-lib/data-view/task-view.d.ts +15 -0
- package/lib/data-view-lib/data-view/task.d.ts +57 -0
- package/lib/data-view-lib/data-view/value-style.d.ts +10 -0
- package/lib/data-view-lib/data-view-filters/data-view-filters.component.d.ts +142 -0
- package/lib/data-view-lib/data-view-filters/data-view-filters.service.d.ts +28 -0
- package/lib/data-view-lib/data-view-header/data-view-header.component.d.ts +85 -0
- package/lib/data-view-lib/data-view-lib.module.d.ts +19 -0
- package/lib/data-view-lib/data-view.service.d.ts +94 -0
- package/lib/data-view-lib/public-api.d.ts +27 -0
- package/lib/directive/adjust-font-size.d.ts +13 -0
- package/lib/drill-through/drill-through.component.d.ts +53 -0
- package/lib/drill-through/drill-through.module.d.ts +10 -0
- package/lib/drill-through/drill-through.resolver.d.ts +30 -0
- package/lib/drill-through/drill-through.service.d.ts +100 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-column.d.ts +17 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-date-list.d.ts +16 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-date-range-value.d.ts +17 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-date-range.d.ts +16 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-date-time-list.d.ts +16 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-date-time-range-value.d.ts +17 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-date-time-range.d.ts +16 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-date-time.d.ts +16 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-date-value.d.ts +16 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-number-list.d.ts +16 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-number-range-value.d.ts +17 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-number-value.d.ts +16 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-text-list.d.ts +16 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-text.d.ts +16 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-time-list.d.ts +16 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-time-range-value.d.ts +17 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-time-range.d.ts +17 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-time.d.ts +16 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-toggle.d.ts +16 -0
- package/lib/enlighten-lib/ax-expression/ax-expression-value.d.ts +19 -0
- package/lib/enlighten-lib/ax-expression/ax-expression.d.ts +66 -0
- package/lib/enlighten-lib/ax-expression/ax-number-range.d.ts +16 -0
- package/lib/enlighten-lib/ax-expression/exp-sub-type.d.ts +26 -0
- package/lib/enlighten-lib/ax-expression/public-api.d.ts +23 -0
- package/lib/enlighten-lib/data-model/attribute.d.ts +60 -0
- package/lib/enlighten-lib/data-model/data-model.d.ts +32 -0
- package/lib/enlighten-lib/data-model/dependee.d.ts +11 -0
- package/lib/enlighten-lib/data-model/dependent.d.ts +11 -0
- package/lib/enlighten-lib/data-model/entity.d.ts +31 -0
- package/lib/enlighten-lib/data-model-tree/attributes-dragdrop-layout/attributes-dragdrop-layout.component.d.ts +23 -0
- package/lib/enlighten-lib/data-model-tree/attributes-selection-layout/attributes-selection-layout.component.d.ts +24 -0
- package/lib/enlighten-lib/data-model-tree/categories-tree/categories-tree.component.d.ts +25 -0
- package/lib/enlighten-lib/data-model-tree/data-model-tree-enums.d.ts +4 -0
- package/lib/enlighten-lib/data-model-tree/data-model-tree.component.d.ts +67 -0
- package/lib/enlighten-lib/data-model-tree/data-model-tree.module.d.ts +18 -0
- package/lib/enlighten-lib/elements/Property.d.ts +3 -0
- package/lib/enlighten-lib/elements/ax-element.d.ts +31 -0
- package/lib/enlighten-lib/elements/element-factory.d.ts +13 -0
- package/lib/enlighten-lib/enlighten-lib.module.d.ts +53 -0
- package/lib/enlighten-lib/enums/bread-crumbs-style.d.ts +4 -0
- package/lib/enlighten-lib/enums/operator-text-enum.d.ts +9 -0
- package/lib/enlighten-lib/fields/attribute-data.d.ts +55 -0
- package/lib/enlighten-lib/fields/entity.d.ts +15 -0
- package/lib/enlighten-lib/fields/types/ax-audio.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ax-barcode.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ax-childrecord.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ax-counter.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ax-date.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ax-decimal.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ax-document.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ax-file.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ax-image.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ax-location.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ax-number.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ax-qrcode.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ax-signature.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ax-staticmedia.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ax-text.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ax-time.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ax-uniqueid.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/axo-timestamp.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/choicelist.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/datetime.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/hyperlink.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ienlighten-type.d.ts +3 -0
- package/lib/enlighten-lib/fields/types/toggle.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/video.d.ts +4 -0
- package/lib/enlighten-lib/filters/ax-filter.d.ts +38 -0
- package/lib/enlighten-lib/filters/ax-operator.d.ts +40 -0
- package/lib/enlighten-lib/filters/chart-filter-type.d.ts +5 -0
- package/lib/enlighten-lib/filters/condition-type.d.ts +43 -0
- package/lib/enlighten-lib/filters/dataList-searchNode.d.ts +27 -0
- package/lib/enlighten-lib/filters/dataListFilterExpression.d.ts +20 -0
- package/lib/enlighten-lib/filters/dataListFilterOperator.d.ts +29 -0
- package/lib/enlighten-lib/filters/dataListSeachQueryTree.d.ts +15 -0
- package/lib/enlighten-lib/filters/filter-category.d.ts +43 -0
- package/lib/enlighten-lib/filters/general-filter-type.d.ts +10 -0
- package/lib/enlighten-lib/filters/gridster-properties.d.ts +17 -0
- package/lib/enlighten-lib/filters/iax-filter.d.ts +7 -0
- package/lib/enlighten-lib/filters/search-node.d.ts +27 -0
- package/lib/enlighten-lib/filters/static-widget.d.ts +2 -0
- package/lib/enlighten-lib/property/element-property.d.ts +8 -0
- package/lib/enlighten-lib/property/filter-category-property.d.ts +6 -0
- package/lib/enlighten-lib/property/filter-property.d.ts +6 -0
- package/lib/enlighten-lib/report/chart-filter/chart-filter.component.d.ts +78 -0
- package/lib/enlighten-lib/report/element.service.d.ts +61 -0
- package/lib/enlighten-lib/report/graphical-report/bar-chart/bar-chart.component.d.ts +259 -0
- package/lib/enlighten-lib/report/graphical-report/bar-chart/bar-chart.d.ts +52 -0
- package/lib/enlighten-lib/report/graphical-report/bar-chart/bar-chart.service.d.ts +9 -0
- package/lib/enlighten-lib/report/graphical-report/card-chart/card-chart.component.d.ts +177 -0
- package/lib/enlighten-lib/report/graphical-report/card-chart/card-chart.d.ts +29 -0
- package/lib/enlighten-lib/report/graphical-report/card-chart/card-chart.service.d.ts +9 -0
- package/lib/enlighten-lib/report/graphical-report/chart/border.d.ts +13 -0
- package/lib/enlighten-lib/report/graphical-report/chart/chart-factory.d.ts +7 -0
- package/lib/enlighten-lib/report/graphical-report/chart/chart-property.d.ts +5 -0
- package/lib/enlighten-lib/report/graphical-report/chart/chart-type.d.ts +16 -0
- package/lib/enlighten-lib/report/graphical-report/chart/chart.d.ts +41 -0
- package/lib/enlighten-lib/report/graphical-report/chart/common-chart.service.d.ts +13 -0
- package/lib/enlighten-lib/report/graphical-report/chart/conditional-formatting.d.ts +6 -0
- package/lib/enlighten-lib/report/graphical-report/chart/dimension.d.ts +6 -0
- package/lib/enlighten-lib/report/graphical-report/chart/font.d.ts +13 -0
- package/lib/enlighten-lib/report/graphical-report/chart/fontStyle.d.ts +13 -0
- package/lib/enlighten-lib/report/graphical-report/chart/label.d.ts +6 -0
- package/lib/enlighten-lib/report/graphical-report/chart/legend.d.ts +13 -0
- package/lib/enlighten-lib/report/graphical-report/chart/matrix.d.ts +11 -0
- package/lib/enlighten-lib/report/graphical-report/chart/shadow.d.ts +5 -0
- package/lib/enlighten-lib/report/graphical-report/chart/style.d.ts +12 -0
- package/lib/enlighten-lib/report/graphical-report/chart/text-style.d.ts +17 -0
- package/lib/enlighten-lib/report/graphical-report/chart/title.d.ts +11 -0
- package/lib/enlighten-lib/report/graphical-report/graphical-report.component.d.ts +130 -0
- package/lib/enlighten-lib/report/graphical-report/graphical-report.directive.d.ts +8 -0
- package/lib/enlighten-lib/report/graphical-report/ichart-component.d.ts +6 -0
- package/lib/enlighten-lib/report/graphical-report/igraphical-report.component.d.ts +21 -0
- package/lib/enlighten-lib/report/graphical-report/line-chart/line-chart.component.d.ts +215 -0
- package/lib/enlighten-lib/report/graphical-report/line-chart/line-chart.d.ts +34 -0
- package/lib/enlighten-lib/report/graphical-report/line-chart/line-chart.service.d.ts +9 -0
- package/lib/enlighten-lib/report/graphical-report/page/page.d.ts +25 -0
- package/lib/enlighten-lib/report/graphical-report/pie-chart/pie-chart.component.d.ts +220 -0
- package/lib/enlighten-lib/report/graphical-report/pie-chart/pie-chart.d.ts +38 -0
- package/lib/enlighten-lib/report/graphical-report/pie-chart/pie-chart.service.d.ts +9 -0
- package/lib/enlighten-lib/report/graphical-report/text/text-chart.d.ts +19 -0
- package/lib/enlighten-lib/report/graphical-report/text/text.component.d.ts +72 -0
- package/lib/enlighten-lib/report/graphical-report/text/text.service.d.ts +9 -0
- package/lib/enlighten-lib/report/iproperty.component.d.ts +14 -0
- package/lib/enlighten-lib/report/ireport.d.ts +14 -0
- package/lib/enlighten-lib/report/report-builder-master.service.d.ts +42 -0
- package/lib/enlighten-lib/report/report-filter/report-filter.component.d.ts +117 -0
- package/lib/enlighten-lib/report/report-filter/report-filter.module.d.ts +19 -0
- package/lib/enlighten-lib/report/report-filter/report-filter.service.d.ts +102 -0
- package/lib/enlighten-lib/report/tabular-report/aggregate.d.ts +8 -0
- package/lib/enlighten-lib/report/tabular-report/axo-percentage.pipe.d.ts +7 -0
- package/lib/enlighten-lib/report/tabular-report/column-style.d.ts +5 -0
- package/lib/enlighten-lib/report/tabular-report/itabular-report.component.d.ts +16 -0
- package/lib/enlighten-lib/report/tabular-report/orderby-type.d.ts +5 -0
- package/lib/enlighten-lib/report/tabular-report/row-style.d.ts +5 -0
- package/lib/enlighten-lib/report/tabular-report/table-style.d.ts +21 -0
- package/lib/enlighten-lib/report/tabular-report/tabular/column-group-view/column-group-view.component.d.ts +124 -0
- package/lib/enlighten-lib/report/tabular-report/tabular/detail-group-view/detail-group-view.component.d.ts +242 -0
- package/lib/enlighten-lib/report/tabular-report/tabular/resize-column-directive.d.ts +21 -0
- package/lib/enlighten-lib/report/tabular-report/tabular/row-group-view/row-group-view.component.d.ts +190 -0
- package/lib/enlighten-lib/report/tabular-report/tabular/tabular.component.d.ts +177 -0
- package/lib/enlighten-lib/report/tabular-report/tabular-report.component.d.ts +53 -0
- package/lib/enlighten-lib/report/tabular-report/tabular-report.d.ts +102 -0
- package/lib/enlighten-lib/report/tabular-report/tabular-report.service.d.ts +173 -0
- package/lib/enlighten-lib/report/tabular-report/tabular.d.ts +92 -0
- package/lib/enlighten-lib/report/tabular-report/value-formatting.d.ts +7 -0
- package/lib/enlighten-lib/report-control.service.d.ts +15 -0
- package/lib/enlighten-lib/utils/utils.d.ts +16 -0
- package/lib/field-list-lib/fields-list.service.d.ts +71 -0
- package/lib/filters/calender-filter/calender-filter.component.d.ts +70 -0
- package/lib/filters/category-filter/category-filter.component.d.ts +65 -0
- package/lib/filters/category-filter/category-filter.service.d.ts +16 -0
- package/lib/filters/category-filter/category.service.d.ts +23 -0
- package/lib/filters/choice-list-filter/choice-list-filter.component.d.ts +64 -0
- package/lib/filters/choice-list-filter/choice-list-filter.service.d.ts +36 -0
- package/lib/filters/common-filter/common-filter.component.d.ts +135 -0
- package/lib/filters/common-filter/common-filter.service.d.ts +42 -0
- package/lib/filters/custom-scroll-directives.d.ts +14 -0
- package/lib/filters/date-time-filter/date-time-filter.component.d.ts +83 -0
- package/lib/filters/filter-footer/filter-footer.component.d.ts +12 -0
- package/lib/filters/filters.component.d.ts +139 -0
- package/lib/filters/filters.module.d.ts +43 -0
- package/lib/filters/filters.service.d.ts +83 -0
- package/lib/filters/meta-column-filter-builder/meta-column-filter-builder.service.d.ts +70 -0
- package/lib/filters/metaColumnTypes.d.ts +18 -0
- package/lib/filters/multi-select-filter/multi-select-filter.component.d.ts +68 -0
- package/lib/filters/multi-select-filter/multi-select-filter.service.d.ts +77 -0
- package/lib/filters/number-filter/number-filter.component.d.ts +70 -0
- package/lib/filters/public-api.d.ts +14 -0
- package/lib/filters/reference-list-filter/reference-list-filter.component.d.ts +59 -0
- package/lib/filters/reference-list-filter/reference-list-filter.service.d.ts +62 -0
- package/lib/filters/single-select-filter/single-select-filter.component.d.ts +59 -0
- package/lib/filters/time-filter/time-filter.component.d.ts +62 -0
- package/lib/filters/user-filter/user-filter.component.d.ts +61 -0
- package/lib/filters/user-filter/user-filter.service.d.ts +26 -0
- package/lib/form-object/form-object-list/form-object-list-filter/form-object-list-filter.component.d.ts +87 -0
- package/lib/form-object/form-object-list/form-object-list-filter/form-object-list-filter.service.d.ts +33 -0
- package/lib/form-object/form-object-list/form-object-list-header/form-object-list-header.component.d.ts +13 -0
- package/lib/form-object/form-object-list/form-object-list-header/widget-header-type-handler.d.ts +3 -0
- package/lib/form-object/form-object-list/form-object-list-header/widgets/text-box-header/text-box-header.component.d.ts +10 -0
- package/lib/form-object/form-object-list/form-object-list-header/widgets-header.directive.d.ts +8 -0
- package/lib/form-object/form-object-list/form-object-list.component.d.ts +200 -0
- package/lib/form-object/form-object-list/form-object-list.d.ts +42 -0
- package/lib/form-object/form-object-list/form-object-list.module.d.ts +59 -0
- package/lib/form-object/form-object-list/form-object-list.service.d.ts +69 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/form-object-value-handler.d.ts +3 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/form-object-value.directive.d.ts +8 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/form-object-widget-value.component.d.ts +22 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-apply-geo-fence-value/formobject-apply-geo-fence-value.component.d.ts +10 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-audio-value/formobject-audio-value.component.d.ts +12 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-auto-number-value/formobject-auto-number-value.component.d.ts +10 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-bar-code-value/formobject-bar-code-value.component.d.ts +27 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-child-records-value/formobject-child-records-value.component.d.ts +13 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-choicelist-value/formobject-choicelist-value.component.d.ts +20 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-counter-value/formobject-counter-value.component.d.ts +10 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-date-time-value/formobject-date-time-value.component.d.ts +13 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-document-value/formobject-document-value.component.d.ts +15 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-formula-value/formobject-formula-value.component.d.ts +11 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-geo-fence-value/formobject-geo-fence-value.component.d.ts +21 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-gps-value/formobject-gps-value.component.d.ts +23 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-group-header-value/formobject-group-header-value.component.d.ts +10 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-image-value/formobject-image-value.component.d.ts +34 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-languages-value/formobject-languages-value.component.d.ts +12 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-payment-value/formobject-payment-value.component.d.ts +10 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-qr-code-value/formobject-qr-code-value.component.d.ts +27 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-signature-value/formobject-signature-value.component.d.ts +17 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-static-media-value/formobject-static-media-value.component.d.ts +15 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-stop-watch-value/formobject-stop-watch-value.component.d.ts +10 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-sub-form-value/formobject-sub-form-value.component.d.ts +10 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-textbox-value/formobject-textbox-value.component.d.ts +12 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-time-stamp-value/formobject-time-stamp-value.component.d.ts +16 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-toggle-value/formobject-toggle-value.component.d.ts +11 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-unique-id-value/formobject-unique-id-value.component.d.ts +10 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-verification-value/formobject-verification-value.component.d.ts +14 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-video-value/formobject-video-value.component.d.ts +16 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-web-link-value/formobject-web-link-value.component.d.ts +10 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-widget-mat-dialog/formobject-widget-mat-dialog.component.d.ts +13 -0
- package/lib/form-object/form-object-view/data-detail-view-dto.d.ts +16 -0
- package/lib/form-object/form-object-view/dynamic-view/dynamic-view.component.d.ts +32 -0
- package/lib/form-object/form-object-view/dynamic-view/dynamic-view.directive.d.ts +8 -0
- package/lib/form-object/form-object-view/form-object-view.component.d.ts +45 -0
- package/lib/form-object/form-object-view/form-object-view.module.d.ts +70 -0
- package/lib/form-object/form-object-view/form-object-view.service.d.ts +49 -0
- package/lib/form-object/form-object-view/form-object-widgets/apply-geo-fence-widget-view/apply-geo-fence-widget-view.component.d.ts +10 -0
- package/lib/form-object/form-object-view/form-object-widgets/audio-widget-view/audio-widget-view.component.d.ts +12 -0
- package/lib/form-object/form-object-view/form-object-widgets/auto-number-widget-view/auto-number-widget-view.component.d.ts +10 -0
- package/lib/form-object/form-object-view/form-object-widgets/bar-code-widget-view/bar-code-widget-view.component.d.ts +31 -0
- package/lib/form-object/form-object-view/form-object-widgets/child-records-widget-view/child-records-widget-view.component.d.ts +22 -0
- package/lib/form-object/form-object-view/form-object-widgets/choice-list-widget-view/choice-list-widget-view.component.d.ts +25 -0
- package/lib/form-object/form-object-view/form-object-widgets/counter-widget-view/counter-widget-view.component.d.ts +10 -0
- package/lib/form-object/form-object-view/form-object-widgets/date-time-widget-view/date-time-widget-view.component.d.ts +12 -0
- package/lib/form-object/form-object-view/form-object-widgets/document-widget-view/document-widget-view.component.d.ts +15 -0
- package/lib/form-object/form-object-view/form-object-widgets/form-object-widget-type-handler.d.ts +3 -0
- package/lib/form-object/form-object-view/form-object-widgets/form-object-widgets-view.component.d.ts +25 -0
- package/lib/form-object/form-object-view/form-object-widgets/form-object-widgets-view.directive.d.ts +8 -0
- package/lib/form-object/form-object-view/form-object-widgets/formula-widget-view/formula-widget-view.component.d.ts +10 -0
- package/lib/form-object/form-object-view/form-object-widgets/geo-fence-widget-view/geo-fence-widget-view.component.d.ts +14 -0
- package/lib/form-object/form-object-view/form-object-widgets/gps-widget-view/gps-widget-view.component.d.ts +37 -0
- package/lib/form-object/form-object-view/form-object-widgets/group-header-widget-view/group-header-widget-view.component.d.ts +10 -0
- package/lib/form-object/form-object-view/form-object-widgets/image-widget-view/image-annotation-data-dto.d.ts +91 -0
- package/lib/form-object/form-object-view/form-object-widgets/image-widget-view/image-map-view/image-map-view.component.d.ts +32 -0
- package/lib/form-object/form-object-view/form-object-widgets/image-widget-view/image-widget-lightbox-view/image-widget-lightbox-view.component.d.ts +71 -0
- package/lib/form-object/form-object-view/form-object-widgets/image-widget-view/image-widget-view.component.d.ts +40 -0
- package/lib/form-object/form-object-view/form-object-widgets/language-widget-view/language-widget-view.component.d.ts +12 -0
- package/lib/form-object/form-object-view/form-object-widgets/payment-widget-view/payment-widget-view.component.d.ts +10 -0
- package/lib/form-object/form-object-view/form-object-widgets/qr-code-widget-view/qr-code-widget-view.component.d.ts +26 -0
- package/lib/form-object/form-object-view/form-object-widgets/signature-widget-view/signature-widget-view.component.d.ts +13 -0
- package/lib/form-object/form-object-view/form-object-widgets/static-media-widget-view/static-media-widget-view.component.d.ts +13 -0
- package/lib/form-object/form-object-view/form-object-widgets/stop-watch-widget-view/stop-watch-widget-view.component.d.ts +10 -0
- package/lib/form-object/form-object-view/form-object-widgets/sub-form-widget-view/sub-form-widget-view.component.d.ts +16 -0
- package/lib/form-object/form-object-view/form-object-widgets/text-box-widget-view/text-box-widget-view.component.d.ts +14 -0
- package/lib/form-object/form-object-view/form-object-widgets/time-stamp-widget-view/time-stamp-widget-view.component.d.ts +15 -0
- package/lib/form-object/form-object-view/form-object-widgets/toggle-widget-view/toggle-widget-view.component.d.ts +11 -0
- package/lib/form-object/form-object-view/form-object-widgets/unique-id-widget-view/unique-id-widget-view.component.d.ts +10 -0
- package/lib/form-object/form-object-view/form-object-widgets/verification-widget-view/verification-widget-view.component.d.ts +14 -0
- package/lib/form-object/form-object-view/form-object-widgets/video-widget-view/video-widget-view.component.d.ts +16 -0
- package/lib/form-object/form-object-view/form-object-widgets/web-link-widget-view/web-link-widget-view.component.d.ts +10 -0
- package/lib/form-object/form-object-view/meta-section/meta-section.component.d.ts +31 -0
- package/lib/form-object/form-object-view/section/section.component.d.ts +16 -0
- package/lib/form-object/form-object-view/section-field/section-field.component.d.ts +13 -0
- package/lib/form-object/form-object-view/section-view/section-view.component.d.ts +16 -0
- package/lib/form-object/public-api.d.ts +2 -0
- package/lib/form-permission.service.d.ts +51 -0
- package/lib/forms/ax-form.d.ts +47 -0
- package/lib/forms/iform.d.ts +18 -0
- package/lib/forms/page/common/axo-response-status.d.ts +4 -0
- package/lib/forms/page/common/constants.d.ts +371 -0
- package/lib/forms/page/common/detail-view-enums.d.ts +5 -0
- package/lib/forms/page/common/flatten-status-enum.d.ts +7 -0
- package/lib/forms/page/common/form.constant.d.ts +85 -0
- package/lib/forms/page/common/property-panel-field.d.ts +21 -0
- package/lib/forms/page/common/widget-enums.d.ts +236 -0
- package/lib/forms/page/common/widget-value-handler.d.ts +4 -0
- package/lib/forms/page/data-detail-view/ax-section.d.ts +22 -0
- package/lib/forms/page/data-detail-view/collection-view.d.ts +11 -0
- package/lib/forms/page/data-detail-view/data-details.d.ts +17 -0
- package/lib/forms/page/data-detail-view/section-field.d.ts +13 -0
- package/lib/forms/page/data-detail-view/section.d.ts +13 -0
- package/lib/forms/page/data-list/data-list-column.d.ts +24 -0
- package/lib/forms/page/data-list/data-list.d.ts +24 -0
- package/lib/forms/page/form-object.d.ts +6 -0
- package/lib/forms/page/form-page.d.ts +19 -0
- package/lib/forms/page/value-converters/displayMode-to-bool.d.ts +5 -0
- package/lib/forms/page/value-converters/form-type-converter.d.ts +5 -0
- package/lib/forms/page/value-converters/geo-fence-value-converter.d.ts +5 -0
- package/lib/forms/page/value-converters/image-annotation-value-converter.d.ts +5 -0
- package/lib/forms/page/value-converters/language-source-value-converter.d.ts +6 -0
- package/lib/forms/page/value-converters/list-view-title-converter.d.ts +5 -0
- package/lib/forms/page/value-converters/parse-float-converter.d.ts +5 -0
- package/lib/forms/page/value-converters/parse-int-converter.d.ts +5 -0
- package/lib/forms/page/value-converters/parse-string-converter.d.ts +5 -0
- package/lib/forms/page/value-converters/publicUrls-string-to-array.d.ts +5 -0
- package/lib/forms/page/value-converters/record-limit-type-converter.d.ts +5 -0
- package/lib/forms/page/value-converters/restriction-mode-converter.d.ts +5 -0
- package/lib/forms/page/value-converters/string-to-bool-converter.d.ts +5 -0
- package/lib/forms/page/value-converters/string-to-bool-value-converter.d.ts +5 -0
- package/lib/forms/page/value-converters/string-to-date-time-converter.d.ts +5 -0
- package/lib/forms/page/value-converters/string-to-number -converter.d.ts +5 -0
- package/lib/forms/page/value-converters/textBox-mask-converter.d.ts +5 -0
- package/lib/forms/page/value-converters/validate-converter.d.ts +5 -0
- package/lib/forms/page/value-converters/value-without-mask-converter.d.ts +5 -0
- package/lib/forms/page/value-converters/widget-concrete-class-converter.d.ts +6 -0
- package/lib/forms/page/value-converters/widget-deserializer.d.ts +3 -0
- package/lib/forms/page/widgets/apply-geofences.d.ts +25 -0
- package/lib/forms/page/widgets/auto-number.d.ts +28 -0
- package/lib/forms/page/widgets/ax-audio.d.ts +43 -0
- package/lib/forms/page/widgets/ax-document.d.ts +44 -0
- package/lib/forms/page/widgets/ax-image.d.ts +46 -0
- package/lib/forms/page/widgets/bar-code.d.ts +52 -0
- package/lib/forms/page/widgets/child-record.d.ts +50 -0
- package/lib/forms/page/widgets/choicelist.d.ts +70 -0
- package/lib/forms/page/widgets/counter.d.ts +36 -0
- package/lib/forms/page/widgets/datetime.d.ts +53 -0
- package/lib/forms/page/widgets/formula.d.ts +38 -0
- package/lib/forms/page/widgets/geofence.d.ts +41 -0
- package/lib/forms/page/widgets/gps.d.ts +49 -0
- package/lib/forms/page/widgets/group-header.d.ts +51 -0
- package/lib/forms/page/widgets/languages.d.ts +41 -0
- package/lib/forms/page/widgets/link.d.ts +36 -0
- package/lib/forms/page/widgets/payment.d.ts +37 -0
- package/lib/forms/page/widgets/qr-code.d.ts +39 -0
- package/lib/forms/page/widgets/script-condition.d.ts +33 -0
- package/lib/forms/page/widgets/signature.d.ts +34 -0
- package/lib/forms/page/widgets/static-media.d.ts +40 -0
- package/lib/forms/page/widgets/stopwatch.d.ts +37 -0
- package/lib/forms/page/widgets/sub-form.d.ts +39 -0
- package/lib/forms/page/widgets/textbox.d.ts +63 -0
- package/lib/forms/page/widgets/timestamp.d.ts +42 -0
- package/lib/forms/page/widgets/toggle.d.ts +36 -0
- package/lib/forms/page/widgets/unique-id.d.ts +33 -0
- package/lib/forms/page/widgets/verification.d.ts +55 -0
- package/lib/forms/page/widgets/video.d.ts +44 -0
- package/lib/forms/page/widgets/widget-value/apply-geo-fence-widget-value.d.ts +18 -0
- package/lib/forms/page/widgets/widget-value/audio-video-widget-value.d.ts +11 -0
- package/lib/forms/page/widgets/widget-value/child-record-value.d.ts +26 -0
- package/lib/forms/page/widgets/widget-value/choice-list-options.d.ts +27 -0
- package/lib/forms/page/widgets/widget-value/choices-ml.d.ts +22 -0
- package/lib/forms/page/widgets/widget-value/dateRangeValue.d.ts +12 -0
- package/lib/forms/page/widgets/widget-value/deviceProfileParams.d.ts +4 -0
- package/lib/forms/page/widgets/widget-value/deviceProfilesTemp.d.ts +19 -0
- package/lib/forms/page/widgets/widget-value/document-widget-value.d.ts +15 -0
- package/lib/forms/page/widgets/widget-value/geo-fence-location-value.d.ts +14 -0
- package/lib/forms/page/widgets/widget-value/geo-fence-widget-value.d.ts +14 -0
- package/lib/forms/page/widgets/widget-value/gps-widget-value.d.ts +21 -0
- package/lib/forms/page/widgets/widget-value/image-widget-value.d.ts +19 -0
- package/lib/forms/page/widgets/widget-value/language-widget-value.d.ts +12 -0
- package/lib/forms/page/widgets/widget-value/location-object-value.d.ts +12 -0
- package/lib/forms/page/widgets/widget-value/multiple-languages.d.ts +21 -0
- package/lib/forms/page/widgets/widget-value/reference-list-object-value.d.ts +17 -0
- package/lib/forms/page/widgets/widget-value/verification-widget-value.d.ts +31 -0
- package/lib/forms/page/widgets/widget.d.ts +75 -0
- package/lib/ghost-loader/ghost-loader.component.d.ts +41 -0
- package/lib/ghost-loader/ghost-loader.module.d.ts +8 -0
- package/lib/ghost-loader/public-api.d.ts +2 -0
- package/lib/map-dialog/map-dialog.component.d.ts +16 -0
- package/lib/map-dialog/map-dialog.module.d.ts +11 -0
- package/lib/map-dialog/public-api.d.ts +5 -0
- package/lib/reports-container/public-api.d.ts +7 -0
- package/lib/reports-container/report-group/report-group.component.d.ts +17 -0
- package/lib/reports-container/reports-container-models/report-group.d.ts +20 -0
- package/lib/reports-container/reports-container-models/report-property.d.ts +19 -0
- package/lib/reports-container/reports-container-models/reports-container-enums.d.ts +13 -0
- package/lib/reports-container/reports-container-models/reports-container.d.ts +16 -0
- package/lib/reports-container/reports-container.component.d.ts +16 -0
- package/lib/reports-container/reports-container.module.d.ts +13 -0
- package/lib/reports-container/reports-container.service.d.ts +18 -0
- package/lib/scrollbar/index.d.ts +2 -0
- package/lib/scrollbar/public-api.d.ts +2 -0
- package/lib/scrollbar/scrollbar.directive.d.ts +153 -0
- package/lib/scrollbar/scrollbar.module.d.ts +7 -0
- package/lib/scrollbar/scrollbar.types.d.ts +12 -0
- package/lib/sculptor-lib/widgets/audio/audio.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/barcode/barcode.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/child-record/child-record.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/choice-list/choice-list.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/date-time/date-time.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/document/document.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/geofence/geofence.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/gps/gps.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/group-header/group-header.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/image/image.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/language/language.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/link/link.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/qr-code/qr-code.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/stopwatch/stopwatch.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/subform/subform.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/textbox/textbox.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/timestamp/timestamp.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/toggle/toggle.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/video/video.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/widgets.service.d.ts +30 -0
- package/lib/shared/comfirmation-modal/confirmation-modal.component.d.ts +18 -0
- package/lib/shared/conditional-formatting/conditional-formatting/conditional-formatting.component.d.ts +29 -0
- package/lib/shared/shared.module.d.ts +13 -0
- package/package.json +64 -0
- package/public-api.d.ts +130 -0
|
@@ -0,0 +1,960 @@
|
|
|
1
|
+
import { HttpClient } from '@angular/common/http';
|
|
2
|
+
import { EventEmitter, Injectable } from '@angular/core';
|
|
3
|
+
import { ElementProperty } from '../../property/element-property';
|
|
4
|
+
import { TabularReport } from './tabular-report';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/common/http";
|
|
7
|
+
export class TabularReportService {
|
|
8
|
+
constructor(_httpClient) {
|
|
9
|
+
this._httpClient = _httpClient;
|
|
10
|
+
this.dataRender = new EventEmitter();
|
|
11
|
+
this._tableClickEvent = new EventEmitter();
|
|
12
|
+
this.cloneIntegerCount = Array();
|
|
13
|
+
}
|
|
14
|
+
/**to count data count in a series
|
|
15
|
+
*
|
|
16
|
+
* @param TabularReport
|
|
17
|
+
*
|
|
18
|
+
*/
|
|
19
|
+
groupData(tabularReport) {
|
|
20
|
+
tabularReport.matrix.attributes.forEach((attribute, index) => {
|
|
21
|
+
// when row span is true and index is 0
|
|
22
|
+
attribute.groupData = new Array();
|
|
23
|
+
if (index === 0 || attribute.colSpan) {
|
|
24
|
+
this.getFirstRowGrouping(attribute);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
// when index is greater than 0
|
|
28
|
+
let startIndex = 0;
|
|
29
|
+
const cloneSeries = [];
|
|
30
|
+
let gdIndex = 0;
|
|
31
|
+
while (startIndex <= (tabularReport.matrix.attributes[index - 1].groupData.length - 1)) {
|
|
32
|
+
const dataSeries = [];
|
|
33
|
+
gdIndex = tabularReport.matrix.attributes[index - 1].groupData[startIndex];
|
|
34
|
+
const subSeries = attribute.series.slice(startIndex, startIndex + gdIndex);
|
|
35
|
+
subSeries.forEach((data) => {
|
|
36
|
+
attribute.groupData.push(this.getRowSpanCount(subSeries, data));
|
|
37
|
+
// to replace repeated data
|
|
38
|
+
if (dataSeries.includes(data)) {
|
|
39
|
+
dataSeries.push('repeated');
|
|
40
|
+
cloneSeries.push('repeated');
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
dataSeries.push(data);
|
|
44
|
+
cloneSeries.push(data);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
attribute.cloneGroupData = attribute.groupData.slice(0);
|
|
48
|
+
startIndex = startIndex + gdIndex;
|
|
49
|
+
}
|
|
50
|
+
attribute.cloneSeries = cloneSeries;
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
if (tabularReport.subTotal && tabularReport.colGrouping.length === 0) {
|
|
54
|
+
tabularReport = tabularReport.subTotalToggle(tabularReport);
|
|
55
|
+
}
|
|
56
|
+
return tabularReport;
|
|
57
|
+
}
|
|
58
|
+
/** to count data count in a series
|
|
59
|
+
*
|
|
60
|
+
* @param string
|
|
61
|
+
* @param any
|
|
62
|
+
*
|
|
63
|
+
*/
|
|
64
|
+
getRowSpanCount(series, key) {
|
|
65
|
+
return series.filter(str => str === key).length;
|
|
66
|
+
}
|
|
67
|
+
/** to count first row grouping data count
|
|
68
|
+
*
|
|
69
|
+
* @param AttributeData
|
|
70
|
+
*
|
|
71
|
+
*/
|
|
72
|
+
getFirstRowGrouping(attribute) {
|
|
73
|
+
const series = [];
|
|
74
|
+
const uniqueSeries = [];
|
|
75
|
+
attribute.series.forEach((element) => {
|
|
76
|
+
if (series.includes(element)) {
|
|
77
|
+
series.push('repeated');
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
series.push(element);
|
|
81
|
+
uniqueSeries.push(element);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
attribute.cloneSeries = series;
|
|
85
|
+
attribute.uniqueSeries = uniqueSeries;
|
|
86
|
+
attribute.series.forEach((data) => {
|
|
87
|
+
attribute.groupData.push(this.getRowSpanCount(attribute.series, data));
|
|
88
|
+
});
|
|
89
|
+
attribute.cloneGroupData = attribute.groupData.slice(0);
|
|
90
|
+
return attribute;
|
|
91
|
+
}
|
|
92
|
+
sendEmail(emailDto) {
|
|
93
|
+
return new Promise((resolve, reject) => {
|
|
94
|
+
this._httpClient.post('reports/export', emailDto).subscribe((response) => {
|
|
95
|
+
resolve(response);
|
|
96
|
+
}, reject);
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
/**to count data count and set clone data while column grouping is applied
|
|
100
|
+
*
|
|
101
|
+
* @param TabularReport
|
|
102
|
+
*
|
|
103
|
+
*/
|
|
104
|
+
columnData(tabularReport) {
|
|
105
|
+
tabularReport = this.rowSpan(tabularReport);
|
|
106
|
+
tabularReport.colGrouping.forEach((attr) => {
|
|
107
|
+
if (!attr.uniqueSeries) {
|
|
108
|
+
if (!attr.uniqueSeries) {
|
|
109
|
+
const series = [];
|
|
110
|
+
const uniqueSeries = [];
|
|
111
|
+
attr.series.forEach((_element) => {
|
|
112
|
+
if (series.includes(_element)) {
|
|
113
|
+
series.push('repeated');
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
series.push(_element);
|
|
117
|
+
uniqueSeries.push(_element);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
uniqueSeries.sort();
|
|
121
|
+
attr.uniqueSeries = uniqueSeries;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
tabularReport.matrix.attributes.forEach((attr) => {
|
|
126
|
+
if (!attr.uniqueSeries) {
|
|
127
|
+
if (!attr.uniqueSeries) {
|
|
128
|
+
const series = [];
|
|
129
|
+
const uniqueSeries = [];
|
|
130
|
+
attr.series.forEach((seriesData) => {
|
|
131
|
+
if (series.includes(seriesData)) {
|
|
132
|
+
series.push('repeated');
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
series.push(seriesData);
|
|
136
|
+
uniqueSeries.push(seriesData);
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
uniqueSeries.sort();
|
|
140
|
+
attr.uniqueSeries = uniqueSeries;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
return tabularReport;
|
|
145
|
+
}
|
|
146
|
+
/**to count rows group data when column grouping is applied
|
|
147
|
+
*
|
|
148
|
+
* @param TabularReport
|
|
149
|
+
*
|
|
150
|
+
*/
|
|
151
|
+
rowSpan(tabularReport) {
|
|
152
|
+
tabularReport.integerArray = [];
|
|
153
|
+
tabularReport.integerIndex = [];
|
|
154
|
+
tabularReport = this.getIntegerArray(tabularReport);
|
|
155
|
+
if (tabularReport.integerArray.length === 0) {
|
|
156
|
+
tabularReport.rowCount = true;
|
|
157
|
+
}
|
|
158
|
+
tabularReport.matrix.attributes.forEach((attribute, index) => {
|
|
159
|
+
if (index === 0 && attribute.rowSpan) {
|
|
160
|
+
const series = [];
|
|
161
|
+
const uniqueSeries = [];
|
|
162
|
+
attribute.series.forEach((data) => {
|
|
163
|
+
if (series.includes(data)) {
|
|
164
|
+
series.push('repeated');
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
series.push(data);
|
|
168
|
+
uniqueSeries.push(data);
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
attribute.cloneSeries = series;
|
|
172
|
+
attribute.uniqueSeries = uniqueSeries;
|
|
173
|
+
attribute.series.forEach((data) => {
|
|
174
|
+
attribute.groupData.push(this.getRowSpanCount(attribute.series, data));
|
|
175
|
+
});
|
|
176
|
+
attribute.cloneGroupData = attribute.groupData;
|
|
177
|
+
}
|
|
178
|
+
if (index === 1 && attribute.rowSpan) {
|
|
179
|
+
attribute = this.getCloneData(tabularReport, index, attribute);
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
return tabularReport;
|
|
183
|
+
}
|
|
184
|
+
/**to set headers section of column grouping
|
|
185
|
+
*
|
|
186
|
+
* @param TabularReport
|
|
187
|
+
* @param AttributeData
|
|
188
|
+
*
|
|
189
|
+
*/
|
|
190
|
+
newData(tabularReport, attr) {
|
|
191
|
+
const count = (tabularReport.colGrouping.indexOf(attr));
|
|
192
|
+
tabularReport.secondColData = new Map();
|
|
193
|
+
tabularReport.secondColSeries = new Array();
|
|
194
|
+
tabularReport.firstColSeries = new Array();
|
|
195
|
+
const _index = tabularReport.rowGrouping.length + (count);
|
|
196
|
+
if (count === 1) {
|
|
197
|
+
tabularReport = this.getSecondColData(tabularReport, _index);
|
|
198
|
+
}
|
|
199
|
+
if (tabularReport.colGrouping.length === 1) {
|
|
200
|
+
tabularReport.colGrouping[0].uniqueSeries.forEach((series) => {
|
|
201
|
+
tabularReport.colData.set(series, tabularReport.integerArray.length);
|
|
202
|
+
});
|
|
203
|
+
let m = 0;
|
|
204
|
+
tabularReport.cloneDataCount = [];
|
|
205
|
+
tabularReport.cloneIntegerArray = [];
|
|
206
|
+
while (m < (tabularReport.colGrouping[0].uniqueSeries.length)) {
|
|
207
|
+
tabularReport.integerArray.forEach((element) => {
|
|
208
|
+
tabularReport.cloneIntegerArray.push(element);
|
|
209
|
+
});
|
|
210
|
+
tabularReport.cloneDataCount.push(m);
|
|
211
|
+
m++;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
if (tabularReport.colGrouping.length > 1 && count === 1) {
|
|
215
|
+
let _count = 0;
|
|
216
|
+
tabularReport.colGrouping[1].uniqueSeries.forEach((series) => {
|
|
217
|
+
tabularReport.colData.set(series, tabularReport.integerArray.length);
|
|
218
|
+
});
|
|
219
|
+
tabularReport.colGrouping[0].uniqueSeries.forEach((series) => {
|
|
220
|
+
tabularReport.colData.set(series, tabularReport.integerArray.length * (tabularReport.secondColData.get(series).length));
|
|
221
|
+
_count += (tabularReport.secondColData.get(series).length);
|
|
222
|
+
});
|
|
223
|
+
tabularReport.cloneDataCount = [];
|
|
224
|
+
let cloneDataIndex = 0;
|
|
225
|
+
const data123 = [];
|
|
226
|
+
while (cloneDataIndex < _count) {
|
|
227
|
+
tabularReport.cloneDataCount.push(cloneDataIndex);
|
|
228
|
+
tabularReport.integerIndex.forEach((element) => {
|
|
229
|
+
data123.push(element);
|
|
230
|
+
});
|
|
231
|
+
cloneDataIndex++;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
return tabularReport;
|
|
235
|
+
}
|
|
236
|
+
/**to get data render value when single column grouping is applied
|
|
237
|
+
*
|
|
238
|
+
* @param TabularReport
|
|
239
|
+
*
|
|
240
|
+
*/
|
|
241
|
+
dataFactory(tabularReport) {
|
|
242
|
+
const rCount = tabularReport.rowGrouping.length - 1;
|
|
243
|
+
const cCount = tabularReport.colGrouping.length;
|
|
244
|
+
let count = 0;
|
|
245
|
+
tabularReport.countsData = new Map();
|
|
246
|
+
let i = 0;
|
|
247
|
+
tabularReport.matrix.attributes[rCount + cCount].groupData = [];
|
|
248
|
+
const sideTotal1 = Array(tabularReport.integerArray.length).fill(0);
|
|
249
|
+
if (tabularReport.colGrouping.length === 1) {
|
|
250
|
+
while (i < tabularReport.matrix.attributes[0].series.length) {
|
|
251
|
+
const groupData = tabularReport.matrix.attributes[rCount].groupData[i];
|
|
252
|
+
const subSeries = tabularReport.matrix.attributes[rCount + cCount].series.slice(i, i + groupData);
|
|
253
|
+
subSeries.forEach((_data) => {
|
|
254
|
+
tabularReport.matrix.attributes[rCount + cCount].groupData.push(this.getRowSpanCount(subSeries, _data));
|
|
255
|
+
});
|
|
256
|
+
i = i + groupData;
|
|
257
|
+
}
|
|
258
|
+
i = 0;
|
|
259
|
+
const __Data = new Map();
|
|
260
|
+
const __Data1 = new Map();
|
|
261
|
+
let firstColumnIndex = 0;
|
|
262
|
+
const grandTotal = Array(tabularReport.integerArray.length * tabularReport.colGrouping[0].uniqueSeries.length).fill(0);
|
|
263
|
+
const countsGrandTotal = Array(tabularReport.matrix.attributes[rCount + cCount].uniqueSeries.length).fill(0);
|
|
264
|
+
let countTotal = 0;
|
|
265
|
+
while (i < tabularReport.matrix.attributes[0].series.length) {
|
|
266
|
+
let dataSeries = [];
|
|
267
|
+
let countDataSeries = [];
|
|
268
|
+
const countArray = Array(tabularReport.matrix.attributes[rCount + cCount].uniqueSeries.length).fill(0);
|
|
269
|
+
const iarr = [];
|
|
270
|
+
const groupData = tabularReport.matrix.attributes[rCount].groupData[i];
|
|
271
|
+
const subSeries = tabularReport.matrix.attributes[rCount + cCount].groupData.slice(i, i + groupData);
|
|
272
|
+
const dataSubSeries = tabularReport.matrix.attributes[rCount + cCount].series.slice(i, i + groupData);
|
|
273
|
+
const uniqueSeries = [...new Set(tabularReport.matrix.attributes[rCount + cCount].series)];
|
|
274
|
+
const countGroupData = tabularReport.matrix.attributes[rCount].groupData[i];
|
|
275
|
+
let countDataIndex = i;
|
|
276
|
+
const end = i + countGroupData;
|
|
277
|
+
uniqueSeries.sort();
|
|
278
|
+
while (countDataIndex < end) {
|
|
279
|
+
uniqueSeries.forEach((element, dIndex) => {
|
|
280
|
+
if (element === tabularReport.matrix.attributes[rCount + cCount].series[countDataIndex]) {
|
|
281
|
+
countArray.splice(dIndex, 1, tabularReport.matrix.attributes[rCount + cCount].groupData[countDataIndex]);
|
|
282
|
+
}
|
|
283
|
+
});
|
|
284
|
+
countDataIndex = countDataIndex + tabularReport.matrix.attributes[rCount + cCount].groupData[countDataIndex];
|
|
285
|
+
}
|
|
286
|
+
dataSeries = [];
|
|
287
|
+
const rowCount = [];
|
|
288
|
+
tabularReport.rowsData = [];
|
|
289
|
+
let subSeriesIndex = 0;
|
|
290
|
+
if (tabularReport.colGrouping.length === 1) {
|
|
291
|
+
const dataSeriesValues = Array(tabularReport.integerArray.length * tabularReport.colGrouping[0].uniqueSeries.length).fill(0);
|
|
292
|
+
while (subSeriesIndex < subSeries.length) {
|
|
293
|
+
rowCount.push(subSeries[subSeriesIndex]);
|
|
294
|
+
tabularReport.rowsData.push(dataSubSeries[subSeriesIndex]);
|
|
295
|
+
iarr.push(firstColumnIndex);
|
|
296
|
+
tabularReport.integerIndex.forEach((int) => {
|
|
297
|
+
this.getfirstColIntegerData(tabularReport, int, firstColumnIndex, subSeriesIndex, subSeries, dataSeries);
|
|
298
|
+
});
|
|
299
|
+
firstColumnIndex = firstColumnIndex + subSeries[subSeriesIndex];
|
|
300
|
+
subSeriesIndex = subSeriesIndex + subSeries[subSeriesIndex];
|
|
301
|
+
}
|
|
302
|
+
let index = 0;
|
|
303
|
+
iarr.forEach((int) => {
|
|
304
|
+
const data = tabularReport.matrix.attributes[rCount + cCount].series[int];
|
|
305
|
+
let dataIndex = tabularReport.colGrouping[0].uniqueSeries.indexOf(data);
|
|
306
|
+
dataIndex = dataIndex * tabularReport.integerArray.length;
|
|
307
|
+
const arr = dataSeries.slice(index, tabularReport.integerArray.length + index);
|
|
308
|
+
let value = dataIndex;
|
|
309
|
+
arr.forEach((element) => {
|
|
310
|
+
dataSeriesValues.splice(value, 1, element);
|
|
311
|
+
value++;
|
|
312
|
+
});
|
|
313
|
+
index = index + tabularReport.integerArray.length;
|
|
314
|
+
});
|
|
315
|
+
const sideTotal = this.getSideTotal(dataSeries, tabularReport.integerArray);
|
|
316
|
+
dataSeries = dataSeriesValues;
|
|
317
|
+
countDataSeries = dataSeriesValues.slice(0);
|
|
318
|
+
const min = Array();
|
|
319
|
+
const max = Array();
|
|
320
|
+
dataSeriesValues.forEach((element, ind) => {
|
|
321
|
+
if (tabularReport.cloneIntegerArray[ind].includes('Min')) {
|
|
322
|
+
min.push(element);
|
|
323
|
+
if (element < grandTotal[ind]) {
|
|
324
|
+
grandTotal[ind] = element;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
else if (tabularReport.cloneIntegerArray[ind].includes('Max')) {
|
|
328
|
+
max.push(element);
|
|
329
|
+
if (element > grandTotal[ind]) {
|
|
330
|
+
grandTotal[ind] = element;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
grandTotal[ind] = (grandTotal[ind] + element);
|
|
335
|
+
}
|
|
336
|
+
});
|
|
337
|
+
sideTotal.forEach((element, index1) => {
|
|
338
|
+
if (tabularReport.integerArray[index1].includes('Avg')) {
|
|
339
|
+
sideTotal[index1] = this.countGrandTotalAvg(element, dataSeriesValues.length / tabularReport.integerArray.length);
|
|
340
|
+
sideTotal1[index1] = (sideTotal1[index1] + element);
|
|
341
|
+
}
|
|
342
|
+
else if (tabularReport.integerArray[index1].includes('Min')) {
|
|
343
|
+
sideTotal[index1] = this.countMin(min);
|
|
344
|
+
if (sideTotal[index1] < sideTotal1[index1]) {
|
|
345
|
+
sideTotal1[index1] = sideTotal[index1];
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
else if (tabularReport.integerArray[index1].includes('Max')) {
|
|
349
|
+
sideTotal[index1] = this.countMax(max);
|
|
350
|
+
if (sideTotal[index1] > sideTotal1[index1]) {
|
|
351
|
+
sideTotal1[index1] = sideTotal[index1];
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
else {
|
|
355
|
+
sideTotal1[index1] = (sideTotal1[index1] + element);
|
|
356
|
+
}
|
|
357
|
+
});
|
|
358
|
+
// countsGrandTotal
|
|
359
|
+
countArray.forEach((countData, countIndex) => {
|
|
360
|
+
countsGrandTotal[countIndex] = (countsGrandTotal[countIndex] + countData);
|
|
361
|
+
});
|
|
362
|
+
tabularReport.grandTotal = grandTotal;
|
|
363
|
+
countTotal = countTotal + rowCount.reduce((a2, b2) => a2 + b2, 0);
|
|
364
|
+
if (tabularReport.rowGrouping.length > 1) {
|
|
365
|
+
__Data.set(i, dataSeries);
|
|
366
|
+
tabularReport.totalRowCount.set(i, rowCount.reduce((a1, b1) => a1 + b1, 0));
|
|
367
|
+
tabularReport.sideTotal.set(i, sideTotal);
|
|
368
|
+
__Data1.set(i, countDataSeries);
|
|
369
|
+
tabularReport.rowCountIndex.set(i, rowCount);
|
|
370
|
+
tabularReport.countsData.set(i, countArray);
|
|
371
|
+
tabularReport.dataIndexSTotal.set(count, i);
|
|
372
|
+
}
|
|
373
|
+
else {
|
|
374
|
+
__Data.set(count, dataSeries);
|
|
375
|
+
__Data1.set(count, countDataSeries);
|
|
376
|
+
tabularReport.totalRowCount.set(count, rowCount.reduce((a2, b2) => a2 + b2, 0));
|
|
377
|
+
tabularReport.sideTotal.set(count, sideTotal);
|
|
378
|
+
tabularReport.rowCountIndex.set(count, rowCount);
|
|
379
|
+
tabularReport.countsData.set(count, countArray);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
count++;
|
|
383
|
+
i = i + groupData;
|
|
384
|
+
}
|
|
385
|
+
if (tabularReport.matrix.attributes[0].series.length > 0) {
|
|
386
|
+
tabularReport.grandTotal.forEach((element, index) => {
|
|
387
|
+
if (tabularReport.cloneIntegerArray[index].includes('Avg')) {
|
|
388
|
+
tabularReport.grandTotal[index] = this.countGrandTotalAvg(element, count);
|
|
389
|
+
}
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
sideTotal1.forEach((element, indexD) => {
|
|
393
|
+
if (tabularReport.integerArray[indexD].includes('Avg')) {
|
|
394
|
+
sideTotal1[indexD] = this.countGrandTotalAvg(element, count);
|
|
395
|
+
}
|
|
396
|
+
});
|
|
397
|
+
tabularReport.seriesData = __Data;
|
|
398
|
+
this.dataRender.emit(__Data);
|
|
399
|
+
const integerArrayValues = Array(tabularReport.integerArray.length * tabularReport.colGrouping[0].uniqueSeries.length).fill(0);
|
|
400
|
+
tabularReport = this.getIntegerIndex(integerArrayValues, tabularReport);
|
|
401
|
+
tabularReport.dataRender = __Data1;
|
|
402
|
+
tabularReport.grandTotal = tabularReport.grandTotal.concat(sideTotal1);
|
|
403
|
+
tabularReport.sideGrandTotal = sideTotal1.concat(countTotal);
|
|
404
|
+
tabularReport.countsTotal = new Array();
|
|
405
|
+
tabularReport.countsTotal = countsGrandTotal.concat(countTotal);
|
|
406
|
+
}
|
|
407
|
+
if (tabularReport.colGrouping.length === 2) {
|
|
408
|
+
tabularReport = this.getSecondColumn(tabularReport);
|
|
409
|
+
}
|
|
410
|
+
if (tabularReport.subTotal) {
|
|
411
|
+
tabularReport = tabularReport.subTotalToggle(tabularReport);
|
|
412
|
+
}
|
|
413
|
+
if (tabularReport.subTotal && !tabularReport.rowCount) {
|
|
414
|
+
tabularReport = tabularReport.subTotalToggle(tabularReport);
|
|
415
|
+
}
|
|
416
|
+
return tabularReport;
|
|
417
|
+
}
|
|
418
|
+
countGrandTotalAvg(data, count) {
|
|
419
|
+
return (parseFloat((data / count).toFixed(2)));
|
|
420
|
+
}
|
|
421
|
+
// countGrandTotalMin(series:)
|
|
422
|
+
/** returns sum of integer columns subSeries for column grouping
|
|
423
|
+
*
|
|
424
|
+
* @param Array
|
|
425
|
+
*
|
|
426
|
+
*/
|
|
427
|
+
countSum(series) {
|
|
428
|
+
let total = 0;
|
|
429
|
+
for (const data of series) {
|
|
430
|
+
total += Number(data);
|
|
431
|
+
}
|
|
432
|
+
return total;
|
|
433
|
+
}
|
|
434
|
+
/** returns Average of integer columns subSeries for column grouping
|
|
435
|
+
*
|
|
436
|
+
* @param Array
|
|
437
|
+
*
|
|
438
|
+
*/
|
|
439
|
+
countAvg(series) {
|
|
440
|
+
let total = 0;
|
|
441
|
+
for (const data of series) {
|
|
442
|
+
total += Number(data);
|
|
443
|
+
}
|
|
444
|
+
return (parseFloat((total / series.length).toFixed(2)));
|
|
445
|
+
}
|
|
446
|
+
/** returns Max of integer columns subSeries for column grouping
|
|
447
|
+
*
|
|
448
|
+
* @param Array
|
|
449
|
+
*
|
|
450
|
+
*/
|
|
451
|
+
countMax(series) {
|
|
452
|
+
return Math.max(...series);
|
|
453
|
+
}
|
|
454
|
+
/** returns min of integer columns subSeries for column grouping
|
|
455
|
+
*
|
|
456
|
+
* @param Array
|
|
457
|
+
*
|
|
458
|
+
*/
|
|
459
|
+
countMin(series) {
|
|
460
|
+
return Math.min(...series);
|
|
461
|
+
}
|
|
462
|
+
/** returns count of unique data for integer columns subSeries in column grouping
|
|
463
|
+
*
|
|
464
|
+
* @param Array
|
|
465
|
+
*
|
|
466
|
+
*/
|
|
467
|
+
getUnique(series) {
|
|
468
|
+
return [...new Set(series)].length;
|
|
469
|
+
}
|
|
470
|
+
/** to add integer column in IntegerArray
|
|
471
|
+
*
|
|
472
|
+
* @param TabularReport
|
|
473
|
+
*
|
|
474
|
+
*/
|
|
475
|
+
getIntegerArray(tabularReport) {
|
|
476
|
+
const data = [];
|
|
477
|
+
tabularReport.matrix.attributes.forEach((attribute, index) => {
|
|
478
|
+
if (!attribute.rowSpan && !attribute.colSpan) {
|
|
479
|
+
if (attribute.aggregate.showUniqueCount) {
|
|
480
|
+
tabularReport.integerArray.push('unique ' + attribute.label);
|
|
481
|
+
tabularReport.integerIndex.push(tabularReport.matrix.attributes.indexOf(attribute));
|
|
482
|
+
data.push(tabularReport.matrix.attributes.indexOf(attribute));
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
if (attribute.type === 'int' && !attribute.rowSpan && !attribute.colSpan) {
|
|
486
|
+
tabularReport.integerIndex.push(tabularReport.matrix.attributes.indexOf(attribute));
|
|
487
|
+
if (attribute.aggregate.showSum) {
|
|
488
|
+
data.push(tabularReport.matrix.attributes.indexOf(attribute));
|
|
489
|
+
tabularReport.integerArray.push('Sum ' + attribute.label);
|
|
490
|
+
}
|
|
491
|
+
if (attribute.aggregate.showAvg) {
|
|
492
|
+
data.push(tabularReport.matrix.attributes.indexOf(attribute));
|
|
493
|
+
tabularReport.integerArray.push('Avg ' + attribute.label);
|
|
494
|
+
}
|
|
495
|
+
if (attribute.aggregate.showMax) {
|
|
496
|
+
data.push(tabularReport.matrix.attributes.indexOf(attribute));
|
|
497
|
+
tabularReport.integerArray.push('Max ' + attribute.label);
|
|
498
|
+
}
|
|
499
|
+
if (attribute.aggregate.showMin) {
|
|
500
|
+
data.push(tabularReport.matrix.attributes.indexOf(attribute));
|
|
501
|
+
tabularReport.integerArray.push('Min ' + attribute.label);
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
});
|
|
505
|
+
tabularReport.integerData = data;
|
|
506
|
+
return tabularReport;
|
|
507
|
+
}
|
|
508
|
+
/** to count clone data for single column grouping
|
|
509
|
+
*
|
|
510
|
+
* @param tabularReport
|
|
511
|
+
* @param number
|
|
512
|
+
* @param attributeData
|
|
513
|
+
*
|
|
514
|
+
*/
|
|
515
|
+
getCloneData(tabularReport, index, attribute) {
|
|
516
|
+
let startIndex = 0;
|
|
517
|
+
const cloneSeries = [];
|
|
518
|
+
let gdIndex = 0;
|
|
519
|
+
while (startIndex <= (tabularReport.matrix.attributes[index - 1].groupData.length - 1)) {
|
|
520
|
+
const dataSeries = [];
|
|
521
|
+
gdIndex = tabularReport.matrix.attributes[index - 1].groupData[startIndex];
|
|
522
|
+
const subSeries = attribute.series.slice(startIndex, startIndex + gdIndex);
|
|
523
|
+
subSeries.forEach((subSeriesData) => {
|
|
524
|
+
attribute.groupData.push(this.getRowSpanCount(subSeries, subSeriesData));
|
|
525
|
+
// to replace repeated subSeriesData
|
|
526
|
+
if (dataSeries.includes(subSeriesData)) {
|
|
527
|
+
dataSeries.push('repeated');
|
|
528
|
+
cloneSeries.push('repeated');
|
|
529
|
+
}
|
|
530
|
+
else {
|
|
531
|
+
dataSeries.push(subSeriesData);
|
|
532
|
+
cloneSeries.push(subSeriesData);
|
|
533
|
+
}
|
|
534
|
+
});
|
|
535
|
+
attribute.cloneGroupData = attribute.groupData.slice(0);
|
|
536
|
+
startIndex = startIndex + gdIndex;
|
|
537
|
+
}
|
|
538
|
+
attribute.cloneSeries = cloneSeries;
|
|
539
|
+
return attribute;
|
|
540
|
+
}
|
|
541
|
+
/** to count clone data for double column grouping
|
|
542
|
+
*
|
|
543
|
+
* @param tabularReport
|
|
544
|
+
* @param number
|
|
545
|
+
*
|
|
546
|
+
*/
|
|
547
|
+
getSecondColData(tabularReport, _index) {
|
|
548
|
+
tabularReport.matrix.attributes[_index - 1].uniqueSeries.forEach((unique) => {
|
|
549
|
+
const data = [];
|
|
550
|
+
tabularReport.matrix.attributes[_index - 1].series.forEach((series, index) => {
|
|
551
|
+
if (unique === series) {
|
|
552
|
+
if (!data.includes(tabularReport.matrix.attributes[_index].series[index])) {
|
|
553
|
+
data.push(tabularReport.matrix.attributes[_index].series[index]);
|
|
554
|
+
tabularReport.secondColSeries.push(tabularReport.matrix.attributes[_index].series[index]);
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
});
|
|
558
|
+
// tabularReport.secondSeries=
|
|
559
|
+
tabularReport.secondColData.set(unique, data);
|
|
560
|
+
data.forEach(() => {
|
|
561
|
+
tabularReport.firstColSeries.push(unique);
|
|
562
|
+
});
|
|
563
|
+
});
|
|
564
|
+
tabularReport.colGrouping[0].uniqueSeries = [...new Set(tabularReport.firstColSeries)];
|
|
565
|
+
return tabularReport;
|
|
566
|
+
}
|
|
567
|
+
/** create series with row count
|
|
568
|
+
*
|
|
569
|
+
* @param tabularReport
|
|
570
|
+
* @param Array
|
|
571
|
+
* @param Array
|
|
572
|
+
*
|
|
573
|
+
*/
|
|
574
|
+
getSeriesWithCount(swap1, integerArray, rowCount, tabularReport) {
|
|
575
|
+
let integerArrayIndex = integerArray.length - 1;
|
|
576
|
+
let dataIndex = 0;
|
|
577
|
+
this.cloneIntegerCount = Array(swap1.length).fill(0);
|
|
578
|
+
const countIndex = Array(swap1.length).fill(0);
|
|
579
|
+
while (integerArrayIndex < swap1.length) {
|
|
580
|
+
if (swap1[integerArrayIndex] > 0) {
|
|
581
|
+
countIndex.splice(integerArrayIndex + 1, 0, null);
|
|
582
|
+
}
|
|
583
|
+
else {
|
|
584
|
+
countIndex.splice(integerArrayIndex + 1, 0, null);
|
|
585
|
+
}
|
|
586
|
+
swap1.splice(integerArrayIndex + 1, 0, rowCount[dataIndex]);
|
|
587
|
+
this.cloneIntegerCount.splice(integerArrayIndex + 1, 0, 'count');
|
|
588
|
+
if (integerArrayIndex < tabularReport.cloneIntegerArray.length) {
|
|
589
|
+
this.cloneIntegerCount.splice(integerArrayIndex + 1, 1, 'count');
|
|
590
|
+
}
|
|
591
|
+
integerArrayIndex = integerArrayIndex + integerArray.length + 1;
|
|
592
|
+
dataIndex++;
|
|
593
|
+
}
|
|
594
|
+
return swap1;
|
|
595
|
+
}
|
|
596
|
+
/** count Integer columns subSeries Data for single column grouping
|
|
597
|
+
*
|
|
598
|
+
* @param tabularReport
|
|
599
|
+
* @param number
|
|
600
|
+
* @param number
|
|
601
|
+
* @param number
|
|
602
|
+
* @param Array
|
|
603
|
+
* @param Array
|
|
604
|
+
*
|
|
605
|
+
*/
|
|
606
|
+
getfirstColIntegerData(tabularReport, int, firstColumnIndex, j, subSeries, swap) {
|
|
607
|
+
if (tabularReport.matrix.attributes[int].aggregate.showUniqueCount) {
|
|
608
|
+
swap.push(this.getUnique(tabularReport.matrix.attributes[int].series.slice(firstColumnIndex, firstColumnIndex + subSeries[j])));
|
|
609
|
+
}
|
|
610
|
+
if (tabularReport.matrix.attributes[int].aggregate.showSum) {
|
|
611
|
+
swap.push(this.countSum(tabularReport.matrix.attributes[int].series.slice(firstColumnIndex, firstColumnIndex + subSeries[j])));
|
|
612
|
+
}
|
|
613
|
+
if (tabularReport.matrix.attributes[int].aggregate.showAvg) {
|
|
614
|
+
swap.push(this.countAvg(tabularReport.matrix.attributes[int].series.slice(firstColumnIndex, firstColumnIndex + subSeries[j])));
|
|
615
|
+
}
|
|
616
|
+
if (tabularReport.matrix.attributes[int].aggregate.showMax) {
|
|
617
|
+
swap.push(this.countMax(tabularReport.matrix.attributes[int].series.slice(firstColumnIndex, firstColumnIndex + subSeries[j])));
|
|
618
|
+
}
|
|
619
|
+
if (tabularReport.matrix.attributes[int].aggregate.showMin) {
|
|
620
|
+
swap.push(this.countMin(tabularReport.matrix.attributes[int].series.slice(firstColumnIndex, firstColumnIndex + subSeries[j])));
|
|
621
|
+
}
|
|
622
|
+
return swap;
|
|
623
|
+
}
|
|
624
|
+
/** count Integer columns subSeries Data for double column grouping
|
|
625
|
+
*
|
|
626
|
+
* @param tabularReport
|
|
627
|
+
* @param number
|
|
628
|
+
* @param number
|
|
629
|
+
* @param number
|
|
630
|
+
* @param Array
|
|
631
|
+
* @param Array
|
|
632
|
+
*
|
|
633
|
+
*/
|
|
634
|
+
getSecondColIntegerData(tabularReport, int, secondColumnIndex, n, swap, xyz) {
|
|
635
|
+
if (tabularReport.matrix.attributes[int].aggregate.showUniqueCount) {
|
|
636
|
+
swap.push(this.getUnique(tabularReport.matrix.attributes[int].series.slice(secondColumnIndex, secondColumnIndex + xyz[n])));
|
|
637
|
+
}
|
|
638
|
+
if (tabularReport.matrix.attributes[int].aggregate.showSum) {
|
|
639
|
+
swap.push(this.countSum(tabularReport.matrix.attributes[int].series.slice(secondColumnIndex, secondColumnIndex + xyz[n])));
|
|
640
|
+
}
|
|
641
|
+
if (tabularReport.matrix.attributes[int].aggregate.showAvg) {
|
|
642
|
+
swap.push(this.countAvg(tabularReport.matrix.attributes[int].series.slice(secondColumnIndex, secondColumnIndex + xyz[n])));
|
|
643
|
+
}
|
|
644
|
+
if (tabularReport.matrix.attributes[int].aggregate.showMax) {
|
|
645
|
+
swap.push(this.countMax(tabularReport.matrix.attributes[int].series.slice(secondColumnIndex, secondColumnIndex + xyz[n])));
|
|
646
|
+
}
|
|
647
|
+
if (tabularReport.matrix.attributes[int].aggregate.showMin) {
|
|
648
|
+
swap.push(this.countMin(tabularReport.matrix.attributes[int].series.slice(secondColumnIndex, secondColumnIndex + xyz[n])));
|
|
649
|
+
}
|
|
650
|
+
return swap;
|
|
651
|
+
}
|
|
652
|
+
/** count horizontal grand Total
|
|
653
|
+
*
|
|
654
|
+
* @param Array
|
|
655
|
+
* @param Array
|
|
656
|
+
*
|
|
657
|
+
*/
|
|
658
|
+
getSideTotal(swap, integerArray) {
|
|
659
|
+
let totalIndex = 0;
|
|
660
|
+
let integerArrayIndex = 0;
|
|
661
|
+
const sideTotal = Array(integerArray.length).fill(0);
|
|
662
|
+
while (totalIndex < integerArray.length) {
|
|
663
|
+
integerArrayIndex = totalIndex;
|
|
664
|
+
sideTotal[totalIndex] = swap[integerArrayIndex];
|
|
665
|
+
while (integerArrayIndex + integerArray.length < swap.length) {
|
|
666
|
+
sideTotal[totalIndex] = sideTotal[totalIndex] + swap[integerArrayIndex + integerArray.length];
|
|
667
|
+
integerArrayIndex = integerArrayIndex + integerArray.length;
|
|
668
|
+
}
|
|
669
|
+
totalIndex++;
|
|
670
|
+
}
|
|
671
|
+
return sideTotal;
|
|
672
|
+
}
|
|
673
|
+
/** get Second column series grouping data
|
|
674
|
+
*
|
|
675
|
+
* @param Array
|
|
676
|
+
* @param TabularReport
|
|
677
|
+
* @param number
|
|
678
|
+
* @param Array
|
|
679
|
+
* @param Array
|
|
680
|
+
*
|
|
681
|
+
*/
|
|
682
|
+
getSeriesData(iarr, tabularReport, rCount, cCount, swap, a) {
|
|
683
|
+
let index = 0;
|
|
684
|
+
iarr.forEach((element) => {
|
|
685
|
+
let iArrayIndex = tabularReport.firstColSeries.indexOf(tabularReport.matrix.attributes[rCount + 1].series[element]);
|
|
686
|
+
const max = iArrayIndex + tabularReport.secondColData.get(tabularReport.matrix.attributes[rCount + 1].series[element]).length;
|
|
687
|
+
while (iArrayIndex < max) {
|
|
688
|
+
if (tabularReport.secondColSeries[iArrayIndex] === tabularReport.matrix.attributes[rCount + cCount].series[element]) {
|
|
689
|
+
const arr = swap.slice(index, tabularReport.integerArray.length + index);
|
|
690
|
+
let value = iArrayIndex * tabularReport.integerArray.length;
|
|
691
|
+
a.splice(value, 1, swap[index]);
|
|
692
|
+
arr.forEach((data) => {
|
|
693
|
+
a.splice(value, 1, data);
|
|
694
|
+
value++;
|
|
695
|
+
});
|
|
696
|
+
index = index + tabularReport.integerArray.length;
|
|
697
|
+
}
|
|
698
|
+
iArrayIndex++;
|
|
699
|
+
}
|
|
700
|
+
});
|
|
701
|
+
return a;
|
|
702
|
+
}
|
|
703
|
+
/** get Second column data
|
|
704
|
+
*
|
|
705
|
+
* @param TabularReport
|
|
706
|
+
*
|
|
707
|
+
*/
|
|
708
|
+
getSecondColumn(tabularReport) {
|
|
709
|
+
const rCount = tabularReport.rowGrouping.length - 1;
|
|
710
|
+
const cCount = tabularReport.colGrouping.length;
|
|
711
|
+
let count = 0;
|
|
712
|
+
let i = 0;
|
|
713
|
+
tabularReport.matrix.attributes[rCount + cCount].groupData = [];
|
|
714
|
+
const sideTotal1 = Array(tabularReport.integerArray.length).fill(0);
|
|
715
|
+
while (i < tabularReport.matrix.attributes[0].series.length) {
|
|
716
|
+
const groupData = tabularReport.matrix.attributes[rCount].groupData[i];
|
|
717
|
+
const subSeries = tabularReport.matrix.attributes[rCount + cCount].series.slice(i, i + groupData);
|
|
718
|
+
subSeries.forEach((_data) => {
|
|
719
|
+
tabularReport.matrix.attributes[rCount + cCount].groupData.push(this.getRowSpanCount(subSeries, _data));
|
|
720
|
+
});
|
|
721
|
+
i = i + groupData;
|
|
722
|
+
}
|
|
723
|
+
i = 0;
|
|
724
|
+
const __Data = new Map();
|
|
725
|
+
const __Data1 = new Map();
|
|
726
|
+
let subSeriesIndex = 0;
|
|
727
|
+
let secondColumnIndex = 0;
|
|
728
|
+
const grandTotal = Array(tabularReport.cloneDataCount.length * tabularReport.integerArray.length).fill(0);
|
|
729
|
+
const countGrandTotal = Array(tabularReport.cloneDataCount.length * tabularReport.integerArray.length + tabularReport.cloneDataCount.length).fill(0);
|
|
730
|
+
let countTotal = 0;
|
|
731
|
+
const countsGrandTotal = Array(tabularReport.secondColSeries.length).fill(0);
|
|
732
|
+
while (i < tabularReport.matrix.attributes[0].series.length) {
|
|
733
|
+
const subSeriesDataCount = [];
|
|
734
|
+
let seriesData = [];
|
|
735
|
+
let countSeriesData = [];
|
|
736
|
+
const iarr = [];
|
|
737
|
+
const groupData = tabularReport.matrix.attributes[rCount].groupData[i];
|
|
738
|
+
seriesData = [];
|
|
739
|
+
const rowCount = [];
|
|
740
|
+
const dataSeriesValues = Array(tabularReport.cloneDataCount.length * tabularReport.integerArray.length).fill(0);
|
|
741
|
+
const groupDataSeries = tabularReport.matrix.attributes[rCount].groupData[i];
|
|
742
|
+
const countArray = Array(tabularReport.secondColSeries.length).fill(0);
|
|
743
|
+
const subSeries = tabularReport.matrix.attributes[rCount + 1].series.slice(i, i + groupDataSeries);
|
|
744
|
+
const subSeriesGroupData = [];
|
|
745
|
+
subSeries.forEach((data) => {
|
|
746
|
+
subSeriesGroupData.push(this.getRowSpanCount(subSeries, data));
|
|
747
|
+
});
|
|
748
|
+
let sSeriesGDIndex = 0;
|
|
749
|
+
while (sSeriesGDIndex < subSeriesGroupData.length) {
|
|
750
|
+
const sSeries = (tabularReport.matrix.attributes[rCount + cCount].series.slice(subSeriesIndex, subSeriesIndex + subSeriesGroupData[sSeriesGDIndex]));
|
|
751
|
+
sSeries.forEach((data1) => {
|
|
752
|
+
subSeriesDataCount.push(this.getRowSpanCount(sSeries, data1));
|
|
753
|
+
});
|
|
754
|
+
subSeriesIndex = subSeriesIndex + subSeriesGroupData[sSeriesGDIndex];
|
|
755
|
+
sSeriesGDIndex = sSeriesGDIndex + subSeriesGroupData[sSeriesGDIndex];
|
|
756
|
+
}
|
|
757
|
+
let sSeriesGDCIndex = 0;
|
|
758
|
+
while (sSeriesGDCIndex < subSeriesDataCount.length) {
|
|
759
|
+
const data = tabularReport.matrix.attributes[rCount + cCount].series[i + sSeriesGDCIndex];
|
|
760
|
+
let series = [];
|
|
761
|
+
series = tabularReport.secondColData.get(subSeries[sSeriesGDCIndex]);
|
|
762
|
+
const x = tabularReport.firstColSeries.indexOf(tabularReport.matrix.attributes[rCount + 1].series[i + sSeriesGDCIndex]);
|
|
763
|
+
const m = (series.indexOf(data));
|
|
764
|
+
countArray.splice(m + x, 1, subSeriesDataCount[sSeriesGDCIndex]);
|
|
765
|
+
rowCount.push(subSeriesDataCount[sSeriesGDCIndex]);
|
|
766
|
+
iarr.push(secondColumnIndex);
|
|
767
|
+
tabularReport.integerIndex.forEach((int) => {
|
|
768
|
+
this.getSecondColIntegerData(tabularReport, int, secondColumnIndex, sSeriesGDCIndex, seriesData, subSeriesDataCount);
|
|
769
|
+
});
|
|
770
|
+
secondColumnIndex = secondColumnIndex + subSeriesDataCount[sSeriesGDCIndex];
|
|
771
|
+
sSeriesGDCIndex = sSeriesGDCIndex + subSeriesDataCount[sSeriesGDCIndex];
|
|
772
|
+
}
|
|
773
|
+
const sideTotal = this.getSideTotal(seriesData, tabularReport.integerArray);
|
|
774
|
+
if (tabularReport.integerArray.length !== 0) {
|
|
775
|
+
seriesData = this.getSeriesData(iarr, tabularReport, rCount, cCount, seriesData, dataSeriesValues);
|
|
776
|
+
}
|
|
777
|
+
countSeriesData = dataSeriesValues.slice(0);
|
|
778
|
+
countArray.forEach((countData, countIndex) => {
|
|
779
|
+
countsGrandTotal[countIndex] = (countsGrandTotal[countIndex] + countData);
|
|
780
|
+
});
|
|
781
|
+
tabularReport.cloneIntegerArray = [];
|
|
782
|
+
tabularReport.secondColSeries.forEach((element) => {
|
|
783
|
+
tabularReport.integerArray.forEach((element1) => {
|
|
784
|
+
tabularReport.cloneIntegerArray.push(element1);
|
|
785
|
+
});
|
|
786
|
+
});
|
|
787
|
+
const min = Array();
|
|
788
|
+
const max = Array();
|
|
789
|
+
dataSeriesValues.forEach((element, index) => {
|
|
790
|
+
if (tabularReport.cloneIntegerArray[index].includes('Min')) {
|
|
791
|
+
min.push(element);
|
|
792
|
+
if (element < grandTotal[index]) {
|
|
793
|
+
grandTotal[index] = element;
|
|
794
|
+
}
|
|
795
|
+
}
|
|
796
|
+
else if (tabularReport.cloneIntegerArray[index].includes('Max')) {
|
|
797
|
+
max.push(element);
|
|
798
|
+
if (element > grandTotal[index]) {
|
|
799
|
+
grandTotal[index] = element;
|
|
800
|
+
}
|
|
801
|
+
}
|
|
802
|
+
else {
|
|
803
|
+
grandTotal[index] = (grandTotal[index] + element);
|
|
804
|
+
}
|
|
805
|
+
});
|
|
806
|
+
tabularReport.grandTotal = grandTotal;
|
|
807
|
+
sideTotal.forEach((element, index1) => {
|
|
808
|
+
if (tabularReport.integerArray[index1].includes('Avg')) {
|
|
809
|
+
sideTotal[index1] = this.countGrandTotalAvg(element, dataSeriesValues.length / tabularReport.integerArray.length);
|
|
810
|
+
sideTotal1[index1] = (sideTotal1[index1] + element);
|
|
811
|
+
}
|
|
812
|
+
else if (tabularReport.integerArray[index1].includes('Min')) {
|
|
813
|
+
sideTotal[index1] = this.countMin(min);
|
|
814
|
+
if (sideTotal[index1] < sideTotal1[index1]) {
|
|
815
|
+
sideTotal1[index1] = sideTotal[index1];
|
|
816
|
+
}
|
|
817
|
+
}
|
|
818
|
+
else if (tabularReport.integerArray[index1].includes('Max')) {
|
|
819
|
+
sideTotal[index1] = this.countMax(max);
|
|
820
|
+
if (sideTotal[index1] > sideTotal1[index1]) {
|
|
821
|
+
sideTotal1[index1] = sideTotal[index1];
|
|
822
|
+
}
|
|
823
|
+
}
|
|
824
|
+
else {
|
|
825
|
+
sideTotal1[index1] = (sideTotal1[index1] + element);
|
|
826
|
+
}
|
|
827
|
+
});
|
|
828
|
+
countTotal = countTotal + rowCount.reduce((a2, b2) => a2 + b2, 0);
|
|
829
|
+
if (tabularReport.rowGrouping.length > 1) {
|
|
830
|
+
__Data.set(i, seriesData);
|
|
831
|
+
__Data1.set(i, countSeriesData);
|
|
832
|
+
tabularReport.totalRowCount.set(i, rowCount.reduce((a1, b1) => a1 + b1, 0));
|
|
833
|
+
tabularReport.sideTotal.set(i, sideTotal);
|
|
834
|
+
tabularReport.rowCountIndex.set(i, rowCount);
|
|
835
|
+
tabularReport.countsData.set(i, countArray);
|
|
836
|
+
tabularReport.dataIndexSTotal.set(count, i);
|
|
837
|
+
}
|
|
838
|
+
else {
|
|
839
|
+
__Data.set(count, seriesData);
|
|
840
|
+
__Data1.set(count, countSeriesData);
|
|
841
|
+
tabularReport.totalRowCount.set(count, rowCount.reduce((a1, b1) => a1 + b1, 0));
|
|
842
|
+
tabularReport.sideTotal.set(count, sideTotal);
|
|
843
|
+
tabularReport.rowCountIndex.set(count, rowCount);
|
|
844
|
+
tabularReport.countsData.set(count, countArray);
|
|
845
|
+
}
|
|
846
|
+
count++;
|
|
847
|
+
i = i + groupData;
|
|
848
|
+
}
|
|
849
|
+
tabularReport.grandTotal.forEach((element, indexData) => {
|
|
850
|
+
if (tabularReport.cloneIntegerArray[indexData].includes('Avg')) {
|
|
851
|
+
tabularReport.grandTotal[indexData] = this.countGrandTotalAvg(element, count);
|
|
852
|
+
}
|
|
853
|
+
});
|
|
854
|
+
sideTotal1.forEach((_elementData, indexD) => {
|
|
855
|
+
if (tabularReport.integerArray[indexD].includes('Avg')) {
|
|
856
|
+
sideTotal1[indexD] = this.countGrandTotalAvg(_elementData, count);
|
|
857
|
+
}
|
|
858
|
+
});
|
|
859
|
+
this.dataRender.emit(__Data);
|
|
860
|
+
tabularReport.seriesData = __Data;
|
|
861
|
+
tabularReport.dataRender = __Data1;
|
|
862
|
+
const integerArrayValues = Array(tabularReport.cloneDataCount.length * tabularReport.integerArray.length).fill(0);
|
|
863
|
+
this.getIntegerIndex(integerArrayValues, tabularReport);
|
|
864
|
+
tabularReport.grandTotal = grandTotal;
|
|
865
|
+
tabularReport.grandTotal = tabularReport.grandTotal.concat(sideTotal1);
|
|
866
|
+
tabularReport.sideGrandTotal = sideTotal1.concat(countTotal);
|
|
867
|
+
tabularReport.countsTotal = new Array();
|
|
868
|
+
tabularReport.countsTotal = countsGrandTotal.concat(countTotal);
|
|
869
|
+
return tabularReport;
|
|
870
|
+
}
|
|
871
|
+
/** to get series data with row count
|
|
872
|
+
*
|
|
873
|
+
* @param TabularReport
|
|
874
|
+
*
|
|
875
|
+
*/
|
|
876
|
+
rowCountData(tabularReport) {
|
|
877
|
+
const countGrandTotal = Array(tabularReport.cloneDataCount.length * tabularReport.integerArray.length + tabularReport.cloneDataCount.length).fill(0);
|
|
878
|
+
const total = tabularReport.colGrouping.length > 1 ? Array(tabularReport.secondColSeries.length).fill(0) : Array(tabularReport.colGrouping[0].uniqueSeries.length).fill(0);
|
|
879
|
+
tabularReport.matrix.attributes[0].series.forEach((element, index) => {
|
|
880
|
+
let countDataSeries = [];
|
|
881
|
+
if (tabularReport.dataRender.get(index) && tabularReport.integerArray.length !== 0) {
|
|
882
|
+
let data = [];
|
|
883
|
+
countDataSeries = tabularReport.seriesData.get(index).slice(0);
|
|
884
|
+
data = (this.getSeriesWithCount(countDataSeries, tabularReport.integerArray, tabularReport.countsData.get(index), tabularReport));
|
|
885
|
+
tabularReport.dataRender.set(index, data);
|
|
886
|
+
}
|
|
887
|
+
let x = 0;
|
|
888
|
+
countDataSeries.forEach((element1, index1) => {
|
|
889
|
+
if (this.cloneIntegerCount[index1] === 'count' || index1 === countDataSeries.length) {
|
|
890
|
+
total[x] = (total[x] + element1);
|
|
891
|
+
x++;
|
|
892
|
+
}
|
|
893
|
+
countGrandTotal[index1] = (countGrandTotal[index1] + element1);
|
|
894
|
+
});
|
|
895
|
+
});
|
|
896
|
+
tabularReport.grandTotal2 = tabularReport.grandTotal.slice(0);
|
|
897
|
+
let integerArrayIndex = tabularReport.integerArray.length - 1;
|
|
898
|
+
let index = 0;
|
|
899
|
+
while (integerArrayIndex < countGrandTotal.length) {
|
|
900
|
+
tabularReport.grandTotal2.splice(integerArrayIndex + 1, 0, total[index]);
|
|
901
|
+
integerArrayIndex = integerArrayIndex + tabularReport.integerArray.length + 1;
|
|
902
|
+
index++;
|
|
903
|
+
}
|
|
904
|
+
tabularReport.grandTotal2.splice((tabularReport.grandTotal2.length - tabularReport.integerArray.length), tabularReport.integerArray.length);
|
|
905
|
+
tabularReport.grandTotal2 = tabularReport.grandTotal2.concat(tabularReport.sideGrandTotal);
|
|
906
|
+
let x = 0;
|
|
907
|
+
tabularReport.countIntegerIndexing = tabularReport.integerIndexing.slice(0);
|
|
908
|
+
while (x < countGrandTotal.length) {
|
|
909
|
+
tabularReport.countIntegerIndexing.splice(x + tabularReport.integerArray.length, 0, null);
|
|
910
|
+
x = x + tabularReport.integerArray.length + 1;
|
|
911
|
+
}
|
|
912
|
+
tabularReport.countTotalIntegerIndexing = [];
|
|
913
|
+
tabularReport.countTotalIntegerIndexing = tabularReport.gTotalIntegerIndexing.slice(0);
|
|
914
|
+
let m = 0;
|
|
915
|
+
while (m < tabularReport.gTotalIntegerIndexing.length) {
|
|
916
|
+
tabularReport.countTotalIntegerIndexing.splice(m + tabularReport.integerArray.length, 0, null);
|
|
917
|
+
m = m + tabularReport.integerArray.length + 1;
|
|
918
|
+
}
|
|
919
|
+
if (tabularReport.subTotal) {
|
|
920
|
+
tabularReport = tabularReport.subTotalToggle(tabularReport);
|
|
921
|
+
}
|
|
922
|
+
return tabularReport;
|
|
923
|
+
}
|
|
924
|
+
getIntegerIndex(integerArrayValues, tabularReport) {
|
|
925
|
+
if (tabularReport.matrix.attributes[0].series.length > 0) {
|
|
926
|
+
let arrayIndex = 0;
|
|
927
|
+
while (arrayIndex < tabularReport.seriesData.get(0).length) {
|
|
928
|
+
let index1 = arrayIndex;
|
|
929
|
+
tabularReport.integerData.forEach((element, index) => {
|
|
930
|
+
integerArrayValues.splice(index1, 1, element);
|
|
931
|
+
index1++;
|
|
932
|
+
});
|
|
933
|
+
arrayIndex = arrayIndex + tabularReport.integerData.length;
|
|
934
|
+
}
|
|
935
|
+
tabularReport.integerIndexing = integerArrayValues;
|
|
936
|
+
tabularReport.gTotalIntegerIndexing = integerArrayValues.concat(tabularReport.integerData);
|
|
937
|
+
}
|
|
938
|
+
return tabularReport;
|
|
939
|
+
}
|
|
940
|
+
tableClickEvent(tabularReport) {
|
|
941
|
+
const tabularProperty = new ElementProperty();
|
|
942
|
+
if (tabularReport instanceof TabularReport) {
|
|
943
|
+
tabularProperty.page = null;
|
|
944
|
+
tabularProperty.element = tabularReport;
|
|
945
|
+
}
|
|
946
|
+
else {
|
|
947
|
+
tabularProperty.page = tabularReport;
|
|
948
|
+
}
|
|
949
|
+
this._tableClickEvent.emit(tabularProperty);
|
|
950
|
+
}
|
|
951
|
+
}
|
|
952
|
+
TabularReportService.ɵfac = function TabularReportService_Factory(t) { return new (t || TabularReportService)(i0.ɵɵinject(i1.HttpClient)); };
|
|
953
|
+
TabularReportService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: TabularReportService, factory: TabularReportService.ɵfac, providedIn: 'root' });
|
|
954
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TabularReportService, [{
|
|
955
|
+
type: Injectable,
|
|
956
|
+
args: [{
|
|
957
|
+
providedIn: 'root'
|
|
958
|
+
}]
|
|
959
|
+
}], function () { return [{ type: i1.HttpClient }]; }, null); })();
|
|
960
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFidWxhci1yZXBvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9heC1hcHAtY29tbW9uLWxpYi9zcmMvbGliL2VubGlnaHRlbi1saWIvcmVwb3J0L3RhYnVsYXItcmVwb3J0L3RhYnVsYXItcmVwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7OztBQU1qRCxNQUFNLE9BQU8sb0JBQW9CO0lBTS9CLFlBQW9CLFdBQXVCO1FBQXZCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBSjNDLGVBQVUsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVuRCxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQzNDLHNCQUFpQixHQUFDLEtBQUssRUFBTyxDQUFDO0lBRy9CLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsU0FBUyxDQUFDLGFBQTRCO1FBQ3BDLGFBQWEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBQyxLQUFLLEVBQUUsRUFBRTtZQUN4RCx1Q0FBdUM7WUFDekMsU0FBUyxDQUFDLFNBQVMsR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO1lBQ3hDLElBQUcsS0FBSyxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFDO2dCQUNsQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDckM7aUJBQUk7Z0JBQ0gsK0JBQStCO2dCQUMvQixJQUFJLFVBQVUsR0FBQyxDQUFDLENB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QUFNLEVBQUMsQ0FBQyxFQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUM1QyxNQUFNLEVBQUUsQ0FBQztnQkFDWCxDQUFDLENBQUMsQ0FBQztnQkFDSCxVQUFVLEdBQUMsVUFBVSxHQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO2FBQ3hEO1lBQ0QsYUFBYSxDQUFDLGVBQWUsR0FBQyxrQkFBa0IsQ0FBQztZQUNqRCxhQUFhLENBQUMscUJBQXFCLEdBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUN4RjtRQUNELE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxlQUFlLENBQUMsYUFBa0I7UUFDaEMsTUFBTSxlQUFlLEdBQUUsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUM3QyxJQUFHLGFBQWEsWUFBWSxhQUFhLEVBQUM7WUFDMUMsZUFBZSxDQUFDLElBQUksR0FBQyxJQUFJLENBQUM7WUFDMUIsZUFBZSxDQUFDLE9BQU8sR0FBQyxhQUFhLENBQUM7U0FDckM7YUFDRztZQUNGLGVBQWUsQ0FBQyxJQUFJLEdBQUMsYUFBYSxDQUFDO1NBQ3BDO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUM5QyxDQUFDOzt3RkFoZ0NZLG9CQUFvQjswRUFBcEIsb0JBQW9CLFdBQXBCLG9CQUFvQixtQkFGbkIsTUFBTTt1RkFFUCxvQkFBb0I7Y0FIaEMsVUFBVTtlQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXR0cmlidXRlRGF0YSB9IGZyb20gJy4uLy4uL2ZpZWxkcy9hdHRyaWJ1dGUtZGF0YSc7XG5pbXBvcnQgeyBFbGVtZW50UHJvcGVydHkgfSBmcm9tICcuLi8uLi9wcm9wZXJ0eS9lbGVtZW50LXByb3BlcnR5JztcbmltcG9ydCB7IFRhYnVsYXJSZXBvcnQgfSBmcm9tICcuL3RhYnVsYXItcmVwb3J0JztcblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBUYWJ1bGFyUmVwb3J0U2VydmljZSB7XG5cbiAgZGF0YVJlbmRlcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIGF0dHJBcnJheTogQXJyYXk8QXR0cmlidXRlRGF0YT47XG4gIF90YWJsZUNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgY2xvbmVJbnRlZ2VyQ291bnQ9QXJyYXk8YW55PigpO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9odHRwQ2xpZW50OiBIdHRwQ2xpZW50KXtcblxuICB9XG4gIC8qKnRvIGNvdW50IGRhdGEgY291bnQgaW4gYSBzZXJpZXNcbiAgICpcbiAgICogQHBhcmFtIFRhYnVsYXJSZXBvcnRcbiAgICpcbiAgICovXG4gIGdyb3VwRGF0YSh0YWJ1bGFyUmVwb3J0OiBUYWJ1bGFyUmVwb3J0KTogVGFidWxhclJlcG9ydHtcbiAgICB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzLmZvckVhY2goKGF0dHJpYnV0ZSxpbmRleCkgPT4ge1xuICAgICAgICAvLyB3aGVuIHJvdyBzcGFuIGlzIHRydWUgYW5kIGluZGV4IGlzIDBcbiAgICAgIGF0dHJpYnV0ZS5ncm91cERhdGEgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuICAgICAgICBpZihpbmRleCA9PT0gMCB8fCBhdHRyaWJ1dGUuY29sU3Bhbil7XG4gICAgICAgICAgdGhpcy5nZXRGaXJzdFJvd0dyb3VwaW5nKGF0dHJpYnV0ZSk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIC8vIHdoZW4gaW5kZXggaXMgZ3JlYXRlciB0aGFuIDBcbiAgICAgICAgICBsZXQgc3RhcnRJbmRleD0wO1xuICAgICAgICAgIGNvbnN0IGNsb25lU2VyaWVzPVtdO1xuICAgICAgICAgIGxldCBnZEluZGV4PTA7XG4gICAgICAgICAgd2hpbGUoc3RhcnRJbmRleDw9ICh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW2luZGV4IC0gMV0uZ3JvdXBEYXRhLmxlbmd0aC0xKSl7XG4gICAgICAgICAgICBjb25zdCBkYXRhU2VyaWVzPVtdO1xuICAgICAgICAgICAgZ2RJbmRleD10YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW2luZGV4IC0gMV0uZ3JvdXBEYXRhW3N0YXJ0SW5kZXhdO1xuICAgICAgICAgICAgY29uc3Qgc3ViU2VyaWVzID0gYXR0cmlidXRlLnNlcmllcy5zbGljZShzdGFydEluZGV4LHN0YXJ0SW5kZXgrZ2RJbmRleCk7XG4gICAgICAgICAgICBzdWJTZXJpZXMuZm9yRWFjaCgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICBhdHRyaWJ1dGUuZ3JvdXBEYXRhLnB1c2godGhpcy5nZXRSb3dTcGFuQ291bnQoc3ViU2VyaWVzLGRhdGEpKTtcbiAgICAgICAgICAgICAgLy8gdG8gcmVwbGFjZSByZXBlYXRlZCBkYXRhXG4gICAgICAgICAgICAgIGlmKGRhdGFTZXJpZXMuaW5jbHVkZXMoZGF0YSkpe1xuICAgICAgICAgICAgICAgIGRhdGFTZXJpZXMucHVzaCgncmVwZWF0ZWQnKTtcbiAgICAgICAgICAgICAgICBjbG9uZVNlcmllcy5wdXNoKCdyZXBlYXRlZCcpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICAgICAgZGF0YVNlcmllcy5wdXNoKGRhdGEpO1xuICAgICAgICAgICAgICAgIGNsb25lU2VyaWVzLnB1c2goZGF0YSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXR0cmlidXRlLmNsb25lR3JvdXBEYXRhPWF0dHJpYnV0ZS5ncm91cERhdGEuc2xpY2UoMCk7XG4gICAgICAgICAgICBzdGFydEluZGV4PXN0YXJ0SW5kZXgrZ2RJbmRleDtcblxuICAgICAgICAgIH1cbiAgICAgICAgICBhdHRyaWJ1dGUuY2xvbmVTZXJpZXM9Y2xvbmVTZXJpZXM7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZih0YWJ1bGFyUmVwb3J0LnN1YlRvdGFsICYmIHRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmcubGVuZ3RoPT09MCl7XG4gICAgICB0YWJ1bGFyUmVwb3J0PXRhYnVsYXJSZXBvcnQuc3ViVG90YWxUb2dnbGUodGFidWxhclJlcG9ydCk7XG4gICAgfVxuICAgIHJldHVybiB0YWJ1bGFyUmVwb3J0O1xuICB9XG5cbiAgLyoqIHRvIGNvdW50IGRhdGEgY291bnQgaW4gYSBzZXJpZXNcbiAgICpcbiAgICogQHBhcmFtIHN0cmluZ1xuICAgKiBAcGFyYW0gYW55XG4gICAqXG4gICAqL1xuICBnZXRSb3dTcGFuQ291bnQoc2VyaWVzOiBBcnJheTxhbnk+ICxrZXk6IGFueSk6IG51bWJlciB7XG4gICAgcmV0dXJuICBzZXJpZXMuZmlsdGVyKHN0ciA9PiBzdHIgPT09IGtleSkubGVuZ3RoO1xuICB9XG5cbiAgLyoqIHRvIGNvdW50IGZpcnN0IHJvdyBncm91cGluZyBkYXRhIGNvdW50XG4gICAqXG4gICAqIEBwYXJhbSBBdHRyaWJ1dGVEYXRhXG4gICAqXG4gICAqL1xuICBnZXRGaXJzdFJvd0dyb3VwaW5nKGF0dHJpYnV0ZTogQXR0cmlidXRlRGF0YSk6IEF0dHJpYnV0ZURhdGF7XG4gICAgY29uc3Qgc2VyaWVzPVtdO1xuICAgIGNvbnN0IHVuaXF1ZVNlcmllcz1bXTtcbiAgICBhdHRyaWJ1dGUuc2VyaWVzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIGlmKHNlcmllcy5pbmNsdWRlcyhlbGVtZW50KSl7XG4gICAgICAgIHNlcmllcy5wdXNoKCdyZXBlYXRlZCcpO1xuICAgICAgfVxuICAgICAgZWxzZXtcbiAgICAgIHNlcmllcy5wdXNoKGVsZW1lbnQpO1xuICAgICAgdW5pcXVlU2VyaWVzLnB1c2goZWxlbWVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgYXR0cmlidXRlLmNsb25lU2VyaWVzPXNlcmllcztcbiAgICBhdHRyaWJ1dGUudW5pcXVlU2VyaWVzPXVuaXF1ZVNlcmllcztcbiAgICBhdHRyaWJ1dGUuc2VyaWVzLmZvckVhY2goKGRhdGEpID0+IHtcbiAgICAgIGF0dHJpYnV0ZS5ncm91cERhdGEucHVzaCh0aGlzLmdldFJvd1NwYW5Db3VudChhdHRyaWJ1dGUuc2VyaWVzLGRhdGEpKTtcbiAgICB9KTtcbiAgICBhdHRyaWJ1dGUuY2xvbmVHcm91cERhdGE9YXR0cmlidXRlLmdyb3VwRGF0YS5zbGljZSgwKTtcbiAgICByZXR1cm4gYXR0cmlidXRlO1xuICB9XG5cbiAgc2VuZEVtYWlsKGVtYWlsRHRvOiBhbnkpOiBQcm9taXNlPGFueT57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX2h0dHBDbGllbnQucG9zdCgncmVwb3J0cy9leHBvcnQnLCBlbWFpbER0bykuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgfSwgcmVqZWN0KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKnRvIGNvdW50IGRhdGEgY291bnQgYW5kIHNldCBjbG9uZSBkYXRhIHdoaWxlIGNvbHVtbiBncm91cGluZyBpcyBhcHBsaWVkXG4gICAqXG4gICAqIEBwYXJhbSBUYWJ1bGFyUmVwb3J0XG4gICAqXG4gICAqL1xuICBjb2x1bW5EYXRhKHRhYnVsYXJSZXBvcnQ6IFRhYnVsYXJSZXBvcnQpOiBUYWJ1bGFyUmVwb3J0e1xuICAgIHRhYnVsYXJSZXBvcnQ9dGhpcy5yb3dTcGFuKHRhYnVsYXJSZXBvcnQpO1xuICAgIHRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmcuZm9yRWFjaCgoYXR0cikgPT4ge1xuICAgICAgaWYoIWF0dHIudW5pcXVlU2VyaWVzKXtcbiAgICAgICAgaWYoIWF0dHIudW5pcXVlU2VyaWVzKXtcbiAgICAgICAgICBjb25zdCBzZXJpZXM9W107XG4gICAgICAgICAgY29uc3QgdW5pcXVlU2VyaWVzPVtdO1xuICAgICAgICAgIGF0dHIuc2VyaWVzLmZvckVhY2goKF9lbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBpZihzZXJpZXMuaW5jbHVkZXMoX2VsZW1lbnQpKXtcbiAgICAgICAgICAgICAgc2VyaWVzLnB1c2goJ3JlcGVhdGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgc2VyaWVzLnB1c2goX2VsZW1lbnQpO1xuICAgICAgICAgICAgdW5pcXVlU2VyaWVzLnB1c2goX2VsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHVuaXF1ZVNlcmllcy5zb3J0KCk7XG4gICAgICAgICAgYXR0ci51bmlxdWVTZXJpZXM9dW5pcXVlU2VyaWVzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlcy5mb3JFYWNoKChhdHRyKSA9PiB7XG4gICAgICBpZighYXR0ci51bmlxdWVTZXJpZXMpe1xuICAgICAgICBpZighYXR0ci51bmlxdWVTZXJpZXMpe1xuICAgICAgICAgIGNvbnN0IHNlcmllcz1bXTtcbiAgICAgICAgICBjb25zdCB1bmlxdWVTZXJpZXM9W107XG4gICAgICAgICAgYXR0ci5zZXJpZXMuZm9yRWFjaCgoc2VyaWVzRGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYoc2VyaWVzLmluY2x1ZGVzKHNlcmllc0RhdGEpKXtcbiAgICAgICAgICAgICAgc2VyaWVzLnB1c2goJ3JlcGVhdGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgc2VyaWVzLnB1c2goc2VyaWVzRGF0YSk7XG4gICAgICAgICAgICB1bmlxdWVTZXJpZXMucHVzaChzZXJpZXNEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB1bmlxdWVTZXJpZXMuc29ydCgpO1xuICAgICAgICAgIGF0dHIudW5pcXVlU2VyaWVzPXVuaXF1ZVNlcmllcztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRhYnVsYXJSZXBvcnQ7XG5cblxuICB9XG4gIC8qKnRvIGNvdW50IHJvd3MgZ3JvdXAgZGF0YSB3aGVuIGNvbHVtbiBncm91cGluZyBpcyBhcHBsaWVkXG4gICAqXG4gICAqIEBwYXJhbSBUYWJ1bGFyUmVwb3J0XG4gICAqXG4gICAqL1xuICByb3dTcGFuKHRhYnVsYXJSZXBvcnQ6IFRhYnVsYXJSZXBvcnQpOiBUYWJ1bGFyUmVwb3J0e1xuICAgIHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5PVtdO1xuICAgIHRhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4PVtdO1xuICAgIHRhYnVsYXJSZXBvcnQ9dGhpcy5nZXRJbnRlZ2VyQXJyYXkodGFidWxhclJlcG9ydCk7XG4gICAgaWYodGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoPT09MCl7XG4gICAgICB0YWJ1bGFyUmVwb3J0LnJvd0NvdW50PXRydWU7XG4gICAgfVxuICAgIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXMuZm9yRWFjaCgoYXR0cmlidXRlLGluZGV4KSA9PiB7XG4gICAgICBpZihpbmRleD09PTAgJiYgYXR0cmlidXRlLnJvd1NwYW4pe1xuICAgICAgICBjb25zdCBzZXJpZXM9W107XG4gICAgICAgIGNvbnN0IHVuaXF1ZVNlcmllcz1bXTtcbiAgICAgICAgYXR0cmlidXRlLnNlcmllcy5mb3JFYWNoKChkYXRhKSA9PiB7XG4gICAgICAgICAgaWYoc2VyaWVzLmluY2x1ZGVzKGRhdGEpKXtcbiAgICAgICAgICAgIHNlcmllcy5wdXNoKCdyZXBlYXRlZCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNle1xuICAgICAgICAgIHNlcmllcy5wdXNoKGRhdGEpO1xuICAgICAgICAgIHVuaXF1ZVNlcmllcy5wdXNoKGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGF0dHJpYnV0ZS5jbG9uZVNlcmllcz1zZXJpZXM7XG4gICAgICAgIGF0dHJpYnV0ZS51bmlxdWVTZXJpZXM9dW5pcXVlU2VyaWVzO1xuICAgICAgICBhdHRyaWJ1dGUuc2VyaWVzLmZvckVhY2goKGRhdGEpID0+IHtcbiAgICAgICAgICBhdHRyaWJ1dGUuZ3JvdXBEYXRhLnB1c2godGhpcy5nZXRSb3dTcGFuQ291bnQoYXR0cmlidXRlLnNlcmllcyxkYXRhKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBhdHRyaWJ1dGUuY2xvbmVHcm91cERhdGE9YXR0cmlidXRlLmdyb3VwRGF0YTtcbiAgICAgIH1cbiAgICAgIGlmKGluZGV4PT09MSAmJiBhdHRyaWJ1dGUucm93U3Bhbil7XG4gICAgICAgIGF0dHJpYnV0ZT10aGlzLmdldENsb25lRGF0YSh0YWJ1bGFyUmVwb3J0LGluZGV4LGF0dHJpYnV0ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRhYnVsYXJSZXBvcnQ7XG59XG5cbi8qKnRvIHNldCBoZWFkZXJzIHNlY3Rpb24gb2YgY29sdW1uIGdyb3VwaW5nXG4gKlxuICogQHBhcmFtIFRhYnVsYXJSZXBvcnRcbiAqIEBwYXJhbSBBdHRyaWJ1dGVEYXRhXG4gKlxuICovXG5uZXdEYXRhKHRhYnVsYXJSZXBvcnQ6IFRhYnVsYXJSZXBvcnQgLGF0dHI6IEF0dHJpYnV0ZURhdGEpOiBUYWJ1bGFyUmVwb3J0e1xuY29uc3QgY291bnQ9KHRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmcuaW5kZXhPZihhdHRyKSk7XG50YWJ1bGFyUmVwb3J0LnNlY29uZENvbERhdGE9IG5ldyBNYXA8c3RyaW5nLGFueT4oKTtcbnRhYnVsYXJSZXBvcnQuc2Vjb25kQ29sU2VyaWVzPW5ldyBBcnJheSgpO1xudGFidWxhclJlcG9ydC5maXJzdENvbFNlcmllcz1uZXcgQXJyYXkoKTtcbmNvbnN0IF9pbmRleD10YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCsoY291bnQpO1xuaWYoY291bnQ9PT0xKXtcbiAgdGFidWxhclJlcG9ydD10aGlzLmdldFNlY29uZENvbERhdGEodGFidWxhclJlcG9ydCxfaW5kZXgpO1xuXG59XG5cblxuICBpZih0YWJ1bGFyUmVwb3J0LmNvbEdyb3VwaW5nLmxlbmd0aD09PTEpe1xuICAgIHRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmdbMF0udW5pcXVlU2VyaWVzLmZvckVhY2goKHNlcmllcykgPT4ge1xuICAgICAgdGFidWxhclJlcG9ydC5jb2xEYXRhLnNldChzZXJpZXMsdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoKTtcbiAgICB9KTtcbiAgbGV0IG09MDtcbiAgdGFidWxhclJlcG9ydC5jbG9uZURhdGFDb3VudD1bXTtcbiAgdGFidWxhclJlcG9ydC5jbG9uZUludGVnZXJBcnJheT1bXTtcbiAgd2hpbGUobTwodGFidWxhclJlcG9ydC5jb2xHcm91cGluZ1swXS51bmlxdWVTZXJpZXMubGVuZ3RoKSl7XG4gICAgdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgdGFidWxhclJlcG9ydC5jbG9uZUludGVnZXJBcnJheS5wdXNoKGVsZW1lbnQpO1xuICAgIH0pO1xuICAgIHRhYnVsYXJSZXBvcnQuY2xvbmVEYXRhQ291bnQucHVzaChtKTtcblxuICAgIG0rKztcbiAgfVxufVxuaWYodGFidWxhclJlcG9ydC5jb2xHcm91cGluZy5sZW5ndGg+MSAmJiBjb3VudD09PTEpe1xuICBsZXQgX2NvdW50PTA7XG4gIHRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmdbMV0udW5pcXVlU2VyaWVzLmZvckVhY2goKHNlcmllcykgPT4ge1xuICAgICAgdGFidWxhclJlcG9ydC5jb2xEYXRhLnNldChzZXJpZXMsdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoKTtcbiAgICB9KTtcbiAgdGFidWxhclJlcG9ydC5jb2xHcm91cGluZ1swXS51bmlxdWVTZXJpZXMuZm9yRWFjaCgoc2VyaWVzKSA9PiB7XG4gICAgdGFidWxhclJlcG9ydC5jb2xEYXRhLnNldChzZXJpZXMsdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoKih0YWJ1bGFyUmVwb3J0LnNlY29uZENvbERhdGEuZ2V0KHNlcmllcykubGVuZ3RoKSk7XG4gICAgX2NvdW50Kz0odGFidWxhclJlcG9ydC5zZWNvbmRDb2xEYXRhLmdldChzZXJpZXMpLmxlbmd0aCk7XG4gIH0pO1xuICB0YWJ1bGFyUmVwb3J0LmNsb25lRGF0YUNvdW50PVtdO1xuICBsZXQgY2xvbmVEYXRhSW5kZXg9MDtjb25zdCBkYXRhMTIzPVtdO1xuICB3aGlsZShjbG9uZURhdGFJbmRleDxfY291bnQpe1xuICAgIHRhYnVsYXJSZXBvcnQuY2xvbmVEYXRhQ291bnQucHVzaChjbG9uZURhdGFJbmRleCk7XG4gICAgdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXguZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgZGF0YTEyMy5wdXNoKGVsZW1lbnQpO1xuXG4gICAgfSk7XG4gICAgY2xvbmVEYXRhSW5kZXgrKztcbiAgfVxuICB9XG4gIHJldHVybiB0YWJ1bGFyUmVwb3J0O1xufVxuICAvKip0byBnZXQgZGF0YSByZW5kZXIgdmFsdWUgd2hlbiBzaW5nbGUgY29sdW1uIGdyb3VwaW5nIGlzIGFwcGxpZWRcbiAgICpcbiAgICogQHBhcmFtIFRhYnVsYXJSZXBvcnRcbiAgICpcbiAgICovXG4gIGRhdGFGYWN0b3J5KHRhYnVsYXJSZXBvcnQ6IFRhYnVsYXJSZXBvcnQpOiBUYWJ1bGFyUmVwb3J0e1xuICBjb25zdCByQ291bnQ9dGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgtMTtcbiAgY29uc3QgY0NvdW50PXRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmcubGVuZ3RoO1xuICBsZXQgY291bnQ9MDtcbiAgdGFidWxhclJlcG9ydC5jb3VudHNEYXRhPW5ldyBNYXA8bnVtYmVyLGFueT4oKTtcblxuICBsZXQgaT0wO1xuICB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3JDb3VudCtjQ291bnRdLmdyb3VwRGF0YT1bXTtcbiAgY29uc3Qgc2lkZVRvdGFsMT1BcnJheSh0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgpLmZpbGwoMCk7XG4gIGlmKHRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmcubGVuZ3RoPT09MSl7XG4gIHdoaWxlKGk8dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1swXS5zZXJpZXMubGVuZ3RoKXtcbiAgICBjb25zdCBncm91cERhdGE9dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnRdLmdyb3VwRGF0YVtpXTtcbiAgICAgY29uc3Qgc3ViU2VyaWVzPXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50K2NDb3VudF0uc2VyaWVzLnNsaWNlKGksaStncm91cERhdGEpO1xuICAgICBzdWJTZXJpZXMuZm9yRWFjaCgoX2RhdGEpID0+IHtcbiAgICAgIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50K2NDb3VudF0uZ3JvdXBEYXRhLnB1c2godGhpcy5nZXRSb3dTcGFuQ291bnQoc3ViU2VyaWVzLF9kYXRhKSk7XG4gICAgfSk7XG4gICAgaT1pK2dyb3VwRGF0YTtcbiAgfVxuXG5cbiAgaT0wO1xuICBjb25zdCBfX0RhdGE9bmV3IE1hcDxudW1iZXIsYW55PigpO1xuICBjb25zdCBfX0RhdGExPW5ldyBNYXA8bnVtYmVyLGFueT4oKTtcbiAgbGV0IGZpcnN0Q29sdW1uSW5kZXg9MDtcbiAgY29uc3QgZ3JhbmRUb3RhbD1BcnJheSh0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgqdGFidWxhclJlcG9ydC5jb2xHcm91cGluZ1swXS51bmlxdWVTZXJpZXMubGVuZ3RoKS5maWxsKDApO1xuICBjb25zdCBjb3VudHNHcmFuZFRvdGFsPUFycmF5KHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50K2NDb3VudF0udW5pcXVlU2VyaWVzLmxlbmd0aCkuZmlsbCgwKTtcbiAgbGV0IGNvdW50VG90YWw9MDtcbiAgd2hpbGUoaTx0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzWzBdLnNlcmllcy5sZW5ndGgpe1xuICAgIGxldCBkYXRhU2VyaWVzPVtdOyBsZXQgY291bnREYXRhU2VyaWVzPVtdO1xuICAgIGNvbnN0IGNvdW50QXJyYXk9QXJyYXkodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnQrY0NvdW50XS51bmlxdWVTZXJpZXMubGVuZ3RoKS5maWxsKDApO1xuICAgIGNvbnN0IGlhcnI9W107XG4gICAgY29uc3QgZ3JvdXBEYXRhPXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50XS5ncm91cERhdGFbaV07XG4gICAgY29uc3Qgc3ViU2VyaWVzPXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50K2NDb3VudF0uZ3JvdXBEYXRhLnNsaWNlKGksaStncm91cERhdGEpO1xuICAgIGNvbnN0IGRhdGFTdWJTZXJpZXM9dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnQrY0NvdW50XS5zZXJpZXMuc2xpY2UoaSxpK2dyb3VwRGF0YSk7XG4gICAgY29uc3QgdW5pcXVlU2VyaWVzPSBbLi4ubmV3IFNldCh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3JDb3VudCtjQ291bnRdLnNlcmllcyldO1xuICAgIGNvbnN0IGNvdW50R3JvdXBEYXRhPXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50XS5ncm91cERhdGFbaV07XG4gICAgbGV0IGNvdW50RGF0YUluZGV4PWk7XG4gICAgY29uc3QgZW5kPWkrY291bnRHcm91cERhdGE7XG4gICAgdW5pcXVlU2VyaWVzLnNvcnQoKTtcbiAgICB3aGlsZShjb3VudERhdGFJbmRleDxlbmQpe1xuICAgICAgdW5pcXVlU2VyaWVzLmZvckVhY2goKGVsZW1lbnQsZEluZGV4KSA9PiB7XG4gICAgICAgIGlmKGVsZW1lbnQ9PT10YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3JDb3VudCtjQ291bnRdLnNlcmllc1tjb3VudERhdGFJbmRleF0pe1xuICAgICAgICAgIGNvdW50QXJyYXkuc3BsaWNlKGRJbmRleCwxLHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50K2NDb3VudF0uZ3JvdXBEYXRhW2NvdW50RGF0YUluZGV4XSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY291bnREYXRhSW5kZXg9Y291bnREYXRhSW5kZXgrdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnQrY0NvdW50XS5ncm91cERhdGFbY291bnREYXRhSW5kZXhdO1xuICAgIH1cbiAgICAgICAgICAgZGF0YVNlcmllcz1bXTtcbiAgICAgICAgICBjb25zdCByb3dDb3VudD1bXTtcbiAgICAgICAgICB0YWJ1bGFyUmVwb3J0LnJvd3NEYXRhPVtdO1xuICAgICAgICAgIGxldCBzdWJTZXJpZXNJbmRleD0wO1xuICAgICAgICAgIGlmKHRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmcubGVuZ3RoPT09MSl7XG4gICAgICAgICAgY29uc3QgZGF0YVNlcmllc1ZhbHVlcz1BcnJheSh0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgqdGFidWxhclJlcG9ydC5jb2xHcm91cGluZ1swXS51bmlxdWVTZXJpZXMubGVuZ3RoKS5maWxsKDApO1xuICAgICAgICAgIHdoaWxlKHN1YlNlcmllc0luZGV4PHN1YlNlcmllcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJvd0NvdW50LnB1c2goc3ViU2VyaWVzW3N1YlNlcmllc0luZGV4XSk7XG4gICAgICAgICAgICB0YWJ1bGFyUmVwb3J0LnJvd3NEYXRhLnB1c2goZGF0YVN1YlNlcmllc1tzdWJTZXJpZXNJbmRleF0pO1xuICAgICAgICAgICAgaWFyci5wdXNoKGZpcnN0Q29sdW1uSW5kZXgpO1xuICAgICAgICAgICAgdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXguZm9yRWFjaCgoaW50KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuZ2V0Zmlyc3RDb2xJbnRlZ2VyRGF0YSh0YWJ1bGFyUmVwb3J0LGludCxmaXJzdENvbHVtbkluZGV4LHN1YlNlcmllc0luZGV4LHN1YlNlcmllcyxkYXRhU2VyaWVzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZmlyc3RDb2x1bW5JbmRleD1maXJzdENvbHVtbkluZGV4K3N1YlNlcmllc1tzdWJTZXJpZXNJbmRleF07XG4gICAgICAgICAgICBzdWJTZXJpZXNJbmRleD1zdWJTZXJpZXNJbmRleCtzdWJTZXJpZXNbc3ViU2VyaWVzSW5kZXhdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBpbmRleD0wO1xuICAgICAgICAgIGlhcnIuZm9yRWFjaCgoaW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhPSB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3JDb3VudCtjQ291bnRdLnNlcmllc1tpbnRdO1xuICAgICAgICAgICAgICBsZXQgZGF0YUluZGV4PXRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmdbMF0udW5pcXVlU2VyaWVzLmluZGV4T2YoZGF0YSk7XG4gICAgICAgICAgICAgIGRhdGFJbmRleD1kYXRhSW5kZXgqdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoO1xuICAgICAgICAgICAgICBjb25zdCBhcnI9ZGF0YVNlcmllcy5zbGljZShpbmRleCx0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgraW5kZXgpO1xuICAgICAgICAgICAgICBsZXQgIHZhbHVlPWRhdGFJbmRleDtcbiAgICAgICAgICAgICAgYXJyLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICBkYXRhU2VyaWVzVmFsdWVzLnNwbGljZSh2YWx1ZSwxLGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHZhbHVlICsrO1xuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBpbmRleD1pbmRleCt0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGg7XG5cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBzaWRlVG90YWw9dGhpcy5nZXRTaWRlVG90YWwoZGF0YVNlcmllcyx0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheSk7XG4gICAgICAgICAgZGF0YVNlcmllcz1kYXRhU2VyaWVzVmFsdWVzO1xuICAgICAgICAgIGNvdW50RGF0YVNlcmllcz1kYXRhU2VyaWVzVmFsdWVzLnNsaWNlKDApO1xuICAgICAgICAgIGNvbnN0IG1pbj1BcnJheTxudW1iZXI+KCk7XG4gICAgICAgICAgY29uc3QgbWF4PUFycmF5PG51bWJlcj4oKTtcblxuICAgICAgICAgIGRhdGFTZXJpZXNWYWx1ZXMuZm9yRWFjaCgoZWxlbWVudCxpbmQpID0+IHtcbiAgICAgICAgICAgIGlmKHRhYnVsYXJSZXBvcnQuY2xvbmVJbnRlZ2VyQXJyYXlbaW5kXS5pbmNsdWRlcygnTWluJykpe1xuICAgICAgICAgICAgICBtaW4ucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgICAgaWYoZWxlbWVudDxncmFuZFRvdGFsW2luZF0pe1xuICAgICAgICAgICAgICAgIGdyYW5kVG90YWxbaW5kXT1lbGVtZW50O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKHRhYnVsYXJSZXBvcnQuY2xvbmVJbnRlZ2VyQXJyYXlbaW5kXS5pbmNsdWRlcygnTWF4Jykpe1xuICAgICAgICAgICAgICBtYXgucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgICAgaWYoZWxlbWVudD5ncmFuZFRvdGFsW2luZF0pe1xuICAgICAgICAgICAgICAgIGdyYW5kVG90YWxbaW5kXT1lbGVtZW50O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgZ3JhbmRUb3RhbFtpbmRdPShncmFuZFRvdGFsW2luZF0rZWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc2lkZVRvdGFsLmZvckVhY2goKGVsZW1lbnQsaW5kZXgxKSA9PiB7XG4gICAgICAgICAgICBpZih0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheVtpbmRleDFdLmluY2x1ZGVzKCdBdmcnKSl7XG4gICAgICAgICAgICAgIHNpZGVUb3RhbFtpbmRleDFdPXRoaXMuY291bnRHcmFuZFRvdGFsQXZnKGVsZW1lbnQsZGF0YVNlcmllc1ZhbHVlcy5sZW5ndGgvdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoKTtcbiAgICAgICAgICAgICAgc2lkZVRvdGFsMVtpbmRleDFdPShzaWRlVG90YWwxW2luZGV4MV0rZWxlbWVudCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYodGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXlbaW5kZXgxXS5pbmNsdWRlcygnTWluJykpe1xuICAgICAgICAgICAgICBzaWRlVG90YWxbaW5kZXgxXT10aGlzLmNvdW50TWluKG1pbik7XG4gICAgICAgICAgICAgIGlmKHNpZGVUb3RhbFtpbmRleDFdPHNpZGVUb3RhbDFbaW5kZXgxXSl7XG4gICAgICAgICAgICAgICAgc2lkZVRvdGFsMVtpbmRleDFdPXNpZGVUb3RhbFtpbmRleDFdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5W2luZGV4MV0uaW5jbHVkZXMoJ01heCcpKXtcbiAgICAgICAgICAgICAgc2lkZVRvdGFsW2luZGV4MV09dGhpcy5jb3VudE1heChtYXgpO1xuICAgICAgICAgICAgICBpZihzaWRlVG90YWxbaW5kZXgxXT5zaWRlVG90YWwxW2luZGV4MV0pe1xuICAgICAgICAgICAgICAgIHNpZGVUb3RhbDFbaW5kZXgxXT1zaWRlVG90YWxbaW5kZXgxXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIHNpZGVUb3RhbDFbaW5kZXgxXT0oc2lkZVRvdGFsMVtpbmRleDFdK2VsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIC8vIGNvdW50c0dyYW5kVG90YWxcbiAgICAgICAgICBjb3VudEFycmF5LmZvckVhY2goKGNvdW50RGF0YSxjb3VudEluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb3VudHNHcmFuZFRvdGFsW2NvdW50SW5kZXhdPShjb3VudHNHcmFuZFRvdGFsW2NvdW50SW5kZXhdK2NvdW50RGF0YSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0YWJ1bGFyUmVwb3J0LmdyYW5kVG90YWw9Z3JhbmRUb3RhbDtcbiAgICAgICAgICBjb3VudFRvdGFsPWNvdW50VG90YWwrcm93Q291bnQucmVkdWNlKChhMiwgYjIpID0+IGEyICsgYjIsIDApO1xuICAgICAgICAgIGlmKHRhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoPjEpe1xuICAgICAgICAgICAgX19EYXRhLnNldChpLGRhdGFTZXJpZXMpO1xuICAgICAgICAgICAgdGFidWxhclJlcG9ydC50b3RhbFJvd0NvdW50LnNldChpLHJvd0NvdW50LnJlZHVjZSgoYTEsIGIxKSA9PiBhMSArIGIxLCAwKSk7XG4gICAgICAgICAgICB0YWJ1bGFyUmVwb3J0LnNpZGVUb3RhbC5zZXQoaSxzaWRlVG90YWwpO1xuICAgICAgICAgICAgX19EYXRhMS5zZXQoaSxjb3VudERhdGFTZXJpZXMpO1xuICAgICAgICAgICAgdGFidWxhclJlcG9ydC5yb3dDb3VudEluZGV4LnNldChpLHJvd0NvdW50KTtcbiAgICAgICAgICAgIHRhYnVsYXJSZXBvcnQuY291bnRzRGF0YS5zZXQoaSxjb3VudEFycmF5KTtcbiAgICAgICAgICAgIHRhYnVsYXJSZXBvcnQuZGF0YUluZGV4U1RvdGFsLnNldChjb3VudCxpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIF9fRGF0YS5zZXQoY291bnQsZGF0YVNlcmllcyk7XG4gICAgICAgICAgICBfX0RhdGExLnNldChjb3VudCxjb3VudERhdGFTZXJpZXMpO1xuICAgICAgICAgICAgdGFidWxhclJlcG9ydC50b3RhbFJvd0NvdW50LnNldChjb3VudCxyb3dDb3VudC5yZWR1Y2UoKGEyLCBiMikgPT4gYTIgKyBiMiwgMCkpO1xuICAgICAgICAgICAgdGFidWxhclJlcG9ydC5zaWRlVG90YWwuc2V0KGNvdW50LHNpZGVUb3RhbCk7XG4gICAgICAgICAgICB0YWJ1bGFyUmVwb3J0LnJvd0NvdW50SW5kZXguc2V0KGNvdW50LHJvd0NvdW50KTtcbiAgICAgICAgICAgIHRhYnVsYXJSZXBvcnQuY291bnRzRGF0YS5zZXQoY291bnQsY291bnRBcnJheSk7XG5cbiAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICBjb3VudCsrO1xuICAgIGk9aStncm91cERhdGE7XG5cbiAgfVxuICBpZih0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzWzBdLnNlcmllcy5sZW5ndGg+MCl7XG4gIHRhYnVsYXJSZXBvcnQuZ3JhbmRUb3RhbC5mb3JFYWNoKChlbGVtZW50LGluZGV4KSA9PiB7XG4gICAgaWYodGFidWxhclJlcG9ydC5jbG9uZUludGVnZXJBcnJheVtpbmRleF0uaW5jbHVkZXMoJ0F2ZycpKXtcbiAgICAgIHRhYnVsYXJSZXBvcnQuZ3JhbmRUb3RhbFtpbmRleF09dGhpcy5jb3VudEdyYW5kVG90YWxBdmcoZWxlbWVudCxjb3VudCk7XG4gICAgfVxuICB9KTtcbiAgfVxuICBzaWRlVG90YWwxLmZvckVhY2goKGVsZW1lbnQsaW5kZXhEKSA9PiB7XG4gICAgaWYodGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXlbaW5kZXhEXS5pbmNsdWRlcygnQXZnJykpe1xuICAgICAgc2lkZVRvdGFsMVtpbmRleERdPXRoaXMuY291bnRHcmFuZFRvdGFsQXZnKGVsZW1lbnQsY291bnQpO1xuICAgIH1cblxuICB9KTtcbiAgdGFidWxhclJlcG9ydC5zZXJpZXNEYXRhPV9fRGF0YTtcbiAgdGhpcy5kYXRhUmVuZGVyLmVtaXQoX19EYXRhKTtcbiAgY29uc3QgaW50ZWdlckFycmF5VmFsdWVzPUFycmF5KHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCp0YWJ1bGFyUmVwb3J0LmNvbEdyb3VwaW5nWzBdLnVuaXF1ZVNlcmllcy5sZW5ndGgpLmZpbGwoMCk7XG4gIHRhYnVsYXJSZXBvcnQ9dGhpcy5nZXRJbnRlZ2VySW5kZXgoaW50ZWdlckFycmF5VmFsdWVzLHRhYnVsYXJSZXBvcnQpO1xuICB0YWJ1bGFyUmVwb3J0LmRhdGFSZW5kZXI9X19EYXRhMTtcbiAgdGFidWxhclJlcG9ydC5ncmFuZFRvdGFsPXRhYnVsYXJSZXBvcnQuZ3JhbmRUb3RhbC5jb25jYXQoc2lkZVRvdGFsMSk7XG4gIHRhYnVsYXJSZXBvcnQuc2lkZUdyYW5kVG90YWw9c2lkZVRvdGFsMS5jb25jYXQoY291bnRUb3RhbCk7XG4gIHRhYnVsYXJSZXBvcnQuY291bnRzVG90YWw9bmV3IEFycmF5PG51bWJlcj4oKTtcbiAgdGFidWxhclJlcG9ydC5jb3VudHNUb3RhbD1jb3VudHNHcmFuZFRvdGFsLmNvbmNhdChjb3VudFRvdGFsKTtcbn1cblxuICBpZih0YWJ1bGFyUmVwb3J0LmNvbEdyb3VwaW5nLmxlbmd0aD09PTIpe1xuICAgIHRhYnVsYXJSZXBvcnQ9dGhpcy5nZXRTZWNvbmRDb2x1bW4odGFidWxhclJlcG9ydCk7XG4gICAgfVxuICBpZih0YWJ1bGFyUmVwb3J0LnN1YlRvdGFsKXtcbiAgICAgIHRhYnVsYXJSZXBvcnQ9dGFidWxhclJlcG9ydC5zdWJUb3RhbFRvZ2dsZSh0YWJ1bGFyUmVwb3J0KTtcbiAgfVxuXG5cbiAgaWYodGFidWxhclJlcG9ydC5zdWJUb3RhbCAmJiAhdGFidWxhclJlcG9ydC5yb3dDb3VudCl7XG4gICAgICB0YWJ1bGFyUmVwb3J0PXRhYnVsYXJSZXBvcnQuc3ViVG90YWxUb2dnbGUodGFidWxhclJlcG9ydCk7XG4gIH1cblxuICByZXR1cm4gdGFidWxhclJlcG9ydDtcbn1cblxuY291bnRHcmFuZFRvdGFsQXZnKGRhdGE6IG51bWJlcixjb3VudDogbnVtYmVyKTogbnVtYmVye1xuICByZXR1cm4gKHBhcnNlRmxvYXQoKGRhdGEvY291bnQpLnRvRml4ZWQoMikpKTtcbn1cblxuLy8gY291bnRHcmFuZFRvdGFsTWluKHNlcmllczopXG5cbi8qKiByZXR1cm5zIHN1bSBvZiBpbnRlZ2VyICBjb2x1bW5zIHN1YlNlcmllcyBmb3IgY29sdW1uIGdyb3VwaW5nXG4gKlxuICogQHBhcmFtIEFycmF5XG4gKlxuICovXG5jb3VudFN1bShzZXJpZXM6IEFycmF5PG51bWJlcj4pOiBudW1iZXJ7XG4gIGxldCB0b3RhbCA9IDA7XG4gIGZvcihjb25zdCBkYXRhIG9mIHNlcmllcyl7XG4gICAgdG90YWwgKz0gTnVtYmVyKGRhdGEpO1xuICB9XG4gIHJldHVybiB0b3RhbDtcbn1cblxuLyoqIHJldHVybnMgQXZlcmFnZSBvZiBpbnRlZ2VyICBjb2x1bW5zIHN1YlNlcmllcyBmb3IgY29sdW1uIGdyb3VwaW5nXG4gKlxuICogQHBhcmFtIEFycmF5XG4gKlxuICovXG5jb3VudEF2ZyhzZXJpZXM6IEFycmF5PG51bWJlcj4pOiBudW1iZXJ7XG4gIGxldCB0b3RhbCA9IDA7XG4gIGZvcihjb25zdCBkYXRhIG9mIHNlcmllcyl7XG4gICAgdG90YWwgKz0gTnVtYmVyKGRhdGEpO1xuICB9XG4gIHJldHVybiAocGFyc2VGbG9hdCgodG90YWwvc2VyaWVzLmxlbmd0aCkudG9GaXhlZCgyKSkpO1xufVxuXG4vKiogcmV0dXJucyBNYXggb2YgaW50ZWdlciBjb2x1bW5zIHN1YlNlcmllcyBmb3IgY29sdW1uIGdyb3VwaW5nXG4gKlxuICogQHBhcmFtIEFycmF5XG4gKlxuICovXG5jb3VudE1heChzZXJpZXM6IEFycmF5PG51bWJlcj4pOiBudW1iZXJ7XG4gIHJldHVybiAgTWF0aC5tYXgoLi4uc2VyaWVzKTtcbn1cblxuLyoqIHJldHVybnMgbWluIG9mIGludGVnZXIgIGNvbHVtbnMgc3ViU2VyaWVzIGZvciBjb2x1bW4gZ3JvdXBpbmdcbiAqXG4gKiBAcGFyYW0gQXJyYXlcbiAqXG4gKi9cbmNvdW50TWluKHNlcmllczogQXJyYXk8bnVtYmVyPik6IG51bWJlcntcbiAgcmV0dXJuICBNYXRoLm1pbiguLi5zZXJpZXMpO1xufVxuXG4vKiogcmV0dXJucyBjb3VudCBvZiB1bmlxdWUgZGF0YSBmb3IgIGludGVnZXIgY29sdW1ucyBzdWJTZXJpZXMgaW4gY29sdW1uIGdyb3VwaW5nXG4gKlxuICogQHBhcmFtIEFycmF5XG4gKlxuICovXG5nZXRVbmlxdWUoc2VyaWVzOiBBcnJheTxhbnk+KTogbnVtYmVye1xuICByZXR1cm4gWy4uLm5ldyBTZXQoc2VyaWVzKV0ubGVuZ3RoO1xuXG59XG5cbi8qKiB0byBhZGQgaW50ZWdlciBjb2x1bW4gaW4gSW50ZWdlckFycmF5XG4gKlxuICogQHBhcmFtIFRhYnVsYXJSZXBvcnRcbiAqXG4gKi9cbmdldEludGVnZXJBcnJheSh0YWJ1bGFyUmVwb3J0OiBUYWJ1bGFyUmVwb3J0KTogVGFidWxhclJlcG9ydHtcbiAgY29uc3QgZGF0YT1bXTtcbiAgICB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzLmZvckVhY2goKGF0dHJpYnV0ZSxpbmRleCkgPT4ge1xuICAgICAgaWYoICFhdHRyaWJ1dGUucm93U3BhbiAmJiAhYXR0cmlidXRlLmNvbFNwYW4pe1xuICAgICAgICBpZihhdHRyaWJ1dGUuYWdncmVnYXRlLnNob3dVbmlxdWVDb3VudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkucHVzaCgndW5pcXVlICcrYXR0cmlidXRlLmxhYmVsKTtcbiAgICAgICAgICAgIHRhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4LnB1c2godGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlcy5pbmRleE9mKGF0dHJpYnV0ZSkpO1xuICAgICAgICAgICAgZGF0YS5wdXNoKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXMuaW5kZXhPZihhdHRyaWJ1dGUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYoYXR0cmlidXRlLnR5cGU9PT0naW50JyAmJiAhYXR0cmlidXRlLnJvd1NwYW4gJiYgIWF0dHJpYnV0ZS5jb2xTcGFuKXtcbiAgICAgICAgdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXgucHVzaCh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzLmluZGV4T2YoYXR0cmlidXRlKSk7XG4gICAgICAgIGlmKGF0dHJpYnV0ZS5hZ2dyZWdhdGUuc2hvd1N1bSlcbiAgICAgICAge1xuICAgICAgICAgIGRhdGEucHVzaCh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzLmluZGV4T2YoYXR0cmlidXRlKSk7XG4gICAgICAgICAgICB0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5wdXNoKCdTdW0gJythdHRyaWJ1dGUubGFiZWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoYXR0cmlidXRlLmFnZ3JlZ2F0ZS5zaG93QXZnKVxuICAgICAgICB7XG4gICAgICAgICAgZGF0YS5wdXNoKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXMuaW5kZXhPZihhdHRyaWJ1dGUpKTtcbiAgICAgICAgICAgIHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5LnB1c2goJ0F2ZyAnK2F0dHJpYnV0ZS5sYWJlbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZihhdHRyaWJ1dGUuYWdncmVnYXRlLnNob3dNYXgpXG4gICAgICAgIHtcbiAgICAgICAgICBkYXRhLnB1c2godGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlcy5pbmRleE9mKGF0dHJpYnV0ZSkpO1xuICAgICAgICAgICAgdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkucHVzaCgnTWF4ICcrYXR0cmlidXRlLmxhYmVsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGF0dHJpYnV0ZS5hZ2dyZWdhdGUuc2hvd01pbilcbiAgICAgICAge1xuICAgICAgICAgIGRhdGEucHVzaCh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzLmluZGV4T2YoYXR0cmlidXRlKSk7XG4gICAgICAgICAgICB0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5wdXNoKCdNaW4gJythdHRyaWJ1dGUubGFiZWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIHRhYnVsYXJSZXBvcnQuaW50ZWdlckRhdGE9ZGF0YTtcblxuICByZXR1cm4gdGFidWxhclJlcG9ydDtcbn1cblxuLyoqIHRvIGNvdW50IGNsb25lIGRhdGEgZm9yIHNpbmdsZSBjb2x1bW4gZ3JvdXBpbmdcbiAqXG4gKiBAcGFyYW0gdGFidWxhclJlcG9ydFxuICogQHBhcmFtIG51bWJlclxuICogQHBhcmFtIGF0dHJpYnV0ZURhdGFcbiAqXG4gKi9cbmdldENsb25lRGF0YSh0YWJ1bGFyUmVwb3J0OiBUYWJ1bGFyUmVwb3J0LCBpbmRleDogbnVtYmVyLGF0dHJpYnV0ZTogQXR0cmlidXRlRGF0YSk6IEF0dHJpYnV0ZURhdGF7XG4gIGxldCBzdGFydEluZGV4PTA7XG4gIGNvbnN0IGNsb25lU2VyaWVzPVtdO1xuICBsZXQgZ2RJbmRleD0wO1xuICB3aGlsZShzdGFydEluZGV4PD0gKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbaW5kZXggLSAxXS5ncm91cERhdGEubGVuZ3RoLTEpKXtcbiAgICBjb25zdCBkYXRhU2VyaWVzPVtdO1xuICAgIGdkSW5kZXg9dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbmRleCAtIDFdLmdyb3VwRGF0YVtzdGFydEluZGV4XTtcbiAgICBjb25zdCBzdWJTZXJpZXMgPSBhdHRyaWJ1dGUuc2VyaWVzLnNsaWNlKHN0YXJ0SW5kZXgsc3RhcnRJbmRleCtnZEluZGV4KTtcbiAgICBzdWJTZXJpZXMuZm9yRWFjaCgoc3ViU2VyaWVzRGF0YSkgPT4ge1xuICAgICAgYXR0cmlidXRlLmdyb3VwRGF0YS5wdXNoKHRoaXMuZ2V0Um93U3BhbkNvdW50KHN1YlNlcmllcyxzdWJTZXJpZXNEYXRhKSk7XG4gICAgICAvLyB0byByZXBsYWNlIHJlcGVhdGVkIHN1YlNlcmllc0RhdGFcbiAgICAgIGlmKGRhdGFTZXJpZXMuaW5jbHVkZXMoc3ViU2VyaWVzRGF0YSkpe1xuICAgICAgICBkYXRhU2VyaWVzLnB1c2goJ3JlcGVhdGVkJyk7XG4gICAgICAgIGNsb25lU2VyaWVzLnB1c2goJ3JlcGVhdGVkJyk7XG4gICAgICB9XG4gICAgICBlbHNle1xuICAgICAgICBkYXRhU2VyaWVzLnB1c2goc3ViU2VyaWVzRGF0YSk7XG4gICAgICAgIGNsb25lU2VyaWVzLnB1c2goc3ViU2VyaWVzRGF0YSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgYXR0cmlidXRlLmNsb25lR3JvdXBEYXRhPWF0dHJpYnV0ZS5ncm91cERhdGEuc2xpY2UoMCk7XG4gICAgc3RhcnRJbmRleD1zdGFydEluZGV4K2dkSW5kZXg7XG5cbiAgfVxuICBhdHRyaWJ1dGUuY2xvbmVTZXJpZXM9Y2xvbmVTZXJpZXM7XG5cbiAgcmV0dXJuIGF0dHJpYnV0ZTtcbn1cbi8qKiB0byBjb3VudCBjbG9uZSBkYXRhIGZvciBkb3VibGUgY29sdW1uIGdyb3VwaW5nXG4gKlxuICogQHBhcmFtIHRhYnVsYXJSZXBvcnRcbiAqIEBwYXJhbSBudW1iZXJcbiAqXG4gKi9cbmdldFNlY29uZENvbERhdGEodGFidWxhclJlcG9ydDogVGFidWxhclJlcG9ydCwgX2luZGV4OiBudW1iZXIpOiBUYWJ1bGFyUmVwb3J0e1xuICB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW19pbmRleC0xXS51bmlxdWVTZXJpZXMuZm9yRWFjaCgodW5pcXVlKSA9PiB7XG4gICAgY29uc3QgZGF0YT1bXTtcbiAgICB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW19pbmRleC0xXS5zZXJpZXMuZm9yRWFjaCgoc2VyaWVzLGluZGV4KSA9PiB7XG4gICAgICAgIGlmKHVuaXF1ZT09PXNlcmllcyl7XG4gICAgICAgICAgaWYoIWRhdGEuaW5jbHVkZXModGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tfaW5kZXhdLnNlcmllc1tpbmRleF0pKXtcbiAgICAgICAgICAgIGRhdGEucHVzaCh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW19pbmRleF0uc2VyaWVzW2luZGV4XSk7XG4gICAgICAgICAgICB0YWJ1bGFyUmVwb3J0LnNlY29uZENvbFNlcmllcy5wdXNoKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbX2luZGV4XS5zZXJpZXNbaW5kZXhdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLy8gdGFidWxhclJlcG9ydC5zZWNvbmRTZXJpZXM9XG4gICAgICB0YWJ1bGFyUmVwb3J0LnNlY29uZENvbERhdGEuc2V0KHVuaXF1ZSxkYXRhKTtcbiAgICAgIGRhdGEuZm9yRWFjaCgoKSA9PiB7XG4gICAgICAgIHRhYnVsYXJSZXBvcnQuZmlyc3RDb2xTZXJpZXMucHVzaCh1bmlxdWUpO1xuXG4gICAgICB9KTtcbiAgICB9KTtcbiAgIHRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmdbMF0udW5pcXVlU2VyaWVzPVsuLi5uZXcgU2V0KHRhYnVsYXJSZXBvcnQuZmlyc3RDb2xTZXJpZXMpXTtcbiAgIHJldHVybiB0YWJ1bGFyUmVwb3J0O1xufVxuXG4vKiogY3JlYXRlIHNlcmllcyB3aXRoIHJvdyBjb3VudFxuICpcbiAqIEBwYXJhbSB0YWJ1bGFyUmVwb3J0XG4gKiBAcGFyYW0gQXJyYXlcbiAqIEBwYXJhbSBBcnJheVxuICpcbiAqL1xuZ2V0U2VyaWVzV2l0aENvdW50KHN3YXAxOiBBcnJheTxudW1iZXI+LGludGVnZXJBcnJheTogQXJyYXk8YW55Pixyb3dDb3VudDogQXJyYXk8bnVtYmVyPix0YWJ1bGFyUmVwb3J0OiBUYWJ1bGFyUmVwb3J0KTogQXJyYXk8bnVtYmVyPntcbiAgbGV0IGludGVnZXJBcnJheUluZGV4PWludGVnZXJBcnJheS5sZW5ndGgtMTsgbGV0IGRhdGFJbmRleD0wO1xuIHRoaXMuY2xvbmVJbnRlZ2VyQ291bnQ9QXJyYXkoc3dhcDEubGVuZ3RoKS5maWxsKDApO1xuIGNvbnN0IGNvdW50SW5kZXg9QXJyYXkoc3dhcDEubGVuZ3RoKS5maWxsKDApO1xuICB3aGlsZShpbnRlZ2VyQXJyYXlJbmRleDxzd2FwMS5sZW5ndGgpe1xuICAgIGlmKHN3YXAxW2ludGVnZXJBcnJheUluZGV4XT4wKXtcbiAgICAgIGNvdW50SW5kZXguc3BsaWNlKGludGVnZXJBcnJheUluZGV4KzEsMCxudWxsKTtcbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIGNvdW50SW5kZXguc3BsaWNlKGludGVnZXJBcnJheUluZGV4KzEsMCxudWxsKTtcbiAgICB9XG4gICAgc3dhcDEuc3BsaWNlKGludGVnZXJBcnJheUluZGV4KzEsMCxyb3dDb3VudFtkYXRhSW5kZXhdKTtcbiAgICB0aGlzLmNsb25lSW50ZWdlckNvdW50LnNwbGljZShpbnRlZ2VyQXJyYXlJbmRleCsxLDAsJ2NvdW50Jyk7XG4gICAgaWYoaW50ZWdlckFycmF5SW5kZXg8dGFidWxhclJlcG9ydC5jbG9uZUludGVnZXJBcnJheS5sZW5ndGgpe1xuICAgICAgdGhpcy5jbG9uZUludGVnZXJDb3VudC5zcGxpY2UoaW50ZWdlckFycmF5SW5kZXgrMSwxLCdjb3VudCcpO31cbiAgICBpbnRlZ2VyQXJyYXlJbmRleD1pbnRlZ2VyQXJyYXlJbmRleCtpbnRlZ2VyQXJyYXkubGVuZ3RoKzE7XG4gICAgZGF0YUluZGV4Kys7XG4gIH1cbiAgcmV0dXJuIHN3YXAxO1xufVxuXG4vKiogY291bnQgSW50ZWdlciBjb2x1bW5zIHN1YlNlcmllcyBEYXRhIGZvciBzaW5nbGUgY29sdW1uIGdyb3VwaW5nXG4gKlxuICogQHBhcmFtIHRhYnVsYXJSZXBvcnRcbiAqIEBwYXJhbSBudW1iZXJcbiAqIEBwYXJhbSBudW1iZXJcbiAqIEBwYXJhbSBudW1iZXJcbiAqIEBwYXJhbSBBcnJheVxuICogQHBhcmFtIEFycmF5XG4gKlxuICovXG5nZXRmaXJzdENvbEludGVnZXJEYXRhKHRhYnVsYXJSZXBvcnQ6IFRhYnVsYXJSZXBvcnQsaW50OiBudW1iZXIsZmlyc3RDb2x1bW5JbmRleDogbnVtYmVyLGo6IG51bWJlcixzdWJTZXJpZXM6IEFycmF5PGFueT4sc3dhcDogQXJyYXk8bnVtYmVyPik6IEFycmF5PG51bWJlcj57XG4gIGlmKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbaW50XS5hZ2dyZWdhdGUuc2hvd1VuaXF1ZUNvdW50KXtcbiAgICBzd2FwLnB1c2godGhpcy5nZXRVbmlxdWUodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLnNlcmllcy5zbGljZShmaXJzdENvbHVtbkluZGV4LGZpcnN0Q29sdW1uSW5kZXgrc3ViU2VyaWVzW2pdKSkpO1xuICB9XG4gIGlmKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbaW50XS5hZ2dyZWdhdGUuc2hvd1N1bSl7XG4gICAgc3dhcC5wdXNoKHRoaXMuY291bnRTdW0odGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLnNlcmllcy5zbGljZShmaXJzdENvbHVtbkluZGV4LGZpcnN0Q29sdW1uSW5kZXgrc3ViU2VyaWVzW2pdKSkpO1xuICB9XG4gIGlmKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbaW50XS5hZ2dyZWdhdGUuc2hvd0F2Zyl7XG4gICAgc3dhcC5wdXNoKHRoaXMuY291bnRBdmcodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLnNlcmllcy5zbGljZShmaXJzdENvbHVtbkluZGV4LGZpcnN0Q29sdW1uSW5kZXgrc3ViU2VyaWVzW2pdKSkpO1xuICB9XG4gIGlmKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbaW50XS5hZ2dyZWdhdGUuc2hvd01heCl7XG4gICAgc3dhcC5wdXNoKHRoaXMuY291bnRNYXgodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLnNlcmllcy5zbGljZShmaXJzdENvbHVtbkluZGV4LGZpcnN0Q29sdW1uSW5kZXgrc3ViU2VyaWVzW2pdKSkpO1xuICB9XG4gIGlmKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbaW50XS5hZ2dyZWdhdGUuc2hvd01pbil7XG4gICAgc3dhcC5wdXNoKHRoaXMuY291bnRNaW4odGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLnNlcmllcy5zbGljZShmaXJzdENvbHVtbkluZGV4LGZpcnN0Q29sdW1uSW5kZXgrc3ViU2VyaWVzW2pdKSkpO1xuICB9XG5cbiAgcmV0dXJuIHN3YXA7XG59XG5cbi8qKiBjb3VudCBJbnRlZ2VyIGNvbHVtbnMgc3ViU2VyaWVzIERhdGEgZm9yIGRvdWJsZSBjb2x1bW4gZ3JvdXBpbmdcbiAqXG4gKiBAcGFyYW0gdGFidWxhclJlcG9ydFxuICogQHBhcmFtIG51bWJlclxuICogQHBhcmFtIG51bWJlclxuICogQHBhcmFtIG51bWJlclxuICogQHBhcmFtIEFycmF5XG4gKiBAcGFyYW0gQXJyYXlcbiAqXG4gKi9cbmdldFNlY29uZENvbEludGVnZXJEYXRhKHRhYnVsYXJSZXBvcnQ6IFRhYnVsYXJSZXBvcnQsaW50OiBudW1iZXIsc2Vjb25kQ29sdW1uSW5kZXg6IG51bWJlcixuOiBudW1iZXIsc3dhcDogQXJyYXk8bnVtYmVyPix4eXo6IEFycmF5PGFueT4pOiBBcnJheTxudW1iZXI+e1xuICBpZih0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW2ludF0uYWdncmVnYXRlLnNob3dVbmlxdWVDb3VudCl7XG4gICAgc3dhcC5wdXNoKHRoaXMuZ2V0VW5pcXVlKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbaW50XS5zZXJpZXMuc2xpY2Uoc2Vjb25kQ29sdW1uSW5kZXgsc2Vjb25kQ29sdW1uSW5kZXgreHl6W25dKSkpO1xuICB9XG4gIGlmKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbaW50XS5hZ2dyZWdhdGUuc2hvd1N1bSl7XG4gICAgc3dhcC5wdXNoKHRoaXMuY291bnRTdW0odGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLnNlcmllcy5zbGljZShzZWNvbmRDb2x1bW5JbmRleCxzZWNvbmRDb2x1bW5JbmRleCt4eXpbbl0pKSk7XG4gIH1cbiAgaWYodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLmFnZ3JlZ2F0ZS5zaG93QXZnKXtcbiAgICBzd2FwLnB1c2godGhpcy5jb3VudEF2Zyh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW2ludF0uc2VyaWVzLnNsaWNlKHNlY29uZENvbHVtbkluZGV4LHNlY29uZENvbHVtbkluZGV4K3h5eltuXSkpKTtcbiAgfVxuICBpZih0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW2ludF0uYWdncmVnYXRlLnNob3dNYXgpe1xuICAgIHN3YXAucHVzaCh0aGlzLmNvdW50TWF4KHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbaW50XS5zZXJpZXMuc2xpY2Uoc2Vjb25kQ29sdW1uSW5kZXgsc2Vjb25kQ29sdW1uSW5kZXgreHl6W25dKSkpO1xuICB9XG4gIGlmKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbaW50XS5hZ2dyZWdhdGUuc2hvd01pbil7XG4gICAgc3dhcC5wdXNoKHRoaXMuY291bnRNaW4odGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLnNlcmllcy5zbGljZShzZWNvbmRDb2x1bW5JbmRleCxzZWNvbmRDb2x1bW5JbmRleCt4eXpbbl0pKSk7XG4gIH1cblxuICByZXR1cm4gc3dhcDtcbn1cblxuXG4vKiogY291bnQgaG9yaXpvbnRhbCBncmFuZCBUb3RhbFxuICpcbiAqIEBwYXJhbSBBcnJheVxuICogQHBhcmFtIEFycmF5XG4gKlxuICovXG5nZXRTaWRlVG90YWwoc3dhcDogQXJyYXk8bnVtYmVyPixpbnRlZ2VyQXJyYXk6IEFycmF5PGFueT4pOiBBcnJheTxudW1iZXI+e1xuICBsZXQgdG90YWxJbmRleD0wOyBsZXQgaW50ZWdlckFycmF5SW5kZXg9MDtcbiAgY29uc3Qgc2lkZVRvdGFsPUFycmF5KGludGVnZXJBcnJheS5sZW5ndGgpLmZpbGwoMCk7XG4gIHdoaWxlKHRvdGFsSW5kZXg8aW50ZWdlckFycmF5Lmxlbmd0aCl7XG4gICAgaW50ZWdlckFycmF5SW5kZXg9dG90YWxJbmRleDtcbiAgICBzaWRlVG90YWxbdG90YWxJbmRleF09c3dhcFtpbnRlZ2VyQXJyYXlJbmRleF07XG4gICAgd2hpbGUoaW50ZWdlckFycmF5SW5kZXgraW50ZWdlckFycmF5Lmxlbmd0aDxzd2FwLmxlbmd0aCl7XG4gICAgICBzaWRlVG90YWxbdG90YWxJbmRleF09c2lkZVRvdGFsW3RvdGFsSW5kZXhdK3N3YXBbaW50ZWdlckFycmF5SW5kZXgraW50ZWdlckFycmF5Lmxlbmd0aF07XG4gICAgICBpbnRlZ2VyQXJyYXlJbmRleD1pbnRlZ2VyQXJyYXlJbmRleCtpbnRlZ2VyQXJyYXkubGVuZ3RoO1xuICAgIH1cbiAgICB0b3RhbEluZGV4Kys7XG5cbiAgfVxuICByZXR1cm4gc2lkZVRvdGFsO1xufVxuXG4vKiogZ2V0IFNlY29uZCBjb2x1bW4gc2VyaWVzIGdyb3VwaW5nIGRhdGFcbiAqXG4gKiBAcGFyYW0gQXJyYXlcbiAqIEBwYXJhbSBUYWJ1bGFyUmVwb3J0XG4gKiBAcGFyYW0gbnVtYmVyXG4gKiBAcGFyYW0gQXJyYXlcbiAqIEBwYXJhbSBBcnJheVxuICpcbiAqL1xuZ2V0U2VyaWVzRGF0YShpYXJyOiBBcnJheTxudW1iZXI+LHRhYnVsYXJSZXBvcnQ6IFRhYnVsYXJSZXBvcnQsckNvdW50OiBudW1iZXIsY0NvdW50OiBudW1iZXIsc3dhcDogQXJyYXk8bnVtYmVyPixhOiBBcnJheTxudW1iZXI+KTogQXJyYXk8bnVtYmVyPntcbiAgbGV0IGluZGV4PTA7XG4gIGlhcnIuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgIGxldCBpQXJyYXlJbmRleD10YWJ1bGFyUmVwb3J0LmZpcnN0Q29sU2VyaWVzLmluZGV4T2YodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnQrMV0uc2VyaWVzW2VsZW1lbnRdKTtcbiAgICAgIGNvbnN0IG1heD1pQXJyYXlJbmRleCt0YWJ1bGFyUmVwb3J0LnNlY29uZENvbERhdGEuZ2V0KHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50KzFdLnNlcmllc1tlbGVtZW50XSkubGVuZ3RoO1xuICAgICAgd2hpbGUoaUFycmF5SW5kZXg8bWF4KXtcbiAgICAgICAgICBpZih0YWJ1bGFyUmVwb3J0LnNlY29uZENvbFNlcmllc1tpQXJyYXlJbmRleF09PT10YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3JDb3VudCtjQ291bnRdLnNlcmllc1tlbGVtZW50XSl7XG4gICAgICAgICAgICBjb25zdCBhcnI9c3dhcC5zbGljZShpbmRleCx0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgraW5kZXgpO1xuICAgICAgICAgICAgbGV0ICB2YWx1ZT1pQXJyYXlJbmRleCp0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGg7XG4gICAgICAgICAgICAgIGEuc3BsaWNlKHZhbHVlLDEsc3dhcFtpbmRleF0pO1xuICAgICAgICAgICAgICBhcnIuZm9yRWFjaCgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGEuc3BsaWNlKHZhbHVlLDEsZGF0YSk7XG4gICAgICAgICAgICAgICAgdmFsdWUgKys7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpbmRleD1pbmRleCt0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGg7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaUFycmF5SW5kZXgrKztcbiAgICAgICAgfVxuICB9KTtcbiAgcmV0dXJuIGE7XG59XG5cblxuLyoqIGdldCBTZWNvbmQgY29sdW1uIGRhdGFcbiAqXG4gKiBAcGFyYW0gVGFidWxhclJlcG9ydFxuICpcbiAqL1xuZ2V0U2Vjb25kQ29sdW1uKHRhYnVsYXJSZXBvcnQ6IFRhYnVsYXJSZXBvcnQpOiBUYWJ1bGFyUmVwb3J0e1xuY29uc3QgckNvdW50PXRhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoLTE7XG5jb25zdCBjQ291bnQ9dGFidWxhclJlcG9ydC5jb2xHcm91cGluZy5sZW5ndGg7XG5sZXQgY291bnQ9MDtcblxubGV0IGk9MDtcbnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50K2NDb3VudF0uZ3JvdXBEYXRhPVtdO1xuY29uc3Qgc2lkZVRvdGFsMT1BcnJheSh0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgpLmZpbGwoMCk7XG53aGlsZShpPHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbMF0uc2VyaWVzLmxlbmd0aCl7XG4gIGNvbnN0IGdyb3VwRGF0YT10YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3JDb3VudF0uZ3JvdXBEYXRhW2ldO1xuICAgY29uc3Qgc3ViU2VyaWVzPXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50K2NDb3VudF0uc2VyaWVzLnNsaWNlKGksaStncm91cERhdGEpO1xuICAgc3ViU2VyaWVzLmZvckVhY2goKF9kYXRhKSA9PiB7XG4gICAgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnQrY0NvdW50XS5ncm91cERhdGEucHVzaCh0aGlzLmdldFJvd1NwYW5Db3VudChzdWJTZXJpZXMsX2RhdGEpKTtcbiAgfSk7XG4gIGk9aStncm91cERhdGE7XG59XG5pPTA7XG5jb25zdCBfX0RhdGE9bmV3IE1hcDxudW1iZXIsYW55PigpO1xuY29uc3QgX19EYXRhMT1uZXcgTWFwPG51bWJlcixhbnk+KCk7XG5sZXQgc3ViU2VyaWVzSW5kZXg9MDtcbmxldCBzZWNvbmRDb2x1bW5JbmRleD0wO1xuY29uc3QgZ3JhbmRUb3RhbD1BcnJheSh0YWJ1bGFyUmVwb3J0LmNsb25lRGF0YUNvdW50Lmxlbmd0aCp0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgpLmZpbGwoMCk7XG5jb25zdCBjb3VudEdyYW5kVG90YWw9QXJyYXkodGFidWxhclJlcG9ydC5jbG9uZURhdGFDb3VudC5sZW5ndGgqdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoK3RhYnVsYXJSZXBvcnQuY2xvbmVEYXRhQ291bnQubGVuZ3RoKS5maWxsKDApO1xubGV0IGNvdW50VG90YWw9MDtcbmNvbnN0IGNvdW50c0dyYW5kVG90YWw9QXJyYXkodGFidWxhclJlcG9ydC5zZWNvbmRDb2xTZXJpZXMubGVuZ3RoKS5maWxsKDApO1xud2hpbGUoaTx0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzWzBdLnNlcmllcy5sZW5ndGgpe1xuICBjb25zdCBzdWJTZXJpZXNEYXRhQ291bnQ9W107XG4gIGxldCBzZXJpZXNEYXRhPVtdOyBsZXQgY291bnRTZXJpZXNEYXRhPVtdO1xuICBjb25zdCBpYXJyPVtdO1xuICAgY29uc3QgZ3JvdXBEYXRhPXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50XS5ncm91cERhdGFbaV07XG4gICAgICAgIHNlcmllc0RhdGE9W107XG4gICAgICAgIGNvbnN0IHJvd0NvdW50PVtdO1xuICAgICAgICBjb25zdCBkYXRhU2VyaWVzVmFsdWVzPUFycmF5KHRhYnVsYXJSZXBvcnQuY2xvbmVEYXRhQ291bnQubGVuZ3RoKnRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCkuZmlsbCgwKTtcbiAgICAgICAgY29uc3QgZ3JvdXBEYXRhU2VyaWVzPXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50XS5ncm91cERhdGFbaV07XG4gICAgICAgIGNvbnN0IGNvdW50QXJyYXk9QXJyYXkodGFidWxhclJlcG9ydC5zZWNvbmRDb2xTZXJpZXMubGVuZ3RoKS5maWxsKDApO1xuICAgICAgICBjb25zdCBzdWJTZXJpZXM9dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnQrMV0uc2VyaWVzLnNsaWNlKGksaStncm91cERhdGFTZXJpZXMpO1xuICAgICAgICBjb25zdCBzdWJTZXJpZXNHcm91cERhdGE9W107XG4gICAgICAgICBzdWJTZXJpZXMuZm9yRWFjaCgoZGF0YSkgPT4ge1xuICAgICAgICAgICBzdWJTZXJpZXNHcm91cERhdGEucHVzaCh0aGlzLmdldFJvd1NwYW5Db3VudChzdWJTZXJpZXMsZGF0YSkpO1xuICAgICAgICAgfSk7XG4gICAgICAgICBsZXQgc1Nlcmllc0dESW5kZXg9MDtcblxuXG4gICAgICAgICB3aGlsZShzU2VyaWVzR0RJbmRleDxzdWJTZXJpZXNHcm91cERhdGEubGVuZ3RoKXtcbiAgICAgICAgICBjb25zdCBzU2VyaWVzID0odGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnQrY0NvdW50XS5zZXJpZXMuc2xpY2Uoc3ViU2VyaWVzSW5kZXgsc3ViU2VyaWVzSW5kZXgrc3ViU2VyaWVzR3JvdXBEYXRhW3NTZXJpZXNHREluZGV4XSkpO1xuICAgICAgICAgIHNTZXJpZXMuZm9yRWFjaCgoZGF0YTEpID0+IHtcbiAgICAgICAgICAgIHN1YlNlcmllc0RhdGFDb3VudC5wdXNoKHRoaXMuZ2V0Um93U3BhbkNvdW50KHNTZXJpZXMsZGF0YTEpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBzdWJTZXJpZXNJbmRleD1zdWJTZXJpZXNJbmRleCtzdWJTZXJpZXNHcm91cERhdGFbc1Nlcmllc0dESW5kZXhdO1xuICAgICAgICAgIHNTZXJpZXNHREluZGV4PXNTZXJpZXNHREluZGV4K3N1YlNlcmllc0dyb3VwRGF0YVtzU2VyaWVzR0RJbmRleF07XG4gICAgICAgICB9XG4gICAgICAgICBsZXQgc1Nlcmllc0dEQ0luZGV4PTA7XG4gICAgICAgIHdoaWxlKHNTZXJpZXNHRENJbmRleDxzdWJTZXJpZXNEYXRhQ291bnQubGVuZ3RoKXtcbiAgICAgICAgICBjb25zdCBkYXRhPSB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3JDb3VudCtjQ291bnRdLnNlcmllc1tpK3NTZXJpZXNHRENJbmRleF07XG4gICAgICAgICAgbGV0IHNlcmllcz1bXTtcbiAgICAgICAgICBzZXJpZXM9dGFidWxhclJlcG9ydC5zZWNvbmRDb2xEYXRhLmdldChzdWJTZXJpZXNbc1Nlcmllc0dEQ0luZGV4XSk7XG4gICAgICAgICAgY29uc3QgeD10YWJ1bGFyUmVwb3J0LmZpcnN0Q29sU2VyaWVzLmluZGV4T2YodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnQrMV0uc2VyaWVzW2krc1Nlcmllc0dEQ0luZGV4XSk7XG4gICAgICAgICAgY29uc3QgbT0oc2VyaWVzLmluZGV4T2YoZGF0YSkpO1xuICAgICAgICAgIGNvdW50QXJyYXkuc3BsaWNlKG0reCwxLHN1YlNlcmllc0RhdGFDb3VudFtzU2VyaWVzR0RDSW5kZXhdKTtcbiAgICAgICAgICByb3dDb3VudC5wdXNoKHN1YlNlcmllc0RhdGFDb3VudFtzU2VyaWVzR0RDSW5kZXhdKTtcbiAgICAgICAgICBpYXJyLnB1c2goc2Vjb25kQ29sdW1uSW5kZXgpO1xuICAgICAgICAgIHRhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4LmZvckVhY2goKGludCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5nZXRTZWNvbmRDb2xJbnRlZ2VyRGF0YSh0YWJ1bGFyUmVwb3J0LGludCxzZWNvbmRDb2x1bW5JbmRleCxzU2VyaWVzR0RDSW5kZXgsc2VyaWVzRGF0YSxzdWJTZXJpZXNEYXRhQ291bnQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHNlY29uZENvbHVtbkluZGV4PXNlY29uZENvbHVtbkluZGV4K3N1YlNlcmllc0RhdGFDb3VudFtzU2VyaWVzR0RDSW5kZXhdO1xuICAgICAgICAgIHNTZXJpZXNHRENJbmRleD1zU2VyaWVzR0RDSW5kZXgrc3ViU2VyaWVzRGF0YUNvdW50W3NTZXJpZXNHRENJbmRleF07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzaWRlVG90YWw9dGhpcy5nZXRTaWRlVG90YWwoc2VyaWVzRGF0YSx0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheSk7XG4gICAgICAgIGlmKHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCE9PTApe1xuICAgICAgICBzZXJpZXNEYXRhPXRoaXMuZ2V0U2VyaWVzRGF0YShpYXJyLHRhYnVsYXJSZXBvcnQsckNvdW50LGNDb3VudCxzZXJpZXNEYXRhLGRhdGFTZXJpZXNWYWx1ZXMpO1xuICAgICAgIH1cbiAgICAgICAgY291bnRTZXJpZXNEYXRhPWRhdGFTZXJpZXNWYWx1ZXMuc2xpY2UoMCk7XG4gICAgICAgIGNvdW50QXJyYXkuZm9yRWFjaCgoY291bnREYXRhLGNvdW50SW5kZXgpID0+IHtcbiAgICAgICAgICBjb3VudHNHcmFuZFRvdGFsW2NvdW50SW5kZXhdPShjb3VudHNHcmFuZFRvdGFsW2NvdW50SW5kZXhdK2NvdW50RGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0YWJ1bGFyUmVwb3J0LmNsb25lSW50ZWdlckFycmF5PVtdO1xuICAgICAgICB0YWJ1bGFyUmVwb3J0LnNlY29uZENvbFNlcmllcy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkuZm9yRWFjaCgoZWxlbWVudDEpID0+IHtcbiAgICAgICAgICAgIHRhYnVsYXJSZXBvcnQuY2xvbmVJbnRlZ2VyQXJyYXkucHVzaChlbGVtZW50MSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBtaW49QXJyYXk8bnVtYmVyPigpO1xuICAgICAgICAgIGNvbnN0IG1heD1BcnJheTxudW1iZXI+KCk7XG5cblxuICAgICAgICBkYXRhU2VyaWVzVmFsdWVzLmZvckVhY2goKGVsZW1lbnQsaW5kZXgpID0+IHtcbiAgICAgICAgICBpZih0YWJ1bGFyUmVwb3J0LmNsb25lSW50ZWdlckFycmF5W2luZGV4XS5pbmNsdWRlcygnTWluJykpe1xuICAgICAgICAgICAgbWluLnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgICBpZihlbGVtZW50PGdyYW5kVG90YWxbaW5kZXhdKXtcbiAgICAgICAgICAgICAgZ3JhbmRUb3RhbFtpbmRleF09ZWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZih0YWJ1bGFyUmVwb3J0LmNsb25lSW50ZWdlckFycmF5W2luZGV4XS5pbmNsdWRlcygnTWF4Jykpe1xuICAgICAgICAgICAgbWF4LnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgICBpZihlbGVtZW50PmdyYW5kVG90YWxbaW5kZXhdKXtcbiAgICAgICAgICAgICAgZ3JhbmRUb3RhbFtpbmRleF09ZWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZXtcbiAgICAgICAgICBncmFuZFRvdGFsW2luZGV4XT0oZ3JhbmRUb3RhbFtpbmRleF0rZWxlbWVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuXG4gICAgICAgIHRhYnVsYXJSZXBvcnQuZ3JhbmRUb3RhbD1ncmFuZFRvdGFsO1xuICAgICAgICBzaWRlVG90YWwuZm9yRWFjaCgoZWxlbWVudCxpbmRleDEpID0+IHtcbiAgICAgICAgICBpZih0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheVtpbmRleDFdLmluY2x1ZGVzKCdBdmcnKSl7XG4gICAgICAgICAgICBzaWRlVG90YWxbaW5kZXgxXT10aGlzLmNvdW50R3JhbmRUb3RhbEF2ZyhlbGVtZW50LGRhdGFTZXJpZXNWYWx1ZXMubGVuZ3RoL3RhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCk7XG4gICAgICAgICAgICBzaWRlVG90YWwxW2luZGV4MV09KHNpZGVUb3RhbDFbaW5kZXgxXStlbGVtZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZih0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheVtpbmRleDFdLmluY2x1ZGVzKCdNaW4nKSl7XG4gICAgICAgICAgICBzaWRlVG90YWxbaW5kZXgxXT10aGlzLmNvdW50TWluKG1pbik7XG4gICAgICAgICAgICBpZihzaWRlVG90YWxbaW5kZXgxXTxzaWRlVG90YWwxW2luZGV4MV0pe1xuICAgICAgICAgICAgICBzaWRlVG90YWwxW2luZGV4MV09c2lkZVRvdGFsW2luZGV4MV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYodGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXlbaW5kZXgxXS5pbmNsdWRlcygnTWF4Jykpe1xuICAgICAgICAgICAgc2lkZVRvdGFsW2luZGV4MV09dGhpcy5jb3VudE1heChtYXgpO1xuICAgICAgICAgICAgaWYoc2lkZVRvdGFsW2luZGV4MV0+c2lkZVRvdGFsMVtpbmRleDFdKXtcbiAgICAgICAgICAgICAgc2lkZVRvdGFsMVtpbmRleDFdPXNpZGVUb3RhbFtpbmRleDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNle1xuICAgICAgICAgIHNpZGVUb3RhbDFbaW5kZXgxXT0oc2lkZVRvdGFsMVtpbmRleDFdK2VsZW1lbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvdW50VG90YWw9Y291bnRUb3RhbCtyb3dDb3VudC5yZWR1Y2UoKGEyLCBiMikgPT4gYTIgKyBiMiwgMCk7XG4gICAgICAgIGlmKHRhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoPjEpe1xuICAgICAgICAgIF9fRGF0YS5zZXQoaSxzZXJpZXNEYXRhKTtcbiAgICAgICAgICBfX0RhdGExLnNldChpLGNvdW50U2VyaWVzRGF0YSk7XG4gICAgICAgICAgdGFidWxhclJlcG9ydC50b3RhbFJvd0NvdW50LnNldChpLHJvd0NvdW50LnJlZHVjZSgoYTEsIGIxKSA9PiBhMSArIGIxLCAwKSk7XG4gICAgICAgICAgdGFidWxhclJlcG9ydC5zaWRlVG90YWwuc2V0KGksc2lkZVRvdGFsKTtcbiAgICAgICAgICB0YWJ1bGFyUmVwb3J0LnJvd0NvdW50SW5kZXguc2V0KGkscm93Q291bnQpO1xuICAgICAgICAgIHRhYnVsYXJSZXBvcnQuY291bnRzRGF0YS5zZXQoaSxjb3VudEFycmF5KTtcbiAgICAgICAgICB0YWJ1bGFyUmVwb3J0LmRhdGFJbmRleFNUb3RhbC5zZXQoY291bnQsaSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcbiAgICAgICAgICBfX0RhdGEuc2V0KGNvdW50LHNlcmllc0RhdGEpO1xuICAgICAgICAgIF9fRGF0YTEuc2V0KGNvdW50LGNvdW50U2VyaWVzRGF0YSk7XG4gICAgICAgICAgdGFidWxhclJlcG9ydC50b3RhbFJvd0NvdW50LnNldChjb3VudCxyb3dDb3VudC5yZWR1Y2UoKGExLCBiMSkgPT4gYTEgKyBiMSwgMCkpO1xuICAgICAgICAgIHRhYnVsYXJSZXBvcnQuc2lkZVRvdGFsLnNldChjb3VudCxzaWRlVG90YWwpO1xuICAgICAgICAgIHRhYnVsYXJSZXBvcnQucm93Q291bnRJbmRleC5zZXQoY291bnQscm93Q291bnQpO1xuICAgICAgICAgIHRhYnVsYXJSZXBvcnQuY291bnRzRGF0YS5zZXQoY291bnQsY291bnRBcnJheSk7XG5cbiAgICAgICAgfVxuXG4gICAgY291bnQrKztcbiAgaT1pK2dyb3VwRGF0YTtcbn1cblxuICB0YWJ1bGFyUmVwb3J0LmdyYW5kVG90YWwuZm9yRWFjaCgoZWxlbWVudCxpbmRleERhdGEpID0+IHtcbiAgICBpZih0YWJ1bGFyUmVwb3J0LmNsb25lSW50ZWdlckFycmF5W2luZGV4RGF0YV0uaW5jbHVkZXMoJ0F2ZycpKXtcbiAgICAgIHRhYnVsYXJSZXBvcnQuZ3JhbmRUb3RhbFtpbmRleERhdGFdPXRoaXMuY291bnRHcmFuZFRvdGFsQXZnKGVsZW1lbnQsY291bnQpO1xuICAgIH1cbiAgfSk7XG4gIHNpZGVUb3RhbDEuZm9yRWFjaCgoX2VsZW1lbnREYXRhLGluZGV4RCkgPT4ge1xuICAgIGlmKHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5W2luZGV4RF0uaW5jbHVkZXMoJ0F2ZycpKXtcbiAgICAgIHNpZGVUb3RhbDFbaW5kZXhEXT10aGlzLmNvdW50R3JhbmRUb3RhbEF2ZyhfZWxlbWVudERhdGEsY291bnQpO1xuICAgIH1cblxuICB9KTtcbnRoaXMuZGF0YVJlbmRlci5lbWl0KF9fRGF0YSk7XG50YWJ1bGFyUmVwb3J0LnNlcmllc0RhdGE9X19EYXRhO1xudGFidWxhclJlcG9ydC5kYXRhUmVuZGVyPV9fRGF0YTE7XG5jb25zdCBpbnRlZ2VyQXJyYXlWYWx1ZXM9QXJyYXkodGFidWxhclJlcG9ydC5jbG9uZURhdGFDb3VudC5sZW5ndGgqdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoKS5maWxsKDApO1xudGhpcy5nZXRJbnRlZ2VySW5kZXgoaW50ZWdlckFycmF5VmFsdWVzLHRhYnVsYXJSZXBvcnQpO1xudGFidWxhclJlcG9ydC5ncmFuZFRvdGFsPWdyYW5kVG90YWw7XG50YWJ1bGFyUmVwb3J0LmdyYW5kVG90YWw9dGFidWxhclJlcG9ydC5ncmFuZFRvdGFsLmNvbmNhdChzaWRlVG90YWwxKTtcbnRhYnVsYXJSZXBvcnQuc2lkZUdyYW5kVG90YWw9c2lkZVRvdGFsMS5jb25jYXQoY291bnRUb3RhbCk7XG50YWJ1bGFyUmVwb3J0LmNvdW50c1RvdGFsPW5ldyBBcnJheTxudW1iZXI+KCk7XG50YWJ1bGFyUmVwb3J0LmNvdW50c1RvdGFsPWNvdW50c0dyYW5kVG90YWwuY29uY2F0KGNvdW50VG90YWwpO1xucmV0dXJuIHRhYnVsYXJSZXBvcnQ7XG59XG5cbi8qKiB0byBnZXQgc2VyaWVzIGRhdGEgd2l0aCByb3cgY291bnRcbiAqXG4gKiBAcGFyYW0gVGFidWxhclJlcG9ydFxuICpcbiAqL1xucm93Q291bnREYXRhKHRhYnVsYXJSZXBvcnQ6IFRhYnVsYXJSZXBvcnQpOiBUYWJ1bGFyUmVwb3J0e1xuICBjb25zdCBjb3VudEdyYW5kVG90YWw9QXJyYXkodGFidWxhclJlcG9ydC5jbG9uZURhdGFDb3VudC5sZW5ndGgqdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoK3RhYnVsYXJSZXBvcnQuY2xvbmVEYXRhQ291bnQubGVuZ3RoKS5maWxsKDApO1xuICBjb25zdCB0b3RhbD10YWJ1bGFyUmVwb3J0LmNvbEdyb3VwaW5nLmxlbmd0aD4xPyBBcnJheSh0YWJ1bGFyUmVwb3J0LnNlY29uZENvbFNlcmllcy5sZW5ndGgpLmZpbGwoMCkgOkFycmF5KHRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmdbMF0udW5pcXVlU2VyaWVzLmxlbmd0aCkuZmlsbCgwKTtcbiAgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1swXS5zZXJpZXMuZm9yRWFjaCgoZWxlbWVudCxpbmRleCkgPT57XG4gICAgbGV0IGNvdW50RGF0YVNlcmllcz1bXTtcblxuICAgICAgICBpZih0YWJ1bGFyUmVwb3J0LmRhdGFSZW5kZXIuZ2V0KGluZGV4KSAmJiB0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGghPT0wKXtcbiAgICAgICAgICBsZXQgZGF0YT1bXTtcbiAgICAgICAgICBjb3VudERhdGFTZXJpZXM9dGFidWxhclJlcG9ydC5zZXJpZXNEYXRhLmdldChpbmRleCkuc2xpY2UoMCk7XG4gICAgICAgICAgICBkYXRhPSh0aGlzLmdldFNlcmllc1dpdGhDb3VudChjb3VudERhdGFTZXJpZXMsXG4gICAgICAgICAgICB0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheSx0YWJ1bGFyUmVwb3J0LmNvdW50c0RhdGEuZ2V0KGluZGV4KSx0YWJ1bGFyUmVwb3J0KSk7XG4gICAgICAgICAgICB0YWJ1bGFyUmVwb3J0LmRhdGFSZW5kZXIuc2V0KGluZGV4LGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGxldCB4PTA7XG4gICAgICAgIGNvdW50RGF0YVNlcmllcy5mb3JFYWNoKChlbGVtZW50MSxpbmRleDEpID0+IHtcbiAgICAgICAgICBpZih0aGlzLmNsb25lSW50ZWdlckNvdW50W2luZGV4MV09PT0nY291bnQnIHx8IGluZGV4MT09PWNvdW50RGF0YVNlcmllcy5sZW5ndGgpe1xuICAgICAgICAgICAgdG90YWxbeF09KHRvdGFsW3hdK2VsZW1lbnQxKTtcbiAgICAgICAgICB4Kys7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvdW50R3JhbmRUb3RhbFtpbmRleDFdPShjb3VudEdyYW5kVG90YWxbaW5kZXgxXStlbGVtZW50MSk7XG4gICAgICAgIH0pO1xuXG4gIH0pO1xuICB0YWJ1bGFyUmVwb3J0LmdyYW5kVG90YWwyPXRhYnVsYXJSZXBvcnQuZ3JhbmRUb3RhbC5zbGljZSgwKTtcbiAgbGV0IGludGVnZXJBcnJheUluZGV4PXRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aC0xO1xuICBsZXQgaW5kZXg9MDtcbiAgd2hpbGUoaW50ZWdlckFycmF5SW5kZXg8Y291bnRHcmFuZFRvdGFsLmxlbmd0aCl7XG4gICAgdGFidWxhclJlcG9ydC5ncmFuZFRvdGFsMi5zcGxpY2UoaW50ZWdlckFycmF5SW5kZXgrMSwwLHRvdGFsW2luZGV4XSk7XG4gICAgaW50ZWdlckFycmF5SW5kZXg9aW50ZWdlckFycmF5SW5kZXgrdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoKzE7XG4gICAgaW5kZXggKys7XG4gIH1cbiAgdGFidWxhclJlcG9ydC5ncmFuZFRvdGFsMi5zcGxpY2UoKHRhYnVsYXJSZXBvcnQuZ3JhbmRUb3RhbDIubGVuZ3RoLXRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCksdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoKTtcbiAgdGFidWxhclJlcG9ydC5ncmFuZFRvdGFsMj10YWJ1bGFyUmVwb3J0LmdyYW5kVG90YWwyLmNvbmNhdCh0YWJ1bGFyUmVwb3J0LnNpZGVHcmFuZFRvdGFsKTtcbiAgbGV0IHg9MDtcbiAgdGFidWxhclJlcG9ydC5jb3VudEludGVnZXJJbmRleGluZz10YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZy5zbGljZSgwKTtcbiAgd2hpbGUoeDxjb3VudEdyYW5kVG90YWwubGVuZ3RoKXtcbiAgICB0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nLnNwbGljZSh4K3RhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCwwLG51bGwpO1xuICAgIHg9eCt0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgrMTtcbiAgfVxuICB0YWJ1bGFyUmVwb3J0LmNvdW50VG90YWxJbnRlZ2VySW5kZXhpbmc9W107XG4gIHRhYnVsYXJSZXBvcnQuY291bnRUb3RhbEludGVnZXJJbmRleGluZz10YWJ1bGFyUmVwb3J0LmdUb3RhbEludGVnZXJJbmRleGluZy5zbGljZSgwKTtcblxuICBsZXQgbT0wO1xuICB3aGlsZShtPHRhYnVsYXJSZXBvcnQuZ1RvdGFsSW50ZWdlckluZGV4aW5nLmxlbmd0aCl7XG4gICAgdGFidWxhclJlcG9ydC5jb3VudFRvdGFsSW50ZWdlckluZGV4aW5nLnNwbGljZShtK3RhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCwwLG51bGwpO1xuICAgIG09bSt0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgrMTtcbiAgfVxuICBpZih0YWJ1bGFyUmVwb3J0LnN1YlRvdGFsKXtcbiAgICB0YWJ1bGFyUmVwb3J0PXRhYnVsYXJSZXBvcnQuc3ViVG90YWxUb2dnbGUodGFidWxhclJlcG9ydCk7XG4gIH1cblxucmV0dXJuIHRhYnVsYXJSZXBvcnQ7XG59XG5cblxuZ2V0SW50ZWdlckluZGV4KGludGVnZXJBcnJheVZhbHVlczogQXJyYXk8bnVtYmVyPix0YWJ1bGFyUmVwb3J0OiBUYWJ1bGFyUmVwb3J0KTogVGFidWxhclJlcG9ydHtcbiAgaWYodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1swXS5zZXJpZXMubGVuZ3RoPjApe1xuICBsZXQgYXJyYXlJbmRleD0wO1xuICB3aGlsZShhcnJheUluZGV4PHRhYnVsYXJSZXBvcnQuc2VyaWVzRGF0YS5nZXQoMCkubGVuZ3RoKXtcbiAgICBsZXQgaW5kZXgxPWFycmF5SW5kZXg7XG4gICAgdGFidWxhclJlcG9ydC5pbnRlZ2VyRGF0YS5mb3JFYWNoKChlbGVtZW50LGluZGV4KSA9PiB7XG4gICAgICBpbnRlZ2VyQXJyYXlWYWx1ZXMuc3BsaWNlKGluZGV4MSwxLGVsZW1lbnQpO1xuICAgICAgaW5kZXgxKys7XG4gICAgfSk7XG4gICAgYXJyYXlJbmRleD1hcnJheUluZGV4K3RhYnVsYXJSZXBvcnQuaW50ZWdlckRhdGEubGVuZ3RoO1xuICB9XG4gIHRhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nPWludGVnZXJBcnJheVZhbHVlcztcbiAgdGFidWxhclJlcG9ydC5nVG90YWxJbnRlZ2VySW5kZXhpbmc9aW50ZWdlckFycmF5VmFsdWVzLmNvbmNhdCh0YWJ1bGFyUmVwb3J0LmludGVnZXJEYXRhKTtcbiAgfVxuICByZXR1cm4gdGFidWxhclJlcG9ydDtcbn1cbnRhYmxlQ2xpY2tFdmVudCh0YWJ1bGFyUmVwb3J0OiBhbnkpOiB2b2lke1xuICBjb25zdCB0YWJ1bGFyUHJvcGVydHk9IG5ldyBFbGVtZW50UHJvcGVydHkoKTtcbiAgaWYodGFidWxhclJlcG9ydCBpbnN0YW5jZW9mIFRhYnVsYXJSZXBvcnQpe1xuICB0YWJ1bGFyUHJvcGVydHkucGFnZT1udWxsO1xuICB0YWJ1bGFyUHJvcGVydHkuZWxlbWVudD10YWJ1bGFyUmVwb3J0O1xuICB9XG4gIGVsc2V7XG4gICAgdGFidWxhclByb3BlcnR5LnBhZ2U9dGFidWxhclJlcG9ydDtcbiAgfVxuICB0aGlzLl90YWJsZUNsaWNrRXZlbnQuZW1pdCh0YWJ1bGFyUHJvcGVydHkpO1xufVxufVxuIl19
|