@hmcts/ccd-case-ui-toolkit 7.0.37 → 7.0.38-accessibility-table-fixed
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.mjs +83 -38
- package/esm2020/lib/shared/components/case-editor/case-editor.module.mjs +6 -5
- package/esm2020/lib/shared/components/case-editor/services/case-worker.service.mjs +3 -3
- package/esm2020/lib/shared/components/palette/address/write-address-field.component.mjs +3 -5
- package/esm2020/lib/shared/components/palette/base-field/abstract-form-field.component.mjs +1 -1
- package/esm2020/lib/shared/components/palette/case-flag/write-case-flag-field.component.mjs +1 -1
- package/esm2020/lib/shared/components/palette/collection/write-collection-field.component.mjs +2 -4
- package/esm2020/lib/shared/components/palette/complex/write-complex-field.component.mjs +2 -4
- package/esm2020/lib/shared/components/palette/document/write-document-field.component.mjs +2 -2
- package/esm2020/lib/shared/components/palette/dynamic-multi-select-list/write-dynamic-multi-select-list-field.component.mjs +5 -5
- package/esm2020/lib/shared/components/palette/markdown/markdown.component.mjs +43 -3
- package/esm2020/lib/shared/components/palette/query-management/components/query-list/query-list.component.mjs +2 -2
- package/esm2020/lib/shared/components/palette/text/write-text-field.component.mjs +1 -1
- package/esm2020/lib/shared/components/palette/utils/first-error.pipe.mjs +4 -1
- package/esm2020/lib/shared/components/search-result/search-result.component.mjs +158 -170
- package/esm2020/lib/shared/domain/definition/case-field.model.mjs +4 -2
- package/esm2020/lib/shared/services/form/field-type-sanitiser.mjs +13 -2
- package/esm2020/lib/shared/services/form/form-validators.service.mjs +28 -2
- package/fesm2015/hmcts-ccd-case-ui-toolkit.mjs +411 -287
- package/fesm2015/hmcts-ccd-case-ui-toolkit.mjs.map +1 -1
- package/fesm2020/hmcts-ccd-case-ui-toolkit.mjs +396 -287
- package/fesm2020/hmcts-ccd-case-ui-toolkit.mjs.map +1 -1
- package/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.d.ts +8 -3
- package/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.d.ts.map +1 -1
- package/lib/shared/components/palette/address/write-address-field.component.d.ts +1 -2
- package/lib/shared/components/palette/address/write-address-field.component.d.ts.map +1 -1
- package/lib/shared/components/palette/base-field/abstract-form-field.component.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/write-case-flag-field.component.d.ts +0 -1
- package/lib/shared/components/palette/case-flag/write-case-flag-field.component.d.ts.map +1 -1
- package/lib/shared/components/palette/collection/write-collection-field.component.d.ts +1 -2
- package/lib/shared/components/palette/collection/write-collection-field.component.d.ts.map +1 -1
- package/lib/shared/components/palette/complex/write-complex-field.component.d.ts +1 -2
- package/lib/shared/components/palette/complex/write-complex-field.component.d.ts.map +1 -1
- package/lib/shared/components/palette/markdown/markdown.component.d.ts +6 -1
- package/lib/shared/components/palette/markdown/markdown.component.d.ts.map +1 -1
- package/lib/shared/components/palette/utils/first-error.pipe.d.ts.map +1 -1
- package/lib/shared/components/search-result/search-result.component.d.ts +1 -1
- package/lib/shared/components/search-result/search-result.component.d.ts.map +1 -1
- package/lib/shared/domain/definition/case-field.model.d.ts.map +1 -1
- package/lib/shared/services/form/field-type-sanitiser.d.ts +1 -0
- package/lib/shared/services/form/field-type-sanitiser.d.ts.map +1 -1
- package/lib/shared/services/form/form-validators.service.d.ts +4 -0
- package/lib/shared/services/form/form-validators.service.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -15,9 +15,9 @@ export class CaseworkerService {
|
|
|
15
15
|
this.errorService = errorService;
|
|
16
16
|
}
|
|
17
17
|
getCaseworkers(serviceId) {
|
|
18
|
-
const url = `${this.appConfig.getWorkAllocationApiUrl()}/
|
|
18
|
+
const url = `${this.appConfig.getWorkAllocationApiUrl()}/caseworker/getUsersByServiceName`;
|
|
19
19
|
return this.http
|
|
20
|
-
.post(url, {
|
|
20
|
+
.post(url, { services: [serviceId] })
|
|
21
21
|
.pipe(catchError(error => {
|
|
22
22
|
this.errorService.setError(error);
|
|
23
23
|
return throwError(error);
|
|
@@ -29,4 +29,4 @@ CaseworkerService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: Casewo
|
|
|
29
29
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CaseworkerService, [{
|
|
30
30
|
type: Injectable
|
|
31
31
|
}], function () { return [{ type: i1.HttpService }, { type: i2.AbstractAppConfig }, { type: i3.HttpErrorService }]; }, null); })();
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS13b3JrZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9jYXNlLWVkaXRvci9zZXJ2aWNlcy9jYXNlLXdvcmtlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7OztBQUdsRSxNQUFNLE9BQU8saUJBQWlCO0lBRTVCLFlBQ21CLElBQWlCLEVBQ2pCLFNBQTRCLEVBQzVCLFlBQThCO1FBRjlCLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsY0FBUyxHQUFULFNBQVMsQ0FBbUI7UUFDNUIsaUJBQVksR0FBWixZQUFZLENBQWtCO0lBRWpELENBQUM7SUFFTSxjQUFjLENBQUMsU0FBUztRQUM3QixNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLEVBQUUsbUNBQW1DLENBQUM7UUFDM0YsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBQyxDQUFDO2FBQ25DLElBQUksQ0FDSCxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEMsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7O2tGQW5CVSxpQkFBaUI7dUVBQWpCLGlCQUFpQixXQUFqQixpQkFBaUI7dUZBQWpCLGlCQUFpQjtjQUQ3QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFic3RyYWN0QXBwQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXBwLmNvbmZpZyc7XG5pbXBvcnQgeyBDYXNld29ya2Vyc0J5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi93b3JrLWFsbG9jYXRpb24vY2FzZS13b3JrZXIubW9kZWwnO1xuaW1wb3J0IHsgSHR0cEVycm9yU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2h0dHAvaHR0cC1lcnJvci5zZXJ2aWNlJztcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaHR0cC9odHRwLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ2FzZXdvcmtlclNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cDogSHR0cFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBhcHBDb25maWc6IEFic3RyYWN0QXBwQ29uZmlnLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZXJyb3JTZXJ2aWNlOiBIdHRwRXJyb3JTZXJ2aWNlXG4gICkge1xuICB9XG5cbiAgcHVibGljIGdldENhc2V3b3JrZXJzKHNlcnZpY2VJZCk6IE9ic2VydmFibGU8Q2FzZXdvcmtlcnNCeVNlcnZpY2VbXT4ge1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYXBwQ29uZmlnLmdldFdvcmtBbGxvY2F0aW9uQXBpVXJsKCl9L2Nhc2V3b3JrZXIvZ2V0VXNlcnNCeVNlcnZpY2VOYW1lYDtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdCh1cmwsIHsgc2VydmljZXM6IFtzZXJ2aWNlSWRdfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yU2VydmljZS5zZXRFcnJvcihlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component,
|
|
1
|
+
import { Component, QueryList, ViewChild, ViewChildren } from '@angular/core';
|
|
2
2
|
import { FormControl, FormGroup, Validators } from '@angular/forms';
|
|
3
3
|
import { AddressValidationConstants } from '../../../commons/address-validation-constants';
|
|
4
4
|
import { FocusElementDirective } from '../../../directives/focus-element';
|
|
@@ -255,7 +255,7 @@ WriteAddressFieldComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
|
|
|
255
255
|
let _t;
|
|
256
256
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.writeComplexFieldComponent = _t.first);
|
|
257
257
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.focusElementDirectives = _t);
|
|
258
|
-
} },
|
|
258
|
+
} }, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 4, vars: 9, consts: [[1, "form-group", 3, "id"], [4, "ngIf"], [3, "hidden", "caseField", "renderLabel", "parent", "formGroup", "ignoreMandatory", "idPrefix"], ["writeComplexFieldComponent", ""], [1, "heading-h2"], ["class", "form-group bottom-30 postcodeLookup", 3, "id", "ngClass", 4, "ngIf"], ["class", "form-group", "id", "selectAddress", 3, "ngClass", 4, "ngIf"], ["class", "manual-link bottom-30", "href", "javascript:void(0)", 3, "click", 4, "ngIf"], [1, "form-group", "bottom-30", "postcodeLookup", 3, "id", "ngClass"], [3, "for"], [1, "form-label"], ["class", "error-message", 4, "ngIf"], ["type", "text", "name", "postcode", 1, "form-control", "postcodeinput", "inline-block", 3, "ngClass", "id", "formControl"], ["type", "button", 1, "button", "button-30", 3, "click"], [1, "error-message"], ["id", "selectAddress", 1, "form-group", 3, "ngClass"], ["name", "address", "focusElement", "", 1, "form-control", "ccd-dropdown", "addressList", 3, "id", "formControl", "change"], [3, "ngValue", 4, "ngFor", "ngForOf"], [3, "ngValue"], ["href", "javascript:void(0)", 1, "manual-link", "bottom-30", 3, "click"]], template: function WriteAddressFieldComponent_Template(rf, ctx) { if (rf & 1) {
|
|
259
259
|
i0.ɵɵelementStart(0, "div", 0);
|
|
260
260
|
i0.ɵɵtemplate(1, WriteAddressFieldComponent_div_1_Template, 7, 6, "div", 1);
|
|
261
261
|
i0.ɵɵelement(2, "ccd-write-complex-type-field", 2, 3);
|
|
@@ -276,7 +276,5 @@ WriteAddressFieldComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
|
|
|
276
276
|
}], focusElementDirectives: [{
|
|
277
277
|
type: ViewChildren,
|
|
278
278
|
args: [FocusElementDirective]
|
|
279
|
-
}], formGroup: [{
|
|
280
|
-
type: Input
|
|
281
279
|
}] }); })();
|
|
282
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUtYWRkcmVzcy1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvcGFsZXR0ZS9hZGRyZXNzL3dyaXRlLWFkZHJlc3MtZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvYWRkcmVzcy93cml0ZS1hZGRyZXNzLWZpZWxkLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBaUIsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2SCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUMzRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDakYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDM0YsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7O0lDRGpELGdDQUFvRDtJQUFBLFlBQStCOztJQUFBLGlCQUFPOzs7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LEdBQUcsd0JBQXdCLENBQUM7b0dBUjdELDBCQUEwQjs2RUFBMUIsMEJBQTBCOzt1QkFJdkIscUJBQXFCOzs7Ozs7UUNwQnJDLDhCQUFvQztRQUNsQywyRUE0Qk07UUFFTixxREFTK0I7UUFDakMsaUJBQU07O1FBekNrQiw2QkFBVztRQUMzQixlQUFrQztRQUFsQyx1REFBa0M7UUErQnRDLGVBQW9DO1FBQXBDLHNEQUFvQyw0QkFBQSxzQkFBQSxzQkFBQSw0QkFBQSx5QkFBQSx5Q0FBQTs7dUZEaEIzQiwwQkFBMEI7Y0FMdEMsU0FBUzsyQkFDRSx5QkFBeUI7Z0dBTTVCLDBCQUEwQjtrQkFEaEMsU0FBUzttQkFBQyw0QkFBNEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7WUFJbkQsc0JBQXNCO2tCQUQ1QixZQUFZO21CQUFDLHFCQUFxQjtZQVM1QixTQUFTO2tCQURmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgUXVlcnlMaXN0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFkZHJlc3NWYWxpZGF0aW9uQ29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9ucy9hZGRyZXNzLXZhbGlkYXRpb24tY29uc3RhbnRzJztcbmltcG9ydCB7IEZvY3VzRWxlbWVudERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvZm9jdXMtZWxlbWVudCc7XG5pbXBvcnQgeyBBZGRyZXNzTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9kb21haW4vYWRkcmVzc2VzL2FkZHJlc3MubW9kZWwnO1xuaW1wb3J0IHsgQWRkcmVzc2VzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FkZHJlc3Nlcy9hZGRyZXNzZXMuc2VydmljZSc7XG5pbXBvcnQgeyBBYnN0cmFjdEZpZWxkV3JpdGVDb21wb25lbnQgfSBmcm9tICcuLi9iYXNlLWZpZWxkL2Fic3RyYWN0LWZpZWxkLXdyaXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBXcml0ZUNvbXBsZXhGaWVsZENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBsZXgvd3JpdGUtY29tcGxleC1maWVsZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSXNDb21wb3VuZFBpcGUgfSBmcm9tICcuLi91dGlscy9pcy1jb21wb3VuZC5waXBlJztcbmltcG9ydCB7IEFkZHJlc3NPcHRpb24gfSBmcm9tICcuL2FkZHJlc3Mtb3B0aW9uLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NkLXdyaXRlLWFkZHJlc3MtZmllbGQnLFxuICB0ZW1wbGF0ZVVybDogJ3dyaXRlLWFkZHJlc3MtZmllbGQuaHRtbCcsXG4gIHN0eWxlVXJsczogWyd3cml0ZS1hZGRyZXNzLWZpZWxkLnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBXcml0ZUFkZHJlc3NGaWVsZENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0RmllbGRXcml0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQFZpZXdDaGlsZCgnd3JpdGVDb21wbGV4RmllbGRDb21wb25lbnQnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgcHVibGljIHdyaXRlQ29tcGxleEZpZWxkQ29tcG9uZW50OiBXcml0ZUNvbXBsZXhGaWVsZENvbXBvbmVudDtcblxuICBAVmlld0NoaWxkcmVuKEZvY3VzRWxlbWVudERpcmVjdGl2ZSlcbiAgcHVibGljIGZvY3VzRWxlbWVudERpcmVjdGl2ZXM6IFF1ZXJ5TGlzdDxGb2N1c0VsZW1lbnREaXJlY3RpdmU+O1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUkVRVUlSRURfRVJST1JfTUVTU0FHRSA9ICdFbnRlciBhIFBvc3Rjb2RlJztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBJTlZBTElEX0VSUk9SX01FU1NBR0UgPSAnRW50ZXIgYSB2YWxpZCBQb3N0Y29kZSc7XG5cbiAgcHVibGljIGFkZHJlc3Nlc1NlcnZpY2U6IEFkZHJlc3Nlc1NlcnZpY2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuXG4gIHB1YmxpYyBhZGRyZXNzRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gIHB1YmxpYyBwb3N0Y29kZTogRm9ybUNvbnRyb2w7XG4gIHB1YmxpYyBhZGRyZXNzTGlzdDogRm9ybUNvbnRyb2w7XG5cbiAgcHVibGljIGFkZHJlc3NPcHRpb25zOiBBZGRyZXNzT3B0aW9uW107XG5cbiAgcHVibGljIGVycm9yTWVzc2FnZTogc3RyaW5nID0gV3JpdGVBZGRyZXNzRmllbGRDb21wb25lbnQuUkVRVUlSRURfRVJST1JfTUVTU0FHRTtcblxuICBwdWJsaWMgbWlzc2luZ1Bvc3Rjb2RlID0gZmFsc2U7XG4gIHB1YmxpYyBub0FkZHJlc3NTZWxlY3RlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKGFkZHJlc3Nlc1NlcnZpY2U6IEFkZHJlc3Nlc1NlcnZpY2UsIHByaXZhdGUgcmVhZG9ubHkgaXNDb21wb3VuZFBpcGU6IElzQ29tcG91bmRQaXBlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkZHJlc3Nlc1NlcnZpY2UgPSBhZGRyZXNzZXNTZXJ2aWNlO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0NvbXBsZXhXaXRoSGlkZGVuRmllbGRzKCkpIHtcbiAgICAgIHRoaXMucG9zdGNvZGUgPSBuZXcgRm9ybUNvbnRyb2woJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XG4gICAgICB0aGlzLmFkZHJlc3NGb3JtR3JvdXAuYWRkQ29udHJvbCgncG9zdGNvZGUnLCB0aGlzLnBvc3Rjb2RlKTtcbiAgICAgIHRoaXMuYWRkcmVzc0xpc3QgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xuICAgICAgdGhpcy5hZGRyZXNzRm9ybUdyb3VwLmFkZENvbnRyb2woJ2FkZHJlc3MnLCB0aGlzLmFkZHJlc3NMaXN0KTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZHJlc3Nlc1NlcnZpY2UuZ2V0TWFuZGF0b3J5RXJyb3IoKS5zdWJzY3JpYmUoKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZUVycm9yc09uQ29udGludWUodmFsdWUpO1xuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgZmluZEFkZHJlc3MoKSB7XG4gICAgdGhpcy5ub0FkZHJlc3NTZWxlY3RlZCA9IGZhbHNlO1xuICAgIGlmICghdGhpcy5wb3N0Y29kZS52YWx1ZSkge1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBXcml0ZUFkZHJlc3NGaWVsZENvbXBvbmVudC5SRVFVSVJFRF9FUlJPUl9NRVNTQUdFO1xuICAgICAgdGhpcy5taXNzaW5nUG9zdGNvZGUgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMucG9zdGNvZGUudmFsdWUudHJpbSgpLm1hdGNoKEFkZHJlc3NWYWxpZGF0aW9uQ29uc3RhbnRzLlJFR0VYX1BPU1RDT0RFKSkge1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBXcml0ZUFkZHJlc3NGaWVsZENvbXBvbmVudC5JTlZBTElEX0VSUk9SX01FU1NBR0U7XG4gICAgICB0aGlzLm1pc3NpbmdQb3N0Y29kZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWlzc2luZ1Bvc3Rjb2RlID0gZmFsc2U7XG4gICAgICBjb25zdCBwb3N0Y29kZSA9IHRoaXMucG9zdGNvZGUudmFsdWU7XG4gICAgICB0aGlzLmNhc2VGaWVsZC52YWx1ZSA9IG51bGw7XG4gICAgICB0aGlzLmFkZHJlc3NPcHRpb25zID0gW107XG4gICAgICB0aGlzLmFkZHJlc3Nlc1NlcnZpY2UuZ2V0QWRkcmVzc2VzRm9yUG9zdGNvZGUocG9zdGNvZGUucmVwbGFjZSgnICcsICcnKS50b1VwcGVyQ2FzZSgpKS5zdWJzY3JpYmUoXG4gICAgICAgIHJlc3VsdCA9PiB7XG4gICAgICAgICAgcmVzdWx0LmZvckVhY2goXG4gICAgICAgICAgICBhZGRyZXNzID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5hZGRyZXNzT3B0aW9ucy5wdXNoKG5ldyBBZGRyZXNzT3B0aW9uKGFkZHJlc3MsIG51bGwpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuYWRkcmVzc09wdGlvbnMudW5zaGlmdChcbiAgICAgICAgICAgIG5ldyBBZGRyZXNzT3B0aW9uKHVuZGVmaW5lZCwgdGhpcy5kZWZhdWx0TGFiZWwodGhpcy5hZGRyZXNzT3B0aW9ucy5sZW5ndGgpKVxuICAgICAgICAgICk7XG4gICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBBbiBlcnJvciBvY2N1cnJlZCByZXRyaWV2aW5nIGFkZHJlc3NlcyBmb3IgcG9zdGNvZGUgJHtwb3N0Y29kZX0uICR7ZXJyb3J9YCk7XG4gICAgICAgICAgdGhpcy5hZGRyZXNzT3B0aW9ucy51bnNoaWZ0KFxuICAgICAgICAgICAgbmV3IEFkZHJlc3NPcHRpb24odW5kZWZpbmVkLCB0aGlzLmRlZmF1bHRMYWJlbCh0aGlzLmFkZHJlc3NPcHRpb25zLmxlbmd0aCkpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB0aGlzLmFkZHJlc3NMaXN0LnNldFZhbHVlKHVuZGVmaW5lZCk7XG4gICAgICB0aGlzLnJlZm9jdXNFbGVtZW50KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlZm9jdXNFbGVtZW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZvY3VzRWxlbWVudERpcmVjdGl2ZXMgJiYgdGhpcy5mb2N1c0VsZW1lbnREaXJlY3RpdmVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZm9jdXNFbGVtZW50RGlyZWN0aXZlcy5maXJzdC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBibGFua0FkZHJlc3MoKSB7XG4gICAgdGhpcy5jYXNlRmllbGQudmFsdWUgPSBuZXcgQWRkcmVzc01vZGVsKCk7XG4gICAgdGhpcy5zZXRGb3JtVmFsdWUoKTtcbiAgICB0aGlzLm1pc3NpbmdQb3N0Y29kZSA9IGZhbHNlO1xuICAgIHRoaXMubm9BZGRyZXNzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBpc0NvbXBsZXhXaXRoSGlkZGVuRmllbGRzKCkge1xuICAgIGlmICh0aGlzLmNhc2VGaWVsZC5pc0NvbXBsZXgoKSAmJiB0aGlzLmNhc2VGaWVsZC5maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzXG4gICAgICAmJiB0aGlzLmNhc2VGaWVsZC5maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzLnNvbWUoY2YgPT4gY2YuaGlkZGVuID09PSB0cnVlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNob3VsZFNob3dEZXRhaWxGaWVsZHMoKSB7XG4gICAgaWYgKHRoaXMuaXNDb21wbGV4V2l0aEhpZGRlbkZpZWxkcygpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNFeHBhbmRlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICghdGhpcy53cml0ZUNvbXBsZXhGaWVsZENvbXBvbmVudCB8fCAhdGhpcy53cml0ZUNvbXBsZXhGaWVsZENvbXBvbmVudC5jb21wbGV4R3JvdXApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgYWRkcmVzcyA9IHRoaXMud3JpdGVDb21wbGV4RmllbGRDb21wb25lbnQuY29tcGxleEdyb3VwLnZhbHVlO1xuICAgIGxldCBoYXNBZGRyZXNzID0gZmFsc2U7XG4gICAgaWYgKGFkZHJlc3MpIHtcbiAgICAgIE9iamVjdC5rZXlzKGFkZHJlc3MpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBpZiAoYWRkcmVzc1trZXldICE9PSBudWxsKSB7XG4gICAgICAgICAgaGFzQWRkcmVzcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gaGFzQWRkcmVzcztcbiAgfVxuXG4gIHB1YmxpYyBhZGRyZXNzU2VsZWN0ZWQoKSB7XG4gICAgdGhpcy5jYXNlRmllbGQudmFsdWUgPSB0aGlzLmFkZHJlc3NMaXN0LnZhbHVlO1xuICAgIHRoaXMuc2V0Rm9ybVZhbHVlKCk7XG4gICAgdGhpcy5ub0FkZHJlc3NTZWxlY3RlZCA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcbiAgICBjb25zdCBjaGFuZ2UgPSBjaGFuZ2VzWydjYXNlRmllbGQnXTtcbiAgICBpZiAoY2hhbmdlKSB7XG4gICAgICB0aGlzLnNldEZvcm1WYWx1ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBidWlsZElkUHJlZml4KGVsZW1lbnRJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5pZFByZWZpeH1fJHtlbGVtZW50SWR9YDtcbiAgfVxuXG4gIHByaXZhdGUgZGVmYXVsdExhYmVsKG51bWJlck9mQWRkcmVzc2VzKSB7XG4gICAgcmV0dXJuIG51bWJlck9mQWRkcmVzc2VzID09PSAwID8gJ05vIGFkZHJlc3MgZm91bmQnXG4gICAgICA6IGAke251bWJlck9mQWRkcmVzc2VzfSR7bnVtYmVyT2ZBZGRyZXNzZXMgPT09IDEgPyAnIGFkZHJlc3MgJyA6ICcgYWRkcmVzc2VzICd9Zm91bmRgO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb3JtVmFsdWUoKSB7XG4gICAgaWYgKHRoaXMud3JpdGVDb21wbGV4RmllbGRDb21wb25lbnQuY29tcGxleEdyb3VwKSB7XG4gICAgICB0aGlzLndyaXRlQ29tcGxleEZpZWxkQ29tcG9uZW50LmNvbXBsZXhHcm91cC5zZXRWYWx1ZShcbiAgICAgICAgdGhpcy5jYXNlRmllbGQudmFsdWVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVFcnJvcnNPbkNvbnRpbnVlKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5taXNzaW5nUG9zdGNvZGUgPSB2YWx1ZSAmJiAhdGhpcy5zaG91bGRTaG93RGV0YWlsRmllbGRzKCkgJiYgIXRoaXMuYWRkcmVzc09wdGlvbnM7XG4gICAgdGhpcy5ub0FkZHJlc3NTZWxlY3RlZCA9IHZhbHVlICYmICF0aGlzLnNob3VsZFNob3dEZXRhaWxGaWVsZHMoKSAmJiAhIXRoaXMuYWRkcmVzc09wdGlvbnM7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLm5vQWRkcmVzc1NlbGVjdGVkID8gJ1NlbGVjdCBhbiBhZGRyZXNzJyA6IHRoaXMuZXJyb3JNZXNzYWdlO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiIFtpZF09XCJpZCgpXCI+XG4gIDxkaXYgKm5nSWY9XCIhaXNDb21wbGV4V2l0aEhpZGRlbkZpZWxkcygpXCI+XG4gICAgPGgyIGNsYXNzPVwiaGVhZGluZy1oMlwiPnt7Y2FzZUZpZWxkIHwgY2NkRmllbGRMYWJlbH19PC9oMj5cblxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGJvdHRvbS0zMCBwb3N0Y29kZUxvb2t1cFwiIFtpZF09XCJjcmVhdGVFbGVtZW50SWQoJ3Bvc3Rjb2RlTG9va3VwJylcIiBbbmdDbGFzc109XCJ7J2Zvcm0tZ3JvdXAtZXJyb3InOiBtaXNzaW5nUG9zdGNvZGV9XCIgKm5nSWY9XCIhaXNFeHBhbmRlZFwiPlxuICAgICAgPGxhYmVsIFtmb3JdPVwiY3JlYXRlRWxlbWVudElkKCdwb3N0Y29kZUlucHV0JylcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3snRW50ZXIgYSBVSyBwb3N0Y29kZScgfCBycHhUcmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgICA8c3BhbiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cIm1pc3NpbmdQb3N0Y29kZVwiPnt7ZXJyb3JNZXNzYWdlIHwgcnB4VHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbbmdDbGFzc109XCJ7J2dvdnVrLWlucHV0LS1lcnJvcic6IG1pc3NpbmdQb3N0Y29kZX1cIlxuICAgICAgW2lkXT1cImNyZWF0ZUVsZW1lbnRJZCgncG9zdGNvZGVJbnB1dCcpXCIgbmFtZT1cInBvc3Rjb2RlXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgcG9zdGNvZGVpbnB1dCBpbmxpbmUtYmxvY2tcIiBbZm9ybUNvbnRyb2xdPVwicG9zdGNvZGVcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi0zMFwiIChjbGljayk9XCJmaW5kQWRkcmVzcygpXCI+e3snRmluZCBhZGRyZXNzJyB8IHJweFRyYW5zbGF0ZX19PC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiYWRkcmVzc09wdGlvbnNcIiBpZD1cInNlbGVjdEFkZHJlc3NcIiBbbmdDbGFzc109XCJ7J2Zvcm0tZ3JvdXAtZXJyb3InOiBub0FkZHJlc3NTZWxlY3RlZH1cIj5cbiAgICAgIDxsYWJlbCBbZm9yXT1cImNyZWF0ZUVsZW1lbnRJZCgnYWRkcmVzc0xpc3QnKVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tbGFiZWxcIj57eydTZWxlY3QgYW4gYWRkcmVzcycgfCBycHhUcmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgICA8c3BhbiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cIm5vQWRkcmVzc1NlbGVjdGVkXCI+e3tlcnJvck1lc3NhZ2UgfCBycHhUcmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2wgY2NkLWRyb3Bkb3duIGFkZHJlc3NMaXN0XCIgW2lkXT1cImNyZWF0ZUVsZW1lbnRJZCgnYWRkcmVzc0xpc3QnKVwiIG5hbWU9XCJhZGRyZXNzXCIgW2Zvcm1Db250cm9sXT1cImFkZHJlc3NMaXN0XCIgKGNoYW5nZSk9XCJhZGRyZXNzU2VsZWN0ZWQoKVwiIGZvY3VzRWxlbWVudD5cbiAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgYWRkcmVzc09wdGlvbiBvZiBhZGRyZXNzT3B0aW9uc1wiIFtuZ1ZhbHVlXT1cImFkZHJlc3NPcHRpb24udmFsdWVcIj5cbiAgICAgICAgICB7e2FkZHJlc3NPcHRpb24uZGVzY3JpcHRpb24gfCBycHhUcmFuc2xhdGV9fVxuICAgICAgICA8L29wdGlvbj5cbiAgICAgIDwvc2VsZWN0PlxuICAgIDwvZGl2PlxuXG4gICAgPGEgY2xhc3M9XCJtYW51YWwtbGluayBib3R0b20tMzBcIiAqbmdJZj1cIiFzaG91bGRTaG93RGV0YWlsRmllbGRzKClcIiAoY2xpY2spPVwiYmxhbmtBZGRyZXNzKClcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCI+XG4gICAgICB7e1wiSSBjYW4ndCBlbnRlciBhIFVLIHBvc3Rjb2RlXCIgfCBycHhUcmFuc2xhdGV9fVxuICAgIDwvYT5cbiAgPC9kaXY+XG5cbiAgPGNjZC13cml0ZS1jb21wbGV4LXR5cGUtZmllbGRcbiAgICBbaGlkZGVuXT1cIiFzaG91bGRTaG93RGV0YWlsRmllbGRzKClcIlxuICAgIFtjYXNlRmllbGRdPVwiY2FzZUZpZWxkXCJcbiAgICBbcmVuZGVyTGFiZWxdPVwiZmFsc2VcIlxuICAgIFtwYXJlbnRdPVwicGFyZW50XCJcbiAgICBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiXG4gICAgW2lnbm9yZU1hbmRhdG9yeV09XCJ0cnVlXCJcbiAgICBbaWRQcmVmaXhdPVwiYnVpbGRJZFByZWZpeCgnZGV0YWlsJylcIlxuICAgICN3cml0ZUNvbXBsZXhGaWVsZENvbXBvbmVudD5cbiAgPC9jY2Qtd3JpdGUtY29tcGxleC10eXBlLWZpZWxkPlxuPC9kaXY+XG4iXX0=
|
|
280
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUtYWRkcmVzcy1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvcGFsZXR0ZS9hZGRyZXNzL3dyaXRlLWFkZHJlc3MtZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvYWRkcmVzcy93cml0ZS1hZGRyZXNzLWZpZWxkLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBNEIsU0FBUyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZILE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQzNGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUMzRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN0RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7SUNEakQsZ0NBQW9EO0lBQUEsWUFBK0I7O0lBQUEsaUJBQU87OztJQUF0QyxlQUEr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d0IsQ0FBQztvR0FSN0QsMEJBQTBCOzZFQUExQiwwQkFBMEI7O3VCQUl2QixxQkFBcUI7Ozs7OztRQ3BCckMsOEJBQW9DO1FBQ2xDLDJFQTRCTTtRQUVOLHFEQVMrQjtRQUNqQyxpQkFBTTs7UUF6Q2tCLDZCQUFXO1FBQzNCLGVBQWtDO1FBQWxDLHVEQUFrQztRQStCdEMsZUFBb0M7UUFBcEMsc0RBQW9DLDRCQUFBLHNCQUFBLHNCQUFBLDRCQUFBLHlCQUFBLHlDQUFBOzt1RkRoQjNCLDBCQUEwQjtjQUx0QyxTQUFTOzJCQUNFLHlCQUF5QjtnR0FNNUIsMEJBQTBCO2tCQURoQyxTQUFTO21CQUFDLDRCQUE0QixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtZQUluRCxzQkFBc0I7a0JBRDVCLFlBQVk7bUJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIFF1ZXJ5TGlzdCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBZGRyZXNzVmFsaWRhdGlvbkNvbnN0YW50cyB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbnMvYWRkcmVzcy12YWxpZGF0aW9uLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBGb2N1c0VsZW1lbnREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzL2ZvY3VzLWVsZW1lbnQnO1xuaW1wb3J0IHsgQWRkcmVzc01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluL2FkZHJlc3Nlcy9hZGRyZXNzLm1vZGVsJztcbmltcG9ydCB7IEFkZHJlc3Nlc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hZGRyZXNzZXMvYWRkcmVzc2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWJzdHJhY3RGaWVsZFdyaXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vYmFzZS1maWVsZC9hYnN0cmFjdC1maWVsZC13cml0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgV3JpdGVDb21wbGV4RmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9jb21wbGV4L3dyaXRlLWNvbXBsZXgtZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7IElzQ29tcG91bmRQaXBlIH0gZnJvbSAnLi4vdXRpbHMvaXMtY29tcG91bmQucGlwZSc7XG5pbXBvcnQgeyBBZGRyZXNzT3B0aW9uIH0gZnJvbSAnLi9hZGRyZXNzLW9wdGlvbi5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjZC13cml0ZS1hZGRyZXNzLWZpZWxkJyxcbiAgdGVtcGxhdGVVcmw6ICd3cml0ZS1hZGRyZXNzLWZpZWxkLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnd3JpdGUtYWRkcmVzcy1maWVsZC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgV3JpdGVBZGRyZXNzRmllbGRDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdEZpZWxkV3JpdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBWaWV3Q2hpbGQoJ3dyaXRlQ29tcGxleEZpZWxkQ29tcG9uZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHB1YmxpYyB3cml0ZUNvbXBsZXhGaWVsZENvbXBvbmVudDogV3JpdGVDb21wbGV4RmllbGRDb21wb25lbnQ7XG5cbiAgQFZpZXdDaGlsZHJlbihGb2N1c0VsZW1lbnREaXJlY3RpdmUpXG4gIHB1YmxpYyBmb2N1c0VsZW1lbnREaXJlY3RpdmVzOiBRdWVyeUxpc3Q8Rm9jdXNFbGVtZW50RGlyZWN0aXZlPjtcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJFUVVJUkVEX0VSUk9SX01FU1NBR0UgPSAnRW50ZXIgYSBQb3N0Y29kZSc7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSU5WQUxJRF9FUlJPUl9NRVNTQUdFID0gJ0VudGVyIGEgdmFsaWQgUG9zdGNvZGUnO1xuXG4gIHB1YmxpYyBhZGRyZXNzZXNTZXJ2aWNlOiBBZGRyZXNzZXNTZXJ2aWNlO1xuXG4gIHB1YmxpYyBhZGRyZXNzRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gIHB1YmxpYyBwb3N0Y29kZTogRm9ybUNvbnRyb2w7XG4gIHB1YmxpYyBhZGRyZXNzTGlzdDogRm9ybUNvbnRyb2w7XG5cbiAgcHVibGljIGFkZHJlc3NPcHRpb25zOiBBZGRyZXNzT3B0aW9uW107XG5cbiAgcHVibGljIGVycm9yTWVzc2FnZTogc3RyaW5nID0gV3JpdGVBZGRyZXNzRmllbGRDb21wb25lbnQuUkVRVUlSRURfRVJST1JfTUVTU0FHRTtcblxuICBwdWJsaWMgbWlzc2luZ1Bvc3Rjb2RlID0gZmFsc2U7XG4gIHB1YmxpYyBub0FkZHJlc3NTZWxlY3RlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKGFkZHJlc3Nlc1NlcnZpY2U6IEFkZHJlc3Nlc1NlcnZpY2UsIHByaXZhdGUgcmVhZG9ubHkgaXNDb21wb3VuZFBpcGU6IElzQ29tcG91bmRQaXBlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkZHJlc3Nlc1NlcnZpY2UgPSBhZGRyZXNzZXNTZXJ2aWNlO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0NvbXBsZXhXaXRoSGlkZGVuRmllbGRzKCkpIHtcbiAgICAgIHRoaXMucG9zdGNvZGUgPSBuZXcgRm9ybUNvbnRyb2woJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XG4gICAgICB0aGlzLmFkZHJlc3NGb3JtR3JvdXAuYWRkQ29udHJvbCgncG9zdGNvZGUnLCB0aGlzLnBvc3Rjb2RlKTtcbiAgICAgIHRoaXMuYWRkcmVzc0xpc3QgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xuICAgICAgdGhpcy5hZGRyZXNzRm9ybUdyb3VwLmFkZENvbnRyb2woJ2FkZHJlc3MnLCB0aGlzLmFkZHJlc3NMaXN0KTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZHJlc3Nlc1NlcnZpY2UuZ2V0TWFuZGF0b3J5RXJyb3IoKS5zdWJzY3JpYmUoKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZUVycm9yc09uQ29udGludWUodmFsdWUpO1xuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgZmluZEFkZHJlc3MoKSB7XG4gICAgdGhpcy5ub0FkZHJlc3NTZWxlY3RlZCA9IGZhbHNlO1xuICAgIGlmICghdGhpcy5wb3N0Y29kZS52YWx1ZSkge1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBXcml0ZUFkZHJlc3NGaWVsZENvbXBvbmVudC5SRVFVSVJFRF9FUlJPUl9NRVNTQUdFO1xuICAgICAgdGhpcy5taXNzaW5nUG9zdGNvZGUgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMucG9zdGNvZGUudmFsdWUudHJpbSgpLm1hdGNoKEFkZHJlc3NWYWxpZGF0aW9uQ29uc3RhbnRzLlJFR0VYX1BPU1RDT0RFKSkge1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBXcml0ZUFkZHJlc3NGaWVsZENvbXBvbmVudC5JTlZBTElEX0VSUk9SX01FU1NBR0U7XG4gICAgICB0aGlzLm1pc3NpbmdQb3N0Y29kZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWlzc2luZ1Bvc3Rjb2RlID0gZmFsc2U7XG4gICAgICBjb25zdCBwb3N0Y29kZSA9IHRoaXMucG9zdGNvZGUudmFsdWU7XG4gICAgICB0aGlzLmNhc2VGaWVsZC52YWx1ZSA9IG51bGw7XG4gICAgICB0aGlzLmFkZHJlc3NPcHRpb25zID0gW107XG4gICAgICB0aGlzLmFkZHJlc3Nlc1NlcnZpY2UuZ2V0QWRkcmVzc2VzRm9yUG9zdGNvZGUocG9zdGNvZGUucmVwbGFjZSgnICcsICcnKS50b1VwcGVyQ2FzZSgpKS5zdWJzY3JpYmUoXG4gICAgICAgIHJlc3VsdCA9PiB7XG4gICAgICAgICAgcmVzdWx0LmZvckVhY2goXG4gICAgICAgICAgICBhZGRyZXNzID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5hZGRyZXNzT3B0aW9ucy5wdXNoKG5ldyBBZGRyZXNzT3B0aW9uKGFkZHJlc3MsIG51bGwpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuYWRkcmVzc09wdGlvbnMudW5zaGlmdChcbiAgICAgICAgICAgIG5ldyBBZGRyZXNzT3B0aW9uKHVuZGVmaW5lZCwgdGhpcy5kZWZhdWx0TGFiZWwodGhpcy5hZGRyZXNzT3B0aW9ucy5sZW5ndGgpKVxuICAgICAgICAgICk7XG4gICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBBbiBlcnJvciBvY2N1cnJlZCByZXRyaWV2aW5nIGFkZHJlc3NlcyBmb3IgcG9zdGNvZGUgJHtwb3N0Y29kZX0uICR7ZXJyb3J9YCk7XG4gICAgICAgICAgdGhpcy5hZGRyZXNzT3B0aW9ucy51bnNoaWZ0KFxuICAgICAgICAgICAgbmV3IEFkZHJlc3NPcHRpb24odW5kZWZpbmVkLCB0aGlzLmRlZmF1bHRMYWJlbCh0aGlzLmFkZHJlc3NPcHRpb25zLmxlbmd0aCkpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB0aGlzLmFkZHJlc3NMaXN0LnNldFZhbHVlKHVuZGVmaW5lZCk7XG4gICAgICB0aGlzLnJlZm9jdXNFbGVtZW50KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlZm9jdXNFbGVtZW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZvY3VzRWxlbWVudERpcmVjdGl2ZXMgJiYgdGhpcy5mb2N1c0VsZW1lbnREaXJlY3RpdmVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZm9jdXNFbGVtZW50RGlyZWN0aXZlcy5maXJzdC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBibGFua0FkZHJlc3MoKSB7XG4gICAgdGhpcy5jYXNlRmllbGQudmFsdWUgPSBuZXcgQWRkcmVzc01vZGVsKCk7XG4gICAgdGhpcy5zZXRGb3JtVmFsdWUoKTtcbiAgICB0aGlzLm1pc3NpbmdQb3N0Y29kZSA9IGZhbHNlO1xuICAgIHRoaXMubm9BZGRyZXNzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBpc0NvbXBsZXhXaXRoSGlkZGVuRmllbGRzKCkge1xuICAgIGlmICh0aGlzLmNhc2VGaWVsZC5pc0NvbXBsZXgoKSAmJiB0aGlzLmNhc2VGaWVsZC5maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzXG4gICAgICAmJiB0aGlzLmNhc2VGaWVsZC5maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzLnNvbWUoY2YgPT4gY2YuaGlkZGVuID09PSB0cnVlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNob3VsZFNob3dEZXRhaWxGaWVsZHMoKSB7XG4gICAgaWYgKHRoaXMuaXNDb21wbGV4V2l0aEhpZGRlbkZpZWxkcygpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNFeHBhbmRlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICghdGhpcy53cml0ZUNvbXBsZXhGaWVsZENvbXBvbmVudCB8fCAhdGhpcy53cml0ZUNvbXBsZXhGaWVsZENvbXBvbmVudC5jb21wbGV4R3JvdXApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgYWRkcmVzcyA9IHRoaXMud3JpdGVDb21wbGV4RmllbGRDb21wb25lbnQuY29tcGxleEdyb3VwLnZhbHVlO1xuICAgIGxldCBoYXNBZGRyZXNzID0gZmFsc2U7XG4gICAgaWYgKGFkZHJlc3MpIHtcbiAgICAgIE9iamVjdC5rZXlzKGFkZHJlc3MpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBpZiAoYWRkcmVzc1trZXldICE9PSBudWxsKSB7XG4gICAgICAgICAgaGFzQWRkcmVzcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gaGFzQWRkcmVzcztcbiAgfVxuXG4gIHB1YmxpYyBhZGRyZXNzU2VsZWN0ZWQoKSB7XG4gICAgdGhpcy5jYXNlRmllbGQudmFsdWUgPSB0aGlzLmFkZHJlc3NMaXN0LnZhbHVlO1xuICAgIHRoaXMuc2V0Rm9ybVZhbHVlKCk7XG4gICAgdGhpcy5ub0FkZHJlc3NTZWxlY3RlZCA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcbiAgICBjb25zdCBjaGFuZ2UgPSBjaGFuZ2VzWydjYXNlRmllbGQnXTtcbiAgICBpZiAoY2hhbmdlKSB7XG4gICAgICB0aGlzLnNldEZvcm1WYWx1ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBidWlsZElkUHJlZml4KGVsZW1lbnRJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5pZFByZWZpeH1fJHtlbGVtZW50SWR9YDtcbiAgfVxuXG4gIHByaXZhdGUgZGVmYXVsdExhYmVsKG51bWJlck9mQWRkcmVzc2VzKSB7XG4gICAgcmV0dXJuIG51bWJlck9mQWRkcmVzc2VzID09PSAwID8gJ05vIGFkZHJlc3MgZm91bmQnXG4gICAgICA6IGAke251bWJlck9mQWRkcmVzc2VzfSR7bnVtYmVyT2ZBZGRyZXNzZXMgPT09IDEgPyAnIGFkZHJlc3MgJyA6ICcgYWRkcmVzc2VzICd9Zm91bmRgO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb3JtVmFsdWUoKSB7XG4gICAgaWYgKHRoaXMud3JpdGVDb21wbGV4RmllbGRDb21wb25lbnQuY29tcGxleEdyb3VwKSB7XG4gICAgICB0aGlzLndyaXRlQ29tcGxleEZpZWxkQ29tcG9uZW50LmNvbXBsZXhHcm91cC5zZXRWYWx1ZShcbiAgICAgICAgdGhpcy5jYXNlRmllbGQudmFsdWVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVFcnJvcnNPbkNvbnRpbnVlKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5taXNzaW5nUG9zdGNvZGUgPSB2YWx1ZSAmJiAhdGhpcy5zaG91bGRTaG93RGV0YWlsRmllbGRzKCkgJiYgIXRoaXMuYWRkcmVzc09wdGlvbnM7XG4gICAgdGhpcy5ub0FkZHJlc3NTZWxlY3RlZCA9IHZhbHVlICYmICF0aGlzLnNob3VsZFNob3dEZXRhaWxGaWVsZHMoKSAmJiAhIXRoaXMuYWRkcmVzc09wdGlvbnM7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLm5vQWRkcmVzc1NlbGVjdGVkID8gJ1NlbGVjdCBhbiBhZGRyZXNzJyA6IHRoaXMuZXJyb3JNZXNzYWdlO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiIFtpZF09XCJpZCgpXCI+XG4gIDxkaXYgKm5nSWY9XCIhaXNDb21wbGV4V2l0aEhpZGRlbkZpZWxkcygpXCI+XG4gICAgPGgyIGNsYXNzPVwiaGVhZGluZy1oMlwiPnt7Y2FzZUZpZWxkIHwgY2NkRmllbGRMYWJlbH19PC9oMj5cblxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGJvdHRvbS0zMCBwb3N0Y29kZUxvb2t1cFwiIFtpZF09XCJjcmVhdGVFbGVtZW50SWQoJ3Bvc3Rjb2RlTG9va3VwJylcIiBbbmdDbGFzc109XCJ7J2Zvcm0tZ3JvdXAtZXJyb3InOiBtaXNzaW5nUG9zdGNvZGV9XCIgKm5nSWY9XCIhaXNFeHBhbmRlZFwiPlxuICAgICAgPGxhYmVsIFtmb3JdPVwiY3JlYXRlRWxlbWVudElkKCdwb3N0Y29kZUlucHV0JylcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3snRW50ZXIgYSBVSyBwb3N0Y29kZScgfCBycHhUcmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgICA8c3BhbiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cIm1pc3NpbmdQb3N0Y29kZVwiPnt7ZXJyb3JNZXNzYWdlIHwgcnB4VHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbbmdDbGFzc109XCJ7J2dvdnVrLWlucHV0LS1lcnJvcic6IG1pc3NpbmdQb3N0Y29kZX1cIlxuICAgICAgW2lkXT1cImNyZWF0ZUVsZW1lbnRJZCgncG9zdGNvZGVJbnB1dCcpXCIgbmFtZT1cInBvc3Rjb2RlXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgcG9zdGNvZGVpbnB1dCBpbmxpbmUtYmxvY2tcIiBbZm9ybUNvbnRyb2xdPVwicG9zdGNvZGVcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi0zMFwiIChjbGljayk9XCJmaW5kQWRkcmVzcygpXCI+e3snRmluZCBhZGRyZXNzJyB8IHJweFRyYW5zbGF0ZX19PC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiYWRkcmVzc09wdGlvbnNcIiBpZD1cInNlbGVjdEFkZHJlc3NcIiBbbmdDbGFzc109XCJ7J2Zvcm0tZ3JvdXAtZXJyb3InOiBub0FkZHJlc3NTZWxlY3RlZH1cIj5cbiAgICAgIDxsYWJlbCBbZm9yXT1cImNyZWF0ZUVsZW1lbnRJZCgnYWRkcmVzc0xpc3QnKVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tbGFiZWxcIj57eydTZWxlY3QgYW4gYWRkcmVzcycgfCBycHhUcmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgICA8c3BhbiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cIm5vQWRkcmVzc1NlbGVjdGVkXCI+e3tlcnJvck1lc3NhZ2UgfCBycHhUcmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2wgY2NkLWRyb3Bkb3duIGFkZHJlc3NMaXN0XCIgW2lkXT1cImNyZWF0ZUVsZW1lbnRJZCgnYWRkcmVzc0xpc3QnKVwiIG5hbWU9XCJhZGRyZXNzXCIgW2Zvcm1Db250cm9sXT1cImFkZHJlc3NMaXN0XCIgKGNoYW5nZSk9XCJhZGRyZXNzU2VsZWN0ZWQoKVwiIGZvY3VzRWxlbWVudD5cbiAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgYWRkcmVzc09wdGlvbiBvZiBhZGRyZXNzT3B0aW9uc1wiIFtuZ1ZhbHVlXT1cImFkZHJlc3NPcHRpb24udmFsdWVcIj5cbiAgICAgICAgICB7e2FkZHJlc3NPcHRpb24uZGVzY3JpcHRpb24gfCBycHhUcmFuc2xhdGV9fVxuICAgICAgICA8L29wdGlvbj5cbiAgICAgIDwvc2VsZWN0PlxuICAgIDwvZGl2PlxuXG4gICAgPGEgY2xhc3M9XCJtYW51YWwtbGluayBib3R0b20tMzBcIiAqbmdJZj1cIiFzaG91bGRTaG93RGV0YWlsRmllbGRzKClcIiAoY2xpY2spPVwiYmxhbmtBZGRyZXNzKClcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCI+XG4gICAgICB7e1wiSSBjYW4ndCBlbnRlciBhIFVLIHBvc3Rjb2RlXCIgfCBycHhUcmFuc2xhdGV9fVxuICAgIDwvYT5cbiAgPC9kaXY+XG5cbiAgPGNjZC13cml0ZS1jb21wbGV4LXR5cGUtZmllbGRcbiAgICBbaGlkZGVuXT1cIiFzaG91bGRTaG93RGV0YWlsRmllbGRzKClcIlxuICAgIFtjYXNlRmllbGRdPVwiY2FzZUZpZWxkXCJcbiAgICBbcmVuZGVyTGFiZWxdPVwiZmFsc2VcIlxuICAgIFtwYXJlbnRdPVwicGFyZW50XCJcbiAgICBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiXG4gICAgW2lnbm9yZU1hbmRhdG9yeV09XCJ0cnVlXCJcbiAgICBbaWRQcmVmaXhdPVwiYnVpbGRJZFByZWZpeCgnZGV0YWlsJylcIlxuICAgICN3cml0ZUNvbXBsZXhGaWVsZENvbXBvbmVudD5cbiAgPC9jY2Qtd3JpdGUtY29tcGxleC10eXBlLWZpZWxkPlxuPC9kaXY+XG4iXX0=
|
|
@@ -80,4 +80,4 @@ AbstractFormFieldComponent.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type:
|
|
|
80
80
|
}], idPrefix: [{
|
|
81
81
|
type: Input
|
|
82
82
|
}] }); })();
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvcGFsZXR0ZS9iYXNlLWZpZWxkL2Fic3RyYWN0LWZvcm0tZmllbGQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBbUIsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXZFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7O0FBS3BFLE1BQU0sT0FBZ0IsMEJBQTBCO0lBRGhEO1FBWVMsYUFBUSxHQUFHLEVBQUUsQ0FBQztLQThEdEI7SUE1RFEsRUFBRTtRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRVMsZUFBZSxDQUE0QixPQUFVLEVBQUUsT0FBTyxHQUFHLEtBQUs7UUFDOUUsTUFBTSxTQUFTLEdBQWtCLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUMvRCxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2QsT0FBTyxPQUFPLENBQUM7U0FDaEI7UUFDRCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkQsbUVBQW1FO1FBQ25FLElBQUksUUFBUSxFQUFFO1lBQ1osSUFBRyxRQUFRLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRTtnQkFDbkQsUUFBUSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQzthQUN2QztZQUNELElBQUksT0FBTyxFQUFFO2dCQUNYLGtFQUFrRTtnQkFDbEUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDM0M7aUJBQU07Z0JBQ0wsT0FBTyxRQUFRLENBQUM7YUFDakI7U0FDRjtRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM1QyxXQUFXLENBQUMsa0NBQWtDLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDOUUsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRVMsYUFBYSxDQUFDLFNBQW9CLEVBQUUsT0FBd0I7UUFDcEUsdUZBQXVGO0lBQ3pGLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxPQUF3QixFQUFFLE1BQXFCLEVBQUUsT0FBZ0I7UUFDMUYsSUFBSSxNQUFNLFlBQVksU0FBUyxFQUFFO1lBQy9CLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDN0Q7UUFDRCxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxPQUF3QixFQUFFLE1BQWlCLEVBQUUsT0FBZ0I7UUFDekYsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzVCLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ25DO2FBQU07WUFDTCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3RCO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVPLHFCQUFxQixDQUFDLE9BQXdCLEVBQUUsTUFBaUIsRUFBRSxPQUFnQjtRQUN6RixJQUFJLE9BQU8sRUFBRTtZQUNYLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRSxLQUFLLFVBQVUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDakssTUFBTSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7YUFDMUU7aUJBQU07Z0JBQ0wsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQzthQUMvQztTQUNGO2FBQU07WUFDTCxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzs7b0dBeEVtQiwwQkFBMEI7NkVBQTFCLDBCQUEwQjt1RkFBMUIsMEJBQTBCO2NBRC9DLFNBQVM7Z0JBR0QsU0FBUztrQkFEZixLQUFLO1lBSUMsU0FBUztrQkFEZixLQUFLO1lBSUMsTUFBTTtrQkFEWixLQUFLO1lBSUMsUUFBUTtrQkFEZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgQ2FzZUZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluL2RlZmluaXRpb24vY2FzZS1maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBGaWVsZHNVdGlscyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZpZWxkcy9maWVsZHMudXRpbHMnO1xuXG50eXBlIEZvcm1Db250YWluZXIgPSBGb3JtR3JvdXAgfCBGb3JtQXJyYXk7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0Rm9ybUZpZWxkQ29tcG9uZW50IHtcbiAgQElucHV0KClcbiAgcHVibGljIGNhc2VGaWVsZDogQ2FzZUZpZWxkO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgcGFyZW50PzogRm9ybUNvbnRhaW5lcjtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgaWRQcmVmaXggPSAnJztcblxuICBwdWJsaWMgaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaWRQcmVmaXggKyB0aGlzLmNhc2VGaWVsZC5pZDtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWdpc3RlckNvbnRyb2w8VCBleHRlbmRzIEFic3RyYWN0Q29udHJvbD4oY29udHJvbDogVCwgcmVwbGFjZSA9IGZhbHNlKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICBjb25zdCBjb250YWluZXI6IEZvcm1Db250YWluZXIgPSB0aGlzLnBhcmVudCB8fCB0aGlzLmZvcm1Hcm91cDtcbiAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgcmV0dXJuIGNvbnRyb2w7XG4gICAgfVxuICAgIGNvbnN0IGV4aXN0aW5nID0gY29udGFpbmVyLmNvbnRyb2xzW3RoaXMuY2FzZUZpZWxkLmlkXTtcbiAgICAvLyB1cGRhdGUgdGhlIGZpZWxkIHZhbHVlIHdoaWNoIGhhcyBiZWVuIHNldCBpbiBtaWQtZXZlbnQgY2FsbCBiYWNrXG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICBpZihleGlzdGluZy52YWx1ZSA9PT0gbnVsbCAmJiB0aGlzLmNhc2VGaWVsZD8udmFsdWUpIHtcbiAgICAgICAgZXhpc3RpbmcudmFsdWUgPSB0aGlzLmNhc2VGaWVsZC52YWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXBsYWNlKSB7XG4gICAgICAgIC8vIFNldCB0aGUgdmFsaWRhdG9ycyBvbiB0aGUgcmVwbGFjZW1lbnQgd2l0aCB3aGF0IGFscmVhZHkgZXhpc3RzLlxuICAgICAgICBjb250cm9sLnNldFZhbGlkYXRvcnMoZXhpc3RpbmcudmFsaWRhdG9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hZGRWYWxpZGF0b3JzKHRoaXMuY2FzZUZpZWxkLCBjb250cm9sKTtcbiAgICBGaWVsZHNVdGlscy5hZGRDYXNlRmllbGRBbmRDb21wb25lbnRSZWZlcmVuY2VzKGNvbnRyb2wsIHRoaXMuY2FzZUZpZWxkLCB0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5hZGRDb250cm9sVG9QYXJlbnQoY29udHJvbCwgY29udGFpbmVyLCByZXBsYWNlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhZGRWYWxpZGF0b3JzKGNhc2VGaWVsZDogQ2FzZUZpZWxkLCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB2b2lkIHtcbiAgICAvLyBObyB2YWxpZGF0b3JzIGJ5IGRlZmF1bHQsIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGFkZCB2YWxpZGF0b3JzIHRvIHRoZSBmb3JtIGNvbnRyb2xcbiAgfVxuXG4gIHByaXZhdGUgYWRkQ29udHJvbFRvUGFyZW50KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgcGFyZW50OiBGb3JtQ29udGFpbmVyLCByZXBsYWNlOiBib29sZWFuKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG4gICAgICByZXR1cm4gdGhpcy5hZGRDb250cm9sVG9Gb3JtQXJyYXkoY29udHJvbCwgcGFyZW50LCByZXBsYWNlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29udHJvbFRvRm9ybUdyb3VwKGNvbnRyb2wsIHBhcmVudCwgcmVwbGFjZSk7XG4gIH1cblxuICBwcml2YXRlIGFkZENvbnRyb2xUb0Zvcm1BcnJheShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHBhcmVudDogRm9ybUFycmF5LCByZXBsYWNlOiBib29sZWFuKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICBjb25zdCBpbmRleCA9IHBhcnNlSW50KHRoaXMuY2FzZUZpZWxkLmlkLCAxMCk7XG4gICAgaWYgKHJlcGxhY2UgJiYgIWlzTmFOKGluZGV4KSkge1xuICAgICAgcGFyZW50LnNldENvbnRyb2woaW5kZXgsIGNvbnRyb2wpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJlbnQucHVzaChjb250cm9sKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRyb2w7XG4gIH1cblxuICBwcml2YXRlIGFkZENvbnRyb2xUb0Zvcm1Hcm91cChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHBhcmVudDogRm9ybUdyb3VwLCByZXBsYWNlOiBib29sZWFuKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICBpZiAocmVwbGFjZSkge1xuICAgICAgaWYgKHRoaXMuY2FzZUZpZWxkLmZpZWxkX3R5cGUgJiYgdGhpcy5jYXNlRmllbGQuZmllbGRfdHlwZS5pZCA9PT0gJ0Nhc2VMaW5rJyAmJiB0aGlzLmNhc2VGaWVsZC5maWVsZF90eXBlLnR5cGUgPT09ICdDb21wbGV4JyAmJiAvXi0/XFxkKyQvLnRlc3QodGhpcy5jYXNlRmllbGQuaWQpKSB7XG4gICAgICAgIHBhcmVudC5zZXRDb250cm9sKCdDYXNlUmVmZXJlbmNlJywgY29udHJvbFsnY29udHJvbHMnXVsnQ2FzZVJlZmVyZW5jZSddKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmVudC5zZXRDb250cm9sKHRoaXMuY2FzZUZpZWxkLmlkLCBjb250cm9sKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGFyZW50LmFkZENvbnRyb2wodGhpcy5jYXNlRmllbGQuaWQsIGNvbnRyb2wpO1xuICAgIH1cbiAgICByZXR1cm4gY29udHJvbDtcbiAgfVxufVxuIl19
|
|
@@ -683,4 +683,4 @@ WriteCaseFlagFieldComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
|
|
|
683
683
|
type: Component,
|
|
684
684
|
args: [{ selector: 'ccd-write-case-flag-field', template: "<!-- Error message summary -->\n<div *ngIf=\"errorMessages.length > 0\" class=\"govuk-error-summary\" aria-labelledby=\"error-summary-title\" role=\"alert\" tabindex=\"-1\" data-module=\"govuk-error-summary\">\n <h2 class=\"govuk-error-summary__title\" id=\"error-summary-title\">\n {{'There is a problem' | rpxTranslate}}\n </h2>\n <div *ngFor=\"let errorMessage of errorMessages\" class=\"govuk-error-summary__body\">\n <ul class=\"govuk-list govuk-error-summary__list\">\n <li>\n <a (click)=\"navigateToErrorElement(errorMessage.fieldId)\" class=\"validation-error\">{{errorMessage.description | rpxTranslate}}</a>\n </li>\n </ul>\n </div>\n</div>\n<div *ngIf=\"!isDisplayContextParameterUpdate\" class=\"form-group\" [formGroup]=\"formGroup\">\n <div class=\"govuk-form-group\" [ngSwitch]=\"fieldState\">\n <ng-container *ngSwitchCase=\"caseFlagFieldState.FLAG_LOCATION\">\n <ccd-select-flag-location\n [formGroup]=\"caseFlagParentFormGroup\" [flagsData]=\"flagsData\"\n (caseFlagStateEmitter)=\"onCaseFlagStateEmitted($event)\"\n [isDisplayContextParameterExternal]=\"isDisplayContextParameterExternal\"\n ></ccd-select-flag-location>\n </ng-container>\n <ng-container *ngSwitchCase=\"caseFlagFieldState.FLAG_TYPE\">\n <ccd-select-flag-type [formGroup]=\"caseFlagParentFormGroup\" [jurisdiction]=\"jurisdiction\" [caseTypeId]=\"caseTypeId\"\n [hmctsServiceId]=\"hmctsServiceId\" [isDisplayContextParameterExternal]=\"isDisplayContextParameterExternal\"\n [isDisplayContextParameter2Point1Enabled]=\"isDisplayContextParameter2Point1Enabled\"\n [selectedFlagsLocation]=\"selectedFlagsLocation\"\n (caseFlagStateEmitter)=\"onCaseFlagStateEmitted($event)\"\n (flagCommentsOptionalEmitter)=\"onFlagCommentsOptionalEmitted($event)\"></ccd-select-flag-type>\n </ng-container>\n <ng-container *ngSwitchCase=\"caseFlagFieldState.FLAG_LANGUAGE_INTERPRETER\">\n <ccd-search-language-interpreter [formGroup]=\"caseFlagParentFormGroup\"\n [flagType]=\"flagType\"\n (caseFlagStateEmitter)=\"onCaseFlagStateEmitted($event)\">\n </ccd-search-language-interpreter>\n </ng-container>\n <ng-container *ngSwitchCase=\"caseFlagFieldState.FLAG_COMMENTS\">\n <ccd-add-comments [formGroup]=\"caseFlagParentFormGroup\" [optional]=\"flagCommentsOptional\"\n (caseFlagStateEmitter)=\"onCaseFlagStateEmitted($event)\"\n [isDisplayContextParameterExternal]=\"isDisplayContextParameterExternal\"\n [isDisplayContextParameter2Point1Enabled]=\"isDisplayContextParameter2Point1Enabled\">\n </ccd-add-comments>\n </ng-container>\n <ng-container *ngSwitchCase=\"caseFlagFieldState.FLAG_STATUS\">\n <ccd-confirm-flag-status [formGroup]=\"caseFlagParentFormGroup\" [defaultStatus]=\"flagType.defaultStatus\"\n (caseFlagStateEmitter)=\"onCaseFlagStateEmitted($event)\"></ccd-confirm-flag-status>\n </ng-container>\n </div>\n</div>\n<div *ngIf=\"isDisplayContextParameterUpdate\" class=\"form-group\" [formGroup]=\"formGroup\">\n <div class=\"govuk-form-group\" [ngSwitch]=\"fieldState\">\n <ng-container *ngSwitchCase=\"caseFlagFieldState.FLAG_MANAGE_CASE_FLAGS\">\n <ccd-manage-case-flags [formGroup]=\"caseFlagParentFormGroup\" [flagsData]=\"flagsData\" [caseTitle]=\"caseTitle\"\n [displayContextParameter]=\"displayContextParameter\"\n (caseFlagStateEmitter)=\"onCaseFlagStateEmitted($event)\"></ccd-manage-case-flags>\n </ng-container>\n <ng-container *ngSwitchCase=\"caseFlagFieldState.FLAG_UPDATE\">\n <ccd-update-flag [formGroup]=\"caseFlagParentFormGroup\"\n [displayContextParameter]=\"displayContextParameter\"\n (caseFlagStateEmitter)=\"onCaseFlagStateEmitted($event)\"></ccd-update-flag>\n </ng-container>\n <ng-container *ngSwitchCase=\"caseFlagFieldState.FLAG_UPDATE_WELSH_TRANSLATION\">\n <ccd-update-flag-add-translation-form\n [formGroup]=\"caseFlagParentFormGroup\"\n (caseFlagStateEmitter)=\"onCaseFlagStateEmitted($event)\"\n ></ccd-update-flag-add-translation-form>\n </ng-container>\n </div>\n</div>\n", styles: [".validation-error{cursor:pointer;text-decoration:underline;color:#d4351c}\n"] }]
|
|
685
685
|
}], function () { return [{ type: i1.ActivatedRoute }, { type: i2.CaseEditDataService }, { type: i3.CaseFlagStateService }, { type: i4.RpxTranslationService }]; }, null); })();
|
|
686
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUtY2FzZS1mbGFnLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL2Nhc2UtZmxhZy93cml0ZS1jYXNlLWZsYWctZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1mbGFnL3dyaXRlLWNhc2UtZmxhZy1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQW1CLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUc3RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDMUYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFM0YsT0FBTyxFQUFFLCtCQUErQixFQUFFLG9CQUFvQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7Ozs7Ozs7SUNQdEksOEJBQWtGLFlBQUEsU0FBQSxXQUFBO0lBR3pFLDZPQUFTLGVBQUEsc0RBQTRDLENBQUEsSUFBQztJQUEwQixZQUEyQzs7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Q0FBQyxDQUFDO1lBQ3JELGlIQUFpSDtZQUNqSCw0RUFBNEU7WUFDNUUsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztTQUN0RDtJQUNILENBQUM7SUFFTSxXQUFXO1FBQ2hCLDhFQUE4RTtRQUM5RSxJQUFJLENBQUMsb0JBQW9CLENBQUMsb0JBQW9CLEdBQUcsU0FBUyxDQUFDO1FBQzNELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRUQsSUFBVyxvQkFBb0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLDJCQUEyQixDQUFDLEVBQUUsS0FBSztZQUM5RixDQUFDLENBQUMsa0JBQWtCLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQztJQUN0RixDQUFDO0lBRU0sMEJBQTBCLENBQUMsVUFBdUI7UUFDdkQsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSx5QkFBeUIsQ0FBQztJQUM3SCxDQUFDOztzR0EvaEJVLDJCQUEyQjs4RUFBM0IsMkJBQTJCO1FDbEJ4Qyw0RUFXTTtRQUNOLDRFQW1DTTtRQUNOLDRFQW1CTTs7UUFuRUEsbURBQThCO1FBWTlCLGVBQXNDO1FBQXRDLDJEQUFzQztRQW9DdEMsZUFBcUM7UUFBckMsMERBQXFDOzt1RkQ5QjlCLDJCQUEyQjtjQUx2QyxTQUFTOzJCQUNFLDJCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUnB4VHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAncnB4LXh1aS10cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENhc2VFZGl0RGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb21tb25zL2Nhc2UtZWRpdC1kYXRhL2Nhc2UtZWRpdC1kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FzZUZpZWxkLCBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi8uLi9kb21haW4nO1xuaW1wb3J0IHsgRmxhZ1R5cGUgfSBmcm9tICcuLi8uLi8uLi9kb21haW4vY2FzZS1mbGFnJztcbmltcG9ydCB7IEZpZWxkc1V0aWxzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZmllbGRzJztcbmltcG9ydCB7IENhc2VGbGFnU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2FzZS1lZGl0b3Ivc2VydmljZXMvY2FzZS1mbGFnLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWJzdHJhY3RGaWVsZFdyaXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vYmFzZS1maWVsZC9hYnN0cmFjdC1maWVsZC13cml0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FzZUZsYWdTdGF0ZSwgRmxhZ0RldGFpbCwgRmxhZ0RldGFpbERpc3BsYXlXaXRoRm9ybUdyb3VwUGF0aCwgRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aCB9IGZyb20gJy4vZG9tYWluJztcbmltcG9ydCB7IENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIsIENhc2VGbGFnRXJyb3JNZXNzYWdlLCBDYXNlRmxhZ0ZpZWxkU3RhdGUsIENhc2VGbGFnRm9ybUZpZWxkcywgQ2FzZUZsYWdTdGF0dXMgfSBmcm9tICcuL2VudW1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NkLXdyaXRlLWNhc2UtZmxhZy1maWVsZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi93cml0ZS1jYXNlLWZsYWctZmllbGQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi93cml0ZS1jYXNlLWZsYWctZmllbGQuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBXcml0ZUNhc2VGbGFnRmllbGRDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdEZpZWxkV3JpdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgcHVibGljIGZpZWxkU3RhdGU6IG51bWJlcjtcbiAgcHVibGljIGNhc2VGbGFnRmllbGRTdGF0ZSA9IENhc2VGbGFnRmllbGRTdGF0ZTtcbiAgcHVibGljIGVycm9yTWVzc2FnZXM6IEVycm9yTWVzc2FnZVtdID0gW107XG4gIHB1YmxpYyBmbGFnc0RhdGE6IEZsYWdzV2l0aEZvcm1Hcm91cFBhdGhbXTtcbiAgcHVibGljIHNlbGVjdGVkRmxhZzogRmxhZ0RldGFpbERpc3BsYXlXaXRoRm9ybUdyb3VwUGF0aDtcbiAgcHVibGljIGNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gIHB1YmxpYyBmbGFnQ29tbWVudHNPcHRpb25hbCA9IGZhbHNlO1xuICBwdWJsaWMganVyaXNkaWN0aW9uOiBzdHJpbmc7XG4gIHB1YmxpYyBjYXNlVHlwZUlkOiBzdHJpbmc7XG4gIHB1YmxpYyBobWN0c1NlcnZpY2VJZDogc3RyaW5nO1xuICBwdWJsaWMgaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZTogYm9vbGVhbjtcbiAgcHVibGljIGlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJFeHRlcm5hbDogYm9vbGVhbjtcbiAgcHVibGljIGlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIyUG9pbnQxRW5hYmxlZDogYm9vbGVhbjtcbiAgcHVibGljIGNhc2VUaXRsZTogc3RyaW5nO1xuICBwdWJsaWMgY2FzZVRpdGxlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHB1YmxpYyBkaXNwbGF5Q29udGV4dFBhcmFtZXRlcjogc3RyaW5nO1xuICBwdWJsaWMgZGV0ZXJtaW5lZExvY2F0aW9uOiBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoO1xuICBwcml2YXRlIGFsbENhc2VGbGFnU3RhZ2VzQ29tcGxldGVkID0gZmFsc2U7XG4gIC8vIENvZGUgZm9yIFwiT3RoZXJcIiBmbGFnIHR5cGUgYXMgZGVmaW5lZCBpbiBSZWZlcmVuY2UgRGF0YVxuICBwcml2YXRlIHJlYWRvbmx5IG90aGVyRmxhZ1R5cGVDb2RlID0gJ09UMDAwMSc7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2VsZWN0ZWRNYW5hZ2VDYXNlTG9jYXRpb24gPSAnc2VsZWN0ZWRNYW5hZ2VDYXNlTG9jYXRpb24nO1xuICBwdWJsaWMgcmVhZG9ubHkgY2FzZU5hbWVNaXNzaW5nID0gJ0Nhc2UgbmFtZSBtaXNzaW5nJztcblxuICBwdWJsaWMgZ2V0IGZsYWdUeXBlKCk6IEZsYWdUeXBlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXA/LnZhbHVlLmZsYWdUeXBlO1xuICB9XG5cbiAgcHVibGljIGdldCBzZWxlY3RlZEZsYWdzTG9jYXRpb24oKTogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwPy52YWx1ZS5zZWxlY3RlZExvY2F0aW9uO1xuICB9XG5cbiAgcHVibGljIHNldCBzZWxlY3RlZEZsYWdzTG9jYXRpb24oc2VsZWN0ZWRMb2NhdGlvbjogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aCB8IG51bGwpIHtcbiAgICBpZiAodGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cCkge1xuICAgICAgdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC52YWx1ZS5zZWxlY3RlZExvY2F0aW9uID0gc2VsZWN0ZWRMb2NhdGlvbjtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhc2VFZGl0RGF0YVNlcnZpY2U6IENhc2VFZGl0RGF0YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXNlRmxhZ1N0YXRlU2VydmljZTogQ2FzZUZsYWdTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBycHhUcmFuc2xhdGlvblNlcnZpY2U6IFJweFRyYW5zbGF0aW9uU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIElmIGl0IGlzIHN0YXJ0IG9mIHRoZSBqb3VybmV5IG9yIG5hdmlnYXRpb24gZnJvbSBjaGVjayB5b3VyIGFuc3dlcnMgcGFnZSB0aGVuIGZpZWxkU3RhdGVUb05hdmlnYXRlIHByb3BlcnR5XG4gICAgLy8gaW4gY2FzZSBmbGFnIHN0YXRlIHNlcnZpY2Ugd2lsbCBjb250YWluIHRoZSBmaWVsZCBzdGF0ZSB0byBuYXZpZ2F0ZSBiYXNlZCBvbiBjcmVhdGUgb3IgbWFuYWdlIGpvdXJuZXlcbiAgICB0aGlzLmZpZWxkU3RhdGUgPSB0aGlzLmNhc2VGbGFnU3RhdGVTZXJ2aWNlLmZpZWxkU3RhdGVUb05hdmlnYXRlO1xuICAgIGlmICh0aGlzLmZpZWxkU3RhdGUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICB0aGlzLmZpZWxkU3RhdGUgPT09IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0xPQ0FUSU9OIHx8XG4gICAgICAgIHRoaXMuZmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfTUFOQUdFX0NBU0VfRkxBR1MpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zO1xuICAgICAgLy8gQ2xlYXIgdGhlIGZvcm0gZ3JvdXAsIGZpZWxkIHN0YXRlIHRvIG5hdmlnYXRlIGFuZCBzZXQgdGhlIHBhZ2UgbG9jYXRpb25cbiAgICAgIHRoaXMuY2FzZUZsYWdTdGF0ZVNlcnZpY2UucmVzZXRDYWNoZShgLi4vJHtwYXJhbXNbJ2VpZCddfS8ke3BhcmFtc1sncGFnZSddfWApO1xuICAgIH1cbiAgICAvLyBSZWFzc2lnbiB0aGUgZm9ybSBncm91cCBmcm9tIHRoZSBjYXNlIGZsYWcgc3RhdGUgc2VydmljZVxuICAgIHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAgPSB0aGlzLmNhc2VGbGFnU3RhdGVTZXJ2aWNlLmZvcm1Hcm91cDtcbiAgICAvLyBDbGVhciBmb3JtIHZhbGlkYXRpb24gZXJyb3JzIGFzIGEgbmV3IHBhZ2Ugd2lsbCBiZSByZW5kZXJlZCBiYXNlZCBvbiBmaWVsZCBzdGF0ZVxuICAgIHRoaXMuY2FzZUVkaXREYXRhU2VydmljZS5jbGVhckZvcm1WYWxpZGF0aW9uRXJyb3JzKCk7XG4gICAgLy8gQ2hlY2sgZm9yIGV4aXN0aW5nIEZsYWdMYXVuY2hlciBjb250cm9sIGluIHBhcmVudCBhbmQgcmVtb3ZlIGl0IC0gdGhpcyBpcyB0aGUgb25seSB3YXkgdG8gZW5zdXJlIGl0cyBpbnZhbGlkaXR5XG4gICAgLy8gaXMgc2V0IGNvcnJlY3RseSBhdCB0aGUgc3RhcnQsIHdoZW4gdGhlIGNvbXBvbmVudCBpcyByZWxvYWRlZCBhbmQgdGhlIGNvbnRyb2wgaXMgcmUtcmVnaXN0ZXJlZC4gT3RoZXJ3aXNlLCB0aGVcbiAgICAvLyB2YWxpZGF0b3Igc3RhdGUgZ2V0cyBjYXJyaWVkIG92ZXJcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAgJiYgdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuY2FzZUZpZWxkLmlkKSkge1xuICAgICAgdGhpcy5mb3JtR3JvdXAucmVtb3ZlQ29udHJvbCh0aGlzLmNhc2VGaWVsZC5pZCk7XG4gICAgfVxuICAgIC8vIEZyb20gdGhpcyBwb2ludCwgdGhpcy5mb3JtR3JvdXAgcmVmZXJzIHRvIHRoZSBGb3JtR3JvdXAgZm9yIHRoZSBGbGFnTGF1bmNoZXIgZmllbGQsIG5vdCB0aGUgcGFyZW50IEZvcm1Hcm91cFxuICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5yZWdpc3RlckNvbnRyb2wobmV3IEZvcm1Hcm91cCh7fSwge1xuICAgICAgdmFsaWRhdG9yczogKF86IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9IHwgbnVsbCA9PiB7XG4gICAgICAgIGlmICghdGhpcy5hbGxDYXNlRmxhZ1N0YWdlc0NvbXBsZXRlZCkge1xuICAgICAgICAgIC8vIFJldHVybiBhbiBlcnJvciB0byBtYXJrIHRoZSBGb3JtR3JvdXAgYXMgaW52YWxpZCBpZiBub3QgYWxsIENhc2UgRmxhZyBzdGFnZXMgaGF2ZSBiZWVuIGNvbXBsZXRlZFxuICAgICAgICAgIHJldHVybiB7IG5vdEFsbENhc2VGbGFnU3RhZ2VzQ29tcGxldGVkOiB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSksIHRydWUpIGFzIEZvcm1Hcm91cDtcblxuICAgIC8vIEdldCB0aGUgY2FzZSB0eXBlIElEIGZyb20gdGhlIENhc2VWaWV3IG9iamVjdCBpbiB0aGUgc25hcHNob3QgZGF0YSAocmVxdWlyZWQgZm9yIHJldHJpZXZpbmcgdGhlIGF2YWlsYWJsZSBmbGFnXG4gICAgLy8gdHlwZXMgZm9yIGEgY2FzZSlcbiAgICBpZiAodGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmNhc2UgJiYgdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmNhc2UuY2FzZV90eXBlKSB7XG4gICAgICB0aGlzLmNhc2VUeXBlSWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuY2FzZS5jYXNlX3R5cGUuaWQ7XG4gICAgICAvLyBHZXQgdGhlIGp1cmlzZGljdGlvbiAocmVxdWlyZWQgZm9yIHJldHJpZXZpbmcgdGhlIGF2YWlsYWJsZSBmbGFnIHR5cGVzIGlmIHVuYWJsZSB0byBkZXRlcm1pbmUgdXNpbmcgY2FzZSB0eXBlIElEKVxuICAgICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5jYXNlLmNhc2VfdHlwZS5qdXJpc2RpY3Rpb24pIHtcbiAgICAgICAgdGhpcy5qdXJpc2RpY3Rpb24gPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuY2FzZS5jYXNlX3R5cGUuanVyaXNkaWN0aW9uLmlkO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBFeHRyYWN0IGFsbCBmbGFncy1yZWxhdGVkIGRhdGEgZnJvbSB0aGUgQ2FzZUV2ZW50VHJpZ2dlciBvYmplY3QgaW4gdGhlIHNuYXBzaG90IGRhdGFcbiAgICBpZiAodGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmV2ZW50VHJpZ2dlcikge1xuICAgICAgLy8gR2V0IHRoZSBITUNUU1NlcnZpY2VJZCBmcm9tIHN1cHBsZW1lbnRhcnkgZGF0YSwgaWYgaXQgZXhpc3RzIChyZXF1aXJlZCBmb3IgcmV0cmlldmluZyB0aGUgYXZhaWxhYmxlIGZsYWcgdHlwZXMgaW5cbiAgICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSwgb25seSBmYWxsaW5nIGJhY2sgb24gY2FzZSB0eXBlIElEIG9yIGp1cmlzZGljdGlvbiBpZiBpdCdzIG5vdCBwcmVzZW50KVxuICAgICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5ldmVudFRyaWdnZXIuc3VwcGxlbWVudGFyeV9kYXRhXG4gICAgICAgICYmIHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5ldmVudFRyaWdnZXIuc3VwcGxlbWVudGFyeV9kYXRhLkhNQ1RTU2VydmljZUlkKSB7XG4gICAgICAgIHRoaXMuaG1jdHNTZXJ2aWNlSWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuZXZlbnRUcmlnZ2VyLnN1cHBsZW1lbnRhcnlfZGF0YS5ITUNUU1NlcnZpY2VJZDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5ldmVudFRyaWdnZXIuY2FzZV9maWVsZHMpIHtcbiAgICAgICAgdGhpcy5mbGFnc0RhdGEgPSAoKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5ldmVudFRyaWdnZXIuY2FzZV9maWVsZHMpIGFzIENhc2VGaWVsZFtdKVxuICAgICAgICAgIC5yZWR1Y2UoKGZsYWdzLCBjYXNlRmllbGQpID0+IEZpZWxkc1V0aWxzLmV4dHJhY3RGbGFnc0RhdGFGcm9tQ2FzZUZpZWxkKGZsYWdzLCBjYXNlRmllbGQsIGNhc2VGaWVsZC5pZCwgY2FzZUZpZWxkKSwgW10pO1xuXG4gICAgICAgIC8vIFNldCBkaXNwbGF5Q29udGV4dFBhcmFtZXRlciAodG8gYmUgcGFzc2VkIGFzIGFuIGlucHV0IHRvIE1hbmFnZUNhc2VGbGFnc0NvbXBvbmVudCBmb3Igc2V0dGluZyBjb3JyZWN0IHRpdGxlKVxuICAgICAgICB0aGlzLmRpc3BsYXlDb250ZXh0UGFyYW1ldGVyID1cbiAgICAgICAgICB0aGlzLnNldERpc3BsYXlDb250ZXh0UGFyYW1ldGVyKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5ldmVudFRyaWdnZXIuY2FzZV9maWVsZHMgYXMgQ2FzZUZpZWxkW10pO1xuXG4gICAgICAgIC8vIFNldCBib29sZWFuIGluZGljYXRpbmcgdGhlIGRpc3BsYXlfY29udGV4dF9wYXJhbWV0ZXIgaXMgXCJ1cGRhdGVcIlxuICAgICAgICB0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJVcGRhdGUgPSB0aGlzLnNldERpc3BsYXlDb250ZXh0UGFyYW1ldGVyVXBkYXRlKHRoaXMuZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIpO1xuXG4gICAgICAgIC8vIFNldCBib29sZWFuIGluZGljYXRpbmcgdGhlIGRpc3BsYXlfY29udGV4dF9wYXJhbWV0ZXIgaXMgXCJleHRlcm5hbFwiXG4gICAgICAgIHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsID0gdGhpcy5zZXREaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsKHRoaXMuZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIpO1xuXG4gICAgICAgIC8vIFNldCBib29sZWFuIGluZGljYXRpbmcgdGhlIGRpc3BsYXlfY29udGV4dF9wYXJhbWV0ZXIgaXMgQ2FzZSBGbGFncyB2Mi4xIGVuYWJsZWRcbiAgICAgICAgdGhpcy5pc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyMlBvaW50MUVuYWJsZWQgPSB0aGlzLnNldERpc3BsYXlDb250ZXh0UGFyYW1ldGVyMlBvaW50MUVuYWJsZWQodGhpcy5kaXNwbGF5Q29udGV4dFBhcmFtZXRlcik7XG5cbiAgICAgICAgLy8gU2V0IHN0YXJ0aW5nIGZpZWxkIHN0YXRlIGlmIGZpZWxkU3RhdGUgbm90IHRoZSByaWdodCB2YWx1ZVxuICAgICAgICBpZiAoIXRoaXMuZmllbGRTdGF0ZSkge1xuICAgICAgICAgIHRoaXMuZmllbGRTdGF0ZSA9IHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZSA/IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX01BTkFHRV9DQVNFX0ZMQUdTIDogQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfTE9DQVRJT047XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgY2FzZSB0aXRsZSwgdG8gYmUgdXNlZCBieSBjaGlsZCBjb21wb25lbnRzXG4gICAgICAgIHRoaXMuY2FzZVRpdGxlU3Vic2NyaXB0aW9uID0gdGhpcy5jYXNlRWRpdERhdGFTZXJ2aWNlLmNhc2VUaXRsZSQuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiB0aXRsZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNhc2VUaXRsZSA9IHRpdGxlPy5sZW5ndGggPiAwID8gdGl0bGUgOiB0aGlzLmNhc2VOYW1lTWlzc2luZztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXREaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZShkaXNwbGF5Q29udGV4dFBhcmFtZXRlcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGRpc3BsYXlDb250ZXh0UGFyYW1ldGVyID09PSBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLlVQREFURSB8fFxuICAgICAgZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIgPT09IENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIuVVBEQVRFX0VYVEVSTkFMIHx8XG4gICAgICBkaXNwbGF5Q29udGV4dFBhcmFtZXRlciA9PT0gQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5VUERBVEVfMl9QT0lOVF8xO1xuICB9XG5cbiAgcHVibGljIHNldERpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWwoZGlzcGxheUNvbnRleHRQYXJhbWV0ZXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBkaXNwbGF5Q29udGV4dFBhcmFtZXRlciA9PT0gQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5DUkVBVEVfRVhURVJOQUwgfHxcbiAgICAgIGRpc3BsYXlDb250ZXh0UGFyYW1ldGVyID09PSBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLlVQREFURV9FWFRFUk5BTDtcbiAgfVxuXG4gIHB1YmxpYyBzZXREaXNwbGF5Q29udGV4dFBhcmFtZXRlcjJQb2ludDFFbmFibGVkKGRpc3BsYXlDb250ZXh0UGFyYW1ldGVyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIgPT09IENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIuQ1JFQVRFXzJfUE9JTlRfMSB8fFxuICAgICAgZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIgPT09IENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIuVVBEQVRFXzJfUE9JTlRfMTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNhc2VGbGFnU3RhdGVFbWl0dGVkKGNhc2VGbGFnU3RhdGU6IENhc2VGbGFnU3RhdGUpOiB2b2lkIHtcbiAgICB0aGlzLmNhc2VFZGl0RGF0YVNlcnZpY2UuY2xlYXJGb3JtVmFsaWRhdGlvbkVycm9ycygpO1xuXG4gICAgdGhpcy5lcnJvck1lc3NhZ2VzID0gY2FzZUZsYWdTdGF0ZS5lcnJvck1lc3NhZ2VzO1xuICAgIHRoaXMuc2VsZWN0ZWRGbGFnID0gY2FzZUZsYWdTdGF0ZS5zZWxlY3RlZEZsYWc7XG5cbiAgICAvLyBWYWxpZGF0aW9uIHN1Y2NlZWRlZDsgcHJvY2VlZCB0byBuZXh0IHN0YXRlIG9yIGZpbmFsIHJldmlldyBzdGFnZSAoXCJDaGVjayB5b3VyIGFuc3dlcnNcIilcbiAgICBpZiAodGhpcy5lcnJvck1lc3NhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaWYgKHRoaXMuY2FuTW92ZVRvRmluYWxSZXZpZXdTdGFnZShjYXNlRmxhZ1N0YXRlKSkge1xuICAgICAgICB0aGlzLm1vdmVUb0ZpbmFsUmV2aWV3U3RhZ2UoKTtcbiAgICAgICAgLy8gRG9uJ3QgbW92ZSB0byBuZXh0IHN0YXRlIGlmIGN1cnJlbnQgc3RhdGUgaXMgQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVFlQRSBhbmQgdGhlIGZsYWcgdHlwZSBpcyBhIHBhcmVudCAtIHRoaXNcbiAgICAgICAgLy8gbWVhbnMgdGhlIHVzZXIgbmVlZHMgdG8gc2VsZWN0IGZyb20gdGhlIG5leHQgc2V0IG9mIGZsYWcgdHlwZXMgYmVmb3JlIHRoZXkgY2FuIG1vdmUgb25cbiAgICAgIH0gZWxzZSBpZiAoIWNhc2VGbGFnU3RhdGUuaXNQYXJlbnRGbGFnVHlwZSkge1xuICAgICAgICAvLyBQcm9jZWVkIHRvIG5leHQgc3RhdGVcbiAgICAgICAgdGhpcy5wcm9jZWVkVG9OZXh0U3RhdGUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2FuTW92ZVRvRmluYWxSZXZpZXdTdGFnZShjYXNlRmxhZ1N0YXRlOiBDYXNlRmxhZ1N0YXRlKTogYm9vbGVhbiB7XG4gICAgLy8gSWYgdGhlIGpvdXJuZXkgaXMgcmVxdWVzdCBzdXBwb3J0IG9yIG1hbmFnZSBzdXBwb3J0XG4gICAgLy8gYW5kIHRoZSBjdXJyZW50IHN0YXRlIGlzIGVpdGhlciBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19DT01NRU5UUyBvciBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19VUERBVEVcbiAgICAvLyB0aGVuIG1vdmUgdG8gZmluYWwgcmV2aWV3IHN0YWdlXG4gICAgaWYgKHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsKSB7XG4gICAgICByZXR1cm4gY2FzZUZsYWdTdGF0ZS5jdXJyZW50Q2FzZUZsYWdGaWVsZFN0YXRlID09PSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19DT01NRU5UUyB8fFxuICAgICAgICBjYXNlRmxhZ1N0YXRlLmN1cnJlbnRDYXNlRmxhZ0ZpZWxkU3RhdGUgPT09IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1VQREFURTtcbiAgICB9XG4gICAgLy8gSWYgdGhlIGN1cnJlbnQgc3RhdGUgaXMgb25lIG9mOlxuICAgIC8vICogQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfU1RBVFVTIEFORCBDYXNlIEZsYWdzIHYyLjEgaXMgZW5hYmxlZFxuICAgIC8vICogQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfQ09NTUVOVFMgQU5EIENhc2UgRmxhZ3MgdjIuMSBpcyBub3QgZW5hYmxlZFxuICAgIC8vICogQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVVBEQVRFIGFuZCBXZWxzaCB0cmFuc2xhdGlvbiBjaGVja2JveCBpcyBub3Qgc2VsZWN0ZWRcbiAgICAvLyAqIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1VQREFURV9XRUxTSF9UUkFOU0xBVElPTlxuICAgIC8vIHRoZW4gbW92ZSB0byBmaW5hbCByZXZpZXcgc3RhZ2VcbiAgICByZXR1cm4gKGNhc2VGbGFnU3RhdGUuY3VycmVudENhc2VGbGFnRmllbGRTdGF0ZSA9PT1cbiAgICAgIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1NUQVRVUyAmJiB0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIyUG9pbnQxRW5hYmxlZCkgfHxcbiAgICAgIChjYXNlRmxhZ1N0YXRlLmN1cnJlbnRDYXNlRmxhZ0ZpZWxkU3RhdGUgPT09XG4gICAgICAgIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0NPTU1FTlRTICYmICF0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIyUG9pbnQxRW5hYmxlZCkgfHxcbiAgICAgIChjYXNlRmxhZ1N0YXRlLmN1cnJlbnRDYXNlRmxhZ0ZpZWxkU3RhdGUgPT09IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1VQREFURSAmJlxuICAgICAgICAhdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5nZXQoQ2FzZUZsYWdGb3JtRmllbGRzLklTX1dFTFNIX1RSQU5TTEFUSU9OX05FRURFRCk/LnZhbHVlKSB8fFxuICAgICAgY2FzZUZsYWdTdGF0ZS5jdXJyZW50Q2FzZUZsYWdGaWVsZFN0YXRlID09PSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19VUERBVEVfV0VMU0hfVFJBTlNMQVRJT047XG4gIH1cblxuICBwdWJsaWMgcHJvY2VlZFRvTmV4dFN0YXRlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0F0RmluYWxTdGF0ZSgpKSB7XG4gICAgICAvLyBTa2lwIHRoZSBcImxhbmd1YWdlIGludGVycHJldGVyXCIgc3RhdGUgaWYgY3VycmVudCBzdGF0ZSBpcyBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19UWVBFIGFuZCB0aGUgZmxhZyB0eXBlIGRvZXNuJ3RcbiAgICAgIC8vIGhhdmUgYSBcImxpc3Qgb2YgdmFsdWVzXCIgLSBjdXJyZW50bHksIHRoaXMgaXMgcHJlc2VudCBvbmx5IGZvciB0aG9zZSBmbGFnIHR5cGVzIHRoYXQgcmVxdWlyZSBsYW5ndWFnZSBpbnRlcnByZXRlclxuICAgICAgLy8gc2VsZWN0aW9uXG4gICAgICBpZiAodGhpcy5maWVsZFN0YXRlID09PSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19UWVBFICYmICF0aGlzLmZsYWdUeXBlPy5saXN0T2ZWYWx1ZXMpIHtcbiAgICAgICAgdGhpcy5maWVsZFN0YXRlID0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfQ09NTUVOVFM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZpZWxkU3RhdGUrKztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0RmxhZ3NDYXNlRmllbGRWYWx1ZSgpOiB2b2lkIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IHN3aXRjaC1kZWZhdWx0XG4gICAgc3dpdGNoICh0aGlzLmZpZWxkU3RhdGUpIHtcbiAgICAgIGNhc2UgQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfU1RBVFVTOlxuICAgICAgICB0aGlzLmFkZEZsYWdUb0NvbGxlY3Rpb24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0NPTU1FTlRTOlxuICAgICAgICBpZiAodGhpcy5pc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWwgfHwgIXRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlcjJQb2ludDFFbmFibGVkKSB7XG4gICAgICAgICAgdGhpcy5hZGRGbGFnVG9Db2xsZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRoaXMubWFuYWdlRmxhZ0ZpbmFsU3RhdGU6XG4gICAgICAgIHRoaXMudXBkYXRlRmxhZ0luQ29sbGVjdGlvbigpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWRkRmxhZ1RvQ29sbGVjdGlvbigpOiB2b2lkIHtcbiAgICAvLyBFbnN1cmUgbm8gbW9yZSB0aGFuIG9uZSBuZXcgZmxhZyBpcyBiZWluZyBhZGRlZCBhdCBhIHRpbWUsIGJ5IGl0ZXJhdGluZyB0aHJvdWdoIGVhY2ggRmxhZ3MgY2FzZSBmaWVsZCBhbmQgcmVtb3ZpbmdcbiAgICAvLyBhbnkgcHJldmlvdXMgZW50cnkgZnJvbSB0aGUgZGV0YWlscyBhcnJheSB3aGVyZSB0aGF0IGVudHJ5IGhhcyBubyBpZCAoaGVuY2UgaXQgaXMgbmV3IC0gYW5kIHRoZXJlIHNob3VsZCBiZSBvbmx5XG4gICAgLy8gb25lIHN1Y2ggZW50cnkpLiAoVGhpcyBzY2VuYXJpbyBvY2N1cnMgaWYgdGhlIHVzZXIgcmVwZWF0cyB0aGUgQ2FzZSBGbGFnIGNyZWF0aW9uIGpvdXJuZXkgYnkgdXNpbmcgdGhlIFwiQ2hhbmdlXCJcbiAgICAvLyBsaW5rIGFuZCBzZWxlY3RzIGVpdGhlciB0aGUgc2FtZSBmbGFnIGxvY2F0aW9uIGFzIGJlZm9yZSBvciBhIGRpZmZlcmVudCBvbmUuKVxuICAgIHRoaXMuZmxhZ3NEYXRhLmZvckVhY2goaW5zdGFuY2UgPT4ge1xuICAgICAgLy8gVXNlIHRoZSBwYXRoVG9GbGFnc0Zvcm1Hcm91cCBwcm9wZXJ0eSBmb3IgZWFjaCBGbGFncyBjYXNlIGZpZWxkIHRvIGRyaWxsIGRvd24gdG8gdGhlIGNvcnJlY3QgcGFydCBvZiB0aGVcbiAgICAgIC8vIENhc2VGaWVsZCB2YWx1ZSB0byByZW1vdmUgdGhlIG5ldyB2YWx1ZSBmcm9tXG4gICAgICBsZXQgdmFsdWUgPSBpbnN0YW5jZS5jYXNlRmllbGQ/LnZhbHVlO1xuICAgICAgY29uc3QgcGF0aFRvVmFsdWUgPSBpbnN0YW5jZS5wYXRoVG9GbGFnc0Zvcm1Hcm91cDtcbiAgICAgIC8vIFJvb3QtbGV2ZWwgRmxhZ3MgQ2FzZUZpZWxkcyBkb24ndCBoYXZlIGEgZG90LWRlbGltaXRlZCBwYXRoIC0ganVzdCB0aGUgQ2FzZUZpZWxkIElEIGl0c2VsZiAtIHNvIGRvbid0IGRyaWxsIGRvd25cbiAgICAgIGlmIChwYXRoVG9WYWx1ZS5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgICAgICBwYXRoVG9WYWx1ZS5zbGljZShwYXRoVG9WYWx1ZS5pbmRleE9mKCcuJykgKyAxKS5zcGxpdCgnLicpLmZvckVhY2gocGFydCA9PiB2YWx1ZSA9IHZhbHVlW3BhcnRdKTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZT8uZGV0YWlscz8ubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBpbmRleE9mTmV3RmxhZ0RldGFpbCA9IHZhbHVlLmRldGFpbHMuZmluZEluZGV4KGVsZW1lbnQgPT4gIWVsZW1lbnQuaGFzT3duUHJvcGVydHkoJ2lkJykpO1xuICAgICAgICBpZiAoaW5kZXhPZk5ld0ZsYWdEZXRhaWwgPiAtMSkge1xuICAgICAgICAgIHZhbHVlLmRldGFpbHMuc3BsaWNlKGluZGV4T2ZOZXdGbGFnRGV0YWlsLCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgZm9ybVZhbHVlcyA9IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXA/LnZhbHVlO1xuICAgIC8vIERldGVybWluZSB0aGUgY29ycmVjdCBsb2NhdGlvbiAtIGludGVybmFsIG9yIGV4dGVybmFsIC0gZm9yIHRoZSBuZXcgZmxhZy4gSWYgcmV0dXJuZWQgYXMgdW5kZWZpbmVkLCB0aGlzXG4gICAgLy8gaW5kaWNhdGVzIGEgY29uZmlndXJhdGlvbiBlcnJvciB3aXRoIHRoZSBleHRlcm5hbCBgRmxhZ3NgIG9iamVjdCBpbnN0YW5jZVxuICAgIHRoaXMuZGV0ZXJtaW5lZExvY2F0aW9uID1cbiAgICAgIHRoaXMuZGV0ZXJtaW5lTG9jYXRpb25Gb3JGbGFnKCF0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJFeHRlcm5hbCwgdGhpcy5zZWxlY3RlZEZsYWdzTG9jYXRpb24sIGZvcm1WYWx1ZXMpO1xuICAgIC8vIERvIG5vdCBtdXRhdGUgdGhpcy5zZWxlY3RlZEZsYWdzTG9jYXRpb247IGlmIHRoaXMuc2VsZWN0ZWRGbGFnc0xvY2F0aW9uIGJlY29tZXMgdW5kZWZpbmVkLFxuICAgIC8vIGRldGVybWluZUxvY2F0aW9uRm9yRmxhZygpIHdpbGwgbm8gbG9uZ2VyIGRvIGFueXRoaW5nIHdoZW4gY2FsbGVkIHdpdGggaXQgLSBhbmQgdGhlIGFwcHJvcHJpYXRlIGVycm9yIG1lc3NhZ2Ugd2lsbFxuICAgIC8vIG5vdCBiZSByZWRpc3BsYXllZCBpZiB0aGUgdXNlciBjbGlja3MgXCJOZXh0XCIgYWdhaW4gb24gdGhlIFwiQWRkIGNvbW1lbnRzXCIgcGFnZSwgYWZ0ZXIgdGhlIGVycm9yIGlzIGZpcnN0IHNob3duXG5cbiAgICBpZiAodGhpcy5kZXRlcm1pbmVkTG9jYXRpb24pIHtcbiAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmRldGVybWluZWRMb2NhdGlvbi5wYXRoVG9GbGFnc0Zvcm1Hcm91cDtcbiAgICAgIGNvbnN0IGZsYWdEYXRhUmVmID0gdGhpcy5mbGFnc0RhdGEuZmluZChpdGVtID0+IGl0ZW0ucGF0aFRvRmxhZ3NGb3JtR3JvdXAgPT09IHBhdGgpO1xuICAgICAgbGV0IGZsYWdzQ2FzZUZpZWxkVmFsdWUgPSBmbGFnRGF0YVJlZi5jYXNlRmllbGQ/LnZhbHVlO1xuICAgICAgLy8gVXNlIHRoZSBwYXRoVG9GbGFnc0Zvcm1Hcm91cCBwcm9wZXJ0eSBmcm9tIHRoZSBzZWxlY3RlZCBmbGFnIGxvY2F0aW9uIHRvIGRyaWxsIGRvd24gdG8gdGhlIGNvcnJlY3QgcGFydCBvZiB0aGVcbiAgICAgIC8vIENhc2VGaWVsZCB2YWx1ZSB0byBhcHBseSBjaGFuZ2VzIHRvXG4gICAgICAvLyBSb290LWxldmVsIEZsYWdzIENhc2VGaWVsZHMgZG9uJ3QgaGF2ZSBhIGRvdC1kZWxpbWl0ZWQgcGF0aCAtIGp1c3QgdGhlIENhc2VGaWVsZCBJRCBpdHNlbGYgLSBzbyBkb24ndCBkcmlsbCBkb3duXG4gICAgICBpZiAocGF0aC5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgICAgICBwYXRoLnNsaWNlKHBhdGguaW5kZXhPZignLicpICsgMSkuc3BsaXQoJy4nKS5mb3JFYWNoKHBhcnQgPT4gZmxhZ3NDYXNlRmllbGRWYWx1ZSA9IGZsYWdzQ2FzZUZpZWxkVmFsdWVbcGFydF0pO1xuICAgICAgfVxuICAgICAgLy8gSWYgdGhlIENhc2VGaWVsZCBmb3IgdGhlIHNlbGVjdGVkIGZsYWdzIGxvY2F0aW9uIGhhcyBubyB2YWx1ZSwgc2V0IGl0IHRvIGFuIGVtcHR5IG9iamVjdCBzbyBpdCBjYW4gYmUgcG9wdWxhdGVkXG4gICAgICAvLyB3aXRoIGZsYWcgZGV0YWlsc1xuICAgICAgaWYgKCFmbGFnc0Nhc2VGaWVsZFZhbHVlKSB7XG4gICAgICAgIGZsYWdEYXRhUmVmLmNhc2VGaWVsZC52YWx1ZSA9IHt9O1xuICAgICAgICBmbGFnc0Nhc2VGaWVsZFZhbHVlID0gZmxhZ0RhdGFSZWYuY2FzZUZpZWxkLnZhbHVlO1xuICAgICAgfVxuICAgICAgLy8gQ3JlYXRlIGEgZGV0YWlscyBhcnJheSBpZiBvbmUgZG9lcyBub3QgZXhpc3RcbiAgICAgIGlmICghZmxhZ3NDYXNlRmllbGRWYWx1ZS5oYXNPd25Qcm9wZXJ0eSgnZGV0YWlscycpKSB7XG4gICAgICAgIGZsYWdzQ2FzZUZpZWxkVmFsdWUuZGV0YWlscyA9IFtdO1xuICAgICAgfVxuICAgICAgLy8gUG9wdWxhdGUgbmV3IEZsYWdEZXRhaWwgaW5zdGFuY2UgYW5kIGFkZCB0byB0aGUgRmxhZ3MgZGF0YSB3aXRoaW4gdGhlIENhc2VGaWVsZCBpbnN0YW5jZSBvZiB0aGUgc2VsZWN0ZWQgZmxhZ1xuICAgICAgLy8gbG9jYXRpb25cbiAgICAgIGZsYWdzQ2FzZUZpZWxkVmFsdWUuZGV0YWlscy5wdXNoKHt2YWx1ZTogdGhpcy5wb3B1bGF0ZU5ld0ZsYWdEZXRhaWxJbnN0YW5jZSgpfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgdGhlIGNvcnJlY3QgbG9jYXRpb24gKGkuZS4gZWl0aGVyIHRoZSBpbnRlcm5hbCBvciBleHRlcm5hbCBpbnN0YW5jZSBvZiBhIGBGbGFnc2Agb2JqZWN0KSBmb3IgYSBuZXcgZmxhZyxcbiAgICogYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmc6XG4gICAqXG4gICAqICogV2hldGhlciB0aGUgdXNlciBpcyBpbnRlcm5hbCBvciBleHRlcm5hbCAobm8gZWZmZWN0IGZvciBleHRlcm5hbCB1c2VycyBiZWNhdXNlIHRoZXkgY2FuIGFjY2VzcyBvbmx5IHRoZSBleHRlcm5hbFxuICAgKiBpbnN0YW5jZSlcbiAgICogKiBUaGUgZXhpc3RlbmNlIG9mIHR3byBgRmxhZ3NgIG9iamVjdHMgLSBvbmUgaW50ZXJuYWwsIG9uZSBleHRlcm5hbCAtIGxpbmtlZCBieSB0aGUgc2FtZSBgZ3JvdXBJZGA7XG4gICAqICogRm9yIGZsYWdzIG9mIHR5cGUgXCJPdGhlclwiLCB3aGV0aGVyIFwib25seSB2aXNpYmxlIHRvIEhNQ1RTIHN0YWZmXCIgaGFzIGJlZW4gc2VsZWN0ZWQgb3Igbm90IChcIk90aGVyXCIgZGVmYXVsdHMgdG9cbiAgICogZXh0ZXJuYWxseSB2aXNpYmxlKTtcbiAgICogKiBGb3IgYWxsIG90aGVyIGZsYWcgdHlwZXMsIHRoZSB2YWx1ZSBvZiB0aGUgYGV4dGVybmFsbHlBdmFpbGFibGVgIGF0dHJpYnV0ZS5cbiAgICpcbiAgICogSWYgdGhlIHVzZXIgaXMgaW50ZXJuYWwgdGhlbiB0aGUgbmV3IGZsYWcgc2hvdWxkIGJlIGFzc2lnbmVkIHRvIHRoZSBleHRlcm5hbCBgRmxhZ3NgIGluc3RhbmNlIGlmOlxuICAgKiAqIFN1Y2ggYW4gaW5zdGFuY2UgZXhpc3RzLCBBTkRcbiAgICogKiBUaGUgZmxhZyB0eXBlIGlzIFwiT3RoZXJcIiBhbmQgXCJvbmx5IHZpc2libGUgdG8gSE1DVFMgc3RhZmZcIiB3YXMgbm90IHNlbGVjdGVkLCBPUlxuICAgKiAqIFRoZSBmbGFnIHR5cGUgaXMgbm90IFwiT3RoZXJcIiBhbmQgYGV4dGVybmFsbHlBdmFpbGFibGVgIGlzIGB0cnVlYC5cbiAgICpcbiAgICogQHBhcmFtIGlzSW50ZXJuYWxVc2VyIFdoZXRoZXIgdGhlIGN1cnJlbnQgdXNlciBpcyBpbnRlcm5hbCBvciBub3RcbiAgICogQHBhcmFtIHNlbGVjdGVkRmxhZ3NMb2NhdGlvbiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIGxvY2F0aW9uIGZvciB0aGUgbmV3IGZsYWdcbiAgICogQHBhcmFtIGZvcm1WYWx1ZXMgQWxsIHRoZSB2YWx1ZXMgZnJvbSB0aGUgYGNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwYFxuICAgKiBAcmV0dXJucyBUaGUgY29ycmVjdGx5IGRldGVybWluZWQgbG9jYXRpb246IGVpdGhlciB0aGUgaW50ZXJuYWwgb3IgZXh0ZXJuYWwgbG9jYXRpb24gKGlmIG9uZSBleGlzdHMpIHdoZXJlIGEgZ3JvdXBJZFxuICAgKiBpcyBwcmVzZW50OyB0aGUgb3JpZ2luYWwgbG9jYXRpb24gb3RoZXJ3aXNlLiAqKk5vdGU6KiogSWYgdGhlIGV4dGVybmFsIGxvY2F0aW9uIGlzIHJldHVybmVkIGFzIHVuZGVmaW5lZCwgdGhpc1xuICAgKiBpbmRpY2F0ZXMgYSBjb25maWd1cmF0aW9uIGVycm9yXG4gICAqL1xuICBwdWJsaWMgZGV0ZXJtaW5lTG9jYXRpb25Gb3JGbGFnKGlzSW50ZXJuYWxVc2VyOiBib29sZWFuLCBzZWxlY3RlZEZsYWdzTG9jYXRpb246IEZsYWdzV2l0aEZvcm1Hcm91cFBhdGgsXG4gICAgZm9ybVZhbHVlczogYW55KTogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aCB7XG4gICAgICBpZiAoaXNJbnRlcm5hbFVzZXIgJiYgc2VsZWN0ZWRGbGFnc0xvY2F0aW9uPy5mbGFncz8uZ3JvdXBJZCkge1xuICAgICAgICBpZiAoKGZvcm1WYWx1ZXM/LmZsYWdUeXBlPy5mbGFnQ29kZSA9PT0gdGhpcy5vdGhlckZsYWdUeXBlQ29kZSAmJiAhZm9ybVZhbHVlcz8uZmxhZ0lzVmlzaWJsZUludGVybmFsbHlPbmx5KSB8fFxuICAgICAgICAgIChmb3JtVmFsdWVzPy5mbGFnVHlwZT8uZmxhZ0NvZGUgIT09IHRoaXMub3RoZXJGbGFnVHlwZUNvZGUgJiYgZm9ybVZhbHVlcz8uZmxhZ1R5cGU/LmV4dGVybmFsbHlBdmFpbGFibGUpKSB7XG4gICAgICAgICAgICAvLyBJZiBuZWNlc3NhcnksIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgZmxhZ3Mgb2JqZWN0IHdpdGggdGhlIHNhbWUgZ3JvdXBJZCBhbmQgZXh0ZXJuYWwgdmlzaWJpbGl0eSAoc2hvdWxkIGJlXG4gICAgICAgICAgICAvLyBvbmx5IG9uZSB1bmxlc3MgbWlzY29uZmlndXJlZClcbiAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gc2VsZWN0ZWRGbGFnc0xvY2F0aW9uLmZsYWdzLnZpc2liaWxpdHk/LnRvTG93ZXJDYXNlKCkgPT09ICdleHRlcm5hbCdcbiAgICAgICAgICAgICAgPyBzZWxlY3RlZEZsYWdzTG9jYXRpb25cbiAgICAgICAgICAgICAgOiB0aGlzLmZsYWdzRGF0YS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKGYpID0+IGYuZmxhZ3M/Lmdyb3VwSWQgPT09IHNlbGVjdGVkRmxhZ3NMb2NhdGlvbi5mbGFncy5ncm91cElkICYmXG4gICAgICAgICAgICAgICAgZi5mbGFncz8udmlzaWJpbGl0eT8udG9Mb3dlckNhc2UoKSA9PT0gJ2V4dGVybmFsJyk/LlswXTtcbiAgICAgICAgICAgIC8vIElmIGxvY2F0aW9uIGlzIG5vdCB0cnV0aHksIHNldCBhbiBlcnJvciBtZXNzYWdlIGFuZCBtYWtlIGNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwIGludmFsaWQgdG8gcHJldmVudFxuICAgICAgICAgICAgLy8gbmF2aWdhdGlvbiB0byB0aGUgc3VtbWFyeSBwYWdlIChieSBub3QgdHJpZ2dlcmluZyB0aGUgc3VibWl0IGV2ZW50KVxuICAgICAgICAgICAgaWYgKCFsb2NhdGlvbikge1xuICAgICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICcnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBDYXNlRmxhZ0Vycm9yTWVzc2FnZS5OT19FWFRFUk5BTF9GTEFHU19DT0xMRUNUSU9OXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLnNldEVycm9ycyh7XG4gICAgICAgICAgICAgICAgbm9FeHRlcm5hbENvbGxlY3Rpb246IHRydWVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbG9jYXRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgbmVjZXNzYXJ5LCBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIGZsYWdzIG9iamVjdCB3aXRoIHRoZSBzYW1lIGdyb3VwSWQgYW5kIGludGVybmFsIHZpc2liaWxpdHkgKHNob3VsZCBiZVxuICAgICAgICAgIC8vIG9ubHkgb25lIHVubGVzcyBtaXNjb25maWd1cmVkKTsgYXNzdW1lZCB0byBiZSBpbnRlcm5hbCBpZiB2aXNpYmlsaXR5IGF0dHJpYnV0ZSBpcyBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gc2VsZWN0ZWRGbGFnc0xvY2F0aW9uLmZsYWdzLnZpc2liaWxpdHk/LnRvTG93ZXJDYXNlKCkgIT09ICdleHRlcm5hbCdcbiAgICAgICAgICAgID8gc2VsZWN0ZWRGbGFnc0xvY2F0aW9uXG4gICAgICAgICAgICA6IHRoaXMuZmxhZ3NEYXRhLmZpbHRlcihcbiAgICAgICAgICAgICAgKGYpID0+IGYuZmxhZ3M/Lmdyb3VwSWQgPT09IHNlbGVjdGVkRmxhZ3NMb2NhdGlvbi5mbGFncy5ncm91cElkICYmXG4gICAgICAgICAgICAgIGYuZmxhZ3M/LnZpc2liaWxpdHk/LnRvTG93ZXJDYXNlKCkgIT09ICdleHRlcm5hbCcpPy5bMF07XG4gICAgICAgICAgLy8gSWYgbG9jYXRpb24gaXMgbm90IHRydXRoeSwgc2V0IGFuIGVycm9yIG1lc3NhZ2UgYW5kIG1ha2UgY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAgaW52YWxpZCB0byBwcmV2ZW50XG4gICAgICAgICAgLy8gbmF2aWdhdGlvbiB0byB0aGUgc3VtbWFyeSBwYWdlIChieSBub3QgdHJpZ2dlcmluZyB0aGUgc3VibWl0IGV2ZW50KVxuICAgICAgICAgIGlmICghbG9jYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlcy5wdXNoKHtcbiAgICAgICAgICAgICAgdGl0bGU6ICcnLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogQ2FzZUZsYWdFcnJvck1lc3NhZ2UuTk9fSU5URVJOQUxfRkxBR1NfQ09MTEVDVElPTlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLnNldEVycm9ycyh7XG4gICAgICAgICAgICAgIG5vSW50ZXJuYWxDb2xsZWN0aW9uOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGxvY2F0aW9uO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc2VsZWN0ZWRGbGFnc0xvY2F0aW9uO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUZsYWdJbkNvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgLy8gRW5zdXJlIG5vIG1vcmUgdGhhbiBvbmUgZmxhZyBpcyBiZWluZyB1cGRhdGVkIGF0IGEgdGltZSwgYnkgaXRlcmF0aW5nIHRocm91Z2ggZWFjaCBGbGFncyBjYXNlIGZpZWxkIGFuZCByZXNldHRpbmdcbiAgICAvLyB0aGUgZGVzY3JpcHRpb24sIGNvbW1lbnRzLCBzdGF0dXMsIGFuZCBkYXRlL3RpbWUgbW9kaWZpZWQgKGlmIHByZXNlbnQpIGZvciBlYWNoIGVudHJ5IGluIHRoZSBkZXRhaWxzIGFycmF5LCB3aXRoXG4gICAgLy8gb3JpZ2luYWwgdmFsdWVzIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgZm9ybWF0dGVkX3ZhbHVlIHByb3BlcnR5LiAoVGhpcyBzY2VuYXJpbyBvY2N1cnMgaWYgdGhlIHVzZXIgcmVwZWF0cyB0aGVcbiAgICAvLyBNYW5hZ2UgQ2FzZSBGbGFnIGpvdXJuZXkgYnkgdXNpbmcgdGhlIFwiQ2hhbmdlXCIgbGluayBhbmQgc2VsZWN0cyBhIGRpZmZlcmVudCBmbGFnIHRvIHVwZGF0ZS4pXG4gICAgdGhpcy5mbGFnc0RhdGEuZm9yRWFjaChpbnN0YW5jZSA9PiB7XG4gICAgICAvLyBVc2UgdGhlIHBhdGhUb0ZsYWdzRm9ybUdyb3VwIHByb3BlcnR5IGZvciBlYWNoIEZsYWdzIGNhc2UgZmllbGQgdG8gZHJpbGwgZG93biB0byB0aGUgY29ycmVjdCBwYXJ0IG9mIHRoZVxuICAgICAgLy8gQ2FzZUZpZWxkIHZhbHVlIGZvciB3aGljaCB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZXNcbiAgICAgIGxldCB2YWx1ZSA9IGluc3RhbmNlLmNhc2VGaWVsZD8udmFsdWU7XG4gICAgICBsZXQgZm9ybWF0dGVkVmFsdWUgPSBpbnN0YW5jZS5jYXNlRmllbGQ/LmZvcm1hdHRlZF92YWx1ZTtcbiAgICAgIGNvbnN0IHBhdGhUb1ZhbHVlID0gaW5zdGFuY2UucGF0aFRvRmxhZ3NGb3JtR3JvdXA7XG4gICAgICAvLyBSb290LWxldmVsIEZsYWdzIENhc2VGaWVsZHMgZG9uJ3QgaGF2ZSBhIGRvdC1kZWxpbWl0ZWQgcGF0aCAtIGp1c3QgdGhlIENhc2VGaWVsZCBJRCBpdHNlbGYgLSBzbyBkb24ndCBkcmlsbCBkb3duXG4gICAgICBpZiAocGF0aFRvVmFsdWUuaW5kZXhPZignLicpID4gLTEpIHtcbiAgICAgICAgcGF0aFRvVmFsdWUuc2xpY2UocGF0aFRvVmFsdWUuaW5kZXhPZignLicpICsgMSkuc3BsaXQoJy4nKS5mb3JFYWNoKHBhcnQgPT4ge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWVbcGFydF07XG4gICAgICAgICAgaWYgKGZvcm1hdHRlZFZhbHVlICYmIEZpZWxkc1V0aWxzLmlzTm9uRW1wdHlPYmplY3QoZm9ybWF0dGVkVmFsdWUpKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IGZvcm1hdHRlZFZhbHVlW3BhcnRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWU/LmRldGFpbHM/Lmxlbmd0aCA+IDAgJiYgZm9ybWF0dGVkVmFsdWUgJiYgRmllbGRzVXRpbHMuaXNOb25FbXB0eU9iamVjdChmb3JtYXR0ZWRWYWx1ZSkpIHtcbiAgICAgICAgdmFsdWUuZGV0YWlscy5mb3JFYWNoKGZsYWdEZXRhaWwgPT4ge1xuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRmxhZ0RldGFpbCA9IGZvcm1hdHRlZFZhbHVlLmRldGFpbHM/LmZpbmQoZGV0YWlsID0+IGRldGFpbC5pZCA9PT0gZmxhZ0RldGFpbC5pZCk7XG4gICAgICAgICAgaWYgKG9yaWdpbmFsRmxhZ0RldGFpbCkge1xuICAgICAgICAgICAgZmxhZ0RldGFpbC52YWx1ZS5vdGhlckRlc2NyaXB0aW9uID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlPy5vdGhlckRlc2NyaXB0aW9uIHx8IG51bGw7XG4gICAgICAgICAgICBmbGFnRGV0YWlsLnZhbHVlLm90aGVyRGVzY3JpcHRpb25fY3kgPSBvcmlnaW5hbEZsYWdEZXRhaWwudmFsdWU/Lm90aGVyRGVzY3JpcHRpb25fY3kgfHwgbnVsbDtcbiAgICAgICAgICAgIGZsYWdEZXRhaWwudmFsdWUuZmxhZ0NvbW1lbnQgPSBvcmlnaW5hbEZsYWdEZXRhaWwudmFsdWU/LmZsYWdDb21tZW50IHx8IG51bGw7XG4gICAgICAgICAgICBmbGFnRGV0YWlsLnZhbHVlLmZsYWdDb21tZW50X2N5ID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlPy5mbGFnQ29tbWVudF9jeSB8fCBudWxsO1xuICAgICAgICAgICAgZmxhZ0RldGFpbC52YWx1ZS5mbGFnVXBkYXRlQ29tbWVudCA9IG9yaWdpbmFsRmxhZ0RldGFpbC52YWx1ZT8uZmxhZ1VwZGF0ZUNvbW1lbnQgfHwgbnVsbDtcbiAgICAgICAgICAgIGZsYWdEZXRhaWwudmFsdWUuc3RhdHVzID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlPy5zdGF0dXM7XG4gICAgICAgICAgICBmbGFnRGV0YWlsLnZhbHVlLmRhdGVUaW1lTW9kaWZpZWQgPSBvcmlnaW5hbEZsYWdEZXRhaWwudmFsdWU/LmRhdGVUaW1lTW9kaWZpZWQgfHwgbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghdGhpcy5zZWxlY3RlZEZsYWcpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRGbGFnID0gdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuc2VsZWN0ZWRNYW5hZ2VDYXNlTG9jYXRpb24pLnZhbHVlIGFzIEZsYWdEZXRhaWxEaXNwbGF5V2l0aEZvcm1Hcm91cFBhdGg7XG4gICAgfVxuICAgIGxldCBmbGFnc0Nhc2VGaWVsZFZhbHVlID0gdGhpcy5zZWxlY3RlZEZsYWcuY2FzZUZpZWxkPy52YWx1ZTtcbiAgICAvLyBVc2UgdGhlIHBhdGhUb0ZsYWdzRm9ybUdyb3VwIHByb3BlcnR5IGZyb20gdGhlIHNlbGVjdGVkIGZsYWcgbG9jYXRpb24gdG8gZHJpbGwgZG93biB0byB0aGUgY29ycmVjdCBwYXJ0IG9mIHRoZVxuICAgIC8vIENhc2VGaWVsZCB2YWx1ZSB0byBhcHBseSBjaGFuZ2VzIHRvXG4gICAgY29uc3QgcGF0aCA9IHRoaXMuc2VsZWN0ZWRGbGFnLnBhdGhUb0ZsYWdzRm9ybUdyb3VwO1xuICAgIC8vIFJvb3QtbGV2ZWwgRmxhZ3MgQ2FzZUZpZWxkcyBkb24ndCBoYXZlIGEgZG90LWRlbGltaXRlZCBwYXRoIC0ganVzdCB0aGUgQ2FzZUZpZWxkIElEIGl0c2VsZiAtIHNvIGRvbid0IGRyaWxsIGRvd25cbiAgICBpZiAocGF0aC5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgICAgcGF0aC5zbGljZShwYXRoLmluZGV4T2YoJy4nKSArIDEpLnNwbGl0KCcuJykuZm9yRWFjaChwYXJ0ID0+IGZsYWdzQ2FzZUZpZWxkVmFsdWUgPSBmbGFnc0Nhc2VGaWVsZFZhbHVlW3BhcnRdKTtcbiAgICB9XG4gICAgaWYgKGZsYWdzQ2FzZUZpZWxkVmFsdWUpIHtcbiAgICAgIGNvbnN0IGZsYWdEZXRhaWxUb1VwZGF0ZSA9IGZsYWdzQ2FzZUZpZWxkVmFsdWUuZGV0YWlscz8uZmluZChcbiAgICAgICAgZGV0YWlsID0+IGRldGFpbC5pZCA9PT0gdGhpcy5zZWxlY3RlZEZsYWcuZmxhZ0RldGFpbERpc3BsYXk/LmZsYWdEZXRhaWw/LmlkKTtcbiAgICAgIGlmIChmbGFnRGV0YWlsVG9VcGRhdGUpIHtcbiAgICAgICAgLy8gQ2FjaGUgdGhlICpvcmlnaW5hbCogc3RhdHVzIG9mIHRoZSBmbGFnIGJlZm9yZSBpdCBpcyBtb2RpZmllZC4gVGhpcyBpcyBuZWVkZWQgaWYgdGhlIHVzZXIgY2hhbmdlcyB0aGUgZmxhZyBzdGF0dXNcbiAgICAgICAgLy8gdGhlbiBkZWNpZGVzIHRvIHJldHVybiB0byBhbnkgcGFydCBvZiB0aGUgZmxhZyB1cGRhdGUgam91cm5leS4gVGhlIE1hbmFnZUNhc2VGbGFnc0NvbXBvbmVudCBhbmQgVXBkYXRlRmxhZ0NvbXBvbmVudFxuICAgICAgICAvLyBzaG91bGQgcmVmZXIgdG8gYSBmbGFnJ3Mgb3JpZ2luYWwgc3RhdHVzLCBub3QgdGhlIG9uZSBzZXQgdmlhIHRoZSBVSSBiZWNhdXNlIHRoaXMgaGFzbid0IGJlZW4gcGVyc2lzdGVkIHlldFxuICAgICAgICB0aGlzLnNlbGVjdGVkRmxhZy5vcmlnaW5hbFN0YXR1cyA9IGZsYWdEZXRhaWxUb1VwZGF0ZS52YWx1ZT8uc3RhdHVzO1xuICAgICAgICAvLyBVcGRhdGUgZGVzY3JpcHRpb24gZmllbGRzIG9ubHkgaWYgZmxhZyB0eXBlIGlzIFwiT3RoZXJcIiAoZmxhZyBjb2RlIE9UMDAwMSk7IHRoZXNlIGZpZWxkcyBhcHBseSBvbmx5IHRvIHRoYXQgZmxhZyB0eXBlXG4gICAgICAgIC8vIElmIHRoZWlyIEZvcm1Db250cm9scyBkb24ndCBleGlzdCwgaXQgbWVhbnMgdGhlc2UgZmllbGRzIHdlcmVuJ3QgdmlzaXRlZCBhcyBwYXJ0IG9mIHRoZSBcIlVwZGF0ZSBGbGFnXCIgam91cm5leSwgc28gZG9cbiAgICAgICAgLy8gKm5vdCogdXBkYXRlIHRoZWlyIHZhbHVlcyAob3RoZXJ3aXNlIHRoZXkgd2lsbCBiZWNvbWUgdW5kZWZpbmVkKVxuICAgICAgICBpZiAoZmxhZ0RldGFpbFRvVXBkYXRlLnZhbHVlPy5mbGFnQ29kZSA9PT0gdGhpcy5vdGhlckZsYWdUeXBlQ29kZSkge1xuICAgICAgICAgIGlmICh0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLmdldChDYXNlRmxhZ0Zvcm1GaWVsZHMuT1RIRVJfRkxBR19ERVNDUklQVElPTikpIHtcbiAgICAgICAgICAgIGZsYWdEZXRhaWxUb1VwZGF0ZS52YWx1ZS5vdGhlckRlc2NyaXB0aW9uID0gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5nZXQoXG4gICAgICAgICAgICAgIENhc2VGbGFnRm9ybUZpZWxkcy5PVEhFUl9GTEFHX0RFU0NSSVBUSU9OKS52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5PVEhFUl9GTEFHX0RFU0NSSVBUSU9OX1dFTFNIKSkge1xuICAgICAgICAgICAgZmxhZ0RldGFpbFRvVXBkYXRlLnZhbHVlLm90aGVyRGVzY3JpcHRpb25fY3kgPSB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLmdldChcbiAgICAgICAgICAgICAgQ2FzZUZsYWdGb3JtRmllbGRzLk9USEVSX0ZMQUdfREVTQ1JJUFRJT05fV0VMU0gpLnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBFbnN1cmUgdGhhdCBhbnkgY29tbWVudHMgZW50ZXJlZCB3aXRoIGxhbmd1YWdlIHNldCB0byBXZWxzaCBkbyBub3QgZW5kIHVwIGluIHRoZSBFbmdsaXNoIGNvbW1lbnRzIGZpZWxkXG4gICAgICAgIGlmICh0aGlzLnJweFRyYW5zbGF0aW9uU2VydmljZS5sYW5ndWFnZSAhPT0gJ2N5Jykge1xuICAgICAgICAgIGZsYWdEZXRhaWxUb1VwZGF0ZS52YWx1ZS5mbGFnQ29tbWVudCA9IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5DT01NRU5UUyk/LnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFBvcHVsYXRlIGZyb20gdGhlICpFbmdsaXNoKiBjb21tZW50cyBmaWVsZCBpZjpcbiAgICAgICAgLy8gKiBUaGUgV2Vsc2ggY29tbWVudHMgZmllbGQgaGFzIG5vIHZhbHVlIChXZWxzaCBjb21tZW50cyBmaWVsZCBhY3F1aXJlcyBhIHZhbHVlIG9ubHkgd2hlbiBhbiBITUNUUyBpbnRlcm5hbCB1c2VyIGhhc1xuICAgICAgICAvLyBnb25lIHRocm91Z2ggdGhlIFwiYWRkIHRyYW5zbGF0aW9uXCIgc3RlcCBmb3IgTWFuYWdlIENhc2UgRmxhZ3MpLCBBTkRcbiAgICAgICAgLy8gKiBUaGUgbGFuZ3VhZ2UgaXMgc2V0IHRvIFdlbHNoXG4gICAgICAgIC8vIElmIHRoZSBGb3JtQ29udHJvbCBkb2Vzbid0IGV4aXN0LCBpdCBtZWFucyB0aGlzIGZpZWxkIHdhc24ndCB2aXNpdGVkIGFzIHBhcnQgb2YgdGhlIFwiVXBkYXRlIEZsYWdcIiBqb3VybmV5LCBzbyBkb1xuICAgICAgICAvLyAqbm90KiB1cGRhdGUgaXRzIHZhbHVlIChvdGhlcndpc2UgaXQgd2lsbCBiZSBvdmVycmlkZGVuKSAtIHVubGVzcyB0aGUgdXNlciBpcyBleHRlcm5hbCBBTkQgd29ya2luZyBpbiBXZWxzaFxuICAgICAgICBpZiAodGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5nZXQoQ2FzZUZsYWdGb3JtRmllbGRzLkNPTU1FTlRTX1dFTFNIKSB8fCB0aGlzLnJweFRyYW5zbGF0aW9uU2VydmljZS5sYW5ndWFnZSA9PT0gJ2N5Jykge1xuICAgICAgICAgIGZsYWdEZXRhaWxUb1VwZGF0ZS52YWx1ZS5mbGFnQ29tbWVudF9jeSA9IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5DT01NRU5UU19XRUxTSCk/LnZhbHVlXG4gICAgICAgICAgPyB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLmdldChDYXNlRmxhZ0Zvcm1GaWVsZHMuQ09NTUVOVFNfV0VMU0gpPy52YWx1ZVxuICAgICAgICAgIDogdGhpcy5ycHhUcmFuc2xhdGlvblNlcnZpY2UubGFuZ3VhZ2UgPT09ICdjeSdcbiAgICAgICAgICAgID8gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5nZXQoQ2FzZUZsYWdGb3JtRmllbGRzLkNPTU1FTlRTKT8udmFsdWVcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBmbGFnRGV0YWlsVG9VcGRhdGUudmFsdWUuZmxhZ1VwZGF0ZUNvbW1lbnQgPSB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLmdldChDYXNlRmxhZ0Zvcm1GaWVsZHMuU1RBVFVTX0NIQU5HRV9SRUFTT04pPy52YWx1ZTtcbiAgICAgICAgZmxhZ0RldGFpbFRvVXBkYXRlLnZhbHVlLnN0YXR1cyA9IENhc2VGbGFnU3RhdHVzW3RoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5TVEFUVVMpPy52YWx1ZV07XG4gICAgICAgIGZsYWdEZXRhaWxUb1VwZGF0ZS52YWx1ZS5kYXRlVGltZU1vZGlmaWVkID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc0F0RmluYWxTdGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyVXBkYXRlXG4gICAgICA/IHRoaXMuZmllbGRTdGF0ZSA9PT0gdGhpcy5tYW5hZ2VGbGFnRmluYWxTdGF0ZVxuICAgICAgOiAhdGhpcy5pc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyMlBvaW50MUVuYWJsZWRcbiAgICAgICAgPyB0aGlzLmZpZWxkU3RhdGUgPT09IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0NPTU1FTlRTXG4gICAgICAgIDogdGhpcy5maWVsZFN0YXRlID09PSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19TVEFUVVM7XG4gIH1cblxuICBwdWJsaWMgbmF2aWdhdGVUb0Vycm9yRWxlbWVudChlbGVtZW50SWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChlbGVtZW50SWQpIHtcbiAgICAgIGNvbnN0IGh0bWxFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTtcbiAgICAgIGlmIChodG1sRWxlbWVudCkge1xuICAgICAgICBodG1sRWxlbWVudC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInIH0pO1xuICAgICAgICBodG1sRWxlbWVudC5mb2N1cygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkZsYWdDb21tZW50c09wdGlvbmFsRW1pdHRlZChfOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmZsYWdDb21tZW50c09wdGlvbmFsID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBwb3B1bGF0ZU5ld0ZsYWdEZXRhaWxJbnN0YW5jZSgpOiBGbGFnRGV0YWlsIHtcbiAgICBjb25zdCBsYW5nU2VhcmNoVGVybSA9IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXA/LnZhbHVlWydsYW5ndWFnZVNlYXJjaFRlcm0nXTtcbiAgICBjb25zdCBtYW51YWxMYW5nRW50cnkgPSB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwPy52YWx1ZVsnbWFudWFsTGFuZ3VhZ2VFbnRyeSddO1xuICAgIGNvbnN0IGZsYWdUeXBlID0gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cD8udmFsdWVbJ2ZsYWdUeXBlJ107XG4gICAgY29uc3Qgb3RoZXJEZXNjID0gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cD8udmFsdWVbJ290aGVyRGVzY3JpcHRpb24nXTtcbiAgICBjb25zdCBmb3JtVmFsdWVzID0gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cD8udmFsdWU7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHRoaXMuZmxhZ1R5cGU/Lm5hbWUsXG4gICAgICBuYW1lX2N5OiBmbGFnVHlwZT8ubmFtZV9jeSxcbiAgICAgIC8vIEN1cnJlbnRseSwgc3ViVHlwZVZhbHVlLCBzdWJUeXBlVmFsdWVfY3kgYW5kIHN1YlR5cGVLZXkgYXJlIGFwcGxpY2FibGUgb25seSB0byBsYW5ndWFnZSBmbGFnIHR5cGVzXG4gICAgICBzdWJUeXBlVmFsdWU6IGxhbmdTZWFyY2hUZXJtICYmIHRoaXMucnB4VHJhbnNsYXRpb25TZXJ2aWNlLmxhbmd1YWdlID09PSAnZW4nXG4gICAgICAgID8gbGFuZ1NlYXJjaFRlcm0udmFsdWVcbiAgICAgICAgOiBtYW51YWxMYW5nRW50cnkgJiYgdGhpcy5ycHhUcmFuc2xhdGlvblNlcnZpY2UubGFuZ3VhZ2UgPT09ICdlbidcbiAgICAgICAgICA/IG1hbnVhbExhbmdFbnRyeVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIHN1YlR5cGVWYWx1ZV9jeTogbGFuZ1NlYXJjaFRlcm0gJiYgdGhpcy5ycHhUcmFuc2xhdGlvblNlcnZpY2UubGFuZ3VhZ2UgPT09ICdjeSdcbiAgICAgID8gbGFuZ1NlYXJjaFRlcm0/LnZhbHVlX2N5XG4gICAgICA6IG1hbnVhbExhbmdFbnRyeSAmJiB0aGlzLnJweFRyYW5zbGF0aW9uU2VydmljZS5sYW5ndWFnZSA9PT0gJ2N5J1xuICAgICAgICA/IG1hbnVhbExhbmdFbnRyeVxuICAgICAgICA6IG51bGwsXG4gICAgICAvLyBGb3IgdXNlci1lbnRlcmVkIChpLmUuIG5vbi1SZWZlcmVuY2UgRGF0YSkgbGFuZ3VhZ2VzLCB0aGVyZSBpcyBubyBrZXlcbiAgICAgIHN1YlR5cGVLZXk6IGxhbmdTZWFyY2hUZXJtXG4gICAgICAgID8gbGFuZ1NlYXJjaFRlcm0ua2V5XG4gICAgICAgIDogbnVsbCxcbiAgICAgIG90aGVyRGVzY3JpcHRpb246IGZsYWdUeXBlPy5mbGFnQ29kZSA9PT0gdGhpcy5vdGhlckZsYWdUeXBlQ29kZSAmJlxuICAgICAgICBvdGhlckRlc2MgJiYgdGhpcy5ycHhUcmFuc2xhdGlvblNlcnZpY2UubGFuZ3VhZ2UgPT09ICdlbidcbiAgICAgICAgPyBvdGhlckRlc2NcbiAgICAgICAgICA6IG51bGwsXG4gICAgICBvdGhlckRlc2NyaXB0aW9uX2N5OiBmbGFnVHlwZT8uZmxhZ0NvZGUgPT09IHRoaXMub3RoZXJGbGFnVHlwZUNvZGUgJiZcbiAgICAgICAgb3RoZXJEZXNjICYmIHRoaXMucnB4VHJhbnNsYXRpb25TZXJ2aWNlLmxhbmd1YWdlID09PSAnY3knXG4gICAgICAgID8gb3RoZXJEZXNjXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGZsYWdDb21tZW50OiB0aGlzLnJweFRyYW5zbGF0aW9uU2VydmljZS5sYW5ndWFnZSA9PT0gJ2VuJ1xuICAgICAgICA/IGZvcm1WYWx1ZXM/LmZsYWdDb21tZW50c1xuICAgICAgICA6IG51bGwsXG4gICAgICBmbGFnQ29tbWVudF9jeTogdGhpcy5ycHhUcmFuc2xhdGlvblNlcnZpY2UubGFuZ3VhZ2UgPT09ICdjeSdcbiAgICAgICAgPyBmb3JtVmFsdWVzPy5mbGFnQ29tbWVudHNcbiAgICAgICAgOiBudWxsLFxuICAgICAgZmxhZ1VwZGF0ZUNvbW1lbnQ6IGZvcm1WYWx1ZXM/LnN0YXR1c1JlYXNvbixcbiAgICAgIGRhdGVUaW1lQ3JlYXRlZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgcGF0aDogZmxhZ1R5cGU/LlBhdGggJiZcbiAgICAgICAgZmxhZ1R5cGU/LlBhdGgubWFwKHBhdGhWYWx1ZSA9PiBPYmplY3QuYXNzaWduKHsgaWQ6IG51bGwsIHZhbHVlOiBwYXRoVmFsdWUgfSkpLFxuICAgICAgaGVhcmluZ1JlbGV2YW50OiBmbGFnVHlwZT8uaGVhcmluZ1JlbGV2YW50ID8gJ1llcycgOiAnTm8nLFxuICAgICAgZmxhZ0NvZGU6IGZsYWdUeXBlPy5mbGFnQ29kZSxcbiAgICAgIC8vIFN0YXR1cyBzaG91bGQgYmUgc2V0IHRvIHdoYXRldmVyIHRoZSBkZWZhdWx0IGlzIGZvciB0aGlzIGZsYWcgdHlwZSwgaWYgZmxhZyBpcyBiZWluZyBjcmVhdGVkIGJ5IGFuIGV4dGVybmFsXG4gICAgICAvLyB1c2VyLCBvdGhlcndpc2UgaXQgc2hvdWxkIGJlIHNldCB0byBcIkFjdGl2ZVwiIGlmIENhc2UgRmxhZ3MgdjIuMSBpcyBOT1QgZW5hYmxlZCwgb3IgdGhlIHNlbGVjdGVkIHN0YXR1cyBpZiBpdCBpc1xuICAgICAgc3RhdHVzOiB0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJFeHRlcm5hbFxuICAgICAgICA/IGZsYWdUeXBlPy5kZWZhdWx0U3RhdHVzXG4gICAgICAgIDogIXRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlcjJQb2ludDFFbmFibGVkXG4gICAgICAgICAgPyBDYXNlRmxhZ1N0YXR1cy5BQ1RJVkVcbiAgICAgICAgICA6IENhc2VGbGFnU3RhdHVzW2Zvcm1WYWx1ZXM/LnNlbGVjdGVkU3RhdHVzXSxcbiAgICAgIGF2YWlsYWJsZUV4dGVybmFsbHk6IGZsYWdUeXBlPy5leHRlcm5hbGx5QXZhaWxhYmxlID8gJ1llcycgOiAnTm8nXG4gICAgfSBhcyBGbGFnRGV0YWlsO1xuICB9XG5cbiAgcHVibGljIG1vdmVUb0ZpbmFsUmV2aWV3U3RhZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRGbGFnc0Nhc2VGaWVsZFZhbHVlKCk7XG4gICAgLy8gQ2hlY2sgdGhhdCBubyBlcnJvcnMgaGF2ZSBiZWVuIHNldCBvbiBjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cCAoYnkgZGV0ZXJtaW5lTG9jYXRpb25Gb3JGbGFnKCkpOyBwcmV2ZW50IG1vdmluZyB0b1xuICAgIC8vIGZpbmFsIHJldmlldyBzdGFnZSBpZiBlcnJvcnMgZXhpc3RcbiAgICBpZiAoIXRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuZXJyb3JzKSB7XG4gICAgICAvLyBDbGVhciB0aGUgXCJub3RBbGxDYXNlRmxhZ1N0YWdlc0NvbXBsZXRlZFwiIGVycm9yXG4gICAgICB0aGlzLmFsbENhc2VGbGFnU3RhZ2VzQ29tcGxldGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgIHRoaXMuY2FzZUVkaXREYXRhU2VydmljZS5zZXRUcmlnZ2VyU3VibWl0RXZlbnQodHJ1ZSk7XG4gICAgICAvLyBVcGRhdGUgdGhpcy5zZWxlY3RlZEZsYWdzTG9jYXRpb24gd2l0aCB0aGUgY29ycmVjdGx5IGRldGVybWluZWQgbG9jYXRpb24sIHNvIHRoZSBjb3JyZWN0IHZhbHVlIGlzIGF2YWlsYWJsZSB0b1xuICAgICAgLy8gUmVhZENhc2VGbGFnRmllbGRDb21wb25lbnQgd2hlbiBpdCBpbml0aWFsaXNlcyB0aGUgQ2FzZSBGbGFnIFN1bW1hcnkgcGFnZVxuICAgICAgdGhpcy5zZWxlY3RlZEZsYWdzTG9jYXRpb24gPSB0aGlzLmRldGVybWluZWRMb2NhdGlvbjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy8gUmVzZXQgdGhlIGZpZWxkc3RhdGVUb05hdmlnYXRlIGFzIHRoZSB3cml0ZSBqb3VybmV5IGNvbXBsZXRlcyBhdCB0aGlzIHBvaW50XG4gICAgdGhpcy5jYXNlRmxhZ1N0YXRlU2VydmljZS5maWVsZFN0YXRlVG9OYXZpZ2F0ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNhc2VUaXRsZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbWFuYWdlRmxhZ0ZpbmFsU3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5JU19XRUxTSF9UUkFOU0xBVElPTl9ORUVERUQpPy52YWx1ZVxuICAgID8gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVVBEQVRFX1dFTFNIX1RSQU5TTEFUSU9OIDogQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVVBEQVRFO1xuICB9XG5cbiAgcHVibGljIHNldERpc3BsYXlDb250ZXh0UGFyYW1ldGVyKGNhc2VGaWVsZHM6IENhc2VGaWVsZFtdKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY2FzZUZpZWxkcy5maW5kKGNhc2VGaWVsZCA9PiBGaWVsZHNVdGlscy5pc0Nhc2VGaWVsZE9mVHlwZShjYXNlRmllbGQsIFsnRmxhZ0xhdW5jaGVyJ10pKT8uZGlzcGxheV9jb250ZXh0X3BhcmFtZXRlcjtcbiAgfVxufVxuIiwiPCEtLSBFcnJvciBtZXNzYWdlIHN1bW1hcnkgLS0+XG48ZGl2ICpuZ0lmPVwiZXJyb3JNZXNzYWdlcy5sZW5ndGggPiAwXCIgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5XCIgYXJpYS1sYWJlbGxlZGJ5PVwiZXJyb3Itc3VtbWFyeS10aXRsZVwiIHJvbGU9XCJhbGVydFwiIHRhYmluZGV4PVwiLTFcIiBkYXRhLW1vZHVsZT1cImdvdnVrLWVycm9yLXN1bW1hcnlcIj5cbiAgPGgyIGNsYXNzPVwiZ292dWstZXJyb3Itc3VtbWFyeV9fdGl0bGVcIiBpZD1cImVycm9yLXN1bW1hcnktdGl0bGVcIj5cbiAgICB7eydUaGVyZSBpcyBhIHByb2JsZW0nIHwgcnB4VHJhbnNsYXRlfX1cbiAgPC9oMj5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgZXJyb3JNZXNzYWdlIG9mIGVycm9yTWVzc2FnZXNcIiBjbGFzcz1cImdvdnVrLWVycm9yLXN1bW1hcnlfX2JvZHlcIj5cbiAgICA8dWwgY2xhc3M9XCJnb3Z1ay1saXN0IGdvdnVrLWVycm9yLXN1bW1hcnlfX2xpc3RcIj5cbiAgICAgIDxsaT5cbiAgICAgICAgPGEgKGNsaWNrKT1cIm5hdmlnYXRlVG9FcnJvckVsZW1lbnQoZXJyb3JNZXNzYWdlLmZpZWxkSWQpXCIgY2xhc3M9XCJ2YWxpZGF0aW9uLWVycm9yXCI+e3tlcnJvck1lc3NhZ2UuZGVzY3JpcHRpb24gfCBycHhUcmFuc2xhdGV9fTwvYT5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCIhaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZVwiIGNsYXNzPVwiZm9ybS1ncm91cFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwXCIgW25nU3dpdGNoXT1cImZpZWxkU3RhdGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19MT0NBVElPTlwiPlxuICAgICAgPGNjZC1zZWxlY3QtZmxhZy1sb2NhdGlvblxuICAgICAgICBbZm9ybUdyb3VwXT1cImNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwXCIgW2ZsYWdzRGF0YV09XCJmbGFnc0RhdGFcIlxuICAgICAgICAoY2FzZUZsYWdTdGF0ZUVtaXR0ZXIpPVwib25DYXNlRmxhZ1N0YXRlRW1pdHRlZCgkZXZlbnQpXCJcbiAgICAgICAgW2lzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJFeHRlcm5hbF09XCJpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWxcIlxuICAgICAgPjwvY2NkLXNlbGVjdC1mbGFnLWxvY2F0aW9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImNhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1RZUEVcIj5cbiAgICAgIDxjY2Qtc2VsZWN0LWZsYWctdHlwZSBbZm9ybUdyb3VwXT1cImNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwXCIgW2p1cmlzZGljdGlvbl09XCJqdXJpc2RpY3Rpb25cIiBbY2FzZVR5cGVJZF09XCJjYXNlVHlwZUlkXCJcbiAgICAgICAgW2htY3RzU2VydmljZUlkXT1cImhtY3RzU2VydmljZUlkXCIgW2lzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJFeHRlcm5hbF09XCJpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWxcIlxuICAgICAgICBbaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlcjJQb2ludDFFbmFibGVkXT1cImlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIyUG9pbnQxRW5hYmxlZFwiXG4gICAgICAgIFtzZWxlY3RlZEZsYWdzTG9jYXRpb25dPVwic2VsZWN0ZWRGbGFnc0xvY2F0aW9uXCJcbiAgICAgICAgKGNhc2VGbGFnU3RhdGVFbWl0dGVyKT1cIm9uQ2FzZUZsYWdTdGF0ZUVtaXR0ZWQoJGV2ZW50KVwiXG4gICAgICAgIChmbGFnQ29tbWVudHNPcHRpb25hbEVtaXR0ZXIpPVwib25GbGFnQ29tbWVudHNPcHRpb25hbEVtaXR0ZWQoJGV2ZW50KVwiPjwvY2NkLXNlbGVjdC1mbGFnLXR5cGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfTEFOR1VBR0VfSU5URVJQUkVURVJcIj5cbiAgICAgIDxjY2Qtc2VhcmNoLWxhbmd1YWdlLWludGVycHJldGVyIFtmb3JtR3JvdXBdPVwiY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXBcIlxuICAgICAgICBbZmxhZ1R5cGVdPVwiZmxhZ1R5cGVcIlxuICAgICAgICAoY2FzZUZsYWdTdGF0ZUVtaXR0ZXIpPVwib25DYXNlRmxhZ1N0YXRlRW1pdHRlZCgkZXZlbnQpXCI+XG4gICAgICA8L2NjZC1zZWFyY2gtbGFuZ3VhZ2UtaW50ZXJwcmV0ZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfQ09NTUVOVFNcIj5cbiAgICAgIDxjY2QtYWRkLWNvbW1lbnRzIFtmb3JtR3JvdXBdPVwiY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXBcIiBbb3B0aW9uYWxdPVwiZmxhZ0NvbW1lbnRzT3B0aW9uYWxcIlxuICAgICAgICAoY2FzZUZsYWdTdGF0ZUVtaXR0ZXIpPVwib25DYXNlRmxhZ1N0YXRlRW1pdHRlZCgkZXZlbnQpXCJcbiAgICAgICAgW2lzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJFeHRlcm5hbF09XCJpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWxcIlxuICAgICAgICBbaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlcjJQb2ludDFFbmFibGVkXT1cImlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIyUG9pbnQxRW5hYmxlZFwiPlxuICAgICAgPC9jY2QtYWRkLWNvbW1lbnRzPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImNhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1NUQVRVU1wiPlxuICAgICAgPGNjZC1jb25maXJtLWZsYWctc3RhdHVzIFtmb3JtR3JvdXBdPVwiY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXBcIiBbZGVmYXVsdFN0YXR1c109XCJmbGFnVHlwZS5kZWZhdWx0U3RhdHVzXCJcbiAgICAgICAgKGNhc2VGbGFnU3RhdGVFbWl0dGVyKT1cIm9uQ2FzZUZsYWdTdGF0ZUVtaXR0ZWQoJGV2ZW50KVwiPjwvY2NkLWNvbmZpcm0tZmxhZy1zdGF0dXM+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwiaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZVwiIGNsYXNzPVwiZm9ybS1ncm91cFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwXCIgW25nU3dpdGNoXT1cImZpZWxkU3RhdGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19NQU5BR0VfQ0FTRV9GTEFHU1wiPlxuICAgICAgPGNjZC1tYW5hZ2UtY2FzZS1mbGFncyBbZm9ybUdyb3VwXT1cImNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwXCIgW2ZsYWdzRGF0YV09XCJmbGFnc0RhdGFcIiBbY2FzZVRpdGxlXT1cImNhc2VUaXRsZVwiXG4gICAgICAgIFtkaXNwbGF5Q29udGV4dFBhcmFtZXRlcl09XCJkaXNwbGF5Q29udGV4dFBhcmFtZXRlclwiXG4gICAgICAgIChjYXNlRmxhZ1N0YXRlRW1pdHRlcik9XCJvbkNhc2VGbGFnU3RhdGVFbWl0dGVkKCRldmVudClcIj48L2NjZC1tYW5hZ2UtY2FzZS1mbGFncz5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19VUERBVEVcIj5cbiAgICAgIDxjY2QtdXBkYXRlLWZsYWcgW2Zvcm1Hcm91cF09XCJjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cFwiXG4gICAgICAgIFtkaXNwbGF5Q29udGV4dFBhcmFtZXRlcl09XCJkaXNwbGF5Q29udGV4dFBhcmFtZXRlclwiXG4gICAgICAgIChjYXNlRmxhZ1N0YXRlRW1pdHRlcik9XCJvbkNhc2VGbGFnU3RhdGVFbWl0dGVkKCRldmVudClcIj48L2NjZC11cGRhdGUtZmxhZz5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19VUERBVEVfV0VMU0hfVFJBTlNMQVRJT05cIj5cbiAgICAgIDxjY2QtdXBkYXRlLWZsYWctYWRkLXRyYW5zbGF0aW9uLWZvcm1cbiAgICAgICAgW2Zvcm1Hcm91cF09XCJjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cFwiXG4gICAgICAgIChjYXNlRmxhZ1N0YXRlRW1pdHRlcik9XCJvbkNhc2VGbGFnU3RhdGVFbWl0dGVkKCRldmVudClcIlxuICAgICAgPjwvY2NkLXVwZGF0ZS1mbGFnLWFkZC10cmFuc2xhdGlvbi1mb3JtPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
686
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUtY2FzZS1mbGFnLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL2Nhc2UtZmxhZy93cml0ZS1jYXNlLWZsYWctZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1mbGFnL3dyaXRlLWNhc2UtZmxhZy1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQW1CLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUc3RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDMUYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFM0YsT0FBTyxFQUFFLCtCQUErQixFQUFFLG9CQUFvQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7Ozs7Ozs7SUNQdEksOEJBQWtGLFlBQUEsU0FBQSxXQUFBO0lBR3pFLDZPQUFTLGVBQUEsc0RBQTRDLENBQUEsSUFBQztJQUEwQixZQUEyQzs7SUFBQSxpQkFBSSxFQUFBLEVBQUEsRUFBQTs7O0lBQS9DLGVBQTJDO0lBQTNDLHVFQUEyQzs7O0lBUHRJLDhCQUFxSyxZQUFBO0lBRWpLLFlBQ0Y7O0lBQUEsaUJBQUs7SUFDTCxrRkFNTTtJQUNSLGlCQUFNOzs7SUFURixlQUNGO0lBREUsMkVBQ0Y7SUFDOEIsZUFBZ0I7SUFBaEIsOENBQWdCOzs7O0lBVTVDLDZCQUErRDtJQUM3RCxvREFJQztJQUZDLGdQQUF3QixlQUFBLHNDQUE4QixDQUFBLElBQUM7SUFFeEQsaUJBQTJCO0lBQzlCLDBCQUFlOzs7SUFKWCxlQUFxQztJQUFyQywwREFBcUMsK0JBQUEsK0VBQUE7Ozs7SUFLekMsNkJBQTJEO0lBQ3pELGdEQUt3RTtJQUR0RSw0T0FBd0IsZUFBQSxzQ0FBOEIsQ0FBQSxJQUFDLDZPQUN4QixlQUFBLDZDQUFxQyxDQUFBLElBRGI7SUFDZSxpQkFBdUI7SUFDakcsMEJBQWU7OztJQU5TLGVBQXFDO0lBQXJDLDBEQUFxQyxxQ0FBQSxpQ0FBQSx5Q0FBQSwrRUFBQSwyRkFBQSx1REFBQTs7OztJQU83RCw2QkFBMkU7SUFDekUsMkRBRTBEO0lBQXhELHVQQUF3QixlQUFBLHNDQUE4QixDQUFBLElBQUM7SUFDekQsaUJBQWtDO0lBQ3BDLDBCQUFlOzs7SUFKb0IsZUFBcUM7SUFBckMsMERBQXFDLDZCQUFBOzs7O0lBS3hFLDZCQUErRDtJQUM3RCw0Q0FHc0Y7SUFGcEYsd09BQXdCLGVBQUEsc0NBQThCLENBQUEsSUFBQztJQUd6RCxpQkFBbUI7SUFDckIsMEJBQWU7OztJQUxLLGVBQXFDO0lBQXJDLDJEQUFxQywwQ0FBQSxnRkFBQSw0RkFBQTs7OztJQU16RCw2QkFBNkQ7SUFDM0QsbURBQzBEO0lBQXhELCtPQUF3QixlQUFBLHNDQUE4QixDQUFBLElBQUM7SUFBQyxpQkFBMEI7SUFDdEYsMEJBQWU7OztJQUZZLGVBQXFDO0lBQXJDLDJEQUFxQyxpREFBQTs7O0lBL0JwRSw4QkFBeUYsYUFBQTtJQUVyRixxR0FNZTtJQUNmLHFHQU9lO0lBQ2YscUdBS2U7SUFDZixxR0FNZTtJQUNmLHFHQUdlO0lBQ2pCLGlCQUFNLEVBQUE7OztJQWxDeUQsNENBQXVCO0lBQ3hELGVBQXVCO0lBQXZCLDRDQUF1QjtJQUNwQyxlQUE4QztJQUE5QyxzRUFBOEM7SUFPOUMsZUFBMEM7SUFBMUMsa0VBQTBDO0lBUTFDLGVBQTBEO0lBQTFELGtGQUEwRDtJQU0xRCxlQUE4QztJQUE5QyxzRUFBOEM7SUFPOUMsZUFBNEM7SUFBNUMsb0VBQTRDOzs7O0lBUTNELDZCQUF3RTtJQUN0RSxpREFFMEQ7SUFBeEQsNk9BQXdCLGVBQUEsc0NBQThCLENBQUEsSUFBQztJQUFDLGlCQUF3QjtJQUNwRiwwQkFBZTs7O0lBSFUsZUFBcUM7SUFBckMsMkRBQXFDLGdDQUFBLGdDQUFBLDREQUFBOzs7O0lBSTlELDZCQUE2RDtJQUMzRCwyQ0FFMEQ7SUFBeEQsdU9BQXdCLGVBQUEsc0NBQThCLENBQUEsSUFBQztJQUFDLGlCQUFrQjtJQUM5RSwwQkFBZTs7O0lBSEksZUFBcUM7SUFBckMsMkRBQXFDLDREQUFBOzs7O0lBSXhELDZCQUErRTtJQUM3RSxnRUFHQztJQURDLDRQQUF3QixlQUFBLHNDQUE4QixDQUFBLElBQUM7SUFDeEQsaUJBQXVDO0lBQzFDLDBCQUFlOzs7SUFIWCxlQUFxQztJQUFyQywyREFBcUM7OztJQWQ3Qyw4QkFBd0YsYUFBQTtJQUVwRixxR0FJZTtJQUNmLHFHQUllO0lBQ2YscUdBS2U7SUFDakIsaUJBQU0sRUFBQTs7O0lBbEJ3RCw0Q0FBdUI7SUFDdkQsZUFBdUI7SUFBdkIsNENBQXVCO0lBQ3BDLGVBQXVEO0lBQXZELCtFQUF1RDtJQUt2RCxlQUE0QztJQUE1QyxvRUFBNEM7SUFLNUMsZUFBOEQ7SUFBOUQsc0ZBQThEOztBRDFDakYsTUFBTSxPQUFPLDJCQUE0QixTQUFRLDJCQUEyQjtJQXNDMUUsWUFDbUIsS0FBcUIsRUFDckIsbUJBQXdDLEVBQ3hDLG9CQUEwQyxFQUMxQyxxQkFBNEM7UUFFN0QsS0FBSyxFQUFFLENBQUM7UUFMUyxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQXhDeEQsdUJBQWtCLEdBQUcsa0JBQWtCLENBQUM7UUFDeEMsa0JBQWEsR0FBbUIsRUFBRSxDQUFDO1FBSW5DLHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQVc1QiwrQkFBMEIsR0FBRyxLQUFLLENBQUM7UUFDM0MsMERBQTBEO1FBQ3pDLHNCQUFpQixHQUFHLFFBQVEsQ0FBQztRQUM3QiwrQkFBMEIsR0FBRyw0QkFBNEIsQ0FBQztRQUMzRCxvQkFBZSxHQUFHLG1CQUFtQixDQUFDO0lBdUJ0RCxDQUFDO0lBckJELElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDO0lBQ3RELENBQUM7SUFFRCxJQUFXLHFCQUFxQjtRQUM5QixPQUFPLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLENBQUM7SUFDOUQsQ0FBQztJQUVELElBQVcscUJBQXFCLENBQUMsZ0JBQStDO1FBQzlFLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFO1lBQ2hDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7U0FDeEU7SUFDSCxDQUFDO0lBV00sUUFBUTtRQUNiLDhHQUE4RztRQUM5Ryx3R0FBd0c7UUFDeEcsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsb0JBQW9CLENBQUM7UUFDakUsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVM7WUFDN0IsSUFBSSxDQUFDLFVBQVUsS0FBSyxrQkFBa0IsQ0FBQyxhQUFhO1lBQ3BELElBQUksQ0FBQyxVQUFVLEtBQUssa0JBQWtCLENBQUMsc0JBQXNCLEVBQUU7WUFDakUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQzFDLDBFQUEwRTtZQUMxRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDL0U7UUFDRCwyREFBMkQ7UUFDM0QsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUM7UUFDbkUsbUZBQW1GO1FBQ25GLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQ3JELGtIQUFrSDtRQUNsSCxpSEFBaUg7UUFDakgsb0NBQW9DO1FBQ3BDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQzNELElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDakQ7UUFDRCwrR0FBK0c7UUFDL0csSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksU0FBUyxDQUFDLEVBQUUsRUFBRTtZQUN0RCxVQUFVLEVBQUUsQ0FBQyxDQUFrQixFQUFxQyxFQUFFO2dCQUNwRSxJQUFJLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFO29CQUNwQyxtR0FBbUc7b0JBQ25HLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxJQUFJLEVBQUUsQ0FBQztpQkFDaEQ7Z0JBQ0QsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1NBQ0YsQ0FBQyxFQUFFLElBQUksQ0FBYyxDQUFDO1FBRXZCLGlIQUFpSDtRQUNqSCxvQkFBb0I7UUFDcEIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzVFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzdELG9IQUFvSDtZQUNwSCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRTtnQkFDeEQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO2FBQzdFO1NBQ0Y7UUFDRCx1RkFBdUY7UUFDdkYsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3pDLG9IQUFvSDtZQUNwSCw2RkFBNkY7WUFDN0YsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQjttQkFDdkQsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLEVBQUU7Z0JBQzVFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUM7YUFDL0Y7WUFFRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFO2dCQUNyRCxJQUFJLENBQUMsU0FBUyxHQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQWlCO3FCQUNsRixNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsNkJBQTZCLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUUxSCwrR0FBK0c7Z0JBQy9HLElBQUksQ0FBQyx1QkFBdUI7b0JBQzFCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQTBCLENBQUMsQ0FBQztnQkFFcEcsbUVBQW1FO2dCQUNuRSxJQUFJLENBQUMsK0JBQStCLEdBQUcsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2dCQUUzRyxxRUFBcUU7Z0JBQ3JFLElBQUksQ0FBQyxpQ0FBaUMsR0FBRyxJQUFJLENBQUMsa0NBQWtDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7Z0JBRS9HLGtGQUFrRjtnQkFDbEYsSUFBSSxDQUFDLHVDQUF1QyxHQUFHLElBQUksQ0FBQyx3Q0FBd0MsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztnQkFFM0gsNkRBQTZEO2dCQUM3RCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtvQkFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsK0JBQStCLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUM7aUJBQ3ZJO2dCQUVELGlEQUFpRDtnQkFDakQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO29CQUN6RSxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUU7d0JBQ1osSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO29CQUNwRSxDQUFDO2lCQUNGLENBQUMsQ0FBQzthQUNKO1NBQ0Y7SUFDSCxDQUFDO0lBRU0sZ0NBQWdDLENBQUMsdUJBQStCO1FBQ3JFLE9BQU8sdUJBQXVCLEtBQUssK0JBQStCLENBQUMsTUFBTTtZQUN2RSx1QkFBdUIsS0FBSywrQkFBK0IsQ0FBQyxlQUFlO1lBQzNFLHVCQUF1QixLQUFLLCtCQUErQixDQUFDLGdCQUFnQixDQUFDO0lBQ2pGLENBQUM7SUFFTSxrQ0FBa0MsQ0FBQyx1QkFBK0I7UUFDdkUsT0FBTyx1QkFBdUIsS0FBSywrQkFBK0IsQ0FBQyxlQUFlO1lBQ2hGLHVCQUF1QixLQUFLLCtCQUErQixDQUFDLGVBQWUsQ0FBQztJQUNoRixDQUFDO0lBRU0sd0NBQXdDLENBQUMsdUJBQStCO1FBQzdFLE9BQU8sdUJBQXVCLEtBQUssK0JBQStCLENBQUMsZ0JBQWdCO1lBQ2pGLHVCQUF1QixLQUFLLCtCQUErQixDQUFDLGdCQUFnQixDQUFDO0lBQ2pGLENBQUM7SUFFTSxzQkFBc0IsQ0FBQyxhQUE0QjtRQUN4RCxJQUFJLENBQUMsbUJBQW1CLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUVyRCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQyxhQUFhLENBQUM7UUFDakQsSUFBSSxDQUFDLFlBQVksR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDO1FBRS9DLDJGQUEyRjtRQUMzRixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNuQyxJQUFJLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxhQUFhLENBQUMsRUFBRTtnQkFDakQsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7Z0JBQzlCLGlIQUFpSDtnQkFDakgseUZBQXlGO2FBQzFGO2lCQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQzFDLHdCQUF3QjtnQkFDeEIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7YUFDM0I7U0FDRjtJQUNILENBQUM7SUFFTSx5QkFBeUIsQ0FBQyxhQUE0QjtRQUMzRCxzREFBc0Q7UUFDdEQscUdBQXFHO1FBQ3JHLGtDQUFrQztRQUNsQyxJQUFJLElBQUksQ0FBQyxpQ0FBaUMsRUFBRTtZQUMxQyxPQUFPLGFBQWEsQ0FBQyx5QkFBeUIsS0FBSyxrQkFBa0IsQ0FBQyxhQUFhO2dCQUNqRixhQUFhLENBQUMseUJBQXlCLEtBQUssa0JBQWtCLENBQUMsV0FBVyxDQUFDO1NBQzlFO1FBQ0Qsa0NBQWtDO1FBQ2xDLGtFQUFrRTtRQUNsRSx3RUFBd0U7UUFDeEUsa0ZBQWtGO1FBQ2xGLHFEQUFxRDtRQUNyRCxrQ0FBa0M7UUFDbEMsT0FBTyxDQUFDLGFBQWEsQ0FBQyx5QkFBeUI7WUFDN0Msa0JBQWtCLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyx1Q0FBdUMsQ0FBQztZQUMvRSxDQUFDLGFBQWEsQ0FBQyx5QkFBeUI7Z0JBQ3RDLGtCQUFrQixDQUFDLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyx1Q0FBdUMsQ0FBQztZQUNwRixDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsS0FBSyxrQkFBa0IsQ0FBQyxXQUFXO2dCQUN6RSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsMkJBQTJCLENBQUMsRUFBRSxLQUFLLENBQUM7WUFDM0YsYUFBYSxDQUFDLHlCQUF5QixLQUFLLGtCQUFrQixDQUFDLDZCQUE2QixDQUFDO0lBQ2pHLENBQUM7SUFFTSxrQkFBa0I7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRTtZQUMxQixtSEFBbUg7WUFDbkgsbUhBQW1IO1lBQ25ILFlBQVk7WUFDWixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssa0JBQWtCLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUU7Z0JBQ3BGLElBQUksQ0FBQyxVQUFVLEdBQUcsa0JBQWtCLENBQUMsYUFBYSxDQUFDO2FBQ3BEO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQzthQUNuQjtTQUNGO0lBQ0gsQ0FBQztJQUVNLHNCQUFzQjtRQUMzQiwyQ0FBMkM7UUFDM0MsUUFBUSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3ZCLEtBQUssa0JBQWtCLENBQUMsV0FBVztnQkFDakMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQzNCLE1BQU07WUFDUixLQUFLLGtCQUFrQixDQUFDLGFBQWE7Z0JBQ25DLElBQUksSUFBSSxDQUFDLGlDQUFpQyxJQUFJLENBQUMsSUFBSSxDQUFDLHVDQUF1QyxFQUFFO29CQUMzRixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztpQkFDNUI7Z0JBQ0QsTUFBTTtZQUNSLEtBQUssSUFBSSxDQUFDLG9CQUFvQjtnQkFDNUIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7Z0JBQzlCLE1BQU07U0FDVDtJQUNILENBQUM7SUFFTSxtQkFBbUI7UUFDeEIscUhBQXFIO1FBQ3JILG1IQUFtSDtRQUNuSCxrSEFBa0g7UUFDbEgsZ0ZBQWdGO1FBQ2hGLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2hDLDJHQUEyRztZQUMzRywrQ0FBK0M7WUFDL0MsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUM7WUFDdEMsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLG9CQUFvQixDQUFDO1lBQ2xELG1IQUFtSDtZQUNuSCxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2pDLFdBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQ2pHO1lBQ0QsSUFBSSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzlCLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDL0YsSUFBSSxvQkFBb0IsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDN0IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQy9DO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLENBQUM7UUFDdkQsMkdBQTJHO1FBQzNHLDRFQUE0RTtRQUM1RSxJQUFJLENBQUMsa0JBQWtCO1lBQ3JCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsRUFBRSxJQUFJLENBQUMscUJBQXFCLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDakgsNkZBQTZGO1FBQzdGLHFIQUFxSDtRQUNySCxnSEFBZ0g7UUFFaEgsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDM0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDO1lBQzFELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixLQUFLLElBQUksQ0FBQyxDQUFDO1lBQ3BGLElBQUksbUJBQW1CLEdBQUcsV0FBVyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUM7WUFDdkQsaUhBQWlIO1lBQ2pILHNDQUFzQztZQUN0QyxtSEFBbUg7WUFDbkgsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDL0c7WUFDRCxrSEFBa0g7WUFDbEgsb0JBQW9CO1lBQ3BCLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtnQkFDeEIsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUNqQyxtQkFBbUIsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQzthQUNuRDtZQUNELCtDQUErQztZQUMvQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUNsRCxtQkFBbUIsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2FBQ2xDO1lBQ0QsZ0hBQWdIO1lBQ2hILFdBQVc7WUFDWCxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxFQUFDLENBQUMsQ0FBQztTQUNqRjtJQUNILENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXNCRztJQUNJLHdCQUF3QixDQUFDLGNBQXVCLEVBQUUscUJBQTZDLEVBQ3BHLFVBQWU7UUFDYixJQUFJLGNBQWMsSUFBSSxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO1lBQzNELElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsS0FBSyxJQUFJLENBQUMsaUJBQWlCLElBQUksQ0FBQyxVQUFVLEVBQUUsMkJBQTJCLENBQUM7Z0JBQ3pHLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEtBQUssSUFBSSxDQUFDLGlCQUFpQixJQUFJLFVBQVUsRUFBRSxRQUFRLEVBQUUsbUJBQW1CLENBQUMsRUFBRTtnQkFDeEcsNkdBQTZHO2dCQUM3RyxpQ0FBaUM7Z0JBQ2pDLE1BQU0sUUFBUSxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLEtBQUssVUFBVTtvQkFDbkYsQ0FBQyxDQUFDLHFCQUFxQjtvQkFDdkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUNyQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxPQUFPLEtBQUsscUJBQXFCLENBQUMsS0FBSyxDQUFDLE9BQU87d0JBQy9ELENBQUMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVELHNHQUFzRztnQkFDdEcsc0VBQXNFO2dCQUN0RSxJQUFJLENBQUMsUUFBUSxFQUFFO29CQUNiLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO3dCQUN0QixLQUFLLEVBQUUsRUFBRTt3QkFDVCxXQUFXLEVBQUUsb0JBQW9CLENBQUMsNEJBQTRCO3FCQUMvRCxDQUFDLENBQUM7b0JBQ0gsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQzt3QkFDckMsb0JBQW9CLEVBQUUsSUFBSTtxQkFDM0IsQ0FBQyxDQUFDO2lCQUNKO2dCQUNELE9BQU8sUUFBUSxDQUFDO2FBQ25CO2lCQUFNO2dCQUNMLDZHQUE2RztnQkFDN0csc0dBQXNHO2dCQUN0RyxNQUFNLFFBQVEsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLFVBQVU7b0JBQ25GLENBQUMsQ0FBQyxxQkFBcUI7b0JBQ3ZCLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FDckIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxLQUFLLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxPQUFPO3dCQUMvRCxDQUFDLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsS0FBSyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1RCxzR0FBc0c7Z0JBQ3RHLHNFQUFzRTtnQkFDdEUsSUFBSSxDQUFDLFFBQVEsRUFBRTtvQkFDYixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQzt3QkFDdEIsS0FBSyxFQUFFLEVBQUU7d0JBQ1QsV0FBVyxFQUFFLG9CQUFvQixDQUFDLDRCQUE0QjtxQkFDL0QsQ0FBQyxDQUFDO29CQUNILElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUM7d0JBQ3JDLG9CQUFvQixFQUFFLElBQUk7cUJBQzNCLENBQUMsQ0FBQztpQkFDSjtnQkFDRCxPQUFPLFFBQVEsQ0FBQzthQUNqQjtTQUNGO1FBQ0QsT0FBTyxxQkFBcUIsQ0FBQztJQUNqQyxDQUFDO0lBRU0sc0JBQXNCO1FBQzNCLG9IQUFvSDtRQUNwSCxtSEFBbUg7UUFDbkgsaUhBQWlIO1FBQ2pILCtGQUErRjtRQUMvRixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNoQywyR0FBMkc7WUFDM0csMkRBQTJEO1lBQzNELElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDO1lBQ3RDLElBQUksY0FBYyxHQUFHLFFBQVEsQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDO1lBQ3pELE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQztZQUNsRCxtSEFBbUg7WUFDbkgsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUNqQyxXQUFXLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDeEUsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDcEIsSUFBSSxjQUFjLElBQUksV0FBVyxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxFQUFFO3dCQUNsRSxjQUFjLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUN2QztnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO1lBQ0QsSUFBSSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sR0FBRyxDQUFDLElBQUksY0FBYyxJQUFJLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsRUFBRTtnQkFDaEcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7b0JBQ2pDLE1BQU0sa0JBQWtCLEdBQUcsY0FBYyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDL0YsSUFBSSxrQkFBa0IsRUFBRTt3QkFDdEIsVUFBVSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLElBQUksSUFBSSxDQUFDO3dCQUN2RixVQUFVLENBQUMsS0FBSyxDQUFDLG1CQUFtQixHQUFHLGtCQUFrQixDQUFDLEtBQUssRUFBRSxtQkFBbUIsSUFBSSxJQUFJLENBQUM7d0JBQzdGLFVBQVUsQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLGtCQUFrQixDQUFDLEtBQUssRUFBRSxXQUFXLElBQUksSUFBSSxDQUFDO3dCQUM3RSxVQUFVLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsY0FBYyxJQUFJLElBQUksQ0FBQzt3QkFDbkYsVUFBVSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLElBQUksSUFBSSxDQUFDO3dCQUN6RixVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDO3dCQUMzRCxVQUFVLENBQUMsS0FBSyxDQUFDLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDLEtBQUssRUFBRSxnQkFBZ0IsSUFBSSxJQUFJLENBQUM7cUJBQ3hGO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUMsS0FBMkMsQ0FBQztTQUNySDtRQUNELElBQUksbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDO1FBQzdELGlIQUFpSDtRQUNqSCxzQ0FBc0M7UUFDdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQztRQUNwRCxtSEFBbUg7UUFDbkgsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsbUJBQW1CLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUMvRztRQUNELElBQUksbUJBQW1CLEVBQUU7WUFDdkIsTUFBTSxrQkFBa0IsR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUMxRCxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDL0UsSUFBSSxrQkFBa0IsRUFBRTtnQkFDdEIsb0hBQW9IO2dCQUNwSCxzSEFBc0g7Z0JBQ3RILDhHQUE4RztnQkFDOUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQztnQkFDcEUsdUhBQXVIO2dCQUN2SCx1SEFBdUg7Z0JBQ3ZILG1FQUFtRTtnQkFDbkUsSUFBSSxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxLQUFLLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtvQkFDakUsSUFBSSxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLHNCQUFzQixDQUFDLEVBQUU7d0JBQy9FLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUMxRSxrQkFBa0IsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLEtBQUssQ0FBQztxQkFDcEQ7b0JBQ0QsSUFBSSxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLDRCQUE0QixDQUFDLEVBQUU7d0JBQ3JGLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUM3RSxrQkFBa0IsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLEtBQUssQ0FBQztxQkFDMUQ7aUJBQ0Y7Z0JBQ0QsMEdBQTBHO2dCQUMxRyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO29CQUNoRCxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDO2lCQUM3RztnQkFDRCxpREFBaUQ7Z0JBQ2pELHNIQUFzSDtnQkFDdEgsc0VBQXNFO2dCQUN0RSxpQ0FBaUM7Z0JBQ2pDLG1IQUFtSDtnQkFDbkgsOEdBQThHO2dCQUM5RyxJQUFJLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7b0JBQ3ZILGtCQUFrQixDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsRUFBRSxLQUFLO3dCQUNwSCxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsRUFBRSxLQUFLO3dCQUM1RSxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsS0FBSyxJQUFJOzRCQUM1QyxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLOzRCQUN0RSxDQUFDLENBQUMsSUFBSSxDQUFDO2lCQUNWO2dCQUNELGtCQUFrQixDQUFDLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLEVBQUUsS0FBSyxDQUFDO2dCQUM5SCxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNySCxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUN0RTtTQUNGO0lBQ0gsQ0FBQztJQUVNLGNBQWM7UUFDbkIsT0FBTyxJQUFJLENBQUMsK0JBQStCO1lBQ3pDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxvQkFBb0I7WUFDL0MsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHVDQUF1QztnQkFDN0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssa0JBQWtCLENBQUMsYUFBYTtnQkFDdEQsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssa0JBQWtCLENBQUMsV0FBVyxDQUFDO0lBQzNELENBQUM7SUFFTSxzQkFBc0IsQ0FBQyxTQUFpQjtRQUM3QyxJQUFJLFNBQVMsRUFBRTtZQUNiLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdkQsSUFBSSxXQUFXLEVBQUU7Z0JBQ2YsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQ3BFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUNyQjtTQUNGO0lBQ0gsQ0FBQztJQUVNLDZCQUE2QixDQUFDLENBQU07UUFDekMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztJQUNuQyxDQUFDO0lBRU0sNkJBQTZCO1FBQ2xDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNqRixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDbkYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDMUUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixFQUFFLEtBQUssQ0FBQztRQUN2RCxPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSTtZQUN6QixPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU87WUFDMUIscUdBQXFHO1lBQ3JHLFlBQVksRUFBRSxjQUFjLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsS0FBSyxJQUFJO2dCQUMxRSxDQUFDLENBQUMsY0FBYyxDQUFDLEtBQUs7Z0JBQ3RCLENBQUMsQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsS0FBSyxJQUFJO29CQUMvRCxDQUFDLENBQUMsZUFBZTtvQkFDakIsQ0FBQyxDQUFDLElBQUk7WUFDVixlQUFlLEVBQUUsY0FBYyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEtBQUssSUFBSTtnQkFDL0UsQ0FBQyxDQUFDLGNBQWMsRUFBRSxRQUFRO2dCQUMxQixDQUFDLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEtBQUssSUFBSTtvQkFDL0QsQ0FBQyxDQUFDLGVBQWU7b0JBQ2pCLENBQUMsQ0FBQyxJQUFJO1lBQ1Isd0VBQXdFO1lBQ3hFLFVBQVUsRUFBRSxjQUFjO2dCQUN4QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUc7Z0JBQ3BCLENBQUMsQ0FBQyxJQUFJO1lBQ1IsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLFFBQVEsS0FBSyxJQUFJLENBQUMsaUJBQWlCO2dCQUM3RCxTQUFTLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsS0FBSyxJQUFJO2dCQUN6RCxDQUFDLENBQUMsU0FBUztnQkFDVCxDQUFDLENBQUMsSUFBSTtZQUNWLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxRQUFRLEtBQUssSUFBSSxDQUFDLGlCQUFpQjtnQkFDaEUsU0FBUyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEtBQUssSUFBSTtnQkFDekQsQ0FBQyxDQUFDLFNBQVM7Z0JBQ1gsQ0FBQyxDQUFDLElBQUk7WUFDUixXQUFXLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsS0FBSyxJQUFJO2dCQUN2RCxDQUFDLENBQUMsVUFBVSxFQUFFLFlBQVk7Z0JBQzFCLENBQUMsQ0FBQyxJQUFJO1lBQ1IsY0FBYyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEtBQUssSUFBSTtnQkFDMUQsQ0FBQyxDQUFDLFVBQVUsRUFBRSxZQUFZO2dCQUMxQixDQUFDLENBQUMsSUFBSTtZQUNSLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxZQUFZO1lBQzNDLGVBQWUsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtZQUN6QyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUk7Z0JBQ2xCLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDaEYsZUFBZSxFQUFFLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUN6RCxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7WUFDNUIsOEdBQThHO1lBQzlHLGtIQUFrSDtZQUNsSCxNQUFNLEVBQUUsSUFBSSxDQUFDLGlDQUFpQztnQkFDNUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxhQUFhO2dCQUN6QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsdUNBQXVDO29CQUM3QyxDQUFDLENBQUMsY0FBYyxDQUFDLE1BQU07b0JBQ3ZCLENBQUMsQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQztZQUNoRCxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSTtTQUNwRCxDQUFDO0lBQ2xCLENBQUM7SUFFTSxzQkFBc0I7UUFDM0IsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDOUIsbUhBQW1IO1FBQ25ILHFDQUFxQztRQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sRUFBRTtZQUN4QyxrREFBa0Q7WUFDbEQsSUFBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksQ0FBQztZQUN2QyxJQUFJLENBQUMsU0FBUyxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JELGlIQUFpSDtZQUNqSCw0RUFBNEU7WUFDNUUsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztTQUN0RDtJQUNILENBQUM7SUFFTSxXQUFXO1FBQ2hCLDhFQUE4RTtRQUM5RSxJQUFJLENBQUMsb0JBQW9CLENBQUMsb0JBQW9CLEdBQUcsU0FBUyxDQUFDO1FBQzNELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRUQsSUFBVyxvQkFBb0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLDJCQUEyQixDQUFDLEVBQUUsS0FBSztZQUM5RixDQUFDLENBQUMsa0JBQWtCLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQztJQUN0RixDQUFDO0lBRU0sMEJBQTBCLENBQUMsVUFBdUI7UUFDdkQsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSx5QkFBeUIsQ0FBQztJQUM3SCxDQUFDOztzR0E5aEJVLDJCQUEyQjs4RUFBM0IsMkJBQTJCO1FDbEJ4Qyw0RUFXTTtRQUNOLDRFQW1DTTtRQUNOLDRFQW1CTTs7UUFuRUEsbURBQThCO1FBWTlCLGVBQXNDO1FBQXRDLDJEQUFzQztRQW9DdEMsZUFBcUM7UUFBckMsMERBQXFDOzt1RkQ5QjlCLDJCQUEyQjtjQUx2QyxTQUFTOzJCQUNFLDJCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUnB4VHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAncnB4LXh1aS10cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENhc2VFZGl0RGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb21tb25zL2Nhc2UtZWRpdC1kYXRhL2Nhc2UtZWRpdC1kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FzZUZpZWxkLCBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi8uLi9kb21haW4nO1xuaW1wb3J0IHsgRmxhZ1R5cGUgfSBmcm9tICcuLi8uLi8uLi9kb21haW4vY2FzZS1mbGFnJztcbmltcG9ydCB7IEZpZWxkc1V0aWxzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZmllbGRzJztcbmltcG9ydCB7IENhc2VGbGFnU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2FzZS1lZGl0b3Ivc2VydmljZXMvY2FzZS1mbGFnLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWJzdHJhY3RGaWVsZFdyaXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vYmFzZS1maWVsZC9hYnN0cmFjdC1maWVsZC13cml0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FzZUZsYWdTdGF0ZSwgRmxhZ0RldGFpbCwgRmxhZ0RldGFpbERpc3BsYXlXaXRoRm9ybUdyb3VwUGF0aCwgRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aCB9IGZyb20gJy4vZG9tYWluJztcbmltcG9ydCB7IENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIsIENhc2VGbGFnRXJyb3JNZXNzYWdlLCBDYXNlRmxhZ0ZpZWxkU3RhdGUsIENhc2VGbGFnRm9ybUZpZWxkcywgQ2FzZUZsYWdTdGF0dXMgfSBmcm9tICcuL2VudW1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NkLXdyaXRlLWNhc2UtZmxhZy1maWVsZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi93cml0ZS1jYXNlLWZsYWctZmllbGQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi93cml0ZS1jYXNlLWZsYWctZmllbGQuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBXcml0ZUNhc2VGbGFnRmllbGRDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdEZpZWxkV3JpdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHB1YmxpYyBmaWVsZFN0YXRlOiBudW1iZXI7XG4gIHB1YmxpYyBjYXNlRmxhZ0ZpZWxkU3RhdGUgPSBDYXNlRmxhZ0ZpZWxkU3RhdGU7XG4gIHB1YmxpYyBlcnJvck1lc3NhZ2VzOiBFcnJvck1lc3NhZ2VbXSA9IFtdO1xuICBwdWJsaWMgZmxhZ3NEYXRhOiBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoW107XG4gIHB1YmxpYyBzZWxlY3RlZEZsYWc6IEZsYWdEZXRhaWxEaXNwbGF5V2l0aEZvcm1Hcm91cFBhdGg7XG4gIHB1YmxpYyBjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICBwdWJsaWMgZmxhZ0NvbW1lbnRzT3B0aW9uYWwgPSBmYWxzZTtcbiAgcHVibGljIGp1cmlzZGljdGlvbjogc3RyaW5nO1xuICBwdWJsaWMgY2FzZVR5cGVJZDogc3RyaW5nO1xuICBwdWJsaWMgaG1jdHNTZXJ2aWNlSWQ6IHN0cmluZztcbiAgcHVibGljIGlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJVcGRhdGU6IGJvb2xlYW47XG4gIHB1YmxpYyBpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWw6IGJvb2xlYW47XG4gIHB1YmxpYyBpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyMlBvaW50MUVuYWJsZWQ6IGJvb2xlYW47XG4gIHB1YmxpYyBjYXNlVGl0bGU6IHN0cmluZztcbiAgcHVibGljIGNhc2VUaXRsZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgZGlzcGxheUNvbnRleHRQYXJhbWV0ZXI6IHN0cmluZztcbiAgcHVibGljIGRldGVybWluZWRMb2NhdGlvbjogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aDtcbiAgcHJpdmF0ZSBhbGxDYXNlRmxhZ1N0YWdlc0NvbXBsZXRlZCA9IGZhbHNlO1xuICAvLyBDb2RlIGZvciBcIk90aGVyXCIgZmxhZyB0eXBlIGFzIGRlZmluZWQgaW4gUmVmZXJlbmNlIERhdGFcbiAgcHJpdmF0ZSByZWFkb25seSBvdGhlckZsYWdUeXBlQ29kZSA9ICdPVDAwMDEnO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlbGVjdGVkTWFuYWdlQ2FzZUxvY2F0aW9uID0gJ3NlbGVjdGVkTWFuYWdlQ2FzZUxvY2F0aW9uJztcbiAgcHVibGljIHJlYWRvbmx5IGNhc2VOYW1lTWlzc2luZyA9ICdDYXNlIG5hbWUgbWlzc2luZyc7XG5cbiAgcHVibGljIGdldCBmbGFnVHlwZSgpOiBGbGFnVHlwZSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwPy52YWx1ZS5mbGFnVHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRGbGFnc0xvY2F0aW9uKCk6IEZsYWdzV2l0aEZvcm1Hcm91cFBhdGggfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cD8udmFsdWUuc2VsZWN0ZWRMb2NhdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWRGbGFnc0xvY2F0aW9uKHNlbGVjdGVkTG9jYXRpb246IEZsYWdzV2l0aEZvcm1Hcm91cFBhdGggfCBudWxsKSB7XG4gICAgaWYgKHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXApIHtcbiAgICAgIHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAudmFsdWUuc2VsZWN0ZWRMb2NhdGlvbiA9IHNlbGVjdGVkTG9jYXRpb247XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXNlRWRpdERhdGFTZXJ2aWNlOiBDYXNlRWRpdERhdGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FzZUZsYWdTdGF0ZVNlcnZpY2U6IENhc2VGbGFnU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcnB4VHJhbnNsYXRpb25TZXJ2aWNlOiBScHhUcmFuc2xhdGlvblNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBJZiBpdCBpcyBzdGFydCBvZiB0aGUgam91cm5leSBvciBuYXZpZ2F0aW9uIGZyb20gY2hlY2sgeW91ciBhbnN3ZXJzIHBhZ2UgdGhlbiBmaWVsZFN0YXRlVG9OYXZpZ2F0ZSBwcm9wZXJ0eVxuICAgIC8vIGluIGNhc2UgZmxhZyBzdGF0ZSBzZXJ2aWNlIHdpbGwgY29udGFpbiB0aGUgZmllbGQgc3RhdGUgdG8gbmF2aWdhdGUgYmFzZWQgb24gY3JlYXRlIG9yIG1hbmFnZSBqb3VybmV5XG4gICAgdGhpcy5maWVsZFN0YXRlID0gdGhpcy5jYXNlRmxhZ1N0YXRlU2VydmljZS5maWVsZFN0YXRlVG9OYXZpZ2F0ZTtcbiAgICBpZiAodGhpcy5maWVsZFN0YXRlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgdGhpcy5maWVsZFN0YXRlID09PSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19MT0NBVElPTiB8fFxuICAgICAgICB0aGlzLmZpZWxkU3RhdGUgPT09IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX01BTkFHRV9DQVNFX0ZMQUdTKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcztcbiAgICAgIC8vIENsZWFyIHRoZSBmb3JtIGdyb3VwLCBmaWVsZCBzdGF0ZSB0byBuYXZpZ2F0ZSBhbmQgc2V0IHRoZSBwYWdlIGxvY2F0aW9uXG4gICAgICB0aGlzLmNhc2VGbGFnU3RhdGVTZXJ2aWNlLnJlc2V0Q2FjaGUoYC4uLyR7cGFyYW1zWydlaWQnXX0vJHtwYXJhbXNbJ3BhZ2UnXX1gKTtcbiAgICB9XG4gICAgLy8gUmVhc3NpZ24gdGhlIGZvcm0gZ3JvdXAgZnJvbSB0aGUgY2FzZSBmbGFnIHN0YXRlIHNlcnZpY2VcbiAgICB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwID0gdGhpcy5jYXNlRmxhZ1N0YXRlU2VydmljZS5mb3JtR3JvdXA7XG4gICAgLy8gQ2xlYXIgZm9ybSB2YWxpZGF0aW9uIGVycm9ycyBhcyBhIG5ldyBwYWdlIHdpbGwgYmUgcmVuZGVyZWQgYmFzZWQgb24gZmllbGQgc3RhdGVcbiAgICB0aGlzLmNhc2VFZGl0RGF0YVNlcnZpY2UuY2xlYXJGb3JtVmFsaWRhdGlvbkVycm9ycygpO1xuICAgIC8vIENoZWNrIGZvciBleGlzdGluZyBGbGFnTGF1bmNoZXIgY29udHJvbCBpbiBwYXJlbnQgYW5kIHJlbW92ZSBpdCAtIHRoaXMgaXMgdGhlIG9ubHkgd2F5IHRvIGVuc3VyZSBpdHMgaW52YWxpZGl0eVxuICAgIC8vIGlzIHNldCBjb3JyZWN0bHkgYXQgdGhlIHN0YXJ0LCB3aGVuIHRoZSBjb21wb25lbnQgaXMgcmVsb2FkZWQgYW5kIHRoZSBjb250cm9sIGlzIHJlLXJlZ2lzdGVyZWQuIE90aGVyd2lzZSwgdGhlXG4gICAgLy8gdmFsaWRhdG9yIHN0YXRlIGdldHMgY2FycmllZCBvdmVyXG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwICYmIHRoaXMuZm9ybUdyb3VwLmdldCh0aGlzLmNhc2VGaWVsZC5pZCkpIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnJlbW92ZUNvbnRyb2wodGhpcy5jYXNlRmllbGQuaWQpO1xuICAgIH1cbiAgICAvLyBGcm9tIHRoaXMgcG9pbnQsIHRoaXMuZm9ybUdyb3VwIHJlZmVycyB0byB0aGUgRm9ybUdyb3VwIGZvciB0aGUgRmxhZ0xhdW5jaGVyIGZpZWxkLCBub3QgdGhlIHBhcmVudCBGb3JtR3JvdXBcbiAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMucmVnaXN0ZXJDb250cm9sKG5ldyBGb3JtR3JvdXAoe30sIHtcbiAgICAgIHZhbGlkYXRvcnM6IChfOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSB8IG51bGwgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuYWxsQ2FzZUZsYWdTdGFnZXNDb21wbGV0ZWQpIHtcbiAgICAgICAgICAvLyBSZXR1cm4gYW4gZXJyb3IgdG8gbWFyayB0aGUgRm9ybUdyb3VwIGFzIGludmFsaWQgaWYgbm90IGFsbCBDYXNlIEZsYWcgc3RhZ2VzIGhhdmUgYmVlbiBjb21wbGV0ZWRcbiAgICAgICAgICByZXR1cm4geyBub3RBbGxDYXNlRmxhZ1N0YWdlc0NvbXBsZXRlZDogdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0pLCB0cnVlKSBhcyBGb3JtR3JvdXA7XG5cbiAgICAvLyBHZXQgdGhlIGNhc2UgdHlwZSBJRCBmcm9tIHRoZSBDYXNlVmlldyBvYmplY3QgaW4gdGhlIHNuYXBzaG90IGRhdGEgKHJlcXVpcmVkIGZvciByZXRyaWV2aW5nIHRoZSBhdmFpbGFibGUgZmxhZ1xuICAgIC8vIHR5cGVzIGZvciBhIGNhc2UpXG4gICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5jYXNlICYmIHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5jYXNlLmNhc2VfdHlwZSkge1xuICAgICAgdGhpcy5jYXNlVHlwZUlkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmNhc2UuY2FzZV90eXBlLmlkO1xuICAgICAgLy8gR2V0IHRoZSBqdXJpc2RpY3Rpb24gKHJlcXVpcmVkIGZvciByZXRyaWV2aW5nIHRoZSBhdmFpbGFibGUgZmxhZyB0eXBlcyBpZiB1bmFibGUgdG8gZGV0ZXJtaW5lIHVzaW5nIGNhc2UgdHlwZSBJRClcbiAgICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuY2FzZS5jYXNlX3R5cGUuanVyaXNkaWN0aW9uKSB7XG4gICAgICAgIHRoaXMuanVyaXNkaWN0aW9uID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmNhc2UuY2FzZV90eXBlLmp1cmlzZGljdGlvbi5pZDtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gRXh0cmFjdCBhbGwgZmxhZ3MtcmVsYXRlZCBkYXRhIGZyb20gdGhlIENhc2VFdmVudFRyaWdnZXIgb2JqZWN0IGluIHRoZSBzbmFwc2hvdCBkYXRhXG4gICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5ldmVudFRyaWdnZXIpIHtcbiAgICAgIC8vIEdldCB0aGUgSE1DVFNTZXJ2aWNlSWQgZnJvbSBzdXBwbGVtZW50YXJ5IGRhdGEsIGlmIGl0IGV4aXN0cyAocmVxdWlyZWQgZm9yIHJldHJpZXZpbmcgdGhlIGF2YWlsYWJsZSBmbGFnIHR5cGVzIGluXG4gICAgICAvLyB0aGUgZmlyc3QgaW5zdGFuY2UsIG9ubHkgZmFsbGluZyBiYWNrIG9uIGNhc2UgdHlwZSBJRCBvciBqdXJpc2RpY3Rpb24gaWYgaXQncyBub3QgcHJlc2VudClcbiAgICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuZXZlbnRUcmlnZ2VyLnN1cHBsZW1lbnRhcnlfZGF0YVxuICAgICAgICAmJiB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuZXZlbnRUcmlnZ2VyLnN1cHBsZW1lbnRhcnlfZGF0YS5ITUNUU1NlcnZpY2VJZCkge1xuICAgICAgICB0aGlzLmhtY3RzU2VydmljZUlkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmV2ZW50VHJpZ2dlci5zdXBwbGVtZW50YXJ5X2RhdGEuSE1DVFNTZXJ2aWNlSWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzKSB7XG4gICAgICAgIHRoaXMuZmxhZ3NEYXRhID0gKCh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzKSBhcyBDYXNlRmllbGRbXSlcbiAgICAgICAgICAucmVkdWNlKChmbGFncywgY2FzZUZpZWxkKSA9PiBGaWVsZHNVdGlscy5leHRyYWN0RmxhZ3NEYXRhRnJvbUNhc2VGaWVsZChmbGFncywgY2FzZUZpZWxkLCBjYXNlRmllbGQuaWQsIGNhc2VGaWVsZCksIFtdKTtcblxuICAgICAgICAvLyBTZXQgZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIgKHRvIGJlIHBhc3NlZCBhcyBhbiBpbnB1dCB0byBNYW5hZ2VDYXNlRmxhZ3NDb21wb25lbnQgZm9yIHNldHRpbmcgY29ycmVjdCB0aXRsZSlcbiAgICAgICAgdGhpcy5kaXNwbGF5Q29udGV4dFBhcmFtZXRlciA9XG4gICAgICAgICAgdGhpcy5zZXREaXNwbGF5Q29udGV4dFBhcmFtZXRlcih0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzIGFzIENhc2VGaWVsZFtdKTtcblxuICAgICAgICAvLyBTZXQgYm9vbGVhbiBpbmRpY2F0aW5nIHRoZSBkaXNwbGF5X2NvbnRleHRfcGFyYW1ldGVyIGlzIFwidXBkYXRlXCJcbiAgICAgICAgdGhpcy5pc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyVXBkYXRlID0gdGhpcy5zZXREaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZSh0aGlzLmRpc3BsYXlDb250ZXh0UGFyYW1ldGVyKTtcblxuICAgICAgICAvLyBTZXQgYm9vbGVhbiBpbmRpY2F0aW5nIHRoZSBkaXNwbGF5X2NvbnRleHRfcGFyYW1ldGVyIGlzIFwiZXh0ZXJuYWxcIlxuICAgICAgICB0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJFeHRlcm5hbCA9IHRoaXMuc2V0RGlzcGxheUNvbnRleHRQYXJhbWV0ZXJFeHRlcm5hbCh0aGlzLmRpc3BsYXlDb250ZXh0UGFyYW1ldGVyKTtcblxuICAgICAgICAvLyBTZXQgYm9vbGVhbiBpbmRpY2F0aW5nIHRoZSBkaXNwbGF5X2NvbnRleHRfcGFyYW1ldGVyIGlzIENhc2UgRmxhZ3MgdjIuMSBlbmFibGVkXG4gICAgICAgIHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlcjJQb2ludDFFbmFibGVkID0gdGhpcy5zZXREaXNwbGF5Q29udGV4dFBhcmFtZXRlcjJQb2ludDFFbmFibGVkKHRoaXMuZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIpO1xuXG4gICAgICAgIC8vIFNldCBzdGFydGluZyBmaWVsZCBzdGF0ZSBpZiBmaWVsZFN0YXRlIG5vdCB0aGUgcmlnaHQgdmFsdWVcbiAgICAgICAgaWYgKCF0aGlzLmZpZWxkU3RhdGUpIHtcbiAgICAgICAgICB0aGlzLmZpZWxkU3RhdGUgPSB0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJVcGRhdGUgPyBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19NQU5BR0VfQ0FTRV9GTEFHUyA6IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0xPQ0FUSU9OO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IGNhc2UgdGl0bGUsIHRvIGJlIHVzZWQgYnkgY2hpbGQgY29tcG9uZW50c1xuICAgICAgICB0aGlzLmNhc2VUaXRsZVN1YnNjcmlwdGlvbiA9IHRoaXMuY2FzZUVkaXREYXRhU2VydmljZS5jYXNlVGl0bGUkLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogdGl0bGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5jYXNlVGl0bGUgPSB0aXRsZT8ubGVuZ3RoID4gMCA/IHRpdGxlIDogdGhpcy5jYXNlTmFtZU1pc3Npbmc7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0RGlzcGxheUNvbnRleHRQYXJhbWV0ZXJVcGRhdGUoZGlzcGxheUNvbnRleHRQYXJhbWV0ZXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBkaXNwbGF5Q29udGV4dFBhcmFtZXRlciA9PT0gQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5VUERBVEUgfHxcbiAgICAgIGRpc3BsYXlDb250ZXh0UGFyYW1ldGVyID09PSBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLlVQREFURV9FWFRFUk5BTCB8fFxuICAgICAgZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIgPT09IENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIuVVBEQVRFXzJfUE9JTlRfMTtcbiAgfVxuXG4gIHB1YmxpYyBzZXREaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsKGRpc3BsYXlDb250ZXh0UGFyYW1ldGVyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIgPT09IENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIuQ1JFQVRFX0VYVEVSTkFMIHx8XG4gICAgICBkaXNwbGF5Q29udGV4dFBhcmFtZXRlciA9PT0gQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5VUERBVEVfRVhURVJOQUw7XG4gIH1cblxuICBwdWJsaWMgc2V0RGlzcGxheUNvbnRleHRQYXJhbWV0ZXIyUG9pbnQxRW5hYmxlZChkaXNwbGF5Q29udGV4dFBhcmFtZXRlcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGRpc3BsYXlDb250ZXh0UGFyYW1ldGVyID09PSBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLkNSRUFURV8yX1BPSU5UXzEgfHxcbiAgICAgIGRpc3BsYXlDb250ZXh0UGFyYW1ldGVyID09PSBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLlVQREFURV8yX1BPSU5UXzE7XG4gIH1cblxuICBwdWJsaWMgb25DYXNlRmxhZ1N0YXRlRW1pdHRlZChjYXNlRmxhZ1N0YXRlOiBDYXNlRmxhZ1N0YXRlKTogdm9pZCB7XG4gICAgdGhpcy5jYXNlRWRpdERhdGFTZXJ2aWNlLmNsZWFyRm9ybVZhbGlkYXRpb25FcnJvcnMoKTtcblxuICAgIHRoaXMuZXJyb3JNZXNzYWdlcyA9IGNhc2VGbGFnU3RhdGUuZXJyb3JNZXNzYWdlcztcbiAgICB0aGlzLnNlbGVjdGVkRmxhZyA9IGNhc2VGbGFnU3RhdGUuc2VsZWN0ZWRGbGFnO1xuXG4gICAgLy8gVmFsaWRhdGlvbiBzdWNjZWVkZWQ7IHByb2NlZWQgdG8gbmV4dCBzdGF0ZSBvciBmaW5hbCByZXZpZXcgc3RhZ2UgKFwiQ2hlY2sgeW91ciBhbnN3ZXJzXCIpXG4gICAgaWYgKHRoaXMuZXJyb3JNZXNzYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGlmICh0aGlzLmNhbk1vdmVUb0ZpbmFsUmV2aWV3U3RhZ2UoY2FzZUZsYWdTdGF0ZSkpIHtcbiAgICAgICAgdGhpcy5tb3ZlVG9GaW5hbFJldmlld1N0YWdlKCk7XG4gICAgICAgIC8vIERvbid0IG1vdmUgdG8gbmV4dCBzdGF0ZSBpZiBjdXJyZW50IHN0YXRlIGlzIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1RZUEUgYW5kIHRoZSBmbGFnIHR5cGUgaXMgYSBwYXJlbnQgLSB0aGlzXG4gICAgICAgIC8vIG1lYW5zIHRoZSB1c2VyIG5lZWRzIHRvIHNlbGVjdCBmcm9tIHRoZSBuZXh0IHNldCBvZiBmbGFnIHR5cGVzIGJlZm9yZSB0aGV5IGNhbiBtb3ZlIG9uXG4gICAgICB9IGVsc2UgaWYgKCFjYXNlRmxhZ1N0YXRlLmlzUGFyZW50RmxhZ1R5cGUpIHtcbiAgICAgICAgLy8gUHJvY2VlZCB0byBuZXh0IHN0YXRlXG4gICAgICAgIHRoaXMucHJvY2VlZFRvTmV4dFN0YXRlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNhbk1vdmVUb0ZpbmFsUmV2aWV3U3RhZ2UoY2FzZUZsYWdTdGF0ZTogQ2FzZUZsYWdTdGF0ZSk6IGJvb2xlYW4ge1xuICAgIC8vIElmIHRoZSBqb3VybmV5IGlzIHJlcXVlc3Qgc3VwcG9ydCBvciBtYW5hZ2Ugc3VwcG9ydFxuICAgIC8vIGFuZCB0aGUgY3VycmVudCBzdGF0ZSBpcyBlaXRoZXIgQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfQ09NTUVOVFMgb3IgQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVVBEQVRFXG4gICAgLy8gdGhlbiBtb3ZlIHRvIGZpbmFsIHJldmlldyBzdGFnZVxuICAgIGlmICh0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJFeHRlcm5hbCkge1xuICAgICAgcmV0dXJuIGNhc2VGbGFnU3RhdGUuY3VycmVudENhc2VGbGFnRmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfQ09NTUVOVFMgfHxcbiAgICAgICAgY2FzZUZsYWdTdGF0ZS5jdXJyZW50Q2FzZUZsYWdGaWVsZFN0YXRlID09PSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19VUERBVEU7XG4gICAgfVxuICAgIC8vIElmIHRoZSBjdXJyZW50IHN0YXRlIGlzIG9uZSBvZjpcbiAgICAvLyAqIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1NUQVRVUyBBTkQgQ2FzZSBGbGFncyB2Mi4xIGlzIGVuYWJsZWRcbiAgICAvLyAqIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0NPTU1FTlRTIEFORCBDYXNlIEZsYWdzIHYyLjEgaXMgbm90IGVuYWJsZWRcbiAgICAvLyAqIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1VQREFURSBhbmQgV2Vsc2ggdHJhbnNsYXRpb24gY2hlY2tib3ggaXMgbm90IHNlbGVjdGVkXG4gICAgLy8gKiBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19VUERBVEVfV0VMU0hfVFJBTlNMQVRJT05cbiAgICAvLyB0aGVuIG1vdmUgdG8gZmluYWwgcmV2aWV3IHN0YWdlXG4gICAgcmV0dXJuIChjYXNlRmxhZ1N0YXRlLmN1cnJlbnRDYXNlRmxhZ0ZpZWxkU3RhdGUgPT09XG4gICAgICBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19TVEFUVVMgJiYgdGhpcy5pc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyMlBvaW50MUVuYWJsZWQpIHx8XG4gICAgICAoY2FzZUZsYWdTdGF0ZS5jdXJyZW50Q2FzZUZsYWdGaWVsZFN0YXRlID09PVxuICAgICAgICBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19DT01NRU5UUyAmJiAhdGhpcy5pc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyMlBvaW50MUVuYWJsZWQpIHx8XG4gICAgICAoY2FzZUZsYWdTdGF0ZS5jdXJyZW50Q2FzZUZsYWdGaWVsZFN0YXRlID09PSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19VUERBVEUgJiZcbiAgICAgICAgIXRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5JU19XRUxTSF9UUkFOU0xBVElPTl9ORUVERUQpPy52YWx1ZSkgfHxcbiAgICAgIGNhc2VGbGFnU3RhdGUuY3VycmVudENhc2VGbGFnRmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVVBEQVRFX1dFTFNIX1RSQU5TTEFUSU9OO1xuICB9XG5cbiAgcHVibGljIHByb2NlZWRUb05leHRTdGF0ZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNBdEZpbmFsU3RhdGUoKSkge1xuICAgICAgLy8gU2tpcCB0aGUgXCJsYW5ndWFnZSBpbnRlcnByZXRlclwiIHN0YXRlIGlmIGN1cnJlbnQgc3RhdGUgaXMgQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVFlQRSBhbmQgdGhlIGZsYWcgdHlwZSBkb2Vzbid0XG4gICAgICAvLyBoYXZlIGEgXCJsaXN0IG9mIHZhbHVlc1wiIC0gY3VycmVudGx5LCB0aGlzIGlzIHByZXNlbnQgb25seSBmb3IgdGhvc2UgZmxhZyB0eXBlcyB0aGF0IHJlcXVpcmUgbGFuZ3VhZ2UgaW50ZXJwcmV0ZXJcbiAgICAgIC8vIHNlbGVjdGlvblxuICAgICAgaWYgKHRoaXMuZmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVFlQRSAmJiAhdGhpcy5mbGFnVHlwZT8ubGlzdE9mVmFsdWVzKSB7XG4gICAgICAgIHRoaXMuZmllbGRTdGF0ZSA9IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0NPTU1FTlRTO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5maWVsZFN0YXRlKys7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldEZsYWdzQ2FzZUZpZWxkVmFsdWUoKTogdm9pZCB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBzd2l0Y2gtZGVmYXVsdFxuICAgIHN3aXRjaCAodGhpcy5maWVsZFN0YXRlKSB7XG4gICAgICBjYXNlIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1NUQVRVUzpcbiAgICAgICAgdGhpcy5hZGRGbGFnVG9Db2xsZWN0aW9uKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19DT01NRU5UUzpcbiAgICAgICAgaWYgKHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsIHx8ICF0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIyUG9pbnQxRW5hYmxlZCkge1xuICAgICAgICAgIHRoaXMuYWRkRmxhZ1RvQ29sbGVjdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0aGlzLm1hbmFnZUZsYWdGaW5hbFN0YXRlOlxuICAgICAgICB0aGlzLnVwZGF0ZUZsYWdJbkNvbGxlY3Rpb24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFkZEZsYWdUb0NvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgLy8gRW5zdXJlIG5vIG1vcmUgdGhhbiBvbmUgbmV3IGZsYWcgaXMgYmVpbmcgYWRkZWQgYXQgYSB0aW1lLCBieSBpdGVyYXRpbmcgdGhyb3VnaCBlYWNoIEZsYWdzIGNhc2UgZmllbGQgYW5kIHJlbW92aW5nXG4gICAgLy8gYW55IHByZXZpb3VzIGVudHJ5IGZyb20gdGhlIGRldGFpbHMgYXJyYXkgd2hlcmUgdGhhdCBlbnRyeSBoYXMgbm8gaWQgKGhlbmNlIGl0IGlzIG5ldyAtIGFuZCB0aGVyZSBzaG91bGQgYmUgb25seVxuICAgIC8vIG9uZSBzdWNoIGVudHJ5KS4gKFRoaXMgc2NlbmFyaW8gb2NjdXJzIGlmIHRoZSB1c2VyIHJlcGVhdHMgdGhlIENhc2UgRmxhZyBjcmVhdGlvbiBqb3VybmV5IGJ5IHVzaW5nIHRoZSBcIkNoYW5nZVwiXG4gICAgLy8gbGluayBhbmQgc2VsZWN0cyBlaXRoZXIgdGhlIHNhbWUgZmxhZyBsb2NhdGlvbiBhcyBiZWZvcmUgb3IgYSBkaWZmZXJlbnQgb25lLilcbiAgICB0aGlzLmZsYWdzRGF0YS5mb3JFYWNoKGluc3RhbmNlID0+IHtcbiAgICAgIC8vIFVzZSB0aGUgcGF0aFRvRmxhZ3NGb3JtR3JvdXAgcHJvcGVydHkgZm9yIGVhY2ggRmxhZ3MgY2FzZSBmaWVsZCB0byBkcmlsbCBkb3duIHRvIHRoZSBjb3JyZWN0IHBhcnQgb2YgdGhlXG4gICAgICAvLyBDYXNlRmllbGQgdmFsdWUgdG8gcmVtb3ZlIHRoZSBuZXcgdmFsdWUgZnJvbVxuICAgICAgbGV0IHZhbHVlID0gaW5zdGFuY2UuY2FzZUZpZWxkPy52YWx1ZTtcbiAgICAgIGNvbnN0IHBhdGhUb1ZhbHVlID0gaW5zdGFuY2UucGF0aFRvRmxhZ3NGb3JtR3JvdXA7XG4gICAgICAvLyBSb290LWxldmVsIEZsYWdzIENhc2VGaWVsZHMgZG9uJ3QgaGF2ZSBhIGRvdC1kZWxpbWl0ZWQgcGF0aCAtIGp1c3QgdGhlIENhc2VGaWVsZCBJRCBpdHNlbGYgLSBzbyBkb24ndCBkcmlsbCBkb3duXG4gICAgICBpZiAocGF0aFRvVmFsdWUuaW5kZXhPZignLicpID4gLTEpIHtcbiAgICAgICAgcGF0aFRvVmFsdWUuc2xpY2UocGF0aFRvVmFsdWUuaW5kZXhPZignLicpICsgMSkuc3BsaXQoJy4nKS5mb3JFYWNoKHBhcnQgPT4gdmFsdWUgPSB2YWx1ZVtwYXJ0XSk7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWU/LmRldGFpbHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgaW5kZXhPZk5ld0ZsYWdEZXRhaWwgPSB2YWx1ZS5kZXRhaWxzLmZpbmRJbmRleChlbGVtZW50ID0+ICFlbGVtZW50Lmhhc093blByb3BlcnR5KCdpZCcpKTtcbiAgICAgICAgaWYgKGluZGV4T2ZOZXdGbGFnRGV0YWlsID4gLTEpIHtcbiAgICAgICAgICB2YWx1ZS5kZXRhaWxzLnNwbGljZShpbmRleE9mTmV3RmxhZ0RldGFpbCwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGZvcm1WYWx1ZXMgPSB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwPy52YWx1ZTtcbiAgICAvLyBEZXRlcm1pbmUgdGhlIGNvcnJlY3QgbG9jYXRpb24gLSBpbnRlcm5hbCBvciBleHRlcm5hbCAtIGZvciB0aGUgbmV3IGZsYWcuIElmIHJldHVybmVkIGFzIHVuZGVmaW5lZCwgdGhpc1xuICAgIC8vIGluZGljYXRlcyBhIGNvbmZpZ3VyYXRpb24gZXJyb3Igd2l0aCB0aGUgZXh0ZXJuYWwgYEZsYWdzYCBvYmplY3QgaW5zdGFuY2VcbiAgICB0aGlzLmRldGVybWluZWRMb2NhdGlvbiA9XG4gICAgICB0aGlzLmRldGVybWluZUxvY2F0aW9uRm9yRmxhZyghdGhpcy5pc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWwsIHRoaXMuc2VsZWN0ZWRGbGFnc0xvY2F0aW9uLCBmb3JtVmFsdWVzKTtcbiAgICAvLyBEbyBub3QgbXV0YXRlIHRoaXMuc2VsZWN0ZWRGbGFnc0xvY2F0aW9uOyBpZiB0aGlzLnNlbGVjdGVkRmxhZ3NMb2NhdGlvbiBiZWNvbWVzIHVuZGVmaW5lZCxcbiAgICAvLyBkZXRlcm1pbmVMb2NhdGlvbkZvckZsYWcoKSB3aWxsIG5vIGxvbmdlciBkbyBhbnl0aGluZyB3aGVuIGNhbGxlZCB3aXRoIGl0IC0gYW5kIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdlIHdpbGxcbiAgICAvLyBub3QgYmUgcmVkaXNwbGF5ZWQgaWYgdGhlIHVzZXIgY2xpY2tzIFwiTmV4dFwiIGFnYWluIG9uIHRoZSBcIkFkZCBjb21tZW50c1wiIHBhZ2UsIGFmdGVyIHRoZSBlcnJvciBpcyBmaXJzdCBzaG93blxuXG4gICAgaWYgKHRoaXMuZGV0ZXJtaW5lZExvY2F0aW9uKSB7XG4gICAgICBjb25zdCBwYXRoID0gdGhpcy5kZXRlcm1pbmVkTG9jYXRpb24ucGF0aFRvRmxhZ3NGb3JtR3JvdXA7XG4gICAgICBjb25zdCBmbGFnRGF0YVJlZiA9IHRoaXMuZmxhZ3NEYXRhLmZpbmQoaXRlbSA9PiBpdGVtLnBhdGhUb0ZsYWdzRm9ybUdyb3VwID09PSBwYXRoKTtcbiAgICAgIGxldCBmbGFnc0Nhc2VGaWVsZFZhbHVlID0gZmxhZ0RhdGFSZWYuY2FzZUZpZWxkPy52YWx1ZTtcbiAgICAgIC8vIFVzZSB0aGUgcGF0aFRvRmxhZ3NGb3JtR3JvdXAgcHJvcGVydHkgZnJvbSB0aGUgc2VsZWN0ZWQgZmxhZyBsb2NhdGlvbiB0byBkcmlsbCBkb3duIHRvIHRoZSBjb3JyZWN0IHBhcnQgb2YgdGhlXG4gICAgICAvLyBDYXNlRmllbGQgdmFsdWUgdG8gYXBwbHkgY2hhbmdlcyB0b1xuICAgICAgLy8gUm9vdC1sZXZlbCBGbGFncyBDYXNlRmllbGRzIGRvbid0IGhhdmUgYSBkb3QtZGVsaW1pdGVkIHBhdGggLSBqdXN0IHRoZSBDYXNlRmllbGQgSUQgaXRzZWxmIC0gc28gZG9uJ3QgZHJpbGwgZG93blxuICAgICAgaWYgKHBhdGguaW5kZXhPZignLicpID4gLTEpIHtcbiAgICAgICAgcGF0aC5zbGljZShwYXRoLmluZGV4T2YoJy4nKSArIDEpLnNwbGl0KCcuJykuZm9yRWFjaChwYXJ0ID0+IGZsYWdzQ2FzZUZpZWxkVmFsdWUgPSBmbGFnc0Nhc2VGaWVsZFZhbHVlW3BhcnRdKTtcbiAgICAgIH1cbiAgICAgIC8vIElmIHRoZSBDYXNlRmllbGQgZm9yIHRoZSBzZWxlY3RlZCBmbGFncyBsb2NhdGlvbiBoYXMgbm8gdmFsdWUsIHNldCBpdCB0byBhbiBlbXB0eSBvYmplY3Qgc28gaXQgY2FuIGJlIHBvcHVsYXRlZFxuICAgICAgLy8gd2l0aCBmbGFnIGRldGFpbHNcbiAgICAgIGlmICghZmxhZ3NDYXNlRmllbGRWYWx1ZSkge1xuICAgICAgICBmbGFnRGF0YVJlZi5jYXNlRmllbGQudmFsdWUgPSB7fTtcbiAgICAgICAgZmxhZ3NDYXNlRmllbGRWYWx1ZSA9IGZsYWdEYXRhUmVmLmNhc2VGaWVsZC52YWx1ZTtcbiAgICAgIH1cbiAgICAgIC8vIENyZWF0ZSBhIGRldGFpbHMgYXJyYXkgaWYgb25lIGRvZXMgbm90IGV4aXN0XG4gICAgICBpZiAoIWZsYWdzQ2FzZUZpZWxkVmFsdWUuaGFzT3duUHJvcGVydHkoJ2RldGFpbHMnKSkge1xuICAgICAgICBmbGFnc0Nhc2VGaWVsZFZhbHVlLmRldGFpbHMgPSBbXTtcbiAgICAgIH1cbiAgICAgIC8vIFBvcHVsYXRlIG5ldyBGbGFnRGV0YWlsIGluc3RhbmNlIGFuZCBhZGQgdG8gdGhlIEZsYWdzIGRhdGEgd2l0aGluIHRoZSBDYXNlRmllbGQgaW5zdGFuY2Ugb2YgdGhlIHNlbGVjdGVkIGZsYWdcbiAgICAgIC8vIGxvY2F0aW9uXG4gICAgICBmbGFnc0Nhc2VGaWVsZFZhbHVlLmRldGFpbHMucHVzaCh7dmFsdWU6IHRoaXMucG9wdWxhdGVOZXdGbGFnRGV0YWlsSW5zdGFuY2UoKX0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHRoZSBjb3JyZWN0IGxvY2F0aW9uIChpLmUuIGVpdGhlciB0aGUgaW50ZXJuYWwgb3IgZXh0ZXJuYWwgaW5zdGFuY2Ugb2YgYSBgRmxhZ3NgIG9iamVjdCkgZm9yIGEgbmV3IGZsYWcsXG4gICAqIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nOlxuICAgKlxuICAgKiAqIFdoZXRoZXIgdGhlIHVzZXIgaXMgaW50ZXJuYWwgb3IgZXh0ZXJuYWwgKG5vIGVmZmVjdCBmb3IgZXh0ZXJuYWwgdXNlcnMgYmVjYXVzZSB0aGV5IGNhbiBhY2Nlc3Mgb25seSB0aGUgZXh0ZXJuYWxcbiAgICogaW5zdGFuY2UpXG4gICAqICogVGhlIGV4aXN0ZW5jZSBvZiB0d28gYEZsYWdzYCBvYmplY3RzIC0gb25lIGludGVybmFsLCBvbmUgZXh0ZXJuYWwgLSBsaW5rZWQgYnkgdGhlIHNhbWUgYGdyb3VwSWRgO1xuICAgKiAqIEZvciBmbGFncyBvZiB0eXBlIFwiT3RoZXJcIiwgd2hldGhlciBcIm9ubHkgdmlzaWJsZSB0byBITUNUUyBzdGFmZlwiIGhhcyBiZWVuIHNlbGVjdGVkIG9yIG5vdCAoXCJPdGhlclwiIGRlZmF1bHRzIHRvXG4gICAqIGV4dGVybmFsbHkgdmlzaWJsZSk7XG4gICAqICogRm9yIGFsbCBvdGhlciBmbGFnIHR5cGVzLCB0aGUgdmFsdWUgb2YgdGhlIGBleHRlcm5hbGx5QXZhaWxhYmxlYCBhdHRyaWJ1dGUuXG4gICAqXG4gICAqIElmIHRoZSB1c2VyIGlzIGludGVybmFsIHRoZW4gdGhlIG5ldyBmbGFnIHNob3VsZCBiZSBhc3NpZ25lZCB0byB0aGUgZXh0ZXJuYWwgYEZsYWdzYCBpbnN0YW5jZSBpZjpcbiAgICogKiBTdWNoIGFuIGluc3RhbmNlIGV4aXN0cywgQU5EXG4gICAqICogVGhlIGZsYWcgdHlwZSBpcyBcIk90aGVyXCIgYW5kIFwib25seSB2aXNpYmxlIHRvIEhNQ1RTIHN0YWZmXCIgd2FzIG5vdCBzZWxlY3RlZCwgT1JcbiAgICogKiBUaGUgZmxhZyB0eXBlIGlzIG5vdCBcIk90aGVyXCIgYW5kIGBleHRlcm5hbGx5QXZhaWxhYmxlYCBpcyBgdHJ1ZWAuXG4gICAqXG4gICAqIEBwYXJhbSBpc0ludGVybmFsVXNlciBXaGV0aGVyIHRoZSBjdXJyZW50IHVzZXIgaXMgaW50ZXJuYWwgb3Igbm90XG4gICAqIEBwYXJhbSBzZWxlY3RlZEZsYWdzTG9jYXRpb24gVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBsb2NhdGlvbiBmb3IgdGhlIG5ldyBmbGFnXG4gICAqIEBwYXJhbSBmb3JtVmFsdWVzIEFsbCB0aGUgdmFsdWVzIGZyb20gdGhlIGBjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cGBcbiAgICogQHJldHVybnMgVGhlIGNvcnJlY3RseSBkZXRlcm1pbmVkIGxvY2F0aW9uOiBlaXRoZXIgdGhlIGludGVybmFsIG9yIGV4dGVybmFsIGxvY2F0aW9uIChpZiBvbmUgZXhpc3RzKSB3aGVyZSBhIGdyb3VwSWRcbiAgICogaXMgcHJlc2VudDsgdGhlIG9yaWdpbmFsIGxvY2F0aW9uIG90aGVyd2lzZS4gKipOb3RlOioqIElmIHRoZSBleHRlcm5hbCBsb2NhdGlvbiBpcyByZXR1cm5lZCBhcyB1bmRlZmluZWQsIHRoaXNcbiAgICogaW5kaWNhdGVzIGEgY29uZmlndXJhdGlvbiBlcnJvclxuICAgKi9cbiAgcHVibGljIGRldGVybWluZUxvY2F0aW9uRm9yRmxhZyhpc0ludGVybmFsVXNlcjogYm9vbGVhbiwgc2VsZWN0ZWRGbGFnc0xvY2F0aW9uOiBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoLFxuICAgIGZvcm1WYWx1ZXM6IGFueSk6IEZsYWdzV2l0aEZvcm1Hcm91cFBhdGgge1xuICAgICAgaWYgKGlzSW50ZXJuYWxVc2VyICYmIHNlbGVjdGVkRmxhZ3NMb2NhdGlvbj8uZmxhZ3M/Lmdyb3VwSWQpIHtcbiAgICAgICAgaWYgKChmb3JtVmFsdWVzPy5mbGFnVHlwZT8uZmxhZ0NvZGUgPT09IHRoaXMub3RoZXJGbGFnVHlwZUNvZGUgJiYgIWZvcm1WYWx1ZXM/LmZsYWdJc1Zpc2libGVJbnRlcm5hbGx5T25seSkgfHxcbiAgICAgICAgICAoZm9ybVZhbHVlcz8uZmxhZ1R5cGU/LmZsYWdDb2RlICE9PSB0aGlzLm90aGVyRmxhZ1R5cGVDb2RlICYmIGZvcm1WYWx1ZXM/LmZsYWdUeXBlPy5leHRlcm5hbGx5QXZhaWxhYmxlKSkge1xuICAgICAgICAgICAgLy8gSWYgbmVjZXNzYXJ5LCBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIGZsYWdzIG9iamVjdCB3aXRoIHRoZSBzYW1lIGdyb3VwSWQgYW5kIGV4dGVybmFsIHZpc2liaWxpdHkgKHNob3VsZCBiZVxuICAgICAgICAgICAgLy8gb25seSBvbmUgdW5sZXNzIG1pc2NvbmZpZ3VyZWQpXG4gICAgICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHNlbGVjdGVkRmxhZ3NMb2NhdGlvbi5mbGFncy52aXNpYmlsaXR5Py50b0xvd2VyQ2FzZSgpID09PSAnZXh0ZXJuYWwnXG4gICAgICAgICAgICAgID8gc2VsZWN0ZWRGbGFnc0xvY2F0aW9uXG4gICAgICAgICAgICAgIDogdGhpcy5mbGFnc0RhdGEuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChmKSA9PiBmLmZsYWdzPy5ncm91cElkID09PSBzZWxlY3RlZEZsYWdzTG9jYXRpb24uZmxhZ3MuZ3JvdXBJZCAmJlxuICAgICAgICAgICAgICAgIGYuZmxhZ3M/LnZpc2liaWxpdHk/LnRvTG93ZXJDYXNlKCkgPT09ICdleHRlcm5hbCcpPy5bMF07XG4gICAgICAgICAgICAvLyBJZiBsb2NhdGlvbiBpcyBub3QgdHJ1dGh5LCBzZXQgYW4gZXJyb3IgbWVzc2FnZSBhbmQgbWFrZSBjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cCBpbnZhbGlkIHRvIHByZXZlbnRcbiAgICAgICAgICAgIC8vIG5hdmlnYXRpb24gdG8gdGhlIHN1bW1hcnkgcGFnZSAoYnkgbm90IHRyaWdnZXJpbmcgdGhlIHN1Ym1pdCBldmVudClcbiAgICAgICAgICAgIGlmICghbG9jYXRpb24pIHtcbiAgICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2VzLnB1c2goe1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogQ2FzZUZsYWdFcnJvck1lc3NhZ2UuTk9fRVhURVJOQUxfRkxBR1NfQ09MTEVDVElPTlxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5zZXRFcnJvcnMoe1xuICAgICAgICAgICAgICAgIG5vRXh0ZXJuYWxDb2xsZWN0aW9uOiB0cnVlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIG5lY2Vzc2FyeSwgZmluZCB0aGUgY29ycmVzcG9uZGluZyBmbGFncyBvYmplY3Qgd2l0aCB0aGUgc2FtZSBncm91cElkIGFuZCBpbnRlcm5hbCB2aXNpYmlsaXR5IChzaG91bGQgYmVcbiAgICAgICAgICAvLyBvbmx5IG9uZSB1bmxlc3MgbWlzY29uZmlndXJlZCk7IGFzc3VtZWQgdG8gYmUgaW50ZXJuYWwgaWYgdmlzaWJpbGl0eSBhdHRyaWJ1dGUgaXMgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHNlbGVjdGVkRmxhZ3NMb2NhdGlvbi5mbGFncy52aXNpYmlsaXR5Py50b0xvd2VyQ2FzZSgpICE9PSAnZXh0ZXJuYWwnXG4gICAgICAgICAgICA/IHNlbGVjdGVkRmxhZ3NMb2NhdGlvblxuICAgICAgICAgICAgOiB0aGlzLmZsYWdzRGF0YS5maWx0ZXIoXG4gICAgICAgICAgICAgIChmKSA9PiBmLmZsYWdzPy5ncm91cElkID09PSBzZWxlY3RlZEZsYWdzTG9jYXRpb24uZmxhZ3MuZ3JvdXBJZCAmJlxuICAgICAgICAgICAgICBmLmZsYWdzPy52aXNpYmlsaXR5Py50b0xvd2VyQ2FzZSgpICE9PSAnZXh0ZXJuYWwnKT8uWzBdO1xuICAgICAgICAgIC8vIElmIGxvY2F0aW9uIGlzIG5vdCB0cnV0aHksIHNldCBhbiBlcnJvciBtZXNzYWdlIGFuZCBtYWtlIGNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwIGludmFsaWQgdG8gcHJldmVudFxuICAgICAgICAgIC8vIG5hdmlnYXRpb24gdG8gdGhlIHN1bW1hcnkgcGFnZSAoYnkgbm90IHRyaWdnZXJpbmcgdGhlIHN1Ym1pdCBldmVudClcbiAgICAgICAgICBpZiAoIWxvY2F0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZXMucHVzaCh7XG4gICAgICAgICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IENhc2VGbGFnRXJyb3JNZXNzYWdlLk5PX0lOVEVSTkFMX0ZMQUdTX0NPTExFQ1RJT05cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5zZXRFcnJvcnMoe1xuICAgICAgICAgICAgICBub0ludGVybmFsQ29sbGVjdGlvbjogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBsb2NhdGlvbjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHNlbGVjdGVkRmxhZ3NMb2NhdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVGbGFnSW5Db2xsZWN0aW9uKCk6IHZvaWQge1xuICAgIC8vIEVuc3VyZSBubyBtb3JlIHRoYW4gb25lIGZsYWcgaXMgYmVpbmcgdXBkYXRlZCBhdCBhIHRpbWUsIGJ5IGl0ZXJhdGluZyB0aHJvdWdoIGVhY2ggRmxhZ3MgY2FzZSBmaWVsZCBhbmQgcmVzZXR0aW5nXG4gICAgLy8gdGhlIGRlc2NyaXB0aW9uLCBjb21tZW50cywgc3RhdHVzLCBhbmQgZGF0ZS90aW1lIG1vZGlmaWVkIChpZiBwcmVzZW50KSBmb3IgZWFjaCBlbnRyeSBpbiB0aGUgZGV0YWlscyBhcnJheSwgd2l0aFxuICAgIC8vIG9yaWdpbmFsIHZhbHVlcyBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIGZvcm1hdHRlZF92YWx1ZSBwcm9wZXJ0eS4gKFRoaXMgc2NlbmFyaW8gb2NjdXJzIGlmIHRoZSB1c2VyIHJlcGVhdHMgdGhlXG4gICAgLy8gTWFuYWdlIENhc2UgRmxhZyBqb3VybmV5IGJ5IHVzaW5nIHRoZSBcIkNoYW5nZVwiIGxpbmsgYW5kIHNlbGVjdHMgYSBkaWZmZXJlbnQgZmxhZyB0byB1cGRhdGUuKVxuICAgIHRoaXMuZmxhZ3NEYXRhLmZvckVhY2goaW5zdGFuY2UgPT4ge1xuICAgICAgLy8gVXNlIHRoZSBwYXRoVG9GbGFnc0Zvcm1Hcm91cCBwcm9wZXJ0eSBmb3IgZWFjaCBGbGFncyBjYXNlIGZpZWxkIHRvIGRyaWxsIGRvd24gdG8gdGhlIGNvcnJlY3QgcGFydCBvZiB0aGVcbiAgICAgIC8vIENhc2VGaWVsZCB2YWx1ZSBmb3Igd2hpY2ggdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgdmFsdWVzXG4gICAgICBsZXQgdmFsdWUgPSBpbnN0YW5jZS5jYXNlRmllbGQ/LnZhbHVlO1xuICAgICAgbGV0IGZvcm1hdHRlZFZhbHVlID0gaW5zdGFuY2UuY2FzZUZpZWxkPy5mb3JtYXR0ZWRfdmFsdWU7XG4gICAgICBjb25zdCBwYXRoVG9WYWx1ZSA9IGluc3RhbmNlLnBhdGhUb0ZsYWdzRm9ybUdyb3VwO1xuICAgICAgLy8gUm9vdC1sZXZlbCBGbGFncyBDYXNlRmllbGRzIGRvbid0IGhhdmUgYSBkb3QtZGVsaW1pdGVkIHBhdGggLSBqdXN0IHRoZSBDYXNlRmllbGQgSUQgaXRzZWxmIC0gc28gZG9uJ3QgZHJpbGwgZG93blxuICAgICAgaWYgKHBhdGhUb1ZhbHVlLmluZGV4T2YoJy4nKSA+IC0xKSB7XG4gICAgICAgIHBhdGhUb1ZhbHVlLnNsaWNlKHBhdGhUb1ZhbHVlLmluZGV4T2YoJy4nKSArIDEpLnNwbGl0KCcuJykuZm9yRWFjaChwYXJ0ID0+IHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuICAgICAgICAgIGlmIChmb3JtYXR0ZWRWYWx1ZSAmJiBGaWVsZHNVdGlscy5pc05vbkVtcHR5T2JqZWN0KGZvcm1hdHRlZFZhbHVlKSkge1xuICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWUgPSBmb3JtYXR0ZWRWYWx1ZVtwYXJ0XTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlPy5kZXRhaWxzPy5sZW5ndGggPiAwICYmIGZvcm1hdHRlZFZhbHVlICYmIEZpZWxkc1V0aWxzLmlzTm9uRW1wdHlPYmplY3QoZm9ybWF0dGVkVmFsdWUpKSB7XG4gICAgICAgIHZhbHVlLmRldGFpbHMuZm9yRWFjaChmbGFnRGV0YWlsID0+IHtcbiAgICAgICAgICBjb25zdCBvcmlnaW5hbEZsYWdEZXRhaWwgPSBmb3JtYXR0ZWRWYWx1ZS5kZXRhaWxzPy5maW5kKGRldGFpbCA9PiBkZXRhaWwuaWQgPT09IGZsYWdEZXRhaWwuaWQpO1xuICAgICAgICAgIGlmIChvcmlnaW5hbEZsYWdEZXRhaWwpIHtcbiAgICAgICAgICAgIGZsYWdEZXRhaWwudmFsdWUub3RoZXJEZXNjcmlwdGlvbiA9IG9yaWdpbmFsRmxhZ0RldGFpbC52YWx1ZT8ub3RoZXJEZXNjcmlwdGlvbiB8fCBudWxsO1xuICAgICAgICAgICAgZmxhZ0RldGFpbC52YWx1ZS5vdGhlckRlc2NyaXB0aW9uX2N5ID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlPy5vdGhlckRlc2NyaXB0aW9uX2N5IHx8IG51bGw7XG4gICAgICAgICAgICBmbGFnRGV0YWlsLnZhbHVlLmZsYWdDb21tZW50ID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlPy5mbGFnQ29tbWVudCB8fCBudWxsO1xuICAgICAgICAgICAgZmxhZ0RldGFpbC52YWx1ZS5mbGFnQ29tbWVudF9jeSA9IG9yaWdpbmFsRmxhZ0RldGFpbC52YWx1ZT8uZmxhZ0NvbW1lbnRfY3kgfHwgbnVsbDtcbiAgICAgICAgICAgIGZsYWdEZXRhaWwudmFsdWUuZmxhZ1VwZGF0ZUNvbW1lbnQgPSBvcmlnaW5hbEZsYWdEZXRhaWwudmFsdWU/LmZsYWdVcGRhdGVDb21tZW50IHx8IG51bGw7XG4gICAgICAgICAgICBmbGFnRGV0YWlsLnZhbHVlLnN0YXR1cyA9IG9yaWdpbmFsRmxhZ0RldGFpbC52YWx1ZT8uc3RhdHVzO1xuICAgICAgICAgICAgZmxhZ0RldGFpbC52YWx1ZS5kYXRlVGltZU1vZGlmaWVkID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlPy5kYXRlVGltZU1vZGlmaWVkIHx8IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRGbGFnKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRmxhZyA9IHRoaXMuZm9ybUdyb3VwLmdldCh0aGlzLnNlbGVjdGVkTWFuYWdlQ2FzZUxvY2F0aW9uKS52YWx1ZSBhcyBGbGFnRGV0YWlsRGlzcGxheVdpdGhGb3JtR3JvdXBQYXRoO1xuICAgIH1cbiAgICBsZXQgZmxhZ3NDYXNlRmllbGRWYWx1ZSA9IHRoaXMuc2VsZWN0ZWRGbGFnLmNhc2VGaWVsZD8udmFsdWU7XG4gICAgLy8gVXNlIHRoZSBwYXRoVG9GbGFnc0Zvcm1Hcm91cCBwcm9wZXJ0eSBmcm9tIHRoZSBzZWxlY3RlZCBmbGFnIGxvY2F0aW9uIHRvIGRyaWxsIGRvd24gdG8gdGhlIGNvcnJlY3QgcGFydCBvZiB0aGVcbiAgICAvLyBDYXNlRmllbGQgdmFsdWUgdG8gYXBwbHkgY2hhbmdlcyB0b1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLnNlbGVjdGVkRmxhZy5wYXRoVG9GbGFnc0Zvcm1Hcm91cDtcbiAgICAvLyBSb290LWxldmVsIEZsYWdzIENhc2VGaWVsZHMgZG9uJ3QgaGF2ZSBhIGRvdC1kZWxpbWl0ZWQgcGF0aCAtIGp1c3QgdGhlIENhc2VGaWVsZCBJRCBpdHNlbGYgLSBzbyBkb24ndCBkcmlsbCBkb3duXG4gICAgaWYgKHBhdGguaW5kZXhPZignLicpID4gLTEpIHtcbiAgICAgIHBhdGguc2xpY2UocGF0aC5pbmRleE9mKCcuJykgKyAxKS5zcGxpdCgnLicpLmZvckVhY2gocGFydCA9PiBmbGFnc0Nhc2VGaWVsZFZhbHVlID0gZmxhZ3NDYXNlRmllbGRWYWx1ZVtwYXJ0XSk7XG4gICAgfVxuICAgIGlmIChmbGFnc0Nhc2VGaWVsZFZhbHVlKSB7XG4gICAgICBjb25zdCBmbGFnRGV0YWlsVG9VcGRhdGUgPSBmbGFnc0Nhc2VGaWVsZFZhbHVlLmRldGFpbHM/LmZpbmQoXG4gICAgICAgIGRldGFpbCA9PiBkZXRhaWwuaWQgPT09IHRoaXMuc2VsZWN0ZWRGbGFnLmZsYWdEZXRhaWxEaXNwbGF5Py5mbGFnRGV0YWlsPy5pZCk7XG4gICAgICBpZiAoZmxhZ0RldGFpbFRvVXBkYXRlKSB7XG4gICAgICAgIC8vIENhY2hlIHRoZSAqb3JpZ2luYWwqIHN0YXR1cyBvZiB0aGUgZmxhZyBiZWZvcmUgaXQgaXMgbW9kaWZpZWQuIFRoaXMgaXMgbmVlZGVkIGlmIHRoZSB1c2VyIGNoYW5nZXMgdGhlIGZsYWcgc3RhdHVzXG4gICAgICAgIC8vIHRoZW4gZGVjaWRlcyB0byByZXR1cm4gdG8gYW55IHBhcnQgb2YgdGhlIGZsYWcgdXBkYXRlIGpvdXJuZXkuIFRoZSBNYW5hZ2VDYXNlRmxhZ3NDb21wb25lbnQgYW5kIFVwZGF0ZUZsYWdDb21wb25lbnRcbiAgICAgICAgLy8gc2hvdWxkIHJlZmVyIHRvIGEgZmxhZydzIG9yaWdpbmFsIHN0YXR1cywgbm90IHRoZSBvbmUgc2V0IHZpYSB0aGUgVUkgYmVjYXVzZSB0aGlzIGhhc24ndCBiZWVuIHBlcnNpc3RlZCB5ZXRcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZsYWcub3JpZ2luYWxTdGF0dXMgPSBmbGFnRGV0YWlsVG9VcGRhdGUudmFsdWU/LnN0YXR1cztcbiAgICAgICAgLy8gVXBkYXRlIGRlc2NyaXB0aW9uIGZpZWxkcyBvbmx5IGlmIGZsYWcgdHlwZSBpcyBcIk90aGVyXCIgKGZsYWcgY29kZSBPVDAwMDEpOyB0aGVzZSBmaWVsZHMgYXBwbHkgb25seSB0byB0aGF0IGZsYWcgdHlwZVxuICAgICAgICAvLyBJZiB0aGVpciBGb3JtQ29udHJvbHMgZG9uJ3QgZXhpc3QsIGl0IG1lYW5zIHRoZXNlIGZpZWxkcyB3ZXJlbid0IHZpc2l0ZWQgYXMgcGFydCBvZiB0aGUgXCJVcGRhdGUgRmxhZ1wiIGpvdXJuZXksIHNvIGRvXG4gICAgICAgIC8vICpub3QqIHVwZGF0ZSB0aGVpciB2YWx1ZXMgKG90aGVyd2lzZSB0aGV5IHdpbGwgYmVjb21lIHVuZGVmaW5lZClcbiAgICAgICAgaWYgKGZsYWdEZXRhaWxUb1VwZGF0ZS52YWx1ZT8uZmxhZ0NvZGUgPT09IHRoaXMub3RoZXJGbGFnVHlwZUNvZGUpIHtcbiAgICAgICAgICBpZiAodGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5nZXQoQ2FzZUZsYWdGb3JtRmllbGRzLk9USEVSX0ZMQUdfREVTQ1JJUFRJT04pKSB7XG4gICAgICAgICAgICBmbGFnRGV0YWlsVG9VcGRhdGUudmFsdWUub3RoZXJEZXNjcmlwdGlvbiA9IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuZ2V0KFxuICAgICAgICAgICAgICBDYXNlRmxhZ0Zvcm1GaWVsZHMuT1RIRVJfRkxBR19ERVNDUklQVElPTikudmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLmdldChDYXNlRmxhZ0Zvcm1GaWVsZHMuT1RIRVJfRkxBR19ERVNDUklQVElPTl9XRUxTSCkpIHtcbiAgICAgICAgICAgIGZsYWdEZXRhaWxUb1VwZGF0ZS52YWx1ZS5vdGhlckRlc2NyaXB0aW9uX2N5ID0gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5nZXQoXG4gICAgICAgICAgICAgIENhc2VGbGFnRm9ybUZpZWxkcy5PVEhFUl9GTEFHX0RFU0NSSVBUSU9OX1dFTFNIKS52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRW5zdXJlIHRoYXQgYW55IGNvbW1lbnRzIGVudGVyZWQgd2l0aCBsYW5ndWFnZSBzZXQgdG8gV2Vsc2ggZG8gbm90IGVuZCB1cCBpbiB0aGUgRW5nbGlzaCBjb21tZW50cyBmaWVsZFxuICAgICAgICBpZiAodGhpcy5ycHhUcmFuc2xhdGlvblNlcnZpY2UubGFuZ3VhZ2UgIT09ICdjeScpIHtcbiAgICAgICAgICBmbGFnRGV0YWlsVG9VcGRhdGUudmFsdWUuZmxhZ0NvbW1lbnQgPSB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLmdldChDYXNlRmxhZ0Zvcm1GaWVsZHMuQ09NTUVOVFMpPy52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBQb3B1bGF0ZSBmcm9tIHRoZSAqRW5nbGlzaCogY29tbWVudHMgZmllbGQgaWY6XG4gICAgICAgIC8vICogVGhlIFdlbHNoIGNvbW1lbnRzIGZpZWxkIGhhcyBubyB2YWx1ZSAoV2Vsc2ggY29tbWVudHMgZmllbGQgYWNxdWlyZXMgYSB2YWx1ZSBvbmx5IHdoZW4gYW4gSE1DVFMgaW50ZXJuYWwgdXNlciBoYXNcbiAgICAgICAgLy8gZ29uZSB0aHJvdWdoIHRoZSBcImFkZCB0cmFuc2xhdGlvblwiIHN0ZXAgZm9yIE1hbmFnZSBDYXNlIEZsYWdzKSwgQU5EXG4gICAgICAgIC8vICogVGhlIGxhbmd1YWdlIGlzIHNldCB0byBXZWxzaFxuICAgICAgICAvLyBJZiB0aGUgRm9ybUNvbnRyb2wgZG9lc24ndCBleGlzdCwgaXQgbWVhbnMgdGhpcyBmaWVsZCB3YXNuJ3QgdmlzaXRlZCBhcyBwYXJ0IG9mIHRoZSBcIlVwZGF0ZSBGbGFnXCIgam91cm5leSwgc28gZG9cbiAgICAgICAgLy8gKm5vdCogdXBkYXRlIGl0cyB2YWx1ZSAob3RoZXJ3aXNlIGl0IHdpbGwgYmUgb3ZlcnJpZGRlbikgLSB1bmxlc3MgdGhlIHVzZXIgaXMgZXh0ZXJuYWwgQU5EIHdvcmtpbmcgaW4gV2Vsc2hcbiAgICAgICAgaWYgKHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5DT01NRU5UU19XRUxTSCkgfHwgdGhpcy5ycHhUcmFuc2xhdGlvblNlcnZpY2UubGFuZ3VhZ2UgPT09ICdjeScpIHtcbiAgICAgICAgICBmbGFnRGV0YWlsVG9VcGRhdGUudmFsdWUuZmxhZ0NvbW1lbnRfY3kgPSB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLmdldChDYXNlRmxhZ0Zvcm1GaWVsZHMuQ09NTUVOVFNfV0VMU0gpPy52YWx1ZVxuICAgICAgICAgID8gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5nZXQoQ2FzZUZsYWdGb3JtRmllbGRzLkNPTU1FTlRTX1dFTFNIKT8udmFsdWVcbiAgICAgICAgICA6IHRoaXMucnB4VHJhbnNsYXRpb25TZXJ2aWNlLmxhbmd1YWdlID09PSAnY3knXG4gICAgICAgICAgICA/IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5DT01NRU5UUyk/LnZhbHVlXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZmxhZ0RldGFpbFRvVXBkYXRlLnZhbHVlLmZsYWdVcGRhdGVDb21tZW50ID0gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5nZXQoQ2FzZUZsYWdGb3JtRmllbGRzLlNUQVRVU19DSEFOR0VfUkVBU09OKT8udmFsdWU7XG4gICAgICAgIGZsYWdEZXRhaWxUb1VwZGF0ZS52YWx1ZS5zdGF0dXMgPSBDYXNlRmxhZ1N0YXR1c1t0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLmdldChDYXNlRmxhZ0Zvcm1GaWVsZHMuU1RBVFVTKT8udmFsdWVdO1xuICAgICAgICBmbGFnRGV0YWlsVG9VcGRhdGUudmFsdWUuZGF0ZVRpbWVNb2RpZmllZCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNBdEZpbmFsU3RhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZVxuICAgICAgPyB0aGlzLmZpZWxkU3RhdGUgPT09IHRoaXMubWFuYWdlRmxhZ0ZpbmFsU3RhdGVcbiAgICAgIDogIXRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlcjJQb2ludDFFbmFibGVkXG4gICAgICAgID8gdGhpcy5maWVsZFN0YXRlID09PSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19DT01NRU5UU1xuICAgICAgICA6IHRoaXMuZmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfU1RBVFVTO1xuICB9XG5cbiAgcHVibGljIG5hdmlnYXRlVG9FcnJvckVsZW1lbnQoZWxlbWVudElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoZWxlbWVudElkKSB7XG4gICAgICBjb25zdCBodG1sRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7XG4gICAgICBpZiAoaHRtbEVsZW1lbnQpIHtcbiAgICAgICAgaHRtbEVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJyB9KTtcbiAgICAgICAgaHRtbEVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25GbGFnQ29tbWVudHNPcHRpb25hbEVtaXR0ZWQoXzogYW55KTogdm9pZCB7XG4gICAgdGhpcy5mbGFnQ29tbWVudHNPcHRpb25hbCA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgcG9wdWxhdGVOZXdGbGFnRGV0YWlsSW5zdGFuY2UoKTogRmxhZ0RldGFpbCB7XG4gICAgY29uc3QgbGFuZ1NlYXJjaFRlcm0gPSB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwPy52YWx1ZVsnbGFuZ3VhZ2VTZWFyY2hUZXJtJ107XG4gICAgY29uc3QgbWFudWFsTGFuZ0VudHJ5ID0gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cD8udmFsdWVbJ21hbnVhbExhbmd1YWdlRW50cnknXTtcbiAgICBjb25zdCBmbGFnVHlwZSA9IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXA/LnZhbHVlWydmbGFnVHlwZSddO1xuICAgIGNvbnN0IG90aGVyRGVzYyA9IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXA/LnZhbHVlWydvdGhlckRlc2NyaXB0aW9uJ107XG4gICAgY29uc3QgZm9ybVZhbHVlcyA9IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXA/LnZhbHVlO1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiB0aGlzLmZsYWdUeXBlPy5uYW1lLFxuICAgICAgbmFtZV9jeTogZmxhZ1R5cGU/Lm5hbWVfY3ksXG4gICAgICAvLyBDdXJyZW50bHksIHN1YlR5cGVWYWx1ZSwgc3ViVHlwZVZhbHVlX2N5IGFuZCBzdWJUeXBlS2V5IGFyZSBhcHBsaWNhYmxlIG9ubHkgdG8gbGFuZ3VhZ2UgZmxhZyB0eXBlc1xuICAgICAgc3ViVHlwZVZhbHVlOiBsYW5nU2VhcmNoVGVybSAmJiB0aGlzLnJweFRyYW5zbGF0aW9uU2VydmljZS5sYW5ndWFnZSA9PT0gJ2VuJ1xuICAgICAgICA/IGxhbmdTZWFyY2hUZXJtLnZhbHVlXG4gICAgICAgIDogbWFudWFsTGFuZ0VudHJ5ICYmIHRoaXMucnB4VHJhbnNsYXRpb25TZXJ2aWNlLmxhbmd1YWdlID09PSAnZW4nXG4gICAgICAgICAgPyBtYW51YWxMYW5nRW50cnlcbiAgICAgICAgICA6IG51bGwsXG4gICAgICBzdWJUeXBlVmFsdWVfY3k6IGxhbmdTZWFyY2hUZXJtICYmIHRoaXMucnB4VHJhbnNsYXRpb25TZXJ2aWNlLmxhbmd1YWdlID09PSAnY3knXG4gICAgICA/IGxhbmdTZWFyY2hUZXJtPy52YWx1ZV9jeVxuICAgICAgOiBtYW51YWxMYW5nRW50cnkgJiYgdGhpcy5ycHhUcmFuc2xhdGlvblNlcnZpY2UubGFuZ3VhZ2UgPT09ICdjeSdcbiAgICAgICAgPyBtYW51YWxMYW5nRW50cnlcbiAgICAgICAgOiBudWxsLFxuICAgICAgLy8gRm9yIHVzZXItZW50ZXJlZCAoaS5lLiBub24tUmVmZXJlbmNlIERhdGEpIGxhbmd1YWdlcywgdGhlcmUgaXMgbm8ga2V5XG4gICAgICBzdWJUeXBlS2V5OiBsYW5nU2VhcmNoVGVybVxuICAgICAgICA/IGxhbmdTZWFyY2hUZXJtLmtleVxuICAgICAgICA6IG51bGwsXG4gICAgICBvdGhlckRlc2NyaXB0aW9uOiBmbGFnVHlwZT8uZmxhZ0NvZGUgPT09IHRoaXMub3RoZXJGbGFnVHlwZUNvZGUgJiZcbiAgICAgICAgb3RoZXJEZXNjICYmIHRoaXMucnB4VHJhbnNsYXRpb25TZXJ2aWNlLmxhbmd1YWdlID09PSAnZW4nXG4gICAgICAgID8gb3RoZXJEZXNjXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgb3RoZXJEZXNjcmlwdGlvbl9jeTogZmxhZ1R5cGU/LmZsYWdDb2RlID09PSB0aGlzLm90aGVyRmxhZ1R5cGVDb2RlICYmXG4gICAgICAgIG90aGVyRGVzYyAmJiB0aGlzLnJweFRyYW5zbGF0aW9uU2VydmljZS5sYW5ndWFnZSA9PT0gJ2N5J1xuICAgICAgICA/IG90aGVyRGVzY1xuICAgICAgICA6IG51bGwsXG4gICAgICBmbGFnQ29tbWVudDogdGhpcy5ycHhUcmFuc2xhdGlvblNlcnZpY2UubGFuZ3VhZ2UgPT09ICdlbidcbiAgICAgICAgPyBmb3JtVmFsdWVzPy5mbGFnQ29tbWVudHNcbiAgICAgICAgOiBudWxsLFxuICAgICAgZmxhZ0NvbW1lbnRfY3k6IHRoaXMucnB4VHJhbnNsYXRpb25TZXJ2aWNlLmxhbmd1YWdlID09PSAnY3knXG4gICAgICAgID8gZm9ybVZhbHVlcz8uZmxhZ0NvbW1lbnRzXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGZsYWdVcGRhdGVDb21tZW50OiBmb3JtVmFsdWVzPy5zdGF0dXNSZWFzb24sXG4gICAgICBkYXRlVGltZUNyZWF0ZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHBhdGg6IGZsYWdUeXBlPy5QYXRoICYmXG4gICAgICAgIGZsYWdUeXBlPy5QYXRoLm1hcChwYXRoVmFsdWUgPT4gT2JqZWN0LmFzc2lnbih7IGlkOiBudWxsLCB2YWx1ZTogcGF0aFZhbHVlIH0pKSxcbiAgICAgIGhlYXJpbmdSZWxldmFudDogZmxhZ1R5cGU/LmhlYXJpbmdSZWxldmFudCA/ICdZZXMnIDogJ05vJyxcbiAgICAgIGZsYWdDb2RlOiBmbGFnVHlwZT8uZmxhZ0NvZGUsXG4gICAgICAvLyBTdGF0dXMgc2hvdWxkIGJlIHNldCB0byB3aGF0ZXZlciB0aGUgZGVmYXVsdCBpcyBmb3IgdGhpcyBmbGFnIHR5cGUsIGlmIGZsYWcgaXMgYmVpbmcgY3JlYXRlZCBieSBhbiBleHRlcm5hbFxuICAgICAgLy8gdXNlciwgb3RoZXJ3aXNlIGl0IHNob3VsZCBiZSBzZXQgdG8gXCJBY3RpdmVcIiBpZiBDYXNlIEZsYWdzIHYyLjEgaXMgTk9UIGVuYWJsZWQsIG9yIHRoZSBzZWxlY3RlZCBzdGF0dXMgaWYgaXQgaXNcbiAgICAgIHN0YXR1czogdGhpcy5pc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWxcbiAgICAgICAgPyBmbGFnVHlwZT8uZGVmYXVsdFN0YXR1c1xuICAgICAgICA6ICF0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIyUG9pbnQxRW5hYmxlZFxuICAgICAgICAgID8gQ2FzZUZsYWdTdGF0dXMuQUNUSVZFXG4gICAgICAgICAgOiBDYXNlRmxhZ1N0YXR1c1tmb3JtVmFsdWVzPy5zZWxlY3RlZFN0YXR1c10sXG4gICAgICBhdmFpbGFibGVFeHRlcm5hbGx5OiBmbGFnVHlwZT8uZXh0ZXJuYWxseUF2YWlsYWJsZSA/ICdZZXMnIDogJ05vJ1xuICAgIH0gYXMgRmxhZ0RldGFpbDtcbiAgfVxuXG4gIHB1YmxpYyBtb3ZlVG9GaW5hbFJldmlld1N0YWdlKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0RmxhZ3NDYXNlRmllbGRWYWx1ZSgpO1xuICAgIC8vIENoZWNrIHRoYXQgbm8gZXJyb3JzIGhhdmUgYmVlbiBzZXQgb24gY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAgKGJ5IGRldGVybWluZUxvY2F0aW9uRm9yRmxhZygpKTsgcHJldmVudCBtb3ZpbmcgdG9cbiAgICAvLyBmaW5hbCByZXZpZXcgc3RhZ2UgaWYgZXJyb3JzIGV4aXN0XG4gICAgaWYgKCF0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLmVycm9ycykge1xuICAgICAgLy8gQ2xlYXIgdGhlIFwibm90QWxsQ2FzZUZsYWdTdGFnZXNDb21wbGV0ZWRcIiBlcnJvclxuICAgICAgdGhpcy5hbGxDYXNlRmxhZ1N0YWdlc0NvbXBsZXRlZCA9IHRydWU7XG4gICAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICB0aGlzLmNhc2VFZGl0RGF0YVNlcnZpY2Uuc2V0VHJpZ2dlclN1Ym1pdEV2ZW50KHRydWUpO1xuICAgICAgLy8gVXBkYXRlIHRoaXMuc2VsZWN0ZWRGbGFnc0xvY2F0aW9uIHdpdGggdGhlIGNvcnJlY3RseSBkZXRlcm1pbmVkIGxvY2F0aW9uLCBzbyB0aGUgY29ycmVjdCB2YWx1ZSBpcyBhdmFpbGFibGUgdG9cbiAgICAgIC8vIFJlYWRDYXNlRmxhZ0ZpZWxkQ29tcG9uZW50IHdoZW4gaXQgaW5pdGlhbGlzZXMgdGhlIENhc2UgRmxhZyBTdW1tYXJ5IHBhZ2VcbiAgICAgIHRoaXMuc2VsZWN0ZWRGbGFnc0xvY2F0aW9uID0gdGhpcy5kZXRlcm1pbmVkTG9jYXRpb247XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIFJlc2V0IHRoZSBmaWVsZHN0YXRlVG9OYXZpZ2F0ZSBhcyB0aGUgd3JpdGUgam91cm5leSBjb21wbGV0ZXMgYXQgdGhpcyBwb2ludFxuICAgIHRoaXMuY2FzZUZsYWdTdGF0ZVNlcnZpY2UuZmllbGRTdGF0ZVRvTmF2aWdhdGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jYXNlVGl0bGVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1hbmFnZUZsYWdGaW5hbFN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLmdldChDYXNlRmxhZ0Zvcm1GaWVsZHMuSVNfV0VMU0hfVFJBTlNMQVRJT05fTkVFREVEKT8udmFsdWVcbiAgICA/IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1VQREFURV9XRUxTSF9UUkFOU0xBVElPTiA6IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1VQREFURTtcbiAgfVxuXG4gIHB1YmxpYyBzZXREaXNwbGF5Q29udGV4dFBhcmFtZXRlcihjYXNlRmllbGRzOiBDYXNlRmllbGRbXSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNhc2VGaWVsZHMuZmluZChjYXNlRmllbGQgPT4gRmllbGRzVXRpbHMuaXNDYXNlRmllbGRPZlR5cGUoY2FzZUZpZWxkLCBbJ0ZsYWdMYXVuY2hlciddKSk/LmRpc3BsYXlfY29udGV4dF9wYXJhbWV0ZXI7XG4gIH1cbn1cbiIsIjwhLS0gRXJyb3IgbWVzc2FnZSBzdW1tYXJ5IC0tPlxuPGRpdiAqbmdJZj1cImVycm9yTWVzc2FnZXMubGVuZ3RoID4gMFwiIGNsYXNzPVwiZ292dWstZXJyb3Itc3VtbWFyeVwiIGFyaWEtbGFiZWxsZWRieT1cImVycm9yLXN1bW1hcnktdGl0bGVcIiByb2xlPVwiYWxlcnRcIiB0YWJpbmRleD1cIi0xXCIgZGF0YS1tb2R1bGU9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5XCI+XG4gIDxoMiBjbGFzcz1cImdvdnVrLWVycm9yLXN1bW1hcnlfX3RpdGxlXCIgaWQ9XCJlcnJvci1zdW1tYXJ5LXRpdGxlXCI+XG4gICAge3snVGhlcmUgaXMgYSBwcm9ibGVtJyB8IHJweFRyYW5zbGF0ZX19XG4gIDwvaDI+XG4gIDxkaXYgKm5nRm9yPVwibGV0IGVycm9yTWVzc2FnZSBvZiBlcnJvck1lc3NhZ2VzXCIgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5X19ib2R5XCI+XG4gICAgPHVsIGNsYXNzPVwiZ292dWstbGlzdCBnb3Z1ay1lcnJvci1zdW1tYXJ5X19saXN0XCI+XG4gICAgICA8bGk+XG4gICAgICAgIDxhIChjbGljayk9XCJuYXZpZ2F0ZVRvRXJyb3JFbGVtZW50KGVycm9yTWVzc2FnZS5maWVsZElkKVwiIGNsYXNzPVwidmFsaWRhdGlvbi1lcnJvclwiPnt7ZXJyb3JNZXNzYWdlLmRlc2NyaXB0aW9uIHwgcnB4VHJhbnNsYXRlfX08L2E+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwiIWlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJVcGRhdGVcIiBjbGFzcz1cImZvcm0tZ3JvdXBcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICA8ZGl2IGNsYXNzPVwiZ292dWstZm9ybS1ncm91cFwiIFtuZ1N3aXRjaF09XCJmaWVsZFN0YXRlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfTE9DQVRJT05cIj5cbiAgICAgIDxjY2Qtc2VsZWN0LWZsYWctbG9jYXRpb25cbiAgICAgICAgW2Zvcm1Hcm91cF09XCJjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cFwiIFtmbGFnc0RhdGFdPVwiZmxhZ3NEYXRhXCJcbiAgICAgICAgKGNhc2VGbGFnU3RhdGVFbWl0dGVyKT1cIm9uQ2FzZUZsYWdTdGF0ZUVtaXR0ZWQoJGV2ZW50KVwiXG4gICAgICAgIFtpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWxdPVwiaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsXCJcbiAgICAgID48L2NjZC1zZWxlY3QtZmxhZy1sb2NhdGlvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19UWVBFXCI+XG4gICAgICA8Y2NkLXNlbGVjdC1mbGFnLXR5cGUgW2Zvcm1Hcm91cF09XCJjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cFwiIFtqdXJpc2RpY3Rpb25dPVwianVyaXNkaWN0aW9uXCIgW2Nhc2VUeXBlSWRdPVwiY2FzZVR5cGVJZFwiXG4gICAgICAgIFtobWN0c1NlcnZpY2VJZF09XCJobWN0c1NlcnZpY2VJZFwiIFtpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWxdPVwiaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsXCJcbiAgICAgICAgW2lzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIyUG9pbnQxRW5hYmxlZF09XCJpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyMlBvaW50MUVuYWJsZWRcIlxuICAgICAgICBbc2VsZWN0ZWRGbGFnc0xvY2F0aW9uXT1cInNlbGVjdGVkRmxhZ3NMb2NhdGlvblwiXG4gICAgICAgIChjYXNlRmxhZ1N0YXRlRW1pdHRlcik9XCJvbkNhc2VGbGFnU3RhdGVFbWl0dGVkKCRldmVudClcIlxuICAgICAgICAoZmxhZ0NvbW1lbnRzT3B0aW9uYWxFbWl0dGVyKT1cIm9uRmxhZ0NvbW1lbnRzT3B0aW9uYWxFbWl0dGVkKCRldmVudClcIj48L2NjZC1zZWxlY3QtZmxhZy10eXBlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImNhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0xBTkdVQUdFX0lOVEVSUFJFVEVSXCI+XG4gICAgICA8Y2NkLXNlYXJjaC1sYW5ndWFnZS1pbnRlcnByZXRlciBbZm9ybUdyb3VwXT1cImNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwXCJcbiAgICAgICAgW2ZsYWdUeXBlXT1cImZsYWdUeXBlXCJcbiAgICAgICAgKGNhc2VGbGFnU3RhdGVFbWl0dGVyKT1cIm9uQ2FzZUZsYWdTdGF0ZUVtaXR0ZWQoJGV2ZW50KVwiPlxuICAgICAgPC9jY2Qtc2VhcmNoLWxhbmd1YWdlLWludGVycHJldGVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImNhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0NPTU1FTlRTXCI+XG4gICAgICA8Y2NkLWFkZC1jb21tZW50cyBbZm9ybUdyb3VwXT1cImNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwXCIgW29wdGlvbmFsXT1cImZsYWdDb21tZW50c09wdGlvbmFsXCJcbiAgICAgICAgKGNhc2VGbGFnU3RhdGVFbWl0dGVyKT1cIm9uQ2FzZUZsYWdTdGF0ZUVtaXR0ZWQoJGV2ZW50KVwiXG4gICAgICAgIFtpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWxdPVwiaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsXCJcbiAgICAgICAgW2lzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIyUG9pbnQxRW5hYmxlZF09XCJpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyMlBvaW50MUVuYWJsZWRcIj5cbiAgICAgIDwvY2NkLWFkZC1jb21tZW50cz5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19TVEFUVVNcIj5cbiAgICAgIDxjY2QtY29uZmlybS1mbGFnLXN0YXR1cyBbZm9ybUdyb3VwXT1cImNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwXCIgW2RlZmF1bHRTdGF0dXNdPVwiZmxhZ1R5cGUuZGVmYXVsdFN0YXR1c1wiXG4gICAgICAgIChjYXNlRmxhZ1N0YXRlRW1pdHRlcik9XCJvbkNhc2VGbGFnU3RhdGVFbWl0dGVkKCRldmVudClcIj48L2NjZC1jb25maXJtLWZsYWctc3RhdHVzPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cImlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJVcGRhdGVcIiBjbGFzcz1cImZvcm0tZ3JvdXBcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICA8ZGl2IGNsYXNzPVwiZ292dWstZm9ybS1ncm91cFwiIFtuZ1N3aXRjaF09XCJmaWVsZFN0YXRlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfTUFOQUdFX0NBU0VfRkxBR1NcIj5cbiAgICAgIDxjY2QtbWFuYWdlLWNhc2UtZmxhZ3MgW2Zvcm1Hcm91cF09XCJjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cFwiIFtmbGFnc0RhdGFdPVwiZmxhZ3NEYXRhXCIgW2Nhc2VUaXRsZV09XCJjYXNlVGl0bGVcIlxuICAgICAgICBbZGlzcGxheUNvbnRleHRQYXJhbWV0ZXJdPVwiZGlzcGxheUNvbnRleHRQYXJhbWV0ZXJcIlxuICAgICAgICAoY2FzZUZsYWdTdGF0ZUVtaXR0ZXIpPVwib25DYXNlRmxhZ1N0YXRlRW1pdHRlZCgkZXZlbnQpXCI+PC9jY2QtbWFuYWdlLWNhc2UtZmxhZ3M+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVVBEQVRFXCI+XG4gICAgICA8Y2NkLXVwZGF0ZS1mbGFnIFtmb3JtR3JvdXBdPVwiY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXBcIlxuICAgICAgICBbZGlzcGxheUNvbnRleHRQYXJhbWV0ZXJdPVwiZGlzcGxheUNvbnRleHRQYXJhbWV0ZXJcIlxuICAgICAgICAoY2FzZUZsYWdTdGF0ZUVtaXR0ZXIpPVwib25DYXNlRmxhZ1N0YXRlRW1pdHRlZCgkZXZlbnQpXCI+PC9jY2QtdXBkYXRlLWZsYWc+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVVBEQVRFX1dFTFNIX1RSQU5TTEFUSU9OXCI+XG4gICAgICA8Y2NkLXVwZGF0ZS1mbGFnLWFkZC10cmFuc2xhdGlvbi1mb3JtXG4gICAgICAgIFtmb3JtR3JvdXBdPVwiY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXBcIlxuICAgICAgICAoY2FzZUZsYWdTdGF0ZUVtaXR0ZXIpPVwib25DYXNlRmxhZ1N0YXRlRW1pdHRlZCgkZXZlbnQpXCJcbiAgICAgID48L2NjZC11cGRhdGUtZmxhZy1hZGQtdHJhbnNsYXRpb24tZm9ybT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|