verben-ng-ui 1.2.69 → 1.2.71

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.
Files changed (57) hide show
  1. package/esm2022/src/lib/components/card-data-view/right-card-data-view/right-card-data-view.component.mjs +3 -3
  2. package/esm2022/src/lib/components/data-export/data-export.component.mjs +6 -6
  3. package/esm2022/src/lib/components/data-extend/data-extend.component.mjs +1 -1
  4. package/esm2022/src/lib/components/data-filter/data-filter.component.mjs +1 -1
  5. package/esm2022/src/lib/components/data-import/data-import.component.mjs +1 -1
  6. package/esm2022/src/lib/components/data-import/data-import.service.mjs +2 -2
  7. package/esm2022/src/lib/components/data-table/data-table.component.mjs +5 -3
  8. package/esm2022/src/lib/components/data-view/data-view.component.mjs +1 -1
  9. package/esm2022/src/lib/components/data-xport/data-xport.component.mjs +1 -1
  10. package/esm2022/src/lib/components/date-picker/date-picker.component.mjs +1 -1
  11. package/esm2022/src/lib/components/drop-down/DropdownLoadEvent.mjs +4 -1
  12. package/esm2022/src/lib/components/drop-down/drop-down.component.mjs +22 -5
  13. package/esm2022/src/lib/components/notification/notification.component.mjs +1 -1
  14. package/esm2022/src/lib/components/pop-up/pop-up.component.mjs +9 -9
  15. package/esm2022/src/lib/components/table-filter/table-filter.component.mjs +1 -1
  16. package/esm2022/src/lib/convert-to-integer/convert-to-integer.directive.mjs +3 -3
  17. package/esm2022/src/lib/convert-to-number/convert-to-number.directive.mjs +4 -4
  18. package/esm2022/src/lib/phone-number/phone-number.directive.mjs +3 -3
  19. package/esm2022/src/lib/verbena-button/verbena-button.component.mjs +14 -11
  20. package/fesm2022/verben-ng-ui-src-lib-components-card-data-view.mjs +2 -2
  21. package/fesm2022/verben-ng-ui-src-lib-components-card-data-view.mjs.map +1 -1
  22. package/fesm2022/verben-ng-ui-src-lib-components-data-export.mjs +5 -5
  23. package/fesm2022/verben-ng-ui-src-lib-components-data-export.mjs.map +1 -1
  24. package/fesm2022/verben-ng-ui-src-lib-components-data-extend.mjs +1 -1
  25. package/fesm2022/verben-ng-ui-src-lib-components-data-extend.mjs.map +1 -1
  26. package/fesm2022/verben-ng-ui-src-lib-components-data-filter.mjs +1 -1
  27. package/fesm2022/verben-ng-ui-src-lib-components-data-filter.mjs.map +1 -1
  28. package/fesm2022/verben-ng-ui-src-lib-components-data-import.mjs +2 -2
  29. package/fesm2022/verben-ng-ui-src-lib-components-data-import.mjs.map +1 -1
  30. package/fesm2022/verben-ng-ui-src-lib-components-data-table.mjs +4 -2
  31. package/fesm2022/verben-ng-ui-src-lib-components-data-table.mjs.map +1 -1
  32. package/fesm2022/verben-ng-ui-src-lib-components-data-view.mjs +1 -1
  33. package/fesm2022/verben-ng-ui-src-lib-components-data-view.mjs.map +1 -1
  34. package/fesm2022/verben-ng-ui-src-lib-components-data-xport.mjs +1 -1
  35. package/fesm2022/verben-ng-ui-src-lib-components-data-xport.mjs.map +1 -1
  36. package/fesm2022/verben-ng-ui-src-lib-components-date-picker.mjs +1 -1
  37. package/fesm2022/verben-ng-ui-src-lib-components-date-picker.mjs.map +1 -1
  38. package/fesm2022/verben-ng-ui-src-lib-components-drop-down.mjs +24 -4
  39. package/fesm2022/verben-ng-ui-src-lib-components-drop-down.mjs.map +1 -1
  40. package/fesm2022/verben-ng-ui-src-lib-components-notification.mjs +1 -1
  41. package/fesm2022/verben-ng-ui-src-lib-components-notification.mjs.map +1 -1
  42. package/fesm2022/verben-ng-ui-src-lib-components-pop-up.mjs +8 -8
  43. package/fesm2022/verben-ng-ui-src-lib-components-pop-up.mjs.map +1 -1
  44. package/fesm2022/verben-ng-ui-src-lib-components-table-filter.mjs +1 -1
  45. package/fesm2022/verben-ng-ui-src-lib-components-table-filter.mjs.map +1 -1
  46. package/fesm2022/verben-ng-ui-src-lib-convert-to-integer.mjs +2 -2
  47. package/fesm2022/verben-ng-ui-src-lib-convert-to-integer.mjs.map +1 -1
  48. package/fesm2022/verben-ng-ui-src-lib-convert-to-number.mjs +2 -2
  49. package/fesm2022/verben-ng-ui-src-lib-convert-to-number.mjs.map +1 -1
  50. package/fesm2022/verben-ng-ui-src-lib-phone-number.mjs +2 -2
  51. package/fesm2022/verben-ng-ui-src-lib-phone-number.mjs.map +1 -1
  52. package/fesm2022/verben-ng-ui-src-lib-verbena-button.mjs +13 -10
  53. package/fesm2022/verben-ng-ui-src-lib-verbena-button.mjs.map +1 -1
  54. package/package.json +85 -85
  55. package/src/lib/components/drop-down/DropdownLoadEvent.d.ts +1 -0
  56. package/src/lib/components/drop-down/drop-down.component.d.ts +3 -1
  57. package/src/lib/verbena-button/verbena-button.component.d.ts +2 -1
@@ -7,8 +7,8 @@ export class RightCardDataViewComponent {
7
7
  parentData;
8
8
  chilData;
9
9
  meth(d) {
10
- console.log(this.parent);
11
- console.log(this.chilData);
10
+ // console.log(this.parent)
11
+ //console.log(this.chilData)
12
12
  }
13
13
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: RightCardDataViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
14
14
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.10", type: RightCardDataViewComponent, selector: "verben-right-card-data-view", inputs: { parentData: "parentData", chilData: "chilData", meth: "meth" }, queries: [{ propertyName: "parent", first: true, predicate: ["parent"], descendants: true }, { propertyName: "child", first: true, predicate: ["child"], descendants: true }], ngImport: i0, template: " <ng-container *ngIf=\"parentData && !chilData\">\n <ng-content *ngTemplateOutlet=\"parent\"></ng-content>\n </ng-container>\n <ng-container *ngIf=\"chilData\">\n <ng-content *ngTemplateOutlet=\"child\"></ng-content> \n </ng-container>\n", styles: [":host{flex:1 1 0}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
@@ -29,4 +29,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImpo
29
29
  }], meth: [{
30
30
  type: Input
31
31
  }] } });
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmlnaHQtY2FyZC1kYXRhLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9jYXJkLWRhdGEtdmlldy9yaWdodC1jYXJkLWRhdGEtdmlldy9yaWdodC1jYXJkLWRhdGEtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2NhcmQtZGF0YS12aWV3L3JpZ2h0LWNhcmQtZGF0YS12aWV3L3JpZ2h0LWNhcmQtZGF0YS12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBZSxNQUFNLGVBQWUsQ0FBQzs7O0FBUTVFLE1BQU0sT0FBTywwQkFBMEI7SUFDWixNQUFNLENBQW9CO0lBQzNCLEtBQUssQ0FBb0I7SUFDdkMsVUFBVSxDQUFXO0lBQ3JCLFFBQVEsQ0FBVztJQUNuQixJQUFJLENBQUMsQ0FBSztRQUVoQixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUM3QixDQUFDO3dHQVRTLDBCQUEwQjs0RkFBMUIsMEJBQTBCLDRUQ1J2Qyw4UUFNQTs7NEZERWEsMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLDZCQUE2Qjs4QkFLZCxNQUFNO3NCQUE3QixZQUFZO3VCQUFDLFFBQVE7Z0JBQ0MsS0FBSztzQkFBM0IsWUFBWTt1QkFBQyxPQUFPO2dCQUNaLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgSW5wdXQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDYXJkRGF0YSB9IGZyb20gJy4uL2NhcmQtZGF0YSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZlcmJlbi1yaWdodC1jYXJkLWRhdGEtdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9yaWdodC1jYXJkLWRhdGEtdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9yaWdodC1jYXJkLWRhdGEtdmlldy5jb21wb25lbnQuY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBSaWdodENhcmREYXRhVmlld0NvbXBvbmVudCB7XG4gICBAQ29udGVudENoaWxkKCdwYXJlbnQnKSBwYXJlbnQhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgQENvbnRlbnRDaGlsZCgnY2hpbGQnKSBjaGlsZCE6IFRlbXBsYXRlUmVmPGFueT47XG4gICBASW5wdXQoKSBwYXJlbnREYXRhISA6Q2FyZERhdGFcbiAgIEBJbnB1dCgpIGNoaWxEYXRhISA6Q2FyZERhdGFcbiAgIEBJbnB1dCgpIG1ldGgoZDphbnkpXG4gICB7XG4gICAgICBjb25zb2xlLmxvZyh0aGlzLnBhcmVudClcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuY2hpbERhdGEpXG4gICB9XG4gIC8vICBjdXJyZW50RGF0YSAmJiBjdXJyZW50RGF0YS50aXRsZVxuXG59XG4iLCIgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYXJlbnREYXRhICYmICFjaGlsRGF0YVwiPlxuICAgICAgICA8bmctY29udGVudCAqbmdUZW1wbGF0ZU91dGxldD1cInBhcmVudFwiPjwvbmctY29udGVudD5cbiAgICAgPC9uZy1jb250YWluZXI+XG4gICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGlsRGF0YVwiPlxuICAgICAgICA8bmctY29udGVudCAqbmdUZW1wbGF0ZU91dGxldD1cImNoaWxkXCI+PC9uZy1jb250ZW50PiAgXG4gICAgIDwvbmctY29udGFpbmVyPlxuIl19
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmlnaHQtY2FyZC1kYXRhLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9jYXJkLWRhdGEtdmlldy9yaWdodC1jYXJkLWRhdGEtdmlldy9yaWdodC1jYXJkLWRhdGEtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2NhcmQtZGF0YS12aWV3L3JpZ2h0LWNhcmQtZGF0YS12aWV3L3JpZ2h0LWNhcmQtZGF0YS12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBZSxNQUFNLGVBQWUsQ0FBQzs7O0FBUTVFLE1BQU0sT0FBTywwQkFBMEI7SUFDYixNQUFNLENBQW9CO0lBQzNCLEtBQUssQ0FBb0I7SUFDdkMsVUFBVSxDQUFZO0lBQ3RCLFFBQVEsQ0FBWTtJQUNwQixJQUFJLENBQUMsQ0FBTTtRQUNsQiw0QkFBNEI7UUFDNUIsNEJBQTRCO0lBQzlCLENBQUM7d0dBUlUsMEJBQTBCOzRGQUExQiwwQkFBMEIsNFRDUnZDLDhRQU1BOzs0RkRFYSwwQkFBMEI7a0JBTHRDLFNBQVM7K0JBQ0UsNkJBQTZCOzhCQUtmLE1BQU07c0JBQTdCLFlBQVk7dUJBQUMsUUFBUTtnQkFDQyxLQUFLO3NCQUEzQixZQUFZO3VCQUFDLE9BQU87Z0JBQ1osVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkLCBJbnB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENhcmREYXRhIH0gZnJvbSAnLi4vY2FyZC1kYXRhJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmVyYmVuLXJpZ2h0LWNhcmQtZGF0YS12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JpZ2h0LWNhcmQtZGF0YS12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3JpZ2h0LWNhcmQtZGF0YS12aWV3LmNvbXBvbmVudC5jc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBSaWdodENhcmREYXRhVmlld0NvbXBvbmVudCB7XG4gIEBDb250ZW50Q2hpbGQoJ3BhcmVudCcpIHBhcmVudCE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBDb250ZW50Q2hpbGQoJ2NoaWxkJykgY2hpbGQhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBwYXJlbnREYXRhITogQ2FyZERhdGE7XG4gIEBJbnB1dCgpIGNoaWxEYXRhITogQ2FyZERhdGE7XG4gIEBJbnB1dCgpIG1ldGgoZDogYW55KSB7XG4gICAgLy8gIGNvbnNvbGUubG9nKHRoaXMucGFyZW50KVxuICAgIC8vY29uc29sZS5sb2codGhpcy5jaGlsRGF0YSlcbiAgfVxuICAvLyAgY3VycmVudERhdGEgJiYgY3VycmVudERhdGEudGl0bGVcbn1cbiIsIiAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhcmVudERhdGEgJiYgIWNoaWxEYXRhXCI+XG4gICAgICAgIDxuZy1jb250ZW50ICpuZ1RlbXBsYXRlT3V0bGV0PVwicGFyZW50XCI+PC9uZy1jb250ZW50PlxuICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoaWxEYXRhXCI+XG4gICAgICAgIDxuZy1jb250ZW50ICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2hpbGRcIj48L25nLWNvbnRlbnQ+ICBcbiAgICAgPC9uZy1jb250YWluZXI+XG4iXX0=
@@ -87,7 +87,7 @@ export class DataExportComponent {
87
87
  }));
88
88
  }
89
89
  addGroup() {
90
- console.log('in');
90
+ // console.log('in');
91
91
  if (this.newGroupForm.valid) {
92
92
  const selectedItems = this.groupItems.filter((item) => item.selected);
93
93
  if (selectedItems.length > 0) {
@@ -100,9 +100,9 @@ export class DataExportComponent {
100
100
  this.updateProfiles();
101
101
  this.groupItems.forEach((item) => (item.selected = false));
102
102
  this.newGroupForm.reset();
103
- console.log('SELECTED');
103
+ // console.log('SELECTED');
104
104
  }
105
- console.log('VALID');
105
+ // console.log('VALID');
106
106
  }
107
107
  }
108
108
  editProfile(profile) {
@@ -165,7 +165,7 @@ export class DataExportComponent {
165
165
  this.exportDataEvent.emit(exportedData);
166
166
  }
167
167
  else {
168
- console.log('No profiles selected for export');
168
+ // console.log('No profiles selected for export');
169
169
  }
170
170
  }
171
171
  onField1Change() {
@@ -194,7 +194,7 @@ export class DataExportComponent {
194
194
  this.showAllGroups = !this.showAllGroups;
195
195
  }
196
196
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DataExportComponent, deps: [{ token: i1.DataExportService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
197
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.10", type: DataExportComponent, selector: "lib-data-export", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: false, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: false, isRequired: false, transformFunction: null }, dataFetchUrl: { classPropertyName: "dataFetchUrl", publicName: "dataFetchUrl", isSignal: true, isRequired: false, transformFunction: null }, dataQueryParameters: { classPropertyName: "dataQueryParameters", publicName: "dataQueryParameters", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { exportDataEvent: "exportDataEvent" }, usesOnChanges: true, ngImport: i0, template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid #D4A007'\"\n bgColor=\"#FFFFFF\"\n class=\"export-card\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">Export</h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'#3479E9'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"resetAll()\"\n >\n Reset\n </button>\n </div>\n <div card-body class=\"card-body\">\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Profiles</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n ></verben-svg>\n </div>\n <div *ngFor=\"let profile of visibleProfiles; let i = index\" class=\"item\">\n <div class=\"item-label\">\n <input\n type=\"checkbox\"\n [id]=\"'profile-' + i\"\n [(ngModel)]=\"profile.selected\"\n />\n <label [for]=\"'profile-' + i\" class=\"checkbox-label\">\n {{ profile.name }}\n </label>\n </div>\n <div class=\"item-actions\">\n <verben-svg\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#3479E9\"\n fill=\"white\"\n (click)=\"editProfile(profile)\"\n ></verben-svg>\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#E20000\"\n (click)=\"removeProfile(profile)\"\n ></verben-svg>\n </div>\n </div>\n <div\n *ngIf=\"profiles.length > 3\"\n (click)=\"toggleShowAllProfiles()\"\n class=\"show-more\"\n >\n <span>{{ showAllProfiles ? \"Show less\" : \"Show more\" }}</span>\n <verben-svg\n icon=\"chevron\"\n [width]=\"8\"\n [height]=\"6\"\n fill=\"black\"\n stroke=\"black\"\n ></verben-svg>\n </div>\n </section>\n <hr class=\"divider\" />\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Group</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n ></verben-svg>\n </div>\n <form [formGroup]=\"newGroupForm\" (ngSubmit)=\"addGroup()\">\n <verbena-input\n placeholder=\"Group name\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"100%\"\n fontSize=\"11px\"\n height=\"20px\"\n pd=\"2px 4px !important\"\n bgColor=\"transparent\"\n [showBorder]=\"true\"\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n formControlName=\"name\"\n ></verbena-input>\n </form>\n <div *ngFor=\"let item of visibleGroups; let i = index\" class=\"item\">\n <div class=\"item-label\">\n <input\n type=\"checkbox\"\n [id]=\"'group-' + i\"\n [(ngModel)]=\"item.selected\"\n />\n <label [for]=\"'group-' + i\" class=\"checkbox-label\">\n {{ item.name }}\n </label>\n </div>\n <div class=\"item-actions\" *ngIf=\"item.type === 'operation'\">\n <verben-svg\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#3479E9\"\n fill=\"white\"\n (click)=\"editOperation(item)\"\n ></verben-svg>\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#E20000\"\n (click)=\"removeOperation(item)\"\n ></verben-svg>\n </div>\n </div>\n\n <div class=\"flex items-center justify-between\">\n <button\n *ngIf=\"groupItems.length > 3\"\n (click)=\"toggleShowAllGroups()\"\n class=\"show-more\"\n >\n <span>{{ showAllGroups ? \"Show less\" : \"Show more\" }}</span>\n <verben-svg\n icon=\"chevron\"\n [width]=\"8\"\n [height]=\"6\"\n fill=\"black\"\n stroke=\"black\"\n ></verben-svg>\n </button>\n <button class=\"add-button\" (click)=\"addGroup()\">+ Add</button>\n </div>\n </section>\n <hr class=\"divider\" />\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Operation</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n ></verben-svg>\n </div>\n <verbena-input\n placeholder=\"Operation name\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n fontSize=\"11px\"\n width=\"100%\"\n height=\"20px\"\n pd=\"2px 6px\"\n bgColor=\"transparent\"\n [showBorder]=\"true\"\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n [(ngModel)]=\"newOperation.name\"\n ></verbena-input>\n <div class=\"operation-grid\">\n <verben-drop-down\n width=\"'8rem'\"\n height=\"'1.25rem'\"\n placeholder=\"Select field\"\n [options]=\"numericProperties.concat(stringProperties)\"\n [(ngModel)]=\"newOperation.field1\"\n (ngModelChange)=\"onField1Change()\"\n >\n </verben-drop-down>\n <verben-drop-down\n width=\"'8rem'\"\n height=\"'1.25rem'\"\n placeholder=\"Select operator\"\n [options]=\"availableOperators\"\n [(ngModel)]=\"newOperation.operator\"\n >\n </verben-drop-down>\n <verben-drop-down\n width=\"'8rem'\"\n placeholder=\"Select field\"\n [options]=\"availableFields2\"\n [(ngModel)]=\"newOperation.field2\"\n >\n </verben-drop-down>\n </div>\n <button class=\"add-button ml-auto\" (click)=\"addOrUpdateOperation()\">\n {{ isEditingOperation ? \"Update\" : \"+ Add\" }}\n </button>\n </section>\n\n <section class=\"section\">\n @if (dataFetchUrl()) {\n <div class=\"section-header\">\n <h3 class=\"section-title\">Record Size</h3>\n </div>\n }\n </section>\n </div>\n <div card-footer class=\"card-footer\">\n <button class=\"export-button\" (click)=\"exportData()\">Export</button>\n </div>\n</verben-card>\n", styles: [".export-card{font-size:.75rem;z-index:10}.card-header{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.card-body,.section{display:flex;flex-direction:column;gap:.5rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.checkbox-label{line-height:1}.item-actions{display:flex;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:#6b7280;cursor:pointer}.divider{border:none;border-top:1px solid #e8eaf1}.operation-grid{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.add-button{margin-top:.5rem;outline:none;border:none;background-color:transparent;color:#3479e9;font-size:.75rem;font-weight:500;cursor:pointer}.card-footer{display:flex;justify-content:flex-end;background-color:transparent}.export-button{margin-top:.5rem;outline:none;border:none;padding:.2rem 1.6rem;background-color:#ffe681;color:#404040;font-size:.75rem;font-weight:600;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i5.CardComponent, selector: "verben-card", inputs: ["pd", "mg", "height", "width", "textColor", "bgColor", "border", "borderRadius", "disabled", "aspectRatio"] }, { kind: "component", type: i6.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "overlayWidth", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i7.VerbenaInputComponent, selector: "verbena-input", inputs: ["disabled", "label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "fontSize", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
197
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.10", type: DataExportComponent, selector: "lib-data-export", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: false, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: false, isRequired: false, transformFunction: null }, dataFetchUrl: { classPropertyName: "dataFetchUrl", publicName: "dataFetchUrl", isSignal: true, isRequired: false, transformFunction: null }, dataQueryParameters: { classPropertyName: "dataQueryParameters", publicName: "dataQueryParameters", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { exportDataEvent: "exportDataEvent" }, usesOnChanges: true, ngImport: i0, template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid #D4A007'\"\n bgColor=\"#FFFFFF\"\n class=\"export-card\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">Export</h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'#3479E9'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"resetAll()\"\n >\n Reset\n </button>\n </div>\n <div card-body class=\"card-body\">\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Profiles</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n ></verben-svg>\n </div>\n <div *ngFor=\"let profile of visibleProfiles; let i = index\" class=\"item\">\n <div class=\"item-label\">\n <input\n type=\"checkbox\"\n [id]=\"'profile-' + i\"\n [(ngModel)]=\"profile.selected\"\n />\n <label [for]=\"'profile-' + i\" class=\"checkbox-label\">\n {{ profile.name }}\n </label>\n </div>\n <div class=\"item-actions\">\n <verben-svg\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#3479E9\"\n fill=\"white\"\n (click)=\"editProfile(profile)\"\n ></verben-svg>\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#E20000\"\n (click)=\"removeProfile(profile)\"\n ></verben-svg>\n </div>\n </div>\n <div\n *ngIf=\"profiles.length > 3\"\n (click)=\"toggleShowAllProfiles()\"\n class=\"show-more\"\n >\n <span>{{ showAllProfiles ? \"Show less\" : \"Show more\" }}</span>\n <verben-svg\n icon=\"chevron\"\n [width]=\"8\"\n [height]=\"6\"\n fill=\"black\"\n stroke=\"black\"\n ></verben-svg>\n </div>\n </section>\n <hr class=\"divider\" />\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Group</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n ></verben-svg>\n </div>\n <form [formGroup]=\"newGroupForm\" (ngSubmit)=\"addGroup()\">\n <verbena-input\n placeholder=\"Group name\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"100%\"\n fontSize=\"11px\"\n height=\"20px\"\n pd=\"2px 4px !important\"\n bgColor=\"transparent\"\n [showBorder]=\"true\"\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n formControlName=\"name\"\n ></verbena-input>\n </form>\n <div *ngFor=\"let item of visibleGroups; let i = index\" class=\"item\">\n <div class=\"item-label\">\n <input\n type=\"checkbox\"\n [id]=\"'group-' + i\"\n [(ngModel)]=\"item.selected\"\n />\n <label [for]=\"'group-' + i\" class=\"checkbox-label\">\n {{ item.name }}\n </label>\n </div>\n <div class=\"item-actions\" *ngIf=\"item.type === 'operation'\">\n <verben-svg\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#3479E9\"\n fill=\"white\"\n (click)=\"editOperation(item)\"\n ></verben-svg>\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#E20000\"\n (click)=\"removeOperation(item)\"\n ></verben-svg>\n </div>\n </div>\n\n <div class=\"flex items-center justify-between\">\n <button\n *ngIf=\"groupItems.length > 3\"\n (click)=\"toggleShowAllGroups()\"\n class=\"show-more\"\n >\n <span>{{ showAllGroups ? \"Show less\" : \"Show more\" }}</span>\n <verben-svg\n icon=\"chevron\"\n [width]=\"8\"\n [height]=\"6\"\n fill=\"black\"\n stroke=\"black\"\n ></verben-svg>\n </button>\n <button class=\"add-button\" (click)=\"addGroup()\">+ Add</button>\n </div>\n </section>\n <hr class=\"divider\" />\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Operation</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n ></verben-svg>\n </div>\n <verbena-input\n placeholder=\"Operation name\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n fontSize=\"11px\"\n width=\"100%\"\n height=\"20px\"\n pd=\"2px 6px\"\n bgColor=\"transparent\"\n [showBorder]=\"true\"\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n [(ngModel)]=\"newOperation.name\"\n ></verbena-input>\n <div class=\"operation-grid\">\n <verben-drop-down\n width=\"'8rem'\"\n height=\"'1.25rem'\"\n placeholder=\"Select field\"\n [options]=\"numericProperties.concat(stringProperties)\"\n [(ngModel)]=\"newOperation.field1\"\n (ngModelChange)=\"onField1Change()\"\n >\n </verben-drop-down>\n <verben-drop-down\n width=\"'8rem'\"\n height=\"'1.25rem'\"\n placeholder=\"Select operator\"\n [options]=\"availableOperators\"\n [(ngModel)]=\"newOperation.operator\"\n >\n </verben-drop-down>\n <verben-drop-down\n width=\"'8rem'\"\n placeholder=\"Select field\"\n [options]=\"availableFields2\"\n [(ngModel)]=\"newOperation.field2\"\n >\n </verben-drop-down>\n </div>\n <button class=\"add-button ml-auto\" (click)=\"addOrUpdateOperation()\">\n {{ isEditingOperation ? \"Update\" : \"+ Add\" }}\n </button>\n </section>\n\n <section class=\"section\">\n @if (dataFetchUrl()) {\n <div class=\"section-header\">\n <h3 class=\"section-title\">Record Size</h3>\n </div>\n }\n </section>\n </div>\n <div card-footer class=\"card-footer\">\n <button class=\"export-button\" (click)=\"exportData()\">Export</button>\n </div>\n</verben-card>\n", styles: [".export-card{font-size:.75rem;z-index:10}.card-header{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.card-body,.section{display:flex;flex-direction:column;gap:.5rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.checkbox-label{line-height:1}.item-actions{display:flex;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:#6b7280;cursor:pointer}.divider{border:none;border-top:1px solid #e8eaf1}.operation-grid{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.add-button{margin-top:.5rem;outline:none;border:none;background-color:transparent;color:#3479e9;font-size:.75rem;font-weight:500;cursor:pointer}.card-footer{display:flex;justify-content:flex-end;background-color:transparent}.export-button{margin-top:.5rem;outline:none;border:none;padding:.2rem 1.6rem;background-color:#ffe681;color:#404040;font-size:.75rem;font-weight:600;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i5.CardComponent, selector: "verben-card", inputs: ["pd", "mg", "height", "width", "textColor", "bgColor", "border", "borderRadius", "disabled", "aspectRatio"] }, { kind: "component", type: i6.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "overlayWidth", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "refPageSize", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i7.VerbenaInputComponent, selector: "verbena-input", inputs: ["disabled", "label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "fontSize", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
198
198
  }
199
199
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DataExportComponent, decorators: [{
200
200
  type: Component,
@@ -206,4 +206,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImpo
206
206
  }], exportDataEvent: [{
207
207
  type: Output
208
208
  }] } });
209
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1leHBvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWV4cG9ydC9kYXRhLWV4cG9ydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtZXhwb3J0L2RhdGEtZXhwb3J0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsS0FBSyxFQUNMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXFDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRS9FLE9BQU8sRUFJTCxTQUFTLEdBRVYsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7O0FBUzdCLE1BQU0sT0FBTyxtQkFBbUI7SUFvQ3BCO0lBQ0E7SUFwQ0QsT0FBTyxDQUF1QjtJQUM5QixJQUFJLENBQVM7SUFDdEIsWUFBWSxHQUFHLEtBQUssRUFBVSxDQUFDO0lBQy9CLG1CQUFtQixHQUFHLEtBQUssRUFBeUIsQ0FBQztJQUMzQyxlQUFlLEdBQUcsSUFBSSxZQUFZLEVBQXlCLENBQUM7SUFFdEUsUUFBUSxHQUE4QyxFQUFFLENBQUM7SUFDekQsVUFBVSxHQUEyQyxFQUFFLENBQUM7SUFDeEQsWUFBWSxDQUFZO0lBQ3hCLFlBQVksR0FBYztRQUN4QixFQUFFLEVBQUUsRUFBRTtRQUNOLElBQUksRUFBRSxFQUFFO1FBQ1IsTUFBTSxFQUFFLEVBQUU7UUFDVixRQUFRLEVBQUUsU0FBUyxDQUFDLEdBQUc7UUFDdkIsTUFBTSxFQUFFLEVBQUU7S0FDWCxDQUFDO0lBQ0YsaUJBQWlCLEdBQWEsRUFBRSxDQUFDO0lBQ2pD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QUFJLENBQUMsZUFBZSxDQUFDO0lBQy9DLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDM0MsQ0FBQzt3R0E3TlUsbUJBQW1COzRGQUFuQixtQkFBbUIsNnFCQ3pCaEMsMnBOQTZOQTs7NEZEcE1hLG1CQUFtQjtrQkFOL0IsU0FBUzsrQkFDRSxpQkFBaUIsbUJBR1YsdUJBQXVCLENBQUMsTUFBTTtnSEFHdEMsT0FBTztzQkFBZixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFHSSxlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBpbnB1dCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEYXRhRXhwb3J0U2VydmljZSB9IGZyb20gJy4vZGF0YS1leHBvcnQuc2VydmljZSc7XG5pbXBvcnQge1xuICBFeHBvcnRJdGVtLFxuICBFeHBvcnRQcm9maWxlLFxuICBPcGVyYXRpb24sXG4gIE9wZXJhdG9ycyxcbiAgU2VhcmNoUHJvcGVydHlWYWx1ZSxcbn0gZnJvbSAnLi9kYXRhLWV4cG9ydC50eXBlcyc7XG5pbXBvcnQgeyBDb2x1bW5EZWZpbml0aW9uIH0gZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLXRhYmxlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWRhdGEtZXhwb3J0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtZXhwb3J0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2RhdGEtZXhwb3J0LmNvbXBvbmVudC5jc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRGF0YUV4cG9ydENvbXBvbmVudDxUIGV4dGVuZHMgeyBpZDogc3RyaW5nIHwgbnVtYmVyIH0+IHtcbiAgQElucHV0KCkgY29sdW1ucyE6IENvbHVtbkRlZmluaXRpb248VD47XG4gIEBJbnB1dCgpIGRhdGEhOiBhbnlbXTtcbiAgZGF0YUZldGNoVXJsID0gaW5wdXQ8c3RyaW5nPigpO1xuICBkYXRhUXVlcnlQYXJhbWV0ZXJzID0gaW5wdXQ8U2VhcmNoUHJvcGVydHlWYWx1ZVtdPigpO1xuICBAT3V0cHV0KCkgZXhwb3J0RGF0YUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ8c3RyaW5nLCBhbnk+W10+KCk7XG5cbiAgcHJvZmlsZXM6IChFeHBvcnRQcm9maWxlICYgeyBzZWxlY3RlZDogYm9vbGVhbiB9KVtdID0gW107XG4gIGdyb3VwSXRlbXM6IChFeHBvcnRJdGVtICYgeyBzZWxlY3RlZDogYm9vbGVhbiB9KVtdID0gW107XG4gIG5ld0dyb3VwRm9ybTogRm9ybUdyb3VwO1xuICBuZXdPcGVyYXRpb246IE9wZXJhdGlvbiA9IHtcbiAgICBpZDogJycsXG4gICAgbmFtZTogJycsXG4gICAgZmllbGQxOiAnJyxcbiAgICBvcGVyYXRvcjogT3BlcmF0b3JzLmFkZCxcbiAgICBmaWVsZDI6ICcnLFxuICB9O1xuICBudW1lcmljUHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcbiAgc3RyaW5nUHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcbiAgaXNFZGl0aW5nT3BlcmF0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dBbGxQcm9maWxlczogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93QWxsR3JvdXBzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgb3BlcmF0b3JzTnVtZXJpYzogT3BlcmF0b3JzW10gPSBbXG4gICAgT3BlcmF0b3JzLmFkZCxcbiAgICBPcGVyYXRvcnMuc3VidHJhY3QsXG4gICAgT3BlcmF0b3JzLm11bHRpcGx5LFxuICAgIE9wZXJhdG9ycy5kaXZpZGUsXG4gIF07XG4gIG9wZXJhdG9yc1N0cmluZzogT3BlcmF0b3JzW10gPSBbXG4gICAgT3BlcmF0b3JzLmNvbmNhdGVuYXRlU3BhY2UsXG4gICAgT3BlcmF0b3JzLmNvbmNhdGVuYXRlQ29tbWFTcGFjZSxcbiAgICBPcGVyYXRvcnMuY29uY2F0ZW5hdGVDb21tYSxcbiAgXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGV4cG9ydFNlcnZpY2U6IERhdGFFeHBvcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyXG4gICkge1xuICAgIHRoaXMubmV3R3JvdXBGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBuYW1lOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pbml0aWFsaXplR3JvdXBJdGVtcygpO1xuICAgIHRoaXMudXBkYXRlUHJvZmlsZXMoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUdyb3VwSXRlbXMoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgdmlzaWJsZVByb2ZpbGVzKCkge1xuICAgIHJldHVybiB0aGlzLnNob3dBbGxQcm9maWxlcyA/IHRoaXMucHJvZmlsZXMgOiB0aGlzLnByb2ZpbGVzLnNsaWNlKDAsIDMpO1xuICB9XG5cbiAgZ2V0IHZpc2libGVHcm91cHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0FsbEdyb3VwcyA/IHRoaXMuZ3JvdXBJdGVtcyA6IHRoaXMuZ3JvdXBJdGVtcy5zbGljZSgwLCAzKTtcbiAgfVxuXG4gIGluaXRpYWxpemVHcm91cEl0ZW1zKCkge1xuICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyh0aGlzLmRhdGFbMF0pLmZpbHRlcigoaykgPT4gayAhPT0gJ2lkJyk7XG4gICAgICB0aGlzLmV4cG9ydFNlcnZpY2Uuc2V0QmFzZVByb3BlcnRpZXMocHJvcGVydGllcyk7XG4gICAgICB0aGlzLm51bWVyaWNQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5maWx0ZXIoXG4gICAgICAgIChwcm9wKSA9PiB0eXBlb2YgdGhpcy5kYXRhWzBdW3Byb3BdID09PSAnbnVtYmVyJ1xuICAgICAgKTtcbiAgICAgIHRoaXMuc3RyaW5nUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZmlsdGVyKFxuICAgICAgICAocHJvcCkgPT4gdHlwZW9mIHRoaXMuZGF0YVswXVtwcm9wXSA9PT0gJ3N0cmluZydcbiAgICAgICk7XG4gICAgICB0aGlzLnVwZGF0ZUdyb3VwSXRlbXMoKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVQcm9maWxlcygpIHtcbiAgICB0aGlzLnByb2ZpbGVzID0gdGhpcy5leHBvcnRTZXJ2aWNlLmdldFByb2ZpbGVzKCkubWFwKChwcm9maWxlKSA9PiAoe1xuICAgICAgLi4ucHJvZmlsZSxcbiAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICB9KSk7XG4gIH1cblxuICB1cGRhdGVHcm91cEl0ZW1zKCkge1xuICAgIHRoaXMuZ3JvdXBJdGVtcyA9IHRoaXMuZXhwb3J0U2VydmljZS5nZXRBbGxJdGVtcygpLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgIC4uLml0ZW0sXG4gICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgfSkpO1xuICB9XG5cbiAgYWRkR3JvdXAoKSB7XG4gICAgY29uc29sZS5sb2coJ2luJyk7XG4gICAgaWYgKHRoaXMubmV3R3JvdXBGb3JtLnZhbGlkKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gdGhpcy5ncm91cEl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5zZWxlY3RlZCk7XG4gICAgICBpZiAoc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IG5ld1Byb2ZpbGU6IEV4cG9ydFByb2ZpbGUgPSB7XG4gICAgICAgICAgaWQ6IERhdGUubm93KCkudG9TdHJpbmcoKSxcbiAgICAgICAgICBuYW1lOiB0aGlzLm5ld0dyb3VwRm9ybS5nZXQoJ25hbWUnKT8udmFsdWUsXG4gICAgICAgICAgaXRlbXM6IHNlbGVjdGVkSXRlbXMsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZXhwb3J0U2VydmljZS5hZGRQcm9maWxlKG5ld1Byb2ZpbGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZVByb2ZpbGVzKCk7XG4gICAgICAgIHRoaXMuZ3JvdXBJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiAoaXRlbS5zZWxlY3RlZCA9IGZhbHNlKSk7XG4gICAgICAgIHRoaXMubmV3R3JvdXBGb3JtLnJlc2V0KCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdTRUxFQ1RFRCcpO1xuICAgICAgfVxuICAgICAgY29uc29sZS5sb2coJ1ZBTElEJyk7XG4gICAgfVxuICB9XG5cbiAgZWRpdFByb2ZpbGUocHJvZmlsZTogRXhwb3J0UHJvZmlsZSAmIHsgc2VsZWN0ZWQ6IGJvb2xlYW4gfSkge1xuICAgIHRoaXMuZ3JvdXBJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBpdGVtLnNlbGVjdGVkID0gcHJvZmlsZS5pdGVtcy5zb21lKFxuICAgICAgICAocHJvZmlsZUl0ZW0pID0+IHByb2ZpbGVJdGVtLmlkID09PSBpdGVtLmlkXG4gICAgICApO1xuICAgIH0pO1xuICAgIHRoaXMucmVtb3ZlUHJvZmlsZShwcm9maWxlKTtcbiAgfVxuXG4gIHJlbW92ZVByb2ZpbGUocHJvZmlsZTogRXhwb3J0UHJvZmlsZSAmIHsgc2VsZWN0ZWQ6IGJvb2xlYW4gfSkge1xuICAgIHRoaXMuZXhwb3J0U2VydmljZS5yZW1vdmVQcm9maWxlKHByb2ZpbGUuaWQpO1xuICAgIHRoaXMudXBkYXRlUHJvZmlsZXMoKTtcbiAgfVxuXG4gIGFkZE9yVXBkYXRlT3BlcmF0aW9uKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMubmV3T3BlcmF0aW9uLm5hbWUgJiZcbiAgICAgIHRoaXMubmV3T3BlcmF0aW9uLmZpZWxkMSAmJlxuICAgICAgdGhpcy5uZXdPcGVyYXRpb24uZmllbGQyXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5pc0VkaXRpbmdPcGVyYXRpb24pIHtcbiAgICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLnVwZGF0ZU9wZXJhdGlvbihcbiAgICAgICAgICB0aGlzLm5ld09wZXJhdGlvbi5pZCxcbiAgICAgICAgICB0aGlzLm5ld09wZXJhdGlvblxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgb3BlcmF0aW9uOiBPcGVyYXRpb24gPSB7XG4gICAgICAgICAgLi4udGhpcy5uZXdPcGVyYXRpb24sXG4gICAgICAgICAgaWQ6IERhdGUubm93KCkudG9TdHJpbmcoKSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLmFkZE9wZXJhdGlvbihvcGVyYXRpb24pO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVHcm91cEl0ZW1zKCk7XG4gICAgICB0aGlzLnJlc2V0T3BlcmF0aW9uRm9ybSgpO1xuICAgIH1cbiAgfVxuXG4gIGVkaXRPcGVyYXRpb24ob3BlcmF0aW9uOiBFeHBvcnRJdGVtICYgeyBzZWxlY3RlZDogYm9vbGVhbiB9KSB7XG4gICAgdGhpcy5uZXdPcGVyYXRpb24gPSB7IC4uLihvcGVyYXRpb24gYXMgdW5rbm93biBhcyBPcGVyYXRpb24pIH07XG4gICAgdGhpcy5pc0VkaXRpbmdPcGVyYXRpb24gPSB0cnVlO1xuICB9XG5cbiAgcmVtb3ZlT3BlcmF0aW9uKG9wZXJhdGlvbjogRXhwb3J0SXRlbSAmIHsgc2VsZWN0ZWQ6IGJvb2xlYW4gfSkge1xuICAgIHRoaXMuZXhwb3J0U2VydmljZS5yZW1vdmVPcGVyYXRpb24ob3BlcmF0aW9uLmlkKTtcbiAgICB0aGlzLnVwZGF0ZUdyb3VwSXRlbXMoKTtcbiAgfVxuXG4gIHJlc2V0T3BlcmF0aW9uRm9ybSgpIHtcbiAgICB0aGlzLm5ld09wZXJhdGlvbiA9IHtcbiAgICAgIGlkOiAnJyxcbiAgICAgIG5hbWU6ICcnLFxuICAgICAgZmllbGQxOiAnJyxcbiAgICAgIG9wZXJhdG9yOiBPcGVyYXRvcnMuYWRkLFxuICAgICAgZmllbGQyOiAnJyxcbiAgICB9O1xuICAgIHRoaXMuaXNFZGl0aW5nT3BlcmF0aW9uID0gZmFsc2U7XG4gIH1cblxuICByZXNldEFsbCgpIHtcbiAgICB0aGlzLmV4cG9ydFNlcnZpY2UucmVzZXRBbGwoKTtcbiAgICB0aGlzLmluaXRpYWxpemVHcm91cEl0ZW1zKCk7XG4gICAgdGhpcy51cGRhdGVQcm9maWxlcygpO1xuICAgIHRoaXMucmVzZXRPcGVyYXRpb25Gb3JtKCk7XG4gICAgdGhpcy5uZXdHcm91cEZvcm0ucmVzZXQoKTtcbiAgfVxuXG4gIGV4cG9ydERhdGEoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRQcm9maWxlcyA9IHRoaXMucHJvZmlsZXMuZmlsdGVyKFxuICAgICAgKHByb2ZpbGUpID0+IHByb2ZpbGUuc2VsZWN0ZWRcbiAgICApO1xuICAgIGlmIChzZWxlY3RlZFByb2ZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGV4cG9ydGVkRGF0YSA9IHRoaXMuZXhwb3J0U2VydmljZS5leHBvcnREYXRhKFxuICAgICAgICB0aGlzLmRhdGEsXG4gICAgICAgIHNlbGVjdGVkUHJvZmlsZXNcbiAgICAgICk7XG4gICAgICB0aGlzLmV4cG9ydERhdGFFdmVudC5lbWl0KGV4cG9ydGVkRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKCdObyBwcm9maWxlcyBzZWxlY3RlZCBmb3IgZXhwb3J0Jyk7XG4gICAgfVxuICB9XG5cbiAgb25GaWVsZDFDaGFuZ2UoKSB7XG4gICAgdGhpcy5uZXdPcGVyYXRpb24uZmllbGQyID0gJyc7XG4gICAgdGhpcy5uZXdPcGVyYXRpb24ub3BlcmF0b3IgPSB0aGlzLmlzTnVtZXJpY0ZpZWxkKHRoaXMubmV3T3BlcmF0aW9uLmZpZWxkMSlcbiAgICAgID8gT3BlcmF0b3JzLmFkZFxuICAgICAgOiBPcGVyYXRvcnMuY29uY2F0ZW5hdGVTcGFjZTtcbiAgfVxuXG4gIGlzTnVtZXJpY0ZpZWxkKGZpZWxkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5udW1lcmljUHJvcGVydGllcy5pbmNsdWRlcyhmaWVsZCk7XG4gIH1cblxuICBnZXQgYXZhaWxhYmxlT3BlcmF0b3JzKCk6IE9wZXJhdG9yc1tdIHtcbiAgICByZXR1cm4gdGhpcy5pc051bWVyaWNGaWVsZCh0aGlzLm5ld09wZXJhdGlvbi5maWVsZDEpXG4gICAgICA/IHRoaXMub3BlcmF0b3JzTnVtZXJpY1xuICAgICAgOiB0aGlzLm9wZXJhdG9yc1N0cmluZztcbiAgfVxuXG4gIGdldCBhdmFpbGFibGVGaWVsZHMyKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5pc051bWVyaWNGaWVsZCh0aGlzLm5ld09wZXJhdGlvbi5maWVsZDEpXG4gICAgICA/IHRoaXMubnVtZXJpY1Byb3BlcnRpZXNcbiAgICAgIDogdGhpcy5zdHJpbmdQcm9wZXJ0aWVzO1xuICB9XG5cbiAgdG9nZ2xlU2hvd0FsbFByb2ZpbGVzKCkge1xuICAgIHRoaXMuc2hvd0FsbFByb2ZpbGVzID0gIXRoaXMuc2hvd0FsbFByb2ZpbGVzO1xuICB9XG5cbiAgdG9nZ2xlU2hvd0FsbEdyb3VwcygpIHtcbiAgICB0aGlzLnNob3dBbGxHcm91cHMgPSAhdGhpcy5zaG93QWxsR3JvdXBzO1xuICB9XG59XG4iLCI8dmVyYmVuLWNhcmRcbiAgd2lkdGg9XCIyNHJlbVwiXG4gIGJvcmRlclJhZGl1cz1cIjFyZW1cIlxuICBbYm9yZGVyXT1cIicxcHggc29saWQgI0Q0QTAwNydcIlxuICBiZ0NvbG9yPVwiI0ZGRkZGRlwiXG4gIGNsYXNzPVwiZXhwb3J0LWNhcmRcIlxuPlxuICA8ZGl2IGNhcmQtaGVhZGVyIGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICA8aDQgY2xhc3M9XCJoZWFkZXItdGl0bGVcIj5FeHBvcnQ8L2g0PlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwicmVzZXQtYnV0dG9uXCJcbiAgICAgIFtzdHlsZS5jb2xvcl09XCInIzM0NzlFOSdcIlxuICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiJ3RyYW5zcGFyZW50J1wiXG4gICAgICBbc3R5bGUuYm9yZGVyXT1cIidub25lJ1wiXG4gICAgICBbc3R5bGUuY3Vyc29yXT1cIidwb2ludGVyJ1wiXG4gICAgICBbc3R5bGUuZm9udC1zaXplXT1cIicxMnB4J1wiXG4gICAgICAoY2xpY2spPVwicmVzZXRBbGwoKVwiXG4gICAgPlxuICAgICAgUmVzZXRcbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDxkaXYgY2FyZC1ib2R5IGNsYXNzPVwiY2FyZC1ib2R5XCI+XG4gICAgPHNlY3Rpb24gY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgPGgzIGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPlByb2ZpbGVzPC9oMz5cbiAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICBpY29uPVwiaW5mb1wiXG4gICAgICAgICAgW3dpZHRoXT1cIjE1XCJcbiAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICBmaWxsPVwiZ3JleVwiXG4gICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHByb2ZpbGUgb2YgdmlzaWJsZVByb2ZpbGVzOyBsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJpdGVtXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLWxhYmVsXCI+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgW2lkXT1cIidwcm9maWxlLScgKyBpXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwicHJvZmlsZS5zZWxlY3RlZFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8bGFiZWwgW2Zvcl09XCIncHJvZmlsZS0nICsgaVwiIGNsYXNzPVwiY2hlY2tib3gtbGFiZWxcIj5cbiAgICAgICAgICAgIHt7IHByb2ZpbGUubmFtZSB9fVxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1hY3Rpb25zXCI+XG4gICAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICAgIGljb249XCJlZGl0XCJcbiAgICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgIHN0cm9rZT1cIiMzNDc5RTlcIlxuICAgICAgICAgICAgZmlsbD1cIndoaXRlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJlZGl0UHJvZmlsZShwcm9maWxlKVwiXG4gICAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgaWNvbj1cImRlbGV0ZVwiXG4gICAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgICBzdHJva2U9XCIjRTIwMDAwXCJcbiAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVQcm9maWxlKHByb2ZpbGUpXCJcbiAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cInByb2ZpbGVzLmxlbmd0aCA+IDNcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2hvd0FsbFByb2ZpbGVzKClcIlxuICAgICAgICBjbGFzcz1cInNob3ctbW9yZVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuPnt7IHNob3dBbGxQcm9maWxlcyA/IFwiU2hvdyBsZXNzXCIgOiBcIlNob3cgbW9yZVwiIH19PC9zcGFuPlxuICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgIGljb249XCJjaGV2cm9uXCJcbiAgICAgICAgICBbd2lkdGhdPVwiOFwiXG4gICAgICAgICAgW2hlaWdodF09XCI2XCJcbiAgICAgICAgICBmaWxsPVwiYmxhY2tcIlxuICAgICAgICAgIHN0cm9rZT1cImJsYWNrXCJcbiAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgIDwvZGl2PlxuICAgIDwvc2VjdGlvbj5cbiAgICA8aHIgY2xhc3M9XCJkaXZpZGVyXCIgLz5cbiAgICA8c2VjdGlvbiBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+R3JvdXA8L2gzPlxuICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgIGljb249XCJpbmZvXCJcbiAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgIFtoZWlnaHRdPVwiMTVcIlxuICAgICAgICAgIGZpbGw9XCJncmV5XCJcbiAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJuZXdHcm91cEZvcm1cIiAobmdTdWJtaXQpPVwiYWRkR3JvdXAoKVwiPlxuICAgICAgICA8dmVyYmVuYS1pbnB1dFxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiR3JvdXAgbmFtZVwiXG4gICAgICAgICAgYm9yZGVyPVwiMXB4IHNvbGlkICNjY2NcIlxuICAgICAgICAgIGJvcmRlclJhZGl1cz1cIjVweFwiXG4gICAgICAgICAgdGV4dENvbG9yPVwiYmxhY2tcIlxuICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgZm9udFNpemU9XCIxMXB4XCJcbiAgICAgICAgICBoZWlnaHQ9XCIyMHB4XCJcbiAgICAgICAgICBwZD1cIjJweCA0cHggIWltcG9ydGFudFwiXG4gICAgICAgICAgYmdDb2xvcj1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICBbc2hvd0JvcmRlcl09XCJ0cnVlXCJcbiAgICAgICAgICBbc2hvd0Vycm9yTWVzc2FnZV09XCJ0cnVlXCJcbiAgICAgICAgICBbZXJyb3JQb3NpdGlvbl09XCInYm90dG9tJ1wiXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiXG4gICAgICAgID48L3ZlcmJlbmEtaW5wdXQ+XG4gICAgICA8L2Zvcm0+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIHZpc2libGVHcm91cHM7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cIml0ZW1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tbGFiZWxcIj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBbaWRdPVwiJ2dyb3VwLScgKyBpXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS5zZWxlY3RlZFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8bGFiZWwgW2Zvcl09XCInZ3JvdXAtJyArIGlcIiBjbGFzcz1cImNoZWNrYm94LWxhYmVsXCI+XG4gICAgICAgICAgICB7eyBpdGVtLm5hbWUgfX1cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tYWN0aW9uc1wiICpuZ0lmPVwiaXRlbS50eXBlID09PSAnb3BlcmF0aW9uJ1wiPlxuICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICBpY29uPVwiZWRpdFwiXG4gICAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgICBzdHJva2U9XCIjMzQ3OUU5XCJcbiAgICAgICAgICAgIGZpbGw9XCJ3aGl0ZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZWRpdE9wZXJhdGlvbihpdGVtKVwiXG4gICAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgaWNvbj1cImRlbGV0ZVwiXG4gICAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgICBzdHJva2U9XCIjRTIwMDAwXCJcbiAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVPcGVyYXRpb24oaXRlbSlcIlxuICAgICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwiZ3JvdXBJdGVtcy5sZW5ndGggPiAzXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2hvd0FsbEdyb3VwcygpXCJcbiAgICAgICAgICBjbGFzcz1cInNob3ctbW9yZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3Bhbj57eyBzaG93QWxsR3JvdXBzID8gXCJTaG93IGxlc3NcIiA6IFwiU2hvdyBtb3JlXCIgfX08L3NwYW4+XG4gICAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICAgIGljb249XCJjaGV2cm9uXCJcbiAgICAgICAgICAgIFt3aWR0aF09XCI4XCJcbiAgICAgICAgICAgIFtoZWlnaHRdPVwiNlwiXG4gICAgICAgICAgICBmaWxsPVwiYmxhY2tcIlxuICAgICAgICAgICAgc3Ryb2tlPVwiYmxhY2tcIlxuICAgICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWRkLWJ1dHRvblwiIChjbGljayk9XCJhZGRHcm91cCgpXCI+KyBBZGQ8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvc2VjdGlvbj5cbiAgICA8aHIgY2xhc3M9XCJkaXZpZGVyXCIgLz5cbiAgICA8c2VjdGlvbiBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+T3BlcmF0aW9uPC9oMz5cbiAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICBpY29uPVwiaW5mb1wiXG4gICAgICAgICAgW3dpZHRoXT1cIjE1XCJcbiAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICBmaWxsPVwiZ3JleVwiXG4gICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDx2ZXJiZW5hLWlucHV0XG4gICAgICAgIHBsYWNlaG9sZGVyPVwiT3BlcmF0aW9uIG5hbWVcIlxuICAgICAgICBib3JkZXI9XCIxcHggc29saWQgI2NjY1wiXG4gICAgICAgIGJvcmRlclJhZGl1cz1cIjVweFwiXG4gICAgICAgIHRleHRDb2xvcj1cImJsYWNrXCJcbiAgICAgICAgZm9udFNpemU9XCIxMXB4XCJcbiAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgaGVpZ2h0PVwiMjBweFwiXG4gICAgICAgIHBkPVwiMnB4IDZweFwiXG4gICAgICAgIGJnQ29sb3I9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgIFtzaG93Qm9yZGVyXT1cInRydWVcIlxuICAgICAgICBbc2hvd0Vycm9yTWVzc2FnZV09XCJ0cnVlXCJcbiAgICAgICAgW2Vycm9yUG9zaXRpb25dPVwiJ2JvdHRvbSdcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cIm5ld09wZXJhdGlvbi5uYW1lXCJcbiAgICAgID48L3ZlcmJlbmEtaW5wdXQ+XG4gICAgICA8ZGl2IGNsYXNzPVwib3BlcmF0aW9uLWdyaWRcIj5cbiAgICAgICAgPHZlcmJlbi1kcm9wLWRvd25cbiAgICAgICAgICB3aWR0aD1cIic4cmVtJ1wiXG4gICAgICAgICAgaGVpZ2h0PVwiJzEuMjVyZW0nXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBmaWVsZFwiXG4gICAgICAgICAgW29wdGlvbnNdPVwibnVtZXJpY1Byb3BlcnRpZXMuY29uY2F0KHN0cmluZ1Byb3BlcnRpZXMpXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cIm5ld09wZXJhdGlvbi5maWVsZDFcIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRmllbGQxQ2hhbmdlKClcIlxuICAgICAgICA+XG4gICAgICAgIDwvdmVyYmVuLWRyb3AtZG93bj5cbiAgICAgICAgPHZlcmJlbi1kcm9wLWRvd25cbiAgICAgICAgICB3aWR0aD1cIic4cmVtJ1wiXG4gICAgICAgICAgaGVpZ2h0PVwiJzEuMjVyZW0nXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBvcGVyYXRvclwiXG4gICAgICAgICAgW29wdGlvbnNdPVwiYXZhaWxhYmxlT3BlcmF0b3JzXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cIm5ld09wZXJhdGlvbi5vcGVyYXRvclwiXG4gICAgICAgID5cbiAgICAgICAgPC92ZXJiZW4tZHJvcC1kb3duPlxuICAgICAgICA8dmVyYmVuLWRyb3AtZG93blxuICAgICAgICAgIHdpZHRoPVwiJzhyZW0nXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBmaWVsZFwiXG4gICAgICAgICAgW29wdGlvbnNdPVwiYXZhaWxhYmxlRmllbGRzMlwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJuZXdPcGVyYXRpb24uZmllbGQyXCJcbiAgICAgICAgPlxuICAgICAgICA8L3ZlcmJlbi1kcm9wLWRvd24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJhZGQtYnV0dG9uIG1sLWF1dG9cIiAoY2xpY2spPVwiYWRkT3JVcGRhdGVPcGVyYXRpb24oKVwiPlxuICAgICAgICB7eyBpc0VkaXRpbmdPcGVyYXRpb24gPyBcIlVwZGF0ZVwiIDogXCIrIEFkZFwiIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L3NlY3Rpb24+XG5cbiAgICA8c2VjdGlvbiBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgIEBpZiAoZGF0YUZldGNoVXJsKCkpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+UmVjb3JkIFNpemU8L2gzPlxuICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9zZWN0aW9uPlxuICA8L2Rpdj5cbiAgPGRpdiBjYXJkLWZvb3RlciBjbGFzcz1cImNhcmQtZm9vdGVyXCI+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImV4cG9ydC1idXR0b25cIiAoY2xpY2spPVwiZXhwb3J0RGF0YSgpXCI+RXhwb3J0PC9idXR0b24+XG4gIDwvZGl2PlxuPC92ZXJiZW4tY2FyZD5cbiJdfQ==
209
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1leHBvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWV4cG9ydC9kYXRhLWV4cG9ydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtZXhwb3J0L2RhdGEtZXhwb3J0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsS0FBSyxFQUNMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXFDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRS9FLE9BQU8sRUFJTCxTQUFTLEdBRVYsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7O0FBUzdCLE1BQU0sT0FBTyxtQkFBbUI7SUFvQ3BCO0lBQ0E7SUFwQ0QsT0FBTyxDQUF1QjtJQUM5QixJQUFJLENBQVM7SUFDdEIsWUFBWSxHQUFHLEtBQUssRUFBVSxDQUFDO0lBQy9CLG1CQUFtQixHQUFHLEtBQUssRUFBeUIsQ0FBQztJQUMzQyxlQUFlLEdBQUcsSUFBSSxZQUFZLEVBQXlCLENBQUM7SUFFdEUsUUFBUSxHQUE4QyxFQUFFLENBQUM7SUFDekQsVUFBVSxHQUEyQyxFQUFFLENBQUM7SUFDeEQsWUFBWSxDQUFZO0lBQ3hCLFlBQVksR0FBYztRQUN4QixFQUFFLEVBQUUsRUFBRTtRQUNOLElBQUksRUFBRSxFQUFFO1FBQ1IsTUFBTSxFQUFFLEVBQUU7UUFDVixRQUFRLEVBQUUsU0FBUyxDQUFDLEdBQUc7UUFDdkIsTUFBTSxFQUFFLEVBQUU7S0FDWCxDQUFDO0lBQ0YsaUJBQWlCLEdBQWEsRUFBRSxDQUFDO0lBQ2pDLGdCQUFnQixHQUFhLEVBQUUsQ0FBQztJQUNoQyxrQkFBa0IsR0FBWSxLQUFLLENBQUM7SUFDcEMsZUFBZSxHQUFZLEtBQUssQ0FBQztJQUNqQyxhQUFhLEdBQVksS0FBSyxDQUFDO0lBRS9CLGdCQUFnQixHQUFnQjtRQUM5QixTQUFTLENBQUMsR0FBRztRQUNiLFNBQVMsQ0FBQyxRQUFRO1FBQ2xCLFNBQVMsQ0FBQyxRQUFRO1FBQ2xCLFNBQVMsQ0FBQyxNQUFNO0tBQ2pCLENBQUM7SUFDRixlQUFlLEdBQWdCO1FBQzdCLFNBQVMsQ0FBQyxnQkFBZ0I7UUFDMUIsU0FBUyxDQUFDLHFCQUFxQjtRQUMvQixTQUFTLENBQUMsZ0JBQWdCO0tBQzNCLENBQUM7SUFFRixZQUNVLGFBQWdDLEVBQ2hDLEVBQWU7UUFEZixrQkFBYSxHQUFiLGFBQWEsQ0FBbUI7UUFDaEMsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUV2QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ2hDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1NBQ2hDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM5QixDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdEMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7WUFDdkUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FDeEMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxRQUFRLENBQ2pELENBQUM7WUFDRixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FDdkMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxRQUFRLENBQ2pELENBQUM7WUFDRixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMxQixDQUFDO0lBQ0gsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2pFLEdBQUcsT0FBTztZQUNWLFFBQVEsRUFBRSxLQUFLO1NBQ2hCLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEUsR0FBRyxJQUFJO1lBQ1AsUUFBUSxFQUFFLEtBQUs7U0FDaEIsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsUUFBUTtRQUNOLHdCQUF3QjtRQUN4QixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDNUIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0RSxJQUFJLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sVUFBVSxHQUFrQjtvQkFDaEMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUU7b0JBQ3pCLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLO29CQUMxQyxLQUFLLEVBQUUsYUFBYTtpQkFDckIsQ0FBQztnQkFDRixJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQzNELElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzFCLDJCQUEyQjtZQUM3QixDQUFDO1lBQ0QsMkJBQTJCO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQThDO1FBQ3hELElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDaEMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FDNUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsYUFBYSxDQUFDLE9BQThDO1FBQzFELElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixJQUNFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSTtZQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU07WUFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQ3hCLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQ3BCLElBQUksQ0FBQyxZQUFZLENBQ2xCLENBQUM7WUFDSixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxTQUFTLEdBQWM7b0JBQzNCLEdBQUcsSUFBSSxDQUFDLFlBQVk7b0JBQ3BCLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFO2lCQUMxQixDQUFDO2dCQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzdDLENBQUM7WUFDRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxTQUE2QztRQUN6RCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsR0FBSSxTQUFrQyxFQUFFLENBQUM7UUFDL0QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztJQUNqQyxDQUFDO0lBRUQsZUFBZSxDQUFDLFNBQTZDO1FBQzNELElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxZQUFZLEdBQUc7WUFDbEIsRUFBRSxFQUFFLEVBQUU7WUFDTixJQUFJLEVBQUUsRUFBRTtZQUNSLE1BQU0sRUFBRSxFQUFFO1lBQ1YsUUFBUSxFQUFFLFNBQVMsQ0FBQyxHQUFHO1lBQ3ZCLE1BQU0sRUFBRSxFQUFFO1NBQ1gsQ0FBQztRQUNGLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7SUFDbEMsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxVQUFVO1FBQ1IsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FDM0MsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQzlCLENBQUM7UUFDRixJQUFJLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FDaEQsSUFBSSxDQUFDLElBQUksRUFDVCxnQkFBZ0IsQ0FDakIsQ0FBQztZQUNGLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzFDLENBQUM7YUFBTSxDQUFDO1lBQ04sbURBQW1EO1FBQ3JELENBQUM7SUFDSCxDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO1lBQ3hFLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRztZQUNmLENBQUMsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUM7SUFDakMsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFhO1FBQzFCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsSUFBSSxrQkFBa0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO1lBQ2xELENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCO1lBQ3ZCLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7WUFDbEQsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUI7WUFDeEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUM1QixDQUFDO0lBRUQscUJBQXFCO1FBQ25CLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQy9DLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDM0MsQ0FBQzt3R0E3TlUsbUJBQW1COzRGQUFuQixtQkFBbUIsNnFCQ3pCaEMsMnBOQTZOQTs7NEZEcE1hLG1CQUFtQjtrQkFOL0IsU0FBUzsrQkFDRSxpQkFBaUIsbUJBR1YsdUJBQXVCLENBQUMsTUFBTTtnSEFHdEMsT0FBTztzQkFBZixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFHSSxlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBpbnB1dCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEYXRhRXhwb3J0U2VydmljZSB9IGZyb20gJy4vZGF0YS1leHBvcnQuc2VydmljZSc7XG5pbXBvcnQge1xuICBFeHBvcnRJdGVtLFxuICBFeHBvcnRQcm9maWxlLFxuICBPcGVyYXRpb24sXG4gIE9wZXJhdG9ycyxcbiAgU2VhcmNoUHJvcGVydHlWYWx1ZSxcbn0gZnJvbSAnLi9kYXRhLWV4cG9ydC50eXBlcyc7XG5pbXBvcnQgeyBDb2x1bW5EZWZpbml0aW9uIH0gZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLXRhYmxlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWRhdGEtZXhwb3J0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtZXhwb3J0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2RhdGEtZXhwb3J0LmNvbXBvbmVudC5jc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRGF0YUV4cG9ydENvbXBvbmVudDxUIGV4dGVuZHMgeyBpZDogc3RyaW5nIHwgbnVtYmVyIH0+IHtcbiAgQElucHV0KCkgY29sdW1ucyE6IENvbHVtbkRlZmluaXRpb248VD47XG4gIEBJbnB1dCgpIGRhdGEhOiBhbnlbXTtcbiAgZGF0YUZldGNoVXJsID0gaW5wdXQ8c3RyaW5nPigpO1xuICBkYXRhUXVlcnlQYXJhbWV0ZXJzID0gaW5wdXQ8U2VhcmNoUHJvcGVydHlWYWx1ZVtdPigpO1xuICBAT3V0cHV0KCkgZXhwb3J0RGF0YUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ8c3RyaW5nLCBhbnk+W10+KCk7XG5cbiAgcHJvZmlsZXM6IChFeHBvcnRQcm9maWxlICYgeyBzZWxlY3RlZDogYm9vbGVhbiB9KVtdID0gW107XG4gIGdyb3VwSXRlbXM6IChFeHBvcnRJdGVtICYgeyBzZWxlY3RlZDogYm9vbGVhbiB9KVtdID0gW107XG4gIG5ld0dyb3VwRm9ybTogRm9ybUdyb3VwO1xuICBuZXdPcGVyYXRpb246IE9wZXJhdGlvbiA9IHtcbiAgICBpZDogJycsXG4gICAgbmFtZTogJycsXG4gICAgZmllbGQxOiAnJyxcbiAgICBvcGVyYXRvcjogT3BlcmF0b3JzLmFkZCxcbiAgICBmaWVsZDI6ICcnLFxuICB9O1xuICBudW1lcmljUHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcbiAgc3RyaW5nUHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcbiAgaXNFZGl0aW5nT3BlcmF0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dBbGxQcm9maWxlczogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93QWxsR3JvdXBzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgb3BlcmF0b3JzTnVtZXJpYzogT3BlcmF0b3JzW10gPSBbXG4gICAgT3BlcmF0b3JzLmFkZCxcbiAgICBPcGVyYXRvcnMuc3VidHJhY3QsXG4gICAgT3BlcmF0b3JzLm11bHRpcGx5LFxuICAgIE9wZXJhdG9ycy5kaXZpZGUsXG4gIF07XG4gIG9wZXJhdG9yc1N0cmluZzogT3BlcmF0b3JzW10gPSBbXG4gICAgT3BlcmF0b3JzLmNvbmNhdGVuYXRlU3BhY2UsXG4gICAgT3BlcmF0b3JzLmNvbmNhdGVuYXRlQ29tbWFTcGFjZSxcbiAgICBPcGVyYXRvcnMuY29uY2F0ZW5hdGVDb21tYSxcbiAgXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGV4cG9ydFNlcnZpY2U6IERhdGFFeHBvcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICApIHtcbiAgICB0aGlzLm5ld0dyb3VwRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgbmFtZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaW5pdGlhbGl6ZUdyb3VwSXRlbXMoKTtcbiAgICB0aGlzLnVwZGF0ZVByb2ZpbGVzKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVHcm91cEl0ZW1zKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHZpc2libGVQcm9maWxlcygpIHtcbiAgICByZXR1cm4gdGhpcy5zaG93QWxsUHJvZmlsZXMgPyB0aGlzLnByb2ZpbGVzIDogdGhpcy5wcm9maWxlcy5zbGljZSgwLCAzKTtcbiAgfVxuXG4gIGdldCB2aXNpYmxlR3JvdXBzKCkge1xuICAgIHJldHVybiB0aGlzLnNob3dBbGxHcm91cHMgPyB0aGlzLmdyb3VwSXRlbXMgOiB0aGlzLmdyb3VwSXRlbXMuc2xpY2UoMCwgMyk7XG4gIH1cblxuICBpbml0aWFsaXplR3JvdXBJdGVtcygpIHtcbiAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXModGhpcy5kYXRhWzBdKS5maWx0ZXIoKGspID0+IGsgIT09ICdpZCcpO1xuICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLnNldEJhc2VQcm9wZXJ0aWVzKHByb3BlcnRpZXMpO1xuICAgICAgdGhpcy5udW1lcmljUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZmlsdGVyKFxuICAgICAgICAocHJvcCkgPT4gdHlwZW9mIHRoaXMuZGF0YVswXVtwcm9wXSA9PT0gJ251bWJlcicsXG4gICAgICApO1xuICAgICAgdGhpcy5zdHJpbmdQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5maWx0ZXIoXG4gICAgICAgIChwcm9wKSA9PiB0eXBlb2YgdGhpcy5kYXRhWzBdW3Byb3BdID09PSAnc3RyaW5nJyxcbiAgICAgICk7XG4gICAgICB0aGlzLnVwZGF0ZUdyb3VwSXRlbXMoKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVQcm9maWxlcygpIHtcbiAgICB0aGlzLnByb2ZpbGVzID0gdGhpcy5leHBvcnRTZXJ2aWNlLmdldFByb2ZpbGVzKCkubWFwKChwcm9maWxlKSA9PiAoe1xuICAgICAgLi4ucHJvZmlsZSxcbiAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICB9KSk7XG4gIH1cblxuICB1cGRhdGVHcm91cEl0ZW1zKCkge1xuICAgIHRoaXMuZ3JvdXBJdGVtcyA9IHRoaXMuZXhwb3J0U2VydmljZS5nZXRBbGxJdGVtcygpLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgIC4uLml0ZW0sXG4gICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgfSkpO1xuICB9XG5cbiAgYWRkR3JvdXAoKSB7XG4gICAgLy8gICAgY29uc29sZS5sb2coJ2luJyk7XG4gICAgaWYgKHRoaXMubmV3R3JvdXBGb3JtLnZhbGlkKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gdGhpcy5ncm91cEl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5zZWxlY3RlZCk7XG4gICAgICBpZiAoc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IG5ld1Byb2ZpbGU6IEV4cG9ydFByb2ZpbGUgPSB7XG4gICAgICAgICAgaWQ6IERhdGUubm93KCkudG9TdHJpbmcoKSxcbiAgICAgICAgICBuYW1lOiB0aGlzLm5ld0dyb3VwRm9ybS5nZXQoJ25hbWUnKT8udmFsdWUsXG4gICAgICAgICAgaXRlbXM6IHNlbGVjdGVkSXRlbXMsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZXhwb3J0U2VydmljZS5hZGRQcm9maWxlKG5ld1Byb2ZpbGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZVByb2ZpbGVzKCk7XG4gICAgICAgIHRoaXMuZ3JvdXBJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiAoaXRlbS5zZWxlY3RlZCA9IGZhbHNlKSk7XG4gICAgICAgIHRoaXMubmV3R3JvdXBGb3JtLnJlc2V0KCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdTRUxFQ1RFRCcpO1xuICAgICAgfVxuICAgICAgLy8gICAgY29uc29sZS5sb2coJ1ZBTElEJyk7XG4gICAgfVxuICB9XG5cbiAgZWRpdFByb2ZpbGUocHJvZmlsZTogRXhwb3J0UHJvZmlsZSAmIHsgc2VsZWN0ZWQ6IGJvb2xlYW4gfSkge1xuICAgIHRoaXMuZ3JvdXBJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBpdGVtLnNlbGVjdGVkID0gcHJvZmlsZS5pdGVtcy5zb21lKFxuICAgICAgICAocHJvZmlsZUl0ZW0pID0+IHByb2ZpbGVJdGVtLmlkID09PSBpdGVtLmlkLFxuICAgICAgKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlbW92ZVByb2ZpbGUocHJvZmlsZSk7XG4gIH1cblxuICByZW1vdmVQcm9maWxlKHByb2ZpbGU6IEV4cG9ydFByb2ZpbGUgJiB7IHNlbGVjdGVkOiBib29sZWFuIH0pIHtcbiAgICB0aGlzLmV4cG9ydFNlcnZpY2UucmVtb3ZlUHJvZmlsZShwcm9maWxlLmlkKTtcbiAgICB0aGlzLnVwZGF0ZVByb2ZpbGVzKCk7XG4gIH1cblxuICBhZGRPclVwZGF0ZU9wZXJhdGlvbigpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLm5ld09wZXJhdGlvbi5uYW1lICYmXG4gICAgICB0aGlzLm5ld09wZXJhdGlvbi5maWVsZDEgJiZcbiAgICAgIHRoaXMubmV3T3BlcmF0aW9uLmZpZWxkMlxuICAgICkge1xuICAgICAgaWYgKHRoaXMuaXNFZGl0aW5nT3BlcmF0aW9uKSB7XG4gICAgICAgIHRoaXMuZXhwb3J0U2VydmljZS51cGRhdGVPcGVyYXRpb24oXG4gICAgICAgICAgdGhpcy5uZXdPcGVyYXRpb24uaWQsXG4gICAgICAgICAgdGhpcy5uZXdPcGVyYXRpb24sXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBvcGVyYXRpb246IE9wZXJhdGlvbiA9IHtcbiAgICAgICAgICAuLi50aGlzLm5ld09wZXJhdGlvbixcbiAgICAgICAgICBpZDogRGF0ZS5ub3coKS50b1N0cmluZygpLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmV4cG9ydFNlcnZpY2UuYWRkT3BlcmF0aW9uKG9wZXJhdGlvbik7XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZUdyb3VwSXRlbXMoKTtcbiAgICAgIHRoaXMucmVzZXRPcGVyYXRpb25Gb3JtKCk7XG4gICAgfVxuICB9XG5cbiAgZWRpdE9wZXJhdGlvbihvcGVyYXRpb246IEV4cG9ydEl0ZW0gJiB7IHNlbGVjdGVkOiBib29sZWFuIH0pIHtcbiAgICB0aGlzLm5ld09wZXJhdGlvbiA9IHsgLi4uKG9wZXJhdGlvbiBhcyB1bmtub3duIGFzIE9wZXJhdGlvbikgfTtcbiAgICB0aGlzLmlzRWRpdGluZ09wZXJhdGlvbiA9IHRydWU7XG4gIH1cblxuICByZW1vdmVPcGVyYXRpb24ob3BlcmF0aW9uOiBFeHBvcnRJdGVtICYgeyBzZWxlY3RlZDogYm9vbGVhbiB9KSB7XG4gICAgdGhpcy5leHBvcnRTZXJ2aWNlLnJlbW92ZU9wZXJhdGlvbihvcGVyYXRpb24uaWQpO1xuICAgIHRoaXMudXBkYXRlR3JvdXBJdGVtcygpO1xuICB9XG5cbiAgcmVzZXRPcGVyYXRpb25Gb3JtKCkge1xuICAgIHRoaXMubmV3T3BlcmF0aW9uID0ge1xuICAgICAgaWQ6ICcnLFxuICAgICAgbmFtZTogJycsXG4gICAgICBmaWVsZDE6ICcnLFxuICAgICAgb3BlcmF0b3I6IE9wZXJhdG9ycy5hZGQsXG4gICAgICBmaWVsZDI6ICcnLFxuICAgIH07XG4gICAgdGhpcy5pc0VkaXRpbmdPcGVyYXRpb24gPSBmYWxzZTtcbiAgfVxuXG4gIHJlc2V0QWxsKCkge1xuICAgIHRoaXMuZXhwb3J0U2VydmljZS5yZXNldEFsbCgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZUdyb3VwSXRlbXMoKTtcbiAgICB0aGlzLnVwZGF0ZVByb2ZpbGVzKCk7XG4gICAgdGhpcy5yZXNldE9wZXJhdGlvbkZvcm0oKTtcbiAgICB0aGlzLm5ld0dyb3VwRm9ybS5yZXNldCgpO1xuICB9XG5cbiAgZXhwb3J0RGF0YSgpIHtcbiAgICBjb25zdCBzZWxlY3RlZFByb2ZpbGVzID0gdGhpcy5wcm9maWxlcy5maWx0ZXIoXG4gICAgICAocHJvZmlsZSkgPT4gcHJvZmlsZS5zZWxlY3RlZCxcbiAgICApO1xuICAgIGlmIChzZWxlY3RlZFByb2ZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGV4cG9ydGVkRGF0YSA9IHRoaXMuZXhwb3J0U2VydmljZS5leHBvcnREYXRhKFxuICAgICAgICB0aGlzLmRhdGEsXG4gICAgICAgIHNlbGVjdGVkUHJvZmlsZXMsXG4gICAgICApO1xuICAgICAgdGhpcy5leHBvcnREYXRhRXZlbnQuZW1pdChleHBvcnRlZERhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyAgY29uc29sZS5sb2coJ05vIHByb2ZpbGVzIHNlbGVjdGVkIGZvciBleHBvcnQnKTtcbiAgICB9XG4gIH1cblxuICBvbkZpZWxkMUNoYW5nZSgpIHtcbiAgICB0aGlzLm5ld09wZXJhdGlvbi5maWVsZDIgPSAnJztcbiAgICB0aGlzLm5ld09wZXJhdGlvbi5vcGVyYXRvciA9IHRoaXMuaXNOdW1lcmljRmllbGQodGhpcy5uZXdPcGVyYXRpb24uZmllbGQxKVxuICAgICAgPyBPcGVyYXRvcnMuYWRkXG4gICAgICA6IE9wZXJhdG9ycy5jb25jYXRlbmF0ZVNwYWNlO1xuICB9XG5cbiAgaXNOdW1lcmljRmllbGQoZmllbGQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm51bWVyaWNQcm9wZXJ0aWVzLmluY2x1ZGVzKGZpZWxkKTtcbiAgfVxuXG4gIGdldCBhdmFpbGFibGVPcGVyYXRvcnMoKTogT3BlcmF0b3JzW10ge1xuICAgIHJldHVybiB0aGlzLmlzTnVtZXJpY0ZpZWxkKHRoaXMubmV3T3BlcmF0aW9uLmZpZWxkMSlcbiAgICAgID8gdGhpcy5vcGVyYXRvcnNOdW1lcmljXG4gICAgICA6IHRoaXMub3BlcmF0b3JzU3RyaW5nO1xuICB9XG5cbiAgZ2V0IGF2YWlsYWJsZUZpZWxkczIoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmlzTnVtZXJpY0ZpZWxkKHRoaXMubmV3T3BlcmF0aW9uLmZpZWxkMSlcbiAgICAgID8gdGhpcy5udW1lcmljUHJvcGVydGllc1xuICAgICAgOiB0aGlzLnN0cmluZ1Byb3BlcnRpZXM7XG4gIH1cblxuICB0b2dnbGVTaG93QWxsUHJvZmlsZXMoKSB7XG4gICAgdGhpcy5zaG93QWxsUHJvZmlsZXMgPSAhdGhpcy5zaG93QWxsUHJvZmlsZXM7XG4gIH1cblxuICB0b2dnbGVTaG93QWxsR3JvdXBzKCkge1xuICAgIHRoaXMuc2hvd0FsbEdyb3VwcyA9ICF0aGlzLnNob3dBbGxHcm91cHM7XG4gIH1cbn1cbiIsIjx2ZXJiZW4tY2FyZFxuICB3aWR0aD1cIjI0cmVtXCJcbiAgYm9yZGVyUmFkaXVzPVwiMXJlbVwiXG4gIFtib3JkZXJdPVwiJzFweCBzb2xpZCAjRDRBMDA3J1wiXG4gIGJnQ29sb3I9XCIjRkZGRkZGXCJcbiAgY2xhc3M9XCJleHBvcnQtY2FyZFwiXG4+XG4gIDxkaXYgY2FyZC1oZWFkZXIgY2xhc3M9XCJjYXJkLWhlYWRlclwiPlxuICAgIDxoNCBjbGFzcz1cImhlYWRlci10aXRsZVwiPkV4cG9ydDwvaDQ+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJyZXNldC1idXR0b25cIlxuICAgICAgW3N0eWxlLmNvbG9yXT1cIicjMzQ3OUU5J1wiXG4gICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCIndHJhbnNwYXJlbnQnXCJcbiAgICAgIFtzdHlsZS5ib3JkZXJdPVwiJ25vbmUnXCJcbiAgICAgIFtzdHlsZS5jdXJzb3JdPVwiJ3BvaW50ZXInXCJcbiAgICAgIFtzdHlsZS5mb250LXNpemVdPVwiJzEycHgnXCJcbiAgICAgIChjbGljayk9XCJyZXNldEFsbCgpXCJcbiAgICA+XG4gICAgICBSZXNldFxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPGRpdiBjYXJkLWJvZHkgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICA8c2VjdGlvbiBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+UHJvZmlsZXM8L2gzPlxuICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgIGljb249XCJpbmZvXCJcbiAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgIFtoZWlnaHRdPVwiMTVcIlxuICAgICAgICAgIGZpbGw9XCJncmV5XCJcbiAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcHJvZmlsZSBvZiB2aXNpYmxlUHJvZmlsZXM7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cIml0ZW1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tbGFiZWxcIj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBbaWRdPVwiJ3Byb2ZpbGUtJyArIGlcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJwcm9maWxlLnNlbGVjdGVkXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxsYWJlbCBbZm9yXT1cIidwcm9maWxlLScgKyBpXCIgY2xhc3M9XCJjaGVja2JveC1sYWJlbFwiPlxuICAgICAgICAgICAge3sgcHJvZmlsZS5uYW1lIH19XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLWFjdGlvbnNcIj5cbiAgICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgaWNvbj1cImVkaXRcIlxuICAgICAgICAgICAgW3dpZHRoXT1cIjE1XCJcbiAgICAgICAgICAgIFtoZWlnaHRdPVwiMTVcIlxuICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NzlFOVwiXG4gICAgICAgICAgICBmaWxsPVwid2hpdGVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRQcm9maWxlKHByb2ZpbGUpXCJcbiAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICBpY29uPVwiZGVsZXRlXCJcbiAgICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgIHN0cm9rZT1cIiNFMjAwMDBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZVByb2ZpbGUocHJvZmlsZSlcIlxuICAgICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwicHJvZmlsZXMubGVuZ3RoID4gM1wiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVTaG93QWxsUHJvZmlsZXMoKVwiXG4gICAgICAgIGNsYXNzPVwic2hvdy1tb3JlXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4+e3sgc2hvd0FsbFByb2ZpbGVzID8gXCJTaG93IGxlc3NcIiA6IFwiU2hvdyBtb3JlXCIgfX08L3NwYW4+XG4gICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgaWNvbj1cImNoZXZyb25cIlxuICAgICAgICAgIFt3aWR0aF09XCI4XCJcbiAgICAgICAgICBbaGVpZ2h0XT1cIjZcIlxuICAgICAgICAgIGZpbGw9XCJibGFja1wiXG4gICAgICAgICAgc3Ryb2tlPVwiYmxhY2tcIlxuICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgPC9zZWN0aW9uPlxuICAgIDxociBjbGFzcz1cImRpdmlkZXJcIiAvPlxuICAgIDxzZWN0aW9uIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj5Hcm91cDwvaDM+XG4gICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgaWNvbj1cImluZm9cIlxuICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgZmlsbD1cImdyZXlcIlxuICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cIm5ld0dyb3VwRm9ybVwiIChuZ1N1Ym1pdCk9XCJhZGRHcm91cCgpXCI+XG4gICAgICAgIDx2ZXJiZW5hLWlucHV0XG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJHcm91cCBuYW1lXCJcbiAgICAgICAgICBib3JkZXI9XCIxcHggc29saWQgI2NjY1wiXG4gICAgICAgICAgYm9yZGVyUmFkaXVzPVwiNXB4XCJcbiAgICAgICAgICB0ZXh0Q29sb3I9XCJibGFja1wiXG4gICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICBmb250U2l6ZT1cIjExcHhcIlxuICAgICAgICAgIGhlaWdodD1cIjIwcHhcIlxuICAgICAgICAgIHBkPVwiMnB4IDRweCAhaW1wb3J0YW50XCJcbiAgICAgICAgICBiZ0NvbG9yPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgIFtzaG93Qm9yZGVyXT1cInRydWVcIlxuICAgICAgICAgIFtzaG93RXJyb3JNZXNzYWdlXT1cInRydWVcIlxuICAgICAgICAgIFtlcnJvclBvc2l0aW9uXT1cIidib3R0b20nXCJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCJcbiAgICAgICAgPjwvdmVyYmVuYS1pbnB1dD5cbiAgICAgIDwvZm9ybT5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgdmlzaWJsZUdyb3VwczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwiaXRlbVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1sYWJlbFwiPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgIFtpZF09XCInZ3JvdXAtJyArIGlcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpdGVtLnNlbGVjdGVkXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxsYWJlbCBbZm9yXT1cIidncm91cC0nICsgaVwiIGNsYXNzPVwiY2hlY2tib3gtbGFiZWxcIj5cbiAgICAgICAgICAgIHt7IGl0ZW0ubmFtZSB9fVxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1hY3Rpb25zXCIgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdvcGVyYXRpb24nXCI+XG4gICAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICAgIGljb249XCJlZGl0XCJcbiAgICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgIHN0cm9rZT1cIiMzNDc5RTlcIlxuICAgICAgICAgICAgZmlsbD1cIndoaXRlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJlZGl0T3BlcmF0aW9uKGl0ZW0pXCJcbiAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICBpY29uPVwiZGVsZXRlXCJcbiAgICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgIHN0cm9rZT1cIiNFMjAwMDBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZU9wZXJhdGlvbihpdGVtKVwiXG4gICAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCJncm91cEl0ZW1zLmxlbmd0aCA+IDNcIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTaG93QWxsR3JvdXBzKClcIlxuICAgICAgICAgIGNsYXNzPVwic2hvdy1tb3JlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuPnt7IHNob3dBbGxHcm91cHMgPyBcIlNob3cgbGVzc1wiIDogXCJTaG93IG1vcmVcIiB9fTwvc3Bhbj5cbiAgICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgaWNvbj1cImNoZXZyb25cIlxuICAgICAgICAgICAgW3dpZHRoXT1cIjhcIlxuICAgICAgICAgICAgW2hlaWdodF09XCI2XCJcbiAgICAgICAgICAgIGZpbGw9XCJibGFja1wiXG4gICAgICAgICAgICBzdHJva2U9XCJibGFja1wiXG4gICAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhZGQtYnV0dG9uXCIgKGNsaWNrKT1cImFkZEdyb3VwKClcIj4rIEFkZDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9zZWN0aW9uPlxuICAgIDxociBjbGFzcz1cImRpdmlkZXJcIiAvPlxuICAgIDxzZWN0aW9uIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj5PcGVyYXRpb248L2gzPlxuICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgIGljb249XCJpbmZvXCJcbiAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgIFtoZWlnaHRdPVwiMTVcIlxuICAgICAgICAgIGZpbGw9XCJncmV5XCJcbiAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgIDwvZGl2PlxuICAgICAgPHZlcmJlbmEtaW5wdXRcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJPcGVyYXRpb24gbmFtZVwiXG4gICAgICAgIGJvcmRlcj1cIjFweCBzb2xpZCAjY2NjXCJcbiAgICAgICAgYm9yZGVyUmFkaXVzPVwiNXB4XCJcbiAgICAgICAgdGV4dENvbG9yPVwiYmxhY2tcIlxuICAgICAgICBmb250U2l6ZT1cIjExcHhcIlxuICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICBoZWlnaHQ9XCIyMHB4XCJcbiAgICAgICAgcGQ9XCIycHggNnB4XCJcbiAgICAgICAgYmdDb2xvcj1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgW3Nob3dCb3JkZXJdPVwidHJ1ZVwiXG4gICAgICAgIFtzaG93RXJyb3JNZXNzYWdlXT1cInRydWVcIlxuICAgICAgICBbZXJyb3JQb3NpdGlvbl09XCInYm90dG9tJ1wiXG4gICAgICAgIFsobmdNb2RlbCldPVwibmV3T3BlcmF0aW9uLm5hbWVcIlxuICAgICAgPjwvdmVyYmVuYS1pbnB1dD5cbiAgICAgIDxkaXYgY2xhc3M9XCJvcGVyYXRpb24tZ3JpZFwiPlxuICAgICAgICA8dmVyYmVuLWRyb3AtZG93blxuICAgICAgICAgIHdpZHRoPVwiJzhyZW0nXCJcbiAgICAgICAgICBoZWlnaHQ9XCInMS4yNXJlbSdcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGZpZWxkXCJcbiAgICAgICAgICBbb3B0aW9uc109XCJudW1lcmljUHJvcGVydGllcy5jb25jYXQoc3RyaW5nUHJvcGVydGllcylcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwibmV3T3BlcmF0aW9uLmZpZWxkMVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25GaWVsZDFDaGFuZ2UoKVwiXG4gICAgICAgID5cbiAgICAgICAgPC92ZXJiZW4tZHJvcC1kb3duPlxuICAgICAgICA8dmVyYmVuLWRyb3AtZG93blxuICAgICAgICAgIHdpZHRoPVwiJzhyZW0nXCJcbiAgICAgICAgICBoZWlnaHQ9XCInMS4yNXJlbSdcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IG9wZXJhdG9yXCJcbiAgICAgICAgICBbb3B0aW9uc109XCJhdmFpbGFibGVPcGVyYXRvcnNcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwibmV3T3BlcmF0aW9uLm9wZXJhdG9yXCJcbiAgICAgICAgPlxuICAgICAgICA8L3ZlcmJlbi1kcm9wLWRvd24+XG4gICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgICAgd2lkdGg9XCInOHJlbSdcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGZpZWxkXCJcbiAgICAgICAgICBbb3B0aW9uc109XCJhdmFpbGFibGVGaWVsZHMyXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cIm5ld09wZXJhdGlvbi5maWVsZDJcIlxuICAgICAgICA+XG4gICAgICAgIDwvdmVyYmVuLWRyb3AtZG93bj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImFkZC1idXR0b24gbWwtYXV0b1wiIChjbGljayk9XCJhZGRPclVwZGF0ZU9wZXJhdGlvbigpXCI+XG4gICAgICAgIHt7IGlzRWRpdGluZ09wZXJhdGlvbiA/IFwiVXBkYXRlXCIgOiBcIisgQWRkXCIgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvc2VjdGlvbj5cblxuICAgIDxzZWN0aW9uIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgQGlmIChkYXRhRmV0Y2hVcmwoKSkge1xuICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj5SZWNvcmQgU2l6ZTwvaDM+XG4gICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L3NlY3Rpb24+XG4gIDwvZGl2PlxuICA8ZGl2IGNhcmQtZm9vdGVyIGNsYXNzPVwiY2FyZC1mb290ZXJcIj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiZXhwb3J0LWJ1dHRvblwiIChjbGljayk9XCJleHBvcnREYXRhKClcIj5FeHBvcnQ8L2J1dHRvbj5cbiAgPC9kaXY+XG48L3ZlcmJlbi1jYXJkPlxuIl19
@@ -105,7 +105,7 @@ export class DataExtendComponent {
105
105
  this.selectedItem = item;
106
106
  }
107
107
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DataExtendComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
108
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.10", type: DataExtendComponent, selector: "lib-data-extend", inputs: { properties: { classPropertyName: "properties", publicName: "properties", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { extendDataEvent: "extendDataEvent" }, ngImport: i0, template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid #D4A007'\"\n bgColor=\"#FFFFFF\"\n class=\"export-card\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">Expand</h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'#3479E9'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"reset()\"\n >\n Reset\n </button>\n </div>\n <div card-body class=\"card-body\">\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Entity</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n ></verben-svg>\n </div>\n <div *ngFor=\"let item of visibleItems(); let i = index\" class=\"item\">\n <div class=\"item-label\">\n <!-- <input\n type=\"checkbox\"\n [id]=\"'item-' + i\"\n [(ngModel)]=\"item.selected\"\n /> -->\n <label [for]=\"'item-' + i\" class=\"checkbox-label\">\n {{ item.Name }}\n </label>\n </div>\n <div class=\"item-actions\">\n <verben-svg\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#3479E9\"\n fill=\"white\"\n (click)=\"editItem(i)\"\n ></verben-svg>\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#E20000\"\n (click)=\"removeItem(i)\"\n ></verben-svg>\n </div>\n </div>\n <div\n *ngIf=\"items().length > 3\"\n (click)=\"toggleShowAll()\"\n class=\"show-more\"\n >\n <span>{{ showAll() ? \"Show less\" : \"Show more\" }}</span>\n <verben-svg\n icon=\"chevron\"\n [width]=\"8\"\n [height]=\"6\"\n fill=\"black\"\n stroke=\"black\"\n ></verben-svg>\n </div>\n </section>\n <hr class=\"divider\" />\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Properties</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n ></verben-svg>\n </div>\n <form [formGroup]=\"form\" (ngSubmit)=\"addItem()\">\n <div class=\"\">\n <p class=\"\">Name</p>\n <verbena-input\n placeholder=\"Enter property name\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"100%\"\n fontSize=\"11px\"\n height=\"20px\"\n pd=\"2px 4px !important\"\n bgColor=\"transparent\"\n [showBorder]=\"true\"\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n formControlName=\"Name\"\n ></verbena-input>\n </div>\n\n <div>\n <label for=\"DataType\">Data Type</label>\n <verben-drop-down\n id=\"DataType\"\n width=\"'100%'\"\n height=\"'1.25rem'\"\n placeholder=\"Select type\"\n [options]=\"dataTypes\"\n formControlName=\"DataType\"\n >\n </verben-drop-down>\n </div>\n\n <div>\n <label htmlFor=\"Options\" class=\"mb-2\">Enter Options</label>\n <verben-chip\n label=\"Options\"\n id=\"Options\"\n [placeholder]=\"'Enter Options'\"\n formControlName=\"Options\"\n ></verben-chip>\n </div>\n\n <div>\n <label for=\"DefaultValue\">Default Value</label>\n\n <verbena-input\n [placeHolder]=\"'Enter default text'\"\n formControlName=\"DefaultValue\"\n id=\"DefaultValue\"\n label=\"Default Value (optional)\"\n />\n </div>\n\n <div>\n <p class=\"mb-2\">Required</p>\n\n <verbena-switch\n label=\"Required\"\n [onColor]=\"'#1A237E'\"\n formControlName=\"IsRequired\"\n ></verbena-switch>\n </div>\n\n <div class=\"value-range\">\n <verbena-input\n [type]=\"'number'\"\n name=\"minValue\"\n label=\"Min Value\"\n formControlName=\"MinValue\"\n />\n <verbena-input\n [type]=\"'number'\"\n name=\"maxValue\"\n label=\"Max Value\"\n formControlName=\"MinValue\"\n />\n </div>\n\n <button\n [disabled]=\"!form.valid\"\n class=\"add-button ml-auto\"\n type=\"submit\"\n >\n + Add\n </button>\n </form>\n </section>\n </div>\n <div card-footer class=\"card-footer\">\n <button class=\"export-button\" (click)=\"save()\">Extend</button>\n </div>\n</verben-card>\n", styles: [".export-card{font-size:.75rem;z-index:10}.card-header{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.card-body,.section{display:flex;flex-direction:column;gap:.5rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.checkbox-label{line-height:1}.item-actions{display:flex;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:#6b7280;cursor:pointer}.divider{border:none;border-top:1px solid #e8eaf1}.operation-grid{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.add-button{margin-top:.5rem;margin-left:auto;outline:none;border:none;background-color:transparent;color:#3479e9;font-size:.75rem;font-weight:500;cursor:pointer}.card-footer{display:flex;justify-content:flex-end;background-color:transparent}.export-button{margin-top:.5rem;outline:none;border:none;padding:.2rem 1.6rem;background-color:#ffe681;color:#404040;font-size:.75rem;font-weight:600;cursor:pointer}.value-range{display:flex;gap:.5rem;align-items:center}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i3.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i4.CardComponent, selector: "verben-card", inputs: ["pd", "mg", "height", "width", "textColor", "bgColor", "border", "borderRadius", "disabled", "aspectRatio"] }, { kind: "component", type: i5.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "overlayWidth", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i6.VerbenaInputComponent, selector: "verbena-input", inputs: ["disabled", "label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "fontSize", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "component", type: i7.VerbenaSwitchComponent, selector: "verbena-switch", inputs: ["label", "checked", "disabled", "offColor", "onColor", "onText", "offText", "width", "height", "customStyles"], outputs: ["change"] }, { kind: "component", type: i8.ChipComponent, selector: "verben-chip", inputs: ["width", "placeholder", "max", "styleClass", "separator", "disabled", "required", "invalidMessage", "errorPosition"], outputs: ["onChange"] }] });
108
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.10", type: DataExtendComponent, selector: "lib-data-extend", inputs: { properties: { classPropertyName: "properties", publicName: "properties", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { extendDataEvent: "extendDataEvent" }, ngImport: i0, template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid #D4A007'\"\n bgColor=\"#FFFFFF\"\n class=\"export-card\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">Expand</h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'#3479E9'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"reset()\"\n >\n Reset\n </button>\n </div>\n <div card-body class=\"card-body\">\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Entity</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n ></verben-svg>\n </div>\n <div *ngFor=\"let item of visibleItems(); let i = index\" class=\"item\">\n <div class=\"item-label\">\n <!-- <input\n type=\"checkbox\"\n [id]=\"'item-' + i\"\n [(ngModel)]=\"item.selected\"\n /> -->\n <label [for]=\"'item-' + i\" class=\"checkbox-label\">\n {{ item.Name }}\n </label>\n </div>\n <div class=\"item-actions\">\n <verben-svg\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#3479E9\"\n fill=\"white\"\n (click)=\"editItem(i)\"\n ></verben-svg>\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#E20000\"\n (click)=\"removeItem(i)\"\n ></verben-svg>\n </div>\n </div>\n <div\n *ngIf=\"items().length > 3\"\n (click)=\"toggleShowAll()\"\n class=\"show-more\"\n >\n <span>{{ showAll() ? \"Show less\" : \"Show more\" }}</span>\n <verben-svg\n icon=\"chevron\"\n [width]=\"8\"\n [height]=\"6\"\n fill=\"black\"\n stroke=\"black\"\n ></verben-svg>\n </div>\n </section>\n <hr class=\"divider\" />\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Properties</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n ></verben-svg>\n </div>\n <form [formGroup]=\"form\" (ngSubmit)=\"addItem()\">\n <div class=\"\">\n <p class=\"\">Name</p>\n <verbena-input\n placeholder=\"Enter property name\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"100%\"\n fontSize=\"11px\"\n height=\"20px\"\n pd=\"2px 4px !important\"\n bgColor=\"transparent\"\n [showBorder]=\"true\"\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n formControlName=\"Name\"\n ></verbena-input>\n </div>\n\n <div>\n <label for=\"DataType\">Data Type</label>\n <verben-drop-down\n id=\"DataType\"\n width=\"'100%'\"\n height=\"'1.25rem'\"\n placeholder=\"Select type\"\n [options]=\"dataTypes\"\n formControlName=\"DataType\"\n >\n </verben-drop-down>\n </div>\n\n <div>\n <label htmlFor=\"Options\" class=\"mb-2\">Enter Options</label>\n <verben-chip\n label=\"Options\"\n id=\"Options\"\n [placeholder]=\"'Enter Options'\"\n formControlName=\"Options\"\n ></verben-chip>\n </div>\n\n <div>\n <label for=\"DefaultValue\">Default Value</label>\n\n <verbena-input\n [placeHolder]=\"'Enter default text'\"\n formControlName=\"DefaultValue\"\n id=\"DefaultValue\"\n label=\"Default Value (optional)\"\n />\n </div>\n\n <div>\n <p class=\"mb-2\">Required</p>\n\n <verbena-switch\n label=\"Required\"\n [onColor]=\"'#1A237E'\"\n formControlName=\"IsRequired\"\n ></verbena-switch>\n </div>\n\n <div class=\"value-range\">\n <verbena-input\n [type]=\"'number'\"\n name=\"minValue\"\n label=\"Min Value\"\n formControlName=\"MinValue\"\n />\n <verbena-input\n [type]=\"'number'\"\n name=\"maxValue\"\n label=\"Max Value\"\n formControlName=\"MinValue\"\n />\n </div>\n\n <button\n [disabled]=\"!form.valid\"\n class=\"add-button ml-auto\"\n type=\"submit\"\n >\n + Add\n </button>\n </form>\n </section>\n </div>\n <div card-footer class=\"card-footer\">\n <button class=\"export-button\" (click)=\"save()\">Extend</button>\n </div>\n</verben-card>\n", styles: [".export-card{font-size:.75rem;z-index:10}.card-header{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.card-body,.section{display:flex;flex-direction:column;gap:.5rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.checkbox-label{line-height:1}.item-actions{display:flex;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:#6b7280;cursor:pointer}.divider{border:none;border-top:1px solid #e8eaf1}.operation-grid{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.add-button{margin-top:.5rem;margin-left:auto;outline:none;border:none;background-color:transparent;color:#3479e9;font-size:.75rem;font-weight:500;cursor:pointer}.card-footer{display:flex;justify-content:flex-end;background-color:transparent}.export-button{margin-top:.5rem;outline:none;border:none;padding:.2rem 1.6rem;background-color:#ffe681;color:#404040;font-size:.75rem;font-weight:600;cursor:pointer}.value-range{display:flex;gap:.5rem;align-items:center}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i3.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i4.CardComponent, selector: "verben-card", inputs: ["pd", "mg", "height", "width", "textColor", "bgColor", "border", "borderRadius", "disabled", "aspectRatio"] }, { kind: "component", type: i5.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "overlayWidth", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "refPageSize", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i6.VerbenaInputComponent, selector: "verbena-input", inputs: ["disabled", "label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "fontSize", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "component", type: i7.VerbenaSwitchComponent, selector: "verbena-switch", inputs: ["label", "checked", "disabled", "offColor", "onColor", "onText", "offText", "width", "height", "customStyles"], outputs: ["change"] }, { kind: "component", type: i8.ChipComponent, selector: "verben-chip", inputs: ["width", "placeholder", "max", "styleClass", "separator", "disabled", "required", "invalidMessage", "errorPosition"], outputs: ["onChange"] }] });
109
109
  }
110
110
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DataExtendComponent, decorators: [{
111
111
  type: Component,
@@ -136,7 +136,7 @@ export class DataFilterComponent {
136
136
  return this.savedFilters.filter((filter) => filter.selected).length;
137
137
  }
138
138
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DataFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
139
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.10", type: DataFilterComponent, selector: "lib-data-filter", inputs: { columns: "columns", data: "data" }, outputs: { filterApplied: "filterApplied", resetFilter: "resetFilter" }, ngImport: i0, template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid #D4A007'\"\n bgColor=\"#FFFFFF\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">\n Filter <sup>({{ activeFilterCount }})</sup>\n </h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'#3479E9'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"resetAll()\"\n >\n Reset\n </button>\n </div>\n\n <div card-body class=\"card-body\">\n <!-- Saved Filters Section -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Filters</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n ></verben-svg>\n </div>\n\n <div *ngFor=\"let filter of visibleFilters\" class=\"item\">\n <div class=\"item-label\">\n <input type=\"checkbox\" [(ngModel)]=\"filter.selected\" />\n <label>{{ getFilterDescription(filter) }}</label>\n </div>\n </div>\n\n <div\n *ngIf=\"savedFilters.length > maxVisibleItems\"\n class=\"show-more\"\n (click)=\"showAllFilters = !showAllFilters\"\n >\n {{ showAllFilters ? \"Show Less\" : \"Show More\" }}\n </div>\n </section>\n\n <hr class=\"divider\" />\n\n <!-- New Filter Operation -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Operation</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n ></verben-svg>\n </div>\n\n <div class=\"operation-grid\">\n <!-- Column Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select column\"\n [options]=\"filterableColumns\"\n optionLabel=\"header\"\n optionValue=\"id\"\n [(ngModel)]=\"currentFilter.columnId\"\n (ngModelChange)=\"onColumnSelect($event)\"\n ></verben-drop-down>\n\n <!-- Operator Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select operator\"\n [options]=\"availableOperators\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.operator\"\n ></verben-drop-down>\n\n <!-- Value Input based on type -->\n <ng-container [ngSwitch]=\"currentColumnType\">\n <!-- Date Input -->\n <verbena-input\n *ngSwitchCase=\"'date'\"\n type=\"date\"\n placeholder=\"Select date\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n\n <!-- Number Input -->\n <verbena-input\n *ngSwitchCase=\"'number'\"\n type=\"number\"\n placeholder=\"Enter number\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n\n <!-- Text Input (default) -->\n <verbena-input\n *ngSwitchCase=\"'string'\"\n type=\"text\"\n placeholder=\"Enter text\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n </ng-container>\n </div>\n\n <button class=\"add-button ml-auto\" (click)=\"addFilter()\">+ Add</button>\n </section>\n </div>\n\n <div card-footer class=\"card-footer\">\n <button class=\"export-button\" (click)=\"applyFilters()\">Filter</button>\n </div>\n</verben-card>\n", styles: [".export-card{font-size:.75rem;z-index:10}.card-header{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.card-body,.section{display:flex;flex-direction:column;gap:.5rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.checkbox-label{line-height:1}.item-actions{display:flex;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:#6b7280;cursor:pointer}.divider{border:none;border-top:1px solid #e8eaf1}.operation-grid{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.add-button{margin-top:.5rem;outline:none;border:none;background-color:transparent;color:#3479e9;font-size:.75rem;font-weight:500;cursor:pointer}.card-footer{display:flex;justify-content:flex-end;background-color:transparent}.export-button{margin-top:.5rem;outline:none;border:none;padding:.2rem 1.6rem;background-color:#ffe681;color:#404040;font-size:.75rem;font-weight:600;cursor:pointer}sup{color:#3479e9}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i4.CardComponent, selector: "verben-card", inputs: ["pd", "mg", "height", "width", "textColor", "bgColor", "border", "borderRadius", "disabled", "aspectRatio"] }, { kind: "component", type: i5.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "overlayWidth", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i6.VerbenaInputComponent, selector: "verbena-input", inputs: ["disabled", "label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "fontSize", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }] });
139
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.10", type: DataFilterComponent, selector: "lib-data-filter", inputs: { columns: "columns", data: "data" }, outputs: { filterApplied: "filterApplied", resetFilter: "resetFilter" }, ngImport: i0, template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid #D4A007'\"\n bgColor=\"#FFFFFF\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">\n Filter <sup>({{ activeFilterCount }})</sup>\n </h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'#3479E9'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"resetAll()\"\n >\n Reset\n </button>\n </div>\n\n <div card-body class=\"card-body\">\n <!-- Saved Filters Section -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Filters</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n ></verben-svg>\n </div>\n\n <div *ngFor=\"let filter of visibleFilters\" class=\"item\">\n <div class=\"item-label\">\n <input type=\"checkbox\" [(ngModel)]=\"filter.selected\" />\n <label>{{ getFilterDescription(filter) }}</label>\n </div>\n </div>\n\n <div\n *ngIf=\"savedFilters.length > maxVisibleItems\"\n class=\"show-more\"\n (click)=\"showAllFilters = !showAllFilters\"\n >\n {{ showAllFilters ? \"Show Less\" : \"Show More\" }}\n </div>\n </section>\n\n <hr class=\"divider\" />\n\n <!-- New Filter Operation -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Operation</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n ></verben-svg>\n </div>\n\n <div class=\"operation-grid\">\n <!-- Column Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select column\"\n [options]=\"filterableColumns\"\n optionLabel=\"header\"\n optionValue=\"id\"\n [(ngModel)]=\"currentFilter.columnId\"\n (ngModelChange)=\"onColumnSelect($event)\"\n ></verben-drop-down>\n\n <!-- Operator Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select operator\"\n [options]=\"availableOperators\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.operator\"\n ></verben-drop-down>\n\n <!-- Value Input based on type -->\n <ng-container [ngSwitch]=\"currentColumnType\">\n <!-- Date Input -->\n <verbena-input\n *ngSwitchCase=\"'date'\"\n type=\"date\"\n placeholder=\"Select date\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n\n <!-- Number Input -->\n <verbena-input\n *ngSwitchCase=\"'number'\"\n type=\"number\"\n placeholder=\"Enter number\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n\n <!-- Text Input (default) -->\n <verbena-input\n *ngSwitchCase=\"'string'\"\n type=\"text\"\n placeholder=\"Enter text\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n </ng-container>\n </div>\n\n <button class=\"add-button ml-auto\" (click)=\"addFilter()\">+ Add</button>\n </section>\n </div>\n\n <div card-footer class=\"card-footer\">\n <button class=\"export-button\" (click)=\"applyFilters()\">Filter</button>\n </div>\n</verben-card>\n", styles: [".export-card{font-size:.75rem;z-index:10}.card-header{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.card-body,.section{display:flex;flex-direction:column;gap:.5rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.checkbox-label{line-height:1}.item-actions{display:flex;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:#6b7280;cursor:pointer}.divider{border:none;border-top:1px solid #e8eaf1}.operation-grid{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.add-button{margin-top:.5rem;outline:none;border:none;background-color:transparent;color:#3479e9;font-size:.75rem;font-weight:500;cursor:pointer}.card-footer{display:flex;justify-content:flex-end;background-color:transparent}.export-button{margin-top:.5rem;outline:none;border:none;padding:.2rem 1.6rem;background-color:#ffe681;color:#404040;font-size:.75rem;font-weight:600;cursor:pointer}sup{color:#3479e9}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i4.CardComponent, selector: "verben-card", inputs: ["pd", "mg", "height", "width", "textColor", "bgColor", "border", "borderRadius", "disabled", "aspectRatio"] }, { kind: "component", type: i5.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "overlayWidth", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "refPageSize", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i6.VerbenaInputComponent, selector: "verbena-input", inputs: ["disabled", "label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "fontSize", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }] });
140
140
  }
141
141
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DataFilterComponent, decorators: [{
142
142
  type: Component,
@@ -174,7 +174,7 @@ export class DataImportComponent {
174
174
  // this.exportTemplateEvent.emit(this.headers());
175
175
  }
176
176
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DataImportComponent, deps: [{ token: i1.DataImportService }], target: i0.ɵɵFactoryTarget.Component });
177
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.10", type: DataImportComponent, selector: "lib-data-import", inputs: { previewColumns: { classPropertyName: "previewColumns", publicName: "previewColumns", isSignal: true, isRequired: true, transformFunction: null }, formGroupConfig: { classPropertyName: "formGroupConfig", publicName: "formGroupConfig", isSignal: true, isRequired: false, transformFunction: null }, fields: { classPropertyName: "fields", publicName: "fields", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, columnTemplates: { classPropertyName: "columnTemplates", publicName: "columnTemplates", isSignal: true, isRequired: false, transformFunction: null }, parser: { classPropertyName: "parser", publicName: "parser", isSignal: true, isRequired: false, transformFunction: null }, previewData: { classPropertyName: "previewData", publicName: "previewData", isSignal: true, isRequired: false, transformFunction: null }, onImportComplete: { classPropertyName: "onImportComplete", publicName: "onImportComplete", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { exportTemplateEvent: "exportTemplateEvent", importEvent: "importEvent", importEventData: "importEventData", rowSave: "rowSave" }, providers: [DataImportService], ngImport: i0, template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid #D4A007'\"\n bgColor=\"#FFFFFF\"\n class=\"export-card\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">Import</h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'#3479E9'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"reset()\"\n >\n Reset\n </button>\n </div>\n <div card-body class=\"card-body\">\n <div class=\"flex gap-4 justify-between\">\n <button class=\"export-button\" (click)=\"handleTemplateExport()\">\n Download Template\n </button>\n <label for=\"fileInput\" class=\"export-button\">Upload File</label>\n </div>\n <hr class=\"divider\" />\n <section class=\"section\">\n <div\n class=\"drop-area\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n >\n <p>\n Drag and drop files here or\n <label for=\"fileInput\" [style.color]=\"'#3479E9'\"\n >click to browse</label\n >\n </p>\n <input\n type=\"file\"\n id=\"fileInput\"\n (change)=\"onFileSelected($event)\"\n style=\"display: none\"\n accept=\".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\"\n multiple\n />\n </div>\n <div *ngIf=\"files.length > 0\">\n <h3>Uploaded Files:</h3>\n <ul>\n <li *ngFor=\"let file of files\">{{ file.name }}</li>\n </ul>\n </div>\n </section>\n </div>\n <div card-footer class=\"card-footer\">\n <button\n [disabled]=\"service.importedData().length < 1\"\n class=\"export-button\"\n (click)=\"save()\"\n >\n Import\n </button>\n </div>\n</verben-card>\n\n<!-- Modal Component -->\n<verben-dialogue\n [showCloseIcon]=\"true\"\n [dismissOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [size]=\"'large'\"\n [mode]=\"'dialogue'\"\n [customClass]=\"'my-modal-custom-class'\"\n [disableFooter]=\"false\"\n [modalData]=\"[{ data: {} }]\"\n [isVisible]=\"showPreview\"\n [headerTemplate]=\"headerTemplate\"\n [bodyTemplate]=\"bodyTemplate\"\n [footerTemplate]=\"footerTemplate\"\n dialogueWidth=\"85%\"\n>\n <a download=\"\"></a>\n</verben-dialogue>\n\n<!-- Define templates -->\n<ng-template #headerTemplate>\n <h2>Upload Preview</h2>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div class=\"flex gap-4 items-center justify-between my-4\">\n <p class=\"\">Total Items: {{ service.importedData().length }}</p>\n\n <p class=\"\">Duplicates: {{ duplicateIndexSet.size }}</p>\n\n <p class=\"\">Invalid Items: {{ invalidIndexSet.size }}</p>\n\n <verben-drop-down\n [multiselect]=\"true\"\n placeholder=\"Find duplicates by\"\n [options]=\"headers()\"\n [ngModel]=\"uniqueIdentifiers()\"\n (ngModelChange)=\"uniqueIdentifiers.set($event)\"\n ></verben-drop-down>\n </div>\n <div style=\"max-height: min(75vh, 780px); overflow: auto\">\n <lib-data-table\n [data]=\"service.importedData()\"\n [columns]=\"previewColumnsList()\"\n [formGroupConfig]=\"formGroupConfig()\"\n [useVirtualScroll]=\"true\"\n (rowSave)=\"service.addRow($event)\"\n >\n <ng-container libColumn=\"actions\">\n <ng-template\n #cell\n let-value\n let-deleteRow=\"deleteRow\"\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-rowIndex=\"rowIndex\"\n >\n <div class=\"flex action-buttons\">\n <verben-svg\n (click)=\"toggleRowEdit()\"\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n class=\"cursor-pointer\"\n ></verben-svg>\n\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"deleteRow()\"\n class=\"cursor-pointer\"\n ></verben-svg>\n </div>\n </ng-template>\n\n <ng-template\n #cellEdit\n let-value\n let-deleteRow=\"deleteRow\"\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-rowIndex=\"rowIndex\"\n >\n <div class=\"flex action-buttons\">\n <verben-svg\n (click)=\"toggleRowEdit()\"\n icon=\"tick\"\n [width]=\"15\"\n [height]=\"15\"\n class=\"cursor-pointer\"\n ></verben-svg>\n\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"deleteRow()\"\n class=\"cursor-pointer\"\n ></verben-svg>\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n</ng-template>\n\n<ng-template #footerTemplate>\n <div class=\"footer-buttons flex gap-4 items-center justify-between my-4\">\n <button\n class=\"btn btn-secondary cancel-button\"\n (click)=\"showPreview = false\"\n >\n Cancel\n </button>\n <button class=\"btn btn-primary export-button\" (click)=\"save()\">\n Complete\n </button>\n </div>\n</ng-template>\n", styles: [".drop-area{border:2px dashed #ccc;padding:20px;text-align:center;cursor:pointer}.drop-area.drag-active{background-color:#eee}.export-card{font-size:.75rem;z-index:10}.card-header,.card-footer{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.card-body{display:flex;flex-direction:column;gap:.5rem;padding-top:-8px!important}.section{display:flex;flex-direction:column;gap:.5rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.checkbox-label{line-height:1}.item-actions{display:flex;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:#6b7280;cursor:pointer}.divider{border:none;border-top:1px solid #e8eaf1}.operation-grid{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.add-button{margin-top:.5rem;margin-left:auto;outline:none;border:none;background-color:transparent;color:#3479e9;font-size:.75rem;font-weight:500;cursor:pointer}.footer-buttons{display:flex;gap:.5rem;align-items:center;justify-content:space-between;width:100%}.cancel-button,.export-button{outline:none;border:none;padding:.2rem 1.6rem;font-size:.75rem;font-weight:600;cursor:pointer}.cancel-button{background-color:#404040;color:#fff}.export-button{background-color:#ffe681;color:#404040}.value-range{display:flex;gap:.5rem;align-items:center}.action-buttons{display:flex;align-items:center;gap:2rem}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.CardComponent, selector: "verben-card", inputs: ["pd", "mg", "height", "width", "textColor", "bgColor", "border", "borderRadius", "disabled", "aspectRatio"] }, { kind: "component", type: i4.VerbenDialogueComponent, selector: "verben-dialogue", inputs: ["dialogueWidth", "headerTemplate", "bodyTemplate", "footerTemplate", "showCloseIcon", "dismissOutsideClick", "closeOnEscape", "isVisible", "size", "backdropColor", "customClass", "disableFooter", "margin", "padding", "borderRadius", "dialogueBgColor", "width", "closeIconClass", "boxShadow", "enableTransition", "modalData", "mode", "position", "drawerWidth"], outputs: ["openModal", "closeModal"] }, { kind: "component", type: i5.DataTableComponent, selector: "lib-data-table", inputs: ["data", "columns", "dataKey", "formGroupConfig", "groupBy", "useVirtualScroll", "virtualScrollItemSize", "styleConfig"], outputs: ["rowEdit", "rowSave", "rowRevert", "rowDelete", "selectionChange"] }, { kind: "directive", type: i5.ColumnDirective, selector: "[libColumn]", inputs: ["libColumn"] }, { kind: "component", type: i6.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "overlayWidth", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
177
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.10", type: DataImportComponent, selector: "lib-data-import", inputs: { previewColumns: { classPropertyName: "previewColumns", publicName: "previewColumns", isSignal: true, isRequired: true, transformFunction: null }, formGroupConfig: { classPropertyName: "formGroupConfig", publicName: "formGroupConfig", isSignal: true, isRequired: false, transformFunction: null }, fields: { classPropertyName: "fields", publicName: "fields", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, columnTemplates: { classPropertyName: "columnTemplates", publicName: "columnTemplates", isSignal: true, isRequired: false, transformFunction: null }, parser: { classPropertyName: "parser", publicName: "parser", isSignal: true, isRequired: false, transformFunction: null }, previewData: { classPropertyName: "previewData", publicName: "previewData", isSignal: true, isRequired: false, transformFunction: null }, onImportComplete: { classPropertyName: "onImportComplete", publicName: "onImportComplete", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { exportTemplateEvent: "exportTemplateEvent", importEvent: "importEvent", importEventData: "importEventData", rowSave: "rowSave" }, providers: [DataImportService], ngImport: i0, template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid #D4A007'\"\n bgColor=\"#FFFFFF\"\n class=\"export-card\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">Import</h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'#3479E9'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"reset()\"\n >\n Reset\n </button>\n </div>\n <div card-body class=\"card-body\">\n <div class=\"flex gap-4 justify-between\">\n <button class=\"export-button\" (click)=\"handleTemplateExport()\">\n Download Template\n </button>\n <label for=\"fileInput\" class=\"export-button\">Upload File</label>\n </div>\n <hr class=\"divider\" />\n <section class=\"section\">\n <div\n class=\"drop-area\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n >\n <p>\n Drag and drop files here or\n <label for=\"fileInput\" [style.color]=\"'#3479E9'\"\n >click to browse</label\n >\n </p>\n <input\n type=\"file\"\n id=\"fileInput\"\n (change)=\"onFileSelected($event)\"\n style=\"display: none\"\n accept=\".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\"\n multiple\n />\n </div>\n <div *ngIf=\"files.length > 0\">\n <h3>Uploaded Files:</h3>\n <ul>\n <li *ngFor=\"let file of files\">{{ file.name }}</li>\n </ul>\n </div>\n </section>\n </div>\n <div card-footer class=\"card-footer\">\n <button\n [disabled]=\"service.importedData().length < 1\"\n class=\"export-button\"\n (click)=\"save()\"\n >\n Import\n </button>\n </div>\n</verben-card>\n\n<!-- Modal Component -->\n<verben-dialogue\n [showCloseIcon]=\"true\"\n [dismissOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [size]=\"'large'\"\n [mode]=\"'dialogue'\"\n [customClass]=\"'my-modal-custom-class'\"\n [disableFooter]=\"false\"\n [modalData]=\"[{ data: {} }]\"\n [isVisible]=\"showPreview\"\n [headerTemplate]=\"headerTemplate\"\n [bodyTemplate]=\"bodyTemplate\"\n [footerTemplate]=\"footerTemplate\"\n dialogueWidth=\"85%\"\n>\n <a download=\"\"></a>\n</verben-dialogue>\n\n<!-- Define templates -->\n<ng-template #headerTemplate>\n <h2>Upload Preview</h2>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div class=\"flex gap-4 items-center justify-between my-4\">\n <p class=\"\">Total Items: {{ service.importedData().length }}</p>\n\n <p class=\"\">Duplicates: {{ duplicateIndexSet.size }}</p>\n\n <p class=\"\">Invalid Items: {{ invalidIndexSet.size }}</p>\n\n <verben-drop-down\n [multiselect]=\"true\"\n placeholder=\"Find duplicates by\"\n [options]=\"headers()\"\n [ngModel]=\"uniqueIdentifiers()\"\n (ngModelChange)=\"uniqueIdentifiers.set($event)\"\n ></verben-drop-down>\n </div>\n <div style=\"max-height: min(75vh, 780px); overflow: auto\">\n <lib-data-table\n [data]=\"service.importedData()\"\n [columns]=\"previewColumnsList()\"\n [formGroupConfig]=\"formGroupConfig()\"\n [useVirtualScroll]=\"true\"\n (rowSave)=\"service.addRow($event)\"\n >\n <ng-container libColumn=\"actions\">\n <ng-template\n #cell\n let-value\n let-deleteRow=\"deleteRow\"\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-rowIndex=\"rowIndex\"\n >\n <div class=\"flex action-buttons\">\n <verben-svg\n (click)=\"toggleRowEdit()\"\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n class=\"cursor-pointer\"\n ></verben-svg>\n\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"deleteRow()\"\n class=\"cursor-pointer\"\n ></verben-svg>\n </div>\n </ng-template>\n\n <ng-template\n #cellEdit\n let-value\n let-deleteRow=\"deleteRow\"\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-rowIndex=\"rowIndex\"\n >\n <div class=\"flex action-buttons\">\n <verben-svg\n (click)=\"toggleRowEdit()\"\n icon=\"tick\"\n [width]=\"15\"\n [height]=\"15\"\n class=\"cursor-pointer\"\n ></verben-svg>\n\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"deleteRow()\"\n class=\"cursor-pointer\"\n ></verben-svg>\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n</ng-template>\n\n<ng-template #footerTemplate>\n <div class=\"footer-buttons flex gap-4 items-center justify-between my-4\">\n <button\n class=\"btn btn-secondary cancel-button\"\n (click)=\"showPreview = false\"\n >\n Cancel\n </button>\n <button class=\"btn btn-primary export-button\" (click)=\"save()\">\n Complete\n </button>\n </div>\n</ng-template>\n", styles: [".drop-area{border:2px dashed #ccc;padding:20px;text-align:center;cursor:pointer}.drop-area.drag-active{background-color:#eee}.export-card{font-size:.75rem;z-index:10}.card-header,.card-footer{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.card-body{display:flex;flex-direction:column;gap:.5rem;padding-top:-8px!important}.section{display:flex;flex-direction:column;gap:.5rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.checkbox-label{line-height:1}.item-actions{display:flex;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:#6b7280;cursor:pointer}.divider{border:none;border-top:1px solid #e8eaf1}.operation-grid{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.add-button{margin-top:.5rem;margin-left:auto;outline:none;border:none;background-color:transparent;color:#3479e9;font-size:.75rem;font-weight:500;cursor:pointer}.footer-buttons{display:flex;gap:.5rem;align-items:center;justify-content:space-between;width:100%}.cancel-button,.export-button{outline:none;border:none;padding:.2rem 1.6rem;font-size:.75rem;font-weight:600;cursor:pointer}.cancel-button{background-color:#404040;color:#fff}.export-button{background-color:#ffe681;color:#404040}.value-range{display:flex;gap:.5rem;align-items:center}.action-buttons{display:flex;align-items:center;gap:2rem}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.CardComponent, selector: "verben-card", inputs: ["pd", "mg", "height", "width", "textColor", "bgColor", "border", "borderRadius", "disabled", "aspectRatio"] }, { kind: "component", type: i4.VerbenDialogueComponent, selector: "verben-dialogue", inputs: ["dialogueWidth", "headerTemplate", "bodyTemplate", "footerTemplate", "showCloseIcon", "dismissOutsideClick", "closeOnEscape", "isVisible", "size", "backdropColor", "customClass", "disableFooter", "margin", "padding", "borderRadius", "dialogueBgColor", "width", "closeIconClass", "boxShadow", "enableTransition", "modalData", "mode", "position", "drawerWidth"], outputs: ["openModal", "closeModal"] }, { kind: "component", type: i5.DataTableComponent, selector: "lib-data-table", inputs: ["data", "columns", "dataKey", "formGroupConfig", "groupBy", "useVirtualScroll", "virtualScrollItemSize", "styleConfig"], outputs: ["rowEdit", "rowSave", "rowRevert", "rowDelete", "selectionChange"] }, { kind: "directive", type: i5.ColumnDirective, selector: "[libColumn]", inputs: ["libColumn"] }, { kind: "component", type: i6.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "overlayWidth", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "refPageSize", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
178
178
  }
179
179
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DataImportComponent, decorators: [{
180
180
  type: Component,
@@ -91,7 +91,7 @@ export class DataImportService {
91
91
  return reader.readAsArrayBuffer(file);
92
92
  }
93
93
  handleTemplateExport(fields, title) {
94
- console.log(fields);
94
+ // console.log(fields);
95
95
  const wb = utils.book_new();
96
96
  const ws = utils.json_to_sheet([]);
97
97
  utils.sheet_add_aoa(ws, [fields]);
@@ -126,4 +126,4 @@ export class DataImportService {
126
126
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DataImportService, decorators: [{
127
127
  type: Injectable
128
128
  }], ctorParameters: () => [] });
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1pbXBvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS1pbXBvcnQvZGF0YS1pbXBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFFbkUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUc5QyxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLFlBQVksR0FBd0IsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRS9DLGdCQUFnQixDQUFDO0lBRWpCLG9FQUFvRTtJQUNwRSxtQkFBbUIsQ0FDakIsWUFBbUMsRUFDbkMsaUJBQXdDO1FBRXhDLHdEQUF3RDtRQUN4RCxNQUFNLG9CQUFvQixHQUFHLElBQUksR0FBRyxFQUFtQixDQUFDO1FBQ3hELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxHQUFHLEVBR2hDLENBQUM7UUFFSiwyRkFBMkY7UUFDM0YsaUJBQWlCO2FBQ2QsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUM7YUFDOUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDZixNQUFNLE1BQU0sR0FDVixPQUFPLEdBQUcsQ0FBQyxNQUFNLEtBQUssUUFBUTtnQkFDNUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNO2dCQUNaLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBRWhDLElBQUksR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNsQixvQkFBb0IsQ0FBQyxHQUFHLENBQUMsTUFB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TCxDQUFDLENBQUMsQ0FBQztRQUNILG9DQUFvQztJQUN0QyxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWlCLEVBQUUsS0FBbUIsRUFBRSxXQUFxQjtRQUN2RSxPQUFPLENBQ0wsS0FBSyxDQUFDLE1BQU0sQ0FDVixDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ04sV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQ3RCLFdBQVcsQ0FBQyxLQUFLLENBQ2YsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUNiLEtBQUssQ0FBQyxVQUFxQixDQUFDO2dCQUM1QixLQUFLLENBQUMsVUFBcUIsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxVQUFxQixDQUFDLENBQzlELENBQ0osQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUNiLENBQUM7SUFDSixDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7d0dBdEpVLGlCQUFpQjs0R0FBakIsaUJBQWlCOzs0RkFBakIsaUJBQWlCO2tCQUQ3QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgc2lnbmFsLCBXcml0YWJsZVNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29sdW1uRGVmaW5pdGlvbiB9IGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS10YWJsZSc7XG5pbXBvcnQgeyByZWFkLCB1dGlscywgd3JpdGVGaWxlIH0gZnJvbSAneGxzeCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEYXRhSW1wb3J0U2VydmljZTxUPiB7XG4gIGltcG9ydGVkRGF0YTogV3JpdGFibGVTaWduYWw8VFtdPiA9IHNpZ25hbChbXSk7XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICAvLyBGdW5jdGlvbiB0byB0cmFuc2Zvcm0gaW1wb3J0ZWQgZGF0YSB0byBtYXRjaCB5b3VyIG1vZGVsIHN0cnVjdHVyZVxuICB0cmFuc2Zvcm1JbXBvcnREYXRhPFQ+KFxuICAgIGltcG9ydGVkRGF0YTogUmVjb3JkPHN0cmluZywgYW55PltdLFxuICAgIGNvbHVtbkRlZmluaXRpb25zOiBDb2x1bW5EZWZpbml0aW9uPFQ+W11cbiAgKTogUGFydGlhbDxUPltdIHtcbiAgICAvLyBDcmVhdGUgbWFwcGluZ3MgZnJvbSBoZWFkZXIgdG8gaW1wb3J0S2V5IGFuZCBpbXBvcnRCeVxuICAgIGNvbnN0IGhlYWRlclRvSW1wb3J0S2V5TWFwID0gbmV3IE1hcDxzdHJpbmcsIGtleW9mIFQ+KCk7XG4gICAgY29uc3QgaGVhZGVyVG9JbXBvcnRCeU1hcCA9IG5ldyBNYXA8XG4gICAgICBzdHJpbmcsXG4gICAgICBrZXlvZiBUIHwgKChpbXBvcnRlZFJvdzogYW55KSA9PiBUW2tleW9mIFRdKVxuICAgID4oKTtcblxuICAgIC8vIEZpbHRlciBjb2x1bW4gZGVmaW5pdGlvbnMgdG8gb25seSB0aG9zZSB3aXRoIGltcG9ydEtleSBvciBpbXBvcnRCeSBhbmQgcG9wdWxhdGUgdGhlIG1hcHNcbiAgICBjb2x1bW5EZWZpbml0aW9uc1xuICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wuaW1wb3J0S2V5IHx8IGNvbC5pbXBvcnRCeSlcbiAgICAgIC5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgICAgY29uc3QgaGVhZGVyID1cbiAgICAgICAgICB0eXBlb2YgY29sLmhlYWRlciA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gY29sLmhlYWRlclxuICAgICAgICAgICAgOiBjb2wuaGVhZGVyKHt9KS50b1N0cmluZygpO1xuXG4gICAgICAgIGlmIChjb2wuaW1wb3J0S2V5KSB7XG4gICAgICAgICAgaGVhZGVyVG9JbXBvcnRLZXlNYXAuc2V0KGhlYWRlciwgY29sLmltcG9ydEtleSBhcyBrZXlvZiBUKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2wuaW1wb3J0QnkpIHtcbiAgICAgICAgICBoZWFkZXJUb0ltcG9ydEJ5TWFwLnNldChoZWFkZXIsIGNvbC5pbXBvcnRCeSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgLy8gVHJhbnNmb3JtIGVhY2ggcm93IGluIHRoZSBpbXBvcnRlZCBkYXRhXG4gICAgcmV0dXJuIGltcG9ydGVkRGF0YS5tYXAoKHJvdykgPT4ge1xuICAgICAgY29uc3QgdHJhbnNmb3JtZWRSb3c6IFBhcnRpYWw8VD4gPSB7fTtcblxuICAgICAgLy8gUHJvY2VzcyBlYWNoIGtleSBpbiB0aGUgcm93XG4gICAgICBPYmplY3QuZW50cmllcyhyb3cpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSdzIGFuIGltcG9ydEJ5IHRyYW5zZm9ybWF0aW9uIGZpcnN0ICh0YWtlcyBwcmlvcml0eSlcbiAgICAgICAgY29uc3QgaW1wb3J0QnkgPSBoZWFkZXJUb0ltcG9ydEJ5TWFwLmdldChrZXkpO1xuXG4gICAgICAgIGlmIChpbXBvcnRCeSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgaW1wb3J0QnkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIC8vIFVzZSB0aGUgaW1wb3J0QnkgZnVuY3Rpb24gdG8gdHJhbnNmb3JtIHRoZSBlbnRpcmUgaW1wb3J0ZWQgcm93XG4gICAgICAgICAgICBjb25zdCBpbXBvcnRLZXkgPSBoZWFkZXJUb0ltcG9ydEtleU1hcC5nZXQoa2V5KTtcbiAgICAgICAgICAgIGlmIChpbXBvcnRLZXkpIHtcbiAgICAgICAgICAgICAgdHJhbnNmb3JtZWRSb3dbaW1wb3J0S2V5XSA9IGltcG9ydEJ5KHJvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGltcG9ydEJ5IGlzIGEgZGlyZWN0IGtleSByZWZlcmVuY2VcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkUm93W2ltcG9ydEJ5XSA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBGYWxsIGJhY2sgdG8gaW1wb3J0S2V5IGlmIG5vIGltcG9ydEJ5IGlzIGRlZmluZWRcbiAgICAgICAgICBjb25zdCBpbXBvcnRLZXkgPSBoZWFkZXJUb0ltcG9ydEtleU1hcC5nZXQoa2V5KTtcbiAgICAgICAgICBpZiAoaW1wb3J0S2V5KSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFJvd1tpbXBvcnRLZXldID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkUm93O1xuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlSW1wb3J0KFxuICAgIGZpbGU6IEZpbGUsXG4gICAgLy8gcHJldmlld2VyPzogKGRhdGE6IGFueVtdKSA9PiB2b2lkLFxuICAgIGNvbHVtbkRlZmluaXRpb25zOiBDb2x1bW5EZWZpbml0aW9uPFQ+W10sXG4gICAgcGFyc2VJbXBvcnQ/OiAoZGF0YTogYW55KSA9PiBQYXJ0aWFsPFQ+W11cbiAgKSB7XG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICByZWFkZXIub25sb2FkID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIC8vIGNvbnN0IHdiID0gcmVhZChldmVudC50YXJnZXQucmVzdWx0LCB7XG4gICAgICAvLyAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgLy8gICByYXc6IHRydWUsXG4gICAgICAvLyAgIGNlbGxUZXh0OiB0cnVlLFxuICAgICAgLy8gICBjZWxsRm9ybXVsYTogZmFsc2UsXG4gICAgICAvLyAgIGNlbGxORjogZmFsc2UsXG4gICAgICAvLyB9KTtcbiAgICAgIC8vIGNvbnNvbGUudGltZSgnQmVnaW4nKTtcbiAgICAgIGxldCBpbXBvcnRlZDogYW55W10gPSBbXTtcbiAgICAgIGNvbnN0IHdiID0gcmVhZChldmVudC50YXJnZXQucmVzdWx0LCB7IGNlbGxEYXRlczogdHJ1ZSB9KTtcbiAgICAgIGNvbnN0IHNoZWV0cyA9IHdiLlNoZWV0TmFtZXM7XG4gICAgICBpZiAoc2hlZXRzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCByb3dzID0gdXRpbHMuc2hlZXRfdG9fanNvbih3Yi5TaGVldHNbc2hlZXRzWzBdXSwge1xuICAgICAgICAgIGRlZnZhbDogbnVsbCxcbiAgICAgICAgfSkgYXMgUmVjb3JkPHN0cmluZywgYW55PltdO1xuXG4gICAgICAgIGltcG9ydGVkID0gdGhpcy50cmFuc2Zvcm1JbXBvcnREYXRhKHJvd3MsIGNvbHVtbkRlZmluaXRpb25zKSBhcyBUW107XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdUUkFOU0ZPUk1FRCcsIGltcG9ydGVkKTtcblxuICAgICAgICBpZiAocGFyc2VJbXBvcnQpIHtcbiAgICAgICAgICBpbXBvcnRlZCA9IHBhcnNlSW1wb3J0KGltcG9ydGVkKTtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnUEFSU0VEJywgaW1wb3J0ZWQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHByZXZpZXdlcihpbXBvcnRlZCk7XG4gICAgICB9XG4gICAgICAvLyBjb25zb2xlLmxvZygnSW1wb3J0ZWQgZGF0YTonLCBKU09OLnN0cmluZ2lmeShpbXBvcnRlZCwgbnVsbCwgMikpO1xuICAgICAgLy8gY29uc29sZS50aW1lKCdTdGFydCBQcm9jZXNzJyk7XG4gICAgICB0aGlzLmltcG9ydGVkRGF0YS5zZXQoaW1wb3J0ZWQpO1xuICAgICAgLy8gY29uc29sZS50aW1lRW5kKCdCZWdpbicpO1xuICAgICAgcmV0dXJuIGltcG9ydGVkO1xuICAgIH07XG4gICAgcmV0dXJuIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihmaWxlKTtcbiAgfVxuXG4gIGhhbmRsZVRlbXBsYXRlRXhwb3J0KGZpZWxkczogc3RyaW5nW10sIHRpdGxlOiBzdHJpbmcpIHtcbiAgICBjb25zb2xlLmxvZyhmaWVsZHMpO1xuICAgIGNvbnN0IHdiID0gdXRpbHMuYm9va19uZXcoKTtcbiAgICBjb25zdCB3czogYW55ID0gdXRpbHMuanNvbl90b19zaGVldChbXSk7XG4gICAgdXRpbHMuc2hlZXRfYWRkX2FvYSh3cywgW2ZpZWxkc10pO1xuICAgIC8vIHV0aWxzLnNoZWV0X2FkZF9qc29uKHdzLCB0aGlzLl9kYXRhLCB7IG9yaWdpbjogJ0EyJywgc2tpcEhlYWRlcjogdHJ1ZSB9KTtcbiAgICB1dGlscy5ib29rX2FwcGVuZF9zaGVldCh3Yiwgd3MsIHRpdGxlKTtcbiAgICB3cml0ZUZpbGUod2IsIHRpdGxlICsgJy10ZW1wbGF0ZS4nICsgJ3hsc3gnKTtcbiAgfVxuXG4gIGFkZFJvdyhldmVudDogeyBpbmRleDogbnVtYmVyOyBrZXk6IHN0cmluZyB8IG51bWJlcjsgZGF0YTogUGFydGlhbDxUPiB9KSB7XG4gICAgLy8gY29uc29sZS5sb2coZXZlbnQpO1xuICAgIHRoaXMuaW1wb3J0ZWREYXRhLnVwZGF0ZSgoZGF0KSA9PiB7XG4gICAgICAvLyBkYXRbZXZlbnQuaW5kZXhdID0geyAuLi5kYXRbZXZlbnQuaW5kZXhdLCAuLi5ldmVudC5kYXRhIH07XG4gICAgICByZXR1cm4gZGF0Lm1hcCgoZCwgaSkgPT4ge1xuICAgICAgICBpZiAoaSA9PT0gZXZlbnQuaW5kZXgpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi5kLCAuLi5ldmVudC5kYXRhIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGQ7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmltcG9ydGVkRGF0YSgpKTtcbiAgfVxuXG4gIGlzRHVwbGljYXRlKGRhdHVtOiBQYXJ0aWFsPFQ+LCBhcnJheTogUGFydGlhbDxUPltdLCBpZGVudGlmaWVyczogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXJyYXkuZmlsdGVyKFxuICAgICAgICAoZGF0KSA9PlxuICAgICAgICAgIGlkZW50aWZpZXJzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICBpZGVudGlmaWVycy5ldmVyeShcbiAgICAgICAgICAgIChpZGVudGlmaWVyKSA9PlxuICAgICAgICAgICAgICBkYXR1bVtpZGVudGlmaWVyIGFzIGtleW9mIFRdICYmXG4gICAgICAgICAgICAgIGRhdHVtW2lkZW50aWZpZXIgYXMga2V5b2YgVF0gPT09IGRhdFtpZGVudGlmaWVyIGFzIGtleW9mIFRdXG4gICAgICAgICAgKVxuICAgICAgKS5sZW5ndGggPiAxXG4gICAgKTtcbiAgfVxuXG4gIGNsZWFyRGF0YSgpIHtcbiAgICB0aGlzLmltcG9ydGVkRGF0YS5zZXQoW10pO1xuICB9XG59XG4iXX0=
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1pbXBvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS1pbXBvcnQvZGF0YS1pbXBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFFbkUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUc5QyxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLFlBQVksR0FBd0IsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRS9DLGdCQUFlLENBQUM7SUFFaEIsb0VBQW9FO0lBQ3BFLG1CQUFtQixDQUNqQixZQUFtQyxFQUNuQyxpQkFBd0M7UUFFeEMsd0RBQXdEO1FBQ3hELE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUM7UUFDeEQsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFHaEMsQ0FBQztRQUVKLDJGQUEyRjtRQUMzRixpQkFBaUI7YUFDZCxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQzthQUM5QyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNmLE1BQU0sTUFBTSxHQUNWLE9BQU8sR0FBRyxDQUFDLE1BQU0sS0FBSyxRQUFRO2dCQUM1QixDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU07Z0JBQ1osQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7WUFFaEMsSUFBSSxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ2xCLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxNQUFN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SUFDdEMsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFpQixFQUFFLEtBQW1CLEVBQUUsV0FBcUI7UUFDdkUsT0FBTyxDQUNMLEtBQUssQ0FBQyxNQUFNLENBQ1YsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNOLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUN0QixXQUFXLENBQUMsS0FBSyxDQUNmLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FDYixLQUFLLENBQUMsVUFBcUIsQ0FBQztnQkFDNUIsS0FBSyxDQUFDLFVBQXFCLENBQUMsS0FBSyxHQUFHLENBQUMsVUFBcUIsQ0FBQyxDQUM5RCxDQUNKLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FDYixDQUFDO0lBQ0osQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO3dHQXRKVSxpQkFBaUI7NEdBQWpCLGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIHNpZ25hbCwgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbHVtbkRlZmluaXRpb24gfSBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdGFibGUnO1xuaW1wb3J0IHsgcmVhZCwgdXRpbHMsIHdyaXRlRmlsZSB9IGZyb20gJ3hsc3gnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGF0YUltcG9ydFNlcnZpY2U8VD4ge1xuICBpbXBvcnRlZERhdGE6IFdyaXRhYmxlU2lnbmFsPFRbXT4gPSBzaWduYWwoW10pO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICAvLyBGdW5jdGlvbiB0byB0cmFuc2Zvcm0gaW1wb3J0ZWQgZGF0YSB0byBtYXRjaCB5b3VyIG1vZGVsIHN0cnVjdHVyZVxuICB0cmFuc2Zvcm1JbXBvcnREYXRhPFQ+KFxuICAgIGltcG9ydGVkRGF0YTogUmVjb3JkPHN0cmluZywgYW55PltdLFxuICAgIGNvbHVtbkRlZmluaXRpb25zOiBDb2x1bW5EZWZpbml0aW9uPFQ+W10sXG4gICk6IFBhcnRpYWw8VD5bXSB7XG4gICAgLy8gQ3JlYXRlIG1hcHBpbmdzIGZyb20gaGVhZGVyIHRvIGltcG9ydEtleSBhbmQgaW1wb3J0QnlcbiAgICBjb25zdCBoZWFkZXJUb0ltcG9ydEtleU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBrZXlvZiBUPigpO1xuICAgIGNvbnN0IGhlYWRlclRvSW1wb3J0QnlNYXAgPSBuZXcgTWFwPFxuICAgICAgc3RyaW5nLFxuICAgICAga2V5b2YgVCB8ICgoaW1wb3J0ZWRSb3c6IGFueSkgPT4gVFtrZXlvZiBUXSlcbiAgICA+KCk7XG5cbiAgICAvLyBGaWx0ZXIgY29sdW1uIGRlZmluaXRpb25zIHRvIG9ubHkgdGhvc2Ugd2l0aCBpbXBvcnRLZXkgb3IgaW1wb3J0QnkgYW5kIHBvcHVsYXRlIHRoZSBtYXBzXG4gICAgY29sdW1uRGVmaW5pdGlvbnNcbiAgICAgIC5maWx0ZXIoKGNvbCkgPT4gY29sLmltcG9ydEtleSB8fCBjb2wuaW1wb3J0QnkpXG4gICAgICAuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICAgIGNvbnN0IGhlYWRlciA9XG4gICAgICAgICAgdHlwZW9mIGNvbC5oZWFkZXIgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IGNvbC5oZWFkZXJcbiAgICAgICAgICAgIDogY29sLmhlYWRlcih7fSkudG9TdHJpbmcoKTtcblxuICAgICAgICBpZiAoY29sLmltcG9ydEtleSkge1xuICAgICAgICAgIGhlYWRlclRvSW1wb3J0S2V5TWFwLnNldChoZWFkZXIsIGNvbC5pbXBvcnRLZXkgYXMga2V5b2YgVCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29sLmltcG9ydEJ5KSB7XG4gICAgICAgICAgaGVhZGVyVG9JbXBvcnRCeU1hcC5zZXQoaGVhZGVyLCBjb2wuaW1wb3J0QnkpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIC8vIFRyYW5zZm9ybSBlYWNoIHJvdyBpbiB0aGUgaW1wb3J0ZWQgZGF0YVxuICAgIHJldHVybiBpbXBvcnRlZERhdGEubWFwKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IHRyYW5zZm9ybWVkUm93OiBQYXJ0aWFsPFQ+ID0ge307XG5cbiAgICAgIC8vIFByb2Nlc3MgZWFjaCBrZXkgaW4gdGhlIHJvd1xuICAgICAgT2JqZWN0LmVudHJpZXMocm93KS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUncyBhbiBpbXBvcnRCeSB0cmFuc2Zvcm1hdGlvbiBmaXJzdCAodGFrZXMgcHJpb3JpdHkpXG4gICAgICAgIGNvbnN0IGltcG9ydEJ5ID0gaGVhZGVyVG9JbXBvcnRCeU1hcC5nZXQoa2V5KTtcblxuICAgICAgICBpZiAoaW1wb3J0QnkpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGltcG9ydEJ5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAvLyBVc2UgdGhlIGltcG9ydEJ5IGZ1bmN0aW9uIHRvIHRyYW5zZm9ybSB0aGUgZW50aXJlIGltcG9ydGVkIHJvd1xuICAgICAgICAgICAgY29uc3QgaW1wb3J0S2V5ID0gaGVhZGVyVG9JbXBvcnRLZXlNYXAuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAoaW1wb3J0S2V5KSB7XG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVkUm93W2ltcG9ydEtleV0gPSBpbXBvcnRCeShyb3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBpbXBvcnRCeSBpcyBhIGRpcmVjdCBrZXkgcmVmZXJlbmNlXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFJvd1tpbXBvcnRCeV0gPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRmFsbCBiYWNrIHRvIGltcG9ydEtleSBpZiBubyBpbXBvcnRCeSBpcyBkZWZpbmVkXG4gICAgICAgICAgY29uc3QgaW1wb3J0S2V5ID0gaGVhZGVyVG9JbXBvcnRLZXlNYXAuZ2V0KGtleSk7XG4gICAgICAgICAgaWYgKGltcG9ydEtleSkge1xuICAgICAgICAgICAgdHJhbnNmb3JtZWRSb3dbaW1wb3J0S2V5XSA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0cmFuc2Zvcm1lZFJvdztcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZUltcG9ydChcbiAgICBmaWxlOiBGaWxlLFxuICAgIC8vIHByZXZpZXdlcj86IChkYXRhOiBhbnlbXSkgPT4gdm9pZCxcbiAgICBjb2x1bW5EZWZpbml0aW9uczogQ29sdW1uRGVmaW5pdGlvbjxUPltdLFxuICAgIHBhcnNlSW1wb3J0PzogKGRhdGE6IGFueSkgPT4gUGFydGlhbDxUPltdLFxuICApIHtcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIHJlYWRlci5vbmxvYWQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgLy8gY29uc3Qgd2IgPSByZWFkKGV2ZW50LnRhcmdldC5yZXN1bHQsIHtcbiAgICAgIC8vICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAvLyAgIHJhdzogdHJ1ZSxcbiAgICAgIC8vICAgY2VsbFRleHQ6IHRydWUsXG4gICAgICAvLyAgIGNlbGxGb3JtdWxhOiBmYWxzZSxcbiAgICAgIC8vICAgY2VsbE5GOiBmYWxzZSxcbiAgICAgIC8vIH0pO1xuICAgICAgLy8gY29uc29sZS50aW1lKCdCZWdpbicpO1xuICAgICAgbGV0IGltcG9ydGVkOiBhbnlbXSA9IFtdO1xuICAgICAgY29uc3Qgd2IgPSByZWFkKGV2ZW50LnRhcmdldC5yZXN1bHQsIHsgY2VsbERhdGVzOiB0cnVlIH0pO1xuICAgICAgY29uc3Qgc2hlZXRzID0gd2IuU2hlZXROYW1lcztcbiAgICAgIGlmIChzaGVldHMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHJvd3MgPSB1dGlscy5zaGVldF90b19qc29uKHdiLlNoZWV0c1tzaGVldHNbMF1dLCB7XG4gICAgICAgICAgZGVmdmFsOiBudWxsLFxuICAgICAgICB9KSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+W107XG5cbiAgICAgICAgaW1wb3J0ZWQgPSB0aGlzLnRyYW5zZm9ybUltcG9ydERhdGEocm93cywgY29sdW1uRGVmaW5pdGlvbnMpIGFzIFRbXTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ1RSQU5TRk9STUVEJywgaW1wb3J0ZWQpO1xuXG4gICAgICAgIGlmIChwYXJzZUltcG9ydCkge1xuICAgICAgICAgIGltcG9ydGVkID0gcGFyc2VJbXBvcnQoaW1wb3J0ZWQpO1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdQQVJTRUQnLCBpbXBvcnRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcHJldmlld2VyKGltcG9ydGVkKTtcbiAgICAgIH1cbiAgICAgIC8vIGNvbnNvbGUubG9nKCdJbXBvcnRlZCBkYXRhOicsIEpTT04uc3RyaW5naWZ5KGltcG9ydGVkLCBudWxsLCAyKSk7XG4gICAgICAvLyBjb25zb2xlLnRpbWUoJ1N0YXJ0IFByb2Nlc3MnKTtcbiAgICAgIHRoaXMuaW1wb3J0ZWREYXRhLnNldChpbXBvcnRlZCk7XG4gICAgICAvLyBjb25zb2xlLnRpbWVFbmQoJ0JlZ2luJyk7XG4gICAgICByZXR1cm4gaW1wb3J0ZWQ7XG4gICAgfTtcbiAgICByZXR1cm4gcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGZpbGUpO1xuICB9XG5cbiAgaGFuZGxlVGVtcGxhdGVFeHBvcnQoZmllbGRzOiBzdHJpbmdbXSwgdGl0bGU6IHN0cmluZykge1xuICAgIC8vIGNvbnNvbGUubG9nKGZpZWxkcyk7XG4gICAgY29uc3Qgd2IgPSB1dGlscy5ib29rX25ldygpO1xuICAgIGNvbnN0IHdzOiBhbnkgPSB1dGlscy5qc29uX3RvX3NoZWV0KFtdKTtcbiAgICB1dGlscy5zaGVldF9hZGRfYW9hKHdzLCBbZmllbGRzXSk7XG4gICAgLy8gdXRpbHMuc2hlZXRfYWRkX2pzb24od3MsIHRoaXMuX2RhdGEsIHsgb3JpZ2luOiAnQTInLCBza2lwSGVhZGVyOiB0cnVlIH0pO1xuICAgIHV0aWxzLmJvb2tfYXBwZW5kX3NoZWV0KHdiLCB3cywgdGl0bGUpO1xuICAgIHdyaXRlRmlsZSh3YiwgdGl0bGUgKyAnLXRlbXBsYXRlLicgKyAneGxzeCcpO1xuICB9XG5cbiAgYWRkUm93KGV2ZW50OiB7IGluZGV4OiBudW1iZXI7IGtleTogc3RyaW5nIHwgbnVtYmVyOyBkYXRhOiBQYXJ0aWFsPFQ+IH0pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhldmVudCk7XG4gICAgdGhpcy5pbXBvcnRlZERhdGEudXBkYXRlKChkYXQpID0+IHtcbiAgICAgIC8vIGRhdFtldmVudC5pbmRleF0gPSB7IC4uLmRhdFtldmVudC5pbmRleF0sIC4uLmV2ZW50LmRhdGEgfTtcbiAgICAgIHJldHVybiBkYXQubWFwKChkLCBpKSA9PiB7XG4gICAgICAgIGlmIChpID09PSBldmVudC5pbmRleCkge1xuICAgICAgICAgIHJldHVybiB7IC4uLmQsIC4uLmV2ZW50LmRhdGEgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZDtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuaW1wb3J0ZWREYXRhKCkpO1xuICB9XG5cbiAgaXNEdXBsaWNhdGUoZGF0dW06IFBhcnRpYWw8VD4sIGFycmF5OiBQYXJ0aWFsPFQ+W10sIGlkZW50aWZpZXJzOiBzdHJpbmdbXSkge1xuICAgIHJldHVybiAoXG4gICAgICBhcnJheS5maWx0ZXIoXG4gICAgICAgIChkYXQpID0+XG4gICAgICAgICAgaWRlbnRpZmllcnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgIGlkZW50aWZpZXJzLmV2ZXJ5KFxuICAgICAgICAgICAgKGlkZW50aWZpZXIpID0+XG4gICAgICAgICAgICAgIGRhdHVtW2lkZW50aWZpZXIgYXMga2V5b2YgVF0gJiZcbiAgICAgICAgICAgICAgZGF0dW1baWRlbnRpZmllciBhcyBrZXlvZiBUXSA9PT0gZGF0W2lkZW50aWZpZXIgYXMga2V5b2YgVF0sXG4gICAgICAgICAgKSxcbiAgICAgICkubGVuZ3RoID4gMVxuICAgICk7XG4gIH1cblxuICBjbGVhckRhdGEoKSB7XG4gICAgdGhpcy5pbXBvcnRlZERhdGEuc2V0KFtdKTtcbiAgfVxufVxuIl19