@c8y/ngx-components 1021.31.3 → 1021.34.1
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/alarms/alarms-date-filter.component.d.ts +1 -0
- package/alarms/alarms-date-filter.component.d.ts.map +1 -1
- package/core/common/ui-state.service.d.ts +0 -1
- package/core/common/ui-state.service.d.ts.map +1 -1
- package/core/dynamic-component/dynamic-component.component.d.ts +5 -0
- package/core/dynamic-component/dynamic-component.component.d.ts.map +1 -1
- package/core/plugins/plugins.service.d.ts +3 -0
- package/core/plugins/plugins.service.d.ts.map +1 -1
- package/core/router/router-tabs.resolver.d.ts +2 -2
- package/core/router/router-tabs.resolver.d.ts.map +1 -1
- package/esm2022/alarms/alarms-date-filter.component.mjs +5 -3
- package/esm2022/alarms/alarms-type-filter.component.mjs +3 -3
- package/esm2022/core/common/ui-state.service.mjs +1 -19
- package/esm2022/core/dynamic-component/dynamic-component.component.mjs +23 -3
- package/esm2022/core/plugins/plugins.service.mjs +7 -1
- package/esm2022/core/router/router-tabs.resolver.mjs +22 -8
- package/esm2022/ecosystem/application-plugins/application-plugins.component.mjs +2 -2
- package/esm2022/protocol-lwm2m/ng1/plugin-checker.service.mjs +5 -1
- package/esm2022/services/services-device-tab/service-command.service.mjs +113 -0
- package/esm2022/services/services-device-tab/service-device-tab.model.mjs +1 -1
- package/esm2022/services/services-device-tab/services-device-tab.component.mjs +13 -7
- package/esm2022/widgets/definitions/asset-notes/c8y-ngx-components-widgets-definitions-asset-notes.mjs +5 -0
- package/esm2022/widgets/definitions/asset-notes/index.mjs +29 -0
- package/esm2022/widgets/definitions/index.mjs +2 -1
- package/esm2022/widgets/implementations/asset-notes/asset-notes-widget.component.mjs +67 -0
- package/esm2022/widgets/implementations/asset-notes/c8y-ngx-components-widgets-implementations-asset-notes.mjs +5 -0
- package/esm2022/widgets/implementations/asset-notes/index.mjs +2 -0
- package/fesm2022/c8y-ngx-components-alarms.mjs +5 -4
- package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-protocol-lwm2m.mjs +4 -0
- package/fesm2022/c8y-ngx-components-protocol-lwm2m.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-services.mjs +116 -5
- package/fesm2022/c8y-ngx-components-services.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-asset-notes.mjs +36 -0
- package/fesm2022/c8y-ngx-components-widgets-definitions-asset-notes.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-widgets-definitions.mjs +1 -0
- package/fesm2022/c8y-ngx-components-widgets-definitions.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-asset-notes.mjs +74 -0
- package/fesm2022/c8y-ngx-components-widgets-implementations-asset-notes.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components.mjs +49 -26
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +20 -11
- package/locales/es.po +18 -9
- package/locales/fr.po +18 -9
- package/locales/ja_JP.po +18 -9
- package/locales/ko.po +18 -9
- package/locales/locales.pot +19 -7
- package/locales/nl.po +18 -9
- package/locales/pl.po +21 -12
- package/locales/pt_BR.po +18 -9
- package/locales/zh_CN.po +18 -9
- package/locales/zh_TW.po +18 -9
- package/package.json +1 -1
- package/protocol-lwm2m/ng1/plugin-checker.service.d.ts +4 -0
- package/protocol-lwm2m/ng1/plugin-checker.service.d.ts.map +1 -1
- package/services/services-device-tab/service-command.service.d.ts +59 -0
- package/services/services-device-tab/service-command.service.d.ts.map +1 -0
- package/services/services-device-tab/service-device-tab.model.d.ts +9 -0
- package/services/services-device-tab/service-device-tab.model.d.ts.map +1 -1
- package/services/services-device-tab/services-device-tab.component.d.ts +5 -2
- package/services/services-device-tab/services-device-tab.component.d.ts.map +1 -1
- package/widgets/definitions/asset-notes/c8y-ngx-components-widgets-definitions-asset-notes.d.ts.map +1 -0
- package/widgets/definitions/asset-notes/index.d.ts +16 -0
- package/widgets/definitions/asset-notes/index.d.ts.map +1 -0
- package/widgets/definitions/index.d.ts +1 -0
- package/widgets/definitions/index.d.ts.map +1 -1
- package/widgets/implementations/asset-notes/asset-notes-widget.component.d.ts +33 -0
- package/widgets/implementations/asset-notes/asset-notes-widget.component.d.ts.map +1 -0
- package/widgets/implementations/asset-notes/c8y-ngx-components-widgets-implementations-asset-notes.d.ts.map +1 -0
- package/widgets/implementations/asset-notes/index.d.ts +2 -0
- package/widgets/implementations/asset-notes/index.d.ts.map +1 -0
|
@@ -8,7 +8,6 @@ import { OptionsService } from './options.service';
|
|
|
8
8
|
import { StateService } from './state-service.abstract';
|
|
9
9
|
import { ApiService } from '@c8y/ngx-components/api';
|
|
10
10
|
import { throttle } from './throttle.decorator';
|
|
11
|
-
import { satisfies } from 'semver';
|
|
12
11
|
import * as i0 from "@angular/core";
|
|
13
12
|
import * as i1 from "@c8y/client";
|
|
14
13
|
import * as i2 from "@c8y/ngx-components/api";
|
|
@@ -198,25 +197,8 @@ export class AppStateService extends StateService {
|
|
|
198
197
|
this.state.supportUrl = await this.options.getSupportUrl();
|
|
199
198
|
this.state.activateSupportUserAvailable = await this.options.getActivateSupportUser();
|
|
200
199
|
this.state.versions.backend = await this.options.getSystemOption('system', 'version');
|
|
201
|
-
try {
|
|
202
|
-
this.showIncompatibleVersionsError();
|
|
203
|
-
}
|
|
204
|
-
catch (ex) {
|
|
205
|
-
// ignore this
|
|
206
|
-
}
|
|
207
200
|
this.emitNewState();
|
|
208
201
|
}
|
|
209
|
-
showIncompatibleVersionsError() {
|
|
210
|
-
if (this.options.noVersionWarning) {
|
|
211
|
-
return;
|
|
212
|
-
}
|
|
213
|
-
const uiVersion = this.state.versions.ui.ngx;
|
|
214
|
-
const backendVersion = this.state.versions.backend;
|
|
215
|
-
if (!satisfies(uiVersion, `<=${backendVersion} || ~${backendVersion}`)) {
|
|
216
|
-
const errorContent = `You are running version ${uiVersion} of the UI and version ${backendVersion} of backend!`;
|
|
217
|
-
console.log('%c ' + errorContent, 'font-weight: bold; font-size: 30px; color: red;');
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
202
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppStateService, deps: [{ token: i1.ApplicationService }, { token: i2.ApiService }, { token: i3.OptionsService }, { token: i1.FetchClient }, { token: i1.TenantLoginOptionsService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
221
203
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppStateService, providedIn: 'root' }); }
|
|
222
204
|
}
|
|
@@ -230,4 +212,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
230
212
|
type: Injectable,
|
|
231
213
|
args: [{ providedIn: 'root' }]
|
|
232
214
|
}], ctorParameters: () => [{ type: i1.ApplicationService }, { type: i2.ApiService }, { type: i3.OptionsService }, { type: i1.FetchClient }, { type: i1.TenantLoginOptionsService }], propDecorators: { refreshLoginOptions: [] } });
|
|
233
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktc3RhdGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvY29tbW9uL3VpLXN0YXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFDTCxXQUFXLEVBRVgseUJBQXlCLEVBQ3pCLGtCQUFrQixFQUduQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEUsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sR0FBRyxFQUNILElBQUksRUFDSixTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osSUFBSSxFQUNMLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFckQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxRQUFRLENBQUM7Ozs7O0FBR25DLE1BQU0sT0FBTyxlQUFnQixTQUFRLFlBQVk7SUEwQy9DLFlBQ1Usa0JBQXNDLEVBQ3ZDLFVBQXNCLEVBQ3JCLE9BQXVCLEVBQ3ZCLFdBQXdCLEVBQ3hCLHlCQUFvRDtRQUU1RCxLQUFLLEVBQUUsQ0FBQztRQU5BLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdkMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUNyQixZQUFP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dCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEZldGNoQ2xpZW50LFxuICBJQXBwbGljYXRpb24sXG4gIFRlbmFudExvZ2luT3B0aW9uc1NlcnZpY2UsXG4gIEFwcGxpY2F0aW9uU2VydmljZSxcbiAgSUN1cnJlbnRUZW5hbnQsXG4gIElVc2VyXG59IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IGtleXMsIGdldCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgZmlsdGVyLFxuICBtYXAsXG4gIHNjYW4sXG4gIHN3aXRjaE1hcCxcbiAgc2hhcmVSZXBsYXksXG4gIHN0YXJ0V2l0aCxcbiAgZGVib3VuY2VUaW1lLFxuICB0YWtlXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE9wdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi9vcHRpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi9zdGF0ZS1zZXJ2aWNlLmFic3RyYWN0JztcbmltcG9ydCB7IEFwaVNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2FwaSc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbk9wdGlvbnMgfSBmcm9tICcuL0FwcGxpY2F0aW9uT3B0aW9ucyc7XG5pbXBvcnQgeyB0aHJvdHRsZSB9IGZyb20gJy4vdGhyb3R0bGUuZGVjb3JhdG9yJztcbmltcG9ydCB7IHNhdGlzZmllcyB9IGZyb20gJ3NlbXZlcic7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQXBwU3RhdGVTZXJ2aWNlIGV4dGVuZHMgU3RhdGVTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIFNhdmVzIHRoZSBzdGF0ZS4gU2hvdWxkIG5vdCBiZSBhY2Nlc3NpYmxlIGRpcmVjdGx5LiBVc2UgbWFwIG9yIHRoZSBnZXR0ZXIgdG8gYWNjZXNzXG4gICAqIHRoZSBzdGF0ZS4gVXNlIGZ1bmN0aW9ucyBpbiB0aGUgaW1wbGVtZW50YXRpb24gdG8gY2hhbmdlIHRoZSBzdGF0ZS5cbiAgICovXG4gIHN0YXRlJDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oe1xuICAgIGFwcDoge1xuICAgICAgbmFtZTogdGhpcy5vcHRpb25zLm5hbWUsXG4gICAgICBjb250ZXh0UGF0aDogdGhpcy5nZXRDdXJyZW50Q29udGV4dFBhdGgoKSB8fCB0aGlzLm9wdGlvbnMuY29udGV4dFBhdGgsXG4gICAgICBpY29uOiB0aGlzLm9wdGlvbnMuaWNvblxuICAgIH0sXG4gICAgc3VwcG9ydFVybDogdGhpcy5vcHRpb25zLnN1cHBvcnRVcmwsXG4gICAgbGFuZzogdGhpcy5vcHRpb25zLmdldCgnZGVmYXVsdExhbmd1YWdlJywgJ2VuJyksXG4gICAgbGFuZ3M6IHRoaXMuZ2V0TGFuZ3MoKSxcbiAgICBsYW5nc0RldGFpbDogdGhpcy5vcHRpb25zLmxhbmd1YWdlcyxcbiAgICBsb2dpbk9wdGlvbnM6IHRoaXMub3B0aW9ucy5sb2dpbk9wdGlvbnMsXG4gICAgYWN0aXZhdGVTdXBwb3J0VXNlckF2YWlsYWJsZTogdW5kZWZpbmVkLFxuICAgIHZlcnNpb25zOiB7XG4gICAgICBiYWNrZW5kOiB1bmRlZmluZWQsXG4gICAgICB1aTogdGhpcy5vcHRpb25zLnZlcnNpb25zIHx8IHsgbmd4OiB1bmRlZmluZWQgfVxuICAgIH0sXG4gICAgaGlkZVBvd2VyZWQ6IHRoaXMub3B0aW9ucy5oaWRlUG93ZXJlZCxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHNob3dSaWdodERyYXdlcjogdGhpcy5vcHRpb25zLnJpZ2h0RHJhd2VyLFxuICAgIGxvZ2luRXh0cmFMaW5rOiB0aGlzLm9wdGlvbnMuZ2V0KCdsb2dpbl9leHRyYV9saW5rJyksXG4gICAgbmV3c2xldHRlcjogdGhpcy5vcHRpb25zLm5ld3NsZXR0ZXJcbiAgfSk7XG4gIGN1cnJlbnRTdXBwb3J0VXNlck5hbWU6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBudWxsPiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XG4gIGN1cnJlbnRVc2VyOiBCZWhhdmlvclN1YmplY3Q8SVVzZXIgfCBudWxsPiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XG4gIGN1cnJlbnRUZW5hbnQ6IEJlaGF2aW9yU3ViamVjdDxJQ3VycmVudFRlbmFudCB8IG51bGw+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcbiAgY3VycmVudEFwcGxpY2F0aW9uOiBCZWhhdmlvclN1YmplY3Q8SUFwcGxpY2F0aW9uIHwgbnVsbD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuICBjdXJyZW50QXBwbGljYXRpb25Db25maWc6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuY3VycmVudEFwcGxpY2F0aW9uLnBpcGUoXG4gICAgZmlsdGVyKGFwcCA9PiAhIWFwcCksXG4gICAgbWFwKGFwcCA9PiBhcHA/LmNvbmZpZyB8fCBudWxsKVxuICApO1xuICAvKipcbiAgICogQW4gT2JzZXJ2YWJsZSBvZiB0aGUgYXBwbGljYXRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIGN1cnJlbnQgdXNlci5cbiAgICogVGhlIE9ic2VydmFibGUgZW1pdHMgYSBuZXcgYXJyYXkgb24gdXNlciBjaGFuZ2VzIG9yIGlmIHRoZSBhcHBsaWNhdGlvblxuICAgKiBwZXJmb3JtcyBQT1NULCBQVVQgb3IgREVMRVRFIHJlcXVlc3RzIHRvIHRoZSBhcHBsaWNhdGlvbiBBUEkuXG4gICAqL1xuICBjdXJyZW50QXBwc09mVXNlcjogT2JzZXJ2YWJsZTxJQXBwbGljYXRpb25bXT47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcHBsaWNhdGlvblNlcnZpY2U6IEFwcGxpY2F0aW9uU2VydmljZSxcbiAgICBwdWJsaWMgYXBpU2VydmljZTogQXBpU2VydmljZSxcbiAgICBwcml2YXRlIG9wdGlvbnM6IE9wdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmV0Y2hDbGllbnQ6IEZldGNoQ2xpZW50LFxuICAgIHByaXZhdGUgdGVuYW50TG9naW5PcHRpb25zU2VydmljZTogVGVuYW50TG9naW5PcHRpb25zU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIC8vIGluIGNhc2Ugb2Ygbm9Mb2dpbiBiZWluZyB0cnV0aHkgYGxvYWRNYW5pZmVzdGAgaXMgbmV2ZXIgY2FsbGVkLlxuICAgIGlmICh0aGlzLm9wdGlvbnMubm9Mb2dpbikge1xuICAgICAgdGhpcy5jdXJyZW50QXBwbGljYXRpb24ubmV4dCh0aGlzLnN0YXRlLmFwcCk7XG4gICAgfVxuICAgIHRoaXMuYXBpU2VydmljZS5pc0xvYWRpbmckLnN1YnNjcmliZShpc0xvYWRpbmcgPT4ge1xuICAgICAgdGhpcy5zdGF0ZS5pc0xvYWRpbmcgPSBpc0xvYWRpbmc7XG4gICAgfSk7XG5cbiAgICB0aGlzLmFzc2lnbkFwcGxpY2F0aW9uS2V5VG9EZWZhdWx0SGVhZGVycygpO1xuICAgIHRoaXMuY3VycmVudEFwcHNPZlVzZXIgPSB0aGlzLmN1cnJlbnRBcHBzT2ZVc2VyJCgpO1xuICB9XG5cbiAgYXNzaWduQXBwbGljYXRpb25LZXlUb0RlZmF1bHRIZWFkZXJzKCkge1xuICAgIGlmICghaXNEZXZNb2RlKCkpIHtcbiAgICAgIHRoaXMuZmV0Y2hDbGllbnQuZGVmYXVsdEhlYWRlcnMgPSB7XG4gICAgICAgIC4uLih0aGlzLmZldGNoQ2xpZW50LmRlZmF1bHRIZWFkZXJzIHx8IHt9KSxcbiAgICAgICAgJ1gtQ3VtdWxvY2l0eS1BcHBsaWNhdGlvbi1LZXknOiB0aGlzLm9wdGlvbnMua2V5XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXRlLlxuICAgKi9cbiAgZ2V0IHN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlJC52YWx1ZTtcbiAgfVxuXG4gIGdldExhbmdzKCkge1xuICAgIGNvbnN0IHsgbGFuZ3VhZ2VzIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgcmV0dXJuIGxhbmd1YWdlcyA/IGtleXMobGFuZ3VhZ2VzKS5maWx0ZXIoayA9PiBsYW5ndWFnZXNba10pIDogW107XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY29ycmVjdCBVSSB2ZXJzaW9uLiBJbiBoeWJyaWQgbW9kZSBmb3IgYW5ndWxhciBhbmQgbmd4LlxuICAgKi9cbiAgZ2V0IHVpVmVyc2lvbigpIHtcbiAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5zdGF0ZS52ZXJzaW9ucy51aTtcbiAgICByZXR1cm4gdmVyc2lvbi5uZ3ggfHwgdmVyc2lvbi5uZzE7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIGFwcCBtYW5pZmVzdC4gSWYgbm8gYWNjZXNzIC0+IHRocm93IGFuIGVycm9yIHRvIHZlcmlmeSBhcHAgYWNjZXNzLlxuICAgKi9cbiAgYXN5bmMgbG9hZE1hbmlmZXN0KCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkQ29udGV4dFBhdGggPSB0aGlzLnN0YXRlLmFwcC5jb250ZXh0UGF0aD8uc3BsaXQoJ0AnKVswXTtcbiAgICAgIGNvbnN0IHsgZGF0YTogYXBwbGljYXRpb24gfSA9XG4gICAgICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmdldE1hbmlmZXN0T2ZDb250ZXh0UGF0aChub3JtYWxpemVkQ29udGV4dFBhdGgpO1xuICAgICAgdGhpcy5zdGF0ZS5hcHAubWFuaWZlc3QgPSBhcHBsaWNhdGlvbjtcbiAgICAgIHRoaXMuc3RhdGUuYXBwLmlkID0gYXBwbGljYXRpb24uaWQ7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmRldGFpbChhcHBsaWNhdGlvbi5pZCk7XG4gICAgICB0aGlzLmN1cnJlbnRBcHBsaWNhdGlvbi5uZXh0KGRhdGEpO1xuICAgICAgYXdhaXQgdGhpcy5sb2FkRGVmYXVsdE9wdGlvbnMoKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhpcy5jdXJyZW50QXBwbGljYXRpb24ubmV4dCh0aGlzLnN0YXRlLmFwcCk7XG4gICAgICB0aHJvdyBleDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRHluYW1pYyBvcHRpb25zIGFyZSBzdG9yZWQgb24gdGhlIEFQSSBpbiBhIHNwZWNpZmljIGNvbmZpZzoge30gb2JqZWN0LiBUaGV5IGNhblxuICAgKiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgYXBwIGR5bmFtaWNhbGx5LlxuICAgKlxuICAgKiBOb3RlOiBUbyBhdm9pZHMgY29uZmxpY3RzIHdpdGggdGhlIGRlZmF1bHQgQ29uZmlnLCBpdCBpcyByZWNvbW1lbmRlZFxuICAgKiB0byB1c2UgYSBjZXJ0YWluIG5hbWVzcGFjZS5cbiAgICovXG4gIGFzeW5jIHVwZGF0ZUN1cnJlbnRBcHBsaWNhdGlvbkNvbmZpZzxUID0gQXBwbGljYXRpb25PcHRpb25zPihjb25maWc6IFQpOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCBhcHBXaXRoVXBkYXRlZENvbmZpZyA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLnVwZGF0ZUFwcGxpY2F0aW9uQ29uZmlnKFxuICAgICAgdGhpcy5zdGF0ZS5hcHAuaWQsXG4gICAgICBjb25maWdcbiAgICApO1xuICAgIHRoaXMuY3VycmVudEFwcGxpY2F0aW9uLm5leHQoYXBwV2l0aFVwZGF0ZWRDb25maWcpO1xuICAgIHJldHVybiBhcHBXaXRoVXBkYXRlZENvbmZpZy5jb25maWc7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiB0aGlzIGZ1bmN0aW9uIGNhbGxlZCwgaXQgcmVmcmVzaGVzIHRoZSB2YWx1ZXMgb2YgbG9naW5PcHRpb25zIHN0b3JlZCB3aXRoaW4gdWkgc3RhdGUgb2JqZWN0LlxuICAgKiBGdW5jdGlvbiBpcyB0aHJvdHRsZWQgdG8gZXhlY3V0ZSB0aGUgcmVmcmVzaCBvbmNlIGluIGEgdGltZSBzcGVjaWZpZWQgYnkgcGFyYW1zIG9mIEB0aHJvdHRsZWQgZGVjb3JhdG9yLFxuICAgKiBpdCBzaG91bGQgYmUgY2FsbGVkIG9uIGxlYWRpbmcgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAgICovXG4gIEB0aHJvdHRsZSg2MDAsIHsgdHJhaWxpbmc6IGZhbHNlIH0pXG4gIGFzeW5jIHJlZnJlc2hMb2dpbk9wdGlvbnMoKSB7XG4gICAgY29uc3QgbG9naW5PcHRpb25zID0gKGF3YWl0IHRoaXMudGVuYW50TG9naW5PcHRpb25zU2VydmljZS5saXN0Rm9yQ3VycmVudFRlbmFudCgpKS5kYXRhO1xuICAgIHRoaXMuc3RhdGUkLm5leHQoeyAuLi50aGlzLnN0YXRlLCBsb2dpbk9wdGlvbnMgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGN1cnJlbnQgdXNlcnMgYXBwbGljYXRpb24gbGlzdCBhbmQgbWF0Y2hlcyBpdCBhZ2FpbnN0IGdpdmVuIGFwcGxpY2F0aW9uIG5hbWUuXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBhcHBsaWNhdGlvbiBpcyBpbiB0aGUgbGlzdC5cbiAgICogQHBhcmFtIG5hbWUgYXBwbGljYXRpb24gbmFtZVxuICAgKi9cbiAgYXN5bmMgaXNBcHBsaWNhdGlvbkF2YWlsYWJsZShuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhcHBzID0gYXdhaXQgdGhpcy5jdXJyZW50QXBwc09mVXNlci5waXBlKHRha2UoMSkpLnRvUHJvbWlzZSgpO1xuICAgIHJldHVybiBhcHBzLnNvbWUoYXBwID0+IGFwcC5uYW1lID09PSBuYW1lIHx8IGFwcC5jb250ZXh0UGF0aCA9PT0gbmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBjdXJyZW50IHVzZXIgKGluY2x1ZGluZyBzdXBwb3J0IHVzZXIpLlxuICAgKiBAcGFyYW0gdXNlckluZm8gSW5mbyBhYm91dCBjdXJyZW50IHVzZXIgYW5kIHN1cHBvcnQgdXNlciB0byBiZSBzZXQuXG4gICAqL1xuICBzZXRVc2VyKHVzZXJJbmZvOiB7IHVzZXI6IElVc2VyOyBzdXBwb3J0VXNlck5hbWU6IHN0cmluZyB9KSB7XG4gICAgdGhpcy5jdXJyZW50U3VwcG9ydFVzZXJOYW1lLm5leHQodXNlckluZm8uc3VwcG9ydFVzZXJOYW1lIHx8IG51bGwpO1xuICAgIHRoaXMuY3VycmVudFVzZXIubmV4dCh1c2VySW5mby51c2VyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyBpZiB0aGUgY3VycmVudCBhcHBsaWNhdGlvbiBpcyBvd25lZCBieSB0aGUgY3VycmVudCB0ZW5hbnQuXG4gICAqIEBwYXJhbSBhcHAgVGhlIGFwcGxpY2F0aW9uIHRvIHZlcmlmeS5cbiAgICogQHJldHVybnMgdHJ1ZSBpZiBpdCBiZWxvbmdzIHRvIHRoZSBjdXJyZW50IHRlbmFudC5cbiAgICovXG4gIGlzT3duZXJPZkFwcGxpY2F0aW9uKGFwcD86IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIGlmICghYXBwKSB7XG4gICAgICBhcHAgPSB0aGlzLmN1cnJlbnRBcHBsaWNhdGlvbi52YWx1ZTtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudFRlbmFudDogSUN1cnJlbnRUZW5hbnQgPSB0aGlzLmN1cnJlbnRUZW5hbnQudmFsdWU7XG4gICAgY29uc3QgYXBwT3duZXIgPSBnZXQoYXBwLCAnb3duZXIudGVuYW50LmlkJyk7XG4gICAgcmV0dXJuIGN1cnJlbnRUZW5hbnQ/Lm5hbWUgPT09IGFwcE93bmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIGlmIHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uIGlzIG93bmVkIGJ5IHRoZSBjdXJyZW50IHRlbmFudC5cbiAgICogQHBhcmFtIGFwcCBUaGUgYXBwbGljYXRpb24gdG8gdmVyaWZ5LlxuICAgKiBAcmV0dXJucyB0cnVlIGlmIGl0IGJlbG9uZ3MgdG8gdGhlIGN1cnJlbnQgdGVuYW50LlxuICAgKi9cbiAgaXNPd25lck9mQXBwbGljYXRpb24kKGFwcD86IElBcHBsaWNhdGlvbik6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGFwcCQgPSBhcHAgPyBvZihhcHApIDogdGhpcy5jdXJyZW50QXBwbGljYXRpb247XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW2FwcCQsIHRoaXMuY3VycmVudFRlbmFudF0pLnBpcGUoXG4gICAgICBtYXAoKFthcHAsIHRlbmFudF0pID0+IHtcbiAgICAgICAgaWYgKCFhcHAgfHwgIXRlbmFudCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGVuYW50Lm5hbWUgPT09IGdldChhcHAsICdvd25lci50ZW5hbnQuaWQnKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBjb250ZXh0UGF0aC5cbiAgICovXG4gIGdldEN1cnJlbnRDb250ZXh0UGF0aCgpIHtcbiAgICBjb25zdCBtYXRjaCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5tYXRjaCgvXFwvYXBwc1xcLyhwdWJsaWNcXC8pezAsMX0oLis/KShcXC98XFw/fCN8JCkvKTtcbiAgICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMl07XG4gIH1cblxuICBwcm90ZWN0ZWQgY3VycmVudEFwcHNPZlVzZXIkKCk6IE9ic2VydmFibGU8SUFwcGxpY2F0aW9uW10+IHtcbiAgICBjb25zdCBhcHBDaGFuZ2VzJCA9IHRoaXMub25BcHBDaGFuZ2VzQ29tcGxldGlvbiQoKS5waXBlKHN0YXJ0V2l0aCh1bmRlZmluZWQgYXMgdm9pZCkpO1xuICAgIGNvbnN0IHVzZXJDaGFuZ2VzJCA9IHRoaXMuY3VycmVudFVzZXIucGlwZShcbiAgICAgIG1hcCh1c2VyID0+IHVzZXI/LmlkKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICApO1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFt1c2VyQ2hhbmdlcyQsIGFwcENoYW5nZXMkXSkucGlwZShcbiAgICAgIGZpbHRlcigoW3VzZXJJZF0pID0+ICEhdXNlcklkKSxcbiAgICAgIHN3aXRjaE1hcCgoW3VzZXJJZF0pID0+XG4gICAgICAgIHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmxpc3RCeVVzZXIodXNlcklkLCB7XG4gICAgICAgICAgZHJvcE92ZXJ3cml0dGVuQXBwczogdHJ1ZSxcbiAgICAgICAgICBub1BhZ2luZzogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgKSxcbiAgICAgIG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpLFxuICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQW4gT2JzZXJ2YWJsZSBlbWl0dGluZyBvbmNlIGFsbCBQT1NULCBQVVQsIERFTEVURSByZXF1ZXN0cyB0byB0aGUgYXBwbGljYXRpb24gQVBJIGZpbmlzaGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgb25BcHBDaGFuZ2VzQ29tcGxldGlvbiQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgY29uc3QgbWV0aG9kcyA9IFsnUE9TVCcsICdQVVQnLCAnREVMRVRFJ107XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5jYWxscy5waXBlKFxuICAgICAgZmlsdGVyKFxuICAgICAgICAoeyBtZXRob2QsIHVybCB9KSA9PiBtZXRob2RzLmluY2x1ZGVzKG1ldGhvZCkgJiYgdXJsPy5pbmNsdWRlcygnYXBwbGljYXRpb24vYXBwbGljYXRpb25zJylcbiAgICAgICksXG4gICAgICBtYXAoKHsgcGhhc2UgfSkgPT4gKHBoYXNlID09PSAnc3RhcnQnID8gMSA6IC0xKSksXG4gICAgICBzY2FuKChjb3VudCwgaXRlbSkgPT4gY291bnQgKyBpdGVtLCAwKSxcbiAgICAgIG1hcChjb3VudCA9PiBjb3VudCA9PT0gMCksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgZGVib3VuY2VUaW1lKDUwMCksXG4gICAgICBmaWx0ZXIoY29tcGxldGVkID0+ICEhY29tcGxldGVkKSxcbiAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZERlZmF1bHRPcHRpb25zKCkge1xuICAgIHRoaXMuc3RhdGUuc3VwcG9ydFVybCA9IGF3YWl0IHRoaXMub3B0aW9ucy5nZXRTdXBwb3J0VXJsKCk7XG4gICAgdGhpcy5zdGF0ZS5hY3RpdmF0ZVN1cHBvcnRVc2VyQXZhaWxhYmxlID0gYXdhaXQgdGhpcy5vcHRpb25zLmdldEFjdGl2YXRlU3VwcG9ydFVzZXIoKTtcbiAgICB0aGlzLnN0YXRlLnZlcnNpb25zLmJhY2tlbmQgPSBhd2FpdCB0aGlzLm9wdGlvbnMuZ2V0U3lzdGVtT3B0aW9uKCdzeXN0ZW0nLCAndmVyc2lvbicpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnNob3dJbmNvbXBhdGlibGVWZXJzaW9uc0Vycm9yKCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIC8vIGlnbm9yZSB0aGlzXG4gICAgfVxuICAgIHRoaXMuZW1pdE5ld1N0YXRlKCk7XG4gIH1cblxuICBwcml2YXRlIHNob3dJbmNvbXBhdGlibGVWZXJzaW9uc0Vycm9yKCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMubm9WZXJzaW9uV2FybmluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB1aVZlcnNpb246IHN0cmluZyA9IHRoaXMuc3RhdGUudmVyc2lvbnMudWkubmd4O1xuICAgIGNvbnN0IGJhY2tlbmRWZXJzaW9uOiBzdHJpbmcgPSB0aGlzLnN0YXRlLnZlcnNpb25zLmJhY2tlbmQ7XG5cbiAgICBpZiAoIXNhdGlzZmllcyh1aVZlcnNpb24sIGA8PSR7YmFja2VuZFZlcnNpb259IHx8IH4ke2JhY2tlbmRWZXJzaW9ufWApKSB7XG4gICAgICBjb25zdCBlcnJvckNvbnRlbnQgPSBgWW91IGFyZSBydW5uaW5nIHZlcnNpb24gJHt1aVZlcnNpb259IG9mIHRoZSBVSSBhbmQgdmVyc2lvbiAke2JhY2tlbmRWZXJzaW9ufSBvZiBiYWNrZW5kIWA7XG4gICAgICBjb25zb2xlLmxvZygnJWMgJyArIGVycm9yQ29udGVudCwgJ2ZvbnQtd2VpZ2h0OiBib2xkOyBmb250LXNpemU6IDMwcHg7IGNvbG9yOiByZWQ7Jyk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
215
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktc3RhdGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvY29tbW9uL3VpLXN0YXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFDTCxXQUFXLEVBRVgseUJBQXlCLEVBQ3pCLGtCQUFrQixFQUduQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEUsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sR0FBRyxFQUNILElBQUksRUFDSixTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osSUFBSSxFQUNMLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFckQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7OztBQUdoRCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxZQUFZO0lBMEMvQyxZQUNVLGtCQUFzQyxFQUN2QyxVQUFzQixFQUNyQixPQUF1QixFQUN2QixXQUF3QixFQUN4Qix5QkFBb0Q7UUFFNUQsS0FBSyxFQUFFLENBQUM7UUFOQSx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3ZDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDckIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDdkIsZ0JBQVcsR0FBWCxXQUFXLENB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Q0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN0RixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQzs4R0FoUFUsZUFBZTtrSEFBZixlQUFlLGNBREYsTUFBTTs7QUFxSXhCO0lBREwsUUFBUSxDQUFDLEdBQUcsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQzs7OzswREFJbEM7MkZBdklVLGVBQWU7a0JBRDNCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOytNQXFJMUIsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBGZXRjaENsaWVudCxcbiAgSUFwcGxpY2F0aW9uLFxuICBUZW5hbnRMb2dpbk9wdGlvbnNTZXJ2aWNlLFxuICBBcHBsaWNhdGlvblNlcnZpY2UsXG4gIElDdXJyZW50VGVuYW50LFxuICBJVXNlclxufSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBrZXlzLCBnZXQgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIGZpbHRlcixcbiAgbWFwLFxuICBzY2FuLFxuICBzd2l0Y2hNYXAsXG4gIHNoYXJlUmVwbGF5LFxuICBzdGFydFdpdGgsXG4gIGRlYm91bmNlVGltZSxcbiAgdGFrZVxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBPcHRpb25zU2VydmljZSB9IGZyb20gJy4vb3B0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IFN0YXRlU2VydmljZSB9IGZyb20gJy4vc3RhdGUtc2VydmljZS5hYnN0cmFjdCc7XG5pbXBvcnQgeyBBcGlTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9hcGknO1xuaW1wb3J0IHsgQXBwbGljYXRpb25PcHRpb25zIH0gZnJvbSAnLi9BcHBsaWNhdGlvbk9wdGlvbnMnO1xuaW1wb3J0IHsgdGhyb3R0bGUgfSBmcm9tICcuL3Rocm90dGxlLmRlY29yYXRvcic7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQXBwU3RhdGVTZXJ2aWNlIGV4dGVuZHMgU3RhdGVTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIFNhdmVzIHRoZSBzdGF0ZS4gU2hvdWxkIG5vdCBiZSBhY2Nlc3NpYmxlIGRpcmVjdGx5LiBVc2UgbWFwIG9yIHRoZSBnZXR0ZXIgdG8gYWNjZXNzXG4gICAqIHRoZSBzdGF0ZS4gVXNlIGZ1bmN0aW9ucyBpbiB0aGUgaW1wbGVtZW50YXRpb24gdG8gY2hhbmdlIHRoZSBzdGF0ZS5cbiAgICovXG4gIHN0YXRlJDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oe1xuICAgIGFwcDoge1xuICAgICAgbmFtZTogdGhpcy5vcHRpb25zLm5hbWUsXG4gICAgICBjb250ZXh0UGF0aDogdGhpcy5nZXRDdXJyZW50Q29udGV4dFBhdGgoKSB8fCB0aGlzLm9wdGlvbnMuY29udGV4dFBhdGgsXG4gICAgICBpY29uOiB0aGlzLm9wdGlvbnMuaWNvblxuICAgIH0sXG4gICAgc3VwcG9ydFVybDogdGhpcy5vcHRpb25zLnN1cHBvcnRVcmwsXG4gICAgbGFuZzogdGhpcy5vcHRpb25zLmdldCgnZGVmYXVsdExhbmd1YWdlJywgJ2VuJyksXG4gICAgbGFuZ3M6IHRoaXMuZ2V0TGFuZ3MoKSxcbiAgICBsYW5nc0RldGFpbDogdGhpcy5vcHRpb25zLmxhbmd1YWdlcyxcbiAgICBsb2dpbk9wdGlvbnM6IHRoaXMub3B0aW9ucy5sb2dpbk9wdGlvbnMsXG4gICAgYWN0aXZhdGVTdXBwb3J0VXNlckF2YWlsYWJsZTogdW5kZWZpbmVkLFxuICAgIHZlcnNpb25zOiB7XG4gICAgICBiYWNrZW5kOiB1bmRlZmluZWQsXG4gICAgICB1aTogdGhpcy5vcHRpb25zLnZlcnNpb25zIHx8IHsgbmd4OiB1bmRlZmluZWQgfVxuICAgIH0sXG4gICAgaGlkZVBvd2VyZWQ6IHRoaXMub3B0aW9ucy5oaWRlUG93ZXJlZCxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHNob3dSaWdodERyYXdlcjogdGhpcy5vcHRpb25zLnJpZ2h0RHJhd2VyLFxuICAgIGxvZ2luRXh0cmFMaW5rOiB0aGlzLm9wdGlvbnMuZ2V0KCdsb2dpbl9leHRyYV9saW5rJyksXG4gICAgbmV3c2xldHRlcjogdGhpcy5vcHRpb25zLm5ld3NsZXR0ZXJcbiAgfSk7XG4gIGN1cnJlbnRTdXBwb3J0VXNlck5hbWU6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBudWxsPiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XG4gIGN1cnJlbnRVc2VyOiBCZWhhdmlvclN1YmplY3Q8SVVzZXIgfCBudWxsPiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XG4gIGN1cnJlbnRUZW5hbnQ6IEJlaGF2aW9yU3ViamVjdDxJQ3VycmVudFRlbmFudCB8IG51bGw+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcbiAgY3VycmVudEFwcGxpY2F0aW9uOiBCZWhhdmlvclN1YmplY3Q8SUFwcGxpY2F0aW9uIHwgbnVsbD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuICBjdXJyZW50QXBwbGljYXRpb25Db25maWc6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuY3VycmVudEFwcGxpY2F0aW9uLnBpcGUoXG4gICAgZmlsdGVyKGFwcCA9PiAhIWFwcCksXG4gICAgbWFwKGFwcCA9PiBhcHA/LmNvbmZpZyB8fCBudWxsKVxuICApO1xuICAvKipcbiAgICogQW4gT2JzZXJ2YWJsZSBvZiB0aGUgYXBwbGljYXRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIGN1cnJlbnQgdXNlci5cbiAgICogVGhlIE9ic2VydmFibGUgZW1pdHMgYSBuZXcgYXJyYXkgb24gdXNlciBjaGFuZ2VzIG9yIGlmIHRoZSBhcHBsaWNhdGlvblxuICAgKiBwZXJmb3JtcyBQT1NULCBQVVQgb3IgREVMRVRFIHJlcXVlc3RzIHRvIHRoZSBhcHBsaWNhdGlvbiBBUEkuXG4gICAqL1xuICBjdXJyZW50QXBwc09mVXNlcjogT2JzZXJ2YWJsZTxJQXBwbGljYXRpb25bXT47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcHBsaWNhdGlvblNlcnZpY2U6IEFwcGxpY2F0aW9uU2VydmljZSxcbiAgICBwdWJsaWMgYXBpU2VydmljZTogQXBpU2VydmljZSxcbiAgICBwcml2YXRlIG9wdGlvbnM6IE9wdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmV0Y2hDbGllbnQ6IEZldGNoQ2xpZW50LFxuICAgIHByaXZhdGUgdGVuYW50TG9naW5PcHRpb25zU2VydmljZTogVGVuYW50TG9naW5PcHRpb25zU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIC8vIGluIGNhc2Ugb2Ygbm9Mb2dpbiBiZWluZyB0cnV0aHkgYGxvYWRNYW5pZmVzdGAgaXMgbmV2ZXIgY2FsbGVkLlxuICAgIGlmICh0aGlzLm9wdGlvbnMubm9Mb2dpbikge1xuICAgICAgdGhpcy5jdXJyZW50QXBwbGljYXRpb24ubmV4dCh0aGlzLnN0YXRlLmFwcCk7XG4gICAgfVxuICAgIHRoaXMuYXBpU2VydmljZS5pc0xvYWRpbmckLnN1YnNjcmliZShpc0xvYWRpbmcgPT4ge1xuICAgICAgdGhpcy5zdGF0ZS5pc0xvYWRpbmcgPSBpc0xvYWRpbmc7XG4gICAgfSk7XG5cbiAgICB0aGlzLmFzc2lnbkFwcGxpY2F0aW9uS2V5VG9EZWZhdWx0SGVhZGVycygpO1xuICAgIHRoaXMuY3VycmVudEFwcHNPZlVzZXIgPSB0aGlzLmN1cnJlbnRBcHBzT2ZVc2VyJCgpO1xuICB9XG5cbiAgYXNzaWduQXBwbGljYXRpb25LZXlUb0RlZmF1bHRIZWFkZXJzKCkge1xuICAgIGlmICghaXNEZXZNb2RlKCkpIHtcbiAgICAgIHRoaXMuZmV0Y2hDbGllbnQuZGVmYXVsdEhlYWRlcnMgPSB7XG4gICAgICAgIC4uLih0aGlzLmZldGNoQ2xpZW50LmRlZmF1bHRIZWFkZXJzIHx8IHt9KSxcbiAgICAgICAgJ1gtQ3VtdWxvY2l0eS1BcHBsaWNhdGlvbi1LZXknOiB0aGlzLm9wdGlvbnMua2V5XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXRlLlxuICAgKi9cbiAgZ2V0IHN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlJC52YWx1ZTtcbiAgfVxuXG4gIGdldExhbmdzKCkge1xuICAgIGNvbnN0IHsgbGFuZ3VhZ2VzIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgcmV0dXJuIGxhbmd1YWdlcyA/IGtleXMobGFuZ3VhZ2VzKS5maWx0ZXIoayA9PiBsYW5ndWFnZXNba10pIDogW107XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY29ycmVjdCBVSSB2ZXJzaW9uLiBJbiBoeWJyaWQgbW9kZSBmb3IgYW5ndWxhciBhbmQgbmd4LlxuICAgKi9cbiAgZ2V0IHVpVmVyc2lvbigpIHtcbiAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5zdGF0ZS52ZXJzaW9ucy51aTtcbiAgICByZXR1cm4gdmVyc2lvbi5uZ3ggfHwgdmVyc2lvbi5uZzE7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIGFwcCBtYW5pZmVzdC4gSWYgbm8gYWNjZXNzIC0+IHRocm93IGFuIGVycm9yIHRvIHZlcmlmeSBhcHAgYWNjZXNzLlxuICAgKi9cbiAgYXN5bmMgbG9hZE1hbmlmZXN0KCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkQ29udGV4dFBhdGggPSB0aGlzLnN0YXRlLmFwcC5jb250ZXh0UGF0aD8uc3BsaXQoJ0AnKVswXTtcbiAgICAgIGNvbnN0IHsgZGF0YTogYXBwbGljYXRpb24gfSA9XG4gICAgICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmdldE1hbmlmZXN0T2ZDb250ZXh0UGF0aChub3JtYWxpemVkQ29udGV4dFBhdGgpO1xuICAgICAgdGhpcy5zdGF0ZS5hcHAubWFuaWZlc3QgPSBhcHBsaWNhdGlvbjtcbiAgICAgIHRoaXMuc3RhdGUuYXBwLmlkID0gYXBwbGljYXRpb24uaWQ7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmRldGFpbChhcHBsaWNhdGlvbi5pZCk7XG4gICAgICB0aGlzLmN1cnJlbnRBcHBsaWNhdGlvbi5uZXh0KGRhdGEpO1xuICAgICAgYXdhaXQgdGhpcy5sb2FkRGVmYXVsdE9wdGlvbnMoKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhpcy5jdXJyZW50QXBwbGljYXRpb24ubmV4dCh0aGlzLnN0YXRlLmFwcCk7XG4gICAgICB0aHJvdyBleDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRHluYW1pYyBvcHRpb25zIGFyZSBzdG9yZWQgb24gdGhlIEFQSSBpbiBhIHNwZWNpZmljIGNvbmZpZzoge30gb2JqZWN0LiBUaGV5IGNhblxuICAgKiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgYXBwIGR5bmFtaWNhbGx5LlxuICAgKlxuICAgKiBOb3RlOiBUbyBhdm9pZHMgY29uZmxpY3RzIHdpdGggdGhlIGRlZmF1bHQgQ29uZmlnLCBpdCBpcyByZWNvbW1lbmRlZFxuICAgKiB0byB1c2UgYSBjZXJ0YWluIG5hbWVzcGFjZS5cbiAgICovXG4gIGFzeW5jIHVwZGF0ZUN1cnJlbnRBcHBsaWNhdGlvbkNvbmZpZzxUID0gQXBwbGljYXRpb25PcHRpb25zPihjb25maWc6IFQpOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCBhcHBXaXRoVXBkYXRlZENvbmZpZyA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLnVwZGF0ZUFwcGxpY2F0aW9uQ29uZmlnKFxuICAgICAgdGhpcy5zdGF0ZS5hcHAuaWQsXG4gICAgICBjb25maWdcbiAgICApO1xuICAgIHRoaXMuY3VycmVudEFwcGxpY2F0aW9uLm5leHQoYXBwV2l0aFVwZGF0ZWRDb25maWcpO1xuICAgIHJldHVybiBhcHBXaXRoVXBkYXRlZENvbmZpZy5jb25maWc7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiB0aGlzIGZ1bmN0aW9uIGNhbGxlZCwgaXQgcmVmcmVzaGVzIHRoZSB2YWx1ZXMgb2YgbG9naW5PcHRpb25zIHN0b3JlZCB3aXRoaW4gdWkgc3RhdGUgb2JqZWN0LlxuICAgKiBGdW5jdGlvbiBpcyB0aHJvdHRsZWQgdG8gZXhlY3V0ZSB0aGUgcmVmcmVzaCBvbmNlIGluIGEgdGltZSBzcGVjaWZpZWQgYnkgcGFyYW1zIG9mIEB0aHJvdHRsZWQgZGVjb3JhdG9yLFxuICAgKiBpdCBzaG91bGQgYmUgY2FsbGVkIG9uIGxlYWRpbmcgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAgICovXG4gIEB0aHJvdHRsZSg2MDAsIHsgdHJhaWxpbmc6IGZhbHNlIH0pXG4gIGFzeW5jIHJlZnJlc2hMb2dpbk9wdGlvbnMoKSB7XG4gICAgY29uc3QgbG9naW5PcHRpb25zID0gKGF3YWl0IHRoaXMudGVuYW50TG9naW5PcHRpb25zU2VydmljZS5saXN0Rm9yQ3VycmVudFRlbmFudCgpKS5kYXRhO1xuICAgIHRoaXMuc3RhdGUkLm5leHQoeyAuLi50aGlzLnN0YXRlLCBsb2dpbk9wdGlvbnMgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGN1cnJlbnQgdXNlcnMgYXBwbGljYXRpb24gbGlzdCBhbmQgbWF0Y2hlcyBpdCBhZ2FpbnN0IGdpdmVuIGFwcGxpY2F0aW9uIG5hbWUuXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBhcHBsaWNhdGlvbiBpcyBpbiB0aGUgbGlzdC5cbiAgICogQHBhcmFtIG5hbWUgYXBwbGljYXRpb24gbmFtZVxuICAgKi9cbiAgYXN5bmMgaXNBcHBsaWNhdGlvbkF2YWlsYWJsZShuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhcHBzID0gYXdhaXQgdGhpcy5jdXJyZW50QXBwc09mVXNlci5waXBlKHRha2UoMSkpLnRvUHJvbWlzZSgpO1xuICAgIHJldHVybiBhcHBzLnNvbWUoYXBwID0+IGFwcC5uYW1lID09PSBuYW1lIHx8IGFwcC5jb250ZXh0UGF0aCA9PT0gbmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBjdXJyZW50IHVzZXIgKGluY2x1ZGluZyBzdXBwb3J0IHVzZXIpLlxuICAgKiBAcGFyYW0gdXNlckluZm8gSW5mbyBhYm91dCBjdXJyZW50IHVzZXIgYW5kIHN1cHBvcnQgdXNlciB0byBiZSBzZXQuXG4gICAqL1xuICBzZXRVc2VyKHVzZXJJbmZvOiB7IHVzZXI6IElVc2VyOyBzdXBwb3J0VXNlck5hbWU6IHN0cmluZyB9KSB7XG4gICAgdGhpcy5jdXJyZW50U3VwcG9ydFVzZXJOYW1lLm5leHQodXNlckluZm8uc3VwcG9ydFVzZXJOYW1lIHx8IG51bGwpO1xuICAgIHRoaXMuY3VycmVudFVzZXIubmV4dCh1c2VySW5mby51c2VyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyBpZiB0aGUgY3VycmVudCBhcHBsaWNhdGlvbiBpcyBvd25lZCBieSB0aGUgY3VycmVudCB0ZW5hbnQuXG4gICAqIEBwYXJhbSBhcHAgVGhlIGFwcGxpY2F0aW9uIHRvIHZlcmlmeS5cbiAgICogQHJldHVybnMgdHJ1ZSBpZiBpdCBiZWxvbmdzIHRvIHRoZSBjdXJyZW50IHRlbmFudC5cbiAgICovXG4gIGlzT3duZXJPZkFwcGxpY2F0aW9uKGFwcD86IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIGlmICghYXBwKSB7XG4gICAgICBhcHAgPSB0aGlzLmN1cnJlbnRBcHBsaWNhdGlvbi52YWx1ZTtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudFRlbmFudDogSUN1cnJlbnRUZW5hbnQgPSB0aGlzLmN1cnJlbnRUZW5hbnQudmFsdWU7XG4gICAgY29uc3QgYXBwT3duZXIgPSBnZXQoYXBwLCAnb3duZXIudGVuYW50LmlkJyk7XG4gICAgcmV0dXJuIGN1cnJlbnRUZW5hbnQ/Lm5hbWUgPT09IGFwcE93bmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIGlmIHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uIGlzIG93bmVkIGJ5IHRoZSBjdXJyZW50IHRlbmFudC5cbiAgICogQHBhcmFtIGFwcCBUaGUgYXBwbGljYXRpb24gdG8gdmVyaWZ5LlxuICAgKiBAcmV0dXJucyB0cnVlIGlmIGl0IGJlbG9uZ3MgdG8gdGhlIGN1cnJlbnQgdGVuYW50LlxuICAgKi9cbiAgaXNPd25lck9mQXBwbGljYXRpb24kKGFwcD86IElBcHBsaWNhdGlvbik6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGFwcCQgPSBhcHAgPyBvZihhcHApIDogdGhpcy5jdXJyZW50QXBwbGljYXRpb247XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW2FwcCQsIHRoaXMuY3VycmVudFRlbmFudF0pLnBpcGUoXG4gICAgICBtYXAoKFthcHAsIHRlbmFudF0pID0+IHtcbiAgICAgICAgaWYgKCFhcHAgfHwgIXRlbmFudCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGVuYW50Lm5hbWUgPT09IGdldChhcHAsICdvd25lci50ZW5hbnQuaWQnKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBjb250ZXh0UGF0aC5cbiAgICovXG4gIGdldEN1cnJlbnRDb250ZXh0UGF0aCgpIHtcbiAgICBjb25zdCBtYXRjaCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5tYXRjaCgvXFwvYXBwc1xcLyhwdWJsaWNcXC8pezAsMX0oLis/KShcXC98XFw/fCN8JCkvKTtcbiAgICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMl07XG4gIH1cblxuICBwcm90ZWN0ZWQgY3VycmVudEFwcHNPZlVzZXIkKCk6IE9ic2VydmFibGU8SUFwcGxpY2F0aW9uW10+IHtcbiAgICBjb25zdCBhcHBDaGFuZ2VzJCA9IHRoaXMub25BcHBDaGFuZ2VzQ29tcGxldGlvbiQoKS5waXBlKHN0YXJ0V2l0aCh1bmRlZmluZWQgYXMgdm9pZCkpO1xuICAgIGNvbnN0IHVzZXJDaGFuZ2VzJCA9IHRoaXMuY3VycmVudFVzZXIucGlwZShcbiAgICAgIG1hcCh1c2VyID0+IHVzZXI/LmlkKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICApO1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFt1c2VyQ2hhbmdlcyQsIGFwcENoYW5nZXMkXSkucGlwZShcbiAgICAgIGZpbHRlcigoW3VzZXJJZF0pID0+ICEhdXNlcklkKSxcbiAgICAgIHN3aXRjaE1hcCgoW3VzZXJJZF0pID0+XG4gICAgICAgIHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmxpc3RCeVVzZXIodXNlcklkLCB7XG4gICAgICAgICAgZHJvcE92ZXJ3cml0dGVuQXBwczogdHJ1ZSxcbiAgICAgICAgICBub1BhZ2luZzogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgKSxcbiAgICAgIG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpLFxuICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQW4gT2JzZXJ2YWJsZSBlbWl0dGluZyBvbmNlIGFsbCBQT1NULCBQVVQsIERFTEVURSByZXF1ZXN0cyB0byB0aGUgYXBwbGljYXRpb24gQVBJIGZpbmlzaGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgb25BcHBDaGFuZ2VzQ29tcGxldGlvbiQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgY29uc3QgbWV0aG9kcyA9IFsnUE9TVCcsICdQVVQnLCAnREVMRVRFJ107XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5jYWxscy5waXBlKFxuICAgICAgZmlsdGVyKFxuICAgICAgICAoeyBtZXRob2QsIHVybCB9KSA9PiBtZXRob2RzLmluY2x1ZGVzKG1ldGhvZCkgJiYgdXJsPy5pbmNsdWRlcygnYXBwbGljYXRpb24vYXBwbGljYXRpb25zJylcbiAgICAgICksXG4gICAgICBtYXAoKHsgcGhhc2UgfSkgPT4gKHBoYXNlID09PSAnc3RhcnQnID8gMSA6IC0xKSksXG4gICAgICBzY2FuKChjb3VudCwgaXRlbSkgPT4gY291bnQgKyBpdGVtLCAwKSxcbiAgICAgIG1hcChjb3VudCA9PiBjb3VudCA9PT0gMCksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgZGVib3VuY2VUaW1lKDUwMCksXG4gICAgICBmaWx0ZXIoY29tcGxldGVkID0+ICEhY29tcGxldGVkKSxcbiAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZERlZmF1bHRPcHRpb25zKCkge1xuICAgIHRoaXMuc3RhdGUuc3VwcG9ydFVybCA9IGF3YWl0IHRoaXMub3B0aW9ucy5nZXRTdXBwb3J0VXJsKCk7XG4gICAgdGhpcy5zdGF0ZS5hY3RpdmF0ZVN1cHBvcnRVc2VyQXZhaWxhYmxlID0gYXdhaXQgdGhpcy5vcHRpb25zLmdldEFjdGl2YXRlU3VwcG9ydFVzZXIoKTtcbiAgICB0aGlzLnN0YXRlLnZlcnNpb25zLmJhY2tlbmQgPSBhd2FpdCB0aGlzLm9wdGlvbnMuZ2V0U3lzdGVtT3B0aW9uKCdzeXN0ZW0nLCAndmVyc2lvbicpO1xuICAgIHRoaXMuZW1pdE5ld1N0YXRlKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output, ViewChild, ViewContainerRef, Injector, SimpleChange } from '@angular/core';
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild, ViewContainerRef, Injector, SimpleChange, reflectComponentType } from '@angular/core';
|
|
2
2
|
import { DynamicComponentErrorStrategy, isLazyDynamicComponents, isEagerDynamicComponents } from './dynamic-component.model';
|
|
3
3
|
import { DynamicComponentService } from './dynamic-component.service';
|
|
4
4
|
import { isObservable, of, Subject } from 'rxjs';
|
|
@@ -141,7 +141,14 @@ export class DynamicComponentComponent {
|
|
|
141
141
|
environmentInjector: (dynamicComponent.injector || this.injector)
|
|
142
142
|
});
|
|
143
143
|
this.componentInstance = this.componentRef.instance;
|
|
144
|
-
|
|
144
|
+
const componentMetadata = this.safeReflectComponentType(componentType);
|
|
145
|
+
const hasConfigInput = componentMetadata?.inputs.some(input => input.propName === 'config');
|
|
146
|
+
if (hasConfigInput) {
|
|
147
|
+
this.componentRef.setInput('config', this.config);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
this.componentInstance.config = this.config;
|
|
151
|
+
}
|
|
145
152
|
this.componentInstance.alerts = new DynamicComponentAlertAggregator(errors);
|
|
146
153
|
this.subscribeForOverlayChange();
|
|
147
154
|
}
|
|
@@ -150,6 +157,19 @@ export class DynamicComponentComponent {
|
|
|
150
157
|
console.warn(ex);
|
|
151
158
|
}
|
|
152
159
|
}
|
|
160
|
+
/**
|
|
161
|
+
* Safely reflects the component metadata.
|
|
162
|
+
* If reflection fails, it returns a default object with an empty inputs array.
|
|
163
|
+
*/
|
|
164
|
+
safeReflectComponentType(componentType) {
|
|
165
|
+
try {
|
|
166
|
+
return reflectComponentType(componentType);
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
console.warn('Failed to reflect component metadata:', error);
|
|
170
|
+
return { inputs: [] };
|
|
171
|
+
}
|
|
172
|
+
}
|
|
153
173
|
async getComponentType(dynamicComponent) {
|
|
154
174
|
if (isLazyDynamicComponents(dynamicComponent)) {
|
|
155
175
|
const componentPromiseFunction = this.mode === 'component'
|
|
@@ -207,4 +227,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
207
227
|
type: ViewChild,
|
|
208
228
|
args: ['host', { read: ViewContainerRef, static: true }]
|
|
209
229
|
}] } });
|
|
210
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1jb21wb25lbnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9keW5hbWljLWNvbXBvbmVudC9keW5hbWljLWNvbXBvbmVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL2R5bmFtaWMtY29tcG9uZW50L2R5bmFtaWMtY29tcG9uZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUNULGdCQUFnQixFQUVoQixRQUFRLEVBS1IsWUFBWSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFHTCw2QkFBNkIsRUFDN0IsdUJBQXVCLEVBQ3ZCLHdCQUF3QixFQUV6QixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxZQUFZLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEUsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdkYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7Ozs7Ozs7OztBQUV4RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBS0gsTUFBTSxPQUFPLHlCQUF5QjtJQStDcEM7O09BRUc7SUFDSCxZQUNVLHVCQUFnRCxFQUNoRCxRQUFrQjtRQURsQiw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBQ2hELGFBQVEsR0FB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QkFLRyxJQUFJO3NCQUFaLEtBQUs7Z0JBSUcsYUFBYTtzQkFBckIsS0FBSztnQkFLRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBSUksbUJBQW1CO3NCQUE1QixNQUFNO2dCQUlzRCxJQUFJO3NCQUFoRSxTQUFTO3VCQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBDb21wb25lbnRSZWYsXG4gIEluamVjdG9yLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBPbkNoYW5nZXMsXG4gIEVudmlyb25tZW50SW5qZWN0b3IsXG4gIFR5cGUsXG4gIFNpbXBsZUNoYW5nZVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIER5bmFtaWNDb21wb25lbnQsXG4gIER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uLFxuICBEeW5hbWljQ29tcG9uZW50RXJyb3JTdHJhdGVneSxcbiAgaXNMYXp5RHluYW1pY0NvbXBvbmVudHMsXG4gIGlzRWFnZXJEeW5hbWljQ29tcG9uZW50cyxcbiAgT25CZWZvcmVTYXZlXG59IGZyb20gJy4vZHluYW1pYy1jb21wb25lbnQubW9kZWwnO1xuaW1wb3J0IHsgRHluYW1pY0NvbXBvbmVudFNlcnZpY2UgfSBmcm9tICcuL2R5bmFtaWMtY29tcG9uZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgaXNPYnNlcnZhYmxlLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZmxhdHRlbiwgZ2V0LCBpc1VuZGVmaW5lZCwgc2V0LCBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgRHluYW1pY0NvbXBvbmVudEFsZXJ0QWdncmVnYXRvciB9IGZyb20gJy4vZHluYW1pYy1jb21wb25lbnQtYWxlcnQtYWdncmVnYXRvcic7XG5pbXBvcnQgeyBEeW5hbWljQ29tcG9uZW50QWxlcnQgfSBmcm9tICcuL2R5bmFtaWMtY29tcG9uZW50LWFsZXJ0Lm1vZGVsJztcblxuLyoqXG4gKiBDOHkgZHluYW1pYyBjb21wb25lbnQuXG4gKlxuICogcmVnaXN0ZXIgY29tcG9uZW50IGluIEhPT0sgaW4gbW9kdWxlOlxuICogYGBgdHlwZXNjcmlwdFxuICogIGltcG9ydCB7IGhvb2tDb21wb25lbnQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbiAqXG4gKiBATmdNb2R1bGUoe1xuICogIC4uLixcbiAqICBwcm92aWRlcnM6IFtcbiAqICAgIGhvb2tDb21wb25lbnQoe1xuICogICAgICBpZDogJ3Rlc3QtY29tcG9uZW50JyxcbiAqICAgICAgbGFiZWw6ICdNeSB0ZXN0IGNvbXBvbmVudCcsXG4gKiAgICAgIGRlc2NyaXB0aW9uOiAndGhpcyBpcyB0ZXN0IGNvbXBvbmVudCcsXG4gKiAgICAgIGNvbXBvbmVudDogVGVzdENvbXBvbmVudFxuICogICAgfSlcbiAqICAuLi5cbiAqICBdXG4gKlxuICogYGBgXG4gKiBTaG93aW5nIGR5bmFtaWMgY29tcG9uZW50OlxuICogYGBgaHRtbFxuICogPGM4eS1keW5hbWljLWNvbXBvbmVudCBbY29tcG9uZW50SWRdPVwiJ3Rlc3QtY29tcG9uZW50J1wiIFtjb25maWddPVwiY29uZmlnXCI+PC9jOHktZHluYW1pYy1jb21wb25lbnQ+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWR5bmFtaWMtY29tcG9uZW50JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2R5bmFtaWMtY29tcG9uZW50LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBEeW5hbWljQ29tcG9uZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcmVnaXN0ZXJlZCBjb21wb25lbnQuIEl0IG5lZWRzIHRvIGJlIGEgY29tcG9uZW50IHRoYXQgaXMgaG9va2VkXG4gICAqIHdpdGggdGhlIEhPT0tfQ09NUE9ORU5UUyBleHRlbnNpb24gaG9vay5cbiAgICovXG4gIEBJbnB1dCgpIGNvbXBvbmVudElkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiB0byBwYXNzLlxuICAgKi9cbiAgQElucHV0KCkgY29uZmlnOiB1bmtub3duO1xuICAvKipcbiAgICogRHluYW1pY0NvbXBvbmVudHMgY2FuIGhhdmUgdHdvIG1vZGVzLCBhbiBlZGl0IChjb25maWcpIGFuZCBhbiB2aWV3IChjb21wb25lbnQpIG1vZGUuXG4gICAqIEJ5IGRlZmF1bHQgaXQgaXMgc2hvd24gaW4gdGhlIGNvbXBvbmVudCBtb2RlLlxuICAgKi9cbiAgQElucHV0KCkgbW9kZTogJ2NvbmZpZycgfCAnY29tcG9uZW50JyA9ICdjb21wb25lbnQnO1xuICAvKipcbiAgICogRGlzYWJsZSB0aGlzIHRvIGhpZGUgdGhlIGVycm9yIHRoYXQgaXMgc2hvd24gaWYgdGhlIGNvbXBvbmVudCB3YXMgbm90IGZvdW5kLlxuICAgKi9cbiAgQElucHV0KCkgbm90Rm91bmRFcnJvciA9IHRydWU7XG4gIC8qKlxuICAgKiBJZiBzZXQgdG8gdHJ1ZSwgaXQgd2lsbCBleGVjdXRlIHRoZSBjb21wb25lbnRzIHJlc29sdmVycyBiZWZvcmUgaW5pdGlhbGl6aW5nIHRoZSBjb21wb25lbnQuXG4gICAqIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgKi9cbiAgQElucHV0KCkgZXhlY3V0ZVJlc29sdmVycyA9IGZhbHNlO1xuICAvKipcbiAgICogQWxsb3dzIHRvIHNldCBhZGRpdGlvbmFsIGNsYXNzZXMgZm9yIHdpZGdldCBzdHlsaW5nLlxuICAgKi9cbiAgQE91dHB1dCgpIHVwZGF0ZVdpZGdldENsYXNzZXMgPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+PigpO1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgQFZpZXdDaGlsZCgnaG9zdCcsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiB0cnVlIH0pIGhvc3Q6IFZpZXdDb250YWluZXJSZWY7XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBlcnJvcjogYW55O1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgZXhwYW5kRXJyb3JEZXRhaWxzID0gZmFsc2U7XG4gIGNvbXBvbmVudEluc3RhbmNlOiBEeW5hbWljQ29tcG9uZW50O1xuICBlcnJvclN0cmF0ZWd5OiBEeW5hbWljQ29tcG9uZW50RXJyb3JTdHJhdGVneTtcbiAgZHluYW1pY0NvbXBvbmVudEVycm9yU3RyYXRlZ3k6IHR5cGVvZiBEeW5hbWljQ29tcG9uZW50RXJyb3JTdHJhdGVneSA9XG4gICAgRHluYW1pY0NvbXBvbmVudEVycm9yU3RyYXRlZ3k7XG4gIHByaXZhdGUgZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPENvbXBvbmVudD47XG5cbiAgLyoqXG4gICAqIEBpZ25vcmUgb25seSBESVxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkeW5hbWljQ29tcG9uZW50U2VydmljZTogRHluYW1pY0NvbXBvbmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3JcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBDYWxscyB0aGUgZHluYW1pYyBjb21wb25lbnQgbGlmZSBjeWNsZSBob29rLiBDdXJyZW50bHkgb25seVxuICAgKiBzdXBwb3J0aW5nIG9uQmVmb3JlU2F2ZSwgYSBob29rIHdoaWNoIGlzIGNhbGxlZCBiZWZvcmUgYSBjb25maWcgY29tcG9uZW50XG4gICAqIGlzIHNhdmVkLlxuICAgKi9cbiAgY2FsbExpZmVDeWNsZUhvb2tzKCkge1xuICAgIHJldHVybiB0aGlzLmNhbGxPbkJlZm9yZVNhdmVIb29rKCk7XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgYXN5bmMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGNvbnN0IGNtcCA9IGF3YWl0IHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UuZ2V0QnlJZCh0aGlzLmNvbXBvbmVudElkKTtcbiAgICBsZXQgZXJyb3JzID0gbmV3IEFycmF5PER5bmFtaWNDb21wb25lbnRBbGVydD4oKTtcbiAgICBpZiAoY21wKSB7XG4gICAgICB0aGlzLmVycm9yU3RyYXRlZ3kgPSBjbXAuZXJyb3JTdHJhdGVneSB8fCBEeW5hbWljQ29tcG9uZW50RXJyb3JTdHJhdGVneS5DVVNUT007XG4gICAgICBpZiAodGhpcy5leGVjdXRlUmVzb2x2ZXJzKSB7XG4gICAgICAgIGNvbnN0IFtyZXNvbHZlZENvbmZpZ10gPSBhd2FpdCB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLmV4ZWN1dGVSZXNvbHZlcnMoW1xuICAgICAgICAgIHsgY29tcG9uZW50SWQ6IHRoaXMuY29tcG9uZW50SWQsIGNvbmZpZzogdGhpcy5jb25maWcgfVxuICAgICAgICBdKTtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMocmVzb2x2ZWRDb25maWcpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4gc2V0KHRoaXMuY29uZmlnLCBrZXksIHZhbHVlKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc29sdmVkVmFsdWVzT2ZDb25maWd1cmF0aW9uOiBBcnJheTxEeW5hbWljQ29tcG9uZW50QWxlcnQgfCBEeW5hbWljQ29tcG9uZW50QWxlcnRbXT4gPVxuICAgICAgICBjbXAucmVzb2x2ZVxuICAgICAgICAgID8gT2JqZWN0LmtleXMoY21wLnJlc29sdmUpLm1hcChyZXNvbHZlZEtleSA9PiBnZXQodGhpcy5jb25maWcsIHJlc29sdmVkS2V5KSlcbiAgICAgICAgICA6IFtdO1xuICAgICAgY29uc3QgZmxhdHRlbmVkUmVzb2x2ZWRWYWx1ZXNPZkNvbmZpZ3VyYXRpb24gPSBmbGF0dGVuKHJlc29sdmVkVmFsdWVzT2ZDb25maWd1cmF0aW9uKTtcbiAgICAgIGVycm9ycyA9IGZsYXR0ZW5lZFJlc29sdmVkVmFsdWVzT2ZDb25maWd1cmF0aW9uLmZpbHRlcihcbiAgICAgICAgcG90ZW50aWFsRXJyb3IgPT4gcG90ZW50aWFsRXJyb3IgJiYgcG90ZW50aWFsRXJyb3IgaW5zdGFuY2VvZiBEeW5hbWljQ29tcG9uZW50QWxlcnRcbiAgICAgICk7XG4gICAgICBpZiAoZXJyb3JzLmxlbmd0aCAmJiBjbXAuZXJyb3JTdHJhdGVneSA9PT0gRHluYW1pY0NvbXBvbmVudEVycm9yU3RyYXRlZ3kuTk9UX1JFTkRFUikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5tb2RlID09ICdjb25maWcnICYmICFjbXAubG9hZENvbmZpZ0NvbXBvbmVudCAmJiAhY21wLmNvbmZpZ0NvbXBvbmVudCkge1xuICAgICAgICB0aGlzLmhvc3QuY2xlYXIoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IHRoaXMubG9hZENvbXBvbmVudChjbXAsIGVycm9ycyk7XG4gICAgdGhpcy5lbWl0Q2hhbmdlT25Db21wb25lbnQoY2hhbmdlcyk7XG4gIH1cblxuICAvKipcbiAgICogSWYgYW4gb3V0c2lkZSBjb21wb25lbnQgY2hhbmdlcyB0aGUgY29uZmlndXJhdGlvbiwgdGhpcyBmdW5jdGlvbiB0cmlnZ2VycyBuZ09uQ2hhbmdlIG9uIHRoZSBkeW5hbWljIGNvbXBvbmVudC5cbiAgICogQHBhcmFtIG5ld0NvbmZpZ1ZhbHVlcyBUaGUgbmV3IGNvbmZpZ3VyYXRpb24gdmFsdWUuXG4gICAqL1xuICBlbWl0Q29uZmlnQ2hhbmdlKG5ld0NvbmZpZ1ZhbHVlczogdW5rbm93bikge1xuICAgIGlmICghdGhpcy5jb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvbGRDb25maWcgPSBjbG9uZURlZXAodGhpcy5jb25maWcpO1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5jb25maWcsIG5ld0NvbmZpZ1ZhbHVlcyk7XG4gICAgdGhpcy5jb21wb25lbnRJbnN0YW5jZS5jb25maWcgPSB0aGlzLmNvbmZpZztcbiAgICB0aGlzLmVtaXRDaGFuZ2VPbkNvbXBvbmVudCh7IGNvbmZpZzogbmV3IFNpbXBsZUNoYW5nZShvbGRDb25maWcsIHRoaXMuY29uZmlnLCBmYWxzZSkgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRDaGFuZ2VPbkNvbXBvbmVudChjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgY29uc3QgbmdPbkNoYW5nZXMgPSAodGhpcy5jb21wb25lbnRSZWY/Lmluc3RhbmNlIGFzIE9uQ2hhbmdlcyk/Lm5nT25DaGFuZ2VzO1xuICAgIGlmIChuZ09uQ2hhbmdlcykge1xuICAgICAgbmdPbkNoYW5nZXMuY2FsbCh0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSwgY2hhbmdlcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkQ29tcG9uZW50KFxuICAgIGR5bmFtaWNDb21wb25lbnQ6IER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uLFxuICAgIGVycm9yczogRHluYW1pY0NvbXBvbmVudEFsZXJ0W10gPSBbXVxuICApIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5lcnJvciA9IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGNvbXBvbmVudFR5cGUgPSBhd2FpdCB0aGlzLmdldENvbXBvbmVudFR5cGUoZHluYW1pY0NvbXBvbmVudCk7XG5cbiAgICAgIHRoaXMuaG9zdC5jbGVhcigpO1xuICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSB0aGlzLmhvc3QuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudFR5cGUsIHtcbiAgICAgICAgZW52aXJvbm1lbnRJbmplY3RvcjogKGR5bmFtaWNDb21wb25lbnQuaW5qZWN0b3IgfHwgdGhpcy5pbmplY3RvcikgYXMgRW52aXJvbm1lbnRJbmplY3RvclxuICAgICAgfSk7XG4gICAgICB0aGlzLmNvbXBvbmVudEluc3RhbmNlID0gdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgRHluYW1pY0NvbXBvbmVudDtcbiAgICAgIHRoaXMuY29tcG9uZW50SW5zdGFuY2UuY29uZmlnID0gdGhpcy5jb25maWc7XG4gICAgICB0aGlzLmNvbXBvbmVudEluc3RhbmNlLmFsZXJ0cyA9IG5ldyBEeW5hbWljQ29tcG9uZW50QWxlcnRBZ2dyZWdhdG9yKGVycm9ycyk7XG4gICAgICB0aGlzLnN1YnNjcmliZUZvck92ZXJsYXlDaGFuZ2UoKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhpcy5lcnJvciA9IGV4O1xuICAgICAgY29uc29sZS53YXJuKGV4KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldENvbXBvbmVudFR5cGUoZHluYW1pY0NvbXBvbmVudDogRHluYW1pY0NvbXBvbmVudERlZmluaXRpb24pOiBQcm9taXNlPFR5cGU8YW55Pj4ge1xuICAgIGlmIChpc0xhenlEeW5hbWljQ29tcG9uZW50cyhkeW5hbWljQ29tcG9uZW50KSkge1xuICAgICAgY29uc3QgY29tcG9uZW50UHJvbWlzZUZ1bmN0aW9uID1cbiAgICAgICAgdGhpcy5tb2RlID09PSAnY29tcG9uZW50J1xuICAgICAgICAgID8gZHluYW1pY0NvbXBvbmVudC5sb2FkQ29tcG9uZW50XG4gICAgICAgICAgOiBkeW5hbWljQ29tcG9uZW50LmxvYWRDb25maWdDb21wb25lbnQ7XG4gICAgICBpZiAoIWNvbXBvbmVudFByb21pc2VGdW5jdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXR1cm4gYXdhaXQgY29tcG9uZW50UHJvbWlzZUZ1bmN0aW9uKCk7XG4gICAgfSBlbHNlIGlmIChpc0VhZ2VyRHluYW1pY0NvbXBvbmVudHMoZHluYW1pY0NvbXBvbmVudCkpIHtcbiAgICAgIHJldHVybiB0aGlzLm1vZGUgPT09ICdjb21wb25lbnQnXG4gICAgICAgID8gZHluYW1pY0NvbXBvbmVudC5jb21wb25lbnRcbiAgICAgICAgOiBkeW5hbWljQ29tcG9uZW50LmNvbmZpZ0NvbXBvbmVudDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZUZvck92ZXJsYXlDaGFuZ2UoKSB7XG4gICAgdGhpcy5jb21wb25lbnRJbnN0YW5jZS5hbGVydHMuYW55QWxlcnRFeGlzdHMkXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKGFueUFsZXJ0c0V4aXN0cyA9PlxuICAgICAgICB0aGlzLnVwZGF0ZVdpZGdldENsYXNzZXMuZW1pdCh7ICdhbGVydHMtb3ZlcmxheSc6IGFueUFsZXJ0c0V4aXN0cyB9KVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsbE9uQmVmb3JlU2F2ZUhvb2soKSB7XG4gICAgaWYgKCF0aGlzLmNvbXBvbmVudFJlZikge1xuICAgICAgcmV0dXJuIG9mKHRydWUpO1xuICAgIH1cbiAgICBjb25zdCBob29rID0gKHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIE9uQmVmb3JlU2F2ZSkub25CZWZvcmVTYXZlO1xuICAgIGlmIChob29rKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBob29rLmNhbGwodGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UsIHRoaXMuY29uZmlnKTtcbiAgICAgIGlmIChpc1VuZGVmaW5lZChyZXN1bHQpKSB7XG4gICAgICAgIHJldHVybiBvZih0cnVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc09ic2VydmFibGUocmVzdWx0KSA/IHJlc3VsdCA6IChvZihyZXN1bHQpIGFzIE9ic2VydmFibGU8Ym9vbGVhbj4pO1xuICAgIH1cbiAgICByZXR1cm4gb2YodHJ1ZSk7XG4gIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjaG9zdD48L25nLXRlbXBsYXRlPlxuXG48ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZyBtLThcIiByb2xlPVwiYWxlcnRcIiAqbmdJZj1cImVycm9yICYmIG5vdEZvdW5kRXJyb3JcIj5cbiAgPHN0cm9uZyBjbGFzcz1cIm1lc3NhZ2VcIj5cbiAgICB7e1xuICAgICAgJ1RoaXMgd2lkZ2V0IGNhbm5vdCBiZSByZW5kZXJlZCBiZWNhdXNlIHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBvcnQgdGhlIGZvbGxvd2luZyBjb21wb25lbnQ6J1xuICAgICAgICB8IHRyYW5zbGF0ZVxuICAgIH19XG4gICAge3sgY29tcG9uZW50SWQgfX0uXG4gIDwvc3Ryb25nPlxuICA8cCBjbGFzcz1cInRleHQtbXV0ZWQgbS10LThcIj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1jbGVhblwiIChjbGljayk9XCJleHBhbmRFcnJvckRldGFpbHMgPSAhZXhwYW5kRXJyb3JEZXRhaWxzXCI+XG4gICAgICA8aSBjOHlJY29uPVwiY2hldnJvbi1kb3duXCI+PC9pPlxuICAgICAgPHNwYW4gKm5nSWY9XCIhZXhwYW5kRXJyb3JEZXRhaWxzXCIgdHJhbnNsYXRlPlNob3cgZGV0YWlsczwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiZXhwYW5kRXJyb3JEZXRhaWxzXCIgdHJhbnNsYXRlPkhpZGUgZGV0YWlsczwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9wPlxuICA8ZGl2IFtjb2xsYXBzZV09XCIhZXhwYW5kRXJyb3JEZXRhaWxzXCIgW2lzQW5pbWF0ZWRdPVwidHJ1ZVwiPlxuICAgIDxwcmU+XG4gICAgICB7eyBlcnJvciB9fVxuICAgIDwvcHJlPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2XG4gIGNsYXNzPVwib3ZlcmxheS1jZW50ZXItdmVydGljYWxseSBkLWZsZXggZC1jb2wgYS1pLXN0cmV0Y2ggai1jLXN0YXJ0IHAtMTYgcC1yLTI0IHAtbC0yNFwiXG4gICpuZ0lmPVwiXG4gICAgZXJyb3JTdHJhdGVneSA9PT0gZHluYW1pY0NvbXBvbmVudEVycm9yU3RyYXRlZ3kuT1ZFUkxBWV9FUlJPUiAmJlxuICAgICAgY29tcG9uZW50SW5zdGFuY2U/LmFsZXJ0cz8uYW55QWxlcnRFeGlzdHMkIHwgYXN5bmNcbiAgXCJcbj5cbiAgPGM4eS1keW5hbWljLWNvbXBvbmVudC1hbGVydHMgW2FsZXJ0c109XCJjb21wb25lbnRJbnN0YW5jZS5hbGVydHNcIj48L2M4eS1keW5hbWljLWNvbXBvbmVudC1hbGVydHM+XG48L2Rpdj5cbiJdfQ==
|
|
230
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1jb21wb25lbnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9keW5hbWljLWNvbXBvbmVudC9keW5hbWljLWNvbXBvbmVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL2R5bmFtaWMtY29tcG9uZW50L2R5bmFtaWMtY29tcG9uZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUNULGdCQUFnQixFQUVoQixRQUFRLEVBS1IsWUFBWSxFQUNaLG9CQUFvQixFQUNyQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsNkJBQTZCLEVBQzdCLHVCQUF1QixFQUN2Qix3QkFBd0IsRUFFekIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsWUFBWSxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7Ozs7QUFFeEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQUtILE1BQU0sT0FBTyx5QkFBeUI7SUErQ3BDOztPQUVHO0lBQ0gsWUFDVSx1QkFBZ0QsRUFDaEQsUUFBa0I7UUFEbEIsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtR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R0FBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQXlCLENBQUMsWUFBWSxDQUFDO1FBQ3ZFLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsRSxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUN4QixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQixDQUFDO1lBQ0QsT0FBTyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBeUIsQ0FBQztRQUM3RSxDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEIsQ0FBQzs4R0EvTVUseUJBQXlCO2tHQUF6Qix5QkFBeUIsNlVBK0JULGdCQUFnQixnRUM1RjdDLDhvQ0FpQ0E7OzJGRDRCYSx5QkFBeUI7a0JBSnJDLFNBQVM7K0JBQ0UsdUJBQXVCO21IQVF4QixXQUFXO3NCQUFuQixLQUFLO2dCQUlHLE1BQU07c0JBQWQsS0FBSztnQkFLRyxJQUFJO3NCQUFaLEtBQUs7Z0JBSUcsYUFBYTtzQkFBckIsS0FBSztnQkFLRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBSUksbUJBQW1CO3NCQUE1QixNQUFNO2dCQUlzRCxJQUFJO3NCQUFoRSxTQUFTO3VCQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBDb21wb25lbnRSZWYsXG4gIEluamVjdG9yLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBPbkNoYW5nZXMsXG4gIEVudmlyb25tZW50SW5qZWN0b3IsXG4gIFR5cGUsXG4gIFNpbXBsZUNoYW5nZSxcbiAgcmVmbGVjdENvbXBvbmVudFR5cGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBEeW5hbWljQ29tcG9uZW50LFxuICBEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbixcbiAgRHluYW1pY0NvbXBvbmVudEVycm9yU3RyYXRlZ3ksXG4gIGlzTGF6eUR5bmFtaWNDb21wb25lbnRzLFxuICBpc0VhZ2VyRHluYW1pY0NvbXBvbmVudHMsXG4gIE9uQmVmb3JlU2F2ZVxufSBmcm9tICcuL2R5bmFtaWMtY29tcG9uZW50Lm1vZGVsJztcbmltcG9ydCB7IER5bmFtaWNDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnLi9keW5hbWljLWNvbXBvbmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGZsYXR0ZW4sIGdldCwgaXNVbmRlZmluZWQsIHNldCwgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IER5bmFtaWNDb21wb25lbnRBbGVydEFnZ3JlZ2F0b3IgfSBmcm9tICcuL2R5bmFtaWMtY29tcG9uZW50LWFsZXJ0LWFnZ3JlZ2F0b3InO1xuaW1wb3J0IHsgRHluYW1pY0NvbXBvbmVudEFsZXJ0IH0gZnJvbSAnLi9keW5hbWljLWNvbXBvbmVudC1hbGVydC5tb2RlbCc7XG5cbi8qKlxuICogQzh5IGR5bmFtaWMgY29tcG9uZW50LlxuICpcbiAqIHJlZ2lzdGVyIGNvbXBvbmVudCBpbiBIT09LIGluIG1vZHVsZTpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqICBpbXBvcnQgeyBob29rQ29tcG9uZW50IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG4gKlxuICogQE5nTW9kdWxlKHtcbiAqICAuLi4sXG4gKiAgcHJvdmlkZXJzOiBbXG4gKiAgICBob29rQ29tcG9uZW50KHtcbiAqICAgICAgaWQ6ICd0ZXN0LWNvbXBvbmVudCcsXG4gKiAgICAgIGxhYmVsOiAnTXkgdGVzdCBjb21wb25lbnQnLFxuICogICAgICBkZXNjcmlwdGlvbjogJ3RoaXMgaXMgdGVzdCBjb21wb25lbnQnLFxuICogICAgICBjb21wb25lbnQ6IFRlc3RDb21wb25lbnRcbiAqICAgIH0pXG4gKiAgLi4uXG4gKiAgXVxuICpcbiAqIGBgYFxuICogU2hvd2luZyBkeW5hbWljIGNvbXBvbmVudDpcbiAqIGBgYGh0bWxcbiAqIDxjOHktZHluYW1pYy1jb21wb25lbnQgW2NvbXBvbmVudElkXT1cIid0ZXN0LWNvbXBvbmVudCdcIiBbY29uZmlnXT1cImNvbmZpZ1wiPjwvYzh5LWR5bmFtaWMtY29tcG9uZW50PlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1keW5hbWljLWNvbXBvbmVudCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9keW5hbWljLWNvbXBvbmVudC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgRHluYW1pY0NvbXBvbmVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJlZ2lzdGVyZWQgY29tcG9uZW50LiBJdCBuZWVkcyB0byBiZSBhIGNvbXBvbmVudCB0aGF0IGlzIGhvb2tlZFxuICAgKiB3aXRoIHRoZSBIT09LX0NPTVBPTkVOVFMgZXh0ZW5zaW9uIGhvb2suXG4gICAqL1xuICBASW5wdXQoKSBjb21wb25lbnRJZDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gdG8gcGFzcy5cbiAgICovXG4gIEBJbnB1dCgpIGNvbmZpZzogdW5rbm93bjtcbiAgLyoqXG4gICAqIER5bmFtaWNDb21wb25lbnRzIGNhbiBoYXZlIHR3byBtb2RlcywgYW4gZWRpdCAoY29uZmlnKSBhbmQgYW4gdmlldyAoY29tcG9uZW50KSBtb2RlLlxuICAgKiBCeSBkZWZhdWx0IGl0IGlzIHNob3duIGluIHRoZSBjb21wb25lbnQgbW9kZS5cbiAgICovXG4gIEBJbnB1dCgpIG1vZGU6ICdjb25maWcnIHwgJ2NvbXBvbmVudCcgPSAnY29tcG9uZW50JztcbiAgLyoqXG4gICAqIERpc2FibGUgdGhpcyB0byBoaWRlIHRoZSBlcnJvciB0aGF0IGlzIHNob3duIGlmIHRoZSBjb21wb25lbnQgd2FzIG5vdCBmb3VuZC5cbiAgICovXG4gIEBJbnB1dCgpIG5vdEZvdW5kRXJyb3IgPSB0cnVlO1xuICAvKipcbiAgICogSWYgc2V0IHRvIHRydWUsIGl0IHdpbGwgZXhlY3V0ZSB0aGUgY29tcG9uZW50cyByZXNvbHZlcnMgYmVmb3JlIGluaXRpYWxpemluZyB0aGUgY29tcG9uZW50LlxuICAgKiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICovXG4gIEBJbnB1dCgpIGV4ZWN1dGVSZXNvbHZlcnMgPSBmYWxzZTtcbiAgLyoqXG4gICAqIEFsbG93cyB0byBzZXQgYWRkaXRpb25hbCBjbGFzc2VzIGZvciB3aWRnZXQgc3R5bGluZy5cbiAgICovXG4gIEBPdXRwdXQoKSB1cGRhdGVXaWRnZXRDbGFzc2VzID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj4oKTtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIEBWaWV3Q2hpbGQoJ2hvc3QnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYsIHN0YXRpYzogdHJ1ZSB9KSBob3N0OiBWaWV3Q29udGFpbmVyUmVmO1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgZXJyb3I6IGFueTtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGV4cGFuZEVycm9yRGV0YWlscyA9IGZhbHNlO1xuICBjb21wb25lbnRJbnN0YW5jZTogRHluYW1pY0NvbXBvbmVudDtcbiAgZXJyb3JTdHJhdGVneTogRHluYW1pY0NvbXBvbmVudEVycm9yU3RyYXRlZ3k7XG4gIGR5bmFtaWNDb21wb25lbnRFcnJvclN0cmF0ZWd5OiB0eXBlb2YgRHluYW1pY0NvbXBvbmVudEVycm9yU3RyYXRlZ3kgPVxuICAgIER5bmFtaWNDb21wb25lbnRFcnJvclN0cmF0ZWd5O1xuICBwcml2YXRlIGRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxDb21wb25lbnQ+O1xuXG4gIC8qKlxuICAgKiBAaWdub3JlIG9ubHkgRElcbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZHluYW1pY0NvbXBvbmVudFNlcnZpY2U6IER5bmFtaWNDb21wb25lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yXG4gICkge31cblxuICAvKipcbiAgICogQ2FsbHMgdGhlIGR5bmFtaWMgY29tcG9uZW50IGxpZmUgY3ljbGUgaG9vay4gQ3VycmVudGx5IG9ubHlcbiAgICogc3VwcG9ydGluZyBvbkJlZm9yZVNhdmUsIGEgaG9vayB3aGljaCBpcyBjYWxsZWQgYmVmb3JlIGEgY29uZmlnIGNvbXBvbmVudFxuICAgKiBpcyBzYXZlZC5cbiAgICovXG4gIGNhbGxMaWZlQ3ljbGVIb29rcygpIHtcbiAgICByZXR1cm4gdGhpcy5jYWxsT25CZWZvcmVTYXZlSG9vaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBjb25zdCBjbXAgPSBhd2FpdCB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLmdldEJ5SWQodGhpcy5jb21wb25lbnRJZCk7XG4gICAgbGV0IGVycm9ycyA9IG5ldyBBcnJheTxEeW5hbWljQ29tcG9uZW50QWxlcnQ+KCk7XG4gICAgaWYgKGNtcCkge1xuICAgICAgdGhpcy5lcnJvclN0cmF0ZWd5ID0gY21wLmVycm9yU3RyYXRlZ3kgfHwgRHluYW1pY0NvbXBvbmVudEVycm9yU3RyYXRlZ3kuQ1VTVE9NO1xuICAgICAgaWYgKHRoaXMuZXhlY3V0ZVJlc29sdmVycykge1xuICAgICAgICBjb25zdCBbcmVzb2x2ZWRDb25maWddID0gYXdhaXQgdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5leGVjdXRlUmVzb2x2ZXJzKFtcbiAgICAgICAgICB7IGNvbXBvbmVudElkOiB0aGlzLmNvbXBvbmVudElkLCBjb25maWc6IHRoaXMuY29uZmlnIH1cbiAgICAgICAgXSk7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHJlc29sdmVkQ29uZmlnKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHNldCh0aGlzLmNvbmZpZywga2V5LCB2YWx1ZSkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXNvbHZlZFZhbHVlc09mQ29uZmlndXJhdGlvbjogQXJyYXk8RHluYW1pY0NvbXBvbmVudEFsZXJ0IHwgRHluYW1pY0NvbXBvbmVudEFsZXJ0W10+ID1cbiAgICAgICAgY21wLnJlc29sdmVcbiAgICAgICAgICA/IE9iamVjdC5rZXlzKGNtcC5yZXNvbHZlKS5tYXAocmVzb2x2ZWRLZXkgPT4gZ2V0KHRoaXMuY29uZmlnLCByZXNvbHZlZEtleSkpXG4gICAgICAgICAgOiBbXTtcbiAgICAgIGNvbnN0IGZsYXR0ZW5lZFJlc29sdmVkVmFsdWVzT2ZDb25maWd1cmF0aW9uID0gZmxhdHRlbihyZXNvbHZlZFZhbHVlc09mQ29uZmlndXJhdGlvbik7XG4gICAgICBlcnJvcnMgPSBmbGF0dGVuZWRSZXNvbHZlZFZhbHVlc09mQ29uZmlndXJhdGlvbi5maWx0ZXIoXG4gICAgICAgIHBvdGVudGlhbEVycm9yID0+IHBvdGVudGlhbEVycm9yICYmIHBvdGVudGlhbEVycm9yIGluc3RhbmNlb2YgRHluYW1pY0NvbXBvbmVudEFsZXJ0XG4gICAgICApO1xuICAgICAgaWYgKGVycm9ycy5sZW5ndGggJiYgY21wLmVycm9yU3RyYXRlZ3kgPT09IER5bmFtaWNDb21wb25lbnRFcnJvclN0cmF0ZWd5Lk5PVF9SRU5ERVIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubW9kZSA9PSAnY29uZmlnJyAmJiAhY21wLmxvYWRDb25maWdDb21wb25lbnQgJiYgIWNtcC5jb25maWdDb21wb25lbnQpIHtcbiAgICAgICAgdGhpcy5ob3N0LmNsZWFyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmxvYWRDb21wb25lbnQoY21wLCBlcnJvcnMpO1xuICAgIHRoaXMuZW1pdENoYW5nZU9uQ29tcG9uZW50KGNoYW5nZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIGFuIG91dHNpZGUgY29tcG9uZW50IGNoYW5nZXMgdGhlIGNvbmZpZ3VyYXRpb24sIHRoaXMgZnVuY3Rpb24gdHJpZ2dlcnMgbmdPbkNoYW5nZSBvbiB0aGUgZHluYW1pYyBjb21wb25lbnQuXG4gICAqIEBwYXJhbSBuZXdDb25maWdWYWx1ZXMgVGhlIG5ldyBjb25maWd1cmF0aW9uIHZhbHVlLlxuICAgKi9cbiAgZW1pdENvbmZpZ0NoYW5nZShuZXdDb25maWdWYWx1ZXM6IHVua25vd24pIHtcbiAgICBpZiAoIXRoaXMuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb2xkQ29uZmlnID0gY2xvbmVEZWVwKHRoaXMuY29uZmlnKTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuY29uZmlnLCBuZXdDb25maWdWYWx1ZXMpO1xuICAgIHRoaXMuY29tcG9uZW50SW5zdGFuY2UuY29uZmlnID0gdGhpcy5jb25maWc7XG4gICAgdGhpcy5lbWl0Q2hhbmdlT25Db21wb25lbnQoeyBjb25maWc6IG5ldyBTaW1wbGVDaGFuZ2Uob2xkQ29uZmlnLCB0aGlzLmNvbmZpZywgZmFsc2UpIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0Q2hhbmdlT25Db21wb25lbnQoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGNvbnN0IG5nT25DaGFuZ2VzID0gKHRoaXMuY29tcG9uZW50UmVmPy5pbnN0YW5jZSBhcyBPbkNoYW5nZXMpPy5uZ09uQ2hhbmdlcztcbiAgICBpZiAobmdPbkNoYW5nZXMpIHtcbiAgICAgIG5nT25DaGFuZ2VzLmNhbGwodGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UsIGNoYW5nZXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZENvbXBvbmVudChcbiAgICBkeW5hbWljQ29tcG9uZW50OiBEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbixcbiAgICBlcnJvcnM6IER5bmFtaWNDb21wb25lbnRBbGVydFtdID0gW11cbiAgKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBjb21wb25lbnRUeXBlID0gYXdhaXQgdGhpcy5nZXRDb21wb25lbnRUeXBlKGR5bmFtaWNDb21wb25lbnQpO1xuXG4gICAgICB0aGlzLmhvc3QuY2xlYXIoKTtcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy5ob3N0LmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRUeXBlLCB7XG4gICAgICAgIGVudmlyb25tZW50SW5qZWN0b3I6IChkeW5hbWljQ29tcG9uZW50LmluamVjdG9yIHx8IHRoaXMuaW5qZWN0b3IpIGFzIEVudmlyb25tZW50SW5qZWN0b3JcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jb21wb25lbnRJbnN0YW5jZSA9IHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIER5bmFtaWNDb21wb25lbnQ7XG5cbiAgICAgIGNvbnN0IGNvbXBvbmVudE1ldGFkYXRhID0gdGhpcy5zYWZlUmVmbGVjdENvbXBvbmVudFR5cGUoY29tcG9uZW50VHlwZSk7XG4gICAgICBjb25zdCBoYXNDb25maWdJbnB1dCA9IGNvbXBvbmVudE1ldGFkYXRhPy5pbnB1dHMuc29tZShpbnB1dCA9PiBpbnB1dC5wcm9wTmFtZSA9PT0gJ2NvbmZpZycpO1xuICAgICAgaWYgKGhhc0NvbmZpZ0lucHV0KSB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdjb25maWcnLCB0aGlzLmNvbmZpZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbXBvbmVudEluc3RhbmNlLmNvbmZpZyA9IHRoaXMuY29uZmlnO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNvbXBvbmVudEluc3RhbmNlLmFsZXJ0cyA9IG5ldyBEeW5hbWljQ29tcG9uZW50QWxlcnRBZ2dyZWdhdG9yKGVycm9ycyk7XG4gICAgICB0aGlzLnN1YnNjcmliZUZvck92ZXJsYXlDaGFuZ2UoKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhpcy5lcnJvciA9IGV4O1xuICAgICAgY29uc29sZS53YXJuKGV4KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2FmZWx5IHJlZmxlY3RzIHRoZSBjb21wb25lbnQgbWV0YWRhdGEuXG4gICAqIElmIHJlZmxlY3Rpb24gZmFpbHMsIGl0IHJldHVybnMgYSBkZWZhdWx0IG9iamVjdCB3aXRoIGFuIGVtcHR5IGlucHV0cyBhcnJheS5cbiAgICovXG4gIHByaXZhdGUgc2FmZVJlZmxlY3RDb21wb25lbnRUeXBlKGNvbXBvbmVudFR5cGU6IFR5cGU8YW55Pikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcmVmbGVjdENvbXBvbmVudFR5cGUoY29tcG9uZW50VHlwZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIHJlZmxlY3QgY29tcG9uZW50IG1ldGFkYXRhOicsIGVycm9yKTtcbiAgICAgIHJldHVybiB7IGlucHV0czogW10gfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldENvbXBvbmVudFR5cGUoZHluYW1pY0NvbXBvbmVudDogRHluYW1pY0NvbXBvbmVudERlZmluaXRpb24pOiBQcm9taXNlPFR5cGU8YW55Pj4ge1xuICAgIGlmIChpc0xhenlEeW5hbWljQ29tcG9uZW50cyhkeW5hbWljQ29tcG9uZW50KSkge1xuICAgICAgY29uc3QgY29tcG9uZW50UHJvbWlzZUZ1bmN0aW9uID1cbiAgICAgICAgdGhpcy5tb2RlID09PSAnY29tcG9uZW50J1xuICAgICAgICAgID8gZHluYW1pY0NvbXBvbmVudC5sb2FkQ29tcG9uZW50XG4gICAgICAgICAgOiBkeW5hbWljQ29tcG9uZW50LmxvYWRDb25maWdDb21wb25lbnQ7XG4gICAgICBpZiAoIWNvbXBvbmVudFByb21pc2VGdW5jdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXR1cm4gYXdhaXQgY29tcG9uZW50UHJvbWlzZUZ1bmN0aW9uKCk7XG4gICAgfSBlbHNlIGlmIChpc0VhZ2VyRHluYW1pY0NvbXBvbmVudHMoZHluYW1pY0NvbXBvbmVudCkpIHtcbiAgICAgIHJldHVybiB0aGlzLm1vZGUgPT09ICdjb21wb25lbnQnXG4gICAgICAgID8gZHluYW1pY0NvbXBvbmVudC5jb21wb25lbnRcbiAgICAgICAgOiBkeW5hbWljQ29tcG9uZW50LmNvbmZpZ0NvbXBvbmVudDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZUZvck92ZXJsYXlDaGFuZ2UoKSB7XG4gICAgdGhpcy5jb21wb25lbnRJbnN0YW5jZS5hbGVydHMuYW55QWxlcnRFeGlzdHMkXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKGFueUFsZXJ0c0V4aXN0cyA9PlxuICAgICAgICB0aGlzLnVwZGF0ZVdpZGdldENsYXNzZXMuZW1pdCh7ICdhbGVydHMtb3ZlcmxheSc6IGFueUFsZXJ0c0V4aXN0cyB9KVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsbE9uQmVmb3JlU2F2ZUhvb2soKSB7XG4gICAgaWYgKCF0aGlzLmNvbXBvbmVudFJlZikge1xuICAgICAgcmV0dXJuIG9mKHRydWUpO1xuICAgIH1cbiAgICBjb25zdCBob29rID0gKHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIE9uQmVmb3JlU2F2ZSkub25CZWZvcmVTYXZlO1xuICAgIGlmIChob29rKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBob29rLmNhbGwodGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UsIHRoaXMuY29uZmlnKTtcbiAgICAgIGlmIChpc1VuZGVmaW5lZChyZXN1bHQpKSB7XG4gICAgICAgIHJldHVybiBvZih0cnVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc09ic2VydmFibGUocmVzdWx0KSA/IHJlc3VsdCA6IChvZihyZXN1bHQpIGFzIE9ic2VydmFibGU8Ym9vbGVhbj4pO1xuICAgIH1cbiAgICByZXR1cm4gb2YodHJ1ZSk7XG4gIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjaG9zdD48L25nLXRlbXBsYXRlPlxuXG48ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZyBtLThcIiByb2xlPVwiYWxlcnRcIiAqbmdJZj1cImVycm9yICYmIG5vdEZvdW5kRXJyb3JcIj5cbiAgPHN0cm9uZyBjbGFzcz1cIm1lc3NhZ2VcIj5cbiAgICB7e1xuICAgICAgJ1RoaXMgd2lkZ2V0IGNhbm5vdCBiZSByZW5kZXJlZCBiZWNhdXNlIHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBvcnQgdGhlIGZvbGxvd2luZyBjb21wb25lbnQ6J1xuICAgICAgICB8IHRyYW5zbGF0ZVxuICAgIH19XG4gICAge3sgY29tcG9uZW50SWQgfX0uXG4gIDwvc3Ryb25nPlxuICA8cCBjbGFzcz1cInRleHQtbXV0ZWQgbS10LThcIj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1jbGVhblwiIChjbGljayk9XCJleHBhbmRFcnJvckRldGFpbHMgPSAhZXhwYW5kRXJyb3JEZXRhaWxzXCI+XG4gICAgICA8aSBjOHlJY29uPVwiY2hldnJvbi1kb3duXCI+PC9pPlxuICAgICAgPHNwYW4gKm5nSWY9XCIhZXhwYW5kRXJyb3JEZXRhaWxzXCIgdHJhbnNsYXRlPlNob3cgZGV0YWlsczwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiZXhwYW5kRXJyb3JEZXRhaWxzXCIgdHJhbnNsYXRlPkhpZGUgZGV0YWlsczwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9wPlxuICA8ZGl2IFtjb2xsYXBzZV09XCIhZXhwYW5kRXJyb3JEZXRhaWxzXCIgW2lzQW5pbWF0ZWRdPVwidHJ1ZVwiPlxuICAgIDxwcmU+XG4gICAgICB7eyBlcnJvciB9fVxuICAgIDwvcHJlPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2XG4gIGNsYXNzPVwib3ZlcmxheS1jZW50ZXItdmVydGljYWxseSBkLWZsZXggZC1jb2wgYS1pLXN0cmV0Y2ggai1jLXN0YXJ0IHAtMTYgcC1yLTI0IHAtbC0yNFwiXG4gICpuZ0lmPVwiXG4gICAgZXJyb3JTdHJhdGVneSA9PT0gZHluYW1pY0NvbXBvbmVudEVycm9yU3RyYXRlZ3kuT1ZFUkxBWV9FUlJPUiAmJlxuICAgICAgY29tcG9uZW50SW5zdGFuY2U/LmFsZXJ0cz8uYW55QWxlcnRFeGlzdHMkIHwgYXN5bmNcbiAgXCJcbj5cbiAgPGM4eS1keW5hbWljLWNvbXBvbmVudC1hbGVydHMgW2FsZXJ0c109XCJjb21wb25lbnRJbnN0YW5jZS5hbGVydHNcIj48L2M4eS1keW5hbWljLWNvbXBvbmVudC1hbGVydHM+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -136,6 +136,12 @@ export class PluginsService {
|
|
|
136
136
|
return undefined;
|
|
137
137
|
}
|
|
138
138
|
}
|
|
139
|
+
async resetRemotes(application) {
|
|
140
|
+
return await this.applicationService.updateApplicationConfig(application, {
|
|
141
|
+
remotes: undefined,
|
|
142
|
+
excludedRemotes: undefined
|
|
143
|
+
});
|
|
144
|
+
}
|
|
139
145
|
sortVersions(source, order) {
|
|
140
146
|
const sourceCopy = cloneDeep(source);
|
|
141
147
|
if (source.list && source.path) {
|
|
@@ -389,4 +395,4 @@ export class PluginsService {
|
|
|
389
395
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: PluginsService, decorators: [{
|
|
390
396
|
type: Injectable
|
|
391
397
|
}], ctorParameters: () => [{ type: i1.ApplicationService }, { type: i2.AppStateService }] });
|
|
392
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9wbHVnaW5zL3BsdWdpbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFDTCx1QkFBdUIsRUFLeEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQXFCLFdBQVcsRUFBaUIsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7OztBQUdsRSxNQUFNLE9BQU8sY0FBYztJQUN6QixNQUFNLENBQUMsNEJBQTRCLENBQUMsT0FBaUM7UUFDbkUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEQsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ25CLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUN2QyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQy9DLE9B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LENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xFLElBQUksV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDMUMsT0FBTyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbEMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVPLGFBQWEsQ0FBQyxFQUFVO1FBQzlCLE1BQU0sQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQ3JDLENBQUM7OEdBcGZVLGNBQWM7a0hBQWQsY0FBYzs7MkZBQWQsY0FBYztrQkFEMUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFwcGxpY2F0aW9uQXZhaWxhYmlsaXR5LFxuICBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMsXG4gIElBcHBsaWNhdGlvbixcbiAgSUFwcGxpY2F0aW9uVmVyc2lvbixcbiAgSU1hbmlmZXN0XG59IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFwcGxpY2F0aW9uU2VydmljZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IGNsb25lRGVlcCwgZ2V0LCB1bmlxQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgY29lcmNlLCBjb21wYXJlIH0gZnJvbSAnc2VtdmVyJztcbmltcG9ydCB7IEFwcFN0YXRlU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi91aS1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IGdyb3VwQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25QbHVnaW4sIFBhY2thZ2VUeXBlLCBQbHVnaW5zQ29uZmlnIH0gZnJvbSAnLi9wbHVnaW5zLm1vZGVsJztcbmltcG9ydCB7IFBsdWdpbnNFeHBvcnRTY29wZXMgfSBmcm9tICcuLi9jb21tb24vQXBwbGljYXRpb25PcHRpb25zJztcbmltcG9ydCB7IFBsdWdpbnNSZXNvbHZlU2VydmljZSB9IGZyb20gJy4vcGx1Z2lucy1yZXNvbHZlLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUGx1Z2luc1NlcnZpY2Uge1xuICBzdGF0aWMgY29udmVydEluc3RhbGxlZFJlbW90ZXNUb0lkcyhyZW1vdGVzOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCFyZW1vdGVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGltcG9ydENvbnRleHRQYXRocyA9IE9iamVjdC5rZXlzKHJlbW90ZXMpO1xuICAgIGNvbnN0IHBsdWdpbnMgPSBbXTtcbiAgICBpbXBvcnRDb250ZXh0UGF0aHMuZm9yRWFjaChjb250ZXh0UGF0aCA9PiB7XG4gICAgICBjb25zdCBtb2R1bGVOYW1lcyA9IHJlbW90ZXNbY29udGV4dFBhdGhdIHx8IFtdO1xuICAgICAgcGx1Z2lucy5wdXNoKFxuICAgICAgICAuLi5tb2R1bGVOYW1lcy5tYXAobW9kdWxlID0+IFBsdWdpbnNTZXJ2aWNlLmNyZWF0ZVBsdWdpbklkKGNvbnRleHRQYXRoLCBtb2R1bGUsICcnLCB0cnVlKSlcbiAgICAgICk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHBsdWdpbnM7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlUGx1Z2luSWQoXG4gICAgY29udGV4dFBhdGg6IHN0cmluZyxcbiAgICBwbHVnaW46IEFwcGxpY2F0aW9uUGx1Z2luIHwgc3RyaW5nLFxuICAgIHZlcnNpb246IHN0cmluZyxcbiAgICB1c2VMYXRlc3QgPSBmYWxzZVxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IG1vZHVsZU5hbWUgPSB0eXBlb2YgcGx1Z2luID09PSAnc3RyaW5nJyA/IHBsdWdpbiA6IHBsdWdpbi5tb2R1bGU7XG4gICAgaWYgKHVzZUxhdGVzdCkge1xuICAgICAgcmV0dXJuIGAke2NvbnRleHRQYXRofS8ke21vZHVsZU5hbWV9YDtcbiAgICB9XG4gICAgcmV0dXJuIGAke2NvbnRleHRQYXRofUAke3ZlcnNpb259LyR7bW9kdWxlTmFtZX1gO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcHBsaWNhdGlvblNlcnZpY2U6IEFwcGxpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGFwcFN0YXRlU2VydmljZTogQXBwU3RhdGVTZXJ2aWNlXG4gICkge31cblxuICAvKipcbiAgICogRmV0Y2hlcyBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhY2thZ2VzLlxuICAgKiBAcGFyYW0gcGFyYW1zIEFkZGl0aW9uYWwgcXVlcnkgcGFyYW1ldGVycy5cbiAgICogQHJldHVybnMgUmV0dXJucyBhIGxpc3Qgb2YgcGFja2FnZXMuXG4gICAqL1xuICBhc3luYyBsaXN0UGFja2FnZXMocGFyYW1zOiBhbnkgPSB7fSk6IFByb21pc2U8SUFwcGxpY2F0aW9uW10+IHtcbiAgICBjb25zdCBhcHBzID0gYXdhaXQgdGhpcy5saXN0QXBwbGljYXRpb25zQnlDdXJyZW50VGVuYW50KHBhcmFtcyk7XG4gICAgY29uc3Qgd2ViQXBwcyA9IGFwcHMuZmlsdGVyKGFwcCA9PiB0aGlzLmlzUGFja2FnZShhcHApKTtcbiAgICBjb25zdCB1bmlxdWVXZWJBcHBzID0gdGhpcy5yZW1vdmVEdXBsaWNhdGVzKHdlYkFwcHMsICdjb250ZXh0UGF0aCcpO1xuICAgIHJldHVybiB1bmlxdWVXZWJBcHBzLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhbiBhcHBsaWNhdGlvbiBpcyBhIHBhY2thZ2UuXG4gICAqIEBwYXJhbSBhcHBsaWNhdGlvbiBBcHBsaWNhdGlvbiBtYW5hZ2VkIG9iamVjdC5cbiAgICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIHRoZSBhcHBsaWNhdGlvbiBpcyBhIHBhY2thZ2UuXG4gICAqL1xuICBpc1BhY2thZ2UoYXBwbGljYXRpb246IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhcHBsaWNhdGlvbi5tYW5pZmVzdD8uaXNQYWNrYWdlID09PSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHJlbW90ZXMgZmllbGQgaW4gdGhlIGFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24gYnkgYWRkaW5nIG5ldyBwbHVnaW5zLlxuICAgKiBJbXBvcnRhbnQ6IGlmIHRoZSByZW1vdGVzIG9iamVjdCBpcyBub3Qgc2V0IG9uIHRoZSBjb25maWd1cmF0aW9uIG9iamVjdCxcbiAgICogcmVtb3RlcyB3aWxsIG5vdCBiZSBhZGRlZC4gTWFrZSBzdXJlIHRoYXQgdGhpcyBvYmplY3QgZXhpc3RzIGluIHRoZSBhcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uLlxuICAgKiBAcGFyYW0gYXBwbGljYXRpb24gQXBwbGljYXRpb24gbWFuYWdlZCBvYmplY3QuXG4gICAqIEBwYXJhbSBwbHVnaW5zIExpc3Qgb2YgcmVtb3RlcyB0byBiZSBhZGRlZC5cbiAgICogQHJldHVybnMgUmV0dXJucyB1cGRhdGVkIGFwcGxpY2F0aW9uIHJlbW90ZXMuXG4gICAqL1xuICBhc3luYyBhZGRSZW1vdGVzKFxuICAgIGFwcGxpY2F0aW9uOiBJQXBwbGljYXRpb24sXG4gICAgcGx1Z2luczogQXBwbGljYXRpb25QbHVnaW4gfCBBcHBsaWNhdGlvblBsdWdpbltdXG4gICk6IFByb21pc2U8UGx1Z2luc0NvbmZpZz4ge1xuICAgIGNvbnN0IHBsdWdpbnNBcnJheSA9IEFycmF5LmlzQXJyYXkocGx1Z2lucykgPyBwbHVnaW5zIDogW3BsdWdpbnNdO1xuICAgIGNvbnN0IG1hbmlmZXN0UmVtb3RlcyA9IGFwcGxpY2F0aW9uLm1hbmlmZXN0Py5yZW1vdGVzIHx8IHt9O1xuICAgIGNvbnN0IGFwcENvbmZpZzogUGx1Z2luc0NvbmZpZyB8IHVuZGVmaW5lZCA9IGFwcGxpY2F0aW9uPy5jb25maWcgYXMgUGx1Z2luc0NvbmZpZztcbiAgICBjb25zdCBhcHBDb25maWdSZW1vdGVzID0gYXBwQ29uZmlnPy5yZW1vdGVzIHx8IG1hbmlmZXN0UmVtb3RlcztcbiAgICBjb25zdCBhcHBDb25maWdFeGNsdWRlZFJlbW90ZXMgPSBhcHBDb25maWc/LmV4Y2x1ZGVkUmVtb3RlcyB8fCB7fTtcbiAgICAvLyBvbmx5IG5vcm1hbCBhbmQgc2VsZiBvcHRpb25hbCBzY29wZWQgcGx1Z2lucyBzaG91bGQgYmUgYWRkZWQgdG8gcmVtb3Rlc1xuICAgIC8vIHNlbGYgc2NvcGVkIHBsdWdpbnMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGFkZGVkXG4gICAgY29uc3QgYWxsUGx1Z2luc0V4Y2VwdFNlbGZTY29wZWQgPSB0aGlzLmdldEFsbFBsdWdpbnNFeGNlcHRTZWxmU2NvcGVkKFxuICAgICAgcGx1Z2luc0FycmF5LFxuICAgICAgYXBwbGljYXRpb24uY29udGV4dFBhdGhcbiAgICApO1xuICAgIGNvbnN0IG5ld1JlbW90ZXMgPSB0aGlzLmFkZFBsdWdpblRvUmVtb3Rlc0NvbmZpZyhhcHBDb25maWdSZW1vdGVzLCBhbGxQbHVnaW5zRXhjZXB0U2VsZlNjb3BlZCk7XG4gICAgLy8gc2hvdWxkIGJlIHVucHJvYmxlbWF0aWMgdG8gcmVtb3ZlIGFsbCBjYXRlZ29yaWVzIG9mIHBsdWdpbnMgZnJvbSBleGNsdWRlZCByZW1vdGVzXG4gICAgY29uc3QgbmV3RXhjbHVkZWRSZW1vdGVzID0gdGhpcy5yZW1vdmVQbHVnaW5zRnJvbVJlbW90ZXNDb25maWcoXG4gICAgICBhcHBDb25maWdFeGNsdWRlZFJlbW90ZXMsXG4gICAgICBwbHVnaW5zXG4gICAgKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy51cGRhdGVSZW1vdGVzSW5BcHBDb25maWcoYXBwbGljYXRpb24sIG5ld1JlbW90ZXMsIG5ld0V4Y2x1ZGVkUmVtb3Rlcyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcmVtb3RlcyBmaWVsZCBpbiB0aGUgYXBwbGljYXRpb24gY29uZmlndXJhdGlvbiBieSByZW1vdmluZyBwbHVnaW5zLlxuICAgKiBAcGFyYW0gYXBwbGljYXRpb24gQXBwbGljYXRpb24gbWFuYWdlZCBvYmplY3QuXG4gICAqIEBwYXJhbSBwbHVnaW5zIExpc3Qgb2YgcmVtb3RlcyB0byBiZSByZW1vdmVkLlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIHVwZGF0ZWQgYXBwbGljYXRpb24gcmVtb3Rlcy5cbiAgICovXG4gIGFzeW5jIHJlbW92ZVJlbW90ZXMoXG4gICAgYXBwbGljYXRpb246IElBcHBsaWNhdGlvbixcbiAgICBwbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbiB8IEFwcGxpY2F0aW9uUGx1Z2luW11cbiAgKTogUHJvbWlzZTxQbHVnaW5zQ29uZmlnPiB7XG4gICAgY29uc3QgcGx1Z2luc0FycmF5ID0gQXJyYXkuaXNBcnJheShwbHVnaW5zKSA/IHBsdWdpbnMgOiBbcGx1Z2luc107XG4gICAgY29uc3QgbWFuaWZlc3RSZW1vdGVzID0gYXBwbGljYXRpb24ubWFuaWZlc3Q/LnJlbW90ZXMgfHwge307XG4gICAgY29uc3QgYXBwQ29uZmlnOiBQbHVnaW5zQ29uZmlnIHwgdW5kZWZpbmVkID0gYXBwbGljYXRpb24/LmNvbmZpZyBhcyBQbHVnaW5zQ29uZmlnO1xuICAgIGNvbnN0IGFwcENvbmZpZ1JlbW90ZXMgPSBhcHBDb25maWc/LnJlbW90ZXMgfHwgbWFuaWZlc3RSZW1vdGVzO1xuICAgIGNvbnN0IGFwcENvbmZpZ0V4Y2x1ZGVkUmVtb3RlcyA9IGFwcENvbmZpZz8uZXhjbHVkZWRSZW1vdGVzIHx8IHt9O1xuICAgIC8vIGFwcCBwbHVnaW5zIG5lZWQgdG8gYmUgcmVtb3ZlZCBmcm9tIHJlbW90ZXNcbiAgICBjb25zdCBuZXdSZW1vdGVzID0gdGhpcy5yZW1vdmVQbHVnaW5zRnJvbVJlbW90ZXNDb25maWcoYXBwQ29uZmlnUmVtb3RlcywgcGx1Z2lucyk7XG4gICAgLy8gc2VsZiBzY29wZWQgcGx1Z2lucyBuZWVkIHRvIGJlIGFkZGVkIHRvIGV4Y2x1ZGVkIHJlbW90ZXNcbiAgICAvLyBhcyB0aGV5IHdvdWxkIGJlIG90aGVyd2lzZSBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIHJlbW90ZXNcbiAgICBjb25zdCBzZWxmU2NvcGVkUGx1Z2lucyA9IHRoaXMuZ2V0U2VsZlNjb3BlZFBsdWdpbnMocGx1Z2luc0FycmF5LCBhcHBsaWNhdGlvbi5jb250ZXh0UGF0aCk7XG4gICAgY29uc3QgbmV3RXhjbHVkZWRSZW1vdGVzID0gdGhpcy5hZGRQbHVnaW5Ub1JlbW90ZXNDb25maWcoXG4gICAgICBhcHBDb25maWdFeGNsdWRlZFJlbW90ZXMsXG4gICAgICBzZWxmU2NvcGVkUGx1Z2luc1xuICAgICk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMudXBkYXRlUmVtb3Rlc0luQXBwQ29uZmlnKGFwcGxpY2F0aW9uLCBuZXdSZW1vdGVzLCBuZXdFeGNsdWRlZFJlbW90ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHJlbW90ZXMgZmllbGQgaW4gdGhlIGFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBwYXJhbSBhcHBsaWNhdGlvbiBBcHBsaWNhdGlvbiBtYW5hZ2VkIG9iamVjdC5cbiAgICogQHBhcmFtIHBsdWdpbnMgTGlzdCBvZiByZW1vdGVzIHRvIGJlIGFkZGVkLlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIHVwZGF0ZWQgYXBwbGljYXRpb24gcmVtb3Rlcy5cbiAgICovXG4gIGFzeW5jIHVwZGF0ZVJlbW90ZXNJbkFwcENvbmZpZyhcbiAgICBhcHBsaWNhdGlvbjogSUFwcGxpY2F0aW9uLFxuICAgIHBsdWdpbnM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyxcbiAgICBleGNsdWRlZFJlbW90ZXM/OiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnNcbiAgKTogUHJvbWlzZTxQbHVnaW5zQ29uZmlnPiB7XG4gICAgY29uc3QgdXBkYXRlZEFwcFdpdGhDb25maWcgPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS51cGRhdGVBcHBsaWNhdGlvbkNvbmZpZyhcbiAgICAgIGFwcGxpY2F0aW9uLFxuICAgICAge1xuICAgICAgICByZW1vdGVzOiBwbHVnaW5zLFxuICAgICAgICBleGNsdWRlZFJlbW90ZXM6IGV4Y2x1ZGVkUmVtb3RlcyB8fCB7fVxuICAgICAgfSBhcyBQbHVnaW5zQ29uZmlnXG4gICAgKTtcbiAgICByZXR1cm4gdXBkYXRlZEFwcFdpdGhDb25maWc/LmNvbmZpZyB8fCB7IHJlbW90ZXM6IHt9IH07XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgYXBwbGljYXRpb24gbWFuaWZlc3QuXG4gICAqIEBwYXJhbSBhcHBsaWNhdGlvbiBBcHBsaWNhdGlvbiBtYW5hZ2VkIG9iamVjdC5cbiAgICogQHJldHVybnMgUmV0dXJucyB0aGUgYXBwbGljYXRpb24gbWFuaWZlc3QuXG4gICAqL1xuICBhc3luYyBnZXRDdW11bG9jaXR5SnNvbkZpbGUoYXBwbGljYXRpb246IElBcHBsaWNhdGlvbikge1xuICAgIGNvbnN0IGM4eUpzb24gPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5nZXRBcHBNYW5pZmVzdChhcHBsaWNhdGlvbik7XG4gICAgaWYgKCFjOHlKc29uLnJlbW90ZXMpIHtcbiAgICAgIGM4eUpzb24ucmVtb3RlcyA9IHt9O1xuICAgIH1cbiAgICByZXR1cm4gYzh5SnNvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBpbml0aWFsIHN0YXRlIG9mIHJlbW90ZXMgaW4gdGhlIGNvbmZpZ3VyYXRpb24gKHdoZW4gaXQncyBtaXNzaW5nKSwgYmFzZWQgb24gdGhlIGxpc3Qgb2YgcmVtb3RlcyBiZWluZyBpbiB0aGUgYXBwbGljYXRpb24gbWFuaWZlc3QuXG4gICAqIEBwYXJhbSBhcHBsaWNhdGlvbiAgQXBwbGljYXRpb24gbWFuYWdlZCBvYmplY3QuXG4gICAqIEByZXR1cm5zIFJldHVybnMgYSBsaXN0IG9mIHJlbW90ZXMgdGhhdCBoYXMgYmVlbiBhc3NpZ25lZCB0byB0aGUgY29uZmlndXJhdGlvbiBvYmplY3QuXG4gICAqL1xuICBhc3luYyBzZXRJbml0aWFsUmVtb3RlcyhhcHBsaWNhdGlvbjogSUFwcGxpY2F0aW9uKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1hbmlmZXN0OiBJTWFuaWZlc3QgPSBhd2FpdCB0aGlzLmdldEN1bXVsb2NpdHlKc29uRmlsZShhcHBsaWNhdGlvbik7XG4gICAgICBjb25zdCBtYW5pZmVzdFJlbW90ZXM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyA9IG1hbmlmZXN0LnJlbW90ZXM7XG5cbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnVwZGF0ZVJlbW90ZXNJbkFwcENvbmZpZyhhcHBsaWNhdGlvbiwgbWFuaWZlc3RSZW1vdGVzIHx8IHt9LCB7fSk7XG4gICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNvcnRzIHZlcnNpb25zIGxpc3Qgb3IgbGlzdCBvZiBvYmplY3RzIGJ5IHZlcnNpb24gcHJvcGVydHlcbiAgICogQHJldHVybnMgbGlzdCBvZiB2ZXJzaW9ucyBhcyBhcnJheSBvZiBzdHJpbmdzIG9yIGFycmF5IG9mIG9iamVjdHMgc29ydGVkIGJ5IHZlcnNpb24gcHJvcGVydHlcbiAgICpcbiAgICogQHBhcmFtIHt7IGxpc3Q6IFRbXTsgcGF0aDogc3RyaW5nW10gfSB8IHN0cmluZ1tdfSBzb3VyY2UgZGF0YSB0byBzb3J0XG4gICAqIEBwYXJhbSB7J2FzYycgfCAnZGVzYyd9IG9yZGVyIGFzY2VuZGluZyBvciBkZXNjZW5kaW5nIG9yZGVyIG9mIHNvcnRpbmdcbiAgICpcbiAgICogKipFeGFtcGxlKipcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBkYXRhID0gWycxLjUuMCcsICcyLjAuMCddO1xuICAgKiBjb25zdCBzb3J0ZWREYXRhID0gcGx1Z2luc1NlcnZpY2Uuc29ydFZlcnNpb25zKHZlcnNpb25zLCAnZGVzYycpO1xuICAgKiAvLyBzb3J0ZWREYXRhOlxuICAgKiAvLyBbJzIuMC4wJywgJzEuNS4wJ11cbiAgICogYGBgXG4gICAqXG4gICAqICoqRXhhbXBsZSoqXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgZGF0YSA9IFtcbiAgICogIHthcHA6IHthcHBWZXJzaW9uOiAnMS41LjAnfX0sXG4gICAqICB7YXBwOiB7YXBwVmVyc2lvbjogJzIuMC4wJ319LFxuICAgKiBdO1xuICAgKiBjb25zdCBzb3J0ZWREYXRhID0gcGx1Z2luc1NlcnZpY2Uuc29ydFZlcnNpb25zKHtsaXN0OiBkYXRhLCBwYXRoOiBbJ2FwcCcsICdhcHBWZXJzaW9uJ119LCAnZGVzYycpO1xuICAgKiAvLyBzb3J0ZWREYXRhOlxuICAgKiAvLyBbXG4gICAqIC8vICB7YXBwOiB7YXBwVmVyc2lvbjogJzIuMC4wJ319LFxuICAgKiAvLyAge2FwcDoge2FwcFZlcnNpb246ICcxLjUuMCd9fVxuICAgKiAvLyBdXG4gICAqIGBgYFxuICAgKi9cbiAgc29ydFZlcnNpb25zPFQ+KHNvdXJjZTogeyBsaXN0OiBUW107IHBhdGg6IHN0cmluZ1tdIH0sIG9yZGVyOiAnYXNjJyB8ICdkZXNjJyk6IFRbXTtcbiAgc29ydFZlcnNpb25zKHNvdXJjZTogc3RyaW5nW10sIG9yZGVyOiAnYXNjJyB8ICdkZXNjJyk6IHN0cmluZ1tdO1xuICBzb3J0VmVyc2lvbnMoc291cmNlOiBhbnksIG9yZGVyOiAnYXNjJyB8ICdkZXNjJyk6IGFueSB7XG4gICAgY29uc3Qgc291cmNlQ29weSA9IGNsb25lRGVlcChzb3VyY2UpO1xuICAgIGlmIChzb3VyY2UubGlzdCAmJiBzb3VyY2UucGF0aCkge1xuICAgICAgY29uc3QgcGF0aCA9IHNvdXJjZUNvcHkucGF0aC5qb2luKCcuJyk7XG4gICAgICByZXR1cm4gc291cmNlQ29weS5saXN0LnNvcnQoXG4gICAgICAgIChhLCBiKSA9PiBjb21wYXJlKGNvZXJjZShnZXQoYSwgcGF0aCkpLCBjb2VyY2UoZ2V0KGIsIHBhdGgpKSkgKiAob3JkZXIgPT09ICdhc2MnID8gMSA6IC0xKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHNvdXJjZUNvcHkuc29ydCgoYSwgYikgPT4gY29tcGFyZShjb2VyY2UoYSksIGNvZXJjZShiKSkgKiAob3JkZXIgPT09ICdhc2MnID8gMSA6IC0xKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIGEgbGlzdCBvZiBleHBvcnRlZCBwbHVnaW5zIGZyb20gdGhlIGFwcGxpY2F0aW9uIG9iamVjdC5cbiAgICogQHBhcmFtIGFwcGxpY2F0aW9uIEFwcGxpY2F0aW9uIG1hbmFnZWQgb2JqZWN0LlxuICAgKiBAcGFyYW0gdXNlTGF0ZXN0IFNldCB0aGlzIHRvIHRydWUsIHRvIG5vdCBiaW5kIHRoZSBwbHVnaW4gdG8gYW55IHZlcnNpb24uXG4gICAqIEByZXR1cm5zIFJldHVybnMgYSBsaXN0IG9mIGV4cG9ydGVkIHBsdWdpbnMuXG4gICAqL1xuICBnZXRNRkV4cG9ydHMoXG4gICAgYXBwbGljYXRpb246IElBcHBsaWNhdGlvbixcbiAgICBleGNsdWRlZFNjb3BlcyA9IFtcbiAgICAgIFBsdWdpbnNFeHBvcnRTY29wZXMuU0VMRixcbiAgICAgIFBsdWdpbnNFeHBvcnRTY29wZXMuU0VMRl9PUFRJT05BTCxcbiAgICAgIFBsdWdpbnNFeHBvcnRTY29wZXMuR0xPQkFMXG4gICAgXSxcbiAgICB1c2VMYXRlc3QgPSBmYWxzZVxuICApOiBBcHBsaWNhdGlvblBsdWdpbltdIHtcbiAgICBjb25zdCBtYW5pZmVzdDogUGFydGlhbDxJTWFuaWZlc3Q+ID0gYXBwbGljYXRpb24ubWFuaWZlc3Q7XG4gICAgaWYgKCFtYW5pZmVzdCB8fCAhbWFuaWZlc3QuZXhwb3J0cykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5leHRlbmRQbHVnaW5zRGV0YWlscyhcbiAgICAgIGFwcGxpY2F0aW9uLFxuICAgICAge1xuICAgICAgICB2ZXJzaW9uOiBtYW5pZmVzdC52ZXJzaW9uLFxuICAgICAgICBiaW5hcnlJZDogdW5kZWZpbmVkXG4gICAgICB9LFxuICAgICAgdXNlTGF0ZXN0XG4gICAgKS5maWx0ZXIocGx1Z2luID0+ICFleGNsdWRlZFNjb3Blcy5pbmNsdWRlcyhwbHVnaW4uc2NvcGUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyBhIGxpc3Qgb2YgZXhwb3J0cyBmcm9tIGVhY2ggYXZhaWxhYmxlIHBhY2thZ2UuXG4gICAqIEBwYXJhbSBhbGxWZXJzaW9ucyBJZiBzZXQgdG8gdHJ1ZSwgYWxsIGFuZCBub3Qgb25seSBsYXRlc3QgdmVyc2lvbnMgYXJlIGluY2x1ZGVkLlxuICAgKiBAcGFyYW0gZXhjbHVkZWRTY29wZXMgRGVmaW5lcyB3aGljaCBzY29wZXMgc2hvdWxkIG5vdCBiZSBsb2FkZWQuXG4gICAqIEByZXR1cm5zIFJldHVybnMgYSBsaXN0IG9mIGFsbCBleHBvcnRlZCBwbHVnaW5zLlxuICAgKi9cbiAgYXN5bmMgZ2V0QWxsTUZFeHBvcnRzKFxuICAgIGFsbFZlcnNpb25zID0gZmFsc2UsXG4gICAgZXhjbHVkZWRTY29wZXMgPSBbXG4gICAgICBQbHVnaW5zRXhwb3J0U2NvcGVzLlNFTEYsXG4gICAgICBQbHVnaW5zRXhwb3J0U2NvcGVzLlNFTEZfT1BUSU9OQUwsXG4gICAgICBQbHVnaW5zRXhwb3J0U2NvcGVzLkdMT0JBTFxuICAgIF1cbiAgKTogUHJvbWlzZTxBcHBsaWNhdGlvblBsdWdpbltdPiB7XG4gICAgY29uc3QgcGx1Z2lucyA9IG5ldyBBcnJheTxBcHBsaWNhdGlvblBsdWdpbj4oKTtcbiAgICBjb25zdCBwYWNrYWdlcyA9IGF3YWl0IHRoaXMubGlzdFBhY2thZ2VzKCk7XG4gICAgZm9yIChjb25zdCBwa2cgb2YgcGFja2FnZXMpIHtcbiAgICAgIGlmICghcGtnPy5tYW5pZmVzdD8uZXhwb3J0cykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChhbGxWZXJzaW9ucyAmJiBBcnJheS5pc0FycmF5KHBrZy5hcHBsaWNhdGlvblZlcnNpb25zKSkge1xuICAgICAgICBwa2cuYXBwbGljYXRpb25WZXJzaW9ucy5mb3JFYWNoKHZlcnNpb24gPT4ge1xuICAgICAgICAgIHBsdWdpbnMucHVzaCguLi50aGlzLmV4dGVuZFBsdWdpbnNEZXRhaWxzKHBrZywgdmVyc2lvbikpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBsdWdpbnMucHVzaChcbiAgICAgICAgICAuLi50aGlzLmV4dGVuZFBsdWdpbnNEZXRhaWxzKHBrZywge1xuICAgICAgICAgICAgdmVyc2lvbjogcGtnLm1hbmlmZXN0LnZlcnNpb24sXG4gICAgICAgICAgICBiaW5hcnlJZDogdW5kZWZpbmVkXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBsdWdpbnMuZmlsdGVyKHBsdWdpbiA9PiAhZXhjbHVkZWRTY29wZXMuaW5jbHVkZXMocGx1Z2luLnNjb3BlKSk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgYSBsaXN0IG9mIHJlbW90ZXMgZnJvbSB0aGUgYXBwbGljYXRpb24gb2JqZWN0LlxuICAgKiBAcGFyYW0gYXBwbGljYXRpb24gQXBwbGljYXRpb24gbWFuYWdlZCBvYmplY3QuXG4gICAqIEByZXR1cm5zIFJldHVybnMgbGlzdCBvZiByZW1vdGVzLlxuICAgKi9cbiAgZ2V0TUZSZW1vdGVzKGFwcGxpY2F0aW9uOiBJQXBwbGljYXRpb24pOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMge1xuICAgIGNvbnN0IG1hbmlmZXN0ID0gYXBwbGljYXRpb24ubWFuaWZlc3QgfHwge307XG4gICAgY29uc3QgY29uZmlnOiBQbHVnaW5zQ29uZmlnID0gYXBwbGljYXRpb24/LmNvbmZpZyBhcyBQbHVnaW5zQ29uZmlnO1xuICAgIGxldCByZW1vdGVzID0gY29uZmlnPy5yZW1vdGVzIHx8IG1hbmlmZXN0LnJlbW90ZXMgfHwge307XG4gICAgY29uc3QgbWFuaWZlc3RFeHBvcnRzID0gbWFuaWZlc3QuZXhwb3J0cyB8fCBtYW5pZmVzdC5tYW5pZmVzdD8uZXhwb3J0cyB8fCBbXTtcbiAgICBjb25zdCBzZWxmUmVtb3Rlczogc3RyaW5nW10gPSBtYW5pZmVzdEV4cG9ydHNcbiAgICAgIC5maWx0ZXIocGx1Z2luID0+IHBsdWdpbi5zY29wZSA9PT0gUGx1Z2luc0V4cG9ydFNjb3Blcy5TRUxGKVxuICAgICAgLm1hcChwbHVnaW4gPT4gcGx1Z2luLm1vZHVsZSB8fCBwbHVnaW4ubmFtZSk7XG5cbiAgICBpZiAoc2VsZlJlbW90ZXMubGVuZ3RoKSB7XG4gICAgICByZW1vdGVzID0gUGx1Z2luc1Jlc29sdmVTZXJ2aWNlLm1lcmdlUmVtb3RlcyhbXG4gICAgICAgIHsgW2FwcGxpY2F0aW9uLmNvbnRleHRQYXRoXTogc2VsZlJlbW90ZXMgfSxcbiAgICAgICAgcmVtb3Rlc1xuICAgICAgXSk7XG4gICAgfVxuXG4gICAgcmVtb3RlcyA9IFBsdWdpbnNSZXNvbHZlU2VydmljZS5yZW1vdmVSZW1vdGVzKHJlbW90ZXMsIGNvbmZpZz8uZXhjbHVkZWRSZW1vdGVzKTtcbiAgICByZXR1cm4gcmVtb3RlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHRoZSB0eXBlIG9mIGEgcGFja2FnZS5cbiAgICogQSBwYWNrYWdlIGlzIE9GRklDSUFMIGlmIGl0IGNvbWVzIGZyb20gbWFuYWdlbWVudCB0ZW5hbnQgYW5kIGhhcyBhIGxhYmVsIGF0dGFjaGVkIGNhbGxlZCBPRkZJQ0lBTC5cbiAgICogQSBwYWNrYWdlIGlzIENPTU1VTklUWSBpZiBpdCBoYXMgYSBsYWJlbCBjYWxsZWQgQ09NTVVOSVRZLlxuICAgKiBBIHBhY2thZ2UgaXMgQ1VTVE9NIGlmIGl0IGRvZXMgbm90IGhhdmUgYW55IGxhYmVsIGF0dGFjaGVkLlxuICAgKiBBIHBhY2thZ2UgaXMgVU5LTk9XTiBpZiBpdCBoYXMgYSBsYWJlbCBhdHRhY2hlZCBidXQgaXQgZG9lcyBub3QgbWF0Y2ggQ09NTVVOSVRZIG9yIE9GRklDSUFMLlxuICAgKlxuICAgKiBMYWJlbHMgY2FuIGJlIHVzZWQgdG8gaWRlbnRpZnkgdGhlIHN0YXR1cyBvZiBhIHBhY2thZ2UuIENvbW11bml0eSBwYWNrYWdlcyBhbHdheXMgbmVlZFxuICAgKiBhIGxpY2Vuc2UgdmFsaWRhdGlvbi4gVGhlIGxhYmVsIHdpbGwgYmUgc2hvd24gb24gdGhlIGFwcGxpY2F0aW9uIGNhcmQgdG8gdGVsbCBhIHVzZXJcbiAgICogd2hldGhlciB0aGV5IGFyZSBsb29raW5nIGludG8gYW4gb2ZmaWNpYWwgb3IgY29tbXVuaXR5IHBhY2thZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBwYWNrYWdlQXBwbGljYXRpb24gVGhlIHBhY2thZ2UgYXBwbGljYXRpb24gb2JqZWN0IHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyBUaGUgcGFja2FnZSB0eXBlLlxuICAgKi9cbiAgZ2V0UGFja2FnZVR5cGUocGFja2FnZUFwcGxpY2F0aW9uOiBJQXBwbGljYXRpb24pOiBQYWNrYWdlVHlwZSB7XG4gICAgY29uc3QgbGFiZWwgPSBwYWNrYWdlQXBwbGljYXRpb24ubGFiZWwgfHwgcGFja2FnZUFwcGxpY2F0aW9uLm1hbmlmZXN0Py5sYWJlbDtcbiAgICBpZiAoIWxhYmVsKSB7XG4gICAgICByZXR1cm4gUGFja2FnZVR5cGUuQ1VTVE9NO1xuICAgIH1cbiAgICBpZiAobGFiZWwgPT09IFBhY2thZ2VUeXBlLk9GRklDSUFMICYmIHRoaXMuaXNPd25lZEJ5TWFuYWdlbWVudChwYWNrYWdlQXBwbGljYXRpb24pKSB7XG4gICAgICByZXR1cm4gUGFja2FnZVR5cGUuT0ZGSUNJQUw7XG4gICAgfVxuICAgIGlmIChsYWJlbCA9PT0gUGFja2FnZVR5cGUuQ09NTVVOSVRZKSB7XG4gICAgICByZXR1cm4gUGFja2FnZVR5cGUuQ09NTVVOSVRZO1xuICAgIH1cbiAgICByZXR1cm4gUGFja2FnZVR5cGUuVU5LTk9XTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyBpZiBhbiBhcHBsaWNhdGlvbiBpcyBvd25lZCBieSBtYW5hZ2VtZW50IHRlbmFudC5cbiAgICpcbiAgICogQHBhcmFtIGFwcCBUaGUgYXBwbGljYXRpb24gdG8gdmVyaWZ5LlxuICAgKiBAcmV0dXJucyBUcnVlIGlmIG93bmVkIGJ5IG1hbmFnZW1lbnQgdGVuYW50LlxuICAgKi9cbiAgaXNPd25lZEJ5TWFuYWdlbWVudChhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGFwcE93bmVyID0gZ2V0KGFwcCwgJ293bmVyLnRlbmFudC5pZCcpO1xuICAgIHJldHVybiBhcHBPd25lciA9PT0gJ21hbmFnZW1lbnQnO1xuICB9XG5cbiAgcGx1Z2luc0Zyb21NYW5pZmVzdChtYW5pZmVzdDogSU1hbmlmZXN0KTogQXBwbGljYXRpb25QbHVnaW5bXSB7XG4gICAgY29uc3QgcGx1Z2luczogQXBwbGljYXRpb25QbHVnaW5bXSA9IG1hbmlmZXN0LmV4cG9ydHM7XG4gICAgY29uc3QgZXh0ZW5kZWRQbHVnaW5zID0gcGx1Z2luc1xuICAgICAgLmZpbHRlcihwID0+IHAuc2NvcGUgPT09IFBsdWdpbnNFeHBvcnRTY29wZXMuU0VMRilcbiAgICAgIC5tYXAocCA9PiAoe1xuICAgICAgICAuLi5wLFxuICAgICAgICBpZDogUGx1Z2luc1NlcnZpY2UuY3JlYXRlUGx1Z2luSWQobWFuaWZlc3QuY29udGV4dFBhdGgsIHAsIG1hbmlmZXN0LnZlcnNpb24pLFxuICAgICAgICBjb250ZXh0UGF0aDogbWFuaWZlc3QuY29udGV4dFBhdGgsXG4gICAgICAgIHZlcnNpb246IG1hbmlmZXN0LnZlcnNpb24sXG4gICAgICAgIHZlcnNpb25pbmdNYXRyaXg6IG1hbmlmZXN0LnZlcnNpb25pbmdNYXRyaXgsXG4gICAgICAgIGxpY2Vuc2U6IG1hbmlmZXN0LmxpY2Vuc2UsXG4gICAgICAgIHR5cGU6IFBhY2thZ2VUeXBlLkNVU1RPTVxuICAgICAgfSkpO1xuICAgIHJldHVybiBleHRlbmRlZFBsdWdpbnM7XG4gIH1cblxuICBwcml2YXRlIGlzU2VsZlNjb3BlZFBsdWdpbihwbHVnaW46IEFwcGxpY2F0aW9uUGx1Z2luLCBjb250ZXh0UGF0aD86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBwbHVnaW4uc2NvcGUgPT09IFBsdWdpbnNFeHBvcnRTY29wZXMuU0VMRiAmJlxuICAgICAgKCFjb250ZXh0UGF0aCB8fCBwbHVnaW4uY29udGV4dFBhdGggPT09IGNvbnRleHRQYXRoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldFNlbGZTY29wZWRQbHVnaW5zKFxuICAgIHBsdWdpbnM6IEFwcGxpY2F0aW9uUGx1Z2luW10sXG4gICAgY29udGV4dFBhdGg/OiBzdHJpbmdcbiAgKTogQXBwbGljYXRpb25QbHVnaW5bXSB7XG4gICAgcmV0dXJuIHBsdWdpbnMuZmlsdGVyKHBsdWdpbiA9PiB0aGlzLmlzU2VsZlNjb3BlZFBsdWdpbihwbHVnaW4sIGNvbnRleHRQYXRoKSk7XG4gIH1cblxuICBwcml2YXRlIGdldEFsbFBsdWdpbnNFeGNlcHRTZWxmU2NvcGVkKFxuICAgIHBsdWdpbnM6IEFwcGxpY2F0aW9uUGx1Z2luW10sXG4gICAgY29udGV4dFBhdGg/OiBzdHJpbmdcbiAgKTogQXBwbGljYXRpb25QbHVnaW5bXSB7XG4gICAgcmV0dXJuIHBsdWdpbnMuZmlsdGVyKHBsdWdpbiA9PiAhdGhpcy5pc1NlbGZTY29wZWRQbHVnaW4ocGx1Z2luLCBjb250ZXh0UGF0aCkpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVEdXBsaWNhdGVzKGFwcHM6IElBcHBsaWNhdGlvbltdLCBrZXk6IHN0cmluZyk6IElBcHBsaWNhdGlvbltdIHtcbiAgICBjb25zdCB1bmlxdWVMaXN0OiBJQXBwbGljYXRpb25bXSA9IFtdO1xuICAgIGNvbnN0IGdyb3VwZWRBcHBzQnlLZXk6IFJlY29yZDxzdHJpbmcsIElBcHBsaWNhdGlvbltdPiA9IGdyb3VwQnkoYXBwcywga2V5KTtcbiAgICBjb25zdCBncm91cGVkQXBwczogSUFwcGxpY2F0aW9uW11bXSA9IE9iamVjdC5rZXlzKGdyb3VwZWRBcHBzQnlLZXkpLm1hcChcbiAgICAgIGtleSA9PiBncm91cGVkQXBwc0J5S2V5W2tleV1cbiAgICApO1xuICAgIGZvciAoY29uc3QgYXBwc0dyb3VwIG9mIGdyb3VwZWRBcHBzKSB7XG4gICAgICBpZiAoYXBwc0dyb3VwLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgdW5pcXVlTGlzdC5wdXNoKC4uLmFwcHNHcm91cCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBhcHBGcm9tQ3VycmVudFRlbmFudCA9IGFwcHNHcm91cC5maW5kKGFwcCA9PiB0aGlzLmlzRnJvbUN1cnJlbnRUZW5hbnQoYXBwKSk7XG4gICAgICAgIGlmIChhcHBGcm9tQ3VycmVudFRlbmFudCkge1xuICAgICAgICAgIHVuaXF1ZUxpc3QucHVzaChhcHBGcm9tQ3VycmVudFRlbmFudCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXBwTm90T3duZWRCeU1hbmFnZW1lbnQgPSBhcHBzR3JvdXAuZmluZChhcHAgPT4gIXRoaXMuaXNPd25lZEJ5TWFuYWdlbWVudChhcHApKTtcbiAgICAgICAgdW5pcXVlTGlzdC5wdXNoKGFwcE5vdE93bmVkQnlNYW5hZ2VtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuaXF1ZUxpc3Q7XG4gIH1cblxuICBwcml2YXRlIGlzRnJvbUN1cnJlbnRUZW5hbnQoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gYXBwLm93bmVyLnRlbmFudC5pZCA9PT0gdGhpcy5hcHBTdGF0ZVNlcnZpY2UuY3VycmVudFRlbmFudC52YWx1ZS5uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vZGlmaWVzIHRoZSBsaXN0IG9mIHBsdWdpbnMgdG8gaGF2ZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHN1Y2ggYXMgaWQuXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgZXh0ZW5kUGx1Z2luc0RldGFpbHMoXG4gICAgYXBwbGljYXRpb246IElBcHBsaWNhdGlvbixcbiAgICB2ZXJzaW9uOiBJQXBwbGljYXRpb25WZXJzaW9uLFxuICAgIHVzZUxhdGVzdCA9IGZhbHNlXG4gICk6IEFwcGxpY2F0aW9uUGx1Z2luW10ge1xuICAgIGNvbnN0IHBsdWdpbnM6IEFwcGxpY2F0aW9uUGx1Z2luW10gPSBhcHBsaWNhdGlvbi5tYW5pZmVzdC5leHBvcnRzO1xuICAgIGNvbnN0IGV4dGVuZGVkUGx1Z2luczogQXBwbGljYXRpb25QbHVnaW5bXSA9IHBsdWdpbnMubWFwKHAgPT4gKHtcbiAgICAgIC4uLnAsXG4gICAgICBpZDogUGx1Z2luc1NlcnZpY2UuY3JlYXRlUGx1Z2luSWQoYXBwbGljYXRpb24uY29udGV4dFBhdGgsIHAsIHZlcnNpb24udmVyc2lvbiwgdXNlTGF0ZXN0KSxcbiAgICAgIGlkTGF0ZXN0OiBQbHVnaW5zU2VydmljZS5jcmVhdGVQbHVnaW5JZChhcHBsaWNhdGlvbi5jb250ZXh0UGF0aCwgcCwgdmVyc2lvbi52ZXJzaW9uLCB0cnVlKSxcbiAgICAgIGNvbnRleHRQYXRoOiBhcHBsaWNhdGlvbi5jb250ZXh0UGF0aCxcbiAgICAgIHZlcnNpb246IHZlcnNpb24udmVyc2lvbixcbiAgICAgIHZlcnNpb25pbmdNYXRyaXg6IGFwcGxpY2F0aW9uLm1hbmlmZXN0LnZlcnNpb25pbmdNYXRyaXgsXG4gICAgICB0YWdzOiB1c2VMYXRlc3QgPyBbJ2xhdGVzdCddIDogdmVyc2lvbi50YWdzIHx8IFtdLFxuICAgICAgbGljZW5zZTogYXBwbGljYXRpb24ubWFuaWZlc3QubGljZW5zZSxcbiAgICAgIHR5cGU6IHRoaXMuZ2V0UGFja2FnZVR5cGUoYXBwbGljYXRpb24pXG4gICAgfSkpO1xuICAgIHJldHVybiBleHRlbmRlZFBsdWdpbnM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxpc3RBcHBsaWNhdGlvbnNCeUN1cnJlbnRUZW5hbnQocGFyYW1zOiBhbnkgPSB7fSk6IFByb21pc2U8SUFwcGxpY2F0aW9uW10+IHtcbiAgICBjb25zdCBmaWx0ZXIgPSBPYmplY3QuYXNzaWduKFxuICAgICAge1xuICAgICAgICB0eXBlOiAnSE9TVEVEJyxcbiAgICAgICAgcGFnZVNpemU6IDIwMDAsXG4gICAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlXG4gICAgICB9LFxuICAgICAgcGFyYW1zXG4gICAgKTtcbiAgICBjb25zdCBzaGFyZWRGaWx0ZXIgPSBPYmplY3QuYXNzaWduKFxuICAgICAge1xuICAgICAgICBhdmFpbGFiaWxpdHk6IEFwcGxpY2F0aW9uQXZhaWxhYmlsaXR5LlNIQVJFRCxcbiAgICAgICAgdHlwZTogJ0hPU1RFRCcsXG4gICAgICAgIHBhZ2VTaXplOiAyMDAwLFxuICAgICAgICB3aXRoVG90YWxQYWdlczogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHBhcmFtc1xuICAgICk7XG5cbiAgICBjb25zdCB0ZW5hbnROYW1lID0gdGhpcy5hcHBTdGF0ZVNlcnZpY2UuY3VycmVudFRlbmFudC52YWx1ZS5uYW1lO1xuICAgIGNvbnN0IFtyZXN1bHRBcHBzT3duZWRCeVRlbmFudCwgcmVzdWx0U2hhcmVkQXBwc10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5saXN0QnlUZW5hbnQodGVuYW50TmFtZSwgZmlsdGVyKSxcbiAgICAgIHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmxpc3Qoc2hhcmVkRmlsdGVyKVxuICAgIF0pO1xuICAgIGNvbnN0IHsgZGF0YTogYXBwc093bmVkQnlUZW5hbnQgfSA9IHJlc3VsdEFwcHNPd25lZEJ5VGVuYW50O1xuICAgIGNvbnN0IHsgZGF0YTogc2hhcmVkQXBwcyB9ID0gcmVzdWx0U2hhcmVkQXBwcztcbiAgICBjb25zdCB3ZWJBcHBzID0gWy4uLmFwcHNPd25lZEJ5VGVuYW50LCAuLi5zaGFyZWRBcHBzXTtcbiAgICByZXR1cm4gdW5pcUJ5KHdlYkFwcHMsIChhcHA6IElBcHBsaWNhdGlvbikgPT4gYXBwLmlkKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUGx1Z2luVG9SZW1vdGVzQ29uZmlnKFxuICAgIHJlbW90ZXNDb25maWc6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyxcbiAgICBwbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbiB8IEFwcGxpY2F0aW9uUGx1Z2luW11cbiAgKTogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zIHtcbiAgICBpZiAoIXBsdWdpbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVtb3Rlc0NvcHkgPSBjbG9uZURlZXAocmVtb3Rlc0NvbmZpZyk7XG4gICAgY29uc3QgdGVtcCA9IEFycmF5LmlzQXJyYXkocGx1Z2lucykgPyBwbHVnaW5zIDogW3BsdWdpbnNdO1xuXG4gICAgdGVtcC5mb3JFYWNoKHBsdWdpbiA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRleHRQYXRoLCBtb2R1bGVOYW1lIH0gPSB0aGlzLnBhcnNlUGx1Z2luSWQocGx1Z2luLmlkKTtcbiAgICAgIGlmICghY29udGV4dFBhdGggfHwgIW1vZHVsZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVtb3Rlc0NvcHlbY29udGV4dFBhdGhdPy5sZW5ndGggPj0gMFxuICAgICAgICA/IHJlbW90ZXNDb3B5W2NvbnRleHRQYXRoXS5wdXNoKG1vZHVsZU5hbWUpXG4gICAgICAgIDogKHJlbW90ZXNDb3B5W2NvbnRleHRQYXRoXSA9IFtdKS5wdXNoKG1vZHVsZU5hbWUpO1xuICAgICAgcmVtb3Rlc0NvcHlbY29udGV4dFBhdGhdID0gWy4uLm5ldyBTZXQocmVtb3Rlc0NvcHlbY29udGV4dFBhdGhdKV07XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlbW90ZXNDb3B5O1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVQbHVnaW5zRnJvbVJlbW90ZXNDb25maWcoXG4gICAgcmVtb3Rlc0NvbmZpZzogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zLFxuICAgIHBsdWdpbnM6IEFwcGxpY2F0aW9uUGx1Z2luIHwgQXBwbGljYXRpb25QbHVnaW5bXVxuICApOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMge1xuICAgIGNvbnN0IHJlbW90ZXNDb3B5OiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMgPSBjbG9uZURlZXAocmVtb3Rlc0NvbmZpZyk7XG4gICAgY29uc3QgdGVtcCA9IEFycmF5LmlzQXJyYXkocGx1Z2lucykgPyBwbHVnaW5zIDogW3BsdWdpbnNdO1xuXG4gICAgdGVtcC5mb3JFYWNoKHBsdWdpbiA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRleHRQYXRoLCBtb2R1bGVOYW1lIH0gPSB0aGlzLnBhcnNlUGx1Z2luSWQocGx1Z2luLmlkKTtcbiAgICAgIGlmICghY29udGV4dFBhdGggfHwgIW1vZHVsZU5hbWUgfHwgIXJlbW90ZXNDb3B5W2NvbnRleHRQYXRoXSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZW1vdGVzQ29weVtjb250ZXh0UGF0aF0gPSByZW1vdGVzQ29weVtjb250ZXh0UGF0aF0uZmlsdGVyKHAgPT4gcCAhPT0gbW9kdWxlTmFtZSk7XG4gICAgICByZW1vdGVzQ29weVtjb250ZXh0UGF0aF0gPSBbLi4ubmV3IFNldChyZW1vdGVzQ29weVtjb250ZXh0UGF0aF0pXTtcbiAgICAgIGlmIChyZW1vdGVzQ29weVtjb250ZXh0UGF0aF0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGRlbGV0ZSByZW1vdGVzQ29weVtjb250ZXh0UGF0aF07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlbW90ZXNDb3B5O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVBsdWdpbklkKGlkOiBzdHJpbmcpOiB7IGNvbnRleHRQYXRoOiBzdHJpbmc7IG1vZHVsZU5hbWU6IHN0cmluZyB9IHtcbiAgICBjb25zdCBbY29udGV4dFBhdGgsIG1vZHVsZU5hbWVdID0gaWQuc3BsaXQoJy8nKTtcbiAgICByZXR1cm4geyBjb250ZXh0UGF0aCwgbW9kdWxlTmFtZSB9O1xuICB9XG59XG4iXX0=
|
|
398
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9wbHVnaW5zL3BsdWdpbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFDTCx1QkFBdUIsRUFLeEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQXFCLFdBQVcsRUFBaUIsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7OztBQUdsRSxNQUFNLE9BQU8sY0FBYztJQUN6QixNQUFNLENBQUMsNEJBQTRCLENBQUMsT0FBaUM7UUFDbkUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEQsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ25CLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUN2QyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQy9DLE9B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QUFDLFdBQVcsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUM7WUFDbEYsV0FBVyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xFLElBQUksV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDMUMsT0FBTyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbEMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVPLGFBQWEsQ0FBQyxFQUFVO1FBQzlCLE1BQU0sQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQ3JDLENBQUM7OEdBM2ZVLGNBQWM7a0hBQWQsY0FBYzs7MkZBQWQsY0FBYztrQkFEMUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFwcGxpY2F0aW9uQXZhaWxhYmlsaXR5LFxuICBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMsXG4gIElBcHBsaWNhdGlvbixcbiAgSUFwcGxpY2F0aW9uVmVyc2lvbixcbiAgSU1hbmlmZXN0XG59IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFwcGxpY2F0aW9uU2VydmljZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IGNsb25lRGVlcCwgZ2V0LCB1bmlxQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgY29lcmNlLCBjb21wYXJlIH0gZnJvbSAnc2VtdmVyJztcbmltcG9ydCB7IEFwcFN0YXRlU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi91aS1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IGdyb3VwQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25QbHVnaW4sIFBhY2thZ2VUeXBlLCBQbHVnaW5zQ29uZmlnIH0gZnJvbSAnLi9wbHVnaW5zLm1vZGVsJztcbmltcG9ydCB7IFBsdWdpbnNFeHBvcnRTY29wZXMgfSBmcm9tICcuLi9jb21tb24vQXBwbGljYXRpb25PcHRpb25zJztcbmltcG9ydCB7IFBsdWdpbnNSZXNvbHZlU2VydmljZSB9IGZyb20gJy4vcGx1Z2lucy1yZXNvbHZlLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUGx1Z2luc1NlcnZpY2Uge1xuICBzdGF0aWMgY29udmVydEluc3RhbGxlZFJlbW90ZXNUb0lkcyhyZW1vdGVzOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCFyZW1vdGVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGltcG9ydENvbnRleHRQYXRocyA9IE9iamVjdC5rZXlzKHJlbW90ZXMpO1xuICAgIGNvbnN0IHBsdWdpbnMgPSBbXTtcbiAgICBpbXBvcnRDb250ZXh0UGF0aHMuZm9yRWFjaChjb250ZXh0UGF0aCA9PiB7XG4gICAgICBjb25zdCBtb2R1bGVOYW1lcyA9IHJlbW90ZXNbY29udGV4dFBhdGhdIHx8IFtdO1xuICAgICAgcGx1Z2lucy5wdXNoKFxuICAgICAgICAuLi5tb2R1bGVOYW1lcy5tYXAobW9kdWxlID0+IFBsdWdpbnNTZXJ2aWNlLmNyZWF0ZVBsdWdpbklkKGNvbnRleHRQYXRoLCBtb2R1bGUsICcnLCB0cnVlKSlcbiAgICAgICk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHBsdWdpbnM7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlUGx1Z2luSWQoXG4gICAgY29udGV4dFBhdGg6IHN0cmluZyxcbiAgICBwbHVnaW46IEFwcGxpY2F0aW9uUGx1Z2luIHwgc3RyaW5nLFxuICAgIHZlcnNpb246IHN0cmluZyxcbiAgICB1c2VMYXRlc3QgPSBmYWxzZVxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IG1vZHVsZU5hbWUgPSB0eXBlb2YgcGx1Z2luID09PSAnc3RyaW5nJyA/IHBsdWdpbiA6IHBsdWdpbi5tb2R1bGU7XG4gICAgaWYgKHVzZUxhdGVzdCkge1xuICAgICAgcmV0dXJuIGAke2NvbnRleHRQYXRofS8ke21vZHVsZU5hbWV9YDtcbiAgICB9XG4gICAgcmV0dXJuIGAke2NvbnRleHRQYXRofUAke3ZlcnNpb259LyR7bW9kdWxlTmFtZX1gO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcHBsaWNhdGlvblNlcnZpY2U6IEFwcGxpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGFwcFN0YXRlU2VydmljZTogQXBwU3RhdGVTZXJ2aWNlXG4gICkge31cblxuICAvKipcbiAgICogRmV0Y2hlcyBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhY2thZ2VzLlxuICAgKiBAcGFyYW0gcGFyYW1zIEFkZGl0aW9uYWwgcXVlcnkgcGFyYW1ldGVycy5cbiAgICogQHJldHVybnMgUmV0dXJucyBhIGxpc3Qgb2YgcGFja2FnZXMuXG4gICAqL1xuICBhc3luYyBsaXN0UGFja2FnZXMocGFyYW1zOiBhbnkgPSB7fSk6IFByb21pc2U8SUFwcGxpY2F0aW9uW10+IHtcbiAgICBjb25zdCBhcHBzID0gYXdhaXQgdGhpcy5saXN0QXBwbGljYXRpb25zQnlDdXJyZW50VGVuYW50KHBhcmFtcyk7XG4gICAgY29uc3Qgd2ViQXBwcyA9IGFwcHMuZmlsdGVyKGFwcCA9PiB0aGlzLmlzUGFja2FnZShhcHApKTtcbiAgICBjb25zdCB1bmlxdWVXZWJBcHBzID0gdGhpcy5yZW1vdmVEdXBsaWNhdGVzKHdlYkFwcHMsICdjb250ZXh0UGF0aCcpO1xuICAgIHJldHVybiB1bmlxdWVXZWJBcHBzLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhbiBhcHBsaWNhdGlvbiBpcyBhIHBhY2thZ2UuXG4gICAqIEBwYXJhbSBhcHBsaWNhdGlvbiBBcHBsaWNhdGlvbiBtYW5hZ2VkIG9iamVjdC5cbiAgICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIHRoZSBhcHBsaWNhdGlvbiBpcyBhIHBhY2thZ2UuXG4gICAqL1xuICBpc1BhY2thZ2UoYXBwbGljYXRpb246IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhcHBsaWNhdGlvbi5tYW5pZmVzdD8uaXNQYWNrYWdlID09PSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHJlbW90ZXMgZmllbGQgaW4gdGhlIGFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24gYnkgYWRkaW5nIG5ldyBwbHVnaW5zLlxuICAgKiBJbXBvcnRhbnQ6IGlmIHRoZSByZW1vdGVzIG9iamVjdCBpcyBub3Qgc2V0IG9uIHRoZSBjb25maWd1cmF0aW9uIG9iamVjdCxcbiAgICogcmVtb3RlcyB3aWxsIG5vdCBiZSBhZGRlZC4gTWFrZSBzdXJlIHRoYXQgdGhpcyBvYmplY3QgZXhpc3RzIGluIHRoZSBhcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uLlxuICAgKiBAcGFyYW0gYXBwbGljYXRpb24gQXBwbGljYXRpb24gbWFuYWdlZCBvYmplY3QuXG4gICAqIEBwYXJhbSBwbHVnaW5zIExpc3Qgb2YgcmVtb3RlcyB0byBiZSBhZGRlZC5cbiAgICogQHJldHVybnMgUmV0dXJucyB1cGRhdGVkIGFwcGxpY2F0aW9uIHJlbW90ZXMuXG4gICAqL1xuICBhc3luYyBhZGRSZW1vdGVzKFxuICAgIGFwcGxpY2F0aW9uOiBJQXBwbGljYXRpb24sXG4gICAgcGx1Z2luczogQXBwbGljYXRpb25QbHVnaW4gfCBBcHBsaWNhdGlvblBsdWdpbltdXG4gICk6IFByb21pc2U8UGx1Z2luc0NvbmZpZz4ge1xuICAgIGNvbnN0IHBsdWdpbnNBcnJheSA9IEFycmF5LmlzQXJyYXkocGx1Z2lucykgPyBwbHVnaW5zIDogW3BsdWdpbnNdO1xuICAgIGNvbnN0IG1hbmlmZXN0UmVtb3RlcyA9IGFwcGxpY2F0aW9uLm1hbmlmZXN0Py5yZW1vdGVzIHx8IHt9O1xuICAgIGNvbnN0IGFwcENvbmZpZzogUGx1Z2luc0NvbmZpZyB8IHVuZGVmaW5lZCA9IGFwcGxpY2F0aW9uPy5jb25maWcgYXMgUGx1Z2luc0NvbmZpZztcbiAgICBjb25zdCBhcHBDb25maWdSZW1vdGVzID0gYXBwQ29uZmlnPy5yZW1vdGVzIHx8IG1hbmlmZXN0UmVtb3RlcztcbiAgICBjb25zdCBhcHBDb25maWdFeGNsdWRlZFJlbW90ZXMgPSBhcHBDb25maWc/LmV4Y2x1ZGVkUmVtb3RlcyB8fCB7fTtcbiAgICAvLyBvbmx5IG5vcm1hbCBhbmQgc2VsZiBvcHRpb25hbCBzY29wZWQgcGx1Z2lucyBzaG91bGQgYmUgYWRkZWQgdG8gcmVtb3Rlc1xuICAgIC8vIHNlbGYgc2NvcGVkIHBsdWdpbnMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGFkZGVkXG4gICAgY29uc3QgYWxsUGx1Z2luc0V4Y2VwdFNlbGZTY29wZWQgPSB0aGlzLmdldEFsbFBsdWdpbnNFeGNlcHRTZWxmU2NvcGVkKFxuICAgICAgcGx1Z2luc0FycmF5LFxuICAgICAgYXBwbGljYXRpb24uY29udGV4dFBhdGhcbiAgICApO1xuICAgIGNvbnN0IG5ld1JlbW90ZXMgPSB0aGlzLmFkZFBsdWdpblRvUmVtb3Rlc0NvbmZpZyhhcHBDb25maWdSZW1vdGVzLCBhbGxQbHVnaW5zRXhjZXB0U2VsZlNjb3BlZCk7XG4gICAgLy8gc2hvdWxkIGJlIHVucHJvYmxlbWF0aWMgdG8gcmVtb3ZlIGFsbCBjYXRlZ29yaWVzIG9mIHBsdWdpbnMgZnJvbSBleGNsdWRlZCByZW1vdGVzXG4gICAgY29uc3QgbmV3RXhjbHVkZWRSZW1vdGVzID0gdGhpcy5yZW1vdmVQbHVnaW5zRnJvbVJlbW90ZXNDb25maWcoXG4gICAgICBhcHBDb25maWdFeGNsdWRlZFJlbW90ZXMsXG4gICAgICBwbHVnaW5zXG4gICAgKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy51cGRhdGVSZW1vdGVzSW5BcHBDb25maWcoYXBwbGljYXRpb24sIG5ld1JlbW90ZXMsIG5ld0V4Y2x1ZGVkUmVtb3Rlcyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcmVtb3RlcyBmaWVsZCBpbiB0aGUgYXBwbGljYXRpb24gY29uZmlndXJhdGlvbiBieSByZW1vdmluZyBwbHVnaW5zLlxuICAgKiBAcGFyYW0gYXBwbGljYXRpb24gQXBwbGljYXRpb24gbWFuYWdlZCBvYmplY3QuXG4gICAqIEBwYXJhbSBwbHVnaW5zIExpc3Qgb2YgcmVtb3RlcyB0byBiZSByZW1vdmVkLlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIHVwZGF0ZWQgYXBwbGljYXRpb24gcmVtb3Rlcy5cbiAgICovXG4gIGFzeW5jIHJlbW92ZVJlbW90ZXMoXG4gICAgYXBwbGljYXRpb246IElBcHBsaWNhdGlvbixcbiAgICBwbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbiB8IEFwcGxpY2F0aW9uUGx1Z2luW11cbiAgKTogUHJvbWlzZTxQbHVnaW5zQ29uZmlnPiB7XG4gICAgY29uc3QgcGx1Z2luc0FycmF5ID0gQXJyYXkuaXNBcnJheShwbHVnaW5zKSA/IHBsdWdpbnMgOiBbcGx1Z2luc107XG4gICAgY29uc3QgbWFuaWZlc3RSZW1vdGVzID0gYXBwbGljYXRpb24ubWFuaWZlc3Q/LnJlbW90ZXMgfHwge307XG4gICAgY29uc3QgYXBwQ29uZmlnOiBQbHVnaW5zQ29uZmlnIHwgdW5kZWZpbmVkID0gYXBwbGljYXRpb24/LmNvbmZpZyBhcyBQbHVnaW5zQ29uZmlnO1xuICAgIGNvbnN0IGFwcENvbmZpZ1JlbW90ZXMgPSBhcHBDb25maWc/LnJlbW90ZXMgfHwgbWFuaWZlc3RSZW1vdGVzO1xuICAgIGNvbnN0IGFwcENvbmZpZ0V4Y2x1ZGVkUmVtb3RlcyA9IGFwcENvbmZpZz8uZXhjbHVkZWRSZW1vdGVzIHx8IHt9O1xuICAgIC8vIGFwcCBwbHVnaW5zIG5lZWQgdG8gYmUgcmVtb3ZlZCBmcm9tIHJlbW90ZXNcbiAgICBjb25zdCBuZXdSZW1vdGVzID0gdGhpcy5yZW1vdmVQbHVnaW5zRnJvbVJlbW90ZXNDb25maWcoYXBwQ29uZmlnUmVtb3RlcywgcGx1Z2lucyk7XG4gICAgLy8gc2VsZiBzY29wZWQgcGx1Z2lucyBuZWVkIHRvIGJlIGFkZGVkIHRvIGV4Y2x1ZGVkIHJlbW90ZXNcbiAgICAvLyBhcyB0aGV5IHdvdWxkIGJlIG90aGVyd2lzZSBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIHJlbW90ZXNcbiAgICBjb25zdCBzZWxmU2NvcGVkUGx1Z2lucyA9IHRoaXMuZ2V0U2VsZlNjb3BlZFBsdWdpbnMocGx1Z2luc0FycmF5LCBhcHBsaWNhdGlvbi5jb250ZXh0UGF0aCk7XG4gICAgY29uc3QgbmV3RXhjbHVkZWRSZW1vdGVzID0gdGhpcy5hZGRQbHVnaW5Ub1JlbW90ZXNDb25maWcoXG4gICAgICBhcHBDb25maWdFeGNsdWRlZFJlbW90ZXMsXG4gICAgICBzZWxmU2NvcGVkUGx1Z2luc1xuICAgICk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMudXBkYXRlUmVtb3Rlc0luQXBwQ29uZmlnKGFwcGxpY2F0aW9uLCBuZXdSZW1vdGVzLCBuZXdFeGNsdWRlZFJlbW90ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHJlbW90ZXMgZmllbGQgaW4gdGhlIGFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBwYXJhbSBhcHBsaWNhdGlvbiBBcHBsaWNhdGlvbiBtYW5hZ2VkIG9iamVjdC5cbiAgICogQHBhcmFtIHBsdWdpbnMgTGlzdCBvZiByZW1vdGVzIHRvIGJlIGFkZGVkLlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIHVwZGF0ZWQgYXBwbGljYXRpb24gcmVtb3Rlcy5cbiAgICovXG4gIGFzeW5jIHVwZGF0ZVJlbW90ZXNJbkFwcENvbmZpZyhcbiAgICBhcHBsaWNhdGlvbjogSUFwcGxpY2F0aW9uLFxuICAgIHBsdWdpbnM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyxcbiAgICBleGNsdWRlZFJlbW90ZXM/OiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnNcbiAgKTogUHJvbWlzZTxQbHVnaW5zQ29uZmlnPiB7XG4gICAgY29uc3QgdXBkYXRlZEFwcFdpdGhDb25maWcgPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS51cGRhdGVBcHBsaWNhdGlvbkNvbmZpZyhcbiAgICAgIGFwcGxpY2F0aW9uLFxuICAgICAge1xuICAgICAgICByZW1vdGVzOiBwbHVnaW5zLFxuICAgICAgICBleGNsdWRlZFJlbW90ZXM6IGV4Y2x1ZGVkUmVtb3RlcyB8fCB7fVxuICAgICAgfSBhcyBQbHVnaW5zQ29uZmlnXG4gICAgKTtcbiAgICByZXR1cm4gdXBkYXRlZEFwcFdpdGhDb25maWc/LmNvbmZpZyB8fCB7IHJlbW90ZXM6IHt9IH07XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgYXBwbGljYXRpb24gbWFuaWZlc3QuXG4gICAqIEBwYXJhbSBhcHBsaWNhdGlvbiBBcHBsaWNhdGlvbiBtYW5hZ2VkIG9iamVjdC5cbiAgICogQHJldHVybnMgUmV0dXJucyB0aGUgYXBwbGljYXRpb24gbWFuaWZlc3QuXG4gICAqL1xuICBhc3luYyBnZXRDdW11bG9jaXR5SnNvbkZpbGUoYXBwbGljYXRpb246IElBcHBsaWNhdGlvbikge1xuICAgIGNvbnN0IGM4eUpzb24gPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5nZXRBcHBNYW5pZmVzdChhcHBsaWNhdGlvbik7XG4gICAgaWYgKCFjOHlKc29uLnJlbW90ZXMpIHtcbiAgICAgIGM4eUpzb24ucmVtb3RlcyA9IHt9O1xuICAgIH1cbiAgICByZXR1cm4gYzh5SnNvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBpbml0aWFsIHN0YXRlIG9mIHJlbW90ZXMgaW4gdGhlIGNvbmZpZ3VyYXRpb24gKHdoZW4gaXQncyBtaXNzaW5nKSwgYmFzZWQgb24gdGhlIGxpc3Qgb2YgcmVtb3RlcyBiZWluZyBpbiB0aGUgYXBwbGljYXRpb24gbWFuaWZlc3QuXG4gICAqIEBwYXJhbSBhcHBsaWNhdGlvbiAgQXBwbGljYXRpb24gbWFuYWdlZCBvYmplY3QuXG4gICAqIEByZXR1cm5zIFJldHVybnMgYSBsaXN0IG9mIHJlbW90ZXMgdGhhdCBoYXMgYmVlbiBhc3NpZ25lZCB0byB0aGUgY29uZmlndXJhdGlvbiBvYmplY3QuXG4gICAqL1xuICBhc3luYyBzZXRJbml0aWFsUmVtb3RlcyhhcHBsaWNhdGlvbjogSUFwcGxpY2F0aW9uKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1hbmlmZXN0OiBJTWFuaWZlc3QgPSBhd2FpdCB0aGlzLmdldEN1bXVsb2NpdHlKc29uRmlsZShhcHBsaWNhdGlvbik7XG4gICAgICBjb25zdCBtYW5pZmVzdFJlbW90ZXM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyA9IG1hbmlmZXN0LnJlbW90ZXM7XG5cbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnVwZGF0ZVJlbW90ZXNJbkFwcENvbmZpZyhhcHBsaWNhdGlvbiwgbWFuaWZlc3RSZW1vdGVzIHx8IHt9LCB7fSk7XG4gICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmVzZXRSZW1vdGVzKGFwcGxpY2F0aW9uOiBJQXBwbGljYXRpb24pIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UudXBkYXRlQXBwbGljYXRpb25Db25maWcoYXBwbGljYXRpb24sIHtcbiAgICAgIHJlbW90ZXM6IHVuZGVmaW5lZCxcbiAgICAgIGV4Y2x1ZGVkUmVtb3RlczogdW5kZWZpbmVkXG4gICAgfSBhcyBQbHVnaW5zQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTb3J0cyB2ZXJzaW9ucyBsaXN0IG9yIGxpc3Qgb2Ygb2JqZWN0cyBieSB2ZXJzaW9uIHByb3BlcnR5XG4gICAqIEByZXR1cm5zIGxpc3Qgb2YgdmVyc2lvbnMgYXMgYXJyYXkgb2Ygc3RyaW5ncyBvciBhcnJheSBvZiBvYmplY3RzIHNvcnRlZCBieSB2ZXJzaW9uIHByb3BlcnR5XG4gICAqXG4gICAqIEBwYXJhbSB7eyBsaXN0OiBUW107IHBhdGg6IHN0cmluZ1tdIH0gfCBzdHJpbmdbXX0gc291cmNlIGRhdGEgdG8gc29ydFxuICAgKiBAcGFyYW0geydhc2MnIHwgJ2Rlc2MnfSBvcmRlciBhc2NlbmRpbmcgb3IgZGVzY2VuZGluZyBvcmRlciBvZiBzb3J0aW5nXG4gICAqXG4gICAqICoqRXhhbXBsZSoqXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgZGF0YSA9IFsnMS41LjAnLCAnMi4wLjAnXTtcbiAgICogY29uc3Qgc29ydGVkRGF0YSA9IHBsdWdpbnNTZXJ2aWNlLnNvcnRWZXJzaW9ucyh2ZXJzaW9ucywgJ2Rlc2MnKTtcbiAgICogLy8gc29ydGVkRGF0YTpcbiAgICogLy8gWycyLjAuMCcsICcxLjUuMCddXG4gICAqIGBgYFxuICAgKlxuICAgKiAqKkV4YW1wbGUqKlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGRhdGEgPSBbXG4gICAqICB7YXBwOiB7YXBwVmVyc2lvbjogJzEuNS4wJ319LFxuICAgKiAge2FwcDoge2FwcFZlcnNpb246ICcyLjAuMCd9fSxcbiAgICogXTtcbiAgICogY29uc3Qgc29ydGVkRGF0YSA9IHBsdWdpbnNTZXJ2aWNlLnNvcnRWZXJzaW9ucyh7bGlzdDogZGF0YSwgcGF0aDogWydhcHAnLCAnYXBwVmVyc2lvbiddfSwgJ2Rlc2MnKTtcbiAgICogLy8gc29ydGVkRGF0YTpcbiAgICogLy8gW1xuICAgKiAvLyAge2FwcDoge2FwcFZlcnNpb246ICcyLjAuMCd9fSxcbiAgICogLy8gIHthcHA6IHthcHBWZXJzaW9uOiAnMS41LjAnfX1cbiAgICogLy8gXVxuICAgKiBgYGBcbiAgICovXG4gIHNvcnRWZXJzaW9uczxUPihzb3VyY2U6IHsgbGlzdDogVFtdOyBwYXRoOiBzdHJpbmdbXSB9LCBvcmRlcjogJ2FzYycgfCAnZGVzYycpOiBUW107XG4gIHNvcnRWZXJzaW9ucyhzb3VyY2U6IHN0cmluZ1tdLCBvcmRlcjogJ2FzYycgfCAnZGVzYycpOiBzdHJpbmdbXTtcbiAgc29ydFZlcnNpb25zKHNvdXJjZTogYW55LCBvcmRlcjogJ2FzYycgfCAnZGVzYycpOiBhbnkge1xuICAgIGNvbnN0IHNvdXJjZUNvcHkgPSBjbG9uZURlZXAoc291cmNlKTtcbiAgICBpZiAoc291cmNlLmxpc3QgJiYgc291cmNlLnBhdGgpIHtcbiAgICAgIGNvbnN0IHBhdGggPSBzb3VyY2VDb3B5LnBhdGguam9pbignLicpO1xuICAgICAgcmV0dXJuIHNvdXJjZUNvcHkubGlzdC5zb3J0KFxuICAgICAgICAoYSwgYikgPT4gY29tcGFyZShjb2VyY2UoZ2V0KGEsIHBhdGgpKSwgY29lcmNlKGdldChiLCBwYXRoKSkpICogKG9yZGVyID09PSAnYXNjJyA/IDEgOiAtMSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzb3VyY2VDb3B5LnNvcnQoKGEsIGIpID0+IGNvbXBhcmUoY29lcmNlKGEpLCBjb2VyY2UoYikpICogKG9yZGVyID09PSAnYXNjJyA/IDEgOiAtMSkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyBhIGxpc3Qgb2YgZXhwb3J0ZWQgcGx1Z2lucyBmcm9tIHRoZSBhcHBsaWNhdGlvbiBvYmplY3QuXG4gICAqIEBwYXJhbSBhcHBsaWNhdGlvbiBBcHBsaWNhdGlvbiBtYW5hZ2VkIG9iamVjdC5cbiAgICogQHBhcmFtIHVzZUxhdGVzdCBTZXQgdGhpcyB0byB0cnVlLCB0byBub3QgYmluZCB0aGUgcGx1Z2luIHRvIGFueSB2ZXJzaW9uLlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIGEgbGlzdCBvZiBleHBvcnRlZCBwbHVnaW5zLlxuICAgKi9cbiAgZ2V0TUZFeHBvcnRzKFxuICAgIGFwcGxpY2F0aW9uOiBJQXBwbGljYXRpb24sXG4gICAgZXhjbHVkZWRTY29wZXMgPSBbXG4gICAgICBQbHVnaW5zRXhwb3J0U2NvcGVzLlNFTEYsXG4gICAgICBQbHVnaW5zRXhwb3J0U2NvcGVzLlNFTEZfT1BUSU9OQUwsXG4gICAgICBQbHVnaW5zRXhwb3J0U2NvcGVzLkdMT0JBTFxuICAgIF0sXG4gICAgdXNlTGF0ZXN0ID0gZmFsc2VcbiAgKTogQXBwbGljYXRpb25QbHVnaW5bXSB7XG4gICAgY29uc3QgbWFuaWZlc3Q6IFBhcnRpYWw8SU1hbmlmZXN0PiA9IGFwcGxpY2F0aW9uLm1hbmlmZXN0O1xuICAgIGlmICghbWFuaWZlc3QgfHwgIW1hbmlmZXN0LmV4cG9ydHMpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5kUGx1Z2luc0RldGFpbHMoXG4gICAgICBhcHBsaWNhdGlvbixcbiAgICAgIHtcbiAgICAgICAgdmVyc2lvbjogbWFuaWZlc3QudmVyc2lvbixcbiAgICAgICAgYmluYXJ5SWQ6IHVuZGVmaW5lZFxuICAgICAgfSxcbiAgICAgIHVzZUxhdGVzdFxuICAgICkuZmlsdGVyKHBsdWdpbiA9PiAhZXhjbHVkZWRTY29wZXMuaW5jbHVkZXMocGx1Z2luLnNjb3BlKSk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgYSBsaXN0IG9mIGV4cG9ydHMgZnJvbSBlYWNoIGF2YWlsYWJsZSBwYWNrYWdlLlxuICAgKiBAcGFyYW0gYWxsVmVyc2lvbnMgSWYgc2V0IHRvIHRydWUsIGFsbCBhbmQgbm90IG9ubHkgbGF0ZXN0IHZlcnNpb25zIGFyZSBpbmNsdWRlZC5cbiAgICogQHBhcmFtIGV4Y2x1ZGVkU2NvcGVzIERlZmluZXMgd2hpY2ggc2NvcGVzIHNob3VsZCBub3QgYmUgbG9hZGVkLlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIGEgbGlzdCBvZiBhbGwgZXhwb3J0ZWQgcGx1Z2lucy5cbiAgICovXG4gIGFzeW5jIGdldEFsbE1GRXhwb3J0cyhcbiAgICBhbGxWZXJzaW9ucyA9IGZhbHNlLFxuICAgIGV4Y2x1ZGVkU2NvcGVzID0gW1xuICAgICAgUGx1Z2luc0V4cG9ydFNjb3Blcy5TRUxGLFxuICAgICAgUGx1Z2luc0V4cG9ydFNjb3Blcy5TRUxGX09QVElPTkFMLFxuICAgICAgUGx1Z2luc0V4cG9ydFNjb3Blcy5HTE9CQUxcbiAgICBdXG4gICk6IFByb21pc2U8QXBwbGljYXRpb25QbHVnaW5bXT4ge1xuICAgIGNvbnN0IHBsdWdpbnMgPSBuZXcgQXJyYXk8QXBwbGljYXRpb25QbHVnaW4+KCk7XG4gICAgY29uc3QgcGFja2FnZXMgPSBhd2FpdCB0aGlzLmxpc3RQYWNrYWdlcygpO1xuICAgIGZvciAoY29uc3QgcGtnIG9mIHBhY2thZ2VzKSB7XG4gICAgICBpZiAoIXBrZz8ubWFuaWZlc3Q/LmV4cG9ydHMpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoYWxsVmVyc2lvbnMgJiYgQXJyYXkuaXNBcnJheShwa2cuYXBwbGljYXRpb25WZXJzaW9ucykpIHtcbiAgICAgICAgcGtnLmFwcGxpY2F0aW9uVmVyc2lvbnMuZm9yRWFjaCh2ZXJzaW9uID0+IHtcbiAgICAgICAgICBwbHVnaW5zLnB1c2goLi4udGhpcy5leHRlbmRQbHVnaW5zRGV0YWlscyhwa2csIHZlcnNpb24pKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwbHVnaW5zLnB1c2goXG4gICAgICAgICAgLi4udGhpcy5leHRlbmRQbHVnaW5zRGV0YWlscyhwa2csIHtcbiAgICAgICAgICAgIHZlcnNpb246IHBrZy5tYW5pZmVzdC52ZXJzaW9uLFxuICAgICAgICAgICAgYmluYXJ5SWQ6IHVuZGVmaW5lZFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwbHVnaW5zLmZpbHRlcihwbHVnaW4gPT4gIWV4Y2x1ZGVkU2NvcGVzLmluY2x1ZGVzKHBsdWdpbi5zY29wZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIGEgbGlzdCBvZiByZW1vdGVzIGZyb20gdGhlIGFwcGxpY2F0aW9uIG9iamVjdC5cbiAgICogQHBhcmFtIGFwcGxpY2F0aW9uIEFwcGxpY2F0aW9uIG1hbmFnZWQgb2JqZWN0LlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIGxpc3Qgb2YgcmVtb3Rlcy5cbiAgICovXG4gIGdldE1GUmVtb3RlcyhhcHBsaWNhdGlvbjogSUFwcGxpY2F0aW9uKTogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zIHtcbiAgICBjb25zdCBtYW5pZmVzdCA9IGFwcGxpY2F0aW9uLm1hbmlmZXN0IHx8IHt9O1xuICAgIGNvbnN0IGNvbmZpZzogUGx1Z2luc0NvbmZpZyA9IGFwcGxpY2F0aW9uPy5jb25maWcgYXMgUGx1Z2luc0NvbmZpZztcbiAgICBsZXQgcmVtb3RlcyA9IGNvbmZpZz8ucmVtb3RlcyB8fCBtYW5pZmVzdC5yZW1vdGVzIHx8IHt9O1xuICAgIGNvbnN0IG1hbmlmZXN0RXhwb3J0cyA9IG1hbmlmZXN0LmV4cG9ydHMgfHwgbWFuaWZlc3QubWFuaWZlc3Q/LmV4cG9ydHMgfHwgW107XG4gICAgY29uc3Qgc2VsZlJlbW90ZXM6IHN0cmluZ1tdID0gbWFuaWZlc3RFeHBvcnRzXG4gICAgICAuZmlsdGVyKHBsdWdpbiA9PiBwbHVnaW4uc2NvcGUgPT09IFBsdWdpbnNFeHBvcnRTY29wZXMuU0VMRilcbiAgICAgIC5tYXAocGx1Z2luID0+IHBsdWdpbi5tb2R1bGUgfHwgcGx1Z2luLm5hbWUpO1xuXG4gICAgaWYgKHNlbGZSZW1vdGVzLmxlbmd0aCkge1xuICAgICAgcmVtb3RlcyA9IFBsdWdpbnNSZXNvbHZlU2VydmljZS5tZXJnZVJlbW90ZXMoW1xuICAgICAgICB7IFthcHBsaWNhdGlvbi5jb250ZXh0UGF0aF06IHNlbGZSZW1vdGVzIH0sXG4gICAgICAgIHJlbW90ZXNcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIHJlbW90ZXMgPSBQbHVnaW5zUmVzb2x2ZVNlcnZpY2UucmVtb3ZlUmVtb3RlcyhyZW1vdGVzLCBjb25maWc/LmV4Y2x1ZGVkUmVtb3Rlcyk7XG4gICAgcmV0dXJuIHJlbW90ZXM7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgdHlwZSBvZiBhIHBhY2thZ2UuXG4gICAqIEEgcGFja2FnZSBpcyBPRkZJQ0lBTCBpZiBpdCBjb21lcyBmcm9tIG1hbmFnZW1lbnQgdGVuYW50IGFuZCBoYXMgYSBsYWJlbCBhdHRhY2hlZCBjYWxsZWQgT0ZGSUNJQUwuXG4gICAqIEEgcGFja2FnZSBpcyBDT01NVU5JVFkgaWYgaXQgaGFzIGEgbGFiZWwgY2FsbGVkIENPTU1VTklUWS5cbiAgICogQSBwYWNrYWdlIGlzIENVU1RPTSBpZiBpdCBkb2VzIG5vdCBoYXZlIGFueSBsYWJlbCBhdHRhY2hlZC5cbiAgICogQSBwYWNrYWdlIGlzIFVOS05PV04gaWYgaXQgaGFzIGEgbGFiZWwgYXR0YWNoZWQgYnV0IGl0IGRvZXMgbm90IG1hdGNoIENPTU1VTklUWSBvciBPRkZJQ0lBTC5cbiAgICpcbiAgICogTGFiZWxzIGNhbiBiZSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBzdGF0dXMgb2YgYSBwYWNrYWdlLiBDb21tdW5pdHkgcGFja2FnZXMgYWx3YXlzIG5lZWRcbiAgICogYSBsaWNlbnNlIHZhbGlkYXRpb24uIFRoZSBsYWJlbCB3aWxsIGJlIHNob3duIG9uIHRoZSBhcHBsaWNhdGlvbiBjYXJkIHRvIHRlbGwgYSB1c2VyXG4gICAqIHdoZXRoZXIgdGhleSBhcmUgbG9va2luZyBpbnRvIGFuIG9mZmljaWFsIG9yIGNvbW11bml0eSBwYWNrYWdlLlxuICAgKlxuICAgKiBAcGFyYW0gcGFja2FnZUFwcGxpY2F0aW9uIFRoZSBwYWNrYWdlIGFwcGxpY2F0aW9uIG9iamVjdCB0byBjaGVjay5cbiAgICogQHJldHVybnMgVGhlIHBhY2thZ2UgdHlwZS5cbiAgICovXG4gIGdldFBhY2thZ2VUeXBlKHBhY2thZ2VBcHBsaWNhdGlvbjogSUFwcGxpY2F0aW9uKTogUGFja2FnZVR5cGUge1xuICAgIGNvbnN0IGxhYmVsID0gcGFja2FnZUFwcGxpY2F0aW9uLmxhYmVsIHx8IHBhY2thZ2VBcHBsaWNhdGlvbi5tYW5pZmVzdD8ubGFiZWw7XG4gICAgaWYgKCFsYWJlbCkge1xuICAgICAgcmV0dXJuIFBhY2thZ2VUeXBlLkNVU1RPTTtcbiAgICB9XG4gICAgaWYgKGxhYmVsID09PSBQYWNrYWdlVHlwZS5PRkZJQ0lBTCAmJiB0aGlzLmlzT3duZWRCeU1hbmFnZW1lbnQocGFja2FnZUFwcGxpY2F0aW9uKSkge1xuICAgICAgcmV0dXJuIFBhY2thZ2VUeXBlLk9GRklDSUFMO1xuICAgIH1cbiAgICBpZiAobGFiZWwgPT09IFBhY2thZ2VUeXBlLkNPTU1VTklUWSkge1xuICAgICAgcmV0dXJuIFBhY2thZ2VUeXBlLkNPTU1VTklUWTtcbiAgICB9XG4gICAgcmV0dXJuIFBhY2thZ2VUeXBlLlVOS05PV047XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgaWYgYW4gYXBwbGljYXRpb24gaXMgb3duZWQgYnkgbWFuYWdlbWVudCB0ZW5hbnQuXG4gICAqXG4gICAqIEBwYXJhbSBhcHAgVGhlIGFwcGxpY2F0aW9uIHRvIHZlcmlmeS5cbiAgICogQHJldHVybnMgVHJ1ZSBpZiBvd25lZCBieSBtYW5hZ2VtZW50IHRlbmFudC5cbiAgICovXG4gIGlzT3duZWRCeU1hbmFnZW1lbnQoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICBjb25zdCBhcHBPd25lciA9IGdldChhcHAsICdvd25lci50ZW5hbnQuaWQnKTtcbiAgICByZXR1cm4gYXBwT3duZXIgPT09ICdtYW5hZ2VtZW50JztcbiAgfVxuXG4gIHBsdWdpbnNGcm9tTWFuaWZlc3QobWFuaWZlc3Q6IElNYW5pZmVzdCk6IEFwcGxpY2F0aW9uUGx1Z2luW10ge1xuICAgIGNvbnN0IHBsdWdpbnM6IEFwcGxpY2F0aW9uUGx1Z2luW10gPSBtYW5pZmVzdC5leHBvcnRzO1xuICAgIGNvbnN0IGV4dGVuZGVkUGx1Z2lucyA9IHBsdWdpbnNcbiAgICAgIC5maWx0ZXIocCA9PiBwLnNjb3BlID09PSBQbHVnaW5zRXhwb3J0U2NvcGVzLlNFTEYpXG4gICAgICAubWFwKHAgPT4gKHtcbiAgICAgICAgLi4ucCxcbiAgICAgICAgaWQ6IFBsdWdpbnNTZXJ2aWNlLmNyZWF0ZVBsdWdpbklkKG1hbmlmZXN0LmNvbnRleHRQYXRoLCBwLCBtYW5pZmVzdC52ZXJzaW9uKSxcbiAgICAgICAgY29udGV4dFBhdGg6IG1hbmlmZXN0LmNvbnRleHRQYXRoLFxuICAgICAgICB2ZXJzaW9uOiBtYW5pZmVzdC52ZXJzaW9uLFxuICAgICAgICB2ZXJzaW9uaW5nTWF0cml4OiBtYW5pZmVzdC52ZXJzaW9uaW5nTWF0cml4LFxuICAgICAgICBsaWNlbnNlOiBtYW5pZmVzdC5saWNlbnNlLFxuICAgICAgICB0eXBlOiBQYWNrYWdlVHlwZS5DVVNUT01cbiAgICAgIH0pKTtcbiAgICByZXR1cm4gZXh0ZW5kZWRQbHVnaW5zO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1NlbGZTY29wZWRQbHVnaW4ocGx1Z2luOiBBcHBsaWNhdGlvblBsdWdpbiwgY29udGV4dFBhdGg/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgcGx1Z2luLnNjb3BlID09PSBQbHVnaW5zRXhwb3J0U2NvcGVzLlNFTEYgJiZcbiAgICAgICghY29udGV4dFBhdGggfHwgcGx1Z2luLmNvbnRleHRQYXRoID09PSBjb250ZXh0UGF0aClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWxmU2NvcGVkUGx1Z2lucyhcbiAgICBwbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbltdLFxuICAgIGNvbnRleHRQYXRoPzogc3RyaW5nXG4gICk6IEFwcGxpY2F0aW9uUGx1Z2luW10ge1xuICAgIHJldHVybiBwbHVnaW5zLmZpbHRlcihwbHVnaW4gPT4gdGhpcy5pc1NlbGZTY29wZWRQbHVnaW4ocGx1Z2luLCBjb250ZXh0UGF0aCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBbGxQbHVnaW5zRXhjZXB0U2VsZlNjb3BlZChcbiAgICBwbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbltdLFxuICAgIGNvbnRleHRQYXRoPzogc3RyaW5nXG4gICk6IEFwcGxpY2F0aW9uUGx1Z2luW10ge1xuICAgIHJldHVybiBwbHVnaW5zLmZpbHRlcihwbHVnaW4gPT4gIXRoaXMuaXNTZWxmU2NvcGVkUGx1Z2luKHBsdWdpbiwgY29udGV4dFBhdGgpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlRHVwbGljYXRlcyhhcHBzOiBJQXBwbGljYXRpb25bXSwga2V5OiBzdHJpbmcpOiBJQXBwbGljYXRpb25bXSB7XG4gICAgY29uc3QgdW5pcXVlTGlzdDogSUFwcGxpY2F0aW9uW10gPSBbXTtcbiAgICBjb25zdCBncm91cGVkQXBwc0J5S2V5OiBSZWNvcmQ8c3RyaW5nLCBJQXBwbGljYXRpb25bXT4gPSBncm91cEJ5KGFwcHMsIGtleSk7XG4gICAgY29uc3QgZ3JvdXBlZEFwcHM6IElBcHBsaWNhdGlvbltdW10gPSBPYmplY3Qua2V5cyhncm91cGVkQXBwc0J5S2V5KS5tYXAoXG4gICAgICBrZXkgPT4gZ3JvdXBlZEFwcHNCeUtleVtrZXldXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGFwcHNHcm91cCBvZiBncm91cGVkQXBwcykge1xuICAgICAgaWYgKGFwcHNHcm91cC5sZW5ndGggPCAyKSB7XG4gICAgICAgIHVuaXF1ZUxpc3QucHVzaCguLi5hcHBzR3JvdXApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYXBwRnJvbUN1cnJlbnRUZW5hbnQgPSBhcHBzR3JvdXAuZmluZChhcHAgPT4gdGhpcy5pc0Zyb21DdXJyZW50VGVuYW50KGFwcCkpO1xuICAgICAgICBpZiAoYXBwRnJvbUN1cnJlbnRUZW5hbnQpIHtcbiAgICAgICAgICB1bmlxdWVMaXN0LnB1c2goYXBwRnJvbUN1cnJlbnRUZW5hbnQpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFwcE5vdE93bmVkQnlNYW5hZ2VtZW50ID0gYXBwc0dyb3VwLmZpbmQoYXBwID0+ICF0aGlzLmlzT3duZWRCeU1hbmFnZW1lbnQoYXBwKSk7XG4gICAgICAgIHVuaXF1ZUxpc3QucHVzaChhcHBOb3RPd25lZEJ5TWFuYWdlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmlxdWVMaXN0O1xuICB9XG5cbiAgcHJpdmF0ZSBpc0Zyb21DdXJyZW50VGVuYW50KGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGFwcC5vd25lci50ZW5hbnQuaWQgPT09IHRoaXMuYXBwU3RhdGVTZXJ2aWNlLmN1cnJlbnRUZW5hbnQudmFsdWUubmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb2RpZmllcyB0aGUgbGlzdCBvZiBwbHVnaW5zIHRvIGhhdmUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBzdWNoIGFzIGlkLlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIGV4dGVuZFBsdWdpbnNEZXRhaWxzKFxuICAgIGFwcGxpY2F0aW9uOiBJQXBwbGljYXRpb24sXG4gICAgdmVyc2lvbjogSUFwcGxpY2F0aW9uVmVyc2lvbixcbiAgICB1c2VMYXRlc3QgPSBmYWxzZVxuICApOiBBcHBsaWNhdGlvblBsdWdpbltdIHtcbiAgICBjb25zdCBwbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbltdID0gYXBwbGljYXRpb24ubWFuaWZlc3QuZXhwb3J0cztcbiAgICBjb25zdCBleHRlbmRlZFBsdWdpbnM6IEFwcGxpY2F0aW9uUGx1Z2luW10gPSBwbHVnaW5zLm1hcChwID0+ICh7XG4gICAgICAuLi5wLFxuICAgICAgaWQ6IFBsdWdpbnNTZXJ2aWNlLmNyZWF0ZVBsdWdpbklkKGFwcGxpY2F0aW9uLmNvbnRleHRQYXRoLCBwLCB2ZXJzaW9uLnZlcnNpb24sIHVzZUxhdGVzdCksXG4gICAgICBpZExhdGVzdDogUGx1Z2luc1NlcnZpY2UuY3JlYXRlUGx1Z2luSWQoYXBwbGljYXRpb24uY29udGV4dFBhdGgsIHAsIHZlcnNpb24udmVyc2lvbiwgdHJ1ZSksXG4gICAgICBjb250ZXh0UGF0aDogYXBwbGljYXRpb24uY29udGV4dFBhdGgsXG4gICAgICB2ZXJzaW9uOiB2ZXJzaW9uLnZlcnNpb24sXG4gICAgICB2ZXJzaW9uaW5nTWF0cml4OiBhcHBsaWNhdGlvbi5tYW5pZmVzdC52ZXJzaW9uaW5nTWF0cml4LFxuICAgICAgdGFnczogdXNlTGF0ZXN0ID8gWydsYXRlc3QnXSA6IHZlcnNpb24udGFncyB8fCBbXSxcbiAgICAgIGxpY2Vuc2U6IGFwcGxpY2F0aW9uLm1hbmlmZXN0LmxpY2Vuc2UsXG4gICAgICB0eXBlOiB0aGlzLmdldFBhY2thZ2VUeXBlKGFwcGxpY2F0aW9uKVxuICAgIH0pKTtcbiAgICByZXR1cm4gZXh0ZW5kZWRQbHVnaW5zO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsaXN0QXBwbGljYXRpb25zQnlDdXJyZW50VGVuYW50KHBhcmFtczogYW55ID0ge30pOiBQcm9taXNlPElBcHBsaWNhdGlvbltdPiB7XG4gICAgY29uc3QgZmlsdGVyID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ0hPU1RFRCcsXG4gICAgICAgIHBhZ2VTaXplOiAyMDAwLFxuICAgICAgICB3aXRoVG90YWxQYWdlczogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHBhcmFtc1xuICAgICk7XG4gICAgY29uc3Qgc2hhcmVkRmlsdGVyID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgYXZhaWxhYmlsaXR5OiBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eS5TSEFSRUQsXG4gICAgICAgIHR5cGU6ICdIT1NURUQnLFxuICAgICAgICBwYWdlU2l6ZTogMjAwMCxcbiAgICAgICAgd2l0aFRvdGFsUGFnZXM6IHRydWVcbiAgICAgIH0sXG4gICAgICBwYXJhbXNcbiAgICApO1xuXG4gICAgY29uc3QgdGVuYW50TmFtZSA9IHRoaXMuYXBwU3RhdGVTZXJ2aWNlLmN1cnJlbnRUZW5hbnQudmFsdWUubmFtZTtcbiAgICBjb25zdCBbcmVzdWx0QXBwc093bmVkQnlUZW5hbnQsIHJlc3VsdFNoYXJlZEFwcHNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UubGlzdEJ5VGVuYW50KHRlbmFudE5hbWUsIGZpbHRlciksXG4gICAgICB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5saXN0KHNoYXJlZEZpbHRlcilcbiAgICBdKTtcbiAgICBjb25zdCB7IGRhdGE6IGFwcHNPd25lZEJ5VGVuYW50IH0gPSByZXN1bHRBcHBzT3duZWRCeVRlbmFudDtcbiAgICBjb25zdCB7IGRhdGE6IHNoYXJlZEFwcHMgfSA9IHJlc3VsdFNoYXJlZEFwcHM7XG4gICAgY29uc3Qgd2ViQXBwcyA9IFsuLi5hcHBzT3duZWRCeVRlbmFudCwgLi4uc2hhcmVkQXBwc107XG4gICAgcmV0dXJuIHVuaXFCeSh3ZWJBcHBzLCAoYXBwOiBJQXBwbGljYXRpb24pID0+IGFwcC5pZCk7XG4gIH1cblxuICBwcml2YXRlIGFkZFBsdWdpblRvUmVtb3Rlc0NvbmZpZyhcbiAgICByZW1vdGVzQ29uZmlnOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMsXG4gICAgcGx1Z2luczogQXBwbGljYXRpb25QbHVnaW4gfCBBcHBsaWNhdGlvblBsdWdpbltdXG4gICk6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyB7XG4gICAgaWYgKCFwbHVnaW5zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlbW90ZXNDb3B5ID0gY2xvbmVEZWVwKHJlbW90ZXNDb25maWcpO1xuICAgIGNvbnN0IHRlbXAgPSBBcnJheS5pc0FycmF5KHBsdWdpbnMpID8gcGx1Z2lucyA6IFtwbHVnaW5zXTtcblxuICAgIHRlbXAuZm9yRWFjaChwbHVnaW4gPT4ge1xuICAgICAgY29uc3QgeyBjb250ZXh0UGF0aCwgbW9kdWxlTmFtZSB9ID0gdGhpcy5wYXJzZVBsdWdpbklkKHBsdWdpbi5pZCk7XG4gICAgICBpZiAoIWNvbnRleHRQYXRoIHx8ICFtb2R1bGVOYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJlbW90ZXNDb3B5W2NvbnRleHRQYXRoXT8ubGVuZ3RoID49IDBcbiAgICAgICAgPyByZW1vdGVzQ29weVtjb250ZXh0UGF0aF0ucHVzaChtb2R1bGVOYW1lKVxuICAgICAgICA6IChyZW1vdGVzQ29weVtjb250ZXh0UGF0aF0gPSBbXSkucHVzaChtb2R1bGVOYW1lKTtcbiAgICAgIHJlbW90ZXNDb3B5W2NvbnRleHRQYXRoXSA9IFsuLi5uZXcgU2V0KHJlbW90ZXNDb3B5W2NvbnRleHRQYXRoXSldO1xuICAgIH0pO1xuICAgIHJldHVybiByZW1vdGVzQ29weTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlUGx1Z2luc0Zyb21SZW1vdGVzQ29uZmlnKFxuICAgIHJlbW90ZXNDb25maWc6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyxcbiAgICBwbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbiB8IEFwcGxpY2F0aW9uUGx1Z2luW11cbiAgKTogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zIHtcbiAgICBjb25zdCByZW1vdGVzQ29weTogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zID0gY2xvbmVEZWVwKHJlbW90ZXNDb25maWcpO1xuICAgIGNvbnN0IHRlbXAgPSBBcnJheS5pc0FycmF5KHBsdWdpbnMpID8gcGx1Z2lucyA6IFtwbHVnaW5zXTtcblxuICAgIHRlbXAuZm9yRWFjaChwbHVnaW4gPT4ge1xuICAgICAgY29uc3QgeyBjb250ZXh0UGF0aCwgbW9kdWxlTmFtZSB9ID0gdGhpcy5wYXJzZVBsdWdpbklkKHBsdWdpbi5pZCk7XG4gICAgICBpZiAoIWNvbnRleHRQYXRoIHx8ICFtb2R1bGVOYW1lIHx8ICFyZW1vdGVzQ29weVtjb250ZXh0UGF0aF0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVtb3Rlc0NvcHlbY29udGV4dFBhdGhdID0gcmVtb3Rlc0NvcHlbY29udGV4dFBhdGhdLmZpbHRlcihwID0+IHAgIT09IG1vZHVsZU5hbWUpO1xuICAgICAgcmVtb3Rlc0NvcHlbY29udGV4dFBhdGhdID0gWy4uLm5ldyBTZXQocmVtb3Rlc0NvcHlbY29udGV4dFBhdGhdKV07XG4gICAgICBpZiAocmVtb3Rlc0NvcHlbY29udGV4dFBhdGhdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkZWxldGUgcmVtb3Rlc0NvcHlbY29udGV4dFBhdGhdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZW1vdGVzQ29weTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VQbHVnaW5JZChpZDogc3RyaW5nKTogeyBjb250ZXh0UGF0aDogc3RyaW5nOyBtb2R1bGVOYW1lOiBzdHJpbmcgfSB7XG4gICAgY29uc3QgW2NvbnRleHRQYXRoLCBtb2R1bGVOYW1lXSA9IGlkLnNwbGl0KCcvJyk7XG4gICAgcmV0dXJuIHsgY29udGV4dFBhdGgsIG1vZHVsZU5hbWUgfTtcbiAgfVxufVxuIl19
|