@rangertechnologies/ngnxt 2.1.208 → 2.1.209

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.
@@ -9,7 +9,7 @@ export const VERSION = {
9
9
  "semver": null,
10
10
  "suffix": "73e492bd-dirty",
11
11
  "semverString": null,
12
- "version": "2.1.208"
12
+ "version": "2.1.209"
13
13
  };
14
14
  /* tslint:enable */
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2Vudmlyb25tZW50cy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJFQUEyRTtBQUMzRSxvQkFBb0I7QUFDcEIsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHO0lBQ25CLE9BQU8sRUFBRSxJQUFJO0lBQ2IsS0FBSyxFQUFFLGdCQUFnQjtJQUN2QixNQUFNLEVBQUUsVUFBVTtJQUNsQixVQUFVLEVBQUUsSUFBSTtJQUNoQixLQUFLLEVBQUUsSUFBSTtJQUNYLFFBQVEsRUFBRSxJQUFJO0lBQ2QsUUFBUSxFQUFFLGdCQUFnQjtJQUMxQixjQUFjLEVBQUUsSUFBSTtJQUNwQixTQUFTLEVBQUUsU0FBUztDQUN2QixDQUFDO0FBQ0YsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSU1QT1JUQU5UOiBUSElTIEZJTEUgSVMgQVVUTyBHRU5FUkFURUQhIERPIE5PVCBNQU5VQUxMWSBFRElUIE9SIENIRUNLSU4hXG4vKiB0c2xpbnQ6ZGlzYWJsZSAqL1xuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSB7XG4gICAgXCJkaXJ0eVwiOiB0cnVlLFxuICAgIFwicmF3XCI6IFwiNzNlNDkyYmQtZGlydHlcIixcbiAgICBcImhhc2hcIjogXCI3M2U0OTJiZFwiLFxuICAgIFwiZGlzdGFuY2VcIjogbnVsbCxcbiAgICBcInRhZ1wiOiBudWxsLFxuICAgIFwic2VtdmVyXCI6IG51bGwsXG4gICAgXCJzdWZmaXhcIjogXCI3M2U0OTJiZC1kaXJ0eVwiLFxuICAgIFwic2VtdmVyU3RyaW5nXCI6IG51bGwsXG4gICAgXCJ2ZXJzaW9uXCI6IFwiMi4xLjIwOFwiXG59O1xuLyogdHNsaW50OmVuYWJsZSAqL1xuIl19
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2Vudmlyb25tZW50cy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJFQUEyRTtBQUMzRSxvQkFBb0I7QUFDcEIsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHO0lBQ25CLE9BQU8sRUFBRSxJQUFJO0lBQ2IsS0FBSyxFQUFFLGdCQUFnQjtJQUN2QixNQUFNLEVBQUUsVUFBVTtJQUNsQixVQUFVLEVBQUUsSUFBSTtJQUNoQixLQUFLLEVBQUUsSUFBSTtJQUNYLFFBQVEsRUFBRSxJQUFJO0lBQ2QsUUFBUSxFQUFFLGdCQUFnQjtJQUMxQixjQUFjLEVBQUUsSUFBSTtJQUNwQixTQUFTLEVBQUUsU0FBUztDQUN2QixDQUFDO0FBQ0YsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSU1QT1JUQU5UOiBUSElTIEZJTEUgSVMgQVVUTyBHRU5FUkFURUQhIERPIE5PVCBNQU5VQUxMWSBFRElUIE9SIENIRUNLSU4hXG4vKiB0c2xpbnQ6ZGlzYWJsZSAqL1xuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSB7XG4gICAgXCJkaXJ0eVwiOiB0cnVlLFxuICAgIFwicmF3XCI6IFwiNzNlNDkyYmQtZGlydHlcIixcbiAgICBcImhhc2hcIjogXCI3M2U0OTJiZFwiLFxuICAgIFwiZGlzdGFuY2VcIjogbnVsbCxcbiAgICBcInRhZ1wiOiBudWxsLFxuICAgIFwic2VtdmVyXCI6IG51bGwsXG4gICAgXCJzdWZmaXhcIjogXCI3M2U0OTJiZC1kaXJ0eVwiLFxuICAgIFwic2VtdmVyU3RyaW5nXCI6IG51bGwsXG4gICAgXCJ2ZXJzaW9uXCI6IFwiMi4xLjIwOVwiXG59O1xuLyogdHNsaW50OmVuYWJsZSAqL1xuIl19
@@ -7,10 +7,12 @@ import { NxtInput } from "../nxt-input/nxt-input.component";
7
7
  import * as i0 from "@angular/core";
8
8
  import * as i1 from "../../services/data.service";
9
9
  import * as i2 from "../../i18n.service";
10
- import * as i3 from "@angular/common";
10
+ import * as i3 from "../../services/country.service";
11
+ import * as i4 from "@angular/common";
11
12
  export class SearchBoxComponent {
12
13
  dataService;
13
14
  i18nService;
15
+ countryService;
14
16
  placeHolderText;
15
17
  question;
16
18
  apiMeta;
@@ -33,9 +35,10 @@ export class SearchBoxComponent {
33
35
  viewFilterName;
34
36
  isSingleFieldChange = false;
35
37
  valueObj;
36
- constructor(dataService, i18nService) {
38
+ constructor(dataService, i18nService, countryService) {
37
39
  this.dataService = dataService;
38
40
  this.i18nService = i18nService;
41
+ this.countryService = countryService;
39
42
  }
40
43
  ngOnInit() {
41
44
  // VD 03May- search changes
@@ -99,16 +102,40 @@ export class SearchBoxComponent {
99
102
  // MSM-27MAR25 Ensure ques.subText is always an object by parsing it if it's a string
100
103
  if (this.apiMeta) {
101
104
  this.apiMeta = typeof this.apiMeta === 'object' ? this.apiMeta : JSON.parse(this.apiMeta);
102
- this.isLoading = true;
103
- this.dataService.apiResponse(this.apiMeta.endpoint).subscribe((apiResponse) => {
104
- this.isLoading = false;
105
+ if (!this.apiMeta.isStaticData) {
106
+ this.isLoading = true;
107
+ this.dataService.apiResponse(this.apiMeta.endpoint).subscribe((apiResponse) => {
108
+ this.isLoading = false;
109
+ let response;
110
+ if (this.apiMeta.variable) {
111
+ response = this.dataService.getValue(apiResponse, this.apiMeta.variable);
112
+ }
113
+ else {
114
+ response = apiResponse;
115
+ }
116
+ let results = [];
117
+ let searchTerms = keyword.toLowerCase()?.split(" ");
118
+ for (let i = 0; i < response.length; i++) {
119
+ let obj = response[i];
120
+ let combinedValues = this.getCombinedValuesFromColumns(obj, this.apiMeta.field);
121
+ let match = searchTerms.every(term => combinedValues.includes(term));
122
+ if (match) {
123
+ results.push(obj);
124
+ }
125
+ }
126
+ this.noResult = results.length === 0;
127
+ this.finalResults.set(results);
128
+ }, (error) => {
129
+ console.error('API error:', error);
130
+ this.isLoading = false;
131
+ this.noResult = true;
132
+ this.finalResults.set([]);
133
+ ;
134
+ });
135
+ }
136
+ else { // SKS24JUN25 Get language and country name locally from data
105
137
  let response;
106
- if (this.apiMeta.variable) {
107
- response = this.dataService.getValue(apiResponse, this.apiMeta.variable);
108
- }
109
- else {
110
- response = apiResponse;
111
- }
138
+ response = this.countryService.getCountryData(this.apiMeta.field);
112
139
  let results = [];
113
140
  let searchTerms = keyword.toLowerCase()?.split(" ");
114
141
  for (let i = 0; i < response.length; i++) {
@@ -121,13 +148,7 @@ export class SearchBoxComponent {
121
148
  }
122
149
  this.noResult = results.length === 0;
123
150
  this.finalResults.set(results);
124
- }, (error) => {
125
- console.error('API error:', error);
126
- this.isLoading = false;
127
- this.noResult = true;
128
- this.finalResults.set([]);
129
- ;
130
- });
151
+ }
131
152
  }
132
153
  };
133
154
  // SKS27FEB Helper functions
@@ -228,8 +249,8 @@ export class SearchBoxComponent {
228
249
  }
229
250
  }
230
251
  }
231
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchBoxComponent, deps: [{ token: i1.DataService }, { token: i2.I18nService }], target: i0.ɵɵFactoryTarget.Component });
232
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SearchBoxComponent, isStandalone: true, selector: "lib-search-box", inputs: { placeHolderText: "placeHolderText", question: "question", apiMeta: "apiMeta", id: "id", readOnly: "readOnly", mode: "mode", filterName: "filterName" }, outputs: { searchValueChange: "searchValueChange" }, usesOnChanges: true, ngImport: i0, template: "<!-- VD 12Jun24 - readonly change -->\n<div class=\"search-wrapper\">\n <nxt-input [type]=\"'list'\" [mode]=\"mode\" [value]=\"filterName\"\n [labelFont]=\"question.font\" [label]=\"removeCharacters(question?.questionText)\" [labelColor]=\"question.fontColor\"\n [labelSize]=\"question.fontSize\" [inputValueSize]=\"question.fontSize\" [labelWeight]=\"question.fontWeight\"\n [inputWeight]=\"question.fontWeight\" [showLabel]=\"question.style?.showLabel\" inputBorder=\"none\" svgHeight=\"20px\"\n svgWidth=\"20px\" [placeholder]=\"placeHolderText\" [required]=\"question.isOptional\" inputBgColor=\"#FAFAFA\"\n [inputId]=\"question.trackingId\" [errorMessages]=\"{ required: 'This field is required' }\"\n [inputIconLeftSrc]=\"question.iconLeftSrc\" (inputValue)=\"getSourceDataLocal($event); inputValue($event.value,$event.question)\" (onBlur)=\"clearList()\"\n [showSuggestion]=\"showSuggestion\" ariaOwns=\"selectList\" ariaHasPopup=\"listbox\" [isLoading]=\"isLoading\" [question]=\"question\">\n </nxt-input>\n\n <div id=\"selectList\" class=\"suggestion-wrapper\" role=\"listbox\">\n <div *ngIf=\"finalResults().length > 0 && showSuggestion\" class=\"suggestions-container\">\n <div *ngFor=\"let item of finalResults()\" (click)=\"clickItem(item)\" class=\"suggestion-item\" role=\"option\">\n <div class=\"grid-x align-middle\">\n <div *ngIf=\"item.thumbnail\" class=\"cell shrink thumbnail-wrapper\">\n <img [src]=\"item.thumbnail\" alt=\"Thumbnail\">\n </div>\n\n <div class=\"cell auto item-details\">\n <div *ngFor=\"let key of getKeys(getValues(item, SearchItem))\" class=\"item-value\">\n {{ getValues(item, SearchItem)[key] }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>", styles: [".suggestion-wrapper{position:absolute;top:100%;left:0;background:#fff;z-index:2}.search-wrapper{position:relative}.suggestions-container{max-height:20vh;border:1px solid #d2d4d6;overflow:auto;min-width:100px}.suggestion-item{cursor:pointer}.thumbnail-wrapper{width:60px;margin-right:1.6rem}.thumbnail-wrapper img{width:60px}.item-details{text-align:left;padding:5px 8px 0;display:flex;gap:5px}.item-value{display:flex}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: 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", "size"], outputs: ["valueChange", "inputValue", "onBlur", "onFocus", "toggleEmit", "nativeInputRef"] }] });
252
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchBoxComponent, deps: [{ token: i1.DataService }, { token: i2.I18nService }, { token: i3.CountryService }], target: i0.ɵɵFactoryTarget.Component });
253
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SearchBoxComponent, isStandalone: true, selector: "lib-search-box", inputs: { placeHolderText: "placeHolderText", question: "question", apiMeta: "apiMeta", id: "id", readOnly: "readOnly", mode: "mode", filterName: "filterName" }, outputs: { searchValueChange: "searchValueChange" }, usesOnChanges: true, ngImport: i0, template: "<!-- VD 12Jun24 - readonly change -->\n<div class=\"search-wrapper\">\n <nxt-input [type]=\"'list'\" [mode]=\"mode\" [value]=\"filterName\"\n [labelFont]=\"question.font\" [label]=\"removeCharacters(question?.questionText)\" [labelColor]=\"question.fontColor\"\n [labelSize]=\"question.fontSize\" [inputValueSize]=\"question.fontSize\" [labelWeight]=\"question.fontWeight\"\n [inputWeight]=\"question.fontWeight\" [showLabel]=\"question.style?.showLabel\" inputBorder=\"none\" svgHeight=\"20px\"\n svgWidth=\"20px\" [placeholder]=\"placeHolderText\" [required]=\"question.isOptional\" inputBgColor=\"#FAFAFA\"\n [inputId]=\"question.trackingId\" [errorMessages]=\"{ required: 'This field is required' }\"\n [inputIconLeftSrc]=\"question.iconLeftSrc\" (inputValue)=\"getSourceDataLocal($event); inputValue($event.value,$event.question)\" (onBlur)=\"clearList()\"\n [showSuggestion]=\"showSuggestion\" ariaOwns=\"selectList\" ariaHasPopup=\"listbox\" [isLoading]=\"isLoading\" [question]=\"question\">\n </nxt-input>\n\n <div id=\"selectList\" class=\"suggestion-wrapper\" role=\"listbox\">\n <div *ngIf=\"finalResults().length > 0 && showSuggestion\" class=\"suggestions-container\">\n <div *ngFor=\"let item of finalResults()\" (click)=\"clickItem(item)\" class=\"suggestion-item\" role=\"option\">\n <div class=\"grid-x align-middle\">\n <div *ngIf=\"item.thumbnail\" class=\"cell shrink thumbnail-wrapper\">\n <img [src]=\"item.thumbnail\" alt=\"Thumbnail\">\n </div>\n\n <div class=\"cell auto item-details\">\n <div *ngFor=\"let key of getKeys(getValues(item, SearchItem))\" class=\"item-value\">\n {{ getValues(item, SearchItem)[key] }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>", styles: [".suggestion-wrapper{position:absolute;top:100%;left:0;background:#fff;z-index:2}.search-wrapper{position:relative}.suggestions-container{max-height:20vh;border:1px solid #d2d4d6;overflow:auto;min-width:100px}.suggestion-item{cursor:pointer}.thumbnail-wrapper{width:60px;margin-right:1.6rem}.thumbnail-wrapper img{width:60px}.item-details{text-align:left;padding:5px 8px 0;display:flex;gap:5px}.item-value{display:flex}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.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", "size"], outputs: ["valueChange", "inputValue", "onBlur", "onFocus", "toggleEmit", "nativeInputRef"] }] });
233
254
  }
234
255
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchBoxComponent, decorators: [{
235
256
  type: Component,
@@ -238,7 +259,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
238
259
  FormsModule,
239
260
  NxtInput
240
261
  ], template: "<!-- VD 12Jun24 - readonly change -->\n<div class=\"search-wrapper\">\n <nxt-input [type]=\"'list'\" [mode]=\"mode\" [value]=\"filterName\"\n [labelFont]=\"question.font\" [label]=\"removeCharacters(question?.questionText)\" [labelColor]=\"question.fontColor\"\n [labelSize]=\"question.fontSize\" [inputValueSize]=\"question.fontSize\" [labelWeight]=\"question.fontWeight\"\n [inputWeight]=\"question.fontWeight\" [showLabel]=\"question.style?.showLabel\" inputBorder=\"none\" svgHeight=\"20px\"\n svgWidth=\"20px\" [placeholder]=\"placeHolderText\" [required]=\"question.isOptional\" inputBgColor=\"#FAFAFA\"\n [inputId]=\"question.trackingId\" [errorMessages]=\"{ required: 'This field is required' }\"\n [inputIconLeftSrc]=\"question.iconLeftSrc\" (inputValue)=\"getSourceDataLocal($event); inputValue($event.value,$event.question)\" (onBlur)=\"clearList()\"\n [showSuggestion]=\"showSuggestion\" ariaOwns=\"selectList\" ariaHasPopup=\"listbox\" [isLoading]=\"isLoading\" [question]=\"question\">\n </nxt-input>\n\n <div id=\"selectList\" class=\"suggestion-wrapper\" role=\"listbox\">\n <div *ngIf=\"finalResults().length > 0 && showSuggestion\" class=\"suggestions-container\">\n <div *ngFor=\"let item of finalResults()\" (click)=\"clickItem(item)\" class=\"suggestion-item\" role=\"option\">\n <div class=\"grid-x align-middle\">\n <div *ngIf=\"item.thumbnail\" class=\"cell shrink thumbnail-wrapper\">\n <img [src]=\"item.thumbnail\" alt=\"Thumbnail\">\n </div>\n\n <div class=\"cell auto item-details\">\n <div *ngFor=\"let key of getKeys(getValues(item, SearchItem))\" class=\"item-value\">\n {{ getValues(item, SearchItem)[key] }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>", styles: [".suggestion-wrapper{position:absolute;top:100%;left:0;background:#fff;z-index:2}.search-wrapper{position:relative}.suggestions-container{max-height:20vh;border:1px solid #d2d4d6;overflow:auto;min-width:100px}.suggestion-item{cursor:pointer}.thumbnail-wrapper{width:60px;margin-right:1.6rem}.thumbnail-wrapper img{width:60px}.item-details{text-align:left;padding:5px 8px 0;display:flex;gap:5px}.item-value{display:flex}\n"] }]
241
- }], ctorParameters: () => [{ type: i1.DataService }, { type: i2.I18nService }], propDecorators: { placeHolderText: [{
262
+ }], ctorParameters: () => [{ type: i1.DataService }, { type: i2.I18nService }, { type: i3.CountryService }], propDecorators: { placeHolderText: [{
242
263
  type: Input
243
264
  }], question: [{
244
265
  type: Input
@@ -255,4 +276,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
255
276
  }], filterName: [{
256
277
  type: Input
257
278
  }] } });
258
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvY29tcG9uZW50cy9zZWFyY2gtYm94L3NlYXJjaC1ib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvc2VhcmNoLWJveC9zZWFyY2gtYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBRUUsTUFBTSxFQUNyQixNQUFNLGVBQWUsQ0FBQztBQUV2QixxRUFBcUU7QUFDckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7OztBQWE1RCxNQUFNLE9BQU8sa0JBQWtCO0lBMEJSO0lBQWlDO0lBekI3QyxlQUFlLENBQVM7SUFFeEIsUUFBUSxDQUFDO0lBQ1QsT0FBTyxDQUFNO0lBQ2IsRUFBRSxDQUFTO0lBQ1gsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLCtCQUErQjtJQUNqRCxJQUFJLEdBQThCLE1BQU0sQ0FBQyxDQUFDLDRCQUE0QjtJQUNyRSxpQkFBaUIsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUN4RSxVQUFVLENBQU07SUFFUixVQUFVLENBQVMsQ0FBQyx5Q0FBeUM7SUFDL0QsWUFBWSxHQUEwQixNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakQsYUFBYSxHQUFXLEVBQUUsQ0FBQztJQUMzQixTQUFTLENBQU07SUFDZixVQUFV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QUFpQjtzQkFBMUIsTUFBTTtnQkFHRSxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgVmlld0NoaWxkLFxuICBTaW1wbGVDaGFuZ2VzLHNpZ25hbCwgV3JpdGFibGVTaWduYWxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS5zZXJ2aWNlJztcbi8vIFZEIDIzSkFOMjQgcmVtb3ZlZCBodHRwQ2xpZW50IGltcG9ydCB1c2VkIHNlcnZpY2UgZmlsZSBmb3IgY2FsbG91dFxuaW1wb3J0IHsgQ2hhbmdlV3JhcHBlciB9IGZyb20gXCIuLi8uLi9tb2RlbC9jaGFuZ2VXcmFwcGVyXCI7XG4vLyBIQSAxOURFQzIzIGltcG9ydGVkIHRyYW5zbGF0aW9uIHNlcnZpY2VcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2kxOG4uc2VydmljZVwiO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IE54dElucHV0IH0gZnJvbSBcIi4uL254dC1pbnB1dC9ueHQtaW5wdXQuY29tcG9uZW50XCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1zZWFyY2gtYm94JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBOeHRJbnB1dFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VhcmNoLWJveC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NlYXJjaC1ib3guY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIFNlYXJjaEJveENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHBsYWNlSG9sZGVyVGV4dDogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIHF1ZXN0aW9uO1xuICBASW5wdXQoKSBhcGlNZXRhOiBhbnk7XG4gIEBJbnB1dCgpIGlkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHJlYWRPbmx5ID0gZmFsc2U7IC8vIFZEIDEySnVuMjQgLSByZWFkb25seSBjaGFuZ2VcbiAgQElucHV0KCkgbW9kZTogJ3ZpZXcnIHwgJ2VkaXQnIHwgJ3ByaW50JyA9ICdlZGl0JzsgLy8gU0tTMTFKVU4yNSBOZXcgbW9kZSBpbnB1dFxuICBAT3V0cHV0KCkgc2VhcmNoVmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICBTZWFyY2hJdGVtOiBhbnk7XG5cbiAgQElucHV0KCkgZmlsdGVyTmFtZTogc3RyaW5nOyAvLyBWRCAyMEF1ZyBkZWZhdWx0IGZpbHRlciB2YWx1ZSBhcyBpbnB1dFxuICBwdWJsaWMgZmluYWxSZXN1bHRzOiBXcml0YWJsZVNpZ25hbDxhbnlbXT4gPSBzaWduYWwoW10pO1xuICBwdWJsaWMgc2VhcmNoS2V5V29yZDogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBuZXdSZXN1bHQ6IGFueTtcbiAgcHVibGljIHNob3dSZXN1bHQgPSBmYWxzZTtcbiAgcHVibGljIG5vUmVzdWx0ID0gZmFsc2U7XG4gIHB1YmxpYyBzaG93U3VnZ2VzdGlvbiA9IGZhbHNlO1xuICBwcml2YXRlIGVsOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBzZXJ2OiBzdHJpbmcgPSAnYXBpJztcbiAgcHJpdmF0ZSB0a246IHN0cmluZyA9ICcnO1xuICBpc0xvYWRpbmcgPSBmYWxzZVxuICB2aWV3RmlsdGVyTmFtZSA6IHN0cmluZztcbiAgaXNTaW5nbGVGaWVsZENoYW5nZSA9IGZhbHNlO1xuICB2YWx1ZU9iaiA6IGFueTtcbiAgXG4gIGNvbnN0cnVjdG9yKCBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSwgcHVibGljIGkxOG5TZXJ2aWNlOiBJMThuU2VydmljZSkgeyB9XG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vICBWRCAwM01heS0gc2VhcmNoIGNoYW5nZXNcbiAgICAgLy8gQVAtMjZNQVIyNSBFbnN1cmUgcXVlcy5zdWJUZXh0IGlzIGFsd2F5cyBhbiBvYmplY3QgYnkgcGFyc2luZyBpdCBpZiBpdCdzIGEgc3RyaW5nXG4gICAgaWYodGhpcy5hcGlNZXRhKXtcbiAgICAgIHRoaXMuYXBpTWV0YSA9IHR5cGVvZiB0aGlzLmFwaU1ldGEgPT09ICdvYmplY3QnID8gdGhpcy5hcGlNZXRhIDogSlNPTi5wYXJzZSh0aGlzLmFwaU1ldGEpO1xuICAgICAgdGhpcy5TZWFyY2hJdGVtID0gdGhpcy5hcGlNZXRhLmZpZWxkO1xuICAgIH1cbiAgfVxuLy8vL1JTIDAzRkVCMjAyNVxuLy8gUmVzZXRzIHN0YXRlIHdoZW4gZmlsdGVyTmFtZSBvciBhcGlNZXRhIGNoYW5nZXMgdG8gcmVmbGVjdCB1cGRhdGVkIGRhdGFcbiAvLyBBUC0yNk1BUjI1IEVuc3VyZSBxdWVzLnN1YlRleHQgaXMgYWx3YXlzIGFuIG9iamVjdCBieSBwYXJzaW5nIGl0IGlmIGl0J3MgYSBzdHJpbmdcbm5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgaWYgKGNoYW5nZXNbJ21vZGUnXSkge1xuICAgIHRoaXMubW9kZSA9IGNoYW5nZXNbJ21vZGUnXS5jdXJyZW50VmFsdWU7XG4gIH1cbiAgaWYodGhpcy5tb2RlICE9PSAnZWRpdCcgJiYgdGhpcy5pc1NpbmdsZUZpZWxkQ2hhbmdlICYmIChjaGFuZ2VzLmZpbHRlck5hbWUucHJldmlvdXNWYWx1ZSAhPT0gIGNoYW5nZXMuZmlsdGVyTmFtZS5jdXJyZW50VmFsdWUpKSB7XG4gICAgdGhpcy5maWx0ZXJOYW1lID0gY2hhbmdlcy5maWx0ZXJOYW1lLnByZXZpb3VzVmFsdWVcbiAgfVxuICBpZiAoY2hhbmdlc1snYXBpTWV0YSddICYmIHRoaXMuYXBpTWV0YSkge1xuICAgIHRoaXMuYXBpTWV0YSA9IHR5cGVvZiB0aGlzLmFwaU1ldGEgPT09ICdvYmplY3QnID8gdGhpcy5hcGlNZXRhIDogSlNPTi5wYXJzZSh0aGlzLmFwaU1ldGEpO1xuICAgIHRoaXMuU2VhcmNoSXRlbSA9IHRoaXMuYXBpTWV0YT8uZmllbGQ7XG4gIH1cbn1cbi8vUlMgMDNGRUIyMDI1XG4vLyBDbGVhcnMgc2VhcmNoLXJlbGF0ZWQgZGF0YSwgaW5jbHVkaW5nIHJlc3VsdHMsIHNlYXJjaCB0ZXJtLCBhbmQgc3VnZ2VzdGlvbnMuXG5wcml2YXRlIHJlc2V0Q29tcG9uZW50U3RhdGUoKTogdm9pZCB7XG4gIHRoaXMuZmluYWxSZXN1bHRzLnNldChbXSk7O1xuICB0aGlzLmZpbHRlck5hbWUgPSAnJzsgXG4gIHRoaXMuc2VhcmNoS2V5V29yZCA9ICcnOyAgXG4gIHRoaXMuc2hvd1N1Z2dlc3Rpb24gPSBmYWxzZTtcbiAgdGhpcy5ub1Jlc3VsdCA9IGZhbHNlO1xufVxuY2xlYXJMaXN0KCl7XG4gIHNldFRpbWVvdXQoKCk9PiB7XG4gICAgdGhpcy5maW5hbFJlc3VsdHMuc2V0KFtdKTs7XG4gIH0sIDEwMDApO1xufVxuXG5nZXRTb3VyY2VEYXRhTG9jYWwoZXZlbnQ6IGFueSkgeyAvL3RvIGdldCByZXN1bHRzIGxpc3QgZnJvbSBiYWNrZW5kIEFQSSB3aGVuZXZlciBrZXkgaXMgdXAgYWZ0ZXIgdGhlIGVudGVyaW5nIGF0bGVhc3Qgb25lIGtleVxuICBpZiAoZXZlbnQudmFsdWUubGVuZ3RoID4gMiAmJiAhdGhpcy5pc1NpbmdsZUZpZWxkQ2hhbmdlKSB7XG4gICAgZXZlbnQucXVlc3Rpb24/LnNpbmdsZUZpZWxkQ2hhbmdlID8gdGhpcy5zaG93U3VnZ2VzdGlvbiA9IGZhbHNlIDogdGhpcy5zaG93U3VnZ2VzdGlvbiA9IHRydWU7XG4gICAgdGhpcy5maW5hbFJlc3VsdHMuc2V0KFtdKTtcbiAgICB0aGlzLnNlYXJjaEtleVdvcmQgPSBldmVudC52YWx1ZTtcbiAgICB0aGlzLnNob3dSZXN1bHQgPSBmYWxzZTtcbiAgICB0aGlzLmdldFNvdXJjZURhdGEoZXZlbnQudmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuaXNTaW5nbGVGaWVsZENoYW5nZSA9IGZhbHNlXG4gICAgdGhpcy5zaG93U3VnZ2VzdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuZmluYWxSZXN1bHRzLnNldChbXSk7XG4gICAgdGhpcy5ub1Jlc3VsdCA9IGZhbHNlO1xuICB9XG59XG4vLyBWRCAwM01heS0gc2VhcmNoIGNoYW5nZXNcbi8vIFZEIDMxTk9WMjQgbnVsbCBjaGVja1xuLy8gUlMgMjlKQU4yNVxuLy9NdWx0aS13b3JkIHNlYXJjaCBhY3Jvc3MgYWxsIG9iamVjdCB2YWx1ZXNcbnB1YmxpYyBnZXRTb3VyY2VEYXRhID0gKGtleXdvcmQ6IHN0cmluZykgPT4ge1xuICAgLy8gTVNNLTI3TUFSMjUgRW5zdXJlIHF1ZXMuc3ViVGV4dCBpcyBhbHdheXMgYW4gb2JqZWN0IGJ5IHBhcnNpbmcgaXQgaWYgaXQncyBhIHN0cmluZ1xuICBpZiAodGhpcy5hcGlNZXRhKSB7XG4gICAgICB0aGlzLmFwaU1ldGEgPSB0eXBlb2YgdGhpcy5hcGlNZXRhID09PSAnb2JqZWN0JyA/IHRoaXMuYXBpTWV0YSA6IEpTT04ucGFyc2UodGhpcy5hcGlNZXRhKTtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLmFwaVJlc3BvbnNlKHRoaXMuYXBpTWV0YS5lbmRwb2ludCkuc3Vic2NyaWJlKChhcGlSZXNwb25zZSkgPT4ge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgIGxldCByZXNwb25zZTtcbiAgICAgIGlmICh0aGlzLmFwaU1ldGEudmFyaWFibGUpIHtcbiAgICAgICAgcmVzcG9uc2UgPSB0aGlzLmRhdGFTZXJ2aWNlLmdldFZhbHVlKGFwaVJlc3BvbnNlLCB0aGlzLmFwaU1ldGEudmFyaWFibGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzcG9uc2UgPSBhcGlSZXNwb25zZTtcbiAgICAgIH0gICAgICBcbiAgICAgIGxldCByZXN1bHRzID0gW107XG4gICAgICBsZXQgc2VhcmNoVGVybXMgPSBrZXl3b3JkLnRvTG93ZXJDYXNlKCk/LnNwbGl0KFwiIFwiKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzcG9uc2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IG9iaiA9IHJlc3BvbnNlW2ldO1xuICAgICAgICBsZXQgY29tYmluZWRWYWx1ZXMgPSB0aGlzLmdldENvbWJpbmVkVmFsdWVzRnJvbUNvbHVtbnMob2JqLCB0aGlzLmFwaU1ldGEuZmllbGQpO1xuICAgICAgICBsZXQgbWF0Y2ggPSBzZWFyY2hUZXJtcy5ldmVyeSh0ZXJtID0+IGNvbWJpbmVkVmFsdWVzLmluY2x1ZGVzKHRlcm0pKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgcmVzdWx0cy5wdXNoKG9iaik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMubm9SZXN1bHQgPSByZXN1bHRzLmxlbmd0aCA9PT0gMDtcbiAgICAgIHRoaXMuZmluYWxSZXN1bHRzLnNldChyZXN1bHRzKTtcbiAgICB9LFxuICAgIChlcnJvcikgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcignQVBJIGVycm9yOicsIGVycm9yKTtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLm5vUmVzdWx0ID0gdHJ1ZTtcbiAgICAgIHRoaXMuZmluYWxSZXN1bHRzLnNldChbXSk7O1xuICAgIH0pO1xuICB9XG59O1xuLy8gU0tTMjdGRUIgSGVscGVyIGZ1bmN0aW9uc1xucHJpdmF0ZSBnZXROZXN0ZWRWYWx1ZShvYmo6IGFueSwgcGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy9TS1MyN0ZFQiBDb252ZXJ0IGFycmF5IGluZGV4ZXMgdG8gZG90IG5vdGF0aW9uIChlLmcuLCBbMF0gLT4gLjApXG4gIGNvbnN0IHByb2Nlc3NlZFBhdGggPSBwYXRoLnJlcGxhY2UoL1xcWyhcXGQrKVxcXS9nLCAnLiQxJyk7XG4gIGNvbnN0IHBhcnRzID0gcHJvY2Vzc2VkUGF0aC5zcGxpdCgnLicpO1xuICBsZXQgY3VycmVudCA9IG9iajtcbiAgXG4gIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xuICAgIGlmICghY3VycmVudCB8fCB0eXBlb2YgY3VycmVudCAhPT0gJ29iamVjdCcpIHJldHVybiAnJztcbiAgICBjdXJyZW50ID0gY3VycmVudFtwYXJ0XTtcbiAgfVxuICBcbiAgcmV0dXJuIGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudCAhPT0gdW5kZWZpbmVkIFxuICAgID8gU3RyaW5nKGN1cnJlbnQpLnRvTG93ZXJDYXNlKCkudHJpbSgpIFxuICAgIDogJyc7XG59XG5cbnByaXZhdGUgZ2V0Q29tYmluZWRWYWx1ZXNGcm9tQ29sdW1ucyhvYmo6IGFueSwgY29sdW1uczogc3RyaW5nW10pOiBzdHJpbmcge1xuICBjb25zdCB2YWx1ZXM6IHN0cmluZ1tdID0gW107XG4gIC8vIFNLUzI4RkVCIGNoZWNrIGlmIGNvbHVtbnMgaXMgYW4gYXJyYXlcbiAgaWYodHlwZW9mIGNvbHVtbnMgPT09ICdzdHJpbmcnICYmICFBcnJheS5pc0FycmF5KGNvbHVtbnMpICApIHtcbiAgICBjb2x1bW5zID0gW2NvbHVtbnNdO1xuICB9XG4gIFxuICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldE5lc3RlZFZhbHVlKG9iaiwgY29sdW1uKTtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgXG4gIHJldHVybiB2YWx1ZXMuam9pbignICcpO1xufVxuLy8gU0tTMjdGRUIgZ2V0IHZhbHVlIGZyb20gZGF0YSBzcGVjaWZpYyBjb2x1bW5cbnB1YmxpYyBnZXRWYWx1ZXMoZWxlbWVudDogYW55LCBjb2x1bW5zOiBhbnkpOiBhbnkge1xuICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICAvLyBTS1MyOEZFQiBjaGVjayBpZiBjb2x1bW5zIGlzIGFuIGFycmF5XG4gIGlmKHR5cGVvZiBjb2x1bW5zID09PSAnc3RyaW5nJyAmJiAhQXJyYXkuaXNBcnJheShjb2x1bW5zKSAgKSB7XG4gICAgY29sdW1ucyA9IFtjb2x1bW5zXTtcbiAgfVxuICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgIGxldCB0ZW1wRWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgbGV0IGZsZHMgPSBjb2x1bW4/LnNwbGl0KCcuJyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgc3BsaXRGbGRzID0gZmxkc1tpXT8uc3BsaXQoJ1snKTtcbiAgICAgIGlmIChzcGxpdEZsZHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHRlbXBFbGVtZW50ID0gdGVtcEVsZW1lbnRbZmxkc1tpXV0gfHwgJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgaW5kZXggPSBOdW1iZXIoc3BsaXRGbGRzWzFdPy5zcGxpdCgnXScpWzBdKTtcbiAgICAgICAgdGVtcEVsZW1lbnQgPSB0ZW1wRWxlbWVudFtzcGxpdEZsZHNbMF1dPy5baW5kZXhdIHx8ICcnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHRbY29sdW1uXSA9IHRlbXBFbGVtZW50O1xuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuLy8gU0tTMjdGRUIgY29sdW1uIHZhbHVlIGdldCBmdW50aW9uXG5nZXRLZXlzKG9iajogYW55KTogc3RyaW5nW10ge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKTtcbn1cbiAgcHVibGljIGNsaWNrSXRlbShldmVudCkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgY2xpY2tJdGVtIG9mICcgKyBKU09OLnN0cmluZ2lmeShldmVudCwgbnVsbCwgMikpO1xuICAgIC8vIE1TTS0yN01BUjI1IEVuc3VyZSBxdWVzLnN1YlRleHQgaXMgYWx3YXlzIGFuIG9iamVjdCBieSBwYXJzaW5nIGl0IGlmIGl0J3MgYSBzdHJpbmdcbiAgICBpZih0aGlzLmFwaU1ldGEpe1xuICAgICAgdGhpcy5hcGlNZXRhID0gdHlwZW9mIHRoaXMuYXBpTWV0YSA9PT0gJ29iamVjdCcgPyB0aGlzLmFwaU1ldGEgOiBKU09OLnBhcnNlKHRoaXMuYXBpTWV0YSk7ICAgIFxuICAgICAgaWYodGhpcy5tb2RlICE9PSAnZWRpdCcpe1xuICAgICAgICB0aGlzLnZpZXdGaWx0ZXJOYW1lID0gdGhpcy5kYXRhU2VydmljZS5nZXRWYWx1ZShldmVudCx0aGlzLmFwaU1ldGEuZGVmYXVsdEZpZWxkIHx8ICB0aGlzLmFwaU1ldGE/LmZpZWxkPy5bMF0gfHwgdGhpcy5hcGlNZXRhLmZpZWxkKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5maWx0ZXJOYW1lID0gdGhpcy5kYXRhU2VydmljZS5nZXRWYWx1ZShldmVudCx0aGlzLmFwaU1ldGEuZGVmYXVsdEZpZWxkIHx8IHRoaXMuYXBpTWV0YT8uZmllbGQ/LlswXSB8fCB0aGlzLmFwaU1ldGEuZmllbGQpOyAvL1NLUzI3RkVCIGRlZmF1bHRGaWVsZCBpcyB1c2VkIGZvciBzaG93aW5nIGEgc2VhcmNoIGZpZWxkIGlucHV0IGlmIGZpZWxkIGhhdmUgYXJyYXkgb2YgZGF0YVxuICAgICAgfVxuICAgIGxldCBjaGFuZ2UgPSBuZXcgQ2hhbmdlV3JhcHBlcigpOyAvLyBDaGFuZ2VXcmFwcGVyID0gSlNPTi5wYXJzZSgne30nKTtcbiAgICBjaGFuZ2UuZnJvbVF1ZXN0aW9uSWQgPSB0aGlzLmlkO1xuICAgIGNoYW5nZS52YWx1ZU9iaiA9IGV2ZW50O1xuICAgIHRoaXMudmFsdWVPYmogPSBldmVudDtcbiAgICBjaGFuZ2UuZmllbGQgPSB0aGlzLmFwaU1ldGEuZmllbGQ7XG4gICAgdGhpcy5zZWFyY2hWYWx1ZUNoYW5nZS5lbWl0KHtxdWVzdGlvbiA6IHRoaXMucXVlc3Rpb24sIHZhbHVlOiBjaGFuZ2V9KTtcbiAgfVxuICB9XG4gIC8vUlMgMDNGRUIyMDI1XG4gIC8vIFJlc2V0cyBjb21wb25lbnQgc3RhdGUgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZFxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHsgdGhpcy5yZXNldENvbXBvbmVudFN0YXRlKCk7ICB9XG4gIHJlbW92ZUNoYXJhY3RlcnMocXVlc3Rpb25UZXh0OnN0cmluZyl7XG4gICAgbGV0IHVwZGF0ZWRUZXh0ID0gcXVlc3Rpb25UZXh0Py5yZXBsYWNlKC88W14+XSo+L2csICcnKTtcbiAgICByZXR1cm4gdXBkYXRlZFRleHQ7XG4gIH1cbiAgaW5wdXRWYWx1ZShldmVudCxxdWVzKXtcbiAgICBpZihxdWVzLnNpbmdsZUZpZWxkQ2hhbmdlKXtcbiAgICAgIHRoaXMuaXNTaW5nbGVGaWVsZENoYW5nZSA9IHRydWU7XG4gICAgICBpZih0aGlzLmFwaU1ldGEpe1xuICAgICAgICB0aGlzLmFwaU1ldGEgPSB0eXBlb2YgdGhpcy5hcGlNZXRhID09PSAnb2JqZWN0JyA/IHRoaXMuYXBpTWV0YSA6IEpTT04ucGFyc2UodGhpcy5hcGlNZXRhKTsgICAgICBcbiAgICAgICAgbGV0IGNoYW5nZSA9IG5ldyBDaGFuZ2VXcmFwcGVyKCk7IC8vIENoYW5nZVdyYXBwZXIgPSBKU09OLnBhcnNlKCd7fScpO1xuICAgICAgICBjaGFuZ2UuZnJvbVF1ZXN0aW9uSWQgPSB0aGlzLmlkO1xuICAgICAgICBjaGFuZ2UudmFsdWVPYmogPSB0aGlzLnZhbHVlT2JqO1xuICAgICAgICBjaGFuZ2UuZmllbGQgPSB0aGlzLmFwaU1ldGEuZmllbGQ7XG4gICAgICAgIGNoYW5nZS5yZWZlcmVuY2VGaWVsZCA9IHRoaXMucXVlc3Rpb24ucmVmZXJlbmNlRmllbGQ7XG4gICAgICAgIHRoaXMuZmlsdGVyTmFtZSA9IHRoaXMudmlld0ZpbHRlck5hbWVcbiAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZUNoYW5nZS5lbWl0KHtxdWVzdGlvbiA6IHF1ZXMsIHZhbHVlOiBjaGFuZ2V9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiAgICAiLCI8IS0tIFZEIDEySnVuMjQgLSByZWFkb25seSBjaGFuZ2UgLS0+XG48ZGl2IGNsYXNzPVwic2VhcmNoLXdyYXBwZXJcIj5cbiAgPG54dC1pbnB1dCBbdHlwZV09XCInbGlzdCdcIiBbbW9kZV09XCJtb2RlXCIgW3ZhbHVlXT1cImZpbHRlck5hbWVcIlxuICAgIFtsYWJlbEZvbnRdPVwicXVlc3Rpb24uZm9udFwiIFtsYWJlbF09XCJyZW1vdmVDaGFyYWN0ZXJzKHF1ZXN0aW9uPy5xdWVzdGlvblRleHQpXCIgW2xhYmVsQ29sb3JdPVwicXVlc3Rpb24uZm9udENvbG9yXCJcbiAgICBbbGFiZWxTaXplXT1cInF1ZXN0aW9uLmZvbnRTaXplXCIgW2lucHV0VmFsdWVTaXplXT1cInF1ZXN0aW9uLmZvbnRTaXplXCIgW2xhYmVsV2VpZ2h0XT1cInF1ZXN0aW9uLmZvbnRXZWlnaHRcIlxuICAgIFtpbnB1dFdlaWdodF09XCJxdWVzdGlvbi5mb250V2VpZ2h0XCIgW3Nob3dMYWJlbF09XCJxdWVzdGlvbi5zdHlsZT8uc2hvd0xhYmVsXCIgaW5wdXRCb3JkZXI9XCJub25lXCIgc3ZnSGVpZ2h0PVwiMjBweFwiXG4gICAgc3ZnV2lkdGg9XCIyMHB4XCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlSG9sZGVyVGV4dFwiIFtyZXF1aXJlZF09XCJxdWVzdGlvbi5pc09wdGlvbmFsXCIgaW5wdXRCZ0NvbG9yPVwiI0ZBRkFGQVwiXG4gICAgW2lucHV0SWRdPVwicXVlc3Rpb24udHJhY2tpbmdJZFwiIFtlcnJvck1lc3NhZ2VzXT1cInsgcmVxdWlyZWQ6ICdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkJyB9XCJcbiAgICBbaW5wdXRJY29uTGVmdFNyY109XCJxdWVzdGlvbi5pY29uTGVmdFNyY1wiIChpbnB1dFZhbHVlKT1cImdldFNvdXJjZURhdGFMb2NhbCgkZXZlbnQpOyBpbnB1dFZhbHVlKCRldmVudC52YWx1ZSwkZXZlbnQucXVlc3Rpb24pXCIgKG9uQmx1cik9XCJjbGVhckxpc3QoKVwiXG4gICAgW3Nob3dTdWdnZXN0aW9uXT1cInNob3dTdWdnZXN0aW9uXCIgYXJpYU93bnM9XCJzZWxlY3RMaXN0XCIgYXJpYUhhc1BvcHVwPVwibGlzdGJveFwiIFtpc0xvYWRpbmddPVwiaXNMb2FkaW5nXCIgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCI+XG4gIDwvbnh0LWlucHV0PlxuXG4gIDxkaXYgaWQ9XCJzZWxlY3RMaXN0XCIgY2xhc3M9XCJzdWdnZXN0aW9uLXdyYXBwZXJcIiByb2xlPVwibGlzdGJveFwiPlxuICAgIDxkaXYgKm5nSWY9XCJmaW5hbFJlc3VsdHMoKS5sZW5ndGggPiAwICYmIHNob3dTdWdnZXN0aW9uXCIgY2xhc3M9XCJzdWdnZXN0aW9ucy1jb250YWluZXJcIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmluYWxSZXN1bHRzKClcIiAoY2xpY2spPVwiY2xpY2tJdGVtKGl0ZW0pXCIgY2xhc3M9XCJzdWdnZXN0aW9uLWl0ZW1cIiByb2xlPVwib3B0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJncmlkLXggYWxpZ24tbWlkZGxlXCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0udGh1bWJuYWlsXCIgY2xhc3M9XCJjZWxsIHNocmluayB0aHVtYm5haWwtd3JhcHBlclwiPlxuICAgICAgICAgICAgPGltZyBbc3JjXT1cIml0ZW0udGh1bWJuYWlsXCIgYWx0PVwiVGh1bWJuYWlsXCI+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2VsbCBhdXRvIGl0ZW0tZGV0YWlsc1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQga2V5IG9mIGdldEtleXMoZ2V0VmFsdWVzKGl0ZW0sIFNlYXJjaEl0ZW0pKVwiIGNsYXNzPVwiaXRlbS12YWx1ZVwiPlxuICAgICAgICAgICAgICB7eyBnZXRWYWx1ZXMoaXRlbSwgU2VhcmNoSXRlbSlba2V5XSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+Il19
279
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvY29tcG9uZW50cy9zZWFyY2gtYm94L3NlYXJjaC1ib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvc2VhcmNoLWJveC9zZWFyY2gtYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBRUUsTUFBTSxFQUNyQixNQUFNLGVBQWUsQ0FBQztBQUV2QixxRUFBcUU7QUFDckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7QUFjNUQsTUFBTSxPQUFPLGtCQUFrQjtJQTBCUjtJQUFpQztJQUFpQztJQXpCOUUsZUFBZSxDQUFTO0lBRXhCLFFBQVEsQ0FBQztJQUNULE9BQU8sQ0FBTTtJQUNiLEVBQUUsQ0FBUztJQUNYLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQywrQkFBK0I7SUFDakQsSUFBSSxHQUE4QixNQUFNLENBQUMsQ0FBQyw0QkFBNEI7SUFDckUsaUJBQWlCLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7SUFDeEUsVUFBVSxDQUFNO0lBRVIsVUFBVSxDQUFTLENBQUMseUNBQXlDO0lBQy9ELFlBQVksR0FBMEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELGFBQWEsR0FBVyxFQUFFLENBQUM7SUFDM0IsU0FBUyxDQUFNO0lB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QVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBWaWV3Q2hpbGQsXG4gIFNpbXBsZUNoYW5nZXMsc2lnbmFsLCBXcml0YWJsZVNpZ25hbFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xuLy8gVkQgMjNKQU4yNCByZW1vdmVkIGh0dHBDbGllbnQgaW1wb3J0IHVzZWQgc2VydmljZSBmaWxlIGZvciBjYWxsb3V0XG5pbXBvcnQgeyBDaGFuZ2VXcmFwcGVyIH0gZnJvbSBcIi4uLy4uL21vZGVsL2NoYW5nZVdyYXBwZXJcIjtcbi8vIEhBIDE5REVDMjMgaW1wb3J0ZWQgdHJhbnNsYXRpb24gc2VydmljZVxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vaTE4bi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgTnh0SW5wdXQgfSBmcm9tIFwiLi4vbnh0LWlucHV0L254dC1pbnB1dC5jb21wb25lbnRcIjtcbmltcG9ydCB7IENvdW50cnlTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2NvdW50cnkuc2VydmljZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItc2VhcmNoLWJveCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTnh0SW5wdXRcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaC1ib3guY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zZWFyY2gtYm94LmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBTZWFyY2hCb3hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBwbGFjZUhvbGRlclRleHQ6IHN0cmluZztcblxuICBASW5wdXQoKSBxdWVzdGlvbjtcbiAgQElucHV0KCkgYXBpTWV0YTogYW55O1xuICBASW5wdXQoKSBpZDogc3RyaW5nO1xuICBASW5wdXQoKSByZWFkT25seSA9IGZhbHNlOyAvLyBWRCAxMkp1bjI0IC0gcmVhZG9ubHkgY2hhbmdlXG4gIEBJbnB1dCgpIG1vZGU6ICd2aWV3JyB8ICdlZGl0JyB8ICdwcmludCcgPSAnZWRpdCc7IC8vIFNLUzExSlVOMjUgTmV3IG1vZGUgaW5wdXRcbiAgQE91dHB1dCgpIHNlYXJjaFZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgU2VhcmNoSXRlbTogYW55O1xuXG4gIEBJbnB1dCgpIGZpbHRlck5hbWU6IHN0cmluZzsgLy8gVkQgMjBBdWcgZGVmYXVsdCBmaWx0ZXIgdmFsdWUgYXMgaW5wdXRcbiAgcHVibGljIGZpbmFsUmVzdWx0czogV3JpdGFibGVTaWduYWw8YW55W10+ID0gc2lnbmFsKFtdKTtcbiAgcHVibGljIHNlYXJjaEtleVdvcmQ6IHN0cmluZyA9ICcnO1xuICBwdWJsaWMgbmV3UmVzdWx0OiBhbnk7XG4gIHB1YmxpYyBzaG93UmVzdWx0ID0gZmFsc2U7XG4gIHB1YmxpYyBub1Jlc3VsdCA9IGZhbHNlO1xuICBwdWJsaWMgc2hvd1N1Z2dlc3Rpb24gPSBmYWxzZTtcbiAgcHJpdmF0ZSBlbDogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgc2Vydjogc3RyaW5nID0gJ2FwaSc7XG4gIHByaXZhdGUgdGtuOiBzdHJpbmcgPSAnJztcbiAgaXNMb2FkaW5nID0gZmFsc2VcbiAgdmlld0ZpbHRlck5hbWUgOiBzdHJpbmc7XG4gIGlzU2luZ2xlRmllbGRDaGFuZ2UgPSBmYWxzZTtcbiAgdmFsdWVPYmogOiBhbnk7XG4gIFxuICBjb25zdHJ1Y3RvciggcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsIHB1YmxpYyBpMThuU2VydmljZTogSTE4blNlcnZpY2UscHJpdmF0ZSBjb3VudHJ5U2VydmljZTogQ291bnRyeVNlcnZpY2UpIHsgfVxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyAgVkQgMDNNYXktIHNlYXJjaCBjaGFuZ2VzXG4gICAgIC8vIEFQLTI2TUFSMjUgRW5zdXJlIHF1ZXMuc3ViVGV4dCBpcyBhbHdheXMgYW4gb2JqZWN0IGJ5IHBhcnNpbmcgaXQgaWYgaXQncyBhIHN0cmluZ1xuICAgIGlmKHRoaXMuYXBpTWV0YSl7XG4gICAgICB0aGlzLmFwaU1ldGEgPSB0eXBlb2YgdGhpcy5hcGlNZXRhID09PSAnb2JqZWN0JyA/IHRoaXMuYXBpTWV0YSA6IEpTT04ucGFyc2UodGhpcy5hcGlNZXRhKTtcbiAgICAgIHRoaXMuU2VhcmNoSXRlbSA9IHRoaXMuYXBpTWV0YS5maWVsZDtcbiAgICB9XG4gIH1cbi8vLy9SUyAwM0ZFQjIwMjVcbi8vIFJlc2V0cyBzdGF0ZSB3aGVuIGZpbHRlck5hbWUgb3IgYXBpTWV0YSBjaGFuZ2VzIHRvIHJlZmxlY3QgdXBkYXRlZCBkYXRhXG4gLy8gQVAtMjZNQVIyNSBFbnN1cmUgcXVlcy5zdWJUZXh0IGlzIGFsd2F5cyBhbiBvYmplY3QgYnkgcGFyc2luZyBpdCBpZiBpdCdzIGEgc3RyaW5nXG5uZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gIGlmIChjaGFuZ2VzWydtb2RlJ10pIHtcbiAgICB0aGlzLm1vZGUgPSBjaGFuZ2VzWydtb2RlJ10uY3VycmVudFZhbHVlO1xuICB9XG4gIGlmKHRoaXMubW9kZSAhPT0gJ2VkaXQnICYmIHRoaXMuaXNTaW5nbGVGaWVsZENoYW5nZSAmJiAoY2hhbmdlcy5maWx0ZXJOYW1lLnByZXZpb3VzVmFsdWUgIT09ICBjaGFuZ2VzLmZpbHRlck5hbWUuY3VycmVudFZhbHVlKSkge1xuICAgIHRoaXMuZmlsdGVyTmFtZSA9IGNoYW5nZXMuZmlsdGVyTmFtZS5wcmV2aW91c1ZhbHVlXG4gIH1cbiAgaWYgKGNoYW5nZXNbJ2FwaU1ldGEnXSAmJiB0aGlzLmFwaU1ldGEpIHtcbiAgICB0aGlzLmFwaU1ldGEgPSB0eXBlb2YgdGhpcy5hcGlNZXRhID09PSAnb2JqZWN0JyA/IHRoaXMuYXBpTWV0YSA6IEpTT04ucGFyc2UodGhpcy5hcGlNZXRhKTtcbiAgICB0aGlzLlNlYXJjaEl0ZW0gPSB0aGlzLmFwaU1ldGE/LmZpZWxkO1xuICB9XG59XG4vL1JTIDAzRkVCMjAyNVxuLy8gQ2xlYXJzIHNlYXJjaC1yZWxhdGVkIGRhdGEsIGluY2x1ZGluZyByZXN1bHRzLCBzZWFyY2ggdGVybSwgYW5kIHN1Z2dlc3Rpb25zLlxucHJpdmF0ZSByZXNldENvbXBvbmVudFN0YXRlKCk6IHZvaWQge1xuICB0aGlzLmZpbmFsUmVzdWx0cy5zZXQoW10pOztcbiAgdGhpcy5maWx0ZXJOYW1lID0gJyc7IFxuICB0aGlzLnNlYXJjaEtleVdvcmQgPSAnJzsgIFxuICB0aGlzLnNob3dTdWdnZXN0aW9uID0gZmFsc2U7XG4gIHRoaXMubm9SZXN1bHQgPSBmYWxzZTtcbn1cbmNsZWFyTGlzdCgpe1xuICBzZXRUaW1lb3V0KCgpPT4ge1xuICAgIHRoaXMuZmluYWxSZXN1bHRzLnNldChbXSk7O1xuICB9LCAxMDAwKTtcbn1cblxuZ2V0U291cmNlRGF0YUxvY2FsKGV2ZW50OiBhbnkpIHsgLy90byBnZXQgcmVzdWx0cyBsaXN0IGZyb20gYmFja2VuZCBBUEkgd2hlbmV2ZXIga2V5IGlzIHVwIGFmdGVyIHRoZSBlbnRlcmluZyBhdGxlYXN0IG9uZSBrZXlcbiAgaWYgKGV2ZW50LnZhbHVlLmxlbmd0aCA+IDIgJiYgIXRoaXMuaXNTaW5nbGVGaWVsZENoYW5nZSkge1xuICAgIGV2ZW50LnF1ZXN0aW9uPy5zaW5nbGVGaWVsZENoYW5nZSA/IHRoaXMuc2hvd1N1Z2dlc3Rpb24gPSBmYWxzZSA6IHRoaXMuc2hvd1N1Z2dlc3Rpb24gPSB0cnVlO1xuICAgIHRoaXMuZmluYWxSZXN1bHRzLnNldChbXSk7XG4gICAgdGhpcy5zZWFyY2hLZXlXb3JkID0gZXZlbnQudmFsdWU7XG4gICAgdGhpcy5zaG93UmVzdWx0ID0gZmFsc2U7XG4gICAgdGhpcy5nZXRTb3VyY2VEYXRhKGV2ZW50LnZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmlzU2luZ2xlRmllbGRDaGFuZ2UgPSBmYWxzZVxuICAgIHRoaXMuc2hvd1N1Z2dlc3Rpb24gPSBmYWxzZTtcbiAgICB0aGlzLmZpbmFsUmVzdWx0cy5zZXQoW10pO1xuICAgIHRoaXMubm9SZXN1bHQgPSBmYWxzZTtcbiAgfVxufVxuLy8gVkQgMDNNYXktIHNlYXJjaCBjaGFuZ2VzXG4vLyBWRCAzMU5PVjI0IG51bGwgY2hlY2tcbi8vIFJTIDI5SkFOMjVcbi8vTXVsdGktd29yZCBzZWFyY2ggYWNyb3NzIGFsbCBvYmplY3QgdmFsdWVzXG5wdWJsaWMgZ2V0U291cmNlRGF0YSA9IChrZXl3b3JkOiBzdHJpbmcpID0+IHtcbiAgIC8vIE1TTS0yN01BUjI1IEVuc3VyZSBxdWVzLnN1YlRleHQgaXMgYWx3YXlzIGFuIG9iamVjdCBieSBwYXJzaW5nIGl0IGlmIGl0J3MgYSBzdHJpbmdcbiAgaWYgKHRoaXMuYXBpTWV0YSkge1xuICAgICAgdGhpcy5hcGlNZXRhID0gdHlwZW9mIHRoaXMuYXBpTWV0YSA9PT0gJ29iamVjdCcgPyB0aGlzLmFwaU1ldGEgOiBKU09OLnBhcnNlKHRoaXMuYXBpTWV0YSk7XG4gICAgICBpZighdGhpcy5hcGlNZXRhLmlzU3RhdGljRGF0YSl7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5hcGlSZXNwb25zZSh0aGlzLmFwaU1ldGEuZW5kcG9pbnQpLnN1YnNjcmliZSgoYXBpUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgICBpZiAodGhpcy5hcGlNZXRhLnZhcmlhYmxlKSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IHRoaXMuZGF0YVNlcnZpY2UuZ2V0VmFsdWUoYXBpUmVzcG9uc2UsIHRoaXMuYXBpTWV0YS52YXJpYWJsZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3BvbnNlID0gYXBpUmVzcG9uc2U7XG4gICAgICAgICAgfSAgICAgIFxuICAgICAgICAgIGxldCByZXN1bHRzID0gW107XG4gICAgICAgICAgbGV0IHNlYXJjaFRlcm1zID0ga2V5d29yZC50b0xvd2VyQ2FzZSgpPy5zcGxpdChcIiBcIik7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNwb25zZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IG9iaiA9IHJlc3BvbnNlW2ldO1xuICAgICAgICAgICAgbGV0IGNvbWJpbmVkVmFsdWVzID0gdGhpcy5nZXRDb21iaW5lZFZhbHVlc0Zyb21Db2x1bW5zKG9iaiwgdGhpcy5hcGlNZXRhLmZpZWxkKTtcbiAgICAgICAgICAgIGxldCBtYXRjaCA9IHNlYXJjaFRlcm1zLmV2ZXJ5KHRlcm0gPT4gY29tYmluZWRWYWx1ZXMuaW5jbHVkZXModGVybSkpO1xuICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgIHJlc3VsdHMucHVzaChvYmopO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm5vUmVzdWx0ID0gcmVzdWx0cy5sZW5ndGggPT09IDA7XG4gICAgICAgICAgdGhpcy5maW5hbFJlc3VsdHMuc2V0KHJlc3VsdHMpO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdBUEkgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5ub1Jlc3VsdCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5maW5hbFJlc3VsdHMuc2V0KFtdKTs7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHsgLy8gU0tTMjRKVU4yNSBHZXQgbGFuZ3VhZ2UgYW5kIGNvdW50cnkgbmFtZSBsb2NhbGx5IGZyb20gZGF0YVxuICAgICAgICBsZXQgcmVzcG9uc2U7ICBcbiAgICAgICAgcmVzcG9uc2UgPSB0aGlzLmNvdW50cnlTZXJ2aWNlLmdldENvdW50cnlEYXRhKHRoaXMuYXBpTWV0YS5maWVsZCkgIFxuICAgICAgICBsZXQgcmVzdWx0cyA9IFtdO1xuICAgICAgICBsZXQgc2VhcmNoVGVybXMgPSBrZXl3b3JkLnRvTG93ZXJDYXNlKCk/LnNwbGl0KFwiIFwiKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNwb25zZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGxldCBvYmogPSByZXNwb25zZVtpXTtcbiAgICAgICAgICBsZXQgY29tYmluZWRWYWx1ZXMgPSB0aGlzLmdldENvbWJpbmVkVmFsdWVzRnJvbUNvbHVtbnMob2JqLCB0aGlzLmFwaU1ldGEuZmllbGQpO1xuICAgICAgICAgIGxldCBtYXRjaCA9IHNlYXJjaFRlcm1zLmV2ZXJ5KHRlcm0gPT4gY29tYmluZWRWYWx1ZXMuaW5jbHVkZXModGVybSkpO1xuICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKG9iaik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubm9SZXN1bHQgPSByZXN1bHRzLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgdGhpcy5maW5hbFJlc3VsdHMuc2V0KHJlc3VsdHMpO1xuICAgICAgfVxuICB9XG59O1xuLy8gU0tTMjdGRUIgSGVscGVyIGZ1bmN0aW9uc1xucHJpdmF0ZSBnZXROZXN0ZWRWYWx1ZShvYmo6IGFueSwgcGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy9TS1MyN0ZFQiBDb252ZXJ0IGFycmF5IGluZGV4ZXMgdG8gZG90IG5vdGF0aW9uIChlLmcuLCBbMF0gLT4gLjApXG4gIGNvbnN0IHByb2Nlc3NlZFBhdGggPSBwYXRoLnJlcGxhY2UoL1xcWyhcXGQrKVxcXS9nLCAnLiQxJyk7XG4gIGNvbnN0IHBhcnRzID0gcHJvY2Vzc2VkUGF0aC5zcGxpdCgnLicpO1xuICBsZXQgY3VycmVudCA9IG9iajtcbiAgXG4gIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xuICAgIGlmICghY3VycmVudCB8fCB0eXBlb2YgY3VycmVudCAhPT0gJ29iamVjdCcpIHJldHVybiAnJztcbiAgICBjdXJyZW50ID0gY3VycmVudFtwYXJ0XTtcbiAgfVxuICBcbiAgcmV0dXJuIGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudCAhPT0gdW5kZWZpbmVkIFxuICAgID8gU3RyaW5nKGN1cnJlbnQpLnRvTG93ZXJDYXNlKCkudHJpbSgpIFxuICAgIDogJyc7XG59XG5cbnByaXZhdGUgZ2V0Q29tYmluZWRWYWx1ZXNGcm9tQ29sdW1ucyhvYmo6IGFueSwgY29sdW1uczogc3RyaW5nW10pOiBzdHJpbmcge1xuICBjb25zdCB2YWx1ZXM6IHN0cmluZ1tdID0gW107XG4gIC8vIFNLUzI4RkVCIGNoZWNrIGlmIGNvbHVtbnMgaXMgYW4gYXJyYXlcbiAgaWYodHlwZW9mIGNvbHVtbnMgPT09ICdzdHJpbmcnICYmICFBcnJheS5pc0FycmF5KGNvbHVtbnMpICApIHtcbiAgICBjb2x1bW5zID0gW2NvbHVtbnNdO1xuICB9XG4gIFxuICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldE5lc3RlZFZhbHVlKG9iaiwgY29sdW1uKTtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgXG4gIHJldHVybiB2YWx1ZXMuam9pbignICcpO1xufVxuLy8gU0tTMjdGRUIgZ2V0IHZhbHVlIGZyb20gZGF0YSBzcGVjaWZpYyBjb2x1bW5cbnB1YmxpYyBnZXRWYWx1ZXMoZWxlbWVudDogYW55LCBjb2x1bW5zOiBhbnkpOiBhbnkge1xuICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICAvLyBTS1MyOEZFQiBjaGVjayBpZiBjb2x1bW5zIGlzIGFuIGFycmF5XG4gIGlmKHR5cGVvZiBjb2x1bW5zID09PSAnc3RyaW5nJyAmJiAhQXJyYXkuaXNBcnJheShjb2x1bW5zKSAgKSB7XG4gICAgY29sdW1ucyA9IFtjb2x1bW5zXTtcbiAgfVxuICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgIGxldCB0ZW1wRWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgbGV0IGZsZHMgPSBjb2x1bW4/LnNwbGl0KCcuJyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgc3BsaXRGbGRzID0gZmxkc1tpXT8uc3BsaXQoJ1snKTtcbiAgICAgIGlmIChzcGxpdEZsZHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHRlbXBFbGVtZW50ID0gdGVtcEVsZW1lbnRbZmxkc1tpXV0gfHwgJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgaW5kZXggPSBOdW1iZXIoc3BsaXRGbGRzWzFdPy5zcGxpdCgnXScpWzBdKTtcbiAgICAgICAgdGVtcEVsZW1lbnQgPSB0ZW1wRWxlbWVudFtzcGxpdEZsZHNbMF1dPy5baW5kZXhdIHx8ICcnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHRbY29sdW1uXSA9IHRlbXBFbGVtZW50O1xuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuLy8gU0tTMjdGRUIgY29sdW1uIHZhbHVlIGdldCBmdW50aW9uXG5nZXRLZXlzKG9iajogYW55KTogc3RyaW5nW10ge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKTtcbn1cbiAgcHVibGljIGNsaWNrSXRlbShldmVudCkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgY2xpY2tJdGVtIG9mICcgKyBKU09OLnN0cmluZ2lmeShldmVudCwgbnVsbCwgMikpO1xuICAgIC8vIE1TTS0yN01BUjI1IEVuc3VyZSBxdWVzLnN1YlRleHQgaXMgYWx3YXlzIGFuIG9iamVjdCBieSBwYXJzaW5nIGl0IGlmIGl0J3MgYSBzdHJpbmdcbiAgICBpZih0aGlzLmFwaU1ldGEpe1xuICAgICAgdGhpcy5hcGlNZXRhID0gdHlwZW9mIHRoaXMuYXBpTWV0YSA9PT0gJ29iamVjdCcgPyB0aGlzLmFwaU1ldGEgOiBKU09OLnBhcnNlKHRoaXMuYXBpTWV0YSk7ICAgIFxuICAgICAgaWYodGhpcy5tb2RlICE9PSAnZWRpdCcpe1xuICAgICAgICB0aGlzLnZpZXdGaWx0ZXJOYW1lID0gdGhpcy5kYXRhU2VydmljZS5nZXRWYWx1ZShldmVudCx0aGlzLmFwaU1ldGEuZGVmYXVsdEZpZWxkIHx8ICB0aGlzLmFwaU1ldGE/LmZpZWxkPy5bMF0gfHwgdGhpcy5hcGlNZXRhLmZpZWxkKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5maWx0ZXJOYW1lID0gdGhpcy5kYXRhU2VydmljZS5nZXRWYWx1ZShldmVudCx0aGlzLmFwaU1ldGEuZGVmYXVsdEZpZWxkIHx8IHRoaXMuYXBpTWV0YT8uZmllbGQ/LlswXSB8fCB0aGlzLmFwaU1ldGEuZmllbGQpOyAvL1NLUzI3RkVCIGRlZmF1bHRGaWVsZCBpcyB1c2VkIGZvciBzaG93aW5nIGEgc2VhcmNoIGZpZWxkIGlucHV0IGlmIGZpZWxkIGhhdmUgYXJyYXkgb2YgZGF0YVxuICAgICAgfVxuICAgIGxldCBjaGFuZ2UgPSBuZXcgQ2hhbmdlV3JhcHBlcigpOyAvLyBDaGFuZ2VXcmFwcGVyID0gSlNPTi5wYXJzZSgne30nKTtcbiAgICBjaGFuZ2UuZnJvbVF1ZXN0aW9uSWQgPSB0aGlzLmlkO1xuICAgIGNoYW5nZS52YWx1ZU9iaiA9IGV2ZW50O1xuICAgIHRoaXMudmFsdWVPYmogPSBldmVudDtcbiAgICBjaGFuZ2UuZmllbGQgPSB0aGlzLmFwaU1ldGEuZmllbGQ7XG4gICAgdGhpcy5zZWFyY2hWYWx1ZUNoYW5nZS5lbWl0KHtxdWVzdGlvbiA6IHRoaXMucXVlc3Rpb24sIHZhbHVlOiBjaGFuZ2V9KTtcbiAgfVxuICB9XG4gIC8vUlMgMDNGRUIyMDI1XG4gIC8vIFJlc2V0cyBjb21wb25lbnQgc3RhdGUgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZFxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHsgdGhpcy5yZXNldENvbXBvbmVudFN0YXRlKCk7ICB9XG4gIHJlbW92ZUNoYXJhY3RlcnMocXVlc3Rpb25UZXh0OnN0cmluZyl7XG4gICAgbGV0IHVwZGF0ZWRUZXh0ID0gcXVlc3Rpb25UZXh0Py5yZXBsYWNlKC88W14+XSo+L2csICcnKTtcbiAgICByZXR1cm4gdXBkYXRlZFRleHQ7XG4gIH1cbiAgaW5wdXRWYWx1ZShldmVudCxxdWVzKXtcbiAgICBpZihxdWVzLnNpbmdsZUZpZWxkQ2hhbmdlKXtcbiAgICAgIHRoaXMuaXNTaW5nbGVGaWVsZENoYW5nZSA9IHRydWU7XG4gICAgICBpZih0aGlzLmFwaU1ldGEpe1xuICAgICAgICB0aGlzLmFwaU1ldGEgPSB0eXBlb2YgdGhpcy5hcGlNZXRhID09PSAnb2JqZWN0JyA/IHRoaXMuYXBpTWV0YSA6IEpTT04ucGFyc2UodGhpcy5hcGlNZXRhKTsgICAgICBcbiAgICAgICAgbGV0IGNoYW5nZSA9IG5ldyBDaGFuZ2VXcmFwcGVyKCk7IC8vIENoYW5nZVdyYXBwZXIgPSBKU09OLnBhcnNlKCd7fScpO1xuICAgICAgICBjaGFuZ2UuZnJvbVF1ZXN0aW9uSWQgPSB0aGlzLmlkO1xuICAgICAgICBjaGFuZ2UudmFsdWVPYmogPSB0aGlzLnZhbHVlT2JqO1xuICAgICAgICBjaGFuZ2UuZmllbGQgPSB0aGlzLmFwaU1ldGEuZmllbGQ7XG4gICAgICAgIGNoYW5nZS5yZWZlcmVuY2VGaWVsZCA9IHRoaXMucXVlc3Rpb24ucmVmZXJlbmNlRmllbGQ7XG4gICAgICAgIHRoaXMuZmlsdGVyTmFtZSA9IHRoaXMudmlld0ZpbHRlck5hbWVcbiAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZUNoYW5nZS5lbWl0KHtxdWVzdGlvbiA6IHF1ZXMsIHZhbHVlOiBjaGFuZ2V9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiAgICAiLCI8IS0tIFZEIDEySnVuMjQgLSByZWFkb25seSBjaGFuZ2UgLS0+XG48ZGl2IGNsYXNzPVwic2VhcmNoLXdyYXBwZXJcIj5cbiAgPG54dC1pbnB1dCBbdHlwZV09XCInbGlzdCdcIiBbbW9kZV09XCJtb2RlXCIgW3ZhbHVlXT1cImZpbHRlck5hbWVcIlxuICAgIFtsYWJlbEZvbnRdPVwicXVlc3Rpb24uZm9udFwiIFtsYWJlbF09XCJyZW1vdmVDaGFyYWN0ZXJzKHF1ZXN0aW9uPy5xdWVzdGlvblRleHQpXCIgW2xhYmVsQ29sb3JdPVwicXVlc3Rpb24uZm9udENvbG9yXCJcbiAgICBbbGFiZWxTaXplXT1cInF1ZXN0aW9uLmZvbnRTaXplXCIgW2lucHV0VmFsdWVTaXplXT1cInF1ZXN0aW9uLmZvbnRTaXplXCIgW2xhYmVsV2VpZ2h0XT1cInF1ZXN0aW9uLmZvbnRXZWlnaHRcIlxuICAgIFtpbnB1dFdlaWdodF09XCJxdWVzdGlvbi5mb250V2VpZ2h0XCIgW3Nob3dMYWJlbF09XCJxdWVzdGlvbi5zdHlsZT8uc2hvd0xhYmVsXCIgaW5wdXRCb3JkZXI9XCJub25lXCIgc3ZnSGVpZ2h0PVwiMjBweFwiXG4gICAgc3ZnV2lkdGg9XCIyMHB4XCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlSG9sZGVyVGV4dFwiIFtyZXF1aXJlZF09XCJxdWVzdGlvbi5pc09wdGlvbmFsXCIgaW5wdXRCZ0NvbG9yPVwiI0ZBRkFGQVwiXG4gICAgW2lucHV0SWRdPVwicXVlc3Rpb24udHJhY2tpbmdJZFwiIFtlcnJvck1lc3NhZ2VzXT1cInsgcmVxdWlyZWQ6ICdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkJyB9XCJcbiAgICBbaW5wdXRJY29uTGVmdFNyY109XCJxdWVzdGlvbi5pY29uTGVmdFNyY1wiIChpbnB1dFZhbHVlKT1cImdldFNvdXJjZURhdGFMb2NhbCgkZXZlbnQpOyBpbnB1dFZhbHVlKCRldmVudC52YWx1ZSwkZXZlbnQucXVlc3Rpb24pXCIgKG9uQmx1cik9XCJjbGVhckxpc3QoKVwiXG4gICAgW3Nob3dTdWdnZXN0aW9uXT1cInNob3dTdWdnZXN0aW9uXCIgYXJpYU93bnM9XCJzZWxlY3RMaXN0XCIgYXJpYUhhc1BvcHVwPVwibGlzdGJveFwiIFtpc0xvYWRpbmddPVwiaXNMb2FkaW5nXCIgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCI+XG4gIDwvbnh0LWlucHV0PlxuXG4gIDxkaXYgaWQ9XCJzZWxlY3RMaXN0XCIgY2xhc3M9XCJzdWdnZXN0aW9uLXdyYXBwZXJcIiByb2xlPVwibGlzdGJveFwiPlxuICAgIDxkaXYgKm5nSWY9XCJmaW5hbFJlc3VsdHMoKS5sZW5ndGggPiAwICYmIHNob3dTdWdnZXN0aW9uXCIgY2xhc3M9XCJzdWdnZXN0aW9ucy1jb250YWluZXJcIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmluYWxSZXN1bHRzKClcIiAoY2xpY2spPVwiY2xpY2tJdGVtKGl0ZW0pXCIgY2xhc3M9XCJzdWdnZXN0aW9uLWl0ZW1cIiByb2xlPVwib3B0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJncmlkLXggYWxpZ24tbWlkZGxlXCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0udGh1bWJuYWlsXCIgY2xhc3M9XCJjZWxsIHNocmluayB0aHVtYm5haWwtd3JhcHBlclwiPlxuICAgICAgICAgICAgPGltZyBbc3JjXT1cIml0ZW0udGh1bWJuYWlsXCIgYWx0PVwiVGh1bWJuYWlsXCI+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2VsbCBhdXRvIGl0ZW0tZGV0YWlsc1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQga2V5IG9mIGdldEtleXMoZ2V0VmFsdWVzKGl0ZW0sIFNlYXJjaEl0ZW0pKVwiIGNsYXNzPVwiaXRlbS12YWx1ZVwiPlxuICAgICAgICAgICAgICB7eyBnZXRWYWx1ZXMoaXRlbSwgU2VhcmNoSXRlbSlba2V5XSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+Il19