@rangertechnologies/ngnxt 2.1.250 → 2.1.251

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 (86) hide show
  1. package/esm2022/environments/version.mjs +2 -2
  2. package/esm2022/lib/components/button/nxt-button.component.mjs +4 -4
  3. package/esm2022/lib/components/custom-calendar/custom-calendar.component.mjs +8 -5
  4. package/esm2022/lib/components/custom-dropdown/custom-dropdown.component.mjs +8 -7
  5. package/esm2022/lib/components/custom-model/custom-model.component.mjs +5 -3
  6. package/esm2022/lib/components/custom-radio/custom-radio.component.mjs +3 -3
  7. package/esm2022/lib/components/datatable/datatable.component.mjs +17 -15
  8. package/esm2022/lib/components/file-upload/file-upload.component.mjs +9 -9
  9. package/esm2022/lib/components/icon-selector/icon-selector.component.mjs +4 -3
  10. package/esm2022/lib/components/list-view-filter/list-view-filter.component.mjs +9 -9
  11. package/esm2022/lib/components/nxt-input/nxt-input.component.mjs +24 -12
  12. package/esm2022/lib/components/pagination/pagination.component.mjs +3 -3
  13. package/esm2022/lib/components/pick-location/pick-location.component.mjs +5 -4
  14. package/esm2022/lib/components/search-box/search-box.component.mjs +12 -8
  15. package/esm2022/lib/nxt-app.module.mjs +4 -4
  16. package/esm2022/lib/pages/booklet/booklet.component.mjs +51 -69
  17. package/esm2022/lib/pages/builder/element/element.component.mjs +65 -10
  18. package/esm2022/lib/pages/builder/form/form.component.mjs +6 -3
  19. package/esm2022/lib/pages/builder/properties/common-fields.constants.mjs +62 -55
  20. package/esm2022/lib/pages/builder/properties/properties.component.mjs +182 -78
  21. package/esm2022/lib/pages/builder/templates/templates.component.mjs +5 -4
  22. package/esm2022/lib/pages/pdfDesigner/pdf-designer/pdf-designer.component.mjs +5 -4
  23. package/esm2022/lib/pages/pdfDesigner/pdf-properties/pdf-properties.component.mjs +42 -45
  24. package/esm2022/lib/pages/questionbook/questionbook.component.mjs +14 -32
  25. package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +12 -8
  26. package/esm2022/lib/pipe/custom-translate.pipe.mjs +16 -10
  27. package/esm2022/lib/services/change/change.service.mjs +46 -0
  28. package/esm2022/lib/services/country/country.service.mjs +135 -0
  29. package/esm2022/lib/services/data/data.service.mjs +100 -0
  30. package/esm2022/lib/services/form-builder/form-builder.service.mjs +485 -0
  31. package/esm2022/lib/services/pdf-designer/pdf-designer.service.mjs +398 -0
  32. package/esm2022/lib/services/salesforce/salesforce.service.mjs +41 -0
  33. package/esm2022/lib/services/shared/shared.service.mjs +100 -0
  34. package/esm2022/lib/services/storage/storage.service.mjs +59 -0
  35. package/esm2022/lib/services/template/template.service.mjs +351 -0
  36. package/esm2022/lib/services/translation/translation.service.mjs +121 -0
  37. package/esm2022/public-api.mjs +2 -2
  38. package/fesm2022/rangertechnologies-ngnxt.mjs +1299 -1008
  39. package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
  40. package/lib/components/button/nxt-button.component.d.ts +1 -1
  41. package/lib/components/custom-calendar/custom-calendar.component.d.ts +1 -1
  42. package/lib/components/custom-dropdown/custom-dropdown.component.d.ts +2 -2
  43. package/lib/components/custom-radio/custom-radio.component.d.ts +2 -2
  44. package/lib/components/datatable/datatable.component.d.ts +3 -3
  45. package/lib/components/file-upload/file-upload.component.d.ts +2 -2
  46. package/lib/components/image-cropper/component/image-cropper.component.d.ts +1 -1
  47. package/lib/components/nxt-input/nxt-input.component.d.ts +2 -2
  48. package/lib/components/search-box/search-box.component.d.ts +4 -4
  49. package/lib/nxt-app.module.d.ts +1 -1
  50. package/lib/pages/booklet/booklet.component.d.ts +9 -9
  51. package/lib/pages/builder/element/element.component.d.ts +10 -4
  52. package/lib/pages/builder/form/form.component.d.ts +2 -1
  53. package/lib/pages/builder/properties/common-fields.constants.d.ts +18 -0
  54. package/lib/pages/builder/properties/properties.component.d.ts +33 -6
  55. package/lib/pages/builder/templates/templates.component.d.ts +1 -1
  56. package/lib/pages/pdfDesigner/pdf-designer/pdf-designer.component.d.ts +1 -1
  57. package/lib/pages/pdfDesigner/pdf-properties/pdf-properties.component.d.ts +19 -2
  58. package/lib/pages/questionbook/questionbook.component.d.ts +6 -8
  59. package/lib/pages/questionnaire/questionnaire.component.d.ts +6 -5
  60. package/lib/pipe/custom-translate.pipe.d.ts +2 -3
  61. package/lib/services/{form-builder.service.d.ts → form-builder/form-builder.service.d.ts} +2 -1
  62. package/lib/services/{pdf-designer.service.d.ts → pdf-designer/pdf-designer.service.d.ts} +1 -1
  63. package/lib/services/{storage.service.d.ts → storage/storage.service.d.ts} +2 -2
  64. package/lib/services/{translation.service.d.ts → translation/translation.service.d.ts} +12 -1
  65. package/package.json +1 -1
  66. package/public-api.d.ts +1 -1
  67. package/rangertechnologies-ngnxt-2.1.251.tgz +0 -0
  68. package/esm2022/lib/interfaces/apimeta.mjs +0 -2
  69. package/esm2022/lib/services/change.service.mjs +0 -46
  70. package/esm2022/lib/services/country.service.mjs +0 -135
  71. package/esm2022/lib/services/data.service.mjs +0 -100
  72. package/esm2022/lib/services/form-builder.service.mjs +0 -402
  73. package/esm2022/lib/services/pdf-designer.service.mjs +0 -398
  74. package/esm2022/lib/services/salesforce.service.mjs +0 -41
  75. package/esm2022/lib/services/shared.service.mjs +0 -100
  76. package/esm2022/lib/services/storage.service.mjs +0 -59
  77. package/esm2022/lib/services/template.service.mjs +0 -351
  78. package/esm2022/lib/services/translation.service.mjs +0 -61
  79. package/lib/interfaces/apimeta.d.ts +0 -15
  80. package/rangertechnologies-ngnxt-2.1.250.tgz +0 -0
  81. /package/lib/services/{change.service.d.ts → change/change.service.d.ts} +0 -0
  82. /package/lib/services/{country.service.d.ts → country/country.service.d.ts} +0 -0
  83. /package/lib/services/{data.service.d.ts → data/data.service.d.ts} +0 -0
  84. /package/lib/services/{salesforce.service.d.ts → salesforce/salesforce.service.d.ts} +0 -0
  85. /package/lib/services/{shared.service.d.ts → shared/shared.service.d.ts} +0 -0
  86. /package/lib/services/{template.service.d.ts → template/template.service.d.ts} +0 -0
@@ -4,12 +4,13 @@ import { CommonModule } from "@angular/common";
4
4
  import { FormsModule } from "@angular/forms";
5
5
  import { NxtInput } from "../nxt-input/nxt-input.component";
6
6
  import { Subject, debounceTime, distinctUntilChanged, takeUntil } from "rxjs";
7
+ import { NxtCustomTranslatePipe } from "../../pipe/custom-translate.pipe";
7
8
  import * as i0 from "@angular/core";
8
- import * as i1 from "../../services/storage.service";
9
- import * as i2 from "../../services/change.service";
10
- import * as i3 from "../../services/data.service";
9
+ import * as i1 from "../../services/storage/storage.service";
10
+ import * as i2 from "../../services/change/change.service";
11
+ import * as i3 from "../../services/data/data.service";
11
12
  import * as i4 from "../../i18n.service";
12
- import * as i5 from "../../services/country.service";
13
+ import * as i5 from "../../services/country/country.service";
13
14
  import * as i6 from "@angular/common";
14
15
  export class NxtSearchBox {
15
16
  storageService;
@@ -377,6 +378,7 @@ export class NxtSearchBox {
377
378
  const defaultField = this.apiMeta.defaultField ||
378
379
  (Array.isArray(this.apiMeta?.field) ? this.apiMeta?.field?.[0] : this.apiMeta.field);
379
380
  const change = new ChangeWrapper();
381
+ change['isObject'] = this.apiMeta?.isObject;
380
382
  change['fromQuestionId'] = this.id;
381
383
  change['valueObj'] = event;
382
384
  change['field'] = defaultField;
@@ -396,6 +398,7 @@ export class NxtSearchBox {
396
398
  const defaultField = this.apiMeta.defaultField ||
397
399
  (Array.isArray(this.apiMeta?.field) ? this.apiMeta?.field?.[0] : this.apiMeta.field);
398
400
  const change = new ChangeWrapper();
401
+ change['isObject'] = this.apiMeta?.isObject;
399
402
  change['fromQuestionId'] = this.id;
400
403
  change['valueObj'] = this.valueObj;
401
404
  change['field'] = defaultField;
@@ -431,15 +434,16 @@ export class NxtSearchBox {
431
434
  this.clickItem(null);
432
435
  }
433
436
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtSearchBox, deps: [{ token: i1.StorageService }, { token: i2.ChangeService }, { token: i3.DataService }, { token: i4.I18nService }, { token: i5.CountryService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
434
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NxtSearchBox, isStandalone: true, selector: "nxt-search-box", inputs: { placeHolderText: "placeHolderText", question: "question", apiMeta: "apiMeta", id: "id", readOnly: "readOnly", mode: "mode", from: "from" }, outputs: { searchValueChange: "searchValueChange" }, host: { listeners: { "document:click": "onDocumentClick($event)", "document:keydown.escape": "onEscapeKey($event)" } }, viewQueries: [{ propertyName: "searchWrapper", first: true, predicate: ["searchWrapper"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<!-- VD 12Jun24 - readonly change -->\n<div class=\"search-wrapper\" #searchWrapper>\n <nxt-input \n [type]=\"'list'\" \n [mode]=\"mode\" \n [from]=\"from\"\n [value]=\"mode === 'edit' ? filterName : viewFilterName\"\n [labelFont]=\"question.font\" \n [label]=\"question?.questionText\" \n [labelColor]=\"question.fontColor\"\n [labelSize]=\"question.fontSize\" \n [inputValueSize]=\"question.fontSize\" \n [labelWeight]=\"question.fontWeight\"\n [inputWeight]=\"question.fontWeight\" \n [showLabel]=\"question.style?.showLabel\" \n inputBorder=\"none\" \n svgHeight=\"20px\"\n svgWidth=\"20px\" \n [placeholder]=\"placeHolderText\" \n [required]=\"question.isOptional\" \n inputBgColor=\"#FAFAFA\"\n [inputId]=\"question.trackingId\" \n [errorMessages]=\"{ required: 'This field is required' }\"\n [inputIconLeftSrc]=\"question.iconLeftSrc\" \n (inputValue)=\"getSourceDataLocal($event); inputValue($event.value, $event.question)\" \n (onFocus)=\"onInputFocus()\"\n (onBlur)=\"onInputBlur()\"\n [showSuggestion]=\"showSuggestion\" \n ariaOwns=\"selectList\" \n ariaHasPopup=\"listbox\" \n [isLoading]=\"isLoading\" \n [question]=\"question\"\n (removeValueEmit)=\"removeValueEmit()\">\n </nxt-input>\n\n <div id=\"selectList\" class=\"suggestion-wrapper\" role=\"listbox\" *ngIf=\"showSuggestion\">\n <div *ngIf=\"finalResults().length > 0\" class=\"nxt-suggestions-container\">\n <div *ngFor=\"let item of finalResults(); trackBy: trackByFn\" \n (click)=\"clickItem(item)\" \n class=\"suggestion-item\" \n role=\"option\"\n tabindex=\"0\"\n (keydown.enter)=\"clickItem(item)\"\n (keydown.space)=\"clickItem(item)\">\n <div class=\"item-content\">\n <div class=\"item-details\">\n <div *ngIf=\"item.thumbnail\" class=\"thumbnail-wrapper\">\n <img [src]=\"item.thumbnail\" [alt]=\"item.name + ' avatar'\" />\n </div>\n <div class=\"item-text\">\n <!-- Primary text (first key) -->\n <ng-container *ngIf=\"getKeys(getValues(item, SearchItem)).length > 0\">\n <div class=\"item-name primary\" \n [innerHTML]=\"highlightText(getValues(item, SearchItem)[getKeys(getValues(item, SearchItem))[0]], searchKeyWord)\">\n </div>\n </ng-container>\n \n <!-- Secondary text (remaining keys) -->\n <div class=\"item-secondary\" *ngIf=\"getKeys(getValues(item, SearchItem)).length > 1\">\n <ng-container *ngFor=\"let key of getKeys(getValues(item, SearchItem)); let i = index\">\n <ng-container *ngIf=\"i > 0\">\n <span class=\"secondary-text\" \n [innerHTML]=\"highlightText(getValues(item, SearchItem)[key], searchKeyWord)\">\n </span>\n <span class=\"separator\" *ngIf=\"i < getKeys(getValues(item, SearchItem)).length - 1\"> | </span>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"noResult && searchKeyWord\" class=\"no-results\">\n <div class=\"no-results-content\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\">\n <circle cx=\"11\" cy=\"11\" r=\"8\"></circle>\n <path d=\"m21 21-4.35-4.35\"></path>\n </svg>\n <p>No results found for \"{{searchKeyWord}}\"</p>\n </div>\n </div>\n </div>\n</div>", styles: [".search-wrapper{position:relative;width:100%}.suggestion-wrapper{position:absolute;top:100%;left:0;right:0;background:#fff;border:1px solid #e0e0e0;border-top:none;border-radius:0 0 4px 4px;box-shadow:0 2px 8px #0000001a;z-index:10;max-height:300px;overflow:hidden}.nxt-suggestions-container{max-height:300px;overflow-y:auto;min-width:100%}.suggestion-item{cursor:pointer;border-bottom:1px solid #f0f0f0;transition:background-color .2s ease;outline:none}.suggestion-item:hover,.suggestion-item:focus{background-color:#f5f5f5}.suggestion-item:last-child{border-bottom:none}.item-content{padding:5px}.item-details{display:flex;align-items:flex-start;gap:12px;text-align:left}.thumbnail-wrapper{flex-shrink:0}.thumbnail-wrapper img{width:40px;height:40px;border-radius:50%;object-fit:cover;border:1px solid #e0e0e0}.item-text{flex:1;min-width:0}.item-name{font-size:14px;font-weight:500;color:#333;line-height:1.4;margin-bottom:2px;word-wrap:break-word;overflow-wrap:break-word}.item-secondary{font-size:12px;color:#666;line-height:1.3;display:flex}.secondary-text{display:inline}.separator{color:#999;margin:0 3px}.no-results{padding:20px;text-align:center;color:#666}.no-results-content{display:flex;align-items:center;justify-content:center;gap:8px;flex-direction:column}.no-results-content svg{color:#d1d5db;margin-bottom:8px}.no-results-content p{color:#6b7280;margin:0;font-size:14px;font-weight:500}:host ::ng-deep .highlight{font-weight:700;display:inline}.nxt-suggestions-container::-webkit-scrollbar{width:6px}.nxt-suggestions-container::-webkit-scrollbar-track{background:#f1f1f1}.nxt-suggestions-container::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}.nxt-suggestions-container::-webkit-scrollbar-thumb:hover{background:#a8a8a8}@media (max-width: 768px){.suggestion-wrapper,.nxt-suggestions-container{max-height:250px}.item-content{padding:10px 12px}.item-details{gap:8px}.thumbnail-wrapper img{width:32px;height:32px}.item-name{font-size:13px}.item-secondary{font-size:11px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: NxtInput, selector: "nxt-input", inputs: ["label", "labelFont", "labelWeight", "inputWeight", "labelSize", "inputValueSize", "labelColor", "showLabel", "svgHeight", "svgWidth", "type", "inputIconRightSrc", "inputIconLeftSrc", "required", "minLength", "pattern", "errorMessages", "maxLength", "placeholder", "inputBgColor", "inputBorder", "placeholderColor", "placeholderFont", "placeholderWeight", "placeholderSize", "inputTextColor", "inputHeight", "inputWidth", "inputId", "inputBorderSize", "inputConfig", "confPassVal", "confPass", "mode", "value", "question", "showSuggestion", "ariaOwns", "ariaHasPopup", "isLoading", "options", "minDate", "maxDate", "rows", "from", "hyperLink", "size"], outputs: ["valueChange", "inputValue", "onBlur", "onFocus", "toggleEmit", "nativeInputRef", "removeValueEmit", "hyperlinkEmit"] }] });
437
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NxtSearchBox, isStandalone: true, selector: "nxt-search-box", inputs: { placeHolderText: "placeHolderText", question: "question", apiMeta: "apiMeta", id: "id", readOnly: "readOnly", mode: "mode", from: "from" }, outputs: { searchValueChange: "searchValueChange" }, host: { listeners: { "document:click": "onDocumentClick($event)", "document:keydown.escape": "onEscapeKey($event)" } }, viewQueries: [{ propertyName: "searchWrapper", first: true, predicate: ["searchWrapper"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<!-- VD 12Jun24 - readonly change -->\n<div class=\"search-wrapper\" #searchWrapper>\n <nxt-input \n [type]=\"'list'\" \n [mode]=\"mode\" \n [from]=\"from\"\n [value]=\"mode === 'edit' ? filterName : viewFilterName\"\n [labelFont]=\"question?.font\" \n [label]=\"question?.questionText ? ((question?.id+'.questionText') | nxtCustomTranslate : question?.questionText): ''\" \n [labelColor]=\"question?.fontColor\"\n [labelSize]=\"question?.fontSize\" \n [inputValueSize]=\"question?.fontSize\" \n [labelWeight]=\"question?.fontWeight\"\n [inputWeight]=\"question?.fontWeight\" \n [showLabel]=\"question?.style?.showLabel\" \n inputBorder=\"none\" \n svgHeight=\"20px\"\n svgWidth=\"20px\" \n [placeholder]=\"placeHolderText\" \n [required]=\"question?.isOptional\" \n inputBgColor=\"#FAFAFA\"\n [inputId]=\"question?.trackingId\" \n [errorMessages]=\"{ required: 'This field is required' }\"\n [inputIconLeftSrc]=\"question?.iconLeftSrc\" \n (inputValue)=\"getSourceDataLocal($event); inputValue($event.value, $event.question)\" \n (onFocus)=\"onInputFocus()\"\n (onBlur)=\"onInputBlur()\"\n [showSuggestion]=\"showSuggestion\" \n ariaOwns=\"selectList\" \n ariaHasPopup=\"listbox\" \n [isLoading]=\"isLoading\" \n [question]=\"question\"\n (removeValueEmit)=\"removeValueEmit()\">\n </nxt-input>\n\n <div id=\"selectList\" class=\"suggestion-wrapper\" role=\"listbox\" *ngIf=\"showSuggestion\">\n <div *ngIf=\"finalResults().length > 0\" class=\"nxt-suggestions-container\">\n <div *ngFor=\"let item of finalResults(); trackBy: trackByFn\" \n (click)=\"clickItem(item)\" \n class=\"suggestion-item\" \n role=\"option\"\n tabindex=\"0\"\n (keydown.enter)=\"clickItem(item)\"\n (keydown.space)=\"clickItem(item)\">\n <div class=\"item-content\">\n <div class=\"item-details\">\n <div *ngIf=\"item.thumbnail\" class=\"thumbnail-wrapper\">\n <img [src]=\"item.thumbnail\" [alt]=\"item.name + ' avatar'\" />\n </div>\n <div class=\"item-text\">\n <!-- Primary text (first key) -->\n <ng-container *ngIf=\"getKeys(getValues(item, SearchItem)).length > 0\">\n <div class=\"item-name primary\" \n [innerHTML]=\"highlightText(getValues(item, SearchItem)[getKeys(getValues(item, SearchItem))[0]], searchKeyWord)\">\n </div>\n </ng-container>\n \n <!-- Secondary text (remaining keys) -->\n <div class=\"item-secondary\" *ngIf=\"getKeys(getValues(item, SearchItem)).length > 1\">\n <ng-container *ngFor=\"let key of getKeys(getValues(item, SearchItem)); let i = index\">\n <ng-container *ngIf=\"i > 0\">\n <span class=\"secondary-text\" \n [innerHTML]=\"highlightText(getValues(item, SearchItem)[key], searchKeyWord)\">\n </span>\n <span class=\"separator\" *ngIf=\"i < getKeys(getValues(item, SearchItem)).length - 1\"> | </span>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"noResult && searchKeyWord\" class=\"no-results\">\n <div class=\"no-results-content\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\">\n <circle cx=\"11\" cy=\"11\" r=\"8\"></circle>\n <path d=\"m21 21-4.35-4.35\"></path>\n </svg>\n <p>{{ 'NO_RESULTS_FOUND' | nxtCustomTranslate : 'No results found for' }} \"{{searchKeyWord}}\"</p>\n </div>\n </div>\n </div>\n</div>", styles: [".search-wrapper{position:relative;width:100%}.suggestion-wrapper{position:absolute;top:100%;left:0;right:0;background:#fff;border:1px solid #e0e0e0;border-top:none;border-radius:0 0 4px 4px;box-shadow:0 2px 8px #0000001a;z-index:10;max-height:300px;overflow:hidden}.nxt-suggestions-container{max-height:300px;overflow-y:auto;min-width:100%}.suggestion-item{cursor:pointer;border-bottom:1px solid #f0f0f0;transition:background-color .2s ease;outline:none}.suggestion-item:hover,.suggestion-item:focus{background-color:#f5f5f5}.suggestion-item:last-child{border-bottom:none}.item-content{padding:5px}.item-details{display:flex;align-items:flex-start;gap:12px;text-align:left}.thumbnail-wrapper{flex-shrink:0}.thumbnail-wrapper img{width:40px;height:40px;border-radius:50%;object-fit:cover;border:1px solid #e0e0e0}.item-text{flex:1;min-width:0}.item-name{font-size:14px;font-weight:500;color:#333;line-height:1.4;margin-bottom:2px;word-wrap:break-word;overflow-wrap:break-word}.item-secondary{font-size:12px;color:#666;line-height:1.3;display:flex}.secondary-text{display:inline}.separator{color:#999;margin:0 3px}.no-results{padding:20px;text-align:center;color:#666}.no-results-content{display:flex;align-items:center;justify-content:center;gap:8px;flex-direction:column}.no-results-content svg{color:#d1d5db;margin-bottom:8px}.no-results-content p{color:#6b7280;margin:0;font-size:14px;font-weight:500}:host ::ng-deep .highlight{font-weight:700;display:inline}.nxt-suggestions-container::-webkit-scrollbar{width:6px}.nxt-suggestions-container::-webkit-scrollbar-track{background:#f1f1f1}.nxt-suggestions-container::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}.nxt-suggestions-container::-webkit-scrollbar-thumb:hover{background:#a8a8a8}@media (max-width: 768px){.suggestion-wrapper,.nxt-suggestions-container{max-height:250px}.item-content{padding:10px 12px}.item-details{gap:8px}.thumbnail-wrapper img{width:32px;height:32px}.item-name{font-size:13px}.item-secondary{font-size:11px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: NxtInput, selector: "nxt-input", inputs: ["label", "labelFont", "labelWeight", "inputWeight", "labelSize", "inputValueSize", "labelColor", "showLabel", "svgHeight", "svgWidth", "type", "inputIconRightSrc", "inputIconLeftSrc", "required", "minLength", "pattern", "errorMessages", "maxLength", "placeholder", "inputBgColor", "inputBorder", "placeholderColor", "placeholderFont", "placeholderWeight", "placeholderSize", "inputTextColor", "inputHeight", "inputWidth", "inputId", "inputBorderSize", "inputConfig", "confPassVal", "confPass", "mode", "value", "question", "showSuggestion", "ariaOwns", "ariaHasPopup", "isLoading", "options", "minDate", "maxDate", "rows", "from", "hyperLink", "size"], outputs: ["valueChange", "inputValue", "onBlur", "onFocus", "toggleEmit", "nativeInputRef", "removeValueEmit", "hyperlinkEmit"] }, { kind: "pipe", type: NxtCustomTranslatePipe, name: "nxtCustomTranslate" }] });
435
438
  }
436
439
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtSearchBox, decorators: [{
437
440
  type: Component,
438
441
  args: [{ selector: 'nxt-search-box', standalone: true, imports: [
439
442
  CommonModule,
440
443
  FormsModule,
441
- NxtInput
442
- ], template: "<!-- VD 12Jun24 - readonly change -->\n<div class=\"search-wrapper\" #searchWrapper>\n <nxt-input \n [type]=\"'list'\" \n [mode]=\"mode\" \n [from]=\"from\"\n [value]=\"mode === 'edit' ? filterName : viewFilterName\"\n [labelFont]=\"question.font\" \n [label]=\"question?.questionText\" \n [labelColor]=\"question.fontColor\"\n [labelSize]=\"question.fontSize\" \n [inputValueSize]=\"question.fontSize\" \n [labelWeight]=\"question.fontWeight\"\n [inputWeight]=\"question.fontWeight\" \n [showLabel]=\"question.style?.showLabel\" \n inputBorder=\"none\" \n svgHeight=\"20px\"\n svgWidth=\"20px\" \n [placeholder]=\"placeHolderText\" \n [required]=\"question.isOptional\" \n inputBgColor=\"#FAFAFA\"\n [inputId]=\"question.trackingId\" \n [errorMessages]=\"{ required: 'This field is required' }\"\n [inputIconLeftSrc]=\"question.iconLeftSrc\" \n (inputValue)=\"getSourceDataLocal($event); inputValue($event.value, $event.question)\" \n (onFocus)=\"onInputFocus()\"\n (onBlur)=\"onInputBlur()\"\n [showSuggestion]=\"showSuggestion\" \n ariaOwns=\"selectList\" \n ariaHasPopup=\"listbox\" \n [isLoading]=\"isLoading\" \n [question]=\"question\"\n (removeValueEmit)=\"removeValueEmit()\">\n </nxt-input>\n\n <div id=\"selectList\" class=\"suggestion-wrapper\" role=\"listbox\" *ngIf=\"showSuggestion\">\n <div *ngIf=\"finalResults().length > 0\" class=\"nxt-suggestions-container\">\n <div *ngFor=\"let item of finalResults(); trackBy: trackByFn\" \n (click)=\"clickItem(item)\" \n class=\"suggestion-item\" \n role=\"option\"\n tabindex=\"0\"\n (keydown.enter)=\"clickItem(item)\"\n (keydown.space)=\"clickItem(item)\">\n <div class=\"item-content\">\n <div class=\"item-details\">\n <div *ngIf=\"item.thumbnail\" class=\"thumbnail-wrapper\">\n <img [src]=\"item.thumbnail\" [alt]=\"item.name + ' avatar'\" />\n </div>\n <div class=\"item-text\">\n <!-- Primary text (first key) -->\n <ng-container *ngIf=\"getKeys(getValues(item, SearchItem)).length > 0\">\n <div class=\"item-name primary\" \n [innerHTML]=\"highlightText(getValues(item, SearchItem)[getKeys(getValues(item, SearchItem))[0]], searchKeyWord)\">\n </div>\n </ng-container>\n \n <!-- Secondary text (remaining keys) -->\n <div class=\"item-secondary\" *ngIf=\"getKeys(getValues(item, SearchItem)).length > 1\">\n <ng-container *ngFor=\"let key of getKeys(getValues(item, SearchItem)); let i = index\">\n <ng-container *ngIf=\"i > 0\">\n <span class=\"secondary-text\" \n [innerHTML]=\"highlightText(getValues(item, SearchItem)[key], searchKeyWord)\">\n </span>\n <span class=\"separator\" *ngIf=\"i < getKeys(getValues(item, SearchItem)).length - 1\"> | </span>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"noResult && searchKeyWord\" class=\"no-results\">\n <div class=\"no-results-content\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\">\n <circle cx=\"11\" cy=\"11\" r=\"8\"></circle>\n <path d=\"m21 21-4.35-4.35\"></path>\n </svg>\n <p>No results found for \"{{searchKeyWord}}\"</p>\n </div>\n </div>\n </div>\n</div>", styles: [".search-wrapper{position:relative;width:100%}.suggestion-wrapper{position:absolute;top:100%;left:0;right:0;background:#fff;border:1px solid #e0e0e0;border-top:none;border-radius:0 0 4px 4px;box-shadow:0 2px 8px #0000001a;z-index:10;max-height:300px;overflow:hidden}.nxt-suggestions-container{max-height:300px;overflow-y:auto;min-width:100%}.suggestion-item{cursor:pointer;border-bottom:1px solid #f0f0f0;transition:background-color .2s ease;outline:none}.suggestion-item:hover,.suggestion-item:focus{background-color:#f5f5f5}.suggestion-item:last-child{border-bottom:none}.item-content{padding:5px}.item-details{display:flex;align-items:flex-start;gap:12px;text-align:left}.thumbnail-wrapper{flex-shrink:0}.thumbnail-wrapper img{width:40px;height:40px;border-radius:50%;object-fit:cover;border:1px solid #e0e0e0}.item-text{flex:1;min-width:0}.item-name{font-size:14px;font-weight:500;color:#333;line-height:1.4;margin-bottom:2px;word-wrap:break-word;overflow-wrap:break-word}.item-secondary{font-size:12px;color:#666;line-height:1.3;display:flex}.secondary-text{display:inline}.separator{color:#999;margin:0 3px}.no-results{padding:20px;text-align:center;color:#666}.no-results-content{display:flex;align-items:center;justify-content:center;gap:8px;flex-direction:column}.no-results-content svg{color:#d1d5db;margin-bottom:8px}.no-results-content p{color:#6b7280;margin:0;font-size:14px;font-weight:500}:host ::ng-deep .highlight{font-weight:700;display:inline}.nxt-suggestions-container::-webkit-scrollbar{width:6px}.nxt-suggestions-container::-webkit-scrollbar-track{background:#f1f1f1}.nxt-suggestions-container::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}.nxt-suggestions-container::-webkit-scrollbar-thumb:hover{background:#a8a8a8}@media (max-width: 768px){.suggestion-wrapper,.nxt-suggestions-container{max-height:250px}.item-content{padding:10px 12px}.item-details{gap:8px}.thumbnail-wrapper img{width:32px;height:32px}.item-name{font-size:13px}.item-secondary{font-size:11px}}\n"] }]
444
+ NxtInput,
445
+ NxtCustomTranslatePipe
446
+ ], template: "<!-- VD 12Jun24 - readonly change -->\n<div class=\"search-wrapper\" #searchWrapper>\n <nxt-input \n [type]=\"'list'\" \n [mode]=\"mode\" \n [from]=\"from\"\n [value]=\"mode === 'edit' ? filterName : viewFilterName\"\n [labelFont]=\"question?.font\" \n [label]=\"question?.questionText ? ((question?.id+'.questionText') | nxtCustomTranslate : question?.questionText): ''\" \n [labelColor]=\"question?.fontColor\"\n [labelSize]=\"question?.fontSize\" \n [inputValueSize]=\"question?.fontSize\" \n [labelWeight]=\"question?.fontWeight\"\n [inputWeight]=\"question?.fontWeight\" \n [showLabel]=\"question?.style?.showLabel\" \n inputBorder=\"none\" \n svgHeight=\"20px\"\n svgWidth=\"20px\" \n [placeholder]=\"placeHolderText\" \n [required]=\"question?.isOptional\" \n inputBgColor=\"#FAFAFA\"\n [inputId]=\"question?.trackingId\" \n [errorMessages]=\"{ required: 'This field is required' }\"\n [inputIconLeftSrc]=\"question?.iconLeftSrc\" \n (inputValue)=\"getSourceDataLocal($event); inputValue($event.value, $event.question)\" \n (onFocus)=\"onInputFocus()\"\n (onBlur)=\"onInputBlur()\"\n [showSuggestion]=\"showSuggestion\" \n ariaOwns=\"selectList\" \n ariaHasPopup=\"listbox\" \n [isLoading]=\"isLoading\" \n [question]=\"question\"\n (removeValueEmit)=\"removeValueEmit()\">\n </nxt-input>\n\n <div id=\"selectList\" class=\"suggestion-wrapper\" role=\"listbox\" *ngIf=\"showSuggestion\">\n <div *ngIf=\"finalResults().length > 0\" class=\"nxt-suggestions-container\">\n <div *ngFor=\"let item of finalResults(); trackBy: trackByFn\" \n (click)=\"clickItem(item)\" \n class=\"suggestion-item\" \n role=\"option\"\n tabindex=\"0\"\n (keydown.enter)=\"clickItem(item)\"\n (keydown.space)=\"clickItem(item)\">\n <div class=\"item-content\">\n <div class=\"item-details\">\n <div *ngIf=\"item.thumbnail\" class=\"thumbnail-wrapper\">\n <img [src]=\"item.thumbnail\" [alt]=\"item.name + ' avatar'\" />\n </div>\n <div class=\"item-text\">\n <!-- Primary text (first key) -->\n <ng-container *ngIf=\"getKeys(getValues(item, SearchItem)).length > 0\">\n <div class=\"item-name primary\" \n [innerHTML]=\"highlightText(getValues(item, SearchItem)[getKeys(getValues(item, SearchItem))[0]], searchKeyWord)\">\n </div>\n </ng-container>\n \n <!-- Secondary text (remaining keys) -->\n <div class=\"item-secondary\" *ngIf=\"getKeys(getValues(item, SearchItem)).length > 1\">\n <ng-container *ngFor=\"let key of getKeys(getValues(item, SearchItem)); let i = index\">\n <ng-container *ngIf=\"i > 0\">\n <span class=\"secondary-text\" \n [innerHTML]=\"highlightText(getValues(item, SearchItem)[key], searchKeyWord)\">\n </span>\n <span class=\"separator\" *ngIf=\"i < getKeys(getValues(item, SearchItem)).length - 1\"> | </span>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"noResult && searchKeyWord\" class=\"no-results\">\n <div class=\"no-results-content\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\">\n <circle cx=\"11\" cy=\"11\" r=\"8\"></circle>\n <path d=\"m21 21-4.35-4.35\"></path>\n </svg>\n <p>{{ 'NO_RESULTS_FOUND' | nxtCustomTranslate : 'No results found for' }} \"{{searchKeyWord}}\"</p>\n </div>\n </div>\n </div>\n</div>", styles: [".search-wrapper{position:relative;width:100%}.suggestion-wrapper{position:absolute;top:100%;left:0;right:0;background:#fff;border:1px solid #e0e0e0;border-top:none;border-radius:0 0 4px 4px;box-shadow:0 2px 8px #0000001a;z-index:10;max-height:300px;overflow:hidden}.nxt-suggestions-container{max-height:300px;overflow-y:auto;min-width:100%}.suggestion-item{cursor:pointer;border-bottom:1px solid #f0f0f0;transition:background-color .2s ease;outline:none}.suggestion-item:hover,.suggestion-item:focus{background-color:#f5f5f5}.suggestion-item:last-child{border-bottom:none}.item-content{padding:5px}.item-details{display:flex;align-items:flex-start;gap:12px;text-align:left}.thumbnail-wrapper{flex-shrink:0}.thumbnail-wrapper img{width:40px;height:40px;border-radius:50%;object-fit:cover;border:1px solid #e0e0e0}.item-text{flex:1;min-width:0}.item-name{font-size:14px;font-weight:500;color:#333;line-height:1.4;margin-bottom:2px;word-wrap:break-word;overflow-wrap:break-word}.item-secondary{font-size:12px;color:#666;line-height:1.3;display:flex}.secondary-text{display:inline}.separator{color:#999;margin:0 3px}.no-results{padding:20px;text-align:center;color:#666}.no-results-content{display:flex;align-items:center;justify-content:center;gap:8px;flex-direction:column}.no-results-content svg{color:#d1d5db;margin-bottom:8px}.no-results-content p{color:#6b7280;margin:0;font-size:14px;font-weight:500}:host ::ng-deep .highlight{font-weight:700;display:inline}.nxt-suggestions-container::-webkit-scrollbar{width:6px}.nxt-suggestions-container::-webkit-scrollbar-track{background:#f1f1f1}.nxt-suggestions-container::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}.nxt-suggestions-container::-webkit-scrollbar-thumb:hover{background:#a8a8a8}@media (max-width: 768px){.suggestion-wrapper,.nxt-suggestions-container{max-height:250px}.item-content{padding:10px 12px}.item-details{gap:8px}.thumbnail-wrapper img{width:32px;height:32px}.item-name{font-size:13px}.item-secondary{font-size:11px}}\n"] }]
443
447
  }], ctorParameters: () => [{ type: i1.StorageService }, { type: i2.ChangeService }, { type: i3.DataService }, { type: i4.I18nService }, { type: i5.CountryService }, { type: i0.ElementRef }], propDecorators: { placeHolderText: [{
444
448
  type: Input
445
449
  }], question: [{
@@ -466,4 +470,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
466
470
  type: HostListener,
467
471
  args: ['document:keydown.escape', ['$event']]
468
472
  }] } });
469
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvY29tcG9uZW50cy9zZWFyY2gtYm94L3NlYXJjaC1ib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvc2VhcmNoLWJveC9zZWFyY2gtYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWdDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBNkIsTUFBTSxFQUFtQyxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFak0sT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRTVELE9BQU8sRUFBRSxPQUFPLEVBQWdCLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7O0FBZTVGLE1BQU0sT0FBTyxZQUFZO0lBb0NIO0lBQXVDO0lBQXFDO0lBQWlDO0lBQWtDO0lBQXdDO0lBbkNsTSxlQUFlLEdBQVcsRUFBRSxDQUFDO0lBQzdCLFFBQVEsQ0FBTTtJQUNkLE9BQU8sQ0FBTTtJQUNiLEVBQUUsR0FBVyxFQUFFLENBQUM7SUFDaEIsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixJQUFJLEdBQThCLE1BQU0sQ0FBQztJQUN6QyxJQUFJLENBQU07SUFFVCxpQkFBaUIsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUMzQixhQUFhLENBQWM7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QUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUksaUJBQWlCO3NCQUExQixNQUFNO2dCQUN1QyxhQUFhO3NCQUExRCxTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBaUc1QyxlQUFlO3NCQURkLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBUzFDLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyx5QkFBeUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIFNpbXBsZUNoYW5nZXMsIHNpZ25hbCwgV3JpdGFibGVTaWduYWwsIFRyYWNrQnlGdW5jdGlvbiwgSG9zdExpc3RlbmVyfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhbmdlV3JhcHBlciB9IGZyb20gXCIuLi8uLi9tb2RlbC9jaGFuZ2VXcmFwcGVyXCI7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gXCIuLi8uLi9pMThuLnNlcnZpY2VcIjtcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBOeHRJbnB1dCB9IGZyb20gXCIuLi9ueHQtaW5wdXQvbnh0LWlucHV0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQ291bnRyeVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvY291bnRyeS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBDaGFuZ2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2NoYW5nZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2VcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbnh0LXNlYXJjaC1ib3gnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE54dElucHV0XG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWFyY2gtYm94LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2VhcmNoLWJveC5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTnh0U2VhcmNoQm94IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHBsYWNlSG9sZGVyVGV4dDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHF1ZXN0aW9uOiBhbnk7XG4gIEBJbnB1dCgpIGFwaU1ldGE6IGFueTtcbiAgQElucHV0KCkgaWQ6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSByZWFkT25seSA9IGZhbHNlO1xuICBASW5wdXQoKSBtb2RlOiAndmlldycgfCAnZWRpdCcgfCAncHJpbnQnID0gJ2VkaXQnO1xuICBASW5wdXQoKSBmcm9tOiBhbnk7XG4gIFxuICBAT3V0cHV0KCkgc2VhcmNoVmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaFdyYXBwZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBzZWFyY2hXcmFwcGVyITogRWxlbWVudFJlZjtcblxuICBTZWFyY2hJdGVtOiBhbnk7XG4gIHB1YmxpYyBmaW5hbFJlc3VsdHM6IFdyaXRhYmxlU2lnbmFsPGFueVtdPiA9IHNpZ25hbChbXSk7XG4gIHB1YmxpYyBzZWFyY2hLZXlXb3JkOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIG5ld1Jlc3VsdDogYW55O1xuICBwdWJsaWMgc2hvd1Jlc3VsdCA9IGZhbHNlO1xuICBwdWJsaWMgbm9SZXN1bHQgPSBmYWxzZTtcbiAgcHVibGljIHNob3dTdWdnZXN0aW9uID0gZmFsc2U7XG4gIHB1YmxpYyBpc0xvYWRpbmcgPSBmYWxzZTtcbiAgcHVibGljIHZpZXdGaWx0ZXJOYW1lOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIGlzU2luZ2xlRmllbGRDaGFuZ2UgPSBmYWxzZTtcbiAgcHVibGljIHZhbHVlT2JqOiBhbnk7XG4gIHB1YmxpYyBpbnB1dEZvY3VzZWQgPSBmYWxzZTtcbiAgcHVibGljIGxhc3RTZWFyY2hMZW5ndGggPSAwO1xuICBwdWJsaWMgZmlsdGVyTmFtZSA9JydcblxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBzZWFyY2hTdWJqZWN0ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAvLyBUcmFja0J5IGZ1bmN0aW9uIGZvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25cbiAgdHJhY2tCeUZuOiBUcmFja0J5RnVuY3Rpb248YW55PiA9IChpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpID0+IHtcbiAgICByZXR1cm4gaXRlbS5pZCB8fCBpdGVtLm5hbWUgfHwgaW5kZXg7XG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2UscHJpdmF0ZSBjaGFuZ2VTZXJ2aWNlOiBDaGFuZ2VTZXJ2aWNlLHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLCBwdWJsaWMgaTE4blNlcnZpY2U6IEkxOG5TZXJ2aWNlLCBwcml2YXRlIGNvdW50cnlTZXJ2aWNlOiBDb3VudHJ5U2VydmljZSwgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XG4gICAgaWYodGhpcy5xdWVzdGlvbj8uaW5wdXQgJiYgdHlwZW9mIHRoaXMucXVlc3Rpb24/LmlucHV0ID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh0aGlzLnF1ZXN0aW9uPy5pbnB1dCkpe1xuICAgICAgdGhpcy5jbGlja0l0ZW0odGhpcy5xdWVzdGlvbj8uaW5wdXQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyTmFtZSA9IHRoaXMucXVlc3Rpb24/LmlucHV0XG4gICAgfSAgICBcbiAgICAvLyBTZXR1cCBkZWJvdW5jZWQgc2VhcmNoXG4gICAgdGhpcy5zZWFyY2hTdWJqZWN0XG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKDMwMCksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShrZXl3b3JkID0+IHtcbiAgICAgICAgaWYodGhpcy5sYXN0U2VhcmNoTGVuZ3RoID4gMikgdGhpcy5wZXJmb3JtU2VhcmNoKGtleXdvcmQpO1xuICAgICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZih0aGlzLnF1ZXN0aW9uPy5pbnB1dCAmJiB0eXBlb2YgdGhpcy5xdWVzdGlvbj8uaW5wdXQgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHRoaXMucXVlc3Rpb24/LmlucHV0KSl7XG4gICAgICB0aGlzLmNsaWNrSXRlbSh0aGlzLnF1ZXN0aW9uPy5pbnB1dClcbiAgICB9IGVsc2UgaWYoQXJyYXkuaXNBcnJheSh0aGlzLnF1ZXN0aW9uPy5pbnB1dCkpe1xuICAgICAgdGhpcy5maWx0ZXJOYW1lID0gJydcbiAgICAgIHRoaXMudmlld0ZpbHRlck5hbWUgPSAnJ1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlck5hbWUgPSB0aGlzLnF1ZXN0aW9uPy5pbnB1dFxuICAgICAgdGhpcy52aWV3RmlsdGVyTmFtZSA9IHRoaXMucXVlc3Rpb24/LmlucHV0XG4gICAgfVxuICAgIHRoaXMucGFyc2VBcGlNZXRhKCk7XG4gICAgaWYodGhpcy5xdWVzdGlvbj8uc3ViVGV4dCAhPSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCBkZXBlbmRlbmN5T2JqOiBhbnkgPSB0aGlzLnF1ZXN0aW9uPy5zdWJUZXh0O1xuICAgICAgLy8gU3Vic2NyaWJlIGZvciB0aGUgY2hhbmdlc1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoYW5nZVNlcnZpY2UuY2hhbmdlQW5ub3VuY2VkJC5zdWJzY3JpYmUoXG4gICAgICAgIChjaGFuZ2VWYWx1ZSkgPT4ge1xuICAgICAgICAgIGlmKGNoYW5nZVZhbHVlICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYoY2hhbmdlVmFsdWUuZnJvbVF1ZXN0aW9uSWQgJiYgY2hhbmdlVmFsdWUudmFsdWVPYmogIT09IHVuZGVmaW5lZCAmJiAoIEFycmF5LmlzQXJyYXkoZGVwZW5kZW5jeU9iai5zb3VyY2VRdWVzdGlvbklkKT8gZGVwZW5kZW5jeU9iai5zb3VyY2VRdWVzdGlvbklkLmluY2x1ZGVzKGNoYW5nZVZhbHVlLmZyb21RdWVzdGlvbklkKSA6IGNoYW5nZVZhbHVlLmZyb21RdWVzdGlvbklkID09PSBkZXBlbmRlbmN5T2JqLnNvdXJjZVF1ZXN0aW9uSWQpKSB7XG4gICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkoZGVwZW5kZW5jeU9iai5xdWVyeVZhbHVlKT8gZGVwZW5kZW5jeU9iai5xdWVyeVZhbHVlLmluY2x1ZGVzKGNoYW5nZVZhbHVlLnJlZmVyZW5jZUZpZWxkKSA6IGNoYW5nZVZhbHVlLnJlZmVyZW5jZUZpZWxkID09PSBkZXBlbmRlbmN5T2JqLnF1ZXJ5VmFsdWUpe1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UucXVlcnlWYWx1ZVN0b3JlKHRoaXMucXVlc3Rpb24uaWQsY2hhbmdlVmFsdWUucmVmZXJlbmNlRmllbGQsY2hhbmdlVmFsdWUudmFsdWVPYmopXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2hhbmdlU2VydmljZS5jb25maXJtQ2hhbmdlKGNoYW5nZVZhbHVlLmZyb21RdWVzdGlvbklkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmKGNoYW5nZXNbJ3F1ZXN0aW9uJ10pe1xuICAgICAgLy8gaWYodGhpcy5xdWVzdGlvbj8uaW5wdXQgJiYgdHlwZW9mIHRoaXMucXVlc3Rpb24/LmlucHV0ID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh0aGlzLnF1ZXN0aW9uPy5pbnB1dCkpe1xuICAgICAgLy8gICB0aGlzLmNsaWNrSXRlbSh0aGlzLnF1ZXN0aW9uPy5pbnB1dClcbiAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAvLyAgIHRoaXMuZmlsdGVyTmFtZSA9IHRoaXMucXVlc3Rpb24/LmlucHV0XG4gICAgICAvLyB9XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydtb2RlJ10pIHtcbiAgICAgIHRoaXMubW9kZSA9IGNoYW5nZXNbJ21vZGUnXS5jdXJyZW50VmFsdWU7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydhcGlNZXRhJ10gJiYgdGhpcy5hcGlNZXRhKSB7XG4gICAgICB0aGlzLnBhcnNlQXBpTWV0YSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB0aGlzLnJlc2V0Q29tcG9uZW50U3RhdGUoKTtcbiAgfVxuXG4gIC8vIEhhbmRsZSBjbGlja3Mgb3V0c2lkZSB0aGUgc2VhcmNoIGNvbXBvbmVudFxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXG4gIG9uRG9jdW1lbnRDbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSkge1xuICAgICAgdGhpcy5oaWRlU3VnZ2VzdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICAvLyBIYW5kbGUgZXNjYXBlIGtleSB0byBjbG9zZSBzdWdnZXN0aW9uc1xuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScsIFsnJGV2ZW50J10pXG4gIG9uRXNjYXBlS2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5oaWRlU3VnZ2VzdGlvbnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VBcGlNZXRhKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFwaU1ldGEpIHtcbiAgICAgIHRoaXMuYXBpTWV0YSA9IHR5cGVvZiB0aGlzLmFwaU1ldGEgPT09ICdvYmplY3QnID8gdGhpcy5hcGlNZXRhIDogSlNPTi5wYXJzZSh0aGlzLmFwaU1ldGEgfHwgJ3t9Jyk7XG4gICAgICB0aGlzLlNlYXJjaEl0ZW0gPSB0aGlzLmFwaU1ldGEuZmllbGQgfHwgW107XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNldENvbXBvbmVudFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuZmluYWxSZXN1bHRzLnNldChbXSk7XG4gICAgdGhpcy5zZWFyY2hLZXlXb3JkID0gJyc7XG4gICAgdGhpcy5zaG93U3VnZ2VzdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMubm9SZXN1bHQgPSBmYWxzZTtcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuaW5wdXRGb2N1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5sYXN0U2VhcmNoTGVuZ3RoID0gMDtcbiAgfVxuXG4gIHByaXZhdGUgaGlkZVN1Z2dlc3Rpb25zKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd1N1Z2dlc3Rpb24gPSBmYWxzZTtcbiAgICB0aGlzLmlucHV0Rm9jdXNlZCA9IGZhbHNlO1xuICB9XG5cbiAgb25JbnB1dEZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuaW5wdXRGb2N1c2VkID0gdHJ1ZTtcbiAgICAvLyBUcmlnZ2VyIGEgc2VhcmNoIHdpdGggYW4gZW1wdHkga2V5d29yZCB0byBzaG93IGFsbCBkYXRhXG4gICAgaWYgKCF0aGlzLnNlYXJjaEtleVdvcmQpIHtcbiAgICAgIC8vIHRoaXMucGVyZm9ybVNlYXJjaCgnJyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmZpbmFsUmVzdWx0cygpLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc2hvd1N1Z2dlc3Rpb24gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIG9uSW5wdXRCbHVyKCk6IHZvaWQge1xuICAgIC8vIERvbid0IGltbWVkaWF0ZWx5IGhpZGUgc3VnZ2VzdGlvbnMgdG8gYWxsb3cgZm9yIGNsaWNraW5nXG4gICAgLy8gVGhlIGRvY3VtZW50IGNsaWNrIGhhbmRsZXIgd2lsbCBoYW5kbGUgaGlkaW5nXG4gIH1cblxuICBjbGVhckxpc3QoKTogdm9pZCB7XG4gICAgLy8gUmVtb3ZlIHRoZSBzZXRUaW1lb3V0IGRlbGF5IHRoYXQgd2FzIGNhdXNpbmcgaXNzdWVzXG4gICAgdGhpcy5oaWRlU3VnZ2VzdGlvbnMoKTtcbiAgfVxuXG4gIGdldFNvdXJjZURhdGFMb2NhbChldmVudDogYW55KTogdm9pZCB7XG4gICAgaWYgKCFldmVudD8udmFsdWU/LnZhbHVlT2JqKSB7XG4gICAgICB0aGlzLnJlc2V0Q29tcG9uZW50U3RhdGUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzZWFyY2hWYWx1ZSA9ICBldmVudC52YWx1ZT8udmFsdWVPYmo/LmluY2x1ZGVzKCd8JykgPyBldmVudC52YWx1ZT8udmFsdWVPYmo/LnNwbGl0KCd8JylbMF0udHJpbSgpIDogZXZlbnQudmFsdWU/LnZhbHVlT2JqPy50cmltKCk7XG4gICAgY29uc3QgY3VycmVudExlbmd0aCA9IHNlYXJjaFZhbHVlLmxlbmd0aDtcbiAgICBcbiAgICAvLyBBbHdheXMgdXBkYXRlIHRoZSBzZWFyY2gga2V5d29yZFxuICAgIHRoaXMuc2VhcmNoS2V5V29yZCA9IHNlYXJjaFZhbHVlO1xuICAgIFxuICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB1c2VyIHR5cGVzIDMrIGNoYXJhY3RlcnNcbiAgICBpZiAoY3VycmVudExlbmd0aCA+IDIgJiYgIXRoaXMuaXNTaW5nbGVGaWVsZENoYW5nZSkge1xuICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbiA9ICFldmVudC5xdWVzdGlvbj8uc2luZ2xlRmllbGRDaGFuZ2U7XG4gICAgICB0aGlzLnNob3dSZXN1bHQgPSBmYWxzZTtcbiAgICAgIHRoaXMubm9SZXN1bHQgPSBmYWxzZTtcbiAgICAgIC8vIEFsd2F5cyBwZXJmb3JtIHNlYXJjaCB3aGVuIHdlIGhhdmUgMysgY2hhcmFjdGVyc1xuICAgICAgdGhpcy5sYXN0U2VhcmNoTGVuZ3RoID0gY3VycmVudExlbmd0aDtcbiAgICAgIHRoaXMuc2VhcmNoU3ViamVjdC5uZXh0KHNlYXJjaFZhbHVlKTtcbiAgICAgIFxuICAgIH0gZWxzZSBpZiAoY3VycmVudExlbmd0aCA8PSAyKSB7XG4gICAgICAvLyBXaGVuIGxlbmd0aCBpcyAyIG9yIGxlc3MsIGhpZGUgc3VnZ2VzdGlvbnMgYnV0IGtlZXAgdGhlIHNlYXJjaCBrZXl3b3JkXG4gICAgICB0aGlzLmlzU2luZ2xlRmllbGRDaGFuZ2UgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2hvd1N1Z2dlc3Rpb24gPSBmYWxzZTtcbiAgICAgIHRoaXMubm9SZXN1bHQgPSBmYWxzZTtcbiAgICAgIHRoaXMubGFzdFNlYXJjaExlbmd0aCA9IGN1cnJlbnRMZW5ndGg7XG4gICAgICB0aGlzLnNlYXJjaFN1YmplY3QubmV4dChzZWFyY2hWYWx1ZSk7XG4gICAgICB0aGlzLmZpbmFsUmVzdWx0cy5zZXQoW10pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcGVyZm9ybVNlYXJjaChrZXl3b3JkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYXBpTWV0YSkgcmV0dXJuO1xuXG4gICAgdGhpcy5wYXJzZUFwaU1ldGEoKTtcbiAgICBcbiAgICBpZiAoIXRoaXMuYXBpTWV0YS5pc1N0YXRpY0RhdGEpIHtcbiAgICAgIHRoaXMuc2VhcmNoRnJvbUFwaShrZXl3b3JkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWFyY2hGcm9tU3RhdGljRGF0YShrZXl3b3JkKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNlYXJjaEZyb21BcGkoa2V5d29yZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuZmluYWxSZXN1bHRzLnNldChbXSk7XG4gICAgaWYoIXRoaXMuYXBpTWV0YS5lbmRwb2ludCAmJiBBcnJheS5pc0FycmF5KHRoaXMucXVlc3Rpb24/LmlucHV0KSApe1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMucHJvY2Vzc1NlYXJjaFJlc3VsdHModGhpcy5xdWVzdGlvbj8uaW5wdXQsIGtleXdvcmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgZmluYWxHZXRDYWxsID0gdGhpcy5hcGlNZXRhLmVuZHBvaW50O1xuICAgICAgLy8gU0tTMThKVUwyNSBxdWVyeSBwYXJhbXMgY3JlYXRpb25cbiAgICAgIGlmKHRoaXMuYXBpTWV0YT8ucXVlcnlQYXJhbWV0ZXIpe1xuICAgICAgICBjb25zdCBpc0ZpZWxkQXJyYXkgPSBBcnJheS5pc0FycmF5KHRoaXMuYXBpTWV0YT8ucXVlcnlQYXJhbWV0ZXIpO1xuICAgICAgICBjb25zdCBmaWVsZHMgPSBpc0ZpZWxkQXJyYXkgPyB0aGlzLmFwaU1ldGEucXVlcnlQYXJhbWV0ZXIgOiBbdGhpcy5hcGlNZXRhLnF1ZXJ5UGFyYW1ldGVyXTsgLy8gYWx3YXlzIGFuIGFycmF5IG5vd1xuICAgICAgICAvLyBCdWlsZCBxdWVyeSBwYXJhbXMgc3RyaW5nXG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gZmllbGRzXG4gICAgICAgICAgLm1hcChmaWVsZCA9PiBgJHtmaWVsZH09JHt0aGlzLnNlYXJjaEtleVdvcmR9YClcbiAgICAgICAgICAuam9pbignJicpO1xuICAgICAgICAvLyBDaGVjayBpZiBlbmRwb2ludCBhbHJlYWR5IGhhcyBxdWVyeSBwYXJhbXNcbiAgICAgICAgaWYocXVlcnlQYXJhbXMgJiYgcXVlcnlQYXJhbXMgIT09ICcnKXtcbiAgICAgICAgICBpZiAodGhpcy5hcGlNZXRhLmVuZHBvaW50LmluY2x1ZGVzKCc/JykpIHtcbiAgICAgICAgICAgIGZpbmFsR2V0Q2FsbCArPSBgJiR7cXVlcnlQYXJhbXN9YDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmluYWxHZXRDYWxsICs9IGA/JHtxdWVyeVBhcmFtc31gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYXBpTWV0YT8ucXVlcnlGaWVsZCAmJiB0aGlzLmFwaU1ldGE/LnF1ZXJ5VmFsdWUpIHtcbiAgICAgICAgY29uc3QgcXVlcnlGaWVsZHMgPSBBcnJheS5pc0FycmF5KHRoaXMuYXBpTWV0YS5xdWVyeUZpZWxkKVxuICAgICAgICAgID8gdGhpcy5hcGlNZXRhLnF1ZXJ5RmllbGRcbiAgICAgICAgICA6IFt0aGlzLmFwaU1ldGEucXVlcnlGaWVsZF07XG4gICAgICBcbiAgICAgICAgY29uc3QgcXVlcnlWYWx1ZXMgPSBBcnJheS5pc0FycmF5KHRoaXMuYXBpTWV0YS5xdWVyeVZhbHVlKVxuICAgICAgICAgID8gdGhpcy5hcGlNZXRhLnF1ZXJ5VmFsdWVcbiAgICAgICAgICA6IFt0aGlzLmFwaU1ldGEucXVlcnlWYWx1ZV07XG4gICAgICBcbiAgICAgICAgY29uc3Qgc3RvcmVkID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXRRdWVyeVZhbHVlKHRoaXMucXVlc3Rpb24uaWQpOyAvLyBzaW5nbGUgb2JqZWN0XG4gICAgICBcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXNBcnJheTogc3RyaW5nW10gPSBbXTtcbiAgICAgIFxuICAgICAgICBxdWVyeUZpZWxkcy5mb3JFYWNoKChmaWVsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZUtleSA9IHF1ZXJ5VmFsdWVzW2luZGV4XSA/PyBxdWVyeVZhbHVlc1swXTtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHN0b3JlZFt2YWx1ZUtleV07XG4gICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zQXJyYXkucHVzaChgJHtmaWVsZH09JHtlbmNvZGVVUklDb21wb25lbnQodmFsdWUpfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICBcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBxdWVyeVBhcmFtc0FycmF5LmpvaW4oJyYnKTtcbiAgICAgIFxuICAgICAgICBpZiAocXVlcnlQYXJhbXMpIHtcbiAgICAgICAgICBmaW5hbEdldENhbGwgKz0gdGhpcy5hcGlNZXRhLmVuZHBvaW50LmluY2x1ZGVzKCc/JykgPyBgJiR7cXVlcnlQYXJhbXN9YCA6IGA/JHtxdWVyeVBhcmFtc31gO1xuICAgICAgICB9XG4gICAgICB9ICAgICAgXG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLmFwaVJlc3BvbnNlKGZpbmFsR2V0Q2FsbClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoYXBpUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1NlYXJjaFJlc3VsdHMoYXBpUmVzcG9uc2UsIGtleXdvcmQpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLm5vUmVzdWx0ID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmZpbmFsUmVzdWx0cy5zZXQoW10pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNlYXJjaEZyb21TdGF0aWNEYXRhKGtleXdvcmQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gdGhpcy5jb3VudHJ5U2VydmljZS5nZXRDb3VudHJ5RGF0YSh0aGlzLmFwaU1ldGEuZmllbGQpO1xuICAgIHRoaXMucHJvY2Vzc1NlYXJjaFJlc3VsdHMocmVzcG9uc2UsIGtleXdvcmQpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzU2VhcmNoUmVzdWx0cyhhcGlSZXNwb25zZTogYW55LCBrZXl3b3JkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBsZXQgcmVzcG9uc2U7XG4gIFxuICAgIGlmICh0aGlzLmFwaU1ldGEudmFyaWFibGUpIHtcbiAgICAgIHJlc3BvbnNlID0gdGhpcy5kYXRhU2VydmljZS5nZXRWYWx1ZShhcGlSZXNwb25zZSwgdGhpcy5hcGlNZXRhLnZhcmlhYmxlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzcG9uc2UgPSBhcGlSZXNwb25zZTtcbiAgICB9XG4gIFxuICAgIGlmICghQXJyYXkuaXNBcnJheShyZXNwb25zZSkpIHtcbiAgICAgIHRoaXMubm9SZXN1bHQgPSB0cnVlO1xuICAgICAgdGhpcy5maW5hbFJlc3VsdHMuc2V0KFtdKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIFxuICAgIGlmICgha2V5d29yZCkge1xuICAgICAgLy8gSWYgbm8ga2V5d29yZCwgc2hvdyBhbGwgcmVzdWx0c1xuICAgICAgdGhpcy5maW5hbFJlc3VsdHMuc2V0KHJlc3BvbnNlKTtcbiAgICAgIHRoaXMubm9SZXN1bHQgPSByZXNwb25zZS5sZW5ndGggPT09IDA7XG4gICAgICB0aGlzLnNob3dTdWdnZXN0aW9uID0gdHJ1ZTsgLy8gRW5zdXJlIHN1Z2dlc3Rpb25zIGFyZSB2aXNpYmxlXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZpbHRlciByZXN1bHRzIGJhc2VkIG9uIHRoZSBrZXl3b3JkXG4gICAgICBjb25zdCBzZWFyY2hUZXJtcyA9IGtleXdvcmQudG9Mb3dlckNhc2UoKS5zcGxpdChcIiBcIikuZmlsdGVyKHRlcm0gPT4gdGVybS5sZW5ndGggPiAwKTtcbiAgICAgIGNvbnN0IHJlc3VsdHMgPSByZXNwb25zZS5maWx0ZXIob2JqID0+IHtcbiAgICAgICAgY29uc3QgY29tYmluZWRWYWx1ZXMgPSB0aGlzLmdldENvbWJpbmVkVmFsdWVzRnJvbUNvbHVtbnMob2JqLCB0aGlzLmFwaU1ldGEuZmllbGQpO1xuICAgICAgICByZXR1cm4gc2VhcmNoVGVybXMuZXZlcnkodGVybSA9PiBjb21iaW5lZFZhbHVlcy5pbmNsdWRlcyh0ZXJtKSk7XG4gICAgICB9KTtcbiAgXG4gICAgICB0aGlzLm5vUmVzdWx0ID0gcmVzdWx0cy5sZW5ndGggPT09IDA7XG4gICAgICB0aGlzLmZpbmFsUmVzdWx0cy5zZXQocmVzdWx0cyk7XG4gICAgICB0aGlzLnNob3dTdWdnZXN0aW9uID0gdHJ1ZTsgLy8gU2hvdyBzdWdnZXN0aW9ucyBvbmx5IGlmIHRoZXJlIGFyZSByZXN1bHRzXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXROZXN0ZWRWYWx1ZShvYmo6IGFueSwgcGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIW9iaiB8fCAhcGF0aCkgcmV0dXJuICcnO1xuICAgIFxuICAgIGNvbnN0IHByb2Nlc3NlZFBhdGggPSBwYXRoLnJlcGxhY2UoL1xcWyhcXGQrKVxcXS9nLCAnLiQxJyk7XG4gICAgY29uc3QgcGFydHMgPSBwcm9jZXNzZWRQYXRoLnNwbGl0KCcuJyk7XG4gICAgbGV0IGN1cnJlbnQgPSBvYmo7XG5cbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcbiAgICAgIGlmICghY3VycmVudCB8fCB0eXBlb2YgY3VycmVudCAhPT0gJ29iamVjdCcpIHJldHVybiAnJztcbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50W3BhcnRdO1xuICAgIH1cblxuICAgIHJldHVybiBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQgIT09IHVuZGVmaW5lZCBcbiAgICAgID8gU3RyaW5nKGN1cnJlbnQpLnRvTG93ZXJDYXNlKCkudHJpbSgpIFxuICAgICAgOiAnJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29tYmluZWRWYWx1ZXNGcm9tQ29sdW1ucyhvYmo6IGFueSwgY29sdW1uczogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIGlmICghb2JqIHx8ICFjb2x1bW5zKSByZXR1cm4gJyc7XG4gICAgXG4gICAgY29uc3QgY29sdW1uQXJyYXkgPSBBcnJheS5pc0FycmF5KGNvbHVtbnMpID8gY29sdW1ucyA6IFtjb2x1bW5zXTtcbiAgICBjb25zdCB2YWx1ZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5BcnJheSkge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldE5lc3RlZFZhbHVlKG9iaiwgY29sdW1uKTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlcy5qb2luKCcgJyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VmFsdWVzKGVsZW1lbnQ6IGFueSwgY29sdW1uczogYW55KTogYW55IHtcbiAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICAgIGlmICghZWxlbWVudCB8fCAhY29sdW1ucykgcmV0dXJuIHJlc3VsdDtcblxuICAgIGNvbnN0IGNvbHVtbkFycmF5ID0gQXJyYXkuaXNBcnJheShjb2x1bW5zKSA/IGNvbHVtbnMgOiBbY29sdW1uc107XG4gICAgXG4gICAgY29sdW1uQXJyYXkuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICBpZiAoIWNvbHVtbikgcmV0dXJuO1xuICAgICAgXG4gICAgICBsZXQgdGVtcEVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgY29uc3QgZmllbGRzID0gY29sdW1uLnNwbGl0KCcuJyk7XG4gICAgICBcbiAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7XG4gICAgICAgIGlmICghdGVtcEVsZW1lbnQpIGJyZWFrO1xuICAgICAgICBcbiAgICAgICAgY29uc3Qgc3BsaXRGaWVsZHMgPSBmaWVsZC5zcGxpdCgnWycpO1xuICAgICAgICBpZiAoc3BsaXRGaWVsZHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdGVtcEVsZW1lbnQgPSB0ZW1wRWxlbWVudFtmaWVsZF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgaW5kZXhNYXRjaCA9IHNwbGl0RmllbGRzWzFdPy5tYXRjaCgvKFxcZCspXFxdLyk7XG4gICAgICAgICAgaWYgKGluZGV4TWF0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gTnVtYmVyKGluZGV4TWF0Y2hbMV0pO1xuICAgICAgICAgICAgdGVtcEVsZW1lbnQgPSB0ZW1wRWxlbWVudFtzcGxpdEZpZWxkc1swXV0/LltpbmRleF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIHJlc3VsdFtjb2x1bW5dID0gdGVtcEVsZW1lbnQgfHwgJyc7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZ2V0S2V5cyhvYmo6IGFueSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gb2JqID8gT2JqZWN0LmtleXMob2JqKSA6IFtdO1xuICB9XG5cbiAgcHVibGljIGNsaWNrSXRlbShldmVudDogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmFwaU1ldGEpIHJldHVybjtcbiAgXG4gICAgdGhpcy5wYXJzZUFwaU1ldGEoKTtcbiAgICBcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhbHVlcyhldmVudCwgdGhpcy5TZWFyY2hJdGVtKTtcbiAgICBjb25zdCBkaXNwbGF5VmFsdWUgPSBPYmplY3QudmFsdWVzKHZhbHVlcylcbiAgICAgIC5maWx0ZXIodmFsID0+IHZhbClcbiAgICAgIC5qb2luKCcgfCAnKTtcbiAgICBcbiAgICBpZiAodGhpcy5tb2RlICE9PSAnZWRpdCcpIHtcbiAgICAgIHRoaXMudmlld0ZpbHRlck5hbWUgPSBkaXNwbGF5VmFsdWU7XG4gICAgfVxuICAgIHRoaXMuZmlsdGVyTmFtZSA9IGRpc3BsYXlWYWx1ZTtcbiAgICB0aGlzLm5nT25DaGFuZ2VzKHt9KVxuICBcbiAgICBjb25zdCBkZWZhdWx0RmllbGQgPSB0aGlzLmFwaU1ldGEuZGVmYXVsdEZpZWxkIHx8IFxuICAgICAgKEFycmF5LmlzQXJyYXkodGhpcy5hcGlNZXRhPy5maWVsZCkgPyB0aGlzLmFwaU1ldGE/LmZpZWxkPy5bMF0gOiB0aGlzLmFwaU1ldGEuZmllbGQpO1xuICAgIFxuICAgIGNvbnN0IGNoYW5nZSA9IG5ldyBDaGFuZ2VXcmFwcGVyKCk7XG4gICAgY2hhbmdlWydmcm9tUXVlc3Rpb25JZCddID0gdGhpcy5pZDtcbiAgICBjaGFuZ2VbJ3ZhbHVlT2JqJ10gPSBldmVudDtcbiAgICBjaGFuZ2VbJ2ZpZWxkJ10gPSBkZWZhdWx0RmllbGQ7XG4gICAgXG4gICAgdGhpcy52YWx1ZU9iaiA9IGV2ZW50O1xuICAgIFxuICAgIHRoaXMuaGlkZVN1Z2dlc3Rpb25zKCk7XG4gICAgXG4gICAgdGhpcy5zZWFyY2hWYWx1ZUNoYW5nZS5lbWl0KHtcbiAgICAgIHF1ZXN0aW9uOiB0aGlzLnF1ZXN0aW9uLFxuICAgICAgdmFsdWU6IGNoYW5nZVxuICAgIH0pO1xuICB9XG5cbiAgaW5wdXRWYWx1ZShldmVudDogYW55LCBxdWVzOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlck5hbWUgPSBldmVudD8udmFsdWVPYmogPyBldmVudD8udmFsdWVPYmo/LnRyaW0oKSA6IHRoaXMuZmlsdGVyTmFtZVxuICAgIGlmICghcXVlcz8uc2luZ2xlRmllbGRDaGFuZ2UgfHwgIXRoaXMuYXBpTWV0YSkgcmV0dXJuO1xuXG4gICAgdGhpcy5pc1NpbmdsZUZpZWxkQ2hhbmdlID0gdHJ1ZTtcbiAgICB0aGlzLnBhcnNlQXBpTWV0YSgpO1xuXG4gICAgY29uc3QgZGVmYXVsdEZpZWxkID0gdGhpcy5hcGlNZXRhLmRlZmF1bHRGaWVsZCB8fCBcbiAgICAgIChBcnJheS5pc0FycmF5KHRoaXMuYXBpTWV0YT8uZmllbGQpID8gdGhpcy5hcGlNZXRhPy5maWVsZD8uWzBdIDogdGhpcy5hcGlNZXRhLmZpZWxkKTtcblxuICAgIGNvbnN0IGNoYW5nZSA9IG5ldyBDaGFuZ2VXcmFwcGVyKCk7XG4gICAgY2hhbmdlWydmcm9tUXVlc3Rpb25JZCddID0gdGhpcy5pZDtcbiAgICBjaGFuZ2VbJ3ZhbHVlT2JqJ10gPSB0aGlzLnZhbHVlT2JqO1xuICAgIGNoYW5nZVsnZmllbGQnXSA9IGRlZmF1bHRGaWVsZDtcbiAgICBjaGFuZ2VbJ3JlZmVyZW5jZUZpZWxkJ10gPSB0aGlzLnF1ZXN0aW9uLnJlZmVyZW5jZUZpZWxkO1xuICAgIFxuICAgIHRoaXMuZmlsdGVyTmFtZSA9IHRoaXMudmlld0ZpbHRlck5hbWU7XG4gICAgXG4gICAgdGhpcy5zZWFyY2hWYWx1ZUNoYW5nZS5lbWl0KHtcbiAgICAgIHF1ZXN0aW9uOiBxdWVzLFxuICAgICAgdmFsdWU6IGNoYW5nZVxuICAgIH0pO1xuICB9XG5cbiAgaGlnaGxpZ2h0VGV4dCh0ZXh0OiBzdHJpbmcsIHNlYXJjaFRlcm06IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF0ZXh0IHx8ICFzZWFyY2hUZXJtKSByZXR1cm4gdGV4dCB8fCAnJztcblxuICAgIC8vIFNhbml0aXplIHRoZSBpbnB1dCB0ZXh0XG4gICAgY29uc3Qgc2FuaXRpemVkVGV4dCA9IHRoaXMuc2FuaXRpemVIdG1sKHRleHQpO1xuICAgIGNvbnN0IHRlcm1zID0gc2VhcmNoVGVybS50b0xvd2VyQ2FzZSgpLnNwbGl0KCcgJykuZmlsdGVyKHRlcm0gPT4gdGVybS5sZW5ndGggPiAwKTtcbiAgICBcbiAgICBpZiAodGVybXMubGVuZ3RoID09PSAwKSByZXR1cm4gc2FuaXRpemVkVGV4dDtcblxuICAgIC8vIEVzY2FwZSBzcGVjaWFsIHJlZ2V4IGNoYXJhY3RlcnNcbiAgICBjb25zdCBlc2NhcGVkVGVybXMgPSB0ZXJtcy5tYXAodGVybSA9PiBcbiAgICAgIHRlcm0ucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKVxuICAgICk7XG5cbiAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoYCgke2VzY2FwZWRUZXJtcy5qb2luKCd8Jyl9KWAsICdnaScpO1xuICAgIHJldHVybiBzYW5pdGl6ZWRUZXh0LnJlcGxhY2UocmVnZXgsICc8c3BhbiBjbGFzcz1cImhpZ2hsaWdodFwiPiQxPC9zcGFuPicpO1xuICB9XG5cbiAgcHJpdmF0ZSBzYW5pdGl6ZUh0bWwodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGV4dFxuICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcbiAgICAgIC5yZXBsYWNlKC88L2csICcmbHQ7JylcbiAgICAgIC5yZXBsYWNlKC8+L2csICcmZ3Q7JylcbiAgICAgIC5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7JylcbiAgICAgIC5yZXBsYWNlKC8nL2csICcmIzM5OycpO1xuICB9XG4gIHJlbW92ZVZhbHVlRW1pdCgpe1xuICAgIHRoaXMuY2xpY2tJdGVtKG51bGwpXG4gIH1cbn0iLCI8IS0tIFZEIDEySnVuMjQgLSByZWFkb25seSBjaGFuZ2UgLS0+XG48ZGl2IGNsYXNzPVwic2VhcmNoLXdyYXBwZXJcIiAjc2VhcmNoV3JhcHBlcj5cbiAgPG54dC1pbnB1dCBcbiAgICBbdHlwZV09XCInbGlzdCdcIiBcbiAgICBbbW9kZV09XCJtb2RlXCIgXG4gICAgW2Zyb21dPVwiZnJvbVwiXG4gICAgW3ZhbHVlXT1cIm1vZGUgPT09ICdlZGl0JyA/IGZpbHRlck5hbWUgOiB2aWV3RmlsdGVyTmFtZVwiXG4gICAgW2xhYmVsRm9udF09XCJxdWVzdGlvbi5mb250XCIgXG4gICAgW2xhYmVsXT1cInF1ZXN0aW9uPy5xdWVzdGlvblRleHRcIiBcbiAgICBbbGFiZWxDb2xvcl09XCJxdWVzdGlvbi5mb250Q29sb3JcIlxuICAgIFtsYWJlbFNpemVdPVwicXVlc3Rpb24uZm9udFNpemVcIiBcbiAgICBbaW5wdXRWYWx1ZVNpemVdPVwicXVlc3Rpb24uZm9udFNpemVcIiBcbiAgICBbbGFiZWxXZWlnaHRdPVwicXVlc3Rpb24uZm9udFdlaWdodFwiXG4gICAgW2lucHV0V2VpZ2h0XT1cInF1ZXN0aW9uLmZvbnRXZWlnaHRcIiBcbiAgICBbc2hvd0xhYmVsXT1cInF1ZXN0aW9uLnN0eWxlPy5zaG93TGFiZWxcIiBcbiAgICBpbnB1dEJvcmRlcj1cIm5vbmVcIiBcbiAgICBzdmdIZWlnaHQ9XCIyMHB4XCJcbiAgICBzdmdXaWR0aD1cIjIwcHhcIiBcbiAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2VIb2xkZXJUZXh0XCIgXG4gICAgW3JlcXVpcmVkXT1cInF1ZXN0aW9uLmlzT3B0aW9uYWxcIiBcbiAgICBpbnB1dEJnQ29sb3I9XCIjRkFGQUZBXCJcbiAgICBbaW5wdXRJZF09XCJxdWVzdGlvbi50cmFja2luZ0lkXCIgXG4gICAgW2Vycm9yTWVzc2FnZXNdPVwieyByZXF1aXJlZDogJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQnIH1cIlxuICAgIFtpbnB1dEljb25MZWZ0U3JjXT1cInF1ZXN0aW9uLmljb25MZWZ0U3JjXCIgXG4gICAgKGlucHV0VmFsdWUpPVwiZ2V0U291cmNlRGF0YUxvY2FsKCRldmVudCk7IGlucHV0VmFsdWUoJGV2ZW50LnZhbHVlLCAkZXZlbnQucXVlc3Rpb24pXCIgXG4gICAgKG9uRm9jdXMpPVwib25JbnB1dEZvY3VzKClcIlxuICAgIChvbkJsdXIpPVwib25JbnB1dEJsdXIoKVwiXG4gICAgW3Nob3dTdWdnZXN0aW9uXT1cInNob3dTdWdnZXN0aW9uXCIgXG4gICAgYXJpYU93bnM9XCJzZWxlY3RMaXN0XCIgXG4gICAgYXJpYUhhc1BvcHVwPVwibGlzdGJveFwiIFxuICAgIFtpc0xvYWRpbmddPVwiaXNMb2FkaW5nXCIgXG4gICAgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCJcbiAgICAocmVtb3ZlVmFsdWVFbWl0KT1cInJlbW92ZVZhbHVlRW1pdCgpXCI+XG4gIDwvbnh0LWlucHV0PlxuXG4gIDxkaXYgaWQ9XCJzZWxlY3RMaXN0XCIgY2xhc3M9XCJzdWdnZXN0aW9uLXdyYXBwZXJcIiByb2xlPVwibGlzdGJveFwiICpuZ0lmPVwic2hvd1N1Z2dlc3Rpb25cIj5cbiAgICA8ZGl2ICpuZ0lmPVwiZmluYWxSZXN1bHRzKCkubGVuZ3RoID4gMFwiIGNsYXNzPVwibnh0LXN1Z2dlc3Rpb25zLWNvbnRhaW5lclwiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaW5hbFJlc3VsdHMoKTsgdHJhY2tCeTogdHJhY2tCeUZuXCIgXG4gICAgICAgICAgIChjbGljayk9XCJjbGlja0l0ZW0oaXRlbSlcIiBcbiAgICAgICAgICAgY2xhc3M9XCJzdWdnZXN0aW9uLWl0ZW1cIiBcbiAgICAgICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImNsaWNrSXRlbShpdGVtKVwiXG4gICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cImNsaWNrSXRlbShpdGVtKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1jb250ZW50XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tZGV0YWlsc1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0udGh1bWJuYWlsXCIgY2xhc3M9XCJ0aHVtYm5haWwtd3JhcHBlclwiPlxuICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaXRlbS50aHVtYm5haWxcIiBbYWx0XT1cIml0ZW0ubmFtZSArICcgYXZhdGFyJ1wiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLXRleHRcIj5cbiAgICAgICAgICAgICAgPCEtLSBQcmltYXJ5IHRleHQgKGZpcnN0IGtleSkgLS0+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRLZXlzKGdldFZhbHVlcyhpdGVtLCBTZWFyY2hJdGVtKSkubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLW5hbWUgcHJpbWFyeVwiIFxuICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJoaWdobGlnaHRUZXh0KGdldFZhbHVlcyhpdGVtLCBTZWFyY2hJdGVtKVtnZXRLZXlzKGdldFZhbHVlcyhpdGVtLCBTZWFyY2hJdGVtKSlbMF1dLCBzZWFyY2hLZXlXb3JkKVwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDwhLS0gU2Vjb25kYXJ5IHRleHQgKHJlbWFpbmluZyBrZXlzKSAtLT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tc2Vjb25kYXJ5XCIgKm5nSWY9XCJnZXRLZXlzKGdldFZhbHVlcyhpdGVtLCBTZWFyY2hJdGVtKSkubGVuZ3RoID4gMVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGtleSBvZiBnZXRLZXlzKGdldFZhbHVlcyhpdGVtLCBTZWFyY2hJdGVtKSk7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlY29uZGFyeS10ZXh0XCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiaGlnaGxpZ2h0VGV4dChnZXRWYWx1ZXMoaXRlbSwgU2VhcmNoSXRlbSlba2V5XSwgc2VhcmNoS2V5V29yZClcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlcGFyYXRvclwiICpuZ0lmPVwiaSA8IGdldEtleXMoZ2V0VmFsdWVzKGl0ZW0sIFNlYXJjaEl0ZW0pKS5sZW5ndGggLSAxXCI+IHwgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwibm9SZXN1bHQgJiYgc2VhcmNoS2V5V29yZFwiIGNsYXNzPVwibm8tcmVzdWx0c1wiPlxuICAgICAgPGRpdiBjbGFzcz1cIm5vLXJlc3VsdHMtY29udGVudFwiPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjFcIj5cbiAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTFcIiBjeT1cIjExXCIgcj1cIjhcIj48L2NpcmNsZT5cbiAgICAgICAgICA8cGF0aCBkPVwibTIxIDIxLTQuMzUtNC4zNVwiPjwvcGF0aD5cbiAgICAgICAgPC9zdmc+XG4gICAgICAgIDxwPk5vIHJlc3VsdHMgZm91bmQgZm9yIFwie3tzZWFyY2hLZXlXb3JkfX1cIjwvcD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==
473
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvY29tcG9uZW50cy9zZWFyY2gtYm94L3NlYXJjaC1ib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvc2VhcmNoLWJveC9zZWFyY2gtYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWdDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBNkIsTUFBTSxFQUFtQyxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDak0sT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxPQUFPLEVBQWdCLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFLNUYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7Ozs7O0FBYzFFLE1BQU0sT0FBTyxZQUFZO0lBb0NIO0lBQXVDO0lBQXFDO0lBQWlDO0lBQWtDO0lBQXdDO0lBbkNsTSxlQUFlLEdBQVcsRUFBRSxDQUFDO0lBQzdCLFFBQVEsQ0FBTTtJQUNkLE9BQU8sQ0FBTTtJQUNiLEVBQUUsR0FBVyxFQUFFLENBQUM7SUFDaEIsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixJQUFJLEdBQThCLE1BQU0sQ0FBQztJQUN6QyxJQUFJLENBQU07SUFFVCxpQkFB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U0FBUzsrQkFDRSxnQkFBZ0IsY0FDZCxJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLFFBQVE7d0JBQ1Isc0JBQXNCO3FCQUN2Qjt5TkFLUSxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUksaUJBQWlCO3NCQUExQixNQUFNO2dCQUN1QyxhQUFhO3NCQUExRCxTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBaUc1QyxlQUFlO3NCQURkLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBUzFDLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyx5QkFBeUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIFNpbXBsZUNoYW5nZXMsIHNpZ25hbCwgV3JpdGFibGVTaWduYWwsIFRyYWNrQnlGdW5jdGlvbiwgSG9zdExpc3RlbmVyfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ2hhbmdlV3JhcHBlciB9IGZyb20gXCIuLi8uLi9tb2RlbC9jaGFuZ2VXcmFwcGVyXCI7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gXCIuLi8uLi9pMThuLnNlcnZpY2VcIjtcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBOeHRJbnB1dCB9IGZyb20gXCIuLi9ueHQtaW5wdXQvbnh0LWlucHV0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc3RvcmFnZS9zdG9yYWdlLnNlcnZpY2VcIjtcbmltcG9ydCB7IENoYW5nZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvY2hhbmdlL2NoYW5nZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBEYXRhU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9kYXRhL2RhdGEuc2VydmljZVwiO1xuaW1wb3J0IHsgQ291bnRyeVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvY291bnRyeS9jb3VudHJ5LnNlcnZpY2VcIjtcbmltcG9ydCB7IE54dEN1c3RvbVRyYW5zbGF0ZVBpcGUgfSBmcm9tIFwiLi4vLi4vcGlwZS9jdXN0b20tdHJhbnNsYXRlLnBpcGVcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbnh0LXNlYXJjaC1ib3gnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE54dElucHV0LFxuICAgIE54dEN1c3RvbVRyYW5zbGF0ZVBpcGVcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaC1ib3guY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zZWFyY2gtYm94LmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBOeHRTZWFyY2hCb3ggaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgQElucHV0KCkgcGxhY2VIb2xkZXJUZXh0OiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgcXVlc3Rpb246IGFueTtcbiAgQElucHV0KCkgYXBpTWV0YTogYW55O1xuICBASW5wdXQoKSBpZDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHJlYWRPbmx5ID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1vZGU6ICd2aWV3JyB8ICdlZGl0JyB8ICdwcmludCcgPSAnZWRpdCc7XG4gIEBJbnB1dCgpIGZyb206IGFueTtcbiAgXG4gIEBPdXRwdXQoKSBzZWFyY2hWYWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQFZpZXdDaGlsZCgnc2VhcmNoV3JhcHBlcicsIHsgc3RhdGljOiB0cnVlIH0pIHNlYXJjaFdyYXBwZXIhOiBFbGVtZW50UmVmO1xuXG4gIFNlYXJjaEl0ZW06IGFueTtcbiAgcHVibGljIGZpbmFsUmVzdWx0czogV3JpdGFibGVTaWduYWw8YW55W10+ID0gc2lnbmFsKFtdKTtcbiAgcHVibGljIHNlYXJjaEtleVdvcmQ6IHN0cmluZyA9ICcnO1xuICBwdWJsaWMgbmV3UmVzdWx0OiBhbnk7XG4gIHB1YmxpYyBzaG93UmVzdWx0ID0gZmFsc2U7XG4gIHB1YmxpYyBub1Jlc3VsdCA9IGZhbHNlO1xuICBwdWJsaWMgc2hvd1N1Z2dlc3Rpb24gPSBmYWxzZTtcbiAgcHVibGljIGlzTG9hZGluZyA9IGZhbHNlO1xuICBwdWJsaWMgdmlld0ZpbHRlck5hbWU6IHN0cmluZyA9ICcnO1xuICBwdWJsaWMgaXNTaW5nbGVGaWVsZENoYW5nZSA9IGZhbHNlO1xuICBwdWJsaWMgdmFsdWVPYmo6IGFueTtcbiAgcHVibGljIGlucHV0Rm9jdXNlZCA9IGZhbHNlO1xuICBwdWJsaWMgbGFzdFNlYXJjaExlbmd0aCA9IDA7XG4gIHB1YmxpYyBmaWx0ZXJOYW1lID0nJ1xuXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIHNlYXJjaFN1YmplY3QgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIC8vIFRyYWNrQnkgZnVuY3Rpb24gZm9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvblxuICB0cmFja0J5Rm46IFRyYWNrQnlGdW5jdGlvbjxhbnk+ID0gKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkgPT4ge1xuICAgIHJldHVybiBpdGVtLmlkIHx8IGl0ZW0ubmFtZSB8fCBpbmRleDtcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZSxwcml2YXRlIGNoYW5nZVNlcnZpY2U6IENoYW5nZVNlcnZpY2UscHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsIHB1YmxpYyBpMThuU2VydmljZTogSTE4blNlcnZpY2UsIHByaXZhdGUgY291bnRyeVNlcnZpY2U6IENvdW50cnlTZXJ2aWNlLCBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcbiAgICBpZih0aGlzLnF1ZXN0aW9uPy5pbnB1dCAmJiB0eXBlb2YgdGhpcy5xdWVzdGlvbj8uaW5wdXQgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHRoaXMucXVlc3Rpb24/LmlucHV0KSl7XG4gICAgICB0aGlzLmNsaWNrSXRlbSh0aGlzLnF1ZXN0aW9uPy5pbnB1dClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWx0ZXJOYW1lID0gdGhpcy5xdWVzdGlvbj8uaW5wdXRcbiAgICB9ICAgIFxuICAgIC8vIFNldHVwIGRlYm91bmNlZCBzZWFyY2hcbiAgICB0aGlzLnNlYXJjaFN1YmplY3RcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKGtleXdvcmQgPT4ge1xuICAgICAgICBpZih0aGlzLmxhc3RTZWFyY2hMZW5ndGggPiAyKSB0aGlzLnBlcmZvcm1TZWFyY2goa2V5d29yZCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmKHRoaXMucXVlc3Rpb24/LmlucHV0ICYmIHR5cGVvZiB0aGlzLnF1ZXN0aW9uPy5pbnB1dCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodGhpcy5xdWVzdGlvbj8uaW5wdXQpKXtcbiAgICAgIHRoaXMuY2xpY2tJdGVtKHRoaXMucXVlc3Rpb24/LmlucHV0KVxuICAgIH0gZWxzZSBpZihBcnJheS5pc0FycmF5KHRoaXMucXVlc3Rpb24/LmlucHV0KSl7XG4gICAgICB0aGlzLmZpbHRlck5hbWUgPSAnJ1xuICAgICAgdGhpcy52aWV3RmlsdGVyTmFtZSA9ICcnXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyTmFtZSA9IHRoaXMucXVlc3Rpb24/LmlucHV0XG4gICAgICB0aGlzLnZpZXdGaWx0ZXJOYW1lID0gdGhpcy5xdWVzdGlvbj8uaW5wdXRcbiAgICB9XG4gICAgdGhpcy5wYXJzZUFwaU1ldGEoKTtcbiAgICBpZih0aGlzLnF1ZXN0aW9uPy5zdWJUZXh0ICE9IHVuZGVmaW5lZCkge1xuICAgICAgbGV0IGRlcGVuZGVuY3lPYmo6IGFueSA9IHRoaXMucXVlc3Rpb24/LnN1YlRleHQ7XG4gICAgICAvLyBTdWJzY3JpYmUgZm9yIHRoZSBjaGFuZ2VzXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuY2hhbmdlU2VydmljZS5jaGFuZ2VBbm5vdW5jZWQkLnN1YnNjcmliZShcbiAgICAgICAgKGNoYW5nZVZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYoY2hhbmdlVmFsdWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZihjaGFuZ2VWYWx1ZS5mcm9tUXVlc3Rpb25JZCAmJiBjaGFuZ2VWYWx1ZS52YWx1ZU9iaiAhPT0gdW5kZWZpbmVkICYmICggQXJyYXkuaXNBcnJheShkZXBlbmRlbmN5T2JqLnNvdXJjZVF1ZXN0aW9uSWQpPyBkZXBlbmRlbmN5T2JqLnNvdXJjZVF1ZXN0aW9uSWQuaW5jbHVkZXMoY2hhbmdlVmFsdWUuZnJvbVF1ZXN0aW9uSWQpIDogY2hhbmdlVmFsdWUuZnJvbVF1ZXN0aW9uSWQgPT09IGRlcGVuZGVuY3lPYmouc291cmNlUXVlc3Rpb25JZCkpIHtcbiAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShkZXBlbmRlbmN5T2JqLnF1ZXJ5VmFsdWUpPyBkZXBlbmRlbmN5T2JqLnF1ZXJ5VmFsdWUuaW5jbHVkZXMoY2hhbmdlVmFsdWUucmVmZXJlbmNlRmllbGQpIDogY2hhbmdlVmFsdWUucmVmZXJlbmNlRmllbGQgPT09IGRlcGVuZGVuY3lPYmoucXVlcnlWYWx1ZSl7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5xdWVyeVZhbHVlU3RvcmUodGhpcy5xdWVzdGlvbi5pZCxjaGFuZ2VWYWx1ZS5yZWZlcmVuY2VGaWVsZCxjaGFuZ2VWYWx1ZS52YWx1ZU9iailcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VTZXJ2aWNlLmNvbmZpcm1DaGFuZ2UoY2hhbmdlVmFsdWUuZnJvbVF1ZXN0aW9uSWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYoY2hhbmdlc1sncXVlc3Rpb24nXSl7XG4gICAgICAvLyBpZih0aGlzLnF1ZXN0aW9uPy5pbnB1dCAmJiB0eXBlb2YgdGhpcy5xdWVzdGlvbj8uaW5wdXQgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHRoaXMucXVlc3Rpb24/LmlucHV0KSl7XG4gICAgICAvLyAgIHRoaXMuY2xpY2tJdGVtKHRoaXMucXVlc3Rpb24/LmlucHV0KVxuICAgICAgLy8gfSBlbHNlIHtcbiAgICAgIC8vICAgdGhpcy5maWx0ZXJOYW1lID0gdGhpcy5xdWVzdGlvbj8uaW5wdXRcbiAgICAgIC8vIH1cbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ21vZGUnXSkge1xuICAgICAgdGhpcy5tb2RlID0gY2hhbmdlc1snbW9kZSddLmN1cnJlbnRWYWx1ZTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2FwaU1ldGEnXSAmJiB0aGlzLmFwaU1ldGEpIHtcbiAgICAgIHRoaXMucGFyc2VBcGlNZXRhKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIHRoaXMucmVzZXRDb21wb25lbnRTdGF0ZSgpO1xuICB9XG5cbiAgLy8gSGFuZGxlIGNsaWNrcyBvdXRzaWRlIHRoZSBzZWFyY2ggY29tcG9uZW50XG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcbiAgb25Eb2N1bWVudENsaWNrKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpKSB7XG4gICAgICB0aGlzLmhpZGVTdWdnZXN0aW9ucygpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBlc2NhcGUga2V5IHRvIGNsb3NlIHN1Z2dlc3Rpb25zXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24uZXNjYXBlJywgWyckZXZlbnQnXSlcbiAgb25Fc2NhcGVLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmhpZGVTdWdnZXN0aW9ucygpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUFwaU1ldGEoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYXBpTWV0YSkge1xuICAgICAgdGhpcy5hcGlNZXRhID0gdHlwZW9mIHRoaXMuYXBpTWV0YSA9PT0gJ29iamVjdCcgPyB0aGlzLmFwaU1ldGEgOiBKU09OLnBhcnNlKHRoaXMuYXBpTWV0YSB8fCAne30nKTtcbiAgICAgIHRoaXMuU2VhcmNoSXRlbSA9IHRoaXMuYXBpTWV0YS5maWVsZCB8fCBbXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc2V0Q29tcG9uZW50U3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5maW5hbFJlc3VsdHMuc2V0KFtdKTtcbiAgICB0aGlzLnNlYXJjaEtleVdvcmQgPSAnJztcbiAgICB0aGlzLnNob3dTdWdnZXN0aW9uID0gZmFsc2U7XG4gICAgdGhpcy5ub1Jlc3VsdCA9IGZhbHNlO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5pbnB1dEZvY3VzZWQgPSBmYWxzZTtcbiAgICB0aGlzLmxhc3RTZWFyY2hMZW5ndGggPSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBoaWRlU3VnZ2VzdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93U3VnZ2VzdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuaW5wdXRGb2N1c2VkID0gZmFsc2U7XG4gIH1cblxuICBvbklucHV0Rm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dEZvY3VzZWQgPSB0cnVlO1xuICAgIC8vIFRyaWdnZXIgYSBzZWFyY2ggd2l0aCBhbiBlbXB0eSBrZXl3b3JkIHRvIHNob3cgYWxsIGRhdGFcbiAgICBpZiAoIXRoaXMuc2VhcmNoS2V5V29yZCkge1xuICAgICAgLy8gdGhpcy5wZXJmb3JtU2VhcmNoKCcnKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZmluYWxSZXN1bHRzKCkubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbiA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgb25JbnB1dEJsdXIoKTogdm9pZCB7XG4gICAgLy8gRG9uJ3QgaW1tZWRpYXRlbHkgaGlkZSBzdWdnZXN0aW9ucyB0byBhbGxvdyBmb3IgY2xpY2tpbmdcbiAgICAvLyBUaGUgZG9jdW1lbnQgY2xpY2sgaGFuZGxlciB3aWxsIGhhbmRsZSBoaWRpbmdcbiAgfVxuXG4gIGNsZWFyTGlzdCgpOiB2b2lkIHtcbiAgICAvLyBSZW1vdmUgdGhlIHNldFRpbWVvdXQgZGVsYXkgdGhhdCB3YXMgY2F1c2luZyBpc3N1ZXNcbiAgICB0aGlzLmhpZGVTdWdnZXN0aW9ucygpO1xuICB9XG5cbiAgZ2V0U291cmNlRGF0YUxvY2FsKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIWV2ZW50Py52YWx1ZT8udmFsdWVPYmopIHtcbiAgICAgIHRoaXMucmVzZXRDb21wb25lbnRTdGF0ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNlYXJjaFZhbHVlID0gIGV2ZW50LnZhbHVlPy52YWx1ZU9iaj8uaW5jbHVkZXMoJ3wnKSA/IGV2ZW50LnZhbHVlPy52YWx1ZU9iaj8uc3BsaXQoJ3wnKVswXS50cmltKCkgOiBldmVudC52YWx1ZT8udmFsdWVPYmo/LnRyaW0oKTtcbiAgICBjb25zdCBjdXJyZW50TGVuZ3RoID0gc2VhcmNoVmFsdWUubGVuZ3RoO1xuICAgIFxuICAgIC8vIEFsd2F5cyB1cGRhdGUgdGhlIHNlYXJjaCBrZXl3b3JkXG4gICAgdGhpcy5zZWFyY2hLZXlXb3JkID0gc2VhcmNoVmFsdWU7XG4gICAgXG4gICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHVzZXIgdHlwZXMgMysgY2hhcmFjdGVyc1xuICAgIGlmIChjdXJyZW50TGVuZ3RoID4gMiAmJiAhdGhpcy5pc1NpbmdsZUZpZWxkQ2hhbmdlKSB7XG4gICAgICB0aGlzLnNob3dTdWdnZXN0aW9uID0gIWV2ZW50LnF1ZXN0aW9uPy5zaW5nbGVGaWVsZENoYW5nZTtcbiAgICAgIHRoaXMuc2hvd1Jlc3VsdCA9IGZhbHNlO1xuICAgICAgdGhpcy5ub1Jlc3VsdCA9IGZhbHNlO1xuICAgICAgLy8gQWx3YXlzIHBlcmZvcm0gc2VhcmNoIHdoZW4gd2UgaGF2ZSAzKyBjaGFyYWN0ZXJzXG4gICAgICB0aGlzLmxhc3RTZWFyY2hMZW5ndGggPSBjdXJyZW50TGVuZ3RoO1xuICAgICAgdGhpcy5zZWFyY2hTdWJqZWN0Lm5leHQoc2VhcmNoVmFsdWUpO1xuICAgICAgXG4gICAgfSBlbHNlIGlmIChjdXJyZW50TGVuZ3RoIDw9IDIpIHtcbiAgICAgIC8vIFdoZW4gbGVuZ3RoIGlzIDIgb3IgbGVzcywgaGlkZSBzdWdnZXN0aW9ucyBidXQga2VlcCB0aGUgc2VhcmNoIGtleXdvcmRcbiAgICAgIHRoaXMuaXNTaW5nbGVGaWVsZENoYW5nZSA9IGZhbHNlO1xuICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbiA9IGZhbHNlO1xuICAgICAgdGhpcy5ub1Jlc3VsdCA9IGZhbHNlO1xuICAgICAgdGhpcy5sYXN0U2VhcmNoTGVuZ3RoID0gY3VycmVudExlbmd0aDtcbiAgICAgIHRoaXMuc2VhcmNoU3ViamVjdC5uZXh0KHNlYXJjaFZhbHVlKTtcbiAgICAgIHRoaXMuZmluYWxSZXN1bHRzLnNldChbXSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwZXJmb3JtU2VhcmNoKGtleXdvcmQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5hcGlNZXRhKSByZXR1cm47XG5cbiAgICB0aGlzLnBhcnNlQXBpTWV0YSgpO1xuICAgIFxuICAgIGlmICghdGhpcy5hcGlNZXRhLmlzU3RhdGljRGF0YSkge1xuICAgICAgdGhpcy5zZWFyY2hGcm9tQXBpKGtleXdvcmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlYXJjaEZyb21TdGF0aWNEYXRhKGtleXdvcmQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2VhcmNoRnJvbUFwaShrZXl3b3JkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5maW5hbFJlc3VsdHMuc2V0KFtdKTtcbiAgICBpZighdGhpcy5hcGlNZXRhLmVuZHBvaW50ICYmIEFycmF5LmlzQXJyYXkodGhpcy5xdWVzdGlvbj8uaW5wdXQpICl7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5wcm9jZXNzU2VhcmNoUmVzdWx0cyh0aGlzLnF1ZXN0aW9uPy5pbnB1dCwga2V5d29yZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBmaW5hbEdldENhbGwgPSB0aGlzLmFwaU1ldGEuZW5kcG9pbnQ7XG4gICAgICAvLyBTS1MxOEpVTDI1IHF1ZXJ5IHBhcmFtcyBjcmVhdGlvblxuICAgICAgaWYodGhpcy5hcGlNZXRhPy5xdWVyeVBhcmFtZXRlcil7XG4gICAgICAgIGNvbnN0IGlzRmllbGRBcnJheSA9IEFycmF5LmlzQXJyYXkodGhpcy5hcGlNZXRhPy5xdWVyeVBhcmFtZXRlcik7XG4gICAgICAgIGNvbnN0IGZpZWxkcyA9IGlzRmllbGRBcnJheSA/IHRoaXMuYXBpTWV0YS5xdWVyeVBhcmFtZXRlciA6IFt0aGlzLmFwaU1ldGEucXVlcnlQYXJhbWV0ZXJdOyAvLyBhbHdheXMgYW4gYXJyYXkgbm93XG4gICAgICAgIC8vIEJ1aWxkIHF1ZXJ5IHBhcmFtcyBzdHJpbmdcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBmaWVsZHNcbiAgICAgICAgICAubWFwKGZpZWxkID0+IGAke2ZpZWxkfT0ke3RoaXMuc2VhcmNoS2V5V29yZH1gKVxuICAgICAgICAgIC5qb2luKCcmJyk7XG4gICAgICAgIC8vIENoZWNrIGlmIGVuZHBvaW50IGFscmVhZHkgaGFzIHF1ZXJ5IHBhcmFtc1xuICAgICAgICBpZihxdWVyeVBhcmFtcyAmJiBxdWVyeVBhcmFtcyAhPT0gJycpe1xuICAgICAgICAgIGlmICh0aGlzLmFwaU1ldGEuZW5kcG9pbnQuaW5jbHVkZXMoJz8nKSkge1xuICAgICAgICAgICAgZmluYWxHZXRDYWxsICs9IGAmJHtxdWVyeVBhcmFtc31gO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaW5hbEdldENhbGwgKz0gYD8ke3F1ZXJ5UGFyYW1zfWA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5hcGlNZXRhPy5xdWVyeUZpZWxkICYmIHRoaXMuYXBpTWV0YT8ucXVlcnlWYWx1ZSkge1xuICAgICAgICBjb25zdCBxdWVyeUZpZWxkcyA9IEFycmF5LmlzQXJyYXkodGhpcy5hcGlNZXRhLnF1ZXJ5RmllbGQpXG4gICAgICAgICAgPyB0aGlzLmFwaU1ldGEucXVlcnlGaWVsZFxuICAgICAgICAgIDogW3RoaXMuYXBpTWV0YS5xdWVyeUZpZWxkXTtcbiAgICAgIFxuICAgICAgICBjb25zdCBxdWVyeVZhbHVlcyA9IEFycmF5LmlzQXJyYXkodGhpcy5hcGlNZXRhLnF1ZXJ5VmFsdWUpXG4gICAgICAgICAgPyB0aGlzLmFwaU1ldGEucXVlcnlWYWx1ZVxuICAgICAgICAgIDogW3RoaXMuYXBpTWV0YS5xdWVyeVZhbHVlXTtcbiAgICAgIFxuICAgICAgICBjb25zdCBzdG9yZWQgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFF1ZXJ5VmFsdWUodGhpcy5xdWVzdGlvbi5pZCk7IC8vIHNpbmdsZSBvYmplY3RcbiAgICAgIFxuICAgICAgICBjb25zdCBxdWVyeVBhcmFtc0FycmF5OiBzdHJpbmdbXSA9IFtdO1xuICAgICAgXG4gICAgICAgIHF1ZXJ5RmllbGRzLmZvckVhY2goKGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlS2V5ID0gcXVlcnlWYWx1ZXNbaW5kZXhdID8/IHF1ZXJ5VmFsdWVzWzBdO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gc3RvcmVkW3ZhbHVlS2V5XTtcbiAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcXVlcnlQYXJhbXNBcnJheS5wdXNoKGAke2ZpZWxkfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSl9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIFxuICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHF1ZXJ5UGFyYW1zQXJyYXkuam9pbignJicpO1xuICAgICAgXG4gICAgICAgIGlmIChxdWVyeVBhcmFtcykge1xuICAgICAgICAgIGZpbmFsR2V0Q2FsbCArPSB0aGlzLmFwaU1ldGEuZW5kcG9pbnQuaW5jbHVkZXMoJz8nKSA/IGAmJHtxdWVyeVBhcmFtc31gIDogYD8ke3F1ZXJ5UGFyYW1zfWA7XG4gICAgICAgIH1cbiAgICAgIH0gICAgICBcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuYXBpUmVzcG9uc2UoZmluYWxHZXRDYWxsKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChhcGlSZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU2VhcmNoUmVzdWx0cyhhcGlSZXNwb25zZSwga2V5d29yZCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMubm9SZXN1bHQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuZmluYWxSZXN1bHRzLnNldChbXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2VhcmNoRnJvbVN0YXRpY0RhdGEoa2V5d29yZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSB0aGlzLmNvdW50cnlTZXJ2aWNlLmdldENvdW50cnlEYXRhKHRoaXMuYXBpTWV0YS5maWVsZCk7XG4gICAgdGhpcy5wcm9jZXNzU2VhcmNoUmVzdWx0cyhyZXNwb25zZSwga2V5d29yZCk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NTZWFyY2hSZXN1bHRzKGFwaVJlc3BvbnNlOiBhbnksIGtleXdvcmQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGxldCByZXNwb25zZTtcbiAgXG4gICAgaWYgKHRoaXMuYXBpTWV0YS52YXJpYWJsZSkge1xuICAgICAgcmVzcG9uc2UgPSB0aGlzLmRhdGFTZXJ2aWNlLmdldFZhbHVlKGFwaVJlc3BvbnNlLCB0aGlzLmFwaU1ldGEudmFyaWFibGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNwb25zZSA9IGFwaVJlc3BvbnNlO1xuICAgIH1cbiAgXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3BvbnNlKSkge1xuICAgICAgdGhpcy5ub1Jlc3VsdCA9IHRydWU7XG4gICAgICB0aGlzLmZpbmFsUmVzdWx0cy5zZXQoW10pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgXG4gICAgaWYgKCFrZXl3b3JkKSB7XG4gICAgICAvLyBJZiBubyBrZXl3b3JkLCBzaG93IGFsbCByZXN1bHRzXG4gICAgICB0aGlzLmZpbmFsUmVzdWx0cy5zZXQocmVzcG9uc2UpO1xuICAgICAgdGhpcy5ub1Jlc3VsdCA9IHJlc3BvbnNlLmxlbmd0aCA9PT0gMDtcbiAgICAgIHRoaXMuc2hvd1N1Z2dlc3Rpb24gPSB0cnVlOyAvLyBFbnN1cmUgc3VnZ2VzdGlvbnMgYXJlIHZpc2libGVcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRmlsdGVyIHJlc3VsdHMgYmFzZWQgb24gdGhlIGtleXdvcmRcbiAgICAgIGNvbnN0IHNlYXJjaFRlcm1zID0ga2V5d29yZC50b0xvd2VyQ2FzZSgpLnNwbGl0KFwiIFwiKS5maWx0ZXIodGVybSA9PiB0ZXJtLmxlbmd0aCA+IDApO1xuICAgICAgY29uc3QgcmVzdWx0cyA9IHJlc3BvbnNlLmZpbHRlcihvYmogPT4ge1xuICAgICAgICBjb25zdCBjb21iaW5lZFZhbHVlcyA9IHRoaXMuZ2V0Q29tYmluZWRWYWx1ZXNGcm9tQ29sdW1ucyhvYmosIHRoaXMuYXBpTWV0YS5maWVsZCk7XG4gICAgICAgIHJldHVybiBzZWFyY2hUZXJtcy5ldmVyeSh0ZXJtID0+IGNvbWJpbmVkVmFsdWVzLmluY2x1ZGVzKHRlcm0pKTtcbiAgICAgIH0pO1xuICBcbiAgICAgIHRoaXMubm9SZXN1bHQgPSByZXN1bHRzLmxlbmd0aCA9PT0gMDtcbiAgICAgIHRoaXMuZmluYWxSZXN1bHRzLnNldChyZXN1bHRzKTtcbiAgICAgIHRoaXMuc2hvd1N1Z2dlc3Rpb24gPSB0cnVlOyAvLyBTaG93IHN1Z2dlc3Rpb25zIG9ubHkgaWYgdGhlcmUgYXJlIHJlc3VsdHNcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldE5lc3RlZFZhbHVlKG9iajogYW55LCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghb2JqIHx8ICFwYXRoKSByZXR1cm4gJyc7XG4gICAgXG4gICAgY29uc3QgcHJvY2Vzc2VkUGF0aCA9IHBhdGgucmVwbGFjZSgvXFxbKFxcZCspXFxdL2csICcuJDEnKTtcbiAgICBjb25zdCBwYXJ0cyA9IHByb2Nlc3NlZFBhdGguc3BsaXQoJy4nKTtcbiAgICBsZXQgY3VycmVudCA9IG9iajtcblxuICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xuICAgICAgaWYgKCFjdXJyZW50IHx8IHR5cGVvZiBjdXJyZW50ICE9PSAnb2JqZWN0JykgcmV0dXJuICcnO1xuICAgICAgY3VycmVudCA9IGN1cnJlbnRbcGFydF07XG4gICAgfVxuXG4gICAgcmV0dXJuIGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudCAhPT0gdW5kZWZpbmVkIFxuICAgICAgPyBTdHJpbmcoY3VycmVudCkudG9Mb3dlckNhc2UoKS50cmltKCkgXG4gICAgICA6ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb21iaW5lZFZhbHVlc0Zyb21Db2x1bW5zKG9iajogYW55LCBjb2x1bW5zOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgaWYgKCFvYmogfHwgIWNvbHVtbnMpIHJldHVybiAnJztcbiAgICBcbiAgICBjb25zdCBjb2x1bW5BcnJheSA9IEFycmF5LmlzQXJyYXkoY29sdW1ucykgPyBjb2x1bW5zIDogW2NvbHVtbnNdO1xuICAgIGNvbnN0IHZhbHVlczogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbkFycmF5KSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0TmVzdGVkVmFsdWUob2JqLCBjb2x1bW4pO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRWYWx1ZXMoZWxlbWVudDogYW55LCBjb2x1bW5zOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XG4gICAgaWYgKCFlbGVtZW50IHx8ICFjb2x1bW5zKSByZXR1cm4gcmVzdWx0O1xuXG4gICAgY29uc3QgY29sdW1uQXJyYXkgPSBBcnJheS5pc0FycmF5KGNvbHVtbnMpID8gY29sdW1ucyA6IFtjb2x1bW5zXTtcbiAgICBcbiAgICBjb2x1bW5BcnJheS5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgIGlmICghY29sdW1uKSByZXR1cm47XG4gICAgICBcbiAgICAgIGxldCB0ZW1wRWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICBjb25zdCBmaWVsZHMgPSBjb2x1bW4uc3BsaXQoJy4nKTtcbiAgICAgIFxuICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgaWYgKCF0ZW1wRWxlbWVudCkgYnJlYWs7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBzcGxpdEZpZWxkcyA9IGZpZWxkLnNwbGl0KCdbJyk7XG4gICAgICAgIGlmIChzcGxpdEZpZWxkcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0ZW1wRWxlbWVudCA9IHRlbXBFbGVtZW50W2ZpZWxkXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpbmRleE1hdGNoID0gc3BsaXRGaWVsZHNbMV0/Lm1hdGNoKC8oXFxkKylcXF0vKTtcbiAgICAgICAgICBpZiAoaW5kZXhNYXRjaCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBOdW1iZXIoaW5kZXhNYXRjaFsxXSk7XG4gICAgICAgICAgICB0ZW1wRWxlbWVudCA9IHRlbXBFbGVtZW50W3NwbGl0RmllbGRzWzBdXT8uW2luZGV4XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmVzdWx0W2NvbHVtbl0gPSB0ZW1wRWxlbWVudCB8fCAnJztcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBnZXRLZXlzKG9iajogYW55KTogc3RyaW5nW10ge1xuICAgIHJldHVybiBvYmogPyBPYmplY3Qua2V5cyhvYmopIDogW107XG4gIH1cblxuICBwdWJsaWMgY2xpY2tJdGVtKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYXBpTWV0YSkgcmV0dXJuO1xuICBcbiAgICB0aGlzLnBhcnNlQXBpTWV0YSgpO1xuICAgIFxuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmFsdWVzKGV2ZW50LCB0aGlzLlNlYXJjaEl0ZW0pO1xuICAgIGNvbnN0IGRpc3BsYXlWYWx1ZSA9IE9iamVjdC52YWx1ZXModmFsdWVzKVxuICAgICAgLmZpbHRlcih2YWwgPT4gdmFsKVxuICAgICAgLmpvaW4oJyB8ICcpO1xuICAgIFxuICAgIGlmICh0aGlzLm1vZGUgIT09ICdlZGl0Jykge1xuICAgICAgdGhpcy52aWV3RmlsdGVyTmFtZSA9IGRpc3BsYXlWYWx1ZTtcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJOYW1lID0gZGlzcGxheVZhbHVlO1xuICAgIHRoaXMubmdPbkNoYW5nZXMoe30pXG4gIFxuICAgIGNvbnN0IGRlZmF1bHRGaWVsZCA9IHRoaXMuYXBpTWV0YS5kZWZhdWx0RmllbGQgfHwgXG4gICAgICAoQXJyYXkuaXNBcnJheSh0aGlzLmFwaU1ldGE/LmZpZWxkKSA/IHRoaXMuYXBpTWV0YT8uZmllbGQ/LlswXSA6IHRoaXMuYXBpTWV0YS5maWVsZCk7XG4gICAgXG4gICAgY29uc3QgY2hhbmdlID0gbmV3IENoYW5nZVdyYXBwZXIoKTtcbiAgICBjaGFuZ2VbJ2lzT2JqZWN0J10gPSB0aGlzLmFwaU1ldGE/LmlzT2JqZWN0XG4gICAgY2hhbmdlWydmcm9tUXVlc3Rpb25JZCddID0gdGhpcy5pZDtcbiAgICBjaGFuZ2VbJ3ZhbHVlT2JqJ10gPSBldmVudDtcbiAgICBjaGFuZ2VbJ2ZpZWxkJ10gPSBkZWZhdWx0RmllbGQ7XG4gICAgXG4gICAgdGhpcy52YWx1ZU9iaiA9IGV2ZW50O1xuICAgIFxuICAgIHRoaXMuaGlkZVN1Z2dlc3Rpb25zKCk7XG4gICAgXG4gICAgdGhpcy5zZWFyY2hWYWx1ZUNoYW5nZS5lbWl0KHtcbiAgICAgIHF1ZXN0aW9uOiB0aGlzLnF1ZXN0aW9uLFxuICAgICAgdmFsdWU6IGNoYW5nZVxuICAgIH0pO1xuICB9XG5cbiAgaW5wdXRWYWx1ZShldmVudDogYW55LCBxdWVzOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlck5hbWUgPSBldmVudD8udmFsdWVPYmogPyBldmVudD8udmFsdWVPYmo/LnRyaW0oKSA6IHRoaXMuZmlsdGVyTmFtZVxuICAgIGlmICghcXVlcz8uc2luZ2xlRmllbGRDaGFuZ2UgfHwgIXRoaXMuYXBpTWV0YSkgcmV0dXJuO1xuXG4gICAgdGhpcy5pc1NpbmdsZUZpZWxkQ2hhbmdlID0gdHJ1ZTtcbiAgICB0aGlzLnBhcnNlQXBpTWV0YSgpO1xuXG4gICAgY29uc3QgZGVmYXVsdEZpZWxkID0gdGhpcy5hcGlNZXRhLmRlZmF1bHRGaWVsZCB8fCBcbiAgICAgIChBcnJheS5pc0FycmF5KHRoaXMuYXBpTWV0YT8uZmllbGQpID8gdGhpcy5hcGlNZXRhPy5maWVsZD8uWzBdIDogdGhpcy5hcGlNZXRhLmZpZWxkKTtcblxuICAgIGNvbnN0IGNoYW5nZSA9IG5ldyBDaGFuZ2VXcmFwcGVyKCk7XG4gICAgY2hhbmdlWydpc09iamVjdCddID0gdGhpcy5hcGlNZXRhPy5pc09iamVjdFxuICAgIGNoYW5nZVsnZnJvbVF1ZXN0aW9uSWQnXSA9IHRoaXMuaWQ7XG4gICAgY2hhbmdlWyd2YWx1ZU9iaiddID0gdGhpcy52YWx1ZU9iajtcbiAgICBjaGFuZ2VbJ2ZpZWxkJ10gPSBkZWZhdWx0RmllbGQ7XG4gICAgY2hhbmdlWydyZWZlcmVuY2VGaWVsZCddID0gdGhpcy5xdWVzdGlvbi5yZWZlcmVuY2VGaWVsZDtcbiAgICBcbiAgICB0aGlzLmZpbHRlck5hbWUgPSB0aGlzLnZpZXdGaWx0ZXJOYW1lO1xuICAgIFxuICAgIHRoaXMuc2VhcmNoVmFsdWVDaGFuZ2UuZW1pdCh7XG4gICAgICBxdWVzdGlvbjogcXVlcyxcbiAgICAgIHZhbHVlOiBjaGFuZ2VcbiAgICB9KTtcbiAgfVxuXG4gIGhpZ2hsaWdodFRleHQodGV4dDogc3RyaW5nLCBzZWFyY2hUZXJtOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdGV4dCB8fCAhc2VhcmNoVGVybSkgcmV0dXJuIHRleHQgfHwgJyc7XG5cbiAgICAvLyBTYW5pdGl6ZSB0aGUgaW5wdXQgdGV4dFxuICAgIGNvbnN0IHNhbml0aXplZFRleHQgPSB0aGlzLnNhbml0aXplSHRtbCh0ZXh0KTtcbiAgICBjb25zdCB0ZXJtcyA9IHNlYXJjaFRlcm0udG9Mb3dlckNhc2UoKS5zcGxpdCgnICcpLmZpbHRlcih0ZXJtID0+IHRlcm0ubGVuZ3RoID4gMCk7XG4gICAgXG4gICAgaWYgKHRlcm1zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHNhbml0aXplZFRleHQ7XG5cbiAgICAvLyBFc2NhcGUgc3BlY2lhbCByZWdleCBjaGFyYWN0ZXJzXG4gICAgY29uc3QgZXNjYXBlZFRlcm1zID0gdGVybXMubWFwKHRlcm0gPT4gXG4gICAgICB0ZXJtLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJylcbiAgICApO1xuXG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGAoJHtlc2NhcGVkVGVybXMuam9pbignfCcpfSlgLCAnZ2knKTtcbiAgICByZXR1cm4gc2FuaXRpemVkVGV4dC5yZXBsYWNlKHJlZ2V4LCAnPHNwYW4gY2xhc3M9XCJoaWdobGlnaHRcIj4kMTwvc3Bhbj4nKTtcbiAgfVxuXG4gIHByaXZhdGUgc2FuaXRpemVIdG1sKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRleHRcbiAgICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpXG4gICAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXG4gICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpXG4gICAgICAucmVwbGFjZSgvXCIvZywgJyZxdW90OycpXG4gICAgICAucmVwbGFjZSgvJy9nLCAnJiMzOTsnKTtcbiAgfVxuICByZW1vdmVWYWx1ZUVtaXQoKXtcbiAgICB0aGlzLmNsaWNrSXRlbShudWxsKVxuICB9XG59IiwiPCEtLSBWRCAxMkp1bjI0IC0gcmVhZG9ubHkgY2hhbmdlIC0tPlxuPGRpdiBjbGFzcz1cInNlYXJjaC13cmFwcGVyXCIgI3NlYXJjaFdyYXBwZXI+XG4gIDxueHQtaW5wdXQgXG4gICAgW3R5cGVdPVwiJ2xpc3QnXCIgXG4gICAgW21vZGVdPVwibW9kZVwiIFxuICAgIFtmcm9tXT1cImZyb21cIlxuICAgIFt2YWx1ZV09XCJtb2RlID09PSAnZWRpdCcgPyBmaWx0ZXJOYW1lIDogdmlld0ZpbHRlck5hbWVcIlxuICAgIFtsYWJlbEZvbnRdPVwicXVlc3Rpb24/LmZvbnRcIiBcbiAgICBbbGFiZWxdPVwicXVlc3Rpb24/LnF1ZXN0aW9uVGV4dCA/ICgocXVlc3Rpb24/LmlkKycucXVlc3Rpb25UZXh0JykgfCBueHRDdXN0b21UcmFuc2xhdGUgOiBxdWVzdGlvbj8ucXVlc3Rpb25UZXh0KTogJydcIiBcbiAgICBbbGFiZWxDb2xvcl09XCJxdWVzdGlvbj8uZm9udENvbG9yXCJcbiAgICBbbGFiZWxTaXplXT1cInF1ZXN0aW9uPy5mb250U2l6ZVwiIFxuICAgIFtpbnB1dFZhbHVlU2l6ZV09XCJxdWVzdGlvbj8uZm9udFNpemVcIiBcbiAgICBbbGFiZWxXZWlnaHRdPVwicXVlc3Rpb24/LmZvbnRXZWlnaHRcIlxuICAgIFtpbnB1dFdlaWdodF09XCJxdWVzdGlvbj8uZm9udFdlaWdodFwiIFxuICAgIFtzaG93TGFiZWxdPVwicXVlc3Rpb24/LnN0eWxlPy5zaG93TGFiZWxcIiBcbiAgICBpbnB1dEJvcmRlcj1cIm5vbmVcIiBcbiAgICBzdmdIZWlnaHQ9XCIyMHB4XCJcbiAgICBzdmdXaWR0aD1cIjIwcHhcIiBcbiAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2VIb2xkZXJUZXh0XCIgXG4gICAgW3JlcXVpcmVkXT1cInF1ZXN0aW9uPy5pc09wdGlvbmFsXCIgXG4gICAgaW5wdXRCZ0NvbG9yPVwiI0ZBRkFGQVwiXG4gICAgW2lucHV0SWRdPVwicXVlc3Rpb24/LnRyYWNraW5nSWRcIiBcbiAgICBbZXJyb3JNZXNzYWdlc109XCJ7IHJlcXVpcmVkOiAnVGhpcyBmaWVsZCBpcyByZXF1aXJlZCcgfVwiXG4gICAgW2lucHV0SWNvbkxlZnRTcmNdPVwicXVlc3Rpb24/Lmljb25MZWZ0U3JjXCIgXG4gICAgKGlucHV0VmFsdWUpPVwiZ2V0U291cmNlRGF0YUxvY2FsKCRldmVudCk7IGlucHV0VmFsdWUoJGV2ZW50LnZhbHVlLCAkZXZlbnQucXVlc3Rpb24pXCIgXG4gICAgKG9uRm9jdXMpPVwib25JbnB1dEZvY3VzKClcIlxuICAgIChvbkJsdXIpPVwib25JbnB1dEJsdXIoKVwiXG4gICAgW3Nob3dTdWdnZXN0aW9uXT1cInNob3dTdWdnZXN0aW9uXCIgXG4gICAgYXJpYU93bnM9XCJzZWxlY3RMaXN0XCIgXG4gICAgYXJpYUhhc1BvcHVwPVwibGlzdGJveFwiIFxuICAgIFtpc0xvYWRpbmddPVwiaXNMb2FkaW5nXCIgXG4gICAgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCJcbiAgICAocmVtb3ZlVmFsdWVFbWl0KT1cInJlbW92ZVZhbHVlRW1pdCgpXCI+XG4gIDwvbnh0LWlucHV0PlxuXG4gIDxkaXYgaWQ9XCJzZWxlY3RMaXN0XCIgY2xhc3M9XCJzdWdnZXN0aW9uLXdyYXBwZXJcIiByb2xlPVwibGlzdGJveFwiICpuZ0lmPVwic2hvd1N1Z2dlc3Rpb25cIj5cbiAgICA8ZGl2ICpuZ0lmPVwiZmluYWxSZXN1bHRzKCkubGVuZ3RoID4gMFwiIGNsYXNzPVwibnh0LXN1Z2dlc3Rpb25zLWNvbnRhaW5lclwiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaW5hbFJlc3VsdHMoKTsgdHJhY2tCeTogdHJhY2tCeUZuXCIgXG4gICAgICAgICAgIChjbGljayk9XCJjbGlja0l0ZW0oaXRlbSlcIiBcbiAgICAgICAgICAgY2xhc3M9XCJzdWdnZXN0aW9uLWl0ZW1cIiBcbiAgICAgICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImNsaWNrSXRlbShpdGVtKVwiXG4gICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cImNsaWNrSXRlbShpdGVtKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1jb250ZW50XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tZGV0YWlsc1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0udGh1bWJuYWlsXCIgY2xhc3M9XCJ0aHVtYm5haWwtd3JhcHBlclwiPlxuICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaXRlbS50aHVtYm5haWxcIiBbYWx0XT1cIml0ZW0ubmFtZSArICcgYXZhdGFyJ1wiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLXRleHRcIj5cbiAgICAgICAgICAgICAgPCEtLSBQcmltYXJ5IHRleHQgKGZpcnN0IGtleSkgLS0+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRLZXlzKGdldFZhbHVlcyhpdGVtLCBTZWFyY2hJdGVtKSkubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLW5hbWUgcHJpbWFyeVwiIFxuICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJoaWdobGlnaHRUZXh0KGdldFZhbHVlcyhpdGVtLCBTZWFyY2hJdGVtKVtnZXRLZXlzKGdldFZhbHVlcyhpdGVtLCBTZWFyY2hJdGVtKSlbMF1dLCBzZWFyY2hLZXlXb3JkKVwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDwhLS0gU2Vjb25kYXJ5IHRleHQgKHJlbWFpbmluZyBrZXlzKSAtLT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tc2Vjb25kYXJ5XCIgKm5nSWY9XCJnZXRLZXlzKGdldFZhbHVlcyhpdGVtLCBTZWFyY2hJdGVtKSkubGVuZ3RoID4gMVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGtleSBvZiBnZXRLZXlzKGdldFZhbHVlcyhpdGVtLCBTZWFyY2hJdGVtKSk7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlY29uZGFyeS10ZXh0XCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiaGlnaGxpZ2h0VGV4dChnZXRWYWx1ZXMoaXRlbSwgU2VhcmNoSXRlbSlba2V5XSwgc2VhcmNoS2V5V29yZClcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlcGFyYXRvclwiICpuZ0lmPVwiaSA8IGdldEtleXMoZ2V0VmFsdWVzKGl0ZW0sIFNlYXJjaEl0ZW0pKS5sZW5ndGggLSAxXCI+IHwgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwibm9SZXN1bHQgJiYgc2VhcmNoS2V5V29yZFwiIGNsYXNzPVwibm8tcmVzdWx0c1wiPlxuICAgICAgPGRpdiBjbGFzcz1cIm5vLXJlc3VsdHMtY29udGVudFwiPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjFcIj5cbiAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTFcIiBjeT1cIjExXCIgcj1cIjhcIj48L2NpcmNsZT5cbiAgICAgICAgICA8cGF0aCBkPVwibTIxIDIxLTQuMzUtNC4zNVwiPjwvcGF0aD5cbiAgICAgICAgPC9zdmc+XG4gICAgICAgIDxwPnt7ICdOT19SRVNVTFRTX0ZPVU5EJyB8IG54dEN1c3RvbVRyYW5zbGF0ZSA6ICdObyByZXN1bHRzIGZvdW5kIGZvcicgfX0gXCJ7e3NlYXJjaEtleVdvcmR9fVwiPC9wPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+Il19
@@ -14,17 +14,17 @@ import * as arI18n from './ar.i18n';
14
14
  import * as tamI18n from './tam.i18n';
15
15
  import { I18nService } from './i18n.service';
16
16
  //AP 22JAN2025 Added the FormBuilderService
17
- import { FormBuilderService } from './services/form-builder.service';
18
17
  import { NxtDatatable } from './components/datatable/datatable.component';
19
- import { PdfDesignerService } from './services/pdf-designer.service';
20
18
  import { PdfDesignerComponent } from './pages/pdfDesigner/pdf-designer/pdf-designer.component';
21
19
  import { NxtButtonComponent } from './components/button/nxt-button.component';
22
20
  import { NxtInput } from './components/nxt-input/nxt-input.component';
23
21
  import { FormComponent } from './pages/builder/form/form.component';
24
22
  import { ListViewFilterComponent } from './components/list-view-filter/list-view-filter.component';
25
23
  import { NxtSearchBox } from './components/search-box/search-box.component';
26
- import { TranslationService } from './services/translation.service';
27
24
  import { IconSelectorComponent } from '../public-api'; //MSM10JUL25 import icon selector component
25
+ import { TranslationService } from './services/translation/translation.service';
26
+ import { FormBuilderService } from './services/form-builder/form-builder.service';
27
+ import { PdfDesignerService } from './services/pdf-designer/pdf-designer.service';
28
28
  import * as i0 from "@angular/core";
29
29
  import * as i1 from "./i18n.module";
30
30
  export function initializeApp(translationService) {
@@ -136,4 +136,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
136
136
  ]
137
137
  }]
138
138
  }] });
139
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnh0LWFwcC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvbnh0LWFwcC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxzQkFBc0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0Msc0NBQXNDO0FBQ3RDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdkMsT0FBTyxLQUFLLE1BQU0sTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxLQUFLLE1BQU0sTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxLQUFLLE9BQU8sTUFBTSxZQUFZLENBQUE7QUFDckMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDMUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNB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QkFDOUIsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLE9BQU8sRUFBRSxDQUFDLGVBQWU7d0JBQ3ZCLHNCQUFzQjt3QkFDdEIsZ0JBQWdCO3dCQUNoQixZQUFZO3dCQUNaLFlBQVk7d0JBQ1osdUJBQXVCO3dCQUN2QixRQUFRO3dCQUNSLGtCQUFrQjt3QkFDbEIscUJBQXFCLEVBQUUsMkNBQTJDO3dCQUNsRSxvQkFBb0I7cUJBQ3JCO29CQUNELFNBQVMsRUFBRTt3QkFDVCxXQUFXO3dCQUNYLFFBQVE7d0JBQ1Isa0JBQWtCLEVBQUMsMkNBQTJDO3dCQUM5RCxrQkFBa0I7d0JBQ2xCLGtCQUFrQjt3QkFDbEI7NEJBQ0UsT0FBTyxFQUFFLGVBQWU7NEJBQ3hCLFVBQVUsRUFBRSxhQUFhOzRCQUN6QixJQUFJLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQzs0QkFDMUIsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgQVBQX0lOSVRJQUxJWkVSIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOeHRBcHBDb21wb25lbnQgfSBmcm9tICcuL254dC1hcHAuY29tcG9uZW50JztcbmltcG9ydCB7IFF1ZXN0aW9ubmFpcmVDb21wb25lbnQgfSBmcm9tICcuL3BhZ2VzL3F1ZXN0aW9ubmFpcmUvcXVlc3Rpb25uYWlyZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBRdWlsbE1vZHVsZSB9IGZyb20gJ25neC1xdWlsbCc7XG4vLyBWRCAyM0pBTjI0IHJlbW92ZWQgSHR0cENsaWVudE1vZHVsZVxuaW1wb3J0IHsgQm9va2xldENvbXBvbmVudCB9IGZyb20gJy4vcGFnZXMvYm9va2xldC9ib29rbGV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRdWVzdGlvbmJvb2tDb21wb25lbnQgfSBmcm9tICcuL3BhZ2VzL3F1ZXN0aW9uYm9vay9xdWVzdGlvbmJvb2suY29tcG9uZW50JztcbmltcG9ydCB7IEkxOG5Nb2R1bGUgfSBmcm9tICcuL2kxOG4ubW9kdWxlJ1xuaW1wb3J0IHsgSTE4bkNvbXBvbmVudCB9IGZyb20gJy4vaTE4bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSTE4blBpcGUgfSBmcm9tICcuL2kxOG4ucGlwZSc7XG5pbXBvcnQgKiBhcyBlbkkxOG4gZnJvbSAnLi9lbi5pMThuJztcbmltcG9ydCAqIGFzIGFySTE4biBmcm9tICcuL2FyLmkxOG4nO1xuaW1wb3J0ICogYXMgdGFtSTE4biBmcm9tICcuL3RhbS5pMThuJ1xuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuL2kxOG4uc2VydmljZSc7XG4vL0FQIDIySkFOMjAyNSBBZGRlZCB0aGUgRm9ybUJ1aWxkZXJTZXJ2aWNlXG5pbXBvcnQgeyBGb3JtQnVpbGRlclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2Zvcm0tYnVpbGRlci5zZXJ2aWNlJztcbmltcG9ydCB7IE54dERhdGF0YWJsZSB9IGZyb20gJy4vY29tcG9uZW50cy9kYXRhdGFibGUvZGF0YXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQZGZEZXNpZ25lclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3BkZi1kZXNpZ25lci5zZXJ2aWNlJztcbmltcG9ydCB7IFBkZkRlc2lnbmVyQ29tcG9uZW50IH0gZnJvbSAnLi9wYWdlcy9wZGZEZXNpZ25lci9wZGYtZGVzaWduZXIvcGRmLWRlc2lnbmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOeHRCdXR0b25Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYnV0dG9uL254dC1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IE54dElucHV0IH0gZnJvbSAnLi9jb21wb25lbnRzL254dC1pbnB1dC9ueHQtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1Db21wb25lbnQgfSBmcm9tICcuL3BhZ2VzL2J1aWxkZXIvZm9ybS9mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMaXN0Vmlld0ZpbHRlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9saXN0LXZpZXctZmlsdGVyL2xpc3Qtdmlldy1maWx0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IE54dFNlYXJjaEJveCB9IGZyb20gJy4vY29tcG9uZW50cy9zZWFyY2gtYm94L3NlYXJjaC1ib3guY29tcG9uZW50JztcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvdHJhbnNsYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBJY29uU2VsZWN0b3JDb21wb25lbnQgfSBmcm9tICcuLi9wdWJsaWMtYXBpJzsgLy9NU00xMEpVTDI1IGltcG9ydCBpY29uIHNlbGVjdG9yIGNvbXBvbmVudFxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbGl6ZUFwcCh0cmFuc2xhdGlvblNlcnZpY2U6IFRyYW5zbGF0aW9uU2VydmljZSkge1xuICByZXR1cm4gKCkgPT4gdHJhbnNsYXRpb25TZXJ2aWNlLmxvYWQoKTtcbn1cbiBcbi8vIEhBIDE5REVDMjMgdmFyaWFibGUgY3JlYXRlZCBmb3IgdHJhbnNsYXRpb25cbmNvbnN0IGxhbmd1YWdlcyA9IFtcbiAgLy8geyBsYW5nOiAnRU4nLCBmbGFnOiAnYXNzZXRzL2ltYWdlcy9lbi5pMThuLnBuZycsIGZpbGU6IGVuSTE4biB9LFxuICB7IGxhbmc6ICdFTicsIGZpbGU6IGVuSTE4biB9LFxuICB7IGxhbmc6ICdUQU0nLCBmaWxlOiB0YW1JMThuIH0sXG4gIHsgbGFuZzogJ0FSJywgZmlsZTogYXJJMThuIH1cbl1cblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbTnh0QXBwQ29tcG9uZW50LFxuICAgIEkxOG5Db21wb25lbnRcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsXG4gICAgTnh0RGF0YXRhYmxlLFxuICAgIE54dFNlYXJjaEJveCxcbiAgICBMaXN0Vmlld0ZpbHRlckNvbXBvbmVudCxcbiAgICBOeHRJbnB1dCxcbiAgICBRdWVzdGlvbm5haXJlQ29tcG9uZW50LFxuICAgIEJvb2tsZXRDb21wb25lbnQsXG4gICAgUXVlc3Rpb25ib29rQ29tcG9uZW50LFxuICAgIE54dEJ1dHRvbkNvbXBvbmVudCxcbiAgICBJY29uU2VsZWN0b3JDb21wb25lbnQsIC8vTVNNMTBKVUwyNSBpbXBvcnQgaWNvbiBzZWxlY3RvciBjb21wb25lbnRcbiAgICBQZGZEZXNpZ25lckNvbXBvbmVudCxcbiAgICBGb3JtQ29tcG9uZW50LFxuICAgIEkxOG5Nb2R1bGUuZm9yUm9vdChsYW5ndWFnZXMpXG4gIF0sXG4gIGJvb3RzdHJhcDogWyBOeHRBcHBDb21wb25lbnQgXSxcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuICBleHBvcnRzOiBbTnh0QXBwQ29tcG9uZW50LFxuICAgIFF1ZXN0aW9ubmFpcmVDb21wb25lbnQsXG4gICAgQm9va2xldENvbXBvbmVudCxcbiAgICBOeHREYXRhdGFibGUsXG4gICAgTnh0U2VhcmNoQm94LFxuICAgIExpc3RWaWV3RmlsdGVyQ29tcG9uZW50LFxuICAgIE54dElucHV0LFxuICAgIE54dEJ1dHRvbkNvbXBvbmVudCxcbiAgICBJY29uU2VsZWN0b3JDb21wb25lbnQsIC8vTVNNMTBKVUwyNSBleHBvcnQgaWNvbiBzZWxlY3RvciBjb21wb25lbnRcbiAgICBQZGZEZXNpZ25lckNvbXBvbmVudCxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgSTE4blNlcnZpY2UsXG4gICAgSTE4blBpcGUsXG4gICAgRm9ybUJ1aWxkZXJTZXJ2aWNlLC8vQVAgMjJKQU4yMDI1IEFkZGVkIHRoZSBGb3JtQnVpbGRlclNlcnZpY2VcbiAgICBQZGZEZXNpZ25lclNlcnZpY2UsXG4gICAgVHJhbnNsYXRpb25TZXJ2aWNlLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUixcbiAgICAgIHVzZUZhY3Rvcnk6IGluaXRpYWxpemVBcHAsXG4gICAgICBkZXBzOiBbVHJhbnNsYXRpb25TZXJ2aWNlXSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIE54dEFwcE1vZHVsZSB7IH1cbiJdfQ==
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnh0LWFwcC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvbnh0LWFwcC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxzQkFBc0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0Msc0NBQXNDO0FBQ3RDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdkMsT0FBTyxLQUFLLE1BQU0sTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxLQUFLLE1BQU0sTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxLQUFLLE9BQU8sTUFBTSxZQUFZLENBQUE7QUFDckMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDMUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDL0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMENB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QkFDOUIsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLE9BQU8sRUFBRSxDQUFDLGVBQWU7d0JBQ3ZCLHNCQUFzQjt3QkFDdEIsZ0JBQWdCO3dCQUNoQixZQUFZO3dCQUNaLFlBQVk7d0JBQ1osdUJBQXVCO3dCQUN2QixRQUFRO3dCQUNSLGtCQUFrQjt3QkFDbEIscUJBQXFCLEVBQUUsMkNBQTJDO3dCQUNsRSxvQkFBb0I7cUJBQ3JCO29CQUNELFNBQVMsRUFBRTt3QkFDVCxXQUFXO3dCQUNYLFFBQVE7d0JBQ1Isa0JBQWtCLEVBQUMsMkNBQTJDO3dCQUM5RCxrQkFBa0I7d0JBQ2xCLGtCQUFrQjt3QkFDbEI7NEJBQ0UsT0FBTyxFQUFFLGVBQWU7NEJBQ3hCLFVBQVUsRUFBRSxhQUFhOzRCQUN6QixJQUFJLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQzs0QkFDMUIsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgQVBQX0lOSVRJQUxJWkVSIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOeHRBcHBDb21wb25lbnQgfSBmcm9tICcuL254dC1hcHAuY29tcG9uZW50JztcbmltcG9ydCB7IFF1ZXN0aW9ubmFpcmVDb21wb25lbnQgfSBmcm9tICcuL3BhZ2VzL3F1ZXN0aW9ubmFpcmUvcXVlc3Rpb25uYWlyZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBRdWlsbE1vZHVsZSB9IGZyb20gJ25neC1xdWlsbCc7XG4vLyBWRCAyM0pBTjI0IHJlbW92ZWQgSHR0cENsaWVudE1vZHVsZVxuaW1wb3J0IHsgQm9va2xldENvbXBvbmVudCB9IGZyb20gJy4vcGFnZXMvYm9va2xldC9ib29rbGV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRdWVzdGlvbmJvb2tDb21wb25lbnQgfSBmcm9tICcuL3BhZ2VzL3F1ZXN0aW9uYm9vay9xdWVzdGlvbmJvb2suY29tcG9uZW50JztcbmltcG9ydCB7IEkxOG5Nb2R1bGUgfSBmcm9tICcuL2kxOG4ubW9kdWxlJ1xuaW1wb3J0IHsgSTE4bkNvbXBvbmVudCB9IGZyb20gJy4vaTE4bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSTE4blBpcGUgfSBmcm9tICcuL2kxOG4ucGlwZSc7XG5pbXBvcnQgKiBhcyBlbkkxOG4gZnJvbSAnLi9lbi5pMThuJztcbmltcG9ydCAqIGFzIGFySTE4biBmcm9tICcuL2FyLmkxOG4nO1xuaW1wb3J0ICogYXMgdGFtSTE4biBmcm9tICcuL3RhbS5pMThuJ1xuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuL2kxOG4uc2VydmljZSc7XG4vL0FQIDIySkFOMjAyNSBBZGRlZCB0aGUgRm9ybUJ1aWxkZXJTZXJ2aWNlXG5pbXBvcnQgeyBOeHREYXRhdGFibGUgfSBmcm9tICcuL2NvbXBvbmVudHMvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGRmRGVzaWduZXJDb21wb25lbnQgfSBmcm9tICcuL3BhZ2VzL3BkZkRlc2lnbmVyL3BkZi1kZXNpZ25lci9wZGYtZGVzaWduZXIuY29tcG9uZW50JztcbmltcG9ydCB7IE54dEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9idXR0b24vbnh0LWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTnh0SW5wdXQgfSBmcm9tICcuL2NvbXBvbmVudHMvbnh0LWlucHV0L254dC1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybUNvbXBvbmVudCB9IGZyb20gJy4vcGFnZXMvYnVpbGRlci9mb3JtL2Zvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IExpc3RWaWV3RmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2xpc3Qtdmlldy1maWx0ZXIvbGlzdC12aWV3LWZpbHRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTnh0U2VhcmNoQm94IH0gZnJvbSAnLi9jb21wb25lbnRzL3NlYXJjaC1ib3gvc2VhcmNoLWJveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWNvblNlbGVjdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vcHVibGljLWFwaSc7IC8vTVNNMTBKVUwyNSBpbXBvcnQgaWNvbiBzZWxlY3RvciBjb21wb25lbnRcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvdHJhbnNsYXRpb24vdHJhbnNsYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2Zvcm0tYnVpbGRlci9mb3JtLWJ1aWxkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQZGZEZXNpZ25lclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3BkZi1kZXNpZ25lci9wZGYtZGVzaWduZXIuc2VydmljZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplQXBwKHRyYW5zbGF0aW9uU2VydmljZTogVHJhbnNsYXRpb25TZXJ2aWNlKSB7XG4gIHJldHVybiAoKSA9PiB0cmFuc2xhdGlvblNlcnZpY2UubG9hZCgpO1xufVxuIFxuLy8gSEEgMTlERUMyMyB2YXJpYWJsZSBjcmVhdGVkIGZvciB0cmFuc2xhdGlvblxuY29uc3QgbGFuZ3VhZ2VzID0gW1xuICAvLyB7IGxhbmc6ICdFTicsIGZsYWc6ICdhc3NldHMvaW1hZ2VzL2VuLmkxOG4ucG5nJywgZmlsZTogZW5JMThuIH0sXG4gIHsgbGFuZzogJ0VOJywgZmlsZTogZW5JMThuIH0sXG4gIHsgbGFuZzogJ1RBTScsIGZpbGU6IHRhbUkxOG4gfSxcbiAgeyBsYW5nOiAnQVInLCBmaWxlOiBhckkxOG4gfVxuXVxuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtOeHRBcHBDb21wb25lbnQsXG4gICAgSTE4bkNvbXBvbmVudFxuICBdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSxcbiAgICBOeHREYXRhdGFibGUsXG4gICAgTnh0U2VhcmNoQm94LFxuICAgIExpc3RWaWV3RmlsdGVyQ29tcG9uZW50LFxuICAgIE54dElucHV0LFxuICAgIFF1ZXN0aW9ubmFpcmVDb21wb25lbnQsXG4gICAgQm9va2xldENvbXBvbmVudCxcbiAgICBRdWVzdGlvbmJvb2tDb21wb25lbnQsXG4gICAgTnh0QnV0dG9uQ29tcG9uZW50LFxuICAgIEljb25TZWxlY3RvckNvbXBvbmVudCwgLy9NU00xMEpVTDI1IGltcG9ydCBpY29uIHNlbGVjdG9yIGNvbXBvbmVudFxuICAgIFBkZkRlc2lnbmVyQ29tcG9uZW50LFxuICAgIEZvcm1Db21wb25lbnQsXG4gICAgSTE4bk1vZHVsZS5mb3JSb290KGxhbmd1YWdlcylcbiAgXSxcbiAgYm9vdHN0cmFwOiBbIE54dEFwcENvbXBvbmVudCBdLFxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG4gIGV4cG9ydHM6IFtOeHRBcHBDb21wb25lbnQsXG4gICAgUXVlc3Rpb25uYWlyZUNvbXBvbmVudCxcbiAgICBCb29rbGV0Q29tcG9uZW50LFxuICAgIE54dERhdGF0YWJsZSxcbiAgICBOeHRTZWFyY2hCb3gsXG4gICAgTGlzdFZpZXdGaWx0ZXJDb21wb25lbnQsXG4gICAgTnh0SW5wdXQsXG4gICAgTnh0QnV0dG9uQ29tcG9uZW50LFxuICAgIEljb25TZWxlY3RvckNvbXBvbmVudCwgLy9NU00xMEpVTDI1IGV4cG9ydCBpY29uIHNlbGVjdG9yIGNvbXBvbmVudFxuICAgIFBkZkRlc2lnbmVyQ29tcG9uZW50LFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICBJMThuU2VydmljZSxcbiAgICBJMThuUGlwZSxcbiAgICBGb3JtQnVpbGRlclNlcnZpY2UsLy9BUCAyMkpBTjIwMjUgQWRkZWQgdGhlIEZvcm1CdWlsZGVyU2VydmljZVxuICAgIFBkZkRlc2lnbmVyU2VydmljZSxcbiAgICBUcmFuc2xhdGlvblNlcnZpY2UsXG4gICAge1xuICAgICAgcHJvdmlkZTogQVBQX0lOSVRJQUxJWkVSLFxuICAgICAgdXNlRmFjdG9yeTogaW5pdGlhbGl6ZUFwcCxcbiAgICAgIGRlcHM6IFtUcmFuc2xhdGlvblNlcnZpY2VdLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTnh0QXBwTW9kdWxlIHsgfVxuIl19