cps-ui-kit 0.165.0 → 17.1.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/esm2022/lib/components/cps-autocomplete/cps-autocomplete.component.mjs +824 -0
- package/esm2022/lib/components/cps-button/cps-button.component.mjs +190 -0
- package/esm2022/lib/components/cps-button-toggle/cps-button-toggle.component.mjs +235 -0
- package/esm2022/lib/components/cps-checkbox/cps-checkbox.component.mjs +149 -0
- package/esm2022/lib/components/cps-chip/cps-chip.component.mjs +94 -0
- package/esm2022/lib/components/cps-datepicker/cps-datepicker.component.mjs +382 -0
- package/esm2022/lib/components/cps-expansion-panel/cps-expansion-panel.component.mjs +209 -0
- package/esm2022/lib/components/cps-file-upload/cps-file-upload.component.mjs +138 -0
- package/esm2022/lib/components/cps-icon/cps-icon.component.mjs +193 -0
- package/esm2022/lib/components/cps-info-circle/cps-info-circle.component.mjs +61 -0
- package/esm2022/lib/components/cps-input/cps-input.component.mjs +386 -0
- package/{esm2020 → esm2022}/lib/components/cps-loader/cps-loader.component.mjs +5 -5
- package/esm2022/lib/components/cps-menu/cps-menu.component.mjs +552 -0
- package/esm2022/lib/components/cps-paginator/cps-paginator.component.mjs +114 -0
- package/esm2022/lib/components/cps-paginator/pipes/cps-paginate.pipe.mjs +30 -0
- package/{esm2020 → esm2022}/lib/components/cps-progress-circular/cps-progress-circular.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/cps-progress-linear/cps-progress-linear.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/cps-radio-group/cps-radio/cps-radio.component.mjs +7 -7
- package/esm2022/lib/components/cps-radio-group/cps-radio-button/cps-radio-button.component.mjs +55 -0
- package/esm2022/lib/components/cps-radio-group/cps-radio-group.component.mjs +158 -0
- package/esm2022/lib/components/cps-select/cps-select.component.mjs +615 -0
- package/esm2022/lib/components/cps-sidebar-menu/cps-sidebar-menu.component.mjs +110 -0
- package/{esm2020 → esm2022}/lib/components/cps-tab-group/cps-tab/cps-tab.component.mjs +4 -4
- package/esm2022/lib/components/cps-tab-group/cps-tab-group.component.mjs +303 -0
- package/esm2022/lib/components/cps-table/components/internal/cps-sort-icon/cps-sort-icon.component.mjs +79 -0
- package/esm2022/lib/components/cps-table/components/internal/table-column-filter/table-column-filter.component.mjs +408 -0
- package/esm2022/lib/components/cps-table/components/internal/table-column-filter-constraint/table-column-filter-constraint.component.mjs +149 -0
- package/esm2022/lib/components/cps-table/components/internal/table-row-menu/table-row-menu.component.mjs +88 -0
- package/esm2022/lib/components/cps-table/cps-table.component.mjs +941 -0
- package/esm2022/lib/components/cps-table/directives/cps-table-column-filter.directive.mjs +181 -0
- package/{esm2020 → esm2022}/lib/components/cps-table/directives/cps-table-column-sortable.directive.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/cps-table/directives/cps-table-header-selectable.directive.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/cps-table/directives/cps-table-row-selectable.directive.mjs +5 -5
- package/esm2022/lib/components/cps-table/directives/internal/table-unsort.directive.mjs +220 -0
- package/esm2022/lib/components/cps-tag/cps-tag.component.mjs +136 -0
- package/esm2022/lib/components/cps-textarea/cps-textarea.component.mjs +291 -0
- package/esm2022/lib/components/cps-timepicker/cps-timepicker.component.mjs +351 -0
- package/esm2022/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.mjs +251 -0
- package/esm2022/lib/components/cps-tree-select/cps-tree-select.component.mjs +87 -0
- package/esm2022/lib/components/cps-tree-table/cps-tree-table.component.mjs +1196 -0
- package/{esm2020 → esm2022}/lib/components/cps-tree-table/directives/cps-tree-table-column-filter.directive.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/cps-tree-table/directives/cps-tree-table-column-sortable.directive.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/cps-tree-table/directives/cps-tree-table-header-selectable.directive.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/cps-tree-table/directives/cps-tree-table-row-selectable.directive.mjs +5 -5
- package/esm2022/lib/components/cps-tree-table/directives/cps-tree-table-row-toggler.directive.mjs +43 -0
- package/esm2022/lib/components/cps-tree-table/directives/internal/tree-table-unsort.directive.mjs +354 -0
- package/esm2022/lib/components/internal/cps-base-tree-dropdown/cps-base-tree-dropdown.component.mjs +619 -0
- package/esm2022/lib/directives/cps-tooltip/cps-tooltip.directive.mjs +257 -0
- package/{esm2020 → esm2022}/lib/pipes/internal/check-option-selected.pipe.mjs +4 -4
- package/esm2022/lib/pipes/internal/combine-labels.pipe.mjs +25 -0
- package/{esm2020 → esm2022}/lib/pipes/internal/label-by-value.pipe.mjs +4 -4
- package/esm2022/lib/services/cps-dialog/cps-dialog.service.mjs +99 -0
- package/{esm2020 → esm2022}/lib/services/cps-dialog/internal/components/cps-confirmation/cps-confirmation.component.mjs +5 -5
- package/esm2022/lib/services/cps-dialog/internal/components/cps-dialog/cps-dialog.component.mjs +470 -0
- package/{esm2020 → esm2022}/lib/services/cps-dialog/internal/directives/cps-dialog-content.directive.mjs +5 -5
- package/esm2022/lib/services/cps-dialog/utils/cps-dialog-config.mjs +3 -0
- package/esm2022/lib/services/cps-notification/cps-notification.service.mjs +126 -0
- package/esm2022/lib/services/cps-notification/internal/components/cps-notification-container/cps-notification-container.component.mjs +91 -0
- package/{esm2020 → esm2022}/lib/services/cps-notification/internal/components/cps-toast/cps-toast.component.mjs +23 -23
- package/esm2022/lib/utils/colors-utils.mjs +57 -0
- package/esm2022/lib/utils/internal/size-utils.mjs +24 -0
- package/{esm2020 → esm2022}/public-api.mjs +2 -2
- package/{fesm2020 → fesm2022}/cps-ui-kit.mjs +481 -391
- package/fesm2022/cps-ui-kit.mjs.map +1 -0
- package/lib/components/cps-autocomplete/cps-autocomplete.component.d.ts +2 -2
- package/lib/components/cps-button/cps-button.component.d.ts +1 -1
- package/lib/components/cps-button-toggle/cps-button-toggle.component.d.ts +2 -2
- package/lib/components/cps-checkbox/cps-checkbox.component.d.ts +2 -2
- package/lib/components/cps-chip/cps-chip.component.d.ts +1 -1
- package/lib/components/cps-datepicker/cps-datepicker.component.d.ts +2 -2
- package/lib/components/cps-expansion-panel/cps-expansion-panel.component.d.ts +1 -1
- package/lib/components/cps-file-upload/cps-file-upload.component.d.ts +1 -1
- package/lib/components/cps-icon/cps-icon.component.d.ts +1 -1
- package/lib/components/cps-info-circle/cps-info-circle.component.d.ts +2 -2
- package/lib/components/cps-input/cps-input.component.d.ts +2 -2
- package/lib/components/cps-loader/cps-loader.component.d.ts +1 -1
- package/lib/components/cps-menu/cps-menu.component.d.ts +1 -1
- package/lib/components/cps-paginator/cps-paginator.component.d.ts +1 -1
- package/lib/components/cps-progress-circular/cps-progress-circular.component.d.ts +1 -1
- package/lib/components/cps-progress-linear/cps-progress-linear.component.d.ts +1 -1
- package/lib/components/cps-radio-group/cps-radio/cps-radio.component.d.ts +1 -1
- package/lib/components/cps-radio-group/cps-radio-button/cps-radio-button.component.d.ts +1 -1
- package/lib/components/cps-radio-group/cps-radio-group.component.d.ts +2 -2
- package/lib/components/cps-select/cps-select.component.d.ts +2 -2
- package/lib/components/cps-sidebar-menu/cps-sidebar-menu.component.d.ts +1 -1
- package/lib/components/cps-tab-group/cps-tab/cps-tab.component.d.ts +1 -1
- package/lib/components/cps-tab-group/cps-tab-group.component.d.ts +1 -1
- package/lib/components/cps-table/components/internal/cps-sort-icon/cps-sort-icon.component.d.ts +1 -1
- package/lib/components/cps-table/components/internal/table-column-filter/table-column-filter.component.d.ts +1 -1
- package/lib/components/cps-table/components/internal/table-column-filter-constraint/table-column-filter-constraint.component.d.ts +1 -1
- package/lib/components/cps-table/components/internal/table-row-menu/table-row-menu.component.d.ts +1 -1
- package/lib/components/cps-table/cps-table.component.d.ts +1 -1
- package/lib/components/cps-table/directives/cps-table-column-filter.directive.d.ts +1 -1
- package/lib/components/cps-table/directives/cps-table-column-sortable.directive.d.ts +1 -1
- package/lib/components/cps-table/directives/cps-table-row-selectable.directive.d.ts +1 -1
- package/lib/components/cps-tag/cps-tag.component.d.ts +1 -1
- package/lib/components/cps-textarea/cps-textarea.component.d.ts +2 -2
- package/lib/components/cps-timepicker/cps-timepicker.component.d.ts +2 -2
- package/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.d.ts +1 -1
- package/lib/components/cps-tree-select/cps-tree-select.component.d.ts +1 -1
- package/lib/components/cps-tree-table/cps-tree-table.component.d.ts +4 -4
- package/lib/components/cps-tree-table/directives/cps-tree-table-column-filter.directive.d.ts +1 -1
- package/lib/components/cps-tree-table/directives/cps-tree-table-column-sortable.directive.d.ts +1 -1
- package/lib/components/cps-tree-table/directives/cps-tree-table-row-selectable.directive.d.ts +1 -1
- package/lib/components/cps-tree-table/directives/cps-tree-table-row-toggler.directive.d.ts +1 -1
- package/lib/components/internal/cps-base-tree-dropdown/cps-base-tree-dropdown.component.d.ts +2 -2
- package/lib/directives/{cps-tooltip.directive.d.ts → cps-tooltip/cps-tooltip.directive.d.ts} +2 -2
- package/lib/services/cps-dialog/cps-dialog.service.d.ts +13 -0
- package/lib/services/cps-dialog/utils/cps-dialog-config.d.ts +1 -1
- package/lib/services/cps-notification/cps-notification.service.d.ts +32 -0
- package/lib/services/cps-notification/internal/components/cps-notification-container/cps-notification-container.component.d.ts +1 -1
- package/lib/services/cps-notification/internal/components/cps-toast/cps-toast.component.d.ts +1 -1
- package/package.json +12 -18
- package/public-api.d.ts +1 -1
- package/esm2020/lib/components/cps-autocomplete/cps-autocomplete.component.mjs +0 -824
- package/esm2020/lib/components/cps-button/cps-button.component.mjs +0 -190
- package/esm2020/lib/components/cps-button-toggle/cps-button-toggle.component.mjs +0 -235
- package/esm2020/lib/components/cps-checkbox/cps-checkbox.component.mjs +0 -149
- package/esm2020/lib/components/cps-chip/cps-chip.component.mjs +0 -94
- package/esm2020/lib/components/cps-datepicker/cps-datepicker.component.mjs +0 -382
- package/esm2020/lib/components/cps-expansion-panel/cps-expansion-panel.component.mjs +0 -209
- package/esm2020/lib/components/cps-file-upload/cps-file-upload.component.mjs +0 -138
- package/esm2020/lib/components/cps-icon/cps-icon.component.mjs +0 -193
- package/esm2020/lib/components/cps-info-circle/cps-info-circle.component.mjs +0 -61
- package/esm2020/lib/components/cps-input/cps-input.component.mjs +0 -386
- package/esm2020/lib/components/cps-menu/cps-menu.component.mjs +0 -552
- package/esm2020/lib/components/cps-paginator/cps-paginator.component.mjs +0 -113
- package/esm2020/lib/components/cps-paginator/pipes/cps-paginate.pipe.mjs +0 -30
- package/esm2020/lib/components/cps-radio-group/cps-radio-button/cps-radio-button.component.mjs +0 -55
- package/esm2020/lib/components/cps-radio-group/cps-radio-group.component.mjs +0 -158
- package/esm2020/lib/components/cps-select/cps-select.component.mjs +0 -615
- package/esm2020/lib/components/cps-sidebar-menu/cps-sidebar-menu.component.mjs +0 -110
- package/esm2020/lib/components/cps-tab-group/cps-tab-group.component.mjs +0 -299
- package/esm2020/lib/components/cps-table/components/internal/cps-sort-icon/cps-sort-icon.component.mjs +0 -79
- package/esm2020/lib/components/cps-table/components/internal/table-column-filter/table-column-filter.component.mjs +0 -408
- package/esm2020/lib/components/cps-table/components/internal/table-column-filter-constraint/table-column-filter-constraint.component.mjs +0 -148
- package/esm2020/lib/components/cps-table/components/internal/table-row-menu/table-row-menu.component.mjs +0 -88
- package/esm2020/lib/components/cps-table/cps-table.component.mjs +0 -940
- package/esm2020/lib/components/cps-table/directives/cps-table-column-filter.directive.mjs +0 -181
- package/esm2020/lib/components/cps-table/directives/internal/table-unsort.directive.mjs +0 -210
- package/esm2020/lib/components/cps-tag/cps-tag.component.mjs +0 -136
- package/esm2020/lib/components/cps-textarea/cps-textarea.component.mjs +0 -291
- package/esm2020/lib/components/cps-timepicker/cps-timepicker.component.mjs +0 -351
- package/esm2020/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.mjs +0 -250
- package/esm2020/lib/components/cps-tree-select/cps-tree-select.component.mjs +0 -87
- package/esm2020/lib/components/cps-tree-table/cps-tree-table.component.mjs +0 -1192
- package/esm2020/lib/components/cps-tree-table/directives/cps-tree-table-row-toggler.directive.mjs +0 -43
- package/esm2020/lib/components/cps-tree-table/directives/internal/tree-table-unsort.directive.mjs +0 -334
- package/esm2020/lib/components/internal/cps-base-tree-dropdown/cps-base-tree-dropdown.component.mjs +0 -616
- package/esm2020/lib/directives/cps-tooltip.directive.mjs +0 -257
- package/esm2020/lib/pipes/internal/combine-labels.pipe.mjs +0 -25
- package/esm2020/lib/services/cps-dialog/cps-dialog.service.mjs +0 -86
- package/esm2020/lib/services/cps-dialog/internal/components/cps-dialog/cps-dialog.component.mjs +0 -470
- package/esm2020/lib/services/cps-dialog/utils/cps-dialog-config.mjs +0 -3
- package/esm2020/lib/services/cps-notification/cps-notification.service.mjs +0 -94
- package/esm2020/lib/services/cps-notification/internal/components/cps-notification-container/cps-notification-container.component.mjs +0 -91
- package/esm2020/lib/utils/colors-utils.mjs +0 -57
- package/esm2020/lib/utils/internal/size-utils.mjs +0 -24
- package/fesm2015/cps-ui-kit.mjs +0 -12086
- package/fesm2015/cps-ui-kit.mjs.map +0 -1
- package/fesm2020/cps-ui-kit.mjs.map +0 -1
- /package/{esm2020 → esm2022}/cps-ui-kit.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/cps-table/cps-column-filter-types.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/cps-dialog/utils/cps-dialog-ref.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/cps-notification/utils/cps-notification-config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/cps-notification/utils/internal/cps-notification-data.mjs +0 -0
package/esm2020/lib/components/cps-tree-table/directives/cps-tree-table-row-toggler.directive.mjs
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { Directive, Input } from '@angular/core';
|
|
2
|
-
import { TreeTableToggler } from 'primeng/treetable';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
/**
|
|
5
|
-
* CpsTreetableRowTogglerDirective is a directive used to apply a chevron toggler icon to a body cell.
|
|
6
|
-
* @group Directives
|
|
7
|
-
*/
|
|
8
|
-
export class CpsTreetableRowTogglerDirective {
|
|
9
|
-
constructor(elementRef, viewContainerRef) {
|
|
10
|
-
this.elementRef = elementRef;
|
|
11
|
-
this.viewContainerRef = viewContainerRef;
|
|
12
|
-
this.togglerCompRef =
|
|
13
|
-
this.viewContainerRef.createComponent(TreeTableToggler);
|
|
14
|
-
}
|
|
15
|
-
ngOnInit() {
|
|
16
|
-
this.elementRef.nativeElement.classList.add('cps-treetable-row-toggler-cell');
|
|
17
|
-
this.togglerCompRef.setInput('rowNode', this.rowNode);
|
|
18
|
-
const spanElement = document.createElement('span');
|
|
19
|
-
spanElement.style.display = 'flex';
|
|
20
|
-
while (this.elementRef.nativeElement.firstChild) {
|
|
21
|
-
spanElement.appendChild(this.elementRef.nativeElement.firstChild);
|
|
22
|
-
}
|
|
23
|
-
this.elementRef.nativeElement.appendChild(spanElement);
|
|
24
|
-
spanElement.prepend(this.togglerCompRef.location.nativeElement);
|
|
25
|
-
}
|
|
26
|
-
ngOnDestroy() {
|
|
27
|
-
this.togglerCompRef.destroy();
|
|
28
|
-
this.viewContainerRef.clear();
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
CpsTreetableRowTogglerDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CpsTreetableRowTogglerDirective, deps: [{ token: i0.ElementRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
32
|
-
CpsTreetableRowTogglerDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: CpsTreetableRowTogglerDirective, isStandalone: true, selector: "[cpsTTRowToggler]", inputs: { rowNode: ["cpsTTRowToggler", "rowNode"] }, ngImport: i0 });
|
|
33
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CpsTreetableRowTogglerDirective, decorators: [{
|
|
34
|
-
type: Directive,
|
|
35
|
-
args: [{
|
|
36
|
-
standalone: true,
|
|
37
|
-
selector: '[cpsTTRowToggler]'
|
|
38
|
-
}]
|
|
39
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ViewContainerRef }]; }, propDecorators: { rowNode: [{
|
|
40
|
-
type: Input,
|
|
41
|
-
args: ['cpsTTRowToggler']
|
|
42
|
-
}] } });
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BzLXRyZWUtdGFibGUtcm93LXRvZ2dsZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRyZWUtdGFibGUvZGlyZWN0aXZlcy9jcHMtdHJlZS10YWJsZS1yb3ctdG9nZ2xlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxLQUFLLEVBSU4sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBRXJEOzs7R0FHRztBQUtILE1BQU0sT0FBTywrQkFBK0I7SUFTMUMsWUFDVSxVQUFzQixFQUN0QixnQkFBa0M7UUFEbEMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBRTFDLElBQUksQ0FBQyxjQUFjO1lBQ2pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQ3pDLGdDQUFnQyxDQUNqQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV0RCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25ELFdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUVuQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRTtZQUMvQyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ25FO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXZELFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNoQyxDQUFDOzs0SEFyQ1UsK0JBQStCO2dIQUEvQiwrQkFBK0I7MkZBQS9CLCtCQUErQjtrQkFKM0MsU0FBUzttQkFBQztvQkFDVCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLG1CQUFtQjtpQkFDOUI7Z0lBTTJCLE9BQU87c0JBQWhDLEtBQUs7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50UmVmLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyZWVUYWJsZVRvZ2dsZXIgfSBmcm9tICdwcmltZW5nL3RyZWV0YWJsZSc7XG5cbi8qKlxuICogQ3BzVHJlZXRhYmxlUm93VG9nZ2xlckRpcmVjdGl2ZSBpcyBhIGRpcmVjdGl2ZSB1c2VkIHRvIGFwcGx5IGEgY2hldnJvbiB0b2dnbGVyIGljb24gdG8gYSBib2R5IGNlbGwuXG4gKiBAZ3JvdXAgRGlyZWN0aXZlc1xuICovXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdbY3BzVFRSb3dUb2dnbGVyXSdcbn0pXG5leHBvcnQgY2xhc3MgQ3BzVHJlZXRhYmxlUm93VG9nZ2xlckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIENlbGwgdmFsdWUuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCdjcHNUVFJvd1RvZ2dsZXInKSByb3dOb2RlOiBhbnk7XG5cbiAgdG9nZ2xlckNvbXBSZWY6IENvbXBvbmVudFJlZjxUcmVlVGFibGVUb2dnbGVyPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmXG4gICkge1xuICAgIHRoaXMudG9nZ2xlckNvbXBSZWYgPVxuICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChUcmVlVGFibGVUb2dnbGVyKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoXG4gICAgICAnY3BzLXRyZWV0YWJsZS1yb3ctdG9nZ2xlci1jZWxsJ1xuICAgICk7XG4gICAgdGhpcy50b2dnbGVyQ29tcFJlZi5zZXRJbnB1dCgncm93Tm9kZScsIHRoaXMucm93Tm9kZSk7XG5cbiAgICBjb25zdCBzcGFuRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICBzcGFuRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuXG4gICAgd2hpbGUgKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZpcnN0Q2hpbGQpIHtcbiAgICAgIHNwYW5FbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZpcnN0Q2hpbGQpO1xuICAgIH1cbiAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChzcGFuRWxlbWVudCk7XG5cbiAgICBzcGFuRWxlbWVudC5wcmVwZW5kKHRoaXMudG9nZ2xlckNvbXBSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnRvZ2dsZXJDb21wUmVmLmRlc3Ryb3koKTtcbiAgICB0aGlzLnZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcbiAgfVxufVxuIl19
|
package/esm2020/lib/components/cps-tree-table/directives/internal/tree-table-unsort.directive.mjs
DELETED
|
@@ -1,334 +0,0 @@
|
|
|
1
|
-
import { Directive, Host, Self, Optional } from '@angular/core';
|
|
2
|
-
import { ObjectUtils } from 'primeng/utils';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "primeng/treetable";
|
|
5
|
-
export class TreeTableUnsortDirective {
|
|
6
|
-
constructor(pTreeTable) {
|
|
7
|
-
this.pTreeTable = pTreeTable;
|
|
8
|
-
pTreeTable.sort = (event) => {
|
|
9
|
-
if (pTreeTable.sortMode === 'single') {
|
|
10
|
-
if (pTreeTable.sortField === event.field &&
|
|
11
|
-
pTreeTable.sortOrder === -1) {
|
|
12
|
-
event.field = '_defaultSortOrder';
|
|
13
|
-
}
|
|
14
|
-
pTreeTable._sortOrder =
|
|
15
|
-
pTreeTable.sortField === event.field
|
|
16
|
-
? pTreeTable.sortOrder * -1
|
|
17
|
-
: pTreeTable.defaultSortOrder;
|
|
18
|
-
pTreeTable._sortField = event.field;
|
|
19
|
-
pTreeTable.sortSingle();
|
|
20
|
-
}
|
|
21
|
-
if (pTreeTable.sortMode === 'multiple') {
|
|
22
|
-
let resetIndex = false;
|
|
23
|
-
const sortMeta = pTreeTable.getSortMeta(event.field);
|
|
24
|
-
if (sortMeta) {
|
|
25
|
-
for (let i = 0; i < pTreeTable._multiSortMeta.length; i++) {
|
|
26
|
-
if (pTreeTable._multiSortMeta[i].field === sortMeta.field) {
|
|
27
|
-
pTreeTable._multiSortMeta.splice(i, 1);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
if (sortMeta.order === 1) {
|
|
31
|
-
sortMeta.order = sortMeta.order * -1;
|
|
32
|
-
pTreeTable.multiSortMeta.push(sortMeta);
|
|
33
|
-
}
|
|
34
|
-
if (pTreeTable._multiSortMeta?.length === 0) {
|
|
35
|
-
pTreeTable.multiSortMeta.push({
|
|
36
|
-
field: '_defaultSortOrder',
|
|
37
|
-
order: pTreeTable.defaultSortOrder
|
|
38
|
-
});
|
|
39
|
-
resetIndex = true;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
if (!pTreeTable.multiSortMeta) {
|
|
44
|
-
pTreeTable._multiSortMeta = [];
|
|
45
|
-
}
|
|
46
|
-
pTreeTable.multiSortMeta.push({
|
|
47
|
-
field: event.field,
|
|
48
|
-
order: pTreeTable.defaultSortOrder
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
pTreeTable.sortMultiple();
|
|
52
|
-
if (resetIndex)
|
|
53
|
-
pTreeTable._multiSortMeta = [];
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
pTreeTable.sortNodes = (nodes) => {
|
|
57
|
-
if (!nodes || nodes.length === 0) {
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
this._syncNodesParams(pTreeTable.filteredNodes, nodes);
|
|
61
|
-
if (pTreeTable.customSort) {
|
|
62
|
-
pTreeTable.sortFunction.emit({
|
|
63
|
-
data: nodes,
|
|
64
|
-
mode: pTreeTable.sortMode,
|
|
65
|
-
field: pTreeTable.sortField,
|
|
66
|
-
order: pTreeTable.sortOrder
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
const isUnsort = pTreeTable.sortField === '_defaultSortOrder';
|
|
71
|
-
nodes.sort((node1, node2) => {
|
|
72
|
-
const value1 = isUnsort
|
|
73
|
-
? node1._defaultSortOrder
|
|
74
|
-
: ObjectUtils.resolveFieldData(node1.data, pTreeTable.sortField);
|
|
75
|
-
const value2 = isUnsort
|
|
76
|
-
? node2._defaultSortOrder
|
|
77
|
-
: ObjectUtils.resolveFieldData(node2.data, pTreeTable.sortField);
|
|
78
|
-
let result = null;
|
|
79
|
-
if (value1 == null && value2 != null)
|
|
80
|
-
result = -1;
|
|
81
|
-
else if (value1 != null && value2 == null)
|
|
82
|
-
result = 1;
|
|
83
|
-
else if (value1 == null && value2 == null)
|
|
84
|
-
result = 0;
|
|
85
|
-
else if (typeof value1 === 'string' && typeof value2 === 'string')
|
|
86
|
-
result = value1.localeCompare(value2, undefined, { numeric: true });
|
|
87
|
-
else
|
|
88
|
-
result = value1 < value2 ? -1 : value1 > value2 ? 1 : 0;
|
|
89
|
-
return pTreeTable.sortOrder * result;
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
for (const node of nodes) {
|
|
93
|
-
pTreeTable.sortNodes(node.children);
|
|
94
|
-
}
|
|
95
|
-
};
|
|
96
|
-
pTreeTable.sortMultipleNodes = (nodes) => {
|
|
97
|
-
if (!nodes || nodes.length === 0) {
|
|
98
|
-
return;
|
|
99
|
-
}
|
|
100
|
-
this._syncNodesParams(pTreeTable.filteredNodes, nodes);
|
|
101
|
-
if (pTreeTable.customSort) {
|
|
102
|
-
pTreeTable.sortFunction.emit({
|
|
103
|
-
data: pTreeTable.value,
|
|
104
|
-
mode: pTreeTable.sortMode,
|
|
105
|
-
multiSortMeta: pTreeTable.multiSortMeta
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
nodes.sort((node1, node2) => {
|
|
110
|
-
return pTreeTable.multisortField(node1, node2, pTreeTable.multiSortMeta, 0);
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
for (const node of nodes) {
|
|
114
|
-
pTreeTable.sortMultipleNodes(node.children);
|
|
115
|
-
}
|
|
116
|
-
};
|
|
117
|
-
pTreeTable.multisortField = (node1, node2, multiSortMeta, index) => {
|
|
118
|
-
if (ObjectUtils.isEmpty(pTreeTable.multiSortMeta) ||
|
|
119
|
-
ObjectUtils.isEmpty(multiSortMeta[index])) {
|
|
120
|
-
return 0;
|
|
121
|
-
}
|
|
122
|
-
const isUnsort = multiSortMeta[index].field === '_defaultSortOrder';
|
|
123
|
-
const value1 = isUnsort
|
|
124
|
-
? node1._defaultSortOrder
|
|
125
|
-
: ObjectUtils.resolveFieldData(node1.data, multiSortMeta[index].field);
|
|
126
|
-
const value2 = isUnsort
|
|
127
|
-
? node2._defaultSortOrder
|
|
128
|
-
: ObjectUtils.resolveFieldData(node2.data, multiSortMeta[index].field);
|
|
129
|
-
let result = 0;
|
|
130
|
-
if (value1 == null && value2 != null)
|
|
131
|
-
result = -1;
|
|
132
|
-
else if (value1 != null && value2 == null)
|
|
133
|
-
result = 1;
|
|
134
|
-
else if (value1 == null && value2 == null)
|
|
135
|
-
result = 0;
|
|
136
|
-
if (typeof value1 === 'string' || value1 instanceof String) {
|
|
137
|
-
if (value1.localeCompare && value1 !== value2) {
|
|
138
|
-
return (multiSortMeta[index].order *
|
|
139
|
-
value1.localeCompare(value2, undefined, { numeric: true }));
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
result = value1 < value2 ? -1 : 1;
|
|
144
|
-
}
|
|
145
|
-
if (value1 === value2) {
|
|
146
|
-
return multiSortMeta.length - 1 > index
|
|
147
|
-
? pTreeTable.multisortField(node1, node2, multiSortMeta, index + 1)
|
|
148
|
-
: 0;
|
|
149
|
-
}
|
|
150
|
-
return multiSortMeta[index].order * result;
|
|
151
|
-
};
|
|
152
|
-
pTreeTable._filter = () => {
|
|
153
|
-
if (pTreeTable.lazy) {
|
|
154
|
-
pTreeTable.onLazyLoad.emit(pTreeTable.createLazyLoadMetadata());
|
|
155
|
-
}
|
|
156
|
-
else {
|
|
157
|
-
if (!pTreeTable.value) {
|
|
158
|
-
return;
|
|
159
|
-
}
|
|
160
|
-
if (!pTreeTable.hasFilter()) {
|
|
161
|
-
pTreeTable.filteredNodes = null;
|
|
162
|
-
if (pTreeTable.paginator) {
|
|
163
|
-
pTreeTable.totalRecords = pTreeTable.value
|
|
164
|
-
? pTreeTable.value.length
|
|
165
|
-
: 0;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
else {
|
|
169
|
-
let globalFilterFieldsArray;
|
|
170
|
-
if (pTreeTable.filters.global) {
|
|
171
|
-
if (!pTreeTable.columns && !pTreeTable.globalFilterFields)
|
|
172
|
-
throw new Error('Global filtering requires dynamic columns or globalFilterFields to be defined.');
|
|
173
|
-
else
|
|
174
|
-
globalFilterFieldsArray =
|
|
175
|
-
pTreeTable.globalFilterFields || pTreeTable.columns;
|
|
176
|
-
}
|
|
177
|
-
this._syncNodesParams(pTreeTable.filteredNodes, pTreeTable.value);
|
|
178
|
-
pTreeTable.filteredNodes = [];
|
|
179
|
-
const isStrictMode = pTreeTable.filterMode === 'strict';
|
|
180
|
-
let isValueChanged = false;
|
|
181
|
-
for (const [idx, node] of pTreeTable.value.entries()) {
|
|
182
|
-
let copyNode = { ...node };
|
|
183
|
-
let localMatch = true;
|
|
184
|
-
let globalMatch = false;
|
|
185
|
-
let paramsWithoutNode;
|
|
186
|
-
for (const prop in pTreeTable.filters) {
|
|
187
|
-
if (
|
|
188
|
-
// eslint-disable-next-line no-prototype-builtins
|
|
189
|
-
pTreeTable.filters.hasOwnProperty(prop) &&
|
|
190
|
-
prop !== 'global') {
|
|
191
|
-
const filterMeta = pTreeTable.filters[prop];
|
|
192
|
-
const filterField = prop;
|
|
193
|
-
const filterValue = filterMeta?.value;
|
|
194
|
-
const filterMatchMode = filterMeta?.matchMode || 'startsWith';
|
|
195
|
-
const filterConstraint = pTreeTable.filterService.filters[filterMatchMode];
|
|
196
|
-
paramsWithoutNode = {
|
|
197
|
-
filterField,
|
|
198
|
-
filterValue,
|
|
199
|
-
filterConstraint,
|
|
200
|
-
isStrictMode
|
|
201
|
-
};
|
|
202
|
-
if ((isStrictMode &&
|
|
203
|
-
!(pTreeTable.findFilteredNodes(copyNode, paramsWithoutNode) ||
|
|
204
|
-
pTreeTable.isFilterMatched(copyNode, paramsWithoutNode))) ||
|
|
205
|
-
(!isStrictMode &&
|
|
206
|
-
!(pTreeTable.isFilterMatched(copyNode, paramsWithoutNode) ||
|
|
207
|
-
pTreeTable.findFilteredNodes(copyNode, paramsWithoutNode)))) {
|
|
208
|
-
localMatch = false;
|
|
209
|
-
}
|
|
210
|
-
if (!localMatch) {
|
|
211
|
-
break;
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
if (pTreeTable.filters.global &&
|
|
216
|
-
!globalMatch &&
|
|
217
|
-
globalFilterFieldsArray) {
|
|
218
|
-
for (let j = 0; j < globalFilterFieldsArray.length; j++) {
|
|
219
|
-
const copyNodeForGlobal = { ...copyNode };
|
|
220
|
-
const filterField = globalFilterFieldsArray[j].field ||
|
|
221
|
-
globalFilterFieldsArray[j];
|
|
222
|
-
const filterValue = pTreeTable.filters.global.value;
|
|
223
|
-
const filterConstraint = pTreeTable.filterService.filters[pTreeTable.filters.global
|
|
224
|
-
.matchMode];
|
|
225
|
-
paramsWithoutNode = {
|
|
226
|
-
filterField,
|
|
227
|
-
filterValue,
|
|
228
|
-
filterConstraint,
|
|
229
|
-
isStrictMode
|
|
230
|
-
};
|
|
231
|
-
if ((isStrictMode &&
|
|
232
|
-
(pTreeTable.findFilteredNodes(copyNodeForGlobal, paramsWithoutNode) ||
|
|
233
|
-
pTreeTable.isFilterMatched(copyNodeForGlobal, paramsWithoutNode))) ||
|
|
234
|
-
(!isStrictMode &&
|
|
235
|
-
(pTreeTable.isFilterMatched(copyNodeForGlobal, paramsWithoutNode) ||
|
|
236
|
-
pTreeTable.findFilteredNodes(copyNodeForGlobal, paramsWithoutNode)))) {
|
|
237
|
-
globalMatch = true;
|
|
238
|
-
copyNode = copyNodeForGlobal;
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
let matches = localMatch;
|
|
243
|
-
if (pTreeTable.filters.global) {
|
|
244
|
-
matches = localMatch && globalMatch;
|
|
245
|
-
}
|
|
246
|
-
if (matches) {
|
|
247
|
-
copyNode._idx = idx;
|
|
248
|
-
pTreeTable.filteredNodes.push(copyNode);
|
|
249
|
-
}
|
|
250
|
-
isValueChanged =
|
|
251
|
-
isValueChanged ||
|
|
252
|
-
!localMatch ||
|
|
253
|
-
globalMatch ||
|
|
254
|
-
(localMatch && pTreeTable.filteredNodes.length > 0) ||
|
|
255
|
-
(!globalMatch && pTreeTable.filteredNodes.length === 0);
|
|
256
|
-
}
|
|
257
|
-
if (!isValueChanged) {
|
|
258
|
-
pTreeTable.filteredNodes = null;
|
|
259
|
-
}
|
|
260
|
-
if (pTreeTable.paginator) {
|
|
261
|
-
pTreeTable.totalRecords = pTreeTable.filteredNodes
|
|
262
|
-
? pTreeTable.filteredNodes.length
|
|
263
|
-
: pTreeTable.value
|
|
264
|
-
? pTreeTable.value.length
|
|
265
|
-
: 0;
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
pTreeTable.first = 0;
|
|
270
|
-
const filteredValue = pTreeTable.filteredNodes || pTreeTable.value;
|
|
271
|
-
pTreeTable.onFilter.emit({
|
|
272
|
-
filters: pTreeTable.filters,
|
|
273
|
-
filteredValue
|
|
274
|
-
});
|
|
275
|
-
pTreeTable.tableService.onUIUpdate(filteredValue);
|
|
276
|
-
pTreeTable.updateSerializedValue();
|
|
277
|
-
if (pTreeTable.scrollable) {
|
|
278
|
-
pTreeTable.resetScrollTop();
|
|
279
|
-
}
|
|
280
|
-
};
|
|
281
|
-
pTreeTable.findFilteredNodes = (node, paramsWithoutNode) => {
|
|
282
|
-
if (node) {
|
|
283
|
-
let matched = false;
|
|
284
|
-
if (node.children) {
|
|
285
|
-
const childNodes = [...node.children];
|
|
286
|
-
node.children = [];
|
|
287
|
-
for (const [idx, childNode] of childNodes.entries()) {
|
|
288
|
-
const copyChildNode = { ...childNode };
|
|
289
|
-
if (pTreeTable.isFilterMatched(copyChildNode, paramsWithoutNode)) {
|
|
290
|
-
matched = true;
|
|
291
|
-
copyChildNode._idx = idx;
|
|
292
|
-
node.children.push(copyChildNode);
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
if (matched) {
|
|
297
|
-
return true;
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
};
|
|
301
|
-
}
|
|
302
|
-
_syncNodesParams(from, to) {
|
|
303
|
-
if (!from || !to)
|
|
304
|
-
return;
|
|
305
|
-
from.forEach((source) => {
|
|
306
|
-
const idx = source._idx;
|
|
307
|
-
if (typeof idx === 'number') {
|
|
308
|
-
const target = to[idx];
|
|
309
|
-
delete source._idx;
|
|
310
|
-
if (target) {
|
|
311
|
-
target.expanded = source.expanded;
|
|
312
|
-
target.partialSelected = source.partialSelected;
|
|
313
|
-
this._syncNodesParams(source.children, target.children);
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
});
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
TreeTableUnsortDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TreeTableUnsortDirective, deps: [{ token: i1.TreeTable, host: true, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive });
|
|
320
|
-
TreeTableUnsortDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: TreeTableUnsortDirective, isStandalone: true, selector: "[ttWithUnsort]", ngImport: i0 });
|
|
321
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TreeTableUnsortDirective, decorators: [{
|
|
322
|
-
type: Directive,
|
|
323
|
-
args: [{
|
|
324
|
-
standalone: true,
|
|
325
|
-
selector: '[ttWithUnsort]'
|
|
326
|
-
}]
|
|
327
|
-
}], ctorParameters: function () { return [{ type: i1.TreeTable, decorators: [{
|
|
328
|
-
type: Host
|
|
329
|
-
}, {
|
|
330
|
-
type: Self
|
|
331
|
-
}, {
|
|
332
|
-
type: Optional
|
|
333
|
-
}] }]; } });
|
|
334
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS10YWJsZS11bnNvcnQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRyZWUtdGFibGUvZGlyZWN0aXZlcy9pbnRlcm5hbC90cmVlLXRhYmxlLXVuc29ydC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFNNUMsTUFBTSxPQUFPLHdCQUF3QjtJQUNuQyxZQUErQyxVQUFxQjtRQUFyQixlQUFVLEdBQVYsVUFBVSxDQUFXO1FBQ2xFLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUMvQixJQUFJLFVBQVUsQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFO2dCQUNwQyxJQUNFLFVBQVUsQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLEtBQUs7b0JBQ3BDLFVBQVUsQ0FBQyxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQzNCO29CQUNBLEtBQUssQ0FBQyxLQUFLLEdBQUcsbUJBQW1CLENBQUM7aUJBQ25DO2dCQUVELFVBQVUsQ0FBQyxVQUFVO29CQUNuQixVQUFVLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxLQUFLO3dCQUNsQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7d0JBQzNCLENBQUMsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ2xDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztnQkFDcEMsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO2FBQ3pCO1lBQ0QsSUFBSSxVQUFVLENBQUMsUUFBUSxLQUFL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b3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEhvc3QsIFNlbGYsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmVlVGFibGUgfSBmcm9tICdwcmltZW5nL3RyZWV0YWJsZSc7XG5pbXBvcnQgeyBPYmplY3RVdGlscyB9IGZyb20gJ3ByaW1lbmcvdXRpbHMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdbdHRXaXRoVW5zb3J0XSdcbn0pXG5leHBvcnQgY2xhc3MgVHJlZVRhYmxlVW5zb3J0RGlyZWN0aXZlIHtcbiAgY29uc3RydWN0b3IoQEhvc3QoKSBAU2VsZigpIEBPcHRpb25hbCgpIHB1YmxpYyBwVHJlZVRhYmxlOiBUcmVlVGFibGUpIHtcbiAgICBwVHJlZVRhYmxlLnNvcnQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgaWYgKHBUcmVlVGFibGUuc29ydE1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBwVHJlZVRhYmxlLnNvcnRGaWVsZCA9PT0gZXZlbnQuZmllbGQgJiZcbiAgICAgICAgICBwVHJlZVRhYmxlLnNvcnRPcmRlciA9PT0gLTFcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXZlbnQuZmllbGQgPSAnX2RlZmF1bHRTb3J0T3JkZXInO1xuICAgICAgICB9XG5cbiAgICAgICAgcFRyZWVUYWJsZS5fc29ydE9yZGVyID1cbiAgICAgICAgICBwVHJlZVRhYmxlLnNvcnRGaWVsZCA9PT0gZXZlbnQuZmllbGRcbiAgICAgICAgICAgID8gcFRyZWVUYWJsZS5zb3J0T3JkZXIgKiAtMVxuICAgICAgICAgICAgOiBwVHJlZVRhYmxlLmRlZmF1bHRTb3J0T3JkZXI7XG4gICAgICAgIHBUcmVlVGFibGUuX3NvcnRGaWVsZCA9IGV2ZW50LmZpZWxkO1xuICAgICAgICBwVHJlZVRhYmxlLnNvcnRTaW5nbGUoKTtcbiAgICAgIH1cbiAgICAgIGlmIChwVHJlZVRhYmxlLnNvcnRNb2RlID09PSAnbXVsdGlwbGUnKSB7XG4gICAgICAgIGxldCByZXNldEluZGV4ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHNvcnRNZXRhID0gcFRyZWVUYWJsZS5nZXRTb3J0TWV0YShldmVudC5maWVsZCk7XG5cbiAgICAgICAgaWYgKHNvcnRNZXRhKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwVHJlZVRhYmxlLl9tdWx0aVNvcnRNZXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAocFRyZWVUYWJsZS5fbXVsdGlTb3J0TWV0YVtpXS5maWVsZCA9PT0gc29ydE1ldGEuZmllbGQpIHtcbiAgICAgICAgICAgICAgcFRyZWVUYWJsZS5fbXVsdGlTb3J0TWV0YS5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzb3J0TWV0YS5vcmRlciA9PT0gMSkge1xuICAgICAgICAgICAgc29ydE1ldGEub3JkZXIgPSBzb3J0TWV0YS5vcmRlciAqIC0xO1xuICAgICAgICAgICAgcFRyZWVUYWJsZS5tdWx0aVNvcnRNZXRhLnB1c2goc29ydE1ldGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocFRyZWVUYWJsZS5fbXVsdGlTb3J0TWV0YT8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBwVHJlZVRhYmxlLm11bHRpU29ydE1ldGEucHVzaCh7XG4gICAgICAgICAgICAgIGZpZWxkOiAnX2RlZmF1bHRTb3J0T3JkZXInLFxuICAgICAgICAgICAgICBvcmRlcjogcFRyZWVUYWJsZS5kZWZhdWx0U29ydE9yZGVyXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlc2V0SW5kZXggPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIXBUcmVlVGFibGUubXVsdGlTb3J0TWV0YSkge1xuICAgICAgICAgICAgcFRyZWVUYWJsZS5fbXVsdGlTb3J0TWV0YSA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwVHJlZVRhYmxlLm11bHRpU29ydE1ldGEucHVzaCh7XG4gICAgICAgICAgICBmaWVsZDogZXZlbnQuZmllbGQsXG4gICAgICAgICAgICBvcmRlcjogcFRyZWVUYWJsZS5kZWZhdWx0U29ydE9yZGVyXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBwVHJlZVRhYmxlLnNvcnRNdWx0aXBsZSgpO1xuICAgICAgICBpZiAocmVzZXRJbmRleCkgcFRyZWVUYWJsZS5fbXVsdGlTb3J0TWV0YSA9IFtdO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBwVHJlZVRhYmxlLnNvcnROb2RlcyA9IChub2RlcykgPT4ge1xuICAgICAgaWYgKCFub2RlcyB8fCBub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zeW5jTm9kZXNQYXJhbXMocFRyZWVUYWJsZS5maWx0ZXJlZE5vZGVzLCBub2Rlcyk7XG5cbiAgICAgIGlmIChwVHJlZVRhYmxlLmN1c3RvbVNvcnQpIHtcbiAgICAgICAgcFRyZWVUYWJsZS5zb3J0RnVuY3Rpb24uZW1pdCh7XG4gICAgICAgICAgZGF0YTogbm9kZXMsXG4gICAgICAgICAgbW9kZTogcFRyZWVUYWJsZS5zb3J0TW9kZSxcbiAgICAgICAgICBmaWVsZDogcFRyZWVUYWJsZS5zb3J0RmllbGQsXG4gICAgICAgICAgb3JkZXI6IHBUcmVlVGFibGUuc29ydE9yZGVyXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaXNVbnNvcnQgPSBwVHJlZVRhYmxlLnNvcnRGaWVsZCA9PT0gJ19kZWZhdWx0U29ydE9yZGVyJztcbiAgICAgICAgbm9kZXMuc29ydCgobm9kZTE6IGFueSwgbm9kZTI6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlMSA9IGlzVW5zb3J0XG4gICAgICAgICAgICA/IG5vZGUxLl9kZWZhdWx0U29ydE9yZGVyXG4gICAgICAgICAgICA6IE9iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEobm9kZTEuZGF0YSwgcFRyZWVUYWJsZS5zb3J0RmllbGQpO1xuICAgICAgICAgIGNvbnN0IHZhbHVlMiA9IGlzVW5zb3J0XG4gICAgICAgICAgICA/IG5vZGUyLl9kZWZhdWx0U29ydE9yZGVyXG4gICAgICAgICAgICA6IE9iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEobm9kZTIuZGF0YSwgcFRyZWVUYWJsZS5zb3J0RmllbGQpO1xuICAgICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xuXG4gICAgICAgICAgaWYgKHZhbHVlMSA9PSBudWxsICYmIHZhbHVlMiAhPSBudWxsKSByZXN1bHQgPSAtMTtcbiAgICAgICAgICBlbHNlIGlmICh2YWx1ZTEgIT0gbnVsbCAmJiB2YWx1ZTIgPT0gbnVsbCkgcmVzdWx0ID0gMTtcbiAgICAgICAgICBlbHNlIGlmICh2YWx1ZTEgPT0gbnVsbCAmJiB2YWx1ZTIgPT0gbnVsbCkgcmVzdWx0ID0gMDtcbiAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUxID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWUyID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHJlc3VsdCA9IHZhbHVlMS5sb2NhbGVDb21wYXJlKHZhbHVlMiwgdW5kZWZpbmVkLCB7IG51bWVyaWM6IHRydWUgfSk7XG4gICAgICAgICAgZWxzZSByZXN1bHQgPSB2YWx1ZTEgPCB2YWx1ZTIgPyAtMSA6IHZhbHVlMSA+IHZhbHVlMiA/IDEgOiAwO1xuXG4gICAgICAgICAgcmV0dXJuIHBUcmVlVGFibGUuc29ydE9yZGVyICogcmVzdWx0O1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICAgIHBUcmVlVGFibGUuc29ydE5vZGVzKG5vZGUuY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBwVHJlZVRhYmxlLnNvcnRNdWx0aXBsZU5vZGVzID0gKG5vZGVzKSA9PiB7XG4gICAgICBpZiAoIW5vZGVzIHx8IG5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3N5bmNOb2Rlc1BhcmFtcyhwVHJlZVRhYmxlLmZpbHRlcmVkTm9kZXMsIG5vZGVzKTtcblxuICAgICAgaWYgKHBUcmVlVGFibGUuY3VzdG9tU29ydCkge1xuICAgICAgICBwVHJlZVRhYmxlLnNvcnRGdW5jdGlvbi5lbWl0KHtcbiAgICAgICAgICBkYXRhOiBwVHJlZVRhYmxlLnZhbHVlLFxuICAgICAgICAgIG1vZGU6IHBUcmVlVGFibGUuc29ydE1vZGUsXG4gICAgICAgICAgbXVsdGlTb3J0TWV0YTogcFRyZWVUYWJsZS5tdWx0aVNvcnRNZXRhXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZXMuc29ydCgobm9kZTE6IGFueSwgbm9kZTI6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiBwVHJlZVRhYmxlLm11bHRpc29ydEZpZWxkKFxuICAgICAgICAgICAgbm9kZTEsXG4gICAgICAgICAgICBub2RlMixcbiAgICAgICAgICAgIHBUcmVlVGFibGUubXVsdGlTb3J0TWV0YSxcbiAgICAgICAgICAgIDBcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICAgIHBUcmVlVGFibGUuc29ydE11bHRpcGxlTm9kZXMobm9kZS5jaGlsZHJlbik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHBUcmVlVGFibGUubXVsdGlzb3J0RmllbGQgPSAobm9kZTEsIG5vZGUyLCBtdWx0aVNvcnRNZXRhLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBPYmplY3RVdGlscy5pc0VtcHR5KHBUcmVlVGFibGUubXVsdGlTb3J0TWV0YSkgfHxcbiAgICAgICAgT2JqZWN0VXRpbHMuaXNFbXB0eShtdWx0aVNvcnRNZXRhW2luZGV4XSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzVW5zb3J0ID0gbXVsdGlTb3J0TWV0YVtpbmRleF0uZmllbGQgPT09ICdfZGVmYXVsdFNvcnRPcmRlcic7XG4gICAgICBjb25zdCB2YWx1ZTEgPSBpc1Vuc29ydFxuICAgICAgICA/IG5vZGUxLl9kZWZhdWx0U29ydE9yZGVyXG4gICAgICAgIDogT2JqZWN0VXRpbHMucmVzb2x2ZUZpZWxkRGF0YShub2RlMS5kYXRhLCBtdWx0aVNvcnRNZXRhW2luZGV4XS5maWVsZCk7XG4gICAgICBjb25zdCB2YWx1ZTIgPSBpc1Vuc29ydFxuICAgICAgICA/IG5vZGUyLl9kZWZhdWx0U29ydE9yZGVyXG4gICAgICAgIDogT2JqZWN0VXRpbHMucmVzb2x2ZUZpZWxkRGF0YShub2RlMi5kYXRhLCBtdWx0aVNvcnRNZXRhW2luZGV4XS5maWVsZCk7XG4gICAgICBsZXQgcmVzdWx0ID0gMDtcblxuICAgICAgaWYgKHZhbHVlMSA9PSBudWxsICYmIHZhbHVlMiAhPSBudWxsKSByZXN1bHQgPSAtMTtcbiAgICAgIGVsc2UgaWYgKHZhbHVlMSAhPSBudWxsICYmIHZhbHVlMiA9PSBudWxsKSByZXN1bHQgPSAxO1xuICAgICAgZWxzZSBpZiAodmFsdWUxID09IG51bGwgJiYgdmFsdWUyID09IG51bGwpIHJlc3VsdCA9IDA7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlMSA9PT0gJ3N0cmluZycgfHwgdmFsdWUxIGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICAgIGlmICh2YWx1ZTEubG9jYWxlQ29tcGFyZSAmJiB2YWx1ZTEgIT09IHZhbHVlMikge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBtdWx0aVNvcnRNZXRhW2luZGV4XS5vcmRlciAqXG4gICAgICAgICAgICB2YWx1ZTEubG9jYWxlQ29tcGFyZSh2YWx1ZTIsIHVuZGVmaW5lZCwgeyBudW1lcmljOiB0cnVlIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gdmFsdWUxIDwgdmFsdWUyID8gLTEgOiAxO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUxID09PSB2YWx1ZTIpIHtcbiAgICAgICAgcmV0dXJuIG11bHRpU29ydE1ldGEubGVuZ3RoIC0gMSA+IGluZGV4XG4gICAgICAgICAgPyBwVHJlZVRhYmxlLm11bHRpc29ydEZpZWxkKG5vZGUxLCBub2RlMiwgbXVsdGlTb3J0TWV0YSwgaW5kZXggKyAxKVxuICAgICAgICAgIDogMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG11bHRpU29ydE1ldGFbaW5kZXhdLm9yZGVyICogcmVzdWx0O1xuICAgIH07XG5cbiAgICBwVHJlZVRhYmxlLl9maWx0ZXIgPSAoKSA9PiB7XG4gICAgICBpZiAocFRyZWVUYWJsZS5sYXp5KSB7XG4gICAgICAgIHBUcmVlVGFibGUub25MYXp5TG9hZC5lbWl0KHBUcmVlVGFibGUuY3JlYXRlTGF6eUxvYWRNZXRhZGF0YSgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghcFRyZWVUYWJsZS52YWx1ZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcFRyZWVUYWJsZS5oYXNGaWx0ZXIoKSkge1xuICAgICAgICAgIChwVHJlZVRhYmxlLmZpbHRlcmVkTm9kZXMgYXMgYW55KSA9IG51bGw7XG4gICAgICAgICAgaWYgKHBUcmVlVGFibGUucGFnaW5hdG9yKSB7XG4gICAgICAgICAgICBwVHJlZVRhYmxlLnRvdGFsUmVjb3JkcyA9IHBUcmVlVGFibGUudmFsdWVcbiAgICAgICAgICAgICAgPyBwVHJlZVRhYmxlLnZhbHVlLmxlbmd0aFxuICAgICAgICAgICAgICA6IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBnbG9iYWxGaWx0ZXJGaWVsZHNBcnJheTogYW55W10gfCB1bmRlZmluZWQ7XG4gICAgICAgICAgaWYgKHBUcmVlVGFibGUuZmlsdGVycy5nbG9iYWwpIHtcbiAgICAgICAgICAgIGlmICghcFRyZWVUYWJsZS5jb2x1bW5zICYmICFwVHJlZVRhYmxlLmdsb2JhbEZpbHRlckZpZWxkcylcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICdHbG9iYWwgZmlsdGVyaW5nIHJlcXVpcmVzIGR5bmFtaWMgY29sdW1ucyBvciBnbG9iYWxGaWx0ZXJGaWVsZHMgdG8gYmUgZGVmaW5lZC4nXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGdsb2JhbEZpbHRlckZpZWxkc0FycmF5ID1cbiAgICAgICAgICAgICAgICBwVHJlZVRhYmxlLmdsb2JhbEZpbHRlckZpZWxkcyB8fCBwVHJlZVRhYmxlLmNvbHVtbnM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fc3luY05vZGVzUGFyYW1zKHBUcmVlVGFibGUuZmlsdGVyZWROb2RlcywgcFRyZWVUYWJsZS52YWx1ZSk7XG5cbiAgICAgICAgICBwVHJlZVRhYmxlLmZpbHRlcmVkTm9kZXMgPSBbXTtcbiAgICAgICAgICBjb25zdCBpc1N0cmljdE1vZGUgPSBwVHJlZVRhYmxlLmZpbHRlck1vZGUgPT09ICdzdHJpY3QnO1xuICAgICAgICAgIGxldCBpc1ZhbHVlQ2hhbmdlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBbaWR4LCBub2RlXSBvZiBwVHJlZVRhYmxlLnZhbHVlLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgbGV0IGNvcHlOb2RlID0geyAuLi5ub2RlIH07XG4gICAgICAgICAgICBsZXQgbG9jYWxNYXRjaCA9IHRydWU7XG4gICAgICAgICAgICBsZXQgZ2xvYmFsTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBwYXJhbXNXaXRob3V0Tm9kZTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHBUcmVlVGFibGUuZmlsdGVycykge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgICAgICAgICAgIHBUcmVlVGFibGUuZmlsdGVycy5oYXNPd25Qcm9wZXJ0eShwcm9wKSAmJlxuICAgICAgICAgICAgICAgIHByb3AgIT09ICdnbG9iYWwnXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlck1ldGEgPSBwVHJlZVRhYmxlLmZpbHRlcnNbcHJvcF07XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyRmllbGQgPSBwcm9wO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlclZhbHVlID0gZmlsdGVyTWV0YT8udmFsdWU7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyTWF0Y2hNb2RlID0gZmlsdGVyTWV0YT8ubWF0Y2hNb2RlIHx8ICdzdGFydHNXaXRoJztcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJDb25zdHJhaW50ID1cbiAgICAgICAgICAgICAgICAgIHBUcmVlVGFibGUuZmlsdGVyU2VydmljZS5maWx0ZXJzW1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJNYXRjaE1vZGUgYXMga2V5b2YgdHlwZW9mIHBUcmVlVGFibGUuZmlsdGVyU2VydmljZS5maWx0ZXJzXG4gICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIHBhcmFtc1dpdGhvdXROb2RlID0ge1xuICAgICAgICAgICAgICAgICAgZmlsdGVyRmllbGQsXG4gICAgICAgICAgICAgICAgICBmaWx0ZXJWYWx1ZSxcbiAgICAgICAgICAgICAgICAgIGZpbHRlckNvbnN0cmFpbnQsXG4gICAgICAgICAgICAgICAgICBpc1N0cmljdE1vZGVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIChpc1N0cmljdE1vZGUgJiZcbiAgICAgICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgICBwVHJlZVRhYmxlLmZpbmRGaWx0ZXJlZE5vZGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgY29weU5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNXaXRob3V0Tm9kZVxuICAgICAgICAgICAgICAgICAgICAgICkgfHxcbiAgICAgICAgICAgICAgICAgICAgICBwVHJlZVRhYmxlLmlzRmlsdGVyTWF0Y2hlZChjb3B5Tm9kZSwgcGFyYW1zV2l0aG91dE5vZGUpXG4gICAgICAgICAgICAgICAgICAgICkpIHx8XG4gICAgICAgICAgICAgICAgICAoIWlzU3RyaWN0TW9kZSAmJlxuICAgICAgICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgICAgICAgIHBUcmVlVGFibGUuaXNGaWx0ZXJNYXRjaGVkKGNvcHlOb2RlLCBwYXJhbXNXaXRob3V0Tm9kZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICBwVHJlZVRhYmxlLmZpbmRGaWx0ZXJlZE5vZGVzKGNvcHlOb2RlLCBwYXJhbXNXaXRob3V0Tm9kZSlcbiAgICAgICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGxvY2FsTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIWxvY2FsTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHBUcmVlVGFibGUuZmlsdGVycy5nbG9iYWwgJiZcbiAgICAgICAgICAgICAgIWdsb2JhbE1hdGNoICYmXG4gICAgICAgICAgICAgIGdsb2JhbEZpbHRlckZpZWxkc0FycmF5XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBnbG9iYWxGaWx0ZXJGaWVsZHNBcnJheS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvcHlOb2RlRm9yR2xvYmFsID0geyAuLi5jb3B5Tm9kZSB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlckZpZWxkID1cbiAgICAgICAgICAgICAgICAgIGdsb2JhbEZpbHRlckZpZWxkc0FycmF5W2pdLmZpZWxkIHx8XG4gICAgICAgICAgICAgICAgICBnbG9iYWxGaWx0ZXJGaWVsZHNBcnJheVtqXTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHBUcmVlVGFibGUuZmlsdGVycy5nbG9iYWwudmFsdWU7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyQ29uc3RyYWludCA9XG4gICAgICAgICAgICAgICAgICBwVHJlZVRhYmxlLmZpbHRlclNlcnZpY2UuZmlsdGVyc1tcbiAgICAgICAgICAgICAgICAgICAgcFRyZWVUYWJsZS5maWx0ZXJzLmdsb2JhbFxuICAgICAgICAgICAgICAgICAgICAgIC5tYXRjaE1vZGUgYXMga2V5b2YgdHlwZW9mIHBUcmVlVGFibGUuZmlsdGVyU2VydmljZS5maWx0ZXJzXG4gICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIHBhcmFtc1dpdGhvdXROb2RlID0ge1xuICAgICAgICAgICAgICAgICAgZmlsdGVyRmllbGQsXG4gICAgICAgICAgICAgICAgICBmaWx0ZXJWYWx1ZSxcbiAgICAgICAgICAgICAgICAgIGZpbHRlckNvbnN0cmFpbnQsXG4gICAgICAgICAgICAgICAgICBpc1N0cmljdE1vZGVcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgKGlzU3RyaWN0TW9kZSAmJlxuICAgICAgICAgICAgICAgICAgICAocFRyZWVUYWJsZS5maW5kRmlsdGVyZWROb2RlcyhcbiAgICAgICAgICAgICAgICAgICAgICBjb3B5Tm9kZUZvckdsb2JhbCxcbiAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNXaXRob3V0Tm9kZVxuICAgICAgICAgICAgICAgICAgICApIHx8XG4gICAgICAgICAgICAgICAgICAgICAgcFRyZWVUYWJsZS5pc0ZpbHRlck1hdGNoZWQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3B5Tm9kZUZvckdsb2JhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1dpdGhvdXROb2RlXG4gICAgICAgICAgICAgICAgICAgICAgKSkpIHx8XG4gICAgICAgICAgICAgICAgICAoIWlzU3RyaWN0TW9kZSAmJlxuICAgICAgICAgICAgICAgICAgICAocFRyZWVUYWJsZS5pc0ZpbHRlck1hdGNoZWQoXG4gICAgICAgICAgICAgICAgICAgICAgY29weU5vZGVGb3JHbG9iYWwsXG4gICAgICAgICAgICAgICAgICAgICAgcGFyYW1zV2l0aG91dE5vZGVcbiAgICAgICAgICAgICAgICAgICAgKSB8fFxuICAgICAgICAgICAgICAgICAgICAgIHBUcmVlVGFibGUuZmluZEZpbHRlcmVkTm9kZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3B5Tm9kZUZvckdsb2JhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1dpdGhvdXROb2RlXG4gICAgICAgICAgICAgICAgICAgICAgKSkpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBnbG9iYWxNYXRjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBjb3B5Tm9kZSA9IGNvcHlOb2RlRm9yR2xvYmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IGxvY2FsTWF0Y2g7XG4gICAgICAgICAgICBpZiAocFRyZWVUYWJsZS5maWx0ZXJzLmdsb2JhbCkge1xuICAgICAgICAgICAgICBtYXRjaGVzID0gbG9jYWxNYXRjaCAmJiBnbG9iYWxNYXRjaDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgY29weU5vZGUuX2lkeCA9IGlkeDtcbiAgICAgICAgICAgICAgcFRyZWVUYWJsZS5maWx0ZXJlZE5vZGVzLnB1c2goY29weU5vZGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpc1ZhbHVlQ2hhbmdlZCA9XG4gICAgICAgICAgICAgIGlzVmFsdWVDaGFuZ2VkIHx8XG4gICAgICAgICAgICAgICFsb2NhbE1hdGNoIHx8XG4gICAgICAgICAgICAgIGdsb2JhbE1hdGNoIHx8XG4gICAgICAgICAgICAgIChsb2NhbE1hdGNoICYmIHBUcmVlVGFibGUuZmlsdGVyZWROb2Rlcy5sZW5ndGggPiAwKSB8fFxuICAgICAgICAgICAgICAoIWdsb2JhbE1hdGNoICYmIHBUcmVlVGFibGUuZmlsdGVyZWROb2Rlcy5sZW5ndGggPT09IDApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghaXNWYWx1ZUNoYW5nZWQpIHtcbiAgICAgICAgICAgIChwVHJlZVRhYmxlLmZpbHRlcmVkTm9kZXMgYXMgYW55KSA9IG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHBUcmVlVGFibGUucGFnaW5hdG9yKSB7XG4gICAgICAgICAgICBwVHJlZVRhYmxlLnRvdGFsUmVjb3JkcyA9IHBUcmVlVGFibGUuZmlsdGVyZWROb2Rlc1xuICAgICAgICAgICAgICA/IHBUcmVlVGFibGUuZmlsdGVyZWROb2Rlcy5sZW5ndGhcbiAgICAgICAgICAgICAgOiBwVHJlZVRhYmxlLnZhbHVlXG4gICAgICAgICAgICAgID8gcFRyZWVUYWJsZS52YWx1ZS5sZW5ndGhcbiAgICAgICAgICAgICAgOiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwVHJlZVRhYmxlLmZpcnN0ID0gMDtcblxuICAgICAgY29uc3QgZmlsdGVyZWRWYWx1ZSA9IHBUcmVlVGFibGUuZmlsdGVyZWROb2RlcyB8fCBwVHJlZVRhYmxlLnZhbHVlO1xuXG4gICAgICBwVHJlZVRhYmxlLm9uRmlsdGVyLmVtaXQoe1xuICAgICAgICBmaWx0ZXJzOiBwVHJlZVRhYmxlLmZpbHRlcnMsXG4gICAgICAgIGZpbHRlcmVkVmFsdWVcbiAgICAgIH0pO1xuXG4gICAgICBwVHJlZVRhYmxlLnRhYmxlU2VydmljZS5vblVJVXBkYXRlKGZpbHRlcmVkVmFsdWUpO1xuICAgICAgcFRyZWVUYWJsZS51cGRhdGVTZXJpYWxpemVkVmFsdWUoKTtcblxuICAgICAgaWYgKHBUcmVlVGFibGUuc2Nyb2xsYWJsZSkge1xuICAgICAgICBwVHJlZVRhYmxlLnJlc2V0U2Nyb2xsVG9wKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHBUcmVlVGFibGUuZmluZEZpbHRlcmVkTm9kZXMgPSAobm9kZSwgcGFyYW1zV2l0aG91dE5vZGUpOiBhbnkgPT4ge1xuICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgbGV0IG1hdGNoZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICBjb25zdCBjaGlsZE5vZGVzID0gWy4uLm5vZGUuY2hpbGRyZW5dO1xuICAgICAgICAgIG5vZGUuY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICBmb3IgKGNvbnN0IFtpZHgsIGNoaWxkTm9kZV0gb2YgY2hpbGROb2Rlcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvcHlDaGlsZE5vZGUgPSB7IC4uLmNoaWxkTm9kZSB9O1xuICAgICAgICAgICAgaWYgKHBUcmVlVGFibGUuaXNGaWx0ZXJNYXRjaGVkKGNvcHlDaGlsZE5vZGUsIHBhcmFtc1dpdGhvdXROb2RlKSkge1xuICAgICAgICAgICAgICBtYXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgY29weUNoaWxkTm9kZS5faWR4ID0gaWR4O1xuICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLnB1c2goY29weUNoaWxkTm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1hdGNoZWQpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9zeW5jTm9kZXNQYXJhbXMoZnJvbTogYW55W10gfCB1bmRlZmluZWQsIHRvOiBhbnlbXSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghZnJvbSB8fCAhdG8pIHJldHVybjtcblxuICAgIGZyb20uZm9yRWFjaCgoc291cmNlKSA9PiB7XG4gICAgICBjb25zdCBpZHggPSBzb3VyY2UuX2lkeDtcbiAgICAgIGlmICh0eXBlb2YgaWR4ID09PSAnbnVtYmVyJykge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0b1tpZHhdO1xuICAgICAgICBkZWxldGUgc291cmNlLl9pZHg7XG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICB0YXJnZXQuZXhwYW5kZWQgPSBzb3VyY2UuZXhwYW5kZWQ7XG4gICAgICAgICAgdGFyZ2V0LnBhcnRpYWxTZWxlY3RlZCA9IHNvdXJjZS5wYXJ0aWFsU2VsZWN0ZWQ7XG4gICAgICAgICAgdGhpcy5fc3luY05vZGVzUGFyYW1zKHNvdXJjZS5jaGlsZHJlbiwgdGFyZ2V0LmNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXX0=
|