@alfresco/adf-content-services 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 (76) hide show
  1. package/esm2022/lib/aspect-list/aspect-list-dialog.component.mjs +5 -6
  2. package/esm2022/lib/aspect-list/aspect-list.component.mjs +5 -6
  3. package/esm2022/lib/breadcrumb/breadcrumb.component.mjs +6 -7
  4. package/esm2022/lib/breadcrumb/dropdown-breadcrumb.component.mjs +4 -5
  5. package/esm2022/lib/category/categories-management/categories-management.component.mjs +10 -11
  6. package/esm2022/lib/content-metadata/components/content-metadata/content-metadata-header.component.mjs +4 -5
  7. package/esm2022/lib/content-metadata/components/content-metadata/content-metadata.component.mjs +6 -7
  8. package/esm2022/lib/content-metadata/components/content-metadata-card/content-metadata-card.component.mjs +4 -5
  9. package/esm2022/lib/content-node-selector/content-node-selector-panel/content-node-selector-panel.component.mjs +8 -9
  10. package/esm2022/lib/content-node-selector/content-node-selector.component.mjs +6 -7
  11. package/esm2022/lib/content-node-selector/site-dropdown/sites-dropdown.component.mjs +4 -4
  12. package/esm2022/lib/content-node-share/content-node-share.dialog.mjs +11 -12
  13. package/esm2022/lib/content-type/content-type-dialog.component.mjs +7 -8
  14. package/esm2022/lib/content.module.mjs +2 -2
  15. package/esm2022/lib/dialogs/category-selector/category-selector.dialog.mjs +5 -6
  16. package/esm2022/lib/dialogs/folder/folder.dialog.mjs +7 -8
  17. package/esm2022/lib/dialogs/library/library.dialog.mjs +8 -9
  18. package/esm2022/lib/dialogs/node-lock/node-lock.dialog.mjs +9 -10
  19. package/esm2022/lib/directives/content-directive.module.mjs +2 -2
  20. package/esm2022/lib/directives/node-counter.directive.mjs +4 -5
  21. package/esm2022/lib/document-list/components/document-list.component.mjs +6 -7
  22. package/esm2022/lib/document-list/components/file-auto-download/file-auto-download.component.mjs +7 -8
  23. package/esm2022/lib/document-list/components/library-name-column/library-name-column.component.mjs +5 -7
  24. package/esm2022/lib/document-list/components/library-role-column/library-role-column.component.mjs +5 -7
  25. package/esm2022/lib/document-list/components/library-status-column/library-status-column.component.mjs +5 -7
  26. package/esm2022/lib/document-list/components/name-column/name-column.component.mjs +5 -7
  27. package/esm2022/lib/document-list/document-list.module.mjs +1 -5
  28. package/esm2022/lib/new-version-uploader/new-version-uploader.dialog.mjs +5 -6
  29. package/esm2022/lib/permission-manager/components/add-permission/add-permission-dialog.component.mjs +5 -6
  30. package/esm2022/lib/permission-manager/components/add-permission/add-permission-panel.component.mjs +7 -8
  31. package/esm2022/lib/permission-manager/components/add-permission/add-permission.component.mjs +4 -5
  32. package/esm2022/lib/permission-manager/components/permission-container/permission-container.component.mjs +6 -7
  33. package/esm2022/lib/permission-manager/components/permission-list/permission-list.component.mjs +5 -6
  34. package/esm2022/lib/permission-manager/components/user-role-column/user-role-column.component.mjs +4 -5
  35. package/esm2022/lib/search/components/search-check-list/search-check-list.component.mjs +6 -7
  36. package/esm2022/lib/search/components/search-chip-autocomplete-input/search-chip-autocomplete-input.component.mjs +8 -9
  37. package/esm2022/lib/search/components/search-chip-list/search-chip-list.component.mjs +5 -6
  38. package/esm2022/lib/search/components/search-control.component.mjs +4 -5
  39. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/search-date-range.component.mjs +8 -9
  40. package/esm2022/lib/search/components/search-datetime-range/search-datetime-range.component.mjs +4 -5
  41. package/esm2022/lib/search/components/search-facet-field/search-facet-field.component.mjs +6 -7
  42. package/esm2022/lib/search/components/search-filter/search-filter-card/search-filter-card.component.mjs +5 -6
  43. package/esm2022/lib/search/components/search-filter/search-filter.component.mjs +4 -5
  44. package/esm2022/lib/search/components/search-filter-autocomplete-chips/search-filter-autocomplete-chips.component.mjs +5 -6
  45. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip/search-facet-chip.component.mjs +6 -7
  46. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip-tabbed/search-facet-chip-tabbed.component.mjs +6 -7
  47. package/esm2022/lib/search/components/search-filter-chips/search-filter-chips.component.mjs +4 -5
  48. package/esm2022/lib/search/components/search-filter-chips/search-filter-menu-card/search-filter-menu-card.component.mjs +6 -7
  49. package/esm2022/lib/search/components/search-filter-chips/search-widget-chip/search-widget-chip.component.mjs +6 -7
  50. package/esm2022/lib/search/components/search-filter-container/search-filter-container.component.mjs +5 -6
  51. package/esm2022/lib/search/components/search-filter-tabbed/search-filter-tabbed.component.mjs +4 -5
  52. package/esm2022/lib/search/components/search-form/search-form.component.mjs +6 -7
  53. package/esm2022/lib/search/components/search-input/search-input.component.mjs +4 -5
  54. package/esm2022/lib/search/components/search-logical-filter/search-logical-filter.component.mjs +5 -6
  55. package/esm2022/lib/search/components/search-number-range/search-number-range.component.mjs +5 -6
  56. package/esm2022/lib/search/components/search-properties/search-properties.component.mjs +4 -4
  57. package/esm2022/lib/search/components/search-radio/search-radio.component.mjs +6 -7
  58. package/esm2022/lib/search/components/search-slider/search-slider.component.mjs +4 -5
  59. package/esm2022/lib/search/components/search-text/search-text.component.mjs +8 -9
  60. package/esm2022/lib/search/components/search.component.mjs +4 -5
  61. package/esm2022/lib/tag/tag-actions/tag-actions.component.mjs +6 -7
  62. package/esm2022/lib/tag/tags-creator/tags-creator.component.mjs +6 -7
  63. package/esm2022/lib/tree/components/tree.component.mjs +10 -11
  64. package/esm2022/lib/tree-view/components/tree-view.component.mjs +4 -5
  65. package/esm2022/lib/upload/components/file-uploading-dialog.component.mjs +6 -7
  66. package/esm2022/lib/upload/components/file-uploading-list-row.component.mjs +5 -6
  67. package/esm2022/lib/upload/components/upload-button.component.mjs +5 -6
  68. package/esm2022/lib/upload/components/upload-version-button.component.mjs +5 -6
  69. package/esm2022/lib/version-manager/version-comparison.component.mjs +4 -5
  70. package/esm2022/lib/version-manager/version-list.component.mjs +5 -6
  71. package/esm2022/lib/version-manager/version-manager.component.mjs +4 -5
  72. package/esm2022/lib/version-manager/version-upload.component.mjs +7 -8
  73. package/esm2022/lib/viewer/components/alfresco-viewer.component.mjs +6 -7
  74. package/fesm2022/adf-content-services.mjs +188 -192
  75. package/fesm2022/adf-content-services.mjs.map +1 -1
  76. package/package.json +4 -4
@@ -25,7 +25,7 @@ import { MatInputModule } from '@angular/material/input';
25
25
  import { MatListModule } from '@angular/material/list';
26
26
  import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
27
27
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
28
- import { TranslateModule } from '@ngx-translate/core';
28
+ import { TranslatePipe } from '@ngx-translate/core';
29
29
  import { EMPTY, forkJoin, Subject, timer } from 'rxjs';
30
30
  import { debounce, distinctUntilChanged, finalize, first, map, takeUntil, tap } from 'rxjs/operators';
31
31
  import { AutoFocusDirective } from '../../directives';
@@ -38,9 +38,8 @@ import * as i3 from "@angular/common";
38
38
  import * as i4 from "@angular/material/input";
39
39
  import * as i5 from "@angular/material/form-field";
40
40
  import * as i6 from "@angular/forms";
41
- import * as i7 from "@ngx-translate/core";
42
- import * as i8 from "@angular/material/list";
43
- import * as i9 from "@angular/material/progress-spinner";
41
+ import * as i7 from "@angular/material/list";
42
+ import * as i8 from "@angular/material/progress-spinner";
44
43
  const DEFAULT_TAGS_SORTING = {
45
44
  orderBy: 'tag',
46
45
  direction: 'asc'
@@ -328,7 +327,7 @@ export class TagsCreatorComponent {
328
327
  this.tagNameControl.markAsUntouched();
329
328
  }
330
329
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TagsCreatorComponent, deps: [{ token: i1.TagService }, { token: i2.NotificationService }], target: i0.ɵɵFactoryTarget.Component }); }
331
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TagsCreatorComponent, isStandalone: true, selector: "adf-tags-creator", inputs: { mode: "mode", disabledTagsRemoving: "disabledTagsRemoving", tags: "tags", tagNameControlVisible: "tagNameControlVisible" }, outputs: { existingTagsPanelVisibilityChange: "existingTagsPanelVisibilityChange", tagsChange: "tagsChange" }, host: { properties: { "class.adf-creator-with-existing-tags-panel": "this.hostClass" } }, viewQueries: [{ propertyName: "tagsListElement", first: true, predicate: ["tagsList"], descendants: true }, { propertyName: "tagNameInputElement", first: true, predicate: ["tagNameInput"], descendants: true }], ngImport: i0, template: "<div class=\"adf-tags-creation\">\n <div *ngIf=\"tagNameControlVisible\" class=\"adf-tag-name-field\">\n <input\n #tagNameInput\n class=\"adf-tag-search-field\"\n matInput\n autocomplete=\"off\"\n [formControl]=\"tagNameControl\"\n (keyup.enter)=\"addTag()\"\n adf-auto-focus\n placeholder=\"{{ 'TAG.TAGS_CREATOR.TAG_SEARCH_PLACEHOLDER' | translate }}\"\n />\n <mat-error *ngIf=\"tagNameControl.invalid && tagNameControl.touched\">\n {{ tagNameErrorMessageKey | translate }}\n </mat-error>\n </div>\n <p class=\"adf-no-tags-message\" *ngIf=\"showEmptyTagMessage\">\n {{ 'TAG.TAGS_CREATOR.NO_TAGS_CREATED' | translate }}\n </p>\n <div class=\"adf-tags-list\" [class.adf-tags-list-fixed]=\"!tagNameControlVisible\" #tagsList>\n <ng-container *ngIf=\"tags?.length > 0\">\n <adf-dynamic-chip-list\n class=\"adf-tags-chips-container\"\n [chips]=\"tagsToDisplay\"\n [disableDelete]=\"disabledTagsRemoving\"\n (removedChip)=\"removeTag($event)\" />\n </ng-container>\n </div>\n</div>\n<div class=\"adf-existing-tags-panel\" *ngIf=\"existingTagsPanelVisible\">\n <span\n *ngIf=\"!spinnerVisible || existingTags\"\n class=\"adf-create-tag-label\"\n (click)=\"addTag()\"\n role=\"button\"\n tabindex=\"0\"\n (keyup.enter)=\"addTag()\"\n [hidden]=\"!tagNameControl.value || tagNameControl.invalid || typing\"\n >\n {{ 'TAG.TAGS_CREATOR.CREATE_TAG' | translate : { tag: tagNameControl.value } }}\n </span>\n <p *ngIf=\"!spinnerVisible && existingTags\" class=\"adf-existing-tags-label\">\n {{ (isOnlyCreateMode() ? 'TAG.TAGS_CREATOR.EXISTING_TAGS' : 'TAG.TAGS_CREATOR.EXISTING_TAGS_SELECTION') | translate }}\n </p>\n <div class=\"adf-tags-list\">\n <mat-list *ngIf=\"!spinnerVisible && existingTags\" [disabled]=\"isOnlyCreateMode()\">\n <mat-list-item *ngFor=\"let tagRow of existingTags\" class=\"adf-tag\"\n (click)=\"addExistingTagToTagsToAssign(tagRow)\">\n {{ tagRow.entry.tag }}\n </mat-list-item>\n <p *ngIf=\"!existingTags?.length\">{{ 'TAG.TAGS_CREATOR.NO_EXISTING_TAGS' | translate }}</p>\n </mat-list>\n <mat-spinner\n *ngIf=\"spinnerVisible\"\n class=\"adf-tags-creator-spinner\"\n [diameter]=\"50\"\n [attr.aria-label]=\"'TAG.TAGS_CREATOR.TAGS_LOADING' | translate\"\n />\n </div>\n</div>\n", styles: ["adf-tags-creator{display:block}adf-tags-creator .adf-no-tags-message{margin-top:28.5px;margin-bottom:0;height:30px}adf-tags-creator .adf-tag-name-field,adf-tags-creator .adf-tag-name-field[hidden]{display:flex;flex-direction:column;margin-right:12px}adf-tags-creator .adf-tag-search-field{background:var(--adf-metadata-buttons-background-color);border-radius:12px;padding:5px 6px;border:none;outline:none;font:inherit;color:currentcolor;margin:0;vertical-align:bottom;text-align:inherit;box-sizing:content-box}adf-tags-creator .adf-create-tag-label{color:var(--theme-primary-color);cursor:pointer;margin-top:-1px;padding-left:12px;overflow-wrap:anywhere;display:inline-block;padding-right:12px;overflow:auto}adf-tags-creator .adf-tags-list{margin-top:8px}adf-tags-creator .adf-tags-chip{height:auto}adf-tags-creator .adf-existing-tags-panel{border-top-left-radius:6px;border-top-right-radius:6px;width:100%}adf-tags-creator .adf-existing-tags-panel .adf-existing-tags-label{font-size:10px;color:var(--theme-secondary-text-color);padding-left:12px;margin-bottom:2px}adf-tags-creator .adf-existing-tags-panel .adf-tags-list{padding-left:12px;margin-top:-2px;padding-right:0;display:flex;flex-direction:column}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .adf-tag{margin:0;padding:4px;font-size:14px;height:auto;width:unset;background-color:inherit;color:inherit}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .adf-tag:not(.mdc-list-item--disabled):hover{cursor:pointer;background:var(--adf-theme-mat-grey-color-a200)}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .adf-tag span{padding:0}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .adf-tags-creator-spinner{margin:auto;overflow:unset;min-height:62px}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .mdc-list-item--disabled .mdc-list-item__primary-text{opacity:1}adf-tags-creator .mdc-evolution-chip-set .mat-mdc-standard-chip .mdc-evolution-chip__cell--primary,adf-tags-creator .mdc-evolution-chip-set .mat-mdc-standard-chip .mdc-evolution-chip__action--primary,adf-tags-creator .mdc-evolution-chip-set .mat-mdc-standard-chip .mat-mdc-chip-action-label{overflow:hidden;word-break:break-all}adf-tags-creator [hidden]{visibility:hidden;display:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.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: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i6.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: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: AutoFocusDirective, selector: "[adf-auto-focus]" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatChipsModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i8.MatList, selector: "mat-list", exportAs: ["matList"] }, { kind: "component", type: i8.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i9.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: DynamicChipListComponent, selector: "adf-dynamic-chip-list", inputs: ["pagination", "chips", "showDelete", "disableDelete", "limitChipsDisplayed", "roundUpChips"], outputs: ["displayNext", "removedChip"] }], encapsulation: i0.ViewEncapsulation.None }); }
330
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TagsCreatorComponent, isStandalone: true, selector: "adf-tags-creator", inputs: { mode: "mode", disabledTagsRemoving: "disabledTagsRemoving", tags: "tags", tagNameControlVisible: "tagNameControlVisible" }, outputs: { existingTagsPanelVisibilityChange: "existingTagsPanelVisibilityChange", tagsChange: "tagsChange" }, host: { properties: { "class.adf-creator-with-existing-tags-panel": "this.hostClass" } }, viewQueries: [{ propertyName: "tagsListElement", first: true, predicate: ["tagsList"], descendants: true }, { propertyName: "tagNameInputElement", first: true, predicate: ["tagNameInput"], descendants: true }], ngImport: i0, template: "<div class=\"adf-tags-creation\">\n <div *ngIf=\"tagNameControlVisible\" class=\"adf-tag-name-field\">\n <input\n #tagNameInput\n class=\"adf-tag-search-field\"\n matInput\n autocomplete=\"off\"\n [formControl]=\"tagNameControl\"\n (keyup.enter)=\"addTag()\"\n adf-auto-focus\n placeholder=\"{{ 'TAG.TAGS_CREATOR.TAG_SEARCH_PLACEHOLDER' | translate }}\"\n />\n <mat-error *ngIf=\"tagNameControl.invalid && tagNameControl.touched\">\n {{ tagNameErrorMessageKey | translate }}\n </mat-error>\n </div>\n <p class=\"adf-no-tags-message\" *ngIf=\"showEmptyTagMessage\">\n {{ 'TAG.TAGS_CREATOR.NO_TAGS_CREATED' | translate }}\n </p>\n <div class=\"adf-tags-list\" [class.adf-tags-list-fixed]=\"!tagNameControlVisible\" #tagsList>\n <ng-container *ngIf=\"tags?.length > 0\">\n <adf-dynamic-chip-list\n class=\"adf-tags-chips-container\"\n [chips]=\"tagsToDisplay\"\n [disableDelete]=\"disabledTagsRemoving\"\n (removedChip)=\"removeTag($event)\" />\n </ng-container>\n </div>\n</div>\n<div class=\"adf-existing-tags-panel\" *ngIf=\"existingTagsPanelVisible\">\n <span\n *ngIf=\"!spinnerVisible || existingTags\"\n class=\"adf-create-tag-label\"\n (click)=\"addTag()\"\n role=\"button\"\n tabindex=\"0\"\n (keyup.enter)=\"addTag()\"\n [hidden]=\"!tagNameControl.value || tagNameControl.invalid || typing\"\n >\n {{ 'TAG.TAGS_CREATOR.CREATE_TAG' | translate : { tag: tagNameControl.value } }}\n </span>\n <p *ngIf=\"!spinnerVisible && existingTags\" class=\"adf-existing-tags-label\">\n {{ (isOnlyCreateMode() ? 'TAG.TAGS_CREATOR.EXISTING_TAGS' : 'TAG.TAGS_CREATOR.EXISTING_TAGS_SELECTION') | translate }}\n </p>\n <div class=\"adf-tags-list\">\n <mat-list *ngIf=\"!spinnerVisible && existingTags\" [disabled]=\"isOnlyCreateMode()\">\n <mat-list-item *ngFor=\"let tagRow of existingTags\" class=\"adf-tag\"\n (click)=\"addExistingTagToTagsToAssign(tagRow)\">\n {{ tagRow.entry.tag }}\n </mat-list-item>\n <p *ngIf=\"!existingTags?.length\">{{ 'TAG.TAGS_CREATOR.NO_EXISTING_TAGS' | translate }}</p>\n </mat-list>\n <mat-spinner\n *ngIf=\"spinnerVisible\"\n class=\"adf-tags-creator-spinner\"\n [diameter]=\"50\"\n [attr.aria-label]=\"'TAG.TAGS_CREATOR.TAGS_LOADING' | translate\"\n />\n </div>\n</div>\n", styles: ["adf-tags-creator{display:block}adf-tags-creator .adf-no-tags-message{margin-top:28.5px;margin-bottom:0;height:30px}adf-tags-creator .adf-tag-name-field,adf-tags-creator .adf-tag-name-field[hidden]{display:flex;flex-direction:column;margin-right:12px}adf-tags-creator .adf-tag-search-field{background:var(--adf-metadata-buttons-background-color);border-radius:12px;padding:5px 6px;border:none;outline:none;font:inherit;color:currentcolor;margin:0;vertical-align:bottom;text-align:inherit;box-sizing:content-box}adf-tags-creator .adf-create-tag-label{color:var(--theme-primary-color);cursor:pointer;margin-top:-1px;padding-left:12px;overflow-wrap:anywhere;display:inline-block;padding-right:12px;overflow:auto}adf-tags-creator .adf-tags-list{margin-top:8px}adf-tags-creator .adf-tags-chip{height:auto}adf-tags-creator .adf-existing-tags-panel{border-top-left-radius:6px;border-top-right-radius:6px;width:100%}adf-tags-creator .adf-existing-tags-panel .adf-existing-tags-label{font-size:10px;color:var(--theme-secondary-text-color);padding-left:12px;margin-bottom:2px}adf-tags-creator .adf-existing-tags-panel .adf-tags-list{padding-left:12px;margin-top:-2px;padding-right:0;display:flex;flex-direction:column}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .adf-tag{margin:0;padding:4px;font-size:14px;height:auto;width:unset;background-color:inherit;color:inherit}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .adf-tag:not(.mdc-list-item--disabled):hover{cursor:pointer;background:var(--adf-theme-mat-grey-color-a200)}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .adf-tag span{padding:0}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .adf-tags-creator-spinner{margin:auto;overflow:unset;min-height:62px}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .mdc-list-item--disabled .mdc-list-item__primary-text{opacity:1}adf-tags-creator .mdc-evolution-chip-set .mat-mdc-standard-chip .mdc-evolution-chip__cell--primary,adf-tags-creator .mdc-evolution-chip-set .mat-mdc-standard-chip .mdc-evolution-chip__action--primary,adf-tags-creator .mdc-evolution-chip-set .mat-mdc-standard-chip .mat-mdc-chip-action-label{overflow:hidden;word-break:break-all}adf-tags-creator [hidden]{visibility:hidden;display:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.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: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i6.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: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: AutoFocusDirective, selector: "[adf-auto-focus]" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatChipsModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i7.MatList, selector: "mat-list", exportAs: ["matList"] }, { kind: "component", type: i7.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i8.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: DynamicChipListComponent, selector: "adf-dynamic-chip-list", inputs: ["pagination", "chips", "showDelete", "disableDelete", "limitChipsDisplayed", "roundUpChips"], outputs: ["displayNext", "removedChip"] }], encapsulation: i0.ViewEncapsulation.None }); }
332
331
  }
333
332
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TagsCreatorComponent, decorators: [{
334
333
  type: Component,
@@ -337,7 +336,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
337
336
  MatInputModule,
338
337
  ReactiveFormsModule,
339
338
  AutoFocusDirective,
340
- TranslateModule,
339
+ TranslatePipe,
341
340
  MatChipsModule,
342
341
  MatButtonModule,
343
342
  MatIconModule,
@@ -368,4 +367,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
368
367
  type: HostBinding,
369
368
  args: ['class.adf-creator-with-existing-tags-panel']
370
369
  }] } });
371
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFncy1jcmVhdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvdGFnL3RhZ3MtY3JlYXRvci90YWdzLWNyZWF0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbnRlbnQtc2VydmljZXMvc3JjL2xpYi90YWcvdGFncy1jcmVhdG9yL3RhZ3MtY3JlYXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQVEsd0JBQXdCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV6RixPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFB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a0JBQWtCLDREQUNsQixlQUFlLDJGQUNmLGNBQWMsOEJBQ2QsZUFBZSw4QkFDZixhQUFhLDhCQUNiLGFBQWEsdVJBQ2Isd0JBQXdCLG1PQUN4Qix3QkFBd0I7OzRGQU1uQixvQkFBb0I7a0JBcEJoQyxTQUFTOytCQUNJLGtCQUFrQixjQUNoQixJQUFJLFdBQ1A7d0JBQ0wsWUFBWTt3QkFDWixjQUFjO3dCQUNkLG1CQUFtQjt3QkFDbkIsa0JBQWtCO3dCQUNsQixlQUFlO3dCQUNmLGNBQWM7d0JBQ2QsZUFBZTt3QkFDZixhQUFhO3dCQUNiLGFBQWE7d0JBQ2Isd0JBQXdCO3dCQUN4Qix3QkFBd0I7cUJBQzNCLGlCQUdjLGlCQUFpQixDQUFDLElBQUk7aUhBU3JDLElBQUk7c0JBREgsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBT3pCLG9CQUFvQjtzQkFEbkIsS0FBSztnQkFTRixJQUFJO3NCQURQLEtBQUs7Z0JBb0JGLHFCQUFxQjtzQkFEeEIsS0FBSztnQkF1Qk4saUNBQWlDO3NCQURoQyxNQUFNO2dCQU1QLFVBQVU7c0JBRFQsTUFBTTtnQkFpQ0MsZUFBZTtzQkFEdEIsU0FBUzt1QkFBQyxVQUFVO2dCQUdiLG1CQUFtQjtzQkFEMUIsU0FBUzt1QkFBQyxjQUFjO2dCQTZDckIsU0FBUztzQkFEWixXQUFXO3VCQUFDLDRDQUE0QyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgQ2hpcCwgRHluYW1pY0NoaXBMaXN0Q29tcG9uZW50LCBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7IFRhZ0VudHJ5LCBUYWdQYWdpbmcgfSBmcm9tICdAYWxmcmVzY28vanMtYXBpJztcbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRDaGlwc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoaXBzJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0TGlzdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xpc3QnO1xuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEVNUFRZLCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmluYWxpemUsIGZpcnN0LCBtYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXV0b0ZvY3VzRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBUYWdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdGFnLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFnc0NyZWF0b3JNb2RlIH0gZnJvbSAnLi90YWdzLWNyZWF0b3ItbW9kZSc7XG5cbmludGVyZmFjZSBUYWdOYW1lQ29udHJvbEVycm9ycyB7XG4gICAgZHVwbGljYXRlZEV4aXN0aW5nVGFnPzogYm9vbGVhbjtcbiAgICBkdXBsaWNhdGVkQWRkZWRUYWc/OiBib29sZWFuO1xuICAgIGVtcHR5VGFnPzogYm9vbGVhbjtcbiAgICBzcGVjaWFsQ2hhcmFjdGVycz86IGJvb2xlYW47XG59XG5cbmNvbnN0IERFRkFVTFRfVEFHU19TT1JUSU5HID0ge1xuICAgIG9yZGVyQnk6ICd0YWcnLFxuICAgIGRpcmVjdGlvbjogJ2FzYydcbn07XG5cbi8qKlxuICogQWxsb3dzIHRvIGNyZWF0ZSBtdWx0aXBsZSB0YWdzLiBUaGF0IGNvbXBvbmVudCBjb250YWlucyBpbnB1dCBhbmQgdHdvIGxpc3RzLiBUb3AgbGlzdCBpcyBhbGwgY3JlYXRlZCB0YWdzLCBib3R0b20gbGlzdCBpcyBzZWFyY2hlZCB0YWdzIGJhc2VkIG9uIGlucHV0J3MgdmFsdWUuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWRmLXRhZ3MtY3JlYXRvcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIEF1dG9Gb2N1c0RpcmVjdGl2ZSxcbiAgICAgICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgICAgICBNYXRDaGlwc01vZHVsZSxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBNYXRJY29uTW9kdWxlLFxuICAgICAgICBNYXRMaXN0TW9kdWxlLFxuICAgICAgICBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUsXG4gICAgICAgIER5bmFtaWNDaGlwTGlzdENvbXBvbmVudFxuICAgIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhZ3MtY3JlYXRvci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGFncy1jcmVhdG9yLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBUYWdzQ3JlYXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBNb2RlIGZvciBjb21wb25lbnQuXG4gICAgICogSW4gQ3JlYXRlIG1vZGUgd2UgY2FuJ3Qgc2VsZWN0IGV4aXN0aW5nIHRhZ3MsIHdlIGNhbiBvbmx5IGNyZWF0ZSB0aGVtLlxuICAgICAqIEluIENyZWF0ZSBhbmQgQXNzaWduIG1vZGUgd2UgY2FuIGJvdGggLSBjcmVhdGUgdGFncyBhbmQgc2VsZWN0IGV4aXN0aW5nIHRhZ3MuXG4gICAgICovXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgICBtb2RlOiBUYWdzQ3JlYXRvck1vZGU7XG5cbiAgICAvKipcbiAgICAgKiBGYWxzZSBpZiB0YWdzIGNhbiBiZSByZW1vdmVkIGZyb20gdG9wIGxpc3QsIHRydWUgb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZWRUYWdzUmVtb3ZpbmcgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlZmF1bHQgdG9wIGxpc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGFncyB0YWdzIHdoaWNoIHNob3VsZCBiZSBkaXNwbGF5ZWQgYXMgZGVmYXVsdCB0YWdzIGZvciB0b3AgbGlzdC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0YWdzKHRhZ3M6IHN0cmluZ1tdKSB7XG4gICAgICAgIHRoaXMuX3RhZ3MgPSBbLi4udGFnc107XG4gICAgICAgIHRoaXMudGFnc1RvRGlzcGxheSA9IHRoaXMudGFncy5tYXAoKHRhZykgPT4gKHsgaWQ6IHRhZywgbmFtZTogdGFnIH0pKTtcbiAgICAgICAgdGhpcy5faW5pdGlhbEV4aXN0aW5nVGFncyA9IG51bGw7XG4gICAgICAgIHRoaXMuX2V4aXN0aW5nVGFncyA9IG51bGw7XG4gICAgICAgIHRoaXMubG9hZFRhZ3ModGhpcy50YWdOYW1lQ29udHJvbC52YWx1ZSk7XG4gICAgICAgIHRoaXMudGFnTmFtZUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH1cblxuICAgIGdldCB0YWdzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhZ3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVjaWRlcyBpZiBpbnB1dCBmb3IgdGFncyBjcmVhdGlvbi9zZWFyY2hpbmcgc2hvdWxkIGJlIHZpc2libGUuIFdoZW4gaW5wdXQgaXMgaGlkZGVuIHRoZW4gcGFuZWwgb2YgZXhpc3RpbmcgdGFncyBpcyBoaWRkZW4gYXMgd2VsbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YWdOYW1lQ29udHJvbFZpc2libGUgdHJ1ZSBpZiBpbnB1dCBzaG91bGQgYmUgdmlzaWJsZSwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRhZ05hbWVDb250cm9sVmlzaWJsZSh0YWdOYW1lQ29udHJvbFZpc2libGU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fdGFnTmFtZUNvbnRyb2xWaXNpYmxlID0gdGFnTmFtZUNvbnRyb2xWaXNpYmxlO1xuICAgICAgICBpZiAodGFnTmFtZUNvbnRyb2xWaXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLl9leGlzdGluZ1RhZ3NQYW5lbFZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWdOYW1lSW5wdXRFbGVtZW50Py5uYXRpdmVFbGVtZW50Py5zY3JvbGxJbnRvVmlldygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9leGlzdGluZ1RhZ3NQYW5lbFZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJUYWdOYW1lSW5wdXQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV4aXN0aW5nVGFnc1BhbmVsVmlzaWJpbGl0eUNoYW5nZS5lbWl0KHRoaXMuZXhpc3RpbmdUYWdzUGFuZWxWaXNpYmxlKTtcbiAgICB9XG5cbiAgICBnZXQgdGFnTmFtZUNvbnRyb2xWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFnTmFtZUNvbnRyb2xWaXNpYmxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiBib3R0b20gbGlzdCBpcyBzaG93aW5nIG9yIGhpZGluZy5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBleGlzdGluZ1RhZ3NQYW5lbFZpc2liaWxpdHlDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRhZ3MgaW4gdG9wIGxpc3QgYXJlIGNoYW5nZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgdGFnc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XG5cbiAgICB0YWdzVG9EaXNwbGF5OiBDaGlwW10gPSBbXTtcblxuICAgIHJlYWRvbmx5IG5hbWVFcnJvck1lc3NhZ2VzQnlFcnJvcnMgPSBuZXcgTWFwPGtleW9mIFRhZ05hbWVDb250cm9sRXJyb3JzLCBzdHJpbmc+KFtcbiAgICAgICAgWydkdXBsaWNhdGVkRXhpc3RpbmdUYWcnLCAnRVhJU1RJTkdfVEFHJ10sXG4gICAgICAgIFsnZHVwbGljYXRlZEFkZGVkVGFnJywgJ0FMUkVBRFlfQURERURfVEFHJ10sXG4gICAgICAgIFsnZW1wdHlUYWcnLCAnRU1QVFlfVEFHJ10sXG4gICAgICAgIFsnc3BlY2lhbENoYXJhY3RlcnMnLCAnU1BFQ0lBTF9DSEFSQUNURVJTJ11cbiAgICBdKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZXhpc3RpbmdUYWdzTGlzdExpbWl0ID0gMTU7XG5cbiAgICBwcml2YXRlIGV4YWN0VGFnU2V0JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHJpdmF0ZSBfdGFnczogc3RyaW5nW10gPSBbXTtcbiAgICBwcml2YXRlIF90YWdOYW1lQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDxzdHJpbmc+KFxuICAgICAgICAnJyxcbiAgICAgICAgW3RoaXMudmFsaWRhdGVJZk5vdEFscmVhZHlBZGRlZC5iaW5kKHRoaXMpLCB0aGlzLnZhbGlkYXRlRW1wdHlUYWcsIHRoaXMudmFsaWRhdGVTcGVjaWFsQ2hhcmFjdGVyc10sXG4gICAgICAgIHRoaXMudmFsaWRhdGVJZk5vdEV4aXN0aW5nVGFnLmJpbmQodGhpcylcbiAgICApO1xuICAgIHByaXZhdGUgX3RhZ05hbWVDb250cm9sVmlzaWJsZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2V4aXN0aW5nVGFnczogVGFnRW50cnlbXTtcbiAgICBwcml2YXRlIF9pbml0aWFsRXhpc3RpbmdUYWdzOiBUYWdFbnRyeVtdO1xuICAgIHByaXZhdGUgX3RhZ05hbWVFcnJvck1lc3NhZ2VLZXkgPSAnJztcbiAgICBwcml2YXRlIF9zcGlubmVyVmlzaWJsZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgX3R5cGluZyA9IGZhbHNlO1xuICAgIHByaXZhdGUgX3RhZ3NMaXN0U2Nyb2xsYmFyVmlzaWJsZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgY2FuY2VsRXhpc3RpbmdUYWdzTG9hZGluZyQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHByaXZhdGUgZXhpc3RpbmdFeGFjdFRhZzogVGFnRW50cnk7XG4gICAgcHJpdmF0ZSBfZXhpc3RpbmdUYWdzUGFuZWxWaXNpYmxlOiBib29sZWFuO1xuXG4gICAgQFZpZXdDaGlsZCgndGFnc0xpc3QnKVxuICAgIHByaXZhdGUgdGFnc0xpc3RFbGVtZW50OiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ3RhZ05hbWVJbnB1dCcpXG4gICAgcHJpdmF0ZSB0YWdOYW1lSW5wdXRFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB0YWdTZXJ2aWNlOiBUYWdTZXJ2aWNlLCBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UpIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50YWdOYW1lQ29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgobmFtZTogc3RyaW5nKSA9PiBuYW1lLnRyaW0oKSksXG4gICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXZpb3VzLCBjdXJyZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlTm90Q2hhbmdlZCA9IHByZXZpb3VzID09PSBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVOb3RDaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4YWN0VGFnU2V0JC5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlTm90Q2hhbmdlZDtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YXAoKG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90eXBpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3Bpbm5lclZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXhpc3RpbmdUYWdzUGFuZWxWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4aXN0aW5nVGFnc1BhbmVsVmlzaWJpbGl0eUNoYW5nZS5lbWl0KHRoaXMuZXhpc3RpbmdUYWdzUGFuZWxWaXNpYmxlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxFeGlzdGluZ1RhZ3NMb2FkaW5nJC5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luaXRpYWxFeGlzdGluZ1RhZ3MgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9leGlzdGluZ1RhZ3MgPSBudWxsO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGRlYm91bmNlKChuYW1lOiBzdHJpbmcpID0+IChuYW1lID8gdGltZXIoMzAwKSA6IEVNUFRZKSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKG5hbWU6IHN0cmluZykgPT4gdGhpcy5vblRhZ05hbWVDb250cm9sVmFsdWVDaGFuZ2UobmFtZSkpO1xuXG4gICAgICAgIHRoaXMudGFnTmFtZUNvbnRyb2wuc3RhdHVzQ2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zZXRUYWdOYW1lQ29udHJvbEVycm9yTWVzc2FnZUtleSgpKTtcblxuICAgICAgICB0aGlzLnNldFRhZ05hbWVDb250cm9sRXJyb3JNZXNzYWdlS2V5KCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2FuY2VsRXhpc3RpbmdUYWdzTG9hZGluZyQubmV4dCgpO1xuICAgICAgICB0aGlzLmNhbmNlbEV4aXN0aW5nVGFnc0xvYWRpbmckLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hZGYtY3JlYXRvci13aXRoLWV4aXN0aW5nLXRhZ3MtcGFuZWwnKVxuICAgIGdldCBob3N0Q2xhc3MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4aXN0aW5nVGFnc1BhbmVsVmlzaWJsZTtcbiAgICB9XG5cbiAgICBnZXQgdGFnTmFtZUNvbnRyb2woKTogRm9ybUNvbnRyb2w8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWdOYW1lQ29udHJvbDtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFJldHVybnMgYHRydWVgIGlmIHRhZ3MgZW1wdHkgYW5kIG5vbiBlZGl0YWJsZSBzdGF0ZSwgb3RoZXJ3aXNlIGBmYWxzZWBcbiAgICAgKi9cbiAgICBnZXQgc2hvd0VtcHR5VGFnTWVzc2FnZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFncz8ubGVuZ3RoID09PSAwICYmICF0aGlzLnRhZ05hbWVDb250cm9sVmlzaWJsZTtcbiAgICB9XG5cbiAgICBnZXQgZXhpc3RpbmdUYWdzKCk6IFRhZ0VudHJ5W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXhpc3RpbmdUYWdzO1xuICAgIH1cblxuICAgIGdldCB0YWdOYW1lRXJyb3JNZXNzYWdlS2V5KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWdOYW1lRXJyb3JNZXNzYWdlS2V5O1xuICAgIH1cblxuICAgIGdldCBzcGlubmVyVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NwaW5uZXJWaXNpYmxlO1xuICAgIH1cblxuICAgIGdldCB0eXBpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBpbmc7XG4gICAgfVxuXG4gICAgZ2V0IHRhZ3NMaXN0U2Nyb2xsYmFyVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhZ3NMaXN0U2Nyb2xsYmFyVmlzaWJsZTtcbiAgICB9XG5cbiAgICBnZXQgZXhpc3RpbmdUYWdzUGFuZWxWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXhpc3RpbmdUYWdzUGFuZWxWaXNpYmxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCB0YWdzIHRvIHRvcCBsaXN0IHVzaW5nIHZhbHVlIHdoaWNoIGlzIHNldCBpbiBpbnB1dC4gQWRkaW5nIHRhZyBpcyBub3QgYWxsb3dlZCB3aGVuIHZhbHVlIGluIGlucHV0IGlzIGludmFsaWRcbiAgICAgKiBvciBpZiB1c2VyIGlzIHN0aWxsIHR5cGluZyB3aGF0IG1lYW5zIHRoYXQgdmFsaWRhdGlvbiBmb3IgaW5wdXQgaXMgbm90IGNhbGxlZCB5ZXQuXG4gICAgICovXG4gICAgYWRkVGFnKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX3R5cGluZyAmJiAhdGhpcy50YWdOYW1lQ29udHJvbC5pbnZhbGlkKSB7XG4gICAgICAgICAgICB0aGlzLnRhZ3MgPSBbLi4udGhpcy50YWdzLCB0aGlzLnRhZ05hbWVDb250cm9sLnZhbHVlLnRyaW0oKV07XG4gICAgICAgICAgICB0aGlzLmNsZWFyVGFnTmFtZUlucHV0KCk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrU2Nyb2xsYmFyVmlzaWJpbGl0eSgpO1xuICAgICAgICAgICAgdGhpcy50YWdzQ2hhbmdlLmVtaXQodGhpcy50YWdzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSB0YWcgZnJvbSB0b3AgbGlzdC4gSW4gY2FzZSB0aGF0IHRhZyB3YXMgcGFydCBvZiBzZWFyY2ggcmVzdWx0IHRoZW4gdGhhdCB0YWcgaXMgbW92ZWQgdG8gYm90dG9tIGxpc3RcbiAgICAgKiAobGlzdCBvZiBleGlzdGluZyB0YWdzKSBhZnRlciByZW1vdmluZyBzbyB1c2VyIGNhbiByZXNlbGVjdCBpdCBhZ2FpbiBsYXRlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YWcgdGFnJ3MgbmFtZSB3aGljaCBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIHRvcCBsaXN0LlxuICAgICAqL1xuICAgIHJlbW92ZVRhZyh0YWc6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbW92ZVRhZ0Zyb21BcnJheSh0aGlzLnRhZ3MsIHRhZyk7XG4gICAgICAgIHRoaXMudGFncyA9IFsuLi50aGlzLnRhZ3NdO1xuICAgICAgICB0aGlzLnRhZ05hbWVDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgdGhpcy51cGRhdGVFeGlzdGluZ1RhZ3NMaXN0T25SZW1vdmVGcm9tVGFnc1RvQ29uZmlybSh0YWcpO1xuICAgICAgICB0aGlzLmV4YWN0VGFnU2V0JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuY2hlY2tTY3JvbGxiYXJWaXNpYmlsaXR5KCk7XG4gICAgICAgIHRoaXMudGFnc0NoYW5nZS5lbWl0KHRoaXMudGFncyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gdXNlciBzZWxlY3RzIGFueSB0YWcgZnJvbSBsaXN0IG9mIGV4aXN0aW5nIHRhZ3MuIEl0IG1vdmVzIHRhZyBmcm9tIGV4aXN0aW5nIHRhZ3MgbGlzdCB0byB0b3AgbGlzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzZWxlY3RlZFRhZyBjaGFuZ2VzXG4gICAgICovXG4gICAgYWRkRXhpc3RpbmdUYWdUb1RhZ3NUb0Fzc2lnbihzZWxlY3RlZFRhZzogVGFnRW50cnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT25seUNyZWF0ZU1vZGUoKSkge1xuICAgICAgICAgICAgdGhpcy50YWdzLnB1c2goc2VsZWN0ZWRUYWcuZW50cnkudGFnKTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVGFnRnJvbUFycmF5KHRoaXMuZXhpc3RpbmdUYWdzLCBzZWxlY3RlZFRhZyk7XG4gICAgICAgICAgICB0aGlzLnRhZ05hbWVDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgICAgIHRoaXMudGFncyA9IFsuLi50aGlzLnRhZ3NdO1xuICAgICAgICAgICAgdGhpcy5leGFjdFRhZ1NldCQubmV4dCgpO1xuICAgICAgICAgICAgdGhpcy50YWdzQ2hhbmdlLmVtaXQodGhpcy50YWdzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBjb21wb25lbnQgaXMgaW4gQ3JlYXRlIG1vZGUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYENyZWF0ZWAgbW9kZSwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAgICovXG4gICAgaXNPbmx5Q3JlYXRlTW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gVGFnc0NyZWF0b3JNb2RlLkNSRUFURTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uVGFnTmFtZUNvbnRyb2xWYWx1ZUNoYW5nZShuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50YWdOYW1lQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgIHRoaXMubG9hZFRhZ3MobmFtZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkVGFncyhuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKG5hbWUgJiYgIXRoaXMudGFnTmFtZUNvbnRyb2wuaGFzRXJyb3IoJ3NwZWNpYWxDaGFyYWN0ZXJzJykpIHtcbiAgICAgICAgICAgIGZvcmtKb2luKHtcbiAgICAgICAgICAgICAgICBleGFjdFJlc3VsdDogdGhpcy50YWdTZXJ2aWNlLmZpbmRUYWdCeU5hbWUobmFtZSksXG4gICAgICAgICAgICAgICAgc2VhcmNoZWRSZXN1bHQ6IHRoaXMudGFnU2VydmljZS5zZWFyY2hUYWdzKG5hbWUsIERFRkFVTFRfVEFHU19TT1JUSU5HLCBmYWxzZSwgMCwgdGhpcy5leGlzdGluZ1RhZ3NMaXN0TGltaXQpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5jYW5jZWxFeGlzdGluZ1RhZ3NMb2FkaW5nJCksXG4gICAgICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+ICh0aGlzLl90eXBpbmcgPSBmYWxzZSkpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgICBuZXh0OiAoeyBleGFjdFJlc3VsdCwgc2VhcmNoZWRSZXN1bHQgfTogeyBleGFjdFJlc3VsdDogVGFnRW50cnk7IHNlYXJjaGVkUmVzdWx0OiBUYWdQYWdpbmcgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4YWN0UmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leGlzdGluZ0V4YWN0VGFnID0gZXhhY3RSZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVFeGFjdFRhZ0Zyb21TZWFyY2hlZFJlc3VsdChzZWFyY2hlZFJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoZWRSZXN1bHQubGlzdC5lbnRyaWVzLnVuc2hpZnQoZXhhY3RSZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4aXN0aW5nRXhhY3RUYWcgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbml0aWFsRXhpc3RpbmdUYWdzID0gc2VhcmNoZWRSZXN1bHQubGlzdC5lbnRyaWVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leGNsdWRlQWxyZWFkeUFkZGVkVGFncyh0aGlzLl9pbml0aWFsRXhpc3RpbmdUYWdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhhY3RUYWdTZXQkLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NwaW5uZXJWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvd0Vycm9yKCdUQUcuVEFHU19DUkVBVE9SLkVSUk9SUy5GRVRDSF9UQUdTJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zcGlubmVyVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmV4aXN0aW5nRXhhY3RUYWcgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fc3Bpbm5lclZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlRXhhY3RUYWdGcm9tU2VhcmNoZWRSZXN1bHQoc2VhcmNoZWRSZXN1bHQ6IFRhZ1BhZ2luZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBleGFjdFRhZ0luZGV4ID0gc2VhcmNoZWRSZXN1bHQubGlzdC5lbnRyaWVzLmZpbmRJbmRleCgocm93KSA9PiB0aGlzLmNvbXBhcmVUYWdzKHJvdy5lbnRyeS50YWcsIHRoaXMuZXhpc3RpbmdFeGFjdFRhZy5lbnRyeS50YWcpKTtcblxuICAgICAgICBpZiAoZXhhY3RUYWdJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICBzZWFyY2hlZFJlc3VsdC5saXN0LmVudHJpZXMuc3BsaWNlKGV4YWN0VGFnSW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUlmTm90RXhpc3RpbmdUYWcodGFnTmFtZUNvbnRyb2w6IEZvcm1Db250cm9sPHN0cmluZz4pOiBPYnNlcnZhYmxlPFRhZ05hbWVDb250cm9sRXJyb3JzIHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5leGFjdFRhZ1NldCQucGlwZShcbiAgICAgICAgICAgIG1hcDx2b2lkLCBUYWdOYW1lQ29udHJvbEVycm9ycyB8IG51bGw+KCgpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wYXJlVGFncyh0YWdOYW1lQ29udHJvbC52YWx1ZSwgdGhpcy5leGlzdGluZ0V4YWN0VGFnPy5lbnRyeT8udGFnKSA/IHsgZHVwbGljYXRlZEV4aXN0aW5nVGFnOiB0cnVlIH0gOiBudWxsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgZmlyc3QoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVJZk5vdEFscmVhZHlBZGRlZCh0YWdOYW1lQ29udHJvbDogRm9ybUNvbnRyb2w8c3RyaW5nPik6IFRhZ05hbWVDb250cm9sRXJyb3JzIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZ3Muc29tZSgodGFnKSA9PiB0aGlzLmNvbXBhcmVUYWdzKHRhZywgdGFnTmFtZUNvbnRyb2wudmFsdWUpKSA/IHsgZHVwbGljYXRlZEFkZGVkVGFnOiB0cnVlIH0gOiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29tcGFyZVRhZ3ModGFnTmFtZTE/OiBzdHJpbmcsIHRhZ05hbWUyPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0YWdOYW1lMT8udHJpbSgpLnRvVXBwZXJDYXNlKCkgPT09IHRhZ05hbWUyPy50cmltKCkudG9VcHBlckNhc2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlRW1wdHlUYWcodGFnTmFtZUNvbnRyb2w6IEZvcm1Db250cm9sPHN0cmluZz4pOiBUYWdOYW1lQ29udHJvbEVycm9ycyB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGFnTmFtZUNvbnRyb2wudmFsdWUubGVuZ3RoICYmICF0YWdOYW1lQ29udHJvbC52YWx1ZS50cmltKCkgPyB7IGVtcHR5VGFnOiB0cnVlIH0gOiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVTcGVjaWFsQ2hhcmFjdGVycyh0YWdOYW1lQ29udHJvbDogRm9ybUNvbnRyb2w8c3RyaW5nPik6IFRhZ05hbWVDb250cm9sRXJyb3JzIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHNwZWNpYWxTeW1ib2xzUmVnZXggPSAvW3t9KCleJzpcIlxcXFx8PD4vPy4qXS87XG4gICAgICAgIHJldHVybiB0YWdOYW1lQ29udHJvbC52YWx1ZS5sZW5ndGggJiYgc3BlY2lhbFN5bWJvbHNSZWdleC50ZXN0KHRhZ05hbWVDb250cm9sLnZhbHVlKSA/IHsgc3BlY2lhbENoYXJhY3RlcnM6IHRydWUgfSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRUYWdOYW1lQ29udHJvbEVycm9yTWVzc2FnZUtleSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFnTmFtZUVycm9yTWVzc2FnZUtleSA9IHRoaXMudGFnTmFtZUNvbnRyb2wuaW52YWxpZFxuICAgICAgICAgICAgPyBgVEFHLlRBR1NfQ1JFQVRPUi5FUlJPUlMuJHt0aGlzLm5hbWVFcnJvck1lc3NhZ2VzQnlFcnJvcnMuZ2V0KFxuICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy50YWdOYW1lQ29udHJvbC5lcnJvcnMpWzBdIGFzIGtleW9mIFRhZ05hbWVDb250cm9sRXJyb3JzXG4gICAgICAgICAgICAgICl9YFxuICAgICAgICAgICAgOiAnJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrU2Nyb2xsYmFyVmlzaWJpbGl0eSgpOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl90YWdzTGlzdFNjcm9sbGJhclZpc2libGUgPSB0aGlzLnRhZ3NMaXN0RWxlbWVudC5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodCA+IHRoaXMudGFnc0xpc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZVRhZ0Zyb21BcnJheTxUPih0YWdzOiBUW10sIHRhZzogVCkge1xuICAgICAgICB0YWdzLnNwbGljZSh0YWdzLmluZGV4T2YodGFnKSwgMSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVFeGlzdGluZ1RhZ3NMaXN0T25SZW1vdmVGcm9tVGFnc1RvQ29uZmlybSh0YWc6IHN0cmluZykge1xuICAgICAgICBjb25zdCBlbnRyeUZvclRhZ0FkZGVkVG9FeGlzdGluZ1RhZ3MgPSB0aGlzLl9pbml0aWFsRXhpc3RpbmdUYWdzPy5maW5kKCh0YWdFbnRyeSkgPT4gdGFnRW50cnkuZW50cnkudGFnID09PSB0YWcpO1xuICAgICAgICBpZiAoZW50cnlGb3JUYWdBZGRlZFRvRXhpc3RpbmdUYWdzKSB7XG4gICAgICAgICAgICB0aGlzLmV4aXN0aW5nVGFncy51bnNoaWZ0KGVudHJ5Rm9yVGFnQWRkZWRUb0V4aXN0aW5nVGFncyk7XG4gICAgICAgICAgICBpZiAodGhpcy5leGlzdGluZ0V4YWN0VGFnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhZyAhPT0gdGhpcy5leGlzdGluZ0V4YWN0VGFnLmVudHJ5LnRhZykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVRhZ0Zyb21BcnJheSh0aGlzLmV4aXN0aW5nVGFncywgdGhpcy5leGlzdGluZ0V4YWN0VGFnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3J0RXhpc3RpbmdUYWdzKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhpc3RpbmdUYWdzLnVuc2hpZnQodGhpcy5leGlzdGluZ0V4YWN0VGFnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc29ydEV4aXN0aW5nVGFncygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5leGFjdFRhZ1NldCQubmV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzb3J0RXhpc3RpbmdUYWdzKCkge1xuICAgICAgICB0aGlzLmV4aXN0aW5nVGFncy5zb3J0KCh0YWdFbnRyeTEsIHRhZ0VudHJ5MikgPT4gdGFnRW50cnkxLmVudHJ5LnRhZy5sb2NhbGVDb21wYXJlKHRhZ0VudHJ5Mi5lbnRyeS50YWcpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4Y2x1ZGVBbHJlYWR5QWRkZWRUYWdzKHRhZ3M6IFRhZ0VudHJ5W10pIHtcbiAgICAgICAgdGhpcy5fZXhpc3RpbmdUYWdzID0gdGFncy5maWx0ZXIoKHRhZykgPT4gIXRoaXMudGFncy5pbmNsdWRlcyh0YWcuZW50cnkudGFnKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhclRhZ05hbWVJbnB1dCgpIHtcbiAgICAgICAgdGhpcy50YWdOYW1lQ29udHJvbC5zZXRWYWx1ZSgnJyk7XG4gICAgICAgIHRoaXMudGFnTmFtZUNvbnRyb2wubWFya0FzVW50b3VjaGVkKCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImFkZi10YWdzLWNyZWF0aW9uXCI+XG4gICAgPGRpdiAqbmdJZj1cInRhZ05hbWVDb250cm9sVmlzaWJsZVwiIGNsYXNzPVwiYWRmLXRhZy1uYW1lLWZpZWxkXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgI3RhZ05hbWVJbnB1dFxuICAgICAgICAgICAgY2xhc3M9XCJhZGYtdGFnLXNlYXJjaC1maWVsZFwiXG4gICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJ0YWdOYW1lQ29udHJvbFwiXG4gICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiYWRkVGFnKClcIlxuICAgICAgICAgICAgYWRmLWF1dG8tZm9jdXNcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ1RBRy5UQUdTX0NSRUFUT1IuVEFHX1NFQVJDSF9QTEFDRUhPTERFUicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAvPlxuICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwidGFnTmFtZUNvbnRyb2wuaW52YWxpZCAmJiB0YWdOYW1lQ29udHJvbC50b3VjaGVkXCI+XG4gICAgICAgICAgICB7eyB0YWdOYW1lRXJyb3JNZXNzYWdlS2V5IHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LWVycm9yPlxuICAgIDwvZGl2PlxuICAgIDxwIGNsYXNzPVwiYWRmLW5vLXRhZ3MtbWVzc2FnZVwiICpuZ0lmPVwic2hvd0VtcHR5VGFnTWVzc2FnZVwiPlxuICAgICAgICB7eyAnVEFHLlRBR1NfQ1JFQVRPUi5OT19UQUdTX0NSRUFURUQnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9wPlxuICAgIDxkaXYgY2xhc3M9XCJhZGYtdGFncy1saXN0XCIgW2NsYXNzLmFkZi10YWdzLWxpc3QtZml4ZWRdPVwiIXRhZ05hbWVDb250cm9sVmlzaWJsZVwiICN0YWdzTGlzdD5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhZ3M/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgIDxhZGYtZHluYW1pYy1jaGlwLWxpc3RcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi10YWdzLWNoaXBzLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgW2NoaXBzXT1cInRhZ3NUb0Rpc3BsYXlcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlRGVsZXRlXT1cImRpc2FibGVkVGFnc1JlbW92aW5nXCJcbiAgICAgICAgICAgICAgICAocmVtb3ZlZENoaXApPVwicmVtb3ZlVGFnKCRldmVudClcIiAvPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImFkZi1leGlzdGluZy10YWdzLXBhbmVsXCIgKm5nSWY9XCJleGlzdGluZ1RhZ3NQYW5lbFZpc2libGVcIj5cbiAgICA8c3BhblxuICAgICAgICAqbmdJZj1cIiFzcGlubmVyVmlzaWJsZSB8fCBleGlzdGluZ1RhZ3NcIlxuICAgICAgICBjbGFzcz1cImFkZi1jcmVhdGUtdGFnLWxhYmVsXCJcbiAgICAgICAgKGNsaWNrKT1cImFkZFRhZygpXCJcbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJhZGRUYWcoKVwiXG4gICAgICAgIFtoaWRkZW5dPVwiIXRhZ05hbWVDb250cm9sLnZhbHVlIHx8IHRhZ05hbWVDb250cm9sLmludmFsaWQgfHwgdHlwaW5nXCJcbiAgICA+XG4gICAgICAgIHt7ICdUQUcuVEFHU19DUkVBVE9SLkNSRUFURV9UQUcnIHwgdHJhbnNsYXRlIDogeyB0YWc6IHRhZ05hbWVDb250cm9sLnZhbHVlIH0gfX1cbiAgICA8L3NwYW4+XG4gICAgPHAgKm5nSWY9XCIhc3Bpbm5lclZpc2libGUgJiYgZXhpc3RpbmdUYWdzXCIgY2xhc3M9XCJhZGYtZXhpc3RpbmctdGFncy1sYWJlbFwiPlxuICAgICAgICB7eyAoaXNPbmx5Q3JlYXRlTW9kZSgpID8gJ1RBRy5UQUdTX0NSRUFUT1IuRVhJU1RJTkdfVEFHUycgOiAnVEFHLlRBR1NfQ1JFQVRPUi5FWElTVElOR19UQUdTX1NFTEVDVElPTicpIHwgdHJhbnNsYXRlIH19XG4gICAgPC9wPlxuICAgIDxkaXYgY2xhc3M9XCJhZGYtdGFncy1saXN0XCI+XG4gICAgICAgIDxtYXQtbGlzdCAqbmdJZj1cIiFzcGlubmVyVmlzaWJsZSAmJiBleGlzdGluZ1RhZ3NcIiBbZGlzYWJsZWRdPVwiaXNPbmx5Q3JlYXRlTW9kZSgpXCI+XG4gICAgICAgICAgICA8bWF0LWxpc3QtaXRlbSAqbmdGb3I9XCJsZXQgdGFnUm93IG9mIGV4aXN0aW5nVGFnc1wiIGNsYXNzPVwiYWRmLXRhZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkRXhpc3RpbmdUYWdUb1RhZ3NUb0Fzc2lnbih0YWdSb3cpXCI+XG4gICAgICAgICAgICAgICAge3sgdGFnUm93LmVudHJ5LnRhZyB9fVxuICAgICAgICAgICAgPC9tYXQtbGlzdC1pdGVtPlxuICAgICAgICAgICAgPHAgKm5nSWY9XCIhZXhpc3RpbmdUYWdzPy5sZW5ndGhcIj57eyAnVEFHLlRBR1NfQ1JFQVRPUi5OT19FWElTVElOR19UQUdTJyB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICAgICAgPC9tYXQtbGlzdD5cbiAgICAgICAgPG1hdC1zcGlubmVyXG4gICAgICAgICAgICAqbmdJZj1cInNwaW5uZXJWaXNpYmxlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYWRmLXRhZ3MtY3JlYXRvci1zcGlubmVyXCJcbiAgICAgICAgICAgIFtkaWFtZXRlcl09XCI1MFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidUQUcuVEFHU19DUkVBVE9SLlRBR1NfTE9BRElORycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAvPlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
370
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFncy1jcmVhdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvdGFnL3RhZ3MtY3JlYXRvci90YWdzLWNyZWF0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbnRlbnQtc2VydmljZXMvc3JjL2xpYi90YWcvdGFncy1jcmVhdG9yL3RhZ3MtY3JlYXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQVEsd0JBQXdCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV6RixPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFB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QkFBa0Isd0RBQ2xCLGFBQWEsaURBQ2IsY0FBYyw4QkFDZCxlQUFlLDhCQUNmLGFBQWEsOEJBQ2IsYUFBYSx1UkFDYix3QkFBd0IsbU9BQ3hCLHdCQUF3Qjs7NEZBTW5CLG9CQUFvQjtrQkFwQmhDLFNBQVM7K0JBQ0ksa0JBQWtCLGNBQ2hCLElBQUksV0FDUDt3QkFDTCxZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYix3QkFBd0I7d0JBQ3hCLHdCQUF3QjtxQkFDM0IsaUJBR2MsaUJBQWlCLENBQUMsSUFBSTtpSEFTckMsSUFBSTtzQkFESCxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFPekIsb0JBQW9CO3NCQURuQixLQUFLO2dCQVNGLElBQUk7c0JBRFAsS0FBSztnQkFvQkYscUJBQXFCO3NCQUR4QixLQUFLO2dCQXVCTixpQ0FBaUM7c0JBRGhDLE1BQU07Z0JBTVAsVUFBVTtzQkFEVCxNQUFNO2dCQWlDQyxlQUFlO3NCQUR0QixTQUFTO3VCQUFDLFVBQVU7Z0JBR2IsbUJBQW1CO3NCQUQxQixTQUFTO3VCQUFDLGNBQWM7Z0JBNkNyQixTQUFTO3NCQURaLFdBQVc7dUJBQUMsNENBQTRDIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBDaGlwLCBEeW5hbWljQ2hpcExpc3RDb21wb25lbnQsIE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgVGFnRW50cnksIFRhZ1BhZ2luZyB9IGZyb20gJ0BhbGZyZXNjby9qcy1hcGknO1xuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRGVzdHJveVJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdENoaXBzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hpcHMnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRMaXN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGlzdCc7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEVNUFRZLCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmluYWxpemUsIGZpcnN0LCBtYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXV0b0ZvY3VzRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBUYWdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdGFnLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFnc0NyZWF0b3JNb2RlIH0gZnJvbSAnLi90YWdzLWNyZWF0b3ItbW9kZSc7XG5cbmludGVyZmFjZSBUYWdOYW1lQ29udHJvbEVycm9ycyB7XG4gICAgZHVwbGljYXRlZEV4aXN0aW5nVGFnPzogYm9vbGVhbjtcbiAgICBkdXBsaWNhdGVkQWRkZWRUYWc/OiBib29sZWFuO1xuICAgIGVtcHR5VGFnPzogYm9vbGVhbjtcbiAgICBzcGVjaWFsQ2hhcmFjdGVycz86IGJvb2xlYW47XG59XG5cbmNvbnN0IERFRkFVTFRfVEFHU19TT1JUSU5HID0ge1xuICAgIG9yZGVyQnk6ICd0YWcnLFxuICAgIGRpcmVjdGlvbjogJ2FzYydcbn07XG5cbi8qKlxuICogQWxsb3dzIHRvIGNyZWF0ZSBtdWx0aXBsZSB0YWdzLiBUaGF0IGNvbXBvbmVudCBjb250YWlucyBpbnB1dCBhbmQgdHdvIGxpc3RzLiBUb3AgbGlzdCBpcyBhbGwgY3JlYXRlZCB0YWdzLCBib3R0b20gbGlzdCBpcyBzZWFyY2hlZCB0YWdzIGJhc2VkIG9uIGlucHV0J3MgdmFsdWUuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWRmLXRhZ3MtY3JlYXRvcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIEF1dG9Gb2N1c0RpcmVjdGl2ZSxcbiAgICAgICAgVHJhbnNsYXRlUGlwZSxcbiAgICAgICAgTWF0Q2hpcHNNb2R1bGUsXG4gICAgICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcbiAgICAgICAgTWF0TGlzdE1vZHVsZSxcbiAgICAgICAgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLFxuICAgICAgICBEeW5hbWljQ2hpcExpc3RDb21wb25lbnRcbiAgICBdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWdzLWNyZWF0b3IuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3RhZ3MtY3JlYXRvci5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgVGFnc0NyZWF0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqXG4gICAgICogTW9kZSBmb3IgY29tcG9uZW50LlxuICAgICAqIEluIENyZWF0ZSBtb2RlIHdlIGNhbid0IHNlbGVjdCBleGlzdGluZyB0YWdzLCB3ZSBjYW4gb25seSBjcmVhdGUgdGhlbS5cbiAgICAgKiBJbiBDcmVhdGUgYW5kIEFzc2lnbiBtb2RlIHdlIGNhbiBib3RoIC0gY3JlYXRlIHRhZ3MgYW5kIHNlbGVjdCBleGlzdGluZyB0YWdzLlxuICAgICAqL1xuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gICAgbW9kZTogVGFnc0NyZWF0b3JNb2RlO1xuXG4gICAgLyoqXG4gICAgICogRmFsc2UgaWYgdGFncyBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRvcCBsaXN0LCB0cnVlIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVkVGFnc1JlbW92aW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZWZhdWx0IHRvcCBsaXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHRhZ3MgdGFncyB3aGljaCBzaG91bGQgYmUgZGlzcGxheWVkIGFzIGRlZmF1bHQgdGFncyBmb3IgdG9wIGxpc3QuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGFncyh0YWdzOiBzdHJpbmdbXSkge1xuICAgICAgICB0aGlzLl90YWdzID0gWy4uLnRhZ3NdO1xuICAgICAgICB0aGlzLnRhZ3NUb0Rpc3BsYXkgPSB0aGlzLnRhZ3MubWFwKCh0YWcpID0+ICh7IGlkOiB0YWcsIG5hbWU6IHRhZyB9KSk7XG4gICAgICAgIHRoaXMuX2luaXRpYWxFeGlzdGluZ1RhZ3MgPSBudWxsO1xuICAgICAgICB0aGlzLl9leGlzdGluZ1RhZ3MgPSBudWxsO1xuICAgICAgICB0aGlzLmxvYWRUYWdzKHRoaXMudGFnTmFtZUNvbnRyb2wudmFsdWUpO1xuICAgICAgICB0aGlzLnRhZ05hbWVDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB9XG5cbiAgICBnZXQgdGFncygpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWdzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlY2lkZXMgaWYgaW5wdXQgZm9yIHRhZ3MgY3JlYXRpb24vc2VhcmNoaW5nIHNob3VsZCBiZSB2aXNpYmxlLiBXaGVuIGlucHV0IGlzIGhpZGRlbiB0aGVuIHBhbmVsIG9mIGV4aXN0aW5nIHRhZ3MgaXMgaGlkZGVuIGFzIHdlbGwuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGFnTmFtZUNvbnRyb2xWaXNpYmxlIHRydWUgaWYgaW5wdXQgc2hvdWxkIGJlIHZpc2libGUsIGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0YWdOYW1lQ29udHJvbFZpc2libGUodGFnTmFtZUNvbnRyb2xWaXNpYmxlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3RhZ05hbWVDb250cm9sVmlzaWJsZSA9IHRhZ05hbWVDb250cm9sVmlzaWJsZTtcbiAgICAgICAgaWYgKHRhZ05hbWVDb250cm9sVmlzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy5fZXhpc3RpbmdUYWdzUGFuZWxWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudGFnTmFtZUlucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudD8uc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZXhpc3RpbmdUYWdzUGFuZWxWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNsZWFyVGFnTmFtZUlucHV0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5leGlzdGluZ1RhZ3NQYW5lbFZpc2liaWxpdHlDaGFuZ2UuZW1pdCh0aGlzLmV4aXN0aW5nVGFnc1BhbmVsVmlzaWJsZSk7XG4gICAgfVxuXG4gICAgZ2V0IHRhZ05hbWVDb250cm9sVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhZ05hbWVDb250cm9sVmlzaWJsZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gYm90dG9tIGxpc3QgaXMgc2hvd2luZyBvciBoaWRpbmcuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgZXhpc3RpbmdUYWdzUGFuZWxWaXNpYmlsaXR5Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0YWdzIGluIHRvcCBsaXN0IGFyZSBjaGFuZ2VkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHRhZ3NDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdPigpO1xuXG4gICAgdGFnc1RvRGlzcGxheTogQ2hpcFtdID0gW107XG5cbiAgICByZWFkb25seSBuYW1lRXJyb3JNZXNzYWdlc0J5RXJyb3JzID0gbmV3IE1hcDxrZXlvZiBUYWdOYW1lQ29udHJvbEVycm9ycywgc3RyaW5nPihbXG4gICAgICAgIFsnZHVwbGljYXRlZEV4aXN0aW5nVGFnJywgJ0VYSVNUSU5HX1RBRyddLFxuICAgICAgICBbJ2R1cGxpY2F0ZWRBZGRlZFRhZycsICdBTFJFQURZX0FEREVEX1RBRyddLFxuICAgICAgICBbJ2VtcHR5VGFnJywgJ0VNUFRZX1RBRyddLFxuICAgICAgICBbJ3NwZWNpYWxDaGFyYWN0ZXJzJywgJ1NQRUNJQUxfQ0hBUkFDVEVSUyddXG4gICAgXSk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGV4aXN0aW5nVGFnc0xpc3RMaW1pdCA9IDE1O1xuXG4gICAgcHJpdmF0ZSBleGFjdFRhZ1NldCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHByaXZhdGUgX3RhZ3M6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBfdGFnTmFtZUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nPihcbiAgICAgICAgJycsXG4gICAgICAgIFt0aGlzLnZhbGlkYXRlSWZOb3RBbHJlYWR5QWRkZWQuYmluZCh0aGlzKSwgdGhpcy52YWxpZGF0ZUVtcHR5VGFnLCB0aGlzLnZhbGlkYXRlU3BlY2lhbENoYXJhY3RlcnNdLFxuICAgICAgICB0aGlzLnZhbGlkYXRlSWZOb3RFeGlzdGluZ1RhZy5iaW5kKHRoaXMpXG4gICAgKTtcbiAgICBwcml2YXRlIF90YWdOYW1lQ29udHJvbFZpc2libGUgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9leGlzdGluZ1RhZ3M6IFRhZ0VudHJ5W107XG4gICAgcHJpdmF0ZSBfaW5pdGlhbEV4aXN0aW5nVGFnczogVGFnRW50cnlbXTtcbiAgICBwcml2YXRlIF90YWdOYW1lRXJyb3JNZXNzYWdlS2V5ID0gJyc7XG4gICAgcHJpdmF0ZSBfc3Bpbm5lclZpc2libGUgPSBmYWxzZTtcbiAgICBwcml2YXRlIF90eXBpbmcgPSBmYWxzZTtcbiAgICBwcml2YXRlIF90YWdzTGlzdFNjcm9sbGJhclZpc2libGUgPSBmYWxzZTtcbiAgICBwcml2YXRlIGNhbmNlbEV4aXN0aW5nVGFnc0xvYWRpbmckID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBwcml2YXRlIGV4aXN0aW5nRXhhY3RUYWc6IFRhZ0VudHJ5O1xuICAgIHByaXZhdGUgX2V4aXN0aW5nVGFnc1BhbmVsVmlzaWJsZTogYm9vbGVhbjtcblxuICAgIEBWaWV3Q2hpbGQoJ3RhZ3NMaXN0JylcbiAgICBwcml2YXRlIHRhZ3NMaXN0RWxlbWVudDogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCd0YWdOYW1lSW5wdXQnKVxuICAgIHByaXZhdGUgdGFnTmFtZUlucHV0RWxlbWVudDogRWxlbWVudFJlZjtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgdGFnU2VydmljZTogVGFnU2VydmljZSwgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlKSB7fVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFnTmFtZUNvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKG5hbWU6IHN0cmluZykgPT4gbmFtZS50cmltKCkpLFxuICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwcmV2aW91cywgY3VycmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZU5vdENoYW5nZWQgPSBwcmV2aW91cyA9PT0gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlTm90Q2hhbmdlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leGFjdFRhZ1NldCQubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZU5vdENoYW5nZWQ7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFwKChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHlwaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NwaW5uZXJWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2V4aXN0aW5nVGFnc1BhbmVsVmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leGlzdGluZ1RhZ3NQYW5lbFZpc2liaWxpdHlDaGFuZ2UuZW1pdCh0aGlzLmV4aXN0aW5nVGFnc1BhbmVsVmlzaWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsRXhpc3RpbmdUYWdzTG9hZGluZyQubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbml0aWFsRXhpc3RpbmdUYWdzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXhpc3RpbmdUYWdzID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBkZWJvdW5jZSgobmFtZTogc3RyaW5nKSA9PiAobmFtZSA/IHRpbWVyKDMwMCkgOiBFTVBUWSkpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChuYW1lOiBzdHJpbmcpID0+IHRoaXMub25UYWdOYW1lQ29udHJvbFZhbHVlQ2hhbmdlKG5hbWUpKTtcblxuICAgICAgICB0aGlzLnRhZ05hbWVDb250cm9sLnN0YXR1c0NoYW5nZXMucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuc2V0VGFnTmFtZUNvbnRyb2xFcnJvck1lc3NhZ2VLZXkoKSk7XG5cbiAgICAgICAgdGhpcy5zZXRUYWdOYW1lQ29udHJvbEVycm9yTWVzc2FnZUtleSgpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNhbmNlbEV4aXN0aW5nVGFnc0xvYWRpbmckLm5leHQoKTtcbiAgICAgICAgdGhpcy5jYW5jZWxFeGlzdGluZ1RhZ3NMb2FkaW5nJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuYWRmLWNyZWF0b3Itd2l0aC1leGlzdGluZy10YWdzLXBhbmVsJylcbiAgICBnZXQgaG9zdENsYXNzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5leGlzdGluZ1RhZ3NQYW5lbFZpc2libGU7XG4gICAgfVxuXG4gICAgZ2V0IHRhZ05hbWVDb250cm9sKCk6IEZvcm1Db250cm9sPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFnTmFtZUNvbnRyb2w7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0YWdzIGVtcHR5IGFuZCBub24gZWRpdGFibGUgc3RhdGUsIG90aGVyd2lzZSBgZmFsc2VgXG4gICAgICovXG4gICAgZ2V0IHNob3dFbXB0eVRhZ01lc3NhZ2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZ3M/Lmxlbmd0aCA9PT0gMCAmJiAhdGhpcy50YWdOYW1lQ29udHJvbFZpc2libGU7XG4gICAgfVxuXG4gICAgZ2V0IGV4aXN0aW5nVGFncygpOiBUYWdFbnRyeVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4aXN0aW5nVGFncztcbiAgICB9XG5cbiAgICBnZXQgdGFnTmFtZUVycm9yTWVzc2FnZUtleSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFnTmFtZUVycm9yTWVzc2FnZUtleTtcbiAgICB9XG5cbiAgICBnZXQgc3Bpbm5lclZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zcGlubmVyVmlzaWJsZTtcbiAgICB9XG5cbiAgICBnZXQgdHlwaW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwaW5nO1xuICAgIH1cblxuICAgIGdldCB0YWdzTGlzdFNjcm9sbGJhclZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWdzTGlzdFNjcm9sbGJhclZpc2libGU7XG4gICAgfVxuXG4gICAgZ2V0IGV4aXN0aW5nVGFnc1BhbmVsVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4aXN0aW5nVGFnc1BhbmVsVmlzaWJsZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgdGFncyB0byB0b3AgbGlzdCB1c2luZyB2YWx1ZSB3aGljaCBpcyBzZXQgaW4gaW5wdXQuIEFkZGluZyB0YWcgaXMgbm90IGFsbG93ZWQgd2hlbiB2YWx1ZSBpbiBpbnB1dCBpcyBpbnZhbGlkXG4gICAgICogb3IgaWYgdXNlciBpcyBzdGlsbCB0eXBpbmcgd2hhdCBtZWFucyB0aGF0IHZhbGlkYXRpb24gZm9yIGlucHV0IGlzIG5vdCBjYWxsZWQgeWV0LlxuICAgICAqL1xuICAgIGFkZFRhZygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl90eXBpbmcgJiYgIXRoaXMudGFnTmFtZUNvbnRyb2wuaW52YWxpZCkge1xuICAgICAgICAgICAgdGhpcy50YWdzID0gWy4uLnRoaXMudGFncywgdGhpcy50YWdOYW1lQ29udHJvbC52YWx1ZS50cmltKCldO1xuICAgICAgICAgICAgdGhpcy5jbGVhclRhZ05hbWVJbnB1dCgpO1xuICAgICAgICAgICAgdGhpcy5jaGVja1Njcm9sbGJhclZpc2liaWxpdHkoKTtcbiAgICAgICAgICAgIHRoaXMudGFnc0NoYW5nZS5lbWl0KHRoaXMudGFncyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgdGFnIGZyb20gdG9wIGxpc3QuIEluIGNhc2UgdGhhdCB0YWcgd2FzIHBhcnQgb2Ygc2VhcmNoIHJlc3VsdCB0aGVuIHRoYXQgdGFnIGlzIG1vdmVkIHRvIGJvdHRvbSBsaXN0XG4gICAgICogKGxpc3Qgb2YgZXhpc3RpbmcgdGFncykgYWZ0ZXIgcmVtb3Zpbmcgc28gdXNlciBjYW4gcmVzZWxlY3QgaXQgYWdhaW4gbGF0ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGFnIHRhZydzIG5hbWUgd2hpY2ggc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSB0b3AgbGlzdC5cbiAgICAgKi9cbiAgICByZW1vdmVUYWcodGFnOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW1vdmVUYWdGcm9tQXJyYXkodGhpcy50YWdzLCB0YWcpO1xuICAgICAgICB0aGlzLnRhZ3MgPSBbLi4udGhpcy50YWdzXTtcbiAgICAgICAgdGhpcy50YWdOYW1lQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIHRoaXMudXBkYXRlRXhpc3RpbmdUYWdzTGlzdE9uUmVtb3ZlRnJvbVRhZ3NUb0NvbmZpcm0odGFnKTtcbiAgICAgICAgdGhpcy5leGFjdFRhZ1NldCQubmV4dCgpO1xuICAgICAgICB0aGlzLmNoZWNrU2Nyb2xsYmFyVmlzaWJpbGl0eSgpO1xuICAgICAgICB0aGlzLnRhZ3NDaGFuZ2UuZW1pdCh0aGlzLnRhZ3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGxlZCB3aGVuIHVzZXIgc2VsZWN0cyBhbnkgdGFnIGZyb20gbGlzdCBvZiBleGlzdGluZyB0YWdzLiBJdCBtb3ZlcyB0YWcgZnJvbSBleGlzdGluZyB0YWdzIGxpc3QgdG8gdG9wIGxpc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2VsZWN0ZWRUYWcgY2hhbmdlc1xuICAgICAqL1xuICAgIGFkZEV4aXN0aW5nVGFnVG9UYWdzVG9Bc3NpZ24oc2VsZWN0ZWRUYWc6IFRhZ0VudHJ5KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc09ubHlDcmVhdGVNb2RlKCkpIHtcbiAgICAgICAgICAgIHRoaXMudGFncy5wdXNoKHNlbGVjdGVkVGFnLmVudHJ5LnRhZyk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVRhZ0Zyb21BcnJheSh0aGlzLmV4aXN0aW5nVGFncywgc2VsZWN0ZWRUYWcpO1xuICAgICAgICAgICAgdGhpcy50YWdOYW1lQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgICAgICB0aGlzLnRhZ3MgPSBbLi4udGhpcy50YWdzXTtcbiAgICAgICAgICAgIHRoaXMuZXhhY3RUYWdTZXQkLm5leHQoKTtcbiAgICAgICAgICAgIHRoaXMudGFnc0NoYW5nZS5lbWl0KHRoaXMudGFncyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgY29tcG9uZW50IGlzIGluIENyZWF0ZSBtb2RlLlxuICAgICAqXG4gICAgICogQHJldHVybnMgYHRydWVgIGlmIGBDcmVhdGVgIG1vZGUsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGlzT25seUNyZWF0ZU1vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUgPT09IFRhZ3NDcmVhdG9yTW9kZS5DUkVBVEU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblRhZ05hbWVDb250cm9sVmFsdWVDaGFuZ2UobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFnTmFtZUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICB0aGlzLmxvYWRUYWdzKG5hbWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZFRhZ3MobmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGlmIChuYW1lICYmICF0aGlzLnRhZ05hbWVDb250cm9sLmhhc0Vycm9yKCdzcGVjaWFsQ2hhcmFjdGVycycpKSB7XG4gICAgICAgICAgICBmb3JrSm9pbih7XG4gICAgICAgICAgICAgICAgZXhhY3RSZXN1bHQ6IHRoaXMudGFnU2VydmljZS5maW5kVGFnQnlOYW1lKG5hbWUpLFxuICAgICAgICAgICAgICAgIHNlYXJjaGVkUmVzdWx0OiB0aGlzLnRhZ1NlcnZpY2Uuc2VhcmNoVGFncyhuYW1lLCBERUZBVUxUX1RBR1NfU09SVElORywgZmFsc2UsIDAsIHRoaXMuZXhpc3RpbmdUYWdzTGlzdExpbWl0KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuY2FuY2VsRXhpc3RpbmdUYWdzTG9hZGluZyQpLFxuICAgICAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiAodGhpcy5fdHlwaW5nID0gZmFsc2UpKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogKHsgZXhhY3RSZXN1bHQsIHNlYXJjaGVkUmVzdWx0IH06IHsgZXhhY3RSZXN1bHQ6IFRhZ0VudHJ5OyBzZWFyY2hlZFJlc3VsdDogVGFnUGFnaW5nIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleGFjdFJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhpc3RpbmdFeGFjdFRhZyA9IGV4YWN0UmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRXhhY3RUYWdGcm9tU2VhcmNoZWRSZXN1bHQoc2VhcmNoZWRSZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaGVkUmVzdWx0Lmxpc3QuZW50cmllcy51bnNoaWZ0KGV4YWN0UmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leGlzdGluZ0V4YWN0VGFnID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5pdGlhbEV4aXN0aW5nVGFncyA9IHNlYXJjaGVkUmVzdWx0Lmxpc3QuZW50cmllcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhjbHVkZUFscmVhZHlBZGRlZFRhZ3ModGhpcy5faW5pdGlhbEV4aXN0aW5nVGFncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4YWN0VGFnU2V0JC5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zcGlubmVyVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnNob3dFcnJvcignVEFHLlRBR1NfQ1JFQVRPUi5FUlJPUlMuRkVUQ0hfVEFHUycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3Bpbm5lclZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5leGlzdGluZ0V4YWN0VGFnID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX3NwaW5uZXJWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZUV4YWN0VGFnRnJvbVNlYXJjaGVkUmVzdWx0KHNlYXJjaGVkUmVzdWx0OiBUYWdQYWdpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZXhhY3RUYWdJbmRleCA9IHNlYXJjaGVkUmVzdWx0Lmxpc3QuZW50cmllcy5maW5kSW5kZXgoKHJvdykgPT4gdGhpcy5jb21wYXJlVGFncyhyb3cuZW50cnkudGFnLCB0aGlzLmV4aXN0aW5nRXhhY3RUYWcuZW50cnkudGFnKSk7XG5cbiAgICAgICAgaWYgKGV4YWN0VGFnSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgc2VhcmNoZWRSZXN1bHQubGlzdC5lbnRyaWVzLnNwbGljZShleGFjdFRhZ0luZGV4LCAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVJZk5vdEV4aXN0aW5nVGFnKHRhZ05hbWVDb250cm9sOiBGb3JtQ29udHJvbDxzdHJpbmc+KTogT2JzZXJ2YWJsZTxUYWdOYW1lQ29udHJvbEVycm9ycyB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhhY3RUYWdTZXQkLnBpcGUoXG4gICAgICAgICAgICBtYXA8dm9pZCwgVGFnTmFtZUNvbnRyb2xFcnJvcnMgfCBudWxsPigoKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuY29tcGFyZVRhZ3ModGFnTmFtZUNvbnRyb2wudmFsdWUsIHRoaXMuZXhpc3RpbmdFeGFjdFRhZz8uZW50cnk/LnRhZykgPyB7IGR1cGxpY2F0ZWRFeGlzdGluZ1RhZzogdHJ1ZSB9IDogbnVsbFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGZpcnN0KClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlSWZOb3RBbHJlYWR5QWRkZWQodGFnTmFtZUNvbnRyb2w6IEZvcm1Db250cm9sPHN0cmluZz4pOiBUYWdOYW1lQ29udHJvbEVycm9ycyB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy50YWdzLnNvbWUoKHRhZykgPT4gdGhpcy5jb21wYXJlVGFncyh0YWcsIHRhZ05hbWVDb250cm9sLnZhbHVlKSkgPyB7IGR1cGxpY2F0ZWRBZGRlZFRhZzogdHJ1ZSB9IDogbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbXBhcmVUYWdzKHRhZ05hbWUxPzogc3RyaW5nLCB0YWdOYW1lMj86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGFnTmFtZTE/LnRyaW0oKS50b1VwcGVyQ2FzZSgpID09PSB0YWdOYW1lMj8udHJpbSgpLnRvVXBwZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUVtcHR5VGFnKHRhZ05hbWVDb250cm9sOiBGb3JtQ29udHJvbDxzdHJpbmc+KTogVGFnTmFtZUNvbnRyb2xFcnJvcnMgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRhZ05hbWVDb250cm9sLnZhbHVlLmxlbmd0aCAmJiAhdGFnTmFtZUNvbnRyb2wudmFsdWUudHJpbSgpID8geyBlbXB0eVRhZzogdHJ1ZSB9IDogbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlU3BlY2lhbENoYXJhY3RlcnModGFnTmFtZUNvbnRyb2w6IEZvcm1Db250cm9sPHN0cmluZz4pOiBUYWdOYW1lQ29udHJvbEVycm9ycyB8IG51bGwge1xuICAgICAgICBjb25zdCBzcGVjaWFsU3ltYm9sc1JlZ2V4ID0gL1t7fSgpXic6XCJcXFxcfDw+Lz8uKl0vO1xuICAgICAgICByZXR1cm4gdGFnTmFtZUNvbnRyb2wudmFsdWUubGVuZ3RoICYmIHNwZWNpYWxTeW1ib2xzUmVnZXgudGVzdCh0YWdOYW1lQ29udHJvbC52YWx1ZSkgPyB7IHNwZWNpYWxDaGFyYWN0ZXJzOiB0cnVlIH0gOiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VGFnTmFtZUNvbnRyb2xFcnJvck1lc3NhZ2VLZXkoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhZ05hbWVFcnJvck1lc3NhZ2VLZXkgPSB0aGlzLnRhZ05hbWVDb250cm9sLmludmFsaWRcbiAgICAgICAgICAgID8gYFRBRy5UQUdTX0NSRUFUT1IuRVJST1JTLiR7dGhpcy5uYW1lRXJyb3JNZXNzYWdlc0J5RXJyb3JzLmdldChcbiAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMudGFnTmFtZUNvbnRyb2wuZXJyb3JzKVswXSBhcyBrZXlvZiBUYWdOYW1lQ29udHJvbEVycm9yc1xuICAgICAgICAgICAgICApfWBcbiAgICAgICAgICAgIDogJyc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja1Njcm9sbGJhclZpc2liaWxpdHkoKTogdm9pZCB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdGFnc0xpc3RTY3JvbGxiYXJWaXNpYmxlID0gdGhpcy50YWdzTGlzdEVsZW1lbnQubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgPiB0aGlzLnRhZ3NMaXN0RWxlbWVudC5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVUYWdGcm9tQXJyYXk8VD4odGFnczogVFtdLCB0YWc6IFQpIHtcbiAgICAgICAgdGFncy5zcGxpY2UodGFncy5pbmRleE9mKHRhZyksIDEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlRXhpc3RpbmdUYWdzTGlzdE9uUmVtb3ZlRnJvbVRhZ3NUb0NvbmZpcm0odGFnOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZW50cnlGb3JUYWdBZGRlZFRvRXhpc3RpbmdUYWdzID0gdGhpcy5faW5pdGlhbEV4aXN0aW5nVGFncz8uZmluZCgodGFnRW50cnkpID0+IHRhZ0VudHJ5LmVudHJ5LnRhZyA9PT0gdGFnKTtcbiAgICAgICAgaWYgKGVudHJ5Rm9yVGFnQWRkZWRUb0V4aXN0aW5nVGFncykge1xuICAgICAgICAgICAgdGhpcy5leGlzdGluZ1RhZ3MudW5zaGlmdChlbnRyeUZvclRhZ0FkZGVkVG9FeGlzdGluZ1RhZ3MpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZXhpc3RpbmdFeGFjdFRhZykge1xuICAgICAgICAgICAgICAgIGlmICh0YWcgIT09IHRoaXMuZXhpc3RpbmdFeGFjdFRhZy5lbnRyeS50YWcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVUYWdGcm9tQXJyYXkodGhpcy5leGlzdGluZ1RhZ3MsIHRoaXMuZXhpc3RpbmdFeGFjdFRhZyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc29ydEV4aXN0aW5nVGFncygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4aXN0aW5nVGFncy51bnNoaWZ0KHRoaXMuZXhpc3RpbmdFeGFjdFRhZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvcnRFeGlzdGluZ1RhZ3MoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZXhhY3RUYWdTZXQkLm5leHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc29ydEV4aXN0aW5nVGFncygpIHtcbiAgICAgICAgdGhpcy5leGlzdGluZ1RhZ3Muc29ydCgodGFnRW50cnkxLCB0YWdFbnRyeTIpID0+IHRhZ0VudHJ5MS5lbnRyeS50YWcubG9jYWxlQ29tcGFyZSh0YWdFbnRyeTIuZW50cnkudGFnKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleGNsdWRlQWxyZWFkeUFkZGVkVGFncyh0YWdzOiBUYWdFbnRyeVtdKSB7XG4gICAgICAgIHRoaXMuX2V4aXN0aW5nVGFncyA9IHRhZ3MuZmlsdGVyKCh0YWcpID0+ICF0aGlzLnRhZ3MuaW5jbHVkZXModGFnLmVudHJ5LnRhZykpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYXJUYWdOYW1lSW5wdXQoKSB7XG4gICAgICAgIHRoaXMudGFnTmFtZUNvbnRyb2wuc2V0VmFsdWUoJycpO1xuICAgICAgICB0aGlzLnRhZ05hbWVDb250cm9sLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJhZGYtdGFncy1jcmVhdGlvblwiPlxuICAgIDxkaXYgKm5nSWY9XCJ0YWdOYW1lQ29udHJvbFZpc2libGVcIiBjbGFzcz1cImFkZi10YWctbmFtZS1maWVsZFwiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICN0YWdOYW1lSW5wdXRcbiAgICAgICAgICAgIGNsYXNzPVwiYWRmLXRhZy1zZWFyY2gtZmllbGRcIlxuICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwidGFnTmFtZUNvbnRyb2xcIlxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImFkZFRhZygpXCJcbiAgICAgICAgICAgIGFkZi1hdXRvLWZvY3VzXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdUQUcuVEFHU19DUkVBVE9SLlRBR19TRUFSQ0hfUExBQ0VIT0xERVInIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgLz5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cInRhZ05hbWVDb250cm9sLmludmFsaWQgJiYgdGFnTmFtZUNvbnRyb2wudG91Y2hlZFwiPlxuICAgICAgICAgICAge3sgdGFnTmFtZUVycm9yTWVzc2FnZUtleSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1lcnJvcj5cbiAgICA8L2Rpdj5cbiAgICA8cCBjbGFzcz1cImFkZi1uby10YWdzLW1lc3NhZ2VcIiAqbmdJZj1cInNob3dFbXB0eVRhZ01lc3NhZ2VcIj5cbiAgICAgICAge3sgJ1RBRy5UQUdTX0NSRUFUT1IuTk9fVEFHU19DUkVBVEVEJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvcD5cbiAgICA8ZGl2IGNsYXNzPVwiYWRmLXRhZ3MtbGlzdFwiIFtjbGFzcy5hZGYtdGFncy1saXN0LWZpeGVkXT1cIiF0YWdOYW1lQ29udHJvbFZpc2libGVcIiAjdGFnc0xpc3Q+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWdzPy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8YWRmLWR5bmFtaWMtY2hpcC1saXN0XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtdGFncy1jaGlwcy1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgIFtjaGlwc109XCJ0YWdzVG9EaXNwbGF5XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZURlbGV0ZV09XCJkaXNhYmxlZFRhZ3NSZW1vdmluZ1wiXG4gICAgICAgICAgICAgICAgKHJlbW92ZWRDaGlwKT1cInJlbW92ZVRhZygkZXZlbnQpXCIgLz5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJhZGYtZXhpc3RpbmctdGFncy1wYW5lbFwiICpuZ0lmPVwiZXhpc3RpbmdUYWdzUGFuZWxWaXNpYmxlXCI+XG4gICAgPHNwYW5cbiAgICAgICAgKm5nSWY9XCIhc3Bpbm5lclZpc2libGUgfHwgZXhpc3RpbmdUYWdzXCJcbiAgICAgICAgY2xhc3M9XCJhZGYtY3JlYXRlLXRhZy1sYWJlbFwiXG4gICAgICAgIChjbGljayk9XCJhZGRUYWcoKVwiXG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAoa2V5dXAuZW50ZXIpPVwiYWRkVGFnKClcIlxuICAgICAgICBbaGlkZGVuXT1cIiF0YWdOYW1lQ29udHJvbC52YWx1ZSB8fCB0YWdOYW1lQ29udHJvbC5pbnZhbGlkIHx8IHR5cGluZ1wiXG4gICAgPlxuICAgICAgICB7eyAnVEFHLlRBR1NfQ1JFQVRPUi5DUkVBVEVfVEFHJyB8IHRyYW5zbGF0ZSA6IHsgdGFnOiB0YWdOYW1lQ29udHJvbC52YWx1ZSB9IH19XG4gICAgPC9zcGFuPlxuICAgIDxwICpuZ0lmPVwiIXNwaW5uZXJWaXNpYmxlICYmIGV4aXN0aW5nVGFnc1wiIGNsYXNzPVwiYWRmLWV4aXN0aW5nLXRhZ3MtbGFiZWxcIj5cbiAgICAgICAge3sgKGlzT25seUNyZWF0ZU1vZGUoKSA/ICdUQUcuVEFHU19DUkVBVE9SLkVYSVNUSU5HX1RBR1MnIDogJ1RBRy5UQUdTX0NSRUFUT1IuRVhJU1RJTkdfVEFHU19TRUxFQ1RJT04nKSB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvcD5cbiAgICA8ZGl2IGNsYXNzPVwiYWRmLXRhZ3MtbGlzdFwiPlxuICAgICAgICA8bWF0LWxpc3QgKm5nSWY9XCIhc3Bpbm5lclZpc2libGUgJiYgZXhpc3RpbmdUYWdzXCIgW2Rpc2FibGVkXT1cImlzT25seUNyZWF0ZU1vZGUoKVwiPlxuICAgICAgICAgICAgPG1hdC1saXN0LWl0ZW0gKm5nRm9yPVwibGV0IHRhZ1JvdyBvZiBleGlzdGluZ1RhZ3NcIiBjbGFzcz1cImFkZi10YWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZEV4aXN0aW5nVGFnVG9UYWdzVG9Bc3NpZ24odGFnUm93KVwiPlxuICAgICAgICAgICAgICAgIHt7IHRhZ1Jvdy5lbnRyeS50YWcgfX1cbiAgICAgICAgICAgIDwvbWF0LWxpc3QtaXRlbT5cbiAgICAgICAgICAgIDxwICpuZ0lmPVwiIWV4aXN0aW5nVGFncz8ubGVuZ3RoXCI+e3sgJ1RBRy5UQUdTX0NSRUFUT1IuTk9fRVhJU1RJTkdfVEFHUycgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgICAgIDwvbWF0LWxpc3Q+XG4gICAgICAgIDxtYXQtc3Bpbm5lclxuICAgICAgICAgICAgKm5nSWY9XCJzcGlubmVyVmlzaWJsZVwiXG4gICAgICAgICAgICBjbGFzcz1cImFkZi10YWdzLWNyZWF0b3Itc3Bpbm5lclwiXG4gICAgICAgICAgICBbZGlhbWV0ZXJdPVwiNTBcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInVEFHLlRBR1NfQ1JFQVRPUi5UQUdTX0xPQURJTkcnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgLz5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -23,7 +23,7 @@ import { SelectionModel } from '@angular/cdk/collections';
23
23
  import { MatCheckbox, MatCheckboxModule } from '@angular/material/checkbox';
24
24
  import { takeUntil } from 'rxjs/operators';
25
25
  import { CommonModule } from '@angular/common';
26
- import { TranslateModule } from '@ngx-translate/core';
26
+ import { TranslatePipe } from '@ngx-translate/core';
27
27
  import { MatTreeModule } from '@angular/material/tree';
28
28
  import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
29
29
  import { MatButtonModule } from '@angular/material/button';
@@ -33,13 +33,12 @@ import * as i0 from "@angular/core";
33
33
  import * as i1 from "../services/tree.service";
34
34
  import * as i2 from "@alfresco/adf-core";
35
35
  import * as i3 from "@angular/common";
36
- import * as i4 from "@ngx-translate/core";
37
- import * as i5 from "@angular/material/tree";
38
- import * as i6 from "@angular/material/progress-spinner";
39
- import * as i7 from "@angular/material/button";
40
- import * as i8 from "@angular/material/checkbox";
41
- import * as i9 from "@angular/material/menu";
42
- import * as i10 from "@angular/material/icon";
36
+ import * as i4 from "@angular/material/tree";
37
+ import * as i5 from "@angular/material/progress-spinner";
38
+ import * as i6 from "@angular/material/button";
39
+ import * as i7 from "@angular/material/checkbox";
40
+ import * as i8 from "@angular/material/menu";
41
+ import * as i9 from "@angular/material/icon";
43
42
  export class TreeComponent {
44
43
  constructor(treeService, userPreferenceService) {
45
44
  this.treeService = treeService;
@@ -265,13 +264,13 @@ export class TreeComponent {
265
264
  return node.nodeType !== TreeNodeType.LoadMoreNode;
266
265
  }
267
266
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TreeComponent, deps: [{ token: i1.TreeService }, { token: i2.UserPreferencesService }], target: i0.ɵɵFactoryTarget.Component }); }
268
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TreeComponent, isStandalone: true, selector: "adf-tree", inputs: { emptyContentTemplate: "emptyContentTemplate", nodeActionsMenuTemplate: "nodeActionsMenuTemplate", stickyHeader: "stickyHeader", selectableNodes: "selectableNodes", displayName: "displayName", loadMoreSuffix: "loadMoreSuffix", expandIcon: "expandIcon", collapseIcon: "collapseIcon", contextMenuOptions: "contextMenuOptions" }, outputs: { paginationChanged: "paginationChanged", contextMenuOptionSelected: "contextMenuOptionSelected" }, host: { properties: { "class.adf-tree-sticky-header": "this.stickyHeader" }, classAttribute: "adf-tree" }, viewQueries: [{ propertyName: "nodeCheckboxes", predicate: MatCheckbox, descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"(loadingRoot$ | async) === false; else loadingSpinner\">\n <ng-container *ngIf=\"!this.isEmpty(); else emptyContent\">\n <div class=\"adf-tree-row adf-tree-header\" *ngIf=\"displayName\">\n <div class=\"adf-tree-cell adf-tree-cell-header\" data-automation-id=\"tree-header-display-name\">\n <span class=\"adf-tree-cell-value\">\n {{ displayName | translate }}\n </span>\n </div>\n </div>\n <mat-tree\n class=\"adf-tree-body\"\n [dataSource]=\"treeService\"\n [treeControl]=\"treeService.treeControl\">\n <mat-tree-node\n class=\"adf-tree-load-more-row\"\n [attr.data-automation-id]=\"'loadMoreSubnodes_' + node.parentId\"\n *matTreeNodeDef=\"let node when isLoadMoreNode\"\n matTreeNodePadding>\n <div class=\"adf-tree-expand-collapse-container\">\n <button class=\"adf-tree-load-more-button\" mat-icon-button (click)=\"loadMoreSubnodes(node)\">\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n [diameter]=\"24\"\n *ngIf=\"node.isLoading; else loadMoreIcon\" />\n <ng-template #loadMoreIcon>\n <adf-icon [value]=\"'chevron_right'\" />\n </ng-template>\n </button>\n </div>\n <div class=\"adf-tree-cell\">\n <span\n class=\"adf-tree-cell-value\"\n tabindex=\"0\"\n role=\"button\"\n (keyup.enter)=\"loadMoreSubnodes(node)\"\n (click)=\"loadMoreSubnodes(node)\">\n {{ 'ADF-TREE.LOAD-MORE-BUTTON' | translate: { name: loadMoreSuffix } }}\n </span>\n </div>\n </mat-tree-node>\n <mat-tree-node\n class=\"adf-tree-row\"\n [attr.data-automation-id]=\"'node_' + node.id\"\n *matTreeNodeDef=\"let node\"\n matTreeNodePadding\n [adf-context-menu]=\"contextMenuOptions\"\n [adf-context-menu-enabled]=\"!!contextMenuOptions\"\n (contextmenu)=\"contextMenuSource = node\">\n <div class=\"adf-tree-expand-collapse-container\">\n <button *ngIf=\"node.hasChildren\"\n class=\"adf-tree-expand-collapse-button\"\n (click)=\"expandCollapseNode(node)\"\n mat-icon-button>\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n [diameter]=\"24\"\n *ngIf=\"node.isLoading; else expandCollapseIcon\" />\n <ng-template #expandCollapseIcon>\n <adf-icon [value]=\"expandCollapseIconValue(node)\" />\n </ng-template>\n </button>\n </div>\n <ng-container *ngIf=\"selectableNodes\">\n <mat-checkbox *ngIf=\"node.hasChildren; else noChildrenNodeCheckbox\"\n color=\"primary\"\n [id]=\"node.id\"\n [checked]=\"descendantsAllSelected(node)\"\n [indeterminate]=\"descendantsPartiallySelected(node)\"\n (change)=\"onNodeSelected(node)\"\n data-automation-id=\"has-children-node-checkbox\" />\n <ng-template #noChildrenNodeCheckbox>\n <mat-checkbox\n color=\"primary\"\n [id]=\"node.id\"\n [checked]=\"treeNodesSelection.isSelected(node)\"\n (change)=\"onNodeSelected(node)\"\n data-automation-id=\"no-children-node-checkbox\" />\n </ng-template>\n </ng-container>\n <div class=\"adf-tree-cell\">\n <span\n class=\"adf-tree-cell-value\"\n [class.adf-tree-clickable-cell-value]=\"node.hasChildren\"\n tabindex=\"0\"\n role=\"button\"\n (keyup.enter)=\"expandCollapseNode(node)\"\n (click)=\"expandCollapseNode(node)\">\n {{ node.nodeName }}\n </span>\n </div>\n <div class=\"adf-tree-actions\">\n <button mat-icon-button\n [matMenuTriggerFor]=\"menu\"\n [attr.id]=\"'action_menu_right_' + node.id\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <ng-template\n [ngTemplateOutlet]=\"nodeActionsMenuTemplate\"\n [ngTemplateOutletContext]=\"{ node: node }\" />\n </mat-menu>\n </div>\n </mat-tree-node>\n </mat-tree>\n </ng-container>\n</ng-container>\n\n<ng-template #emptyContent>\n <ng-template [ngTemplateOutlet]=\"emptyContentTemplate\" />\n</ng-template>\n\n<ng-template #loadingSpinner>\n <div class=\"adf-tree-loading-spinner-container\">\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\" />\n </div>\n</ng-template>\n", styles: [".adf-tree-sticky-header{display:flex;flex-direction:column;height:100%}.adf-tree-sticky-header mat-tree{overflow-y:scroll}.adf-tree-load-more-row .adf-tree-cell-value,.adf-tree-clickable-cell-value{cursor:pointer}.adf-tree-row,.adf-tree-load-more-row{transition:all .3s ease;display:flex;align-items:center;padding-left:15px;padding-right:15px;transition-property:background-color;border-bottom:1px solid var(--adf-theme-foreground-text-color-007);min-height:56px;-webkit-user-select:none;user-select:none}.adf-tree-row .adf-tree-expand-collapse-container,.adf-tree-load-more-row .adf-tree-expand-collapse-container{min-width:55px}.adf-tree-row:hover,.adf-tree-load-more-row:hover{background-color:var(--adf-theme-background-hover-color)}.adf-tree-row:hover .adf-tree-actions,.adf-tree-load-more-row:hover .adf-tree-actions{display:flex}.adf-tree-row:focus,.adf-tree-load-more-row:focus{background-color:var(--adf-theme-background-hover-color);outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-tree-row .adf-tree-expand-collapse-button,.adf-tree-row .adf-tree-load-more-button,.adf-tree-load-more-row .adf-tree-expand-collapse-button,.adf-tree-load-more-row .adf-tree-load-more-button{display:flex;align-items:center;justify-content:center;margin-left:15px}.adf-tree-row .adf-tree-cell,.adf-tree-load-more-row .adf-tree-cell{color:var(--adf-theme-foreground-text-color);width:100%}.adf-tree-row .adf-tree-cell .adf-tree-cell-value,.adf-tree-load-more-row .adf-tree-cell .adf-tree-cell-value{display:inline-block;padding:10px;word-break:break-word}.adf-tree-header{display:flex;width:fit-content;min-width:100%;box-sizing:border-box}.adf-tree-header .adf-tree-cell-header:has(.adf-tree-cell-value){cursor:pointer;position:relative;vertical-align:bottom;text-overflow:ellipsis;font-weight:700;line-height:24px;letter-spacing:0;min-height:56px;font-size:12px;color:var(--adf-theme-foreground-text-color);box-sizing:border-box;padding-top:12px}.adf-tree-header .adf-tree-cell-header:has(.adf-tree-cell-value):focus{outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-tree-loading-spinner-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i5.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i5.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "component", type: i5.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i5.MatTreeNode, selector: "mat-tree-node", inputs: ["tabIndex", "disabled"], outputs: ["activation", "expandedChange"], exportAs: ["matTreeNode"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i6.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: IconComponent, selector: "adf-icon", inputs: ["color", "fontSet", "value"] }, { kind: "directive", type: ContextMenuDirective, selector: "[adf-context-menu]", inputs: ["adf-context-menu", "adf-context-menu-enabled"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i8.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i9.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i9.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], encapsulation: i0.ViewEncapsulation.None }); }
267
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TreeComponent, isStandalone: true, selector: "adf-tree", inputs: { emptyContentTemplate: "emptyContentTemplate", nodeActionsMenuTemplate: "nodeActionsMenuTemplate", stickyHeader: "stickyHeader", selectableNodes: "selectableNodes", displayName: "displayName", loadMoreSuffix: "loadMoreSuffix", expandIcon: "expandIcon", collapseIcon: "collapseIcon", contextMenuOptions: "contextMenuOptions" }, outputs: { paginationChanged: "paginationChanged", contextMenuOptionSelected: "contextMenuOptionSelected" }, host: { properties: { "class.adf-tree-sticky-header": "this.stickyHeader" }, classAttribute: "adf-tree" }, viewQueries: [{ propertyName: "nodeCheckboxes", predicate: MatCheckbox, descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"(loadingRoot$ | async) === false; else loadingSpinner\">\n <ng-container *ngIf=\"!this.isEmpty(); else emptyContent\">\n <div class=\"adf-tree-row adf-tree-header\" *ngIf=\"displayName\">\n <div class=\"adf-tree-cell adf-tree-cell-header\" data-automation-id=\"tree-header-display-name\">\n <span class=\"adf-tree-cell-value\">\n {{ displayName | translate }}\n </span>\n </div>\n </div>\n <mat-tree\n class=\"adf-tree-body\"\n [dataSource]=\"treeService\"\n [treeControl]=\"treeService.treeControl\">\n <mat-tree-node\n class=\"adf-tree-load-more-row\"\n [attr.data-automation-id]=\"'loadMoreSubnodes_' + node.parentId\"\n *matTreeNodeDef=\"let node when isLoadMoreNode\"\n matTreeNodePadding>\n <div class=\"adf-tree-expand-collapse-container\">\n <button class=\"adf-tree-load-more-button\" mat-icon-button (click)=\"loadMoreSubnodes(node)\">\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n [diameter]=\"24\"\n *ngIf=\"node.isLoading; else loadMoreIcon\" />\n <ng-template #loadMoreIcon>\n <adf-icon [value]=\"'chevron_right'\" />\n </ng-template>\n </button>\n </div>\n <div class=\"adf-tree-cell\">\n <span\n class=\"adf-tree-cell-value\"\n tabindex=\"0\"\n role=\"button\"\n (keyup.enter)=\"loadMoreSubnodes(node)\"\n (click)=\"loadMoreSubnodes(node)\">\n {{ 'ADF-TREE.LOAD-MORE-BUTTON' | translate: { name: loadMoreSuffix } }}\n </span>\n </div>\n </mat-tree-node>\n <mat-tree-node\n class=\"adf-tree-row\"\n [attr.data-automation-id]=\"'node_' + node.id\"\n *matTreeNodeDef=\"let node\"\n matTreeNodePadding\n [adf-context-menu]=\"contextMenuOptions\"\n [adf-context-menu-enabled]=\"!!contextMenuOptions\"\n (contextmenu)=\"contextMenuSource = node\">\n <div class=\"adf-tree-expand-collapse-container\">\n <button *ngIf=\"node.hasChildren\"\n class=\"adf-tree-expand-collapse-button\"\n (click)=\"expandCollapseNode(node)\"\n mat-icon-button>\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n [diameter]=\"24\"\n *ngIf=\"node.isLoading; else expandCollapseIcon\" />\n <ng-template #expandCollapseIcon>\n <adf-icon [value]=\"expandCollapseIconValue(node)\" />\n </ng-template>\n </button>\n </div>\n <ng-container *ngIf=\"selectableNodes\">\n <mat-checkbox *ngIf=\"node.hasChildren; else noChildrenNodeCheckbox\"\n color=\"primary\"\n [id]=\"node.id\"\n [checked]=\"descendantsAllSelected(node)\"\n [indeterminate]=\"descendantsPartiallySelected(node)\"\n (change)=\"onNodeSelected(node)\"\n data-automation-id=\"has-children-node-checkbox\" />\n <ng-template #noChildrenNodeCheckbox>\n <mat-checkbox\n color=\"primary\"\n [id]=\"node.id\"\n [checked]=\"treeNodesSelection.isSelected(node)\"\n (change)=\"onNodeSelected(node)\"\n data-automation-id=\"no-children-node-checkbox\" />\n </ng-template>\n </ng-container>\n <div class=\"adf-tree-cell\">\n <span\n class=\"adf-tree-cell-value\"\n [class.adf-tree-clickable-cell-value]=\"node.hasChildren\"\n tabindex=\"0\"\n role=\"button\"\n (keyup.enter)=\"expandCollapseNode(node)\"\n (click)=\"expandCollapseNode(node)\">\n {{ node.nodeName }}\n </span>\n </div>\n <div class=\"adf-tree-actions\">\n <button mat-icon-button\n [matMenuTriggerFor]=\"menu\"\n [attr.id]=\"'action_menu_right_' + node.id\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <ng-template\n [ngTemplateOutlet]=\"nodeActionsMenuTemplate\"\n [ngTemplateOutletContext]=\"{ node: node }\" />\n </mat-menu>\n </div>\n </mat-tree-node>\n </mat-tree>\n </ng-container>\n</ng-container>\n\n<ng-template #emptyContent>\n <ng-template [ngTemplateOutlet]=\"emptyContentTemplate\" />\n</ng-template>\n\n<ng-template #loadingSpinner>\n <div class=\"adf-tree-loading-spinner-container\">\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\" />\n </div>\n</ng-template>\n", styles: [".adf-tree-sticky-header{display:flex;flex-direction:column;height:100%}.adf-tree-sticky-header mat-tree{overflow-y:scroll}.adf-tree-load-more-row .adf-tree-cell-value,.adf-tree-clickable-cell-value{cursor:pointer}.adf-tree-row,.adf-tree-load-more-row{transition:all .3s ease;display:flex;align-items:center;padding-left:15px;padding-right:15px;transition-property:background-color;border-bottom:1px solid var(--adf-theme-foreground-text-color-007);min-height:56px;-webkit-user-select:none;user-select:none}.adf-tree-row .adf-tree-expand-collapse-container,.adf-tree-load-more-row .adf-tree-expand-collapse-container{min-width:55px}.adf-tree-row:hover,.adf-tree-load-more-row:hover{background-color:var(--adf-theme-background-hover-color)}.adf-tree-row:hover .adf-tree-actions,.adf-tree-load-more-row:hover .adf-tree-actions{display:flex}.adf-tree-row:focus,.adf-tree-load-more-row:focus{background-color:var(--adf-theme-background-hover-color);outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-tree-row .adf-tree-expand-collapse-button,.adf-tree-row .adf-tree-load-more-button,.adf-tree-load-more-row .adf-tree-expand-collapse-button,.adf-tree-load-more-row .adf-tree-load-more-button{display:flex;align-items:center;justify-content:center;margin-left:15px}.adf-tree-row .adf-tree-cell,.adf-tree-load-more-row .adf-tree-cell{color:var(--adf-theme-foreground-text-color);width:100%}.adf-tree-row .adf-tree-cell .adf-tree-cell-value,.adf-tree-load-more-row .adf-tree-cell .adf-tree-cell-value{display:inline-block;padding:10px;word-break:break-word}.adf-tree-header{display:flex;width:fit-content;min-width:100%;box-sizing:border-box}.adf-tree-header .adf-tree-cell-header:has(.adf-tree-cell-value){cursor:pointer;position:relative;vertical-align:bottom;text-overflow:ellipsis;font-weight:700;line-height:24px;letter-spacing:0;min-height:56px;font-size:12px;color:var(--adf-theme-foreground-text-color);box-sizing:border-box;padding-top:12px}.adf-tree-header .adf-tree-cell-header:has(.adf-tree-cell-value):focus{outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-tree-loading-spinner-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i4.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i4.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "component", type: i4.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i4.MatTreeNode, selector: "mat-tree-node", inputs: ["tabIndex", "disabled"], outputs: ["activation", "expandedChange"], exportAs: ["matTreeNode"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: IconComponent, selector: "adf-icon", inputs: ["color", "fontSet", "value"] }, { kind: "directive", type: ContextMenuDirective, selector: "[adf-context-menu]", inputs: ["adf-context-menu", "adf-context-menu-enabled"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i8.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], encapsulation: i0.ViewEncapsulation.None }); }
269
268
  }
270
269
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TreeComponent, decorators: [{
271
270
  type: Component,
272
271
  args: [{ selector: 'adf-tree', standalone: true, imports: [
273
272
  CommonModule,
274
- TranslateModule,
273
+ TranslatePipe,
275
274
  MatTreeModule,
276
275
  MatProgressSpinnerModule,
277
276
  MatButtonModule,
@@ -310,4 +309,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
310
309
  }], contextMenuOptions: [{
311
310
  type: Input
312
311
  }] } });
313
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29udGVudC1zZXJ2aWNlcy9zcmMvbGliL3RyZWUvY29tcG9uZW50cy90cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvdHJlZS9jb21wb25lbnRzL3RyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWCxZQUFZLEVBQ1osaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQVksWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxhQUFhLEVBQW1CLHNCQUFzQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEgsT0FBTyxFQUFtQixjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFNUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FB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Q3hCLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixvQkFBb0I7d0JBQ3BCLGlCQUFpQjt3QkFDakIsYUFBYTt3QkFDYixhQUFhO3FCQUNoQixRQUdLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxpQkFDWixpQkFBaUIsQ0FBQyxJQUFJO3FIQUs5QixvQkFBb0I7c0JBRDFCLEtBQUs7Z0JBS0MsdUJBQXVCO3NCQUQ3QixLQUFLO2dCQU1DLFlBQVk7c0JBRmxCLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsOEJBQThCO2dCQUtwQyxlQUFlO3NCQURyQixLQUFLO2dCQUtDLFdBQVc7c0JBRGpCLEtBQUs7Z0JBS0MsY0FBYztzQkFEcEIsS0FBSztnQkFLQyxVQUFVO3NCQURoQixLQUFLO2dCQUtDLFlBQVk7c0JBRGxCLEtBQUs7Z0JBS0MsaUJBQWlCO3NCQUR2QixNQUFNO2dCQUtBLHlCQUF5QjtzQkFEL0IsTUFBTTtnQkFJQSxjQUFjO3NCQURwQixZQUFZO3VCQUFDLFdBQVc7Z0JBa0JyQixrQkFBa0I7c0JBRHJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVHJlZU5vZGUsIFRyZWVOb2RlVHlwZSB9IGZyb20gJy4uL21vZGVscy90cmVlLW5vZGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IFRyZWVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdHJlZS5zZXJ2aWNlJztcbmltcG9ydCB7IENvbnRleHRNZW51RGlyZWN0aXZlLCBJY29uQ29tcG9uZW50LCBQYWdpbmF0aW9uTW9kZWwsIFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UgfSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgU2VsZWN0aW9uQ2hhbmdlLCBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBUcmVlUmVzcG9uc2UgfSBmcm9tICcuLi9tb2RlbHMvdHJlZS1yZXNwb25zZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3gsIE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHsgVHJlZUNvbnRleHRNZW51UmVzdWx0IH0gZnJvbSAnLi4vbW9kZWxzL3RyZWUtY29udGV4dC1tZW51LXJlc3VsdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTWF0VHJlZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RyZWUnO1xuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FkZi10cmVlJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgICAgIE1hdFRyZWVNb2R1bGUsXG4gICAgICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBJY29uQ29tcG9uZW50LFxuICAgICAgICBDb250ZXh0TWVudURpcmVjdGl2ZSxcbiAgICAgICAgTWF0Q2hlY2tib3hNb2R1bGUsXG4gICAgICAgIE1hdE1lbnVNb2R1bGUsXG4gICAgICAgIE1hdEljb25Nb2R1bGVcbiAgICBdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi90cmVlLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgaG9zdDogeyBjbGFzczogJ2FkZi10cmVlJyB9LFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgVHJlZUNvbXBvbmVudDxUIGV4dGVuZHMgVHJlZU5vZGU+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKiBUZW1wbGF0ZVJlZiB0byBwcm92aWRlIGVtcHR5IHRlbXBsYXRlIHdoZW4gbm8gbm9kZXMgYXJlIGxvYWRlZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGVtcHR5Q29udGVudFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIFRlbXBsYXRlUmVmIHRvIHByb3ZpZGUgY29udGV4dCBtZW51IGl0ZW1zIGZvciBjb250ZXh0IG1lbnUgZGlzcGxheWVkIG9uIGVhY2ggcm93Ki9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBub2RlQWN0aW9uc01lbnVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBWYXJpYWJsZSBkZWZpbmluZyBpZiB0cmVlIGhlYWRlciBzaG91bGQgYmUgc3RpY2t5LiBCeSBkZWZhdWx0IHNldCB0byBmYWxzZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hZGYtdHJlZS1zdGlja3ktaGVhZGVyJylcbiAgICBwdWJsaWMgc3RpY2t5SGVhZGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogVmFyaWFibGUgZGVmaW5pbmcgaWYgdHJlZSBub2RlcyBzaG91bGQgYmUgc2VsZWN0YWJsZS4gQnkgZGVmYXVsdCBzZXQgdG8gZmFsc2UgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZWxlY3RhYmxlTm9kZXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBUcmVlIGRpc3BsYXkgbmFtZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG5cbiAgICAvKiogTG9hZCBtb3JlIHN1ZmZpeCBmb3IgbG9hZCBtb3JlIGJ1dHRvbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxvYWRNb3JlU3VmZml4OiBzdHJpbmc7XG5cbiAgICAvKiogSWNvbiBzaG93biB3aGVuIG5vZGUgaGFzIGNoaWxkcmVuIGFuZCBpcyBjb2xsYXBzZWQuIEJ5IGRlZmF1bHQgc2V0IHRvIGNoZXZyb25fcmlnaHQgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBleHBhbmRJY29uOiBzdHJpbmcgPSAnY2hldnJvbl9yaWdodCc7XG5cbiAgICAvKiogSWNvbiBzaG93biB3aGVuIG5vZGUgaXMgZXhwYW5kZWQuIEJ5IGRlZmF1bHQgc2V0IHRvIGV4cGFuZF9tb3JlICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY29sbGFwc2VJY29uOiBzdHJpbmcgPSAnZXhwYW5kX21vcmUnO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBwYWdpbmF0aW9uIGhhcyBiZWVuIGNoYW5nZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcGFnaW5hdGlvbkNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxQYWdpbmF0aW9uTW9kZWw+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBhbnkgY29udGV4dCBtZW51IG9wdGlvbiBpcyBzZWxlY3RlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjb250ZXh0TWVudU9wdGlvblNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxUcmVlQ29udGV4dE1lbnVSZXN1bHQ8VD4+KCk7XG5cbiAgICBAVmlld0NoaWxkcmVuKE1hdENoZWNrYm94KVxuICAgIHB1YmxpYyBub2RlQ2hlY2tib3hlczogUXVlcnlMaXN0PE1hdENoZWNrYm94PjtcblxuICAgIHByaXZhdGUgbG9hZGluZ1Jvb3RTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICBwcml2YXRlIF9jb250ZXh0TWVudVNvdXJjZTogVDtcbiAgICBwcml2YXRlIF9jb250ZXh0TWVudU9wdGlvbnM6IGFueVtdO1xuICAgIHByaXZhdGUgY29udGV4dE1lbnVPcHRpb25zQ2hhbmdlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHB1YmxpYyBsb2FkaW5nUm9vdCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgcHVibGljIHRyZWVOb2Rlc1NlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxUPih0cnVlLCBbXSwgdHJ1ZSwgKG5vZGUxOiBULCBub2RlMjogVCkgPT4gbm9kZTEuaWQgPT09IG5vZGUyLmlkKTtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB0cmVlU2VydmljZTogVHJlZVNlcnZpY2U8VD4sIHByaXZhdGUgdXNlclByZWZlcmVuY2VTZXJ2aWNlOiBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlKSB7fVxuXG4gICAgc2V0IGNvbnRleHRNZW51U291cmNlKGNvbnRleHRNZW51U291cmNlOiBUKSB7XG4gICAgICAgIHRoaXMuX2NvbnRleHRNZW51U291cmNlID0gY29udGV4dE1lbnVTb3VyY2U7XG4gICAgfVxuXG4gICAgLyoqIEFycmF5IG9mIGNvbnRleHQgbWVudSBvcHRpb25zIHdoaWNoIHNob3VsZCBiZSBkaXNwbGF5ZWQgZm9yIGVhY2ggcm93LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGNvbnRleHRNZW51T3B0aW9ucyhjb250ZXh0TWVudU9wdGlvbnM6IGFueVtdKSB7XG4gICAgICAgIHRoaXMuY29udGV4dE1lbnVPcHRpb25zQ2hhbmdlZCQubmV4dCgpO1xuICAgICAgICBpZiAoY29udGV4dE1lbnVPcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250ZXh0TWVudU9wdGlvbnMgPSBjb250ZXh0TWVudU9wdGlvbnMubWFwKChvcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbi5zdWJqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3Q6IG5ldyBTdWJqZWN0KClcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbWVyZ2UoLi4udGhpcy5jb250ZXh0TWVudU9wdGlvbnMubWFwKChvcHRpb24pID0+IG9wdGlvbi5zdWJqZWN0KSlcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5jb250ZXh0TWVudU9wdGlvbnNDaGFuZ2VkJCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dE1lbnVPcHRpb25TZWxlY3RlZC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogdGhpcy5fY29udGV4dE1lbnVTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TWVudU9wdGlvbjogb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY29udGV4dE1lbnVPcHRpb25zID0gY29udGV4dE1lbnVPcHRpb25zO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGNvbnRleHRNZW51T3B0aW9ucygpOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0TWVudU9wdGlvbnM7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9hZGluZ1Jvb3QkID0gdGhpcy5sb2FkaW5nUm9vdFNvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoVHJlZSgwLCB0aGlzLnVzZXJQcmVmZXJlbmNlU2VydmljZS5wYWdpbmF0aW9uU2l6ZSk7XG4gICAgICAgIHRoaXMudHJlZU5vZGVzU2VsZWN0aW9uLmNoYW5nZWQuc3Vic2NyaWJlKChzZWxlY3Rpb25DaGFuZ2U6IFNlbGVjdGlvbkNoYW5nZTxUPikgPT4ge1xuICAgICAgICAgICAgdGhpcy5vblRyZWVTZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0aW9uQ2hhbmdlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuY29udGV4dE1lbnVPcHRpb25zQ2hhbmdlZCQubmV4dCgpO1xuICAgICAgICB0aGlzLmNvbnRleHRNZW51T3B0aW9uc0NoYW5nZWQkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIG5vZGUgaXMgTG9hZE1vcmVOb2RlIG5vZGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBfaWR4ICh1bnVzZWQpXG4gICAgICogQHBhcmFtIG5vZGUgbm9kZSB0byBiZSBjaGVja2VkXG4gICAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZXJlIGFyZSBtb3JlIGl0ZW1zIHRvIGxvYWQsIG90aGVyd2lzZSBgZmFsc2VgXG4gICAgICovXG4gICAgcHVibGljIGlzTG9hZE1vcmVOb2RlKF9pZHg6IG51bWJlciwgbm9kZTogVCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gbm9kZS5ub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLkxvYWRNb3JlTm9kZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgdHJlZSBpcyBlbXB0eVxuICAgICAqXG4gICAgICogQHJldHVybnMgYm9vbGVhblxuICAgICAqL1xuICAgIHB1YmxpYyBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlU2VydmljZS5pc0VtcHR5KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhY3Rpb24gaWNvbiBiYXNlZCBvbiBleHBhbmRlZC9jb2xsYXBzZWQgbm9kZSBzdGF0ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2RlIG5vZGUgdG8gYmUgY2hlY2tlZFxuICAgICAqIEByZXR1cm5zIGNvbGxhcHNlIG9yIGV4cGFuZCBpY29uXG4gICAgICovXG4gICAgcHVibGljIGV4cGFuZENvbGxhcHNlSWNvblZhbHVlKG5vZGU6IFQpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlU2VydmljZS50cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpID8gdGhpcy5jb2xsYXBzZUljb24gOiB0aGlzLmV4cGFuZEljb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVmcmVzaGVzIHRoZSB0cmVlLCByb290IG5vZGVzIGFyZSByZWxvYWRlZCwgdHJlZSBzZWxlY3Rpb24gaXMgY2xlYXJlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBza2lwQ291bnQgTnVtYmVyIG9mIHJvb3Qgbm9kZXMgdG8gc2tpcC5cbiAgICAgKiBAcGFyYW0gbWF4SXRlbXMgTWF4aW11bSBudW1iZXIgb2Ygbm9kZXMgcmV0dXJuZWQgZnJvbSBPYnNlcnZhYmxlLlxuICAgICAqIEBwYXJhbSBzZWFyY2hUZXJtIFNwZWNpZmllcyBpZiBjYXRlZ29yaWVzIHNob3VsZCBiZSBmaWx0ZXJlZCBvdXQgYnkgbmFtZSBvciBub3QuIElmIG5vdCBzcGVjaWZpZWQgdGhlbiByZXR1cm5zIGNhdGVnb3JpZXMgd2l0aG91dCBmaWx0ZXJpbmcuXG4gICAgICovXG4gICAgcHVibGljIHJlZnJlc2hUcmVlKHNraXBDb3VudD86IG51bWJlciwgbWF4SXRlbXM/OiBudW1iZXIsIHNlYXJjaFRlcm0/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nUm9vdFNvdXJjZS5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLnRyZWVOb2Rlc1NlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLmdldFN1Yk5vZGVzKCctcm9vdC0nLCBza2lwQ291bnQsIG1heEl0ZW1zLCBzZWFyY2hUZXJtKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBUcmVlUmVzcG9uc2U8VD4pID0+IHtcbiAgICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UudHJlZU5vZGVzID0gcmVzcG9uc2UuZW50cmllcztcbiAgICAgICAgICAgIHRoaXMudHJlZU5vZGVzU2VsZWN0aW9uLmRlc2VsZWN0KC4uLnJlc3BvbnNlLmVudHJpZXMpO1xuICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uQ2hhbmdlZC5lbWl0KHJlc3BvbnNlLnBhZ2luYXRpb24pO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nUm9vdFNvdXJjZS5uZXh0KGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29sbGFwc2VzIG9yIGV4cGFuZGluZyB0aGUgbm9kZSBiYXNlZCBvbiBpdHMgY3VycmVudCBzdGF0ZVxuICAgICAqXG4gICAgICogQHBhcmFtIG5vZGUgbm9kZSB0byBiZSBjb2xsYXBzZWQvZXhwYW5kZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgZXhwYW5kQ29sbGFwc2VOb2RlKG5vZGU6IFQpOiB2b2lkIHtcbiAgICAgICAgaWYgKG5vZGUuaGFzQ2hpbGRyZW4gJiYgIW5vZGUuaXNMb2FkaW5nKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50cmVlU2VydmljZS50cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5jb2xsYXBzZU5vZGUobm9kZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5vZGUuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLmdldFN1Yk5vZGVzKG5vZGUuaWQsIDAsIHRoaXMudXNlclByZWZlcmVuY2VTZXJ2aWNlLnBhZ2luYXRpb25TaXplKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBUcmVlUmVzcG9uc2U8VD4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5leHBhbmROb2RlKG5vZGUsIHJlc3BvbnNlLmVudHJpZXMpO1xuICAgICAgICAgICAgICAgICAgICBub2RlLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy90aW1lb3V0IHVzZWQgdG8gdXBkYXRlIG5vZGVDaGVja2JveGVzIHF1ZXJ5IGxpc3QgYWZ0ZXIgbmV3IG5vZGVzIGFyZSBhZGRlZCBzbyB0aGV5IGNhbiBiZSBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uc2VsZWN0KC4uLnJlc3BvbnNlLmVudHJpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWRzIG1vcmUgc3Vibm9kZSBmb3IgYSBnaXZlbiBwYXJlbnQgbm9kZVxuICAgICAqXG4gICAgICogQHBhcmFtIG5vZGUgcGFyZW50IG5vZGVcbiAgICAgKi9cbiAgICBwdWJsaWMgbG9hZE1vcmVTdWJub2Rlcyhub2RlOiBUKTogdm9pZCB7XG4gICAgICAgIG5vZGUuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgcGFyZW50Tm9kZTogVCA9IHRoaXMudHJlZVNlcnZpY2UuZ2V0UGFyZW50Tm9kZShub2RlLnBhcmVudElkKTtcbiAgICAgICAgdGhpcy50cmVlU2VydmljZS5yZW1vdmVOb2RlKG5vZGUpO1xuICAgICAgICBjb25zdCBsb2FkZWRDaGlsZHJlbjogbnVtYmVyID0gdGhpcy50cmVlU2VydmljZS5nZXRDaGlsZHJlbihwYXJlbnROb2RlKS5sZW5ndGg7XG4gICAgICAgIHRoaXMudHJlZVNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRTdWJOb2RlcyhwYXJlbnROb2RlLmlkLCBsb2FkZWRDaGlsZHJlbiwgdGhpcy51c2VyUHJlZmVyZW5jZVNlcnZpY2UucGFnaW5hdGlvblNpemUpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogVHJlZVJlc3BvbnNlPFQ+KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5hcHBlbmROb2RlcyhwYXJlbnROb2RlLCByZXNwb25zZS5lbnRyaWVzKTtcbiAgICAgICAgICAgICAgICBub2RlLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyZWVOb2Rlc1NlbGVjdGlvbi5pc1NlbGVjdGVkKHBhcmVudE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vdGltZW91dCB1c2VkIHRvIHVwZGF0ZSBub2RlQ2hlY2tib3hlcyBxdWVyeSBsaXN0IGFmdGVyIG5ldyBub2RlcyBhcmUgYWRkZWQgc28gdGhleSBjYW4gYmUgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVOb2Rlc1NlbGVjdGlvbi5zZWxlY3QoLi4ucmVzcG9uc2UuZW50cmllcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZW4gbm9kZSBpcyBzZWxlY3RlZCBpdCBzZWxlY3RzIGFsbCBpdHMgZGVzY2VuZGFudHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2RlIHNlbGVjdGVkIG5vZGVcbiAgICAgKi9cbiAgICBwdWJsaWMgb25Ob2RlU2VsZWN0ZWQobm9kZTogVCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRyZWVOb2Rlc1NlbGVjdGlvbi50b2dnbGUobm9kZSk7XG4gICAgICAgIGNvbnN0IGRlc2NlbmRhbnRzOiBUW10gPSB0aGlzLnRyZWVTZXJ2aWNlLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKG5vZGUpLmZpbHRlcih0aGlzLmlzUmVndWxhck5vZGUpO1xuICAgICAgICBpZiAoZGVzY2VuZGFudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKVxuICAgICAgICAgICAgICAgID8gdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uc2VsZWN0KC4uLmRlc2NlbmRhbnRzKVxuICAgICAgICAgICAgICAgIDogdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uZGVzZWxlY3QoLi4uZGVzY2VuZGFudHMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tQYXJlbnRzU2VsZWN0aW9uKG5vZGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBhbGwgZGVzY2VuZGFudHMgb2YgYSBub2RlIGFyZSBzZWxlY3RlZFxuICAgICAqXG4gICAgICogQHBhcmFtIG5vZGUgc2VsZWN0ZWQgbm9kZVxuICAgICAqIEByZXR1cm5zIGJvb2xlYW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlOiBUKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGRlc2NlbmRhbnRzOiBUW10gPSB0aGlzLnRyZWVTZXJ2aWNlLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKG5vZGUpLmZpbHRlcih0aGlzLmlzUmVndWxhck5vZGUpO1xuICAgICAgICByZXR1cm4gZGVzY2VuZGFudHMubGVuZ3RoID4gMCAmJiBkZXNjZW5kYW50cy5ldmVyeSgoZGVzY2VuZGFudDogVCkgPT4gdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uaXNTZWxlY3RlZChkZXNjZW5kYW50KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHNvbWUgZGVzY2VuZGFudHMgb2YgYSBub2RlIGFyZSBzZWxlY3RlZFxuICAgICAqXG4gICAgICogQHBhcmFtIG5vZGUgc2VsZWN0ZWQgbm9kZVxuICAgICAqIEByZXR1cm5zIGJvb2xlYW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGVzY2VuZGFudHNQYXJ0aWFsbHlTZWxlY3RlZChub2RlOiBUKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGRlc2NlbmRhbnRzOiBUW10gPSB0aGlzLnRyZWVTZXJ2aWNlLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKG5vZGUpLmZpbHRlcih0aGlzLmlzUmVndWxhck5vZGUpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZGVzY2VuZGFudHMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgIXRoaXMuZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlKSAmJlxuICAgICAgICAgICAgZGVzY2VuZGFudHMuc29tZSgoZGVzY2VuZGFudDogVCkgPT4gdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uaXNTZWxlY3RlZChkZXNjZW5kYW50KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrUGFyZW50c1NlbGVjdGlvbihub2RlOiBUKTogdm9pZCB7XG4gICAgICAgIGxldCBwYXJlbnQ6IFQgPSB0aGlzLnRyZWVTZXJ2aWNlLmdldFBhcmVudE5vZGUobm9kZS5wYXJlbnRJZCk7XG4gICAgICAgIHdoaWxlIChwYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tSb290Tm9kZVNlbGVjdGlvbihwYXJlbnQpO1xuICAgICAgICAgICAgcGFyZW50ID0gdGhpcy50cmVlU2VydmljZS5nZXRQYXJlbnROb2RlKHBhcmVudC5wYXJlbnRJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrUm9vdE5vZGVTZWxlY3Rpb24obm9kZTogVCk6IHZvaWQge1xuICAgICAgICBjb25zdCBub2RlU2VsZWN0ZWQ6IGJvb2xlYW4gPSB0aGlzLnRyZWVOb2Rlc1NlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpO1xuICAgICAgICBjb25zdCBkZXNjQWxsU2VsZWN0ZWQgPSB0aGlzLmRlc2NlbmRhbnRzQWxsU2VsZWN0ZWQobm9kZSk7XG4gICAgICAgIGlmIChub2RlU2VsZWN0ZWQgJiYgIWRlc2NBbGxTZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uZGVzZWxlY3Qobm9kZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIW5vZGVTZWxlY3RlZCAmJiBkZXNjQWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMudHJlZU5vZGVzU2VsZWN0aW9uLnNlbGVjdChub2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25UcmVlU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGlvbkNoYW5nZTogU2VsZWN0aW9uQ2hhbmdlPFQ+KTogdm9pZCB7XG4gICAgICAgIHNlbGVjdGlvbkNoYW5nZS5yZW1vdmVkLmZvckVhY2goKHVuc2VsZWN0ZWROb2RlOiBUKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1JlZ3VsYXJOb2RlKHVuc2VsZWN0ZWROb2RlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZUNoZWNrYm94ZXMuZmluZCgoY2hlY2tib3g6IE1hdENoZWNrYm94KSA9PiBjaGVja2JveC5pZCA9PT0gdW5zZWxlY3RlZE5vZGUuaWQpLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHNlbGVjdGlvbkNoYW5nZS5hZGRlZC5mb3JFYWNoKChzZWxlY3RlZE5vZGU6IFQpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUmVndWxhck5vZGUoc2VsZWN0ZWROb2RlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZUNoZWNrYm94ZXMuZmluZCgoY2hlY2tib3g6IE1hdENoZWNrYm94KSA9PiBjaGVja2JveC5pZCA9PT0gc2VsZWN0ZWROb2RlLmlkKS5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1JlZ3VsYXJOb2RlKG5vZGU6IFQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIG5vZGUubm9kZVR5cGUgIT09IFRyZWVOb2RlVHlwZS5Mb2FkTW9yZU5vZGU7XG4gICAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIihsb2FkaW5nUm9vdCQgfCBhc3luYykgPT09IGZhbHNlOyBlbHNlIGxvYWRpbmdTcGlubmVyXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0aGlzLmlzRW1wdHkoKTsgZWxzZSBlbXB0eUNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFkZi10cmVlLXJvdyBhZGYtdHJlZS1oZWFkZXJcIiAqbmdJZj1cImRpc3BsYXlOYW1lXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLXRyZWUtY2VsbCBhZGYtdHJlZS1jZWxsLWhlYWRlclwiIGRhdGEtYXV0b21hdGlvbi1pZD1cInRyZWUtaGVhZGVyLWRpc3BsYXktbmFtZVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWRmLXRyZWUtY2VsbC12YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBkaXNwbGF5TmFtZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC10cmVlXG4gICAgICAgICAgICBjbGFzcz1cImFkZi10cmVlLWJvZHlcIlxuICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwidHJlZVNlcnZpY2VcIlxuICAgICAgICAgICAgW3RyZWVDb250cm9sXT1cInRyZWVTZXJ2aWNlLnRyZWVDb250cm9sXCI+XG4gICAgICAgICAgICA8bWF0LXRyZWUtbm9kZVxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXRyZWUtbG9hZC1tb3JlLXJvd1wiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidsb2FkTW9yZVN1Ym5vZGVzXycgKyBub2RlLnBhcmVudElkXCJcbiAgICAgICAgICAgICAgICAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZSB3aGVuIGlzTG9hZE1vcmVOb2RlXCJcbiAgICAgICAgICAgICAgICBtYXRUcmVlTm9kZVBhZGRpbmc+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi10cmVlLWV4cGFuZC1jb2xsYXBzZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFkZi10cmVlLWxvYWQtbW9yZS1idXR0b25cIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImxvYWRNb3JlU3Vibm9kZXMobm9kZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZT1cImluZGV0ZXJtaW5hdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaWFtZXRlcl09XCIyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJub2RlLmlzTG9hZGluZzsgZWxzZSBsb2FkTW9yZUljb25cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsb2FkTW9yZUljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1pY29uIFt2YWx1ZV09XCInY2hldnJvbl9yaWdodCdcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi10cmVlLWNlbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXRyZWUtY2VsbC12YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwibG9hZE1vcmVTdWJub2Rlcyhub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibG9hZE1vcmVTdWJub2Rlcyhub2RlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0FERi1UUkVFLkxPQUQtTU9SRS1CVVRUT04nIHwgdHJhbnNsYXRlOiB7IG5hbWU6IGxvYWRNb3JlU3VmZml4IH0gfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9tYXQtdHJlZS1ub2RlPlxuICAgICAgICAgICAgPG1hdC10cmVlLW5vZGVcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi10cmVlLXJvd1wiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidub2RlXycgKyBub2RlLmlkXCJcbiAgICAgICAgICAgICAgICAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZVwiXG4gICAgICAgICAgICAgICAgbWF0VHJlZU5vZGVQYWRkaW5nXG4gICAgICAgICAgICAgICAgW2FkZi1jb250ZXh0LW1lbnVdPVwiY29udGV4dE1lbnVPcHRpb25zXCJcbiAgICAgICAgICAgICAgICBbYWRmLWNvbnRleHQtbWVudS1lbmFibGVkXT1cIiEhY29udGV4dE1lbnVPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAoY29udGV4dG1lbnUpPVwiY29udGV4dE1lbnVTb3VyY2UgPSBub2RlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi10cmVlLWV4cGFuZC1jb2xsYXBzZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIm5vZGUuaGFzQ2hpbGRyZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXRyZWUtZXhwYW5kLWNvbGxhcHNlLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImV4cGFuZENvbGxhcHNlTm9kZShub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RpYW1ldGVyXT1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm5vZGUuaXNMb2FkaW5nOyBlbHNlIGV4cGFuZENvbGxhcHNlSWNvblwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2V4cGFuZENvbGxhcHNlSWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRmLWljb24gW3ZhbHVlXT1cImV4cGFuZENvbGxhcHNlSWNvblZhbHVlKG5vZGUpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RhYmxlTm9kZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCAqbmdJZj1cIm5vZGUuaGFzQ2hpbGRyZW47IGVsc2Ugbm9DaGlsZHJlbk5vZGVDaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwibm9kZS5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiZGVzY2VuZGFudHNQYXJ0aWFsbHlTZWxlY3RlZChub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbk5vZGVTZWxlY3RlZChub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwiaGFzLWNoaWxkcmVuLW5vZGUtY2hlY2tib3hcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vQ2hpbGRyZW5Ob2RlQ2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwibm9kZS5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwidHJlZU5vZGVzU2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25Ob2RlU2VsZWN0ZWQobm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cIm5vLWNoaWxkcmVuLW5vZGUtY2hlY2tib3hcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtdHJlZS1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi10cmVlLWNlbGwtdmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFkZi10cmVlLWNsaWNrYWJsZS1jZWxsLXZhbHVlXT1cIm5vZGUuaGFzQ2hpbGRyZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImV4cGFuZENvbGxhcHNlTm9kZShub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZXhwYW5kQ29sbGFwc2VOb2RlKG5vZGUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBub2RlLm5vZGVOYW1lIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLXRyZWUtYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCInYWN0aW9uX21lbnVfcmlnaHRfJyArIG5vZGUuaWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZUFjdGlvbnNNZW51VGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG5vZGU6IG5vZGUgfVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L21hdC10cmVlLW5vZGU+XG4gICAgICAgIDwvbWF0LXRyZWU+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNlbXB0eUNvbnRlbnQ+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImVtcHR5Q29udGVudFRlbXBsYXRlXCIgLz5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZ1NwaW5uZXI+XG4gICAgPGRpdiBjbGFzcz1cImFkZi10cmVlLWxvYWRpbmctc3Bpbm5lci1jb250YWluZXJcIj5cbiAgICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgbW9kZT1cImluZGV0ZXJtaW5hdGVcIiAvPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
312
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29udGVudC1zZXJ2aWNlcy9zcmMvbGliL3RyZWUvY29tcG9uZW50cy90cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvdHJlZS9jb21wb25lbnRzL3RyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWCxZQUFZLEVBQ1osaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQVksWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxhQUFhLEVBQW1CLHNCQUFzQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEgsT0FBTyxFQUFtQixjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFNUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FB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eEIsZUFBZTt3QkFDZixhQUFhO3dCQUNiLG9CQUFvQjt3QkFDcEIsaUJBQWlCO3dCQUNqQixhQUFhO3dCQUNiLGFBQWE7cUJBQ2hCLFFBR0ssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLGlCQUNaLGlCQUFpQixDQUFDLElBQUk7cUhBSzlCLG9CQUFvQjtzQkFEMUIsS0FBSztnQkFLQyx1QkFBdUI7c0JBRDdCLEtBQUs7Z0JBTUMsWUFBWTtzQkFGbEIsS0FBSzs7c0JBQ0wsV0FBVzt1QkFBQyw4QkFBOEI7Z0JBS3BDLGVBQWU7c0JBRHJCLEtBQUs7Z0JBS0MsV0FBVztzQkFEakIsS0FBSztnQkFLQyxjQUFjO3NCQURwQixLQUFLO2dCQUtDLFVBQVU7c0JBRGhCLEtBQUs7Z0JBS0MsWUFBWTtzQkFEbEIsS0FBSztnQkFLQyxpQkFBaUI7c0JBRHZCLE1BQU07Z0JBS0EseUJBQXlCO3NCQUQvQixNQUFNO2dCQUlBLGNBQWM7c0JBRHBCLFlBQVk7dUJBQUMsV0FBVztnQkFrQnJCLGtCQUFrQjtzQkFEckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG1lcmdlLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUcmVlTm9kZSwgVHJlZU5vZGVUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3RyZWUtbm9kZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVHJlZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy90cmVlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29udGV4dE1lbnVEaXJlY3RpdmUsIEljb25Db21wb25lbnQsIFBhZ2luYXRpb25Nb2RlbCwgVXNlclByZWZlcmVuY2VzU2VydmljZSB9IGZyb20gJ0BhbGZyZXNjby9hZGYtY29yZSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25DaGFuZ2UsIFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IFRyZWVSZXNwb25zZSB9IGZyb20gJy4uL21vZGVscy90cmVlLXJlc3BvbnNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBNYXRDaGVja2JveCwgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBUcmVlQ29udGV4dE1lbnVSZXN1bHQgfSBmcm9tICcuLi9tb2RlbHMvdHJlZS1jb250ZXh0LW1lbnUtcmVzdWx0LmludGVyZmFjZSc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTWF0VHJlZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RyZWUnO1xuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FkZi10cmVlJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBUcmFuc2xhdGVQaXBlLFxuICAgICAgICBNYXRUcmVlTW9kdWxlLFxuICAgICAgICBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUsXG4gICAgICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgSWNvbkNvbXBvbmVudCxcbiAgICAgICAgQ29udGV4dE1lbnVEaXJlY3RpdmUsXG4gICAgICAgIE1hdENoZWNrYm94TW9kdWxlLFxuICAgICAgICBNYXRNZW51TW9kdWxlLFxuICAgICAgICBNYXRJY29uTW9kdWxlXG4gICAgXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdHJlZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdHJlZS5jb21wb25lbnQuc2NzcyddLFxuICAgIGhvc3Q6IHsgY2xhc3M6ICdhZGYtdHJlZScgfSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIFRyZWVDb21wb25lbnQ8VCBleHRlbmRzIFRyZWVOb2RlPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICAvKiogVGVtcGxhdGVSZWYgdG8gcHJvdmlkZSBlbXB0eSB0ZW1wbGF0ZSB3aGVuIG5vIG5vZGVzIGFyZSBsb2FkZWQgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBlbXB0eUNvbnRlbnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBUZW1wbGF0ZVJlZiB0byBwcm92aWRlIGNvbnRleHQgbWVudSBpdGVtcyBmb3IgY29udGV4dCBtZW51IGRpc3BsYXllZCBvbiBlYWNoIHJvdyovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbm9kZUFjdGlvbnNNZW51VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogVmFyaWFibGUgZGVmaW5pbmcgaWYgdHJlZSBoZWFkZXIgc2hvdWxkIGJlIHN0aWNreS4gQnkgZGVmYXVsdCBzZXQgdG8gZmFsc2UgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuYWRmLXRyZWUtc3RpY2t5LWhlYWRlcicpXG4gICAgcHVibGljIHN0aWNreUhlYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIFZhcmlhYmxlIGRlZmluaW5nIGlmIHRyZWUgbm9kZXMgc2hvdWxkIGJlIHNlbGVjdGFibGUuIEJ5IGRlZmF1bHQgc2V0IHRvIGZhbHNlICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2VsZWN0YWJsZU5vZGVzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogVHJlZSBkaXNwbGF5IG5hbWUgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkaXNwbGF5TmFtZTogc3RyaW5nO1xuXG4gICAgLyoqIExvYWQgbW9yZSBzdWZmaXggZm9yIGxvYWQgbW9yZSBidXR0b24gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsb2FkTW9yZVN1ZmZpeDogc3RyaW5nO1xuXG4gICAgLyoqIEljb24gc2hvd24gd2hlbiBub2RlIGhhcyBjaGlsZHJlbiBhbmQgaXMgY29sbGFwc2VkLiBCeSBkZWZhdWx0IHNldCB0byBjaGV2cm9uX3JpZ2h0ICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZXhwYW5kSWNvbjogc3RyaW5nID0gJ2NoZXZyb25fcmlnaHQnO1xuXG4gICAgLyoqIEljb24gc2hvd24gd2hlbiBub2RlIGlzIGV4cGFuZGVkLiBCeSBkZWZhdWx0IHNldCB0byBleHBhbmRfbW9yZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbGxhcHNlSWNvbjogc3RyaW5nID0gJ2V4cGFuZF9tb3JlJztcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gcGFnaW5hdGlvbiBoYXMgYmVlbiBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHBhZ2luYXRpb25DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8UGFnaW5hdGlvbk1vZGVsPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gYW55IGNvbnRleHQgbWVudSBvcHRpb24gaXMgc2VsZWN0ZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgY29udGV4dE1lbnVPcHRpb25TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8VHJlZUNvbnRleHRNZW51UmVzdWx0PFQ+PigpO1xuXG4gICAgQFZpZXdDaGlsZHJlbihNYXRDaGVja2JveClcbiAgICBwdWJsaWMgbm9kZUNoZWNrYm94ZXM6IFF1ZXJ5TGlzdDxNYXRDaGVja2JveD47XG5cbiAgICBwcml2YXRlIGxvYWRpbmdSb290U291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgcHJpdmF0ZSBfY29udGV4dE1lbnVTb3VyY2U6IFQ7XG4gICAgcHJpdmF0ZSBfY29udGV4dE1lbnVPcHRpb25zOiBhbnlbXTtcbiAgICBwcml2YXRlIGNvbnRleHRNZW51T3B0aW9uc0NoYW5nZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBwdWJsaWMgbG9hZGluZ1Jvb3QkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIHB1YmxpYyB0cmVlTm9kZXNTZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8VD4odHJ1ZSwgW10sIHRydWUsIChub2RlMTogVCwgbm9kZTI6IFQpID0+IG5vZGUxLmlkID09PSBub2RlMi5pZCk7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdHJlZVNlcnZpY2U6IFRyZWVTZXJ2aWNlPFQ+LCBwcml2YXRlIHVzZXJQcmVmZXJlbmNlU2VydmljZTogVXNlclByZWZlcmVuY2VzU2VydmljZSkge31cblxuICAgIHNldCBjb250ZXh0TWVudVNvdXJjZShjb250ZXh0TWVudVNvdXJjZTogVCkge1xuICAgICAgICB0aGlzLl9jb250ZXh0TWVudVNvdXJjZSA9IGNvbnRleHRNZW51U291cmNlO1xuICAgIH1cblxuICAgIC8qKiBBcnJheSBvZiBjb250ZXh0IG1lbnUgb3B0aW9ucyB3aGljaCBzaG91bGQgYmUgZGlzcGxheWVkIGZvciBlYWNoIHJvdy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBjb250ZXh0TWVudU9wdGlvbnMoY29udGV4dE1lbnVPcHRpb25zOiBhbnlbXSkge1xuICAgICAgICB0aGlzLmNvbnRleHRNZW51T3B0aW9uc0NoYW5nZWQkLm5leHQoKTtcbiAgICAgICAgaWYgKGNvbnRleHRNZW51T3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5fY29udGV4dE1lbnVPcHRpb25zID0gY29udGV4dE1lbnVPcHRpb25zLm1hcCgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFvcHRpb24uc3ViamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5vcHRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJqZWN0OiBuZXcgU3ViamVjdCgpXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb247XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG1lcmdlKC4uLnRoaXMuY29udGV4dE1lbnVPcHRpb25zLm1hcCgob3B0aW9uKSA9PiBvcHRpb24uc3ViamVjdCkpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuY29udGV4dE1lbnVPcHRpb25zQ2hhbmdlZCQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHRNZW51T3B0aW9uU2VsZWN0ZWQuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3c6IHRoaXMuX2NvbnRleHRNZW51U291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dE1lbnVPcHRpb246IG9wdGlvblxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRleHRNZW51T3B0aW9ucyA9IGNvbnRleHRNZW51T3B0aW9ucztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBjb250ZXh0TWVudU9wdGlvbnMoKTogYW55W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29udGV4dE1lbnVPcHRpb25zO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmxvYWRpbmdSb290JCA9IHRoaXMubG9hZGluZ1Jvb3RTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIHRoaXMucmVmcmVzaFRyZWUoMCwgdGhpcy51c2VyUHJlZmVyZW5jZVNlcnZpY2UucGFnaW5hdGlvblNpemUpO1xuICAgICAgICB0aGlzLnRyZWVOb2Rlc1NlbGVjdGlvbi5jaGFuZ2VkLnN1YnNjcmliZSgoc2VsZWN0aW9uQ2hhbmdlOiBTZWxlY3Rpb25DaGFuZ2U8VD4pID0+IHtcbiAgICAgICAgICAgIHRoaXMub25UcmVlU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGlvbkNoYW5nZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmNvbnRleHRNZW51T3B0aW9uc0NoYW5nZWQkLm5leHQoKTtcbiAgICAgICAgdGhpcy5jb250ZXh0TWVudU9wdGlvbnNDaGFuZ2VkJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBub2RlIGlzIExvYWRNb3JlTm9kZSBub2RlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gX2lkeCAodW51c2VkKVxuICAgICAqIEBwYXJhbSBub2RlIG5vZGUgdG8gYmUgY2hlY2tlZFxuICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGVyZSBhcmUgbW9yZSBpdGVtcyB0byBsb2FkLCBvdGhlcndpc2UgYGZhbHNlYFxuICAgICAqL1xuICAgIHB1YmxpYyBpc0xvYWRNb3JlTm9kZShfaWR4OiBudW1iZXIsIG5vZGU6IFQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09IFRyZWVOb2RlVHlwZS5Mb2FkTW9yZU5vZGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRyZWUgaXMgZW1wdHlcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIGJvb2xlYW5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJlZVNlcnZpY2UuaXNFbXB0eSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYWN0aW9uIGljb24gYmFzZWQgb24gZXhwYW5kZWQvY29sbGFwc2VkIG5vZGUgc3RhdGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbm9kZSBub2RlIHRvIGJlIGNoZWNrZWRcbiAgICAgKiBAcmV0dXJucyBjb2xsYXBzZSBvciBleHBhbmQgaWNvblxuICAgICAqL1xuICAgIHB1YmxpYyBleHBhbmRDb2xsYXBzZUljb25WYWx1ZShub2RlOiBUKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJlZVNlcnZpY2UudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSA/IHRoaXMuY29sbGFwc2VJY29uIDogdGhpcy5leHBhbmRJY29uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlZnJlc2hlcyB0aGUgdHJlZSwgcm9vdCBub2RlcyBhcmUgcmVsb2FkZWQsIHRyZWUgc2VsZWN0aW9uIGlzIGNsZWFyZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2tpcENvdW50IE51bWJlciBvZiByb290IG5vZGVzIHRvIHNraXAuXG4gICAgICogQHBhcmFtIG1heEl0ZW1zIE1heGltdW0gbnVtYmVyIG9mIG5vZGVzIHJldHVybmVkIGZyb20gT2JzZXJ2YWJsZS5cbiAgICAgKiBAcGFyYW0gc2VhcmNoVGVybSBTcGVjaWZpZXMgaWYgY2F0ZWdvcmllcyBzaG91bGQgYmUgZmlsdGVyZWQgb3V0IGJ5IG5hbWUgb3Igbm90LiBJZiBub3Qgc3BlY2lmaWVkIHRoZW4gcmV0dXJucyBjYXRlZ29yaWVzIHdpdGhvdXQgZmlsdGVyaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWZyZXNoVHJlZShza2lwQ291bnQ/OiBudW1iZXIsIG1heEl0ZW1zPzogbnVtYmVyLCBzZWFyY2hUZXJtPzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9hZGluZ1Jvb3RTb3VyY2UubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgdGhpcy50cmVlU2VydmljZS5nZXRTdWJOb2RlcygnLXJvb3QtJywgc2tpcENvdW50LCBtYXhJdGVtcywgc2VhcmNoVGVybSkuc3Vic2NyaWJlKChyZXNwb25zZTogVHJlZVJlc3BvbnNlPFQ+KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLnRyZWVOb2RlcyA9IHJlc3BvbnNlLmVudHJpZXM7XG4gICAgICAgICAgICB0aGlzLnRyZWVOb2Rlc1NlbGVjdGlvbi5kZXNlbGVjdCguLi5yZXNwb25zZS5lbnRyaWVzKTtcbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvbkNoYW5nZWQuZW1pdChyZXNwb25zZS5wYWdpbmF0aW9uKTtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1Jvb3RTb3VyY2UubmV4dChmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbGxhcHNlcyBvciBleHBhbmRpbmcgdGhlIG5vZGUgYmFzZWQgb24gaXRzIGN1cnJlbnQgc3RhdGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2RlIG5vZGUgdG8gYmUgY29sbGFwc2VkL2V4cGFuZGVkXG4gICAgICovXG4gICAgcHVibGljIGV4cGFuZENvbGxhcHNlTm9kZShub2RlOiBUKTogdm9pZCB7XG4gICAgICAgIGlmIChub2RlLmhhc0NoaWxkcmVuICYmICFub2RlLmlzTG9hZGluZykge1xuICAgICAgICAgICAgaWYgKHRoaXMudHJlZVNlcnZpY2UudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UuY29sbGFwc2VOb2RlKG5vZGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBub2RlLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5nZXRTdWJOb2Rlcyhub2RlLmlkLCAwLCB0aGlzLnVzZXJQcmVmZXJlbmNlU2VydmljZS5wYWdpbmF0aW9uU2l6ZSkuc3Vic2NyaWJlKChyZXNwb25zZTogVHJlZVJlc3BvbnNlPFQ+KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UuZXhwYW5kTm9kZShub2RlLCByZXNwb25zZS5lbnRyaWVzKTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudHJlZU5vZGVzU2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGltZW91dCB1c2VkIHRvIHVwZGF0ZSBub2RlQ2hlY2tib3hlcyBxdWVyeSBsaXN0IGFmdGVyIG5ldyBub2RlcyBhcmUgYWRkZWQgc28gdGhleSBjYW4gYmUgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZU5vZGVzU2VsZWN0aW9uLnNlbGVjdCguLi5yZXNwb25zZS5lbnRyaWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkcyBtb3JlIHN1Ym5vZGUgZm9yIGEgZ2l2ZW4gcGFyZW50IG5vZGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2RlIHBhcmVudCBub2RlXG4gICAgICovXG4gICAgcHVibGljIGxvYWRNb3JlU3Vibm9kZXMobm9kZTogVCk6IHZvaWQge1xuICAgICAgICBub2RlLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICAgIGNvbnN0IHBhcmVudE5vZGU6IFQgPSB0aGlzLnRyZWVTZXJ2aWNlLmdldFBhcmVudE5vZGUobm9kZS5wYXJlbnRJZCk7XG4gICAgICAgIHRoaXMudHJlZVNlcnZpY2UucmVtb3ZlTm9kZShub2RlKTtcbiAgICAgICAgY29uc3QgbG9hZGVkQ2hpbGRyZW46IG51bWJlciA9IHRoaXMudHJlZVNlcnZpY2UuZ2V0Q2hpbGRyZW4ocGFyZW50Tm9kZSkubGVuZ3RoO1xuICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0U3ViTm9kZXMocGFyZW50Tm9kZS5pZCwgbG9hZGVkQ2hpbGRyZW4sIHRoaXMudXNlclByZWZlcmVuY2VTZXJ2aWNlLnBhZ2luYXRpb25TaXplKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IFRyZWVSZXNwb25zZTxUPikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UuYXBwZW5kTm9kZXMocGFyZW50Tm9kZSwgcmVzcG9uc2UuZW50cmllcyk7XG4gICAgICAgICAgICAgICAgbm9kZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uaXNTZWxlY3RlZChwYXJlbnROb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAvL3RpbWVvdXQgdXNlZCB0byB1cGRhdGUgbm9kZUNoZWNrYm94ZXMgcXVlcnkgbGlzdCBhZnRlciBuZXcgbm9kZXMgYXJlIGFkZGVkIHNvIHRoZXkgY2FuIGJlIHNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uc2VsZWN0KC4uLnJlc3BvbnNlLmVudHJpZXMpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIG5vZGUgaXMgc2VsZWN0ZWQgaXQgc2VsZWN0cyBhbGwgaXRzIGRlc2NlbmRhbnRzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbm9kZSBzZWxlY3RlZCBub2RlXG4gICAgICovXG4gICAgcHVibGljIG9uTm9kZVNlbGVjdGVkKG5vZGU6IFQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24udG9nZ2xlKG5vZGUpO1xuICAgICAgICBjb25zdCBkZXNjZW5kYW50czogVFtdID0gdGhpcy50cmVlU2VydmljZS50cmVlQ29udHJvbC5nZXREZXNjZW5kYW50cyhub2RlKS5maWx0ZXIodGhpcy5pc1JlZ3VsYXJOb2RlKTtcbiAgICAgICAgaWYgKGRlc2NlbmRhbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMudHJlZU5vZGVzU2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSlcbiAgICAgICAgICAgICAgICA/IHRoaXMudHJlZU5vZGVzU2VsZWN0aW9uLnNlbGVjdCguLi5kZXNjZW5kYW50cylcbiAgICAgICAgICAgICAgICA6IHRoaXMudHJlZU5vZGVzU2VsZWN0aW9uLmRlc2VsZWN0KC4uLmRlc2NlbmRhbnRzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrUGFyZW50c1NlbGVjdGlvbihub2RlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYWxsIGRlc2NlbmRhbnRzIG9mIGEgbm9kZSBhcmUgc2VsZWN0ZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2RlIHNlbGVjdGVkIG5vZGVcbiAgICAgKiBAcmV0dXJucyBib29sZWFuXG4gICAgICovXG4gICAgcHVibGljIGRlc2NlbmRhbnRzQWxsU2VsZWN0ZWQobm9kZTogVCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBkZXNjZW5kYW50czogVFtdID0gdGhpcy50cmVlU2VydmljZS50cmVlQ29udHJvbC5nZXREZXNjZW5kYW50cyhub2RlKS5maWx0ZXIodGhpcy5pc1JlZ3VsYXJOb2RlKTtcbiAgICAgICAgcmV0dXJuIGRlc2NlbmRhbnRzLmxlbmd0aCA+IDAgJiYgZGVzY2VuZGFudHMuZXZlcnkoKGRlc2NlbmRhbnQ6IFQpID0+IHRoaXMudHJlZU5vZGVzU2VsZWN0aW9uLmlzU2VsZWN0ZWQoZGVzY2VuZGFudCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBzb21lIGRlc2NlbmRhbnRzIG9mIGEgbm9kZSBhcmUgc2VsZWN0ZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2RlIHNlbGVjdGVkIG5vZGVcbiAgICAgKiBAcmV0dXJucyBib29sZWFuXG4gICAgICovXG4gICAgcHVibGljIGRlc2NlbmRhbnRzUGFydGlhbGx5U2VsZWN0ZWQobm9kZTogVCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBkZXNjZW5kYW50czogVFtdID0gdGhpcy50cmVlU2VydmljZS50cmVlQ29udHJvbC5nZXREZXNjZW5kYW50cyhub2RlKS5maWx0ZXIodGhpcy5pc1JlZ3VsYXJOb2RlKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGRlc2NlbmRhbnRzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICF0aGlzLmRlc2NlbmRhbnRzQWxsU2VsZWN0ZWQobm9kZSkgJiZcbiAgICAgICAgICAgIGRlc2NlbmRhbnRzLnNvbWUoKGRlc2NlbmRhbnQ6IFQpID0+IHRoaXMudHJlZU5vZGVzU2VsZWN0aW9uLmlzU2VsZWN0ZWQoZGVzY2VuZGFudCkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja1BhcmVudHNTZWxlY3Rpb24obm9kZTogVCk6IHZvaWQge1xuICAgICAgICBsZXQgcGFyZW50OiBUID0gdGhpcy50cmVlU2VydmljZS5nZXRQYXJlbnROb2RlKG5vZGUucGFyZW50SWQpO1xuICAgICAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrUm9vdE5vZGVTZWxlY3Rpb24ocGFyZW50KTtcbiAgICAgICAgICAgIHBhcmVudCA9IHRoaXMudHJlZVNlcnZpY2UuZ2V0UGFyZW50Tm9kZShwYXJlbnQucGFyZW50SWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja1Jvb3ROb2RlU2VsZWN0aW9uKG5vZGU6IFQpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgbm9kZVNlbGVjdGVkOiBib29sZWFuID0gdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKTtcbiAgICAgICAgY29uc3QgZGVzY0FsbFNlbGVjdGVkID0gdGhpcy5kZXNjZW5kYW50c0FsbFNlbGVjdGVkKG5vZGUpO1xuICAgICAgICBpZiAobm9kZVNlbGVjdGVkICYmICFkZXNjQWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMudHJlZU5vZGVzU2VsZWN0aW9uLmRlc2VsZWN0KG5vZGUpO1xuICAgICAgICB9IGVsc2UgaWYgKCFub2RlU2VsZWN0ZWQgJiYgZGVzY0FsbFNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnRyZWVOb2Rlc1NlbGVjdGlvbi5zZWxlY3Qobm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uVHJlZVNlbGVjdGlvbkNoYW5nZShzZWxlY3Rpb25DaGFuZ2U6IFNlbGVjdGlvbkNoYW5nZTxUPik6IHZvaWQge1xuICAgICAgICBzZWxlY3Rpb25DaGFuZ2UucmVtb3ZlZC5mb3JFYWNoKCh1bnNlbGVjdGVkTm9kZTogVCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNSZWd1bGFyTm9kZSh1bnNlbGVjdGVkTm9kZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVDaGVja2JveGVzLmZpbmQoKGNoZWNrYm94OiBNYXRDaGVja2JveCkgPT4gY2hlY2tib3guaWQgPT09IHVuc2VsZWN0ZWROb2RlLmlkKS5jaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBzZWxlY3Rpb25DaGFuZ2UuYWRkZWQuZm9yRWFjaCgoc2VsZWN0ZWROb2RlOiBUKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1JlZ3VsYXJOb2RlKHNlbGVjdGVkTm9kZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVDaGVja2JveGVzLmZpbmQoKGNoZWNrYm94OiBNYXRDaGVja2JveCkgPT4gY2hlY2tib3guaWQgPT09IHNlbGVjdGVkTm9kZS5pZCkuY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNSZWd1bGFyTm9kZShub2RlOiBUKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBub2RlLm5vZGVUeXBlICE9PSBUcmVlTm9kZVR5cGUuTG9hZE1vcmVOb2RlO1xuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCIobG9hZGluZ1Jvb3QkIHwgYXN5bmMpID09PSBmYWxzZTsgZWxzZSBsb2FkaW5nU3Bpbm5lclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGhpcy5pc0VtcHR5KCk7IGVsc2UgZW1wdHlDb250ZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtdHJlZS1yb3cgYWRmLXRyZWUtaGVhZGVyXCIgKm5nSWY9XCJkaXNwbGF5TmFtZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi10cmVlLWNlbGwgYWRmLXRyZWUtY2VsbC1oZWFkZXJcIiBkYXRhLWF1dG9tYXRpb24taWQ9XCJ0cmVlLWhlYWRlci1kaXNwbGF5LW5hbWVcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFkZi10cmVlLWNlbGwtdmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgZGlzcGxheU5hbWUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtYXQtdHJlZVxuICAgICAgICAgICAgY2xhc3M9XCJhZGYtdHJlZS1ib2R5XCJcbiAgICAgICAgICAgIFtkYXRhU291cmNlXT1cInRyZWVTZXJ2aWNlXCJcbiAgICAgICAgICAgIFt0cmVlQ29udHJvbF09XCJ0cmVlU2VydmljZS50cmVlQ29udHJvbFwiPlxuICAgICAgICAgICAgPG1hdC10cmVlLW5vZGVcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi10cmVlLWxvYWQtbW9yZS1yb3dcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInbG9hZE1vcmVTdWJub2Rlc18nICsgbm9kZS5wYXJlbnRJZFwiXG4gICAgICAgICAgICAgICAgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGUgd2hlbiBpc0xvYWRNb3JlTm9kZVwiXG4gICAgICAgICAgICAgICAgbWF0VHJlZU5vZGVQYWRkaW5nPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtdHJlZS1leHBhbmQtY29sbGFwc2UtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhZGYtdHJlZS1sb2FkLW1vcmUtYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJsb2FkTW9yZVN1Ym5vZGVzKG5vZGUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU9XCJpbmRldGVybWluYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlhbWV0ZXJdPVwiMjRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibm9kZS5pc0xvYWRpbmc7IGVsc2UgbG9hZE1vcmVJY29uXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9hZE1vcmVJY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtaWNvbiBbdmFsdWVdPVwiJ2NoZXZyb25fcmlnaHQnXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtdHJlZS1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi10cmVlLWNlbGwtdmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImxvYWRNb3JlU3Vibm9kZXMobm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImxvYWRNb3JlU3Vibm9kZXMobm9kZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdBREYtVFJFRS5MT0FELU1PUkUtQlVUVE9OJyB8IHRyYW5zbGF0ZTogeyBuYW1lOiBsb2FkTW9yZVN1ZmZpeCB9IH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbWF0LXRyZWUtbm9kZT5cbiAgICAgICAgICAgIDxtYXQtdHJlZS1ub2RlXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtdHJlZS1yb3dcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInbm9kZV8nICsgbm9kZS5pZFwiXG4gICAgICAgICAgICAgICAgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGVcIlxuICAgICAgICAgICAgICAgIG1hdFRyZWVOb2RlUGFkZGluZ1xuICAgICAgICAgICAgICAgIFthZGYtY29udGV4dC1tZW51XT1cImNvbnRleHRNZW51T3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgW2FkZi1jb250ZXh0LW1lbnUtZW5hYmxlZF09XCIhIWNvbnRleHRNZW51T3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImNvbnRleHRNZW51U291cmNlID0gbm9kZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtdHJlZS1leHBhbmQtY29sbGFwc2UtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJub2RlLmhhc0NoaWxkcmVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi10cmVlLWV4cGFuZC1jb2xsYXBzZS1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJleHBhbmRDb2xsYXBzZU5vZGUobm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZT1cImluZGV0ZXJtaW5hdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaWFtZXRlcl09XCIyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJub2RlLmlzTG9hZGluZzsgZWxzZSBleHBhbmRDb2xsYXBzZUljb25cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNleHBhbmRDb2xsYXBzZUljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1pY29uIFt2YWx1ZV09XCJleHBhbmRDb2xsYXBzZUljb25WYWx1ZShub2RlKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0YWJsZU5vZGVzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggKm5nSWY9XCJub2RlLmhhc0NoaWxkcmVuOyBlbHNlIG5vQ2hpbGRyZW5Ob2RlQ2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIm5vZGUuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImRlc2NlbmRhbnRzQWxsU2VsZWN0ZWQobm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cImRlc2NlbmRhbnRzUGFydGlhbGx5U2VsZWN0ZWQobm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25Ob2RlU2VsZWN0ZWQobm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImhhcy1jaGlsZHJlbi1ub2RlLWNoZWNrYm94XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0NoaWxkcmVuTm9kZUNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIm5vZGUuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInRyZWVOb2Rlc1NlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uTm9kZVNlbGVjdGVkKG5vZGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJuby1jaGlsZHJlbi1ub2RlLWNoZWNrYm94XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLXRyZWUtY2VsbFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtdHJlZS1jZWxsLXZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hZGYtdHJlZS1jbGlja2FibGUtY2VsbC12YWx1ZV09XCJub2RlLmhhc0NoaWxkcmVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJleHBhbmRDb2xsYXBzZU5vZGUobm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImV4cGFuZENvbGxhcHNlTm9kZShub2RlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgbm9kZS5ub2RlTmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi10cmVlLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwiJ2FjdGlvbl9tZW51X3JpZ2h0XycgKyBub2RlLmlkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5vZGVBY3Rpb25zTWVudVRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBub2RlOiBub2RlIH1cIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9tYXQtdHJlZS1ub2RlPlxuICAgICAgICA8L21hdC10cmVlPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlDb250ZW50PlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJlbXB0eUNvbnRlbnRUZW1wbGF0ZVwiIC8+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xvYWRpbmdTcGlubmVyPlxuICAgIDxkaXYgY2xhc3M9XCJhZGYtdHJlZS1sb2FkaW5nLXNwaW5uZXItY29udGFpbmVyXCI+XG4gICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lclxuICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgIG1vZGU9XCJpbmRldGVybWluYXRlXCIgLz5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=