@elderbyte/ngx-starter 18.1.0-beta2 → 18.2.0-beta2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/common/utils/input-utils.mjs +6 -0
- package/esm2022/lib/components/data-view/table/activation/elder-table-activation.directive.mjs +14 -7
- package/esm2022/lib/components/files/blob-viewer/elder-blob-viewer.component.mjs +17 -23
- package/esm2022/lib/components/files/elder-file-select.directive.mjs +83 -85
- package/esm2022/lib/components/files/listing/file-entry.mjs +15 -30
- package/esm2022/lib/components/files/listing/file-listing-rx.mjs +70 -30
- package/esm2022/lib/components/forms/directives/validation/validators/elder-multiple-of.validator.mjs +24 -9
- package/fesm2022/elderbyte-ngx-starter.mjs +162 -422
- package/fesm2022/elderbyte-ngx-starter.mjs.map +1 -1
- package/lib/common/utils/input-utils.d.ts +18 -0
- package/lib/components/data-view/table/activation/elder-table-activation.directive.d.ts +4 -1
- package/lib/components/files/blob-viewer/elder-blob-viewer.component.d.ts +3 -3
- package/lib/components/files/elder-file-select.directive.d.ts +23 -16
- package/lib/components/files/listing/file-entry.d.ts +1 -10
- package/lib/components/files/listing/file-listing-rx.d.ts +6 -3
- package/lib/components/forms/directives/validation/validators/elder-multiple-of.validator.d.ts +9 -3
- package/package.json +1 -1
- package/esm2022/lib/components/files/elder-file-select-input.mjs +0 -119
- package/esm2022/lib/components/files/file-system-api.mjs +0 -96
- package/esm2022/lib/components/files/listing/file-listing-system-handle.mjs +0 -35
- package/esm2022/lib/components/files/listing/file-listing-webkit.mjs +0 -77
- package/lib/components/files/elder-file-select-input.d.ts +0 -59
- package/lib/components/files/file-system-api.d.ts +0 -86
- package/lib/components/files/listing/file-listing-system-handle.d.ts +0 -21
- package/lib/components/files/listing/file-listing-webkit.d.ts +0 -26
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export class InputUtils {
|
|
2
|
+
static isNoInputArgs(input) {
|
|
3
|
+
return input === '';
|
|
4
|
+
}
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21tb24vdXRpbHMvaW5wdXQtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0JBLE1BQU0sT0FBTyxVQUFVO0lBRWQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFVO1FBQ3BDLE9BQU8sS0FBSyxLQUFLLEVBQUUsQ0FBQztJQUN0QixDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRvIHN1cHBvcnQgZW1wdHkgaW5wdXQgYXR0cmlidXRlcyBhbmQgZmFsbCBiYWNrIHRvIGEgZGVmYXVsdCB2YWx1ZS5cbiAqIFRoaXMgaXMgY2VudHJhbGl6ZWQgaW4gY2FzZSBBbmd1bGFyIGV2ZXIgZGVjaWRlcyB0byBjaGFuZ2UgZW1wdHkgYXR0cmlidXRlc1xuICogdG8gYW5vdGhlciB2YWx1ZSB0aGFuIGFuIGVtcHR5IHN0cmluZyAodW5kZWZpbmVkLCBudWxsIGV0Yy4pXG4gKlxuICogZS5nLlxuICogPHNvbWUtY29tcG9uZW50IGRpcmVjdGl2ZUE+IDwvc29tZS1jb21wb25lbnQ+XG4gKlxuICogLkBJbnB1dChcImRpcmVjdGl2ZUFcIilcbiAqIHB1YmxpYyBzZXQgdmFsdWVBKGlucHV0OiBTb21lVHlwZSB8IElucHV0VXRpbHMpOiBTb21lVHlwZSB7XG4gKiAgIHJldHVybiBpbnB1dCBpbnN0YW5jZU9mIElucHV0VXRpbHMgPyBTb21lVHlwZS5FbXB0eSgpIDogaW5wdXQ7XG4gKiB9XG4gKlxuICovXG5leHBvcnQgdHlwZSBOb0lucHV0QXJncyA9ICcnO1xuXG5leHBvcnQgY2xhc3MgSW5wdXRVdGlscyB7XG5cbiAgcHVibGljIHN0YXRpYyBpc05vSW5wdXRBcmdzKGlucHV0OiBhbnkpOiBpbnB1dCBpcyBOb0lucHV0QXJncyB7XG4gICAgcmV0dXJuIGlucHV0ID09PSAnJztcbiAgfVxuXG59XG4iXX0=
|
package/esm2022/lib/components/data-view/table/activation/elder-table-activation.directive.mjs
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { Directive, HostListener, Input, Output
|
|
1
|
+
import { Directive, HostListener, Input, Output } from '@angular/core';
|
|
2
2
|
import { LoggerFactory } from '@elderbyte/ts-logger';
|
|
3
3
|
import { filter, map, switchMap, takeUntil, tap } from 'rxjs/operators';
|
|
4
4
|
import { BehaviorSubject, combineLatest, Subject } from 'rxjs';
|
|
5
5
|
import { ItemActivationOptions } from './item-activation-options';
|
|
6
6
|
import { ItemActivationEvent } from './item-activation-event';
|
|
7
7
|
import { ActivationEventSource } from './activation-event-source';
|
|
8
|
+
import { InputUtils } from '../../../../common/utils/input-utils';
|
|
8
9
|
import * as i0 from "@angular/core";
|
|
9
10
|
import * as i1 from "../elder-table/elder-table.component";
|
|
10
11
|
export class ElderTableActivationDirective {
|
|
@@ -26,7 +27,7 @@ export class ElderTableActivationDirective {
|
|
|
26
27
|
this._data = [];
|
|
27
28
|
this.activeItem$ = new BehaviorSubject(null);
|
|
28
29
|
this.rows$ = new BehaviorSubject([]);
|
|
29
|
-
this.
|
|
30
|
+
this._activationOptions = {};
|
|
30
31
|
}
|
|
31
32
|
/***************************************************************************
|
|
32
33
|
* *
|
|
@@ -87,6 +88,12 @@ export class ElderTableActivationDirective {
|
|
|
87
88
|
* Properties *
|
|
88
89
|
* *
|
|
89
90
|
**************************************************************************/
|
|
91
|
+
set activationOptions(options) {
|
|
92
|
+
this.activationOptions = InputUtils.isNoInputArgs(options) ? options : {};
|
|
93
|
+
}
|
|
94
|
+
get activationOptions() {
|
|
95
|
+
return this._activationOptions;
|
|
96
|
+
}
|
|
90
97
|
get activeItemEventChange() {
|
|
91
98
|
return this.itemActivationEventSubject;
|
|
92
99
|
}
|
|
@@ -284,12 +291,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImpor
|
|
|
284
291
|
exportAs: 'elderTableActivation',
|
|
285
292
|
standalone: true
|
|
286
293
|
}]
|
|
287
|
-
}], ctorParameters: () => [{ type: i1.ElderTableComponent }], propDecorators: {
|
|
288
|
-
type: Input,
|
|
289
|
-
args: ['elderTableActivation']
|
|
290
|
-
}], onKeydown: [{
|
|
294
|
+
}], ctorParameters: () => [{ type: i1.ElderTableComponent }], propDecorators: { onKeydown: [{
|
|
291
295
|
type: HostListener,
|
|
292
296
|
args: ['keydown', ['$event']]
|
|
297
|
+
}], activationOptions: [{
|
|
298
|
+
type: Input,
|
|
299
|
+
args: ['elderTableActivation']
|
|
293
300
|
}], activeItemEventChange: [{
|
|
294
301
|
type: Output
|
|
295
302
|
}], activeItemChange: [{
|
|
@@ -297,4 +304,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImpor
|
|
|
297
304
|
}], activeItem: [{
|
|
298
305
|
type: Input
|
|
299
306
|
}] } });
|
|
300
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItdGFibGUtYWN0aXZhdGlvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdmlldy90YWJsZS9hY3RpdmF0aW9uL2VsZGVyLXRhYmxlLWFjdGl2YXRpb24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxHQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hHLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVuRCxPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFjLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUd6RSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQzs7O0FBUWhFLE1BQU0sT0FBTyw2QkFBNkI7SUFzQnhDOzs7O2dGQUk0RTtJQUU1RSxZQUNtQixVQUErQjtRQUEvQixlQUFVLEdBQVYsVUFBVSxDQUFxQjtRQTNCbEQ7Ozs7b0ZBSTRFO1FBRTNELFdBQU0sR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFeEQsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFL0IsK0JBQTBCLEdBQUcsSUFBSSxPQUFPLEVBQTBCLENBQUM7UUFFNUUs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S0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFTyxZQUFZLENBQUMsQ0FBSSxFQUFFLFFBQWE7UUFDdEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsQ0FBQztJQUNwQyxDQUFDO0lBRU8sS0FBSyxDQUFDLElBQU87UUFDbkIsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25ELE9BQU8sRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDOzhHQS9VVSw2QkFBNkI7a0dBQTdCLDZCQUE2Qjs7MkZBQTdCLDZCQUE2QjtrQkFMekMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsbUNBQW1DO29CQUM3QyxRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyxVQUFVLEVBQUUsSUFBSTtpQkFDbkI7d0ZBcUJRLGlCQUFpQjtzQkFEdkIsS0FBSzt1QkFBQyxzQkFBc0I7Z0JBc0V0QixTQUFTO3NCQURmLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWlDeEIscUJBQXFCO3NCQUQvQixNQUFNO2dCQU1JLGdCQUFnQjtzQkFEMUIsTUFBTTtnQkFVSSxVQUFVO3NCQURwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uRGVzdHJveSwgT3V0cHV0LH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0xvZ2dlckZhY3Rvcnl9IGZyb20gJ0BlbGRlcmJ5dGUvdHMtbG9nZ2VyJztcbmltcG9ydCB7RWxkZXJUYWJsZVJvd0RpcmVjdGl2ZX0gZnJvbSAnLi4vZWxkZXItdGFibGUtcm93LmRpcmVjdGl2ZSc7XG5pbXBvcnQge2ZpbHRlciwgbWFwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0VsZGVyVGFibGVDb21wb25lbnR9IGZyb20gJy4uL2VsZGVyLXRhYmxlL2VsZGVyLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQge0VsZGVyVGFibGVBY3RpdmF0aW9uT3B0aW9uc30gZnJvbSAnLi9lbGRlci10YWJsZS1hY3RpdmF0aW9uLW9wdGlvbnMnO1xuaW1wb3J0IHtJdGVtQWN0aXZhdGlvbk9wdGlvbnN9IGZyb20gJy4vaXRlbS1hY3RpdmF0aW9uLW9wdGlvbnMnO1xuaW1wb3J0IHtJdGVtQWN0aXZhdGlvbkV2ZW50fSBmcm9tICcuL2l0ZW0tYWN0aXZhdGlvbi1ldmVudCc7XG5pbXBvcnQge0FjdGl2YXRpb25FdmVudFNvdXJjZX0gZnJvbSAnLi9hY3RpdmF0aW9uLWV2ZW50LXNvdXJjZSc7XG5pbXBvcnQge0VsZGVyQWN0aXZhdGlvbkNvbnRleHR9IGZyb20gJy4vZWxkZXItYWN0aXZhdGlvbi1jb250ZXh0JztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdlbGRlci10YWJsZVtlbGRlclRhYmxlQWN0aXZhdGlvbl0nLFxuICAgIGV4cG9ydEFzOiAnZWxkZXJUYWJsZUFjdGl2YXRpb24nLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgRWxkZXJUYWJsZUFjdGl2YXRpb25EaXJlY3RpdmU8VD4gaW1wbGVtZW50cyBFbGRlckFjdGl2YXRpb25Db250ZXh0PFQ+LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBGaWVsZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGl0ZW1BY3RpdmF0aW9uRXZlbnRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8SXRlbUFjdGl2YXRpb25FdmVudDxUPj4oKTtcblxuICBwcml2YXRlIF9kYXRhOiBUW10gPSBbXTtcblxuICBwdWJsaWMgcmVhZG9ubHkgYWN0aXZlSXRlbSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFQ+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgcm93cyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEVsZGVyVGFibGVSb3dEaXJlY3RpdmU8VD5bXT4oW10pO1xuXG4gIEBJbnB1dCgnZWxkZXJUYWJsZUFjdGl2YXRpb24nKVxuICBwdWJsaWMgYWN0aXZhdGlvbk9wdGlvbnM6IEVsZGVyVGFibGVBY3RpdmF0aW9uT3B0aW9ucyA9IHt9O1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBDb25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZWxkZXJUYWJsZTogRWxkZXJUYWJsZUNvbXBvbmVudFxuICApIHtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBMaWZlIEN5Y2xlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG5cbiAgICBjb25zdCByb3dzJCA9IHRoaXMuZWxkZXJUYWJsZS5yb3dzJDtcbiAgICBjb25zdCBkYXRhJCA9IHRoaXMuZWxkZXJUYWJsZS5kYXRhQ29udGV4dCQucGlwZShcbiAgICAgIHN3aXRjaE1hcChkYyA9PiBkYy5kYXRhKSxcbiAgICAgIHRhcChkYXRhID0+IHRoaXMuX2RhdGEgPSBkYXRhKVxuICAgICk7XG5cbiAgICBjb21iaW5lTGF0ZXN0KFtyb3dzJCwgZGF0YSRdKS5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgKS5zdWJzY3JpYmUoXG4gICAgICAoW3Jvd3MsIGRhdGFdKSA9PiB7XG4gICAgICAgIHRoaXMucm93cyQubmV4dChcbiAgICAgICAgICB0aGlzLnJvd0RhdGFVcGRhdGVkKHJvd3MsIGRhdGEpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaGFuZGxlQXV0b0FjdGl2YXRpb25zKCk7XG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMucm93cyQsIHRoaXMuYWN0aXZlSXRlbSRdKS5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgKS5zdWJzY3JpYmUoXG4gICAgICAoW3Jvd3MsIGFjdGl2ZUl0ZW1dKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlUm93c0FjdGl2YXRpb24ocm93cywgYWN0aXZlSXRlbSk7XG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuZWxkZXJUYWJsZS5kYXRhQ29udGV4dCQucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgIG1hcChkYyA9PiBkYy5kYXRhU291cmNlKSxcbiAgICAgIHN3aXRjaE1hcChkcyA9PiBkcy5kYXRhQ2hhbmdlZCksXG4gICAgICBmaWx0ZXIoZXZlbnQgPT4gZXZlbnQuZGVsZXRlZElkcz8ubGVuZ3RoID4gMClcbiAgICApLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiBkZWxldGVFdmVudCA9PiB7XG4gICAgICAgICBkZWxldGVFdmVudC5kZWxldGVkSWRzLmZvckVhY2goaWQgPT4gdGhpcy5kZWFjdGl2YXRlQnlJZChpZCkpXG4gICAgICB9fSlcbiAgfVxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIC8vIHRoaXMuZWxkZXJUYWJsZS5yb3dzJC5nZXRWYWx1ZSgpLmZvckVhY2gociA9PiByLmJpbmRUYWJsZUFjdGl2YXRpb24obnVsbCkpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLlxuICAgKiBIb3N0IExpc3RlbmVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICBwdWJsaWMgb25LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgbGV0IG5ld0FjdGl2ZUl0ZW06IFQ7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIG5ld0FjdGl2ZUl0ZW0gPSB0aGlzLm5leHRSb3dJdGVtKCk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgbmV3QWN0aXZlSXRlbSA9IHRoaXMucHJldmlvdXNSb3dJdGVtKCk7XG4gICAgfVxuXG4gICAgaWYgKG5ld0FjdGl2ZUl0ZW0pIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVBbmRGb2N1cyhuZXdBY3RpdmVJdGVtKTtcbiAgICB9XG5cbiAgICBjb25zdCBhY3RpdmUgPSB0aGlzLmFjdGl2ZUl0ZW07XG4gICAgaWYgKGFjdGl2ZSkge1xuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICB0aGlzLmVsZGVyVGFibGUub25JdGVtQ2xpY2soYWN0aXZlKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ1NwYWNlYmFyJyB8fCBldmVudC5rZXkgPT09ICcgJykge1xuICAgICAgICB0aGlzLmVsZGVyVGFibGUuc2VsZWN0aW9uTW9kZWwudG9nZ2xlKGFjdGl2ZSk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBnZXQgYWN0aXZlSXRlbUV2ZW50Q2hhbmdlKCk6IE9ic2VydmFibGU8SXRlbUFjdGl2YXRpb25FdmVudDxUPj4ge1xuICAgIHJldHVybiB0aGlzLml0ZW1BY3RpdmF0aW9uRXZlbnRTdWJqZWN0O1xuICB9XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBnZXQgYWN0aXZlSXRlbUNoYW5nZSgpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVJdGVtJDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYWN0aXZlSXRlbSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVJdGVtJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBhY3RpdmVJdGVtKGl0ZW06IFQpIHtcbiAgICB0aGlzLmFjdGl2YXRlKGl0ZW0sIG5ldyBJdGVtQWN0aXZhdGlvbk9wdGlvbnMoQWN0aXZhdGlvbkV2ZW50U291cmNlLlNZU1RFTSwgdHJ1ZSkpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFB1YmxpYyBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIGFjdGl2YXRlKGl0ZW06IFQsIG9wdGlvbnM6IEl0ZW1BY3RpdmF0aW9uT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlQWN0aXZlSXRlbShpdGVtLCBvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBhY3RpdmF0ZUFuZEZvY3VzKGl0ZW06IFQpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2YXRlKGl0ZW0sIG5ldyBJdGVtQWN0aXZhdGlvbk9wdGlvbnMoQWN0aXZhdGlvbkV2ZW50U291cmNlLlNZU1RFTSwgdHJ1ZSkpXG4gIH1cblxuICBwdWJsaWMgaXNJdGVtQWN0aXZlKGl0ZW06IFQpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5hY3RpdmVJdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5pdGVtRXF1YWxzKHRoaXMuYWN0aXZlSXRlbSwgaXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaGFzSXRlbUZvY3VzKGl0ZW06IFQpOiBib29sZWFuIHtcbiAgICBjb25zdCByb3cgPSB0aGlzLmdldFJvd0Zvckl0ZW0oaXRlbSk7XG4gICAgcmV0dXJuIHJvdz8uaGFzRm9jdXM7XG4gIH1cblxuICBwdWJsaWMgbmV4dENsb3NlVG8oYWN0aXZlOiBUKTogVCB7XG4gICAgY29uc3QgbmV4dCA9IHRoaXMubmV4dFJvd0l0ZW0oKTtcbiAgICBpZiAobmV4dCAhPT0gYWN0aXZlKSB7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucHJldmlvdXNSb3dJdGVtKCk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJpdmF0ZSBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIHVwZGF0ZUFjdGl2ZUl0ZW0oaXRlbTogVCwgb3B0aW9uczogSXRlbUFjdGl2YXRpb25PcHRpb25zKSB7XG4gICAgdGhpcy5pdGVtQWN0aXZhdGlvbkV2ZW50U3ViamVjdC5uZXh0KG5ldyBJdGVtQWN0aXZhdGlvbkV2ZW50KGl0ZW0sIG9wdGlvbnMuc291cmNlLCBvcHRpb25zLmZvY3VzKSlcbiAgICBpZiAoaXRlbSAhPT0gdGhpcy5hY3RpdmVJdGVtKSB7XG4gICAgICB0aGlzLmFjdGl2ZUl0ZW0kLm5leHQoaXRlbSk7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnU2V0IGFjdGl2ZSBpdGVtIHRvICcsIGl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUm93c0FjdGl2YXRpb24ocm93czogRWxkZXJUYWJsZVJvd0RpcmVjdGl2ZTxUPltdLCBhY3RpdmVJdGVtOiBUKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlSWQgPSB0aGlzLmdldElkKGFjdGl2ZUl0ZW0pO1xuICAgIHJvd3MuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgdGhpcy51cGRhdGVSb3dBY3RpdmF0aW9uKHJvdywgYWN0aXZlSWQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVSb3dBY3RpdmF0aW9uKHJvdzogRWxkZXJUYWJsZVJvd0RpcmVjdGl2ZTxUPiwgYWN0aXZlSWQ6IGFueSk6IHZvaWQge1xuICAgIGlmIChyb3cubW9kZWwpIHtcbiAgICAgIGlmICh0aGlzLml0ZW1FcXVhbHNJZChyb3cubW9kZWwsIGFjdGl2ZUlkKSkge1xuICAgICAgICBpZiAoIXJvdy5hY3RpdmF0ZWQpIHtcbiAgICAgICAgICByb3cuYWN0aXZhdGVkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnQWN0aXZhdGVkIHJvdzogJywgcm93KTtcbiAgICAgICAgICBpZiAoIXJvdy5oYXNGb2N1cykge1xuICAgICAgICAgICAgcm93LmJyaW5nVG9WaWV3KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb3cuYWN0aXZhdGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvdy5hY3RpdmF0ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJvd0RhdGFVcGRhdGVkKFxuICAgIHJvd3M6IEVsZGVyVGFibGVSb3dEaXJlY3RpdmU8VD5bXSxcbiAgICBkYXRhOiBUW11cbiAgKTogRWxkZXJUYWJsZVJvd0RpcmVjdGl2ZTxUPltdIHtcbiAgICAvLyB0aGlzLmxvZ2dlci5kZWJ1ZygnRm91bmQgcm93czonLCByb3dzKTtcbiAgICByb3dzLmZvckVhY2gocm93ID0+IHtcbiAgICAgIHJvdy5iaW5kVGFibGVBY3RpdmF0aW9uKHRoaXMpO1xuICAgIH0pO1xuICAgIHJldHVybiByb3dzO1xuICB9XG5cblxuICBwcml2YXRlIGRlYWN0aXZhdGVCeUlkKGlkOiBhbnkpIHtcbiAgICBjb25zdCBhY3RpdmUgPSB0aGlzLmFjdGl2ZUl0ZW0kLmdldFZhbHVlKCk7XG4gICAgaWYgKGFjdGl2ZSkge1xuICAgICAgY29uc3QgYWN0aXZlSWQgPSB0aGlzLmdldElkKGFjdGl2ZSk7XG4gICAgICBpZiAoYWN0aXZlSWQgPT0gaWQpIHtcbiAgICAgICAgdGhpcy5hY3RpdmF0ZShudWxsLCBuZXcgSXRlbUFjdGl2YXRpb25PcHRpb25zKEFjdGl2YXRpb25FdmVudFNvdXJjZS5TWVNURU0sIGZhbHNlKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRSb3dGb3JJdGVtKGl0ZW06IFQpOiBFbGRlclRhYmxlUm93RGlyZWN0aXZlPFQ+IHwgbnVsbCB7XG4gICAgY29uc3Qgcm93cyA9IHRoaXMucm93cyQuZ2V0VmFsdWUoKTtcbiAgICByZXR1cm4gcm93cy5maW5kKHIgPT4gci5tb2RlbCA9PT0gaXRlbSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUF1dG9BY3RpdmF0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaGFzQWN0aXZlSXRlbSB8fCB0aGlzLmFjdGl2YXRpb25PcHRpb25zLm1vZGUgPT09ICdhbHdheXMnKSB7XG4gICAgICBzd2l0Y2ggKHRoaXMuYWN0aXZhdGlvbk9wdGlvbnMucm93KSB7XG4gICAgICAgIGNhc2UgJ25vbmUnOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdmaXJzdCc6XG4gICAgICAgICAgdGhpcy5hY3RpdmF0ZUZpcnN0KCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2xhc3QnOlxuICAgICAgICAgIHRoaXMuYWN0aXZhdGVMYXN0KCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaGFzQWN0aXZlSXRlbSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmFjdGl2ZUl0ZW07XG4gIH1cblxuICBwcml2YXRlIGFjdGl2YXRlRmlyc3QoKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0SXRlbUF0SW5kZXgoMCk7XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIHRoaXMuYWN0aXZhdGUoaXRlbSwgbmV3IEl0ZW1BY3RpdmF0aW9uT3B0aW9ucyhBY3RpdmF0aW9uRXZlbnRTb3VyY2UuU1lTVEVNLCBmYWxzZSkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWN0aXZhdGVMYXN0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kYXRhKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRJdGVtQXRJbmRleCh0aGlzLl9kYXRhLmxlbmd0aCAtIDEpO1xuICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgdGhpcy5hY3RpdmF0ZShpdGVtLCBuZXcgSXRlbUFjdGl2YXRpb25PcHRpb25zKEFjdGl2YXRpb25FdmVudFNvdXJjZS5TWVNURU0sIGZhbHNlKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwcmV2aW91c1Jvd0l0ZW0oKTogVCB7XG4gICAgY29uc3Qgcm93cyA9IHRoaXMuX2RhdGE7XG4gICAgbGV0IGN1cnJlbnRJbmRleCA9IHRoaXMuZ2V0Q3VycmVudEluZGV4KCk7XG4gICAgaWYgKGN1cnJlbnRJbmRleCA+IDApIHtcbiAgICAgIC0tY3VycmVudEluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5hY3RpdmF0aW9uT3B0aW9ucy5sb29wKSB7XG4gICAgICAgIGN1cnJlbnRJbmRleCA9IHJvd3MubGVuZ3RoIC0gMTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbUF0SW5kZXgoY3VycmVudEluZGV4KTtcbiAgfVxuXG4gIHByaXZhdGUgbmV4dFJvd0l0ZW0oKTogVCB7XG4gICAgY29uc3Qgcm93cyA9IHRoaXMuX2RhdGE7XG4gICAgbGV0IGN1cnJlbnRJbmRleCA9IHRoaXMuZ2V0Q3VycmVudEluZGV4KCk7XG5cbiAgICBpZiAoY3VycmVudEluZGV4IDwgKHJvd3MubGVuZ3RoIC0gMSkpIHtcbiAgICAgICsrY3VycmVudEluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5hY3RpdmF0aW9uT3B0aW9ucy5sb29wKSB7XG4gICAgICAgIGN1cnJlbnRJbmRleCA9IDA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldEl0ZW1BdEluZGV4KGN1cnJlbnRJbmRleCk7XG4gIH1cblxuICBwcml2YXRlIGdldEN1cnJlbnRJbmRleCgpOiBudW1iZXIge1xuICAgIGNvbnN0IGFjdGl2ZUl0ZW0gPSB0aGlzLmFjdGl2ZUl0ZW07XG4gICAgaWYgKGFjdGl2ZUl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbmRJdGVtSW5kZXgoYWN0aXZlSXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEl0ZW1BdEluZGV4KGluZGV4OiBudW1iZXIpOiBUIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVtpbmRleF07XG4gIH1cblxuICBwcml2YXRlIGZpbmRJdGVtSW5kZXgoaXRlbTogVCk6IG51bWJlciB7XG4gICAgY29uc3QgbmVlZGxlSWQgPSB0aGlzLmdldElkKGl0ZW0pO1xuICAgIHJldHVybiB0aGlzLl9kYXRhLmZpbmRJbmRleChpdG0gPT4gdGhpcy5pdGVtRXF1YWxzSWQoaXRtLCBuZWVkbGVJZCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpdGVtRXF1YWxzKGE6IFQsIGI6IFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJZChhKSA9PT0gdGhpcy5nZXRJZChiKTtcbiAgfVxuXG4gIHByaXZhdGUgaXRlbUVxdWFsc0lkKGE6IFQsIG5lZWRsZUlkOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJZChhKSA9PT0gbmVlZGxlSWQ7XG4gIH1cblxuICBwcml2YXRlIGdldElkKGl0ZW06IFQpOiBhbnkge1xuICAgIGlmIChpdGVtKSB7XG4gICAgICBjb25zdCBkYyA9IHRoaXMuZWxkZXJUYWJsZS5kYXRhQ29udGV4dCQuZ2V0VmFsdWUoKTtcbiAgICAgIHJldHVybiBkYz8uZGF0YVNvdXJjZT8uZ2V0SWQoaXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cbiAgfVxuXG59XG4iXX0=
|
|
307
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItdGFibGUtYWN0aXZhdGlvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdmlldy90YWJsZS9hY3RpdmF0aW9uL2VsZGVyLXRhYmxlLWFjdGl2YXRpb24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQy9GLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVuRCxPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFjLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUd6RSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUVoRSxPQUFPLEVBQUMsVUFBVSxFQUFjLE1BQU0sc0NBQXNDLENBQUM7OztBQU83RSxNQUFNLE9BQU8sNkJBQTZCO0lBc0J4Qzs7OztnRkFJNEU7SUFFNUUsWUFDbUIsVUFBK0I7UUFBL0IsZUFBVSxHQUFWLFVBQVUsQ0FBcUI7UUEzQmxEOzs7O29GQUk0RTtRQUUzRCxXQUFNLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXhELGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FB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c0JBRHBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIERpcmVjdGl2ZSwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25EZXN0cm95LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtMb2dnZXJGYWN0b3J5fSBmcm9tICdAZWxkZXJieXRlL3RzLWxvZ2dlcic7XG5pbXBvcnQge0VsZGVyVGFibGVSb3dEaXJlY3RpdmV9IGZyb20gJy4uL2VsZGVyLXRhYmxlLXJvdy5kaXJlY3RpdmUnO1xuaW1wb3J0IHtmaWx0ZXIsIG1hcCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtFbGRlclRhYmxlQ29tcG9uZW50fSBmcm9tICcuLi9lbGRlci10YWJsZS9lbGRlci10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHtFbGRlclRhYmxlQWN0aXZhdGlvbk9wdGlvbnN9IGZyb20gJy4vZWxkZXItdGFibGUtYWN0aXZhdGlvbi1vcHRpb25zJztcbmltcG9ydCB7SXRlbUFjdGl2YXRpb25PcHRpb25zfSBmcm9tICcuL2l0ZW0tYWN0aXZhdGlvbi1vcHRpb25zJztcbmltcG9ydCB7SXRlbUFjdGl2YXRpb25FdmVudH0gZnJvbSAnLi9pdGVtLWFjdGl2YXRpb24tZXZlbnQnO1xuaW1wb3J0IHtBY3RpdmF0aW9uRXZlbnRTb3VyY2V9IGZyb20gJy4vYWN0aXZhdGlvbi1ldmVudC1zb3VyY2UnO1xuaW1wb3J0IHtFbGRlckFjdGl2YXRpb25Db250ZXh0fSBmcm9tICcuL2VsZGVyLWFjdGl2YXRpb24tY29udGV4dCc7XG5pbXBvcnQge0lucHV0VXRpbHMsIE5vSW5wdXRBcmdzfSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24vdXRpbHMvaW5wdXQtdXRpbHMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdlbGRlci10YWJsZVtlbGRlclRhYmxlQWN0aXZhdGlvbl0nLFxuICBleHBvcnRBczogJ2VsZGVyVGFibGVBY3RpdmF0aW9uJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBFbGRlclRhYmxlQWN0aXZhdGlvbkRpcmVjdGl2ZTxUPiBpbXBsZW1lbnRzIEVsZGVyQWN0aXZhdGlvbkNvbnRleHQ8VD4sIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaXRlbUFjdGl2YXRpb25FdmVudFN1YmplY3QgPSBuZXcgU3ViamVjdDxJdGVtQWN0aXZhdGlvbkV2ZW50PFQ+PigpO1xuXG4gIHByaXZhdGUgX2RhdGE6IFRbXSA9IFtdO1xuXG4gIHB1YmxpYyByZWFkb25seSBhY3RpdmVJdGVtJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VD4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSByb3dzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RWxkZXJUYWJsZVJvd0RpcmVjdGl2ZTxUPltdPihbXSk7XG5cbiAgcHJpdmF0ZSBfYWN0aXZhdGlvbk9wdGlvbnM6IEVsZGVyVGFibGVBY3RpdmF0aW9uT3B0aW9ucyA9IHt9O1xuXG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIENvbnN0cnVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbGRlclRhYmxlOiBFbGRlclRhYmxlQ29tcG9uZW50XG4gICkge1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIExpZmUgQ3ljbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcblxuICAgIGNvbnN0IHJvd3MkID0gdGhpcy5lbGRlclRhYmxlLnJvd3MkO1xuICAgIGNvbnN0IGRhdGEkID0gdGhpcy5lbGRlclRhYmxlLmRhdGFDb250ZXh0JC5waXBlKFxuICAgICAgc3dpdGNoTWFwKGRjID0+IGRjLmRhdGEpLFxuICAgICAgdGFwKGRhdGEgPT4gdGhpcy5fZGF0YSA9IGRhdGEpXG4gICAgKTtcblxuICAgIGNvbWJpbmVMYXRlc3QoW3Jvd3MkLCBkYXRhJF0pLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcbiAgICApLnN1YnNjcmliZShcbiAgICAgIChbcm93cywgZGF0YV0pID0+IHtcbiAgICAgICAgdGhpcy5yb3dzJC5uZXh0KFxuICAgICAgICAgIHRoaXMucm93RGF0YVVwZGF0ZWQocm93cywgZGF0YSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5oYW5kbGVBdXRvQWN0aXZhdGlvbnMoKTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5yb3dzJCwgdGhpcy5hY3RpdmVJdGVtJF0pLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcbiAgICApLnN1YnNjcmliZShcbiAgICAgIChbcm93cywgYWN0aXZlSXRlbV0pID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVSb3dzQWN0aXZhdGlvbihyb3dzLCBhY3RpdmVJdGVtKTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5lbGRlclRhYmxlLmRhdGFDb250ZXh0JC5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgbWFwKGRjID0+IGRjLmRhdGFTb3VyY2UpLFxuICAgICAgc3dpdGNoTWFwKGRzID0+IGRzLmRhdGFDaGFuZ2VkKSxcbiAgICAgIGZpbHRlcihldmVudCA9PiBldmVudC5kZWxldGVkSWRzPy5sZW5ndGggPiAwKVxuICAgICkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IGRlbGV0ZUV2ZW50ID0+IHtcbiAgICAgICAgZGVsZXRlRXZlbnQuZGVsZXRlZElkcy5mb3JFYWNoKGlkID0+IHRoaXMuZGVhY3RpdmF0ZUJ5SWQoaWQpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgLy8gdGhpcy5lbGRlclRhYmxlLnJvd3MkLmdldFZhbHVlKCkuZm9yRWFjaChyID0+IHIuYmluZFRhYmxlQWN0aXZhdGlvbihudWxsKSk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICouXG4gICAqIEhvc3QgTGlzdGVuZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIHB1YmxpYyBvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBsZXQgbmV3QWN0aXZlSXRlbTogVDtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgbmV3QWN0aXZlSXRlbSA9IHRoaXMubmV4dFJvd0l0ZW0oKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICBuZXdBY3RpdmVJdGVtID0gdGhpcy5wcmV2aW91c1Jvd0l0ZW0oKTtcbiAgICB9XG5cbiAgICBpZiAobmV3QWN0aXZlSXRlbSkge1xuICAgICAgdGhpcy5hY3RpdmF0ZUFuZEZvY3VzKG5ld0FjdGl2ZUl0ZW0pO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuYWN0aXZlSXRlbTtcbiAgICBpZiAoYWN0aXZlKSB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgIHRoaXMuZWxkZXJUYWJsZS5vbkl0ZW1DbGljayhhY3RpdmUpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnU3BhY2ViYXInIHx8IGV2ZW50LmtleSA9PT0gJyAnKSB7XG4gICAgICAgIHRoaXMuZWxkZXJUYWJsZS5zZWxlY3Rpb25Nb2RlbC50b2dnbGUoYWN0aXZlKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByb3BlcnRpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgQElucHV0KCdlbGRlclRhYmxlQWN0aXZhdGlvbicpXG4gIHB1YmxpYyBzZXQgYWN0aXZhdGlvbk9wdGlvbnMob3B0aW9uczogRWxkZXJUYWJsZUFjdGl2YXRpb25PcHRpb25zIHwgTm9JbnB1dEFyZ3MpIHtcbiAgICB0aGlzLmFjdGl2YXRpb25PcHRpb25zID0gSW5wdXRVdGlscy5pc05vSW5wdXRBcmdzKG9wdGlvbnMpID8gb3B0aW9ucyA6IHt9O1xuICB9XG5cbiAgcHVibGljIGdldCBhY3RpdmF0aW9uT3B0aW9ucygpOiBFbGRlclRhYmxlQWN0aXZhdGlvbk9wdGlvbnMge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmF0aW9uT3B0aW9ucztcbiAgfVxuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgZ2V0IGFjdGl2ZUl0ZW1FdmVudENoYW5nZSgpOiBPYnNlcnZhYmxlPEl0ZW1BY3RpdmF0aW9uRXZlbnQ8VD4+IHtcbiAgICByZXR1cm4gdGhpcy5pdGVtQWN0aXZhdGlvbkV2ZW50U3ViamVjdDtcbiAgfVxuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgZ2V0IGFjdGl2ZUl0ZW1DaGFuZ2UoKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlSXRlbSQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFjdGl2ZUl0ZW0oKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlSXRlbSQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgYWN0aXZlSXRlbShpdGVtOiBUKSB7XG4gICAgdGhpcy5hY3RpdmF0ZShpdGVtLCBuZXcgSXRlbUFjdGl2YXRpb25PcHRpb25zKEFjdGl2YXRpb25FdmVudFNvdXJjZS5TWVNURU0sIHRydWUpKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBhY3RpdmF0ZShpdGVtOiBULCBvcHRpb25zOiBJdGVtQWN0aXZhdGlvbk9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUFjdGl2ZUl0ZW0oaXRlbSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgYWN0aXZhdGVBbmRGb2N1cyhpdGVtOiBUKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmF0ZShpdGVtLCBuZXcgSXRlbUFjdGl2YXRpb25PcHRpb25zKEFjdGl2YXRpb25FdmVudFNvdXJjZS5TWVNURU0sIHRydWUpKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0l0ZW1BY3RpdmUoaXRlbTogVCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmFjdGl2ZUl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLml0ZW1FcXVhbHModGhpcy5hY3RpdmVJdGVtLCBpdGVtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBoYXNJdGVtRm9jdXMoaXRlbTogVCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJvdyA9IHRoaXMuZ2V0Um93Rm9ySXRlbShpdGVtKTtcbiAgICByZXR1cm4gcm93Py5oYXNGb2N1cztcbiAgfVxuXG4gIHB1YmxpYyBuZXh0Q2xvc2VUbyhhY3RpdmU6IFQpOiBUIHtcbiAgICBjb25zdCBuZXh0ID0gdGhpcy5uZXh0Um93SXRlbSgpO1xuICAgIGlmIChuZXh0ICE9PSBhY3RpdmUpIHtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wcmV2aW91c1Jvd0l0ZW0oKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcml2YXRlIG1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgdXBkYXRlQWN0aXZlSXRlbShpdGVtOiBULCBvcHRpb25zOiBJdGVtQWN0aXZhdGlvbk9wdGlvbnMpIHtcbiAgICB0aGlzLml0ZW1BY3RpdmF0aW9uRXZlbnRTdWJqZWN0Lm5leHQobmV3IEl0ZW1BY3RpdmF0aW9uRXZlbnQoaXRlbSwgb3B0aW9ucy5zb3VyY2UsIG9wdGlvbnMuZm9jdXMpKTtcbiAgICBpZiAoaXRlbSAhPT0gdGhpcy5hY3RpdmVJdGVtKSB7XG4gICAgICB0aGlzLmFjdGl2ZUl0ZW0kLm5leHQoaXRlbSk7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnU2V0IGFjdGl2ZSBpdGVtIHRvICcsIGl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUm93c0FjdGl2YXRpb24ocm93czogRWxkZXJUYWJsZVJvd0RpcmVjdGl2ZTxUPltdLCBhY3RpdmVJdGVtOiBUKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlSWQgPSB0aGlzLmdldElkKGFjdGl2ZUl0ZW0pO1xuICAgIHJvd3MuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgdGhpcy51cGRhdGVSb3dBY3RpdmF0aW9uKHJvdywgYWN0aXZlSWQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVSb3dBY3RpdmF0aW9uKHJvdzogRWxkZXJUYWJsZVJvd0RpcmVjdGl2ZTxUPiwgYWN0aXZlSWQ6IGFueSk6IHZvaWQge1xuICAgIGlmIChyb3cubW9kZWwpIHtcbiAgICAgIGlmICh0aGlzLml0ZW1FcXVhbHNJZChyb3cubW9kZWwsIGFjdGl2ZUlkKSkge1xuICAgICAgICBpZiAoIXJvdy5hY3RpdmF0ZWQpIHtcbiAgICAgICAgICByb3cuYWN0aXZhdGVkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnQWN0aXZhdGVkIHJvdzogJywgcm93KTtcbiAgICAgICAgICBpZiAoIXJvdy5oYXNGb2N1cykge1xuICAgICAgICAgICAgcm93LmJyaW5nVG9WaWV3KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb3cuYWN0aXZhdGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvdy5hY3RpdmF0ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJvd0RhdGFVcGRhdGVkKFxuICAgIHJvd3M6IEVsZGVyVGFibGVSb3dEaXJlY3RpdmU8VD5bXSxcbiAgICBkYXRhOiBUW11cbiAgKTogRWxkZXJUYWJsZVJvd0RpcmVjdGl2ZTxUPltdIHtcbiAgICAvLyB0aGlzLmxvZ2dlci5kZWJ1ZygnRm91bmQgcm93czonLCByb3dzKTtcbiAgICByb3dzLmZvckVhY2gocm93ID0+IHtcbiAgICAgIHJvdy5iaW5kVGFibGVBY3RpdmF0aW9uKHRoaXMpO1xuICAgIH0pO1xuICAgIHJldHVybiByb3dzO1xuICB9XG5cblxuICBwcml2YXRlIGRlYWN0aXZhdGVCeUlkKGlkOiBhbnkpIHtcbiAgICBjb25zdCBhY3RpdmUgPSB0aGlzLmFjdGl2ZUl0ZW0kLmdldFZhbHVlKCk7XG4gICAgaWYgKGFjdGl2ZSkge1xuICAgICAgY29uc3QgYWN0aXZlSWQgPSB0aGlzLmdldElkKGFjdGl2ZSk7XG4gICAgICBpZiAoYWN0aXZlSWQgPT0gaWQpIHtcbiAgICAgICAgdGhpcy5hY3RpdmF0ZShudWxsLCBuZXcgSXRlbUFjdGl2YXRpb25PcHRpb25zKEFjdGl2YXRpb25FdmVudFNvdXJjZS5TWVNURU0sIGZhbHNlKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRSb3dGb3JJdGVtKGl0ZW06IFQpOiBFbGRlclRhYmxlUm93RGlyZWN0aXZlPFQ+IHwgbnVsbCB7XG4gICAgY29uc3Qgcm93cyA9IHRoaXMucm93cyQuZ2V0VmFsdWUoKTtcbiAgICByZXR1cm4gcm93cy5maW5kKHIgPT4gci5tb2RlbCA9PT0gaXRlbSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUF1dG9BY3RpdmF0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaGFzQWN0aXZlSXRlbSB8fCB0aGlzLmFjdGl2YXRpb25PcHRpb25zLm1vZGUgPT09ICdhbHdheXMnKSB7XG4gICAgICBzd2l0Y2ggKHRoaXMuYWN0aXZhdGlvbk9wdGlvbnMucm93KSB7XG4gICAgICAgIGNhc2UgJ25vbmUnOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdmaXJzdCc6XG4gICAgICAgICAgdGhpcy5hY3RpdmF0ZUZpcnN0KCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2xhc3QnOlxuICAgICAgICAgIHRoaXMuYWN0aXZhdGVMYXN0KCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaGFzQWN0aXZlSXRlbSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmFjdGl2ZUl0ZW07XG4gIH1cblxuICBwcml2YXRlIGFjdGl2YXRlRmlyc3QoKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0SXRlbUF0SW5kZXgoMCk7XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIHRoaXMuYWN0aXZhdGUoaXRlbSwgbmV3IEl0ZW1BY3RpdmF0aW9uT3B0aW9ucyhBY3RpdmF0aW9uRXZlbnRTb3VyY2UuU1lTVEVNLCBmYWxzZSkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWN0aXZhdGVMYXN0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kYXRhKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRJdGVtQXRJbmRleCh0aGlzLl9kYXRhLmxlbmd0aCAtIDEpO1xuICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgdGhpcy5hY3RpdmF0ZShpdGVtLCBuZXcgSXRlbUFjdGl2YXRpb25PcHRpb25zKEFjdGl2YXRpb25FdmVudFNvdXJjZS5TWVNURU0sIGZhbHNlKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwcmV2aW91c1Jvd0l0ZW0oKTogVCB7XG4gICAgY29uc3Qgcm93cyA9IHRoaXMuX2RhdGE7XG4gICAgbGV0IGN1cnJlbnRJbmRleCA9IHRoaXMuZ2V0Q3VycmVudEluZGV4KCk7XG4gICAgaWYgKGN1cnJlbnRJbmRleCA+IDApIHtcbiAgICAgIC0tY3VycmVudEluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5hY3RpdmF0aW9uT3B0aW9ucy5sb29wKSB7XG4gICAgICAgIGN1cnJlbnRJbmRleCA9IHJvd3MubGVuZ3RoIC0gMTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbUF0SW5kZXgoY3VycmVudEluZGV4KTtcbiAgfVxuXG4gIHByaXZhdGUgbmV4dFJvd0l0ZW0oKTogVCB7XG4gICAgY29uc3Qgcm93cyA9IHRoaXMuX2RhdGE7XG4gICAgbGV0IGN1cnJlbnRJbmRleCA9IHRoaXMuZ2V0Q3VycmVudEluZGV4KCk7XG5cbiAgICBpZiAoY3VycmVudEluZGV4IDwgKHJvd3MubGVuZ3RoIC0gMSkpIHtcbiAgICAgICsrY3VycmVudEluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5hY3RpdmF0aW9uT3B0aW9ucy5sb29wKSB7XG4gICAgICAgIGN1cnJlbnRJbmRleCA9IDA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldEl0ZW1BdEluZGV4KGN1cnJlbnRJbmRleCk7XG4gIH1cblxuICBwcml2YXRlIGdldEN1cnJlbnRJbmRleCgpOiBudW1iZXIge1xuICAgIGNvbnN0IGFjdGl2ZUl0ZW0gPSB0aGlzLmFjdGl2ZUl0ZW07XG4gICAgaWYgKGFjdGl2ZUl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbmRJdGVtSW5kZXgoYWN0aXZlSXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEl0ZW1BdEluZGV4KGluZGV4OiBudW1iZXIpOiBUIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVtpbmRleF07XG4gIH1cblxuICBwcml2YXRlIGZpbmRJdGVtSW5kZXgoaXRlbTogVCk6IG51bWJlciB7XG4gICAgY29uc3QgbmVlZGxlSWQgPSB0aGlzLmdldElkKGl0ZW0pO1xuICAgIHJldHVybiB0aGlzLl9kYXRhLmZpbmRJbmRleChpdG0gPT4gdGhpcy5pdGVtRXF1YWxzSWQoaXRtLCBuZWVkbGVJZCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpdGVtRXF1YWxzKGE6IFQsIGI6IFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJZChhKSA9PT0gdGhpcy5nZXRJZChiKTtcbiAgfVxuXG4gIHByaXZhdGUgaXRlbUVxdWFsc0lkKGE6IFQsIG5lZWRsZUlkOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJZChhKSA9PT0gbmVlZGxlSWQ7XG4gIH1cblxuICBwcml2YXRlIGdldElkKGl0ZW06IFQpOiBhbnkge1xuICAgIGlmIChpdGVtKSB7XG4gICAgICBjb25zdCBkYyA9IHRoaXMuZWxkZXJUYWJsZS5kYXRhQ29udGV4dCQuZ2V0VmFsdWUoKTtcbiAgICAgIHJldHVybiBkYz8uZGF0YVNvdXJjZT8uZ2V0SWQoaXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input, Input } from '@angular/core';
|
|
2
2
|
import { BlobUrl } from '../blob-url';
|
|
3
3
|
import { BehaviorSubject, combineLatest, Subject } from 'rxjs';
|
|
4
4
|
import { LoggerFactory } from '@elderbyte/ts-logger';
|
|
@@ -87,7 +87,18 @@ export class ElderBlobViewerComponent {
|
|
|
87
87
|
this._url$ = new BehaviorSubject(null);
|
|
88
88
|
this._mimeType$ = new BehaviorSubject(null);
|
|
89
89
|
this.destroy$ = new Subject();
|
|
90
|
-
|
|
90
|
+
/***************************************************************************
|
|
91
|
+
* *
|
|
92
|
+
* Properties *
|
|
93
|
+
* *
|
|
94
|
+
**************************************************************************/
|
|
95
|
+
/**
|
|
96
|
+
* Attempt to display unknown blobs as text. (i.e. mime-type is octet-stream)
|
|
97
|
+
* @param unknownAsText
|
|
98
|
+
*/
|
|
99
|
+
this.displayUnknownAsText = input(false, {
|
|
100
|
+
transform: (input) => coerceBooleanProperty(input)
|
|
101
|
+
});
|
|
91
102
|
}
|
|
92
103
|
/***************************************************************************
|
|
93
104
|
* *
|
|
@@ -101,21 +112,6 @@ export class ElderBlobViewerComponent {
|
|
|
101
112
|
this.destroy$.next();
|
|
102
113
|
this.destroy$.complete();
|
|
103
114
|
}
|
|
104
|
-
/***************************************************************************
|
|
105
|
-
* *
|
|
106
|
-
* Properties *
|
|
107
|
-
* *
|
|
108
|
-
**************************************************************************/
|
|
109
|
-
/**
|
|
110
|
-
* Attempt to display unknown blobs as text. (i.e. mime-type is octet-stream)
|
|
111
|
-
* @param unknownAsText
|
|
112
|
-
*/
|
|
113
|
-
set displayUnknownAsText(unknownAsText) {
|
|
114
|
-
// TODO FIX RACE CONDITION:
|
|
115
|
-
// Since this property is not reactive, it must be set first.
|
|
116
|
-
// Otherwise, it will still be false, even if set to true!
|
|
117
|
-
this._displayUnknownAsText = coerceBooleanProperty(unknownAsText);
|
|
118
|
-
}
|
|
119
115
|
/**
|
|
120
116
|
* Set a in memory blob to display.
|
|
121
117
|
* @param blob
|
|
@@ -194,7 +190,7 @@ export class ElderBlobViewerComponent {
|
|
|
194
190
|
});
|
|
195
191
|
}
|
|
196
192
|
canDisplayAsText(mimeType) {
|
|
197
|
-
const can = mimeType.isText || (this.
|
|
193
|
+
const can = mimeType.isText || (this.displayUnknownAsText() && mimeType.isOctetStream);
|
|
198
194
|
// TODO _displayUnknownAsText might be null due race condition see todo above.
|
|
199
195
|
// this.logger.debug('canDisplayAsText(' + mimeType.value + ') --> '
|
|
200
196
|
// + can + ' ---> this._displayUnknownAsText:' + this._displayUnknownAsText, mimeType);
|
|
@@ -206,14 +202,12 @@ export class ElderBlobViewerComponent {
|
|
|
206
202
|
});
|
|
207
203
|
}
|
|
208
204
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: ElderBlobViewerComponent, deps: [{ token: i1.HttpClientPristine }, { token: i2.DomSanitizer }, { token: i3.ElderToastService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
209
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
205
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.4", type: ElderBlobViewerComponent, isStandalone: true, selector: "elder-blob-viewer", inputs: { displayUnknownAsText: { classPropertyName: "displayUnknownAsText", publicName: "displayUnknownAsText", isSignal: true, isRequired: false, transformFunction: null }, blob: { classPropertyName: "blob", publicName: "blob", isSignal: false, isRequired: false, transformFunction: null }, blobUrl: { classPropertyName: "blobUrl", publicName: "blobUrl", isSignal: false, isRequired: false, transformFunction: null }, url: { classPropertyName: "url", publicName: "url", isSignal: false, isRequired: false, transformFunction: null }, mimeType: { classPropertyName: "mimeType", publicName: "mimeType", isSignal: false, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"layout-col full place-center-center document-viewer\">\n\n <ng-container *ngIf=\"blobContext$ | async as blobContext\">\n\n <!-- Video -->\n <div class=\"layout-col place-center-center full\" *ngIf=\"blobContext.mimeType.isVideo\">\n <video class=\"video\"\n controls autoplay loop\n\n >\n <source [src]=\"blobContext.safeUrl\" [type]=\"blobContext.mimeType.value\">\n Your browser does not support HTML5 video.\n </video>\n </div>\n\n <!-- Audio -->\n <div class=\"layout-col place-center-center full\" *ngIf=\"blobContext.mimeType.isAudio\">\n <audio class=\"audio\"\n controls autoplay loop\n >\n <source [src]=\"blobContext.safeUrl\" [type]=\"blobContext.mimeType.value\">\n Your browser does not support HTML5 audio.\n </audio>\n </div>\n\n <!-- Image -->\n <div class=\"layout-col full\" *ngIf=\"blobContext.mimeType.isImage\" style=\"overflow: hidden\">\n <img class=\"cover flex\"\n [src]=\"blobContext.safeUrl\" alt=\"blob image\"/>\n </div>\n\n <!-- Embedded (PDFs etc) -->\n <div class=\"layout-col full\" *ngIf=\"blobContext.displayEmbedded\">\n <div class=\"full\">\n <embed class=\"embedded\" [src]=\"blobContext.safeUrl\" [type]=\"blobContext.mimeType.value\" width=\"100%\" height=\"100%\">\n </div>\n </div>\n\n <!-- Plain Text -->\n <div class=\"layout-col full\" *ngIf=\"blobContext.displayAsText\">\n <textarea\n class=\"document-content\"\n placeholder=\"Content\"\n [value]=\"blobContext.text\" wrap=\"off\"\n readonly\n ></textarea>\n </div>\n\n <div class=\"layout-col place-center-center full\" *ngIf=\"blobContext.cantDisplay\">\n <p>Cant display {{blobContext.mimeType.value}}!</p>\n </div>\n\n </ng-container>\n\n <ng-container *ngIf=\"!(blobContext$ | async)\">\n <div class=\"layout-col place-center-center full\">\n <p>No Document.</p>\n </div>\n </ng-container>\n\n\n</div>\n", styles: [":host{overflow:hidden}.document-viewer{background-color:#dedede;color:#1f1e1e}.video,.audio{width:100%;height:auto}.embedded{width:100%;height:100%}.cover{object-fit:scale-down;width:100%;height:auto;overflow:hidden}.document-content{font-family:Courier,monospace;font-size:14px;background-color:#575757;color:#ccc;outline:none;resize:none;width:100%;height:100%;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-webkit-border-radius:12px;border-radius:0;-webkit-box-shadow:0px 2px 14px #000;box-shadow:0 2px 14px #000;border-top:1px solid #FFF;border-bottom:1px solid #FFF}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
210
206
|
}
|
|
211
207
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: ElderBlobViewerComponent, decorators: [{
|
|
212
208
|
type: Component,
|
|
213
209
|
args: [{ selector: 'elder-blob-viewer', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgIf, AsyncPipe], template: "<div class=\"layout-col full place-center-center document-viewer\">\n\n <ng-container *ngIf=\"blobContext$ | async as blobContext\">\n\n <!-- Video -->\n <div class=\"layout-col place-center-center full\" *ngIf=\"blobContext.mimeType.isVideo\">\n <video class=\"video\"\n controls autoplay loop\n\n >\n <source [src]=\"blobContext.safeUrl\" [type]=\"blobContext.mimeType.value\">\n Your browser does not support HTML5 video.\n </video>\n </div>\n\n <!-- Audio -->\n <div class=\"layout-col place-center-center full\" *ngIf=\"blobContext.mimeType.isAudio\">\n <audio class=\"audio\"\n controls autoplay loop\n >\n <source [src]=\"blobContext.safeUrl\" [type]=\"blobContext.mimeType.value\">\n Your browser does not support HTML5 audio.\n </audio>\n </div>\n\n <!-- Image -->\n <div class=\"layout-col full\" *ngIf=\"blobContext.mimeType.isImage\" style=\"overflow: hidden\">\n <img class=\"cover flex\"\n [src]=\"blobContext.safeUrl\" alt=\"blob image\"/>\n </div>\n\n <!-- Embedded (PDFs etc) -->\n <div class=\"layout-col full\" *ngIf=\"blobContext.displayEmbedded\">\n <div class=\"full\">\n <embed class=\"embedded\" [src]=\"blobContext.safeUrl\" [type]=\"blobContext.mimeType.value\" width=\"100%\" height=\"100%\">\n </div>\n </div>\n\n <!-- Plain Text -->\n <div class=\"layout-col full\" *ngIf=\"blobContext.displayAsText\">\n <textarea\n class=\"document-content\"\n placeholder=\"Content\"\n [value]=\"blobContext.text\" wrap=\"off\"\n readonly\n ></textarea>\n </div>\n\n <div class=\"layout-col place-center-center full\" *ngIf=\"blobContext.cantDisplay\">\n <p>Cant display {{blobContext.mimeType.value}}!</p>\n </div>\n\n </ng-container>\n\n <ng-container *ngIf=\"!(blobContext$ | async)\">\n <div class=\"layout-col place-center-center full\">\n <p>No Document.</p>\n </div>\n </ng-container>\n\n\n</div>\n", styles: [":host{overflow:hidden}.document-viewer{background-color:#dedede;color:#1f1e1e}.video,.audio{width:100%;height:auto}.embedded{width:100%;height:100%}.cover{object-fit:scale-down;width:100%;height:auto;overflow:hidden}.document-content{font-family:Courier,monospace;font-size:14px;background-color:#575757;color:#ccc;outline:none;resize:none;width:100%;height:100%;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-webkit-border-radius:12px;border-radius:0;-webkit-box-shadow:0px 2px 14px #000;box-shadow:0 2px 14px #000;border-top:1px solid #FFF;border-bottom:1px solid #FFF}\n"] }]
|
|
214
|
-
}], ctorParameters: () => [{ type: i1.HttpClientPristine }, { type: i2.DomSanitizer }, { type: i3.ElderToastService }], propDecorators: {
|
|
215
|
-
type: Input
|
|
216
|
-
}], blob: [{
|
|
210
|
+
}], ctorParameters: () => [{ type: i1.HttpClientPristine }, { type: i2.DomSanitizer }, { type: i3.ElderToastService }], propDecorators: { blob: [{
|
|
217
211
|
type: Input
|
|
218
212
|
}], blobUrl: [{
|
|
219
213
|
type: Input
|
|
@@ -222,4 +216,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImpor
|
|
|
222
216
|
}], mimeType: [{
|
|
223
217
|
type: Input
|
|
224
218
|
}] } });
|
|
225
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItYmxvYi12aWV3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy9maWxlcy9ibG9iLXZpZXdlci9lbGRlci1ibG9iLXZpZXdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL2ZpbGVzL2Jsb2Itdmlld2VyL2VsZGVyLWJsb2Itdmlld2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUUzRixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFjLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN6RSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFHbkQsT0FBTyxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUFDLElBQUksRUFBRSxTQUFTLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7QUFFaEQsTUFBTSxXQUFXO0lBRVIsTUFBTSxDQUFDLFFBQVEsQ0FDcEIsSUFBWSxFQUNaLFFBQXNCO1FBRXRCLE9BQU8sSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRU0sTUFBTSxDQUFDLE9BQU8sQ0FDbkIsT0FBZ0IsRUFDaEIsUUFB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QUFFO1lBQ0osSUFBSSxDQUFDLFFBQVEsQ0FDWCxXQUFXLENBQUMsUUFBUSxDQUFDLDZCQUE2QixFQUFFLFFBQVEsQ0FBQyxDQUM5RCxDQUFDO1lBQ0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsUUFBc0I7UUFFN0MsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFdEYsOEVBQThFO1FBQzlFLG9FQUFvRTtRQUNwRSx3RkFBd0Y7UUFFeEYsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU8sY0FBYyxDQUFDLFdBQW1CO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFO1lBQ3hDLFlBQVksRUFBRSxNQUFNO1NBQ3JCLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBMU1VLHdCQUF3QjtrR0FBeEIsd0JBQXdCLDJNQ3ZHckMsNi9EQThEQSx3cEJEdUNjLElBQUksd0ZBQUUsU0FBUzs7MkZBRWhCLHdCQUF3QjtrQkFScEMsU0FBUzsrQkFDSSxtQkFBbUIsbUJBR1osdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1AsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDO2tKQWdFakIsb0JBQW9CO3NCQUQ5QixLQUFLO2dCQWVLLElBQUk7c0JBRGQsS0FBSztnQkFVSyxPQUFPO3NCQURqQixLQUFLO2dCQVdLLEdBQUc7c0JBRGIsS0FBSztnQkFVSyxRQUFRO3NCQURsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtEb21TYW5pdGl6ZXIsIFNhZmVVcmx9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHtCbG9iVXJsfSBmcm9tICcuLi9ibG9iLXVybCc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0xvZ2dlckZhY3Rvcnl9IGZyb20gJ0BlbGRlcmJ5dGUvdHMtbG9nZ2VyJztcbmltcG9ydCB7SHR0cENsaWVudFByaXN0aW5lfSBmcm9tICcuLi8uLi8uLi9jb21tb24vaHR0cC9odHRwLWNsaWVudC1wcmlzdGluZSc7XG5pbXBvcnQge0VsZGVyVG9hc3RTZXJ2aWNlfSBmcm9tICcuLi8uLi90b2FzdHMvZWxkZXItdG9hc3Quc2VydmljZSc7XG5pbXBvcnQge2ZpbHRlciwgbWFwLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Y29lcmNlQm9vbGVhblByb3BlcnR5fSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtOZ0lmLCBBc3luY1BpcGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmNsYXNzIEJsb2JDb250ZXh0IHtcblxuICBwdWJsaWMgc3RhdGljIHRleHRCbG9iKFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICBtaW1lVHlwZTogQmxvYk1pbWVUeXBlXG4gICkge1xuICAgIHJldHVybiBuZXcgQmxvYkNvbnRleHQobnVsbCwgbWltZVR5cGUsIHRleHQpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBzYWZlVXJsKFxuICAgIHNhZmVVcmw6IFNhZmVVcmwsXG4gICAgbWltZVR5cGU6IEJsb2JNaW1lVHlwZSxcbiAgKTogQmxvYkNvbnRleHQge1xuICAgIHJldHVybiBuZXcgQmxvYkNvbnRleHQoc2FmZVVybCwgbWltZVR5cGUsIG51bGwpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IHNhZmVVcmw6IFNhZmVVcmwsXG4gICAgcHVibGljIHJlYWRvbmx5IG1pbWVUeXBlOiBCbG9iTWltZVR5cGUsXG4gICAgcHVibGljIHJlYWRvbmx5IHRleHQ6IHN0cmluZyA9IG51bGxcbiAgKSB7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRpc3BsYXlBc1RleHQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy50ZXh0O1xuICB9XG5cbiAgcHVibGljIGdldCBjYW50RGlzcGxheSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuZGlzcGxheUFzVGV4dCAmJiAhdGhpcy5kaXNwbGF5RW1iZWRkZWRcbiAgICAgICYmICF0aGlzLm1pbWVUeXBlLmlzQXVkaW8gJiYgIXRoaXMubWltZVR5cGUuaXNJbWFnZSAmJiAhdGhpcy5taW1lVHlwZS5pc1ZpZGVvO1xuICB9XG5cbiAgcHVibGljIGdldCBkaXNwbGF5RW1iZWRkZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubWltZVR5cGUuaXNQZGY7XG4gIH1cblxufVxuXG5jbGFzcyBCbG9iTWltZVR5cGUge1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgT0NURVRfU1RSRUFNID0gbmV3IEJsb2JNaW1lVHlwZSgnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyk7XG5cbiAgcHVibGljIHN0YXRpYyBwYXJzZShtaW1lVHlwZTogc3RyaW5nKTogQmxvYk1pbWVUeXBlIHtcbiAgICBpZiAobWltZVR5cGUpIHtcbiAgICAgIHJldHVybiBuZXcgQmxvYk1pbWVUeXBlKG1pbWVUeXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIEJsb2JNaW1lVHlwZS5PQ1RFVF9TVFJFQU07XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmdcbiAgKSB7ICB9XG5cbiAgcHVibGljIGdldCBpc09jdGV0U3RyZWFtKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZhbHVlLnN0YXJ0c1dpdGgoJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpO1xuICB9XG5cbiAgcHVibGljIGdldCBpc1ZpZGVvKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZhbHVlLnN0YXJ0c1dpdGgoJ3ZpZGVvLycpO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0ltYWdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZhbHVlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0F1ZGlvKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZhbHVlLnN0YXJ0c1dpdGgoJ2F1ZGlvLycpO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0pzb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUuc3RhcnRzV2l0aCgnYXBwbGljYXRpb24vanNvbicpO1xuICB9XG5cbiAgcHVibGljIGdldCBpc1BkZigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZS5zdGFydHNXaXRoKCdhcHBsaWNhdGlvbi9wZGYnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNUZXh0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZhbHVlLnN0YXJ0c1dpdGgoJ3RleHQvJykgfHwgdGhpcy5pc0pzb247XG4gIH1cblxufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2VsZGVyLWJsb2Itdmlld2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZWxkZXItYmxvYi12aWV3ZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2VsZGVyLWJsb2Itdmlld2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdJZiwgQXN5bmNQaXBlXVxufSlcbmV4cG9ydCBjbGFzcyBFbGRlckJsb2JWaWV3ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpO1xuXG4gIHB1YmxpYyByZWFkb25seSBibG9iQ29udGV4dCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEJsb2JDb250ZXh0PihudWxsKTtcblxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3VybCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21pbWVUeXBlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihudWxsKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgX2Rpc3BsYXlVbmtub3duQXNUZXh0ID0gZmFsc2U7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIENvbnN0cnVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwUHJpc3RpbmU6IEh0dHBDbGllbnRQcmlzdGluZSxcbiAgICBwcml2YXRlIGRvbVNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBFbGRlclRvYXN0U2VydmljZVxuICApIHsgIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogTGlmZSBDeWNsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5fdXJsJCwgdGhpcy5fbWltZVR5cGUkXSkucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgIGZpbHRlcigoW3VybCwgbWltZVR5cGVdKSA9PiAhIXVybCksXG4gICAgICBtYXAoKFt1cmwsIG1pbWVUeXBlXSkgPT4gQmxvYlVybC5mcm9tKHVybCwgbWltZVR5cGUpKVxuICAgICkuc3Vic2NyaWJlKFxuICAgICAgYmxvYlVybCA9PiB0aGlzLmJsb2JVcmwgPSBibG9iVXJsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJvcGVydGllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogQXR0ZW1wdCB0byBkaXNwbGF5IHVua25vd24gYmxvYnMgYXMgdGV4dC4gKGkuZS4gbWltZS10eXBlIGlzIG9jdGV0LXN0cmVhbSlcbiAgICogQHBhcmFtIHVua25vd25Bc1RleHRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGlzcGxheVVua25vd25Bc1RleHQodW5rbm93bkFzVGV4dDogYm9vbGVhbikge1xuXG4gICAgLy8gVE9ETyBGSVggUkFDRSBDT05ESVRJT046XG4gICAgLy8gICAgU2luY2UgdGhpcyBwcm9wZXJ0eSBpcyBub3QgcmVhY3RpdmUsIGl0IG11c3QgYmUgc2V0IGZpcnN0LlxuICAgIC8vICAgIE90aGVyd2lzZSwgaXQgd2lsbCBzdGlsbCBiZSBmYWxzZSwgZXZlbiBpZiBzZXQgdG8gdHJ1ZSFcblxuICAgIHRoaXMuX2Rpc3BsYXlVbmtub3duQXNUZXh0ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHVua25vd25Bc1RleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhIGluIG1lbW9yeSBibG9iIHRvIGRpc3BsYXkuXG4gICAqIEBwYXJhbSBibG9iXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGJsb2IoYmxvYjogQmxvYikge1xuICAgIHRoaXMuaGFuZGxlQmxvYihibG9iKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBibG9iLXVybCB0byBkaXNwbGF5LlxuICAgKiBAcGFyYW0gYmxvYlVybFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBibG9iVXJsKGJsb2JVcmw6IEJsb2JVcmwpIHtcbiAgICB0aGlzLmhhbmRsZUJsb2JVcmwoYmxvYlVybCk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBTZXQgYSB1cmwgdG8gZGlzcGxheS4gUmVxdWlyZXMgdGhlIG1pbWVUeXBlIHRvIGJlIHNldCBhc3dlbGwuXG4gICAqIEBwYXJhbSB1cmxcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgdXJsKHVybDogc3RyaW5nKSB7XG4gICAgdGhpcy5fdXJsJC5uZXh0KHVybCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBtaW1lLXR5cGUgZm9yIHRoZSB1cmwgdG8gZGlzcGxheS4gT25seSBjb25zaWRlcmVkIGlmIHVybCBpcyBzZXQuXG4gICAqIEBwYXJhbSBtaW1lVHlwZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtaW1lVHlwZShtaW1lVHlwZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbWltZVR5cGUkLm5leHQobWltZVR5cGUpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByaXZhdGUgTWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblxuICBwcml2YXRlIGhhbmRsZUJsb2IoYmxvYjogQmxvYik6IHZvaWQge1xuXG4gICAgY29uc3Qgc2FmZVVybCA9IHRoaXMuY3JlYXRlU2FmZVVybEZyb21CbG9iKGJsb2IpO1xuICAgIGNvbnN0IG1pbWVUeXBlID0gQmxvYk1pbWVUeXBlLnBhcnNlKGJsb2IudHlwZSk7XG5cbiAgICBpZiAodGhpcy5jYW5EaXNwbGF5QXNUZXh0KG1pbWVUeXBlKSkge1xuICAgICAgdGhpcy50ZXh0Q29udGV4dChibG9iLCBtaW1lVHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubmV4dEJsb2IoXG4gICAgICAgIEJsb2JDb250ZXh0LnNhZmVVcmwoc2FmZVVybCwgbWltZVR5cGUpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdGV4dENvbnRleHQoYmxvYjogQmxvYiwgbWltZVR5cGU6IEJsb2JNaW1lVHlwZSk6IHZvaWQge1xuICAgIGJsb2IudGV4dCgpLnRoZW4oXG4gICAgICB0ZXh0ID0+IHtcbiAgICAgICAgdGhpcy5uZXh0QmxvYihcbiAgICAgICAgICBCbG9iQ29udGV4dC50ZXh0QmxvYih0ZXh0LCBtaW1lVHlwZSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVCbG9iVXJsKGJsb2JVcmw6IEJsb2JVcmwpOiB2b2lkIHtcblxuICAgIGNvbnN0IHNhZmVVcmwgPSB0aGlzLmNyZWF0ZVNhZmVVcmxGcm9tRGF0YVVybChibG9iVXJsLnVybCk7XG4gICAgY29uc3QgbWltZVR5cGUgPSBCbG9iTWltZVR5cGUucGFyc2UoYmxvYlVybC5taW1lVHlwZSk7XG5cbiAgICBpZiAodGhpcy5jYW5EaXNwbGF5QXNUZXh0KG1pbWVUeXBlKSkge1xuICAgICAgdGhpcy5sb2FkQXNUZXh0KGJsb2JVcmwudXJsLCBtaW1lVHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubmV4dEJsb2IoXG4gICAgICAgIEJsb2JDb250ZXh0LnNhZmVVcmwoc2FmZVVybCwgbWltZVR5cGUpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbmV4dEJsb2IoYmxvYkNvbnRleHQ6IEJsb2JDb250ZXh0KTogdm9pZCB7XG4gICAgdGhpcy5ibG9iQ29udGV4dCQubmV4dChibG9iQ29udGV4dCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNhZmVVcmxGcm9tQmxvYihibG9iOiBCbG9iKTogU2FmZVVybCB7XG4gICAgY29uc3QgYmxvYlVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgcmV0dXJuIHRoaXMuZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybChibG9iVXJsKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU2FmZVVybEZyb21EYXRhVXJsKHVybDogc3RyaW5nKTogU2FmZVVybCB7XG4gICAgcmV0dXJuIHRoaXMuZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh1cmwpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkQXNUZXh0KHByaXN0aW5lVXJsOiBzdHJpbmcsIG1pbWVUeXBlOiBCbG9iTWltZVR5cGUpOiB2b2lkIHtcblxuICAgIHRoaXMubmV4dEJsb2IoXG4gICAgICBCbG9iQ29udGV4dC50ZXh0QmxvYignTG9hZGluZy4uLicsIG1pbWVUeXBlKVxuICAgICk7XG5cbiAgICB0aGlzLmRvd25sb2FkQXNUZXh0KHByaXN0aW5lVXJsKS5zdWJzY3JpYmUoXG4gICAgICB0ZXh0ID0+IHtcbiAgICAgICAgdGhpcy5uZXh0QmxvYihcbiAgICAgICAgICBCbG9iQ29udGV4dC50ZXh0QmxvYih0ZXh0LCBtaW1lVHlwZSlcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBlcnIgPT4ge1xuICAgICAgICB0aGlzLm5leHRCbG9iKFxuICAgICAgICAgIEJsb2JDb250ZXh0LnRleHRCbG9iKCdGYWlsZWQgdG8gZG93bmxvYWQgY29udGVudCEnLCBtaW1lVHlwZSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uud2FybignRmFpbGVkIHRvIGRvd25sb2FkIGNvbnRlbnQhJywgZXJyKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5EaXNwbGF5QXNUZXh0KG1pbWVUeXBlOiBCbG9iTWltZVR5cGUpOiBib29sZWFuIHtcblxuICAgIGNvbnN0IGNhbiA9IG1pbWVUeXBlLmlzVGV4dCB8fCAodGhpcy5fZGlzcGxheVVua25vd25Bc1RleHQgJiYgbWltZVR5cGUuaXNPY3RldFN0cmVhbSk7XG5cbiAgICAvLyBUT0RPIF9kaXNwbGF5VW5rbm93bkFzVGV4dCBtaWdodCBiZSBudWxsIGR1ZSByYWNlIGNvbmRpdGlvbiBzZWUgdG9kbyBhYm92ZS5cbiAgICAvLyB0aGlzLmxvZ2dlci5kZWJ1ZygnY2FuRGlzcGxheUFzVGV4dCgnICsgbWltZVR5cGUudmFsdWUgKyAnKSAtLT4gJ1xuICAgIC8vICArIGNhbiArICcgLS0tPiB0aGlzLl9kaXNwbGF5VW5rbm93bkFzVGV4dDonICsgdGhpcy5fZGlzcGxheVVua25vd25Bc1RleHQsIG1pbWVUeXBlKTtcblxuICAgIHJldHVybiBjYW47XG4gIH1cblxuICBwcml2YXRlIGRvd25sb2FkQXNUZXh0KHByaXN0aW5lVXJsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBQcmlzdGluZS5nZXQocHJpc3RpbmVVcmwsIHtcbiAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnXG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJsYXlvdXQtY29sIGZ1bGwgcGxhY2UtY2VudGVyLWNlbnRlciBkb2N1bWVudC12aWV3ZXJcIj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiYmxvYkNvbnRleHQkIHwgYXN5bmMgYXMgYmxvYkNvbnRleHRcIj5cblxuICAgIDwhLS0gVmlkZW8gLS0+XG4gICAgPGRpdiBjbGFzcz1cImxheW91dC1jb2wgcGxhY2UtY2VudGVyLWNlbnRlciBmdWxsXCIgKm5nSWY9XCJibG9iQ29udGV4dC5taW1lVHlwZS5pc1ZpZGVvXCI+XG4gICAgICA8dmlkZW8gY2xhc3M9XCJ2aWRlb1wiXG4gICAgICAgICAgICAgY29udHJvbHMgYXV0b3BsYXkgbG9vcFxuXG4gICAgICA+XG4gICAgICAgIDxzb3VyY2UgW3NyY109XCJibG9iQ29udGV4dC5zYWZlVXJsXCIgW3R5cGVdPVwiYmxvYkNvbnRleHQubWltZVR5cGUudmFsdWVcIj5cbiAgICAgICAgWW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgSFRNTDUgdmlkZW8uXG4gICAgICA8L3ZpZGVvPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBBdWRpbyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LWNvbCBwbGFjZS1jZW50ZXItY2VudGVyIGZ1bGxcIiAqbmdJZj1cImJsb2JDb250ZXh0Lm1pbWVUeXBlLmlzQXVkaW9cIj5cbiAgICAgIDxhdWRpbyBjbGFzcz1cImF1ZGlvXCJcbiAgICAgICAgICAgICBjb250cm9scyBhdXRvcGxheSBsb29wXG4gICAgICA+XG4gICAgICAgIDxzb3VyY2UgW3NyY109XCJibG9iQ29udGV4dC5zYWZlVXJsXCIgW3R5cGVdPVwiYmxvYkNvbnRleHQubWltZVR5cGUudmFsdWVcIj5cbiAgICAgICAgWW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgSFRNTDUgYXVkaW8uXG4gICAgICA8L2F1ZGlvPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBJbWFnZSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LWNvbCBmdWxsXCIgKm5nSWY9XCJibG9iQ29udGV4dC5taW1lVHlwZS5pc0ltYWdlXCIgc3R5bGU9XCJvdmVyZmxvdzogaGlkZGVuXCI+XG4gICAgICA8aW1nIGNsYXNzPVwiY292ZXIgZmxleFwiXG4gICAgICAgICAgIFtzcmNdPVwiYmxvYkNvbnRleHQuc2FmZVVybFwiIGFsdD1cImJsb2IgaW1hZ2VcIi8+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEVtYmVkZGVkIChQREZzIGV0YykgLS0+XG4gICAgPGRpdiBjbGFzcz1cImxheW91dC1jb2wgZnVsbFwiICpuZ0lmPVwiYmxvYkNvbnRleHQuZGlzcGxheUVtYmVkZGVkXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZnVsbFwiPlxuICAgICAgICA8ZW1iZWQgY2xhc3M9XCJlbWJlZGRlZFwiIFtzcmNdPVwiYmxvYkNvbnRleHQuc2FmZVVybFwiIFt0eXBlXT1cImJsb2JDb250ZXh0Lm1pbWVUeXBlLnZhbHVlXCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFBsYWluIFRleHQgLS0+XG4gICAgPGRpdiBjbGFzcz1cImxheW91dC1jb2wgZnVsbFwiICpuZ0lmPVwiYmxvYkNvbnRleHQuZGlzcGxheUFzVGV4dFwiPlxuICAgICAgPHRleHRhcmVhXG4gICAgICAgIGNsYXNzPVwiZG9jdW1lbnQtY29udGVudFwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiQ29udGVudFwiXG4gICAgICAgIFt2YWx1ZV09XCJibG9iQ29udGV4dC50ZXh0XCIgd3JhcD1cIm9mZlwiXG4gICAgICAgIHJlYWRvbmx5XG4gICAgICA+PC90ZXh0YXJlYT5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJsYXlvdXQtY29sIHBsYWNlLWNlbnRlci1jZW50ZXIgZnVsbFwiICpuZ0lmPVwiYmxvYkNvbnRleHQuY2FudERpc3BsYXlcIj5cbiAgICAgIDxwPkNhbnQgZGlzcGxheSB7e2Jsb2JDb250ZXh0Lm1pbWVUeXBlLnZhbHVlfX0hPC9wPlxuICAgIDwvZGl2PlxuXG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhKGJsb2JDb250ZXh0JCB8IGFzeW5jKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJsYXlvdXQtY29sIHBsYWNlLWNlbnRlci1jZW50ZXIgZnVsbFwiPlxuICAgICAgPHA+Tm8gRG9jdW1lbnQuPC9wPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuXG48L2Rpdj5cbiJdfQ==
|
|
219
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItYmxvYi12aWV3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy9maWxlcy9ibG9iLXZpZXdlci9lbGRlci1ibG9iLXZpZXdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL2ZpbGVzL2Jsb2Itdmlld2VyL2VsZGVyLWJsb2Itdmlld2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFFbEcsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNwQyxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBYyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDekUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBR25ELE9BQU8sRUFBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFBZSxxQkFBcUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzFFLE9BQU8sRUFBQyxJQUFJLEVBQUUsU0FBUyxFQUFDLE1BQU0saUJBQWlCLENBQUM7Ozs7O0FBRWhELE1BQU0sV0FBVztJQUVSLE1BQU0sQ0FBQyxRQUFRLENBQ3BCLElBQVksRUFDWixRQUFzQjtRQUV0QixPQUFPLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVNLE1BQU0sQ0FBQyxPQUFPLENBQ25CLE9BQWdC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QVcsQ0FBQyxRQUFRLENBQUMsNkJBQTZCLEVBQUUsUUFBUSxDQUFDLENBQzlELENBQUM7WUFDRixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxRQUFzQjtRQUU3QyxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLElBQUksUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRXZGLDhFQUE4RTtRQUM5RSxvRUFBb0U7UUFDcEUsd0ZBQXdGO1FBRXhGLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVPLGNBQWMsQ0FBQyxXQUFtQjtRQUN4QyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRTtZQUN4QyxZQUFZLEVBQUUsTUFBTTtTQUNyQixDQUFDLENBQUM7SUFDTCxDQUFDOzhHQW5NVSx3QkFBd0I7a0dBQXhCLHdCQUF3Qix3dUJDdkdyQyw2L0RBOERBLHdwQkR1Q2MsSUFBSSx3RkFBRSxTQUFTOzsyRkFFaEIsd0JBQXdCO2tCQVJwQyxTQUFTOytCQUNJLG1CQUFtQixtQkFHWix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUCxDQUFDLElBQUksRUFBRSxTQUFTLENBQUM7a0pBdUVqQixJQUFJO3NCQURkLEtBQUs7Z0JBVUssT0FBTztzQkFEakIsS0FBSztnQkFXSyxHQUFHO3NCQURiLEtBQUs7Z0JBVUssUUFBUTtzQkFEbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5wdXQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RvbVNhbml0aXplciwgU2FmZVVybH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQge0Jsb2JVcmx9IGZyb20gJy4uL2Jsb2ItdXJsJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7TG9nZ2VyRmFjdG9yeX0gZnJvbSAnQGVsZGVyYnl0ZS90cy1sb2dnZXInO1xuaW1wb3J0IHtIdHRwQ2xpZW50UHJpc3RpbmV9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9odHRwL2h0dHAtY2xpZW50LXByaXN0aW5lJztcbmltcG9ydCB7RWxkZXJUb2FzdFNlcnZpY2V9IGZyb20gJy4uLy4uL3RvYXN0cy9lbGRlci10b2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7ZmlsdGVyLCBtYXAsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eX0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7TmdJZiwgQXN5bmNQaXBlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5jbGFzcyBCbG9iQ29udGV4dCB7XG5cbiAgcHVibGljIHN0YXRpYyB0ZXh0QmxvYihcbiAgICB0ZXh0OiBzdHJpbmcsXG4gICAgbWltZVR5cGU6IEJsb2JNaW1lVHlwZVxuICApIHtcbiAgICByZXR1cm4gbmV3IEJsb2JDb250ZXh0KG51bGwsIG1pbWVUeXBlLCB0ZXh0KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgc2FmZVVybChcbiAgICBzYWZlVXJsOiBTYWZlVXJsLFxuICAgIG1pbWVUeXBlOiBCbG9iTWltZVR5cGUsXG4gICk6IEJsb2JDb250ZXh0IHtcbiAgICByZXR1cm4gbmV3IEJsb2JDb250ZXh0KHNhZmVVcmwsIG1pbWVUeXBlLCBudWxsKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBzYWZlVXJsOiBTYWZlVXJsLFxuICAgIHB1YmxpYyByZWFkb25seSBtaW1lVHlwZTogQmxvYk1pbWVUeXBlLFxuICAgIHB1YmxpYyByZWFkb25seSB0ZXh0OiBzdHJpbmcgPSBudWxsXG4gICkge1xuICB9XG5cbiAgcHVibGljIGdldCBkaXNwbGF5QXNUZXh0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMudGV4dDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2FudERpc3BsYXkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmRpc3BsYXlBc1RleHQgJiYgIXRoaXMuZGlzcGxheUVtYmVkZGVkXG4gICAgICAmJiAhdGhpcy5taW1lVHlwZS5pc0F1ZGlvICYmICF0aGlzLm1pbWVUeXBlLmlzSW1hZ2UgJiYgIXRoaXMubWltZVR5cGUuaXNWaWRlbztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGlzcGxheUVtYmVkZGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1pbWVUeXBlLmlzUGRmO1xuICB9XG5cbn1cblxuY2xhc3MgQmxvYk1pbWVUeXBlIHtcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE9DVEVUX1NUUkVBTSA9IG5ldyBCbG9iTWltZVR5cGUoJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpO1xuXG4gIHB1YmxpYyBzdGF0aWMgcGFyc2UobWltZVR5cGU6IHN0cmluZyk6IEJsb2JNaW1lVHlwZSB7XG4gICAgaWYgKG1pbWVUeXBlKSB7XG4gICAgICByZXR1cm4gbmV3IEJsb2JNaW1lVHlwZShtaW1lVHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBCbG9iTWltZVR5cGUuT0NURVRfU1RSRUFNO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nXG4gICkgeyAgfVxuXG4gIHB1YmxpYyBnZXQgaXNPY3RldFN0cmVhbSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZS5zdGFydHNXaXRoKCdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNWaWRlbygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZS5zdGFydHNXaXRoKCd2aWRlby8nKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNJbWFnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZS5zdGFydHNXaXRoKCdpbWFnZS8nKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNBdWRpbygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZS5zdGFydHNXaXRoKCdhdWRpby8nKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNKc29uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZhbHVlLnN0YXJ0c1dpdGgoJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNQZGYoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUuc3RhcnRzV2l0aCgnYXBwbGljYXRpb24vcGRmJyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzVGV4dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZS5zdGFydHNXaXRoKCd0ZXh0LycpIHx8IHRoaXMuaXNKc29uO1xuICB9XG5cbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdlbGRlci1ibG9iLXZpZXdlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2VsZGVyLWJsb2Itdmlld2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9lbGRlci1ibG9iLXZpZXdlci5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nSWYsIEFzeW5jUGlwZV1cbn0pXG5leHBvcnQgY2xhc3MgRWxkZXJCbG9iVmlld2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBGaWVsZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgYmxvYkNvbnRleHQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxCbG9iQ29udGV4dD4obnVsbCk7XG5cblxuICBwcml2YXRlIHJlYWRvbmx5IF91cmwkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KG51bGwpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9taW1lVHlwZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBDb25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cFByaXN0aW5lOiBIdHRwQ2xpZW50UHJpc3RpbmUsXG4gICAgcHJpdmF0ZSBkb21TYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogRWxkZXJUb2FzdFNlcnZpY2VcbiAgKSB7ICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIExpZmUgQ3ljbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuX3VybCQsIHRoaXMuX21pbWVUeXBlJF0pLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICBmaWx0ZXIoKFt1cmwsIG1pbWVUeXBlXSkgPT4gISF1cmwpLFxuICAgICAgbWFwKChbdXJsLCBtaW1lVHlwZV0pID0+IEJsb2JVcmwuZnJvbSh1cmwsIG1pbWVUeXBlKSlcbiAgICApLnN1YnNjcmliZShcbiAgICAgIGJsb2JVcmwgPT4gdGhpcy5ibG9iVXJsID0gYmxvYlVybFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByb3BlcnRpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIEF0dGVtcHQgdG8gZGlzcGxheSB1bmtub3duIGJsb2JzIGFzIHRleHQuIChpLmUuIG1pbWUtdHlwZSBpcyBvY3RldC1zdHJlYW0pXG4gICAqIEBwYXJhbSB1bmtub3duQXNUZXh0XG4gICAqL1xuICBwdWJsaWMgZGlzcGxheVVua25vd25Bc1RleHQgPSBpbnB1dChmYWxzZSwge1xuICAgIHRyYW5zZm9ybTogKGlucHV0OiBCb29sZWFuSW5wdXQpID0+IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShpbnB1dClcbiAgfSlcblxuICAvKipcbiAgICogU2V0IGEgaW4gbWVtb3J5IGJsb2IgdG8gZGlzcGxheS5cbiAgICogQHBhcmFtIGJsb2JcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgYmxvYihibG9iOiBCbG9iKSB7XG4gICAgdGhpcy5oYW5kbGVCbG9iKGJsb2IpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhIGJsb2ItdXJsIHRvIGRpc3BsYXkuXG4gICAqIEBwYXJhbSBibG9iVXJsXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGJsb2JVcmwoYmxvYlVybDogQmxvYlVybCkge1xuICAgIHRoaXMuaGFuZGxlQmxvYlVybChibG9iVXJsKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFNldCBhIHVybCB0byBkaXNwbGF5LiBSZXF1aXJlcyB0aGUgbWltZVR5cGUgdG8gYmUgc2V0IGFzd2VsbC5cbiAgICogQHBhcmFtIHVybFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCB1cmwodXJsOiBzdHJpbmcpIHtcbiAgICB0aGlzLl91cmwkLm5leHQodXJsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIG1pbWUtdHlwZSBmb3IgdGhlIHVybCB0byBkaXNwbGF5LiBPbmx5IGNvbnNpZGVyZWQgaWYgdXJsIGlzIHNldC5cbiAgICogQHBhcmFtIG1pbWVUeXBlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1pbWVUeXBlKG1pbWVUeXBlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9taW1lVHlwZSQubmV4dChtaW1lVHlwZSk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJpdmF0ZSBNZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXG4gIHByaXZhdGUgaGFuZGxlQmxvYihibG9iOiBCbG9iKTogdm9pZCB7XG5cbiAgICBjb25zdCBzYWZlVXJsID0gdGhpcy5jcmVhdGVTYWZlVXJsRnJvbUJsb2IoYmxvYik7XG4gICAgY29uc3QgbWltZVR5cGUgPSBCbG9iTWltZVR5cGUucGFyc2UoYmxvYi50eXBlKTtcblxuICAgIGlmICh0aGlzLmNhbkRpc3BsYXlBc1RleHQobWltZVR5cGUpKSB7XG4gICAgICB0aGlzLnRleHRDb250ZXh0KGJsb2IsIG1pbWVUeXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5uZXh0QmxvYihcbiAgICAgICAgQmxvYkNvbnRleHQuc2FmZVVybChzYWZlVXJsLCBtaW1lVHlwZSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB0ZXh0Q29udGV4dChibG9iOiBCbG9iLCBtaW1lVHlwZTogQmxvYk1pbWVUeXBlKTogdm9pZCB7XG4gICAgYmxvYi50ZXh0KCkudGhlbihcbiAgICAgIHRleHQgPT4ge1xuICAgICAgICB0aGlzLm5leHRCbG9iKFxuICAgICAgICAgIEJsb2JDb250ZXh0LnRleHRCbG9iKHRleHQsIG1pbWVUeXBlKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUJsb2JVcmwoYmxvYlVybDogQmxvYlVybCk6IHZvaWQge1xuXG4gICAgY29uc3Qgc2FmZVVybCA9IHRoaXMuY3JlYXRlU2FmZVVybEZyb21EYXRhVXJsKGJsb2JVcmwudXJsKTtcbiAgICBjb25zdCBtaW1lVHlwZSA9IEJsb2JNaW1lVHlwZS5wYXJzZShibG9iVXJsLm1pbWVUeXBlKTtcblxuICAgIGlmICh0aGlzLmNhbkRpc3BsYXlBc1RleHQobWltZVR5cGUpKSB7XG4gICAgICB0aGlzLmxvYWRBc1RleHQoYmxvYlVybC51cmwsIG1pbWVUeXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5uZXh0QmxvYihcbiAgICAgICAgQmxvYkNvbnRleHQuc2FmZVVybChzYWZlVXJsLCBtaW1lVHlwZSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBuZXh0QmxvYihibG9iQ29udGV4dDogQmxvYkNvbnRleHQpOiB2b2lkIHtcbiAgICB0aGlzLmJsb2JDb250ZXh0JC5uZXh0KGJsb2JDb250ZXh0KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU2FmZVVybEZyb21CbG9iKGJsb2I6IEJsb2IpOiBTYWZlVXJsIHtcbiAgICBjb25zdCBibG9iVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICByZXR1cm4gdGhpcy5kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKGJsb2JVcmwpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTYWZlVXJsRnJvbURhdGFVcmwodXJsOiBzdHJpbmcpOiBTYWZlVXJsIHtcbiAgICByZXR1cm4gdGhpcy5kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKHVybCk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRBc1RleHQocHJpc3RpbmVVcmw6IHN0cmluZywgbWltZVR5cGU6IEJsb2JNaW1lVHlwZSk6IHZvaWQge1xuXG4gICAgdGhpcy5uZXh0QmxvYihcbiAgICAgIEJsb2JDb250ZXh0LnRleHRCbG9iKCdMb2FkaW5nLi4uJywgbWltZVR5cGUpXG4gICAgKTtcblxuICAgIHRoaXMuZG93bmxvYWRBc1RleHQocHJpc3RpbmVVcmwpLnN1YnNjcmliZShcbiAgICAgIHRleHQgPT4ge1xuICAgICAgICB0aGlzLm5leHRCbG9iKFxuICAgICAgICAgIEJsb2JDb250ZXh0LnRleHRCbG9iKHRleHQsIG1pbWVUeXBlKVxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIGVyciA9PiB7XG4gICAgICAgIHRoaXMubmV4dEJsb2IoXG4gICAgICAgICAgQmxvYkNvbnRleHQudGV4dEJsb2IoJ0ZhaWxlZCB0byBkb3dubG9hZCBjb250ZW50IScsIG1pbWVUeXBlKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnRvYXN0U2VydmljZS53YXJuKCdGYWlsZWQgdG8gZG93bmxvYWQgY29udGVudCEnLCBlcnIpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNhbkRpc3BsYXlBc1RleHQobWltZVR5cGU6IEJsb2JNaW1lVHlwZSk6IGJvb2xlYW4ge1xuXG4gICAgY29uc3QgY2FuID0gbWltZVR5cGUuaXNUZXh0IHx8ICh0aGlzLmRpc3BsYXlVbmtub3duQXNUZXh0KCkgJiYgbWltZVR5cGUuaXNPY3RldFN0cmVhbSk7XG5cbiAgICAvLyBUT0RPIF9kaXNwbGF5VW5rbm93bkFzVGV4dCBtaWdodCBiZSBudWxsIGR1ZSByYWNlIGNvbmRpdGlvbiBzZWUgdG9kbyBhYm92ZS5cbiAgICAvLyB0aGlzLmxvZ2dlci5kZWJ1ZygnY2FuRGlzcGxheUFzVGV4dCgnICsgbWltZVR5cGUudmFsdWUgKyAnKSAtLT4gJ1xuICAgIC8vICArIGNhbiArICcgLS0tPiB0aGlzLl9kaXNwbGF5VW5rbm93bkFzVGV4dDonICsgdGhpcy5fZGlzcGxheVVua25vd25Bc1RleHQsIG1pbWVUeXBlKTtcblxuICAgIHJldHVybiBjYW47XG4gIH1cblxuICBwcml2YXRlIGRvd25sb2FkQXNUZXh0KHByaXN0aW5lVXJsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBQcmlzdGluZS5nZXQocHJpc3RpbmVVcmwsIHtcbiAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnXG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJsYXlvdXQtY29sIGZ1bGwgcGxhY2UtY2VudGVyLWNlbnRlciBkb2N1bWVudC12aWV3ZXJcIj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiYmxvYkNvbnRleHQkIHwgYXN5bmMgYXMgYmxvYkNvbnRleHRcIj5cblxuICAgIDwhLS0gVmlkZW8gLS0+XG4gICAgPGRpdiBjbGFzcz1cImxheW91dC1jb2wgcGxhY2UtY2VudGVyLWNlbnRlciBmdWxsXCIgKm5nSWY9XCJibG9iQ29udGV4dC5taW1lVHlwZS5pc1ZpZGVvXCI+XG4gICAgICA8dmlkZW8gY2xhc3M9XCJ2aWRlb1wiXG4gICAgICAgICAgICAgY29udHJvbHMgYXV0b3BsYXkgbG9vcFxuXG4gICAgICA+XG4gICAgICAgIDxzb3VyY2UgW3NyY109XCJibG9iQ29udGV4dC5zYWZlVXJsXCIgW3R5cGVdPVwiYmxvYkNvbnRleHQubWltZVR5cGUudmFsdWVcIj5cbiAgICAgICAgWW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgSFRNTDUgdmlkZW8uXG4gICAgICA8L3ZpZGVvPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBBdWRpbyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LWNvbCBwbGFjZS1jZW50ZXItY2VudGVyIGZ1bGxcIiAqbmdJZj1cImJsb2JDb250ZXh0Lm1pbWVUeXBlLmlzQXVkaW9cIj5cbiAgICAgIDxhdWRpbyBjbGFzcz1cImF1ZGlvXCJcbiAgICAgICAgICAgICBjb250cm9scyBhdXRvcGxheSBsb29wXG4gICAgICA+XG4gICAgICAgIDxzb3VyY2UgW3NyY109XCJibG9iQ29udGV4dC5zYWZlVXJsXCIgW3R5cGVdPVwiYmxvYkNvbnRleHQubWltZVR5cGUudmFsdWVcIj5cbiAgICAgICAgWW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgSFRNTDUgYXVkaW8uXG4gICAgICA8L2F1ZGlvPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBJbWFnZSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LWNvbCBmdWxsXCIgKm5nSWY9XCJibG9iQ29udGV4dC5taW1lVHlwZS5pc0ltYWdlXCIgc3R5bGU9XCJvdmVyZmxvdzogaGlkZGVuXCI+XG4gICAgICA8aW1nIGNsYXNzPVwiY292ZXIgZmxleFwiXG4gICAgICAgICAgIFtzcmNdPVwiYmxvYkNvbnRleHQuc2FmZVVybFwiIGFsdD1cImJsb2IgaW1hZ2VcIi8+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEVtYmVkZGVkIChQREZzIGV0YykgLS0+XG4gICAgPGRpdiBjbGFzcz1cImxheW91dC1jb2wgZnVsbFwiICpuZ0lmPVwiYmxvYkNvbnRleHQuZGlzcGxheUVtYmVkZGVkXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZnVsbFwiPlxuICAgICAgICA8ZW1iZWQgY2xhc3M9XCJlbWJlZGRlZFwiIFtzcmNdPVwiYmxvYkNvbnRleHQuc2FmZVVybFwiIFt0eXBlXT1cImJsb2JDb250ZXh0Lm1pbWVUeXBlLnZhbHVlXCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFBsYWluIFRleHQgLS0+XG4gICAgPGRpdiBjbGFzcz1cImxheW91dC1jb2wgZnVsbFwiICpuZ0lmPVwiYmxvYkNvbnRleHQuZGlzcGxheUFzVGV4dFwiPlxuICAgICAgPHRleHRhcmVhXG4gICAgICAgIGNsYXNzPVwiZG9jdW1lbnQtY29udGVudFwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiQ29udGVudFwiXG4gICAgICAgIFt2YWx1ZV09XCJibG9iQ29udGV4dC50ZXh0XCIgd3JhcD1cIm9mZlwiXG4gICAgICAgIHJlYWRvbmx5XG4gICAgICA+PC90ZXh0YXJlYT5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJsYXlvdXQtY29sIHBsYWNlLWNlbnRlci1jZW50ZXIgZnVsbFwiICpuZ0lmPVwiYmxvYkNvbnRleHQuY2FudERpc3BsYXlcIj5cbiAgICAgIDxwPkNhbnQgZGlzcGxheSB7e2Jsb2JDb250ZXh0Lm1pbWVUeXBlLnZhbHVlfX0hPC9wPlxuICAgIDwvZGl2PlxuXG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhKGJsb2JDb250ZXh0JCB8IGFzeW5jKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJsYXlvdXQtY29sIHBsYWNlLWNlbnRlci1jZW50ZXIgZnVsbFwiPlxuICAgICAgPHA+Tm8gRG9jdW1lbnQuPC9wPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuXG48L2Rpdj5cbiJdfQ==
|