@valtimo/task 12.7.0 → 12.9.0

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.
@@ -279,7 +279,7 @@ export class TaskDetailContentComponent {
279
279
  this.formDefinition$.next(formDefinition);
280
280
  }
281
281
  setFormViewModelComponent() {
282
- this._viewInitialized$.subscribe((viewInitialized) => {
282
+ this._viewInitialized$.subscribe(viewInitialized => {
283
283
  if (viewInitialized) {
284
284
  this.formViewModelDynamicContainer.clear();
285
285
  if (!this.formViewModel)
@@ -309,16 +309,16 @@ export class TaskDetailContentComponent {
309
309
  });
310
310
  }
311
311
  setFormCustomComponent(formCustomComponentKey) {
312
- this._viewInitialized$.subscribe((viewInitialized) => {
312
+ this._viewInitialized$.subscribe(viewInitialized => {
313
313
  if (viewInitialized) {
314
314
  this.formCustomComponentDynamicContainer.clear();
315
315
  if (!this.formCustomComponentConfig)
316
316
  return;
317
- this._subscriptions.add(this._formCustomComponentConfig$.subscribe((formCustomComponentConfig) => {
317
+ this._subscriptions.add(this._formCustomComponentConfig$.subscribe(formCustomComponentConfig => {
318
318
  const customComponent = formCustomComponentConfig[formCustomComponentKey];
319
319
  const renderedComponent = this.formCustomComponentDynamicContainer.createComponent(customComponent);
320
320
  renderedComponent.instance.taskInstanceId = this.taskInstanceId$.value;
321
- renderedComponent.instance.submitEvent.subscribe(() => {
321
+ renderedComponent.instance.submittedEvent.subscribe(() => {
322
322
  this.closeModalEvent.emit();
323
323
  });
324
324
  }));
@@ -343,11 +343,11 @@ export class TaskDetailContentComponent {
343
343
  });
344
344
  }
345
345
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskDetailContentComponent, deps: [{ token: i1.ConfigService }, { token: i2.DocumentService }, { token: i3.IconService }, { token: i4.NGXLogger }, { token: i5.ValtimoModalService }, { token: i6.PermissionService }, { token: i7.ProcessLinkService }, { token: i8.Router }, { token: i5.FormIoStateService }, { token: i9.TaskIntermediateSaveService }, { token: i9.TaskService }, { token: i10.ToastrService }, { token: i11.TranslateService }, { token: FORM_VIEW_MODEL_TOKEN, optional: true }, { token: FORM_CUSTOM_COMPONENT_TOKEN, optional: true }, { token: i7.UrlResolverService }], target: i0.ɵɵFactoryTarget.Component }); }
346
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TaskDetailContentComponent, isStandalone: true, selector: "valtimo-task-detail-content", inputs: { task: "task", taskAndProcessLink: "taskAndProcessLink", modalClosed: "modalClosed" }, outputs: { closeModalEvent: "closeModalEvent", formSubmit: "formSubmit", activeChange: "activeChange" }, viewQueries: [{ propertyName: "form", first: true, predicate: ["form"], descendants: true }, { propertyName: "formViewModelDynamicContainer", first: true, predicate: ["formViewModelComponent"], descendants: true, read: ViewContainerRef }, { propertyName: "formFlow", first: true, predicate: ["formFlow"], descendants: true }, { propertyName: "formCustomComponentDynamicContainer", first: true, predicate: ["formCustomComponent"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"{\n loading: loading$ | async,\n page: page$ | async,\n task: task$ | async,\n taskId: taskInstanceId$ | async,\n formDefinition: formDefinition$ | async,\n formDefinitionId: formDefinitionId$ | async,\n formName: formName$ | async,\n formIoFormData: formIoFormData$ | async,\n submission: submission$ | async,\n processLinkIsForm: processLinkIsForm$ | async,\n processLinkIsFormViewModel: processLinkIsFormViewModel$ | async,\n processLinkIsUiComponent: processLinkIsUiComponent$ | async,\n formioOptions: formioOptions$ | async,\n processLinkIsFormFlow: processLinkIsFormFlow$ | async,\n formFlowInstanceId: formFlowInstanceId$ | async,\n errorMessage: errorMessage$ | async,\n canAssignUserToTask: canAssignUserToTask$ | async,\n } as obs\"\n>\n <valtimo-form-io\n #form\n *ngIf=\"obs.formDefinition && obs.processLinkIsForm\"\n [form]=\"obs.formDefinition\"\n [submission]=\"obs.submission\"\n (submit)=\"onSubmit($event)\"\n (change)=\"onChange($event)\"\n [options]=\"obs.formioOptions\"\n ></valtimo-form-io>\n\n <valtimo-form-flow\n #formFlow\n *ngIf=\"obs.processLinkIsFormFlow\"\n [formIoFormData]=\"formIoFormData$\"\n [formFlowInstanceId]=\"obs.formFlowInstanceId\"\n (formFlowComplete)=\"completeTask(obs.task)\"\n (formFlowChange)=\"onFormFlowChangeEvent()\"\n ></valtimo-form-flow>\n\n <div *ngIf=\"obs.loading\" class=\"text-black mb-0 p-3 text-center\">\n {{ 'formManagement.loading' | translate }}\n </div>\n\n <div\n *ngIf=\"\n obs.loading === false && !obs.formDefinition && !obs.formFlowInstanceId && !obs.errorMessage && !obs.processLinkIsUiComponent\n \"\n class=\"bg-warning text-black mb-0 p-3 text-center\"\n >\n {{\n (isAdmin$ | async)\n ? ('formManagement.noFormDefinitionFoundAdmin' | translate)\n : ('formManagement.noFormDefinitionFoundUser' | translate)\n }}\n </div>\n\n <div *ngIf=\"obs.errorMessage\" class=\"bg-danger text-black mb-0 p-3 text-center\">\n {{ obs.errorMessage }}\n </div>\n\n <div class=\"m-2\">\n <ng-template #formViewModelComponent></ng-template>\n <ng-template #formCustomComponent></ng-template>\n </div>\n</ng-container>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i12.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormIoModule }, { kind: "component", type: i5.FormioComponent, selector: "valtimo-form-io", inputs: ["options", "submission", "form", "readOnly", "formRefresh$"], outputs: ["submit", "change", "event"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i11.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ProcessLinkModule }, { kind: "component", type: i7.FormFlowComponent, selector: "valtimo-form-flow", inputs: ["formIoFormData", "formFlowInstanceId"], outputs: ["formFlowComplete", "formFlowChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
346
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TaskDetailContentComponent, isStandalone: true, selector: "valtimo-task-detail-content", inputs: { task: "task", taskAndProcessLink: "taskAndProcessLink", modalClosed: "modalClosed" }, outputs: { closeModalEvent: "closeModalEvent", formSubmit: "formSubmit", activeChange: "activeChange" }, viewQueries: [{ propertyName: "form", first: true, predicate: ["form"], descendants: true }, { propertyName: "formViewModelDynamicContainer", first: true, predicate: ["formViewModelComponent"], descendants: true, read: ViewContainerRef }, { propertyName: "formFlow", first: true, predicate: ["formFlow"], descendants: true }, { propertyName: "formCustomComponentDynamicContainer", first: true, predicate: ["formCustomComponent"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"{\n loading: loading$ | async,\n page: page$ | async,\n task: task$ | async,\n taskId: taskInstanceId$ | async,\n formDefinition: formDefinition$ | async,\n formDefinitionId: formDefinitionId$ | async,\n formName: formName$ | async,\n formIoFormData: formIoFormData$ | async,\n submission: submission$ | async,\n processLinkIsForm: processLinkIsForm$ | async,\n processLinkIsFormViewModel: processLinkIsFormViewModel$ | async,\n processLinkIsUiComponent: processLinkIsUiComponent$ | async,\n formioOptions: formioOptions$ | async,\n processLinkIsFormFlow: processLinkIsFormFlow$ | async,\n formFlowInstanceId: formFlowInstanceId$ | async,\n errorMessage: errorMessage$ | async,\n canAssignUserToTask: canAssignUserToTask$ | async,\n } as obs\"\n>\n <valtimo-form-io\n #form\n *ngIf=\"obs.formDefinition && obs.processLinkIsForm\"\n [form]=\"obs.formDefinition\"\n [submission]=\"obs.submission\"\n (submit)=\"onSubmit($event)\"\n (change)=\"onChange($event)\"\n [options]=\"obs.formioOptions\"\n ></valtimo-form-io>\n\n <valtimo-form-flow\n #formFlow\n *ngIf=\"obs.processLinkIsFormFlow\"\n [formIoFormData]=\"formIoFormData$\"\n [formFlowInstanceId]=\"obs.formFlowInstanceId\"\n (formFlowComplete)=\"completeTask(obs.task)\"\n (formFlowChange)=\"onFormFlowChangeEvent()\"\n ></valtimo-form-flow>\n\n <div *ngIf=\"obs.loading\" class=\"text-black mb-0 p-3 text-center\">\n {{ 'formManagement.loading' | translate }}\n </div>\n\n <div\n *ngIf=\"\n obs.loading === false &&\n !obs.formDefinition &&\n !obs.formFlowInstanceId &&\n !obs.errorMessage &&\n !obs.processLinkIsUiComponent\n \"\n class=\"bg-warning text-black mb-0 p-3 text-center\"\n >\n {{\n (isAdmin$ | async)\n ? ('formManagement.noFormDefinitionFoundAdmin' | translate)\n : ('formManagement.noFormDefinitionFoundUser' | translate)\n }}\n </div>\n\n <div *ngIf=\"obs.errorMessage\" class=\"bg-danger text-black mb-0 p-3 text-center\">\n {{ obs.errorMessage }}\n </div>\n\n <div class=\"m-2\">\n <ng-template #formViewModelComponent></ng-template>\n <ng-template #formCustomComponent></ng-template>\n </div>\n</ng-container>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i12.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormIoModule }, { kind: "component", type: i5.FormioComponent, selector: "valtimo-form-io", inputs: ["options", "submission", "form", "readOnly", "formRefresh$"], outputs: ["submit", "change", "event"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i11.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ProcessLinkModule }, { kind: "component", type: i7.FormFlowComponent, selector: "valtimo-form-flow", inputs: ["formIoFormData", "formFlowInstanceId"], outputs: ["formFlowComplete", "formFlowChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
347
347
  }
348
348
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskDetailContentComponent, decorators: [{
349
349
  type: Component,
350
- args: [{ selector: 'valtimo-task-detail-content', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, FormIoModule, TranslateModule, ProcessLinkModule], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"{\n loading: loading$ | async,\n page: page$ | async,\n task: task$ | async,\n taskId: taskInstanceId$ | async,\n formDefinition: formDefinition$ | async,\n formDefinitionId: formDefinitionId$ | async,\n formName: formName$ | async,\n formIoFormData: formIoFormData$ | async,\n submission: submission$ | async,\n processLinkIsForm: processLinkIsForm$ | async,\n processLinkIsFormViewModel: processLinkIsFormViewModel$ | async,\n processLinkIsUiComponent: processLinkIsUiComponent$ | async,\n formioOptions: formioOptions$ | async,\n processLinkIsFormFlow: processLinkIsFormFlow$ | async,\n formFlowInstanceId: formFlowInstanceId$ | async,\n errorMessage: errorMessage$ | async,\n canAssignUserToTask: canAssignUserToTask$ | async,\n } as obs\"\n>\n <valtimo-form-io\n #form\n *ngIf=\"obs.formDefinition && obs.processLinkIsForm\"\n [form]=\"obs.formDefinition\"\n [submission]=\"obs.submission\"\n (submit)=\"onSubmit($event)\"\n (change)=\"onChange($event)\"\n [options]=\"obs.formioOptions\"\n ></valtimo-form-io>\n\n <valtimo-form-flow\n #formFlow\n *ngIf=\"obs.processLinkIsFormFlow\"\n [formIoFormData]=\"formIoFormData$\"\n [formFlowInstanceId]=\"obs.formFlowInstanceId\"\n (formFlowComplete)=\"completeTask(obs.task)\"\n (formFlowChange)=\"onFormFlowChangeEvent()\"\n ></valtimo-form-flow>\n\n <div *ngIf=\"obs.loading\" class=\"text-black mb-0 p-3 text-center\">\n {{ 'formManagement.loading' | translate }}\n </div>\n\n <div\n *ngIf=\"\n obs.loading === false && !obs.formDefinition && !obs.formFlowInstanceId && !obs.errorMessage && !obs.processLinkIsUiComponent\n \"\n class=\"bg-warning text-black mb-0 p-3 text-center\"\n >\n {{\n (isAdmin$ | async)\n ? ('formManagement.noFormDefinitionFoundAdmin' | translate)\n : ('formManagement.noFormDefinitionFoundUser' | translate)\n }}\n </div>\n\n <div *ngIf=\"obs.errorMessage\" class=\"bg-danger text-black mb-0 p-3 text-center\">\n {{ obs.errorMessage }}\n </div>\n\n <div class=\"m-2\">\n <ng-template #formViewModelComponent></ng-template>\n <ng-template #formCustomComponent></ng-template>\n </div>\n</ng-container>\n" }]
350
+ args: [{ selector: 'valtimo-task-detail-content', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, FormIoModule, TranslateModule, ProcessLinkModule], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"{\n loading: loading$ | async,\n page: page$ | async,\n task: task$ | async,\n taskId: taskInstanceId$ | async,\n formDefinition: formDefinition$ | async,\n formDefinitionId: formDefinitionId$ | async,\n formName: formName$ | async,\n formIoFormData: formIoFormData$ | async,\n submission: submission$ | async,\n processLinkIsForm: processLinkIsForm$ | async,\n processLinkIsFormViewModel: processLinkIsFormViewModel$ | async,\n processLinkIsUiComponent: processLinkIsUiComponent$ | async,\n formioOptions: formioOptions$ | async,\n processLinkIsFormFlow: processLinkIsFormFlow$ | async,\n formFlowInstanceId: formFlowInstanceId$ | async,\n errorMessage: errorMessage$ | async,\n canAssignUserToTask: canAssignUserToTask$ | async,\n } as obs\"\n>\n <valtimo-form-io\n #form\n *ngIf=\"obs.formDefinition && obs.processLinkIsForm\"\n [form]=\"obs.formDefinition\"\n [submission]=\"obs.submission\"\n (submit)=\"onSubmit($event)\"\n (change)=\"onChange($event)\"\n [options]=\"obs.formioOptions\"\n ></valtimo-form-io>\n\n <valtimo-form-flow\n #formFlow\n *ngIf=\"obs.processLinkIsFormFlow\"\n [formIoFormData]=\"formIoFormData$\"\n [formFlowInstanceId]=\"obs.formFlowInstanceId\"\n (formFlowComplete)=\"completeTask(obs.task)\"\n (formFlowChange)=\"onFormFlowChangeEvent()\"\n ></valtimo-form-flow>\n\n <div *ngIf=\"obs.loading\" class=\"text-black mb-0 p-3 text-center\">\n {{ 'formManagement.loading' | translate }}\n </div>\n\n <div\n *ngIf=\"\n obs.loading === false &&\n !obs.formDefinition &&\n !obs.formFlowInstanceId &&\n !obs.errorMessage &&\n !obs.processLinkIsUiComponent\n \"\n class=\"bg-warning text-black mb-0 p-3 text-center\"\n >\n {{\n (isAdmin$ | async)\n ? ('formManagement.noFormDefinitionFoundAdmin' | translate)\n : ('formManagement.noFormDefinitionFoundUser' | translate)\n }}\n </div>\n\n <div *ngIf=\"obs.errorMessage\" class=\"bg-danger text-black mb-0 p-3 text-center\">\n {{ obs.errorMessage }}\n </div>\n\n <div class=\"m-2\">\n <ng-template #formViewModelComponent></ng-template>\n <ng-template #formCustomComponent></ng-template>\n </div>\n</ng-container>\n" }]
351
351
  }], ctorParameters: () => [{ type: i1.ConfigService }, { type: i2.DocumentService }, { type: i3.IconService }, { type: i4.NGXLogger }, { type: i5.ValtimoModalService }, { type: i6.PermissionService }, { type: i7.ProcessLinkService }, { type: i8.Router }, { type: i5.FormIoStateService }, { type: i9.TaskIntermediateSaveService }, { type: i9.TaskService }, { type: i10.ToastrService }, { type: i11.TranslateService }, { type: undefined, decorators: [{
352
352
  type: Optional
353
353
  }, {
@@ -383,4 +383,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
383
383
  }], activeChange: [{
384
384
  type: Output
385
385
  }] } });
386
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1kZXRhaWwtY29udGVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL3Rhc2svc3JjL2xpYi9jb21wb25lbnRzL3Rhc2stZGV0YWlsLWNvbnRlbnQvdGFzay1kZXRhaWwtY29udGVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL3Rhc2svc3JjL2xpYi9jb21wb25lbnRzL3Rhc2stZGV0YWlsLWNvbnRlbnQvdGFzay1kZXRhaWwtY29udGVudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRS9DLE9BQU8sRUFBQyxlQUFlLEVBQW1CLE1BQU0scUJBQXFCLENBQUM7QUFFdEUsT0FBTyxFQUVMLFlBQVksRUFDWixpQkFBaUIsR0FLbEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQWdCLHFCQUFxQixFQUFnQixNQUFNLGlCQUFpQixDQUFDO0FBRXBGLE9BQU8sRUFDTCwyQkFBMkIsRUFJM0IsaUJBQWlCLEdBTWxCLE1BQU0sdUJBQXVCLENBQUM7QUFJL0IsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBYyxZQUFZLEVBQUUsU0FBUyxFQUFFLElBQUksR0FBRSxNQUFNLE1BQU0sQ0FBQztBQUdu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QUFrQjtzQkFBckMsS0FBSztnQkFLYyxXQUFXO3NCQUE5QixLQUFLO2dCQUlvQixlQUFlO3NCQUF4QyxNQUFNO2dCQUNtQixVQUFVO3NCQUFuQyxNQUFNO2dCQUNtQixZQUFZO3NCQUFyQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1JlY2VudGx5Vmlld2VkMTZ9IGZyb20gJ0BjYXJib24vaWNvbnMnO1xuaW1wb3J0IHtGb3JtaW9Gb3JtfSBmcm9tICdAZm9ybWlvL2FuZ3VsYXInO1xuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtQZXJtaXNzaW9uU2VydmljZX0gZnJvbSAnQHZhbHRpbW8vYWNjZXNzLWNvbnRyb2wnO1xuaW1wb3J0IHtcbiAgRm9ybWlvQ29tcG9uZW50LFxuICBGb3JtSW9Nb2R1bGUsXG4gIEZvcm1pb09wdGlvbnNJbXBsLFxuICBGb3JtSW9TdGF0ZVNlcnZpY2UsXG4gIEZvcm1pb1N1Ym1pc3Npb24sXG4gIFZhbHRpbW9Gb3JtaW9PcHRpb25zLFxuICBWYWx0aW1vTW9kYWxTZXJ2aWNlLFxufSBmcm9tICdAdmFsdGltby9jb21wb25lbnRzJztcbmltcG9ydCB7Q29uZmlnU2VydmljZSwgRk9STV9WSUVXX01PREVMX1RPS0VOLCBGb3JtVmlld01vZGVsfSBmcm9tICdAdmFsdGltby9jb25maWcnO1xuaW1wb3J0IHtEb2N1bWVudFNlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL2RvY3VtZW50JztcbmltcG9ydCB7XG4gIEZPUk1fQ1VTVE9NX0NPTVBPTkVOVF9UT0tFTixcbiAgRm9ybUN1c3RvbUNvbXBvbmVudENvbmZpZyxcbiAgRm9ybUZsb3dDb21wb25lbnQsXG4gIEZvcm1TdWJtaXNzaW9uUmVzdWx0LFxuICBQcm9jZXNzTGlua01vZHVsZSxcbiAgUHJvY2Vzc0xpbmtTZXJ2aWNlLFxuICBUYXNrUHJvY2Vzc0xpbmtSZXN1bHQsXG4gIFRhc2tQcm9jZXNzTGlua1R5cGUsXG4gIFRhc2tXaXRoUHJvY2Vzc0xpbmssXG4gIFVybFJlc29sdmVyU2VydmljZSxcbn0gZnJvbSAnQHZhbHRpbW8vcHJvY2Vzcy1saW5rJztcbmltcG9ydCB7SWNvblNlcnZpY2V9IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuaW1wb3J0IHtOR1hMb2dnZXJ9IGZyb20gJ25neC1sb2dnZXInO1xuaW1wb3J0IHtUb2FzdHJTZXJ2aWNlfSBmcm9tICduZ3gtdG9hc3RyJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgc3dpdGNoTWFwLCB0YWtlLH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0ludGVybWVkaWF0ZVN1Ym1pc3Npb24sIFRhc2t9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge1Rhc2tJbnRlcm1lZGlhdGVTYXZlU2VydmljZSwgVGFza1NlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7Q0FOX0FTU0lHTl9UQVNLX1BFUk1JU1NJT04sIFRBU0tfREVUQUlMX1BFUk1JU1NJT05fUkVTT1VSQ0V9IGZyb20gJy4uLy4uL3Rhc2stcGVybWlzc2lvbnMnO1xuaW1wb3J0IHsgRm9ybUN1c3RvbUNvbXBvbmVudCB9IGZyb20gJ0B2YWx0aW1vL3Byb2Nlc3MtbGluayc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tdGFzay1kZXRhaWwtY29udGVudCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90YXNrLWRldGFpbC1jb250ZW50LmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1Jb01vZHVsZSwgVHJhbnNsYXRlTW9kdWxlLCBQcm9jZXNzTGlua01vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIFRhc2tEZXRhaWxDb250ZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICBAVmlld0NoaWxkKCdmb3JtJykgZm9ybTogRm9ybWlvQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdmb3JtVmlld01vZGVsQ29tcG9uZW50Jywge3N0YXRpYzogZmFsc2UsIHJlYWQ6IFZpZXdDb250YWluZXJSZWZ9KVxuICBwdWJsaWMgZm9ybVZpZXdNb2RlbER5bmFtaWNDb250YWluZXI6IFZpZXdDb250YWluZXJSZWY7XG4gIEBWaWV3Q2hpbGQoJ2Zvcm1GbG93JykgcHVibGljIGZvcm1GbG93OiBGb3JtRmxvd0NvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnZm9ybUN1c3RvbUNvbXBvbmVudCcsIHtzdGF0aWM6IGZhbHNlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmfSlcbiAgcHVibGljIGZvcm1DdXN0b21Db21wb25lbnREeW5hbWljQ29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xuICBASW5wdXQoKSBwdWJsaWMgc2V0IHRhc2sodmFsdWU6IFRhc2sgfCBudWxsKSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuXG4gICAgdGhpcy5sb2FkVGFza0RldGFpbHModmFsdWUpO1xuICB9XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgdGFza0FuZFByb2Nlc3NMaW5rKHZhbHVlOiBUYXNrV2l0aFByb2Nlc3NMaW5rIHwgbnVsbCkge1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcblxuICAgIHRoaXMubG9hZFRhc2tEZXRhaWxzKHZhbHVlLnRhc2sgYXMgYW55LCB2YWx1ZS5wcm9jZXNzTGlua0FjdGl2aXR5UmVzdWx0KTtcbiAgfVxuICBASW5wdXQoKSBwdWJsaWMgc2V0IG1vZGFsQ2xvc2VkKF86IGJvb2xlYW4pIHtcbiAgICAvLyBzYXZlIGZvcm0gZmxvdyBkYXRhIG9uIG1vZGFsIGNsb3NlZFxuICAgIGlmICh0aGlzLmZvcm1GbG93KSB0aGlzLmZvcm1GbG93LnNhdmVEYXRhKCk7XG4gIH1cbiAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBjbG9zZU1vZGFsRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgZm9ybVN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBhY3RpdmVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNhbkFzc2lnblVzZXJUb1Rhc2skID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSBlcnJvck1lc3NhZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IGZvcm1EZWZpbml0aW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Rm9ybWlvRm9ybSB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgZm9ybURlZmluaXRpb25JZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgZm9ybUZsb3dJbnN0YW5jZUlkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSBmb3JtaW9PcHRpb25zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VmFsdGltb0Zvcm1pb09wdGlvbnMgfCBudWxsPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IGZvcm1Jb0Zvcm1EYXRhJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IGZvcm1OYW1lJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSBsb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIHB1YmxpYyByZWFkb25seSBwYWdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IHN1Ym1pc3Npb24kID0gdGhpcy50YXNrSW50ZXJtZWRpYXRlU2F2ZVNlcnZpY2Uuc3VibWlzc2lvbiQ7XG4gIHB1YmxpYyByZWFkb25seSB0YXNrJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFzayB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgdGFza0luc3RhbmNlSWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcHVibGljIGludGVybWVkaWF0ZVNhdmVFbmFibGVkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdGFza1Byb2Nlc3NMaW5rVHlwZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRhc2tQcm9jZXNzTGlua1R5cGUgfCBudWxsPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IHByb2Nlc3NMaW5rSXNGb3JtJCA9IHRoaXMuX3Rhc2tQcm9jZXNzTGlua1R5cGUkLnBpcGUoXG4gICAgbWFwKCh0eXBlOiBzdHJpbmcgfCBudWxsKSA9PiB0eXBlID09PSAnZm9ybScpXG4gICk7XG4gIHB1YmxpYyByZWFkb25seSBwcm9jZXNzTGlua0lzRm9ybVZpZXdNb2RlbCQgPSB0aGlzLl90YXNrUHJvY2Vzc0xpbmtUeXBlJC5waXBlKFxuICAgIG1hcCgodHlwZTogc3RyaW5nIHwgbnVsbCkgPT4gdHlwZSA9PT0gJ2Zvcm0tdmlldy1tb2RlbCcpXG4gICk7XG4gIHB1YmxpYyByZWFkb25seSBwcm9jZXNzTGlua0lzRm9ybUZsb3ckID0gdGhpcy5fdGFza1Byb2Nlc3NMaW5rVHlwZSQucGlwZShcbiAgICBtYXAoKHR5cGU6IHN0cmluZyB8IG51bGwpID0+IHR5cGUgPT09ICdmb3JtLWZsb3cnKVxuICApO1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvY2Vzc0xpbmtJc1VpQ29tcG9uZW50JCA9IHRoaXMuX3Rhc2tQcm9jZXNzTGlua1R5cGUkLnBpcGUoXG4gICAgbWFwKCh0eXBlOiBzdHJpbmcgfCBudWxsKSA9PiB0eXBlID09PSAndWktY29tcG9uZW50JylcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9wcm9jZXNzTGlua0lkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Zvcm1DdXN0b21Db21wb25lbnRDb25maWckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxGb3JtQ3VzdG9tQ29tcG9uZW50Q29uZmlnIHwge30+KHt9KTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF92aWV3SW5pdGlhbGl6ZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHVibGljIGdldCB2aWV3SW5pdGlhbGl6ZWQkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl92aWV3SW5pdGlhbGl6ZWQkLnBpcGUoZmlsdGVyKGluaXRpYWxpemVkID0+IGluaXRpYWxpemVkKSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudFNlcnZpY2U6IERvY3VtZW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGljb25TZXJ2aWNlOiBJY29uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlcjogTkdYTG9nZ2VyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbW9kYWxTZXJ2aWNlOiBWYWx0aW1vTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGVybWlzc2lvblNlcnZpY2U6IFBlcm1pc3Npb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvY2Vzc0xpbmtTZXJ2aWNlOiBQcm9jZXNzTGlua1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0YXRlU2VydmljZTogRm9ybUlvU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGFza0ludGVybWVkaWF0ZVNhdmVTZXJ2aWNlOiBUYXNrSW50ZXJtZWRpYXRlU2F2ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0YXNrU2VydmljZTogVGFza1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRk9STV9WSUVXX01PREVMX1RPS0VOKSBwcml2YXRlIHJlYWRvbmx5IGZvcm1WaWV3TW9kZWw6IEZvcm1WaWV3TW9kZWwsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChGT1JNX0NVU1RPTV9DT01QT05FTlRfVE9LRU4pIHByaXZhdGUgcmVhZG9ubHkgZm9ybUN1c3RvbUNvbXBvbmVudENvbmZpZzogRm9ybUN1c3RvbUNvbXBvbmVudENvbmZpZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHVybFJlc29sdmVyU2VydmljZTogVXJsUmVzb2x2ZXJTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuaW50ZXJtZWRpYXRlU2F2ZUVuYWJsZWQgPSAhIXRoaXMuY29uZmlnU2VydmljZS5mZWF0dXJlVG9nZ2xlcz8uZW5hYmxlSW50ZXJtZWRpYXRlU2F2ZTtcblxuICAgIHRoaXMuaWNvblNlcnZpY2UucmVnaXN0ZXJBbGwoW1JlY2VudGx5Vmlld2VkMTZdKTtcblxuICAgIGNvbnN0IG9wdGlvbnMgPSBuZXcgRm9ybWlvT3B0aW9uc0ltcGwoKTtcbiAgICBvcHRpb25zLmRpc2FibGVBbGVydHMgPSB0cnVlO1xuICAgIHRoaXMuZm9ybWlvT3B0aW9ucyQubmV4dChvcHRpb25zKTtcbiAgICB0aGlzLl9mb3JtQ3VzdG9tQ29tcG9uZW50Q29uZmlnJC5uZXh0KGZvcm1DdXN0b21Db21wb25lbnRDb25maWcpO1xuICB9XG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5QZXJtaXNzaW9uU3Vic2NyaXB0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMudGFza0ludGVybWVkaWF0ZVNhdmVTZXJ2aWNlLnNldFN1Ym1pc3Npb24oe30pO1xuICAgIHRoaXMuX3ZpZXdJbml0aWFsaXplZCQubmV4dChmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3ZpZXdJbml0aWFsaXplZCQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBvblN1Ym1pdChzdWJtaXNzaW9uOiBGb3JtaW9TdWJtaXNzaW9uKTogdm9pZCB7XG4gICAgaWYgKHN1Ym1pc3Npb24uZGF0YSkge1xuICAgICAgdGhpcy50YXNrSW50ZXJtZWRpYXRlU2F2ZVNlcnZpY2Uuc2V0Rm9ybUlvRm9ybURhdGEoc3VibWlzc2lvbi5kYXRhKTtcbiAgICAgIHRoaXMuZm9ybUlvRm9ybURhdGEkLm5leHQoc3VibWlzc2lvbi5kYXRhKTtcbiAgICB9XG5cbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLl9wcm9jZXNzTGlua0lkJCwgdGhpcy5fdGFza1Byb2Nlc3NMaW5rVHlwZSQsIHRoaXMudGFzayRdKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKFtwcm9jZXNzTGlua0lkLCB0YXNrUHJvY2Vzc0xpbmtUeXBlLCB0YXNrXSkgPT4ge1xuICAgICAgICBpZiAodGFza1Byb2Nlc3NMaW5rVHlwZSA9PT0gJ2Zvcm0nKSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3NMaW5rSWQpIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0xpbmtTZXJ2aWNlXG4gICAgICAgICAgICAgIC5zdWJtaXRGb3JtKHByb2Nlc3NMaW5rSWQsIHN1Ym1pc3Npb24uZGF0YSwgdGFzaz8uYnVzaW5lc3NLZXksIHRhc2s/LmlkKVxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiAoXzogRm9ybVN1Ym1pc3Npb25SZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGVUYXNrKHRhc2spO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9ycyA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uc2hvd0Vycm9ycyhlcnJvcnMpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0YXNrUHJvY2Vzc0xpbmtUeXBlID09PSAnZm9ybS12aWV3LW1vZGVsJykge1xuICAgICAgICAgIHRoaXMuY29tcGxldGVUYXNrKHRhc2spO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjb21wbGV0ZVRhc2sodGFzazogVGFzayB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIXRhc2spIHJldHVybjtcblxuICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MoXG4gICAgICBgJHt0YXNrLm5hbWV9ICR7dGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3Rhc2tEZXRhaWwudGFza0NvbXBsZXRlZCcpfWBcbiAgICApO1xuICAgIHRoaXMudGFzayQubmV4dChudWxsKTtcbiAgICB0aGlzLmZvcm1TdWJtaXQuZW1pdCgpO1xuICAgIHRoaXMuY2xvc2VNb2RhbEV2ZW50LmVtaXQoKTtcbiAgICB0aGlzLmFjdGl2ZUNoYW5nZS5lbWl0KGZhbHNlKTtcblxuICAgIGlmICh0aGlzLmZvcm1GbG93KSB0aGlzLmZvcm1GbG93LnNhdmVEYXRhKCk7XG4gIH1cblxuICBwdWJsaWMgb25DaGFuZ2UoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGlmIChldmVudC5kYXRhKSB7XG4gICAgICB0aGlzLnRhc2tJbnRlcm1lZGlhdGVTYXZlU2VydmljZS5zZXRGb3JtSW9Gb3JtRGF0YShldmVudC5kYXRhKTtcbiAgICAgIHRoaXMuZm9ybUlvRm9ybURhdGEkLm5leHQoZXZlbnQuZGF0YSk7XG4gICAgICB0aGlzLmFjdGl2ZUNoYW5nZS5lbWl0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkZvcm1GbG93Q2hhbmdlRXZlbnQoKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVDaGFuZ2UuZW1pdCh0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFRhc2tEZXRhaWxzKHRhc2s6IFRhc2ssIHByb2Nlc3NMaW5rPzogVGFza1Byb2Nlc3NMaW5rUmVzdWx0KTogdm9pZCB7XG4gICAgdGhpcy5yZXNldFRhc2tQcm9jZXNzTGlua1R5cGUoKTtcbiAgICB0aGlzLnJlc2V0Rm9ybURlZmluaXRpb24oKTtcblxuICAgIHRoaXMudGFza0luc3RhbmNlSWQkLm5leHQodGFzay5pZCk7XG5cbiAgICBpZiAoIXByb2Nlc3NMaW5rKSB7XG4gICAgICB0aGlzLmdldFRhc2tQcm9jZXNzTGluayh0YXNrLmlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRUYXNrUHJvY2Vzc0xpbmsocHJvY2Vzc0xpbmspO1xuICAgIH1cblxuICAgIHRoaXMuc2V0RG9jdW1lbnREZWZpbml0aW9uTmFtZUluU2VydmljZSh0YXNrKTtcbiAgICBjb25zdCBkb2N1bWVudElkID0gdGFzay5idXNpbmVzc0tleTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5zZXREb2N1bWVudElkKGRvY3VtZW50SWQpO1xuXG4gICAgdGhpcy50YXNrJC5uZXh0KHRhc2spO1xuICAgIHRoaXMucGFnZSQubmV4dCh7XG4gICAgICB0aXRsZTogdGFzay5uYW1lLFxuICAgICAgc3VidGl0bGU6IGAke3RoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd0YXNrRGV0YWlsLnRhc2tDcmVhdGVkJyl9ICR7dGFzay5jcmVhdGVkfWAsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEN1cnJlbnRQcm9ncmVzcyhmb3JtVmlld01vZGVsQ29tcG9uZW50UmVmPzogQ29tcG9uZW50UmVmPGFueT4pOiB2b2lkIHtcbiAgICB0aGlzLnRhc2tJbnN0YW5jZUlkJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcih2YWx1ZSA9PiAhIXZhbHVlKSxcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgc3dpdGNoTWFwKCh0YXNrSW5zdGFuY2VJZDogc3RyaW5nIHwgbnVsbCkgPT5cbiAgICAgICAgICB0aGlzLnRhc2tJbnRlcm1lZGlhdGVTYXZlU2VydmljZS5nZXRJbnRlcm1lZGlhdGVTdWJtaXNzaW9uKHRhc2tJbnN0YW5jZUlkID8/ICcnKVxuICAgICAgICApXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKGludGVybWVkaWF0ZVN1Ym1pc3Npb246IEludGVybWVkaWF0ZVN1Ym1pc3Npb24pID0+IHtcbiAgICAgICAgICB0aGlzLnRhc2tJbnRlcm1lZGlhdGVTYXZlU2VydmljZS5zZXRTdWJtaXNzaW9uKHtcbiAgICAgICAgICAgIGRhdGE6IGludGVybWVkaWF0ZVN1Ym1pc3Npb24/LnN1Ym1pc3Npb24gfHwge30sXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoZm9ybVZpZXdNb2RlbENvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgZm9ybVZpZXdNb2RlbENvbXBvbmVudFJlZi5pbnN0YW5jZS5zdWJtaXNzaW9uID0ge1xuICAgICAgICAgICAgICBkYXRhOiBpbnRlcm1lZGlhdGVTdWJtaXNzaW9uLnN1Ym1pc3Npb24sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUYXNrUHJvY2Vzc0xpbmsodGFza0lkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnRhc2tTZXJ2aWNlLmdldFRhc2tQcm9jZXNzTGluayh0YXNrSWQpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiByZXMgPT4ge1xuICAgICAgICB0aGlzLnNldFRhc2tQcm9jZXNzTGluayhyZXMpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBfID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldFRhc2tQcm9jZXNzTGluayhwcm9jZXNzTGlua1Jlc3VsdDogVGFza1Byb2Nlc3NMaW5rUmVzdWx0IHwgbnVsbCk6IHZvaWQge1xuICAgIGlmIChwcm9jZXNzTGlua1Jlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChwcm9jZXNzTGlua1Jlc3VsdD8udHlwZSkge1xuICAgICAgICBjYXNlICdmb3JtJzpcbiAgICAgICAgICB0aGlzLl90YXNrUHJvY2Vzc0xpbmtUeXBlJC5uZXh0KCdmb3JtJyk7XG4gICAgICAgICAgdGhpcy5fcHJvY2Vzc0xpbmtJZCQubmV4dChwcm9jZXNzTGlua1Jlc3VsdC5wcm9jZXNzTGlua0lkKTtcbiAgICAgICAgICBpZiAodGhpcy5pbnRlcm1lZGlhdGVTYXZlRW5hYmxlZCkgdGhpcy5nZXRDdXJyZW50UHJvZ3Jlc3MoKTtcbiAgICAgICAgICB0aGlzLnNldEZvcm1EZWZpbml0aW9uKHByb2Nlc3NMaW5rUmVzdWx0LnByb3BlcnRpZXMucHJlZmlsbGVkRm9ybSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2Zvcm0tZmxvdyc6XG4gICAgICAgICAgdGhpcy5fdGFza1Byb2Nlc3NMaW5rVHlwZSQubmV4dCgnZm9ybS1mbG93Jyk7XG4gICAgICAgICAgdGhpcy5mb3JtRmxvd0luc3RhbmNlSWQkLm5leHQocHJvY2Vzc0xpbmtSZXN1bHQucHJvcGVydGllcy5mb3JtRmxvd0luc3RhbmNlSWQgPz8gJycpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdmb3JtLXZpZXctbW9kZWwnOlxuICAgICAgICAgIHRoaXMuX3Rhc2tQcm9jZXNzTGlua1R5cGUkLm5leHQoJ2Zvcm0tdmlldy1tb2RlbCcpO1xuICAgICAgICAgIHRoaXMuX3Byb2Nlc3NMaW5rSWQkLm5leHQocHJvY2Vzc0xpbmtSZXN1bHQucHJvY2Vzc0xpbmtJZCk7XG4gICAgICAgICAgdGhpcy5mb3JtRGVmaW5pdGlvbiQubmV4dChwcm9jZXNzTGlua1Jlc3VsdC5wcm9wZXJ0aWVzLmZvcm1EZWZpbml0aW9uKTtcbiAgICAgICAgICB0aGlzLmZvcm1OYW1lJC5uZXh0KHByb2Nlc3NMaW5rUmVzdWx0LnByb3BlcnRpZXMuZm9ybU5hbWUgPz8gJycpO1xuICAgICAgICAgIHRoaXMuc2V0Rm9ybVZpZXdNb2RlbENvbXBvbmVudCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd1cmwnOlxuICAgICAgICAgIHRoaXMuX3Rhc2tQcm9jZXNzTGlua1R5cGUkLm5leHQoJ3VybCcpO1xuICAgICAgICAgIHRoaXMuX3Byb2Nlc3NMaW5rSWQkLm5leHQocHJvY2Vzc0xpbmtSZXN1bHQucHJvY2Vzc0xpbmtJZCk7XG4gICAgICAgICAgY29tYmluZUxhdGVzdChbdGhpcy5wcm9jZXNzTGlua1NlcnZpY2UuZ2V0VmFyaWFibGVzKCksIHRoaXMudGFzayRdKVxuICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKFt2YXJpYWJsZXMsIHRhc2tdKSA9PiB7XG4gICAgICAgICAgICAgIGxldCB1cmwgPSB0aGlzLnVybFJlc29sdmVyU2VydmljZS5yZXNvbHZlVXJsVmFyaWFibGVzKFxuICAgICAgICAgICAgICAgIHByb2Nlc3NMaW5rUmVzdWx0LnByb3BlcnRpZXMudXJsLFxuICAgICAgICAgICAgICAgIHZhcmlhYmxlcy52YXJpYWJsZXNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgd2luZG93Lm9wZW4odXJsLCAnX2JsYW5rJykuZm9jdXMoKTtcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzTGlua1NlcnZpY2VcbiAgICAgICAgICAgICAgICAuc3VibWl0VVJMUHJvY2Vzc0xpbmsocHJvY2Vzc0xpbmtSZXN1bHQucHJvY2Vzc0xpbmtJZCwgdGFzay5idXNpbmVzc0tleSwgdGFzay5pZClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGVUYXNrKHRhc2spO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3VpLWNvbXBvbmVudCc6XG4gICAgICAgICAgdGhpcy5fdGFza1Byb2Nlc3NMaW5rVHlwZSQubmV4dCgndWktY29tcG9uZW50Jyk7XG4gICAgICAgICAgdGhpcy5fcHJvY2Vzc0xpbmtJZCQubmV4dChwcm9jZXNzTGlua1Jlc3VsdC5wcm9jZXNzTGlua0lkKTtcbiAgICAgICAgICB0aGlzLmZvcm1EZWZpbml0aW9uJC5uZXh0KG51bGwpO1xuICAgICAgICAgIHRoaXMuZm9ybU5hbWUkLm5leHQoJycpO1xuICAgICAgICAgIHRoaXMuc2V0Rm9ybUN1c3RvbUNvbXBvbmVudChwcm9jZXNzTGlua1Jlc3VsdC5wcm9wZXJ0aWVzLmNvbXBvbmVudEtleSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvcGVuUGVybWlzc2lvblN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMudGFzayQuc3Vic2NyaWJlKHRhc2sgPT4ge1xuICAgICAgICBpZiAodGFzaykge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdDaGVja2luZyBpZiB1c2VyIGFsbG93ZWQgdG8gYXNzaWduIGEgdXNlciB0byBUYXNrIHdpdGggaWQ6JywgdGFzay5pZCk7XG4gICAgICAgICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZVxuICAgICAgICAgICAgLnJlcXVlc3RQZXJtaXNzaW9uKENBTl9BU1NJR05fVEFTS19QRVJNSVNTSU9OLCB7XG4gICAgICAgICAgICAgIHJlc291cmNlOiBUQVNLX0RFVEFJTF9QRVJNSVNTSU9OX1JFU09VUkNFLnRhc2ssXG4gICAgICAgICAgICAgIGlkZW50aWZpZXI6IHRhc2suaWQsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoYWxsb3dlZDogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmNhbkFzc2lnblVzZXJUb1Rhc2skLm5leHQoYWxsb3dlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnUmVzZXQgaXMgdXNlciBhbGxvd2VkIHRvIGFzc2lnbiBhIHVzZXIgdG8gVGFzayBhcyB0YXNrIGlzIG51bGwnKTtcbiAgICAgICAgICB0aGlzLmNhbkFzc2lnblVzZXJUb1Rhc2skLm5leHQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNldEZvcm1EZWZpbml0aW9uKGZvcm1EZWZpbml0aW9uOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl90YXNrUHJvY2Vzc0xpbmtUeXBlJC5uZXh0KCdmb3JtJyk7XG4gICAgdGhpcy5mb3JtRGVmaW5pdGlvbiQubmV4dChmb3JtRGVmaW5pdGlvbik7XG4gIH1cblxuICBwcml2YXRlIHNldEZvcm1WaWV3TW9kZWxDb21wb25lbnQoKSB7XG4gICAgdGhpcy5fdmlld0luaXRpYWxpemVkJC5zdWJzY3JpYmUoKHZpZXdJbml0aWFsaXplZCkgPT4ge1xuICAgICAgaWYgKHZpZXdJbml0aWFsaXplZCkge1xuICAgICAgICB0aGlzLmZvcm1WaWV3TW9kZWxEeW5hbWljQ29udGFpbmVyLmNsZWFyKCk7XG4gICAgICAgIGlmICghdGhpcy5mb3JtVmlld01vZGVsKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGZvcm1WaWV3TW9kZWxDb21wb25lbnQgPSB0aGlzLmZvcm1WaWV3TW9kZWxEeW5hbWljQ29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChcbiAgICAgICAgICB0aGlzLmZvcm1WaWV3TW9kZWwuY29tcG9uZW50XG4gICAgICAgICk7XG4gICAgICAgIGZvcm1WaWV3TW9kZWxDb21wb25lbnQuaW5zdGFuY2UuZm9ybSA9IHRoaXMuZm9ybURlZmluaXRpb24kLmdldFZhbHVlKCk7XG4gICAgICAgIGZvcm1WaWV3TW9kZWxDb21wb25lbnQuaW5zdGFuY2UuZm9ybU5hbWUgPSB0aGlzLmZvcm1OYW1lJC5nZXRWYWx1ZSgpO1xuICAgICAgICBmb3JtVmlld01vZGVsQ29tcG9uZW50Lmluc3RhbmNlLnRhc2tJbnN0YW5jZUlkID0gdGhpcy50YXNrSW5zdGFuY2VJZCQuZ2V0VmFsdWUoKTtcbiAgICAgICAgZm9ybVZpZXdNb2RlbENvbXBvbmVudC5pbnN0YW5jZS5pc1N0YXJ0Rm9ybSA9IGZhbHNlO1xuXG4gICAgICAgIGZvcm1WaWV3TW9kZWxDb21wb25lbnQuaW5zdGFuY2UuZm9ybVN1Ym1pdFxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnRhc2skKVxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKCh0YXNrOiBUYXNrIHwgbnVsbCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb21wbGV0ZVRhc2sodGFzayk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuaW50ZXJtZWRpYXRlU2F2ZUVuYWJsZWQpIHtcbiAgICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIGZvcm1WaWV3TW9kZWxDb21wb25lbnQuaW5zdGFuY2Uuc3VibWlzc2lvbiQuc3Vic2NyaWJlKHN1Ym1pc3Npb24gPT4ge1xuICAgICAgICAgICAgICB0aGlzLnRhc2tJbnRlcm1lZGlhdGVTYXZlU2VydmljZS5zZXRTdWJtaXNzaW9uKHN1Ym1pc3Npb24pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5zdWJtaXNzaW9uJC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLnN1YnNjcmliZSgoc3VibWlzc2lvbj8pID0+IHtcbiAgICAgICAgICAgICAgaWYgKHN1Ym1pc3Npb24/LmRhdGEgJiYgT2JqZWN0LmtleXMoc3VibWlzc2lvbi5kYXRhKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBmb3JtVmlld01vZGVsQ29tcG9uZW50Lmluc3RhbmNlLnN1Ym1pc3Npb24gPSB7ZGF0YToge319O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5nZXRDdXJyZW50UHJvZ3Jlc3MoZm9ybVZpZXdNb2RlbENvbXBvbmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9ybUN1c3RvbUNvbXBvbmVudChmb3JtQ3VzdG9tQ29tcG9uZW50S2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl92aWV3SW5pdGlhbGl6ZWQkLnN1YnNjcmliZSgodmlld0luaXRpYWxpemVkKSA9PiB7XG4gICAgICBpZiAodmlld0luaXRpYWxpemVkKSB7XG4gICAgICAgIHRoaXMuZm9ybUN1c3RvbUNvbXBvbmVudER5bmFtaWNDb250YWluZXIuY2xlYXIoKTtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1DdXN0b21Db21wb25lbnRDb25maWcpIHJldHVybjtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgdGhpcy5fZm9ybUN1c3RvbUNvbXBvbmVudENvbmZpZyQuc3Vic2NyaWJlKFxuICAgICAgICAgICAgKGZvcm1DdXN0b21Db21wb25lbnRDb25maWcpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY3VzdG9tQ29tcG9uZW50ID0gZm9ybUN1c3RvbUNvbXBvbmVudENvbmZpZ1tmb3JtQ3VzdG9tQ29tcG9uZW50S2V5XTtcbiAgICAgICAgICAgICAgY29uc3QgcmVuZGVyZWRDb21wb25lbnQgPSB0aGlzLmZvcm1DdXN0b21Db21wb25lbnREeW5hbWljQ29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChjdXN0b21Db21wb25lbnQpIGFzIENvbXBvbmVudFJlZjxGb3JtQ3VzdG9tQ29tcG9uZW50PjtcblxuICAgICAgICAgICAgICByZW5kZXJlZENvbXBvbmVudC5pbnN0YW5jZS50YXNrSW5zdGFuY2VJZCA9IHRoaXMudGFza0luc3RhbmNlSWQkLnZhbHVlO1xuICAgICAgICAgICAgICByZW5kZXJlZENvbXBvbmVudC5pbnN0YW5jZS5zdWJtaXRFdmVudC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VNb2RhbEV2ZW50LmVtaXQoKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldEZvcm1EZWZpbml0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybURlZmluaXRpb24kLm5leHQobnVsbCk7XG4gICAgdGhpcy5sb2FkaW5nJC5uZXh0KHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldFRhc2tQcm9jZXNzTGlua1R5cGUoKTogdm9pZCB7XG4gICAgdGhpcy5fdGFza1Byb2Nlc3NMaW5rVHlwZSQubmV4dChudWxsKTtcbiAgICB0aGlzLl9wcm9jZXNzTGlua0lkJC5uZXh0KG51bGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREb2N1bWVudERlZmluaXRpb25OYW1lSW5TZXJ2aWNlKHRhc2s6IFRhc2spOiB2b2lkIHtcbiAgICB0aGlzLmRvY3VtZW50U2VydmljZVxuICAgICAgLmdldFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25Gcm9tUHJvY2Vzc0luc3RhbmNlSWQodGFzay5wcm9jZXNzSW5zdGFuY2VJZClcbiAgICAgIC5zdWJzY3JpYmUocHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbiA9PiB7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPSBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uLmlkLmRvY3VtZW50RGVmaW5pdGlvbklkLm5hbWU7XG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLnNldERvY3VtZW50RGVmaW5pdGlvbk5hbWUoZG9jdW1lbnREZWZpbml0aW9uTmFtZSk7XG4gICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnNldERvY3VtZW50RGVmaW5pdGlvbk5hbWUoZG9jdW1lbnREZWZpbml0aW9uTmFtZSk7XG4gICAgICB9KTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48bmctY29udGFpbmVyXG4gICpuZ0lmPVwie1xuICAgIGxvYWRpbmc6IGxvYWRpbmckIHwgYXN5bmMsXG4gICAgcGFnZTogcGFnZSQgfCBhc3luYyxcbiAgICB0YXNrOiB0YXNrJCB8IGFzeW5jLFxuICAgIHRhc2tJZDogdGFza0luc3RhbmNlSWQkIHwgYXN5bmMsXG4gICAgZm9ybURlZmluaXRpb246IGZvcm1EZWZpbml0aW9uJCB8IGFzeW5jLFxuICAgIGZvcm1EZWZpbml0aW9uSWQ6IGZvcm1EZWZpbml0aW9uSWQkIHwgYXN5bmMsXG4gICAgZm9ybU5hbWU6IGZvcm1OYW1lJCB8IGFzeW5jLFxuICAgIGZvcm1Jb0Zvcm1EYXRhOiBmb3JtSW9Gb3JtRGF0YSQgfCBhc3luYyxcbiAgICBzdWJtaXNzaW9uOiBzdWJtaXNzaW9uJCB8IGFzeW5jLFxuICAgIHByb2Nlc3NMaW5rSXNGb3JtOiBwcm9jZXNzTGlua0lzRm9ybSQgfCBhc3luYyxcbiAgICBwcm9jZXNzTGlua0lzRm9ybVZpZXdNb2RlbDogcHJvY2Vzc0xpbmtJc0Zvcm1WaWV3TW9kZWwkIHwgYXN5bmMsXG4gICAgcHJvY2Vzc0xpbmtJc1VpQ29tcG9uZW50OiBwcm9jZXNzTGlua0lzVWlDb21wb25lbnQkIHwgYXN5bmMsXG4gICAgZm9ybWlvT3B0aW9uczogZm9ybWlvT3B0aW9ucyQgfCBhc3luYyxcbiAgICBwcm9jZXNzTGlua0lzRm9ybUZsb3c6IHByb2Nlc3NMaW5rSXNGb3JtRmxvdyQgfCBhc3luYyxcbiAgICBmb3JtRmxvd0luc3RhbmNlSWQ6IGZvcm1GbG93SW5zdGFuY2VJZCQgfCBhc3luYyxcbiAgICBlcnJvck1lc3NhZ2U6IGVycm9yTWVzc2FnZSQgfCBhc3luYyxcbiAgICBjYW5Bc3NpZ25Vc2VyVG9UYXNrOiBjYW5Bc3NpZ25Vc2VyVG9UYXNrJCB8IGFzeW5jLFxuICB9IGFzIG9ic1wiXG4+XG4gIDx2YWx0aW1vLWZvcm0taW9cbiAgICAjZm9ybVxuICAgICpuZ0lmPVwib2JzLmZvcm1EZWZpbml0aW9uICYmIG9icy5wcm9jZXNzTGlua0lzRm9ybVwiXG4gICAgW2Zvcm1dPVwib2JzLmZvcm1EZWZpbml0aW9uXCJcbiAgICBbc3VibWlzc2lvbl09XCJvYnMuc3VibWlzc2lvblwiXG4gICAgKHN1Ym1pdCk9XCJvblN1Ym1pdCgkZXZlbnQpXCJcbiAgICAoY2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudClcIlxuICAgIFtvcHRpb25zXT1cIm9icy5mb3JtaW9PcHRpb25zXCJcbiAgPjwvdmFsdGltby1mb3JtLWlvPlxuXG4gIDx2YWx0aW1vLWZvcm0tZmxvd1xuICAgICNmb3JtRmxvd1xuICAgICpuZ0lmPVwib2JzLnByb2Nlc3NMaW5rSXNGb3JtRmxvd1wiXG4gICAgW2Zvcm1Jb0Zvcm1EYXRhXT1cImZvcm1Jb0Zvcm1EYXRhJFwiXG4gICAgW2Zvcm1GbG93SW5zdGFuY2VJZF09XCJvYnMuZm9ybUZsb3dJbnN0YW5jZUlkXCJcbiAgICAoZm9ybUZsb3dDb21wbGV0ZSk9XCJjb21wbGV0ZVRhc2sob2JzLnRhc2spXCJcbiAgICAoZm9ybUZsb3dDaGFuZ2UpPVwib25Gb3JtRmxvd0NoYW5nZUV2ZW50KClcIlxuICA+PC92YWx0aW1vLWZvcm0tZmxvdz5cblxuICA8ZGl2ICpuZ0lmPVwib2JzLmxvYWRpbmdcIiBjbGFzcz1cInRleHQtYmxhY2sgbWItMCBwLTMgdGV4dC1jZW50ZXJcIj5cbiAgICB7eyAnZm9ybU1hbmFnZW1lbnQubG9hZGluZycgfCB0cmFuc2xhdGUgfX1cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgICpuZ0lmPVwiXG4gICAgICBvYnMubG9hZGluZyA9PT0gZmFsc2UgJiYgIW9icy5mb3JtRGVmaW5pdGlvbiAmJiAhb2JzLmZvcm1GbG93SW5zdGFuY2VJZCAmJiAhb2JzLmVycm9yTWVzc2FnZSAmJiAhb2JzLnByb2Nlc3NMaW5rSXNVaUNvbXBvbmVudFxuICAgIFwiXG4gICAgY2xhc3M9XCJiZy13YXJuaW5nIHRleHQtYmxhY2sgbWItMCBwLTMgdGV4dC1jZW50ZXJcIlxuICA+XG4gICAge3tcbiAgICAgIChpc0FkbWluJCB8IGFzeW5jKVxuICAgICAgICA/ICgnZm9ybU1hbmFnZW1lbnQubm9Gb3JtRGVmaW5pdGlvbkZvdW5kQWRtaW4nIHwgdHJhbnNsYXRlKVxuICAgICAgICA6ICgnZm9ybU1hbmFnZW1lbnQubm9Gb3JtRGVmaW5pdGlvbkZvdW5kVXNlcicgfCB0cmFuc2xhdGUpXG4gICAgfX1cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj1cIm9icy5lcnJvck1lc3NhZ2VcIiBjbGFzcz1cImJnLWRhbmdlciB0ZXh0LWJsYWNrIG1iLTAgcC0zIHRleHQtY2VudGVyXCI+XG4gICAge3sgb2JzLmVycm9yTWVzc2FnZSB9fVxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwibS0yXCI+XG4gICAgPG5nLXRlbXBsYXRlICNmb3JtVmlld01vZGVsQ29tcG9uZW50PjwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNmb3JtQ3VzdG9tQ29tcG9uZW50PjwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG4iXX0=
386
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1kZXRhaWwtY29udGVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL3Rhc2svc3JjL2xpYi9jb21wb25lbnRzL3Rhc2stZGV0YWlsLWNvbnRlbnQvdGFzay1kZXRhaWwtY29udGVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL3Rhc2svc3JjL2xpYi9jb21wb25lbnRzL3Rhc2stZGV0YWlsLWNvbnRlbnQvdGFzay1kZXRhaWwtY29udGVudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRS9DLE9BQU8sRUFBQyxlQUFlLEVBQW1CLE1BQU0scUJBQXFCLENBQUM7QUFFdEUsT0FBTyxFQUVMLFlBQVksRUFDWixpQkFBaUIsR0FLbEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQWdCLHFCQUFxQixFQUFnQixNQUFNLGlCQUFpQixDQUFDO0FBRXBGLE9BQU8sRUFDTCwyQkFBMkIsRUFJM0IsaUJBQWlCLEdBTWxCLE1BQU0sdUJBQXVCLENBQUM7QUFJL0IsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixHQUFHLEVBRUgsWUFBWSxFQUNaLFNBQVMsRUFDVCxJQUFJLEdBQ0wsTUFBTSxNQUFNLENBQUM7QUFH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SztnQkFLYyxXQUFXO3NCQUE5QixLQUFLO2dCQUlvQixlQUFlO3NCQUF4QyxNQUFNO2dCQUNtQixVQUFVO3NCQUFuQyxNQUFNO2dCQUNtQixZQUFZO3NCQUFyQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1JlY2VudGx5Vmlld2VkMTZ9IGZyb20gJ0BjYXJib24vaWNvbnMnO1xuaW1wb3J0IHtGb3JtaW9Gb3JtfSBmcm9tICdAZm9ybWlvL2FuZ3VsYXInO1xuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtQZXJtaXNzaW9uU2VydmljZX0gZnJvbSAnQHZhbHRpbW8vYWNjZXNzLWNvbnRyb2wnO1xuaW1wb3J0IHtcbiAgRm9ybWlvQ29tcG9uZW50LFxuICBGb3JtSW9Nb2R1bGUsXG4gIEZvcm1pb09wdGlvbnNJbXBsLFxuICBGb3JtSW9TdGF0ZVNlcnZpY2UsXG4gIEZvcm1pb1N1Ym1pc3Npb24sXG4gIFZhbHRpbW9Gb3JtaW9PcHRpb25zLFxuICBWYWx0aW1vTW9kYWxTZXJ2aWNlLFxufSBmcm9tICdAdmFsdGltby9jb21wb25lbnRzJztcbmltcG9ydCB7Q29uZmlnU2VydmljZSwgRk9STV9WSUVXX01PREVMX1RPS0VOLCBGb3JtVmlld01vZGVsfSBmcm9tICdAdmFsdGltby9jb25maWcnO1xuaW1wb3J0IHtEb2N1bWVudFNlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL2RvY3VtZW50JztcbmltcG9ydCB7XG4gIEZPUk1fQ1VTVE9NX0NPTVBPTkVOVF9UT0tFTixcbiAgRm9ybUN1c3RvbUNvbXBvbmVudENvbmZpZyxcbiAgRm9ybUZsb3dDb21wb25lbnQsXG4gIEZvcm1TdWJtaXNzaW9uUmVzdWx0LFxuICBQcm9jZXNzTGlua01vZHVsZSxcbiAgUHJvY2Vzc0xpbmtTZXJ2aWNlLFxuICBUYXNrUHJvY2Vzc0xpbmtSZXN1bHQsXG4gIFRhc2tQcm9jZXNzTGlua1R5cGUsXG4gIFRhc2tXaXRoUHJvY2Vzc0xpbmssXG4gIFVybFJlc29sdmVyU2VydmljZSxcbn0gZnJvbSAnQHZhbHRpbW8vcHJvY2Vzcy1saW5rJztcbmltcG9ydCB7SWNvblNlcnZpY2V9IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuaW1wb3J0IHtOR1hMb2dnZXJ9IGZyb20gJ25neC1sb2dnZXInO1xuaW1wb3J0IHtUb2FzdHJTZXJ2aWNlfSBmcm9tICduZ3gtdG9hc3RyJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIGZpbHRlcixcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBTdWJzY3JpcHRpb24sXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0ludGVybWVkaWF0ZVN1Ym1pc3Npb24sIFRhc2t9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge1Rhc2tJbnRlcm1lZGlhdGVTYXZlU2VydmljZSwgVGFza1NlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7Q0FOX0FTU0lHTl9UQVNLX1BFUk1JU1NJT04sIFRBU0tfREVUQUlMX1BFUk1JU1NJT05fUkVTT1VSQ0V9IGZyb20gJy4uLy4uL3Rhc2stcGVybWlzc2lvbnMnO1xuaW1wb3J0IHtGb3JtQ3VzdG9tQ29tcG9uZW50fSBmcm9tICdAdmFsdGltby9wcm9jZXNzLWxpbmsnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLXRhc2stZGV0YWlsLWNvbnRlbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFzay1kZXRhaWwtY29udGVudC5jb21wb25lbnQuaHRtbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3JtSW9Nb2R1bGUsIFRyYW5zbGF0ZU1vZHVsZSwgUHJvY2Vzc0xpbmtNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBUYXNrRGV0YWlsQ29udGVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZCgnZm9ybScpIGZvcm06IEZvcm1pb0NvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnZm9ybVZpZXdNb2RlbENvbXBvbmVudCcsIHtzdGF0aWM6IGZhbHNlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmfSlcbiAgcHVibGljIGZvcm1WaWV3TW9kZWxEeW5hbWljQ29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xuICBAVmlld0NoaWxkKCdmb3JtRmxvdycpIHB1YmxpYyBmb3JtRmxvdzogRm9ybUZsb3dDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ2Zvcm1DdXN0b21Db21wb25lbnQnLCB7c3RhdGljOiBmYWxzZSwgcmVhZDogVmlld0NvbnRhaW5lclJlZn0pXG4gIHB1YmxpYyBmb3JtQ3VzdG9tQ29tcG9uZW50RHluYW1pY0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZjtcbiAgQElucHV0KCkgcHVibGljIHNldCB0YXNrKHZhbHVlOiBUYXNrIHwgbnVsbCkge1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcblxuICAgIHRoaXMubG9hZFRhc2tEZXRhaWxzKHZhbHVlKTtcbiAgfVxuICBASW5wdXQoKSBwdWJsaWMgc2V0IHRhc2tBbmRQcm9jZXNzTGluayh2YWx1ZTogVGFza1dpdGhQcm9jZXNzTGluayB8IG51bGwpIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm47XG5cbiAgICB0aGlzLmxvYWRUYXNrRGV0YWlscyh2YWx1ZS50YXNrIGFzIGFueSwgdmFsdWUucHJvY2Vzc0xpbmtBY3Rpdml0eVJlc3VsdCk7XG4gIH1cbiAgQElucHV0KCkgcHVibGljIHNldCBtb2RhbENsb3NlZChfOiBib29sZWFuKSB7XG4gICAgLy8gc2F2ZSBmb3JtIGZsb3cgZGF0YSBvbiBtb2RhbCBjbG9zZWRcbiAgICBpZiAodGhpcy5mb3JtRmxvdykgdGhpcy5mb3JtRmxvdy5zYXZlRGF0YSgpO1xuICB9XG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgY2xvc2VNb2RhbEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IGZvcm1TdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgYWN0aXZlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIHB1YmxpYyByZWFkb25seSBjYW5Bc3NpZ25Vc2VyVG9UYXNrJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgZXJyb3JNZXNzYWdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSBmb3JtRGVmaW5pdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEZvcm1pb0Zvcm0gfCBudWxsPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IGZvcm1EZWZpbml0aW9uSWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IGZvcm1GbG93SW5zdGFuY2VJZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgZm9ybWlvT3B0aW9ucyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFZhbHRpbW9Gb3JtaW9PcHRpb25zIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSBmb3JtSW9Gb3JtRGF0YSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSBmb3JtTmFtZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgbG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICBwdWJsaWMgcmVhZG9ubHkgcGFnZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSBzdWJtaXNzaW9uJCA9IHRoaXMudGFza0ludGVybWVkaWF0ZVNhdmVTZXJ2aWNlLnN1Ym1pc3Npb24kO1xuICBwdWJsaWMgcmVhZG9ubHkgdGFzayQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRhc2sgfCBudWxsPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IHRhc2tJbnN0YW5jZUlkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyBpbnRlcm1lZGlhdGVTYXZlRW5hYmxlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3Rhc2tQcm9jZXNzTGlua1R5cGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUYXNrUHJvY2Vzc0xpbmtUeXBlIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSBwcm9jZXNzTGlua0lzRm9ybSQgPSB0aGlzLl90YXNrUHJvY2Vzc0xpbmtUeXBlJC5waXBlKFxuICAgIG1hcCgodHlwZTogc3RyaW5nIHwgbnVsbCkgPT4gdHlwZSA9PT0gJ2Zvcm0nKVxuICApO1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvY2Vzc0xpbmtJc0Zvcm1WaWV3TW9kZWwkID0gdGhpcy5fdGFza1Byb2Nlc3NMaW5rVHlwZSQucGlwZShcbiAgICBtYXAoKHR5cGU6IHN0cmluZyB8IG51bGwpID0+IHR5cGUgPT09ICdmb3JtLXZpZXctbW9kZWwnKVxuICApO1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvY2Vzc0xpbmtJc0Zvcm1GbG93JCA9IHRoaXMuX3Rhc2tQcm9jZXNzTGlua1R5cGUkLnBpcGUoXG4gICAgbWFwKCh0eXBlOiBzdHJpbmcgfCBudWxsKSA9PiB0eXBlID09PSAnZm9ybS1mbG93JylcbiAgKTtcbiAgcHVibGljIHJlYWRvbmx5IHByb2Nlc3NMaW5rSXNVaUNvbXBvbmVudCQgPSB0aGlzLl90YXNrUHJvY2Vzc0xpbmtUeXBlJC5waXBlKFxuICAgIG1hcCgodHlwZTogc3RyaW5nIHwgbnVsbCkgPT4gdHlwZSA9PT0gJ3VpLWNvbXBvbmVudCcpXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcHJvY2Vzc0xpbmtJZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9mb3JtQ3VzdG9tQ29tcG9uZW50Q29uZmlnJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgRm9ybUN1c3RvbUNvbXBvbmVudENvbmZpZyB8IHt9XG4gID4oe30pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdJbml0aWFsaXplZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwdWJsaWMgZ2V0IHZpZXdJbml0aWFsaXplZCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3ZpZXdJbml0aWFsaXplZCQucGlwZShmaWx0ZXIoaW5pdGlhbGl6ZWQgPT4gaW5pdGlhbGl6ZWQpKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50U2VydmljZTogRG9jdW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaWNvblNlcnZpY2U6IEljb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyOiBOR1hMb2dnZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBtb2RhbFNlcnZpY2U6IFZhbHRpbW9Nb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcm9jZXNzTGlua1NlcnZpY2U6IFByb2Nlc3NMaW5rU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RhdGVTZXJ2aWNlOiBGb3JtSW9TdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0YXNrSW50ZXJtZWRpYXRlU2F2ZVNlcnZpY2U6IFRhc2tJbnRlcm1lZGlhdGVTYXZlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRhc2tTZXJ2aWNlOiBUYXNrU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRvYXN0cjogVG9hc3RyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChGT1JNX1ZJRVdfTU9ERUxfVE9LRU4pIHByaXZhdGUgcmVhZG9ubHkgZm9ybVZpZXdNb2RlbDogRm9ybVZpZXdNb2RlbCxcbiAgICBAT3B0aW9uYWwoKVxuICAgIEBJbmplY3QoRk9STV9DVVNUT01fQ09NUE9ORU5UX1RPS0VOKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybUN1c3RvbUNvbXBvbmVudENvbmZpZzogRm9ybUN1c3RvbUNvbXBvbmVudENvbmZpZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHVybFJlc29sdmVyU2VydmljZTogVXJsUmVzb2x2ZXJTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuaW50ZXJtZWRpYXRlU2F2ZUVuYWJsZWQgPSAhIXRoaXMuY29uZmlnU2VydmljZS5mZWF0dXJlVG9nZ2xlcz8uZW5hYmxlSW50ZXJtZWRpYXRlU2F2ZTtcblxuICAgIHRoaXMuaWNvblNlcnZpY2UucmVnaXN0ZXJBbGwoW1JlY2VudGx5Vmlld2VkMTZdKTtcblxuICAgIGNvbnN0IG9wdGlvbnMgPSBuZXcgRm9ybWlvT3B0aW9uc0ltcGwoKTtcbiAgICBvcHRpb25zLmRpc2FibGVBbGVydHMgPSB0cnVlO1xuICAgIHRoaXMuZm9ybWlvT3B0aW9ucyQubmV4dChvcHRpb25zKTtcbiAgICB0aGlzLl9mb3JtQ3VzdG9tQ29tcG9uZW50Q29uZmlnJC5uZXh0KGZvcm1DdXN0b21Db21wb25lbnRDb25maWcpO1xuICB9XG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5QZXJtaXNzaW9uU3Vic2NyaXB0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMudGFza0ludGVybWVkaWF0ZVNhdmVTZXJ2aWNlLnNldFN1Ym1pc3Npb24oe30pO1xuICAgIHRoaXMuX3ZpZXdJbml0aWFsaXplZCQubmV4dChmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3ZpZXdJbml0aWFsaXplZCQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBvblN1Ym1pdChzdWJtaXNzaW9uOiBGb3JtaW9TdWJtaXNzaW9uKTogdm9pZCB7XG4gICAgaWYgKHN1Ym1pc3Npb24uZGF0YSkge1xuICAgICAgdGhpcy50YXNrSW50ZXJtZWRpYXRlU2F2ZVNlcnZpY2Uuc2V0Rm9ybUlvRm9ybURhdGEoc3VibWlzc2lvbi5kYXRhKTtcbiAgICAgIHRoaXMuZm9ybUlvRm9ybURhdGEkLm5leHQoc3VibWlzc2lvbi5kYXRhKTtcbiAgICB9XG5cbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLl9wcm9jZXNzTGlua0lkJCwgdGhpcy5fdGFza1Byb2Nlc3NMaW5rVHlwZSQsIHRoaXMudGFzayRdKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKFtwcm9jZXNzTGlua0lkLCB0YXNrUHJvY2Vzc0xpbmtUeXBlLCB0YXNrXSkgPT4ge1xuICAgICAgICBpZiAodGFza1Byb2Nlc3NMaW5rVHlwZSA9PT0gJ2Zvcm0nKSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3NMaW5rSWQpIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0xpbmtTZXJ2aWNlXG4gICAgICAgICAgICAgIC5zdWJtaXRGb3JtKHByb2Nlc3NMaW5rSWQsIHN1Ym1pc3Npb24uZGF0YSwgdGFzaz8uYnVzaW5lc3NLZXksIHRhc2s/LmlkKVxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiAoXzogRm9ybVN1Ym1pc3Npb25SZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGVUYXNrKHRhc2spO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9ycyA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uc2hvd0Vycm9ycyhlcnJvcnMpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0YXNrUHJvY2Vzc0xpbmtUeXBlID09PSAnZm9ybS12aWV3LW1vZGVsJykge1xuICAgICAgICAgIHRoaXMuY29tcGxldGVUYXNrKHRhc2spO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjb21wbGV0ZVRhc2sodGFzazogVGFzayB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIXRhc2spIHJldHVybjtcblxuICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MoXG4gICAgICBgJHt0YXNrLm5hbWV9ICR7dGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3Rhc2tEZXRhaWwudGFza0NvbXBsZXRlZCcpfWBcbiAgICApO1xuICAgIHRoaXMudGFzayQubmV4dChudWxsKTtcbiAgICB0aGlzLmZvcm1TdWJtaXQuZW1pdCgpO1xuICAgIHRoaXMuY2xvc2VNb2RhbEV2ZW50LmVtaXQoKTtcbiAgICB0aGlzLmFjdGl2ZUNoYW5nZS5lbWl0KGZhbHNlKTtcblxuICAgIGlmICh0aGlzLmZvcm1GbG93KSB0aGlzLmZvcm1GbG93LnNhdmVEYXRhKCk7XG4gIH1cblxuICBwdWJsaWMgb25DaGFuZ2UoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGlmIChldmVudC5kYXRhKSB7XG4gICAgICB0aGlzLnRhc2tJbnRlcm1lZGlhdGVTYXZlU2VydmljZS5zZXRGb3JtSW9Gb3JtRGF0YShldmVudC5kYXRhKTtcbiAgICAgIHRoaXMuZm9ybUlvRm9ybURhdGEkLm5leHQoZXZlbnQuZGF0YSk7XG4gICAgICB0aGlzLmFjdGl2ZUNoYW5nZS5lbWl0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkZvcm1GbG93Q2hhbmdlRXZlbnQoKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVDaGFuZ2UuZW1pdCh0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFRhc2tEZXRhaWxzKHRhc2s6IFRhc2ssIHByb2Nlc3NMaW5rPzogVGFza1Byb2Nlc3NMaW5rUmVzdWx0KTogdm9pZCB7XG4gICAgdGhpcy5yZXNldFRhc2tQcm9jZXNzTGlua1R5cGUoKTtcbiAgICB0aGlzLnJlc2V0Rm9ybURlZmluaXRpb24oKTtcblxuICAgIHRoaXMudGFza0luc3RhbmNlSWQkLm5leHQodGFzay5pZCk7XG5cbiAgICBpZiAoIXByb2Nlc3NMaW5rKSB7XG4gICAgICB0aGlzLmdldFRhc2tQcm9jZXNzTGluayh0YXNrLmlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRUYXNrUHJvY2Vzc0xpbmsocHJvY2Vzc0xpbmspO1xuICAgIH1cblxuICAgIHRoaXMuc2V0RG9jdW1lbnREZWZpbml0aW9uTmFtZUluU2VydmljZSh0YXNrKTtcbiAgICBjb25zdCBkb2N1bWVudElkID0gdGFzay5idXNpbmVzc0tleTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5zZXREb2N1bWVudElkKGRvY3VtZW50SWQpO1xuXG4gICAgdGhpcy50YXNrJC5uZXh0KHRhc2spO1xuICAgIHRoaXMucGFnZSQubmV4dCh7XG4gICAgICB0aXRsZTogdGFzay5uYW1lLFxuICAgICAgc3VidGl0bGU6IGAke3RoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd0YXNrRGV0YWlsLnRhc2tDcmVhdGVkJyl9ICR7dGFzay5jcmVhdGVkfWAsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEN1cnJlbnRQcm9ncmVzcyhmb3JtVmlld01vZGVsQ29tcG9uZW50UmVmPzogQ29tcG9uZW50UmVmPGFueT4pOiB2b2lkIHtcbiAgICB0aGlzLnRhc2tJbnN0YW5jZUlkJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcih2YWx1ZSA9PiAhIXZhbHVlKSxcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgc3dpdGNoTWFwKCh0YXNrSW5zdGFuY2VJZDogc3RyaW5nIHwgbnVsbCkgPT5cbiAgICAgICAgICB0aGlzLnRhc2tJbnRlcm1lZGlhdGVTYXZlU2VydmljZS5nZXRJbnRlcm1lZGlhdGVTdWJtaXNzaW9uKHRhc2tJbnN0YW5jZUlkID8/ICcnKVxuICAgICAgICApXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKGludGVybWVkaWF0ZVN1Ym1pc3Npb246IEludGVybWVkaWF0ZVN1Ym1pc3Npb24pID0+IHtcbiAgICAgICAgICB0aGlzLnRhc2tJbnRlcm1lZGlhdGVTYXZlU2VydmljZS5zZXRTdWJtaXNzaW9uKHtcbiAgICAgICAgICAgIGRhdGE6IGludGVybWVkaWF0ZVN1Ym1pc3Npb24/LnN1Ym1pc3Npb24gfHwge30sXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoZm9ybVZpZXdNb2RlbENvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgZm9ybVZpZXdNb2RlbENvbXBvbmVudFJlZi5pbnN0YW5jZS5zdWJtaXNzaW9uID0ge1xuICAgICAgICAgICAgICBkYXRhOiBpbnRlcm1lZGlhdGVTdWJtaXNzaW9uLnN1Ym1pc3Npb24sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUYXNrUHJvY2Vzc0xpbmsodGFza0lkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnRhc2tTZXJ2aWNlLmdldFRhc2tQcm9jZXNzTGluayh0YXNrSWQpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiByZXMgPT4ge1xuICAgICAgICB0aGlzLnNldFRhc2tQcm9jZXNzTGluayhyZXMpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBfID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldFRhc2tQcm9jZXNzTGluayhwcm9jZXNzTGlua1Jlc3VsdDogVGFza1Byb2Nlc3NMaW5rUmVzdWx0IHwgbnVsbCk6IHZvaWQge1xuICAgIGlmIChwcm9jZXNzTGlua1Jlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChwcm9jZXNzTGlua1Jlc3VsdD8udHlwZSkge1xuICAgICAgICBjYXNlICdmb3JtJzpcbiAgICAgICAgICB0aGlzLl90YXNrUHJvY2Vzc0xpbmtUeXBlJC5uZXh0KCdmb3JtJyk7XG4gICAgICAgICAgdGhpcy5fcHJvY2Vzc0xpbmtJZCQubmV4dChwcm9jZXNzTGlua1Jlc3VsdC5wcm9jZXNzTGlua0lkKTtcbiAgICAgICAgICBpZiAodGhpcy5pbnRlcm1lZGlhdGVTYXZlRW5hYmxlZCkgdGhpcy5nZXRDdXJyZW50UHJvZ3Jlc3MoKTtcbiAgICAgICAgICB0aGlzLnNldEZvcm1EZWZpbml0aW9uKHByb2Nlc3NMaW5rUmVzdWx0LnByb3BlcnRpZXMucHJlZmlsbGVkRm9ybSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2Zvcm0tZmxvdyc6XG4gICAgICAgICAgdGhpcy5fdGFza1Byb2Nlc3NMaW5rVHlwZSQubmV4dCgnZm9ybS1mbG93Jyk7XG4gICAgICAgICAgdGhpcy5mb3JtRmxvd0luc3RhbmNlSWQkLm5leHQocHJvY2Vzc0xpbmtSZXN1bHQucHJvcGVydGllcy5mb3JtRmxvd0luc3RhbmNlSWQgPz8gJycpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdmb3JtLXZpZXctbW9kZWwnOlxuICAgICAgICAgIHRoaXMuX3Rhc2tQcm9jZXNzTGlua1R5cGUkLm5leHQoJ2Zvcm0tdmlldy1tb2RlbCcpO1xuICAgICAgICAgIHRoaXMuX3Byb2Nlc3NMaW5rSWQkLm5leHQocHJvY2Vzc0xpbmtSZXN1bHQucHJvY2Vzc0xpbmtJZCk7XG4gICAgICAgICAgdGhpcy5mb3JtRGVmaW5pdGlvbiQubmV4dChwcm9jZXNzTGlua1Jlc3VsdC5wcm9wZXJ0aWVzLmZvcm1EZWZpbml0aW9uKTtcbiAgICAgICAgICB0aGlzLmZvcm1OYW1lJC5uZXh0KHByb2Nlc3NMaW5rUmVzdWx0LnByb3BlcnRpZXMuZm9ybU5hbWUgPz8gJycpO1xuICAgICAgICAgIHRoaXMuc2V0Rm9ybVZpZXdNb2RlbENvbXBvbmVudCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd1cmwnOlxuICAgICAgICAgIHRoaXMuX3Rhc2tQcm9jZXNzTGlua1R5cGUkLm5leHQoJ3VybCcpO1xuICAgICAgICAgIHRoaXMuX3Byb2Nlc3NMaW5rSWQkLm5leHQocHJvY2Vzc0xpbmtSZXN1bHQucHJvY2Vzc0xpbmtJZCk7XG4gICAgICAgICAgY29tYmluZUxhdGVzdChbdGhpcy5wcm9jZXNzTGlua1NlcnZpY2UuZ2V0VmFyaWFibGVzKCksIHRoaXMudGFzayRdKVxuICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKFt2YXJpYWJsZXMsIHRhc2tdKSA9PiB7XG4gICAgICAgICAgICAgIGxldCB1cmwgPSB0aGlzLnVybFJlc29sdmVyU2VydmljZS5yZXNvbHZlVXJsVmFyaWFibGVzKFxuICAgICAgICAgICAgICAgIHByb2Nlc3NMaW5rUmVzdWx0LnByb3BlcnRpZXMudXJsLFxuICAgICAgICAgICAgICAgIHZhcmlhYmxlcy52YXJpYWJsZXNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgd2luZG93Lm9wZW4odXJsLCAnX2JsYW5rJykuZm9jdXMoKTtcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzTGlua1NlcnZpY2VcbiAgICAgICAgICAgICAgICAuc3VibWl0VVJMUHJvY2Vzc0xpbmsocHJvY2Vzc0xpbmtSZXN1bHQucHJvY2Vzc0xpbmtJZCwgdGFzay5idXNpbmVzc0tleSwgdGFzay5pZClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGVUYXNrKHRhc2spO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3VpLWNvbXBvbmVudCc6XG4gICAgICAgICAgdGhpcy5fdGFza1Byb2Nlc3NMaW5rVHlwZSQubmV4dCgndWktY29tcG9uZW50Jyk7XG4gICAgICAgICAgdGhpcy5fcHJvY2Vzc0xpbmtJZCQubmV4dChwcm9jZXNzTGlua1Jlc3VsdC5wcm9jZXNzTGlua0lkKTtcbiAgICAgICAgICB0aGlzLmZvcm1EZWZpbml0aW9uJC5uZXh0KG51bGwpO1xuICAgICAgICAgIHRoaXMuZm9ybU5hbWUkLm5leHQoJycpO1xuICAgICAgICAgIHRoaXMuc2V0Rm9ybUN1c3RvbUNvbXBvbmVudChwcm9jZXNzTGlua1Jlc3VsdC5wcm9wZXJ0aWVzLmNvbXBvbmVudEtleSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvcGVuUGVybWlzc2lvblN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMudGFzayQuc3Vic2NyaWJlKHRhc2sgPT4ge1xuICAgICAgICBpZiAodGFzaykge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdDaGVja2luZyBpZiB1c2VyIGFsbG93ZWQgdG8gYXNzaWduIGEgdXNlciB0byBUYXNrIHdpdGggaWQ6JywgdGFzay5pZCk7XG4gICAgICAgICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZVxuICAgICAgICAgICAgLnJlcXVlc3RQZXJtaXNzaW9uKENBTl9BU1NJR05fVEFTS19QRVJNSVNTSU9OLCB7XG4gICAgICAgICAgICAgIHJlc291cmNlOiBUQVNLX0RFVEFJTF9QRVJNSVNTSU9OX1JFU09VUkNFLnRhc2ssXG4gICAgICAgICAgICAgIGlkZW50aWZpZXI6IHRhc2suaWQsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoYWxsb3dlZDogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmNhbkFzc2lnblVzZXJUb1Rhc2skLm5leHQoYWxsb3dlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnUmVzZXQgaXMgdXNlciBhbGxvd2VkIHRvIGFzc2lnbiBhIHVzZXIgdG8gVGFzayBhcyB0YXNrIGlzIG51bGwnKTtcbiAgICAgICAgICB0aGlzLmNhbkFzc2lnblVzZXJUb1Rhc2skLm5leHQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNldEZvcm1EZWZpbml0aW9uKGZvcm1EZWZpbml0aW9uOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl90YXNrUHJvY2Vzc0xpbmtUeXBlJC5uZXh0KCdmb3JtJyk7XG4gICAgdGhpcy5mb3JtRGVmaW5pdGlvbiQubmV4dChmb3JtRGVmaW5pdGlvbik7XG4gIH1cblxuICBwcml2YXRlIHNldEZvcm1WaWV3TW9kZWxDb21wb25lbnQoKSB7XG4gICAgdGhpcy5fdmlld0luaXRpYWxpemVkJC5zdWJzY3JpYmUodmlld0luaXRpYWxpemVkID0+IHtcbiAgICAgIGlmICh2aWV3SW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgdGhpcy5mb3JtVmlld01vZGVsRHluYW1pY0NvbnRhaW5lci5jbGVhcigpO1xuICAgICAgICBpZiAoIXRoaXMuZm9ybVZpZXdNb2RlbCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBmb3JtVmlld01vZGVsQ29tcG9uZW50ID0gdGhpcy5mb3JtVmlld01vZGVsRHluYW1pY0NvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoXG4gICAgICAgICAgdGhpcy5mb3JtVmlld01vZGVsLmNvbXBvbmVudFxuICAgICAgICApO1xuICAgICAgICBmb3JtVmlld01vZGVsQ29tcG9uZW50Lmluc3RhbmNlLmZvcm0gPSB0aGlzLmZvcm1EZWZpbml0aW9uJC5nZXRWYWx1ZSgpO1xuICAgICAgICBmb3JtVmlld01vZGVsQ29tcG9uZW50Lmluc3RhbmNlLmZvcm1OYW1lID0gdGhpcy5mb3JtTmFtZSQuZ2V0VmFsdWUoKTtcbiAgICAgICAgZm9ybVZpZXdNb2RlbENvbXBvbmVudC5pbnN0YW5jZS50YXNrSW5zdGFuY2VJZCA9IHRoaXMudGFza0luc3RhbmNlSWQkLmdldFZhbHVlKCk7XG4gICAgICAgIGZvcm1WaWV3TW9kZWxDb21wb25lbnQuaW5zdGFuY2UuaXNTdGFydEZvcm0gPSBmYWxzZTtcblxuICAgICAgICBmb3JtVmlld01vZGVsQ29tcG9uZW50Lmluc3RhbmNlLmZvcm1TdWJtaXRcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy50YXNrJClcbiAgICAgICAgICApXG4gICAgICAgICAgLnN1YnNjcmliZSgodGFzazogVGFzayB8IG51bGwpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29tcGxldGVUYXNrKHRhc2spO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmludGVybWVkaWF0ZVNhdmVFbmFibGVkKSB7XG4gICAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICBmb3JtVmlld01vZGVsQ29tcG9uZW50Lmluc3RhbmNlLnN1Ym1pc3Npb24kLnN1YnNjcmliZShzdWJtaXNzaW9uID0+IHtcbiAgICAgICAgICAgICAgdGhpcy50YXNrSW50ZXJtZWRpYXRlU2F2ZVNlcnZpY2Uuc2V0U3VibWlzc2lvbihzdWJtaXNzaW9uKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuc3VibWlzc2lvbiQucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKS5zdWJzY3JpYmUoKHN1Ym1pc3Npb24/KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChzdWJtaXNzaW9uPy5kYXRhICYmIE9iamVjdC5rZXlzKHN1Ym1pc3Npb24uZGF0YSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgZm9ybVZpZXdNb2RlbENvbXBvbmVudC5pbnN0YW5jZS5zdWJtaXNzaW9uID0ge2RhdGE6IHt9fTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuZ2V0Q3VycmVudFByb2dyZXNzKGZvcm1WaWV3TW9kZWxDb21wb25lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldEZvcm1DdXN0b21Db21wb25lbnQoZm9ybUN1c3RvbUNvbXBvbmVudEtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fdmlld0luaXRpYWxpemVkJC5zdWJzY3JpYmUodmlld0luaXRpYWxpemVkID0+IHtcbiAgICAgIGlmICh2aWV3SW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgdGhpcy5mb3JtQ3VzdG9tQ29tcG9uZW50RHluYW1pY0NvbnRhaW5lci5jbGVhcigpO1xuICAgICAgICBpZiAoIXRoaXMuZm9ybUN1c3RvbUNvbXBvbmVudENvbmZpZykgcmV0dXJuO1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICB0aGlzLl9mb3JtQ3VzdG9tQ29tcG9uZW50Q29uZmlnJC5zdWJzY3JpYmUoZm9ybUN1c3RvbUNvbXBvbmVudENvbmZpZyA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXN0b21Db21wb25lbnQgPSBmb3JtQ3VzdG9tQ29tcG9uZW50Q29uZmlnW2Zvcm1DdXN0b21Db21wb25lbnRLZXldO1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyZWRDb21wb25lbnQgPSB0aGlzLmZvcm1DdXN0b21Db21wb25lbnREeW5hbWljQ29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChcbiAgICAgICAgICAgICAgY3VzdG9tQ29tcG9uZW50XG4gICAgICAgICAgICApIGFzIENvbXBvbmVudFJlZjxGb3JtQ3VzdG9tQ29tcG9uZW50PjtcblxuICAgICAgICAgICAgcmVuZGVyZWRDb21wb25lbnQuaW5zdGFuY2UudGFza0luc3RhbmNlSWQgPSB0aGlzLnRhc2tJbnN0YW5jZUlkJC52YWx1ZTtcbiAgICAgICAgICAgIHJlbmRlcmVkQ29tcG9uZW50Lmluc3RhbmNlLnN1Ym1pdHRlZEV2ZW50LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuY2xvc2VNb2RhbEV2ZW50LmVtaXQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0Rm9ybURlZmluaXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtRGVmaW5pdGlvbiQubmV4dChudWxsKTtcbiAgICB0aGlzLmxvYWRpbmckLm5leHQodHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0VGFza1Byb2Nlc3NMaW5rVHlwZSgpOiB2b2lkIHtcbiAgICB0aGlzLl90YXNrUHJvY2Vzc0xpbmtUeXBlJC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX3Byb2Nlc3NMaW5rSWQkLm5leHQobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIHNldERvY3VtZW50RGVmaW5pdGlvbk5hbWVJblNlcnZpY2UodGFzazogVGFzayk6IHZvaWQge1xuICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlXG4gICAgICAuZ2V0UHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbkZyb21Qcm9jZXNzSW5zdGFuY2VJZCh0YXNrLnByb2Nlc3NJbnN0YW5jZUlkKVxuICAgICAgLnN1YnNjcmliZShwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uID0+IHtcbiAgICAgICAgY29uc3QgZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9IHByb2Nlc3NEb2N1bWVudERlZmluaXRpb24uaWQuZG9jdW1lbnREZWZpbml0aW9uSWQubmFtZTtcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uuc2V0RG9jdW1lbnREZWZpbml0aW9uTmFtZShkb2N1bWVudERlZmluaXRpb25OYW1lKTtcbiAgICAgICAgdGhpcy5zdGF0ZVNlcnZpY2Uuc2V0RG9jdW1lbnREZWZpbml0aW9uTmFtZShkb2N1bWVudERlZmluaXRpb25OYW1lKTtcbiAgICAgIH0pO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxuZy1jb250YWluZXJcbiAgKm5nSWY9XCJ7XG4gICAgbG9hZGluZzogbG9hZGluZyQgfCBhc3luYyxcbiAgICBwYWdlOiBwYWdlJCB8IGFzeW5jLFxuICAgIHRhc2s6IHRhc2skIHwgYXN5bmMsXG4gICAgdGFza0lkOiB0YXNrSW5zdGFuY2VJZCQgfCBhc3luYyxcbiAgICBmb3JtRGVmaW5pdGlvbjogZm9ybURlZmluaXRpb24kIHwgYXN5bmMsXG4gICAgZm9ybURlZmluaXRpb25JZDogZm9ybURlZmluaXRpb25JZCQgfCBhc3luYyxcbiAgICBmb3JtTmFtZTogZm9ybU5hbWUkIHwgYXN5bmMsXG4gICAgZm9ybUlvRm9ybURhdGE6IGZvcm1Jb0Zvcm1EYXRhJCB8IGFzeW5jLFxuICAgIHN1Ym1pc3Npb246IHN1Ym1pc3Npb24kIHwgYXN5bmMsXG4gICAgcHJvY2Vzc0xpbmtJc0Zvcm06IHByb2Nlc3NMaW5rSXNGb3JtJCB8IGFzeW5jLFxuICAgIHByb2Nlc3NMaW5rSXNGb3JtVmlld01vZGVsOiBwcm9jZXNzTGlua0lzRm9ybVZpZXdNb2RlbCQgfCBhc3luYyxcbiAgICBwcm9jZXNzTGlua0lzVWlDb21wb25lbnQ6IHByb2Nlc3NMaW5rSXNVaUNvbXBvbmVudCQgfCBhc3luYyxcbiAgICBmb3JtaW9PcHRpb25zOiBmb3JtaW9PcHRpb25zJCB8IGFzeW5jLFxuICAgIHByb2Nlc3NMaW5rSXNGb3JtRmxvdzogcHJvY2Vzc0xpbmtJc0Zvcm1GbG93JCB8IGFzeW5jLFxuICAgIGZvcm1GbG93SW5zdGFuY2VJZDogZm9ybUZsb3dJbnN0YW5jZUlkJCB8IGFzeW5jLFxuICAgIGVycm9yTWVzc2FnZTogZXJyb3JNZXNzYWdlJCB8IGFzeW5jLFxuICAgIGNhbkFzc2lnblVzZXJUb1Rhc2s6IGNhbkFzc2lnblVzZXJUb1Rhc2skIHwgYXN5bmMsXG4gIH0gYXMgb2JzXCJcbj5cbiAgPHZhbHRpbW8tZm9ybS1pb1xuICAgICNmb3JtXG4gICAgKm5nSWY9XCJvYnMuZm9ybURlZmluaXRpb24gJiYgb2JzLnByb2Nlc3NMaW5rSXNGb3JtXCJcbiAgICBbZm9ybV09XCJvYnMuZm9ybURlZmluaXRpb25cIlxuICAgIFtzdWJtaXNzaW9uXT1cIm9icy5zdWJtaXNzaW9uXCJcbiAgICAoc3VibWl0KT1cIm9uU3VibWl0KCRldmVudClcIlxuICAgIChjaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgW29wdGlvbnNdPVwib2JzLmZvcm1pb09wdGlvbnNcIlxuICA+PC92YWx0aW1vLWZvcm0taW8+XG5cbiAgPHZhbHRpbW8tZm9ybS1mbG93XG4gICAgI2Zvcm1GbG93XG4gICAgKm5nSWY9XCJvYnMucHJvY2Vzc0xpbmtJc0Zvcm1GbG93XCJcbiAgICBbZm9ybUlvRm9ybURhdGFdPVwiZm9ybUlvRm9ybURhdGEkXCJcbiAgICBbZm9ybUZsb3dJbnN0YW5jZUlkXT1cIm9icy5mb3JtRmxvd0luc3RhbmNlSWRcIlxuICAgIChmb3JtRmxvd0NvbXBsZXRlKT1cImNvbXBsZXRlVGFzayhvYnMudGFzaylcIlxuICAgIChmb3JtRmxvd0NoYW5nZSk9XCJvbkZvcm1GbG93Q2hhbmdlRXZlbnQoKVwiXG4gID48L3ZhbHRpbW8tZm9ybS1mbG93PlxuXG4gIDxkaXYgKm5nSWY9XCJvYnMubG9hZGluZ1wiIGNsYXNzPVwidGV4dC1ibGFjayBtYi0wIHAtMyB0ZXh0LWNlbnRlclwiPlxuICAgIHt7ICdmb3JtTWFuYWdlbWVudC5sb2FkaW5nJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgKm5nSWY9XCJcbiAgICAgIG9icy5sb2FkaW5nID09PSBmYWxzZSAmJlxuICAgICAgIW9icy5mb3JtRGVmaW5pdGlvbiAmJlxuICAgICAgIW9icy5mb3JtRmxvd0luc3RhbmNlSWQgJiZcbiAgICAgICFvYnMuZXJyb3JNZXNzYWdlICYmXG4gICAgICAhb2JzLnByb2Nlc3NMaW5rSXNVaUNvbXBvbmVudFxuICAgIFwiXG4gICAgY2xhc3M9XCJiZy13YXJuaW5nIHRleHQtYmxhY2sgbWItMCBwLTMgdGV4dC1jZW50ZXJcIlxuICA+XG4gICAge3tcbiAgICAgIChpc0FkbWluJCB8IGFzeW5jKVxuICAgICAgICA/ICgnZm9ybU1hbmFnZW1lbnQubm9Gb3JtRGVmaW5pdGlvbkZvdW5kQWRtaW4nIHwgdHJhbnNsYXRlKVxuICAgICAgICA6ICgnZm9ybU1hbmFnZW1lbnQubm9Gb3JtRGVmaW5pdGlvbkZvdW5kVXNlcicgfCB0cmFuc2xhdGUpXG4gICAgfX1cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj1cIm9icy5lcnJvck1lc3NhZ2VcIiBjbGFzcz1cImJnLWRhbmdlciB0ZXh0LWJsYWNrIG1iLTAgcC0zIHRleHQtY2VudGVyXCI+XG4gICAge3sgb2JzLmVycm9yTWVzc2FnZSB9fVxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwibS0yXCI+XG4gICAgPG5nLXRlbXBsYXRlICNmb3JtVmlld01vZGVsQ29tcG9uZW50PjwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNmb3JtQ3VzdG9tQ29tcG9uZW50PjwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG4iXX0=
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, EventEmitter, Component, Input, Output, ViewContainerRef, ChangeDetectionStrategy, Optional, Inject, ViewChild, signal, ViewEncapsulation, HostListener, NgModule } from '@angular/core';
2
+ import { Injectable, EventEmitter, Output, Input, Component, ViewContainerRef, ViewChild, Optional, Inject, ChangeDetectionStrategy, signal, ViewEncapsulation, HostListener, NgModule } from '@angular/core';
3
3
  import * as i9 from '@valtimo/components';
4
4
  import { ViewType, SearchableDropdownSelectModule, FormioOptionsImpl, FormIoModule, ConfirmationModalModule, TooltipModule, CarbonListModule, PageHeaderModule, WidgetModule, SpinnerModule, CamundaFormModule, RenderInPageHeaderDirectiveModule, SearchFieldsModule } from '@valtimo/components';
5
5
  import { BehaviorSubject, combineLatest, tap, filter, switchMap, of, map as map$1, catchError, Subscription, take as take$1, distinctUntilChanged, Subject } from 'rxjs';
@@ -1176,7 +1176,7 @@ class TaskDetailContentComponent {
1176
1176
  this.formDefinition$.next(formDefinition);
1177
1177
  }
1178
1178
  setFormViewModelComponent() {
1179
- this._viewInitialized$.subscribe((viewInitialized) => {
1179
+ this._viewInitialized$.subscribe(viewInitialized => {
1180
1180
  if (viewInitialized) {
1181
1181
  this.formViewModelDynamicContainer.clear();
1182
1182
  if (!this.formViewModel)
@@ -1206,16 +1206,16 @@ class TaskDetailContentComponent {
1206
1206
  });
1207
1207
  }
1208
1208
  setFormCustomComponent(formCustomComponentKey) {
1209
- this._viewInitialized$.subscribe((viewInitialized) => {
1209
+ this._viewInitialized$.subscribe(viewInitialized => {
1210
1210
  if (viewInitialized) {
1211
1211
  this.formCustomComponentDynamicContainer.clear();
1212
1212
  if (!this.formCustomComponentConfig)
1213
1213
  return;
1214
- this._subscriptions.add(this._formCustomComponentConfig$.subscribe((formCustomComponentConfig) => {
1214
+ this._subscriptions.add(this._formCustomComponentConfig$.subscribe(formCustomComponentConfig => {
1215
1215
  const customComponent = formCustomComponentConfig[formCustomComponentKey];
1216
1216
  const renderedComponent = this.formCustomComponentDynamicContainer.createComponent(customComponent);
1217
1217
  renderedComponent.instance.taskInstanceId = this.taskInstanceId$.value;
1218
- renderedComponent.instance.submitEvent.subscribe(() => {
1218
+ renderedComponent.instance.submittedEvent.subscribe(() => {
1219
1219
  this.closeModalEvent.emit();
1220
1220
  });
1221
1221
  }));
@@ -1240,11 +1240,11 @@ class TaskDetailContentComponent {
1240
1240
  });
1241
1241
  }
1242
1242
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskDetailContentComponent, deps: [{ token: i1$1.ConfigService }, { token: i2.DocumentService }, { token: i12.IconService }, { token: i4.NGXLogger }, { token: i9.ValtimoModalService }, { token: i3$1.PermissionService }, { token: i7.ProcessLinkService }, { token: i1$2.Router }, { token: i9.FormIoStateService }, { token: TaskIntermediateSaveService }, { token: TaskService }, { token: i10.ToastrService }, { token: i3.TranslateService }, { token: FORM_VIEW_MODEL_TOKEN, optional: true }, { token: FORM_CUSTOM_COMPONENT_TOKEN, optional: true }, { token: i7.UrlResolverService }], target: i0.ɵɵFactoryTarget.Component }); }
1243
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TaskDetailContentComponent, isStandalone: true, selector: "valtimo-task-detail-content", inputs: { task: "task", taskAndProcessLink: "taskAndProcessLink", modalClosed: "modalClosed" }, outputs: { closeModalEvent: "closeModalEvent", formSubmit: "formSubmit", activeChange: "activeChange" }, viewQueries: [{ propertyName: "form", first: true, predicate: ["form"], descendants: true }, { propertyName: "formViewModelDynamicContainer", first: true, predicate: ["formViewModelComponent"], descendants: true, read: ViewContainerRef }, { propertyName: "formFlow", first: true, predicate: ["formFlow"], descendants: true }, { propertyName: "formCustomComponentDynamicContainer", first: true, predicate: ["formCustomComponent"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"{\n loading: loading$ | async,\n page: page$ | async,\n task: task$ | async,\n taskId: taskInstanceId$ | async,\n formDefinition: formDefinition$ | async,\n formDefinitionId: formDefinitionId$ | async,\n formName: formName$ | async,\n formIoFormData: formIoFormData$ | async,\n submission: submission$ | async,\n processLinkIsForm: processLinkIsForm$ | async,\n processLinkIsFormViewModel: processLinkIsFormViewModel$ | async,\n processLinkIsUiComponent: processLinkIsUiComponent$ | async,\n formioOptions: formioOptions$ | async,\n processLinkIsFormFlow: processLinkIsFormFlow$ | async,\n formFlowInstanceId: formFlowInstanceId$ | async,\n errorMessage: errorMessage$ | async,\n canAssignUserToTask: canAssignUserToTask$ | async,\n } as obs\"\n>\n <valtimo-form-io\n #form\n *ngIf=\"obs.formDefinition && obs.processLinkIsForm\"\n [form]=\"obs.formDefinition\"\n [submission]=\"obs.submission\"\n (submit)=\"onSubmit($event)\"\n (change)=\"onChange($event)\"\n [options]=\"obs.formioOptions\"\n ></valtimo-form-io>\n\n <valtimo-form-flow\n #formFlow\n *ngIf=\"obs.processLinkIsFormFlow\"\n [formIoFormData]=\"formIoFormData$\"\n [formFlowInstanceId]=\"obs.formFlowInstanceId\"\n (formFlowComplete)=\"completeTask(obs.task)\"\n (formFlowChange)=\"onFormFlowChangeEvent()\"\n ></valtimo-form-flow>\n\n <div *ngIf=\"obs.loading\" class=\"text-black mb-0 p-3 text-center\">\n {{ 'formManagement.loading' | translate }}\n </div>\n\n <div\n *ngIf=\"\n obs.loading === false && !obs.formDefinition && !obs.formFlowInstanceId && !obs.errorMessage && !obs.processLinkIsUiComponent\n \"\n class=\"bg-warning text-black mb-0 p-3 text-center\"\n >\n {{\n (isAdmin$ | async)\n ? ('formManagement.noFormDefinitionFoundAdmin' | translate)\n : ('formManagement.noFormDefinitionFoundUser' | translate)\n }}\n </div>\n\n <div *ngIf=\"obs.errorMessage\" class=\"bg-danger text-black mb-0 p-3 text-center\">\n {{ obs.errorMessage }}\n </div>\n\n <div class=\"m-2\">\n <ng-template #formViewModelComponent></ng-template>\n <ng-template #formCustomComponent></ng-template>\n </div>\n</ng-container>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormIoModule }, { kind: "component", type: i9.FormioComponent, selector: "valtimo-form-io", inputs: ["options", "submission", "form", "readOnly", "formRefresh$"], outputs: ["submit", "change", "event"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ProcessLinkModule }, { kind: "component", type: i7.FormFlowComponent, selector: "valtimo-form-flow", inputs: ["formIoFormData", "formFlowInstanceId"], outputs: ["formFlowComplete", "formFlowChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1243
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TaskDetailContentComponent, isStandalone: true, selector: "valtimo-task-detail-content", inputs: { task: "task", taskAndProcessLink: "taskAndProcessLink", modalClosed: "modalClosed" }, outputs: { closeModalEvent: "closeModalEvent", formSubmit: "formSubmit", activeChange: "activeChange" }, viewQueries: [{ propertyName: "form", first: true, predicate: ["form"], descendants: true }, { propertyName: "formViewModelDynamicContainer", first: true, predicate: ["formViewModelComponent"], descendants: true, read: ViewContainerRef }, { propertyName: "formFlow", first: true, predicate: ["formFlow"], descendants: true }, { propertyName: "formCustomComponentDynamicContainer", first: true, predicate: ["formCustomComponent"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"{\n loading: loading$ | async,\n page: page$ | async,\n task: task$ | async,\n taskId: taskInstanceId$ | async,\n formDefinition: formDefinition$ | async,\n formDefinitionId: formDefinitionId$ | async,\n formName: formName$ | async,\n formIoFormData: formIoFormData$ | async,\n submission: submission$ | async,\n processLinkIsForm: processLinkIsForm$ | async,\n processLinkIsFormViewModel: processLinkIsFormViewModel$ | async,\n processLinkIsUiComponent: processLinkIsUiComponent$ | async,\n formioOptions: formioOptions$ | async,\n processLinkIsFormFlow: processLinkIsFormFlow$ | async,\n formFlowInstanceId: formFlowInstanceId$ | async,\n errorMessage: errorMessage$ | async,\n canAssignUserToTask: canAssignUserToTask$ | async,\n } as obs\"\n>\n <valtimo-form-io\n #form\n *ngIf=\"obs.formDefinition && obs.processLinkIsForm\"\n [form]=\"obs.formDefinition\"\n [submission]=\"obs.submission\"\n (submit)=\"onSubmit($event)\"\n (change)=\"onChange($event)\"\n [options]=\"obs.formioOptions\"\n ></valtimo-form-io>\n\n <valtimo-form-flow\n #formFlow\n *ngIf=\"obs.processLinkIsFormFlow\"\n [formIoFormData]=\"formIoFormData$\"\n [formFlowInstanceId]=\"obs.formFlowInstanceId\"\n (formFlowComplete)=\"completeTask(obs.task)\"\n (formFlowChange)=\"onFormFlowChangeEvent()\"\n ></valtimo-form-flow>\n\n <div *ngIf=\"obs.loading\" class=\"text-black mb-0 p-3 text-center\">\n {{ 'formManagement.loading' | translate }}\n </div>\n\n <div\n *ngIf=\"\n obs.loading === false &&\n !obs.formDefinition &&\n !obs.formFlowInstanceId &&\n !obs.errorMessage &&\n !obs.processLinkIsUiComponent\n \"\n class=\"bg-warning text-black mb-0 p-3 text-center\"\n >\n {{\n (isAdmin$ | async)\n ? ('formManagement.noFormDefinitionFoundAdmin' | translate)\n : ('formManagement.noFormDefinitionFoundUser' | translate)\n }}\n </div>\n\n <div *ngIf=\"obs.errorMessage\" class=\"bg-danger text-black mb-0 p-3 text-center\">\n {{ obs.errorMessage }}\n </div>\n\n <div class=\"m-2\">\n <ng-template #formViewModelComponent></ng-template>\n <ng-template #formCustomComponent></ng-template>\n </div>\n</ng-container>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormIoModule }, { kind: "component", type: i9.FormioComponent, selector: "valtimo-form-io", inputs: ["options", "submission", "form", "readOnly", "formRefresh$"], outputs: ["submit", "change", "event"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ProcessLinkModule }, { kind: "component", type: i7.FormFlowComponent, selector: "valtimo-form-flow", inputs: ["formIoFormData", "formFlowInstanceId"], outputs: ["formFlowComplete", "formFlowChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1244
1244
  }
1245
1245
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskDetailContentComponent, decorators: [{
1246
1246
  type: Component,
1247
- args: [{ selector: 'valtimo-task-detail-content', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, FormIoModule, TranslateModule, ProcessLinkModule], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"{\n loading: loading$ | async,\n page: page$ | async,\n task: task$ | async,\n taskId: taskInstanceId$ | async,\n formDefinition: formDefinition$ | async,\n formDefinitionId: formDefinitionId$ | async,\n formName: formName$ | async,\n formIoFormData: formIoFormData$ | async,\n submission: submission$ | async,\n processLinkIsForm: processLinkIsForm$ | async,\n processLinkIsFormViewModel: processLinkIsFormViewModel$ | async,\n processLinkIsUiComponent: processLinkIsUiComponent$ | async,\n formioOptions: formioOptions$ | async,\n processLinkIsFormFlow: processLinkIsFormFlow$ | async,\n formFlowInstanceId: formFlowInstanceId$ | async,\n errorMessage: errorMessage$ | async,\n canAssignUserToTask: canAssignUserToTask$ | async,\n } as obs\"\n>\n <valtimo-form-io\n #form\n *ngIf=\"obs.formDefinition && obs.processLinkIsForm\"\n [form]=\"obs.formDefinition\"\n [submission]=\"obs.submission\"\n (submit)=\"onSubmit($event)\"\n (change)=\"onChange($event)\"\n [options]=\"obs.formioOptions\"\n ></valtimo-form-io>\n\n <valtimo-form-flow\n #formFlow\n *ngIf=\"obs.processLinkIsFormFlow\"\n [formIoFormData]=\"formIoFormData$\"\n [formFlowInstanceId]=\"obs.formFlowInstanceId\"\n (formFlowComplete)=\"completeTask(obs.task)\"\n (formFlowChange)=\"onFormFlowChangeEvent()\"\n ></valtimo-form-flow>\n\n <div *ngIf=\"obs.loading\" class=\"text-black mb-0 p-3 text-center\">\n {{ 'formManagement.loading' | translate }}\n </div>\n\n <div\n *ngIf=\"\n obs.loading === false && !obs.formDefinition && !obs.formFlowInstanceId && !obs.errorMessage && !obs.processLinkIsUiComponent\n \"\n class=\"bg-warning text-black mb-0 p-3 text-center\"\n >\n {{\n (isAdmin$ | async)\n ? ('formManagement.noFormDefinitionFoundAdmin' | translate)\n : ('formManagement.noFormDefinitionFoundUser' | translate)\n }}\n </div>\n\n <div *ngIf=\"obs.errorMessage\" class=\"bg-danger text-black mb-0 p-3 text-center\">\n {{ obs.errorMessage }}\n </div>\n\n <div class=\"m-2\">\n <ng-template #formViewModelComponent></ng-template>\n <ng-template #formCustomComponent></ng-template>\n </div>\n</ng-container>\n" }]
1247
+ args: [{ selector: 'valtimo-task-detail-content', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, FormIoModule, TranslateModule, ProcessLinkModule], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"{\n loading: loading$ | async,\n page: page$ | async,\n task: task$ | async,\n taskId: taskInstanceId$ | async,\n formDefinition: formDefinition$ | async,\n formDefinitionId: formDefinitionId$ | async,\n formName: formName$ | async,\n formIoFormData: formIoFormData$ | async,\n submission: submission$ | async,\n processLinkIsForm: processLinkIsForm$ | async,\n processLinkIsFormViewModel: processLinkIsFormViewModel$ | async,\n processLinkIsUiComponent: processLinkIsUiComponent$ | async,\n formioOptions: formioOptions$ | async,\n processLinkIsFormFlow: processLinkIsFormFlow$ | async,\n formFlowInstanceId: formFlowInstanceId$ | async,\n errorMessage: errorMessage$ | async,\n canAssignUserToTask: canAssignUserToTask$ | async,\n } as obs\"\n>\n <valtimo-form-io\n #form\n *ngIf=\"obs.formDefinition && obs.processLinkIsForm\"\n [form]=\"obs.formDefinition\"\n [submission]=\"obs.submission\"\n (submit)=\"onSubmit($event)\"\n (change)=\"onChange($event)\"\n [options]=\"obs.formioOptions\"\n ></valtimo-form-io>\n\n <valtimo-form-flow\n #formFlow\n *ngIf=\"obs.processLinkIsFormFlow\"\n [formIoFormData]=\"formIoFormData$\"\n [formFlowInstanceId]=\"obs.formFlowInstanceId\"\n (formFlowComplete)=\"completeTask(obs.task)\"\n (formFlowChange)=\"onFormFlowChangeEvent()\"\n ></valtimo-form-flow>\n\n <div *ngIf=\"obs.loading\" class=\"text-black mb-0 p-3 text-center\">\n {{ 'formManagement.loading' | translate }}\n </div>\n\n <div\n *ngIf=\"\n obs.loading === false &&\n !obs.formDefinition &&\n !obs.formFlowInstanceId &&\n !obs.errorMessage &&\n !obs.processLinkIsUiComponent\n \"\n class=\"bg-warning text-black mb-0 p-3 text-center\"\n >\n {{\n (isAdmin$ | async)\n ? ('formManagement.noFormDefinitionFoundAdmin' | translate)\n : ('formManagement.noFormDefinitionFoundUser' | translate)\n }}\n </div>\n\n <div *ngIf=\"obs.errorMessage\" class=\"bg-danger text-black mb-0 p-3 text-center\">\n {{ obs.errorMessage }}\n </div>\n\n <div class=\"m-2\">\n <ng-template #formViewModelComponent></ng-template>\n <ng-template #formCustomComponent></ng-template>\n </div>\n</ng-container>\n" }]
1248
1248
  }], ctorParameters: () => [{ type: i1$1.ConfigService }, { type: i2.DocumentService }, { type: i12.IconService }, { type: i4.NGXLogger }, { type: i9.ValtimoModalService }, { type: i3$1.PermissionService }, { type: i7.ProcessLinkService }, { type: i1$2.Router }, { type: i9.FormIoStateService }, { type: TaskIntermediateSaveService }, { type: TaskService }, { type: i10.ToastrService }, { type: i3.TranslateService }, { type: undefined, decorators: [{
1249
1249
  type: Optional
1250
1250
  }, {