@alfresco/adf-process-services-cloud 8.1.0-15865093855 → 8.1.0-15928551305

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.
Files changed (38) hide show
  1. package/esm2022/lib/app/components/app-details-cloud/app-details-cloud.component.mjs +4 -4
  2. package/esm2022/lib/app/components/app-list-cloud/app-list-cloud.component.mjs +8 -9
  3. package/esm2022/lib/common/date-range-filter/date-range-filter.component.mjs +9 -10
  4. package/esm2022/lib/form/components/form-cloud.component.mjs +9 -10
  5. package/esm2022/lib/form/components/form-definition-selector-cloud.component.mjs +7 -8
  6. package/esm2022/lib/form/components/spinner/form-spinner.component.mjs +5 -6
  7. package/esm2022/lib/form/components/widgets/attach-file/attach-file-cloud-widget.component.mjs +6 -7
  8. package/esm2022/lib/form/components/widgets/attach-file/file-properties-table/file-properties-table-cloud.component.mjs +9 -10
  9. package/esm2022/lib/form/components/widgets/data-table/data-table.widget.mjs +4 -5
  10. package/esm2022/lib/form/components/widgets/date/date-cloud.widget.mjs +10 -11
  11. package/esm2022/lib/form/components/widgets/display-external-property/display-external-property.widget.mjs +8 -9
  12. package/esm2022/lib/form/components/widgets/dropdown/dropdown-cloud.widget.mjs +5 -6
  13. package/esm2022/lib/form/components/widgets/file-viewer/file-viewer.widget.mjs +4 -5
  14. package/esm2022/lib/form/components/widgets/group/group-cloud.widget.mjs +5 -6
  15. package/esm2022/lib/form/components/widgets/people/people-cloud.widget.mjs +5 -6
  16. package/esm2022/lib/form/components/widgets/properties-viewer/properties-viewer.widget.mjs +4 -5
  17. package/esm2022/lib/form/components/widgets/radio-buttons/radio-buttons-cloud.widget.mjs +5 -6
  18. package/esm2022/lib/form/components/widgets/upload/upload-cloud.widget.mjs +8 -9
  19. package/esm2022/lib/group/components/group-cloud.component.mjs +14 -15
  20. package/esm2022/lib/people/components/people-cloud.component.mjs +14 -15
  21. package/esm2022/lib/process/process-filters/components/edit-process-filter/edit-process-filter-cloud.component.mjs +11 -12
  22. package/esm2022/lib/process/process-filters/components/process-filter-dialog/process-filter-dialog-cloud.component.mjs +10 -11
  23. package/esm2022/lib/process/process-filters/components/process-filters/process-filters-cloud.component.mjs +6 -7
  24. package/esm2022/lib/process/process-list/components/process-list-cloud.component.mjs +4 -5
  25. package/esm2022/lib/process/start-process/components/start-process-cloud.component.mjs +13 -14
  26. package/esm2022/lib/task/task-filters/components/edit-task-filters/edit-service-task-filter/edit-service-task-filter-cloud.component.mjs +15 -16
  27. package/esm2022/lib/task/task-filters/components/edit-task-filters/edit-task-filter/edit-task-filter-cloud.component.mjs +15 -16
  28. package/esm2022/lib/task/task-filters/components/service-task-filters/service-task-filters-cloud.component.mjs +6 -7
  29. package/esm2022/lib/task/task-filters/components/task-assignment-filter/task-assignment-filter.component.mjs +8 -9
  30. package/esm2022/lib/task/task-filters/components/task-filter-dialog/task-filter-dialog-cloud.component.mjs +8 -9
  31. package/esm2022/lib/task/task-filters/components/task-filters/task-filters-cloud.component.mjs +5 -6
  32. package/esm2022/lib/task/task-form/components/user-task-cloud/user-task-cloud.component.mjs +7 -8
  33. package/esm2022/lib/task/task-form/components/user-task-cloud-buttons/user-task-cloud-buttons.component.mjs +5 -6
  34. package/esm2022/lib/task/task-list/components/service-task-list/service-task-list-cloud.component.mjs +5 -6
  35. package/esm2022/lib/task/task-list/components/task-list/task-list-cloud.component.mjs +5 -6
  36. package/fesm2022/adf-process-services-cloud.mjs +113 -114
  37. package/fesm2022/adf-process-services-cloud.mjs.map +1 -1
  38. package/package.json +4 -4
@@ -23,7 +23,7 @@ import { animate, state, style, transition, trigger } from '@angular/animations'
23
23
  import { MatFormFieldModule } from '@angular/material/form-field';
24
24
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
25
25
  import { CommonModule } from '@angular/common';
26
- import { TranslateModule } from '@ngx-translate/core';
26
+ import { TranslatePipe } from '@ngx-translate/core';
27
27
  import { MatIconModule } from '@angular/material/icon';
28
28
  import { MatProgressBarModule } from '@angular/material/progress-bar';
29
29
  import { MatSelectModule } from '@angular/material/select';
@@ -35,16 +35,15 @@ import { MatTooltipModule } from '@angular/material/tooltip';
35
35
  import * as i0 from "@angular/core";
36
36
  import * as i1 from "../services/identity-user.service";
37
37
  import * as i2 from "@angular/common";
38
- import * as i3 from "@ngx-translate/core";
39
- import * as i4 from "@angular/material/icon";
40
- import * as i5 from "@angular/material/form-field";
41
- import * as i6 from "@angular/material/progress-bar";
42
- import * as i7 from "@angular/material/core";
43
- import * as i8 from "@angular/material/autocomplete";
44
- import * as i9 from "@angular/forms";
45
- import * as i10 from "@angular/material/chips";
46
- import * as i11 from "@angular/material/input";
47
- import * as i12 from "@angular/material/tooltip";
38
+ import * as i3 from "@angular/material/icon";
39
+ import * as i4 from "@angular/material/form-field";
40
+ import * as i5 from "@angular/material/progress-bar";
41
+ import * as i6 from "@angular/material/core";
42
+ import * as i7 from "@angular/material/autocomplete";
43
+ import * as i8 from "@angular/forms";
44
+ import * as i9 from "@angular/material/chips";
45
+ import * as i10 from "@angular/material/input";
46
+ import * as i11 from "@angular/material/tooltip";
48
47
  export class PeopleCloudComponent {
49
48
  constructor(identityUserService) {
50
49
  this.identityUserService = identityUserService;
@@ -417,7 +416,7 @@ export class PeopleCloudComponent {
417
416
  return this.searchUserCtrl.errors.minlength.requiredLength;
418
417
  }
419
418
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PeopleCloudComponent, deps: [{ token: i1.IdentityUserService }], target: i0.ɵɵFactoryTarget.Component }); }
420
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PeopleCloudComponent, isStandalone: true, selector: "adf-cloud-people", inputs: { label: "label", appName: "appName", mode: "mode", roles: "roles", validate: "validate", readOnly: "readOnly", required: "required", preSelectUsers: "preSelectUsers", excludedUsers: "excludedUsers", groupsRestriction: "groupsRestriction", userChipsCtrl: "userChipsCtrl", searchUserCtrl: "searchUserCtrl", title: "title", placeholder: "placeholder", hideInputOnSingleSelection: "hideInputOnSingleSelection", formFieldAppearance: "formFieldAppearance", formFieldSubscriptSizing: "formFieldSubscriptSizing", showErrors: "showErrors", showFullNameOnHover: "showFullNameOnHover" }, outputs: { selectUser: "selectUser", removeUser: "removeUser", changedUsers: "changedUsers", warning: "warning" }, providers: [FullNamePipe], viewQueries: [{ propertyName: "userInput", first: true, predicate: ["userInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<form>\n <mat-form-field\n [subscriptSizing]=\"formFieldSubscriptSizing\"\n [floatLabel]=\"'auto'\"\n class=\"adf-people-cloud\"\n [class.adf-invalid]=\"hasError() && isDirty()\"\n >\n <mat-label *ngIf=\"!title\">\n <span>{{label}}</span>\n <span class=\"adf-asterisk\" [style.visibility]=\"required ? 'visible' : 'hidden'\">*</span>\n </mat-label>\n <mat-label *ngIf=\"title\">{{ title | translate }}</mat-label>\n\n <mat-chip-grid #userMultipleChipList data-automation-id=\"adf-cloud-people-chip-list\">\n <mat-chip-row\n *ngFor=\"let user of selectedUsers\"\n [removable]=\"!user.readonly\"\n [attr.data-automation-id]=\"'adf-people-cloud-chip-' + user.username\"\n (removed)=\"onRemove(user)\"\n [disabled]=\"isReadonly() || isValidationLoading()\"\n title=\"{{ (user.readonly ? 'ADF_CLOUD_GROUPS.MANDATORY' : '') | translate }}\"\n [matTooltip]=\"showFullNameOnHover ? (user | fullName : true) : user.email\"\n >\n {{ user | fullName }}\n <mat-icon\n matChipRemove\n *ngIf=\"!(user.readonly || readOnly)\"\n [attr.data-automation-id]=\"'adf-people-cloud-chip-remove-icon-' + user.username\"\n >\n cancel\n </mat-icon>\n </mat-chip-row>\n <input\n matInput\n [disabled]=\"isReadonly()\"\n [formControl]=\"searchUserCtrl\"\n [matAutocomplete]=\"auto\"\n [matChipInputFor]=\"userMultipleChipList\"\n [required]=\"required\"\n [placeholder]=\"placeholder\"\n (focus)=\"setFocus(true)\"\n (blur)=\"setFocus(false); markAsTouched()\"\n class=\"adf-cloud-input\"\n data-automation-id=\"adf-people-cloud-search-input\"\n #userInput\n />\n </mat-chip-grid>\n\n <mat-autocomplete\n autoActiveFirstOption\n class=\"adf-people-cloud-list\"\n #auto=\"matAutocomplete\"\n (optionSelected)=\"onSelect($event.option.value)\"\n [displayWith]=\"getDisplayName\"\n >\n <ng-container *ngIf=\"(searchUsers$ | async)?.length; else noResults\">\n <mat-option *ngFor=\"let user of searchUsers$ | async; let i = index\" [value]=\"user\" class=\"adf-people-cloud-option-active\">\n <div class=\"adf-people-cloud-row\" id=\"adf-people-cloud-user-{{ user.username }}\" data-automation-id=\"adf-people-cloud-row\">\n <div [outerHTML]=\"user | usernameInitials : 'adf-people-cloud-pic'\"></div>\n <span class=\"adf-people-label-name\"> {{ user | fullName : true }}</span>\n </div>\n </mat-option>\n </ng-container>\n <ng-template #noResults>\n <mat-option\n *ngIf=\"searchUserCtrl.hasError('searchTypingError') && !searchLoading\"\n disabled\n class=\"adf-people-cloud-option-not-active\"\n data-automation-id=\"adf-people-cloud-no-results\"\n >\n <span> {{ 'ADF_CLOUD_USERS.ERROR.NOT_FOUND' | translate : { userName: searchedValue } }}</span>\n </mat-option>\n </ng-template>\n </mat-autocomplete>\n </mat-form-field>\n\n <mat-progress-bar *ngIf=\"validationLoading\" mode=\"indeterminate\" />\n\n <div class=\"adf-error-container adf-error-messages-container\" *ngIf=\"showErrors\">\n <mat-error *ngIf=\"hasPreselectError() && !isValidationLoading()\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_USERS.ERROR.NOT_FOUND' | translate : { userName: validateUsersMessage } }}</div>\n </mat-error>\n <mat-error *ngIf=\"searchUserCtrl.hasError('pattern')\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.INVALID_PATTERN' | translate : { pattern: getValidationPattern() } }}</div>\n </mat-error>\n <mat-error *ngIf=\"searchUserCtrl.hasError('maxlength')\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">\n {{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.INVALID_MAX_LENGTH' | translate : { requiredLength: getValidationMaxLength() } }}\n </div>\n </mat-error>\n <mat-error *ngIf=\"searchUserCtrl.hasError('minlength')\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">\n {{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.INVALID_MIN_LENGTH' | translate : { requiredLength: getValidationMinLength() } }}\n </div>\n </mat-error>\n <mat-error\n *ngIf=\"(searchUserCtrl.hasError('required') || userChipsCtrl.hasError('required')) && isDirty()\"\n [@transitionMessages]=\"subscriptAnimationState\"\n class=\"adf-error\"\n >\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.REQUIRED' | translate }}</div>\n </mat-error>\n <mat-error\n *ngIf=\"searchUserCtrl.hasError('searchTypingError') && !this.isFocused\"\n [@transitionMessages]=\"subscriptAnimationState\"\n data-automation-id=\"invalid-users-typing-error\"\n class=\"adf-error\"\n >\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_USERS.ERROR.NOT_FOUND' | translate : { userName: searchedValue } }}</div>\n </mat-error>\n </div>\n</form>\n", styles: [".adf-people-cloud{width:100%}.adf-people-cloud-option-not-active:not(.adf-people-cloud:active){background:inherit;color:var(--adf-theme-foreground-secondary-text-color)}.adf-people-cloud-title{color:var(--adf-theme-foreground-secondary-text-color)}.adf-people-cloud-title--focus{color:var(--theme-primary-color)}.adf-people-cloud-list{margin:5px 0;padding:10px 0}.adf-people-cloud-option-active:not(.adf:disabled){color:var(--adf-theme-foreground-text-color)}.adf-people-cloud-option-not-active:not(.adf:active){color:var(--adf-theme-foreground-secondary-text-color)}.adf-people-cloud-row{display:flex;align-items:center;column-gap:10px}.adf-people-cloud-pic{background:var(--theme-primary-color);display:flex;justify-content:center;align-items:center;width:40px;height:40px;border-radius:100px;text-transform:uppercase}.adf-start-task-cloud-error{margin-top:-10px;position:absolute;height:20px}.adf-start-task-cloud-error-message{padding-right:8px;height:16px;line-height:1.33;width:auto}.adf-error,.adf-error-text,.adf-error-icon{color:var(--theme-warn-color)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i6.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "pipe", type: InitialUsernamePipe, name: "usernameInitials" }, { kind: "pipe", type: FullNamePipe, name: "fullName" }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i8.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: i8.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i9.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: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i9.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i9.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i10.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i10.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i10.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i10.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i11.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: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i12.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], animations: [
419
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PeopleCloudComponent, isStandalone: true, selector: "adf-cloud-people", inputs: { label: "label", appName: "appName", mode: "mode", roles: "roles", validate: "validate", readOnly: "readOnly", required: "required", preSelectUsers: "preSelectUsers", excludedUsers: "excludedUsers", groupsRestriction: "groupsRestriction", userChipsCtrl: "userChipsCtrl", searchUserCtrl: "searchUserCtrl", title: "title", placeholder: "placeholder", hideInputOnSingleSelection: "hideInputOnSingleSelection", formFieldAppearance: "formFieldAppearance", formFieldSubscriptSizing: "formFieldSubscriptSizing", showErrors: "showErrors", showFullNameOnHover: "showFullNameOnHover" }, outputs: { selectUser: "selectUser", removeUser: "removeUser", changedUsers: "changedUsers", warning: "warning" }, providers: [FullNamePipe], viewQueries: [{ propertyName: "userInput", first: true, predicate: ["userInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<form>\n <mat-form-field\n [subscriptSizing]=\"formFieldSubscriptSizing\"\n [floatLabel]=\"'auto'\"\n class=\"adf-people-cloud adf-form-field-input\"\n [class.adf-invalid]=\"hasError() && isDirty()\"\n >\n <mat-label *ngIf=\"!title\">\n <span>{{label}}</span>\n </mat-label>\n <mat-label *ngIf=\"title\">{{ title | translate }}</mat-label>\n\n <mat-chip-grid [required]=\"required\" #userMultipleChipList data-automation-id=\"adf-cloud-people-chip-list\">\n <mat-chip-row\n *ngFor=\"let user of selectedUsers\"\n [removable]=\"!user.readonly\"\n [attr.data-automation-id]=\"'adf-people-cloud-chip-' + user.username\"\n (removed)=\"onRemove(user)\"\n [disabled]=\"isReadonly() || isValidationLoading()\"\n title=\"{{ (user.readonly ? 'ADF_CLOUD_GROUPS.MANDATORY' : '') | translate }}\"\n [matTooltip]=\"showFullNameOnHover ? (user | fullName : true) : user.email\"\n >\n {{ user | fullName }}\n <mat-icon\n matChipRemove\n *ngIf=\"!(user.readonly || readOnly)\"\n [attr.data-automation-id]=\"'adf-people-cloud-chip-remove-icon-' + user.username\"\n >\n cancel\n </mat-icon>\n </mat-chip-row>\n <input\n matInput\n [disabled]=\"isReadonly()\"\n [formControl]=\"searchUserCtrl\"\n [matAutocomplete]=\"auto\"\n [matChipInputFor]=\"userMultipleChipList\"\n [required]=\"required\"\n [placeholder]=\"placeholder\"\n [disabled]=\"isReadonly() || isValidationLoading()\"\n (focus)=\"setFocus(true)\"\n (blur)=\"setFocus(false); markAsTouched()\"\n class=\"adf-cloud-input\"\n data-automation-id=\"adf-people-cloud-search-input\"\n #userInput\n />\n </mat-chip-grid>\n\n <mat-autocomplete\n autoActiveFirstOption\n class=\"adf-people-cloud-list\"\n #auto=\"matAutocomplete\"\n (optionSelected)=\"onSelect($event.option.value)\"\n [displayWith]=\"getDisplayName\"\n >\n <ng-container *ngIf=\"(searchUsers$ | async)?.length; else noResults\">\n <mat-option *ngFor=\"let user of searchUsers$ | async; let i = index\" [value]=\"user\" class=\"adf-people-cloud-option-active\">\n <div class=\"adf-people-cloud-row\" id=\"adf-people-cloud-user-{{ user.username }}\" data-automation-id=\"adf-people-cloud-row\">\n <div [outerHTML]=\"user | usernameInitials : 'adf-people-cloud-pic'\"></div>\n <span class=\"adf-people-label-name\"> {{ user | fullName : true }}</span>\n </div>\n </mat-option>\n </ng-container>\n <ng-template #noResults>\n <mat-option\n *ngIf=\"searchUserCtrl.hasError('searchTypingError') && !searchLoading\"\n disabled\n class=\"adf-people-cloud-option-not-active\"\n data-automation-id=\"adf-people-cloud-no-results\"\n >\n <span> {{ 'ADF_CLOUD_USERS.ERROR.NOT_FOUND' | translate : { userName: searchedValue } }}</span>\n </mat-option>\n </ng-template>\n </mat-autocomplete>\n </mat-form-field>\n\n <mat-progress-bar *ngIf=\"validationLoading\" mode=\"indeterminate\" />\n\n <div class=\"adf-error-container adf-error-messages-container\" *ngIf=\"showErrors\">\n <mat-error *ngIf=\"hasPreselectError() && !isValidationLoading()\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_USERS.ERROR.NOT_FOUND' | translate : { userName: validateUsersMessage } }}</div>\n </mat-error>\n <mat-error *ngIf=\"searchUserCtrl.hasError('pattern')\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.INVALID_PATTERN' | translate : { pattern: getValidationPattern() } }}</div>\n </mat-error>\n <mat-error *ngIf=\"searchUserCtrl.hasError('maxlength')\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">\n {{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.INVALID_MAX_LENGTH' | translate : { requiredLength: getValidationMaxLength() } }}\n </div>\n </mat-error>\n <mat-error *ngIf=\"searchUserCtrl.hasError('minlength')\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">\n {{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.INVALID_MIN_LENGTH' | translate : { requiredLength: getValidationMinLength() } }}\n </div>\n </mat-error>\n <mat-error\n *ngIf=\"(searchUserCtrl.hasError('required') || userChipsCtrl.hasError('required')) && isDirty()\"\n [@transitionMessages]=\"subscriptAnimationState\"\n class=\"adf-error\"\n >\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.REQUIRED' | translate }}</div>\n </mat-error>\n <mat-error\n *ngIf=\"searchUserCtrl.hasError('searchTypingError') && !this.isFocused\"\n [@transitionMessages]=\"subscriptAnimationState\"\n data-automation-id=\"invalid-users-typing-error\"\n class=\"adf-error\"\n >\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_USERS.ERROR.NOT_FOUND' | translate : { userName: searchedValue } }}</div>\n </mat-error>\n </div>\n</form>\n", styles: [".adf-people-cloud{width:100%}.adf-people-cloud-option-not-active:not(.adf-people-cloud:active){background:inherit;color:var(--adf-theme-foreground-secondary-text-color)}.adf-people-cloud-title{color:var(--adf-theme-foreground-secondary-text-color)}.adf-people-cloud-title--focus{color:var(--theme-primary-color)}.adf-people-cloud-list{margin:5px 0;padding:10px 0}.adf-people-cloud-option-active:not(.adf:disabled){color:var(--adf-theme-foreground-text-color)}.adf-people-cloud-option-not-active:not(.adf:active){color:var(--adf-theme-foreground-secondary-text-color)}.adf-people-cloud-row{display:flex;align-items:center;column-gap:10px}.adf-people-cloud-pic{background:var(--theme-primary-color);display:flex;justify-content:center;align-items:center;width:40px;height:40px;border-radius:100px;text-transform:uppercase}.adf-start-task-cloud-error{margin-top:-10px;position:absolute;height:20px}.adf-start-task-cloud-error-message{padding-right:8px;height:16px;line-height:1.33;width:auto}.adf-error,.adf-error-text,.adf-error-icon{color:var(--theme-warn-color)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i5.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "pipe", type: InitialUsernamePipe, name: "usernameInitials" }, { kind: "pipe", type: FullNamePipe, name: "fullName" }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i7.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: i7.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i8.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i8.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: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i8.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i9.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i9.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i9.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i9.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i10.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: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i11.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], animations: [
421
420
  trigger('transitionMessages', [
422
421
  state('enter', style({ opacity: 1, transform: 'translateY(0%)' })),
423
422
  transition('void => enter', [style({ opacity: 0, transform: 'translateY(-100%)' }), animate('300ms cubic-bezier(0.55, 0, 0.55, 0.2)')])
@@ -428,7 +427,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
428
427
  type: Component,
429
428
  args: [{ selector: 'adf-cloud-people', standalone: true, imports: [
430
429
  CommonModule,
431
- TranslateModule,
430
+ TranslatePipe,
432
431
  MatIconModule,
433
432
  MatFormFieldModule,
434
433
  MatProgressBarModule,
@@ -445,7 +444,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
445
444
  state('enter', style({ opacity: 1, transform: 'translateY(0%)' })),
446
445
  transition('void => enter', [style({ opacity: 0, transform: 'translateY(-100%)' }), animate('300ms cubic-bezier(0.55, 0, 0.55, 0.2)')])
447
446
  ])
448
- ], encapsulation: ViewEncapsulation.None, template: "<form>\n <mat-form-field\n [subscriptSizing]=\"formFieldSubscriptSizing\"\n [floatLabel]=\"'auto'\"\n class=\"adf-people-cloud\"\n [class.adf-invalid]=\"hasError() && isDirty()\"\n >\n <mat-label *ngIf=\"!title\">\n <span>{{label}}</span>\n <span class=\"adf-asterisk\" [style.visibility]=\"required ? 'visible' : 'hidden'\">*</span>\n </mat-label>\n <mat-label *ngIf=\"title\">{{ title | translate }}</mat-label>\n\n <mat-chip-grid #userMultipleChipList data-automation-id=\"adf-cloud-people-chip-list\">\n <mat-chip-row\n *ngFor=\"let user of selectedUsers\"\n [removable]=\"!user.readonly\"\n [attr.data-automation-id]=\"'adf-people-cloud-chip-' + user.username\"\n (removed)=\"onRemove(user)\"\n [disabled]=\"isReadonly() || isValidationLoading()\"\n title=\"{{ (user.readonly ? 'ADF_CLOUD_GROUPS.MANDATORY' : '') | translate }}\"\n [matTooltip]=\"showFullNameOnHover ? (user | fullName : true) : user.email\"\n >\n {{ user | fullName }}\n <mat-icon\n matChipRemove\n *ngIf=\"!(user.readonly || readOnly)\"\n [attr.data-automation-id]=\"'adf-people-cloud-chip-remove-icon-' + user.username\"\n >\n cancel\n </mat-icon>\n </mat-chip-row>\n <input\n matInput\n [disabled]=\"isReadonly()\"\n [formControl]=\"searchUserCtrl\"\n [matAutocomplete]=\"auto\"\n [matChipInputFor]=\"userMultipleChipList\"\n [required]=\"required\"\n [placeholder]=\"placeholder\"\n (focus)=\"setFocus(true)\"\n (blur)=\"setFocus(false); markAsTouched()\"\n class=\"adf-cloud-input\"\n data-automation-id=\"adf-people-cloud-search-input\"\n #userInput\n />\n </mat-chip-grid>\n\n <mat-autocomplete\n autoActiveFirstOption\n class=\"adf-people-cloud-list\"\n #auto=\"matAutocomplete\"\n (optionSelected)=\"onSelect($event.option.value)\"\n [displayWith]=\"getDisplayName\"\n >\n <ng-container *ngIf=\"(searchUsers$ | async)?.length; else noResults\">\n <mat-option *ngFor=\"let user of searchUsers$ | async; let i = index\" [value]=\"user\" class=\"adf-people-cloud-option-active\">\n <div class=\"adf-people-cloud-row\" id=\"adf-people-cloud-user-{{ user.username }}\" data-automation-id=\"adf-people-cloud-row\">\n <div [outerHTML]=\"user | usernameInitials : 'adf-people-cloud-pic'\"></div>\n <span class=\"adf-people-label-name\"> {{ user | fullName : true }}</span>\n </div>\n </mat-option>\n </ng-container>\n <ng-template #noResults>\n <mat-option\n *ngIf=\"searchUserCtrl.hasError('searchTypingError') && !searchLoading\"\n disabled\n class=\"adf-people-cloud-option-not-active\"\n data-automation-id=\"adf-people-cloud-no-results\"\n >\n <span> {{ 'ADF_CLOUD_USERS.ERROR.NOT_FOUND' | translate : { userName: searchedValue } }}</span>\n </mat-option>\n </ng-template>\n </mat-autocomplete>\n </mat-form-field>\n\n <mat-progress-bar *ngIf=\"validationLoading\" mode=\"indeterminate\" />\n\n <div class=\"adf-error-container adf-error-messages-container\" *ngIf=\"showErrors\">\n <mat-error *ngIf=\"hasPreselectError() && !isValidationLoading()\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_USERS.ERROR.NOT_FOUND' | translate : { userName: validateUsersMessage } }}</div>\n </mat-error>\n <mat-error *ngIf=\"searchUserCtrl.hasError('pattern')\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.INVALID_PATTERN' | translate : { pattern: getValidationPattern() } }}</div>\n </mat-error>\n <mat-error *ngIf=\"searchUserCtrl.hasError('maxlength')\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">\n {{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.INVALID_MAX_LENGTH' | translate : { requiredLength: getValidationMaxLength() } }}\n </div>\n </mat-error>\n <mat-error *ngIf=\"searchUserCtrl.hasError('minlength')\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">\n {{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.INVALID_MIN_LENGTH' | translate : { requiredLength: getValidationMinLength() } }}\n </div>\n </mat-error>\n <mat-error\n *ngIf=\"(searchUserCtrl.hasError('required') || userChipsCtrl.hasError('required')) && isDirty()\"\n [@transitionMessages]=\"subscriptAnimationState\"\n class=\"adf-error\"\n >\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.REQUIRED' | translate }}</div>\n </mat-error>\n <mat-error\n *ngIf=\"searchUserCtrl.hasError('searchTypingError') && !this.isFocused\"\n [@transitionMessages]=\"subscriptAnimationState\"\n data-automation-id=\"invalid-users-typing-error\"\n class=\"adf-error\"\n >\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_USERS.ERROR.NOT_FOUND' | translate : { userName: searchedValue } }}</div>\n </mat-error>\n </div>\n</form>\n", styles: [".adf-people-cloud{width:100%}.adf-people-cloud-option-not-active:not(.adf-people-cloud:active){background:inherit;color:var(--adf-theme-foreground-secondary-text-color)}.adf-people-cloud-title{color:var(--adf-theme-foreground-secondary-text-color)}.adf-people-cloud-title--focus{color:var(--theme-primary-color)}.adf-people-cloud-list{margin:5px 0;padding:10px 0}.adf-people-cloud-option-active:not(.adf:disabled){color:var(--adf-theme-foreground-text-color)}.adf-people-cloud-option-not-active:not(.adf:active){color:var(--adf-theme-foreground-secondary-text-color)}.adf-people-cloud-row{display:flex;align-items:center;column-gap:10px}.adf-people-cloud-pic{background:var(--theme-primary-color);display:flex;justify-content:center;align-items:center;width:40px;height:40px;border-radius:100px;text-transform:uppercase}.adf-start-task-cloud-error{margin-top:-10px;position:absolute;height:20px}.adf-start-task-cloud-error-message{padding-right:8px;height:16px;line-height:1.33;width:auto}.adf-error,.adf-error-text,.adf-error-icon{color:var(--theme-warn-color)}\n"] }]
447
+ ], encapsulation: ViewEncapsulation.None, template: "<form>\n <mat-form-field\n [subscriptSizing]=\"formFieldSubscriptSizing\"\n [floatLabel]=\"'auto'\"\n class=\"adf-people-cloud adf-form-field-input\"\n [class.adf-invalid]=\"hasError() && isDirty()\"\n >\n <mat-label *ngIf=\"!title\">\n <span>{{label}}</span>\n </mat-label>\n <mat-label *ngIf=\"title\">{{ title | translate }}</mat-label>\n\n <mat-chip-grid [required]=\"required\" #userMultipleChipList data-automation-id=\"adf-cloud-people-chip-list\">\n <mat-chip-row\n *ngFor=\"let user of selectedUsers\"\n [removable]=\"!user.readonly\"\n [attr.data-automation-id]=\"'adf-people-cloud-chip-' + user.username\"\n (removed)=\"onRemove(user)\"\n [disabled]=\"isReadonly() || isValidationLoading()\"\n title=\"{{ (user.readonly ? 'ADF_CLOUD_GROUPS.MANDATORY' : '') | translate }}\"\n [matTooltip]=\"showFullNameOnHover ? (user | fullName : true) : user.email\"\n >\n {{ user | fullName }}\n <mat-icon\n matChipRemove\n *ngIf=\"!(user.readonly || readOnly)\"\n [attr.data-automation-id]=\"'adf-people-cloud-chip-remove-icon-' + user.username\"\n >\n cancel\n </mat-icon>\n </mat-chip-row>\n <input\n matInput\n [disabled]=\"isReadonly()\"\n [formControl]=\"searchUserCtrl\"\n [matAutocomplete]=\"auto\"\n [matChipInputFor]=\"userMultipleChipList\"\n [required]=\"required\"\n [placeholder]=\"placeholder\"\n [disabled]=\"isReadonly() || isValidationLoading()\"\n (focus)=\"setFocus(true)\"\n (blur)=\"setFocus(false); markAsTouched()\"\n class=\"adf-cloud-input\"\n data-automation-id=\"adf-people-cloud-search-input\"\n #userInput\n />\n </mat-chip-grid>\n\n <mat-autocomplete\n autoActiveFirstOption\n class=\"adf-people-cloud-list\"\n #auto=\"matAutocomplete\"\n (optionSelected)=\"onSelect($event.option.value)\"\n [displayWith]=\"getDisplayName\"\n >\n <ng-container *ngIf=\"(searchUsers$ | async)?.length; else noResults\">\n <mat-option *ngFor=\"let user of searchUsers$ | async; let i = index\" [value]=\"user\" class=\"adf-people-cloud-option-active\">\n <div class=\"adf-people-cloud-row\" id=\"adf-people-cloud-user-{{ user.username }}\" data-automation-id=\"adf-people-cloud-row\">\n <div [outerHTML]=\"user | usernameInitials : 'adf-people-cloud-pic'\"></div>\n <span class=\"adf-people-label-name\"> {{ user | fullName : true }}</span>\n </div>\n </mat-option>\n </ng-container>\n <ng-template #noResults>\n <mat-option\n *ngIf=\"searchUserCtrl.hasError('searchTypingError') && !searchLoading\"\n disabled\n class=\"adf-people-cloud-option-not-active\"\n data-automation-id=\"adf-people-cloud-no-results\"\n >\n <span> {{ 'ADF_CLOUD_USERS.ERROR.NOT_FOUND' | translate : { userName: searchedValue } }}</span>\n </mat-option>\n </ng-template>\n </mat-autocomplete>\n </mat-form-field>\n\n <mat-progress-bar *ngIf=\"validationLoading\" mode=\"indeterminate\" />\n\n <div class=\"adf-error-container adf-error-messages-container\" *ngIf=\"showErrors\">\n <mat-error *ngIf=\"hasPreselectError() && !isValidationLoading()\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_USERS.ERROR.NOT_FOUND' | translate : { userName: validateUsersMessage } }}</div>\n </mat-error>\n <mat-error *ngIf=\"searchUserCtrl.hasError('pattern')\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.INVALID_PATTERN' | translate : { pattern: getValidationPattern() } }}</div>\n </mat-error>\n <mat-error *ngIf=\"searchUserCtrl.hasError('maxlength')\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">\n {{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.INVALID_MAX_LENGTH' | translate : { requiredLength: getValidationMaxLength() } }}\n </div>\n </mat-error>\n <mat-error *ngIf=\"searchUserCtrl.hasError('minlength')\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">\n {{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.INVALID_MIN_LENGTH' | translate : { requiredLength: getValidationMinLength() } }}\n </div>\n </mat-error>\n <mat-error\n *ngIf=\"(searchUserCtrl.hasError('required') || userChipsCtrl.hasError('required')) && isDirty()\"\n [@transitionMessages]=\"subscriptAnimationState\"\n class=\"adf-error\"\n >\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.REQUIRED' | translate }}</div>\n </mat-error>\n <mat-error\n *ngIf=\"searchUserCtrl.hasError('searchTypingError') && !this.isFocused\"\n [@transitionMessages]=\"subscriptAnimationState\"\n data-automation-id=\"invalid-users-typing-error\"\n class=\"adf-error\"\n >\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_USERS.ERROR.NOT_FOUND' | translate : { userName: searchedValue } }}</div>\n </mat-error>\n </div>\n</form>\n", styles: [".adf-people-cloud{width:100%}.adf-people-cloud-option-not-active:not(.adf-people-cloud:active){background:inherit;color:var(--adf-theme-foreground-secondary-text-color)}.adf-people-cloud-title{color:var(--adf-theme-foreground-secondary-text-color)}.adf-people-cloud-title--focus{color:var(--theme-primary-color)}.adf-people-cloud-list{margin:5px 0;padding:10px 0}.adf-people-cloud-option-active:not(.adf:disabled){color:var(--adf-theme-foreground-text-color)}.adf-people-cloud-option-not-active:not(.adf:active){color:var(--adf-theme-foreground-secondary-text-color)}.adf-people-cloud-row{display:flex;align-items:center;column-gap:10px}.adf-people-cloud-pic{background:var(--theme-primary-color);display:flex;justify-content:center;align-items:center;width:40px;height:40px;border-radius:100px;text-transform:uppercase}.adf-start-task-cloud-error{margin-top:-10px;position:absolute;height:20px}.adf-start-task-cloud-error-message{padding-right:8px;height:16px;line-height:1.33;width:auto}.adf-error,.adf-error-text,.adf-error-icon{color:var(--theme-warn-color)}\n"] }]
449
448
  }], ctorParameters: () => [{ type: i1.IdentityUserService }], propDecorators: { label: [{
450
449
  type: Input
451
450
  }], appName: [{
@@ -496,4 +495,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
496
495
  type: ViewChild,
497
496
  args: ['userInput']
498
497
  }] } });
499
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVvcGxlLWNsb3VkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvcGVvcGxlL2NvbXBvbmVudHMvcGVvcGxlLWNsb3VkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvcGVvcGxlL2NvbXBvbmVudHMvcGVvcGxlLWNsb3VkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFFSCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEcsT0FBTyxFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHakYsT0FBTyxFQUEwQixrQkFBa0IsRUFBbUIsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFF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UTtzQkFEUCxLQUFLO2dCQU9OLFFBQVE7c0JBRFAsS0FBSztnQkFVTixjQUFjO3NCQURiLEtBQUs7Z0JBUU4sYUFBYTtzQkFEWixLQUFLO2dCQVFOLGlCQUFpQjtzQkFEaEIsS0FBSztnQkFLTixhQUFhO3NCQURaLEtBQUs7Z0JBS04sY0FBYztzQkFEYixLQUFLO2dCQU9OLEtBQUs7c0JBREosS0FBSztnQkFPTixXQUFXO3NCQURWLEtBQUs7Z0JBUU4sMEJBQTBCO3NCQUR6QixLQUFLO2dCQU9OLG1CQUFtQjtzQkFEbEIsS0FBSztnQkFPTix3QkFBd0I7c0JBRHZCLEtBQUs7Z0JBT04sVUFBVTtzQkFEVCxLQUFLO2dCQU9OLG1CQUFtQjtzQkFEbEIsS0FBSztnQkFLTixVQUFVO3NCQURULE1BQU07Z0JBS1AsVUFBVTtzQkFEVCxNQUFNO2dCQUtQLFlBQVk7c0JBRFgsTUFBTTtnQkFLUCxPQUFPO3NCQUROLE1BQU07Z0JBSUMsU0FBUztzQkFEaEIsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBVbnR5cGVkRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1lcmdlTWFwLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEZ1bGxOYW1lUGlwZSwgSW5pdGlhbFVzZXJuYW1lUGlwZSB9IGZyb20gJ0BhbGZyZXNjby9hZGYtY29yZSc7XG5pbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IENvbXBvbmVudFNlbGVjdGlvbk1vZGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBJZGVudGl0eVVzZXJNb2RlbCB9IGZyb20gJy4uL21vZGVscy9pZGVudGl0eS11c2VyLm1vZGVsJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UsIE1hdEZvcm1GaWVsZE1vZHVsZSwgU3Vic2NyaXB0U2l6aW5nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7IE1hdENoaXBzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hpcHMnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBJZGVudGl0eVVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvaWRlbnRpdHktdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhZGYtY2xvdWQtcGVvcGxlJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgICAgIE1hdEljb25Nb2R1bGUsXG4gICAgICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICAgICAgTWF0UHJvZ3Jlc3NCYXJNb2R1bGUsXG4gICAgICAgIE1hdFNlbGVjdE1vZHVsZSxcbiAgICAgICAgSW5pdGlhbFVzZXJuYW1lUGlwZSxcbiAgICAgICAgRnVsbE5hbWVQaXBlLFxuICAgICAgICBNYXRBdXRvY29tcGxldGVNb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIE1hdENoaXBzTW9kdWxlLFxuICAgICAgICBNYXRJbnB1dE1vZHVsZSxcbiAgICAgICAgTWF0VG9vbHRpcE1vZHVsZVxuICAgIF0sXG4gICAgcHJvdmlkZXJzOiBbRnVsbE5hbWVQaXBlXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcGVvcGxlLWNsb3VkLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9wZW9wbGUtY2xvdWQuY29tcG9uZW50LnNjc3MnXSxcbiAgICBhbmltYXRpb25zOiBbXG4gICAgICAgIHRyaWdnZXIoJ3RyYW5zaXRpb25NZXNzYWdlcycsIFtcbiAgICAgICAgICAgIHN0YXRlKCdlbnRlcicsIHN0eWxlKHsgb3BhY2l0eTogMSwgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwJSknIH0pKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ3ZvaWQgPT4gZW50ZXInLCBbc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC0xMDAlKScgfSksIGFuaW1hdGUoJzMwMG1zIGN1YmljLWJlemllcigwLjU1LCAwLCAwLjU1LCAwLjIpJyldKVxuICAgICAgICBdKVxuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBQZW9wbGVDbG91ZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcbiAgICAvKiogTGFiZWwgZm9yIHRoZSB1c2VyIHNlbGVjdGlvbiBjb21wb25lbnQuICovXG4gICAgQElucHV0KClcbiAgICBsYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqIE5hbWUgb2YgdGhlIGFwcGxpY2F0aW9uLiBJZiBzcGVjaWZpZWQsIHRoaXMgc2hvd3MgdGhlIHVzZXJzIHdobyBoYXZlIGFjY2VzcyB0byB0aGUgYXBwLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXBwTmFtZTogc3RyaW5nO1xuXG4gICAgLyoqIFVzZXIgc2VsZWN0aW9uIG1vZGUgKHNpbmdsZS9tdWx0aXBsZSkuICovXG4gICAgQElucHV0KClcbiAgICBtb2RlOiBDb21wb25lbnRTZWxlY3Rpb25Nb2RlID0gJ3NpbmdsZSc7XG5cbiAgICAvKiogUm9sZSBuYW1lcyBvZiB0aGUgdXNlcnMgdG8gYmUgbGlzdGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm9sZXM6IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBmbGFnIGVuYWJsZXMgdGhlIHZhbGlkYXRpb24gb24gdGhlIHByZVNlbGVjdFVzZXJzIHBhc3NlZCBhcyBpbnB1dC5cbiAgICAgKiBJbiBjYXNlIHRoZSBmbGFnIGlzIHRydWUgdGhlIGNvbXBvbmVudHMgY2FsbCB0aGUgaWRlbnRpdHkgc2VydmljZSB0byB2ZXJpZnkgdGhlIHZhbGlkaXR5IG9mIHRoZSBpbmZvcm1hdGlvbiBwYXNzZWQgYXMgaW5wdXQuXG4gICAgICogT3RoZXJ3aXNlLCBubyBjaGVjayB3aWxsIGJlIGRvbmUuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB2YWxpZGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2hvdyB0aGUgaW5mbyBpbiByZWFkb25seSBtb2RlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICByZWFkT25seTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogTWFyayB0aGlzIGZpZWxkIGFzIHJlcXVpcmVkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICByZXF1aXJlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQXJyYXkgb2YgdXNlcnMgdG8gYmUgcHJlLXNlbGVjdGVkLiBBbGwgdXNlcnMgaW4gdGhlXG4gICAgICogYXJyYXkgYXJlIHByZS1zZWxlY3RlZCBpbiBtdWx0aSBzZWxlY3Rpb24gbW9kZSwgYnV0IG9ubHkgdGhlIGZpcnN0IHVzZXJcbiAgICAgKiBpcyBwcmUtc2VsZWN0ZWQgaW4gc2luZ2xlIHNlbGVjdGlvbiBtb2RlLlxuICAgICAqIE1hbmRhdG9yeSBwcm9wZXJ0aWVzIGFyZTogaWQsIGVtYWlsLCB1c2VybmFtZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHJlU2VsZWN0VXNlcnM6IElkZW50aXR5VXNlck1vZGVsW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEFycmF5IG9mIHVzZXJzIHRvIGJlIGV4Y2x1ZGVkLlxuICAgICAqIE1hbmRhdG9yeSBwcm9wZXJ0aWVzIGFyZTogaWQsIGVtYWlsLCB1c2VybmFtZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZXhjbHVkZWRVc2VyczogSWRlbnRpdHlVc2VyTW9kZWxbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQXJyYXkgb2YgZ3JvdXBzIHRvIHJlc3RyaWN0IHVzZXIgc2VhcmNoZXMuXG4gICAgICogTWFuZGF0b3J5IHByb3BlcnR5IGlzIGdyb3VwIG5hbWVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGdyb3Vwc1Jlc3RyaWN0aW9uOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLyoqIEZvcm1Db250cm9sIHRvIGxpc3Qgb2YgdXNlcnMgKi9cbiAgICBASW5wdXQoKVxuICAgIHVzZXJDaGlwc0N0cmw6IFVudHlwZWRGb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woeyB2YWx1ZTogJycsIGRpc2FibGVkOiBmYWxzZSB9KTtcblxuICAgIC8qKiBGb3JtQ29udHJvbCB0byBzZWFyY2ggdGhlIHVzZXIgKi9cbiAgICBASW5wdXQoKVxuICAgIHNlYXJjaFVzZXJDdHJsID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCh7IHZhbHVlOiAnJywgZGlzYWJsZWQ6IGZhbHNlIH0pO1xuXG4gICAgLyoqXG4gICAgICogTGFiZWwgdHJhbnNsYXRpb24ga2V5XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB0aXRsZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogUGxhY2Vob2xkZXIgZm9yIHRoZSBpbnB1dCBmaWVsZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGxhY2Vob2xkZXI6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEhpZGUgdGhlIG1hdElucHV0IGFzc29jaWF0ZWQgd2l0aCB0aGUgY2hpcCBncmlkIHdoZW4gYSBzaW5nbGUgdXNlciBpcyBzZWxlY3RlZCBpbiBzaW5nbGUgc2VsZWN0aW9uIG1vZGUuXG4gICAgICogVGhlIGlucHV0IHdpbGwgYmUgc2hvd24gYWdhaW4gd2hlbiB0aGUgdXNlciBpcyByZW1vdmVkIHVzaW5nIHRoZSBpY29uIG9uIHRoZSBjaGlwLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGlkZUlucHV0T25TaW5nbGVTZWxlY3Rpb24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIE1hdGVyaWFsIGZvcm0gZmllbGQgYXBwZWFyYW5jZSAoZmlsbCAvIG91dGxpbmUpXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBmb3JtRmllbGRBcHBlYXJhbmNlOiBNYXRGb3JtRmllbGRBcHBlYXJhbmNlID0gJ2ZpbGwnO1xuXG4gICAgLyoqXG4gICAgICogTWF0ZXJpYWwgZm9ybSBmaWVsZCBzdWJzY3JpcHQgc2l6aW5nIChmaXhlZCAvIGR5bmFtaWMpXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBmb3JtRmllbGRTdWJzY3JpcHRTaXppbmc6IFN1YnNjcmlwdFNpemluZyA9ICdmaXhlZCc7XG5cbiAgICAvKipcbiAgICAgKiBTaG93IGVycm9ycyB1bmRlciB0aGUgZm9ybSBmaWVsZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0Vycm9yczogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBTaG93IHRoZSBmdWxsIG5hbWUgb2YgdGhlIHVzZXIgb24gaG92ZXIgaW4gdGhlIGNoaXBzXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzaG93RnVsbE5hbWVPbkhvdmVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGEgdXNlciBpcyBzZWxlY3RlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBzZWxlY3RVc2VyID0gbmV3IEV2ZW50RW1pdHRlcjxJZGVudGl0eVVzZXJNb2RlbD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gYSBzZWxlY3RlZCB1c2VyIGlzIHJlbW92ZWQgaW4gbXVsdGkgc2VsZWN0aW9uIG1vZGUuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVtb3ZlVXNlciA9IG5ldyBFdmVudEVtaXR0ZXI8SWRlbnRpdHlVc2VyTW9kZWw+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGEgdXNlciBzZWxlY3Rpb24gY2hhbmdlLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGNoYW5nZWRVc2VycyA9IG5ldyBFdmVudEVtaXR0ZXI8SWRlbnRpdHlVc2VyTW9kZWxbXT4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gYW4gd2FybmluZyBvY2N1cnMuICovXG4gICAgQE91dHB1dCgpXG4gICAgd2FybmluZyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgQFZpZXdDaGlsZCgndXNlcklucHV0JylcbiAgICBwcml2YXRlIHVzZXJJbnB1dDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICAgIHByaXZhdGUgc2VhcmNoVXNlcnM6IElkZW50aXR5VXNlck1vZGVsW10gPSBbXTtcblxuICAgIHNlbGVjdGVkVXNlcnM6IElkZW50aXR5VXNlck1vZGVsW10gPSBbXTtcbiAgICBpbnZhbGlkVXNlcnM6IElkZW50aXR5VXNlck1vZGVsW10gPSBbXTtcblxuICAgIHNlYXJjaFVzZXJzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SWRlbnRpdHlVc2VyTW9kZWxbXT4odGhpcy5zZWFyY2hVc2Vycyk7XG4gICAgc3Vic2NyaXB0QW5pbWF0aW9uU3RhdGU6IHN0cmluZyA9ICdlbnRlcic7XG4gICAgaXNGb2N1c2VkOiBib29sZWFuO1xuICAgIHRvdWNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHZhbGlkYXRlVXNlcnNNZXNzYWdlOiBzdHJpbmc7XG4gICAgc2VhcmNoZWRWYWx1ZSA9ICcnO1xuXG4gICAgdmFsaWRhdGlvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICBzZWFyY2hMb2FkaW5nID0gZmFsc2U7XG5cbiAgICB0eXBpbmdVbmlxdWVWYWx1ZU5vdEVtcHR5JDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBpZGVudGl0eVVzZXJTZXJ2aWNlOiBJZGVudGl0eVVzZXJTZXJ2aWNlKSB7fVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5pdFNlYXJjaCgpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzUHJlc2VsZWN0ZWRVc2Vyc0NoYW5nZWQoY2hhbmdlcykgfHwgdGhpcy5oYXNNb2RlQ2hhbmdlZChjaGFuZ2VzKSB8fCB0aGlzLmlzVmFsaWRhdGlvbkNoYW5nZWQoY2hhbmdlcykpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1ByZVNlbGVjdFVzZXJzKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRQcmVTZWxlY3RVc2VycygpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmhhc1ByZXNlbGVjdGVkVXNlcnNDbGVhcmVkKGNoYW5nZXMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJzID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkVXNlcnMgPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWRhdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW52YWxpZFVzZXJzID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc1JlYWRvbmx5KCkgJiYgdGhpcy5zZWFyY2hVc2VyQ3RybC5lbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFVzZXJDdHJsLmRpc2FibGUoKTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5pc1JlYWRvbmx5KCkgJiYgdGhpcy5zZWFyY2hVc2VyQ3RybC5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hVc2VyQ3RybC5lbmFibGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaGlkZUlucHV0T25TaW5nbGVTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVXNlcnMubGVuZ3RoID09PSAxICYmIHRoaXMuaXNTaW5nbGVNb2RlKCkgJiYgdGhpcy51c2VySW5wdXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJJbnB1dC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRTZWFyY2goKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVN0cmVhbSgpO1xuICAgICAgICB0aGlzLnR5cGluZ1VuaXF1ZVZhbHVlTm90RW1wdHkkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKG5hbWU6IHN0cmluZykgPT4gbmFtZS5sZW5ndGggPj0gMSksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKChuYW1lOiBzdHJpbmcpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaWRlbnRpdHlVc2VyU2VydmljZS5zZWFyY2gobmFtZSwgeyByb2xlczogdGhpcy5yb2xlcywgd2l0aGluQXBwbGljYXRpb246IHRoaXMuYXBwTmFtZSwgZ3JvdXBzOiB0aGlzLmdyb3Vwc1Jlc3RyaWN0aW9uIH0pXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCgodXNlcnM6IElkZW50aXR5VXNlck1vZGVsW10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldFNlYXJjaFVzZXJzKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXNlcnM7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCh1c2VyKSA9PiAhdGhpcy5pc1VzZXJBbHJlYWR5U2VsZWN0ZWQodXNlcikgJiYgIXRoaXMuaXNFeGNsdWRlZFVzZXIodXNlcikpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh1c2VyOiBJZGVudGl0eVVzZXJNb2RlbCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoVXNlcnMucHVzaCh1c2VyKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFVzZXJzJC5uZXh0KHRoaXMuc2VhcmNoVXNlcnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplU3RyZWFtKCkge1xuICAgICAgICBjb25zdCB0eXBpbmdWYWx1ZUZyb21Db250cm9sJCA9IHRoaXMuc2VhcmNoVXNlckN0cmwudmFsdWVDaGFuZ2VzO1xuXG4gICAgICAgIGNvbnN0IHR5cGluZ1ZhbHVlVHlwZVN0aW5nJCA9IHR5cGluZ1ZhbHVlRnJvbUNvbnRyb2wkLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgdHlwaW5nVmFsdWVIYW5kbGVFcnJvck1lc3NhZ2UkID0gdHlwaW5nVmFsdWVUeXBlU3RpbmckLnBpcGUoXG4gICAgICAgICAgICB0YXAoKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUeXBpbmdFcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgdHlwaW5nVmFsdWVEZWJvdW5jZWRVbmlxdWUkID0gdHlwaW5nVmFsdWVIYW5kbGVFcnJvck1lc3NhZ2UkLnBpcGUoZGVib3VuY2VUaW1lKDUwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuXG4gICAgICAgIHRoaXMudHlwaW5nVW5pcXVlVmFsdWVOb3RFbXB0eSQgPSB0eXBpbmdWYWx1ZURlYm91bmNlZFVuaXF1ZSQucGlwZShcbiAgICAgICAgICAgIHRhcCgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS50cmltKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hlZFZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hVc2VyQ3RybC5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFVzZXJDdHJsLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMucmVzZXRTZWFyY2hVc2VycygpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNWYWxpZGF0aW9uRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUgPT09IHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1VzZXJBbHJlYWR5U2VsZWN0ZWQoc2VhcmNoVXNlcjogSWRlbnRpdHlVc2VyTW9kZWwpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRVc2VycyAmJiB0aGlzLnNlbGVjdGVkVXNlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5zZWxlY3RlZFVzZXJzLmZpbmQoKHNlbGVjdGVkVXNlcikgPT4gdGhpcy5lcXVhbHNVc2VycyhzZWxlY3RlZFVzZXIsIHNlYXJjaFVzZXIpKTtcblxuICAgICAgICAgICAgcmV0dXJuICEhcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRXhjbHVkZWRVc2VyKHNlYXJjaFVzZXI6IElkZW50aXR5VXNlck1vZGVsKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmV4Y2x1ZGVkVXNlcnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMuZXhjbHVkZWRVc2Vycy5maW5kKChleGNsdWRlZFVzZXIpID0+IHRoaXMuZXF1YWxzVXNlcnMoZXhjbHVkZWRVc2VyLCBzZWFyY2hVc2VyKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgbG9hZFByZVNlbGVjdFVzZXJzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVXNlcnMgPSBbXTtcblxuICAgICAgICBpZiAodGhpcy5pc1NpbmdsZU1vZGUoKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJzID0gW3RoaXMucHJlU2VsZWN0VXNlcnNbMF1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJzID0gdGhpcy5yZW1vdmVEdXBsaWNhdGVkVXNlcnModGhpcy5wcmVTZWxlY3RVc2Vycyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51c2VyQ2hpcHNDdHJsLnNldFZhbHVlKHRoaXMuc2VsZWN0ZWRVc2Vyc1swXS51c2VybmFtZSk7XG4gICAgICAgIGlmICh0aGlzLmlzVmFsaWRhdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uTG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnZhbGlkYXRlUHJlc2VsZWN0VXNlcnMoKTtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UHJlc2VsZWN0ZWRVc2VycygpOiBJZGVudGl0eVVzZXJNb2RlbFtdIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTaW5nbGVNb2RlKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBbdGhpcy5wcmVTZWxlY3RVc2Vyc1swXV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVEdXBsaWNhdGVkVXNlcnModGhpcy5wcmVTZWxlY3RVc2Vycyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHZhbGlkYXRlUHJlc2VsZWN0VXNlcnMoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgdGhpcy5pbnZhbGlkVXNlcnMgPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IHVzZXIgb2YgdGhpcy5nZXRQcmVzZWxlY3RlZFVzZXJzKCkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5pZGVudGl0eVVzZXJTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2VhcmNoKHVzZXIudXNlcm5hbWUsIHsgcm9sZXM6IHRoaXMucm9sZXMsIHdpdGhpbkFwcGxpY2F0aW9uOiB0aGlzLmFwcE5hbWUsIGdyb3VwczogdGhpcy5ncm91cHNSZXN0cmljdGlvbiB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAgICAgICAgICAgKVswXTtcblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5lcXVhbHNVc2Vycyh1c2VyLCB2YWxpZGF0aW9uUmVzdWx0KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludmFsaWRVc2Vycy5wdXNoKHVzZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkVXNlcnMucHVzaCh1c2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2hlY2tQcmVzZWxlY3RWYWxpZGF0aW9uRXJyb3JzKCk7XG4gICAgfVxuXG4gICAgZXF1YWxzVXNlcnMocHJlc2VsZWN0ZWRVc2VyOiBJZGVudGl0eVVzZXJNb2RlbCwgaWRlbnRpdHlVc2VyOiBJZGVudGl0eVVzZXJNb2RlbCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAocHJlc2VsZWN0ZWRVc2VyICYmIGlkZW50aXR5VXNlcikge1xuICAgICAgICAgICAgY29uc3QgdW5pcXVlUHJvcGVydHlJZGVudGlmaWVycyA9IFsnaWQnLCAndXNlcm5hbWUnLCAnZW1haWwnXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgT2JqZWN0LmtleXMocHJlc2VsZWN0ZWRVc2VyKSkge1xuICAgICAgICAgICAgICAgIGlmIChwcmVzZWxlY3RlZFVzZXJbcHJvcGVydHldICE9PSB1bmRlZmluZWQgJiYgdW5pcXVlUHJvcGVydHlJZGVudGlmaWVycy5pbmNsdWRlcyhwcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXNlbGVjdGVkVXNlcltwcm9wZXJ0eV0gPT09IGlkZW50aXR5VXNlcltwcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZW1vdmVEdXBsaWNhdGVkVXNlcnModXNlcnM6IElkZW50aXR5VXNlck1vZGVsW10pOiBJZGVudGl0eVVzZXJNb2RlbFtdIHtcbiAgICAgICAgcmV0dXJuIHVzZXJzLmZpbHRlcihcbiAgICAgICAgICAgICh1c2VyLCBpbmRleCwgc2VsZikgPT5cbiAgICAgICAgICAgICAgICBpbmRleCA9PT0gc2VsZi5maW5kSW5kZXgoKGF1eFVzZXIpID0+IHVzZXIuaWQgPT09IGF1eFVzZXIuaWQgJiYgdXNlci51c2VybmFtZSA9PT0gYXV4VXNlci51c2VybmFtZSAmJiB1c2VyLmVtYWlsID09PSBhdXhVc2VyLmVtYWlsKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIG9uU2VsZWN0KHVzZXI6IElkZW50aXR5VXNlck1vZGVsKTogdm9pZCB7XG4gICAgICAgIGlmICh1c2VyKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFVzZXIuZW1pdCh1c2VyKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNNdWx0aXBsZU1vZGUoKSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc1VzZXJBbHJlYWR5U2VsZWN0ZWQodXNlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJzLnB1c2godXNlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmludmFsaWRVc2VycyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VycyA9IFt1c2VyXTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5oaWRlSW5wdXRPblNpbmdsZVNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJJbnB1dC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnVzZXJJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFVzZXJDdHJsLnNldFZhbHVlKCcnKTtcbiAgICAgICAgICAgIHRoaXMudXNlckNoaXBzQ29udHJvbFZhbHVlKHRoaXMuc2VsZWN0ZWRVc2Vyc1swXS51c2VybmFtZSk7XG5cbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZFVzZXJzLmVtaXQodGhpcy5zZWxlY3RlZFVzZXJzKTtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTZWFyY2hVc2VycygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25SZW1vdmUodXNlclRvUmVtb3ZlOiBJZGVudGl0eVVzZXJNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbW92ZVVzZXIuZW1pdCh1c2VyVG9SZW1vdmUpO1xuICAgICAgICB0aGlzLnJlbW92ZVVzZXJGcm9tU2VsZWN0ZWQodXNlclRvUmVtb3ZlKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VkVXNlcnMuZW1pdCh0aGlzLnNlbGVjdGVkVXNlcnMpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFVzZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy51c2VyQ2hpcHNDb250cm9sVmFsdWUoJycpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaGlkZUlucHV0T25TaW5nbGVTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJJbnB1dC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51c2VyQ2hpcHNDb250cm9sVmFsdWUodGhpcy5zZWxlY3RlZFVzZXJzWzBdLnVzZXJuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlYXJjaFVzZXJDdHJsLm1hcmtBc0RpcnR5KCk7XG4gICAgICAgIHRoaXMuc2VhcmNoVXNlckN0cmwubWFya0FzVG91Y2hlZCgpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzVmFsaWRhdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVVc2VyRnJvbVZhbGlkYXRpb24odXNlclRvUmVtb3ZlKTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tQcmVzZWxlY3RWYWxpZGF0aW9uRXJyb3JzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrUHJlc2VsZWN0VmFsaWRhdGlvbkVycm9ycygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbnZhbGlkVXNlcnMgPSB0aGlzLnJlbW92ZUR1cGxpY2F0ZWRVc2Vycyh0aGlzLmludmFsaWRVc2Vycyk7XG5cbiAgICAgICAgaWYgKHRoaXMuaW52YWxpZFVzZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVJbnZhbGlkVXNlcnNNZXNzYWdlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLndhcm5pbmcuZW1pdCh7XG4gICAgICAgICAgICBtZXNzYWdlOiAnSU5WQUxJRF9QUkVTRUxFQ1RFRF9VU0VSUycsXG4gICAgICAgICAgICB1c2VyczogdGhpcy5pbnZhbGlkVXNlcnNcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVVc2VyRnJvbVNlbGVjdGVkKHsgaWQsIHVzZXJuYW1lLCBlbWFpbCB9OiBJZGVudGl0eVVzZXJNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleFRvUmVtb3ZlID0gdGhpcy5zZWxlY3RlZFVzZXJzLmZpbmRJbmRleCgodXNlcikgPT4gdXNlci5pZCA9PT0gaWQgJiYgdXNlci51c2VybmFtZSA9PT0gdXNlcm5hbWUgJiYgdXNlci5lbWFpbCA9PT0gZW1haWwpO1xuXG4gICAgICAgIGlmIChpbmRleFRvUmVtb3ZlICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJzLnNwbGljZShpbmRleFRvUmVtb3ZlLCAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlVXNlckZyb21WYWxpZGF0aW9uKHsgaWQsIHVzZXJuYW1lLCBlbWFpbCB9OiBJZGVudGl0eVVzZXJNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleFRvUmVtb3ZlID0gdGhpcy5pbnZhbGlkVXNlcnMuZmluZEluZGV4KCh1c2VyKSA9PiB1c2VyLmlkID09PSBpZCAmJiB1c2VyLnVzZXJuYW1lID09PSB1c2VybmFtZSAmJiB1c2VyLmVtYWlsID09PSBlbWFpbCk7XG5cbiAgICAgICAgaWYgKGluZGV4VG9SZW1vdmUgIT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmludmFsaWRVc2Vycy5zcGxpY2UoaW5kZXhUb1JlbW92ZSwgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlSW52YWxpZFVzZXJzTWVzc2FnZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZVVzZXJzTWVzc2FnZSA9ICcnO1xuXG4gICAgICAgIHRoaXMuaW52YWxpZFVzZXJzLmZvckVhY2goKGludmFsaWRVc2VyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSB0aGlzLmludmFsaWRVc2Vycy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVVzZXJzTWVzc2FnZSArPSBgJHtpbnZhbGlkVXNlci51c2VybmFtZX0gYDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVVzZXJzTWVzc2FnZSArPSBgJHtpbnZhbGlkVXNlci51c2VybmFtZX0sIGA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGhhc1ByZXNlbGVjdEVycm9yKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnZhbGlkVXNlcnMgJiYgdGhpcy5pbnZhbGlkVXNlcnMubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBnZXREaXNwbGF5TmFtZSh1c2VyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIEZ1bGxOYW1lUGlwZS5wcm90b3R5cGUudHJhbnNmb3JtKHVzZXIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNNdWx0aXBsZU1vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUgPT09ICdtdWx0aXBsZSc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1NpbmdsZU1vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUgPT09ICdzaW5nbGUnO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNTaW5nbGVTZWxlY3Rpb25SZWFkb25seSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVNb2RlKCkgJiYgdGhpcy5zZWxlY3RlZFVzZXJzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLnNlbGVjdGVkVXNlcnNbMF0ucmVhZG9ubHkgPT09IHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYXNQcmVTZWxlY3RVc2VycygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJlU2VsZWN0VXNlcnMgJiYgdGhpcy5wcmVTZWxlY3RVc2Vycy5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFzTW9kZUNoYW5nZWQoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gY2hhbmdlcz8ubW9kZSAmJiBjaGFuZ2VzLm1vZGUuY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzLm1vZGUucHJldmlvdXNWYWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzVmFsaWRhdGlvbkNoYW5nZWQoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gY2hhbmdlcz8udmFsaWRhdGUgJiYgY2hhbmdlcy52YWxpZGF0ZS5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXMudmFsaWRhdGUucHJldmlvdXNWYWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc1ByZXNlbGVjdGVkVXNlcnNDaGFuZ2VkKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGNoYW5nZXM/LnByZVNlbGVjdFVzZXJzICYmIGNoYW5nZXMucHJlU2VsZWN0VXNlcnMuY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzLnByZVNlbGVjdFVzZXJzLnByZXZpb3VzVmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYXNQcmVzZWxlY3RlZFVzZXJzQ2xlYXJlZChjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBjaGFuZ2VzPy5wcmVTZWxlY3RVc2Vycz8uY3VycmVudFZhbHVlPy5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldFNlYXJjaFVzZXJzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlYXJjaFVzZXJzID0gW107XG4gICAgICAgIHRoaXMuc2VhcmNoVXNlcnMkLm5leHQodGhpcy5zZWFyY2hVc2Vycyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRUeXBpbmdFcnJvcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWFyY2hVc2VyQ3RybC5zZXRFcnJvcnMoe1xuICAgICAgICAgICAgc2VhcmNoVHlwaW5nRXJyb3I6IHRydWUsXG4gICAgICAgICAgICAuLi50aGlzLnNlYXJjaFVzZXJDdHJsLmVycm9yc1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVzZXJDaGlwc0NvbnRyb2xWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMudXNlckNoaXBzQ3RybC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMudXNlckNoaXBzQ3RybC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICB0aGlzLnVzZXJDaGlwc0N0cmwubWFya0FzVG91Y2hlZCgpO1xuICAgIH1cblxuICAgIGdldFNlbGVjdGVkVXNlcnMoKTogSWRlbnRpdHlVc2VyTW9kZWxbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVXNlcnM7XG4gICAgfVxuXG4gICAgaXNSZWFkb25seSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZE9ubHkgfHwgdGhpcy5pc1NpbmdsZVNlbGVjdGlvblJlYWRvbmx5KCk7XG4gICAgfVxuXG4gICAgaXNWYWxpZGF0aW9uTG9hZGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZGF0aW9uRW5hYmxlZCgpICYmIHRoaXMudmFsaWRhdGlvbkxvYWRpbmc7XG4gICAgfVxuXG4gICAgbWFya0FzVG91Y2hlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50b3VjaGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpc1RvdWNoZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvdWNoZWQ7XG4gICAgfVxuXG4gICAgaXNTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRVc2VycyAmJiAhIXRoaXMuc2VsZWN0ZWRVc2Vycy5sZW5ndGg7XG4gICAgfVxuXG4gICAgaXNEaXJ0eSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNUb3VjaGVkKCkgJiYgIXRoaXMuaXNTZWxlY3RlZCgpO1xuICAgIH1cblxuICAgIHNldEZvY3VzKGlzRm9jdXNlZDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmlzRm9jdXNlZCA9IGlzRm9jdXNlZDtcbiAgICB9XG5cbiAgICBoYXNFcnJvcigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5zZWFyY2hVc2VyQ3RybC5lcnJvcnM7XG4gICAgfVxuXG4gICAgZ2V0VmFsaWRhdGlvblBhdHRlcm4oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoVXNlckN0cmwuZXJyb3JzLnBhdHRlcm4ucmVxdWlyZWRQYXR0ZXJuO1xuICAgIH1cblxuICAgIGdldFZhbGlkYXRpb25NYXhMZW5ndGgoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoVXNlckN0cmwuZXJyb3JzLm1heGxlbmd0aC5yZXF1aXJlZExlbmd0aDtcbiAgICB9XG5cbiAgICBnZXRWYWxpZGF0aW9uTWluTGVuZ3RoKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlYXJjaFVzZXJDdHJsLmVycm9ycy5taW5sZW5ndGgucmVxdWlyZWRMZW5ndGg7XG4gICAgfVxufVxuIiwiPGZvcm0+XG4gICAgPG1hdC1mb3JtLWZpZWxkXG4gICAgICAgIFtzdWJzY3JpcHRTaXppbmddPVwiZm9ybUZpZWxkU3Vic2NyaXB0U2l6aW5nXCJcbiAgICAgICAgW2Zsb2F0TGFiZWxdPVwiJ2F1dG8nXCJcbiAgICAgICAgY2xhc3M9XCJhZGYtcGVvcGxlLWNsb3VkXCJcbiAgICAgICAgW2NsYXNzLmFkZi1pbnZhbGlkXT1cImhhc0Vycm9yKCkgJiYgaXNEaXJ0eSgpXCJcbiAgICA+XG4gICAgICAgIDxtYXQtbGFiZWwgKm5nSWY9XCIhdGl0bGVcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7bGFiZWx9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWRmLWFzdGVyaXNrXCIgW3N0eWxlLnZpc2liaWxpdHldPVwicmVxdWlyZWQgPyAndmlzaWJsZScgOiAnaGlkZGVuJ1wiPio8L3NwYW4+XG4gICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8bWF0LWxhYmVsICpuZ0lmPVwidGl0bGVcIj57eyB0aXRsZSB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuXG4gICAgICAgIDxtYXQtY2hpcC1ncmlkICN1c2VyTXVsdGlwbGVDaGlwTGlzdCBkYXRhLWF1dG9tYXRpb24taWQ9XCJhZGYtY2xvdWQtcGVvcGxlLWNoaXAtbGlzdFwiPlxuICAgICAgICAgICAgPG1hdC1jaGlwLXJvd1xuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB1c2VyIG9mIHNlbGVjdGVkVXNlcnNcIlxuICAgICAgICAgICAgICAgIFtyZW1vdmFibGVdPVwiIXVzZXIucmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYWRmLXBlb3BsZS1jbG91ZC1jaGlwLScgKyB1c2VyLnVzZXJuYW1lXCJcbiAgICAgICAgICAgICAgICAocmVtb3ZlZCk9XCJvblJlbW92ZSh1c2VyKVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHkoKSB8fCBpc1ZhbGlkYXRpb25Mb2FkaW5nKClcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgKHVzZXIucmVhZG9ubHkgPyAnQURGX0NMT1VEX0dST1VQUy5NQU5EQVRPUlknIDogJycpIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJzaG93RnVsbE5hbWVPbkhvdmVyID8gKHVzZXIgfCBmdWxsTmFtZSA6IHRydWUpIDogdXNlci5lbWFpbFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgdXNlciB8IGZ1bGxOYW1lIH19XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgICAgICAgIG1hdENoaXBSZW1vdmVcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhKHVzZXIucmVhZG9ubHkgfHwgcmVhZE9ubHkpXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhZGYtcGVvcGxlLWNsb3VkLWNoaXAtcmVtb3ZlLWljb24tJyArIHVzZXIudXNlcm5hbWVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWNoaXAtcm93PlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seSgpXCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwic2VhcmNoVXNlckN0cmxcIlxuICAgICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiXG4gICAgICAgICAgICAgICAgW21hdENoaXBJbnB1dEZvcl09XCJ1c2VyTXVsdGlwbGVDaGlwTGlzdFwiXG4gICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgIChmb2N1cyk9XCJzZXRGb2N1cyh0cnVlKVwiXG4gICAgICAgICAgICAgICAgKGJsdXIpPVwic2V0Rm9jdXMoZmFsc2UpOyBtYXJrQXNUb3VjaGVkKClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWNsb3VkLWlucHV0XCJcbiAgICAgICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJhZGYtcGVvcGxlLWNsb3VkLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgI3VzZXJJbnB1dFxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC9tYXQtY2hpcC1ncmlkPlxuXG4gICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlXG4gICAgICAgICAgICBhdXRvQWN0aXZlRmlyc3RPcHRpb25cbiAgICAgICAgICAgIGNsYXNzPVwiYWRmLXBlb3BsZS1jbG91ZC1saXN0XCJcbiAgICAgICAgICAgICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCJcbiAgICAgICAgICAgIChvcHRpb25TZWxlY3RlZCk9XCJvblNlbGVjdCgkZXZlbnQub3B0aW9uLnZhbHVlKVwiXG4gICAgICAgICAgICBbZGlzcGxheVdpdGhdPVwiZ2V0RGlzcGxheU5hbWVcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKHNlYXJjaFVzZXJzJCB8IGFzeW5jKT8ubGVuZ3RoOyBlbHNlIG5vUmVzdWx0c1wiPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB1c2VyIG9mIHNlYXJjaFVzZXJzJCB8IGFzeW5jOyBsZXQgaSA9IGluZGV4XCIgW3ZhbHVlXT1cInVzZXJcIiBjbGFzcz1cImFkZi1wZW9wbGUtY2xvdWQtb3B0aW9uLWFjdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLXBlb3BsZS1jbG91ZC1yb3dcIiBpZD1cImFkZi1wZW9wbGUtY2xvdWQtdXNlci17eyB1c2VyLnVzZXJuYW1lIH19XCIgZGF0YS1hdXRvbWF0aW9uLWlkPVwiYWRmLXBlb3BsZS1jbG91ZC1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW291dGVySFRNTF09XCJ1c2VyIHwgdXNlcm5hbWVJbml0aWFscyA6ICdhZGYtcGVvcGxlLWNsb3VkLXBpYydcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWRmLXBlb3BsZS1sYWJlbC1uYW1lXCI+IHt7IHVzZXIgfCBmdWxsTmFtZSA6IHRydWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub1Jlc3VsdHM+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWFyY2hVc2VyQ3RybC5oYXNFcnJvcignc2VhcmNoVHlwaW5nRXJyb3InKSAmJiAhc2VhcmNoTG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXBlb3BsZS1jbG91ZC1vcHRpb24tbm90LWFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImFkZi1wZW9wbGUtY2xvdWQtbm8tcmVzdWx0c1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj4ge3sgJ0FERl9DTE9VRF9VU0VSUy5FUlJPUi5OT1RfRk9VTkQnIHwgdHJhbnNsYXRlIDogeyB1c2VyTmFtZTogc2VhcmNoZWRWYWx1ZSB9IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgPG1hdC1wcm9ncmVzcy1iYXIgKm5nSWY9XCJ2YWxpZGF0aW9uTG9hZGluZ1wiIG1vZGU9XCJpbmRldGVybWluYXRlXCIgLz5cblxuICAgIDxkaXYgY2xhc3M9XCJhZGYtZXJyb3ItY29udGFpbmVyIGFkZi1lcnJvci1tZXNzYWdlcy1jb250YWluZXJcIiAqbmdJZj1cInNob3dFcnJvcnNcIj5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImhhc1ByZXNlbGVjdEVycm9yKCkgJiYgIWlzVmFsaWRhdGlvbkxvYWRpbmcoKVwiIFtAdHJhbnNpdGlvbk1lc3NhZ2VzXT1cInN1YnNjcmlwdEFuaW1hdGlvblN0YXRlXCIgY2xhc3M9XCJhZGYtZXJyb3JcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFkZi1lcnJvci1pY29uXCI+ZXJyb3Jfb3V0bGluZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWVycm9yLXRleHRcIj57eyAnQURGX0NMT1VEX1VTRVJTLkVSUk9SLk5PVF9GT1VORCcgfCB0cmFuc2xhdGUgOiB7IHVzZXJOYW1lOiB2YWxpZGF0ZVVzZXJzTWVzc2FnZSB9IH19PC9kaXY+XG4gICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwic2VhcmNoVXNlckN0cmwuaGFzRXJyb3IoJ3BhdHRlcm4nKVwiIFtAdHJhbnNpdGlvbk1lc3NhZ2VzXT1cInN1YnNjcmlwdEFuaW1hdGlvblN0YXRlXCIgY2xhc3M9XCJhZGYtZXJyb3JcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFkZi1lcnJvci1pY29uXCI+ZXJyb3Jfb3V0bGluZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWVycm9yLXRleHRcIj57eyAnQURGX0NMT1VEX1BFT1BMRV9HUk9VUFMuRVJST1IuSU5WQUxJRF9QQVRURVJOJyB8IHRyYW5zbGF0ZSA6IHsgcGF0dGVybjogZ2V0VmFsaWRhdGlvblBhdHRlcm4oKSB9IH19PC9kaXY+XG4gICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwic2VhcmNoVXNlckN0cmwuaGFzRXJyb3IoJ21heGxlbmd0aCcpXCIgW0B0cmFuc2l0aW9uTWVzc2FnZXNdPVwic3Vic2NyaXB0QW5pbWF0aW9uU3RhdGVcIiBjbGFzcz1cImFkZi1lcnJvclwiPlxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiYWRmLWVycm9yLWljb25cIj5lcnJvcl9vdXRsaW5lPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZXJyb3ItdGV4dFwiPlxuICAgICAgICAgICAgICAgIHt7ICdBREZfQ0xPVURfUEVPUExFX0dST1VQUy5FUlJPUi5JTlZBTElEX01BWF9MRU5HVEgnIHwgdHJhbnNsYXRlIDogeyByZXF1aXJlZExlbmd0aDogZ2V0VmFsaWRhdGlvbk1heExlbmd0aCgpIH0gfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cInNlYXJjaFVzZXJDdHJsLmhhc0Vycm9yKCdtaW5sZW5ndGgnKVwiIFtAdHJhbnNpdGlvbk1lc3NhZ2VzXT1cInN1YnNjcmlwdEFuaW1hdGlvblN0YXRlXCIgY2xhc3M9XCJhZGYtZXJyb3JcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFkZi1lcnJvci1pY29uXCI+ZXJyb3Jfb3V0bGluZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWVycm9yLXRleHRcIj5cbiAgICAgICAgICAgICAgICB7eyAnQURGX0NMT1VEX1BFT1BMRV9HUk9VUFMuRVJST1IuSU5WQUxJRF9NSU5fTEVOR1RIJyB8IHRyYW5zbGF0ZSA6IHsgcmVxdWlyZWRMZW5ndGg6IGdldFZhbGlkYXRpb25NaW5MZW5ndGgoKSB9IH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICpuZ0lmPVwiKHNlYXJjaFVzZXJDdHJsLmhhc0Vycm9yKCdyZXF1aXJlZCcpIHx8IHVzZXJDaGlwc0N0cmwuaGFzRXJyb3IoJ3JlcXVpcmVkJykpICYmIGlzRGlydHkoKVwiXG4gICAgICAgICAgICBbQHRyYW5zaXRpb25NZXNzYWdlc109XCJzdWJzY3JpcHRBbmltYXRpb25TdGF0ZVwiXG4gICAgICAgICAgICBjbGFzcz1cImFkZi1lcnJvclwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFkZi1lcnJvci1pY29uXCI+ZXJyb3Jfb3V0bGluZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWVycm9yLXRleHRcIj57eyAnQURGX0NMT1VEX1BFT1BMRV9HUk9VUFMuRVJST1IuUkVRVUlSRUQnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAqbmdJZj1cInNlYXJjaFVzZXJDdHJsLmhhc0Vycm9yKCdzZWFyY2hUeXBpbmdFcnJvcicpICYmICF0aGlzLmlzRm9jdXNlZFwiXG4gICAgICAgICAgICBbQHRyYW5zaXRpb25NZXNzYWdlc109XCJzdWJzY3JpcHRBbmltYXRpb25TdGF0ZVwiXG4gICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJpbnZhbGlkLXVzZXJzLXR5cGluZy1lcnJvclwiXG4gICAgICAgICAgICBjbGFzcz1cImFkZi1lcnJvclwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFkZi1lcnJvci1pY29uXCI+ZXJyb3Jfb3V0bGluZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWVycm9yLXRleHRcIj57eyAnQURGX0NMT1VEX1VTRVJTLkVSUk9SLk5PVF9GT1VORCcgfCB0cmFuc2xhdGUgOiB7IHVzZXJOYW1lOiBzZWFyY2hlZFZhbHVlIH0gfX08L2Rpdj5cbiAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgPC9kaXY+XG48L2Zvcm0+XG4iXX0=
498
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVvcGxlLWNsb3VkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvcGVvcGxlL2NvbXBvbmVudHMvcGVvcGxlLWNsb3VkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvcGVvcGxlL2NvbXBvbmVudHMvcGVvcGxlLWNsb3VkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFFSCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEcsT0FBTyxFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHakYsT0FBTyxFQUEwQixrQkFBa0IsRUFBbUIsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFF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O3NCQURQLEtBQUs7Z0JBT04sUUFBUTtzQkFEUCxLQUFLO2dCQVVOLGNBQWM7c0JBRGIsS0FBSztnQkFRTixhQUFhO3NCQURaLEtBQUs7Z0JBUU4saUJBQWlCO3NCQURoQixLQUFLO2dCQUtOLGFBQWE7c0JBRFosS0FBSztnQkFLTixjQUFjO3NCQURiLEtBQUs7Z0JBT04sS0FBSztzQkFESixLQUFLO2dCQU9OLFdBQVc7c0JBRFYsS0FBSztnQkFRTiwwQkFBMEI7c0JBRHpCLEtBQUs7Z0JBT04sbUJBQW1CO3NCQURsQixLQUFLO2dCQU9OLHdCQUF3QjtzQkFEdkIsS0FBSztnQkFPTixVQUFVO3NCQURULEtBQUs7Z0JBT04sbUJBQW1CO3NCQURsQixLQUFLO2dCQUtOLFVBQVU7c0JBRFQsTUFBTTtnQkFLUCxVQUFVO3NCQURULE1BQU07Z0JBS1AsWUFBWTtzQkFEWCxNQUFNO2dCQUtQLE9BQU87c0JBRE4sTUFBTTtnQkFJQyxTQUFTO3NCQURoQixTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUsIFVudHlwZWRGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDb21wb25lbnQsXG4gICAgRGVzdHJveVJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWVyZ2VNYXAsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRnVsbE5hbWVQaXBlLCBJbml0aWFsVXNlcm5hbWVQaXBlIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7IGFuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQ29tcG9uZW50U2VsZWN0aW9uTW9kZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IElkZW50aXR5VXNlck1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2lkZW50aXR5LXVzZXIubW9kZWwnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSwgTWF0Rm9ybUZpZWxkTW9kdWxlLCBTdWJzY3JpcHRTaXppbmcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7IE1hdENoaXBzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hpcHMnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBJZGVudGl0eVVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvaWRlbnRpdHktdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhZGYtY2xvdWQtcGVvcGxlJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBUcmFuc2xhdGVQaXBlLFxuICAgICAgICBNYXRJY29uTW9kdWxlLFxuICAgICAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgICAgIE1hdFByb2dyZXNzQmFyTW9kdWxlLFxuICAgICAgICBNYXRTZWxlY3RNb2R1bGUsXG4gICAgICAgIEluaXRpYWxVc2VybmFtZVBpcGUsXG4gICAgICAgIEZ1bGxOYW1lUGlwZSxcbiAgICAgICAgTWF0QXV0b2NvbXBsZXRlTW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBNYXRDaGlwc01vZHVsZSxcbiAgICAgICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgICAgIE1hdFRvb2x0aXBNb2R1bGVcbiAgICBdLFxuICAgIHByb3ZpZGVyczogW0Z1bGxOYW1lUGlwZV0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Blb3BsZS1jbG91ZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vcGVvcGxlLWNsb3VkLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICB0cmlnZ2VyKCd0cmFuc2l0aW9uTWVzc2FnZXMnLCBbXG4gICAgICAgICAgICBzdGF0ZSgnZW50ZXInLCBzdHlsZSh7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCUpJyB9KSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCd2b2lkID0+IGVudGVyJywgW3N0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtMTAwJSknIH0pLCBhbmltYXRlKCczMDBtcyBjdWJpYy1iZXppZXIoMC41NSwgMCwgMC41NSwgMC4yKScpXSlcbiAgICAgICAgXSlcbiAgICBdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgUGVvcGxlQ2xvdWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgLyoqIExhYmVsIGZvciB0aGUgdXNlciBzZWxlY3Rpb24gY29tcG9uZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbGFiZWw6IHN0cmluZztcblxuICAgIC8qKiBOYW1lIG9mIHRoZSBhcHBsaWNhdGlvbi4gSWYgc3BlY2lmaWVkLCB0aGlzIHNob3dzIHRoZSB1c2VycyB3aG8gaGF2ZSBhY2Nlc3MgdG8gdGhlIGFwcC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFwcE5hbWU6IHN0cmluZztcblxuICAgIC8qKiBVc2VyIHNlbGVjdGlvbiBtb2RlIChzaW5nbGUvbXVsdGlwbGUpLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9kZTogQ29tcG9uZW50U2VsZWN0aW9uTW9kZSA9ICdzaW5nbGUnO1xuXG4gICAgLyoqIFJvbGUgbmFtZXMgb2YgdGhlIHVzZXJzIHRvIGJlIGxpc3RlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHJvbGVzOiBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgZmxhZyBlbmFibGVzIHRoZSB2YWxpZGF0aW9uIG9uIHRoZSBwcmVTZWxlY3RVc2VycyBwYXNzZWQgYXMgaW5wdXQuXG4gICAgICogSW4gY2FzZSB0aGUgZmxhZyBpcyB0cnVlIHRoZSBjb21wb25lbnRzIGNhbGwgdGhlIGlkZW50aXR5IHNlcnZpY2UgdG8gdmVyaWZ5IHRoZSB2YWxpZGl0eSBvZiB0aGUgaW5mb3JtYXRpb24gcGFzc2VkIGFzIGlucHV0LlxuICAgICAqIE90aGVyd2lzZSwgbm8gY2hlY2sgd2lsbCBiZSBkb25lLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdmFsaWRhdGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNob3cgdGhlIGluZm8gaW4gcmVhZG9ubHkgbW9kZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmVhZE9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIE1hcmsgdGhpcyBmaWVsZCBhcyByZXF1aXJlZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmVxdWlyZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEFycmF5IG9mIHVzZXJzIHRvIGJlIHByZS1zZWxlY3RlZC4gQWxsIHVzZXJzIGluIHRoZVxuICAgICAqIGFycmF5IGFyZSBwcmUtc2VsZWN0ZWQgaW4gbXVsdGkgc2VsZWN0aW9uIG1vZGUsIGJ1dCBvbmx5IHRoZSBmaXJzdCB1c2VyXG4gICAgICogaXMgcHJlLXNlbGVjdGVkIGluIHNpbmdsZSBzZWxlY3Rpb24gbW9kZS5cbiAgICAgKiBNYW5kYXRvcnkgcHJvcGVydGllcyBhcmU6IGlkLCBlbWFpbCwgdXNlcm5hbWVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHByZVNlbGVjdFVzZXJzOiBJZGVudGl0eVVzZXJNb2RlbFtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBvZiB1c2VycyB0byBiZSBleGNsdWRlZC5cbiAgICAgKiBNYW5kYXRvcnkgcHJvcGVydGllcyBhcmU6IGlkLCBlbWFpbCwgdXNlcm5hbWVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGV4Y2x1ZGVkVXNlcnM6IElkZW50aXR5VXNlck1vZGVsW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEFycmF5IG9mIGdyb3VwcyB0byByZXN0cmljdCB1c2VyIHNlYXJjaGVzLlxuICAgICAqIE1hbmRhdG9yeSBwcm9wZXJ0eSBpcyBncm91cCBuYW1lXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBncm91cHNSZXN0cmljdGlvbjogc3RyaW5nW10gPSBbXTtcblxuICAgIC8qKiBGb3JtQ29udHJvbCB0byBsaXN0IG9mIHVzZXJzICovXG4gICAgQElucHV0KClcbiAgICB1c2VyQ2hpcHNDdHJsOiBVbnR5cGVkRm9ybUNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKHsgdmFsdWU6ICcnLCBkaXNhYmxlZDogZmFsc2UgfSk7XG5cbiAgICAvKiogRm9ybUNvbnRyb2wgdG8gc2VhcmNoIHRoZSB1c2VyICovXG4gICAgQElucHV0KClcbiAgICBzZWFyY2hVc2VyQ3RybCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woeyB2YWx1ZTogJycsIGRpc2FibGVkOiBmYWxzZSB9KTtcblxuICAgIC8qKlxuICAgICAqIExhYmVsIHRyYW5zbGF0aW9uIGtleVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGl0bGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFBsYWNlaG9sZGVyIGZvciB0aGUgaW5wdXQgZmllbGRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBIaWRlIHRoZSBtYXRJbnB1dCBhc3NvY2lhdGVkIHdpdGggdGhlIGNoaXAgZ3JpZCB3aGVuIGEgc2luZ2xlIHVzZXIgaXMgc2VsZWN0ZWQgaW4gc2luZ2xlIHNlbGVjdGlvbiBtb2RlLlxuICAgICAqIFRoZSBpbnB1dCB3aWxsIGJlIHNob3duIGFnYWluIHdoZW4gdGhlIHVzZXIgaXMgcmVtb3ZlZCB1c2luZyB0aGUgaWNvbiBvbiB0aGUgY2hpcC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGhpZGVJbnB1dE9uU2luZ2xlU2VsZWN0aW9uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBNYXRlcmlhbCBmb3JtIGZpZWxkIGFwcGVhcmFuY2UgKGZpbGwgLyBvdXRsaW5lKVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZm9ybUZpZWxkQXBwZWFyYW5jZTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSA9ICdmaWxsJztcblxuICAgIC8qKlxuICAgICAqIE1hdGVyaWFsIGZvcm0gZmllbGQgc3Vic2NyaXB0IHNpemluZyAoZml4ZWQgLyBkeW5hbWljKVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZm9ybUZpZWxkU3Vic2NyaXB0U2l6aW5nOiBTdWJzY3JpcHRTaXppbmcgPSAnZml4ZWQnO1xuXG4gICAgLyoqXG4gICAgICogU2hvdyBlcnJvcnMgdW5kZXIgdGhlIGZvcm0gZmllbGRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dFcnJvcnM6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogU2hvdyB0aGUgZnVsbCBuYW1lIG9mIHRoZSB1c2VyIG9uIGhvdmVyIGluIHRoZSBjaGlwc1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0Z1bGxOYW1lT25Ib3ZlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBhIHVzZXIgaXMgc2VsZWN0ZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgc2VsZWN0VXNlciA9IG5ldyBFdmVudEVtaXR0ZXI8SWRlbnRpdHlVc2VyTW9kZWw+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGEgc2VsZWN0ZWQgdXNlciBpcyByZW1vdmVkIGluIG11bHRpIHNlbGVjdGlvbiBtb2RlLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlbW92ZVVzZXIgPSBuZXcgRXZlbnRFbWl0dGVyPElkZW50aXR5VXNlck1vZGVsPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBhIHVzZXIgc2VsZWN0aW9uIGNoYW5nZS4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBjaGFuZ2VkVXNlcnMgPSBuZXcgRXZlbnRFbWl0dGVyPElkZW50aXR5VXNlck1vZGVsW10+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGFuIHdhcm5pbmcgb2NjdXJzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHdhcm5pbmcgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIEBWaWV3Q2hpbGQoJ3VzZXJJbnB1dCcpXG4gICAgcHJpdmF0ZSB1c2VySW5wdXQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgICBwcml2YXRlIHNlYXJjaFVzZXJzOiBJZGVudGl0eVVzZXJNb2RlbFtdID0gW107XG5cbiAgICBzZWxlY3RlZFVzZXJzOiBJZGVudGl0eVVzZXJNb2RlbFtdID0gW107XG4gICAgaW52YWxpZFVzZXJzOiBJZGVudGl0eVVzZXJNb2RlbFtdID0gW107XG5cbiAgICBzZWFyY2hVc2VycyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElkZW50aXR5VXNlck1vZGVsW10+KHRoaXMuc2VhcmNoVXNlcnMpO1xuICAgIHN1YnNjcmlwdEFuaW1hdGlvblN0YXRlOiBzdHJpbmcgPSAnZW50ZXInO1xuICAgIGlzRm9jdXNlZDogYm9vbGVhbjtcbiAgICB0b3VjaGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICB2YWxpZGF0ZVVzZXJzTWVzc2FnZTogc3RyaW5nO1xuICAgIHNlYXJjaGVkVmFsdWUgPSAnJztcblxuICAgIHZhbGlkYXRpb25Mb2FkaW5nID0gZmFsc2U7XG4gICAgc2VhcmNoTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgdHlwaW5nVW5pcXVlVmFsdWVOb3RFbXB0eSQ6IE9ic2VydmFibGU8c3RyaW5nPjtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaWRlbnRpdHlVc2VyU2VydmljZTogSWRlbnRpdHlVc2VyU2VydmljZSkge31cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRTZWFyY2goKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmhhc1ByZXNlbGVjdGVkVXNlcnNDaGFuZ2VkKGNoYW5nZXMpIHx8IHRoaXMuaGFzTW9kZUNoYW5nZWQoY2hhbmdlcykgfHwgdGhpcy5pc1ZhbGlkYXRpb25DaGFuZ2VkKGNoYW5nZXMpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNQcmVTZWxlY3RVc2VycygpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkUHJlU2VsZWN0VXNlcnMoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5oYXNQcmVzZWxlY3RlZFVzZXJzQ2xlYXJlZChjaGFuZ2VzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VycyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuaW52YWxpZFVzZXJzID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5pc1ZhbGlkYXRpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmludmFsaWRVc2VycyA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNSZWFkb25seSgpICYmIHRoaXMuc2VhcmNoVXNlckN0cmwuZW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hVc2VyQ3RybC5kaXNhYmxlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNSZWFkb25seSgpICYmIHRoaXMuc2VhcmNoVXNlckN0cmwuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVXNlckN0cmwuZW5hYmxlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmhpZGVJbnB1dE9uU2luZ2xlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFVzZXJzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLmlzU2luZ2xlTW9kZSgpICYmIHRoaXMudXNlcklucHV0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VySW5wdXQubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0U2VhcmNoKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVTdHJlYW0oKTtcbiAgICAgICAgdGhpcy50eXBpbmdVbmlxdWVWYWx1ZU5vdEVtcHR5JFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKChuYW1lOiBzdHJpbmcpID0+IG5hbWUubGVuZ3RoID49IDEpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgobmFtZTogc3RyaW5nKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlkZW50aXR5VXNlclNlcnZpY2Uuc2VhcmNoKG5hbWUsIHsgcm9sZXM6IHRoaXMucm9sZXMsIHdpdGhpbkFwcGxpY2F0aW9uOiB0aGlzLmFwcE5hbWUsIGdyb3VwczogdGhpcy5ncm91cHNSZXN0cmljdGlvbiB9KVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAoKHVzZXJzOiBJZGVudGl0eVVzZXJNb2RlbFtdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXRTZWFyY2hVc2VycygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaExvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJzO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGZpbHRlcigodXNlcikgPT4gIXRoaXMuaXNVc2VyQWxyZWFkeVNlbGVjdGVkKHVzZXIpICYmICF0aGlzLmlzRXhjbHVkZWRVc2VyKHVzZXIpKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgodXNlcjogSWRlbnRpdHlVc2VyTW9kZWwpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFVzZXJzLnB1c2godXNlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hVc2VycyQubmV4dCh0aGlzLnNlYXJjaFVzZXJzKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZVN0cmVhbSgpIHtcbiAgICAgICAgY29uc3QgdHlwaW5nVmFsdWVGcm9tQ29udHJvbCQgPSB0aGlzLnNlYXJjaFVzZXJDdHJsLnZhbHVlQ2hhbmdlcztcblxuICAgICAgICBjb25zdCB0eXBpbmdWYWx1ZVR5cGVTdGluZyQgPSB0eXBpbmdWYWx1ZUZyb21Db250cm9sJC5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoTG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHR5cGluZ1ZhbHVlSGFuZGxlRXJyb3JNZXNzYWdlJCA9IHR5cGluZ1ZhbHVlVHlwZVN0aW5nJC5waXBlKFxuICAgICAgICAgICAgdGFwKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VHlwaW5nRXJyb3IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHR5cGluZ1ZhbHVlRGVib3VuY2VkVW5pcXVlJCA9IHR5cGluZ1ZhbHVlSGFuZGxlRXJyb3JNZXNzYWdlJC5waXBlKGRlYm91bmNlVGltZSg1MDApLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcblxuICAgICAgICB0aGlzLnR5cGluZ1VuaXF1ZVZhbHVlTm90RW1wdHkkID0gdHlwaW5nVmFsdWVEZWJvdW5jZWRVbmlxdWUkLnBpcGUoXG4gICAgICAgICAgICB0YXAoKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUudHJpbSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoZWRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoVXNlckN0cmwubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hVc2VyQ3RybC5tYXJrQXNVbnRvdWNoZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLnJlc2V0U2VhcmNoVXNlcnMoKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzVmFsaWRhdGlvbkVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlID09PSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNVc2VyQWxyZWFkeVNlbGVjdGVkKHNlYXJjaFVzZXI6IElkZW50aXR5VXNlck1vZGVsKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVXNlcnMgJiYgdGhpcy5zZWxlY3RlZFVzZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc2VsZWN0ZWRVc2Vycy5maW5kKChzZWxlY3RlZFVzZXIpID0+IHRoaXMuZXF1YWxzVXNlcnMoc2VsZWN0ZWRVc2VyLCBzZWFyY2hVc2VyKSk7XG5cbiAgICAgICAgICAgIHJldHVybiAhIXJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0V4Y2x1ZGVkVXNlcihzZWFyY2hVc2VyOiBJZGVudGl0eVVzZXJNb2RlbCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5leGNsdWRlZFVzZXJzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gISF0aGlzLmV4Y2x1ZGVkVXNlcnMuZmluZCgoZXhjbHVkZWRVc2VyKSA9PiB0aGlzLmVxdWFsc1VzZXJzKGV4Y2x1ZGVkVXNlciwgc2VhcmNoVXNlcikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGxvYWRQcmVTZWxlY3RVc2VycygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJzID0gW107XG5cbiAgICAgICAgaWYgKHRoaXMuaXNTaW5nbGVNb2RlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VycyA9IFt0aGlzLnByZVNlbGVjdFVzZXJzWzBdXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VycyA9IHRoaXMucmVtb3ZlRHVwbGljYXRlZFVzZXJzKHRoaXMucHJlU2VsZWN0VXNlcnMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXNlckNoaXBzQ3RybC5zZXRWYWx1ZSh0aGlzLnNlbGVjdGVkVXNlcnNbMF0udXNlcm5hbWUpO1xuICAgICAgICBpZiAodGhpcy5pc1ZhbGlkYXRpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy52YWxpZGF0ZVByZXNlbGVjdFVzZXJzKCk7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25Mb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFByZXNlbGVjdGVkVXNlcnMoKTogSWRlbnRpdHlVc2VyTW9kZWxbXSB7XG4gICAgICAgIGlmICh0aGlzLmlzU2luZ2xlTW9kZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gW3RoaXMucHJlU2VsZWN0VXNlcnNbMF1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVtb3ZlRHVwbGljYXRlZFVzZXJzKHRoaXMucHJlU2VsZWN0VXNlcnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZVByZXNlbGVjdFVzZXJzKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHRoaXMuaW52YWxpZFVzZXJzID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCB1c2VyIG9mIHRoaXMuZ2V0UHJlc2VsZWN0ZWRVc2VycygpKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaWRlbnRpdHlVc2VyU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNlYXJjaCh1c2VyLnVzZXJuYW1lLCB7IHJvbGVzOiB0aGlzLnJvbGVzLCB3aXRoaW5BcHBsaWNhdGlvbjogdGhpcy5hcHBOYW1lLCBncm91cHM6IHRoaXMuZ3JvdXBzUmVzdHJpY3Rpb24gfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC50b1Byb21pc2UoKVxuICAgICAgICAgICAgICAgIClbMF07XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZXF1YWxzVXNlcnModXNlciwgdmFsaWRhdGlvblJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkVXNlcnMucHVzaCh1c2VyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuaW52YWxpZFVzZXJzLnB1c2godXNlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNoZWNrUHJlc2VsZWN0VmFsaWRhdGlvbkVycm9ycygpO1xuICAgIH1cblxuICAgIGVxdWFsc1VzZXJzKHByZXNlbGVjdGVkVXNlcjogSWRlbnRpdHlVc2VyTW9kZWwsIGlkZW50aXR5VXNlcjogSWRlbnRpdHlVc2VyTW9kZWwpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHByZXNlbGVjdGVkVXNlciAmJiBpZGVudGl0eVVzZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHVuaXF1ZVByb3BlcnR5SWRlbnRpZmllcnMgPSBbJ2lkJywgJ3VzZXJuYW1lJywgJ2VtYWlsJ107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIE9iamVjdC5rZXlzKHByZXNlbGVjdGVkVXNlcikpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJlc2VsZWN0ZWRVc2VyW3Byb3BlcnR5XSAhPT0gdW5kZWZpbmVkICYmIHVuaXF1ZVByb3BlcnR5SWRlbnRpZmllcnMuaW5jbHVkZXMocHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmVzZWxlY3RlZFVzZXJbcHJvcGVydHldID09PSBpZGVudGl0eVVzZXJbcHJvcGVydHldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmVtb3ZlRHVwbGljYXRlZFVzZXJzKHVzZXJzOiBJZGVudGl0eVVzZXJNb2RlbFtdKTogSWRlbnRpdHlVc2VyTW9kZWxbXSB7XG4gICAgICAgIHJldHVybiB1c2Vycy5maWx0ZXIoXG4gICAgICAgICAgICAodXNlciwgaW5kZXgsIHNlbGYpID0+XG4gICAgICAgICAgICAgICAgaW5kZXggPT09IHNlbGYuZmluZEluZGV4KChhdXhVc2VyKSA9PiB1c2VyLmlkID09PSBhdXhVc2VyLmlkICYmIHVzZXIudXNlcm5hbWUgPT09IGF1eFVzZXIudXNlcm5hbWUgJiYgdXNlci5lbWFpbCA9PT0gYXV4VXNlci5lbWFpbClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBvblNlbGVjdCh1c2VyOiBJZGVudGl0eVVzZXJNb2RlbCk6IHZvaWQge1xuICAgICAgICBpZiAodXNlcikge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RVc2VyLmVtaXQodXNlcik7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmlzTXVsdGlwbGVNb2RlKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNVc2VyQWxyZWFkeVNlbGVjdGVkKHVzZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVc2Vycy5wdXNoKHVzZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkVXNlcnMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVXNlcnMgPSBbdXNlcl07XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGlkZUlucHV0T25TaW5nbGVTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VySW5wdXQubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy51c2VySW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hVc2VyQ3RybC5zZXRWYWx1ZSgnJyk7XG4gICAgICAgICAgICB0aGlzLnVzZXJDaGlwc0NvbnRyb2xWYWx1ZSh0aGlzLnNlbGVjdGVkVXNlcnNbMF0udXNlcm5hbWUpO1xuXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRVc2Vycy5lbWl0KHRoaXMuc2VsZWN0ZWRVc2Vycyk7XG4gICAgICAgICAgICB0aGlzLnJlc2V0U2VhcmNoVXNlcnMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUmVtb3ZlKHVzZXJUb1JlbW92ZTogSWRlbnRpdHlVc2VyTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW1vdmVVc2VyLmVtaXQodXNlclRvUmVtb3ZlKTtcbiAgICAgICAgdGhpcy5yZW1vdmVVc2VyRnJvbVNlbGVjdGVkKHVzZXJUb1JlbW92ZSk7XG4gICAgICAgIHRoaXMuY2hhbmdlZFVzZXJzLmVtaXQodGhpcy5zZWxlY3RlZFVzZXJzKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRVc2Vycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMudXNlckNoaXBzQ29udHJvbFZhbHVlKCcnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmhpZGVJbnB1dE9uU2luZ2xlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VySW5wdXQubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudXNlckNoaXBzQ29udHJvbFZhbHVlKHRoaXMuc2VsZWN0ZWRVc2Vyc1swXS51c2VybmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWFyY2hVc2VyQ3RybC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICB0aGlzLnNlYXJjaFVzZXJDdHJsLm1hcmtBc1RvdWNoZWQoKTtcblxuICAgICAgICBpZiAodGhpcy5pc1ZhbGlkYXRpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVXNlckZyb21WYWxpZGF0aW9uKHVzZXJUb1JlbW92ZSk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrUHJlc2VsZWN0VmFsaWRhdGlvbkVycm9ycygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja1ByZXNlbGVjdFZhbGlkYXRpb25FcnJvcnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW52YWxpZFVzZXJzID0gdGhpcy5yZW1vdmVEdXBsaWNhdGVkVXNlcnModGhpcy5pbnZhbGlkVXNlcnMpO1xuXG4gICAgICAgIGlmICh0aGlzLmludmFsaWRVc2Vycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlSW52YWxpZFVzZXJzTWVzc2FnZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy53YXJuaW5nLmVtaXQoe1xuICAgICAgICAgICAgbWVzc2FnZTogJ0lOVkFMSURfUFJFU0VMRUNURURfVVNFUlMnLFxuICAgICAgICAgICAgdXNlcnM6IHRoaXMuaW52YWxpZFVzZXJzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlVXNlckZyb21TZWxlY3RlZCh7IGlkLCB1c2VybmFtZSwgZW1haWwgfTogSWRlbnRpdHlVc2VyTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXhUb1JlbW92ZSA9IHRoaXMuc2VsZWN0ZWRVc2Vycy5maW5kSW5kZXgoKHVzZXIpID0+IHVzZXIuaWQgPT09IGlkICYmIHVzZXIudXNlcm5hbWUgPT09IHVzZXJuYW1lICYmIHVzZXIuZW1haWwgPT09IGVtYWlsKTtcblxuICAgICAgICBpZiAoaW5kZXhUb1JlbW92ZSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVc2Vycy5zcGxpY2UoaW5kZXhUb1JlbW92ZSwgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZVVzZXJGcm9tVmFsaWRhdGlvbih7IGlkLCB1c2VybmFtZSwgZW1haWwgfTogSWRlbnRpdHlVc2VyTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXhUb1JlbW92ZSA9IHRoaXMuaW52YWxpZFVzZXJzLmZpbmRJbmRleCgodXNlcikgPT4gdXNlci5pZCA9PT0gaWQgJiYgdXNlci51c2VybmFtZSA9PT0gdXNlcm5hbWUgJiYgdXNlci5lbWFpbCA9PT0gZW1haWwpO1xuXG4gICAgICAgIGlmIChpbmRleFRvUmVtb3ZlICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5pbnZhbGlkVXNlcnMuc3BsaWNlKGluZGV4VG9SZW1vdmUsIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUludmFsaWRVc2Vyc01lc3NhZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVVc2Vyc01lc3NhZ2UgPSAnJztcblxuICAgICAgICB0aGlzLmludmFsaWRVc2Vycy5mb3JFYWNoKChpbnZhbGlkVXNlciwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdGhpcy5pbnZhbGlkVXNlcnMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVVc2Vyc01lc3NhZ2UgKz0gYCR7aW52YWxpZFVzZXIudXNlcm5hbWV9IGA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVVc2Vyc01lc3NhZ2UgKz0gYCR7aW52YWxpZFVzZXIudXNlcm5hbWV9LCBgO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBoYXNQcmVzZWxlY3RFcnJvcigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW52YWxpZFVzZXJzICYmIHRoaXMuaW52YWxpZFVzZXJzLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgZ2V0RGlzcGxheU5hbWUodXNlcik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBGdWxsTmFtZVBpcGUucHJvdG90eXBlLnRyYW5zZm9ybSh1c2VyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTXVsdGlwbGVNb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlID09PSAnbXVsdGlwbGUnO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNTaW5nbGVNb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlID09PSAnc2luZ2xlJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzU2luZ2xlU2VsZWN0aW9uUmVhZG9ubHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU2luZ2xlTW9kZSgpICYmIHRoaXMuc2VsZWN0ZWRVc2Vycy5sZW5ndGggPT09IDEgJiYgdGhpcy5zZWxlY3RlZFVzZXJzWzBdLnJlYWRvbmx5ID09PSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFzUHJlU2VsZWN0VXNlcnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnByZVNlbGVjdFVzZXJzICYmIHRoaXMucHJlU2VsZWN0VXNlcnMubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc01vZGVDaGFuZ2VkKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGNoYW5nZXM/Lm1vZGUgJiYgY2hhbmdlcy5tb2RlLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlcy5tb2RlLnByZXZpb3VzVmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1ZhbGlkYXRpb25DaGFuZ2VkKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGNoYW5nZXM/LnZhbGlkYXRlICYmIGNoYW5nZXMudmFsaWRhdGUuY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzLnZhbGlkYXRlLnByZXZpb3VzVmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYXNQcmVzZWxlY3RlZFVzZXJzQ2hhbmdlZChjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBjaGFuZ2VzPy5wcmVTZWxlY3RVc2VycyAmJiBjaGFuZ2VzLnByZVNlbGVjdFVzZXJzLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlcy5wcmVTZWxlY3RVc2Vycy5wcmV2aW91c1ZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFzUHJlc2VsZWN0ZWRVc2Vyc0NsZWFyZWQoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gY2hhbmdlcz8ucHJlU2VsZWN0VXNlcnM/LmN1cnJlbnRWYWx1ZT8ubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRTZWFyY2hVc2VycygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWFyY2hVc2VycyA9IFtdO1xuICAgICAgICB0aGlzLnNlYXJjaFVzZXJzJC5uZXh0KHRoaXMuc2VhcmNoVXNlcnMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VHlwaW5nRXJyb3IoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VhcmNoVXNlckN0cmwuc2V0RXJyb3JzKHtcbiAgICAgICAgICAgIHNlYXJjaFR5cGluZ0Vycm9yOiB0cnVlLFxuICAgICAgICAgICAgLi4udGhpcy5zZWFyY2hVc2VyQ3RybC5lcnJvcnNcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1c2VyQ2hpcHNDb250cm9sVmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnVzZXJDaGlwc0N0cmwuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLnVzZXJDaGlwc0N0cmwubWFya0FzRGlydHkoKTtcbiAgICAgICAgdGhpcy51c2VyQ2hpcHNDdHJsLm1hcmtBc1RvdWNoZWQoKTtcbiAgICB9XG5cbiAgICBnZXRTZWxlY3RlZFVzZXJzKCk6IElkZW50aXR5VXNlck1vZGVsW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFVzZXJzO1xuICAgIH1cblxuICAgIGlzUmVhZG9ubHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRPbmx5IHx8IHRoaXMuaXNTaW5nbGVTZWxlY3Rpb25SZWFkb25seSgpO1xuICAgIH1cblxuICAgIGlzVmFsaWRhdGlvbkxvYWRpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWRhdGlvbkVuYWJsZWQoKSAmJiB0aGlzLnZhbGlkYXRpb25Mb2FkaW5nO1xuICAgIH1cblxuICAgIG1hcmtBc1RvdWNoZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudG91Y2hlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaXNUb3VjaGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50b3VjaGVkO1xuICAgIH1cblxuICAgIGlzU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVXNlcnMgJiYgISF0aGlzLnNlbGVjdGVkVXNlcnMubGVuZ3RoO1xuICAgIH1cblxuICAgIGlzRGlydHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVG91Y2hlZCgpICYmICF0aGlzLmlzU2VsZWN0ZWQoKTtcbiAgICB9XG5cbiAgICBzZXRGb2N1cyhpc0ZvY3VzZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5pc0ZvY3VzZWQgPSBpc0ZvY3VzZWQ7XG4gICAgfVxuXG4gICAgaGFzRXJyb3IoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuc2VhcmNoVXNlckN0cmwuZXJyb3JzO1xuICAgIH1cblxuICAgIGdldFZhbGlkYXRpb25QYXR0ZXJuKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlYXJjaFVzZXJDdHJsLmVycm9ycy5wYXR0ZXJuLnJlcXVpcmVkUGF0dGVybjtcbiAgICB9XG5cbiAgICBnZXRWYWxpZGF0aW9uTWF4TGVuZ3RoKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlYXJjaFVzZXJDdHJsLmVycm9ycy5tYXhsZW5ndGgucmVxdWlyZWRMZW5ndGg7XG4gICAgfVxuXG4gICAgZ2V0VmFsaWRhdGlvbk1pbkxlbmd0aCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2hVc2VyQ3RybC5lcnJvcnMubWlubGVuZ3RoLnJlcXVpcmVkTGVuZ3RoO1xuICAgIH1cbn1cbiIsIjxmb3JtPlxuICAgIDxtYXQtZm9ybS1maWVsZFxuICAgICAgICBbc3Vic2NyaXB0U2l6aW5nXT1cImZvcm1GaWVsZFN1YnNjcmlwdFNpemluZ1wiXG4gICAgICAgIFtmbG9hdExhYmVsXT1cIidhdXRvJ1wiXG4gICAgICAgIGNsYXNzPVwiYWRmLXBlb3BsZS1jbG91ZCBhZGYtZm9ybS1maWVsZC1pbnB1dFwiXG4gICAgICAgIFtjbGFzcy5hZGYtaW52YWxpZF09XCJoYXNFcnJvcigpICYmIGlzRGlydHkoKVwiXG4gICAgPlxuICAgICAgICA8bWF0LWxhYmVsICpuZ0lmPVwiIXRpdGxlXCI+XG4gICAgICAgICAgICA8c3Bhbj57e2xhYmVsfX08L3NwYW4+XG4gICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8bWF0LWxhYmVsICpuZ0lmPVwidGl0bGVcIj57eyB0aXRsZSB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuXG4gICAgICAgIDxtYXQtY2hpcC1ncmlkIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiICN1c2VyTXVsdGlwbGVDaGlwTGlzdCBkYXRhLWF1dG9tYXRpb24taWQ9XCJhZGYtY2xvdWQtcGVvcGxlLWNoaXAtbGlzdFwiPlxuICAgICAgICAgICAgPG1hdC1jaGlwLXJvd1xuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB1c2VyIG9mIHNlbGVjdGVkVXNlcnNcIlxuICAgICAgICAgICAgICAgIFtyZW1vdmFibGVdPVwiIXVzZXIucmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYWRmLXBlb3BsZS1jbG91ZC1jaGlwLScgKyB1c2VyLnVzZXJuYW1lXCJcbiAgICAgICAgICAgICAgICAocmVtb3ZlZCk9XCJvblJlbW92ZSh1c2VyKVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHkoKSB8fCBpc1ZhbGlkYXRpb25Mb2FkaW5nKClcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgKHVzZXIucmVhZG9ubHkgPyAnQURGX0NMT1VEX0dST1VQUy5NQU5EQVRPUlknIDogJycpIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJzaG93RnVsbE5hbWVPbkhvdmVyID8gKHVzZXIgfCBmdWxsTmFtZSA6IHRydWUpIDogdXNlci5lbWFpbFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgdXNlciB8IGZ1bGxOYW1lIH19XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgICAgICAgIG1hdENoaXBSZW1vdmVcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhKHVzZXIucmVhZG9ubHkgfHwgcmVhZE9ubHkpXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhZGYtcGVvcGxlLWNsb3VkLWNoaXAtcmVtb3ZlLWljb24tJyArIHVzZXIudXNlcm5hbWVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWNoaXAtcm93PlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seSgpXCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwic2VhcmNoVXNlckN0cmxcIlxuICAgICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiXG4gICAgICAgICAgICAgICAgW21hdENoaXBJbnB1dEZvcl09XCJ1c2VyTXVsdGlwbGVDaGlwTGlzdFwiXG4gICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRvbmx5KCkgfHwgaXNWYWxpZGF0aW9uTG9hZGluZygpXCJcbiAgICAgICAgICAgICAgICAoZm9jdXMpPVwic2V0Rm9jdXModHJ1ZSlcIlxuICAgICAgICAgICAgICAgIChibHVyKT1cInNldEZvY3VzKGZhbHNlKTsgbWFya0FzVG91Y2hlZCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1jbG91ZC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwiYWRmLXBlb3BsZS1jbG91ZC1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgICAgICN1c2VySW5wdXRcbiAgICAgICAgICAgIC8+XG4gICAgICAgIDwvbWF0LWNoaXAtZ3JpZD5cblxuICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZVxuICAgICAgICAgICAgYXV0b0FjdGl2ZUZpcnN0T3B0aW9uXG4gICAgICAgICAgICBjbGFzcz1cImFkZi1wZW9wbGUtY2xvdWQtbGlzdFwiXG4gICAgICAgICAgICAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiXG4gICAgICAgICAgICAob3B0aW9uU2VsZWN0ZWQpPVwib25TZWxlY3QoJGV2ZW50Lm9wdGlvbi52YWx1ZSlcIlxuICAgICAgICAgICAgW2Rpc3BsYXlXaXRoXT1cImdldERpc3BsYXlOYW1lXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihzZWFyY2hVc2VycyQgfCBhc3luYyk/Lmxlbmd0aDsgZWxzZSBub1Jlc3VsdHNcIj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdXNlciBvZiBzZWFyY2hVc2VycyQgfCBhc3luYzsgbGV0IGkgPSBpbmRleFwiIFt2YWx1ZV09XCJ1c2VyXCIgY2xhc3M9XCJhZGYtcGVvcGxlLWNsb3VkLW9wdGlvbi1hY3RpdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1wZW9wbGUtY2xvdWQtcm93XCIgaWQ9XCJhZGYtcGVvcGxlLWNsb3VkLXVzZXIte3sgdXNlci51c2VybmFtZSB9fVwiIGRhdGEtYXV0b21hdGlvbi1pZD1cImFkZi1wZW9wbGUtY2xvdWQtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtvdXRlckhUTUxdPVwidXNlciB8IHVzZXJuYW1lSW5pdGlhbHMgOiAnYWRmLXBlb3BsZS1jbG91ZC1waWMnXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFkZi1wZW9wbGUtbGFiZWwtbmFtZVwiPiB7eyB1c2VyIHwgZnVsbE5hbWUgOiB0cnVlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9SZXN1bHRzPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2VhcmNoVXNlckN0cmwuaGFzRXJyb3IoJ3NlYXJjaFR5cGluZ0Vycm9yJykgJiYgIXNlYXJjaExvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1wZW9wbGUtY2xvdWQtb3B0aW9uLW5vdC1hY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJhZGYtcGVvcGxlLWNsb3VkLW5vLXJlc3VsdHNcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+IHt7ICdBREZfQ0xPVURfVVNFUlMuRVJST1IuTk9UX0ZPVU5EJyB8IHRyYW5zbGF0ZSA6IHsgdXNlck5hbWU6IHNlYXJjaGVkVmFsdWUgfSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgIDxtYXQtcHJvZ3Jlc3MtYmFyICpuZ0lmPVwidmFsaWRhdGlvbkxvYWRpbmdcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiIC8+XG5cbiAgICA8ZGl2IGNsYXNzPVwiYWRmLWVycm9yLWNvbnRhaW5lciBhZGYtZXJyb3ItbWVzc2FnZXMtY29udGFpbmVyXCIgKm5nSWY9XCJzaG93RXJyb3JzXCI+XG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJoYXNQcmVzZWxlY3RFcnJvcigpICYmICFpc1ZhbGlkYXRpb25Mb2FkaW5nKClcIiBbQHRyYW5zaXRpb25NZXNzYWdlc109XCJzdWJzY3JpcHRBbmltYXRpb25TdGF0ZVwiIGNsYXNzPVwiYWRmLWVycm9yXCI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJhZGYtZXJyb3ItaWNvblwiPmVycm9yX291dGxpbmU8L21hdC1pY29uPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1lcnJvci10ZXh0XCI+e3sgJ0FERl9DTE9VRF9VU0VSUy5FUlJPUi5OT1RfRk9VTkQnIHwgdHJhbnNsYXRlIDogeyB1c2VyTmFtZTogdmFsaWRhdGVVc2Vyc01lc3NhZ2UgfSB9fTwvZGl2PlxuICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cInNlYXJjaFVzZXJDdHJsLmhhc0Vycm9yKCdwYXR0ZXJuJylcIiBbQHRyYW5zaXRpb25NZXNzYWdlc109XCJzdWJzY3JpcHRBbmltYXRpb25TdGF0ZVwiIGNsYXNzPVwiYWRmLWVycm9yXCI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJhZGYtZXJyb3ItaWNvblwiPmVycm9yX291dGxpbmU8L21hdC1pY29uPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1lcnJvci10ZXh0XCI+e3sgJ0FERl9DTE9VRF9QRU9QTEVfR1JPVVBTLkVSUk9SLklOVkFMSURfUEFUVEVSTicgfCB0cmFuc2xhdGUgOiB7IHBhdHRlcm46IGdldFZhbGlkYXRpb25QYXR0ZXJuKCkgfSB9fTwvZGl2PlxuICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cInNlYXJjaFVzZXJDdHJsLmhhc0Vycm9yKCdtYXhsZW5ndGgnKVwiIFtAdHJhbnNpdGlvbk1lc3NhZ2VzXT1cInN1YnNjcmlwdEFuaW1hdGlvblN0YXRlXCIgY2xhc3M9XCJhZGYtZXJyb3JcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFkZi1lcnJvci1pY29uXCI+ZXJyb3Jfb3V0bGluZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWVycm9yLXRleHRcIj5cbiAgICAgICAgICAgICAgICB7eyAnQURGX0NMT1VEX1BFT1BMRV9HUk9VUFMuRVJST1IuSU5WQUxJRF9NQVhfTEVOR1RIJyB8IHRyYW5zbGF0ZSA6IHsgcmVxdWlyZWRMZW5ndGg6IGdldFZhbGlkYXRpb25NYXhMZW5ndGgoKSB9IH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJzZWFyY2hVc2VyQ3RybC5oYXNFcnJvcignbWlubGVuZ3RoJylcIiBbQHRyYW5zaXRpb25NZXNzYWdlc109XCJzdWJzY3JpcHRBbmltYXRpb25TdGF0ZVwiIGNsYXNzPVwiYWRmLWVycm9yXCI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJhZGYtZXJyb3ItaWNvblwiPmVycm9yX291dGxpbmU8L21hdC1pY29uPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1lcnJvci10ZXh0XCI+XG4gICAgICAgICAgICAgICAge3sgJ0FERl9DTE9VRF9QRU9QTEVfR1JPVVBTLkVSUk9SLklOVkFMSURfTUlOX0xFTkdUSCcgfCB0cmFuc2xhdGUgOiB7IHJlcXVpcmVkTGVuZ3RoOiBnZXRWYWxpZGF0aW9uTWluTGVuZ3RoKCkgfSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAqbmdJZj1cIihzZWFyY2hVc2VyQ3RybC5oYXNFcnJvcigncmVxdWlyZWQnKSB8fCB1c2VyQ2hpcHNDdHJsLmhhc0Vycm9yKCdyZXF1aXJlZCcpKSAmJiBpc0RpcnR5KClcIlxuICAgICAgICAgICAgW0B0cmFuc2l0aW9uTWVzc2FnZXNdPVwic3Vic2NyaXB0QW5pbWF0aW9uU3RhdGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJhZGYtZXJyb3JcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJhZGYtZXJyb3ItaWNvblwiPmVycm9yX291dGxpbmU8L21hdC1pY29uPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1lcnJvci10ZXh0XCI+e3sgJ0FERl9DTE9VRF9QRU9QTEVfR1JPVVBTLkVSUk9SLlJFUVVJUkVEJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgKm5nSWY9XCJzZWFyY2hVc2VyQ3RybC5oYXNFcnJvcignc2VhcmNoVHlwaW5nRXJyb3InKSAmJiAhdGhpcy5pc0ZvY3VzZWRcIlxuICAgICAgICAgICAgW0B0cmFuc2l0aW9uTWVzc2FnZXNdPVwic3Vic2NyaXB0QW5pbWF0aW9uU3RhdGVcIlxuICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwiaW52YWxpZC11c2Vycy10eXBpbmctZXJyb3JcIlxuICAgICAgICAgICAgY2xhc3M9XCJhZGYtZXJyb3JcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJhZGYtZXJyb3ItaWNvblwiPmVycm9yX291dGxpbmU8L21hdC1pY29uPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1lcnJvci10ZXh0XCI+e3sgJ0FERl9DTE9VRF9VU0VSUy5FUlJPUi5OT1RfRk9VTkQnIHwgdHJhbnNsYXRlIDogeyB1c2VyTmFtZTogc2VhcmNoZWRWYWx1ZSB9IH19PC9kaXY+XG4gICAgICAgIDwvbWF0LWVycm9yPlxuICAgIDwvZGl2PlxuPC9mb3JtPlxuIl19