@messaia/cdk 14.0.0-rc50 → 14.0.0-rc53
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/base/components/generic-form-base.component.mjs +75 -38
- package/esm2020/lib/common/pipes/func.pipe.mjs +2 -2
- package/fesm2015/messaia-cdk.mjs +79 -39
- package/fesm2015/messaia-cdk.mjs.map +1 -1
- package/fesm2020/messaia-cdk.mjs +75 -38
- package/fesm2020/messaia-cdk.mjs.map +1 -1
- package/lib/base/components/generic-form-base.component.d.ts +29 -5
- package/package.json +1 -1
|
@@ -126,45 +126,47 @@ export class GenericFormBaseComponent extends BaseComponent {
|
|
|
126
126
|
this.listRoute = this.addSaveAndCloseRoute;
|
|
127
127
|
}
|
|
128
128
|
/**
|
|
129
|
-
*
|
|
130
|
-
* and the first call to ngOnChanges.
|
|
129
|
+
* The id of the item to load
|
|
131
130
|
*/
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
if (this.
|
|
135
|
-
|
|
136
|
-
this.id ?? (this.id = this.item?.id);
|
|
137
|
-
/* Build the form fields */
|
|
138
|
-
this.buildFields();
|
|
139
|
-
}
|
|
140
|
-
else if (!this.id) {
|
|
141
|
-
/* Get id from the url */
|
|
142
|
-
let id = this.route.snapshot.paramMap.get('id');
|
|
143
|
-
if (id > 0) {
|
|
144
|
-
this.id = id;
|
|
145
|
-
}
|
|
146
|
-
else if (!this.id && this.route.snapshot?.data?.id) {
|
|
147
|
-
this.id = this.route.snapshot?.data?.id;
|
|
148
|
-
}
|
|
149
|
-
/* Set panel ID from query */
|
|
150
|
-
this.subtitle || (this.subtitle = this.route.snapshot?.data?.subtitle);
|
|
151
|
-
/* Assign query params into query object */
|
|
152
|
-
let ignoredParams = ['id', 'returnurl', 'panelId'];
|
|
153
|
-
Object.assign(this.query, this.sanitizeObject(this.route.snapshot.params || {}, ...ignoredParams), this.sanitizeObject(this.route.snapshot.data?.query || {}, ...ignoredParams), this.sanitizeObject(this.route.snapshot.queryParams || {}, ...ignoredParams));
|
|
154
|
-
}
|
|
155
|
-
/* Set some variable for edit mode */
|
|
156
|
-
if (this.id) {
|
|
131
|
+
get id() { return this._id; }
|
|
132
|
+
set id(id) {
|
|
133
|
+
if (this._id != id) {
|
|
134
|
+
this._id = id;
|
|
157
135
|
this.action = 'edit';
|
|
158
136
|
this.isEditMode = true;
|
|
159
137
|
this.listRoute = this.editSaveAndCloseRoute;
|
|
138
|
+
this.onAfterSetId();
|
|
160
139
|
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* The current item to add or edit
|
|
143
|
+
*/
|
|
144
|
+
get item() { return this._item; }
|
|
145
|
+
;
|
|
146
|
+
set item(item) {
|
|
147
|
+
if (this._item != item) {
|
|
148
|
+
this._item = item;
|
|
149
|
+
this.id ?? (this.id = item?.id);
|
|
150
|
+
this.buildFields();
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Called after the constructor, initializing input properties,
|
|
155
|
+
* and the first call to ngOnChanges.
|
|
156
|
+
*/
|
|
157
|
+
ngOnInit() {
|
|
158
|
+
super.ngOnInit();
|
|
159
|
+
this.init();
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Called before any other lifecycle hook. Use it to inject dependencies,
|
|
163
|
+
* but avoid any serious work here.
|
|
164
|
+
* @param changes
|
|
165
|
+
*/
|
|
166
|
+
ngOnChanges(changes) {
|
|
167
|
+
if (changes?.id?.currentValue && changes.id.currentValue != changes.id.previousValue) {
|
|
168
|
+
this.onAfterSetId();
|
|
165
169
|
}
|
|
166
|
-
/* Add list mneu items */
|
|
167
|
-
this.addToolbarMenuItems();
|
|
168
170
|
}
|
|
169
171
|
/**
|
|
170
172
|
* Lifecycle hook that is called after a component's view has been fully initialized.
|
|
@@ -180,8 +182,6 @@ export class GenericFormBaseComponent extends BaseComponent {
|
|
|
180
182
|
* have finished when `ngAfterViewInit` is executed
|
|
181
183
|
*/
|
|
182
184
|
this.changeDetectorRef.detectChanges();
|
|
183
|
-
/* Load item from server */
|
|
184
|
-
this.loadItem();
|
|
185
185
|
/* Listen for stepper selection changes */
|
|
186
186
|
this.matStepper?.selectionChange?.subscribe((event) => this.onAfterStepChange(event));
|
|
187
187
|
}
|
|
@@ -189,7 +189,7 @@ export class GenericFormBaseComponent extends BaseComponent {
|
|
|
189
189
|
* Loads an item by ID
|
|
190
190
|
*/
|
|
191
191
|
loadItem() {
|
|
192
|
-
if (this.isEditMode) {
|
|
192
|
+
if (this.isEditMode && this.service?.endpoint) {
|
|
193
193
|
this.isLoading = true;
|
|
194
194
|
this.changeDetectorRef.detectChanges();
|
|
195
195
|
this.loadItemAsync().subscribe({
|
|
@@ -292,6 +292,33 @@ export class GenericFormBaseComponent extends BaseComponent {
|
|
|
292
292
|
}
|
|
293
293
|
});
|
|
294
294
|
}
|
|
295
|
+
/**
|
|
296
|
+
* Inits the form
|
|
297
|
+
*/
|
|
298
|
+
init() {
|
|
299
|
+
if (!this.id) {
|
|
300
|
+
/* Assign query params into query object */
|
|
301
|
+
let ignoredParams = ['id', 'returnurl', 'panelId'];
|
|
302
|
+
Object.assign(this.query, this.sanitizeObject(this.route.snapshot.params || {}, ...ignoredParams), this.sanitizeObject(this.route.snapshot.data?.query || {}, ...ignoredParams), this.sanitizeObject(this.route.snapshot.queryParams || {}, ...ignoredParams));
|
|
303
|
+
/* Get id from the url */
|
|
304
|
+
let id = this.route.snapshot.paramMap.get('id');
|
|
305
|
+
if (id > 0) {
|
|
306
|
+
this.id = id;
|
|
307
|
+
}
|
|
308
|
+
else if (!this.id && this.route.snapshot?.data?.id) {
|
|
309
|
+
this.id = this.route.snapshot?.data?.id;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
/* Create a new instance of the TEntity */
|
|
313
|
+
if (!this.isEditMode && !this.form) {
|
|
314
|
+
this.item = Object.assign(this.newInstance(), this.item || {}, this.query || {});
|
|
315
|
+
this.buildForm();
|
|
316
|
+
}
|
|
317
|
+
/* Set panel ID from query */
|
|
318
|
+
this.subtitle || (this.subtitle = this.route.snapshot?.data?.subtitle);
|
|
319
|
+
/* Add list mneu items */
|
|
320
|
+
this.addToolbarMenuItems();
|
|
321
|
+
}
|
|
295
322
|
/**
|
|
296
323
|
* Builds the form fields
|
|
297
324
|
*/
|
|
@@ -523,6 +550,14 @@ export class GenericFormBaseComponent extends BaseComponent {
|
|
|
523
550
|
* Check if the item is deletable
|
|
524
551
|
*/
|
|
525
552
|
canDelete() { return !this.item?.hasOwnProperty('deletable') || this.item['deletable']; }
|
|
553
|
+
/**
|
|
554
|
+
* Event emitted when the id is set.
|
|
555
|
+
*/
|
|
556
|
+
onAfterSetId() {
|
|
557
|
+
if (this.id) {
|
|
558
|
+
this.loadItem();
|
|
559
|
+
}
|
|
560
|
+
}
|
|
526
561
|
/**
|
|
527
562
|
* Event emitted when the selected step has changed.
|
|
528
563
|
* @param $event
|
|
@@ -630,11 +665,13 @@ export class GenericFormBaseComponent extends BaseComponent {
|
|
|
630
665
|
}
|
|
631
666
|
}
|
|
632
667
|
/** @nocollapse */ GenericFormBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: GenericFormBaseComponent, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
|
|
633
|
-
/** @nocollapse */ GenericFormBaseComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.0", type: GenericFormBaseComponent, inputs: { id: "id", item: "item", includes: "includes", projection: "projection", query: "query" }, host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" } }, viewQueries: [{ propertyName: "matStepper", first: true, predicate: MatStepper, descendants: true }, { propertyName: "input", predicate: ["focus"], descendants: true }], usesInheritance: true, ngImport: i0 });
|
|
668
|
+
/** @nocollapse */ GenericFormBaseComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.0", type: GenericFormBaseComponent, inputs: { id: "id", _item: "_item", item: "item", includes: "includes", projection: "projection", query: "query" }, host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" } }, viewQueries: [{ propertyName: "matStepper", first: true, predicate: MatStepper, descendants: true }, { propertyName: "input", predicate: ["focus"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0 });
|
|
634
669
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: GenericFormBaseComponent, decorators: [{
|
|
635
670
|
type: Directive
|
|
636
671
|
}], ctorParameters: function () { return [{ type: undefined }, { type: undefined }, { type: i1.ActivatedRoute }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { id: [{
|
|
637
672
|
type: Input
|
|
673
|
+
}], _item: [{
|
|
674
|
+
type: Input
|
|
638
675
|
}], item: [{
|
|
639
676
|
type: Input
|
|
640
677
|
}], includes: [{
|
|
@@ -653,4 +690,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImpor
|
|
|
653
690
|
type: HostListener,
|
|
654
691
|
args: ['document:keydown', ['$event']]
|
|
655
692
|
}] } });
|
|
656
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1mb3JtLWJhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvYmFzZS9jb21wb25lbnRzL2dlbmVyaWMtZm9ybS1iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRyxPQUFPLEVBQW1CLFNBQVMsRUFBNEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBS3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7O0FBRWpELFdBQVc7QUFFWCxNQUFNLE9BQWdCLHdCQUE0RixTQUFRLGFBQWE7SUErS3RJOzs7T0FHRztJQUNILFlBQ1EsVUFBOEIsRUFDM0IsT0FBaUIsRUFDakIsS0FBcUIsRUFDckIsaUJBQW9DO1FBRTlDLEtBQUssQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUx6QixlQUFVLEdBQVYsVUFBVSxDQUFvQjtRQUMzQixZQUFPLEdBQVAsT0FBTyxDQUFVO1FBQ2pCLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLHNCQUFpQixH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QUFDLFVBQVUsQ0FBQyxDQUFDO29CQUNqQyxNQUFNO2dCQUVQLEtBQUssR0FBRztvQkFDUCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUNsQyxNQUFNO2FBQ1A7U0FDRDtRQUVELG9EQUFvRDtRQUNwRCxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNaO0lBQ0YsQ0FBQzs7d0lBcndCb0Isd0JBQXdCOzRIQUF4Qix3QkFBd0Isc1BBa0psQyxVQUFVOzJGQWxKQSx3QkFBd0I7a0JBRDdDLFNBQVM7K0tBOEJGLEVBQUU7c0JBRFIsS0FBSztnQkFPQyxJQUFJO3NCQURWLEtBQUs7Z0JBWUMsUUFBUTtzQkFEZCxLQUFLO2dCQU9DLFVBQVU7c0JBRGhCLEtBQUs7Z0JBWUMsS0FBSztzQkFEWCxLQUFLO2dCQXFGSSxVQUFVO3NCQURuQixTQUFTO3VCQUFDLFVBQVU7Z0JBT2QsS0FBSztzQkFEWCxZQUFZO3VCQUFDLE9BQU87Z0JBcWxCckIsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RlcHBlclNlbGVjdGlvbkV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3N0ZXBwZXInO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBIb3N0TGlzdGVuZXIsIElucHV0LCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCwgTmdGb3JtLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRTdGVwcGVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc3RlcHBlcic7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlLCB0YXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi8uLi9jb21tb24vZnVuY3Rpb25zL3V0aWxzJztcclxuaW1wb3J0IHsgQWN0aW9uSXRlbSB9IGZyb20gJy4uLy4uL2NvbW1vbi9tb2RlbHMvYWN0aW9uLWl0ZW0nO1xyXG5pbXBvcnQgeyBJRW50aXR5IH0gZnJvbSAnLi4vLi4vY29tbW9uL21vZGVscy9lbnRpdHknO1xyXG5pbXBvcnQgeyBTYXZlQWN0aW9uIH0gZnJvbSAnLi4vLi4vY29tbW9uL21vZGVscy9zYXZlLWFjdGlvbic7XHJcbmltcG9ydCB7IGdldEZvcm1EZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vZm9ybXMvZnVuY3Rpb25zL2Z1bmN0aW9ucyc7XHJcbmltcG9ydCB7IEZvcm1EZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vZm9ybXMvbW9kZWxzL2Zvcm0tZGVmaW5pdGlvbic7XHJcbmltcG9ydCB7IEZvcm1GaWVsZEdyb3VwRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2Zvcm1zL21vZGVscy9mb3JtLWZpZWxkLWdyb3VwLWRlZmluaXRpb24nO1xyXG5pbXBvcnQgeyBHZW5lcmljU2VydmljZSB9IGZyb20gJy4uLy4uL2h0dHAvc2VydmljZXMvZ2VuZXJpYy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSUdlbmVyaWNGb3JtQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvaWdlbmVyaWMtZm9ybS1iYXNlJztcclxuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCB9IGZyb20gJy4vYmFzZS5jb21wb25lbnQnO1xyXG5cclxuLy8gQGR5bmFtaWNcclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBHZW5lcmljRm9ybUJhc2VDb21wb25lbnQ8VEVudGl0eSBleHRlbmRzIElFbnRpdHksIFRTZXJ2aWNlIGV4dGVuZHMgR2VuZXJpY1NlcnZpY2U8VEVudGl0eT4+IGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIElHZW5lcmljRm9ybUJhc2VDb21wb25lbnQ8VEVudGl0eT4ge1xyXG5cdC8qKlxyXG5cdCAqIFRoZSBhY3Rpb24gb2YgdGhlIGZvcm0gKGFkZCB8IGVkaXQpXHJcblx0ICovXHJcblx0cHVibGljIGFjdGlvbjogc3RyaW5nID0gJ2FkZCc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFjdGlvbiA9IGVkaXQ/XHJcblx0ICovXHJcblx0cHVibGljIGlzRWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqXHJcblx0ICogU2F2ZSBhY3Rpb25cclxuXHQgKi9cclxuXHRwdWJsaWMgU2F2ZUFjdGlvbjogdHlwZW9mIFNhdmVBY3Rpb24gPSBTYXZlQWN0aW9uO1xyXG5cclxuXHQvKipcclxuXHQgKiBSb3V0ZXNcclxuXHQgKi9cclxuXHRwdWJsaWMgZWRpdFNhdmVBbmRDbG9zZVJvdXRlOiBzdHJpbmcgPSAnLi4vLi4vJztcclxuXHRwdWJsaWMgYWRkU2F2ZUFuZENsb3NlUm91dGU6IHN0cmluZyA9ICcuLi8nO1xyXG5cdHB1YmxpYyBhZGRTYXZlQW5kRWRpdFJvdXRlOiBzdHJpbmcgPSAnLi4vZWRpdC8nO1xyXG5cdHB1YmxpYyBhZGRTYXZlQW5kTmV3Um91dGU6IHN0cmluZyA9ICcuLi9hZGQnO1xyXG5cdHB1YmxpYyBsaXN0Um91dGU6IHN0cmluZyA9IHRoaXMuYWRkU2F2ZUFuZENsb3NlUm91dGU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoZSBpZCBvZiB0aGUgaXRlbSB0byBsb2FkXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgaWQ6IG51bWJlciB8IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIGN1cnJlbnQgaXRlbSB0byBhZGQgb3IgZWRpdFxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIGl0ZW06IFRFbnRpdHk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlcHJlc2VudHMgdGhlIHJlcXVlc3QgZXJyb3JzXHJcblx0ICovXHJcblx0cHVibGljIGVycm9yczogQXJyYXk8c3RyaW5nPiA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEluY2x1ZGVzXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgaW5jbHVkZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIFByb2plY3Rpb25cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBwcm9qZWN0aW9uOiBzdHJpbmdbXTtcclxuXHJcblx0LyoqXHJcblx0ICogVXBkYXRlIGluY2x1ZGVzXHJcblx0ICovXHJcblx0cHVibGljIHVwZGF0ZUluY2x1ZGVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgcGFyYW1zXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgcXVlcnk6IGFueSA9IHt9O1xyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgY3VycmVudCBkYXRlXHJcblx0ICovXHJcblx0cHVibGljIGN1cnJlbnREYXRlOiBEYXRlID0gbmV3IERhdGUoKTtcclxuXHJcblx0LyoqXHJcblx0ICogRGF0ZSAmIHRpbWUgbWFza1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBkYXRlVGltZU1hc2sgPSBbL1swLTNdLywgL1swLTldLywgJy4nLCAvWzAtMV0vLCAvWzAtOV0vLCAnLicsIDIsIDAsIC9bMS0yXS8sIC9bMC05XS8sICcgJywgL1swLTJdLywgL1swLTldLywgJzonLCAvWzAtNV0vLCAvWzAtOV0vXTtcclxuXHJcblx0LyoqXHJcblx0ICogRGF0ZSBtYXNrXHJcblx0ICovXHJcblx0cHVibGljIGRhdGVNYXNrID0gWy9bMC0zXS8sIC9bMC05XS8sICcuJywgL1swLTFdLywgL1swLTldLywgJy4nLCAyLCAwLCAvWzEtMl0vLCAvWzAtOV0vXTtcclxuXHJcblx0LyoqXHJcblx0ICogVGltZSBtYXNrXHJcblx0ICovXHJcblx0cHVibGljIHRpbWVNYXNrID0gWy9bMC0yXS8sIC9bMC05XS8sICc6JywgL1swLTVdLywgL1swLTldL107XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgcGF0dGVybiB0byB2YWxpZGF0ZSBkYXRlc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBkYXRlUGF0dGVybjogc3RyaW5nID0gYCg/Oig/OjMxKFxcXFwvfC18XFxcXC4pKD86MD9bMTM1NzhdfDFbMDJdKSlcXFxcMXwoPzooPzoyOXwzMCkoXFxcXC98LXxcXFxcLikoPzowP1sxLDMtOV18MVswLTJdKVxcXFwyKSkoPzooPzoxWzYtOV18WzItOV1cXFxcZCk/XFxcXGR7Mn0pJHxeKD86MjkoXFxcXC98LXxcXFxcLikwPzJcXFxcMyg/Oig/Oig/OjFbNi05XXxbMi05XVxcXFxkKT8oPzowWzQ4XXxbMjQ2OF1bMDQ4XXxbMTM1NzldWzI2XSl8KD86KD86MTZ8WzI0NjhdWzA0OF18WzM1NzldWzI2XSkwMCkpKSkkfF4oPzowP1sxLTldfDFcXFxcZHwyWzAtOF0pKFxcXFwvfC18XFxcXC4pKD86KD86MD9bMS05XSl8KD86MVswLTJdKSlcXFxcNCg/Oig/OjFbNi05XXxbMi05XVxcXFxkKT9cXFxcZHsyfSlgO1xyXG5cclxuXHQvKipcclxuXHQgKiBQaG9uZSBwcmVmaXggdmFsaWRhdGlvbiBwYXR0ZXJuXHJcblx0ICovXHJcblx0cHVibGljIHBob25lUHJlZml4UGF0dGVybjogc3RyaW5nID0gJ14oMFxcXFxkezIsNn0pJCc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBob25lIG51bWJlciB2YWxpZGF0aW9uIHBhdHRlcm5cclxuXHQgKi9cclxuXHRwdWJsaWMgcGhvbmVOdW1iZXJQYXR0ZXJuOiBzdHJpbmcgPSAnXihcXFxcZHszLDMwfSkkJztcclxuXHJcblx0LyoqXHJcblx0ICogUGFzc3dvcmQgdmFsaWRhdGlvbiBwYXR0ZXJuXHJcblx0ICovXHJcblx0cHVibGljIHBhc3N3b3JkUGF0dGVybjogc3RyaW5nID0gJ14oPz0uKlthLXpdKSg/PS4qW0EtWl0pKD89LipcXFxcZCkoPz0uKlskQCQhJSo/Jl0pW0EtWmEtelxcXFxkJEAkISUqPyZdezYsfSc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIERlZmF1bHRzIG1vZHVsZXMgYW5kIHRvb2xiYXJcclxuXHQgKi9cclxuXHRwdWJsaWMgZWRpdG9yT3B0aW9ucyA9IHtcclxuXHRcdG1vZHVsZXM6IHtcclxuXHRcdFx0dG9vbGJhcjogW1xyXG5cdFx0XHRcdFsnYm9sZCcsICdpdGFsaWMnLCAndW5kZXJsaW5lJ10sXHJcblx0XHRcdFx0W3sgJ2xpc3QnOiAnb3JkZXJlZCcgfSwgeyAnbGlzdCc6ICdidWxsZXQnIH1dLFxyXG5cdFx0XHRcdFt7ICdpbmRlbnQnOiAnLTEnIH0sIHsgJ2luZGVudCc6ICcrMScgfV0sXHJcblx0XHRcdFx0W3sgJ3NpemUnOiBbJ3NtYWxsJywgZmFsc2UsICdsYXJnZScsICdodWdlJ10gfV0sXHJcblx0XHRcdFx0W3sgJ2hlYWRlcic6IFsxLCAyLCAzLCA0LCA1LCA2LCBmYWxzZV0gfV0sXHJcblx0XHRcdFx0W3sgJ2NvbG9yJzogbmV3IEFycmF5PGFueT4oKSB9LCB7ICdiYWNrZ3JvdW5kJzogbmV3IEFycmF5PGFueT4oKSB9XSxcclxuXHRcdFx0XHRbJ2xpbmsnLCAnaW1hZ2UnXVxyXG5cdFx0XHRdLFxyXG5cdFx0XHRjbGlwYm9hcmQ6IHtcclxuXHRcdFx0XHRtYXRjaFZpc3VhbDogZmFsc2VcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIElmIHRydWUsIHNob3cgdGhlIG1lbnUgJ0RlbGV0ZSdcclxuXHQgKi9cclxuXHRwdWJsaWMgZGVsZXRhYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblx0LyoqXHJcblx0ICogVG9vbGJhciBtZW51IGl0ZW1zXHJcblx0ICovXHJcblx0cHVibGljIHRvb2xiYXJNZW51SXRlbXM6IEFjdGlvbkl0ZW1bXSA9IFtdO1xyXG5cclxuXHQvKipcclxuXHQgKiBUb29sYmFyIGFjdGlvbiBidXR0b25zXHJcblx0ICovXHJcblx0cHVibGljIHRvb2xiYXJBY3Rpb25zOiBBY3Rpb25JdGVtPFRFbnRpdHksIElHZW5lcmljRm9ybUJhc2VDb21wb25lbnQ8VEVudGl0eT4+W10gPSBbe1xyXG5cdFx0aWNvbjogJ3N5bmMnLFxyXG5cdFx0ZXZlbnQ6ICgpID0+IHRoaXMucmVsb2FkUGFnZSgpLFxyXG5cdH1dO1xyXG5cclxuXHQvKipcclxuXHQgKiBNYXRTdGVwcGVyIHJlZlxyXG5cdCAqL1xyXG5cdEBWaWV3Q2hpbGQoTWF0U3RlcHBlcilcclxuXHRwcm90ZWN0ZWQgbWF0U3RlcHBlcjogTWF0U3RlcHBlcjtcclxuXHJcblx0LyoqXHJcblx0ICogQSByZWZlcmVuY2UgdG8gdGhlIGlucHV0IGVsZW1lbnRcclxuXHQgKi9cclxuXHRAVmlld0NoaWxkcmVuKCdmb2N1cycpXHJcblx0cHVibGljIGlucHV0OiBhbnk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEZvcm0gZ3JvdXBcclxuXHQgKi9cclxuXHRwdWJsaWMgZm9ybTogTmdGb3JtIHwgRm9ybUdyb3VwO1xyXG5cclxuXHQvKipcclxuXHQgKiBHZXRzIGZvcm0gdmFsdWVcclxuXHQgKi9cclxuXHRwdWJsaWMgYWJzdHJhY3QgZ2V0IGZvcm1WYWx1ZSgpOiBURW50aXR5IHwgYW55O1xyXG5cclxuXHQvKipcclxuXHQgKiBmb3JtRGVmaW5pdGlvbjogRm9ybURlZmluaXRpb25cclxuXHQgKi9cclxuXHRwdWJsaWMgZm9ybURlZmluaXRpb246IEZvcm1EZWZpbml0aW9uO1xyXG5cclxuXHQvKipcclxuXHQgKiBmaWVsZEdyb3VwczogRm9ybUZpZWxkR3JvdXBbXVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBmaWVsZEdyb3VwczogRm9ybUZpZWxkR3JvdXBEZWZpbml0aW9uW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIENvbnN0cnVjdG9yXHJcblx0ICogQHBhcmFtIHNlcnZpY2UgXHJcblx0ICovXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwdWJsaWMgZW50aXR5Q3RvcjogeyBuZXcoKTogVEVudGl0eSB9LFxyXG5cdFx0cHJvdGVjdGVkIHNlcnZpY2U6IFRTZXJ2aWNlLFxyXG5cdFx0cHJvdGVjdGVkIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuXHRcdHByb3RlY3RlZCBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuXHQpIHtcclxuXHRcdHN1cGVyKHJvdXRlLCBjaGFuZ2VEZXRlY3RvclJlZik7XHJcblx0XHR0aGlzLmxpc3RSb3V0ZSA9IHRoaXMuYWRkU2F2ZUFuZENsb3NlUm91dGU7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDYWxsZWQgYWZ0ZXIgdGhlIGNvbnN0cnVjdG9yLCBpbml0aWFsaXppbmcgaW5wdXQgcHJvcGVydGllcywgXHJcblx0ICogYW5kIHRoZSBmaXJzdCBjYWxsIHRvIG5nT25DaGFuZ2VzLlxyXG5cdCAqL1xyXG5cdG5nT25Jbml0KCk6IHZvaWQge1xyXG5cdFx0c3VwZXIubmdPbkluaXQoKTtcclxuXHJcblx0XHRpZiAodGhpcy5pdGVtKSB7XHJcblx0XHRcdC8qIFNldCB0aGUgaWQgZnJvbSB0aGUgaXRlbSAqL1xyXG5cdFx0XHR0aGlzLmlkID8/PSB0aGlzLml0ZW0/LmlkO1xyXG5cclxuXHRcdFx0LyogQnVpbGQgdGhlIGZvcm0gZmllbGRzICovXHJcblx0XHRcdHRoaXMuYnVpbGRGaWVsZHMoKTtcclxuXHRcdH0gZWxzZSBpZiAoIXRoaXMuaWQpIHtcclxuXHRcdFx0LyogR2V0IGlkIGZyb20gdGhlIHVybCAqL1xyXG5cdFx0XHRsZXQgaWQgPSA8YW55PnRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCdpZCcpO1xyXG5cdFx0XHRpZiAoaWQgPiAwKSB7XHJcblx0XHRcdFx0dGhpcy5pZCA9IGlkO1xyXG5cdFx0XHR9IGVsc2UgaWYgKCF0aGlzLmlkICYmIHRoaXMucm91dGUuc25hcHNob3Q/LmRhdGE/LmlkKSB7XHJcblx0XHRcdFx0dGhpcy5pZCA9IHRoaXMucm91dGUuc25hcHNob3Q/LmRhdGE/LmlkO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvKiBTZXQgcGFuZWwgSUQgZnJvbSBxdWVyeSAqL1xyXG5cdFx0XHR0aGlzLnN1YnRpdGxlIHx8PSB0aGlzLnJvdXRlLnNuYXBzaG90Py5kYXRhPy5zdWJ0aXRsZTtcclxuXHJcblx0XHRcdC8qIEFzc2lnbiBxdWVyeSBwYXJhbXMgaW50byBxdWVyeSBvYmplY3QgKi9cclxuXHRcdFx0bGV0IGlnbm9yZWRQYXJhbXM6IHN0cmluZ1tdID0gWydpZCcsICdyZXR1cm51cmwnLCAncGFuZWxJZCddO1xyXG5cdFx0XHRPYmplY3QuYXNzaWduKHRoaXMucXVlcnksXHJcblx0XHRcdFx0dGhpcy5zYW5pdGl6ZU9iamVjdCh0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcyB8fCB7fSwgLi4uaWdub3JlZFBhcmFtcyksXHJcblx0XHRcdFx0dGhpcy5zYW5pdGl6ZU9iamVjdCh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGE/LnF1ZXJ5IHx8IHt9LCAuLi5pZ25vcmVkUGFyYW1zKSxcclxuXHRcdFx0XHR0aGlzLnNhbml0aXplT2JqZWN0KHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMgfHwge30sIC4uLmlnbm9yZWRQYXJhbXMpXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogU2V0IHNvbWUgdmFyaWFibGUgZm9yIGVkaXQgbW9kZSAqL1xyXG5cdFx0aWYgKHRoaXMuaWQpIHtcclxuXHRcdFx0dGhpcy5hY3Rpb24gPSAnZWRpdCc7XHJcblx0XHRcdHRoaXMuaXNFZGl0TW9kZSA9IHRydWU7XHJcblx0XHRcdHRoaXMubGlzdFJvdXRlID0gdGhpcy5lZGl0U2F2ZUFuZENsb3NlUm91dGU7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBURW50aXR5ICovXHJcblx0XHRpZiAoIXRoaXMuaXNFZGl0TW9kZSAmJiAhdGhpcy5mb3JtKSB7XHJcblx0XHRcdHRoaXMuaXRlbSA9IE9iamVjdC5hc3NpZ24odGhpcy5uZXdJbnN0YW5jZSgpLCB0aGlzLml0ZW0gfHwge30sIHRoaXMucXVlcnkgfHwge30pO1xyXG5cdFx0XHR0aGlzLmJ1aWxkRm9ybSgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIEFkZCBsaXN0IG1uZXUgaXRlbXMgKi9cclxuXHRcdHRoaXMuYWRkVG9vbGJhck1lbnVJdGVtcygpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTGlmZWN5Y2xlIGhvb2sgdGhhdCBpcyBjYWxsZWQgYWZ0ZXIgYSBjb21wb25lbnQncyB2aWV3IGhhcyBiZWVuIGZ1bGx5IGluaXRpYWxpemVkLlxyXG5cdCAqL1xyXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuXHRcdHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xyXG5cclxuXHRcdC8qIFNldCBwYWdlIHRpdGxlICovXHJcblx0XHR0aGlzLnRpdGxlID0gdGhpcy50aXRsZVNlcnZpY2UuZ2V0VGl0bGUoKTtcclxuXHJcblx0XHQvKiBTZXQgZm9jdXMgKi9cclxuXHRcdHRoaXMuZm9jdXMoKTtcclxuXHJcblx0XHQvKiBcclxuXHRcdCAqIEZvcmNlIGEgbmV3IGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUgc2luY2UgY2hhbmdlIGRldGVjdGlvbnMgXHJcblx0XHQgKiBoYXZlIGZpbmlzaGVkIHdoZW4gYG5nQWZ0ZXJWaWV3SW5pdGAgaXMgZXhlY3V0ZWRcclxuXHRcdCAqL1xyXG5cdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG5cdFx0LyogTG9hZCBpdGVtIGZyb20gc2VydmVyICovXHJcblx0XHR0aGlzLmxvYWRJdGVtKCk7XHJcblxyXG5cdFx0LyogTGlzdGVuIGZvciBzdGVwcGVyIHNlbGVjdGlvbiBjaGFuZ2VzICovXHJcblx0XHR0aGlzLm1hdFN0ZXBwZXI/LnNlbGVjdGlvbkNoYW5nZT8uc3Vic2NyaWJlKChldmVudDogU3RlcHBlclNlbGVjdGlvbkV2ZW50KSA9PiB0aGlzLm9uQWZ0ZXJTdGVwQ2hhbmdlKGV2ZW50KSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBMb2FkcyBhbiBpdGVtIGJ5IElEXHJcblx0ICovXHJcblx0cHVibGljIGxvYWRJdGVtKCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMuaXNFZGl0TW9kZSkge1xyXG5cdFx0XHR0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcblx0XHRcdHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdFx0XHR0aGlzLmxvYWRJdGVtQXN5bmMoKS5zdWJzY3JpYmUoe1xyXG5cdFx0XHRcdG5leHQ6IChfKSA9PiB0aGlzLmlzTG9hZGluZyA9IGZhbHNlLFxyXG5cdFx0XHRcdGVycm9yOiAoZXJyb3IpID0+IHRoaXMucGFyc2VFcnJvcnMoZXJyb3IpXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTG9hZHMgYW4gaXRlbSBieSBJRCBhc3luY2x5XHJcblx0ICovXHJcblx0cHVibGljIGxvYWRJdGVtQXN5bmMoKTogT2JzZXJ2YWJsZTxURW50aXR5PiB7XHJcblx0XHRpZiAodGhpcy5pZCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5zZXJ2aWNlLmdldCh0aGlzLmlkLCBPYmplY3QuYXNzaWduKHRoaXMucXVlcnkgfHwge30sIHsgaW5jbHVkZXM6IHRoaXMuaW5jbHVkZXMsIHByb2plY3Rpb246IHRoaXMucHJvamVjdGlvbj8uam9pbignLCcpIH0pLCB7ICdEaXNhYmxlLUNhY2hlJzogJ1llcycgfSkucGlwZShcclxuXHRcdFx0XHRtYXAoeCA9PiBPYmplY3QuYXNzaWduKHRoaXMubmV3SW5zdGFuY2UoKSwgeCkpLFxyXG5cdFx0XHRcdHRhcCh4ID0+IHtcclxuXHRcdFx0XHRcdC8qIFNldCB0aGUgbG9hZGVkIGl0ZW0gKi9cclxuXHRcdFx0XHRcdHRoaXMuaXRlbSA9IE9iamVjdC5hc3NpZ24odGhpcy5uZXdJbnN0YW5jZSgpLCA8VEVudGl0eT54KTtcclxuXHJcblx0XHRcdFx0XHQvKiBCdWlsZCB0aGUgZm9ybSAqL1xyXG5cdFx0XHRcdFx0dGhpcy5idWlsZEZvcm0oKTtcclxuXHJcblx0XHRcdFx0XHQvKiBUcmlnZ2VyIGV2ZW50IGFmdGVySXRlbUxvYWRlZCAqL1xyXG5cdFx0XHRcdFx0dGhpcy5vbkFmdGVySXRlbUxvYWRlZCgpO1xyXG5cdFx0XHRcdH0pXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG5ldyBPYnNlcnZhYmxlKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTYXZlcyBkYXRhIGludG8gZGF0YWJhc2UuXHJcblx0ICogQHBhcmFtIGFjdGlvblxyXG5cdCAqL1xyXG5cdHB1YmxpYyBzYXZlKGFjdGlvbjogU2F2ZUFjdGlvbiA9IFNhdmVBY3Rpb24uU2F2ZUFuZENsb3NlLCBmb3JtOiBOZ0Zvcm0gfCBGb3JtR3JvdXAgPSBudWxsKTogdm9pZCB7XHJcblx0XHQvKiBWYWxpZGF0ZSB0aGUgZm9ybSAqL1xyXG5cdFx0dGhpcy52YWxpZGF0ZUZvcm0oZm9ybSk7XHJcblxyXG5cdFx0LyogQ2hlY2sgaWYgdGhlIGZvcm0gaXMgdmFsaWQgKi9cclxuXHRcdGZvcm0gPSB0aGlzLmZvcm0gfHwgZm9ybTtcclxuXHRcdGlmIChmb3JtICYmICF0aGlzLmlzRm9ybVZhbGlkKGZvcm0pKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBJZiB3ZSdyYSBpbiBlZGl0IG1vZGUsIHVwZGF0ZSB0aGUgcmVjb3JkICovXHJcblx0XHRpZiAodGhpcy5pc0VkaXRNb2RlKSB7XHJcblx0XHRcdC8qIFRoZSBkYXRhIGhhcyBub3QgY2hhbmdlZD8gKi9cclxuXHRcdFx0aWYgKGZvcm0gJiYgZm9ybS5wcmlzdGluZSkge1xyXG5cdFx0XHRcdHRoaXMub25BZnRlclN1Ym1pdChhY3Rpb24pO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogQSBmbGFnIHRvIHByZXZlbnQgc2VuZGluZyB0aGUgZm9ybSB0d2ljZSAqL1xyXG5cdFx0XHR0aGlzLmlzU2F2aW5nID0gdHJ1ZTtcclxuXHJcblx0XHRcdC8qIFNlbmQgdGhlIGRhdGEgdG8gdGhlIHNlcnZlciAqL1xyXG5cdFx0XHR0aGlzLnVwZGF0ZSh7IHBhcmFtczogVXRpbHMudG9IdHRwUGFyYW1zKHsgaW5jbHVkZXM6IHRoaXMudXBkYXRlSW5jbHVkZXMgfSkgfSkuc3Vic2NyaWJlKHtcclxuXHRcdFx0XHRuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuXHRcdFx0XHRcdC8qIEFwcGx5IHNhdmVkIGRhdGEgdG8gdGhlIGZvcm0gKi9cclxuXHRcdFx0XHRcdHRoaXMub25BZnRlclN1Ym1pdChhY3Rpb24sIHJlc3BvbnNlKTtcclxuXHJcblx0XHRcdFx0XHQvKiBJZiB0aGUgdXNlciBjbGlja3MgJ2FwcGx5JyByZWxvYWQgdGhlIHBhZ2UgKi9cclxuXHRcdFx0XHRcdGlmIChhY3Rpb24gPT0gU2F2ZUFjdGlvbi5TYXZlQW5kRWRpdCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnJlbG9hZFBhZ2UoKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGVycm9yOiAoZXJyb3IpID0+IHRoaXMucGFyc2VFcnJvcnMoZXJyb3IpXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIE90aGVyd2lzZSwgY3JlYXRlIGEgbmV3IG9uZSAqL1xyXG5cdFx0ZWxzZSB7XHJcblx0XHRcdC8qIEEgZmxhZyB0byBwcmV2ZW50IHNlbmRpbmcgdGhlIGZvcm0gdHdpY2UgKi9cclxuXHRcdFx0dGhpcy5pc1NhdmluZyA9IHRydWU7XHJcblxyXG5cdFx0XHQvKiBTZW5kIHRoZSBkYXRhIHRvIHRoZSBzZXJ2ZXIgKi9cclxuXHRcdFx0dGhpcy5jcmVhdGU8VEVudGl0eT4oKS5zdWJzY3JpYmUoe1xyXG5cdFx0XHRcdG5leHQ6IChyZXNwb25zZSkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5pZCA9IHJlc3BvbnNlPy5pZDtcclxuXHRcdFx0XHRcdHRoaXMub25BZnRlclN1Ym1pdChhY3Rpb24sIHJlc3BvbnNlKTtcclxuXHJcblx0XHRcdFx0XHRpZiAoZm9ybSkge1xyXG5cdFx0XHRcdFx0XHRPYmplY3Qua2V5cyhmb3JtLmNvbnRyb2xzKS5mb3JFYWNoKGtleSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGN0ciA9IGZvcm0uY29udHJvbHNba2V5XTtcclxuXHRcdFx0XHRcdFx0XHRjdHIubWFya0FzUHJpc3RpbmUoKTtcclxuXHRcdFx0XHRcdFx0XHRjdHIubWFya0FzVW50b3VjaGVkKCk7XHJcblx0XHRcdFx0XHRcdFx0Y3RyLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRlcnJvcjogKGVycm9yKSA9PiB0aGlzLnBhcnNlRXJyb3JzKGVycm9yKVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBEZXRlY3QgY2hhbmdlcyAqL1xyXG5cdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTYXZlcyBkYXRhIGFuZCBuYXZpZ2F0ZXMgdG8gZWRpdCB2aWV3XHJcblx0ICovXHJcblx0cHVibGljIGFwcGx5KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5zYXZlKFNhdmVBY3Rpb24uU2F2ZUFuZEVkaXQpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRGVsZXRlcyB0aGUgY3VycmVudCByZWNvcmQuXHJcblx0ICovXHJcblx0cHVibGljIGRlbGV0ZSgpOiB2b2lkIHtcclxuXHRcdHRoaXMuc2hvd0RlbGV0ZUl0ZW1EaWFsb2coKS5zdWJzY3JpYmUoKGFjY2VwdDogYm9vbGVhbikgPT4ge1xyXG5cdFx0XHRpZiAoYWNjZXB0KSB7XHJcblx0XHRcdFx0dGhpcy5zZXJ2aWNlLmRlbGV0ZSh0aGlzLmlkLCBudWxsLCB7IGhlYWRlcnM6IHRoaXMudG9IdHRwSGVhZGVycyh7ICdTaG93LU1lc3NhZ2UnOiAneWVzJyB9KSB9KS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5iYWNrKCk7XHJcblx0XHRcdFx0fSwgZXJyb3IgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5kZWJ1ZyhlcnJvcik7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQnVpbGRzIHRoZSBmb3JtIGZpZWxkc1xyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBidWlsZEZpZWxkcygpOiB2b2lkIHtcclxuXHRcdC8qIEdldCBmb3JtIGRlZmluaXRpb24gKi9cclxuXHRcdHRoaXMuZm9ybURlZmluaXRpb24gPSBnZXRGb3JtRGVmaW5pdGlvbih0aGlzLm5ld0luc3RhbmNlKCkpO1xyXG5cclxuXHRcdC8qIFNldCBpbmNsdWRlcyBmcm9tIGZvcm0gZGVmaW5pdGlvbiwgaWYgYW55ICovXHJcblx0XHR0aGlzLmZvcm1EZWZpbml0aW9uPy5pbmNsdWRlcz8uZm9yRWFjaCh4ID0+IHRoaXMuaW5jbHVkZSh4LmVudGl0eSwgeC51cGRhdGUpKTtcclxuXHJcblx0XHQvKiBBZGQgdG9vbGJhciBtZW51IGl0ZW1zLCBpZiBhbnkgKi9cclxuXHRcdGlmICh0aGlzLmZvcm1EZWZpbml0aW9uPy50b29sYmFyTWVudUl0ZW1zPy5sZW5ndGgpIHtcclxuXHRcdFx0dGhpcy50b29sYmFyTWVudUl0ZW1zID8/PSBbXTtcclxuXHRcdFx0dGhpcy50b29sYmFyTWVudUl0ZW1zID0gdGhpcy50b29sYmFyTWVudUl0ZW1zLmNvbmNhdCguLi50aGlzLmZvcm1EZWZpbml0aW9uPy50b29sYmFyTWVudUl0ZW1zKTtcclxuXHRcdFx0dGhpcy50b29sYmFyTWVudUl0ZW1zLmZvckVhY2goKHgsIGkpID0+IHguaW5kZXggPz89IGkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIENyZWF0ZSB0aGUgZnJvbSBmaWVsZHMgdXNpbmcgdGhlIGVudGl0eSB0eXBlICovXHJcblx0XHR0aGlzLmZpZWxkR3JvdXBzID0gdGhpcy5mb3JtRGVmaW5pdGlvbj8uZmllbGRHcm91cHM7XHJcblxyXG5cdFx0LyogRGV0ZWN0IGNoYW5nZXMgKi9cclxuXHRcdHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQnVpbGRzIGEgbmV3IGZvcm1cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgYnVpbGRGb3JtKCk6IHZvaWQgeyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFZhbGlkYXRlcyB0aGUgZm9ybVxyXG5cdCAqIEBwYXJhbSBmb3JtIFxyXG5cdCAqL1xyXG5cdHB1YmxpYyB2YWxpZGF0ZUZvcm0oZm9ybTogTmdGb3JtIHwgRm9ybUdyb3VwID0gbnVsbCk6IHZvaWQge1xyXG5cdFx0dmFyIGZvcm0gPSBmb3JtIHx8IHRoaXMuZm9ybTtcclxuXHJcblx0XHQvKiBTZXQgdGhlIGZvcm0gYXMgc3VibWl0dGVkICovXHJcblx0XHRpZiAoZm9ybSAmJiBmb3JtIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XHJcblx0XHRcdC8qIFNldCBmb3JtIGFzIHN1Ym1pdHRlZCAqL1xyXG5cdFx0XHRmb3JtWydzdWJtaXR0ZWQnXSA9IHRydWU7XHJcblxyXG5cdFx0XHQvKiBVcGRhdGUgdmFsdWUgYW5kIHZhbGlkaXR5ICovXHJcblx0XHRcdGZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIFByaW50IHNvbWUgZGVidWcgaW5mb3JtYXRpb24gKi9cclxuXHRcdHRoaXMuZGVidWdGb3JtKGZvcm0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVmFsaWRhdGVzIHRoZSBmb3JtXHJcblx0ICogQHBhcmFtIGZvcm0gXHJcblx0ICovXHJcblx0cHVibGljIGlzRm9ybVZhbGlkKGZvcm06IE5nRm9ybSB8IEZvcm1Hcm91cCA9IG51bGwpOiBib29sZWFuIHtcclxuXHRcdC8qIFByaW50IHNvbWUgZGVidWcgaW5mb3JtYXRpb24gKi9cclxuXHRcdHRoaXMuZGVidWdGb3JtKGZvcm0pO1xyXG5cclxuXHRcdC8qIElmIHRoZSBmb3JtIGlzdCBub3QgdmFsaWQuLiAqL1xyXG5cdFx0aWYgKCFmb3JtLnZhbGlkKSB7XHJcblx0XHRcdC8qIE1hcmsgaW52YWxpZCBjb250cm9scyBhcyBkaXJ0dHkgYW5kIHRvdWNoZWQgKi9cclxuXHRcdFx0T2JqZWN0LmtleXMoZm9ybS5jb250cm9scylcclxuXHRcdFx0XHQuZmlsdGVyKHggPT4gIWZvcm0uY29udHJvbHNbeF0udmFsaWQpXHJcblx0XHRcdFx0LmZvckVhY2goa2V5ID0+IHRoaXMuaW52YWxpZGF0ZUNvbnRyb2woZm9ybS5jb250cm9sc1trZXldKSk7XHJcblxyXG5cdFx0XHQvKiBTaG93IGVycm9yIG1lc3NhZ2VzICovXHJcblx0XHRcdChhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0LyogV2FpdCB1bnRpbCAnbWF0LWVycm9yJyBkaXNwbGF5ZWQgKi9cclxuXHRcdFx0XHRhd2FpdCBuZXcgUHJvbWlzZSh5ID0+IHNldFRpbWVvdXQoeSwgMjAwKSk7XHJcblxyXG5cdFx0XHRcdC8qIFBhcnNlIHRoZSBlcnJvciBtZXNzYWdlcyAqL1xyXG5cdFx0XHRcdHZhciBlcnJvcnMgPSBBcnJheTxzdHJpbmc+KCk7XHJcblx0XHRcdFx0T2JqZWN0LmtleXMoZm9ybS5jb250cm9scylcclxuXHRcdFx0XHRcdC5maWx0ZXIoeCA9PiAhZm9ybS5jb250cm9sc1t4XS52YWxpZClcclxuXHRcdFx0XHRcdC5mb3JFYWNoKGtleSA9PiB7XHJcblx0XHRcdFx0XHRcdC8qIEdldCBlcnJvciB0ZXh0ICovXHJcblx0XHRcdFx0XHRcdHZhciBlcnJvciA9IHRoaXMuZ2V0RWxlbWVudEVycm9yKChmb3JtLmNvbnRyb2xzW2tleV0gYXMgYW55KT8ubmF0aXZlRWxlbWVudCk7XHJcblx0XHRcdFx0XHRcdGlmIChlcnJvcikge1xyXG5cdFx0XHRcdFx0XHRcdGVycm9ycy5wdXNoKGVycm9yKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdC8qIEJ1aWxkIGVycm9yIG1lc3NhZ2UgKi9cclxuXHRcdFx0XHR2YXIgbWVzc2FnZSA9IGVycm9ycy5sZW5ndGggPyBlcnJvcnMuc2xpY2UoMCwgMykuam9pbignXFxuJykgOiAkbG9jYWxpemVgOkBAc25hY2tiYXIuZXJyb3IucmVxdWlyZWQtZmllbGRzOkFsbCBmaWVsZHMgbWFya2VkIHdpdGggYW4gYXN0ZXJpc2sgKCopIGFyZSByZXF1aXJlZC5gO1xyXG5cclxuXHRcdFx0XHQvKiBzaG93IGEgbm90aWNlICovXHJcblx0XHRcdFx0dGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbihtZXNzYWdlLCAnT2snLCB7IGR1cmF0aW9uOiAzMDAwLCBwYW5lbENsYXNzOiBbJ2Vycm9yJ10gfSk7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9KSgpO1xyXG5cclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVzZXRzIGZvcm0gY29udHJvbHNcclxuXHQgKiBAcGFyYW0gZm9ybSBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRwdWJsaWMgcmVzZXRGb3JtKGZvcm06IE5nRm9ybSk6IHZvaWQge1xyXG5cdFx0aWYgKCFmb3JtKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRPYmplY3Qua2V5cyhmb3JtLmNvbnRyb2xzKS5mb3JFYWNoKGtleSA9PiB7XHJcblx0XHRcdGxldCBjdHIgPSBmb3JtLmNvbnRyb2xzW2tleV07XHJcblx0XHRcdGN0ci5tYXJrQXNQcmlzdGluZSgpO1xyXG5cdFx0XHRjdHIubWFya0FzVW50b3VjaGVkKCk7XHJcblx0XHRcdGN0ci51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEludmFsaWRhdGUgY29udHJvbHMgcmVjdXJzaXZlbHlcclxuXHQgKiBAcGFyYW0gY29udHJvbCBcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgaW52YWxpZGF0ZUNvbnRyb2woY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogdm9pZCB7XHJcblx0XHQvKiBDaGVjayB0aGUgY29udHJvbCBhZ2FpbnN0IG51bGwgKi9cclxuXHRcdGlmICghY29udHJvbCkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0LyogQ2hlY2sgaWYgdGhlIGNvbnRyb2wgaXMgYSBncm91cCAqL1xyXG5cdFx0bGV0IGZvcm1Hcm91cCA9IGNvbnRyb2wgYXMgRm9ybUdyb3VwO1xyXG5cdFx0aWYgKGZvcm1Hcm91cD8uY29udHJvbHMpIHtcclxuXHRcdFx0T2JqZWN0LmtleXMoZm9ybUdyb3VwLmNvbnRyb2xzKVxyXG5cdFx0XHRcdC5maWx0ZXIoeCA9PiAhZm9ybUdyb3VwLmNvbnRyb2xzW3hdLnZhbGlkKVxyXG5cdFx0XHRcdC5mb3JFYWNoKHggPT4gdGhpcy5pbnZhbGlkYXRlQ29udHJvbChmb3JtR3JvdXAuY29udHJvbHNbeF0pKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuXHRcdFx0Y29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTaG93cyBmb3JtIGVycm9yc1xyXG5cdCAqIEBwYXJhbSBmb3JtIFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBkZWJ1Z0Zvcm0oZm9ybTogTmdGb3JtIHwgRm9ybUdyb3VwID0gbnVsbCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMuZGVidWcpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coJ0Zvcm06JywgZm9ybSk7XHJcblx0XHRcdE9iamVjdC5rZXlzKGZvcm0uY29udHJvbHMpLmZvckVhY2goa2V5ID0+IHtcclxuXHRcdFx0XHRjb25zdCBjb250cm9sRXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzID0gZm9ybS5jb250cm9sc1trZXldLmVycm9ycztcclxuXHRcdFx0XHRpZiAoY29udHJvbEVycm9ycyAhPSBudWxsKSB7XHJcblx0XHRcdFx0XHRPYmplY3Qua2V5cyhjb250cm9sRXJyb3JzKS5mb3JFYWNoKGtleUVycm9yID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coJ0tleSBjb250cm9sOiAnICsga2V5ICsgJywga2V5RXJyb3I6ICcgKyBrZXlFcnJvciArICcsIGVyciB2YWx1ZTogJywgY29udHJvbEVycm9yc1trZXlFcnJvcl0pO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZCB0b29sYmFyIG1lbnUgaXRlbXNcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgYWRkVG9vbGJhck1lbnVJdGVtcygpOiB2b2lkIHtcclxuXHRcdC8qIEFkZCAnRGVsZXRlJyBtZW51IGl0ZW0gKi9cclxuXHRcdGlmICh0aGlzLmRlbGV0YWJsZSkge1xyXG5cdFx0XHR0aGlzLnRvb2xiYXJNZW51SXRlbXMucHVzaCh7XHJcblx0XHRcdFx0dGl0bGU6ICRsb2NhbGl6ZWA6QEBkZWxldGU6RGVsZXRlYCxcclxuXHRcdFx0XHRpY29uOiAnZGVsZXRlX2ZvcmV2ZXInLFxyXG5cdFx0XHRcdGljb25DbGFzczogJ3RjLW9yYW5nZS04MDAnLFxyXG5cdFx0XHRcdGV2ZW50OiAoKSA9PiB0aGlzLmRlbGV0ZSgpLFxyXG5cdFx0XHRcdGRpc2FibGU6ICgpID0+ICF0aGlzLmlkLFxyXG5cdFx0XHRcdGhpZGU6ICgpID0+ICF0aGlzLmNhbkRlbGV0ZSgpLFxyXG5cdFx0XHRcdGluZGV4OiAxMDAwXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLnRvb2xiYXJNZW51SXRlbXMubGVuZ3RoKSB7XHJcblx0XHRcdC8qIFNvcnQgdGhlIG1lbnUgaXRlbXMgYnkgaW5kZXggKi9cclxuXHRcdFx0VXRpbHMuc29ydEFycmF5KHRoaXMudG9vbGJhck1lbnVJdGVtcywgJ2luZGV4Jyk7XHJcblxyXG5cdFx0XHQvKiBBZGQgdGhlIHRvb2xiYXIgbWVudSBpdGVtcyB0byB0aGUgdGhlIHRvb2xiYXIgYWN0aW9ucyAqL1xyXG5cdFx0XHR0aGlzLnRvb2xiYXJBY3Rpb25zLnB1c2goeyBpY29uOiAnbW9yZV92ZXJ0JywgaXRlbXM6IHRoaXMudG9vbGJhck1lbnVJdGVtcyB9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIExvYWRzIHRoZSBwcmV2aW91cyBVUkwgaW4gdGhlIGhpc3RvcnkgbGlzdC5cclxuXHQgKiBAcGFyYW0gYWN0aW9uXHJcblx0ICovXHJcblx0cHVibGljIGJhY2soYWN0aW9uOiBTYXZlQWN0aW9uID0gU2F2ZUFjdGlvbi5TYXZlQW5kQ2xvc2UpOiB2b2lkIHtcclxuXHRcdGlmIChhY3Rpb24gPT0gU2F2ZUFjdGlvbi5TYXZlQW5kQ2xvc2UgJiYgdGhpcy5yZXR1cm5VcmwpIHtcclxuXHRcdFx0dGhpcy5uYXZpZ2F0ZVRvUmV0dXJuVXJsKCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpZiAodGhpcy5pc0VkaXRNb2RlKSB7XHJcblx0XHRcdFx0aWYgKGFjdGlvbiA9PSBTYXZlQWN0aW9uLlNhdmVBbmRDbG9zZSkge1xyXG5cdFx0XHRcdFx0dGhpcy5sb2NhdGlvbi5iYWNrKCk7XHJcblx0XHRcdFx0fSBlbHNlIGlmIChhY3Rpb24gPT0gU2F2ZUFjdGlvbi5TYXZlQW5kRWRpdCkge1xyXG5cdFx0XHRcdFx0dGhpcy5yZWxvYWRQYWdlKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGlmIChhY3Rpb24gPT0gU2F2ZUFjdGlvbi5TYXZlQW5kQ2xvc2UpIHtcclxuXHRcdFx0XHRcdHRoaXMubG9jYXRpb24uYmFjaygpO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uID09IFNhdmVBY3Rpb24uU2F2ZUFuZEVkaXQgJiYgdGhpcy5pZCA+IDApIHtcclxuXHRcdFx0XHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKFtgJHt0aGlzLmFkZFNhdmVBbmRFZGl0Um91dGV9JHt0aGlzLmlkfWBdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XHJcblx0XHRcdFx0fSBlbHNlIGlmIChhY3Rpb24gPT0gU2F2ZUFjdGlvbi5TYXZlQW5kTmV3KSB7XHJcblx0XHRcdFx0XHR0aGlzLmFmdGVyUmVsb2FkKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTZXRzIHJldHVybiB1cmxcclxuXHQgKiBAcGFyYW0gcmV0dXJuVXJsIFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBzZXRSZXR1cm5VcmwocmV0dXJuVXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuXHRcdHN1cGVyLnNldFJldHVyblVybChyZXR1cm5VcmwpO1xyXG5cdFx0dGhpcy5saXN0Um91dGUgPSB0aGlzLnJldHVyblVybCB8fCB0aGlzLmxpc3RSb3V0ZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIFRFbnRpdHlcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgbmV3SW5zdGFuY2UoKTogVEVudGl0eSB7XHJcblx0XHRyZXR1cm4gbmV3IHRoaXMuZW50aXR5Q3RvcigpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ3JlYXRlcyB0aGUgZW50aXR5XHJcblx0ICogQHBhcmFtIGh0dHBPcHRpb25zIFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBjcmVhdGU8VEVudGl0eT4oaHR0cE9wdGlvbnM/OiBPYmplY3QpOiBPYnNlcnZhYmxlPFRFbnRpdHk+IHtcclxuXHRcdHRoaXMub25CZWZvcmVDcmVhdGUoKTtcclxuXHRcdHJldHVybiB0aGlzLnNlcnZpY2UuY3JlYXRlPFRFbnRpdHk+KHRoaXMuZm9ybVZhbHVlLCBudWxsLCBPYmplY3QuYXNzaWduKGh0dHBPcHRpb25zIHx8IHt9LCB7IGhlYWRlcnM6IHRoaXMudG9IdHRwSGVhZGVycyh7ICdTaG93LU1lc3NhZ2UnOiAneWVzJyB9KSB9KSwgZmFsc2UpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVXBkYXRlcyB0aGUgZW50aXR5XHJcblx0ICogQHBhcmFtIGh0dHBPcHRpb25zIFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCB1cGRhdGUoaHR0cE9wdGlvbnM/OiBPYmplY3QpOiBPYnNlcnZhYmxlPFRFbnRpdHk+IHtcclxuXHRcdHRoaXMub25CZWZvcmVVcGRhdGUoKTtcclxuXHRcdHJldHVybiB0aGlzLnNlcnZpY2UudXBkYXRlKHRoaXMuaWQsIE9iamVjdC5hc3NpZ24odGhpcy5pdGVtLCB0aGlzLmZvcm1WYWx1ZSksIG51bGwsIE9iamVjdC5hc3NpZ24oaHR0cE9wdGlvbnMgfHwge30sIHsgaGVhZGVyczogdGhpcy50b0h0dHBIZWFkZXJzKHsgJ1Nob3ctTWVzc2FnZSc6ICd5ZXMnIH0pLCB9KSwgZmFsc2UpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogSW5jbHVkZXMgc29tZSBuYXZpZ2F0aW9uc1xyXG5cdCAqIEBwYXJhbSBpbmMgXHJcblx0ICogQHBhcmFtIHVwZGF0ZSBcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgaW5jbHVkZShpbmM6IHN0cmluZywgdXBkYXRlOiBib29sZWFuID0gZmFsc2UpIHtcclxuXHRcdHRoaXMuaW5jbHVkZXMucHVzaChpbmMpO1xyXG5cdFx0aWYgKHVwZGF0ZSkge1xyXG5cdFx0XHR0aGlzLnVwZGF0ZUluY2x1ZGVzLnB1c2goaW5jKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrIGlmIHRoZSBpdGVtIGlzIGRlbGV0YWJsZVxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBjYW5EZWxldGUoKTogYm9vbGVhbiB7IHJldHVybiAhdGhpcy5pdGVtPy5oYXNPd25Qcm9wZXJ0eSgnZGVsZXRhYmxlJykgfHwgdGhpcy5pdGVtWydkZWxldGFibGUnXTsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHNlbGVjdGVkIHN0ZXAgaGFzIGNoYW5nZWQuXHJcblx0ICogQHBhcmFtICRldmVudCBcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgb25BZnRlclN0ZXBDaGFuZ2UoJGV2ZW50OiBTdGVwcGVyU2VsZWN0aW9uRXZlbnQpOiB2b2lkIHsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGVudGl0eSBoYXMgYmVlbiBsb2FkZWQuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIG9uQWZ0ZXJJdGVtTG9hZGVkKCk6IHZvaWQgeyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEV2ZW50IGVtaXR0ZWQgYmVmb3JlIHRoZSBmb3JtIGhhcyBidWlsdC5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgb25CZWZvcmVGb3JtQnVpbGQoKTogdm9pZCB7IH1cclxuXHJcblx0LyoqXHJcblx0ICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBmb3JtIGhhcyBidWlsdC5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgb25BZnRlckZvcm1CdWlsZCgpOiB2b2lkIHsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGVudGl0eSBoYXMgYmVlbiBjcmVhdGVkLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBvbkJlZm9yZUNyZWF0ZSgpOiB2b2lkIHsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGVudGl0eSBoYXMgYmVlbiB1cGRhdGVkLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBvbkJlZm9yZVVwZGF0ZSgpOiB2b2lkIHsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBDYWxsZWQgYmVmb3JlIGRhdGEgc3VibWl0aW9uXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGJlZm9yZVN1Ym1pdChfOiBTYXZlQWN0aW9uID0gU2F2ZUFjdGlvbi5TYXZlQW5kQ2xvc2UpOiB2b2lkIHsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBFdmVudCBlbWl0dGVkIGFmdGVyIGRhdGEgc3VibWl0aW9uXHJcblx0ICogQHBhcmFtIGFjdGlvbiBcclxuXHQgKiBAcGFyYW0gcmVzcG9uc2UgXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIG9uQWZ0ZXJTdWJtaXQoYWN0aW9uOiBTYXZlQWN0aW9uID0gU2F2ZUFjdGlvbi5TYXZlQW5kQ2xvc2UsIHJlc3BvbnNlOiBhbnkgPSBudWxsKTogdm9pZCB7XHJcblx0XHR0aGlzLmlzU2F2aW5nID0gZmFsc2U7XHJcblx0XHR0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHRcdHRoaXMuYmFjayhhY3Rpb24pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2FsbGVkIGFmdGVyIHBhZ2UgcmVsb2FkZWRcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgYWZ0ZXJSZWxvYWQoKTogdm9pZCB7XHJcblx0XHR0aGlzLml0ZW0gPSBPYmplY3QuYXNzaWduKHRoaXMubmV3SW5zdGFuY2UoKSwgdGhpcy5xdWVyeSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTZXRzIGZvY3VzIHRvIGZpcnN0IGlucHV0XHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGZvY3VzKCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMuaW5wdXQgJiYgdGhpcy5pbnB1dC5maXJzdCAmJiB0aGlzLmlucHV0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQpIHtcclxuXHRcdFx0dGhpcy5pbnB1dC5maXJzdC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXRzIGVsZW1lbnQgZXJyb3JcclxuXHQgKiBAcGFyYW0gbmF0aXZlRWxlbWVudCBcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgZ2V0RWxlbWVudEVycm9yKG5hdGl2ZUVsZW1lbnQ6IGFueSk6IHN0cmluZyB7XHJcblx0XHQvKiBHZXQgcGFyYW5ldCBlbGVtZW50ICdtYXQtZm9ybS1maWVsZCcgKi9cclxuXHRcdHZhciBtYXRGb3JtRmllbGQgPSBuYXRpdmVFbGVtZW50Py5jbG9zZXN0KCcubWF0LWZvcm0tZmllbGQnKTtcclxuXHRcdGlmICghbWF0Rm9ybUZpZWxkKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIEdldCBjaGlsZCBlbGVtZW50ICdtYXQtZXJyb3InICovXHJcblx0XHR2YXIgbWF0RXJyb3JzID0gbWF0Rm9ybUZpZWxkLnF1ZXJ5U2VsZWN0b3JBbGwoJy5tYXQtZXJyb3InKTtcclxuXHRcdGlmICghbWF0RXJyb3JzKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIEdldCBjaGlsZCBlbGVtZW50ICdtYXQtbGFiZWwnICovXHJcblx0XHR2YXIgbWF0TGFiZWwgPSBtYXRGb3JtRmllbGQucXVlcnlTZWxlY3RvcignbWF0LWxhYmVsJyk7XHJcblx0XHRpZiAoIW1hdExhYmVsKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIEdldCBlcnJvciB0ZXh0cyAqL1xyXG5cdFx0dmFyIGVycm9yc0FycmF5ID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobWF0RXJyb3JzKVxyXG5cdFx0XHQ/LmZpbHRlcigoeDogYW55KSA9PiB4LnRleHRDb250ZW50KVxyXG5cdFx0XHQ/Lm1hcCgoeDogYW55KSA9PiB4LnRleHRDb250ZW50KTtcclxuXHJcblx0XHRyZXR1cm4gYCcke21hdExhYmVsLnRleHRDb250ZW50fSc6ICR7ZXJyb3JzQXJyYXk/LmpvaW4oJywgJyl9YDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlc3BvbmRzIHRvIHVzZXItaW5pdGlhdGVkIGV2ZW50c1xyXG5cdCAqIEBwYXJhbSBldmVudCBcclxuXHQgKi9cclxuXHRASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSlcclxuXHRoYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcblx0XHRpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSB7XHJcblx0XHRcdHN3aXRjaCAoZXZlbnQua2V5KSB7XHJcblx0XHRcdFx0Y2FzZSAncyc6XHJcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0dGhpcy5zYXZlKFNhdmVBY3Rpb24uU2F2ZUFuZENsb3NlKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0XHRjYXNlICdkJzpcclxuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdFx0XHR0aGlzLnNhdmUoU2F2ZUFjdGlvbi5TYXZlQW5kTmV3KTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0XHRjYXNlICdlJzpcclxuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdFx0XHR0aGlzLnNhdmUoU2F2ZUFjdGlvbi5TYXZlQW5kRWRpdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8qIENhbmNlbCB0aGUgZm9ybSwgaWYgdGhlIHVzZXIgcHJlc3MgdGhlIEVTQyBrZXkgKi9cclxuXHRcdGlmIChldmVudC5rZXlDb2RlID09IDI3KSB7XHJcblx0XHRcdHRoaXMuYmFjaygpO1xyXG5cdFx0fVxyXG5cdH1cclxufSJdfQ==
|
|
693
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1mb3JtLWJhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvYmFzZS9jb21wb25lbnRzL2dlbmVyaWMtZm9ybS1iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQTRCLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckksT0FBTyxFQUFtQixTQUFTLEVBQTRCLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBR3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUtwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7OztBQUVqRCxXQUFXO0FBRVgsTUFBTSxPQUFnQix3QkFBNEYsU0FBUSxhQUFhO0lBME10STs7O09BR0c7SUFDSCxZQUNRLFVBQThCLEVBQzNCLE9BQWlCLEVBQ2pCLEtBQXFCLEVBQ3JCLGlCQUFvQztRQUU5QyxLQUFLLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFMekIsZUFBVSxHQUFWLFVBQVUsQ0FBb0I7UUFDM0IsWUFBTyxHQUFQLE9BQU8sQ0FBVTtRQUNqQixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixzQkFBaUIs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QUF3QixzUUE2S2xDLFVBQVU7MkZBN0tBLHdCQUF3QjtrQkFEN0MsU0FBUzsrS0FtQ0UsRUFBRTtzQkFEWixLQUFLO2dCQWdCSSxLQUFLO3NCQURkLEtBQUs7Z0JBT0ssSUFBSTtzQkFEZCxLQUFLO2dCQW1CQyxRQUFRO3NCQURkLEtBQUs7Z0JBT0MsVUFBVTtzQkFEaEIsS0FBSztnQkFZQyxLQUFLO3NCQURYLEtBQUs7Z0JBcUZJLFVBQVU7c0JBRG5CLFNBQVM7dUJBQUMsVUFBVTtnQkFPZCxLQUFLO3NCQURYLFlBQVk7dUJBQUMsT0FBTztnQkErbEJyQixtQkFBbUI7c0JBRGxCLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGVwcGVyU2VsZWN0aW9uRXZlbnQgfSBmcm9tICdAYW5ndWxhci9jZGsvc3RlcHBlcic7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBEaXJlY3RpdmUsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtR3JvdXAsIE5nRm9ybSwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0U3RlcHBlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3N0ZXBwZXInO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSwgdGFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSAnLi4vLi4vY29tbW9uL2Z1bmN0aW9ucy91dGlscyc7XHJcbmltcG9ydCB7IEFjdGlvbkl0ZW0gfSBmcm9tICcuLi8uLi9jb21tb24vbW9kZWxzL2FjdGlvbi1pdGVtJztcclxuaW1wb3J0IHsgSUVudGl0eSB9IGZyb20gJy4uLy4uL2NvbW1vbi9tb2RlbHMvZW50aXR5JztcclxuaW1wb3J0IHsgU2F2ZUFjdGlvbiB9IGZyb20gJy4uLy4uL2NvbW1vbi9tb2RlbHMvc2F2ZS1hY3Rpb24nO1xyXG5pbXBvcnQgeyBnZXRGb3JtRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2Zvcm1zL2Z1bmN0aW9ucy9mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBGb3JtRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2Zvcm1zL21vZGVscy9mb3JtLWRlZmluaXRpb24nO1xyXG5pbXBvcnQgeyBGb3JtRmllbGRHcm91cERlZmluaXRpb24gfSBmcm9tICcuLi8uLi9mb3Jtcy9tb2RlbHMvZm9ybS1maWVsZC1ncm91cC1kZWZpbml0aW9uJztcclxuaW1wb3J0IHsgR2VuZXJpY1NlcnZpY2UgfSBmcm9tICcuLi8uLi9odHRwL3NlcnZpY2VzL2dlbmVyaWMuc2VydmljZSc7XHJcbmltcG9ydCB7IElHZW5lcmljRm9ybUJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2lnZW5lcmljLWZvcm0tYmFzZSc7XHJcbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICcuL2Jhc2UuY29tcG9uZW50JztcclxuXHJcbi8vIEBkeW5hbWljXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHkgZXh0ZW5kcyBJRW50aXR5LCBUU2VydmljZSBleHRlbmRzIEdlbmVyaWNTZXJ2aWNlPFRFbnRpdHk+PiBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBJR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHk+LCBPbkNoYW5nZXMge1xyXG5cdC8qKlxyXG5cdCAqIFRoZSBhY3Rpb24gb2YgdGhlIGZvcm0gKGFkZCB8IGVkaXQpXHJcblx0ICovXHJcblx0cHVibGljIGFjdGlvbjogc3RyaW5nID0gJ2FkZCc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFjdGlvbiA9IGVkaXQ/XHJcblx0ICovXHJcblx0cHVibGljIGlzRWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqXHJcblx0ICogU2F2ZSBhY3Rpb25cclxuXHQgKi9cclxuXHRwdWJsaWMgU2F2ZUFjdGlvbjogdHlwZW9mIFNhdmVBY3Rpb24gPSBTYXZlQWN0aW9uO1xyXG5cclxuXHQvKipcclxuXHQgKiBSb3V0ZXNcclxuXHQgKi9cclxuXHRwdWJsaWMgZWRpdFNhdmVBbmRDbG9zZVJvdXRlOiBzdHJpbmcgPSAnLi4vLi4vJztcclxuXHRwdWJsaWMgYWRkU2F2ZUFuZENsb3NlUm91dGU6IHN0cmluZyA9ICcuLi8nO1xyXG5cdHB1YmxpYyBhZGRTYXZlQW5kRWRpdFJvdXRlOiBzdHJpbmcgPSAnLi4vZWRpdC8nO1xyXG5cdHB1YmxpYyBhZGRTYXZlQW5kTmV3Um91dGU6IHN0cmluZyA9ICcuLi9hZGQnO1xyXG5cdHB1YmxpYyBsaXN0Um91dGU6IHN0cmluZyA9IHRoaXMuYWRkU2F2ZUFuZENsb3NlUm91dGU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoZSBpZCBvZiB0aGUgaXRlbSB0byBsb2FkXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIF9pZDogbnVtYmVyIHwgc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgaWQgb2YgdGhlIGl0ZW0gdG8gbG9hZFxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIGdldCBpZCgpOiBudW1iZXIgfCBzdHJpbmcgeyByZXR1cm4gdGhpcy5faWQ7IH1cclxuXHRwdWJsaWMgc2V0IGlkKGlkOiBudW1iZXIgfCBzdHJpbmcpIHtcclxuXHRcdGlmICh0aGlzLl9pZCAhPSBpZCkge1xyXG5cdFx0XHR0aGlzLl9pZCA9IGlkO1xyXG5cdFx0XHR0aGlzLmFjdGlvbiA9ICdlZGl0JztcclxuXHRcdFx0dGhpcy5pc0VkaXRNb2RlID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5saXN0Um91dGUgPSB0aGlzLmVkaXRTYXZlQW5kQ2xvc2VSb3V0ZTtcclxuXHRcdFx0dGhpcy5vbkFmdGVyU2V0SWQoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoZSBjdXJyZW50IGl0ZW0gdG8gYWRkIG9yIGVkaXRcclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHByb3RlY3RlZCBfaXRlbTogVEVudGl0eTtcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIGN1cnJlbnQgaXRlbSB0byBhZGQgb3IgZWRpdFxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIGdldCBpdGVtKCk6IFRFbnRpdHkgeyByZXR1cm4gdGhpcy5faXRlbTsgfTtcclxuXHRwdWJsaWMgc2V0IGl0ZW0oaXRlbTogVEVudGl0eSkge1xyXG5cdFx0aWYgKHRoaXMuX2l0ZW0gIT0gaXRlbSkge1xyXG5cdFx0XHR0aGlzLl9pdGVtID0gaXRlbTtcclxuXHRcdFx0dGhpcy5pZCA/Pz0gaXRlbT8uaWQ7XHJcblx0XHRcdHRoaXMuYnVpbGRGaWVsZHMoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlcHJlc2VudHMgdGhlIHJlcXVlc3QgZXJyb3JzXHJcblx0ICovXHJcblx0cHVibGljIGVycm9yczogQXJyYXk8c3RyaW5nPiA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEluY2x1ZGVzXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgaW5jbHVkZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIFByb2plY3Rpb25cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBwcm9qZWN0aW9uOiBzdHJpbmdbXTtcclxuXHJcblx0LyoqXHJcblx0ICogVXBkYXRlIGluY2x1ZGVzXHJcblx0ICovXHJcblx0cHVibGljIHVwZGF0ZUluY2x1ZGVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgcGFyYW1zXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgcXVlcnk6IGFueSA9IHt9O1xyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgY3VycmVudCBkYXRlXHJcblx0ICovXHJcblx0cHVibGljIGN1cnJlbnREYXRlOiBEYXRlID0gbmV3IERhdGUoKTtcclxuXHJcblx0LyoqXHJcblx0ICogRGF0ZSAmIHRpbWUgbWFza1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBkYXRlVGltZU1hc2sgPSBbL1swLTNdLywgL1swLTldLywgJy4nLCAvWzAtMV0vLCAvWzAtOV0vLCAnLicsIDIsIDAsIC9bMS0yXS8sIC9bMC05XS8sICcgJywgL1swLTJdLywgL1swLTldLywgJzonLCAvWzAtNV0vLCAvWzAtOV0vXTtcclxuXHJcblx0LyoqXHJcblx0ICogRGF0ZSBtYXNrXHJcblx0ICovXHJcblx0cHVibGljIGRhdGVNYXNrID0gWy9bMC0zXS8sIC9bMC05XS8sICcuJywgL1swLTFdLywgL1swLTldLywgJy4nLCAyLCAwLCAvWzEtMl0vLCAvWzAtOV0vXTtcclxuXHJcblx0LyoqXHJcblx0ICogVGltZSBtYXNrXHJcblx0ICovXHJcblx0cHVibGljIHRpbWVNYXNrID0gWy9bMC0yXS8sIC9bMC05XS8sICc6JywgL1swLTVdLywgL1swLTldL107XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgcGF0dGVybiB0byB2YWxpZGF0ZSBkYXRlc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBkYXRlUGF0dGVybjogc3RyaW5nID0gYCg/Oig/OjMxKFxcXFwvfC18XFxcXC4pKD86MD9bMTM1NzhdfDFbMDJdKSlcXFxcMXwoPzooPzoyOXwzMCkoXFxcXC98LXxcXFxcLikoPzowP1sxLDMtOV18MVswLTJdKVxcXFwyKSkoPzooPzoxWzYtOV18WzItOV1cXFxcZCk/XFxcXGR7Mn0pJHxeKD86MjkoXFxcXC98LXxcXFxcLikwPzJcXFxcMyg/Oig/Oig/OjFbNi05XXxbMi05XVxcXFxkKT8oPzowWzQ4XXxbMjQ2OF1bMDQ4XXxbMTM1NzldWzI2XSl8KD86KD86MTZ8WzI0NjhdWzA0OF18WzM1NzldWzI2XSkwMCkpKSkkfF4oPzowP1sxLTldfDFcXFxcZHwyWzAtOF0pKFxcXFwvfC18XFxcXC4pKD86KD86MD9bMS05XSl8KD86MVswLTJdKSlcXFxcNCg/Oig/OjFbNi05XXxbMi05XVxcXFxkKT9cXFxcZHsyfSlgO1xyXG5cclxuXHQvKipcclxuXHQgKiBQaG9uZSBwcmVmaXggdmFsaWRhdGlvbiBwYXR0ZXJuXHJcblx0ICovXHJcblx0cHVibGljIHBob25lUHJlZml4UGF0dGVybjogc3RyaW5nID0gJ14oMFxcXFxkezIsNn0pJCc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBob25lIG51bWJlciB2YWxpZGF0aW9uIHBhdHRlcm5cclxuXHQgKi9cclxuXHRwdWJsaWMgcGhvbmVOdW1iZXJQYXR0ZXJuOiBzdHJpbmcgPSAnXihcXFxcZHszLDMwfSkkJztcclxuXHJcblx0LyoqXHJcblx0ICogUGFzc3dvcmQgdmFsaWRhdGlvbiBwYXR0ZXJuXHJcblx0ICovXHJcblx0cHVibGljIHBhc3N3b3JkUGF0dGVybjogc3RyaW5nID0gJ14oPz0uKlthLXpdKSg/PS4qW0EtWl0pKD89LipcXFxcZCkoPz0uKlskQCQhJSo/Jl0pW0EtWmEtelxcXFxkJEAkISUqPyZdezYsfSc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIERlZmF1bHRzIG1vZHVsZXMgYW5kIHRvb2xiYXJcclxuXHQgKi9cclxuXHRwdWJsaWMgZWRpdG9yT3B0aW9ucyA9IHtcclxuXHRcdG1vZHVsZXM6IHtcclxuXHRcdFx0dG9vbGJhcjogW1xyXG5cdFx0XHRcdFsnYm9sZCcsICdpdGFsaWMnLCAndW5kZXJsaW5lJ10sXHJcblx0XHRcdFx0W3sgJ2xpc3QnOiAnb3JkZXJlZCcgfSwgeyAnbGlzdCc6ICdidWxsZXQnIH1dLFxyXG5cdFx0XHRcdFt7ICdpbmRlbnQnOiAnLTEnIH0sIHsgJ2luZGVudCc6ICcrMScgfV0sXHJcblx0XHRcdFx0W3sgJ3NpemUnOiBbJ3NtYWxsJywgZmFsc2UsICdsYXJnZScsICdodWdlJ10gfV0sXHJcblx0XHRcdFx0W3sgJ2hlYWRlcic6IFsxLCAyLCAzLCA0LCA1LCA2LCBmYWxzZV0gfV0sXHJcblx0XHRcdFx0W3sgJ2NvbG9yJzogbmV3IEFycmF5PGFueT4oKSB9LCB7ICdiYWNrZ3JvdW5kJzogbmV3IEFycmF5PGFueT4oKSB9XSxcclxuXHRcdFx0XHRbJ2xpbmsnLCAnaW1hZ2UnXVxyXG5cdFx0XHRdLFxyXG5cdFx0XHRjbGlwYm9hcmQ6IHtcclxuXHRcdFx0XHRtYXRjaFZpc3VhbDogZmFsc2VcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIElmIHRydWUsIHNob3cgdGhlIG1lbnUgJ0RlbGV0ZSdcclxuXHQgKi9cclxuXHRwdWJsaWMgZGVsZXRhYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblx0LyoqXHJcblx0ICogVG9vbGJhciBtZW51IGl0ZW1zXHJcblx0ICovXHJcblx0cHVibGljIHRvb2xiYXJNZW51SXRlbXM6IEFjdGlvbkl0ZW1bXSA9IFtdO1xyXG5cclxuXHQvKipcclxuXHQgKiBUb29sYmFyIGFjdGlvbiBidXR0b25zXHJcblx0ICovXHJcblx0cHVibGljIHRvb2xiYXJBY3Rpb25zOiBBY3Rpb25JdGVtPFRFbnRpdHksIElHZW5lcmljRm9ybUJhc2VDb21wb25lbnQ8VEVudGl0eT4+W10gPSBbe1xyXG5cdFx0aWNvbjogJ3N5bmMnLFxyXG5cdFx0ZXZlbnQ6ICgpID0+IHRoaXMucmVsb2FkUGFnZSgpLFxyXG5cdH1dO1xyXG5cclxuXHQvKipcclxuXHQgKiBNYXRTdGVwcGVyIHJlZlxyXG5cdCAqL1xyXG5cdEBWaWV3Q2hpbGQoTWF0U3RlcHBlcilcclxuXHRwcm90ZWN0ZWQgbWF0U3RlcHBlcjogTWF0U3RlcHBlcjtcclxuXHJcblx0LyoqXHJcblx0ICogQSByZWZlcmVuY2UgdG8gdGhlIGlucHV0IGVsZW1lbnRcclxuXHQgKi9cclxuXHRAVmlld0NoaWxkcmVuKCdmb2N1cycpXHJcblx0cHVibGljIGlucHV0OiBhbnk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEZvcm0gZ3JvdXBcclxuXHQgKi9cclxuXHRwdWJsaWMgZm9ybTogTmdGb3JtIHwgRm9ybUdyb3VwO1xyXG5cclxuXHQvKipcclxuXHQgKiBHZXRzIGZvcm0gdmFsdWVcclxuXHQgKi9cclxuXHRwdWJsaWMgYWJzdHJhY3QgZ2V0IGZvcm1WYWx1ZSgpOiBURW50aXR5IHwgYW55O1xyXG5cclxuXHQvKipcclxuXHQgKiBmb3JtRGVmaW5pdGlvbjogRm9ybURlZmluaXRpb25cclxuXHQgKi9cclxuXHRwdWJsaWMgZm9ybURlZmluaXRpb246IEZvcm1EZWZpbml0aW9uO1xyXG5cclxuXHQvKipcclxuXHQgKiBmaWVsZEdyb3VwczogRm9ybUZpZWxkR3JvdXBbXVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBmaWVsZEdyb3VwczogRm9ybUZpZWxkR3JvdXBEZWZpbml0aW9uW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIENvbnN0cnVjdG9yXHJcblx0ICogQHBhcmFtIHNlcnZpY2UgXHJcblx0ICovXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwdWJsaWMgZW50aXR5Q3RvcjogeyBuZXcoKTogVEVudGl0eSB9LFxyXG5cdFx0cHJvdGVjdGVkIHNlcnZpY2U6IFRTZXJ2aWNlLFxyXG5cdFx0cHJvdGVjdGVkIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuXHRcdHByb3RlY3RlZCBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuXHQpIHtcclxuXHRcdHN1cGVyKHJvdXRlLCBjaGFuZ2VEZXRlY3RvclJlZik7XHJcblx0XHR0aGlzLmxpc3RSb3V0ZSA9IHRoaXMuYWRkU2F2ZUFuZENsb3NlUm91dGU7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDYWxsZWQgYWZ0ZXIgdGhlIGNvbnN0cnVjdG9yLCBpbml0aWFsaXppbmcgaW5wdXQgcHJvcGVydGllcywgXHJcblx0ICogYW5kIHRoZSBmaXJzdCBjYWxsIHRvIG5nT25DaGFuZ2VzLlxyXG5cdCAqL1xyXG5cdG5nT25Jbml0KCk6IHZvaWQge1xyXG5cdFx0c3VwZXIubmdPbkluaXQoKTtcclxuXHRcdHRoaXMuaW5pdCgpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIgbGlmZWN5Y2xlIGhvb2suIFVzZSBpdCB0byBpbmplY3QgZGVwZW5kZW5jaWVzLCBcclxuXHQgKiBidXQgYXZvaWQgYW55IHNlcmlvdXMgd29yayBoZXJlLlxyXG5cdCAqIEBwYXJhbSBjaGFuZ2VzIFxyXG5cdCAqL1xyXG5cdG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuXHRcdGlmIChjaGFuZ2VzPy5pZD8uY3VycmVudFZhbHVlICYmIGNoYW5nZXMuaWQuY3VycmVudFZhbHVlICE9IGNoYW5nZXMuaWQucHJldmlvdXNWYWx1ZSkge1xyXG5cdFx0XHR0aGlzLm9uQWZ0ZXJTZXRJZCgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTGlmZWN5Y2xlIGhvb2sgdGhhdCBpcyBjYWxsZWQgYWZ0ZXIgYSBjb21wb25lbnQncyB2aWV3IGhhcyBiZWVuIGZ1bGx5IGluaXRpYWxpemVkLlxyXG5cdCAqL1xyXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuXHRcdHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xyXG5cclxuXHRcdC8qIFNldCBwYWdlIHRpdGxlICovXHJcblx0XHR0aGlzLnRpdGxlID0gdGhpcy50aXRsZVNlcnZpY2UuZ2V0VGl0bGUoKTtcclxuXHJcblx0XHQvKiBTZXQgZm9jdXMgKi9cclxuXHRcdHRoaXMuZm9jdXMoKTtcclxuXHJcblx0XHQvKiBcclxuXHRcdCAqIEZvcmNlIGEgbmV3IGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUgc2luY2UgY2hhbmdlIGRldGVjdGlvbnMgXHJcblx0XHQgKiBoYXZlIGZpbmlzaGVkIHdoZW4gYG5nQWZ0ZXJWaWV3SW5pdGAgaXMgZXhlY3V0ZWRcclxuXHRcdCAqL1xyXG5cdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG5cdFx0LyogTGlzdGVuIGZvciBzdGVwcGVyIHNlbGVjdGlvbiBjaGFuZ2VzICovXHJcblx0XHR0aGlzLm1hdFN0ZXBwZXI/LnNlbGVjdGlvbkNoYW5nZT8uc3Vic2NyaWJlKChldmVudDogU3RlcHBlclNlbGVjdGlvbkV2ZW50KSA9PiB0aGlzLm9uQWZ0ZXJTdGVwQ2hhbmdlKGV2ZW50KSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBMb2FkcyBhbiBpdGVtIGJ5IElEXHJcblx0ICovXHJcblx0cHVibGljIGxvYWRJdGVtKCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMuaXNFZGl0TW9kZSAmJiB0aGlzLnNlcnZpY2U/LmVuZHBvaW50KSB7XHJcblx0XHRcdHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0XHRcdHRoaXMubG9hZEl0ZW1Bc3luYygpLnN1YnNjcmliZSh7XHJcblx0XHRcdFx0bmV4dDogKF8pID0+IHRoaXMuaXNMb2FkaW5nID0gZmFsc2UsXHJcblx0XHRcdFx0ZXJyb3I6IChlcnJvcikgPT4gdGhpcy5wYXJzZUVycm9ycyhlcnJvcilcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBMb2FkcyBhbiBpdGVtIGJ5IElEIGFzeW5jbHlcclxuXHQgKi9cclxuXHRwdWJsaWMgbG9hZEl0ZW1Bc3luYygpOiBPYnNlcnZhYmxlPFRFbnRpdHk+IHtcclxuXHRcdGlmICh0aGlzLmlkKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLnNlcnZpY2UuZ2V0KHRoaXMuaWQsIE9iamVjdC5hc3NpZ24odGhpcy5xdWVyeSB8fCB7fSwgeyBpbmNsdWRlczogdGhpcy5pbmNsdWRlcywgcHJvamVjdGlvbjogdGhpcy5wcm9qZWN0aW9uPy5qb2luKCcsJykgfSksIHsgJ0Rpc2FibGUtQ2FjaGUnOiAnWWVzJyB9KS5waXBlKFxyXG5cdFx0XHRcdG1hcCh4ID0+IE9iamVjdC5hc3NpZ24odGhpcy5uZXdJbnN0YW5jZSgpLCB4KSksXHJcblx0XHRcdFx0dGFwKHggPT4ge1xyXG5cdFx0XHRcdFx0LyogU2V0IHRoZSBsb2FkZWQgaXRlbSAqL1xyXG5cdFx0XHRcdFx0dGhpcy5pdGVtID0gT2JqZWN0LmFzc2lnbih0aGlzLm5ld0luc3RhbmNlKCksIDxURW50aXR5PngpO1xyXG5cclxuXHRcdFx0XHRcdC8qIEJ1aWxkIHRoZSBmb3JtICovXHJcblx0XHRcdFx0XHR0aGlzLmJ1aWxkRm9ybSgpO1xyXG5cclxuXHRcdFx0XHRcdC8qIFRyaWdnZXIgZXZlbnQgYWZ0ZXJJdGVtTG9hZGVkICovXHJcblx0XHRcdFx0XHR0aGlzLm9uQWZ0ZXJJdGVtTG9hZGVkKCk7XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbmV3IE9ic2VydmFibGUoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNhdmVzIGRhdGEgaW50byBkYXRhYmFzZS5cclxuXHQgKiBAcGFyYW0gYWN0aW9uXHJcblx0ICovXHJcblx0cHVibGljIHNhdmUoYWN0aW9uOiBTYXZlQWN0aW9uID0gU2F2ZUFjdGlvbi5TYXZlQW5kQ2xvc2UsIGZvcm06IE5nRm9ybSB8IEZvcm1Hcm91cCA9IG51bGwpOiB2b2lkIHtcclxuXHRcdC8qIFZhbGlkYXRlIHRoZSBmb3JtICovXHJcblx0XHR0aGlzLnZhbGlkYXRlRm9ybShmb3JtKTtcclxuXHJcblx0XHQvKiBDaGVjayBpZiB0aGUgZm9ybSBpcyB2YWxpZCAqL1xyXG5cdFx0Zm9ybSA9IHRoaXMuZm9ybSB8fCBmb3JtO1xyXG5cdFx0aWYgKGZvcm0gJiYgIXRoaXMuaXNGb3JtVmFsaWQoZm9ybSkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIElmIHdlJ3JhIGluIGVkaXQgbW9kZSwgdXBkYXRlIHRoZSByZWNvcmQgKi9cclxuXHRcdGlmICh0aGlzLmlzRWRpdE1vZGUpIHtcclxuXHRcdFx0LyogVGhlIGRhdGEgaGFzIG5vdCBjaGFuZ2VkPyAqL1xyXG5cdFx0XHRpZiAoZm9ybSAmJiBmb3JtLnByaXN0aW5lKSB7XHJcblx0XHRcdFx0dGhpcy5vbkFmdGVyU3VibWl0KGFjdGlvbik7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvKiBBIGZsYWcgdG8gcHJldmVudCBzZW5kaW5nIHRoZSBmb3JtIHR3aWNlICovXHJcblx0XHRcdHRoaXMuaXNTYXZpbmcgPSB0cnVlO1xyXG5cclxuXHRcdFx0LyogU2VuZCB0aGUgZGF0YSB0byB0aGUgc2VydmVyICovXHJcblx0XHRcdHRoaXMudXBkYXRlKHsgcGFyYW1zOiBVdGlscy50b0h0dHBQYXJhbXMoeyBpbmNsdWRlczogdGhpcy51cGRhdGVJbmNsdWRlcyB9KSB9KS5zdWJzY3JpYmUoe1xyXG5cdFx0XHRcdG5leHQ6IChyZXNwb25zZSkgPT4ge1xyXG5cdFx0XHRcdFx0LyogQXBwbHkgc2F2ZWQgZGF0YSB0byB0aGUgZm9ybSAqL1xyXG5cdFx0XHRcdFx0dGhpcy5vbkFmdGVyU3VibWl0KGFjdGlvbiwgcmVzcG9uc2UpO1xyXG5cclxuXHRcdFx0XHRcdC8qIElmIHRoZSB1c2VyIGNsaWNrcyAnYXBwbHknIHJlbG9hZCB0aGUgcGFnZSAqL1xyXG5cdFx0XHRcdFx0aWYgKGFjdGlvbiA9PSBTYXZlQWN0aW9uLlNhdmVBbmRFZGl0KSB7XHJcblx0XHRcdFx0XHRcdHRoaXMucmVsb2FkUGFnZSgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0ZXJyb3I6IChlcnJvcikgPT4gdGhpcy5wYXJzZUVycm9ycyhlcnJvcilcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogT3RoZXJ3aXNlLCBjcmVhdGUgYSBuZXcgb25lICovXHJcblx0XHRlbHNlIHtcclxuXHRcdFx0LyogQSBmbGFnIHRvIHByZXZlbnQgc2VuZGluZyB0aGUgZm9ybSB0d2ljZSAqL1xyXG5cdFx0XHR0aGlzLmlzU2F2aW5nID0gdHJ1ZTtcclxuXHJcblx0XHRcdC8qIFNlbmQgdGhlIGRhdGEgdG8gdGhlIHNlcnZlciAqL1xyXG5cdFx0XHR0aGlzLmNyZWF0ZTxURW50aXR5PigpLnN1YnNjcmliZSh7XHJcblx0XHRcdFx0bmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmlkID0gcmVzcG9uc2U/LmlkO1xyXG5cdFx0XHRcdFx0dGhpcy5vbkFmdGVyU3VibWl0KGFjdGlvbiwgcmVzcG9uc2UpO1xyXG5cclxuXHRcdFx0XHRcdGlmIChmb3JtKSB7XHJcblx0XHRcdFx0XHRcdE9iamVjdC5rZXlzKGZvcm0uY29udHJvbHMpLmZvckVhY2goa2V5ID0+IHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgY3RyID0gZm9ybS5jb250cm9sc1trZXldO1xyXG5cdFx0XHRcdFx0XHRcdGN0ci5tYXJrQXNQcmlzdGluZSgpO1xyXG5cdFx0XHRcdFx0XHRcdGN0ci5tYXJrQXNVbnRvdWNoZWQoKTtcclxuXHRcdFx0XHRcdFx0XHRjdHIudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGVycm9yOiAoZXJyb3IpID0+IHRoaXMucGFyc2VFcnJvcnMoZXJyb3IpXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIERldGVjdCBjaGFuZ2VzICovXHJcblx0XHR0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNhdmVzIGRhdGEgYW5kIG5hdmlnYXRlcyB0byBlZGl0IHZpZXdcclxuXHQgKi9cclxuXHRwdWJsaWMgYXBwbHkoKTogdm9pZCB7XHJcblx0XHR0aGlzLnNhdmUoU2F2ZUFjdGlvbi5TYXZlQW5kRWRpdCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEZWxldGVzIHRoZSBjdXJyZW50IHJlY29yZC5cclxuXHQgKi9cclxuXHRwdWJsaWMgZGVsZXRlKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5zaG93RGVsZXRlSXRlbURpYWxvZygpLnN1YnNjcmliZSgoYWNjZXB0OiBib29sZWFuKSA9PiB7XHJcblx0XHRcdGlmIChhY2NlcHQpIHtcclxuXHRcdFx0XHR0aGlzLnNlcnZpY2UuZGVsZXRlKHRoaXMuaWQsIG51bGwsIHsgaGVhZGVyczogdGhpcy50b0h0dHBIZWFkZXJzKHsgJ1Nob3ctTWVzc2FnZSc6ICd5ZXMnIH0pIH0pLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmJhY2soKTtcclxuXHRcdFx0XHR9LCBlcnJvciA9PiB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmRlYnVnKGVycm9yKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBJbml0cyB0aGUgZm9ybVxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBpbml0KCk6IHZvaWQge1xyXG5cdFx0aWYgKCF0aGlzLmlkKSB7XHJcblx0XHRcdC8qIEFzc2lnbiBxdWVyeSBwYXJhbXMgaW50byBxdWVyeSBvYmplY3QgKi9cclxuXHRcdFx0bGV0IGlnbm9yZWRQYXJhbXM6IHN0cmluZ1tdID0gWydpZCcsICdyZXR1cm51cmwnLCAncGFuZWxJZCddO1xyXG5cdFx0XHRPYmplY3QuYXNzaWduKHRoaXMucXVlcnksXHJcblx0XHRcdFx0dGhpcy5zYW5pdGl6ZU9iamVjdCh0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcyB8fCB7fSwgLi4uaWdub3JlZFBhcmFtcyksXHJcblx0XHRcdFx0dGhpcy5zYW5pdGl6ZU9iamVjdCh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGE/LnF1ZXJ5IHx8IHt9LCAuLi5pZ25vcmVkUGFyYW1zKSxcclxuXHRcdFx0XHR0aGlzLnNhbml0aXplT2JqZWN0KHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMgfHwge30sIC4uLmlnbm9yZWRQYXJhbXMpXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHQvKiBHZXQgaWQgZnJvbSB0aGUgdXJsICovXHJcblx0XHRcdGxldCBpZCA9IDxhbnk+dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ2lkJyk7XHJcblx0XHRcdGlmIChpZCA+IDApIHtcclxuXHRcdFx0XHR0aGlzLmlkID0gaWQ7XHJcblx0XHRcdH0gZWxzZSBpZiAoIXRoaXMuaWQgJiYgdGhpcy5yb3V0ZS5zbmFwc2hvdD8uZGF0YT8uaWQpIHtcclxuXHRcdFx0XHR0aGlzLmlkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdD8uZGF0YT8uaWQ7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIFRFbnRpdHkgKi9cclxuXHRcdGlmICghdGhpcy5pc0VkaXRNb2RlICYmICF0aGlzLmZvcm0pIHtcclxuXHRcdFx0dGhpcy5pdGVtID0gT2JqZWN0LmFzc2lnbih0aGlzLm5ld0luc3RhbmNlKCksIHRoaXMuaXRlbSB8fCB7fSwgdGhpcy5xdWVyeSB8fCB7fSk7XHJcblx0XHRcdHRoaXMuYnVpbGRGb3JtKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogU2V0IHBhbmVsIElEIGZyb20gcXVlcnkgKi9cclxuXHRcdHRoaXMuc3VidGl0bGUgfHw9IHRoaXMucm91dGUuc25hcHNob3Q/LmRhdGE/LnN1YnRpdGxlO1xyXG5cclxuXHRcdC8qIEFkZCBsaXN0IG1uZXUgaXRlbXMgKi9cclxuXHRcdHRoaXMuYWRkVG9vbGJhck1lbnVJdGVtcygpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQnVpbGRzIHRoZSBmb3JtIGZpZWxkc1xyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBidWlsZEZpZWxkcygpOiB2b2lkIHtcclxuXHRcdC8qIEdldCBmb3JtIGRlZmluaXRpb24gKi9cclxuXHRcdHRoaXMuZm9ybURlZmluaXRpb24gPSBnZXRGb3JtRGVmaW5pdGlvbih0aGlzLm5ld0luc3RhbmNlKCkpO1xyXG5cclxuXHRcdC8qIFNldCBpbmNsdWRlcyBmcm9tIGZvcm0gZGVmaW5pdGlvbiwgaWYgYW55ICovXHJcblx0XHR0aGlzLmZvcm1EZWZpbml0aW9uPy5pbmNsdWRlcz8uZm9yRWFjaCh4ID0+IHRoaXMuaW5jbHVkZSh4LmVudGl0eSwgeC51cGRhdGUpKTtcclxuXHJcblx0XHQvKiBBZGQgdG9vbGJhciBtZW51IGl0ZW1zLCBpZiBhbnkgKi9cclxuXHRcdGlmICh0aGlzLmZvcm1EZWZpbml0aW9uPy50b29sYmFyTWVudUl0ZW1zPy5sZW5ndGgpIHtcclxuXHRcdFx0dGhpcy50b29sYmFyTWVudUl0ZW1zID8/PSBbXTtcclxuXHRcdFx0dGhpcy50b29sYmFyTWVudUl0ZW1zID0gdGhpcy50b29sYmFyTWVudUl0ZW1zLmNvbmNhdCguLi50aGlzLmZvcm1EZWZpbml0aW9uPy50b29sYmFyTWVudUl0ZW1zKTtcclxuXHRcdFx0dGhpcy50b29sYmFyTWVudUl0ZW1zLmZvckVhY2goKHgsIGkpID0+IHguaW5kZXggPz89IGkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIENyZWF0ZSB0aGUgZnJvbSBmaWVsZHMgdXNpbmcgdGhlIGVudGl0eSB0eXBlICovXHJcblx0XHR0aGlzLmZpZWxkR3JvdXBzID0gdGhpcy5mb3JtRGVmaW5pdGlvbj8uZmllbGRHcm91cHM7XHJcblxyXG5cdFx0LyogRGV0ZWN0IGNoYW5nZXMgKi9cclxuXHRcdHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQnVpbGRzIGEgbmV3IGZvcm1cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgYnVpbGRGb3JtKCk6IHZvaWQgeyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFZhbGlkYXRlcyB0aGUgZm9ybVxyXG5cdCAqIEBwYXJhbSBmb3JtIFxyXG5cdCAqL1xyXG5cdHB1YmxpYyB2YWxpZGF0ZUZvcm0oZm9ybTogTmdGb3JtIHwgRm9ybUdyb3VwID0gbnVsbCk6IHZvaWQge1xyXG5cdFx0dmFyIGZvcm0gPSBmb3JtIHx8IHRoaXMuZm9ybTtcclxuXHJcblx0XHQvKiBTZXQgdGhlIGZvcm0gYXMgc3VibWl0dGVkICovXHJcblx0XHRpZiAoZm9ybSAmJiBmb3JtIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XHJcblx0XHRcdC8qIFNldCBmb3JtIGFzIHN1Ym1pdHRlZCAqL1xyXG5cdFx0XHRmb3JtWydzdWJtaXR0ZWQnXSA9IHRydWU7XHJcblxyXG5cdFx0XHQvKiBVcGRhdGUgdmFsdWUgYW5kIHZhbGlkaXR5ICovXHJcblx0XHRcdGZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIFByaW50IHNvbWUgZGVidWcgaW5mb3JtYXRpb24gKi9cclxuXHRcdHRoaXMuZGVidWdGb3JtKGZvcm0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVmFsaWRhdGVzIHRoZSBmb3JtXHJcblx0ICogQHBhcmFtIGZvcm0gXHJcblx0ICovXHJcblx0cHVibGljIGlzRm9ybVZhbGlkKGZvcm06IE5nRm9ybSB8IEZvcm1Hcm91cCA9IG51bGwpOiBib29sZWFuIHtcclxuXHRcdC8qIFByaW50IHNvbWUgZGVidWcgaW5mb3JtYXRpb24gKi9cclxuXHRcdHRoaXMuZGVidWdGb3JtKGZvcm0pO1xyXG5cclxuXHRcdC8qIElmIHRoZSBmb3JtIGlzdCBub3QgdmFsaWQuLiAqL1xyXG5cdFx0aWYgKCFmb3JtLnZhbGlkKSB7XHJcblx0XHRcdC8qIE1hcmsgaW52YWxpZCBjb250cm9scyBhcyBkaXJ0dHkgYW5kIHRvdWNoZWQgKi9cclxuXHRcdFx0T2JqZWN0LmtleXMoZm9ybS5jb250cm9scylcclxuXHRcdFx0XHQuZmlsdGVyKHggPT4gIWZvcm0uY29udHJvbHNbeF0udmFsaWQpXHJcblx0XHRcdFx0LmZvckVhY2goa2V5ID0+IHRoaXMuaW52YWxpZGF0ZUNvbnRyb2woZm9ybS5jb250cm9sc1trZXldKSk7XHJcblxyXG5cdFx0XHQvKiBTaG93IGVycm9yIG1lc3NhZ2VzICovXHJcblx0XHRcdChhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0LyogV2FpdCB1bnRpbCAnbWF0LWVycm9yJyBkaXNwbGF5ZWQgKi9cclxuXHRcdFx0XHRhd2FpdCBuZXcgUHJvbWlzZSh5ID0+IHNldFRpbWVvdXQoeSwgMjAwKSk7XHJcblxyXG5cdFx0XHRcdC8qIFBhcnNlIHRoZSBlcnJvciBtZXNzYWdlcyAqL1xyXG5cdFx0XHRcdHZhciBlcnJvcnMgPSBBcnJheTxzdHJpbmc+KCk7XHJcblx0XHRcdFx0T2JqZWN0LmtleXMoZm9ybS5jb250cm9scylcclxuXHRcdFx0XHRcdC5maWx0ZXIoeCA9PiAhZm9ybS5jb250cm9sc1t4XS52YWxpZClcclxuXHRcdFx0XHRcdC5mb3JFYWNoKGtleSA9PiB7XHJcblx0XHRcdFx0XHRcdC8qIEdldCBlcnJvciB0ZXh0ICovXHJcblx0XHRcdFx0XHRcdHZhciBlcnJvciA9IHRoaXMuZ2V0RWxlbWVudEVycm9yKChmb3JtLmNvbnRyb2xzW2tleV0gYXMgYW55KT8ubmF0aXZlRWxlbWVudCk7XHJcblx0XHRcdFx0XHRcdGlmIChlcnJvcikge1xyXG5cdFx0XHRcdFx0XHRcdGVycm9ycy5wdXNoKGVycm9yKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdC8qIEJ1aWxkIGVycm9yIG1lc3NhZ2UgKi9cclxuXHRcdFx0XHR2YXIgbWVzc2FnZSA9IGVycm9ycy5sZW5ndGggPyBlcnJvcnMuc2xpY2UoMCwgMykuam9pbignXFxuJykgOiAkbG9jYWxpemVgOkBAc25hY2tiYXIuZXJyb3IucmVxdWlyZWQtZmllbGRzOkFsbCBmaWVsZHMgbWFya2VkIHdpdGggYW4gYXN0ZXJpc2sgKCopIGFyZSByZXF1aXJlZC5gO1xyXG5cclxuXHRcdFx0XHQvKiBzaG93IGEgbm90aWNlICovXHJcblx0XHRcdFx0dGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbihtZXNzYWdlLCAnT2snLCB7IGR1cmF0aW9uOiAzMDAwLCBwYW5lbENsYXNzOiBbJ2Vycm9yJ10gfSk7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9KSgpO1xyXG5cclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVzZXRzIGZvcm0gY29udHJvbHNcclxuXHQgKiBAcGFyYW0gZm9ybSBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRwdWJsaWMgcmVzZXRGb3JtKGZvcm06IE5nRm9ybSk6IHZvaWQge1xyXG5cdFx0aWYgKCFmb3JtKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRPYmplY3Qua2V5cyhmb3JtLmNvbnRyb2xzKS5mb3JFYWNoKGtleSA9PiB7XHJcblx0XHRcdGxldCBjdHIgPSBmb3JtLmNvbnRyb2xzW2tleV07XHJcblx0XHRcdGN0ci5tYXJrQXNQcmlzdGluZSgpO1xyXG5cdFx0XHRjdHIubWFya0FzVW50b3VjaGVkKCk7XHJcblx0XHRcdGN0ci51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEludmFsaWRhdGUgY29udHJvbHMgcmVjdXJzaXZlbHlcclxuXHQgKiBAcGFyYW0gY29udHJvbCBcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgaW52YWxpZGF0ZUNvbnRyb2woY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogdm9pZCB7XHJcblx0XHQvKiBDaGVjayB0aGUgY29udHJvbCBhZ2FpbnN0IG51bGwgKi9cclxuXHRcdGlmICghY29udHJvbCkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0LyogQ2hlY2sgaWYgdGhlIGNvbnRyb2wgaXMgYSBncm91cCAqL1xyXG5cdFx0bGV0IGZvcm1Hcm91cCA9IGNvbnRyb2wgYXMgRm9ybUdyb3VwO1xyXG5cdFx0aWYgKGZvcm1Hcm91cD8uY29udHJvbHMpIHtcclxuXHRcdFx0T2JqZWN0LmtleXMoZm9ybUdyb3VwLmNvbnRyb2xzKVxyXG5cdFx0XHRcdC5maWx0ZXIoeCA9PiAhZm9ybUdyb3VwLmNvbnRyb2xzW3hdLnZhbGlkKVxyXG5cdFx0XHRcdC5mb3JFYWNoKHggPT4gdGhpcy5pbnZhbGlkYXRlQ29udHJvbChmb3JtR3JvdXAuY29udHJvbHNbeF0pKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuXHRcdFx0Y29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTaG93cyBmb3JtIGVycm9yc1xyXG5cdCAqIEBwYXJhbSBmb3JtIFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBkZWJ1Z0Zvcm0oZm9ybTogTmdGb3JtIHwgRm9ybUdyb3VwID0gbnVsbCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMuZGVidWcpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coJ0Zvcm06JywgZm9ybSk7XHJcblx0XHRcdE9iamVjdC5rZXlzKGZvcm0uY29udHJvbHMpLmZvckVhY2goa2V5ID0+IHtcclxuXHRcdFx0XHRjb25zdCBjb250cm9sRXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzID0gZm9ybS5jb250cm9sc1trZXldLmVycm9ycztcclxuXHRcdFx0XHRpZiAoY29udHJvbEVycm9ycyAhPSBudWxsKSB7XHJcblx0XHRcdFx0XHRPYmplY3Qua2V5cyhjb250cm9sRXJyb3JzKS5mb3JFYWNoKGtleUVycm9yID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coJ0tleSBjb250cm9sOiAnICsga2V5ICsgJywga2V5RXJyb3I6ICcgKyBrZXlFcnJvciArICcsIGVyciB2YWx1ZTogJywgY29udHJvbEVycm9yc1trZXlFcnJvcl0pO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZCB0b29sYmFyIG1lbnUgaXRlbXNcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgYWRkVG9vbGJhck1lbnVJdGVtcygpOiB2b2lkIHtcclxuXHRcdC8qIEFkZCAnRGVsZXRlJyBtZW51IGl0ZW0gKi9cclxuXHRcdGlmICh0aGlzLmRlbGV0YWJsZSkge1xyXG5cdFx0XHR0aGlzLnRvb2xiYXJNZW51SXRlbXMucHVzaCh7XHJcblx0XHRcdFx0dGl0bGU6ICRsb2NhbGl6ZWA6QEBkZWxldGU6RGVsZXRlYCxcclxuXHRcdFx0XHRpY29uOiAnZGVsZXRlX2ZvcmV2ZXInLFxyXG5cdFx0XHRcdGljb25DbGFzczogJ3RjLW9yYW5nZS04MDAnLFxyXG5cdFx0XHRcdGV2ZW50OiAoKSA9PiB0aGlzLmRlbGV0ZSgpLFxyXG5cdFx0XHRcdGRpc2FibGU6ICgpID0+ICF0aGlzLmlkLFxyXG5cdFx0XHRcdGhpZGU6ICgpID0+ICF0aGlzLmNhbkRlbGV0ZSgpLFxyXG5cdFx0XHRcdGluZGV4OiAxMDAwXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLnRvb2xiYXJNZW51SXRlbXMubGVuZ3RoKSB7XHJcblx0XHRcdC8qIFNvcnQgdGhlIG1lbnUgaXRlbXMgYnkgaW5kZXggKi9cclxuXHRcdFx0VXRpbHMuc29ydEFycmF5KHRoaXMudG9vbGJhck1lbnVJdGVtcywgJ2luZGV4Jyk7XHJcblxyXG5cdFx0XHQvKiBBZGQgdGhlIHRvb2xiYXIgbWVudSBpdGVtcyB0byB0aGUgdGhlIHRvb2xiYXIgYWN0aW9ucyAqL1xyXG5cdFx0XHR0aGlzLnRvb2xiYXJBY3Rpb25zLnB1c2goeyBpY29uOiAnbW9yZV92ZXJ0JywgaXRlbXM6IHRoaXMudG9vbGJhck1lbnVJdGVtcyB9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIExvYWRzIHRoZSBwcmV2aW91cyBVUkwgaW4gdGhlIGhpc3RvcnkgbGlzdC5cclxuXHQgKiBAcGFyYW0gYWN0aW9uXHJcblx0ICovXHJcblx0cHVibGljIGJhY2soYWN0aW9uOiBTYXZlQWN0aW9uID0gU2F2ZUFjdGlvbi5TYXZlQW5kQ2xvc2UpOiB2b2lkIHtcclxuXHRcdGlmIChhY3Rpb24gPT0gU2F2ZUFjdGlvbi5TYXZlQW5kQ2xvc2UgJiYgdGhpcy5yZXR1cm5VcmwpIHtcclxuXHRcdFx0dGhpcy5uYXZpZ2F0ZVRvUmV0dXJuVXJsKCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpZiAodGhpcy5pc0VkaXRNb2RlKSB7XHJcblx0XHRcdFx0aWYgKGFjdGlvbiA9PSBTYXZlQWN0aW9uLlNhdmVBbmRDbG9zZSkge1xyXG5cdFx0XHRcdFx0dGhpcy5sb2NhdGlvbi5iYWNrKCk7XHJcblx0XHRcdFx0fSBlbHNlIGlmIChhY3Rpb24gPT0gU2F2ZUFjdGlvbi5TYXZlQW5kRWRpdCkge1xyXG5cdFx0XHRcdFx0dGhpcy5yZWxvYWRQYWdlKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGlmIChhY3Rpb24gPT0gU2F2ZUFjdGlvbi5TYXZlQW5kQ2xvc2UpIHtcclxuXHRcdFx0XHRcdHRoaXMubG9jYXRpb24uYmFjaygpO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uID09IFNhdmVBY3Rpb24uU2F2ZUFuZEVkaXQgJiYgdGhpcy5pZCA+IDApIHtcclxuXHRcdFx0XHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKFtgJHt0aGlzLmFkZFNhdmVBbmRFZGl0Um91dGV9JHt0aGlzLmlkfWBdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XHJcblx0XHRcdFx0fSBlbHNlIGlmIChhY3Rpb24gPT0gU2F2ZUFjdGlvbi5TYXZlQW5kTmV3KSB7XHJcblx0XHRcdFx0XHR0aGlzLmFmdGVyUmVsb2FkKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTZXRzIHJldHVybiB1cmxcclxuXHQgKiBAcGFyYW0gcmV0dXJuVXJsIFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBzZXRSZXR1cm5VcmwocmV0dXJuVXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuXHRcdHN1cGVyLnNldFJldHVyblVybChyZXR1cm5VcmwpO1xyXG5cdFx0dGhpcy5saXN0Um91dGUgPSB0aGlzLnJldHVyblVybCB8fCB0aGlzLmxpc3RSb3V0ZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIFRFbnRpdHlcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgbmV3SW5zdGFuY2UoKTogVEVudGl0eSB7XHJcblx0XHRyZXR1cm4gbmV3IHRoaXMuZW50aXR5Q3RvcigpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ3JlYXRlcyB0aGUgZW50aXR5XHJcblx0ICogQHBhcmFtIGh0dHBPcHRpb25zIFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBjcmVhdGU8VEVudGl0eT4oaHR0cE9wdGlvbnM/OiBPYmplY3QpOiBPYnNlcnZhYmxlPFRFbnRpdHk+IHtcclxuXHRcdHRoaXMub25CZWZvcmVDcmVhdGUoKTtcclxuXHRcdHJldHVybiB0aGlzLnNlcnZpY2UuY3JlYXRlPFRFbnRpdHk+KHRoaXMuZm9ybVZhbHVlLCBudWxsLCBPYmplY3QuYXNzaWduKGh0dHBPcHRpb25zIHx8IHt9LCB7IGhlYWRlcnM6IHRoaXMudG9IdHRwSGVhZGVycyh7ICdTaG93LU1lc3NhZ2UnOiAneWVzJyB9KSB9KSwgZmFsc2UpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVXBkYXRlcyB0aGUgZW50aXR5XHJcblx0ICogQHBhcmFtIGh0dHBPcHRpb25zIFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCB1cGRhdGUoaHR0cE9wdGlvbnM/OiBPYmplY3QpOiBPYnNlcnZhYmxlPFRFbnRpdHk+IHtcclxuXHRcdHRoaXMub25CZWZvcmVVcGRhdGUoKTtcclxuXHRcdHJldHVybiB0aGlzLnNlcnZpY2UudXBkYXRlKHRoaXMuaWQsIE9iamVjdC5hc3NpZ24odGhpcy5pdGVtLCB0aGlzLmZvcm1WYWx1ZSksIG51bGwsIE9iamVjdC5hc3NpZ24oaHR0cE9wdGlvbnMgfHwge30sIHsgaGVhZGVyczogdGhpcy50b0h0dHBIZWFkZXJzKHsgJ1Nob3ctTWVzc2FnZSc6ICd5ZXMnIH0pLCB9KSwgZmFsc2UpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogSW5jbHVkZXMgc29tZSBuYXZpZ2F0aW9uc1xyXG5cdCAqIEBwYXJhbSBpbmMgXHJcblx0ICogQHBhcmFtIHVwZGF0ZSBcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgaW5jbHVkZShpbmM6IHN0cmluZywgdXBkYXRlOiBib29sZWFuID0gZmFsc2UpIHtcclxuXHRcdHRoaXMuaW5jbHVkZXMucHVzaChpbmMpO1xyXG5cdFx0aWYgKHVwZGF0ZSkge1xyXG5cdFx0XHR0aGlzLnVwZGF0ZUluY2x1ZGVzLnB1c2goaW5jKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrIGlmIHRoZSBpdGVtIGlzIGRlbGV0YWJsZVxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBjYW5EZWxldGUoKTogYm9vbGVhbiB7IHJldHVybiAhdGhpcy5pdGVtPy5oYXNPd25Qcm9wZXJ0eSgnZGVsZXRhYmxlJykgfHwgdGhpcy5pdGVtWydkZWxldGFibGUnXTsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGlkIGlzIHNldC5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgb25BZnRlclNldElkKCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMuaWQpIHtcclxuXHRcdFx0dGhpcy5sb2FkSXRlbSgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBzZWxlY3RlZCBzdGVwIGhhcyBjaGFuZ2VkLlxyXG5cdCAqIEBwYXJhbSAkZXZlbnQgXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIG9uQWZ0ZXJTdGVwQ2hhbmdlKCRldmVudDogU3RlcHBlclNlbGVjdGlvbkV2ZW50KTogdm9pZCB7IH1cclxuXHJcblx0LyoqXHJcblx0ICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBlbnRpdHkgaGFzIGJlZW4gbG9hZGVkLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBvbkFmdGVySXRlbUxvYWRlZCgpOiB2b2lkIHsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBFdmVudCBlbWl0dGVkIGJlZm9yZSB0aGUgZm9ybSBoYXMgYnVpbHQuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIG9uQmVmb3JlRm9ybUJ1aWxkKCk6IHZvaWQgeyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgZm9ybSBoYXMgYnVpbHQuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIG9uQWZ0ZXJGb3JtQnVpbGQoKTogdm9pZCB7IH1cclxuXHJcblx0LyoqXHJcblx0ICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBlbnRpdHkgaGFzIGJlZW4gY3JlYXRlZC5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgb25CZWZvcmVDcmVhdGUoKTogdm9pZCB7IH1cclxuXHJcblx0LyoqXHJcblx0ICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBlbnRpdHkgaGFzIGJlZW4gdXBkYXRlZC5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgb25CZWZvcmVVcGRhdGUoKTogdm9pZCB7IH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2FsbGVkIGJlZm9yZSBkYXRhIHN1Ym1pdGlvblxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBiZWZvcmVTdWJtaXQoXzogU2F2ZUFjdGlvbiA9IFNhdmVBY3Rpb24uU2F2ZUFuZENsb3NlKTogdm9pZCB7IH1cclxuXHJcblx0LyoqXHJcblx0ICogRXZlbnQgZW1pdHRlZCBhZnRlciBkYXRhIHN1Ym1pdGlvblxyXG5cdCAqIEBwYXJhbSBhY3Rpb24gXHJcblx0ICogQHBhcmFtIHJlc3BvbnNlIFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBvbkFmdGVyU3VibWl0KGFjdGlvbjogU2F2ZUFjdGlvbiA9IFNhdmVBY3Rpb24uU2F2ZUFuZENsb3NlLCByZXNwb25zZTogYW55ID0gbnVsbCk6IHZvaWQge1xyXG5cdFx0dGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG5cdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0XHR0aGlzLmJhY2soYWN0aW9uKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENhbGxlZCBhZnRlciBwYWdlIHJlbG9hZGVkXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGFmdGVyUmVsb2FkKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5pdGVtID0gT2JqZWN0LmFzc2lnbih0aGlzLm5ld0luc3RhbmNlKCksIHRoaXMucXVlcnkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2V0cyBmb2N1cyB0byBmaXJzdCBpbnB1dFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBmb2N1cygpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLmlucHV0ICYmIHRoaXMuaW5wdXQuZmlyc3QgJiYgdGhpcy5pbnB1dC5maXJzdC5uYXRpdmVFbGVtZW50KSB7XHJcblx0XHRcdHRoaXMuaW5wdXQuZmlyc3QubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR2V0cyBlbGVtZW50IGVycm9yXHJcblx0ICogQHBhcmFtIG5hdGl2ZUVsZW1lbnQgXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGdldEVsZW1lbnRFcnJvcihuYXRpdmVFbGVtZW50OiBhbnkpOiBzdHJpbmcge1xyXG5cdFx0LyogR2V0IHBhcmFuZXQgZWxlbWVudCAnbWF0LWZvcm0tZmllbGQnICovXHJcblx0XHR2YXIgbWF0Rm9ybUZpZWxkID0gbmF0aXZlRWxlbWVudD8uY2xvc2VzdCgnLm1hdC1mb3JtLWZpZWxkJyk7XHJcblx0XHRpZiAoIW1hdEZvcm1GaWVsZCkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBHZXQgY2hpbGQgZWxlbWVudCAnbWF0LWVycm9yJyAqL1xyXG5cdFx0dmFyIG1hdEVycm9ycyA9IG1hdEZvcm1GaWVsZC5xdWVyeVNlbGVjdG9yQWxsKCcubWF0LWVycm9yJyk7XHJcblx0XHRpZiAoIW1hdEVycm9ycykge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBHZXQgY2hpbGQgZWxlbWVudCAnbWF0LWxhYmVsJyAqL1xyXG5cdFx0dmFyIG1hdExhYmVsID0gbWF0Rm9ybUZpZWxkLnF1ZXJ5U2VsZWN0b3IoJ21hdC1sYWJlbCcpO1xyXG5cdFx0aWYgKCFtYXRMYWJlbCkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBHZXQgZXJyb3IgdGV4dHMgKi9cclxuXHRcdHZhciBlcnJvcnNBcnJheSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG1hdEVycm9ycylcclxuXHRcdFx0Py5maWx0ZXIoKHg6IGFueSkgPT4geC50ZXh0Q29udGVudClcclxuXHRcdFx0Py5tYXAoKHg6IGFueSkgPT4geC50ZXh0Q29udGVudCk7XHJcblxyXG5cdFx0cmV0dXJuIGAnJHttYXRMYWJlbC50ZXh0Q29udGVudH0nOiAke2Vycm9yc0FycmF5Py5qb2luKCcsICcpfWA7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZXNwb25kcyB0byB1c2VyLWluaXRpYXRlZCBldmVudHNcclxuXHQgKiBAcGFyYW0gZXZlbnQgXHJcblx0ICovXHJcblx0QEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcblx0aGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG5cdFx0aWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkge1xyXG5cdFx0XHRzd2l0Y2ggKGV2ZW50LmtleSkge1xyXG5cdFx0XHRcdGNhc2UgJ3MnOlxyXG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRcdHRoaXMuc2F2ZShTYXZlQWN0aW9uLlNhdmVBbmRDbG9zZSk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0Y2FzZSAnZCc6XHJcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0dGhpcy5zYXZlKFNhdmVBY3Rpb24uU2F2ZUFuZE5ldyk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0Y2FzZSAnZSc6XHJcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0dGhpcy5zYXZlKFNhdmVBY3Rpb24uU2F2ZUFuZEVkaXQpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvKiBDYW5jZWwgdGhlIGZvcm0sIGlmIHRoZSB1c2VyIHByZXNzIHRoZSBFU0Mga2V5ICovXHJcblx0XHRpZiAoZXZlbnQua2V5Q29kZSA9PSAyNykge1xyXG5cdFx0XHR0aGlzLmJhY2soKTtcclxuXHRcdH1cclxuXHR9XHJcbn0iXX0=
|
|
@@ -2,7 +2,7 @@ import { Pipe } from "@angular/core";
|
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
export class FuncPipe {
|
|
4
4
|
transform(value, ...args) {
|
|
5
|
-
return value && typeof value === 'function' ? value(args) : value;
|
|
5
|
+
return value && typeof value === 'function' ? value(...args) : value;
|
|
6
6
|
}
|
|
7
7
|
}
|
|
8
8
|
/** @nocollapse */ FuncPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: FuncPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
@@ -11,4 +11,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImpor
|
|
|
11
11
|
type: Pipe,
|
|
12
12
|
args: [{ name: 'func' }]
|
|
13
13
|
}] });
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuYy5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvY29tbW9uL3BpcGVzL2Z1bmMucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7QUFHcEQsTUFBTSxPQUFPLFFBQVE7SUFDakIsU0FBUyxDQUFDLEtBQTZCLEVBQUUsR0FBRyxJQUFXO1FBQ25ELE9BQU8sS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN6RSxDQUFDOzt3SEFIUSxRQUFRO3NIQUFSLFFBQVE7MkZBQVIsUUFBUTtrQkFEcEIsSUFBSTttQkFBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbkBQaXBlKHsgbmFtZTogJ2Z1bmMnIH0pXHJcbmV4cG9ydCBjbGFzcyBGdW5jUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xyXG4gICAgdHJhbnNmb3JtKHZhbHVlOiBzdHJpbmcgfCBGdW5jdGlvbiB8IHt9LCAuLi5hcmdzOiBhbnlbXSk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlKC4uLmFyZ3MpIDogdmFsdWU7XHJcbiAgICB9XHJcbn0iXX0=
|
package/fesm2015/messaia-cdk.mjs
CHANGED
|
@@ -240,7 +240,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImpor
|
|
|
240
240
|
|
|
241
241
|
class FuncPipe {
|
|
242
242
|
transform(value, ...args) {
|
|
243
|
-
return value && typeof value === 'function' ? value(args) : value;
|
|
243
|
+
return value && typeof value === 'function' ? value(...args) : value;
|
|
244
244
|
}
|
|
245
245
|
}
|
|
246
246
|
/** @nocollapse */ FuncPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: FuncPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
@@ -11652,46 +11652,49 @@ class GenericFormBaseComponent extends BaseComponent {
|
|
|
11652
11652
|
this.listRoute = this.addSaveAndCloseRoute;
|
|
11653
11653
|
}
|
|
11654
11654
|
/**
|
|
11655
|
-
*
|
|
11656
|
-
* and the first call to ngOnChanges.
|
|
11655
|
+
* The id of the item to load
|
|
11657
11656
|
*/
|
|
11658
|
-
|
|
11659
|
-
|
|
11660
|
-
|
|
11661
|
-
|
|
11662
|
-
/* Set the id from the item */
|
|
11663
|
-
(_a = this.id) !== null && _a !== void 0 ? _a : (this.id = (_b = this.item) === null || _b === void 0 ? void 0 : _b.id);
|
|
11664
|
-
/* Build the form fields */
|
|
11665
|
-
this.buildFields();
|
|
11666
|
-
}
|
|
11667
|
-
else if (!this.id) {
|
|
11668
|
-
/* Get id from the url */
|
|
11669
|
-
let id = this.route.snapshot.paramMap.get('id');
|
|
11670
|
-
if (id > 0) {
|
|
11671
|
-
this.id = id;
|
|
11672
|
-
}
|
|
11673
|
-
else if (!this.id && ((_d = (_c = this.route.snapshot) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d.id)) {
|
|
11674
|
-
this.id = (_f = (_e = this.route.snapshot) === null || _e === void 0 ? void 0 : _e.data) === null || _f === void 0 ? void 0 : _f.id;
|
|
11675
|
-
}
|
|
11676
|
-
/* Set panel ID from query */
|
|
11677
|
-
this.subtitle || (this.subtitle = (_h = (_g = this.route.snapshot) === null || _g === void 0 ? void 0 : _g.data) === null || _h === void 0 ? void 0 : _h.subtitle);
|
|
11678
|
-
/* Assign query params into query object */
|
|
11679
|
-
let ignoredParams = ['id', 'returnurl', 'panelId'];
|
|
11680
|
-
Object.assign(this.query, this.sanitizeObject(this.route.snapshot.params || {}, ...ignoredParams), this.sanitizeObject(((_j = this.route.snapshot.data) === null || _j === void 0 ? void 0 : _j.query) || {}, ...ignoredParams), this.sanitizeObject(this.route.snapshot.queryParams || {}, ...ignoredParams));
|
|
11681
|
-
}
|
|
11682
|
-
/* Set some variable for edit mode */
|
|
11683
|
-
if (this.id) {
|
|
11657
|
+
get id() { return this._id; }
|
|
11658
|
+
set id(id) {
|
|
11659
|
+
if (this._id != id) {
|
|
11660
|
+
this._id = id;
|
|
11684
11661
|
this.action = 'edit';
|
|
11685
11662
|
this.isEditMode = true;
|
|
11686
11663
|
this.listRoute = this.editSaveAndCloseRoute;
|
|
11664
|
+
this.onAfterSetId();
|
|
11687
11665
|
}
|
|
11688
|
-
|
|
11689
|
-
|
|
11690
|
-
|
|
11691
|
-
|
|
11666
|
+
}
|
|
11667
|
+
/**
|
|
11668
|
+
* The current item to add or edit
|
|
11669
|
+
*/
|
|
11670
|
+
get item() { return this._item; }
|
|
11671
|
+
;
|
|
11672
|
+
set item(item) {
|
|
11673
|
+
var _a;
|
|
11674
|
+
if (this._item != item) {
|
|
11675
|
+
this._item = item;
|
|
11676
|
+
(_a = this.id) !== null && _a !== void 0 ? _a : (this.id = item === null || item === void 0 ? void 0 : item.id);
|
|
11677
|
+
this.buildFields();
|
|
11678
|
+
}
|
|
11679
|
+
}
|
|
11680
|
+
/**
|
|
11681
|
+
* Called after the constructor, initializing input properties,
|
|
11682
|
+
* and the first call to ngOnChanges.
|
|
11683
|
+
*/
|
|
11684
|
+
ngOnInit() {
|
|
11685
|
+
super.ngOnInit();
|
|
11686
|
+
this.init();
|
|
11687
|
+
}
|
|
11688
|
+
/**
|
|
11689
|
+
* Called before any other lifecycle hook. Use it to inject dependencies,
|
|
11690
|
+
* but avoid any serious work here.
|
|
11691
|
+
* @param changes
|
|
11692
|
+
*/
|
|
11693
|
+
ngOnChanges(changes) {
|
|
11694
|
+
var _a;
|
|
11695
|
+
if (((_a = changes === null || changes === void 0 ? void 0 : changes.id) === null || _a === void 0 ? void 0 : _a.currentValue) && changes.id.currentValue != changes.id.previousValue) {
|
|
11696
|
+
this.onAfterSetId();
|
|
11692
11697
|
}
|
|
11693
|
-
/* Add list mneu items */
|
|
11694
|
-
this.addToolbarMenuItems();
|
|
11695
11698
|
}
|
|
11696
11699
|
/**
|
|
11697
11700
|
* Lifecycle hook that is called after a component's view has been fully initialized.
|
|
@@ -11708,8 +11711,6 @@ class GenericFormBaseComponent extends BaseComponent {
|
|
|
11708
11711
|
* have finished when `ngAfterViewInit` is executed
|
|
11709
11712
|
*/
|
|
11710
11713
|
this.changeDetectorRef.detectChanges();
|
|
11711
|
-
/* Load item from server */
|
|
11712
|
-
this.loadItem();
|
|
11713
11714
|
/* Listen for stepper selection changes */
|
|
11714
11715
|
(_b = (_a = this.matStepper) === null || _a === void 0 ? void 0 : _a.selectionChange) === null || _b === void 0 ? void 0 : _b.subscribe((event) => this.onAfterStepChange(event));
|
|
11715
11716
|
}
|
|
@@ -11717,7 +11718,8 @@ class GenericFormBaseComponent extends BaseComponent {
|
|
|
11717
11718
|
* Loads an item by ID
|
|
11718
11719
|
*/
|
|
11719
11720
|
loadItem() {
|
|
11720
|
-
|
|
11721
|
+
var _a;
|
|
11722
|
+
if (this.isEditMode && ((_a = this.service) === null || _a === void 0 ? void 0 : _a.endpoint)) {
|
|
11721
11723
|
this.isLoading = true;
|
|
11722
11724
|
this.changeDetectorRef.detectChanges();
|
|
11723
11725
|
this.loadItemAsync().subscribe({
|
|
@@ -11821,6 +11823,34 @@ class GenericFormBaseComponent extends BaseComponent {
|
|
|
11821
11823
|
}
|
|
11822
11824
|
});
|
|
11823
11825
|
}
|
|
11826
|
+
/**
|
|
11827
|
+
* Inits the form
|
|
11828
|
+
*/
|
|
11829
|
+
init() {
|
|
11830
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
11831
|
+
if (!this.id) {
|
|
11832
|
+
/* Assign query params into query object */
|
|
11833
|
+
let ignoredParams = ['id', 'returnurl', 'panelId'];
|
|
11834
|
+
Object.assign(this.query, this.sanitizeObject(this.route.snapshot.params || {}, ...ignoredParams), this.sanitizeObject(((_a = this.route.snapshot.data) === null || _a === void 0 ? void 0 : _a.query) || {}, ...ignoredParams), this.sanitizeObject(this.route.snapshot.queryParams || {}, ...ignoredParams));
|
|
11835
|
+
/* Get id from the url */
|
|
11836
|
+
let id = this.route.snapshot.paramMap.get('id');
|
|
11837
|
+
if (id > 0) {
|
|
11838
|
+
this.id = id;
|
|
11839
|
+
}
|
|
11840
|
+
else if (!this.id && ((_c = (_b = this.route.snapshot) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.id)) {
|
|
11841
|
+
this.id = (_e = (_d = this.route.snapshot) === null || _d === void 0 ? void 0 : _d.data) === null || _e === void 0 ? void 0 : _e.id;
|
|
11842
|
+
}
|
|
11843
|
+
}
|
|
11844
|
+
/* Create a new instance of the TEntity */
|
|
11845
|
+
if (!this.isEditMode && !this.form) {
|
|
11846
|
+
this.item = Object.assign(this.newInstance(), this.item || {}, this.query || {});
|
|
11847
|
+
this.buildForm();
|
|
11848
|
+
}
|
|
11849
|
+
/* Set panel ID from query */
|
|
11850
|
+
this.subtitle || (this.subtitle = (_g = (_f = this.route.snapshot) === null || _f === void 0 ? void 0 : _f.data) === null || _g === void 0 ? void 0 : _g.subtitle);
|
|
11851
|
+
/* Add list mneu items */
|
|
11852
|
+
this.addToolbarMenuItems();
|
|
11853
|
+
}
|
|
11824
11854
|
/**
|
|
11825
11855
|
* Builds the form fields
|
|
11826
11856
|
*/
|
|
@@ -12054,6 +12084,14 @@ class GenericFormBaseComponent extends BaseComponent {
|
|
|
12054
12084
|
* Check if the item is deletable
|
|
12055
12085
|
*/
|
|
12056
12086
|
canDelete() { var _a; return !((_a = this.item) === null || _a === void 0 ? void 0 : _a.hasOwnProperty('deletable')) || this.item['deletable']; }
|
|
12087
|
+
/**
|
|
12088
|
+
* Event emitted when the id is set.
|
|
12089
|
+
*/
|
|
12090
|
+
onAfterSetId() {
|
|
12091
|
+
if (this.id) {
|
|
12092
|
+
this.loadItem();
|
|
12093
|
+
}
|
|
12094
|
+
}
|
|
12057
12095
|
/**
|
|
12058
12096
|
* Event emitted when the selected step has changed.
|
|
12059
12097
|
* @param $event
|
|
@@ -12160,11 +12198,13 @@ class GenericFormBaseComponent extends BaseComponent {
|
|
|
12160
12198
|
}
|
|
12161
12199
|
}
|
|
12162
12200
|
/** @nocollapse */ GenericFormBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: GenericFormBaseComponent, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
|
|
12163
|
-
/** @nocollapse */ GenericFormBaseComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.0", type: GenericFormBaseComponent, inputs: { id: "id", item: "item", includes: "includes", projection: "projection", query: "query" }, host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" } }, viewQueries: [{ propertyName: "matStepper", first: true, predicate: MatStepper, descendants: true }, { propertyName: "input", predicate: ["focus"], descendants: true }], usesInheritance: true, ngImport: i0 });
|
|
12201
|
+
/** @nocollapse */ GenericFormBaseComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.0", type: GenericFormBaseComponent, inputs: { id: "id", _item: "_item", item: "item", includes: "includes", projection: "projection", query: "query" }, host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" } }, viewQueries: [{ propertyName: "matStepper", first: true, predicate: MatStepper, descendants: true }, { propertyName: "input", predicate: ["focus"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0 });
|
|
12164
12202
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: GenericFormBaseComponent, decorators: [{
|
|
12165
12203
|
type: Directive
|
|
12166
12204
|
}], ctorParameters: function () { return [{ type: undefined }, { type: undefined }, { type: i1$3.ActivatedRoute }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { id: [{
|
|
12167
12205
|
type: Input
|
|
12206
|
+
}], _item: [{
|
|
12207
|
+
type: Input
|
|
12168
12208
|
}], item: [{
|
|
12169
12209
|
type: Input
|
|
12170
12210
|
}], includes: [{
|