@alfresco/adf-process-services 8.1.0-14701637708 → 8.1.0-14714093103
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/app-list/apps-list.component.mjs +4 -4
- package/esm2022/lib/app-list/select-apps-dialog/select-apps-dialog.component.mjs +4 -4
- package/esm2022/lib/attachment/create-process-attachment/create-process-attachment.component.mjs +4 -4
- package/esm2022/lib/attachment/create-task-attachment/create-task-attachment.component.mjs +4 -4
- package/esm2022/lib/attachment/process-attachment-list/process-attachment-list.component.mjs +4 -4
- package/esm2022/lib/attachment/task-attachment-list/task-attachment-list.component.mjs +4 -4
- package/esm2022/lib/form/form-custom-outcomes.component.mjs +4 -4
- package/esm2022/lib/form/form-list/form-list.component.mjs +4 -4
- package/esm2022/lib/form/form.component.mjs +4 -4
- package/esm2022/lib/form/process-form-rendering.service.mjs +4 -4
- package/esm2022/lib/form/services/activiti-alfresco.service.mjs +4 -4
- package/esm2022/lib/form/services/ecm-model.service.mjs +4 -4
- package/esm2022/lib/form/services/editor.service.mjs +4 -4
- package/esm2022/lib/form/services/external-alfresco-api.service.mjs +4 -4
- package/esm2022/lib/form/services/model.service.mjs +4 -4
- package/esm2022/lib/form/services/process-content.service.mjs +4 -4
- package/esm2022/lib/form/services/process-definition.service.mjs +4 -4
- package/esm2022/lib/form/services/task-form.service.mjs +4 -4
- package/esm2022/lib/form/services/task.service.mjs +4 -4
- package/esm2022/lib/form/start-form/start-form.component.mjs +4 -4
- package/esm2022/lib/form/widgets/content-widget/attach-file-widget-dialog.component.mjs +4 -4
- package/esm2022/lib/form/widgets/content-widget/attach-file-widget-dialog.service.mjs +4 -4
- package/esm2022/lib/form/widgets/content-widget/attach-file-widget.component.mjs +4 -4
- package/esm2022/lib/form/widgets/content-widget/attach-folder-widget.component.mjs +4 -4
- package/esm2022/lib/form/widgets/document/content.widget.mjs +4 -4
- package/esm2022/lib/form/widgets/document/document.widget.mjs +4 -4
- package/esm2022/lib/form/widgets/dropdown/dropdown.widget.mjs +4 -4
- package/esm2022/lib/form/widgets/dynamic-table/dynamic-table.widget.mjs +4 -4
- package/esm2022/lib/form/widgets/dynamic-table/editors/amount/amount.editor.mjs +4 -4
- package/esm2022/lib/form/widgets/dynamic-table/editors/boolean/boolean.editor.mjs +4 -4
- package/esm2022/lib/form/widgets/dynamic-table/editors/date/date.editor.mjs +4 -4
- package/esm2022/lib/form/widgets/dynamic-table/editors/datetime/datetime.editor.mjs +4 -4
- package/esm2022/lib/form/widgets/dynamic-table/editors/dropdown/dropdown.editor.mjs +4 -4
- package/esm2022/lib/form/widgets/dynamic-table/editors/row-editor/row.editor.mjs +4 -4
- package/esm2022/lib/form/widgets/dynamic-table/editors/text/text.editor.mjs +4 -4
- package/esm2022/lib/form/widgets/file-viewer/file-viewer.widget.mjs +4 -4
- package/esm2022/lib/form/widgets/functional-group/functional-group.widget.mjs +4 -4
- package/esm2022/lib/form/widgets/people/people.widget.mjs +4 -4
- package/esm2022/lib/form/widgets/radio-buttons/radio-buttons.widget.mjs +4 -4
- package/esm2022/lib/form/widgets/typeahead/typeahead.widget.mjs +4 -4
- package/esm2022/lib/form/widgets/upload/upload.widget.mjs +4 -4
- package/esm2022/lib/people/components/people/people.component.mjs +4 -4
- package/esm2022/lib/people/components/people-list/people-list.component.mjs +4 -4
- package/esm2022/lib/people/components/people-search/people-search.component.mjs +4 -4
- package/esm2022/lib/people/components/people-search-field/people-search-field.component.mjs +4 -4
- package/esm2022/lib/people/components/people-selector/people-selector.component.mjs +4 -4
- package/esm2022/lib/process-comments/process-comments.component.mjs +4 -4
- package/esm2022/lib/process-comments/services/comment-process.service.mjs +4 -4
- package/esm2022/lib/process-list/components/process-audit/process-audit.directive.mjs +4 -4
- package/esm2022/lib/process-list/components/process-filters/process-filters.component.mjs +4 -4
- package/esm2022/lib/process-list/components/process-instance-details/process-instance-details.component.mjs +4 -4
- package/esm2022/lib/process-list/components/process-instance-header/process-instance-header.component.mjs +4 -4
- package/esm2022/lib/process-list/components/process-instance-tasks/process-instance-tasks.component.mjs +4 -4
- package/esm2022/lib/process-list/components/process-list/process-list.component.mjs +4 -4
- package/esm2022/lib/process-list/components/start-process/start-process.component.mjs +5 -5
- package/esm2022/lib/process-list/services/process-filter.service.mjs +4 -4
- package/esm2022/lib/process-list/services/process.service.mjs +4 -4
- package/esm2022/lib/process.module.mjs +5 -5
- package/esm2022/lib/services/apps-process.service.mjs +4 -4
- package/esm2022/lib/services/people-process.service.mjs +4 -4
- package/esm2022/lib/services/task-comments.service.mjs +4 -4
- package/esm2022/lib/task-comments/task-comments.component.mjs +4 -4
- package/esm2022/lib/task-list/components/attach-form/attach-form.component.mjs +4 -4
- package/esm2022/lib/task-list/components/checklist/checklist.component.mjs +4 -4
- package/esm2022/lib/task-list/components/start-task/start-task.component.mjs +4 -4
- package/esm2022/lib/task-list/components/task-details/task-details.component.mjs +4 -4
- package/esm2022/lib/task-list/components/task-filters/task-filters.component.mjs +4 -4
- package/esm2022/lib/task-list/components/task-form/claim-task.directive.mjs +4 -4
- package/esm2022/lib/task-list/components/task-form/task-form.component.mjs +4 -4
- package/esm2022/lib/task-list/components/task-form/unclaim-task.directive.mjs +4 -4
- package/esm2022/lib/task-list/components/task-header/task-header.component.mjs +4 -4
- package/esm2022/lib/task-list/components/task-list/task-list.component.mjs +4 -4
- package/esm2022/lib/task-list/components/task-standalone/task-standalone.component.mjs +4 -4
- package/esm2022/lib/task-list/services/process-upload.service.mjs +4 -4
- package/esm2022/lib/task-list/services/task-filter.service.mjs +4 -4
- package/esm2022/lib/task-list/services/task-upload.service.mjs +4 -4
- package/esm2022/lib/task-list/services/tasklist.service.mjs +4 -4
- package/fesm2022/adf-process-services.mjs +237 -237
- package/fesm2022/adf-process-services.mjs.map +1 -1
- package/lib/app-list/apps-list.component.scss +51 -23
- package/lib/attachment/process-attachment-list/process-attachment-list.component.scss +2 -2
- package/lib/attachment/task-attachment-list/task-attachment-list.component.scss +3 -3
- package/lib/form/start-form/start-form.component.scss +59 -60
- package/lib/form/widgets/content-widget/attach-file-widget-dialog.component.scss +3 -4
- package/lib/form/widgets/content-widget/attach-folder-widget.component.scss +3 -3
- package/lib/form/widgets/dropdown/dropdown.widget.scss +2 -2
- package/lib/form/widgets/people/people.widget.scss +2 -2
- package/lib/form/widgets/upload/upload.widget.scss +2 -2
- package/lib/people/components/people/people.component.scss +2 -2
- package/lib/process-list/components/start-process/start-process.component.scss +12 -12
- package/lib/styles/flex.scss +81 -0
- package/lib/styles/mat-selectors.scss +25 -0
- package/lib/task-list/components/attach-form/attach-form.component.scss +2 -2
- package/lib/task-list/components/checklist/checklist.component.scss +2 -2
- package/lib/task-list/components/start-task/start-task.component.scss +11 -11
- package/lib/task-list/components/task-details/task-details.component.scss +5 -5
- package/lib/task-list/components/task-form/task-form.component.scss +3 -3
- package/lib/task-list/components/task-header/task-header.component.scss +2 -2
- package/lib/task-list/components/task-standalone/task-standalone.component.scss +2 -2
- package/package.json +4 -4
|
@@ -366,10 +366,10 @@ export class StartProcessInstanceComponent {
|
|
|
366
366
|
}
|
|
367
367
|
return processName;
|
|
368
368
|
}
|
|
369
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
370
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: StartProcessInstanceComponent, isStandalone: true, selector: "adf-start-process", inputs: { appId: "appId", title: "title", processDefinitionName: "processDefinitionName", variables: "variables", values: "values", name: "name", showSelectProcessDropdown: "showSelectProcessDropdown", showSelectApplicationDropdown: "showSelectApplicationDropdown", processFilterSelector: "processFilterSelector" }, outputs: { start: "start", cancel: "cancel", error: "error", processDefinitionSelection: "processDefinitionSelection", applicationSelection: "applicationSelection" }, viewQueries: [{ propertyName: "startForm", first: true, predicate: ["startForm"], descendants: true }, { propertyName: "inputAutocomplete", first: true, predicate: MatAutocompleteTrigger, descendants: true }], usesOnChanges: true, ngImport: i0, template: "\n<ng-container *ngIf=\"isLoading(); then showLoadingTemplate; else showStartProcessTemplate\" />\n <ng-template #showLoadingTemplate>\n <mat-spinner class=\"adf-start-process-loading\" />\n </ng-template>\n<ng-template #showStartProcessTemplate>\n <ng-container *ngIf=\"hasApplications() || hasProcessDefinitions() ; else showEmptyTemplate\">\n <div class=\"adf-start-process\">\n <div class=\"adf-title\" *ngIf=\"title\">{{ title | translate}}</div>\n <div class=\"content\">\n <div class=\"adf-start-process-definition-container\">\n <mat-form-field *ngIf=\"showSelectApplicationDropdown\" [floatLabel]=\"'always'\" class=\"adf-start-process-app-list\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.SELECT_APPLICATION' | translate }}</mat-label>\n <mat-select\n placeholder=\"{{ 'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.SELECT_APPLICATION' | translate }}\"\n (selectionChange)=\"onAppSelectionChange($event)\"\n [(ngModel)]=\"selectedApplication\"\n class=\"adf-start-process-definition-select\"\n data-automation-id=\"adf-start-process-apps-drop-down\">\n <mat-option\n *ngFor=\"let application of applications\"\n [value]=\"application\"\n role=\"option\"\n [attr.data-automation-id]=\"'adf-start-process-apps-option-' + application.name\">\n {{ application.name }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field class=\"adf-process-input-container\" [floatLabel]=\"'always'\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.TYPE' | translate}}</mat-label>\n <input\n type=\"text\"\n matInput\n [formControl]=\"processDefinitionInput\"\n [matAutocomplete]=\"auto\"\n id=\"processDefinitionName\">\n <div class=\"adf-process-input-autocomplete\">\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n id=\"processDefinitionOptions\"\n [displayWith]=\"displayFn\">\n <mat-option *ngFor=\"let processDef of filteredProcessesDefinitions$ | async\" [value]=\"processDef.name\"\n (click)=\"processDefinitionSelectionChanged(processDef)\">\n {{ processDef.name }}\n </mat-option>\n </mat-autocomplete>\n <ng-container *ngIf=\"!isProcessDefinitionsLoading ; else showProcessDefLoadingTemplate\">\n <button\n class=\"adf-start-process-button\"\n id=\"adf-select-process-dropdown\"\n *ngIf=\"showSelectProcessDropdown\"\n mat-icon-button\n (click)=\"displayDropdown($event)\"\n [disabled]=\"isDropdownDisabled()\"\n [attr.aria-label]=\"'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.TYPE' | translate | uppercase\">\n <mat-icon>arrow_drop_down</mat-icon>\n </button>\n </ng-container>\n <ng-template #showProcessDefLoadingTemplate>\n <mat-spinner id=\"adf-select-process-spinner\" [diameter]=\"20\" />\n </ng-template>\n </div>\n </mat-form-field>\n </div>\n <mat-form-field class=\"adf-process-input-container adf-process-input-container-process-name\" [floatLabel]=\"'always'\">\n <mat-label>{{'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.NAME' | translate}}</mat-label>\n <input\n matInput\n [formControl]=\"processNameInput\"\n id=\"processName\"\n required/>\n <mat-error *ngIf=\"nameController.hasError('maxlength')\">\n {{ 'ADF_PROCESS_LIST.START_PROCESS.ERROR.MAXIMUM_LENGTH' | translate : { characters : maxProcessNameLength } }}\n </mat-error>\n <mat-error *ngIf=\"nameController.hasError('required')\">\n {{ 'ADF_PROCESS_LIST.START_PROCESS.ERROR.PROCESS_NAME_REQUIRED' | translate }}\n </mat-error>\n <mat-error *ngIf=\"nameController.hasError('pattern')\">\n {{ 'ADF_PROCESS_LIST.START_PROCESS.ERROR.SPACE_VALIDATOR' | translate }}\n </mat-error>\n </mat-form-field>\n\n <ng-container *ngIf=\"!isProcessDefinitionsLoading ; else showStartFormLoadingTemplate\">\n <ng-container *ngIf=\"isProcessDefinitionSelected() ; else emptyProcessDefTemplate\">\n <ng-container *ngIf=\"hasStartForm(); else noStartFormTemplate\">\n <adf-start-form\n #startForm\n [data]=\"movedNodeToPS\"\n [disableStartProcessButton]=\"processNameInput.invalid\"\n [processDefinitionId]=\"selectedProcessDef.id\"\n (outcomeClick)=\"onOutcomeClick($event)\"\n [showRefreshButton]=\"false\">\n <button\n class=\"adf-start-process-button\"\n adf-form-custom-button\n mat-button\n (click)=\"cancelStartProcess()\"\n id=\"cancel_process\">\n {{'ADF_PROCESS_LIST.START_PROCESS.FORM.ACTION.CANCEL'| translate | uppercase}}\n </button>\n </adf-start-form>\n </ng-container>\n <ng-template #noStartFormTemplate>\n <adf-empty-content\n class=\"adf-start-process-empty-template\"\n [icon]=\"'assessment'\"\n [title]=\"'ADF_PROCESS_LIST.START_PROCESS.NO_START_FORM' | translate\" />\n </ng-template>\n </ng-container>\n <ng-template #emptyProcessDefTemplate>\n <adf-empty-content class=\"adf-start-process-empty-template\"\n [icon]=\"'assessment'\"\n [title]=\"'ADF_PROCESS_LIST.START_PROCESS.NO_PROCESS_DEF_SELECTED' | translate\" />\n </ng-template>\n </ng-container>\n <ng-template #showStartFormLoadingTemplate>\n <mat-spinner class=\"adf-start-process-loading\" />\n </ng-template>\n </div>\n <div class=\"adf-start-process-content-actions\" *ngIf=\"!hasStartForm()\">\n <button\n class=\"adf-start-process-button\"\n mat-button\n *ngIf=\"!hasStartForm()\"\n (click)=\"cancelStartProcess()\"\n id=\"cancel_process\">\n {{'ADF_PROCESS_LIST.START_PROCESS.FORM.ACTION.CANCEL'| translate | uppercase}}\n </button>\n <button\n color=\"primary\"\n mat-button\n *ngIf=\"!hasStartForm()\"\n [disabled]=\"!validateForm()\"\n (click)=\"startProcess()\"\n data-automation-id=\"btn-start\"\n id=\"button-start\"\n class=\"btn-start adf-start-process-button\">\n {{'ADF_PROCESS_LIST.START_PROCESS.FORM.ACTION.START' | translate | uppercase}}\n </button>\n </div>\n </div>\n </ng-container>\n <ng-template #showEmptyTemplate>\n <adf-empty-content class=\"adf-start-process-empty-template\"\n [icon]=\"'assessment'\"\n [title]=\"'ADF_PROCESS_LIST.START_PROCESS.NO_PROCESS_DEFINITIONS' | translate\" />\n </ng-template>\n</ng-template>\n", styles: [".adf-start-process{width:96%;margin-left:auto;margin-right:auto;margin-top:10px}.adf-start-process mat-form-field{width:100%}.adf-start-process .mat-mdc-floating-label{color:var(--adf-theme-mat-grey-color-a200-dark)}.adf-start-process-content-actions{padding-bottom:16px;padding-right:16px;text-align:right}.adf-start-process .mat-mdc-button{width:auto;padding:0 16px;margin:0 8px;white-space:nowrap}.adf-title{padding-bottom:1.25em}.adf-process-input-container mat-form-field{width:100%}.adf-process-input-container-process-name{margin-top:16px}.adf-process-input-autocomplete{display:flex;padding-bottom:2px}.adf-process-input-autocomplete .adf-start-process-button{position:absolute;right:-14px;top:10px}.adf-process-input-autocomplete mat-spinner{position:absolute;right:-1px;top:0}.adf-start-form-container .mat-mdc-card-content{margin-bottom:100px}.adf-start-form-container .mat-mdc-card-header{display:none}.adf-start-form-container .adf-start-form-card:has(.adf-start-form-header){box-shadow:none;padding:0}.adf-start-form-actions:has(.adf-start-form-actions-button){text-align:right;padding-bottom:16px}.adf-start-form-actions:has(.adf-start-form-actions-button) button{text-wrap:none}.adf-start-process-definition-container{display:flex;flex-direction:row;justify-content:space-around;align-items:baseline}.adf-start-process-definition-container .adf-start-process-definition-select .mat-mdc-select-arrow-wrapper{transform:none}.adf-start-process-definition-container .adf-start-process-definition-select .mat-mdc-select-arrow-wrapper svg{fill:initial}.adf-start-process-app-list{margin-right:10px}@media (max-width: 599.9px){.adf-start-process{width:90%;margin-left:auto;margin-right:auto}}.adf-start-process-loading{margin-left:calc((100% - 100px)/2);margin-right:calc((100% - 100px)/2)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.UpperCasePipe, name: "uppercase" }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i6.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "directive", type: i8.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i9.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i10.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i11.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i11.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i11.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i11.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i12.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i12.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i13.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i13.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i14.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i15.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: EmptyContentComponent, selector: "adf-empty-content", inputs: ["icon", "title", "subtitle"] }, { kind: "component", type: StartFormComponent, selector: "adf-start-form", inputs: ["processDefinitionId", "processId", "showOutcomeButtons", "showRefreshButton", "readOnlyForm"], outputs: ["outcomeClick", "formContentClicked"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
369
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: StartProcessInstanceComponent, deps: [{ token: i1.ProcessService }, { token: i2.ActivitiContentService }, { token: i3.AppsProcessService }, { token: i4.AppConfigService }, { token: i4.LocalizedDatePipe }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
370
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: StartProcessInstanceComponent, isStandalone: true, selector: "adf-start-process", inputs: { appId: "appId", title: "title", processDefinitionName: "processDefinitionName", variables: "variables", values: "values", name: "name", showSelectProcessDropdown: "showSelectProcessDropdown", showSelectApplicationDropdown: "showSelectApplicationDropdown", processFilterSelector: "processFilterSelector" }, outputs: { start: "start", cancel: "cancel", error: "error", processDefinitionSelection: "processDefinitionSelection", applicationSelection: "applicationSelection" }, viewQueries: [{ propertyName: "startForm", first: true, predicate: ["startForm"], descendants: true }, { propertyName: "inputAutocomplete", first: true, predicate: MatAutocompleteTrigger, descendants: true }], usesOnChanges: true, ngImport: i0, template: "\n<ng-container *ngIf=\"isLoading(); then showLoadingTemplate; else showStartProcessTemplate\" />\n <ng-template #showLoadingTemplate>\n <mat-spinner class=\"adf-start-process-loading\" />\n </ng-template>\n<ng-template #showStartProcessTemplate>\n <ng-container *ngIf=\"hasApplications() || hasProcessDefinitions() ; else showEmptyTemplate\">\n <div class=\"adf-start-process\">\n <div class=\"adf-title\" *ngIf=\"title\">{{ title | translate}}</div>\n <div class=\"content\">\n <div class=\"adf-start-process-definition-container\">\n <mat-form-field *ngIf=\"showSelectApplicationDropdown\" [floatLabel]=\"'always'\" class=\"adf-start-process-app-list\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.SELECT_APPLICATION' | translate }}</mat-label>\n <mat-select\n placeholder=\"{{ 'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.SELECT_APPLICATION' | translate }}\"\n (selectionChange)=\"onAppSelectionChange($event)\"\n [(ngModel)]=\"selectedApplication\"\n class=\"adf-start-process-definition-select\"\n data-automation-id=\"adf-start-process-apps-drop-down\">\n <mat-option\n *ngFor=\"let application of applications\"\n [value]=\"application\"\n role=\"option\"\n [attr.data-automation-id]=\"'adf-start-process-apps-option-' + application.name\">\n {{ application.name }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field class=\"adf-process-input-container\" [floatLabel]=\"'always'\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.TYPE' | translate}}</mat-label>\n <input\n type=\"text\"\n matInput\n [formControl]=\"processDefinitionInput\"\n [matAutocomplete]=\"auto\"\n id=\"processDefinitionName\">\n <div class=\"adf-process-input-autocomplete\">\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n id=\"processDefinitionOptions\"\n [displayWith]=\"displayFn\">\n <mat-option *ngFor=\"let processDef of filteredProcessesDefinitions$ | async\" [value]=\"processDef.name\"\n (click)=\"processDefinitionSelectionChanged(processDef)\">\n {{ processDef.name }}\n </mat-option>\n </mat-autocomplete>\n <ng-container *ngIf=\"!isProcessDefinitionsLoading ; else showProcessDefLoadingTemplate\">\n <button\n class=\"adf-start-process-button\"\n id=\"adf-select-process-dropdown\"\n *ngIf=\"showSelectProcessDropdown\"\n mat-icon-button\n (click)=\"displayDropdown($event)\"\n [disabled]=\"isDropdownDisabled()\"\n [attr.aria-label]=\"'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.TYPE' | translate | uppercase\">\n <mat-icon>arrow_drop_down</mat-icon>\n </button>\n </ng-container>\n <ng-template #showProcessDefLoadingTemplate>\n <mat-spinner id=\"adf-select-process-spinner\" [diameter]=\"20\" />\n </ng-template>\n </div>\n </mat-form-field>\n </div>\n <mat-form-field class=\"adf-process-input-container adf-process-input-container-process-name\" [floatLabel]=\"'always'\">\n <mat-label>{{'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.NAME' | translate}}</mat-label>\n <input\n matInput\n [formControl]=\"processNameInput\"\n id=\"processName\"\n required/>\n <mat-error *ngIf=\"nameController.hasError('maxlength')\">\n {{ 'ADF_PROCESS_LIST.START_PROCESS.ERROR.MAXIMUM_LENGTH' | translate : { characters : maxProcessNameLength } }}\n </mat-error>\n <mat-error *ngIf=\"nameController.hasError('required')\">\n {{ 'ADF_PROCESS_LIST.START_PROCESS.ERROR.PROCESS_NAME_REQUIRED' | translate }}\n </mat-error>\n <mat-error *ngIf=\"nameController.hasError('pattern')\">\n {{ 'ADF_PROCESS_LIST.START_PROCESS.ERROR.SPACE_VALIDATOR' | translate }}\n </mat-error>\n </mat-form-field>\n\n <ng-container *ngIf=\"!isProcessDefinitionsLoading ; else showStartFormLoadingTemplate\">\n <ng-container *ngIf=\"isProcessDefinitionSelected() ; else emptyProcessDefTemplate\">\n <ng-container *ngIf=\"hasStartForm(); else noStartFormTemplate\">\n <adf-start-form\n #startForm\n [data]=\"movedNodeToPS\"\n [disableStartProcessButton]=\"processNameInput.invalid\"\n [processDefinitionId]=\"selectedProcessDef.id\"\n (outcomeClick)=\"onOutcomeClick($event)\"\n [showRefreshButton]=\"false\">\n <button\n class=\"adf-start-process-button\"\n adf-form-custom-button\n mat-button\n (click)=\"cancelStartProcess()\"\n id=\"cancel_process\">\n {{'ADF_PROCESS_LIST.START_PROCESS.FORM.ACTION.CANCEL'| translate | uppercase}}\n </button>\n </adf-start-form>\n </ng-container>\n <ng-template #noStartFormTemplate>\n <adf-empty-content\n class=\"adf-start-process-empty-template\"\n [icon]=\"'assessment'\"\n [title]=\"'ADF_PROCESS_LIST.START_PROCESS.NO_START_FORM' | translate\" />\n </ng-template>\n </ng-container>\n <ng-template #emptyProcessDefTemplate>\n <adf-empty-content class=\"adf-start-process-empty-template\"\n [icon]=\"'assessment'\"\n [title]=\"'ADF_PROCESS_LIST.START_PROCESS.NO_PROCESS_DEF_SELECTED' | translate\" />\n </ng-template>\n </ng-container>\n <ng-template #showStartFormLoadingTemplate>\n <mat-spinner class=\"adf-start-process-loading\" />\n </ng-template>\n </div>\n <div class=\"adf-start-process-content-actions\" *ngIf=\"!hasStartForm()\">\n <button\n class=\"adf-start-process-button\"\n mat-button\n *ngIf=\"!hasStartForm()\"\n (click)=\"cancelStartProcess()\"\n id=\"cancel_process\">\n {{'ADF_PROCESS_LIST.START_PROCESS.FORM.ACTION.CANCEL'| translate | uppercase}}\n </button>\n <button\n color=\"primary\"\n mat-button\n *ngIf=\"!hasStartForm()\"\n [disabled]=\"!validateForm()\"\n (click)=\"startProcess()\"\n data-automation-id=\"btn-start\"\n id=\"button-start\"\n class=\"btn-start adf-start-process-button\">\n {{'ADF_PROCESS_LIST.START_PROCESS.FORM.ACTION.START' | translate | uppercase}}\n </button>\n </div>\n </div>\n </ng-container>\n <ng-template #showEmptyTemplate>\n <adf-empty-content class=\"adf-start-process-empty-template\"\n [icon]=\"'assessment'\"\n [title]=\"'ADF_PROCESS_LIST.START_PROCESS.NO_PROCESS_DEFINITIONS' | translate\" />\n </ng-template>\n</ng-template>\n", styles: [".adf-start-process{width:96%;margin-left:auto;margin-right:auto;margin-top:10px}.adf-start-process mat-form-field{width:100%}.adf-start-process .mat-mdc-floating-label{color:var(--adf-theme-mat-grey-color-a200-dark)}.adf-start-process-content-actions{padding-bottom:16px;padding-right:16px;text-align:right}.adf-start-process .mat-mdc-button{width:auto;padding:0 16px;margin:0 8px;white-space:nowrap}.adf-title{padding-bottom:1.25em}.adf-process-input-container mat-form-field{width:100%}.adf-process-input-container-process-name{margin-top:16px}.adf-process-input-autocomplete{display:flex;padding-bottom:2px}.adf-process-input-autocomplete .adf-start-process-button{position:absolute;right:-14px;top:10px}.adf-process-input-autocomplete mat-spinner{position:absolute;right:-1px;top:0}.adf-start-form-container .mat-mdc-card-content{margin-bottom:100px}.adf-start-form-container .mat-mdc-card-header{display:none}.adf-start-form-container .adf-start-form-card:has(.adf-start-form-header){box-shadow:none;padding:0}.adf-start-form-actions:has(.adf-start-form-actions-button){text-align:right;padding-bottom:16px}.adf-start-form-actions:has(.adf-start-form-actions-button) button{text-wrap:nowrap}.adf-start-process-definition-container{display:flex;flex-direction:row;justify-content:space-around;align-items:baseline}.adf-start-process-definition-container .adf-start-process-definition-select .mat-mdc-select-arrow-wrapper{transform:none}.adf-start-process-definition-container .adf-start-process-definition-select .mat-mdc-select-arrow-wrapper svg{fill:currentcolor}.adf-start-process-app-list{margin-right:10px}@media (max-width: 599.9px){.adf-start-process{width:90%;margin-left:auto;margin-right:auto}}.adf-start-process-loading{margin-left:calc((100% - 100px)/2);margin-right:calc((100% - 100px)/2)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.UpperCasePipe, name: "uppercase" }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i6.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "directive", type: i8.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i9.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i10.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i11.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i11.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i11.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i11.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i12.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i12.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i13.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i13.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i14.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i15.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: EmptyContentComponent, selector: "adf-empty-content", inputs: ["icon", "title", "subtitle"] }, { kind: "component", type: StartFormComponent, selector: "adf-start-form", inputs: ["processDefinitionId", "processId", "showOutcomeButtons", "showRefreshButton", "readOnlyForm"], outputs: ["outcomeClick", "formContentClicked"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
371
371
|
}
|
|
372
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
372
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: StartProcessInstanceComponent, decorators: [{
|
|
373
373
|
type: Component,
|
|
374
374
|
args: [{ selector: 'adf-start-process', standalone: true, imports: [
|
|
375
375
|
CommonModule,
|
|
@@ -385,7 +385,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
385
385
|
MatInputModule,
|
|
386
386
|
EmptyContentComponent,
|
|
387
387
|
StartFormComponent
|
|
388
|
-
], encapsulation: ViewEncapsulation.None, template: "\n<ng-container *ngIf=\"isLoading(); then showLoadingTemplate; else showStartProcessTemplate\" />\n <ng-template #showLoadingTemplate>\n <mat-spinner class=\"adf-start-process-loading\" />\n </ng-template>\n<ng-template #showStartProcessTemplate>\n <ng-container *ngIf=\"hasApplications() || hasProcessDefinitions() ; else showEmptyTemplate\">\n <div class=\"adf-start-process\">\n <div class=\"adf-title\" *ngIf=\"title\">{{ title | translate}}</div>\n <div class=\"content\">\n <div class=\"adf-start-process-definition-container\">\n <mat-form-field *ngIf=\"showSelectApplicationDropdown\" [floatLabel]=\"'always'\" class=\"adf-start-process-app-list\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.SELECT_APPLICATION' | translate }}</mat-label>\n <mat-select\n placeholder=\"{{ 'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.SELECT_APPLICATION' | translate }}\"\n (selectionChange)=\"onAppSelectionChange($event)\"\n [(ngModel)]=\"selectedApplication\"\n class=\"adf-start-process-definition-select\"\n data-automation-id=\"adf-start-process-apps-drop-down\">\n <mat-option\n *ngFor=\"let application of applications\"\n [value]=\"application\"\n role=\"option\"\n [attr.data-automation-id]=\"'adf-start-process-apps-option-' + application.name\">\n {{ application.name }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field class=\"adf-process-input-container\" [floatLabel]=\"'always'\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.TYPE' | translate}}</mat-label>\n <input\n type=\"text\"\n matInput\n [formControl]=\"processDefinitionInput\"\n [matAutocomplete]=\"auto\"\n id=\"processDefinitionName\">\n <div class=\"adf-process-input-autocomplete\">\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n id=\"processDefinitionOptions\"\n [displayWith]=\"displayFn\">\n <mat-option *ngFor=\"let processDef of filteredProcessesDefinitions$ | async\" [value]=\"processDef.name\"\n (click)=\"processDefinitionSelectionChanged(processDef)\">\n {{ processDef.name }}\n </mat-option>\n </mat-autocomplete>\n <ng-container *ngIf=\"!isProcessDefinitionsLoading ; else showProcessDefLoadingTemplate\">\n <button\n class=\"adf-start-process-button\"\n id=\"adf-select-process-dropdown\"\n *ngIf=\"showSelectProcessDropdown\"\n mat-icon-button\n (click)=\"displayDropdown($event)\"\n [disabled]=\"isDropdownDisabled()\"\n [attr.aria-label]=\"'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.TYPE' | translate | uppercase\">\n <mat-icon>arrow_drop_down</mat-icon>\n </button>\n </ng-container>\n <ng-template #showProcessDefLoadingTemplate>\n <mat-spinner id=\"adf-select-process-spinner\" [diameter]=\"20\" />\n </ng-template>\n </div>\n </mat-form-field>\n </div>\n <mat-form-field class=\"adf-process-input-container adf-process-input-container-process-name\" [floatLabel]=\"'always'\">\n <mat-label>{{'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.NAME' | translate}}</mat-label>\n <input\n matInput\n [formControl]=\"processNameInput\"\n id=\"processName\"\n required/>\n <mat-error *ngIf=\"nameController.hasError('maxlength')\">\n {{ 'ADF_PROCESS_LIST.START_PROCESS.ERROR.MAXIMUM_LENGTH' | translate : { characters : maxProcessNameLength } }}\n </mat-error>\n <mat-error *ngIf=\"nameController.hasError('required')\">\n {{ 'ADF_PROCESS_LIST.START_PROCESS.ERROR.PROCESS_NAME_REQUIRED' | translate }}\n </mat-error>\n <mat-error *ngIf=\"nameController.hasError('pattern')\">\n {{ 'ADF_PROCESS_LIST.START_PROCESS.ERROR.SPACE_VALIDATOR' | translate }}\n </mat-error>\n </mat-form-field>\n\n <ng-container *ngIf=\"!isProcessDefinitionsLoading ; else showStartFormLoadingTemplate\">\n <ng-container *ngIf=\"isProcessDefinitionSelected() ; else emptyProcessDefTemplate\">\n <ng-container *ngIf=\"hasStartForm(); else noStartFormTemplate\">\n <adf-start-form\n #startForm\n [data]=\"movedNodeToPS\"\n [disableStartProcessButton]=\"processNameInput.invalid\"\n [processDefinitionId]=\"selectedProcessDef.id\"\n (outcomeClick)=\"onOutcomeClick($event)\"\n [showRefreshButton]=\"false\">\n <button\n class=\"adf-start-process-button\"\n adf-form-custom-button\n mat-button\n (click)=\"cancelStartProcess()\"\n id=\"cancel_process\">\n {{'ADF_PROCESS_LIST.START_PROCESS.FORM.ACTION.CANCEL'| translate | uppercase}}\n </button>\n </adf-start-form>\n </ng-container>\n <ng-template #noStartFormTemplate>\n <adf-empty-content\n class=\"adf-start-process-empty-template\"\n [icon]=\"'assessment'\"\n [title]=\"'ADF_PROCESS_LIST.START_PROCESS.NO_START_FORM' | translate\" />\n </ng-template>\n </ng-container>\n <ng-template #emptyProcessDefTemplate>\n <adf-empty-content class=\"adf-start-process-empty-template\"\n [icon]=\"'assessment'\"\n [title]=\"'ADF_PROCESS_LIST.START_PROCESS.NO_PROCESS_DEF_SELECTED' | translate\" />\n </ng-template>\n </ng-container>\n <ng-template #showStartFormLoadingTemplate>\n <mat-spinner class=\"adf-start-process-loading\" />\n </ng-template>\n </div>\n <div class=\"adf-start-process-content-actions\" *ngIf=\"!hasStartForm()\">\n <button\n class=\"adf-start-process-button\"\n mat-button\n *ngIf=\"!hasStartForm()\"\n (click)=\"cancelStartProcess()\"\n id=\"cancel_process\">\n {{'ADF_PROCESS_LIST.START_PROCESS.FORM.ACTION.CANCEL'| translate | uppercase}}\n </button>\n <button\n color=\"primary\"\n mat-button\n *ngIf=\"!hasStartForm()\"\n [disabled]=\"!validateForm()\"\n (click)=\"startProcess()\"\n data-automation-id=\"btn-start\"\n id=\"button-start\"\n class=\"btn-start adf-start-process-button\">\n {{'ADF_PROCESS_LIST.START_PROCESS.FORM.ACTION.START' | translate | uppercase}}\n </button>\n </div>\n </div>\n </ng-container>\n <ng-template #showEmptyTemplate>\n <adf-empty-content class=\"adf-start-process-empty-template\"\n [icon]=\"'assessment'\"\n [title]=\"'ADF_PROCESS_LIST.START_PROCESS.NO_PROCESS_DEFINITIONS' | translate\" />\n </ng-template>\n</ng-template>\n", styles: [".adf-start-process{width:96%;margin-left:auto;margin-right:auto;margin-top:10px}.adf-start-process mat-form-field{width:100%}.adf-start-process .mat-mdc-floating-label{color:var(--adf-theme-mat-grey-color-a200-dark)}.adf-start-process-content-actions{padding-bottom:16px;padding-right:16px;text-align:right}.adf-start-process .mat-mdc-button{width:auto;padding:0 16px;margin:0 8px;white-space:nowrap}.adf-title{padding-bottom:1.25em}.adf-process-input-container mat-form-field{width:100%}.adf-process-input-container-process-name{margin-top:16px}.adf-process-input-autocomplete{display:flex;padding-bottom:2px}.adf-process-input-autocomplete .adf-start-process-button{position:absolute;right:-14px;top:10px}.adf-process-input-autocomplete mat-spinner{position:absolute;right:-1px;top:0}.adf-start-form-container .mat-mdc-card-content{margin-bottom:100px}.adf-start-form-container .mat-mdc-card-header{display:none}.adf-start-form-container .adf-start-form-card:has(.adf-start-form-header){box-shadow:none;padding:0}.adf-start-form-actions:has(.adf-start-form-actions-button){text-align:right;padding-bottom:16px}.adf-start-form-actions:has(.adf-start-form-actions-button) button{text-wrap:none}.adf-start-process-definition-container{display:flex;flex-direction:row;justify-content:space-around;align-items:baseline}.adf-start-process-definition-container .adf-start-process-definition-select .mat-mdc-select-arrow-wrapper{transform:none}.adf-start-process-definition-container .adf-start-process-definition-select .mat-mdc-select-arrow-wrapper svg{fill:initial}.adf-start-process-app-list{margin-right:10px}@media (max-width: 599.9px){.adf-start-process{width:90%;margin-left:auto;margin-right:auto}}.adf-start-process-loading{margin-left:calc((100% - 100px)/2);margin-right:calc((100% - 100px)/2)}\n"] }]
|
|
388
|
+
], encapsulation: ViewEncapsulation.None, template: "\n<ng-container *ngIf=\"isLoading(); then showLoadingTemplate; else showStartProcessTemplate\" />\n <ng-template #showLoadingTemplate>\n <mat-spinner class=\"adf-start-process-loading\" />\n </ng-template>\n<ng-template #showStartProcessTemplate>\n <ng-container *ngIf=\"hasApplications() || hasProcessDefinitions() ; else showEmptyTemplate\">\n <div class=\"adf-start-process\">\n <div class=\"adf-title\" *ngIf=\"title\">{{ title | translate}}</div>\n <div class=\"content\">\n <div class=\"adf-start-process-definition-container\">\n <mat-form-field *ngIf=\"showSelectApplicationDropdown\" [floatLabel]=\"'always'\" class=\"adf-start-process-app-list\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.SELECT_APPLICATION' | translate }}</mat-label>\n <mat-select\n placeholder=\"{{ 'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.SELECT_APPLICATION' | translate }}\"\n (selectionChange)=\"onAppSelectionChange($event)\"\n [(ngModel)]=\"selectedApplication\"\n class=\"adf-start-process-definition-select\"\n data-automation-id=\"adf-start-process-apps-drop-down\">\n <mat-option\n *ngFor=\"let application of applications\"\n [value]=\"application\"\n role=\"option\"\n [attr.data-automation-id]=\"'adf-start-process-apps-option-' + application.name\">\n {{ application.name }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field class=\"adf-process-input-container\" [floatLabel]=\"'always'\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.TYPE' | translate}}</mat-label>\n <input\n type=\"text\"\n matInput\n [formControl]=\"processDefinitionInput\"\n [matAutocomplete]=\"auto\"\n id=\"processDefinitionName\">\n <div class=\"adf-process-input-autocomplete\">\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n id=\"processDefinitionOptions\"\n [displayWith]=\"displayFn\">\n <mat-option *ngFor=\"let processDef of filteredProcessesDefinitions$ | async\" [value]=\"processDef.name\"\n (click)=\"processDefinitionSelectionChanged(processDef)\">\n {{ processDef.name }}\n </mat-option>\n </mat-autocomplete>\n <ng-container *ngIf=\"!isProcessDefinitionsLoading ; else showProcessDefLoadingTemplate\">\n <button\n class=\"adf-start-process-button\"\n id=\"adf-select-process-dropdown\"\n *ngIf=\"showSelectProcessDropdown\"\n mat-icon-button\n (click)=\"displayDropdown($event)\"\n [disabled]=\"isDropdownDisabled()\"\n [attr.aria-label]=\"'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.TYPE' | translate | uppercase\">\n <mat-icon>arrow_drop_down</mat-icon>\n </button>\n </ng-container>\n <ng-template #showProcessDefLoadingTemplate>\n <mat-spinner id=\"adf-select-process-spinner\" [diameter]=\"20\" />\n </ng-template>\n </div>\n </mat-form-field>\n </div>\n <mat-form-field class=\"adf-process-input-container adf-process-input-container-process-name\" [floatLabel]=\"'always'\">\n <mat-label>{{'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.NAME' | translate}}</mat-label>\n <input\n matInput\n [formControl]=\"processNameInput\"\n id=\"processName\"\n required/>\n <mat-error *ngIf=\"nameController.hasError('maxlength')\">\n {{ 'ADF_PROCESS_LIST.START_PROCESS.ERROR.MAXIMUM_LENGTH' | translate : { characters : maxProcessNameLength } }}\n </mat-error>\n <mat-error *ngIf=\"nameController.hasError('required')\">\n {{ 'ADF_PROCESS_LIST.START_PROCESS.ERROR.PROCESS_NAME_REQUIRED' | translate }}\n </mat-error>\n <mat-error *ngIf=\"nameController.hasError('pattern')\">\n {{ 'ADF_PROCESS_LIST.START_PROCESS.ERROR.SPACE_VALIDATOR' | translate }}\n </mat-error>\n </mat-form-field>\n\n <ng-container *ngIf=\"!isProcessDefinitionsLoading ; else showStartFormLoadingTemplate\">\n <ng-container *ngIf=\"isProcessDefinitionSelected() ; else emptyProcessDefTemplate\">\n <ng-container *ngIf=\"hasStartForm(); else noStartFormTemplate\">\n <adf-start-form\n #startForm\n [data]=\"movedNodeToPS\"\n [disableStartProcessButton]=\"processNameInput.invalid\"\n [processDefinitionId]=\"selectedProcessDef.id\"\n (outcomeClick)=\"onOutcomeClick($event)\"\n [showRefreshButton]=\"false\">\n <button\n class=\"adf-start-process-button\"\n adf-form-custom-button\n mat-button\n (click)=\"cancelStartProcess()\"\n id=\"cancel_process\">\n {{'ADF_PROCESS_LIST.START_PROCESS.FORM.ACTION.CANCEL'| translate | uppercase}}\n </button>\n </adf-start-form>\n </ng-container>\n <ng-template #noStartFormTemplate>\n <adf-empty-content\n class=\"adf-start-process-empty-template\"\n [icon]=\"'assessment'\"\n [title]=\"'ADF_PROCESS_LIST.START_PROCESS.NO_START_FORM' | translate\" />\n </ng-template>\n </ng-container>\n <ng-template #emptyProcessDefTemplate>\n <adf-empty-content class=\"adf-start-process-empty-template\"\n [icon]=\"'assessment'\"\n [title]=\"'ADF_PROCESS_LIST.START_PROCESS.NO_PROCESS_DEF_SELECTED' | translate\" />\n </ng-template>\n </ng-container>\n <ng-template #showStartFormLoadingTemplate>\n <mat-spinner class=\"adf-start-process-loading\" />\n </ng-template>\n </div>\n <div class=\"adf-start-process-content-actions\" *ngIf=\"!hasStartForm()\">\n <button\n class=\"adf-start-process-button\"\n mat-button\n *ngIf=\"!hasStartForm()\"\n (click)=\"cancelStartProcess()\"\n id=\"cancel_process\">\n {{'ADF_PROCESS_LIST.START_PROCESS.FORM.ACTION.CANCEL'| translate | uppercase}}\n </button>\n <button\n color=\"primary\"\n mat-button\n *ngIf=\"!hasStartForm()\"\n [disabled]=\"!validateForm()\"\n (click)=\"startProcess()\"\n data-automation-id=\"btn-start\"\n id=\"button-start\"\n class=\"btn-start adf-start-process-button\">\n {{'ADF_PROCESS_LIST.START_PROCESS.FORM.ACTION.START' | translate | uppercase}}\n </button>\n </div>\n </div>\n </ng-container>\n <ng-template #showEmptyTemplate>\n <adf-empty-content class=\"adf-start-process-empty-template\"\n [icon]=\"'assessment'\"\n [title]=\"'ADF_PROCESS_LIST.START_PROCESS.NO_PROCESS_DEFINITIONS' | translate\" />\n </ng-template>\n</ng-template>\n", styles: [".adf-start-process{width:96%;margin-left:auto;margin-right:auto;margin-top:10px}.adf-start-process mat-form-field{width:100%}.adf-start-process .mat-mdc-floating-label{color:var(--adf-theme-mat-grey-color-a200-dark)}.adf-start-process-content-actions{padding-bottom:16px;padding-right:16px;text-align:right}.adf-start-process .mat-mdc-button{width:auto;padding:0 16px;margin:0 8px;white-space:nowrap}.adf-title{padding-bottom:1.25em}.adf-process-input-container mat-form-field{width:100%}.adf-process-input-container-process-name{margin-top:16px}.adf-process-input-autocomplete{display:flex;padding-bottom:2px}.adf-process-input-autocomplete .adf-start-process-button{position:absolute;right:-14px;top:10px}.adf-process-input-autocomplete mat-spinner{position:absolute;right:-1px;top:0}.adf-start-form-container .mat-mdc-card-content{margin-bottom:100px}.adf-start-form-container .mat-mdc-card-header{display:none}.adf-start-form-container .adf-start-form-card:has(.adf-start-form-header){box-shadow:none;padding:0}.adf-start-form-actions:has(.adf-start-form-actions-button){text-align:right;padding-bottom:16px}.adf-start-form-actions:has(.adf-start-form-actions-button) button{text-wrap:nowrap}.adf-start-process-definition-container{display:flex;flex-direction:row;justify-content:space-around;align-items:baseline}.adf-start-process-definition-container .adf-start-process-definition-select .mat-mdc-select-arrow-wrapper{transform:none}.adf-start-process-definition-container .adf-start-process-definition-select .mat-mdc-select-arrow-wrapper svg{fill:currentcolor}.adf-start-process-app-list{margin-right:10px}@media (max-width: 599.9px){.adf-start-process{width:90%;margin-left:auto;margin-right:auto}}.adf-start-process-loading{margin-left:calc((100% - 100px)/2);margin-right:calc((100% - 100px)/2)}\n"] }]
|
|
389
389
|
}], ctorParameters: () => [{ type: i1.ProcessService }, { type: i2.ActivitiContentService }, { type: i3.AppsProcessService }, { type: i4.AppConfigService }, { type: i4.LocalizedDatePipe }], propDecorators: { appId: [{
|
|
390
390
|
type: Input
|
|
391
391
|
}], title: [{
|
|
@@ -421,4 +421,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
421
421
|
type: ViewChild,
|
|
422
422
|
args: [MatAutocompleteTrigger]
|
|
423
423
|
}] } });
|
|
424
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnQtcHJvY2Vzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHJvY2Vzcy1zZXJ2aWNlcy9zcmMvbGliL3Byb2Nlc3MtbGlzdC9jb21wb25lbnRzL3N0YXJ0LXByb2Nlc3Mvc3RhcnQtcHJvY2Vzcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHJvY2Vzcy1zZXJ2aWNlcy9zcmMvbGliL3Byb2Nlc3MtbGlzdC9jb21wb25lbnRzL3N0YXJ0LXByb2Nlc3Mvc3RhcnQtcHJvY2Vzcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixxQkFBcUIsRUFFckIsaUJBQWlCLEVBQ3BCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBbUIsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ILE9BQU8sRUFBRSxRQUFRLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQy9GLE9BQU8sRUFBbUIsZUFBZSxFQUFFLE1BQU0s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LGFBQWEsb0xBQ2IsY0FBYyw0V0FDZCxxQkFBcUIscUdBQ3JCLGtCQUFrQjs7NEZBTWIsNkJBQTZCO2tCQXRCekMsU0FBUzsrQkFDSSxtQkFBbUIsY0FDakIsSUFBSSxXQUNQO3dCQUNMLFlBQVk7d0JBQ1osd0JBQXdCO3dCQUN4QixlQUFlO3dCQUNmLGtCQUFrQjt3QkFDbEIsZUFBZTt3QkFDZixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIscUJBQXFCO3dCQUNyQixlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxxQkFBcUI7d0JBQ3JCLGtCQUFrQjtxQkFDckIsaUJBR2MsaUJBQWlCLENBQUMsSUFBSTt3TkFRckMsS0FBSztzQkFESixLQUFLO2dCQUtOLEtBQUs7c0JBREosS0FBSztnQkFLTixxQkFBcUI7c0JBRHBCLEtBQUs7Z0JBUU4sU0FBUztzQkFEUixLQUFLO2dCQUtOLE1BQU07c0JBREwsS0FBSztnQkFLTixJQUFJO3NCQURILEtBQUs7Z0JBS04seUJBQXlCO3NCQUR4QixLQUFLO2dCQUtOLDZCQUE2QjtzQkFENUIsS0FBSztnQkFLTixxQkFBcUI7c0JBRHBCLEtBQUs7Z0JBS04sS0FBSztzQkFESixNQUFNO2dCQUtQLE1BQU07c0JBREwsTUFBTTtnQkFLUCxLQUFLO3NCQURKLE1BQU07Z0JBS1AsMEJBQTBCO3NCQUR6QixNQUFNO2dCQUtQLG9CQUFvQjtzQkFEbkIsTUFBTTtnQkFJUCxTQUFTO3NCQURSLFNBQVM7dUJBQUMsV0FBVztnQkFJdEIsaUJBQWlCO3NCQURoQixTQUFTO3VCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRGVzdHJveVJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBcHBDb25maWdTZXJ2aWNlLFxuICAgIEFwcENvbmZpZ1ZhbHVlcyxcbiAgICBFbXB0eUNvbnRlbnRDb21wb25lbnQsXG4gICAgRm9ybVZhbHVlcyxcbiAgICBMb2NhbGl6ZWREYXRlUGlwZVxufSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgQXBwc1Byb2Nlc3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXBwcy1wcm9jZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJvY2Vzc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcm9jZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVW50eXBlZEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZm9ya0pvaW4sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZU1vZHVsZSwgTWF0QXV0b2NvbXBsZXRlVHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XG5pbXBvcnQgeyBNYXRTZWxlY3RDaGFuZ2UsIE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBTdGFydEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9mb3JtJztcbmltcG9ydCB7XG4gICAgQXBwRGVmaW5pdGlvblJlcHJlc2VudGF0aW9uLFxuICAgIE5vZGUsXG4gICAgUHJvY2Vzc0RlZmluaXRpb25SZXByZXNlbnRhdGlvbixcbiAgICBQcm9jZXNzSW5zdGFuY2VSZXByZXNlbnRhdGlvbixcbiAgICBSZWxhdGVkQ29udGVudFJlcHJlc2VudGF0aW9uLFxuICAgIFJlc3RWYXJpYWJsZVxufSBmcm9tICdAYWxmcmVzY28vanMtYXBpJztcbmltcG9ydCB7IEFjdGl2aXRpQ29udGVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9mb3JtL3NlcnZpY2VzL2FjdGl2aXRpLWFsZnJlc2NvLnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0VGltZSB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbmNvbnN0IE1BWF9MRU5HVEggPSAyNTU7XG5jb25zdCBEQVRFX1RJTUVfSURFTlRJRklFUl9SRUdfRVhQID0gbmV3IFJlZ0V4cCgnJXtkYXRldGltZX0nLCAnaScpO1xuY29uc3QgUFJPQ0VTU19ERUZJTklUSU9OX0lERU5USUZJRVJfUkVHX0VYUCA9IG5ldyBSZWdFeHAoJyV7cHJvY2Vzc2RlZmluaXRpb259JywgJ2knKTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhZGYtc3RhcnQtcHJvY2VzcycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLFxuICAgICAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICAgICAgTWF0U2VsZWN0TW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgTWF0QXV0b2NvbXBsZXRlTW9kdWxlLFxuICAgICAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgICAgIE1hdEljb25Nb2R1bGUsXG4gICAgICAgIE1hdElucHV0TW9kdWxlLFxuICAgICAgICBFbXB0eUNvbnRlbnRDb21wb25lbnQsXG4gICAgICAgIFN0YXJ0Rm9ybUNvbXBvbmVudFxuICAgIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL3N0YXJ0LXByb2Nlc3MuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3N0YXJ0LXByb2Nlc3MuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIFN0YXJ0UHJvY2Vzc0luc3RhbmNlQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQge1xuICAgIC8qKlxuICAgICAqIExpbWl0IHRoZSBsaXN0IG9mIHByb2Nlc3NlcyB0aGF0IGNhbiBiZSBzdGFydGVkIHRvIHRob3NlXG4gICAgICogY29udGFpbmVkIGluIHRoZSBzcGVjaWZpZWQgYXBwLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXBwSWQ/OiBudW1iZXI7XG5cbiAgICAvKiogRGVmaW5lIHRoZSBoZWFkZXIgb2YgdGhlIGNvbXBvbmVudC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHRpdGxlPzogc3RyaW5nO1xuXG4gICAgLyoqIERlZmluaXRpb24gbmFtZSBvZiB0aGUgcHJvY2VzcyB0byBzdGFydC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHByb2Nlc3NEZWZpbml0aW9uTmFtZT86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFZhcmlhYmxlcyBpbiB0aGUgaW5wdXQgdG8gdGhlIHByb2Nlc3NcbiAgICAgKiBbUmVzdFZhcmlhYmxlXShodHRwczovL2dpdGh1Yi5jb20vQWxmcmVzY28vYWxmcmVzY28tanMtYXBpL3RyZWUvbWFzdGVyL3NyYy9hbGZyZXNjby1hY3Rpdml0aS1yZXN0LWFwaS9kb2NzL1Jlc3RWYXJpYWJsZS5tZCkuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB2YXJpYWJsZXM6IFJlc3RWYXJpYWJsZVtdO1xuXG4gICAgLyoqIFBhcmFtZXRlciB0byBwYXNzIGZvcm0gZmllbGQgdmFsdWVzIGluIHRoZSBzdGFydCBmb3JtIGlmIG9uZSBpcyBhc3NvY2lhdGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdmFsdWVzOiBGb3JtVmFsdWVzO1xuXG4gICAgLyoqIE5hbWUgdG8gYXNzaWduIHRvIHRoZSBjdXJyZW50IHByb2Nlc3MuICovXG4gICAgQElucHV0KClcbiAgICBuYW1lPzogc3RyaW5nID0gJyc7XG5cbiAgICAvKiogSGlkZSBvciBzaG93IHRoZSBwcm9jZXNzIHNlbGVjdGlvbiBkcm9wZG93bi4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dTZWxlY3RQcm9jZXNzRHJvcGRvd24gPSB0cnVlO1xuXG4gICAgLyoqIEhpZGUgb3Igc2hvdyBhcHBsaWNhdGlvbiBzZWxlY3Rpb24gZHJvcGRvd24uICovXG4gICAgQElucHV0KClcbiAgICBzaG93U2VsZWN0QXBwbGljYXRpb25Ecm9wZG93bj8gPSBmYWxzZTtcblxuICAgIC8qKiBQYXJhbWV0ZXIgdG8gZW5hYmxlIHNlbGVjdGlvbiBvZiBwcm9jZXNzIHdoZW4gZmlsdGVyaW5nLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHJvY2Vzc0ZpbHRlclNlbGVjdG9yPyA9IHRydWU7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBwcm9jZXNzIHN0YXJ0cy4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBzdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8UHJvY2Vzc0luc3RhbmNlUmVwcmVzZW50YXRpb24+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBwcm9jZXNzIGlzIGNhbmNlbGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gYW4gZXJyb3Igb2NjdXJzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGVycm9yID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHByb2Nlc3MgZGVmaW5pdGlvbiBzZWxlY3Rpb24gY2hhbmdlcy4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBwcm9jZXNzRGVmaW5pdGlvblNlbGVjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8UHJvY2Vzc0RlZmluaXRpb25SZXByZXNlbnRhdGlvbj4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gYXBwbGljYXRpb24gc2VsZWN0aW9uIGNoYW5nZXMuICovXG4gICAgQE91dHB1dCgpXG4gICAgYXBwbGljYXRpb25TZWxlY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPEFwcERlZmluaXRpb25SZXByZXNlbnRhdGlvbj4oKTtcblxuICAgIEBWaWV3Q2hpbGQoJ3N0YXJ0Rm9ybScpXG4gICAgc3RhcnRGb3JtOiBTdGFydEZvcm1Db21wb25lbnQ7XG5cbiAgICBAVmlld0NoaWxkKE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIpXG4gICAgaW5wdXRBdXRvY29tcGxldGU6IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXI7XG5cbiAgICBwcm9jZXNzRGVmaW5pdGlvbnM6IFByb2Nlc3NEZWZpbml0aW9uUmVwcmVzZW50YXRpb25bXSA9IFtdO1xuICAgIHNlbGVjdGVkUHJvY2Vzc0RlZjogUHJvY2Vzc0RlZmluaXRpb25SZXByZXNlbnRhdGlvbjtcbiAgICBwcm9jZXNzTmFtZUlucHV0OiBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gICAgcHJvY2Vzc0RlZmluaXRpb25JbnB1dDogVW50eXBlZEZvcm1Db250cm9sO1xuICAgIGZpbHRlcmVkUHJvY2Vzc2VzRGVmaW5pdGlvbnMkOiBPYnNlcnZhYmxlPFByb2Nlc3NEZWZpbml0aW9uUmVwcmVzZW50YXRpb25bXT47XG4gICAgbWF4UHJvY2Vzc05hbWVMZW5ndGg6IG51bWJlciA9IE1BWF9MRU5HVEg7XG4gICAgYWxmcmVzY29SZXBvc2l0b3J5TmFtZTogc3RyaW5nO1xuICAgIGFwcGxpY2F0aW9uczogQXBwRGVmaW5pdGlvblJlcHJlc2VudGF0aW9uW10gPSBbXTtcbiAgICBzZWxlY3RlZEFwcGxpY2F0aW9uOiBBcHBEZWZpbml0aW9uUmVwcmVzZW50YXRpb247XG5cbiAgICBpc1Byb2Nlc3NEZWZpbml0aW9uc0xvYWRpbmcgPSB0cnVlO1xuICAgIGlzQXBwc0xvYWRpbmcgPSB0cnVlO1xuICAgIG1vdmVkTm9kZVRvUFM6IEZvcm1WYWx1ZXM7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBwcm9jZXNzU2VydmljZTogUHJvY2Vzc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY29udGVudFNlcnZpY2U6IEFjdGl2aXRpQ29udGVudFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYXBwc1Byb2Nlc3NTZXJ2aWNlOiBBcHBzUHJvY2Vzc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYXBwQ29uZmlnOiBBcHBDb25maWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGRhdGVQaXBlOiBMb2NhbGl6ZWREYXRlUGlwZVxuICAgICkge31cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnByb2Nlc3NOYW1lSW5wdXQgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCBbXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgodGhpcy5tYXhQcm9jZXNzTmFtZUxlbmd0aCksXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oJ15bXlxcXFxzXSsoXFxcXHMrW15cXFxcc10rKSokJylcbiAgICAgICAgXSk7XG4gICAgICAgIHRoaXMucHJvY2Vzc0RlZmluaXRpb25JbnB1dCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcblxuICAgICAgICB0aGlzLmxvYWQodGhpcy5hcHBJZCk7XG5cbiAgICAgICAgdGhpcy5maWx0ZXJlZFByb2Nlc3Nlc0RlZmluaXRpb25zJCA9IHRoaXMucHJvY2Vzc0RlZmluaXRpb25JbnB1dC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgIG1hcCgodmFsdWUpID0+IHRoaXMuX2ZpbHRlcih2YWx1ZSkpLFxuICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmNvbnRlbnRTZXJ2aWNlLmdldEFsZnJlc2NvUmVwb3NpdG9yaWVzKCkuc3Vic2NyaWJlKChyZXBvTGlzdCkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcG9MaXN0Py5bMF0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbGZyZXNjb1JlcG9zaXRvcnkgPSByZXBvTGlzdFswXTtcbiAgICAgICAgICAgICAgICB0aGlzLmFsZnJlc2NvUmVwb3NpdG9yeU5hbWUgPSBgYWxmcmVzY28tJHthbGZyZXNjb1JlcG9zaXRvcnkuaWR9LSR7YWxmcmVzY29SZXBvc2l0b3J5Lm5hbWV9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlc1sndmFsdWVzJ10/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5tb3ZlTm9kZUZyb21DU3RvUFMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFwcElkID0gY2hhbmdlc1snYXBwSWQnXTtcbiAgICAgICAgaWYgKGFwcElkPy5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZChhcHBJZC5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJvY2Vzc0RlZmluaXRpb25OYW1lID0gY2hhbmdlc1sncHJvY2Vzc0RlZmluaXRpb25OYW1lJ107XG4gICAgICAgIGlmIChwcm9jZXNzRGVmaW5pdGlvbk5hbWU/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJQcm9jZXNzRGVmaW5pdGlvbkJ5TmFtZShwcm9jZXNzRGVmaW5pdGlvbk5hbWUuY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2VsZWN0ZWRQcm9jZXNzKHNlbGVjdGVkUHJvY2Vzczogc3RyaW5nKTogUHJvY2Vzc0RlZmluaXRpb25SZXByZXNlbnRhdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NEZWZpbml0aW9ucy5maW5kKChwcm9jZXNzKSA9PiBwcm9jZXNzLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gc2VsZWN0ZWRQcm9jZXNzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWQoYXBwSWQ/OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd1NlbGVjdEFwcGxpY2F0aW9uRHJvcGRvd24pIHtcbiAgICAgICAgICAgIHRoaXMubG9hZEFwcHMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9hZFByb2Nlc3NEZWZpbml0aW9ucyhhcHBJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsb2FkUHJvY2Vzc0RlZmluaXRpb25zKGFwcElkOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc1Byb2Nlc3NEZWZpbml0aW9uc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlc2V0U2VsZWN0ZWRQcm9jZXNzRGVmaW5pdGlvbigpO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc1NlcnZpY2VcbiAgICAgICAgICAgIC5nZXRQcm9jZXNzRGVmaW5pdGlvbnMoYXBwSWQpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKHByb2Nlc3NEZWZpbml0aW9uUmVwcmVzZW50YXRpb25zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50UHJvY2Vzc0RlZjogUHJvY2Vzc0RlZmluaXRpb25SZXByZXNlbnRhdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzc0RlZmluaXRpb25SZXByZXNlbnRhdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UHJvY2Vzc0RlZiA9IHByb2Nlc3NEZWZpbml0aW9uUmVwcmVzZW50YXRpb25zWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvY2Vzc0RlZmluaXRpb25OYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZFByb2Nlc3NEZWZpbml0aW9uID0gcHJvY2Vzc0RlZmluaXRpb25SZXByZXNlbnRhdGlvbnMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvY2Vzc0RlZmluaXRpb24pID0+IHByb2Nlc3NEZWZpbml0aW9uLm5hbWUgPT09IHRoaXMucHJvY2Vzc0RlZmluaXRpb25OYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkUHJvY2Vzc0RlZmluaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UHJvY2Vzc0RlZiA9IGZpbHRlcmVkUHJvY2Vzc0RlZmluaXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBjdXJyZW50UHJvY2Vzc0RlZiwgcHJvY2Vzc0RlZmluaXRpb25SZXByZXNlbnRhdGlvbnMgfTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAoZmlsdGVyZWRQcm9jZXNzRGVmaW5pdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzRGVmaW5pdGlvbnMgPSBmaWx0ZXJlZFByb2Nlc3NEZWZpbml0aW9ucy5wcm9jZXNzRGVmaW5pdGlvblJlcHJlc2VudGF0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzRGVmaW5pdGlvblNlbGVjdGlvbkNoYW5nZWQoZmlsdGVyZWRQcm9jZXNzRGVmaW5pdGlvbnMuY3VycmVudFByb2Nlc3NEZWYpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NEZWZpbml0aW9uSW5wdXQuc2V0VmFsdWUodGhpcy5zZWxlY3RlZFByb2Nlc3NEZWYgPyB0aGlzLnNlbGVjdGVkUHJvY2Vzc0RlZi5uYW1lIDogJycpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUHJvY2Vzc0RlZmluaXRpb25zTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNQcm9jZXNzRGVmaW5pdGlvbnNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IuZW1pdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbHRlclByb2Nlc3NEZWZpbml0aW9uQnlOYW1lKGRlZmluaXRpb25OYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKGRlZmluaXRpb25OYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZFByb2Nlc3NEZWYgPSB0aGlzLnByb2Nlc3NEZWZpbml0aW9ucy5maW5kKChwcm9jZXNzRGVmaW5pdGlvbikgPT4gcHJvY2Vzc0RlZmluaXRpb24ubmFtZSA9PT0gZGVmaW5pdGlvbk5hbWUpO1xuXG4gICAgICAgICAgICBpZiAoZmlsdGVyZWRQcm9jZXNzRGVmKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzRGVmaW5pdGlvblNlbGVjdGlvbkNoYW5nZWQoZmlsdGVyZWRQcm9jZXNzRGVmKTtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NEZWZpbml0aW9uSW5wdXQuc2V0VmFsdWUodGhpcy5zZWxlY3RlZFByb2Nlc3NEZWYgPyB0aGlzLnNlbGVjdGVkUHJvY2Vzc0RlZi5uYW1lIDogJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkQXBwcygpIHtcbiAgICAgICAgdGhpcy5pc0FwcHNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5hcHBzUHJvY2Vzc1NlcnZpY2VcbiAgICAgICAgICAgIC5nZXREZXBsb3llZEFwcGxpY2F0aW9ucygpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwcGxpY2F0aW9ucyA9IHJlc3BvbnNlLmZpbHRlcigoYXBwKSA9PiBhcHAuaWQpO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50QXBwbGljYXRpb246IEFwcERlZmluaXRpb25SZXByZXNlbnRhdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoYXBwbGljYXRpb25zICYmIGFwcGxpY2F0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRBcHBsaWNhdGlvbiA9IGFwcGxpY2F0aW9uc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkQXBwID0gYXBwbGljYXRpb25zLmZpbmQoKGFwcCkgPT4gYXBwLmlkID09PSArdGhpcy5hcHBJZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkQXBwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50QXBwbGljYXRpb24gPSBmaWx0ZXJlZEFwcDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGN1cnJlbnRBcHBsaWNhdGlvbiwgYXBwbGljYXRpb25zIH07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgKGZpbHRlcmVkQXBwcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGxpY2F0aW9ucyA9IGZpbHRlcmVkQXBwcy5hcHBsaWNhdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBcHBsaWNhdGlvbiA9IGZpbHRlcmVkQXBwcy5jdXJyZW50QXBwbGljYXRpb247XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwbGljYXRpb25TZWxlY3Rpb24uZW1pdCh0aGlzLnNlbGVjdGVkQXBwbGljYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZVByb2Nlc3NOYW1lQW5kRGVmaW5pdGlvbnNEcm9wZG93bigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQXBwc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkUHJvY2Vzc0RlZmluaXRpb25zQmFzZWRPblNlbGVjdGVkQXBwKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNBcHBzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yLmVtaXQoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZFByb2Nlc3NEZWZpbml0aW9uc0Jhc2VkT25TZWxlY3RlZEFwcCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRBcHBsaWNhdGlvbj8uaWQpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZFByb2Nlc3NEZWZpbml0aW9ucyh0aGlzLnNlbGVjdGVkQXBwbGljYXRpb24gPyB0aGlzLnNlbGVjdGVkQXBwbGljYXRpb24uaWQgOiBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNQcm9jZXNzRGVmaW5pdGlvbnNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJlc2V0UHJvY2Vzc0RlZmluaXRpb25zKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkFwcFNlbGVjdGlvbkNoYW5nZShzZWxlY3RlZEFwcGxpY2F0aW9uOiBNYXRTZWxlY3RDaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5yZXNldFByb2Nlc3NEZWZpbml0aW9ucygpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQXBwbGljYXRpb24gPSBzZWxlY3RlZEFwcGxpY2F0aW9uLnZhbHVlO1xuICAgICAgICB0aGlzLmFwcGxpY2F0aW9uU2VsZWN0aW9uLmVtaXQodGhpcy5zZWxlY3RlZEFwcGxpY2F0aW9uKTtcbiAgICAgICAgdGhpcy50b2dnbGVQcm9jZXNzTmFtZUFuZERlZmluaXRpb25zRHJvcGRvd24oKTtcbiAgICAgICAgdGhpcy5sb2FkUHJvY2Vzc0RlZmluaXRpb25zQmFzZWRPblNlbGVjdGVkQXBwKCk7XG4gICAgfVxuXG4gICAgaGFzQXBwbGljYXRpb25zKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hcHBsaWNhdGlvbnM/Lmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgaGFzUHJvY2Vzc0RlZmluaXRpb25zKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRGVmaW5pdGlvbnM/Lmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgaXNQcm9jZXNzRGVmaW5pdGlvblNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLnNlbGVjdGVkUHJvY2Vzc0RlZj8uaWQ7XG4gICAgfVxuXG4gICAgaXNEcm9wZG93bkRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zaG93U2VsZWN0QXBwbGljYXRpb25Ecm9wZG93biAmJiAhdGhpcy5pc0FwcFNlbGVjdGVkKCk7XG4gICAgfVxuXG4gICAgZ2V0QWxmcmVzY29SZXBvc2l0b3J5TmFtZSgpOiBzdHJpbmcge1xuICAgICAgICBsZXQgYWxmcmVzY29SZXBvc2l0b3J5TmFtZSA9IHRoaXMuYXBwQ29uZmlnLmdldDxzdHJpbmc+KEFwcENvbmZpZ1ZhbHVlcy5BTEZSRVNDT19SRVBPU0lUT1JZX05BTUUpO1xuICAgICAgICBpZiAoIWFsZnJlc2NvUmVwb3NpdG9yeU5hbWUpIHtcbiAgICAgICAgICAgIGFsZnJlc2NvUmVwb3NpdG9yeU5hbWUgPSB0aGlzLmFsZnJlc2NvUmVwb3NpdG9yeU5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFsZnJlc2NvUmVwb3NpdG9yeU5hbWUgKyAnQWxmcmVzY28nO1xuICAgIH1cblxuICAgIG1vdmVOb2RlRnJvbUNTdG9QUygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYWNjb3VudElkZW50aWZpZXIgPSB0aGlzLmdldEFsZnJlc2NvUmVwb3NpdG9yeU5hbWUoKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnZhbHVlcykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnZhbHVlcywga2V5KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZXNba2V5XSkgPyB0aGlzLnZhbHVlc1trZXldIDogW3RoaXMudmFsdWVzW2tleV1dO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRzID0gY3VycmVudFZhbHVlXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKHZhbHVlOiBhbnkpID0+ICEhdmFsdWU/LmlzRmlsZSlcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoY29udGVudDogTm9kZSkgPT4gdGhpcy5jb250ZW50U2VydmljZS5hcHBseUFsZnJlc2NvTm9kZShjb250ZW50LCBudWxsLCBhY2NvdW50SWRlbnRpZmllcikpO1xuICAgICAgICAgICAgICAgIGZvcmtKb2luKGNvbnRlbnRzKS5zdWJzY3JpYmUoKHJlczogUmVsYXRlZENvbnRlbnRSZXByZXNlbnRhdGlvbltdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW92ZWROb2RlVG9QUyA9IHsgW2tleV06IFsuLi5yZXNdIH07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGFydFByb2Nlc3Mob3V0Y29tZT86IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFByb2Nlc3NEZWY/LmlkICYmIHRoaXMubmFtZUNvbnRyb2xsZXIudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1WYWx1ZXMgPSB0aGlzLnN0YXJ0Rm9ybSA/IHRoaXMuc3RhcnRGb3JtLmZvcm0udmFsdWVzIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU2VydmljZS5zdGFydFByb2Nlc3ModGhpcy5zZWxlY3RlZFByb2Nlc3NEZWYuaWQsIHRoaXMubmFtZUNvbnRyb2xsZXIudmFsdWUsIG91dGNvbWUsIGZvcm1WYWx1ZXMsIHRoaXMudmFyaWFibGVzKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5hbWUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydC5lbWl0KHJlcyk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IuZW1pdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjYW5jZWxTdGFydFByb2Nlc3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2FuY2VsLmVtaXQoKTtcbiAgICB9XG5cbiAgICBoYXNTdGFydEZvcm0oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUHJvY2Vzc0RlZj8uaGFzU3RhcnRGb3JtO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNTdGFydEZvcm1NaXNzaW5nT3JWYWxpZCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhcnRGb3JtKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdGFydEZvcm0uZm9ybT8uaXNWYWxpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFsaWRhdGVGb3JtKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFByb2Nlc3NEZWY/LmlkICYmIHRoaXMucHJvY2Vzc05hbWVJbnB1dC52YWxpZCAmJiB0aGlzLmlzU3RhcnRGb3JtTWlzc2luZ09yVmFsaWQoKTtcbiAgICB9XG5cbiAgICBvbk91dGNvbWVDbGljayhvdXRjb21lOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zdGFydFByb2Nlc3Mob3V0Y29tZSk7XG4gICAgfVxuXG4gICAgcmVzZXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVzZXRTZWxlY3RlZFByb2Nlc3NEZWZpbml0aW9uKCk7XG4gICAgICAgIHRoaXMubmFtZSA9ICcnO1xuICAgICAgICBpZiAodGhpcy5zdGFydEZvcm0pIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRGb3JtLmRhdGEgPSB7fTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRpc3BsYXlGbihwcm9jZXNzOiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBpZiAocHJvY2Vzcykge1xuICAgICAgICAgICAgbGV0IHByb2Nlc3NOYW1lID0gcHJvY2VzcztcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzTmFtZSA9IHByb2Nlc3MubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwcm9jZXNzTmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGRpc3BsYXlEcm9wZG93bihldmVudDogRXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmICghdGhpcy5pbnB1dEF1dG9jb21wbGV0ZS5wYW5lbE9wZW4pIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0RlZmluaXRpb25JbnB1dC5zZXRWYWx1ZSgnJyk7XG4gICAgICAgICAgICB0aGlzLmlucHV0QXV0b2NvbXBsZXRlLm9wZW5QYW5lbCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbnB1dEF1dG9jb21wbGV0ZS5jbG9zZVBhbmVsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgbmFtZUNvbnRyb2xsZXIoKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc05hbWVJbnB1dDtcbiAgICB9XG5cbiAgICBnZXQgcHJvY2Vzc0RlZmluaXRpb25Db250cm9sbGVyKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NEZWZpbml0aW9uSW5wdXQ7XG4gICAgfVxuXG4gICAgcHJvY2Vzc0RlZmluaXRpb25TZWxlY3Rpb25DaGFuZ2VkKHByb2Nlc3NEZWZpbml0aW9uOiBQcm9jZXNzRGVmaW5pdGlvblJlcHJlc2VudGF0aW9uKSB7XG4gICAgICAgIGlmIChwcm9jZXNzRGVmaW5pdGlvbikge1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc0luc3RhbmNlRGV0YWlsczogUHJvY2Vzc0luc3RhbmNlUmVwcmVzZW50YXRpb24gPSB7IHByb2Nlc3NEZWZpbml0aW9uTmFtZTogcHJvY2Vzc0RlZmluaXRpb24ubmFtZSB9O1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc05hbWUgPSB0aGlzLmZvcm1hdFByb2Nlc3NOYW1lKHRoaXMubmFtZSwgcHJvY2Vzc0luc3RhbmNlRGV0YWlscyk7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NOYW1lSW5wdXQuc2V0VmFsdWUocHJvY2Vzc05hbWUpO1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzTmFtZUlucHV0Lm1hcmtBc0RpcnR5KCk7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NOYW1lSW5wdXQubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFByb2Nlc3NEZWYgPSBwcm9jZXNzRGVmaW5pdGlvbjtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0RlZmluaXRpb25TZWxlY3Rpb24uZW1pdCh0aGlzLnNlbGVjdGVkUHJvY2Vzc0RlZik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5hbWVDb250cm9sbGVyLnJlc2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0xvYWRpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3dTZWxlY3RBcHBsaWNhdGlvbkRyb3Bkb3duID8gdGhpcy5pc0FwcHNMb2FkaW5nIDogZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0FwcFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLnNlbGVjdGVkQXBwbGljYXRpb24/LmlkO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRTZWxlY3RlZFByb2Nlc3NEZWZpbml0aW9uKCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkUHJvY2Vzc0RlZiA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHRoaXMucHJvY2Vzc0RlZmluaXRpb25JbnB1dCkge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzRGVmaW5pdGlvbklucHV0LnNldFZhbHVlKCcnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRQcm9jZXNzRGVmaW5pdGlvbnMoKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc0RlZmluaXRpb25zID0gW107XG4gICAgICAgIHRoaXMucmVzZXRTZWxlY3RlZFByb2Nlc3NEZWZpbml0aW9uKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0b2dnbGVQcm9jZXNzTmFtZUFuZERlZmluaXRpb25zRHJvcGRvd24oKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0FwcFNlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0RlZmluaXRpb25Db250cm9sbGVyLmRpc2FibGUoKTtcbiAgICAgICAgICAgIHRoaXMubmFtZUNvbnRyb2xsZXIuZGlzYWJsZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzRGVmaW5pdGlvbkNvbnRyb2xsZXIuZW5hYmxlKCk7XG4gICAgICAgICAgICB0aGlzLm5hbWVDb250cm9sbGVyLmVuYWJsZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZmlsdGVyKHZhbHVlOiBzdHJpbmcpOiBQcm9jZXNzRGVmaW5pdGlvblJlcHJlc2VudGF0aW9uW10ge1xuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyVmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRQcm9jZXNzID0gdGhpcy5wcm9jZXNzRGVmaW5pdGlvbnMuZmlsdGVyKChvcHRpb24pID0+IG9wdGlvbi5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyVmFsdWUpKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMucHJvY2Vzc0ZpbHRlclNlbGVjdG9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFByb2Nlc3NEZWYgPSB0aGlzLmdldFNlbGVjdGVkUHJvY2VzcyhmaWx0ZXJWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWRQcm9jZXNzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9ybWF0UHJvY2Vzc05hbWUocHJvY2Vzc05hbWVGb3JtYXQ6IHN0cmluZywgcHJvY2Vzc0luc3RhbmNlPzogUHJvY2Vzc0luc3RhbmNlUmVwcmVzZW50YXRpb24pOiBzdHJpbmcge1xuICAgICAgICBsZXQgcHJvY2Vzc05hbWUgPSBwcm9jZXNzTmFtZUZvcm1hdDtcbiAgICAgICAgaWYgKHByb2Nlc3NOYW1lLm1hdGNoKERBVEVfVElNRV9JREVOVElGSUVSX1JFR19FWFApKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVzZW50RGF0ZVRpbWUgPSBnZXRUaW1lKG5ldyBEYXRlKCkpO1xuICAgICAgICAgICAgcHJvY2Vzc05hbWUgPSBwcm9jZXNzTmFtZS5yZXBsYWNlKERBVEVfVElNRV9JREVOVElGSUVSX1JFR19FWFAsIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHByZXNlbnREYXRlVGltZSwgJ21lZGl1bScpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9jZXNzTmFtZS5tYXRjaChQUk9DRVNTX0RFRklOSVRJT05fSURFTlRJRklFUl9SRUdfRVhQKSkge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRQcm9jZXNzRGVmaW5pdGlvbk5hbWUgPSBwcm9jZXNzSW5zdGFuY2UgPyBwcm9jZXNzSW5zdGFuY2UucHJvY2Vzc0RlZmluaXRpb25OYW1lIDogJyc7XG4gICAgICAgICAgICBwcm9jZXNzTmFtZSA9IHByb2Nlc3NOYW1lLnJlcGxhY2UoUFJPQ0VTU19ERUZJTklUSU9OX0lERU5USUZJRVJfUkVHX0VYUCwgc2VsZWN0ZWRQcm9jZXNzRGVmaW5pdGlvbk5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9jZXNzTmFtZTtcbiAgICB9XG59XG4iLCJcbjxuZy1jb250YWluZXIgKm5nSWY9XCJpc0xvYWRpbmcoKTsgdGhlbiBzaG93TG9hZGluZ1RlbXBsYXRlOyBlbHNlIHNob3dTdGFydFByb2Nlc3NUZW1wbGF0ZVwiIC8+XG4gICAgPG5nLXRlbXBsYXRlICNzaG93TG9hZGluZ1RlbXBsYXRlPlxuICAgICAgICA8bWF0LXNwaW5uZXIgY2xhc3M9XCJhZGYtc3RhcnQtcHJvY2Vzcy1sb2FkaW5nXCIgLz5cbiAgICA8L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNzaG93U3RhcnRQcm9jZXNzVGVtcGxhdGU+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0FwcGxpY2F0aW9ucygpIHx8IGhhc1Byb2Nlc3NEZWZpbml0aW9ucygpIDsgZWxzZSBzaG93RW1wdHlUZW1wbGF0ZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLXN0YXJ0LXByb2Nlc3NcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtdGl0bGVcIiAqbmdJZj1cInRpdGxlXCI+e3sgdGl0bGUgfCB0cmFuc2xhdGV9fTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLXN0YXJ0LXByb2Nlc3MtZGVmaW5pdGlvbi1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwic2hvd1NlbGVjdEFwcGxpY2F0aW9uRHJvcGRvd25cIiBbZmxvYXRMYWJlbF09XCInYWx3YXlzJ1wiIGNsYXNzPVwiYWRmLXN0YXJ0LXByb2Nlc3MtYXBwLWxpc3RcIiBbc3Vic2NyaXB0U2l6aW5nXT1cIidkeW5hbWljJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57eyAnQURGX1BST0NFU1NfTElTVC5TVEFSVF9QUk9DRVNTLkZPUk0uTEFCRUwuU0VMRUNUX0FQUExJQ0FUSU9OJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdBREZfUFJPQ0VTU19MSVNULlNUQVJUX1BST0NFU1MuRk9STS5MQUJFTC5TRUxFQ1RfQVBQTElDQVRJT04nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uQXBwU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRBcHBsaWNhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtc3RhcnQtcHJvY2Vzcy1kZWZpbml0aW9uLXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwiYWRmLXN0YXJ0LXByb2Nlc3MtYXBwcy1kcm9wLWRvd25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYXBwbGljYXRpb24gb2YgYXBwbGljYXRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImFwcGxpY2F0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYWRmLXN0YXJ0LXByb2Nlc3MtYXBwcy1vcHRpb24tJyArIGFwcGxpY2F0aW9uLm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYXBwbGljYXRpb24ubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiYWRmLXByb2Nlc3MtaW5wdXQtY29udGFpbmVyXCIgW2Zsb2F0TGFiZWxdPVwiJ2Fsd2F5cydcIiBbc3Vic2NyaXB0U2l6aW5nXT1cIidkeW5hbWljJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57eydBREZfUFJPQ0VTU19MSVNULlNUQVJUX1BST0NFU1MuRk9STS5MQUJFTC5UWVBFJyB8IHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwicHJvY2Vzc0RlZmluaXRpb25JbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInByb2Nlc3NEZWZpbml0aW9uTmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1wcm9jZXNzLWlucHV0LWF1dG9jb21wbGV0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJwcm9jZXNzRGVmaW5pdGlvbk9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzcGxheVdpdGhdPVwiZGlzcGxheUZuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBwcm9jZXNzRGVmIG9mIGZpbHRlcmVkUHJvY2Vzc2VzRGVmaW5pdGlvbnMkIHwgYXN5bmNcIiBbdmFsdWVdPVwicHJvY2Vzc0RlZi5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInByb2Nlc3NEZWZpbml0aW9uU2VsZWN0aW9uQ2hhbmdlZChwcm9jZXNzRGVmKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcHJvY2Vzc0RlZi5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1Byb2Nlc3NEZWZpbml0aW9uc0xvYWRpbmcgOyBlbHNlIHNob3dQcm9jZXNzRGVmTG9hZGluZ1RlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXN0YXJ0LXByb2Nlc3MtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYWRmLXNlbGVjdC1wcm9jZXNzLWRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd1NlbGVjdFByb2Nlc3NEcm9wZG93blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkaXNwbGF5RHJvcGRvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEcm9wZG93bkRpc2FibGVkKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQURGX1BST0NFU1NfTElTVC5TVEFSVF9QUk9DRVNTLkZPUk0uTEFCRUwuVFlQRScgfCB0cmFuc2xhdGUgfCB1cHBlcmNhc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5hcnJvd19kcm9wX2Rvd248L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3Nob3dQcm9jZXNzRGVmTG9hZGluZ1RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNwaW5uZXIgaWQ9XCJhZGYtc2VsZWN0LXByb2Nlc3Mtc3Bpbm5lclwiIFtkaWFtZXRlcl09XCIyMFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImFkZi1wcm9jZXNzLWlucHV0LWNvbnRhaW5lciBhZGYtcHJvY2Vzcy1pbnB1dC1jb250YWluZXItcHJvY2Vzcy1uYW1lXCIgW2Zsb2F0TGFiZWxdPVwiJ2Fsd2F5cydcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57eydBREZfUFJPQ0VTU19MSVNULlNUQVJUX1BST0NFU1MuRk9STS5MQUJFTC5OQU1FJyB8IHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJwcm9jZXNzTmFtZUlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwicHJvY2Vzc05hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQvPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwibmFtZUNvbnRyb2xsZXIuaGFzRXJyb3IoJ21heGxlbmd0aCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnQURGX1BST0NFU1NfTElTVC5TVEFSVF9QUk9DRVNTLkVSUk9SLk1BWElNVU1fTEVOR1RIJyB8IHRyYW5zbGF0ZSA6IHsgY2hhcmFjdGVycyA6IG1heFByb2Nlc3NOYW1lTGVuZ3RoIH0gfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJuYW1lQ29udHJvbGxlci5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0FERl9QUk9DRVNTX0xJU1QuU1RBUlRfUFJPQ0VTUy5FUlJPUi5QUk9DRVNTX05BTUVfUkVRVUlSRUQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwibmFtZUNvbnRyb2xsZXIuaGFzRXJyb3IoJ3BhdHRlcm4nKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0FERl9QUk9DRVNTX0xJU1QuU1RBUlRfUFJPQ0VTUy5FUlJPUi5TUEFDRV9WQUxJREFUT1InIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzUHJvY2Vzc0RlZmluaXRpb25zTG9hZGluZyA7IGVsc2Ugc2hvd1N0YXJ0Rm9ybUxvYWRpbmdUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNQcm9jZXNzRGVmaW5pdGlvblNlbGVjdGVkKCkgOyBlbHNlIGVtcHR5UHJvY2Vzc0RlZlRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICAqbmdJZj1cImhhc1N0YXJ0Rm9ybSgpOyBlbHNlIG5vU3RhcnRGb3JtVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRmLXN0YXJ0LWZvcm1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3N0YXJ0Rm9ybVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJtb3ZlZE5vZGVUb1BTXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVTdGFydFByb2Nlc3NCdXR0b25dPVwicHJvY2Vzc05hbWVJbnB1dC5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb2Nlc3NEZWZpbml0aW9uSWRdPVwic2VsZWN0ZWRQcm9jZXNzRGVmLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG91dGNvbWVDbGljayk9XCJvbk91dGNvbWVDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dSZWZyZXNoQnV0dG9uXT1cImZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXN0YXJ0LXByb2Nlc3MtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZi1mb3JtLWN1c3RvbS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWxTdGFydFByb2Nlc3MoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNhbmNlbF9wcm9jZXNzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydBREZfUFJPQ0VTU19MSVNULlNUQVJUX1BST0NFU1MuRk9STS5BQ1RJT04uQ0FOQ0VMJ3wgdHJhbnNsYXRlIHwgdXBwZXJjYXNlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hZGYtc3RhcnQtZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub1N0YXJ0Rm9ybVRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtZW1wdHktY29udGVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1zdGFydC1wcm9jZXNzLWVtcHR5LXRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiJ2Fzc2Vzc21lbnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidBREZfUFJPQ0VTU19MSVNULlNUQVJUX1BST0NFU1MuTk9fU1RBUlRfRk9STScgIHwgdHJhbnNsYXRlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2VtcHR5UHJvY2Vzc0RlZlRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1lbXB0eS1jb250ZW50IGNsYXNzPVwiYWRmLXN0YXJ0LXByb2Nlc3MtZW1wdHktdGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cIidhc3Nlc3NtZW50J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidBREZfUFJPQ0VTU19MSVNULlNUQVJUX1BST0NFU1MuTk9fUFJPQ0VTU19ERUZfU0VMRUNURUQnICB8IHRyYW5zbGF0ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzaG93U3RhcnRGb3JtTG9hZGluZ1RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNwaW5uZXIgY2xhc3M9XCJhZGYtc3RhcnQtcHJvY2Vzcy1sb2FkaW5nXCIgLz5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLXN0YXJ0LXByb2Nlc3MtY29udGVudC1hY3Rpb25zXCIgKm5nSWY9XCIhaGFzU3RhcnRGb3JtKClcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXN0YXJ0LXByb2Nlc3MtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFoYXNTdGFydEZvcm0oKVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWxTdGFydFByb2Nlc3MoKVwiXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiY2FuY2VsX3Byb2Nlc3NcIj5cbiAgICAgICAgICAgICAgICAgICAge3snQURGX1BST0NFU1NfTElTVC5TVEFSVF9QUk9DRVNTLkZPUk0uQUNUSU9OLkNBTkNFTCd8IHRyYW5zbGF0ZSB8IHVwcGVyY2FzZX19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWhhc1N0YXJ0Rm9ybSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiF2YWxpZGF0ZUZvcm0oKVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzdGFydFByb2Nlc3MoKVwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImJ0bi1zdGFydFwiXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiYnV0dG9uLXN0YXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tc3RhcnQgYWRmLXN0YXJ0LXByb2Nlc3MtYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7J0FERl9QUk9DRVNTX0xJU1QuU1RBUlRfUFJPQ0VTUy5GT1JNLkFDVElPTi5TVEFSVCcgfCB0cmFuc2xhdGUgfCB1cHBlcmNhc2V9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI3Nob3dFbXB0eVRlbXBsYXRlPlxuICAgICAgICAgICAgPGFkZi1lbXB0eS1jb250ZW50IGNsYXNzPVwiYWRmLXN0YXJ0LXByb2Nlc3MtZW1wdHktdGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgIFtpY29uXT1cIidhc3Nlc3NtZW50J1wiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIidBREZfUFJPQ0VTU19MSVNULlNUQVJUX1BST0NFU1MuTk9fUFJPQ0VTU19ERUZJTklUSU9OUycgfCB0cmFuc2xhdGVcIiAvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
424
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnQtcHJvY2Vzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHJvY2Vzcy1zZXJ2aWNlcy9zcmMvbGliL3Byb2Nlc3MtbGlzdC9jb21wb25lbnRzL3N0YXJ0LXByb2Nlc3Mvc3RhcnQtcHJvY2Vzcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHJvY2Vzcy1zZXJ2aWNlcy9zcmMvbGliL3Byb2Nlc3MtbGlzdC9jb21wb25lbnRzL3N0YXJ0LXByb2Nlc3Mvc3RhcnQtcHJvY2Vzcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixxQkFBcUIsRUFFckIsaUJBQWlCLEVBQ3BCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBbUIsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ILE9BQU8sRUFBRSxRQUFRLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQy9GLE9BQU8sRUFBbUIsZUFBZSxFQUFFLE1BQU0s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LGFBQWEsb0xBQ2IsY0FBYyw0V0FDZCxxQkFBcUIscUdBQ3JCLGtCQUFrQjs7MkZBTWIsNkJBQTZCO2tCQXRCekMsU0FBUzsrQkFDSSxtQkFBbUIsY0FDakIsSUFBSSxXQUNQO3dCQUNMLFlBQVk7d0JBQ1osd0JBQXdCO3dCQUN4QixlQUFlO3dCQUNmLGtCQUFrQjt3QkFDbEIsZUFBZTt3QkFDZixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIscUJBQXFCO3dCQUNyQixlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxxQkFBcUI7d0JBQ3JCLGtCQUFrQjtxQkFDckIsaUJBR2MsaUJBQWlCLENBQUMsSUFBSTt3TkFRckMsS0FBSztzQkFESixLQUFLO2dCQUtOLEtBQUs7c0JBREosS0FBSztnQkFLTixxQkFBcUI7c0JBRHBCLEtBQUs7Z0JBUU4sU0FBUztzQkFEUixLQUFLO2dCQUtOLE1BQU07c0JBREwsS0FBSztnQkFLTixJQUFJO3NCQURILEtBQUs7Z0JBS04seUJBQXlCO3NCQUR4QixLQUFLO2dCQUtOLDZCQUE2QjtzQkFENUIsS0FBSztnQkFLTixxQkFBcUI7c0JBRHBCLEtBQUs7Z0JBS04sS0FBSztzQkFESixNQUFNO2dCQUtQLE1BQU07c0JBREwsTUFBTTtnQkFLUCxLQUFLO3NCQURKLE1BQU07Z0JBS1AsMEJBQTBCO3NCQUR6QixNQUFNO2dCQUtQLG9CQUFvQjtzQkFEbkIsTUFBTTtnQkFJUCxTQUFTO3NCQURSLFNBQVM7dUJBQUMsV0FBVztnQkFJdEIsaUJBQWlCO3NCQURoQixTQUFTO3VCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRGVzdHJveVJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBcHBDb25maWdTZXJ2aWNlLFxuICAgIEFwcENvbmZpZ1ZhbHVlcyxcbiAgICBFbXB0eUNvbnRlbnRDb21wb25lbnQsXG4gICAgRm9ybVZhbHVlcyxcbiAgICBMb2NhbGl6ZWREYXRlUGlwZVxufSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgQXBwc1Byb2Nlc3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXBwcy1wcm9jZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJvY2Vzc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcm9jZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVW50eXBlZEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZm9ya0pvaW4sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZU1vZHVsZSwgTWF0QXV0b2NvbXBsZXRlVHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XG5pbXBvcnQgeyBNYXRTZWxlY3RDaGFuZ2UsIE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBTdGFydEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9mb3JtJztcbmltcG9ydCB7XG4gICAgQXBwRGVmaW5pdGlvblJlcHJlc2VudGF0aW9uLFxuICAgIE5vZGUsXG4gICAgUHJvY2Vzc0RlZmluaXRpb25SZXByZXNlbnRhdGlvbixcbiAgICBQcm9jZXNzSW5zdGFuY2VSZXByZXNlbnRhdGlvbixcbiAgICBSZWxhdGVkQ29udGVudFJlcHJlc2VudGF0aW9uLFxuICAgIFJlc3RWYXJpYWJsZVxufSBmcm9tICdAYWxmcmVzY28vanMtYXBpJztcbmltcG9ydCB7IEFjdGl2aXRpQ29udGVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9mb3JtL3NlcnZpY2VzL2FjdGl2aXRpLWFsZnJlc2NvLnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0VGltZSB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbmNvbnN0IE1BWF9MRU5HVEggPSAyNTU7XG5jb25zdCBEQVRFX1RJTUVfSURFTlRJRklFUl9SRUdfRVhQID0gbmV3IFJlZ0V4cCgnJXtkYXRldGltZX0nLCAnaScpO1xuY29uc3QgUFJPQ0VTU19ERUZJTklUSU9OX0lERU5USUZJRVJfUkVHX0VYUCA9IG5ldyBSZWdFeHAoJyV7cHJvY2Vzc2RlZmluaXRpb259JywgJ2knKTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhZGYtc3RhcnQtcHJvY2VzcycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLFxuICAgICAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICAgICAgTWF0U2VsZWN0TW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgTWF0QXV0b2NvbXBsZXRlTW9kdWxlLFxuICAgICAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgICAgIE1hdEljb25Nb2R1bGUsXG4gICAgICAgIE1hdElucHV0TW9kdWxlLFxuICAgICAgICBFbXB0eUNvbnRlbnRDb21wb25lbnQsXG4gICAgICAgIFN0YXJ0Rm9ybUNvbXBvbmVudFxuICAgIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL3N0YXJ0LXByb2Nlc3MuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3N0YXJ0LXByb2Nlc3MuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIFN0YXJ0UHJvY2Vzc0luc3RhbmNlQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQge1xuICAgIC8qKlxuICAgICAqIExpbWl0IHRoZSBsaXN0IG9mIHByb2Nlc3NlcyB0aGF0IGNhbiBiZSBzdGFydGVkIHRvIHRob3NlXG4gICAgICogY29udGFpbmVkIGluIHRoZSBzcGVjaWZpZWQgYXBwLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXBwSWQ/OiBudW1iZXI7XG5cbiAgICAvKiogRGVmaW5lIHRoZSBoZWFkZXIgb2YgdGhlIGNvbXBvbmVudC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHRpdGxlPzogc3RyaW5nO1xuXG4gICAgLyoqIERlZmluaXRpb24gbmFtZSBvZiB0aGUgcHJvY2VzcyB0byBzdGFydC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHByb2Nlc3NEZWZpbml0aW9uTmFtZT86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFZhcmlhYmxlcyBpbiB0aGUgaW5wdXQgdG8gdGhlIHByb2Nlc3NcbiAgICAgKiBbUmVzdFZhcmlhYmxlXShodHRwczovL2dpdGh1Yi5jb20vQWxmcmVzY28vYWxmcmVzY28tanMtYXBpL3RyZWUvbWFzdGVyL3NyYy9hbGZyZXNjby1hY3Rpdml0aS1yZXN0LWFwaS9kb2NzL1Jlc3RWYXJpYWJsZS5tZCkuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB2YXJpYWJsZXM6IFJlc3RWYXJpYWJsZVtdO1xuXG4gICAgLyoqIFBhcmFtZXRlciB0byBwYXNzIGZvcm0gZmllbGQgdmFsdWVzIGluIHRoZSBzdGFydCBmb3JtIGlmIG9uZSBpcyBhc3NvY2lhdGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdmFsdWVzOiBGb3JtVmFsdWVzO1xuXG4gICAgLyoqIE5hbWUgdG8gYXNzaWduIHRvIHRoZSBjdXJyZW50IHByb2Nlc3MuICovXG4gICAgQElucHV0KClcbiAgICBuYW1lPzogc3RyaW5nID0gJyc7XG5cbiAgICAvKiogSGlkZSBvciBzaG93IHRoZSBwcm9jZXNzIHNlbGVjdGlvbiBkcm9wZG93bi4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dTZWxlY3RQcm9jZXNzRHJvcGRvd24gPSB0cnVlO1xuXG4gICAgLyoqIEhpZGUgb3Igc2hvdyBhcHBsaWNhdGlvbiBzZWxlY3Rpb24gZHJvcGRvd24uICovXG4gICAgQElucHV0KClcbiAgICBzaG93U2VsZWN0QXBwbGljYXRpb25Ecm9wZG93bj8gPSBmYWxzZTtcblxuICAgIC8qKiBQYXJhbWV0ZXIgdG8gZW5hYmxlIHNlbGVjdGlvbiBvZiBwcm9jZXNzIHdoZW4gZmlsdGVyaW5nLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHJvY2Vzc0ZpbHRlclNlbGVjdG9yPyA9IHRydWU7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBwcm9jZXNzIHN0YXJ0cy4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBzdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8UHJvY2Vzc0luc3RhbmNlUmVwcmVzZW50YXRpb24+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBwcm9jZXNzIGlzIGNhbmNlbGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gYW4gZXJyb3Igb2NjdXJzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGVycm9yID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHByb2Nlc3MgZGVmaW5pdGlvbiBzZWxlY3Rpb24gY2hhbmdlcy4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBwcm9jZXNzRGVmaW5pdGlvblNlbGVjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8UHJvY2Vzc0RlZmluaXRpb25SZXByZXNlbnRhdGlvbj4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gYXBwbGljYXRpb24gc2VsZWN0aW9uIGNoYW5nZXMuICovXG4gICAgQE91dHB1dCgpXG4gICAgYXBwbGljYXRpb25TZWxlY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPEFwcERlZmluaXRpb25SZXByZXNlbnRhdGlvbj4oKTtcblxuICAgIEBWaWV3Q2hpbGQoJ3N0YXJ0Rm9ybScpXG4gICAgc3RhcnRGb3JtOiBTdGFydEZvcm1Db21wb25lbnQ7XG5cbiAgICBAVmlld0NoaWxkKE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIpXG4gICAgaW5wdXRBdXRvY29tcGxldGU6IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXI7XG5cbiAgICBwcm9jZXNzRGVmaW5pdGlvbnM6IFByb2Nlc3NEZWZpbml0aW9uUmVwcmVzZW50YXRpb25bXSA9IFtdO1xuICAgIHNlbGVjdGVkUHJvY2Vzc0RlZjogUHJvY2Vzc0RlZmluaXRpb25SZXByZXNlbnRhdGlvbjtcbiAgICBwcm9jZXNzTmFtZUlucHV0OiBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gICAgcHJvY2Vzc0RlZmluaXRpb25JbnB1dDogVW50eXBlZEZvcm1Db250cm9sO1xuICAgIGZpbHRlcmVkUHJvY2Vzc2VzRGVmaW5pdGlvbnMkOiBPYnNlcnZhYmxlPFByb2Nlc3NEZWZpbml0aW9uUmVwcmVzZW50YXRpb25bXT47XG4gICAgbWF4UHJvY2Vzc05hbWVMZW5ndGg6IG51bWJlciA9IE1BWF9MRU5HVEg7XG4gICAgYWxmcmVzY29SZXBvc2l0b3J5TmFtZTogc3RyaW5nO1xuICAgIGFwcGxpY2F0aW9uczogQXBwRGVmaW5pdGlvblJlcHJlc2VudGF0aW9uW10gPSBbXTtcbiAgICBzZWxlY3RlZEFwcGxpY2F0aW9uOiBBcHBEZWZpbml0aW9uUmVwcmVzZW50YXRpb247XG5cbiAgICBpc1Byb2Nlc3NEZWZpbml0aW9uc0xvYWRpbmcgPSB0cnVlO1xuICAgIGlzQXBwc0xvYWRpbmcgPSB0cnVlO1xuICAgIG1vdmVkTm9kZVRvUFM6IEZvcm1WYWx1ZXM7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBwcm9jZXNzU2VydmljZTogUHJvY2Vzc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY29udGVudFNlcnZpY2U6IEFjdGl2aXRpQ29udGVudFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYXBwc1Byb2Nlc3NTZXJ2aWNlOiBBcHBzUHJvY2Vzc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYXBwQ29uZmlnOiBBcHBDb25maWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGRhdGVQaXBlOiBMb2NhbGl6ZWREYXRlUGlwZVxuICAgICkge31cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnByb2Nlc3NOYW1lSW5wdXQgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCBbXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgodGhpcy5tYXhQcm9jZXNzTmFtZUxlbmd0aCksXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oJ15bXlxcXFxzXSsoXFxcXHMrW15cXFxcc10rKSokJylcbiAgICAgICAgXSk7XG4gICAgICAgIHRoaXMucHJvY2Vzc0RlZmluaXRpb25JbnB1dCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcblxuICAgICAgICB0aGlzLmxvYWQodGhpcy5hcHBJZCk7XG5cbiAgICAgICAgdGhpcy5maWx0ZXJlZFByb2Nlc3Nlc0RlZmluaXRpb25zJCA9IHRoaXMucHJvY2Vzc0RlZmluaXRpb25JbnB1dC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgIG1hcCgodmFsdWUpID0+IHRoaXMuX2ZpbHRlcih2YWx1ZSkpLFxuICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmNvbnRlbnRTZXJ2aWNlLmdldEFsZnJlc2NvUmVwb3NpdG9yaWVzKCkuc3Vic2NyaWJlKChyZXBvTGlzdCkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcG9MaXN0Py5bMF0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbGZyZXNjb1JlcG9zaXRvcnkgPSByZXBvTGlzdFswXTtcbiAgICAgICAgICAgICAgICB0aGlzLmFsZnJlc2NvUmVwb3NpdG9yeU5hbWUgPSBgYWxmcmVzY28tJHthbGZyZXNjb1JlcG9zaXRvcnkuaWR9LSR7YWxmcmVzY29SZXBvc2l0b3J5Lm5hbWV9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlc1sndmFsdWVzJ10/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5tb3ZlTm9kZUZyb21DU3RvUFMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFwcElkID0gY2hhbmdlc1snYXBwSWQnXTtcbiAgICAgICAgaWYgKGFwcElkPy5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZChhcHBJZC5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJvY2Vzc0RlZmluaXRpb25OYW1lID0gY2hhbmdlc1sncHJvY2Vzc0RlZmluaXRpb25OYW1lJ107XG4gICAgICAgIGlmIChwcm9jZXNzRGVmaW5pdGlvbk5hbWU/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJQcm9jZXNzRGVmaW5pdGlvbkJ5TmFtZShwcm9jZXNzRGVmaW5pdGlvbk5hbWUuY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2VsZWN0ZWRQcm9jZXNzKHNlbGVjdGVkUHJvY2Vzczogc3RyaW5nKTogUHJvY2Vzc0RlZmluaXRpb25SZXByZXNlbnRhdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NEZWZpbml0aW9ucy5maW5kKChwcm9jZXNzKSA9PiBwcm9jZXNzLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gc2VsZWN0ZWRQcm9jZXNzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWQoYXBwSWQ/OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd1NlbGVjdEFwcGxpY2F0aW9uRHJvcGRvd24pIHtcbiAgICAgICAgICAgIHRoaXMubG9hZEFwcHMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9hZFByb2Nlc3NEZWZpbml0aW9ucyhhcHBJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsb2FkUHJvY2Vzc0RlZmluaXRpb25zKGFwcElkOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc1Byb2Nlc3NEZWZpbml0aW9uc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlc2V0U2VsZWN0ZWRQcm9jZXNzRGVmaW5pdGlvbigpO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc1NlcnZpY2VcbiAgICAgICAgICAgIC5nZXRQcm9jZXNzRGVmaW5pdGlvbnMoYXBwSWQpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKHByb2Nlc3NEZWZpbml0aW9uUmVwcmVzZW50YXRpb25zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50UHJvY2Vzc0RlZjogUHJvY2Vzc0RlZmluaXRpb25SZXByZXNlbnRhdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzc0RlZmluaXRpb25SZXByZXNlbnRhdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UHJvY2Vzc0RlZiA9IHByb2Nlc3NEZWZpbml0aW9uUmVwcmVzZW50YXRpb25zWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvY2Vzc0RlZmluaXRpb25OYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZFByb2Nlc3NEZWZpbml0aW9uID0gcHJvY2Vzc0RlZmluaXRpb25SZXByZXNlbnRhdGlvbnMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvY2Vzc0RlZmluaXRpb24pID0+IHByb2Nlc3NEZWZpbml0aW9uLm5hbWUgPT09IHRoaXMucHJvY2Vzc0RlZmluaXRpb25OYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkUHJvY2Vzc0RlZmluaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UHJvY2Vzc0RlZiA9IGZpbHRlcmVkUHJvY2Vzc0RlZmluaXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBjdXJyZW50UHJvY2Vzc0RlZiwgcHJvY2Vzc0RlZmluaXRpb25SZXByZXNlbnRhdGlvbnMgfTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAoZmlsdGVyZWRQcm9jZXNzRGVmaW5pdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzRGVmaW5pdGlvbnMgPSBmaWx0ZXJlZFByb2Nlc3NEZWZpbml0aW9ucy5wcm9jZXNzRGVmaW5pdGlvblJlcHJlc2VudGF0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzRGVmaW5pdGlvblNlbGVjdGlvbkNoYW5nZWQoZmlsdGVyZWRQcm9jZXNzRGVmaW5pdGlvbnMuY3VycmVudFByb2Nlc3NEZWYpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NEZWZpbml0aW9uSW5wdXQuc2V0VmFsdWUodGhpcy5zZWxlY3RlZFByb2Nlc3NEZWYgPyB0aGlzLnNlbGVjdGVkUHJvY2Vzc0RlZi5uYW1lIDogJycpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUHJvY2Vzc0RlZmluaXRpb25zTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNQcm9jZXNzRGVmaW5pdGlvbnNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IuZW1pdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbHRlclByb2Nlc3NEZWZpbml0aW9uQnlOYW1lKGRlZmluaXRpb25OYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKGRlZmluaXRpb25OYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZFByb2Nlc3NEZWYgPSB0aGlzLnByb2Nlc3NEZWZpbml0aW9ucy5maW5kKChwcm9jZXNzRGVmaW5pdGlvbikgPT4gcHJvY2Vzc0RlZmluaXRpb24ubmFtZSA9PT0gZGVmaW5pdGlvbk5hbWUpO1xuXG4gICAgICAgICAgICBpZiAoZmlsdGVyZWRQcm9jZXNzRGVmKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzRGVmaW5pdGlvblNlbGVjdGlvbkNoYW5nZWQoZmlsdGVyZWRQcm9jZXNzRGVmKTtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NEZWZpbml0aW9uSW5wdXQuc2V0VmFsdWUodGhpcy5zZWxlY3RlZFByb2Nlc3NEZWYgPyB0aGlzLnNlbGVjdGVkUHJvY2Vzc0RlZi5uYW1lIDogJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkQXBwcygpIHtcbiAgICAgICAgdGhpcy5pc0FwcHNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5hcHBzUHJvY2Vzc1NlcnZpY2VcbiAgICAgICAgICAgIC5nZXREZXBsb3llZEFwcGxpY2F0aW9ucygpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwcGxpY2F0aW9ucyA9IHJlc3BvbnNlLmZpbHRlcigoYXBwKSA9PiBhcHAuaWQpO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50QXBwbGljYXRpb246IEFwcERlZmluaXRpb25SZXByZXNlbnRhdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoYXBwbGljYXRpb25zICYmIGFwcGxpY2F0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRBcHBsaWNhdGlvbiA9IGFwcGxpY2F0aW9uc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkQXBwID0gYXBwbGljYXRpb25zLmZpbmQoKGFwcCkgPT4gYXBwLmlkID09PSArdGhpcy5hcHBJZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkQXBwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50QXBwbGljYXRpb24gPSBmaWx0ZXJlZEFwcDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGN1cnJlbnRBcHBsaWNhdGlvbiwgYXBwbGljYXRpb25zIH07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgKGZpbHRlcmVkQXBwcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGxpY2F0aW9ucyA9IGZpbHRlcmVkQXBwcy5hcHBsaWNhdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBcHBsaWNhdGlvbiA9IGZpbHRlcmVkQXBwcy5jdXJyZW50QXBwbGljYXRpb247XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwbGljYXRpb25TZWxlY3Rpb24uZW1pdCh0aGlzLnNlbGVjdGVkQXBwbGljYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZVByb2Nlc3NOYW1lQW5kRGVmaW5pdGlvbnNEcm9wZG93bigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQXBwc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkUHJvY2Vzc0RlZmluaXRpb25zQmFzZWRPblNlbGVjdGVkQXBwKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNBcHBzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yLmVtaXQoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZFByb2Nlc3NEZWZpbml0aW9uc0Jhc2VkT25TZWxlY3RlZEFwcCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRBcHBsaWNhdGlvbj8uaWQpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZFByb2Nlc3NEZWZpbml0aW9ucyh0aGlzLnNlbGVjdGVkQXBwbGljYXRpb24gPyB0aGlzLnNlbGVjdGVkQXBwbGljYXRpb24uaWQgOiBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNQcm9jZXNzRGVmaW5pdGlvbnNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJlc2V0UHJvY2Vzc0RlZmluaXRpb25zKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkFwcFNlbGVjdGlvbkNoYW5nZShzZWxlY3RlZEFwcGxpY2F0aW9uOiBNYXRTZWxlY3RDaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5yZXNldFByb2Nlc3NEZWZpbml0aW9ucygpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQXBwbGljYXRpb24gPSBzZWxlY3RlZEFwcGxpY2F0aW9uLnZhbHVlO1xuICAgICAgICB0aGlzLmFwcGxpY2F0aW9uU2VsZWN0aW9uLmVtaXQodGhpcy5zZWxlY3RlZEFwcGxpY2F0aW9uKTtcbiAgICAgICAgdGhpcy50b2dnbGVQcm9jZXNzTmFtZUFuZERlZmluaXRpb25zRHJvcGRvd24oKTtcbiAgICAgICAgdGhpcy5sb2FkUHJvY2Vzc0RlZmluaXRpb25zQmFzZWRPblNlbGVjdGVkQXBwKCk7XG4gICAgfVxuXG4gICAgaGFzQXBwbGljYXRpb25zKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hcHBsaWNhdGlvbnM/Lmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgaGFzUHJvY2Vzc0RlZmluaXRpb25zKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRGVmaW5pdGlvbnM/Lmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgaXNQcm9jZXNzRGVmaW5pdGlvblNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLnNlbGVjdGVkUHJvY2Vzc0RlZj8uaWQ7XG4gICAgfVxuXG4gICAgaXNEcm9wZG93bkRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zaG93U2VsZWN0QXBwbGljYXRpb25Ecm9wZG93biAmJiAhdGhpcy5pc0FwcFNlbGVjdGVkKCk7XG4gICAgfVxuXG4gICAgZ2V0QWxmcmVzY29SZXBvc2l0b3J5TmFtZSgpOiBzdHJpbmcge1xuICAgICAgICBsZXQgYWxmcmVzY29SZXBvc2l0b3J5TmFtZSA9IHRoaXMuYXBwQ29uZmlnLmdldDxzdHJpbmc+KEFwcENvbmZpZ1ZhbHVlcy5BTEZSRVNDT19SRVBPU0lUT1JZX05BTUUpO1xuICAgICAgICBpZiAoIWFsZnJlc2NvUmVwb3NpdG9yeU5hbWUpIHtcbiAgICAgICAgICAgIGFsZnJlc2NvUmVwb3NpdG9yeU5hbWUgPSB0aGlzLmFsZnJlc2NvUmVwb3NpdG9yeU5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFsZnJlc2NvUmVwb3NpdG9yeU5hbWUgKyAnQWxmcmVzY28nO1xuICAgIH1cblxuICAgIG1vdmVOb2RlRnJvbUNTdG9QUygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYWNjb3VudElkZW50aWZpZXIgPSB0aGlzLmdldEFsZnJlc2NvUmVwb3NpdG9yeU5hbWUoKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnZhbHVlcykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnZhbHVlcywga2V5KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZXNba2V5XSkgPyB0aGlzLnZhbHVlc1trZXldIDogW3RoaXMudmFsdWVzW2tleV1dO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRzID0gY3VycmVudFZhbHVlXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKHZhbHVlOiBhbnkpID0+ICEhdmFsdWU/LmlzRmlsZSlcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoY29udGVudDogTm9kZSkgPT4gdGhpcy5jb250ZW50U2VydmljZS5hcHBseUFsZnJlc2NvTm9kZShjb250ZW50LCBudWxsLCBhY2NvdW50SWRlbnRpZmllcikpO1xuICAgICAgICAgICAgICAgIGZvcmtKb2luKGNvbnRlbnRzKS5zdWJzY3JpYmUoKHJlczogUmVsYXRlZENvbnRlbnRSZXByZXNlbnRhdGlvbltdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW92ZWROb2RlVG9QUyA9IHsgW2tleV06IFsuLi5yZXNdIH07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGFydFByb2Nlc3Mob3V0Y29tZT86IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFByb2Nlc3NEZWY/LmlkICYmIHRoaXMubmFtZUNvbnRyb2xsZXIudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1WYWx1ZXMgPSB0aGlzLnN0YXJ0Rm9ybSA/IHRoaXMuc3RhcnRGb3JtLmZvcm0udmFsdWVzIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU2VydmljZS5zdGFydFByb2Nlc3ModGhpcy5zZWxlY3RlZFByb2Nlc3NEZWYuaWQsIHRoaXMubmFtZUNvbnRyb2xsZXIudmFsdWUsIG91dGNvbWUsIGZvcm1WYWx1ZXMsIHRoaXMudmFyaWFibGVzKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5hbWUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydC5lbWl0KHJlcyk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IuZW1pdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjYW5jZWxTdGFydFByb2Nlc3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2FuY2VsLmVtaXQoKTtcbiAgICB9XG5cbiAgICBoYXNTdGFydEZvcm0oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUHJvY2Vzc0RlZj8uaGFzU3RhcnRGb3JtO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNTdGFydEZvcm1NaXNzaW5nT3JWYWxpZCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhcnRGb3JtKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdGFydEZvcm0uZm9ybT8uaXNWYWxpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFsaWRhdGVGb3JtKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFByb2Nlc3NEZWY/LmlkICYmIHRoaXMucHJvY2Vzc05hbWVJbnB1dC52YWxpZCAmJiB0aGlzLmlzU3RhcnRGb3JtTWlzc2luZ09yVmFsaWQoKTtcbiAgICB9XG5cbiAgICBvbk91dGNvbWVDbGljayhvdXRjb21lOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zdGFydFByb2Nlc3Mob3V0Y29tZSk7XG4gICAgfVxuXG4gICAgcmVzZXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVzZXRTZWxlY3RlZFByb2Nlc3NEZWZpbml0aW9uKCk7XG4gICAgICAgIHRoaXMubmFtZSA9ICcnO1xuICAgICAgICBpZiAodGhpcy5zdGFydEZvcm0pIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRGb3JtLmRhdGEgPSB7fTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRpc3BsYXlGbihwcm9jZXNzOiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBpZiAocHJvY2Vzcykge1xuICAgICAgICAgICAgbGV0IHByb2Nlc3NOYW1lID0gcHJvY2VzcztcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzTmFtZSA9IHByb2Nlc3MubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwcm9jZXNzTmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGRpc3BsYXlEcm9wZG93bihldmVudDogRXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmICghdGhpcy5pbnB1dEF1dG9jb21wbGV0ZS5wYW5lbE9wZW4pIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0RlZmluaXRpb25JbnB1dC5zZXRWYWx1ZSgnJyk7XG4gICAgICAgICAgICB0aGlzLmlucHV0QXV0b2NvbXBsZXRlLm9wZW5QYW5lbCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbnB1dEF1dG9jb21wbGV0ZS5jbG9zZVBhbmVsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgbmFtZUNvbnRyb2xsZXIoKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc05hbWVJbnB1dDtcbiAgICB9XG5cbiAgICBnZXQgcHJvY2Vzc0RlZmluaXRpb25Db250cm9sbGVyKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NEZWZpbml0aW9uSW5wdXQ7XG4gICAgfVxuXG4gICAgcHJvY2Vzc0RlZmluaXRpb25TZWxlY3Rpb25DaGFuZ2VkKHByb2Nlc3NEZWZpbml0aW9uOiBQcm9jZXNzRGVmaW5pdGlvblJlcHJlc2VudGF0aW9uKSB7XG4gICAgICAgIGlmIChwcm9jZXNzRGVmaW5pdGlvbikge1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc0luc3RhbmNlRGV0YWlsczogUHJvY2Vzc0luc3RhbmNlUmVwcmVzZW50YXRpb24gPSB7IHByb2Nlc3NEZWZpbml0aW9uTmFtZTogcHJvY2Vzc0RlZmluaXRpb24ubmFtZSB9O1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc05hbWUgPSB0aGlzLmZvcm1hdFByb2Nlc3NOYW1lKHRoaXMubmFtZSwgcHJvY2Vzc0luc3RhbmNlRGV0YWlscyk7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NOYW1lSW5wdXQuc2V0VmFsdWUocHJvY2Vzc05hbWUpO1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzTmFtZUlucHV0Lm1hcmtBc0RpcnR5KCk7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NOYW1lSW5wdXQubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFByb2Nlc3NEZWYgPSBwcm9jZXNzRGVmaW5pdGlvbjtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0RlZmluaXRpb25TZWxlY3Rpb24uZW1pdCh0aGlzLnNlbGVjdGVkUHJvY2Vzc0RlZik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5hbWVDb250cm9sbGVyLnJlc2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0xvYWRpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3dTZWxlY3RBcHBsaWNhdGlvbkRyb3Bkb3duID8gdGhpcy5pc0FwcHNMb2FkaW5nIDogZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0FwcFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLnNlbGVjdGVkQXBwbGljYXRpb24/LmlkO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRTZWxlY3RlZFByb2Nlc3NEZWZpbml0aW9uKCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkUHJvY2Vzc0RlZiA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHRoaXMucHJvY2Vzc0RlZmluaXRpb25JbnB1dCkge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzRGVmaW5pdGlvbklucHV0LnNldFZhbHVlKCcnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRQcm9jZXNzRGVmaW5pdGlvbnMoKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc0RlZmluaXRpb25zID0gW107XG4gICAgICAgIHRoaXMucmVzZXRTZWxlY3RlZFByb2Nlc3NEZWZpbml0aW9uKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0b2dnbGVQcm9jZXNzTmFtZUFuZERlZmluaXRpb25zRHJvcGRvd24oKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0FwcFNlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0RlZmluaXRpb25Db250cm9sbGVyLmRpc2FibGUoKTtcbiAgICAgICAgICAgIHRoaXMubmFtZUNvbnRyb2xsZXIuZGlzYWJsZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzRGVmaW5pdGlvbkNvbnRyb2xsZXIuZW5hYmxlKCk7XG4gICAgICAgICAgICB0aGlzLm5hbWVDb250cm9sbGVyLmVuYWJsZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZmlsdGVyKHZhbHVlOiBzdHJpbmcpOiBQcm9jZXNzRGVmaW5pdGlvblJlcHJlc2VudGF0aW9uW10ge1xuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyVmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRQcm9jZXNzID0gdGhpcy5wcm9jZXNzRGVmaW5pdGlvbnMuZmlsdGVyKChvcHRpb24pID0+IG9wdGlvbi5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyVmFsdWUpKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMucHJvY2Vzc0ZpbHRlclNlbGVjdG9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFByb2Nlc3NEZWYgPSB0aGlzLmdldFNlbGVjdGVkUHJvY2VzcyhmaWx0ZXJWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWRQcm9jZXNzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9ybWF0UHJvY2Vzc05hbWUocHJvY2Vzc05hbWVGb3JtYXQ6IHN0cmluZywgcHJvY2Vzc0luc3RhbmNlPzogUHJvY2Vzc0luc3RhbmNlUmVwcmVzZW50YXRpb24pOiBzdHJpbmcge1xuICAgICAgICBsZXQgcHJvY2Vzc05hbWUgPSBwcm9jZXNzTmFtZUZvcm1hdDtcbiAgICAgICAgaWYgKHByb2Nlc3NOYW1lLm1hdGNoKERBVEVfVElNRV9JREVOVElGSUVSX1JFR19FWFApKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVzZW50RGF0ZVRpbWUgPSBnZXRUaW1lKG5ldyBEYXRlKCkpO1xuICAgICAgICAgICAgcHJvY2Vzc05hbWUgPSBwcm9jZXNzTmFtZS5yZXBsYWNlKERBVEVfVElNRV9JREVOVElGSUVSX1JFR19FWFAsIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHByZXNlbnREYXRlVGltZSwgJ21lZGl1bScpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9jZXNzTmFtZS5tYXRjaChQUk9DRVNTX0RFRklOSVRJT05fSURFTlRJRklFUl9SRUdfRVhQKSkge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRQcm9jZXNzRGVmaW5pdGlvbk5hbWUgPSBwcm9jZXNzSW5zdGFuY2UgPyBwcm9jZXNzSW5zdGFuY2UucHJvY2Vzc0RlZmluaXRpb25OYW1lIDogJyc7XG4gICAgICAgICAgICBwcm9jZXNzTmFtZSA9IHByb2Nlc3NOYW1lLnJlcGxhY2UoUFJPQ0VTU19ERUZJTklUSU9OX0lERU5USUZJRVJfUkVHX0VYUCwgc2VsZWN0ZWRQcm9jZXNzRGVmaW5pdGlvbk5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9jZXNzTmFtZTtcbiAgICB9XG59XG4iLCJcbjxuZy1jb250YWluZXIgKm5nSWY9XCJpc0xvYWRpbmcoKTsgdGhlbiBzaG93TG9hZGluZ1RlbXBsYXRlOyBlbHNlIHNob3dTdGFydFByb2Nlc3NUZW1wbGF0ZVwiIC8+XG4gICAgPG5nLXRlbXBsYXRlICNzaG93TG9hZGluZ1RlbXBsYXRlPlxuICAgICAgICA8bWF0LXNwaW5uZXIgY2xhc3M9XCJhZGYtc3RhcnQtcHJvY2Vzcy1sb2FkaW5nXCIgLz5cbiAgICA8L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNzaG93U3RhcnRQcm9jZXNzVGVtcGxhdGU+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0FwcGxpY2F0aW9ucygpIHx8IGhhc1Byb2Nlc3NEZWZpbml0aW9ucygpIDsgZWxzZSBzaG93RW1wdHlUZW1wbGF0ZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLXN0YXJ0LXByb2Nlc3NcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtdGl0bGVcIiAqbmdJZj1cInRpdGxlXCI+e3sgdGl0bGUgfCB0cmFuc2xhdGV9fTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLXN0YXJ0LXByb2Nlc3MtZGVmaW5pdGlvbi1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwic2hvd1NlbGVjdEFwcGxpY2F0aW9uRHJvcGRvd25cIiBbZmxvYXRMYWJlbF09XCInYWx3YXlzJ1wiIGNsYXNzPVwiYWRmLXN0YXJ0LXByb2Nlc3MtYXBwLWxpc3RcIiBbc3Vic2NyaXB0U2l6aW5nXT1cIidkeW5hbWljJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57eyAnQURGX1BST0NFU1NfTElTVC5TVEFSVF9QUk9DRVNTLkZPUk0uTEFCRUwuU0VMRUNUX0FQUExJQ0FUSU9OJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdBREZfUFJPQ0VTU19MSVNULlNUQVJUX1BST0NFU1MuRk9STS5MQUJFTC5TRUxFQ1RfQVBQTElDQVRJT04nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uQXBwU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRBcHBsaWNhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtc3RhcnQtcHJvY2Vzcy1kZWZpbml0aW9uLXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwiYWRmLXN0YXJ0LXByb2Nlc3MtYXBwcy1kcm9wLWRvd25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYXBwbGljYXRpb24gb2YgYXBwbGljYXRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImFwcGxpY2F0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYWRmLXN0YXJ0LXByb2Nlc3MtYXBwcy1vcHRpb24tJyArIGFwcGxpY2F0aW9uLm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYXBwbGljYXRpb24ubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiYWRmLXByb2Nlc3MtaW5wdXQtY29udGFpbmVyXCIgW2Zsb2F0TGFiZWxdPVwiJ2Fsd2F5cydcIiBbc3Vic2NyaXB0U2l6aW5nXT1cIidkeW5hbWljJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57eydBREZfUFJPQ0VTU19MSVNULlNUQVJUX1BST0NFU1MuRk9STS5MQUJFTC5UWVBFJyB8IHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwicHJvY2Vzc0RlZmluaXRpb25JbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInByb2Nlc3NEZWZpbml0aW9uTmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1wcm9jZXNzLWlucHV0LWF1dG9jb21wbGV0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJwcm9jZXNzRGVmaW5pdGlvbk9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzcGxheVdpdGhdPVwiZGlzcGxheUZuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBwcm9jZXNzRGVmIG9mIGZpbHRlcmVkUHJvY2Vzc2VzRGVmaW5pdGlvbnMkIHwgYXN5bmNcIiBbdmFsdWVdPVwicHJvY2Vzc0RlZi5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInByb2Nlc3NEZWZpbml0aW9uU2VsZWN0aW9uQ2hhbmdlZChwcm9jZXNzRGVmKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcHJvY2Vzc0RlZi5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1Byb2Nlc3NEZWZpbml0aW9uc0xvYWRpbmcgOyBlbHNlIHNob3dQcm9jZXNzRGVmTG9hZGluZ1RlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXN0YXJ0LXByb2Nlc3MtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYWRmLXNlbGVjdC1wcm9jZXNzLWRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd1NlbGVjdFByb2Nlc3NEcm9wZG93blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkaXNwbGF5RHJvcGRvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEcm9wZG93bkRpc2FibGVkKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQURGX1BST0NFU1NfTElTVC5TVEFSVF9QUk9DRVNTLkZPUk0uTEFCRUwuVFlQRScgfCB0cmFuc2xhdGUgfCB1cHBlcmNhc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5hcnJvd19kcm9wX2Rvd248L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3Nob3dQcm9jZXNzRGVmTG9hZGluZ1RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNwaW5uZXIgaWQ9XCJhZGYtc2VsZWN0LXByb2Nlc3Mtc3Bpbm5lclwiIFtkaWFtZXRlcl09XCIyMFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImFkZi1wcm9jZXNzLWlucHV0LWNvbnRhaW5lciBhZGYtcHJvY2Vzcy1pbnB1dC1jb250YWluZXItcHJvY2Vzcy1uYW1lXCIgW2Zsb2F0TGFiZWxdPVwiJ2Fsd2F5cydcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57eydBREZfUFJPQ0VTU19MSVNULlNUQVJUX1BST0NFU1MuRk9STS5MQUJFTC5OQU1FJyB8IHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJwcm9jZXNzTmFtZUlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwicHJvY2Vzc05hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQvPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwibmFtZUNvbnRyb2xsZXIuaGFzRXJyb3IoJ21heGxlbmd0aCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnQURGX1BST0NFU1NfTElTVC5TVEFSVF9QUk9DRVNTLkVSUk9SLk1BWElNVU1fTEVOR1RIJyB8IHRyYW5zbGF0ZSA6IHsgY2hhcmFjdGVycyA6IG1heFByb2Nlc3NOYW1lTGVuZ3RoIH0gfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJuYW1lQ29udHJvbGxlci5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0FERl9QUk9DRVNTX0xJU1QuU1RBUlRfUFJPQ0VTUy5FUlJPUi5QUk9DRVNTX05BTUVfUkVRVUlSRUQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwibmFtZUNvbnRyb2xsZXIuaGFzRXJyb3IoJ3BhdHRlcm4nKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0FERl9QUk9DRVNTX0xJU1QuU1RBUlRfUFJPQ0VTUy5FUlJPUi5TUEFDRV9WQUxJREFUT1InIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzUHJvY2Vzc0RlZmluaXRpb25zTG9hZGluZyA7IGVsc2Ugc2hvd1N0YXJ0Rm9ybUxvYWRpbmdUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNQcm9jZXNzRGVmaW5pdGlvblNlbGVjdGVkKCkgOyBlbHNlIGVtcHR5UHJvY2Vzc0RlZlRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICAqbmdJZj1cImhhc1N0YXJ0Rm9ybSgpOyBlbHNlIG5vU3RhcnRGb3JtVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRmLXN0YXJ0LWZvcm1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3N0YXJ0Rm9ybVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJtb3ZlZE5vZGVUb1BTXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVTdGFydFByb2Nlc3NCdXR0b25dPVwicHJvY2Vzc05hbWVJbnB1dC5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb2Nlc3NEZWZpbml0aW9uSWRdPVwic2VsZWN0ZWRQcm9jZXNzRGVmLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG91dGNvbWVDbGljayk9XCJvbk91dGNvbWVDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dSZWZyZXNoQnV0dG9uXT1cImZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXN0YXJ0LXByb2Nlc3MtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZi1mb3JtLWN1c3RvbS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWxTdGFydFByb2Nlc3MoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNhbmNlbF9wcm9jZXNzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydBREZfUFJPQ0VTU19MSVNULlNUQVJUX1BST0NFU1MuRk9STS5BQ1RJT04uQ0FOQ0VMJ3wgdHJhbnNsYXRlIHwgdXBwZXJjYXNlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hZGYtc3RhcnQtZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub1N0YXJ0Rm9ybVRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtZW1wdHktY29udGVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1zdGFydC1wcm9jZXNzLWVtcHR5LXRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiJ2Fzc2Vzc21lbnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidBREZfUFJPQ0VTU19MSVNULlNUQVJUX1BST0NFU1MuTk9fU1RBUlRfRk9STScgIHwgdHJhbnNsYXRlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2VtcHR5UHJvY2Vzc0RlZlRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1lbXB0eS1jb250ZW50IGNsYXNzPVwiYWRmLXN0YXJ0LXByb2Nlc3MtZW1wdHktdGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cIidhc3Nlc3NtZW50J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidBREZfUFJPQ0VTU19MSVNULlNUQVJUX1BST0NFU1MuTk9fUFJPQ0VTU19ERUZfU0VMRUNURUQnICB8IHRyYW5zbGF0ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzaG93U3RhcnRGb3JtTG9hZGluZ1RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNwaW5uZXIgY2xhc3M9XCJhZGYtc3RhcnQtcHJvY2Vzcy1sb2FkaW5nXCIgLz5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLXN0YXJ0LXByb2Nlc3MtY29udGVudC1hY3Rpb25zXCIgKm5nSWY9XCIhaGFzU3RhcnRGb3JtKClcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXN0YXJ0LXByb2Nlc3MtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFoYXNTdGFydEZvcm0oKVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWxTdGFydFByb2Nlc3MoKVwiXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiY2FuY2VsX3Byb2Nlc3NcIj5cbiAgICAgICAgICAgICAgICAgICAge3snQURGX1BST0NFU1NfTElTVC5TVEFSVF9QUk9DRVNTLkZPUk0uQUNUSU9OLkNBTkNFTCd8IHRyYW5zbGF0ZSB8IHVwcGVyY2FzZX19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWhhc1N0YXJ0Rm9ybSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiF2YWxpZGF0ZUZvcm0oKVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzdGFydFByb2Nlc3MoKVwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImJ0bi1zdGFydFwiXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiYnV0dG9uLXN0YXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tc3RhcnQgYWRmLXN0YXJ0LXByb2Nlc3MtYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7J0FERl9QUk9DRVNTX0xJU1QuU1RBUlRfUFJPQ0VTUy5GT1JNLkFDVElPTi5TVEFSVCcgfCB0cmFuc2xhdGUgfCB1cHBlcmNhc2V9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI3Nob3dFbXB0eVRlbXBsYXRlPlxuICAgICAgICAgICAgPGFkZi1lbXB0eS1jb250ZW50IGNsYXNzPVwiYWRmLXN0YXJ0LXByb2Nlc3MtZW1wdHktdGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgIFtpY29uXT1cIidhc3Nlc3NtZW50J1wiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIidBREZfUFJPQ0VTU19MSVNULlNUQVJUX1BST0NFU1MuTk9fUFJPQ0VTU19ERUZJTklUSU9OUycgfCB0cmFuc2xhdGVcIiAvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -170,13 +170,13 @@ export class ProcessFilterService {
|
|
|
170
170
|
index
|
|
171
171
|
};
|
|
172
172
|
}
|
|
173
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
174
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
173
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ProcessFilterService, deps: [{ token: i1.AlfrescoApiService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
174
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ProcessFilterService, providedIn: 'root' }); }
|
|
175
175
|
}
|
|
176
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
176
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ProcessFilterService, decorators: [{
|
|
177
177
|
type: Injectable,
|
|
178
178
|
args: [{
|
|
179
179
|
providedIn: 'root'
|
|
180
180
|
}]
|
|
181
181
|
}], ctorParameters: () => [{ type: i1.AlfrescoApiService }] });
|
|
182
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy1maWx0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzL3NyYy9saWIvcHJvY2Vzcy1saXN0L3NlcnZpY2VzL3Byb2Nlc3MtZmlsdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFFSCxjQUFjLEVBRWpCLE1BQU0sa0JBQWtCLENBQUM7OztBQUsxQixNQUFNLE9BQU8sb0JBQW9CO0lBRTdCLElBQUksY0FBYztRQUNkLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN6RyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDaEMsQ0FBQztJQUVELFlBQW9CLGtCQUFzQztRQUF0Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO0lBQUcsQ0FBQztJQUU5RDs7Ozs7T0FLRztJQUNILGlCQUFpQixDQUFDLEtBQWE7UUFDM0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMvQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNiLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNuQixRQUFRLENBQUMsSUFBSSxDQUFDLE9B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SSxLQUFLLEVBQUUsQ0FBQztZQUNSLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyw2QkFBNkIsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDeEUsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztRQUMvRCxDQUFDO0lBQ0wsQ0FBQztJQUVELDBCQUEwQixDQUFDLEtBQWEsRUFBRSxLQUFjO1FBQ3BELE9BQU87WUFDSCxJQUFJLEVBQUUsV0FBVztZQUNqQixLQUFLO1lBQ0wsTUFBTSxFQUFFLEtBQUs7WUFDYixJQUFJLEVBQUUsbUJBQW1CO1lBQ3pCLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFO1lBQzlELEtBQUs7U0FDUixDQUFDO0lBQ04sQ0FBQztJQUVELG9CQUFvQixDQUFDLEtBQWEsRUFBRSxLQUFjO1FBQzlDLE9BQU87WUFDSCxJQUFJLEVBQUUsS0FBSztZQUNYLEtBQUs7WUFDTCxNQUFNLEVBQUUsSUFBSTtZQUNaLElBQUksRUFBRSxjQUFjO1lBQ3BCLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQ3hELEtBQUs7U0FDUixDQUFDO0lBQ04sQ0FBQzsrR0FoS1Esb0JBQW9CO21IQUFwQixvQkFBb0IsY0FGakIsTUFBTTs7NEZBRVQsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgQWxmcmVzY29BcGlTZXJ2aWNlIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb250ZW50LXNlcnZpY2VzJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGZyb20sIGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICAgIFJlc3VsdExpc3REYXRhUmVwcmVzZW50YXRpb25Vc2VyUHJvY2Vzc0luc3RhbmNlRmlsdGVyUmVwcmVzZW50YXRpb24sXG4gICAgVXNlckZpbHRlcnNBcGksXG4gICAgVXNlclByb2Nlc3NJbnN0YW5jZUZpbHRlclJlcHJlc2VudGF0aW9uXG59IGZyb20gJ0BhbGZyZXNjby9qcy1hcGknO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFByb2Nlc3NGaWx0ZXJTZXJ2aWNlIHtcbiAgICBwcml2YXRlIF91c2VyRmlsdGVyc0FwaTogVXNlckZpbHRlcnNBcGk7XG4gICAgZ2V0IHVzZXJGaWx0ZXJzQXBpKCk6IFVzZXJGaWx0ZXJzQXBpIHtcbiAgICAgICAgdGhpcy5fdXNlckZpbHRlcnNBcGkgPSB0aGlzLl91c2VyRmlsdGVyc0FwaSA/PyBuZXcgVXNlckZpbHRlcnNBcGkodGhpcy5hbGZyZXNjb0FwaVNlcnZpY2UuZ2V0SW5zdGFuY2UoKSk7XG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyRmlsdGVyc0FwaTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFsZnJlc2NvQXBpU2VydmljZTogQWxmcmVzY29BcGlTZXJ2aWNlKSB7fVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbGwgZmlsdGVycyBkZWZpbmVkIGZvciBhIFByb2Nlc3MgQXBwLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFwcElkIElEIG9mIHRoZSB0YXJnZXQgYXBwXG4gICAgICogQHJldHVybnMgQXJyYXkgb2YgZmlsdGVyIGRldGFpbHNcbiAgICAgKi9cbiAgICBnZXRQcm9jZXNzRmlsdGVycyhhcHBJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxVc2VyUHJvY2Vzc0luc3RhbmNlRmlsdGVyUmVwcmVzZW50YXRpb25bXT4ge1xuICAgICAgICByZXR1cm4gZnJvbSh0aGlzLmNhbGxBcGlQcm9jZXNzRmlsdGVycyhhcHBJZCkpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVycyA9IFtdO1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlLmRhdGEuZm9yRWFjaCgoZmlsdGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0ZpbHRlckFscmVhZHlFeGlzdGluZyhmaWx0ZXJzLCBmaWx0ZXIubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlcnM7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgcHJvY2VzcyBmaWx0ZXIgYnkgSUQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmlsdGVySWQgSUQgb2YgdGhlIGZpbHRlclxuICAgICAqIEBwYXJhbSBhcHBJZCBJRCBvZiB0aGUgdGFyZ2V0IGFwcFxuICAgICAqIEByZXR1cm5zIERldGFpbHMgb2YgdGhlIGZpbHRlclxuICAgICAqL1xuICAgIGdldFByb2Nlc3NGaWx0ZXJCeUlkKGZpbHRlcklkOiBudW1iZXIsIGFwcElkPzogbnVtYmVyKTogT2JzZXJ2YWJsZTxVc2VyUHJvY2Vzc0luc3RhbmNlRmlsdGVyUmVwcmVzZW50YXRpb24+IHtcbiAgICAgICAgcmV0dXJuIGZyb20odGhpcy5jYWxsQXBpUHJvY2Vzc0ZpbHRlcnMoYXBwSWQpKS5waXBlKG1hcCgocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGEuZmluZCgoZmlsdGVyKSA9PiBmaWx0ZXIuaWQgPT09IGZpbHRlcklkKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgcHJvY2VzcyBmaWx0ZXIgYnkgbmFtZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmaWx0ZXJOYW1lIE5hbWUgb2YgdGhlIGZpbHRlclxuICAgICAqIEBwYXJhbSBhcHBJZCBJRCBvZiB0aGUgdGFyZ2V0IGFwcFxuICAgICAqIEByZXR1cm5zIERldGFpbHMgb2YgdGhlIGZpbHRlclxuICAgICAqL1xuICAgIGdldFByb2Nlc3NGaWx0ZXJCeU5hbWUoZmlsdGVyTmFtZTogc3RyaW5nLCBhcHBJZD86IG51bWJlcik6IE9ic2VydmFibGU8VXNlclByb2Nlc3NJbnN0YW5jZUZpbHRlclJlcHJlc2VudGF0aW9uPiB7XG4gICAgICAgIHJldHVybiBmcm9tKHRoaXMuY2FsbEFwaVByb2Nlc3NGaWx0ZXJzKGFwcElkKSkucGlwZShtYXAoKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhLmZpbmQoKGZpbHRlcikgPT4gZmlsdGVyLm5hbWUgPT09IGZpbHRlck5hbWUpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbmQgcmV0dXJucyB0aGUgZGVmYXVsdCBmaWx0ZXJzIGZvciBhbiBhcHAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYXBwSWQgSUQgb2YgdGhlIHRhcmdldCBhcHBcbiAgICAgKiBAcmV0dXJucyBEZWZhdWx0IGZpbHRlcnMganVzdCBjcmVhdGVkXG4gICAgICovXG4gICAgY3JlYXRlRGVmYXVsdEZpbHRlcnMoYXBwSWQ6IG51bWJlcik6IE9ic2VydmFibGU8VXNlclByb2Nlc3NJbnN0YW5jZUZpbHRlclJlcHJlc2VudGF0aW9uW10+IHtcbiAgICAgICAgY29uc3QgcnVubmluZ0ZpbHRlciA9IHRoaXMuZ2V0UnVubmluZ0ZpbHRlckluc3RhbmNlKGFwcElkLCAwKTtcbiAgICAgICAgY29uc3QgcnVubmluZ09ic2VydmFibGUgPSB0aGlzLmFkZFByb2Nlc3NGaWx0ZXIocnVubmluZ0ZpbHRlcik7XG5cbiAgICAgICAgY29uc3QgY29tcGxldGVkRmlsdGVyID0gdGhpcy5nZXRDb21wbGV0ZWRGaWx0ZXJJbnN0YW5jZShhcHBJZCwgMSk7XG4gICAgICAgIGNvbnN0IGNvbXBsZXRlZE9ic2VydmFibGUgPSB0aGlzLmFkZFByb2Nlc3NGaWx0ZXIoY29tcGxldGVkRmlsdGVyKTtcblxuICAgICAgICBjb25zdCBhbGxGaWx0ZXIgPSB0aGlzLmdldEFsbEZpbHRlckluc3RhbmNlKGFwcElkLCAyKTtcbiAgICAgICAgY29uc3QgYWxsT2JzZXJ2YWJsZSA9IHRoaXMuYWRkUHJvY2Vzc0ZpbHRlcihhbGxGaWx0ZXIpO1xuXG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgICAgIGZvcmtKb2luKFtydW5uaW5nT2JzZXJ2YWJsZSwgY29tcGxldGVkT2JzZXJ2YWJsZSwgYWxsT2JzZXJ2YWJsZV0pLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyczogVXNlclByb2Nlc3NJbnN0YW5jZUZpbHRlclJlcHJlc2VudGF0aW9uW10gPSBbXTtcbiAgICAgICAgICAgICAgICByZXMuZm9yRWFjaCgoZmlsdGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0ZpbHRlckFscmVhZHlFeGlzdGluZyhmaWx0ZXJzLCBmaWx0ZXIubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIubmFtZSA9PT0gcnVubmluZ0ZpbHRlci5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHsgLi4uZmlsdGVyLCBmaWx0ZXI6IHJ1bm5pbmdGaWx0ZXIuZmlsdGVyLCBhcHBJZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyLm5hbWUgPT09IGNvbXBsZXRlZEZpbHRlci5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHsgLi4uZmlsdGVyLCBmaWx0ZXI6IGNvbXBsZXRlZEZpbHRlci5maWx0ZXIsIGFwcElkIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXIubmFtZSA9PT0gYWxsRmlsdGVyLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goeyAuLi5maWx0ZXIsIGZpbHRlcjogYWxsRmlsdGVyLmZpbHRlciwgYXBwSWQgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KGZpbHRlcnMpO1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGEgZmlsdGVyIHdpdGggdGhlIGdpdmVuIG5hbWUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGxpc3Qgb2YgZmlsdGVycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmaWx0ZXJzIC0gQW4gYXJyYXkgb2Ygb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIGV4aXN0aW5nIGZpbHRlcnMuXG4gICAgICogQHBhcmFtIGZpbHRlck5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZmlsdGVyIHRvIGNoZWNrIGZvciBleGlzdGVuY2UuXG4gICAgICogQHJldHVybnMgLSBUcnVlIGlmIGEgZmlsdGVyIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGFscmVhZHkgZXhpc3RzLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgaXNGaWx0ZXJBbHJlYWR5RXhpc3RpbmcoZmlsdGVyczogUGFydGlhbDx7IG5hbWU6IHN0cmluZyB9PltdLCBmaWx0ZXJOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlcnMuc29tZSgoZXhpc3RpbmdGaWx0ZXIpID0+IGV4aXN0aW5nRmlsdGVyLm5hbWUgPT09IGZpbHRlck5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSBmaWx0ZXIgdGhhdCBtYXRjaGVzIFwicnVubmluZ1wiIHByb2Nlc3MgaW5zdGFuY2VzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFwcElkIElEIG9mIHRoZSB0YXJnZXQgYXBwXG4gICAgICogQHBhcmFtIGluZGV4IG9mIHRoZSBmaWx0ZXIgKG9wdGlvbmFsKVxuICAgICAqIEByZXR1cm5zIEZpbHRlciBqdXN0IGNyZWF0ZWRcbiAgICAgKi9cbiAgICBnZXRSdW5uaW5nRmlsdGVySW5zdGFuY2UoYXBwSWQ6IG51bWJlciwgaW5kZXg/OiBudW1iZXIpOiBVc2VyUHJvY2Vzc0luc3RhbmNlRmlsdGVyUmVwcmVzZW50YXRpb24ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogJ1J1bm5pbmcnLFxuICAgICAgICAgICAgYXBwSWQsXG4gICAgICAgICAgICByZWNlbnQ6IHRydWUsXG4gICAgICAgICAgICBpY29uOiAnZ2x5cGhpY29uLXJhbmRvbScsXG4gICAgICAgICAgICBmaWx0ZXI6IHsgc29ydDogJ2NyZWF0ZWQtZGVzYycsIG5hbWU6ICcnLCBzdGF0ZTogJ3J1bm5pbmcnIH0sXG4gICAgICAgICAgICBpbmRleFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBmaWx0ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmlsdGVyIFRoZSBmaWx0ZXIgdG8gYWRkXG4gICAgICogQHJldHVybnMgVGhlIGZpbHRlciBqdXN0IGFkZGVkXG4gICAgICovXG4gICAgYWRkUHJvY2Vzc0ZpbHRlcihmaWx0ZXI6IFVzZXJQcm9jZXNzSW5zdGFuY2VGaWx0ZXJSZXByZXNlbnRhdGlvbik6IE9ic2VydmFibGU8VXNlclByb2Nlc3NJbnN0YW5jZUZpbHRlclJlcHJlc2VudGF0aW9uPiB7XG4gICAgICAgIHJldHVybiBmcm9tKHRoaXMudXNlckZpbHRlcnNBcGkuY3JlYXRlVXNlclByb2Nlc3NJbnN0YW5jZUZpbHRlcihmaWx0ZXIpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxscyBgZ2V0VXNlclByb2Nlc3NJbnN0YW5jZUZpbHRlcnNgIGZyb20gdGhlIEFsZnJlc2NvIEpTIEFQSS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhcHBJZCBJRCBvZiB0aGUgdGFyZ2V0IGFwcFxuICAgICAqIEByZXR1cm5zIExpc3Qgb2YgZmlsdGVyIGRldGFpbHNcbiAgICAgKi9cbiAgICBjYWxsQXBpUHJvY2Vzc0ZpbHRlcnMoYXBwSWQ/OiBudW1iZXIpOiBQcm9taXNlPFJlc3VsdExpc3REYXRhUmVwcmVzZW50YXRpb25Vc2VyUHJvY2Vzc0luc3RhbmNlRmlsdGVyUmVwcmVzZW50YXRpb24+IHtcbiAgICAgICAgaWYgKGFwcElkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51c2VyRmlsdGVyc0FwaS5nZXRVc2VyUHJvY2Vzc0luc3RhbmNlRmlsdGVycyh7IGFwcElkIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudXNlckZpbHRlcnNBcGkuZ2V0VXNlclByb2Nlc3NJbnN0YW5jZUZpbHRlcnMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldENvbXBsZXRlZEZpbHRlckluc3RhbmNlKGFwcElkOiBudW1iZXIsIGluZGV4PzogbnVtYmVyKTogVXNlclByb2Nlc3NJbnN0YW5jZUZpbHRlclJlcHJlc2VudGF0aW9uIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6ICdDb21wbGV0ZWQnLFxuICAgICAgICAgICAgYXBwSWQsXG4gICAgICAgICAgICByZWNlbnQ6IGZhbHNlLFxuICAgICAgICAgICAgaWNvbjogJ2dseXBoaWNvbi1vay1zaWduJyxcbiAgICAgICAgICAgIGZpbHRlcjogeyBzb3J0OiAnY3JlYXRlZC1kZXNjJywgbmFtZTogJycsIHN0YXRlOiAnY29tcGxldGVkJyB9LFxuICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXRBbGxGaWx0ZXJJbnN0YW5jZShhcHBJZDogbnVtYmVyLCBpbmRleD86IG51bWJlcik6IFVzZXJQcm9jZXNzSW5zdGFuY2VGaWx0ZXJSZXByZXNlbnRhdGlvbiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiAnQWxsJyxcbiAgICAgICAgICAgIGFwcElkLFxuICAgICAgICAgICAgcmVjZW50OiB0cnVlLFxuICAgICAgICAgICAgaWNvbjogJ2dseXBoaWNvbi10aCcsXG4gICAgICAgICAgICBmaWx0ZXI6IHsgc29ydDogJ2NyZWF0ZWQtZGVzYycsIG5hbWU6ICcnLCBzdGF0ZTogJ2FsbCcgfSxcbiAgICAgICAgICAgIGluZGV4XG4gICAgICAgIH07XG4gICAgfVxufVxuIl19
|
|
182
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy1maWx0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzL3NyYy9saWIvcHJvY2Vzcy1saXN0L3NlcnZpY2VzL3Byb2Nlc3MtZmlsdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFFSCxjQUFjLEVBRWpCLE1BQU0sa0JBQWtCLENBQUM7OztBQUsxQixNQUFNLE9BQU8sb0JBQW9CO0lBRTdCLElBQUksY0FBYztRQUNkLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN6RyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDaEMsQ0FBQztJQUVELFlBQW9CLGtCQUFzQztRQUF0Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO0lBQUcsQ0FBQztJQUU5RDs7Ozs7T0FLRztJQUNILGlCQUFpQixDQUFDLEtBQWE7UUFDM0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMvQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNiLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNuQixRQUFRLENBQUMsSUFBSSxDQUFDLE9B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SSxLQUFLLEVBQUUsQ0FBQztZQUNSLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyw2QkFBNkIsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDeEUsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztRQUMvRCxDQUFDO0lBQ0wsQ0FBQztJQUVELDBCQUEwQixDQUFDLEtBQWEsRUFBRSxLQUFjO1FBQ3BELE9BQU87WUFDSCxJQUFJLEVBQUUsV0FBVztZQUNqQixLQUFLO1lBQ0wsTUFBTSxFQUFFLEtBQUs7WUFDYixJQUFJLEVBQUUsbUJBQW1CO1lBQ3pCLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFO1lBQzlELEtBQUs7U0FDUixDQUFDO0lBQ04sQ0FBQztJQUVELG9CQUFvQixDQUFDLEtBQWEsRUFBRSxLQUFjO1FBQzlDLE9BQU87WUFDSCxJQUFJLEVBQUUsS0FBSztZQUNYLEtBQUs7WUFDTCxNQUFNLEVBQUUsSUFBSTtZQUNaLElBQUksRUFBRSxjQUFjO1lBQ3BCLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQ3hELEtBQUs7U0FDUixDQUFDO0lBQ04sQ0FBQzs4R0FoS1Esb0JBQW9CO2tIQUFwQixvQkFBb0IsY0FGakIsTUFBTTs7MkZBRVQsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgQWxmcmVzY29BcGlTZXJ2aWNlIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb250ZW50LXNlcnZpY2VzJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGZyb20sIGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICAgIFJlc3VsdExpc3REYXRhUmVwcmVzZW50YXRpb25Vc2VyUHJvY2Vzc0luc3RhbmNlRmlsdGVyUmVwcmVzZW50YXRpb24sXG4gICAgVXNlckZpbHRlcnNBcGksXG4gICAgVXNlclByb2Nlc3NJbnN0YW5jZUZpbHRlclJlcHJlc2VudGF0aW9uXG59IGZyb20gJ0BhbGZyZXNjby9qcy1hcGknO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFByb2Nlc3NGaWx0ZXJTZXJ2aWNlIHtcbiAgICBwcml2YXRlIF91c2VyRmlsdGVyc0FwaTogVXNlckZpbHRlcnNBcGk7XG4gICAgZ2V0IHVzZXJGaWx0ZXJzQXBpKCk6IFVzZXJGaWx0ZXJzQXBpIHtcbiAgICAgICAgdGhpcy5fdXNlckZpbHRlcnNBcGkgPSB0aGlzLl91c2VyRmlsdGVyc0FwaSA/PyBuZXcgVXNlckZpbHRlcnNBcGkodGhpcy5hbGZyZXNjb0FwaVNlcnZpY2UuZ2V0SW5zdGFuY2UoKSk7XG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyRmlsdGVyc0FwaTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFsZnJlc2NvQXBpU2VydmljZTogQWxmcmVzY29BcGlTZXJ2aWNlKSB7fVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbGwgZmlsdGVycyBkZWZpbmVkIGZvciBhIFByb2Nlc3MgQXBwLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFwcElkIElEIG9mIHRoZSB0YXJnZXQgYXBwXG4gICAgICogQHJldHVybnMgQXJyYXkgb2YgZmlsdGVyIGRldGFpbHNcbiAgICAgKi9cbiAgICBnZXRQcm9jZXNzRmlsdGVycyhhcHBJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxVc2VyUHJvY2Vzc0luc3RhbmNlRmlsdGVyUmVwcmVzZW50YXRpb25bXT4ge1xuICAgICAgICByZXR1cm4gZnJvbSh0aGlzLmNhbGxBcGlQcm9jZXNzRmlsdGVycyhhcHBJZCkpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVycyA9IFtdO1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlLmRhdGEuZm9yRWFjaCgoZmlsdGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0ZpbHRlckFscmVhZHlFeGlzdGluZyhmaWx0ZXJzLCBmaWx0ZXIubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlcnM7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgcHJvY2VzcyBmaWx0ZXIgYnkgSUQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmlsdGVySWQgSUQgb2YgdGhlIGZpbHRlclxuICAgICAqIEBwYXJhbSBhcHBJZCBJRCBvZiB0aGUgdGFyZ2V0IGFwcFxuICAgICAqIEByZXR1cm5zIERldGFpbHMgb2YgdGhlIGZpbHRlclxuICAgICAqL1xuICAgIGdldFByb2Nlc3NGaWx0ZXJCeUlkKGZpbHRlcklkOiBudW1iZXIsIGFwcElkPzogbnVtYmVyKTogT2JzZXJ2YWJsZTxVc2VyUHJvY2Vzc0luc3RhbmNlRmlsdGVyUmVwcmVzZW50YXRpb24+IHtcbiAgICAgICAgcmV0dXJuIGZyb20odGhpcy5jYWxsQXBpUHJvY2Vzc0ZpbHRlcnMoYXBwSWQpKS5waXBlKG1hcCgocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGEuZmluZCgoZmlsdGVyKSA9PiBmaWx0ZXIuaWQgPT09IGZpbHRlcklkKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgcHJvY2VzcyBmaWx0ZXIgYnkgbmFtZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmaWx0ZXJOYW1lIE5hbWUgb2YgdGhlIGZpbHRlclxuICAgICAqIEBwYXJhbSBhcHBJZCBJRCBvZiB0aGUgdGFyZ2V0IGFwcFxuICAgICAqIEByZXR1cm5zIERldGFpbHMgb2YgdGhlIGZpbHRlclxuICAgICAqL1xuICAgIGdldFByb2Nlc3NGaWx0ZXJCeU5hbWUoZmlsdGVyTmFtZTogc3RyaW5nLCBhcHBJZD86IG51bWJlcik6IE9ic2VydmFibGU8VXNlclByb2Nlc3NJbnN0YW5jZUZpbHRlclJlcHJlc2VudGF0aW9uPiB7XG4gICAgICAgIHJldHVybiBmcm9tKHRoaXMuY2FsbEFwaVByb2Nlc3NGaWx0ZXJzKGFwcElkKSkucGlwZShtYXAoKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhLmZpbmQoKGZpbHRlcikgPT4gZmlsdGVyLm5hbWUgPT09IGZpbHRlck5hbWUpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbmQgcmV0dXJucyB0aGUgZGVmYXVsdCBmaWx0ZXJzIGZvciBhbiBhcHAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYXBwSWQgSUQgb2YgdGhlIHRhcmdldCBhcHBcbiAgICAgKiBAcmV0dXJucyBEZWZhdWx0IGZpbHRlcnMganVzdCBjcmVhdGVkXG4gICAgICovXG4gICAgY3JlYXRlRGVmYXVsdEZpbHRlcnMoYXBwSWQ6IG51bWJlcik6IE9ic2VydmFibGU8VXNlclByb2Nlc3NJbnN0YW5jZUZpbHRlclJlcHJlc2VudGF0aW9uW10+IHtcbiAgICAgICAgY29uc3QgcnVubmluZ0ZpbHRlciA9IHRoaXMuZ2V0UnVubmluZ0ZpbHRlckluc3RhbmNlKGFwcElkLCAwKTtcbiAgICAgICAgY29uc3QgcnVubmluZ09ic2VydmFibGUgPSB0aGlzLmFkZFByb2Nlc3NGaWx0ZXIocnVubmluZ0ZpbHRlcik7XG5cbiAgICAgICAgY29uc3QgY29tcGxldGVkRmlsdGVyID0gdGhpcy5nZXRDb21wbGV0ZWRGaWx0ZXJJbnN0YW5jZShhcHBJZCwgMSk7XG4gICAgICAgIGNvbnN0IGNvbXBsZXRlZE9ic2VydmFibGUgPSB0aGlzLmFkZFByb2Nlc3NGaWx0ZXIoY29tcGxldGVkRmlsdGVyKTtcblxuICAgICAgICBjb25zdCBhbGxGaWx0ZXIgPSB0aGlzLmdldEFsbEZpbHRlckluc3RhbmNlKGFwcElkLCAyKTtcbiAgICAgICAgY29uc3QgYWxsT2JzZXJ2YWJsZSA9IHRoaXMuYWRkUHJvY2Vzc0ZpbHRlcihhbGxGaWx0ZXIpO1xuXG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgICAgIGZvcmtKb2luKFtydW5uaW5nT2JzZXJ2YWJsZSwgY29tcGxldGVkT2JzZXJ2YWJsZSwgYWxsT2JzZXJ2YWJsZV0pLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyczogVXNlclByb2Nlc3NJbnN0YW5jZUZpbHRlclJlcHJlc2VudGF0aW9uW10gPSBbXTtcbiAgICAgICAgICAgICAgICByZXMuZm9yRWFjaCgoZmlsdGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0ZpbHRlckFscmVhZHlFeGlzdGluZyhmaWx0ZXJzLCBmaWx0ZXIubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIubmFtZSA9PT0gcnVubmluZ0ZpbHRlci5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHsgLi4uZmlsdGVyLCBmaWx0ZXI6IHJ1bm5pbmdGaWx0ZXIuZmlsdGVyLCBhcHBJZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyLm5hbWUgPT09IGNvbXBsZXRlZEZpbHRlci5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHsgLi4uZmlsdGVyLCBmaWx0ZXI6IGNvbXBsZXRlZEZpbHRlci5maWx0ZXIsIGFwcElkIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXIubmFtZSA9PT0gYWxsRmlsdGVyLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goeyAuLi5maWx0ZXIsIGZpbHRlcjogYWxsRmlsdGVyLmZpbHRlciwgYXBwSWQgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KGZpbHRlcnMpO1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGEgZmlsdGVyIHdpdGggdGhlIGdpdmVuIG5hbWUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGxpc3Qgb2YgZmlsdGVycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmaWx0ZXJzIC0gQW4gYXJyYXkgb2Ygb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIGV4aXN0aW5nIGZpbHRlcnMuXG4gICAgICogQHBhcmFtIGZpbHRlck5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZmlsdGVyIHRvIGNoZWNrIGZvciBleGlzdGVuY2UuXG4gICAgICogQHJldHVybnMgLSBUcnVlIGlmIGEgZmlsdGVyIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGFscmVhZHkgZXhpc3RzLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgaXNGaWx0ZXJBbHJlYWR5RXhpc3RpbmcoZmlsdGVyczogUGFydGlhbDx7IG5hbWU6IHN0cmluZyB9PltdLCBmaWx0ZXJOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlcnMuc29tZSgoZXhpc3RpbmdGaWx0ZXIpID0+IGV4aXN0aW5nRmlsdGVyLm5hbWUgPT09IGZpbHRlck5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSBmaWx0ZXIgdGhhdCBtYXRjaGVzIFwicnVubmluZ1wiIHByb2Nlc3MgaW5zdGFuY2VzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFwcElkIElEIG9mIHRoZSB0YXJnZXQgYXBwXG4gICAgICogQHBhcmFtIGluZGV4IG9mIHRoZSBmaWx0ZXIgKG9wdGlvbmFsKVxuICAgICAqIEByZXR1cm5zIEZpbHRlciBqdXN0IGNyZWF0ZWRcbiAgICAgKi9cbiAgICBnZXRSdW5uaW5nRmlsdGVySW5zdGFuY2UoYXBwSWQ6IG51bWJlciwgaW5kZXg/OiBudW1iZXIpOiBVc2VyUHJvY2Vzc0luc3RhbmNlRmlsdGVyUmVwcmVzZW50YXRpb24ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogJ1J1bm5pbmcnLFxuICAgICAgICAgICAgYXBwSWQsXG4gICAgICAgICAgICByZWNlbnQ6IHRydWUsXG4gICAgICAgICAgICBpY29uOiAnZ2x5cGhpY29uLXJhbmRvbScsXG4gICAgICAgICAgICBmaWx0ZXI6IHsgc29ydDogJ2NyZWF0ZWQtZGVzYycsIG5hbWU6ICcnLCBzdGF0ZTogJ3J1bm5pbmcnIH0sXG4gICAgICAgICAgICBpbmRleFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBmaWx0ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmlsdGVyIFRoZSBmaWx0ZXIgdG8gYWRkXG4gICAgICogQHJldHVybnMgVGhlIGZpbHRlciBqdXN0IGFkZGVkXG4gICAgICovXG4gICAgYWRkUHJvY2Vzc0ZpbHRlcihmaWx0ZXI6IFVzZXJQcm9jZXNzSW5zdGFuY2VGaWx0ZXJSZXByZXNlbnRhdGlvbik6IE9ic2VydmFibGU8VXNlclByb2Nlc3NJbnN0YW5jZUZpbHRlclJlcHJlc2VudGF0aW9uPiB7XG4gICAgICAgIHJldHVybiBmcm9tKHRoaXMudXNlckZpbHRlcnNBcGkuY3JlYXRlVXNlclByb2Nlc3NJbnN0YW5jZUZpbHRlcihmaWx0ZXIpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxscyBgZ2V0VXNlclByb2Nlc3NJbnN0YW5jZUZpbHRlcnNgIGZyb20gdGhlIEFsZnJlc2NvIEpTIEFQSS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhcHBJZCBJRCBvZiB0aGUgdGFyZ2V0IGFwcFxuICAgICAqIEByZXR1cm5zIExpc3Qgb2YgZmlsdGVyIGRldGFpbHNcbiAgICAgKi9cbiAgICBjYWxsQXBpUHJvY2Vzc0ZpbHRlcnMoYXBwSWQ/OiBudW1iZXIpOiBQcm9taXNlPFJlc3VsdExpc3REYXRhUmVwcmVzZW50YXRpb25Vc2VyUHJvY2Vzc0luc3RhbmNlRmlsdGVyUmVwcmVzZW50YXRpb24+IHtcbiAgICAgICAgaWYgKGFwcElkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51c2VyRmlsdGVyc0FwaS5nZXRVc2VyUHJvY2Vzc0luc3RhbmNlRmlsdGVycyh7IGFwcElkIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudXNlckZpbHRlcnNBcGkuZ2V0VXNlclByb2Nlc3NJbnN0YW5jZUZpbHRlcnMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldENvbXBsZXRlZEZpbHRlckluc3RhbmNlKGFwcElkOiBudW1iZXIsIGluZGV4PzogbnVtYmVyKTogVXNlclByb2Nlc3NJbnN0YW5jZUZpbHRlclJlcHJlc2VudGF0aW9uIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6ICdDb21wbGV0ZWQnLFxuICAgICAgICAgICAgYXBwSWQsXG4gICAgICAgICAgICByZWNlbnQ6IGZhbHNlLFxuICAgICAgICAgICAgaWNvbjogJ2dseXBoaWNvbi1vay1zaWduJyxcbiAgICAgICAgICAgIGZpbHRlcjogeyBzb3J0OiAnY3JlYXRlZC1kZXNjJywgbmFtZTogJycsIHN0YXRlOiAnY29tcGxldGVkJyB9LFxuICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXRBbGxGaWx0ZXJJbnN0YW5jZShhcHBJZDogbnVtYmVyLCBpbmRleD86IG51bWJlcik6IFVzZXJQcm9jZXNzSW5zdGFuY2VGaWx0ZXJSZXByZXNlbnRhdGlvbiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiAnQWxsJyxcbiAgICAgICAgICAgIGFwcElkLFxuICAgICAgICAgICAgcmVjZW50OiB0cnVlLFxuICAgICAgICAgICAgaWNvbjogJ2dseXBoaWNvbi10aCcsXG4gICAgICAgICAgICBmaWx0ZXI6IHsgc29ydDogJ2NyZWF0ZWQtZGVzYycsIG5hbWU6ICcnLCBzdGF0ZTogJ2FsbCcgfSxcbiAgICAgICAgICAgIGluZGV4XG4gICAgICAgIH07XG4gICAgfVxufVxuIl19
|