@smartbit4all/ng-client 4.2.120 → 4.2.122

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.
@@ -168,11 +168,11 @@ export class SmartformComponent {
168
168
  return [];
169
169
  }
170
170
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartformComponent, deps: [{ token: i1.SmartFormService }, { token: COMPONENT_LIBRARY }], target: i0.ɵɵFactoryTarget.Component }); }
171
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SmartformComponent, selector: "smartform", inputs: { smartForm: "smartForm" }, providers: [SmartFormService], viewQueries: [{ propertyName: "smartWidgetsQL", predicate: SmartformwidgetComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<form *ngIf=\"smartForm\" (keydown)=\"keyDownFunction($event)\" [formGroup]=\"form\" class=\"flex form\">\r\n <h2 *ngIf=\"smartForm.name\">\r\n {{ smartForm.name }}\r\n </h2>\r\n <div [ngClass]=\"smartForm.direction === direction.ROW ? 'row' : 'col'\">\r\n <div *ngFor=\"let widget of smartForm.widgets\" class=\"item\">\r\n <smartformwidget\r\n *ngIf=\"widget.isVisible === undefined ? true : widget.isVisible\"\r\n [widgetInstance]=\"widget\"\r\n [form]=\"form\"\r\n class=\"grid-item\"\r\n [onBlur]=\"onBlurSubject\"\r\n [onValueChange]=\"onValueChangeSubject\"\r\n [sophisticatedValueChange]=\"sophisticatedValueChange\"\r\n class=\"{{ widget.key }}\"\r\n [labelColor]=\"smartForm.labelTheme\"\r\n (valueCleared)=\"submitForm(true)\"\r\n ></smartformwidget>\r\n </div>\r\n </div>\r\n</form>\r\n", styles: [".col{display:flex;flex-direction:column;gap:.25em}.row{display:flex;flex-wrap:wrap;gap:.25em}.grid-item{text-align:left}.item{flex:1}.item ::ng-deep .p-inputtext{width:100%!important;min-height:45px}.item ::ng-deep p-inputnumber,.item ::ng-deep .p-inputnumber{width:100%!important;height:45px!important}.item ::ng-deep .p-dropdown,.item ::ng-deep .p-multiselect{width:100%!important;height:45px!important}.item ::ng-deep p-overlay{z-index:1002}.item ::ng-deep .p-chips{width:100%!important;height:45px!important}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i4.SmartformwidgetComponent, selector: "smartformwidget", inputs: ["form", "widgetInstance", "onBlur", "onValueChange", "labelColor", "sophisticatedValueChange"], outputs: ["valueCleared"] }] }); }
171
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SmartformComponent, selector: "smartform", inputs: { smartForm: "smartForm" }, providers: [SmartFormService], viewQueries: [{ propertyName: "smartWidgetsQL", predicate: SmartformwidgetComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<form *ngIf=\"smartForm\" (keydown)=\"keyDownFunction($event)\" [formGroup]=\"form\" class=\"flex form\">\r\n <h2 *ngIf=\"smartForm.name\">\r\n {{ smartForm.name }}\r\n </h2>\r\n <div [ngClass]=\"smartForm.direction === direction.ROW ? 'row' : 'col'\">\r\n <div *ngFor=\"let widget of smartForm.widgets\" class=\"item\">\r\n <smartformwidget\r\n *ngIf=\"widget.isVisible === undefined ? true : widget.isVisible\"\r\n [widgetInstance]=\"widget\"\r\n [form]=\"form\"\r\n class=\"grid-item\"\r\n [onBlur]=\"onBlurSubject\"\r\n [onValueChange]=\"onValueChangeSubject\"\r\n [sophisticatedValueChange]=\"sophisticatedValueChange\"\r\n class=\"{{ widget.key }}\"\r\n [labelColor]=\"smartForm.labelTheme\"\r\n (valueCleared)=\"submitForm(true)\"\r\n ></smartformwidget>\r\n </div>\r\n </div>\r\n</form>\r\n", styles: [".col{display:flex;flex-direction:column;gap:.25em}.row{display:flex;flex-wrap:wrap;gap:.25em}.grid-item{text-align:left}.item{flex:1}.item ::ng-deep .p-inputtext{width:100%!important;min-height:45px}.item ::ng-deep p-inputnumber,.item ::ng-deep .p-inputnumber{width:100%!important;height:45px!important}.item ::ng-deep .p-dropdown,.item ::ng-deep .p-multiselect{width:100%!important}.item ::ng-deep p-overlay{z-index:1002}.item ::ng-deep .p-chips{width:100%!important;height:45px!important}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i4.SmartformwidgetComponent, selector: "smartformwidget", inputs: ["form", "widgetInstance", "onBlur", "onValueChange", "labelColor", "sophisticatedValueChange"], outputs: ["valueCleared"] }] }); }
172
172
  }
173
173
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartformComponent, decorators: [{
174
174
  type: Component,
175
- args: [{ selector: 'smartform', providers: [SmartFormService], template: "<form *ngIf=\"smartForm\" (keydown)=\"keyDownFunction($event)\" [formGroup]=\"form\" class=\"flex form\">\r\n <h2 *ngIf=\"smartForm.name\">\r\n {{ smartForm.name }}\r\n </h2>\r\n <div [ngClass]=\"smartForm.direction === direction.ROW ? 'row' : 'col'\">\r\n <div *ngFor=\"let widget of smartForm.widgets\" class=\"item\">\r\n <smartformwidget\r\n *ngIf=\"widget.isVisible === undefined ? true : widget.isVisible\"\r\n [widgetInstance]=\"widget\"\r\n [form]=\"form\"\r\n class=\"grid-item\"\r\n [onBlur]=\"onBlurSubject\"\r\n [onValueChange]=\"onValueChangeSubject\"\r\n [sophisticatedValueChange]=\"sophisticatedValueChange\"\r\n class=\"{{ widget.key }}\"\r\n [labelColor]=\"smartForm.labelTheme\"\r\n (valueCleared)=\"submitForm(true)\"\r\n ></smartformwidget>\r\n </div>\r\n </div>\r\n</form>\r\n", styles: [".col{display:flex;flex-direction:column;gap:.25em}.row{display:flex;flex-wrap:wrap;gap:.25em}.grid-item{text-align:left}.item{flex:1}.item ::ng-deep .p-inputtext{width:100%!important;min-height:45px}.item ::ng-deep p-inputnumber,.item ::ng-deep .p-inputnumber{width:100%!important;height:45px!important}.item ::ng-deep .p-dropdown,.item ::ng-deep .p-multiselect{width:100%!important;height:45px!important}.item ::ng-deep p-overlay{z-index:1002}.item ::ng-deep .p-chips{width:100%!important;height:45px!important}\n"] }]
175
+ args: [{ selector: 'smartform', providers: [SmartFormService], template: "<form *ngIf=\"smartForm\" (keydown)=\"keyDownFunction($event)\" [formGroup]=\"form\" class=\"flex form\">\r\n <h2 *ngIf=\"smartForm.name\">\r\n {{ smartForm.name }}\r\n </h2>\r\n <div [ngClass]=\"smartForm.direction === direction.ROW ? 'row' : 'col'\">\r\n <div *ngFor=\"let widget of smartForm.widgets\" class=\"item\">\r\n <smartformwidget\r\n *ngIf=\"widget.isVisible === undefined ? true : widget.isVisible\"\r\n [widgetInstance]=\"widget\"\r\n [form]=\"form\"\r\n class=\"grid-item\"\r\n [onBlur]=\"onBlurSubject\"\r\n [onValueChange]=\"onValueChangeSubject\"\r\n [sophisticatedValueChange]=\"sophisticatedValueChange\"\r\n class=\"{{ widget.key }}\"\r\n [labelColor]=\"smartForm.labelTheme\"\r\n (valueCleared)=\"submitForm(true)\"\r\n ></smartformwidget>\r\n </div>\r\n </div>\r\n</form>\r\n", styles: [".col{display:flex;flex-direction:column;gap:.25em}.row{display:flex;flex-wrap:wrap;gap:.25em}.grid-item{text-align:left}.item{flex:1}.item ::ng-deep .p-inputtext{width:100%!important;min-height:45px}.item ::ng-deep p-inputnumber,.item ::ng-deep .p-inputnumber{width:100%!important;height:45px!important}.item ::ng-deep .p-dropdown,.item ::ng-deep .p-multiselect{width:100%!important}.item ::ng-deep p-overlay{z-index:1002}.item ::ng-deep .p-chips{width:100%!important;height:45px!important}\n"] }]
176
176
  }], ctorParameters: () => [{ type: i1.SmartFormService }, { type: i5.ComponentLibrary, decorators: [{
177
177
  type: Inject,
178
178
  args: [COMPONENT_LIBRARY]
@@ -1,6 +1,6 @@
1
1
  import { Component, EventEmitter, Inject, Input, Optional, Output, ViewChild, } from '@angular/core';
2
2
  import { SmartStyleUtility } from '../../../../view-context/utility/smart-style-utility';
3
- import { IconPosition, } from '../../../../view-context/api/model/models';
3
+ import { IconPosition, UiActionButtonType, } from '../../../../view-context/api/model/models';
4
4
  import { COMPONENT_LIBRARY, ComponentLibrary, } from '../../../../view-context/utility/componentLibrary';
5
5
  import { UploadWidgetUtils } from '../../../../view-context/smart-ui-action/components/upload-widget/upload-widget.utils';
6
6
  import * as i0 from "@angular/core";
@@ -94,16 +94,14 @@ export class SmartFileEditorComponent {
94
94
  var changeAction = this.widgetInstance.fileUploaderProperties?.changeAction;
95
95
  if (!changeAction) {
96
96
  changeAction = this.widgetInstance.fileUploaderProperties.uploadAction;
97
- changeAction.descriptor.icon =
98
- this.compLib == ComponentLibrary.PRIMENG ? 'sync' : 'sync_alt';
99
97
  changeAction.descriptor.title = '';
100
98
  }
101
99
  return {
102
- title: changeAction.descriptor.title,
103
- color: changeAction.descriptor.color,
104
- type: changeAction.descriptor.type,
105
- icon: changeAction.descriptor.icon,
106
- iconPosition: changeAction.descriptor.iconPosition,
100
+ title: changeAction.descriptor?.title ?? '',
101
+ color: changeAction.descriptor?.color ?? 'primary',
102
+ type: changeAction.descriptor?.type ?? UiActionButtonType.ICON,
103
+ icon: this.compLib == ComponentLibrary.PRIMENG ? 'sync' : 'sync_alt',
104
+ iconPosition: changeAction.descriptor?.iconPosition,
107
105
  };
108
106
  }
109
107
  get removeButton() {
@@ -142,4 +140,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
142
140
  }], uploadFilesEvent: [{
143
141
  type: Output
144
142
  }] } });
145
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtZmlsZS1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtZm9ybS93aWRnZXRzL2NvbXBvbmVudHMvc21hcnQtZmlsZS1lZGl0b3Ivc21hcnQtZmlsZS1lZGl0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtZm9ybS93aWRnZXRzL2NvbXBvbmVudHMvc21hcnQtZmlsZS1lZGl0b3Ivc21hcnQtZmlsZS1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsR0FFVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUN6RixPQUFPLEVBQ0wsWUFBWSxHQUliLE1BQU0sMkNBQTJDLENBQUM7QUFDbkQsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixnQkFBZ0IsR0FDakIsTUFBTSxtREFBbUQsQ0FBQztBQUczRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1RkFBdUYsQ0FBQzs7Ozs7Ozs7QUFNMUgsTUFBTSxPQUFPLHdCQUF3QjtJQWFuQyxZQUEwRCxPQUEwQjtRQUExQixZQUFPLEdBQVAsT0FBTyxDQUFtQjtRQVIxRSxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFJekMsQ0FBQztRQUNMLG1CQUFjLEdBQW9CLEVBQUUsQ0FBQztJQUdrRCxDQUFDO0lBRXhGLFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxzQkFBc0IsRUFBRSxRQUFRLEVBQUUsQ0FBQztZ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RyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ3JDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsc0JBQXNCLEVBQUUsUUFBUSxDQUFDO1FBRXBFLE9BQU87WUFDTCxLQUFLLEVBQUUsRUFBRTtZQUNULEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSztZQUN6QixJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUk7WUFDdkIsWUFBWSxFQUFFLFFBQVE7WUFDdEIsWUFBWSxFQUFFLFlBQVksQ0FBQyxHQUFHO1NBQy9CLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsT0FBTyxJQUFJLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUNuRixDQUFDO0lBQ0QsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7K0dBM0lVLHdCQUF3QixrQkFhZixpQkFBaUI7bUdBYjFCLHdCQUF3Qiw4UEMvQnJDLDh3RUFpRUE7OzRGRGxDYSx3QkFBd0I7a0JBTHBDLFNBQVM7K0JBQ0UsbUJBQW1COzswQkFpQmhCLE1BQU07MkJBQUMsaUJBQWlCOzswQkFBRyxRQUFRO3lDQVoxQixPQUFPO3NCQUE1QixTQUFTO3VCQUFDLFNBQVM7Z0JBRVgsY0FBYztzQkFBdEIsS0FBSztnQkFFSSxnQkFBZ0I7c0JBQXpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPcHRpb25hbCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTbWFydEZpbGVVcGxvYWRlciB9IGZyb20gJy4uLy4uLy4uL3NtYXJ0Zm9ybS5mb3JtLW1vZGVsJztcclxuaW1wb3J0IHsgU21hcnRTdHlsZVV0aWxpdHkgfSBmcm9tICcuLi8uLi8uLi8uLi92aWV3LWNvbnRleHQvdXRpbGl0eS9zbWFydC1zdHlsZS11dGlsaXR5JztcclxuaW1wb3J0IHtcclxuICBJY29uUG9zaXRpb24sXHJcbiAgVWlBY3Rpb24sXHJcbiAgVWlBY3Rpb25EZXNjcmlwdG9yLFxyXG4gIFVpQWN0aW9uVXBsb2FkRGVzY3JpcHRvcixcclxufSBmcm9tICcuLi8uLi8uLi8uLi92aWV3LWNvbnRleHQvYXBpL21vZGVsL21vZGVscyc7XHJcbmltcG9ydCB7XHJcbiAgQ09NUE9ORU5UX0xJQlJBUlksXHJcbiAgQ29tcG9uZW50TGlicmFyeSxcclxufSBmcm9tICcuLi8uLi8uLi8uLi92aWV3LWNvbnRleHQvdXRpbGl0eS9jb21wb25lbnRMaWJyYXJ5JztcclxuaW1wb3J0IHsgVWlBY3Rpb25Nb2RlbCB9IGZyb20gJy4uLy4uLy4uLy4uL3ZpZXctY29udGV4dC9zbWFydC11aS1hY3Rpb24vdWktYWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgVWlBY3Rpb25Ub29sYmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vdmlldy1jb250ZXh0L3NtYXJ0LXVpLWFjdGlvbi91aS1hY3Rpb24tdG9vbGJhci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBVcGxvYWRXaWRnZXRVdGlscyB9IGZyb20gJy4uLy4uLy4uLy4uL3ZpZXctY29udGV4dC9zbWFydC11aS1hY3Rpb24vY29tcG9uZW50cy91cGxvYWQtd2lkZ2V0L3VwbG9hZC13aWRnZXQudXRpbHMnO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NtYXJ0LWZpbGUtZWRpdG9yJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc21hcnQtZmlsZS1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9zbWFydC1maWxlLWVkaXRvci5jb21wb25lbnQuY3NzJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYXJ0RmlsZUVkaXRvckNvbXBvbmVudCB7XHJcbiAgQFZpZXdDaGlsZCgndG9vbGJhcicpIHRvb2xiYXIhOiBVaUFjdGlvblRvb2xiYXJDb21wb25lbnQ7XHJcblxyXG4gIEBJbnB1dCgpIHdpZGdldEluc3RhbmNlITogU21hcnRGaWxlVXBsb2FkZXI7XHJcblxyXG4gIEBPdXRwdXQoKSB1cGxvYWRGaWxlc0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx7XHJcbiAgICBmaWxlczogYW55W107XHJcbiAgICB1aUFjdGlvbjogVWlBY3Rpb247XHJcbiAgICB1cGxvYWREZXNjcmlwdG9yPzogVWlBY3Rpb25VcGxvYWREZXNjcmlwdG9yO1xyXG4gIH0+KCk7XHJcbiAgdWlBY3Rpb25Nb2RlbHM6IFVpQWN0aW9uTW9kZWxbXSA9IFtdO1xyXG4gIGZpbGVUb0NoYW5nZT86IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoQEluamVjdChDT01QT05FTlRfTElCUkFSWSkgQE9wdGlvbmFsKCkgcHVibGljIGNvbXBMaWI/OiBDb21wb25lbnRMaWJyYXJ5KSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICghdGhpcy53aWRnZXRJbnN0YW5jZS5maWxlVXBsb2FkZXJQcm9wZXJ0aWVzPy51bmRvSWNvbikge1xyXG4gICAgICB0aGlzLndpZGdldEluc3RhbmNlIS5maWxlVXBsb2FkZXJQcm9wZXJ0aWVzIS51bmRvSWNvbiA9IHtcclxuICAgICAgICBpZGVudGlmaWVyOiAndW5kbycsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGxvYWQoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmZpbGVUb0NoYW5nZSkge1xyXG4gICAgICB0aGlzLnVwbG9hZEZpbGVzRXZlbnQuZW1pdCh7XHJcbiAgICAgICAgZmlsZXM6IGV2ZW50LmZpbGVzLFxyXG4gICAgICAgIHVpQWN0aW9uOiB0aGlzLndpZGdldEluc3RhbmNlLmZpbGVVcGxvYWRlclByb3BlcnRpZXMhLnVwbG9hZEFjdGlvbiEsXHJcbiAgICAgICAgdXBsb2FkRGVzY3JpcHRvcjogZXZlbnQudXBsb2FkRGVzY3JpcHRvcixcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB2YXIgY2hhbmdlQWN0aW9uID0gdGhpcy53aWRnZXRJbnN0YW5jZS5maWxlVXBsb2FkZXJQcm9wZXJ0aWVzPy5jaGFuZ2VBY3Rpb247XHJcbiAgICAgIGlmICghY2hhbmdlQWN0aW9uKSB7XHJcbiAgICAgICAgY2hhbmdlQWN0aW9uID0gdGhpcy53aWRnZXRJbnN0YW5jZS5maWxlVXBsb2FkZXJQcm9wZXJ0aWVzPy51cGxvYWRBY3Rpb247XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMudXBsb2FkRmlsZXNFdmVudC5lbWl0KHtcclxuICAgICAgICBmaWxlczogZXZlbnQuZmlsZXMsXHJcbiAgICAgICAgdWlBY3Rpb246IGNoYW5nZUFjdGlvbiEsXHJcbiAgICAgICAgdXBsb2FkRGVzY3JpcHRvcjogZXZlbnQudXBsb2FkRGVzY3JpcHRvcixcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2UoZmlsZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbGVUb0NoYW5nZSA9IGZpbGU7XHJcbiAgfVxyXG5cclxuICBjYW5jZWxDaGFuZ2UoKSB7XHJcbiAgICB0aGlzLmZpbGVUb0NoYW5nZSA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIGdldExhYmVsTmdDbGFzcygpOiB7IFtjbGFzc05hbWU6IHN0cmluZ106IGJvb2xlYW4gfSB7XHJcbiAgICBpZiAoJ2xhYmVsU3R5bGUnIGluIHRoaXMud2lkZ2V0SW5zdGFuY2UpIHtcclxuICAgICAgcmV0dXJuIFNtYXJ0U3R5bGVVdGlsaXR5LmdldE5nQ2xhc3Nlcyh0aGlzLndpZGdldEluc3RhbmNlLmxhYmVsU3R5bGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7fTtcclxuICB9XHJcblxyXG4gIGdldExhYmVsU3R5bGUoKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfSB7XHJcbiAgICBpZiAoJ2xhYmVsU3R5bGUnIGluIHRoaXMud2lkZ2V0SW5zdGFuY2UpIHtcclxuICAgICAgcmV0dXJuIFNtYXJ0U3R5bGVVdGlsaXR5LmdldE5nU3R5bGVzKHRoaXMud2lkZ2V0SW5zdGFuY2UubGFiZWxTdHlsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHt9O1xyXG4gIH1cclxuICBnZXROZ0NsYXNzKCk6IHsgW2NsYXNzTmFtZTogc3RyaW5nXTogYm9vbGVhbiB9IHtcclxuICAgIHJldHVybiBTbWFydFN0eWxlVXRpbGl0eS5nZXROZ0NsYXNzZXModGhpcy53aWRnZXRJbnN0YW5jZS5zdHlsZSk7XHJcbiAgfVxyXG5cclxuICBnZXRTdHlsZSgpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB9IHtcclxuICAgIGlmICghdGhpcy53aWRnZXRJbnN0YW5jZS5zdHlsZSkge1xyXG4gICAgICB0aGlzLndpZGdldEluc3RhbmNlLnN0eWxlID0ge1xyXG4gICAgICAgIGNsYXNzZXNUb0FkZDogW10sXHJcbiAgICAgICAgY2xhc3Nlc1RvUmVtb3ZlOiBbXSxcclxuICAgICAgICBzdHlsZToge30sXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCEoJ3dpZHRoJyBpbiB0aGlzLndpZGdldEluc3RhbmNlLnN0eWxlLnN0eWxlKSAmJiAnbWluV2lkdGgnIGluIHRoaXMud2lkZ2V0SW5zdGFuY2UpIHtcclxuICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS5zdHlsZS5zdHlsZVsnd2lkdGgnXSA9IGAke3RoaXMud2lkZ2V0SW5zdGFuY2UubWluV2lkdGh9cHhgO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFNtYXJ0U3R5bGVVdGlsaXR5LmdldE5nU3R5bGVzKHRoaXMud2lkZ2V0SW5zdGFuY2Uuc3R5bGUpO1xyXG4gIH1cclxuXHJcbiAgaXNUeXBlU3VwcG9ydGVkKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmICghdmFsdWUgfHwgISgnZGF0YVVyaScgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBmb3JtYXRTaXplKGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFVwbG9hZFdpZGdldFV0aWxzLmZvcm1hdFNpemUoYnl0ZXMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZpbGVJY29uKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5jb21wTGliID09IENvbXBvbmVudExpYnJhcnkuUFJJTUVORyA/ICdmaWxlJyA6ICdpbnNlcnRfZHJpdmVfZmlsZSc7XHJcbiAgfVxyXG5cclxuICBnZXQgY2hhbmdlQnV0dG9uKCk6IFVpQWN0aW9uRGVzY3JpcHRvciB7XHJcbiAgICB2YXIgY2hhbmdlQWN0aW9uID0gdGhpcy53aWRnZXRJbnN0YW5jZS5maWxlVXBsb2FkZXJQcm9wZXJ0aWVzPy5jaGFuZ2VBY3Rpb247XHJcblxyXG4gICAgaWYgKCFjaGFuZ2VBY3Rpb24pIHtcclxuICAgICAgY2hhbmdlQWN0aW9uID0gdGhpcy53aWRnZXRJbnN0YW5jZS5maWxlVXBsb2FkZXJQcm9wZXJ0aWVzIS51cGxvYWRBY3Rpb24hO1xyXG4gICAgICBjaGFuZ2VBY3Rpb24uZGVzY3JpcHRvciEuaWNvbiA9XHJcbiAgICAgICAgdGhpcy5jb21wTGliID09IENvbXBvbmVudExpYnJhcnkuUFJJTUVORyA/ICdzeW5jJyA6ICdzeW5jX2FsdCc7XHJcbiAgICAgIGNoYW5nZUFjdGlvbi5kZXNjcmlwdG9yIS50aXRsZSA9ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHRpdGxlOiBjaGFuZ2VBY3Rpb24uZGVzY3JpcHRvciEudGl0bGUsXHJcbiAgICAgIGNvbG9yOiBjaGFuZ2VBY3Rpb24uZGVzY3JpcHRvciEuY29sb3IsXHJcbiAgICAgIHR5cGU6IGNoYW5nZUFjdGlvbi5kZXNjcmlwdG9yIS50eXBlLFxyXG4gICAgICBpY29uOiBjaGFuZ2VBY3Rpb24uZGVzY3JpcHRvciEuaWNvbixcclxuICAgICAgaWNvblBvc2l0aW9uOiBjaGFuZ2VBY3Rpb24uZGVzY3JpcHRvciEuaWNvblBvc2l0aW9uLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGdldCByZW1vdmVCdXR0b24oKTogVWlBY3Rpb25EZXNjcmlwdG9yIHtcclxuICAgIHZhciBjaGFuZ2VCdXR0b24gPSB0aGlzLmNoYW5nZUJ1dHRvbjtcclxuICAgIHZhciB1bmRvSWNvbiA9IHRoaXMud2lkZ2V0SW5zdGFuY2UuZmlsZVVwbG9hZGVyUHJvcGVydGllcz8udW5kb0ljb247XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdGl0bGU6ICcnLFxyXG4gICAgICBjb2xvcjogY2hhbmdlQnV0dG9uLmNvbG9yLFxyXG4gICAgICB0eXBlOiBjaGFuZ2VCdXR0b24udHlwZSxcclxuICAgICAgaWNvblJlc291cmNlOiB1bmRvSWNvbixcclxuICAgICAgaWNvblBvc2l0aW9uOiBJY29uUG9zaXRpb24uUFJFLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGdldCBlcnJvckljb24oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmNvbXBMaWIgPT0gQ29tcG9uZW50TGlicmFyeS5QUklNRU5HID8gJ2V4Y2xhbWF0aW9uLWNpcmNsZScgOiAnZXJyb3InO1xyXG4gIH1cclxuICBnZXQgdG9vbGJhckNvbXBvbmVudCgpOiBVaUFjdGlvblRvb2xiYXJDb21wb25lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudG9vbGJhcjtcclxuICB9XHJcbn1cclxuIiwiQGlmKCB3aWRnZXRJbnN0YW5jZS5maWxlVXBsb2FkZXJQcm9wZXJ0aWVzKXtcclxuPGg0XHJcbiAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5zaG93TGFiZWxcIlxyXG4gIGNsYXNzPVwibGFiZWxDb250YWluZXIge3sgd2lkZ2V0SW5zdGFuY2UuY3NzTGFiZWxDbGFzcyA/PyAnJyB9fVwiXHJcbiAgW25nQ2xhc3NdPVwiZ2V0TGFiZWxOZ0NsYXNzKClcIlxyXG4gIFtuZ1N0eWxlXT1cImdldExhYmVsU3R5bGUoKVwiXHJcbj5cclxuICB7eyB3aWRnZXRJbnN0YW5jZS5sYWJlbCB9fVxyXG48L2g0PlxyXG5cclxuPGRpdiBjbGFzcz1cImZpbGVFZGl0b3JDb21wb25lbnRcIj5cclxuICBAaWYgKHdpZGdldEluc3RhbmNlLnZhbHVlICYmICFpc1R5cGVTdXBwb3J0ZWQod2lkZ2V0SW5zdGFuY2UudmFsdWUpKSB7XHJcbiAgPGRpdiBjbGFzcz1cImVycm9yTWVzc2FnZVwiPlxyXG4gICAgPHNtYXJ0LWljb24gW2ljb25dPVwiZXJyb3JJY29uXCIgW2NvbG9yXT1cIid2YXIoLS13YXJuaW5pZy1jb2xvciknXCI+PC9zbWFydC1pY29uPlxyXG4gICAgPHNwYW4+IFdpZGdldCB2YWx1ZSB0eXBlIGlzIHVuc3VwcG9ydGVkPC9zcGFuPlxyXG4gIDwvZGl2PlxyXG4gIH0gQGVsc2UgaWYoIXdpZGdldEluc3RhbmNlLnZhbHVlIHx8IGZpbGVUb0NoYW5nZSApIHtcclxuICA8c21hcnQtdXBsb2FkLXdpZGdldFxyXG4gICAgY2xhc3M9XCJ3aWRnZXRDb250ZW50IHt7IHdpZGdldEluc3RhbmNlLmNzc0NsYXNzID8/ICcnIH19XCJcclxuICAgIFtuZ0NsYXNzXT1cImdldE5nQ2xhc3MoKVwiXHJcbiAgICBbbmdTdHlsZV09XCJnZXRTdHlsZSgpXCJcclxuICAgIFt1cGxvYWREZXNjcmlwdG9yXT1cIndpZGdldEluc3RhbmNlLmZpbGVVcGxvYWRlclByb3BlcnRpZXMudXBsb2FkRGVzY3JpcHRvciFcIlxyXG4gICAgW2lzTXVsdGlwbGVdPVwid2lkZ2V0SW5zdGFuY2UuZmlsZVVwbG9hZGVyUHJvcGVydGllcy5pc011bHRpcGxlID8/IHRydWVcIlxyXG4gICAgW2F1dG9VcGxvYWRdPVwidHJ1ZVwiXHJcbiAgICAodXBsb2FkRmlsZXNFdmVudCk9XCJ1cGxvYWQoJGV2ZW50KVwiXHJcbiAgLz5cclxuICB9IEBpZiAod2lkZ2V0SW5zdGFuY2UudmFsdWUgJiYgaXNUeXBlU3VwcG9ydGVkKHdpZGdldEluc3RhbmNlLnZhbHVlKSkge1xyXG4gIDxkaXYgY2xhc3M9XCJ1cGxvYWRlZEZpbGVDb250YWluZXJcIj5cclxuICAgIDxuZy1jb250YWluZXJcclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWxlUm93OyBjb250ZXh0OiB7IGZpbGU6IHdpZGdldEluc3RhbmNlLnZhbHVlIH1cIlxyXG4gICAgPjwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG4gIH1cclxuPC9kaXY+XHJcbn1cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZmlsZVJvdyBsZXQtZmlsZT1cImZpbGVcIiBsZXQtaT1cImluZGV4XCI+XHJcbiAgPGRpdiBjbGFzcz1cInVwbG9hZGVkRmlsZVwiPlxyXG4gICAgPHNtYXJ0LWljb24gY2xhc3M9XCJ1cGxvYWRlZEZpbGVJY29uXCIgW2ljb25dPVwiZmlsZUljb25cIj48L3NtYXJ0LWljb24+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImZpbGVEYXRhXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWxlRGF0YUNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZmlsZU5hbWVcIj57eyBmaWxlLmZpbGVOYW1lIH19PC9zcGFuPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZmlsZVNpemVcIj57eyBmb3JtYXRTaXplKGZpbGUuc2l6ZSkgfX08L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImZpbGVBY3Rpb25zXCI+XHJcbiAgICAgIDxzbWFydC11aS1hY3Rpb24tdG9vbGJhciBbaWRdPVwid2lkZ2V0SW5zdGFuY2UudG9vbGJhcklkXCIgI3Rvb2xiYXI+IDwvc21hcnQtdWktYWN0aW9uLXRvb2xiYXI+XHJcblxyXG4gICAgICBAaWYoIWZpbGVUb0NoYW5nZSl7XHJcbiAgICAgIDx1aS1hY3Rpb24tYnV0dG9uIChhY3Rpb25DbGljayk9XCJjaGFuZ2UoZmlsZSlcIiBbZGVzY3JpcHRvcl09XCJjaGFuZ2VCdXR0b25cIj5cclxuICAgICAgPC91aS1hY3Rpb24tYnV0dG9uPlxyXG4gICAgICB9IEBlbHNlIHtcclxuICAgICAgPHVpLWFjdGlvbi1idXR0b25cclxuICAgICAgICBjbGFzcz1cInJlbW92ZUljb25cIlxyXG4gICAgICAgIChhY3Rpb25DbGljayk9XCJjYW5jZWxDaGFuZ2UoKVwiXHJcbiAgICAgICAgW2Rlc2NyaXB0b3JdPVwicmVtb3ZlQnV0dG9uXCJcclxuICAgICAgPlxyXG4gICAgICA8L3VpLWFjdGlvbi1idXR0b24+XHJcblxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtZmlsZS1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtZm9ybS93aWRnZXRzL2NvbXBvbmVudHMvc21hcnQtZmlsZS1lZGl0b3Ivc21hcnQtZmlsZS1lZGl0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtZm9ybS93aWRnZXRzL2NvbXBvbmVudHMvc21hcnQtZmlsZS1lZGl0b3Ivc21hcnQtZmlsZS1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsR0FFVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUN6RixPQUFPLEVBQ0wsWUFBWSxFQUVaLGtCQUFrQixHQUduQixNQUFNLDJDQUEyQyxDQUFDO0FBQ25ELE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsZ0JBQWdCLEdBQ2pCLE1BQU0sbURBQW1ELENBQUM7QUFHM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUZBQXVGLENBQUM7Ozs7Ozs7O0FBTTFILE1BQU0sT0FBTyx3QkFBd0I7SUFhbkMsWUFBMEQsT0FBMEI7UUFBMUIsWUFBTyxHQUFQLE9BQU8sQ0FBbUI7UUFSMUUscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBSXpDLENBQUM7UUFDTCxtQkFBYyxHQUFvQixFQUFFLENBQUM7SUFHa0QsQ0FBQztJQUV4RixRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsc0JBQXNCLEVBQUUsUUFB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QUFZLENBQUM7UUFDckMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxzQkFBc0IsRUFBRSxRQUFRLENBQUM7UUFFcEUsT0FBTztZQUNMLEtBQUssRUFBRSxFQUFFO1lBQ1QsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLO1lBQ3pCLElBQUksRUFBRSxZQUFZLENBQUMsSUFBSTtZQUN2QixZQUFZLEVBQUUsUUFBUTtZQUN0QixZQUFZLEVBQUUsWUFBWSxDQUFDLEdBQUc7U0FDL0IsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxPQUFPLElBQUksZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ25GLENBQUM7SUFDRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQzsrR0F6SVUsd0JBQXdCLGtCQWFmLGlCQUFpQjttR0FiMUIsd0JBQXdCLDhQQ2hDckMsOHdFQWlFQTs7NEZEakNhLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDRSxtQkFBbUI7OzBCQWlCaEIsTUFBTTsyQkFBQyxpQkFBaUI7OzBCQUFHLFFBQVE7eUNBWjFCLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUztnQkFFWCxjQUFjO3NCQUF0QixLQUFLO2dCQUVJLGdCQUFnQjtzQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE9wdGlvbmFsLFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNtYXJ0RmlsZVVwbG9hZGVyIH0gZnJvbSAnLi4vLi4vLi4vc21hcnRmb3JtLmZvcm0tbW9kZWwnO1xyXG5pbXBvcnQgeyBTbWFydFN0eWxlVXRpbGl0eSB9IGZyb20gJy4uLy4uLy4uLy4uL3ZpZXctY29udGV4dC91dGlsaXR5L3NtYXJ0LXN0eWxlLXV0aWxpdHknO1xyXG5pbXBvcnQge1xyXG4gIEljb25Qb3NpdGlvbixcclxuICBVaUFjdGlvbixcclxuICBVaUFjdGlvbkJ1dHRvblR5cGUsXHJcbiAgVWlBY3Rpb25EZXNjcmlwdG9yLFxyXG4gIFVpQWN0aW9uVXBsb2FkRGVzY3JpcHRvcixcclxufSBmcm9tICcuLi8uLi8uLi8uLi92aWV3LWNvbnRleHQvYXBpL21vZGVsL21vZGVscyc7XHJcbmltcG9ydCB7XHJcbiAgQ09NUE9ORU5UX0xJQlJBUlksXHJcbiAgQ29tcG9uZW50TGlicmFyeSxcclxufSBmcm9tICcuLi8uLi8uLi8uLi92aWV3LWNvbnRleHQvdXRpbGl0eS9jb21wb25lbnRMaWJyYXJ5JztcclxuaW1wb3J0IHsgVWlBY3Rpb25Nb2RlbCB9IGZyb20gJy4uLy4uLy4uLy4uL3ZpZXctY29udGV4dC9zbWFydC11aS1hY3Rpb24vdWktYWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgVWlBY3Rpb25Ub29sYmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vdmlldy1jb250ZXh0L3NtYXJ0LXVpLWFjdGlvbi91aS1hY3Rpb24tdG9vbGJhci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBVcGxvYWRXaWRnZXRVdGlscyB9IGZyb20gJy4uLy4uLy4uLy4uL3ZpZXctY29udGV4dC9zbWFydC11aS1hY3Rpb24vY29tcG9uZW50cy91cGxvYWQtd2lkZ2V0L3VwbG9hZC13aWRnZXQudXRpbHMnO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NtYXJ0LWZpbGUtZWRpdG9yJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc21hcnQtZmlsZS1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9zbWFydC1maWxlLWVkaXRvci5jb21wb25lbnQuY3NzJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYXJ0RmlsZUVkaXRvckNvbXBvbmVudCB7XHJcbiAgQFZpZXdDaGlsZCgndG9vbGJhcicpIHRvb2xiYXIhOiBVaUFjdGlvblRvb2xiYXJDb21wb25lbnQ7XHJcblxyXG4gIEBJbnB1dCgpIHdpZGdldEluc3RhbmNlITogU21hcnRGaWxlVXBsb2FkZXI7XHJcblxyXG4gIEBPdXRwdXQoKSB1cGxvYWRGaWxlc0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx7XHJcbiAgICBmaWxlczogYW55W107XHJcbiAgICB1aUFjdGlvbjogVWlBY3Rpb247XHJcbiAgICB1cGxvYWREZXNjcmlwdG9yPzogVWlBY3Rpb25VcGxvYWREZXNjcmlwdG9yO1xyXG4gIH0+KCk7XHJcbiAgdWlBY3Rpb25Nb2RlbHM6IFVpQWN0aW9uTW9kZWxbXSA9IFtdO1xyXG4gIGZpbGVUb0NoYW5nZT86IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoQEluamVjdChDT01QT05FTlRfTElCUkFSWSkgQE9wdGlvbmFsKCkgcHVibGljIGNvbXBMaWI/OiBDb21wb25lbnRMaWJyYXJ5KSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICghdGhpcy53aWRnZXRJbnN0YW5jZS5maWxlVXBsb2FkZXJQcm9wZXJ0aWVzPy51bmRvSWNvbikge1xyXG4gICAgICB0aGlzLndpZGdldEluc3RhbmNlIS5maWxlVXBsb2FkZXJQcm9wZXJ0aWVzIS51bmRvSWNvbiA9IHtcclxuICAgICAgICBpZGVudGlmaWVyOiAndW5kbycsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGxvYWQoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmZpbGVUb0NoYW5nZSkge1xyXG4gICAgICB0aGlzLnVwbG9hZEZpbGVzRXZlbnQuZW1pdCh7XHJcbiAgICAgICAgZmlsZXM6IGV2ZW50LmZpbGVzLFxyXG4gICAgICAgIHVpQWN0aW9uOiB0aGlzLndpZGdldEluc3RhbmNlLmZpbGVVcGxvYWRlclByb3BlcnRpZXMhLnVwbG9hZEFjdGlvbiEsXHJcbiAgICAgICAgdXBsb2FkRGVzY3JpcHRvcjogZXZlbnQudXBsb2FkRGVzY3JpcHRvcixcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB2YXIgY2hhbmdlQWN0aW9uID0gdGhpcy53aWRnZXRJbnN0YW5jZS5maWxlVXBsb2FkZXJQcm9wZXJ0aWVzPy5jaGFuZ2VBY3Rpb247XHJcbiAgICAgIGlmICghY2hhbmdlQWN0aW9uKSB7XHJcbiAgICAgICAgY2hhbmdlQWN0aW9uID0gdGhpcy53aWRnZXRJbnN0YW5jZS5maWxlVXBsb2FkZXJQcm9wZXJ0aWVzPy51cGxvYWRBY3Rpb247XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMudXBsb2FkRmlsZXNFdmVudC5lbWl0KHtcclxuICAgICAgICBmaWxlczogZXZlbnQuZmlsZXMsXHJcbiAgICAgICAgdWlBY3Rpb246IGNoYW5nZUFjdGlvbiEsXHJcbiAgICAgICAgdXBsb2FkRGVzY3JpcHRvcjogZXZlbnQudXBsb2FkRGVzY3JpcHRvcixcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2UoZmlsZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbGVUb0NoYW5nZSA9IGZpbGU7XHJcbiAgfVxyXG5cclxuICBjYW5jZWxDaGFuZ2UoKSB7XHJcbiAgICB0aGlzLmZpbGVUb0NoYW5nZSA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIGdldExhYmVsTmdDbGFzcygpOiB7IFtjbGFzc05hbWU6IHN0cmluZ106IGJvb2xlYW4gfSB7XHJcbiAgICBpZiAoJ2xhYmVsU3R5bGUnIGluIHRoaXMud2lkZ2V0SW5zdGFuY2UpIHtcclxuICAgICAgcmV0dXJuIFNtYXJ0U3R5bGVVdGlsaXR5LmdldE5nQ2xhc3Nlcyh0aGlzLndpZGdldEluc3RhbmNlLmxhYmVsU3R5bGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7fTtcclxuICB9XHJcblxyXG4gIGdldExhYmVsU3R5bGUoKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfSB7XHJcbiAgICBpZiAoJ2xhYmVsU3R5bGUnIGluIHRoaXMud2lkZ2V0SW5zdGFuY2UpIHtcclxuICAgICAgcmV0dXJuIFNtYXJ0U3R5bGVVdGlsaXR5LmdldE5nU3R5bGVzKHRoaXMud2lkZ2V0SW5zdGFuY2UubGFiZWxTdHlsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHt9O1xyXG4gIH1cclxuICBnZXROZ0NsYXNzKCk6IHsgW2NsYXNzTmFtZTogc3RyaW5nXTogYm9vbGVhbiB9IHtcclxuICAgIHJldHVybiBTbWFydFN0eWxlVXRpbGl0eS5nZXROZ0NsYXNzZXModGhpcy53aWRnZXRJbnN0YW5jZS5zdHlsZSk7XHJcbiAgfVxyXG5cclxuICBnZXRTdHlsZSgpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB9IHtcclxuICAgIGlmICghdGhpcy53aWRnZXRJbnN0YW5jZS5zdHlsZSkge1xyXG4gICAgICB0aGlzLndpZGdldEluc3RhbmNlLnN0eWxlID0ge1xyXG4gICAgICAgIGNsYXNzZXNUb0FkZDogW10sXHJcbiAgICAgICAgY2xhc3Nlc1RvUmVtb3ZlOiBbXSxcclxuICAgICAgICBzdHlsZToge30sXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCEoJ3dpZHRoJyBpbiB0aGlzLndpZGdldEluc3RhbmNlLnN0eWxlLnN0eWxlKSAmJiAnbWluV2lkdGgnIGluIHRoaXMud2lkZ2V0SW5zdGFuY2UpIHtcclxuICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS5zdHlsZS5zdHlsZVsnd2lkdGgnXSA9IGAke3RoaXMud2lkZ2V0SW5zdGFuY2UubWluV2lkdGh9cHhgO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFNtYXJ0U3R5bGVVdGlsaXR5LmdldE5nU3R5bGVzKHRoaXMud2lkZ2V0SW5zdGFuY2Uuc3R5bGUpO1xyXG4gIH1cclxuXHJcbiAgaXNUeXBlU3VwcG9ydGVkKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmICghdmFsdWUgfHwgISgnZGF0YVVyaScgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBmb3JtYXRTaXplKGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFVwbG9hZFdpZGdldFV0aWxzLmZvcm1hdFNpemUoYnl0ZXMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZpbGVJY29uKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5jb21wTGliID09IENvbXBvbmVudExpYnJhcnkuUFJJTUVORyA/ICdmaWxlJyA6ICdpbnNlcnRfZHJpdmVfZmlsZSc7XHJcbiAgfVxyXG5cclxuICBnZXQgY2hhbmdlQnV0dG9uKCk6IFVpQWN0aW9uRGVzY3JpcHRvciB7XHJcbiAgICB2YXIgY2hhbmdlQWN0aW9uID0gdGhpcy53aWRnZXRJbnN0YW5jZS5maWxlVXBsb2FkZXJQcm9wZXJ0aWVzPy5jaGFuZ2VBY3Rpb247XHJcblxyXG4gICAgaWYgKCFjaGFuZ2VBY3Rpb24pIHtcclxuICAgICAgY2hhbmdlQWN0aW9uID0gdGhpcy53aWRnZXRJbnN0YW5jZS5maWxlVXBsb2FkZXJQcm9wZXJ0aWVzIS51cGxvYWRBY3Rpb24hO1xyXG4gICAgICBjaGFuZ2VBY3Rpb24uZGVzY3JpcHRvciEudGl0bGUgPSAnJztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0aXRsZTogY2hhbmdlQWN0aW9uLmRlc2NyaXB0b3I/LnRpdGxlID8/ICcnLFxyXG4gICAgICBjb2xvcjogY2hhbmdlQWN0aW9uLmRlc2NyaXB0b3I/LmNvbG9yID8/ICdwcmltYXJ5JyxcclxuICAgICAgdHlwZTogY2hhbmdlQWN0aW9uLmRlc2NyaXB0b3I/LnR5cGUgPz8gVWlBY3Rpb25CdXR0b25UeXBlLklDT04sXHJcbiAgICAgIGljb246IHRoaXMuY29tcExpYiA9PSBDb21wb25lbnRMaWJyYXJ5LlBSSU1FTkcgPyAnc3luYycgOiAnc3luY19hbHQnLFxyXG4gICAgICBpY29uUG9zaXRpb246IGNoYW5nZUFjdGlvbi5kZXNjcmlwdG9yPy5pY29uUG9zaXRpb24sXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0IHJlbW92ZUJ1dHRvbigpOiBVaUFjdGlvbkRlc2NyaXB0b3Ige1xyXG4gICAgdmFyIGNoYW5nZUJ1dHRvbiA9IHRoaXMuY2hhbmdlQnV0dG9uO1xyXG4gICAgdmFyIHVuZG9JY29uID0gdGhpcy53aWRnZXRJbnN0YW5jZS5maWxlVXBsb2FkZXJQcm9wZXJ0aWVzPy51bmRvSWNvbjtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0aXRsZTogJycsXHJcbiAgICAgIGNvbG9yOiBjaGFuZ2VCdXR0b24uY29sb3IsXHJcbiAgICAgIHR5cGU6IGNoYW5nZUJ1dHRvbi50eXBlLFxyXG4gICAgICBpY29uUmVzb3VyY2U6IHVuZG9JY29uLFxyXG4gICAgICBpY29uUG9zaXRpb246IEljb25Qb3NpdGlvbi5QUkUsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGVycm9ySWNvbigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuY29tcExpYiA9PSBDb21wb25lbnRMaWJyYXJ5LlBSSU1FTkcgPyAnZXhjbGFtYXRpb24tY2lyY2xlJyA6ICdlcnJvcic7XHJcbiAgfVxyXG4gIGdldCB0b29sYmFyQ29tcG9uZW50KCk6IFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudCB7XHJcbiAgICByZXR1cm4gdGhpcy50b29sYmFyO1xyXG4gIH1cclxufVxyXG4iLCJAaWYoIHdpZGdldEluc3RhbmNlLmZpbGVVcGxvYWRlclByb3BlcnRpZXMpe1xyXG48aDRcclxuICAqbmdJZj1cIndpZGdldEluc3RhbmNlLnNob3dMYWJlbFwiXHJcbiAgY2xhc3M9XCJsYWJlbENvbnRhaW5lciB7eyB3aWRnZXRJbnN0YW5jZS5jc3NMYWJlbENsYXNzID8/ICcnIH19XCJcclxuICBbbmdDbGFzc109XCJnZXRMYWJlbE5nQ2xhc3MoKVwiXHJcbiAgW25nU3R5bGVdPVwiZ2V0TGFiZWxTdHlsZSgpXCJcclxuPlxyXG4gIHt7IHdpZGdldEluc3RhbmNlLmxhYmVsIH19XHJcbjwvaDQ+XHJcblxyXG48ZGl2IGNsYXNzPVwiZmlsZUVkaXRvckNvbXBvbmVudFwiPlxyXG4gIEBpZiAod2lkZ2V0SW5zdGFuY2UudmFsdWUgJiYgIWlzVHlwZVN1cHBvcnRlZCh3aWRnZXRJbnN0YW5jZS52YWx1ZSkpIHtcclxuICA8ZGl2IGNsYXNzPVwiZXJyb3JNZXNzYWdlXCI+XHJcbiAgICA8c21hcnQtaWNvbiBbaWNvbl09XCJlcnJvckljb25cIiBbY29sb3JdPVwiJ3ZhcigtLXdhcm5pbmlnLWNvbG9yKSdcIj48L3NtYXJ0LWljb24+XHJcbiAgICA8c3Bhbj4gV2lkZ2V0IHZhbHVlIHR5cGUgaXMgdW5zdXBwb3J0ZWQ8L3NwYW4+XHJcbiAgPC9kaXY+XHJcbiAgfSBAZWxzZSBpZighd2lkZ2V0SW5zdGFuY2UudmFsdWUgfHwgZmlsZVRvQ2hhbmdlICkge1xyXG4gIDxzbWFydC11cGxvYWQtd2lkZ2V0XHJcbiAgICBjbGFzcz1cIndpZGdldENvbnRlbnQge3sgd2lkZ2V0SW5zdGFuY2UuY3NzQ2xhc3MgPz8gJycgfX1cIlxyXG4gICAgW25nQ2xhc3NdPVwiZ2V0TmdDbGFzcygpXCJcclxuICAgIFtuZ1N0eWxlXT1cImdldFN0eWxlKClcIlxyXG4gICAgW3VwbG9hZERlc2NyaXB0b3JdPVwid2lkZ2V0SW5zdGFuY2UuZmlsZVVwbG9hZGVyUHJvcGVydGllcy51cGxvYWREZXNjcmlwdG9yIVwiXHJcbiAgICBbaXNNdWx0aXBsZV09XCJ3aWRnZXRJbnN0YW5jZS5maWxlVXBsb2FkZXJQcm9wZXJ0aWVzLmlzTXVsdGlwbGUgPz8gdHJ1ZVwiXHJcbiAgICBbYXV0b1VwbG9hZF09XCJ0cnVlXCJcclxuICAgICh1cGxvYWRGaWxlc0V2ZW50KT1cInVwbG9hZCgkZXZlbnQpXCJcclxuICAvPlxyXG4gIH0gQGlmICh3aWRnZXRJbnN0YW5jZS52YWx1ZSAmJiBpc1R5cGVTdXBwb3J0ZWQod2lkZ2V0SW5zdGFuY2UudmFsdWUpKSB7XHJcbiAgPGRpdiBjbGFzcz1cInVwbG9hZGVkRmlsZUNvbnRhaW5lclwiPlxyXG4gICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImZpbGVSb3c7IGNvbnRleHQ6IHsgZmlsZTogd2lkZ2V0SW5zdGFuY2UudmFsdWUgfVwiXHJcbiAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbiAgfVxyXG48L2Rpdj5cclxufVxyXG5cclxuPG5nLXRlbXBsYXRlICNmaWxlUm93IGxldC1maWxlPVwiZmlsZVwiIGxldC1pPVwiaW5kZXhcIj5cclxuICA8ZGl2IGNsYXNzPVwidXBsb2FkZWRGaWxlXCI+XHJcbiAgICA8c21hcnQtaWNvbiBjbGFzcz1cInVwbG9hZGVkRmlsZUljb25cIiBbaWNvbl09XCJmaWxlSWNvblwiPjwvc21hcnQtaWNvbj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsZURhdGFcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZpbGVEYXRhQ29udGFpbmVyXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWxlTmFtZVwiPnt7IGZpbGUuZmlsZU5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWxlU2l6ZVwiPnt7IGZvcm1hdFNpemUoZmlsZS5zaXplKSB9fTwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsZUFjdGlvbnNcIj5cclxuICAgICAgPHNtYXJ0LXVpLWFjdGlvbi10b29sYmFyIFtpZF09XCJ3aWRnZXRJbnN0YW5jZS50b29sYmFySWRcIiAjdG9vbGJhcj4gPC9zbWFydC11aS1hY3Rpb24tdG9vbGJhcj5cclxuXHJcbiAgICAgIEBpZighZmlsZVRvQ2hhbmdlKXtcclxuICAgICAgPHVpLWFjdGlvbi1idXR0b24gKGFjdGlvbkNsaWNrKT1cImNoYW5nZShmaWxlKVwiIFtkZXNjcmlwdG9yXT1cImNoYW5nZUJ1dHRvblwiPlxyXG4gICAgICA8L3VpLWFjdGlvbi1idXR0b24+XHJcbiAgICAgIH0gQGVsc2Uge1xyXG4gICAgICA8dWktYWN0aW9uLWJ1dHRvblxyXG4gICAgICAgIGNsYXNzPVwicmVtb3ZlSWNvblwiXHJcbiAgICAgICAgKGFjdGlvbkNsaWNrKT1cImNhbmNlbENoYW5nZSgpXCJcclxuICAgICAgICBbZGVzY3JpcHRvcl09XCJyZW1vdmVCdXR0b25cIlxyXG4gICAgICA+XHJcbiAgICAgIDwvdWktYWN0aW9uLWJ1dHRvbj5cclxuXHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=