@piserve-tech/form-submission 1.3.310 → 1.3.312

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.
@@ -2,6 +2,7 @@ import { Component, EventEmitter, Input, Output, ViewChild, } from '@angular/cor
2
2
  import * as mapper from '../../services/mapper.service';
3
3
  import { NavigationTabsComponent } from '../navigation-tabs/navigation-tabs.component';
4
4
  import { SaveDraftModalComponent } from '../save-as-draft/saveDraftModalComponent ';
5
+ import { HttpEventType } from '@angular/common/http';
5
6
  import * as i0 from "@angular/core";
6
7
  import * as i1 from "../../services/form.service";
7
8
  import * as i2 from "ngx-toastr";
@@ -103,12 +104,16 @@ export class SubmitFormComponent {
103
104
  this.inValidQuestions = new Map();
104
105
  this.visitedRows = new Map();
105
106
  this.allElementIds = [];
106
- this.primaryColor = '';
107
+ this.primaryColor = '#084fff';
107
108
  this.secondaryColor = '';
108
109
  this.isLoadingPages = false;
109
110
  this.copySubforms = [];
110
111
  this.emitters = [];
111
112
  this.draft = false;
113
+ this.submissionProgress = 0;
114
+ this.showSubmissionLoader = false;
115
+ this.currentStep = 'Submitting form';
116
+ this.animatedDots = '';
112
117
  this.updateSubForm = (pages, updatedSubForm) => {
113
118
  pages.forEach((page) => {
114
119
  page.rows.forEach((row) => {
@@ -235,7 +240,7 @@ export class SubmitFormComponent {
235
240
  this.emitters = this.question.emitters || [];
236
241
  this.assignQuestionProperties(this.question);
237
242
  this.setUpFontFamily(response);
238
- this.primaryColor = response.result.primaryColor;
243
+ this.primaryColor = response.result.primaryColor || '#084fff';
239
244
  this.secondaryColor = response.result.secondaryColor;
240
245
  if (this.enableGoogleRecaptcha)
241
246
  this.recaptchaInitialized();
@@ -265,7 +270,7 @@ export class SubmitFormComponent {
265
270
  response.result.moduleConfiguration.enableGoogleRecaptcha;
266
271
  this.question = mapper.mapPublicFormToModel(response);
267
272
  this.assignQuestionProperties(this.question);
268
- this.primaryColor = response.result.primaryColor;
273
+ this.primaryColor = response.result.primaryColor || '#084fff';
269
274
  this.secondaryColor = response.result.secondaryColor;
270
275
  this.emitters = this.question.emitters || [];
271
276
  if (response?.result?.pageDetails) {
@@ -939,6 +944,7 @@ export class SubmitFormComponent {
939
944
  this.submitForm();
940
945
  }
941
946
  async submitForm() {
947
+ this.startSubmissionLoader();
942
948
  if (this.webhook) {
943
949
  this.webhookPayloadArray = this.webhook.map((w) => ({
944
950
  id: w.id,
@@ -968,6 +974,7 @@ export class SubmitFormComponent {
968
974
  this.toastr.error('Please complete the CAPTCHA verification before submitting the form.');
969
975
  this.submissionInProgress = false;
970
976
  this.submissionInDraft = false;
977
+ this.resetSubmissionLoader();
971
978
  this.validationSkip = false;
972
979
  this.draft = false;
973
980
  this.submit.emit({
@@ -981,6 +988,7 @@ export class SubmitFormComponent {
981
988
  this.toastr.error('Failed to verify reCAPTCHA.');
982
989
  this.submissionInProgress = false;
983
990
  this.submissionInDraft = false;
991
+ this.resetSubmissionLoader();
984
992
  this.validationSkip = false;
985
993
  this.draft = false;
986
994
  this.submit.emit({
@@ -1003,6 +1011,7 @@ export class SubmitFormComponent {
1003
1011
  this.saveasDraftPopup();
1004
1012
  this.submissionInProgress = false;
1005
1013
  this.submissionInDraft = false;
1014
+ this.resetSubmissionLoader();
1006
1015
  this.validationSkip = false;
1007
1016
  this.draft = false;
1008
1017
  this.submit.emit({
@@ -1055,40 +1064,52 @@ export class SubmitFormComponent {
1055
1064
  ? this.formService.updateForm(this.moduleName, this.submissionId, formData, recaptchaToken ?? '')
1056
1065
  : this.formService.submitForm(this.moduleName, formData, recaptchaToken ?? '');
1057
1066
  formServiceCall.subscribe({
1058
- next: (response) => {
1059
- this.toastr.success(this.edit
1060
- ? 'Form updated successfully'
1061
- : 'Form submitted successfully');
1062
- let emittingValues;
1063
- if (this.emitters) {
1064
- emittingValues = this.mapEmittersToValues();
1065
- }
1066
- if (this.validationSkip || this.draft) {
1067
- this.submit.emit({
1068
- status: 'draft',
1069
- submissionId: response.result,
1070
- score: formFinalScore,
1071
- ...(emittingValues || {}),
1072
- });
1067
+ next: (event) => {
1068
+ if (event.type === HttpEventType.UploadProgress) {
1069
+ if (event.total) {
1070
+ const percentDone = Math.round((event.loaded / event.total) * 100);
1071
+ this.setProgress(Math.min(95, percentDone));
1072
+ }
1073
1073
  }
1074
- else {
1075
- this.submit.emit({
1076
- status: 'success',
1077
- submissionId: response.result,
1078
- score: formFinalScore,
1079
- ...(emittingValues || {}),
1080
- });
1074
+ if (event.type === HttpEventType.Response) {
1075
+ this.completeSubmissionLoader();
1076
+ const response = event.body;
1077
+ // existing success logic ↓
1078
+ this.toastr.success(this.edit
1079
+ ? 'Form updated successfully'
1080
+ : 'Form submitted successfully');
1081
+ let emittingValues;
1082
+ if (this.emitters) {
1083
+ emittingValues = this.mapEmittersToValues();
1084
+ }
1085
+ if (this.validationSkip || this.draft) {
1086
+ this.submit.emit({
1087
+ status: 'draft',
1088
+ submissionId: response.result,
1089
+ score: formFinalScore,
1090
+ ...(emittingValues || {}),
1091
+ });
1092
+ }
1093
+ else {
1094
+ this.submit.emit({
1095
+ status: 'success',
1096
+ submissionId: response.result,
1097
+ score: formFinalScore,
1098
+ ...(emittingValues || {}),
1099
+ });
1100
+ }
1101
+ this.submissionInProgress = false;
1102
+ this.submissionInDraft = false;
1103
+ this.draft = false;
1104
+ this.validationSkip = false;
1081
1105
  }
1082
- this.submissionInProgress = false;
1083
- this.submissionInDraft = false;
1084
- this.draft = false;
1085
- this.validationSkip = false;
1086
1106
  },
1087
1107
  error: (error) => {
1088
1108
  this.validationService.clearAll();
1089
1109
  this.findQuestionPageIndex(this.parseErrorsToMap(error.error.message));
1090
1110
  this.currentPageIndex = this.pages.length - 1;
1091
1111
  this.navigateToFirstError();
1112
+ this.resetSubmissionLoader();
1092
1113
  this.submissionInProgress = false;
1093
1114
  this.draft = false;
1094
1115
  this.validationSkip = false;
@@ -1109,10 +1130,61 @@ export class SubmitFormComponent {
1109
1130
  this.saveasDraftPopup();
1110
1131
  this.submissionInProgress = false;
1111
1132
  this.submissionInDraft = false;
1133
+ this.resetSubmissionLoader();
1112
1134
  this.validationSkip = false;
1113
1135
  this.draft = false;
1114
1136
  }
1115
1137
  }
1138
+ setProgress(value) {
1139
+ this.submissionProgress = value;
1140
+ this.updateStepText(value);
1141
+ }
1142
+ startSubmissionLoader() {
1143
+ this.showSubmissionLoader = true;
1144
+ this.setProgress(0);
1145
+ // Simulated progress until backend upload updates it
1146
+ this.progressInterval = setInterval(() => {
1147
+ if (this.submissionProgress < 85) {
1148
+ this.setProgress(this.submissionProgress + 2);
1149
+ }
1150
+ }, 300);
1151
+ }
1152
+ completeSubmissionLoader() {
1153
+ clearInterval(this.progressInterval);
1154
+ this.setProgress(100);
1155
+ setTimeout(() => {
1156
+ this.showSubmissionLoader = false;
1157
+ this.setProgress(0);
1158
+ }, 500);
1159
+ }
1160
+ resetSubmissionLoader() {
1161
+ clearInterval(this.progressInterval);
1162
+ this.showSubmissionLoader = false;
1163
+ clearInterval(this.dotInterval);
1164
+ this.animatedDots = '';
1165
+ this.setProgress(0);
1166
+ }
1167
+ startTextLoader() {
1168
+ let dotCount = 0;
1169
+ this.dotInterval = setInterval(() => {
1170
+ dotCount = (dotCount + 1) % 4;
1171
+ this.animatedDots = '.'.repeat(dotCount);
1172
+ }, 500);
1173
+ }
1174
+ updateStepText(progress) {
1175
+ if (progress < 25) {
1176
+ this.currentStep = 'Validating form';
1177
+ }
1178
+ else if (progress < 60) {
1179
+ this.currentStep = 'Uploading data';
1180
+ }
1181
+ else if (progress < 90) {
1182
+ this.currentStep = 'Saving submission';
1183
+ }
1184
+ else {
1185
+ this.currentStep = 'Finalizing';
1186
+ }
1187
+ }
1116
1188
  calculateFormFinalScore() {
1117
1189
  const goodScore = this.maxPossibleGoodScore
1118
1190
  ? 100 - (this.sumOfGoodFindings / this.maxPossibleGoodScore) * 100
@@ -1498,11 +1570,11 @@ export class SubmitFormComponent {
1498
1570
  this.cancel.emit();
1499
1571
  }
1500
1572
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SubmitFormComponent, deps: [{ token: i1.FormService }, { token: i2.ToastrService }, { token: i3.Router }, { token: i4.DataService }, { token: i5.RecaptchaService }, { token: i6.ValidationService }, { token: i0.ChangeDetectorRef }, { token: i7.ElementTrackerService }, { token: i8.FormValidationService }, { token: i9.AggregationFunctionService }, { token: i10.ScoreCalculationService }, { token: i11.MatDialog }, { token: i12.WhenClauseService }], target: i0.ɵɵFactoryTarget.Component }); }
1501
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SubmitFormComponent, selector: "lib-submit-form", inputs: { moduleName: "moduleName", edit: "edit", submissionId: "submissionId", acceptedLanguage: "acceptedLanguage", skipMargin: "skipMargin", skipValidation: "skipValidation", navigateTo: "navigateTo", country: "country", showCancelButton: "showCancelButton", isActionTriggered: "isActionTriggered" }, outputs: { submit: "submit", apiCalled: "apiCalled", currentPageIndexChange: "currentPageIndexChange", cancel: "cancel" }, viewQueries: [{ propertyName: "child", first: true, predicate: NavigationTabsComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"outer-container\">\n\n<ng-container *ngIf=\"isLoadingPages\">\n <ngx-skeleton-loader count=\"5\"></ngx-skeleton-loader>\n</ng-container>\n\n <div class=\"head container\" *ngIf=\"!skipMargin\">\n <lib-header [name]=\"name\" [skipMargin]=\"skipMargin\"></lib-header>\n </div>\n\n\n\n <div class=\"body\" [ngClass]=\"{ 'skip-margin': skipMargin,container: !skipMargin}\">\n\n <lib-submission-container [parentQuestionAnswers]=\"parentQuestionAnswers\"\n *ngIf=\"parentQuestionAnswers\"></lib-submission-container>\n\n <lib-navigation-tabs\n *ngIf=\"navigation == 'TAB'\"\n [skipMargin]=\"skipMargin\"\n [skipValidation]=\"skipValidation\"\n [pages]=\"pages\"\n [currentPageIndex]=\"currentPageIndex\"\n (pageChanged)=\"setCurrentPage($event)\"\n (submitEmit)=\"submitForm()\"\n [pageDetails]=\"pageDetails\"\n [eligibleForSubmission]=\"eligibleForSubmission\"\n [edit]=\"edit\"\n [acceptedLanguage] = \"acceptedLanguage\"\n [isActionTriggered]=\"isActionTriggered\"\n [primaryColor]=\"primaryColor\"\n [secondaryColor]=\"secondaryColor\"\n [markAllQuestionsAsRequired]=\"markAllQuestionsAsRequired\"\n [submissionInProgress]=\"submissionInProgress\"\n [submissionInDraft]=\"submissionInDraft\"\n [showCancelButton]=\"showCancelButton\"\n (saveAsDraftEmit)=\"saveAsDraft()\"\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n (rowSetIndex)=\"loadMoreData($event)\"\n (cancel)=\"cancelled()\"\n ></lib-navigation-tabs>\n <lib-next-prev-navigation\n *ngIf=\"navigation == 'NEXT_AND_PREVIOUS_BUTTON'\"\n [skipMargin]=\"skipMargin\"\n [currentPageIndex]=\"currentPageIndex\"\n [pageDetails]=\"pageDetails\"\n (rowSetIndex)=\"loadMoreData($event)\"\n [pages]=\"pages\"\n [previousPage]=\"previousPage\"\n [isActionTriggered]=\"isActionTriggered\"\n [currentPage]=\"currentPage\"\n [primaryColor]=\"primaryColor\"\n [secondaryColor]=\"secondaryColor\"\n [nextPage]=\"nextPage\"\n (navigateNext)=\"navigateToNextPage()\"\n (navigatePrevious)=\"navigateToPreviousPage()\"\n [acceptedLanguage] = \"acceptedLanguage\"\n (submitEmit)=\"submitForm()\"\n (saveAsDraftEmit)=\"saveAsDraft()\"\n [edit]=\"edit\"\n [eligibleForSubmission]=\"eligibleForSubmission\"\n [submissionInProgress]=\"submissionInProgress\"\n [submissionInDraft]=\"submissionInDraft\"\n [showCancelButton]=\"showCancelButton\"\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n (cancel)=\"cancelled()\"\n [skipValidation]=\"skipValidation\"\n ></lib-next-prev-navigation>\n </div>\n</div>\n", styles: [".outer-container{background-color:#fff;padding:20px;position:relative;margin-top:25px}@media (max-width: 576px){.outer-container{padding:8px}}.head{background-color:#fff;padding:0!important}.body{position:relative;z-index:1;background:#efefef;border-radius:6px}.skip-margin{background:#fff}.save-draft-wrapper{display:flex;justify-content:flex-end;gap:1rem;margin-top:1rem;margin-right:2rem;padding:0 1.5rem 1.5rem}.draft-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:.65rem 1.6rem;font-size:14px;font-weight:500;border-radius:9999px;border:1px solid transparent;cursor:pointer;background:linear-gradient(135deg,#2563eb,#1d4ed8);color:#fff;transition:all .2s ease}.draft-btn:hover:not(:disabled){background:linear-gradient(135deg,#1e40af,#1d4ed8);transform:translateY(-1px);box-shadow:0 3px 6px #0000001a}.draft-btn:disabled{background:#cbd5e1;color:#64748b;cursor:not-allowed;box-shadow:none}.draft-btn .spinner{border:2px solid rgba(255,255,255,.3);border-top:2px solid #fff;border-radius:50%;width:14px;height:14px;animation:spin .6s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "directive", type: i13.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i14.NgxSkeletonLoaderComponent, selector: "ngx-skeleton-loader", inputs: ["count", "loadingText", "appearance", "animation", "ariaLabel", "theme"] }, { kind: "component", type: i15.HeaderComponent, selector: "lib-header", inputs: ["name", "skipMargin"] }, { kind: "component", type: i16.NavigationTabsComponent, selector: "lib-navigation-tabs", inputs: ["pages", "currentPageIndex", "skipValidation", "edit", "acceptedLanguage", "eligibleForSubmission", "pageDetails", "markAllQuestionsAsRequired", "skipMargin", "primaryColor", "secondaryColor", "isActionTriggered", "submissionInProgress", "submissionInDraft", "showCancelButton"], outputs: ["pageChanged", "submitEmit", "saveAsDraftEmit", "subFormChange", "rowSetIndex", "cancel"] }, { kind: "component", type: i17.NextPrevNavigationComponent, selector: "lib-next-prev-navigation", inputs: ["skipValidation", "currentPageIndex", "pages", "previousPage", "nextPage", "currentPage", "pageDetails", "skipMargin", "edit", "acceptedLanguage", "primaryColor", "secondaryColor", "isActionTriggered", "submissionInProgress", "submissionInDraft", "eligibleForSubmission", "showCancelButton"], outputs: ["navigateNext", "navigatePrevious", "submitEmit", "saveAsDraftEmit", "cancel", "subFormChange", "rowSetIndex"] }, { kind: "component", type: i18.SubmissionContainerComponent, selector: "lib-submission-container", inputs: ["parentQuestionAnswers"] }] }); }
1573
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SubmitFormComponent, selector: "lib-submit-form", inputs: { moduleName: "moduleName", edit: "edit", submissionId: "submissionId", acceptedLanguage: "acceptedLanguage", skipMargin: "skipMargin", skipValidation: "skipValidation", navigateTo: "navigateTo", country: "country", showCancelButton: "showCancelButton", isActionTriggered: "isActionTriggered" }, outputs: { submit: "submit", apiCalled: "apiCalled", currentPageIndexChange: "currentPageIndexChange", cancel: "cancel" }, viewQueries: [{ propertyName: "child", first: true, predicate: NavigationTabsComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"outer-container\">\n\n<ng-container *ngIf=\"isLoadingPages\">\n <ngx-skeleton-loader count=\"5\"></ngx-skeleton-loader>\n</ng-container>\n\n <div class=\"head container\" *ngIf=\"!skipMargin\">\n <lib-header [name]=\"name\" [skipMargin]=\"skipMargin\"></lib-header>\n </div>\n\n\n\n <div class=\"body\" [ngClass]=\"{ 'skip-margin': skipMargin,container: !skipMargin}\">\n\n <lib-submission-container [parentQuestionAnswers]=\"parentQuestionAnswers\"\n *ngIf=\"parentQuestionAnswers\"></lib-submission-container>\n\n <lib-navigation-tabs\n *ngIf=\"navigation == 'TAB'\"\n [skipMargin]=\"skipMargin\"\n [skipValidation]=\"skipValidation\"\n [pages]=\"pages\"\n [currentPageIndex]=\"currentPageIndex\"\n (pageChanged)=\"setCurrentPage($event)\"\n (submitEmit)=\"submitForm()\"\n [pageDetails]=\"pageDetails\"\n [eligibleForSubmission]=\"eligibleForSubmission\"\n [edit]=\"edit\"\n [acceptedLanguage] = \"acceptedLanguage\"\n [isActionTriggered]=\"isActionTriggered\"\n [primaryColor]=\"primaryColor\"\n [secondaryColor]=\"secondaryColor\"\n [markAllQuestionsAsRequired]=\"markAllQuestionsAsRequired\"\n [submissionInProgress]=\"submissionInProgress\"\n [submissionInDraft]=\"submissionInDraft\"\n [showCancelButton]=\"showCancelButton\"\n [submissionProgress]=\"submissionProgress\"\n [animatedDots]=\"animatedDots\"\n [currentStep]=\"currentStep\"\n (saveAsDraftEmit)=\"saveAsDraft()\"\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n (rowSetIndex)=\"loadMoreData($event)\"\n (cancel)=\"cancelled()\"\n ></lib-navigation-tabs>\n <lib-next-prev-navigation\n *ngIf=\"navigation == 'NEXT_AND_PREVIOUS_BUTTON'\"\n [skipMargin]=\"skipMargin\"\n [currentPageIndex]=\"currentPageIndex\"\n [pageDetails]=\"pageDetails\"\n (rowSetIndex)=\"loadMoreData($event)\"\n [pages]=\"pages\"\n [previousPage]=\"previousPage\"\n [isActionTriggered]=\"isActionTriggered\"\n [currentPage]=\"currentPage\"\n [primaryColor]=\"primaryColor\"\n [secondaryColor]=\"secondaryColor\"\n [nextPage]=\"nextPage\"\n (navigateNext)=\"navigateToNextPage()\"\n (navigatePrevious)=\"navigateToPreviousPage()\"\n [acceptedLanguage] = \"acceptedLanguage\"\n (submitEmit)=\"submitForm()\"\n (saveAsDraftEmit)=\"saveAsDraft()\"\n [edit]=\"edit\"\n [eligibleForSubmission]=\"eligibleForSubmission\"\n [submissionInProgress]=\"submissionInProgress\"\n [submissionInDraft]=\"submissionInDraft\"\n [showCancelButton]=\"showCancelButton\"\n [submissionProgress]=\"submissionProgress\"\n [animatedDots]=\"animatedDots\"\n [currentStep]=\"currentStep\"\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n (cancel)=\"cancelled()\"\n [skipValidation]=\"skipValidation\"\n ></lib-next-prev-navigation>\n </div>\n</div>\n", styles: [".outer-container{background-color:#fff;padding:20px;position:relative;margin-top:25px}@media (max-width: 576px){.outer-container{padding:8px}}.head{background-color:#fff;padding:0!important}.body{position:relative;z-index:1;background:#efefef;border-radius:6px}.skip-margin{background:#fff}.save-draft-wrapper{display:flex;justify-content:flex-end;gap:1rem;margin-top:1rem;margin-right:2rem;padding:0 1.5rem 1.5rem}.draft-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:.65rem 1.6rem;font-size:14px;font-weight:500;border-radius:9999px;border:1px solid transparent;cursor:pointer;background:linear-gradient(135deg,#2563eb,#1d4ed8);color:#fff;transition:all .2s ease}.draft-btn:hover:not(:disabled){background:linear-gradient(135deg,#1e40af,#1d4ed8);transform:translateY(-1px);box-shadow:0 3px 6px #0000001a}.draft-btn:disabled{background:#cbd5e1;color:#64748b;cursor:not-allowed;box-shadow:none}.draft-btn .spinner{border:2px solid rgba(255,255,255,.3);border-top:2px solid #fff;border-radius:50%;width:14px;height:14px;animation:spin .6s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "directive", type: i13.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i14.NgxSkeletonLoaderComponent, selector: "ngx-skeleton-loader", inputs: ["count", "loadingText", "appearance", "animation", "ariaLabel", "theme"] }, { kind: "component", type: i15.HeaderComponent, selector: "lib-header", inputs: ["name", "skipMargin"] }, { kind: "component", type: i16.NavigationTabsComponent, selector: "lib-navigation-tabs", inputs: ["pages", "currentPageIndex", "skipValidation", "edit", "acceptedLanguage", "eligibleForSubmission", "pageDetails", "markAllQuestionsAsRequired", "skipMargin", "primaryColor", "secondaryColor", "isActionTriggered", "submissionInProgress", "submissionInDraft", "showCancelButton", "submissionProgress", "currentStep", "animatedDots"], outputs: ["pageChanged", "submitEmit", "saveAsDraftEmit", "subFormChange", "rowSetIndex", "cancel"] }, { kind: "component", type: i17.NextPrevNavigationComponent, selector: "lib-next-prev-navigation", inputs: ["skipValidation", "currentPageIndex", "pages", "previousPage", "nextPage", "currentPage", "pageDetails", "skipMargin", "edit", "acceptedLanguage", "primaryColor", "secondaryColor", "isActionTriggered", "submissionInProgress", "submissionInDraft", "eligibleForSubmission", "showCancelButton", "submissionProgress", "currentStep", "animatedDots"], outputs: ["navigateNext", "navigatePrevious", "submitEmit", "saveAsDraftEmit", "cancel", "subFormChange", "rowSetIndex"] }, { kind: "component", type: i18.SubmissionContainerComponent, selector: "lib-submission-container", inputs: ["parentQuestionAnswers"] }] }); }
1502
1574
  }
1503
1575
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SubmitFormComponent, decorators: [{
1504
1576
  type: Component,
1505
- args: [{ selector: 'lib-submit-form', template: "<div class=\"outer-container\">\n\n<ng-container *ngIf=\"isLoadingPages\">\n <ngx-skeleton-loader count=\"5\"></ngx-skeleton-loader>\n</ng-container>\n\n <div class=\"head container\" *ngIf=\"!skipMargin\">\n <lib-header [name]=\"name\" [skipMargin]=\"skipMargin\"></lib-header>\n </div>\n\n\n\n <div class=\"body\" [ngClass]=\"{ 'skip-margin': skipMargin,container: !skipMargin}\">\n\n <lib-submission-container [parentQuestionAnswers]=\"parentQuestionAnswers\"\n *ngIf=\"parentQuestionAnswers\"></lib-submission-container>\n\n <lib-navigation-tabs\n *ngIf=\"navigation == 'TAB'\"\n [skipMargin]=\"skipMargin\"\n [skipValidation]=\"skipValidation\"\n [pages]=\"pages\"\n [currentPageIndex]=\"currentPageIndex\"\n (pageChanged)=\"setCurrentPage($event)\"\n (submitEmit)=\"submitForm()\"\n [pageDetails]=\"pageDetails\"\n [eligibleForSubmission]=\"eligibleForSubmission\"\n [edit]=\"edit\"\n [acceptedLanguage] = \"acceptedLanguage\"\n [isActionTriggered]=\"isActionTriggered\"\n [primaryColor]=\"primaryColor\"\n [secondaryColor]=\"secondaryColor\"\n [markAllQuestionsAsRequired]=\"markAllQuestionsAsRequired\"\n [submissionInProgress]=\"submissionInProgress\"\n [submissionInDraft]=\"submissionInDraft\"\n [showCancelButton]=\"showCancelButton\"\n (saveAsDraftEmit)=\"saveAsDraft()\"\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n (rowSetIndex)=\"loadMoreData($event)\"\n (cancel)=\"cancelled()\"\n ></lib-navigation-tabs>\n <lib-next-prev-navigation\n *ngIf=\"navigation == 'NEXT_AND_PREVIOUS_BUTTON'\"\n [skipMargin]=\"skipMargin\"\n [currentPageIndex]=\"currentPageIndex\"\n [pageDetails]=\"pageDetails\"\n (rowSetIndex)=\"loadMoreData($event)\"\n [pages]=\"pages\"\n [previousPage]=\"previousPage\"\n [isActionTriggered]=\"isActionTriggered\"\n [currentPage]=\"currentPage\"\n [primaryColor]=\"primaryColor\"\n [secondaryColor]=\"secondaryColor\"\n [nextPage]=\"nextPage\"\n (navigateNext)=\"navigateToNextPage()\"\n (navigatePrevious)=\"navigateToPreviousPage()\"\n [acceptedLanguage] = \"acceptedLanguage\"\n (submitEmit)=\"submitForm()\"\n (saveAsDraftEmit)=\"saveAsDraft()\"\n [edit]=\"edit\"\n [eligibleForSubmission]=\"eligibleForSubmission\"\n [submissionInProgress]=\"submissionInProgress\"\n [submissionInDraft]=\"submissionInDraft\"\n [showCancelButton]=\"showCancelButton\"\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n (cancel)=\"cancelled()\"\n [skipValidation]=\"skipValidation\"\n ></lib-next-prev-navigation>\n </div>\n</div>\n", styles: [".outer-container{background-color:#fff;padding:20px;position:relative;margin-top:25px}@media (max-width: 576px){.outer-container{padding:8px}}.head{background-color:#fff;padding:0!important}.body{position:relative;z-index:1;background:#efefef;border-radius:6px}.skip-margin{background:#fff}.save-draft-wrapper{display:flex;justify-content:flex-end;gap:1rem;margin-top:1rem;margin-right:2rem;padding:0 1.5rem 1.5rem}.draft-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:.65rem 1.6rem;font-size:14px;font-weight:500;border-radius:9999px;border:1px solid transparent;cursor:pointer;background:linear-gradient(135deg,#2563eb,#1d4ed8);color:#fff;transition:all .2s ease}.draft-btn:hover:not(:disabled){background:linear-gradient(135deg,#1e40af,#1d4ed8);transform:translateY(-1px);box-shadow:0 3px 6px #0000001a}.draft-btn:disabled{background:#cbd5e1;color:#64748b;cursor:not-allowed;box-shadow:none}.draft-btn .spinner{border:2px solid rgba(255,255,255,.3);border-top:2px solid #fff;border-radius:50%;width:14px;height:14px;animation:spin .6s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"] }]
1577
+ args: [{ selector: 'lib-submit-form', template: "<div class=\"outer-container\">\n\n<ng-container *ngIf=\"isLoadingPages\">\n <ngx-skeleton-loader count=\"5\"></ngx-skeleton-loader>\n</ng-container>\n\n <div class=\"head container\" *ngIf=\"!skipMargin\">\n <lib-header [name]=\"name\" [skipMargin]=\"skipMargin\"></lib-header>\n </div>\n\n\n\n <div class=\"body\" [ngClass]=\"{ 'skip-margin': skipMargin,container: !skipMargin}\">\n\n <lib-submission-container [parentQuestionAnswers]=\"parentQuestionAnswers\"\n *ngIf=\"parentQuestionAnswers\"></lib-submission-container>\n\n <lib-navigation-tabs\n *ngIf=\"navigation == 'TAB'\"\n [skipMargin]=\"skipMargin\"\n [skipValidation]=\"skipValidation\"\n [pages]=\"pages\"\n [currentPageIndex]=\"currentPageIndex\"\n (pageChanged)=\"setCurrentPage($event)\"\n (submitEmit)=\"submitForm()\"\n [pageDetails]=\"pageDetails\"\n [eligibleForSubmission]=\"eligibleForSubmission\"\n [edit]=\"edit\"\n [acceptedLanguage] = \"acceptedLanguage\"\n [isActionTriggered]=\"isActionTriggered\"\n [primaryColor]=\"primaryColor\"\n [secondaryColor]=\"secondaryColor\"\n [markAllQuestionsAsRequired]=\"markAllQuestionsAsRequired\"\n [submissionInProgress]=\"submissionInProgress\"\n [submissionInDraft]=\"submissionInDraft\"\n [showCancelButton]=\"showCancelButton\"\n [submissionProgress]=\"submissionProgress\"\n [animatedDots]=\"animatedDots\"\n [currentStep]=\"currentStep\"\n (saveAsDraftEmit)=\"saveAsDraft()\"\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n (rowSetIndex)=\"loadMoreData($event)\"\n (cancel)=\"cancelled()\"\n ></lib-navigation-tabs>\n <lib-next-prev-navigation\n *ngIf=\"navigation == 'NEXT_AND_PREVIOUS_BUTTON'\"\n [skipMargin]=\"skipMargin\"\n [currentPageIndex]=\"currentPageIndex\"\n [pageDetails]=\"pageDetails\"\n (rowSetIndex)=\"loadMoreData($event)\"\n [pages]=\"pages\"\n [previousPage]=\"previousPage\"\n [isActionTriggered]=\"isActionTriggered\"\n [currentPage]=\"currentPage\"\n [primaryColor]=\"primaryColor\"\n [secondaryColor]=\"secondaryColor\"\n [nextPage]=\"nextPage\"\n (navigateNext)=\"navigateToNextPage()\"\n (navigatePrevious)=\"navigateToPreviousPage()\"\n [acceptedLanguage] = \"acceptedLanguage\"\n (submitEmit)=\"submitForm()\"\n (saveAsDraftEmit)=\"saveAsDraft()\"\n [edit]=\"edit\"\n [eligibleForSubmission]=\"eligibleForSubmission\"\n [submissionInProgress]=\"submissionInProgress\"\n [submissionInDraft]=\"submissionInDraft\"\n [showCancelButton]=\"showCancelButton\"\n [submissionProgress]=\"submissionProgress\"\n [animatedDots]=\"animatedDots\"\n [currentStep]=\"currentStep\"\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n (cancel)=\"cancelled()\"\n [skipValidation]=\"skipValidation\"\n ></lib-next-prev-navigation>\n </div>\n</div>\n", styles: [".outer-container{background-color:#fff;padding:20px;position:relative;margin-top:25px}@media (max-width: 576px){.outer-container{padding:8px}}.head{background-color:#fff;padding:0!important}.body{position:relative;z-index:1;background:#efefef;border-radius:6px}.skip-margin{background:#fff}.save-draft-wrapper{display:flex;justify-content:flex-end;gap:1rem;margin-top:1rem;margin-right:2rem;padding:0 1.5rem 1.5rem}.draft-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:.65rem 1.6rem;font-size:14px;font-weight:500;border-radius:9999px;border:1px solid transparent;cursor:pointer;background:linear-gradient(135deg,#2563eb,#1d4ed8);color:#fff;transition:all .2s ease}.draft-btn:hover:not(:disabled){background:linear-gradient(135deg,#1e40af,#1d4ed8);transform:translateY(-1px);box-shadow:0 3px 6px #0000001a}.draft-btn:disabled{background:#cbd5e1;color:#64748b;cursor:not-allowed;box-shadow:none}.draft-btn .spinner{border:2px solid rgba(255,255,255,.3);border-top:2px solid #fff;border-radius:50%;width:14px;height:14px;animation:spin .6s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"] }]
1506
1578
  }], ctorParameters: function () { return [{ type: i1.FormService }, { type: i2.ToastrService }, { type: i3.Router }, { type: i4.DataService }, { type: i5.RecaptchaService }, { type: i6.ValidationService }, { type: i0.ChangeDetectorRef }, { type: i7.ElementTrackerService }, { type: i8.FormValidationService }, { type: i9.AggregationFunctionService }, { type: i10.ScoreCalculationService }, { type: i11.MatDialog }, { type: i12.WhenClauseService }]; }, propDecorators: { moduleName: [{
1507
1579
  type: Input
1508
1580
  }], edit: [{
@@ -1535,4 +1607,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1535
1607
  }], isActionTriggered: [{
1536
1608
  type: Input
1537
1609
  }] } });
1538
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VibWl0LWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9mb3JtLXN1Ym1pc3Npb24vc3VibWl0LWZvcm0vc3VibWl0LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9mb3JtLXN1Ym1pc3Npb24vc3VibWl0LWZvcm0vc3VibWl0LWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxLQUFLLE1BQU0sTUFBTSwrQkFBK0IsQ0FBQztBQVF4RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQU12RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFtRXBGLE1BQU0sT0FBTyxtQkFBbUI7SUF3RjlCLFlBQ1UsV0FBd0IsRUFDeEIsTUFBcUIsRUFDckIsTUFBYyxFQUNkLFdBQXdCLEVBQ3hCLGdCQUFrQyxFQUNsQyxpQkFBb0MsRUFDcEMsaUJBQW9DLEVBQ3BDLGNBQXFDLEVBQ3JDLHFCQUE0QyxFQUM1QyxnQkFBNEMsRUFDNUMsZ0JBQXlDLEVBQzFDLE1BQWlCLEVBQ2hCLGlCQUFtQztRQVpuQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsc0JBQWlCLEdB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Q0ksTUFBTTtzQkFBZixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUVFLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDSSxNQUFNO3NCQUFmLE1BQU07Z0JBRVAsS0FBSztzQkFESixTQUFTO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFFNUMsaUJBQWlCO3NCQUF6QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9ybS5zZXJ2aWNlJztcbmltcG9ydCAqIGFzIG1hcHBlciBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYXBwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQdWJsaWNGb3JtIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3B1YmxpY0Zvcm0ubW9kZWwnO1xuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IFJlY2FwdGNoYVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZWNhcHRjaGEuc2VydmljZSc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZhbGlkYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBFbGVtZW50VHJhY2tlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbGVtZW50LXRyYWNrZXIuc2VydmljZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uVGFic0NvbXBvbmVudCB9IGZyb20gJy4uL25hdmlnYXRpb24tdGFicy9uYXZpZ2F0aW9uLXRhYnMuY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1WYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zvcm0tdmFsaWRhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uRnVuY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWdncmVnYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRW1pdHRlckRUTyB9IGZyb20gJy4uLy4uL21vZGVscy9lbWl0dGVycy5tb2RlbCc7XG5pbXBvcnQgeyBTY29yZUNhbGN1bGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Njb3JlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IFNhdmVEcmFmdE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vc2F2ZS1hcy1kcmFmdC9zYXZlRHJhZnRNb2RhbENvbXBvbmVudCAnO1xuaW1wb3J0IHsgV2hlbkNsYXVzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy93aGVuQ2xhdXNlLnNlcnZpY2UnO1xuXG5pbnRlcmZhY2UgQW5zd2VyIHtcbiAgcXVlc3Rpb25JZDogc3RyaW5nO1xuICBhbnN3ZXI6IGFueTtcbiAgYW5zd2VySWQ/OiBzdHJpbmc7XG4gIGRlbGV0ZUZpbGVzPzogc3RyaW5nW107XG4gIGZpZWxkcz86IGFueTtcbn1cblxuaW50ZXJmYWNlIFN1Ym1pc3Npb24ge1xuICBzdWJtaXNzaW9uSWQ/OiBzdHJpbmc7XG4gIGFuc3dlcnM6IEFuc3dlcltdO1xufVxuXG5pbnRlcmZhY2UgRm9ybSB7XG4gIGZvcm1JZDogc3RyaW5nO1xuICBkZWxldGVkPzogYm9vbGVhbjtcbiAgZGVsZXRlZFN1Ym1pc3Npb25zOiBhbnlbXTtcbiAgc3VibWlzc2lvbnM6IFN1Ym1pc3Npb25bXTtcbiAgY29waWVkRm9ybXM6IHN0cmluZ1tdO1xuICBzY29yZXM/OntcbiAgICBzY29yZVR5cGU6IHN0cmluZztcbiAgICBzY29yZTogbnVtYmVyO1xuICB9W107XG4gIG1heGltdW1Qb3NzaWJsZVNjb3JlPzpudW1iZXI7XG4gIHNob3c/OmJvb2xlYW47XG59XG5cbmludGVyZmFjZSBDb3B5Rm9ybXN7XG4gIGlkOiBzdHJpbmcsXG4gIHRpdGxlOiBzdHJpbmcsXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gIHBhcmVudFN1YmZvcm06IHN0cmluZyxcbiAgcXVlc3Rpb25SZWxhdGlvbjogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuaW50ZXJmYWNlIFdoZW5DbGF1c2VFbGVtZW50c3tcbiAgZWxlbWVudElkOnN0cmluZztcbiAgZW50aXR5VHlwZTpzdHJpbmc7XG4gIHNob3c6Ym9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFF1ZXN0aW9uQW5zd2Vyc1dyYXBwZXIge1xuICBwYXJlbnRJZDogc3RyaW5nO1xuICBhbnN3ZXJzOiBBbnN3ZXJbXTtcbiAgZm9ybXM6IEZvcm1bXTtcbiAgY29weVN1YkZvcm1zOkNvcHlGb3Jtc1tdO1xuICBzY29yZXM/OntcbiAgICBzY29yZVR5cGU6IHN0cmluZztcbiAgICBzY29yZTogbnVtYmVyO1xuICB9W107XG4gIG1heGltdW1Qb3NzaWJsZVNjb3JlPzpudW1iZXI7XG4gIHdoZW5DbGF1c2VFbGVtZW50czogV2hlbkNsYXVzZUVsZW1lbnRzW11cbn1cblxuaW50ZXJmYWNlIFN1Ym1pc3Npb25TY29yZSB7XG4gIHNjb3JlVHlwZTogc3RyaW5nO1xuICBzY29yZTogbnVtYmVyO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItc3VibWl0LWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vc3VibWl0LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zdWJtaXQtZm9ybS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBTdWJtaXRGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBxdWVzdGlvbjogUHVibGljRm9ybSB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBtb2R1bGVOYW1lOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgZWRpdDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzdWJtaXNzaW9uSWQ6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBhY2NlcHRlZExhbmd1YWdlOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgc2tpcE1hcmdpbjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBza2lwVmFsaWRhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBuYXZpZ2F0ZVRvOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgY291bnRyeTogc3RyaW5nID0gJyc7XG4gIEBPdXRwdXQoKSBzdWJtaXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBhcGlDYWxsZWQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIGN1cnJlbnRQYWdlSW5kZXhDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQElucHV0KCkgc2hvd0NhbmNlbEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgY2FuY2VsOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAVmlld0NoaWxkKE5hdmlnYXRpb25UYWJzQ29tcG9uZW50LCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgY2hpbGQhOiBOYXZpZ2F0aW9uVGFic0NvbXBvbmVudDtcbiAgQElucHV0KCkgaXNBY3Rpb25UcmlnZ2VyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIG5hbWU6IHN0cmluZyA9ICcnO1xuICBzYXZlQXV0b21hdGljYWxseTogYm9vbGVhbiA9IGZhbHNlO1xuICBzYXZlSW50ZXJ2YWw6IG51bWJlciA9IDA7XG4gIGN1c3RvbWl6ZUZvbnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZm9udEZhbWlseTogc3RyaW5nID0gJyc7XG4gIGZvbnRTaXplOiBudW1iZXIgPSAwO1xuICB2YWxpZGF0aW9uU2tpcDogYm9vbGVhbiA9IGZhbHNlO1xuICBlbmFibGVEYXRhRXhwb3J0OiBib29sZWFuID0gZmFsc2U7XG4gIGZpbGVGb3JtYXRzOiBzdHJpbmdbXSA9IFtdO1xuICBlbmFibGVRdWVzdGlvbk51bWJlcmluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBxdWVzdGlvbk51bWJlcmluZzogc3RyaW5nID0gJyc7XG4gIGVuYWJsZUdvb2dsZVJlY2FwdGNoYTogYm9vbGVhbiA9IGZhbHNlO1xuICBnb29nbGVSZWNhcHRjaGFLZXk6IHN0cmluZyA9ICcnO1xuICBnb29nbGVSZWNhcHRjaGFTZWNyZXQ6IHN0cmluZyA9ICcnO1xuICBuYXZpZ2F0aW9uOiBzdHJpbmcgPSAnJztcbiAgbWFya0FsbFF1ZXN0aW9uc0FzUmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcGFnZXM6IGFueSA9IFtdO1xuICBjdXJyZW50UGFnZUluZGV4OiBudW1iZXIgPSAwO1xuICBwcmV2aW91c1BhZ2U6IGFueSA9IHt9O1xuICBjdXJyZW50UGFnZTogYW55ID0ge307XG4gIG5leHRQYWdlOiBhbnkgPSB7fTtcbiAgbGFzdFRhYjogYm9vbGVhbiA9IGZhbHNlO1xuICBxdWVzdGlvbkFuc3dlcnM6IFF1ZXN0aW9uQW5zd2Vyc1dyYXBwZXIgPSB7XG4gICAgcGFyZW50SWQ6ICcnLFxuICAgIGFuc3dlcnM6IFtdLFxuICAgIGZvcm1zOiBbXSxcbiAgICBjb3B5U3ViRm9ybXM6IFtdLFxuICAgIHdoZW5DbGF1c2VFbGVtZW50czogW11cbiAgfTtcbiAgd2ViaG9vazogYW55O1xuICBmaWxlczogeyBxdWVzdGlvbklkOiBzdHJpbmc7IGZpbGU6IGFueSA7IHNob3c/OmJvb2xlYW59W10gPSBbXTtcbiAgcGFyZW50UXVlc3Rpb25zOiBhbnk7XG4gIHN1Ym1pc3Npb246IGFueSA9IHt9O1xuICBwYXJlbnRRdWVzdGlvbkFuc3dlcnM6IGFueTtcbiAgcGFyZW50U3VibWlzc2lvbklkOiBzdHJpbmcgPSAnJztcbiAgc3VibWlzc2lvbkluUHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc3VibWlzc2lvbkluRHJhZnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVjYXB0Y2hhVG9rZW46IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIGlzUmVmcmVzaGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGludGVydmFsSWQ6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IG51bGwgPSBudWxsO1xuICBwYWdlRGV0YWlsczogYW55ID0gW107XG4gIHBhZ2VOdW1iZXI6IG51bWJlciA9IDE7XG4gIHJvd1NldDogbnVtYmVyID0gMDtcbiAgcm93U2V0Q291bnQ6IFtudW1iZXJdID0gWzBdO1xuICByZXRyeUNvdW50OiBudW1iZXIgPSAwO1xuICBtYXhSZXRyaWVzOiBudW1iZXIgPSA1O1xuXG4gIGVsaWdpYmxlRm9yU3VibWlzc2lvbjogeyBzdGF0dXM6IGJvb2xlYW47IG1lc3NhZ2U6IHN0cmluZyB9ID0ge1xuICAgIHN0YXR1czogdHJ1ZSxcbiAgICBtZXNzYWdlOiAnJyxcbiAgfTtcbiAgd2ViaG9va1BheWxvYWRBcnJheTogYW55W10gPSBbXTtcbiAgaW5WYWxpZFF1ZXN0aW9uczogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIHZpc2l0ZWRSb3dzOiBNYXA8bnVtYmVyLCBudW1iZXI+ID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcbiAgYWxsRWxlbWVudElkczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBkZWJvdW5jZVRpbWVyOiBhbnk7XG4gIHByaW1hcnlDb2xvcjogc3RyaW5nID0gJyc7XG4gIHNlY29uZGFyeUNvbG9yOiBzdHJpbmcgPSAnJztcbiAgaXNMb2FkaW5nUGFnZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29weVN1YmZvcm1zOiBDb3B5Rm9ybXNbXSA9IFtdO1xuICBlbWl0dGVyczogRW1pdHRlckRUT1tdID0gW107XG4gIG1heFBvc3NpYmxlU2NvcmUhOiBudW1iZXI7XG4gIG1heFBvc3NpYmxlR29vZFNjb3JlITogbnVtYmVyO1xuICBtYXhQb3NzaWJsZUJhZFNjb3JlITogbnVtYmVyO1xuICBzdW1PZkZpbmRpbmdzITogbnVtYmVyO1xuICBzdW1PZkdvb2RGaW5kaW5ncyE6IG51bWJlcjtcbiAgc3VtT2ZCYWRGaW5kaW5ncyE6IG51bWJlcjtcbiAgZHJhZnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmb3JtU2VydmljZTogRm9ybVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcbiAgICBwcml2YXRlIHJlY2FwdGNoYVNlcnZpY2U6IFJlY2FwdGNoYVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB2YWxpZGF0aW9uU2VydmljZTogVmFsaWRhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBlbGVtZW50VHJhY2tlcjogRWxlbWVudFRyYWNrZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybVZhbGlkYXRpb25TZXJ2aWNlOiBGb3JtVmFsaWRhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhZ2dyZWdhdGVTZXJ2aWNlOiBBZ2dyZWdhdGlvbkZ1bmN0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHNjb3JlQ2FsY1NlcnZpY2U6IFNjb3JlQ2FsY3VsYXRpb25TZXJ2aWNlLFxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwcml2YXRlIHdoZW5DbGF1c2VTZXJ2aWNlOldoZW5DbGF1c2VTZXJ2aWNlXG4gICkge1xuICAgIGNvbnN0IG5hdmlnYXRpb24gPSB0aGlzLnJvdXRlci5nZXRDdXJyZW50TmF2aWdhdGlvbigpO1xuICAgIHRoaXMuc3VibWlzc2lvbiA9IG5hdmlnYXRpb24/LmV4dHJhcy5zdGF0ZT8uWydzdWJtaXNzaW9uJ107XG4gICAgdGhpcy5wYXJlbnRTdWJtaXNzaW9uSWQgPSB0aGlzLnN1Ym1pc3Npb24/LmlkO1xuICAgIHRoaXMucGFyZW50UXVlc3Rpb25BbnN3ZXJzID0gdGhpcy5zdWJtaXNzaW9uPy5xdWVzdGlvbkFuc3dlcnM7XG4gICAgdGhpcy5wYXJlbnRRdWVzdGlvbnMgPSBuYXZpZ2F0aW9uPy5leHRyYXMuc3RhdGU/LlsncGFyZW50UXVlc3Rpb25zJ107XG4gICAgdGhpcy5kYXRhU2VydmljZS5zZXRQYXJlbnRRdWVzdGlvbnModGhpcy5wYXJlbnRRdWVzdGlvbnMpO1xuICB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudmlzaXRlZFJvd3MuY2xlYXIoKTtcbiAgICB0aGlzLnJlY2FwdGNoYVNlcnZpY2UucmVtb3ZlUmVjYXB0Y2hhU2NyaXB0KCk7XG4gICAgaWYgKHRoaXMuaW50ZXJ2YWxJZCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsSWQpO1xuICAgICAgdGhpcy5pbnRlcnZhbElkID0gbnVsbDtcbiAgICAgIHRoaXMuaXNSZWZyZXNoaW5nID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuYWdncmVnYXRlU2VydmljZS5jbGVhckFsbCgpO1xuICAgIHRoaXMucmVjYXB0Y2hhU2VydmljZS5yZW1vdmVSZWNhcHRjaGFTY3JpcHQoKTtcbiAgICB0aGlzLndoZW5DbGF1c2VTZXJ2aWNlLnJlc2V0U2VydmljZSgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydhY2NlcHRlZExhbmd1YWdlJ10pIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleCA9IDA7XG4gICAgICB0aGlzLmFjY2VwdGVkTGFuZ3VhZ2UgPSBjaGFuZ2VzWydhY2NlcHRlZExhbmd1YWdlJ10uY3VycmVudFZhbHVlO1xuICAgICAgaWYgKCF0aGlzLmVkaXQpIHRoaXMuZ2V0Rm9ybURhdGEoKTtcbiAgICB9XG4gICAgaWYoY2hhbmdlc1snc3VibWlzc2lvbklkJ10pe1xuICAgICAgdGhpcy5zdWJtaXNzaW9uSWQ9Y2hhbmdlc1snc3VibWlzc2lvbklkJ10uY3VycmVudFZhbHVlO1xuICAgICAgaWYgKHRoaXMuZWRpdCAmJiB0aGlzLnN1Ym1pc3Npb25JZCkge1xuICAgICAgICB0aGlzLmdldFN1Ym1pdHRlZEZvcm1EYXRhKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuZWRpdCAmJiB0aGlzLnN1Ym1pc3Npb25JZCkge1xuICAgICAgLy8gdGhpcy5nZXRTdWJtaXR0ZWRGb3JtRGF0YSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGlzLmdldEZvcm1EYXRhKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5hYmxlR29vZ2xlUmVjYXB0Y2hhKSB7XG4gICAgICB0aGlzLnJlY2FwdGNoYUluaXRpYWxpemVkKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmVjYXB0Y2hhSW5pdGlhbGl6ZWQoKSB7XG4gICAgYXdhaXQgdGhpcy5yZWNhcHRjaGFTZXJ2aWNlLmluaXRpYWxpemUoKTtcbiAgICB0aGlzLnJlY2FwdGNoYVNlcnZpY2UucmVuZGVyKCdjYXB0Y2hhLWNvbnRhaW5lcicsICh0b2tlbikgPT4ge30pO1xuICB9XG5cbiAgYXN5bmMgZ2V0VG9rZW4oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVjYXB0Y2hhU2VydmljZS5pbml0aWFsaXplKCk7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgQ0FQVENIQSB3YXMgcmVuZGVyZWRcbiAgICAgICAgaWYgKCF0aGlzLnJlY2FwdGNoYVNlcnZpY2UuaXNSZW5kZXJlZCgpKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdyZUNBUFRDSEEgbm90IHJlbmRlcmVkIHlldC4nKTtcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgnJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBzb2x2ZWQsIHJldHVybiB0aGUgdG9rZW5cbiAgICAgICAgaWYgKHRoaXMucmVjYXB0Y2hhU2VydmljZS5pc1Jlc29sdmVkKCkpIHtcbiAgICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMucmVjYXB0Y2hhU2VydmljZS5nZXRSZXNwb25zZSgpO1xuXG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUodG9rZW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgZXhwaXJlZCBvciB1bnNvbHZlZCwgcmV0dXJuIGVtcHR5IHN0cmluZ1xuICAgICAgICBjb25zb2xlLndhcm4oJ3JlQ0FQVENIQSBub3QgcmVzb2x2ZWQgb3IgZXhwaXJlZC4nKTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoJycpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3JlQ0FQVENIQSBpbml0aWFsaXphdGlvbiBmYWlsZWQ6JywgZXJyKTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoJycpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbG9hZEZvbnQoZm9udE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGZvbnRQYXRoID0gYGFzc2V0cy9mb250cy8ke2ZvbnROYW1lfS53b2ZmMmA7IC8vIEFkanVzdCBleHRlbnNpb24gYXMgcGVyIHlvdXIgZm9udCBmaWxlXG4gICAgY29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgIHN0eWxlLmlubmVySFRNTCA9IGBcbiAgICAgIEBmb250LWZhY2Uge1xuICAgICAgICBmb250LWZhbWlseTogJyR7Zm9udE5hbWV9JztcbiAgICAgICAgc3JjOiB1cmwoJyR7Zm9udFBhdGh9JykgZm9ybWF0KCd3b2ZmMicpO1xuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICB9XG4gICAgICBib2R5IHtcbiAgICAgICAgZm9udC1mYW1pbHk6ICcke2ZvbnROYW1lfScsIHNhbnMtc2VyaWY7XG4gICAgICB9XG4gICAgYDtcbiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgfVxuXG4gIGdldEZvcm1EYXRhKCkge1xuICAgIHRoaXMuaXNMb2FkaW5nUGFnZXMgPSB0cnVlO1xuICAgIHRoaXMuZm9ybVNlcnZpY2VcbiAgICAgIC5nZXRRdWVzdGlvbnModGhpcy5tb2R1bGVOYW1lLCAxLCAwLCB0cnVlLHRoaXMuY291bnRyeSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdQYWdlcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVuYWJsZUdvb2dsZVJlY2FwdGNoYSA9XG4gICAgICAgICAgcmVzcG9uc2UucmVzdWx0Lm1vZHVsZUNvbmZpZ3VyYXRpb24/LmVuYWJsZUdvb2dsZVJlY2FwdGNoYTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbiA9IG1hcHBlci5tYXBQdWJsaWNGb3JtVG9Nb2RlbChyZXNwb25zZSk7XG4gICAgICAgIHRoaXMuZW1pdHRlcnMgPSB0aGlzLnF1ZXN0aW9uLmVtaXR0ZXJzIHx8IFtdO1xuICAgICAgICB0aGlzLmFzc2lnblF1ZXN0aW9uUHJvcGVydGllcyh0aGlzLnF1ZXN0aW9uKTtcbiAgICAgICAgdGhpcy5zZXRVcEZvbnRGYW1pbHkocmVzcG9uc2UpO1xuICAgICAgICB0aGlzLnByaW1hcnlDb2xvciA9IHJlc3BvbnNlLnJlc3VsdC5wcmltYXJ5Q29sb3I7XG4gICAgICAgIHRoaXMuc2Vjb25kYXJ5Q29sb3IgPSByZXNwb25zZS5yZXN1bHQuc2Vjb25kYXJ5Q29sb3I7XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZUdvb2dsZVJlY2FwdGNoYSkgdGhpcy5yZWNhcHRjaGFJbml0aWFsaXplZCgpO1xuICAgICAgICBpZiAocmVzcG9uc2U/LnJlc3VsdD8ucGFnZURldGFpbHMpIHtcbiAgICAgICAgICB0aGlzLnBhZ2VEZXRhaWxzID0gcmVzcG9uc2UucmVzdWx0LnBhZ2VEZXRhaWxzO1xuICAgICAgICAgIHRoaXMubmV4dFBhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzWzFdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud2ViaG9vayA9IHJlc3BvbnNlPy5yZXN1bHQ/LndlYmhvb2tzO1xuICAgICAgICB0aGlzLndlYmhvb2tQYXlsb2FkQXJyYXkgPSByZXNwb25zZT8ucmVzdWx0Py53ZWJob29rcz8ubWFwKFxuICAgICAgICAgICh3OiBhbnkpID0+ICh7XG4gICAgICAgICAgICBpZDogdy5pZCxcbiAgICAgICAgICAgIC4uLnRoaXMuZXh0cmFjdEdyb3VwZWRXZWJob29rRGF0YShbd10pLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5yb3dTZXRDb3VudFswXSA9IHJlc3BvbnNlLnJlc3VsdC50b3RhbE51bWJlclJvdztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBhZ2VEZXRhaWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLnBhZ2VzW2ldKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VzW2ldID0gW107XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0U3VibWl0dGVkRm9ybURhdGEoKSB7XG4gICAgdGhpcy5mb3JtU2VydmljZVxuICAgICAgLmdldFN1Ym1pdHRlZEZvcm0oXG4gICAgICAgIHRoaXMubW9kdWxlTmFtZSxcbiAgICAgICAgdGhpcy5zdWJtaXNzaW9uSWQsXG4gICAgICAgIDEsXG4gICAgICAgIDAsXG4gICAgICAgIHRoaXMubmF2aWdhdGVUb1xuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5lbmFibGVHb29nbGVSZWNhcHRjaGEgPVxuICAgICAgICAgIHJlc3BvbnNlLnJlc3VsdC5tb2R1bGVDb25maWd1cmF0aW9uLmVuYWJsZUdvb2dsZVJlY2FwdGNoYTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbiA9IG1hcHBlci5tYXBQdWJsaWNGb3JtVG9Nb2RlbChyZXNwb25zZSk7XG4gICAgICAgIHRoaXMuYXNzaWduUXVlc3Rpb25Qcm9wZXJ0aWVzKHRoaXMucXVlc3Rpb24pO1xuICAgICAgICB0aGlzLnByaW1hcnlDb2xvciA9IHJlc3BvbnNlLnJlc3VsdC5wcmltYXJ5Q29sb3I7XG4gICAgICAgIHRoaXMuc2Vjb25kYXJ5Q29sb3IgPSByZXNwb25zZS5yZXN1bHQuc2Vjb25kYXJ5Q29sb3I7XG4gICAgICAgIHRoaXMuZW1pdHRlcnMgPSB0aGlzLnF1ZXN0aW9uLmVtaXR0ZXJzIHx8IFtdO1xuICAgICAgICBpZiAocmVzcG9uc2U/LnJlc3VsdD8ucGFnZURldGFpbHMpIHtcbiAgICAgICAgICB0aGlzLnBhZ2VEZXRhaWxzID0gcmVzcG9uc2UucmVzdWx0LnBhZ2VEZXRhaWxzO1xuICAgICAgICAgIHRoaXMubmV4dFBhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzWzFdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud2ViaG9va1BheWxvYWRBcnJheTtcbiAgICAgICAgdGhpcy53ZWJob29rUGF5bG9hZEFycmF5ID0gcmVzcG9uc2U/LnJlc3VsdD8ud2ViaG9va3M/Lm1hcChcbiAgICAgICAgICAodzogYW55KSA9PiAoe1xuICAgICAgICAgICAgaWQ6IHcuaWQsXG4gICAgICAgICAgICAuLi50aGlzLmV4dHJhY3RHcm91cGVkV2ViaG9va0RhdGEoW3ddKSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnJvd1NldENvdW50WzBdID0gcmVzcG9uc2UucmVzdWx0LnRvdGFsTnVtYmVyUm93O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGFnZURldGFpbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoIXRoaXMucGFnZXNbaV0pIHtcbiAgICAgICAgICAgIHRoaXMucGFnZXNbaV0gPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRVcEZvbnRGYW1pbHkocmVzcG9uc2UpO1xuICAgICAgICBpZiAodGhpcy5uYXZpZ2F0ZVRvKSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRlVG9Gb3JtRWxlbWVudCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZUdvb2dsZVJlY2FwdGNoYSkge1xuICAgICAgICAgIHRoaXMucmVjYXB0Y2hhSW5pdGlhbGl6ZWQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrU3VibWlzc2lvbkVsaWdpYmlsaXR5KCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHNldFVwRm9udEZhbWlseShyZXNwb25zZTogYW55KSB7XG4gICAgLy9zZXQgZm9udCBmYW1pbHkgYW5kIGZvbnQgc2l6ZVxuICAgIGlmIChyZXNwb25zZS5yZXN1bHQ/Lm1vZHVsZUNvbmZpZ3VyYXRpb24/LmN1c3RvbWl6ZUZvbnQpIHtcbiAgICAgIHRoaXMuZm9udEZhbWlseSA9IHJlc3BvbnNlLnJlc3VsdC5tb2R1bGVDb25maWd1cmF0aW9uPy5mb250RmFtaWx5O1xuICAgICAgdGhpcy5mb250U2l6ZSA9IHJlc3BvbnNlLnJlc3VsdC5tb2R1bGVDb25maWd1cmF0aW9uPy5mb250U2l6ZSB8fCAxODtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb250RmFtaWx5ID0gJ1BvcHBpbnMnO1xuICAgICAgdGhpcy5mb250U2l6ZSA9IDE4O1xuICAgIH1cbiAgICB0aGlzLmxvYWRGb250KHRoaXMuZm9udEZhbWlseSk7XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgJy0tbGlicmFyeS1mb250LWZhbWlseScsXG4gICAgICB0aGlzLmZvbnRGYW1pbHlcbiAgICApO1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICctLWxpYnJhcnktZm9udC1zaXplJyxcbiAgICAgIHRoaXMuZm9udFNpemUgKyAncHgnXG4gICAgKTtcbiAgfVxuXG4gIG5hdmlnYXRlVG9Gb3JtRWxlbWVudCgpIHtcbiAgICBpZiAoIXRoaXMucGFnZXMpIHJldHVybjtcblxuICAgIGxldCBmb3VuZFBhZ2VJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvLyBTdGVwIDE6IGZpbmQgdGhlIHBhZ2UgaW5kZXhcbiAgICB0aGlzLnBhZ2VzLmZvckVhY2goKHBhZ2U6IGFueSwgcGFnZUluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGlmICghcGFnZT8ucm93cykgcmV0dXJuO1xuXG4gICAgICBwYWdlLnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgaWYgKCFyb3c/LmdyaWQpIHJldHVybjtcblxuICAgICAgICByb3cuZ3JpZC5mb3JFYWNoKChncmlkSXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IGdyaWRJdGVtPy5lbGVtZW50O1xuICAgICAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuO1xuXG4gICAgICAgICAgLy8gQ2FzZSAxOiBEaXJlY3QgcXVlc3Rpb24gbWF0Y2hcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBncmlkSXRlbS5lbnRpdHlUeXBlID09PSAnUVVFU1RJT04nICYmXG4gICAgICAgICAgICBlbGVtZW50LmlkID09PSB0aGlzLm5hdmlnYXRlVG9cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGZvdW5kUGFnZUluZGV4ID0gcGFnZUluZGV4O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENhc2UgMjogU3ViZm9ybSBtYXRjaFxuICAgICAgICAgIGlmIChncmlkSXRlbS5lbnRpdHlUeXBlID09PSAnU1VCRk9STScpIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmlkID09PSB0aGlzLm5hdmlnYXRlVG8pIHtcbiAgICAgICAgICAgICAgZm91bmRQYWdlSW5kZXggPSBwYWdlSW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGVsZW1lbnQuc3VibWlzc2lvbnM/LnNvbWUoXG4gICAgICAgICAgICAgICAgKHM6IGFueSkgPT4gcy5zdWJtaXNzaW9uSWQgPT09IHRoaXMubmF2aWdhdGVUb1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZm91bmRQYWdlSW5kZXggPSBwYWdlSW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaWYgKGZvdW5kUGFnZUluZGV4ICE9PSBudWxsKSB7XG4gICAgICAvLyBTdGVwIDI6IFNldCBjdXJyZW50IHBhZ2VcbiAgICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleCA9IGZvdW5kUGFnZUluZGV4O1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZXNbdGhpcy5jdXJyZW50UGFnZUluZGV4XTtcblxuICAgICAgaWYgKHRoaXMubmF2aWdhdGlvbiA9PSAnVEFCJykge1xuICAgICAgICB0aGlzLmNoaWxkLnRyaWdnZXJGdW5jdGlvbih0aGlzLmN1cnJlbnRQYWdlSW5kZXgpO1xuICAgICAgfSBlbHNlIHtcblxuICAgICAgICB0aGlzLnByZXZpb3VzUGFnZSA9IHRoaXMucGFnZURldGFpbHNbdGhpcy5jdXJyZW50UGFnZUluZGV4IC0gMV07XG4gICAgICAgIHRoaXMubmV4dFBhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzW3RoaXMuY3VycmVudFBhZ2VJbmRleCArIDFdO1xuICAgICAgfVxuICAgICAgLy8gU3RlcCAzOiBXYWl0IGZvciBET00gcmVuZGVyIGFuZCBzY3JvbGxcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50SWQgPSBgcXVlc3Rpb24tJHt0aGlzLm5hdmlnYXRlVG99YDtcbiAgICAgICAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpO1xuICAgICAgICBpZiAoZWwpIHtcbiAgICAgICAgICBlbC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInIH0pO1xuICAgICAgICAgIHRoaXMuY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTtcbiAgICAgICAgfVxuICAgICAgfSwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihgbmF2aWdhdGVUbyBpZCAke3RoaXMubmF2aWdhdGVUb30gbm90IGZvdW5kIGluIGFueSBwYWdlYCk7XG4gICAgfVxuICB9XG5cbiAgYXNzaWduUXVlc3Rpb25Qcm9wZXJ0aWVzKHF1ZXN0aW9uOiBQdWJsaWNGb3JtKSB7XG4gICAgdGhpcy5uYW1lID0gcXVlc3Rpb24ubmFtZTtcbiAgICB0aGlzLnBhZ2VzID0gcXVlc3Rpb24ucGFnZXM7XG4gICAgaWYgKHRoaXMucGFyZW50UXVlc3Rpb25zKSB7XG4gICAgICB0aGlzLnBhcmVudFF1ZXN0aW9uQW5zd2VycyA9IHF1ZXN0aW9uPy5xdWVzdGlvbkFuc3dlcnM7XG4gICAgICB0aGlzLnBhcmVudFN1Ym1pc3Npb25JZCA9IHF1ZXN0aW9uPy5wYXJlbnRJZDtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZXNbMF07XG4gICAgdGhpcy5uZXh0UGFnZSA9IHRoaXMucGFnZXNbMV07XG4gICAgdGhpcy5zYXZlQXV0b21hdGljYWxseSA9IHF1ZXN0aW9uLmZvcm1Db25maWd1cmF0aW9uLnNhdmVBdXRvbWF0aWNhbGx5O1xuICAgIHRoaXMuc2F2ZUludGVydmFsID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uc2F2ZUludGVydmFsO1xuICAgIHRoaXMuY3VzdG9taXplRm9udCA9IHF1ZXN0aW9uLmZvcm1Db25maWd1cmF0aW9uLmN1c3RvbWl6ZUZvbnQ7XG4gICAgdGhpcy5mb250RmFtaWx5ID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZm9udEZhbWlseTtcbiAgICB0aGlzLmZvbnRTaXplID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZm9udFNpemU7XG4gICAgdGhpcy5lbmFibGVEYXRhRXhwb3J0ID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZW5hYmxlRGF0YUV4cG9ydDtcbiAgICB0aGlzLmZpbGVGb3JtYXRzID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZmlsZUZvcm1hdHM7XG4gICAgdGhpcy5lbmFibGVRdWVzdGlvbk51bWJlcmluZyA9XG4gICAgICBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5lbmFibGVRdWVzdGlvbk51bWJlcmluZztcbiAgICB0aGlzLnF1ZXN0aW9uTnVtYmVyaW5nID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24ucXVlc3Rpb25OdW1iZXJpbmc7XG4gICAgdGhpcy5lbmFibGVHb29nbGVSZWNhcHRjaGEgPVxuICAgICAgcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZW5hYmxlR29vZ2xlUmVjYXB0Y2hhO1xuICAgIHRoaXMuZ29vZ2xlUmVjYXB0Y2hhS2V5ID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZ29vZ2xlUmVjYXB0Y2hhS2V5O1xuICAgIHRoaXMuZ29vZ2xlUmVjYXB0Y2hhU2VjcmV0ID1cbiAgICAgIHF1ZXN0aW9uLmZvcm1Db25maWd1cmF0aW9uLmdvb2dsZVJlY2FwdGNoYVNlY3JldDtcbiAgICB0aGlzLm5hdmlnYXRpb24gPSBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5uYXZpZ2F0aW9uO1xuICAgIHRoaXMubWFya0FsbFF1ZXN0aW9uc0FzUmVxdWlyZWQgPVxuICAgICAgcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24ubWFya0FsbFF1ZXN0aW9uc0FzUmVxdWlyZWQ7XG4gICAgdGhpcy5hcGlDYWxsZWQuZW1pdCh0cnVlKTtcbiAgfVxuXG4gIG5hdmlnYXRlVG9OZXh0UGFnZSgpIHtcbiAgICBpZiAoIXRoaXMuaXNMb2FkaW5nKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICBjb25zdCBuZXh0SW5kZXggPSB0aGlzLmN1cnJlbnRQYWdlSW5kZXggKyAxO1xuICAgICAgaWYgKG5leHRJbmRleCA8IHRoaXMucGFnZURldGFpbHMubGVuZ3RoKSB7XG4gICAgICAgIGlmICh0aGlzLm1hcmtBbGxRdWVzdGlvbnNBc1JlcXVpcmVkKSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudFBhZ2VEYXRhID0gdGhpcy5wYWdlc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgICAgIGxldCB2YWxpZGF0aW9uUmVzcG9uc2UgPSB0cnVlO1xuICAgICAgICAgIGlmICghdGhpcy52YWxpZGF0aW9uU2tpcCkge1xuICAgICAgICAgICAgdmFsaWRhdGlvblJlc3BvbnNlID1cbiAgICAgICAgICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvblNlcnZpY2UudmFsaWRhdGVSZXF1aXJlZFF1ZXN0aW9ucyhcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFnZURhdGFcbiAgICAgICAgICAgICAgKS5pc1ZhbGlkO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodmFsaWRhdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzUGFnZSA9IHRoaXMucGFnZURldGFpbHNbdGhpcy5jdXJyZW50UGFnZUluZGV4XTtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhZ2VzW25leHRJbmRleF0ubGVuZ3RoICE9IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZXNbbmV4dEluZGV4XTtcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4ID0gbmV4dEluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRDdXJyZW50UGFnZShuZXh0SW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5uZXh0UGFnZSA9IHRoaXMucGFnZURldGFpbHNbbmV4dEluZGV4ICsgMV07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucHJldmlvdXNQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgICAgIGlmICh0aGlzLnBhZ2VzW25leHRJbmRleF0ubGVuZ3RoICE9IDApIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW25leHRJbmRleF07XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSBuZXh0SW5kZXg7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q3VycmVudFBhZ2UobmV4dEluZGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5uZXh0UGFnZSA9IHRoaXMucGFnZURldGFpbHNbbmV4dEluZGV4ICsgMV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmNoZWNrU3VibWlzc2lvbkVsaWdpYmlsaXR5KCk7XG4gICAgfVxuICB9XG5cbiAgbmF2aWdhdGVUb1ByZXZpb3VzUGFnZSgpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZUluZGV4ID4gMCkge1xuICAgICAgaWYgKHRoaXMubWFya0FsbFF1ZXN0aW9uc0FzUmVxdWlyZWQpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFBhZ2VEYXRhID0gdGhpcy5wYWdlc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgICBsZXQgdmFsaWRhdGlvblJlc3BvbnNlID0gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLnZhbGlkYXRpb25Ta2lwKSB7XG4gICAgICAgICAgdmFsaWRhdGlvblJlc3BvbnNlID1cbiAgICAgICAgICAgIHRoaXMuZm9ybVZhbGlkYXRpb25TZXJ2aWNlLnZhbGlkYXRlUmVxdWlyZWRRdWVzdGlvbnMoXG4gICAgICAgICAgICAgIGN1cnJlbnRQYWdlRGF0YVxuICAgICAgICAgICAgKS5pc1ZhbGlkO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWxpZGF0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICB0aGlzLm5leHRQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleC0tO1xuICAgICAgICAgIGlmICh0aGlzLnBhZ2VzW3RoaXMuY3VycmVudFBhZ2VJbmRleF0ubGVuZ3RoICE9IDApIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q3VycmVudFBhZ2UodGhpcy5jdXJyZW50UGFnZUluZGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5wcmV2aW91c1BhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzW3RoaXMuY3VycmVudFBhZ2VJbmRleCAtIDFdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm5leHRQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXgtLTtcbiAgICAgICAgaWYgKHRoaXMucGFnZXNbdGhpcy5jdXJyZW50UGFnZUluZGV4XS5sZW5ndGggIT0gMCkge1xuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXRDdXJyZW50UGFnZSh0aGlzLmN1cnJlbnRQYWdlSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJldmlvdXNQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXggLSAxXTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpO1xuICB9XG5cbiAgY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTogdm9pZCB7XG4gICAgdGhpcy5lbGlnaWJsZUZvclN1Ym1pc3Npb24gPSB0aGlzLnZhbGlkYXRlQWxsRWxlbWVudExvYWRlZCgpO1xuICB9XG5cbiAgc2V0Q3VycmVudFBhZ2UoaW5kZXg6IG51bWJlcikge1xuICAgIGlmIChpbmRleCA8IHRoaXMucGFnZXMubGVuZ3RoKSB7XG4gICAgICAvLyBJZiBwYWdlIGFscmVhZHkgZXhpc3RzIEFORCBoYXMgY29udGVudCDihpIgbm8gbmVlZCB0byBmZXRjaCBhZ2FpblxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnBhZ2VzW2luZGV4XSAmJlxuICAgICAgICB0aGlzLnBhZ2VzW2luZGV4XS5yb3dzICYmXG4gICAgICAgIHRoaXMucGFnZXNbaW5kZXhdLnJvd3MubGVuZ3RoID4gMFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnBhZ2VOdW1iZXIgPSBpbmRleCArIDE7XG4gICAgaWYgKHRoaXMuZWRpdCkge1xuICAgICAgdGhpcy5mb3JtU2VydmljZVxuICAgICAgICAuZ2V0U3VibWl0dGVkRm9ybShcbiAgICAgICAgICB0aGlzLm1vZHVsZU5hbWUsXG4gICAgICAgICAgdGhpcy5zdWJtaXNzaW9uSWQsXG4gICAgICAgICAgdGhpcy5wYWdlTnVtYmVyLFxuICAgICAgICAgIHRoaXMucm93U2V0XG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4geyAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBtYXBwZWRSZXNwb25zZSA9IG1hcHBlci5tYXBQYWdlVG9Nb2RlbChyZXNwb25zZS5yZXN1bHQucGFnZXNbMF0scmVzcG9uc2UucmVzdWx0Py5jdXJyZW5jeSxyZXNwb25zZS5yZXN1bHQ/LmRlZmF1bHRDdXJyZW5jeSk7XG4gICAgICAgICAgaWYgKG1hcHBlZFJlc3BvbnNlKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VzW2luZGV4XSA9IG1hcHBlZFJlc3BvbnNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSBpbmRleDtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlc1tpbmRleF07XG4gICAgICAgICAgdGhpcy5yb3dTZXRDb3VudFtpbmRleF0gPSByZXNwb25zZS5yZXN1bHQudG90YWxOdW1iZXJSb3c7XG4gICAgICAgICAgdGhpcy5jaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb3JtU2VydmljZVxuICAgICAgICAuZ2V0UXVlc3Rpb25zKHRoaXMubW9kdWxlTmFtZSwgdGhpcy5wYWdlTnVtYmVyLCB0aGlzLnJvd1NldCwgdHJ1ZSx0aGlzLmNvdW50cnkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBtYXBwZWRSZXNwb25zZSA9IG1hcHBlci5tYXBQYWdlVG9Nb2RlbChyZXNwb25zZS5yZXN1bHQucGFnZXNbMF0scmVzcG9uc2UucmVzdWx0Py5jdXJyZW5jeSxyZXNwb25zZS5yZXN1bHQ/LmRlZmF1bHRDdXJyZW5jeSk7XG4gICAgICAgICAgaWYgKG1hcHBlZFJlc3BvbnNlKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VzW2luZGV4XSA9IG1hcHBlZFJlc3BvbnNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSBpbmRleDtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlc1tpbmRleF07XG4gICAgICAgICAgdGhpcy5yb3dTZXRDb3VudFtpbmRleF0gPSByZXNwb25zZS5yZXN1bHQudG90YWxOdW1iZXJSb3c7XG4gICAgICAgICAgdGhpcy5jaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tYXJrQWxsUXVlc3Rpb25zQXNSZXF1aXJlZCkge1xuICAgICAgY29uc3QgY3VycmVudFBhZ2VEYXRhID0gdGhpcy5wYWdlc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgbGV0IHZhbGlkYXRpb25SZXNwb25zZSA9IHRydWU7XG4gICAgICBpZiAoIXRoaXMudmFsaWRhdGlvblNraXApIHtcbiAgICAgICAgdmFsaWRhdGlvblJlc3BvbnNlID1cbiAgICAgICAgICB0aGlzLmZvcm1WYWxpZGF0aW9uU2VydmljZS52YWxpZGF0ZVJlcXVpcmVkUXVlc3Rpb25zKFxuICAgICAgICAgICAgY3VycmVudFBhZ2VEYXRhXG4gICAgICAgICAgKS5pc1ZhbGlkO1xuICAgICAgfVxuICAgICAgaWYgKHZhbGlkYXRpb25SZXNwb25zZSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSBpbmRleDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNoZWNrU3VibWlzc2lvbkVsaWdpYmlsaXR5KCk7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSBpbmRleDtcbiAgICB9XG4gIH1cblxuICBsb2FkTW9yZURhdGEoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0xvYWRpbmcpIHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgIGxldCByb3dDb3VudExpbWl0ID0gdGhpcy5yb3dTZXRDb3VudFtpbmRleF07XG4gICAgICBsZXQgaSA9IDA7XG4gICAgICB0aGlzLnBhZ2VzW2luZGV4XS5yb3dzLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgIHJvdy5ncmlkLmZvckVhY2goKGdyaWRJdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICBpKys7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBsZXQgcm93Q291bnQgPSBpIC8gMjA7XG4gICAgICByb3dDb3VudCA9IE1hdGguY2VpbChyb3dDb3VudCk7XG5cbiAgICAgIGlmICh0aGlzLnZpc2l0ZWRSb3dzLmhhcyhpbmRleCkpIHtcbiAgICAgICAgaWYgKHRoaXMudmlzaXRlZFJvd3MuZ2V0KGluZGV4KSA9PT0gcm93Q291bnQpIHtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocm93Q291bnQgKyAxID4gcm93Q291bnRMaW1pdCAmJiAhdGhpcy5uYXZpZ2F0ZVRvKSB7XG4gICAgICAgIHRoaXMuY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy52aXNpdGVkUm93cy5zZXQoaW5kZXgsIHJvd0NvdW50KTtcblxuICAgICAgaWYgKHRoaXMuZWRpdCkge1xuICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlXG4gICAgICAgICAgLmdldFN1Ym1pdHRlZEZvcm0oXG4gICAgICAgICAgICB0aGlzLm1vZHVsZU5hbWUsXG4gICAgICAgICAgICB0aGlzLnN1Ym1pc3Npb25JZCxcbiAgICAgICAgICAgIGluZGV4ICsgMSxcbiAgICAgICAgICAgIHJvd0NvdW50XG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1Jvd3MgPSByZXNwb25zZT8ucmVzdWx0Py5wYWdlc1swXT8ucm93cyA/PyBbXTtcbiAgICAgICAgICAgIHRoaXMucGFnZXNbaW5kZXhdLnJvd3MgPSBbXG4gICAgICAgICAgICAgIC4uLih0aGlzLnBhZ2VzW2luZGV4XT8ucm93cyA/PyBbXSksXG4gICAgICAgICAgICAgIC4uLm5ld1Jvd3MsXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlc1tpbmRleF07XG4gICAgICAgICAgICB0aGlzLnJvd1NldENvdW50W2luZGV4XSA9IHJlc3BvbnNlLnJlc3VsdC50b3RhbE51bWJlclJvdztcbiAgICAgICAgICAgIHRoaXMuY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlXG4gICAgICAgICAgLmdldFF1ZXN0aW9ucyh0aGlzLm1vZHVsZU5hbWUsIGluZGV4ICsgMSwgcm93Q291bnQpXG4gICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3Um93cyA9IHJlc3BvbnNlPy5yZXN1bHQ/LnBhZ2VzWzBdPy5yb3dzID8/IFtdO1xuICAgICAgICAgICAgdGhpcy5wYWdlc1tpbmRleF0ucm93cyA9IFtcbiAgICAgICAgICAgICAgLi4uKHRoaXMucGFnZXNbaW5kZXhdPy5yb3dzID8/IFtdKSxcbiAgICAgICAgICAgICAgLi4ubmV3Um93cyxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW2luZGV4XTtcbiAgICAgICAgICAgIHRoaXMucm93U2V0Q291bnRbaW5kZXhdID0gcmVzcG9uc2UucmVzdWx0LnRvdGFsTnVtYmVyUm93O1xuICAgICAgICAgICAgdGhpcy5jaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpO1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpO1xuICAgIH1cbiAgfVxuXG4gIGdlbmVyYXRlUXVlc3Rpb25BbnN3ZXJzKCkge1xuICAgIHRoaXMubWF4UG9zc2libGVTY29yZSA9IDE7XG4gICAgdGhpcy5zdW1PZkZpbmRpbmdzID0gMDtcbiAgICB0aGlzLnN1bU9mQmFkRmluZGluZ3MgPSAwO1xuICAgIHRoaXMuc3VtT2ZHb29kRmluZGluZ3MgPSAwO1xuICAgIHRoaXMubWF4UG9zc2libGVCYWRTY29yZSA9IDA7XG4gICAgdGhpcy5tYXhQb3NzaWJsZUdvb2RTY29yZSA9IDA7XG4gICAgdGhpcy5jb3B5U3ViZm9ybXMgPSBbXTtcblxuICAgIC8vIHRoaXMubWF4UG9zc2libGVHb29kU2NvcmUgPSAwO1xuICAgIC8vIHRoaXMubWF4UG9zc2libGVCYWRTY29yZSA9IDA7XG4gICAgY29uc3QgZXh0cmFjdFF1ZXN0aW9ucyA9IChcbiAgICAgIGZvcm1FbGVtZW50czogYW55W10sXG4gICAgICBwYXJlbnRGb3JtSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsLFxuICAgICAgaXNJblN1YkZvcm06IGJvb2xlYW4gPSBmYWxzZSxcbiAgICAgIHN1YkZvcm1JbmRleDogbnVtYmVyID0gMFxuICAgICk6IHsgYW5zd2VyczogQW5zd2VyW107IGZvcm1zOiBGb3JtW10gfSA9PiB7XG4gICAgICBjb25zdCBxdWVzdGlvbnM6IEFuc3dlcltdID0gW107XG4gICAgICBjb25zdCBmb3JtczogRm9ybVtdID0gW107XG4gICAgICBmb3JtRWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnUVVFU1RJT04nICYmIGVsZW1lbnQuc2hvdykge1xuICAgICAgICAgIGxldCBiYXNlUXVlc3Rpb246IGFueTtcbiAgICAgICAgICBpZiAoZWxlbWVudC5lbGVtZW50LmZvcm1FbGVtZW50LmVsZW1lbnRUeXBlID09PSAnRklMRV9QSUNLRVInKSB7XG4gICAgICAgICAgICBiYXNlUXVlc3Rpb24gPSB7XG4gICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGVsZW1lbnQuZWxlbWVudC5pZCxcbiAgICAgICAgICAgICAgYW5zd2VyOiAnJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbGVtZW50LmVsZW1lbnQuYW5zd2VyKSkge1xuICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbklkID0gaXNJblN1YkZvcm1cbiAgICAgICAgICAgICAgICA/IGAke3BhcmVudEZvcm1JZH1fJHtzdWJGb3JtSW5kZXh9XyR7ZWxlbWVudC5lbGVtZW50LmlkfWBcbiAgICAgICAgICAgICAgICA6IGVsZW1lbnQuZWxlbWVudC5pZDtcbiAgICAgICAgICAgICAgdGhpcy5maWxlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBxdWVzdGlvbklkLFxuICAgICAgICAgICAgICAgIGZpbGU6IGVsZW1lbnQuZWxlbWVudC5hbnN3ZXIsXG4gICAgICAgICAgICAgICAgc2hvdzogZWxlbWVudC5zaG93XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBiYXNlUXVlc3Rpb24gPSB7XG4gICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGVsZW1lbnQuZWxlbWVudC5pZCxcbiAgICAgICAgICAgICAgYW5zd2VyOiBlbGVtZW50LmVsZW1lbnQuYW5zd2VyLFxuICAgICAgICAgICAgICBzY29yZTogZWxlbWVudC5lbGVtZW50LnNjb3JlLFxuICAgICAgICAgICAgICBtYXhpbXVtUG9zc2libGVTY29yZTogZWxlbWVudC5lbGVtZW50Lm1heFBvc3NpYmxlU2NvcmUsXG4gICAgICAgICAgICAgIGN1cnJlbmN5U3ltYm9sOiBlbGVtZW50LmVsZW1lbnQ/LmN1cnJlbmN5U3ltYm9sLFxuICAgICAgICAgICAgICBhbW91bnRJbldvcmRzOiBlbGVtZW50LmVsZW1lbnQ/LmFtb3VudEluV29yZHMsXG4gICAgICAgICAgICAgIHNob3c6IGVsZW1lbnQuc2hvd1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuZWRpdCkge1xuICAgICAgICAgICAgcXVlc3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgICAuLi5iYXNlUXVlc3Rpb24sXG4gICAgICAgICAgICAgIGFuc3dlcklkOiBlbGVtZW50LmVsZW1lbnQuYW5zd2VySWQgfHwgJycsXG4gICAgICAgICAgICAgIGRlbGV0ZUZpbGVzOiBlbGVtZW50LmVsZW1lbnQuZGVsZXRlRmlsZXMgfHwgW10sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcXVlc3Rpb25zLnB1c2goYmFzZVF1ZXN0aW9uKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoZWxlbWVudC5lbGVtZW50LmZvcm1FbGVtZW50LmVsZW1lbnRUeXBlID09PSAnRFJPUF9ET1dOJyB8fFxuICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuZm9ybUVsZW1lbnQuZWxlbWVudFR5cGUgPT09ICdSQURJT19CVVRUT04nIHx8XG4gICAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5mb3JtRWxlbWVudC5lbGVtZW50VHlwZSA9PT0gJ0NIRUNLX0JPWCcpICYmXG4gICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuZm9ybUVsZW1lbnQuc2NvcmluZyAmJlxuICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LmZvcm1FbGVtZW50LnNjb3JpbmcuZW5hYmxlU2NvcmluZyAmJlxuICAgICAgICAgICAgIWlzSW5TdWJGb3JtXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLm1heFBvc3NpYmxlU2NvcmUgKj1cbiAgICAgICAgICAgICAgdGhpcy5zY29yZUNhbGNTZXJ2aWNlLmdldE1heFBvc3NpYmxlU2NvcmVGb3JRdWVzdGlvbihcbiAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LnNjb3JlICYmXG4gICAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5zY29yZSAhPSBudWxsICYmXG4gICAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5zY29yZSAhPSB1bmRlZmluZWRcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnN1bU9mRmluZGluZ3MgKz0gZWxlbWVudC5lbGVtZW50LnNjb3JlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChlbGVtZW50LmVsZW1lbnQuY2hpbGRMb2dpY3MpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGxvZ2ljIG9mIGVsZW1lbnQuZWxlbWVudC5jaGlsZExvZ2ljcykge1xuICAgICAgICAgICAgICBpZiAobG9naWMuc2hvd0xvZ2ljKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgcm93IG9mIGxvZ2ljLnJvd3MpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGV4dHJhY3RRdWVzdGlvbnMoXG4gICAgICAgICAgICAgICAgICAgIHJvdy5ncmlkLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRGb3JtSWQsXG4gICAgICAgICAgICAgICAgICAgIGlzSW5TdWJGb3JtLFxuICAgICAgICAgICAgICAgICAgICBzdWJGb3JtSW5kZXhcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbnMucHVzaCguLi5yZXN1bHQuYW5zd2Vycyk7XG4gICAgICAgICAgICAgICAgICBmb3Jtcy5wdXNoKC4uLnJlc3VsdC5mb3Jtcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1NVQkZPUk0nICYmIGVsZW1lbnQuc2hvdykge1xuICAgICAgICAgIGNvbnN0IHN1YmZvcm1JZCA9IGVsZW1lbnQuZWxlbWVudC5pZDtcbiAgICAgICAgICBjb25zdCBzdWJtaXNzaW9uSWQgPSBlbGVtZW50LmVsZW1lbnQuc3VibWlzc2lvbklkO1xuICAgICAgICAgIGlmIChlbGVtZW50LmVsZW1lbnQuY29weVN1YmZvcm1NZXRhKSB7XG4gICAgICAgICAgICB0aGlzLmNvcHlTdWJmb3Jtcy5wdXNoKGVsZW1lbnQuZWxlbWVudC5jb3B5U3ViZm9ybU1ldGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZWxlbWVudC5lbGVtZW50LnByb3BlcnR5LnN1YkZvcm1TdHJ1Y3R1cmUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICBsZXQgYWxsQW5zd2VyczogQW5zd2VyW10gPSBbXTtcblxuICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZXh0cmFjdGVkID0gZXh0cmFjdFF1ZXN0aW9ucyhcbiAgICAgICAgICAgICAgICByb3cuZ3JpZCxcbiAgICAgICAgICAgICAgICBzdWJmb3JtSWQsXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICBmb3Jtcy5sZW5ndGhcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgZXh0cmFjdGVkLmFuc3dlcnMuZm9yRWFjaCgoYW5zd2VyKSA9PiB7XG4gICAgICAgICAgICAgICAgYWxsQW5zd2Vycy5wdXNoKHsgLi4uYW5zd2VyIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbGV0IGNvcGllZEZvcm1zO1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudC5jb3BpZWRGb3Jtcykge1xuICAgICAgICAgICAgICBjb3BpZWRGb3JtcyA9IGVsZW1lbnQuZWxlbWVudC5jb3BpZWRGb3JtcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN1YmZvcm06IEZvcm0gPSB7XG4gICAgICAgICAgICAgIGZvcm1JZDogc3ViZm9ybUlkLFxuICAgICAgICAgICAgICBkZWxldGVkOiBlbGVtZW50LmVsZW1lbnQuZGVsZXRlZCxcbiAgICAgICAgICAgICAgZGVsZXRlZFN1Ym1pc3Npb25zOiBbXSxcbiAgICAgICAgICAgICAgc3VibWlzc2lvbnM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBzdWJtaXNzaW9uSWQ6IHN1Ym1pc3Npb25JZCxcbiAgICAgICAgICAgICAgICAgIGFuc3dlcnM6IGFsbEFuc3dlcnMsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgY29waWVkRm9ybXM6IGNvcGllZEZvcm1zLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZm9ybXMucHVzaChzdWJmb3JtKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuZWxlbWVudC5wcm9wZXJ0eS5zdWJGb3JtU3RydWN0dXJlID09PSAnbXVsdGlwbGUnKSB7XG4gICAgICAgICAgICBjb25zdCBzdWJmb3JtQW5zd2VyczogQW5zd2VyW10gPSBbXTtcbiAgICAgICAgICAgIGxldCBzdWJmb3JtUXVlc3Rpb25zOiBhbnkgPSB7IGFuc3dlcnM6IFtdIH07XG4gICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQucm93cy5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBzdWJmb3JtUXVlc3Rpb25zID0gZXh0cmFjdFF1ZXN0aW9ucyhcbiAgICAgICAgICAgICAgICByb3cuZ3JpZCxcbiAgICAgICAgICAgICAgICBzdWJmb3JtSWQsXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICBmb3Jtcy5sZW5ndGhcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdTdWJmb3JtID0gZm9ybXMuZmluZChcbiAgICAgICAgICAgICAgKGZvcm0pID0+IGZvcm0uZm9ybUlkID09PSBzdWJmb3JtSWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIChlbGVtZW50LmVsZW1lbnQucHJvcGVydHkuc3ViRm9ybVR5cGUgPT0gJ2lubGluZScgfHxcbiAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQucHJvcGVydHkuc3ViRm9ybVR5cGUgPT0gJ2NhcmQnKSAmJlxuICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuc3VibWlzc2lvbnNcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuc3VibWlzc2lvbnMgPSB0aGlzLmNsZWFyRW1wdHlTdWJtaXNzaW9ucyhcbiAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuc3VibWlzc2lvbnNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudD8uc3VibWlzc2lvbnM/LmZvckVhY2goXG4gICAgICAgICAgICAgIChzdWJtaXNzaW9uOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHMgb2Ygc3VibWlzc2lvbi5zY29yZXMgPz8gW10pIHtcbiAgICAgICAgICAgICAgICAgIGlmIChzLnNjb3JlVHlwZSA9PT0gJ0dPT0RfU0NPUkUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VtT2ZHb29kRmluZGluZ3MgKz0gcy5zY29yZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChzLnNjb3JlVHlwZSA9PT0gJ0JBRF9TQ09SRScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdW1PZkJhZEZpbmRpbmdzICs9IHMuc2NvcmU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlbGV0ZSBzdWJtaXNzaW9uLmhhc0FsbFNjb3JpbmdBbnN3ZXJlZE9uY2U7XG4gICAgICAgICAgICAgICAgc3VibWlzc2lvbi5hbnN3ZXJzLmZvckVhY2goKGFuc3dlcjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBkZWxldGUgYW5zd2VyLmh0bWxDb250ZW50O1xuICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYW5zd2VyLmZpbGVzKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbklkID0gYCR7c3ViZm9ybUlkfV8ke2luZGV4fV8ke2Fuc3dlci5xdWVzdGlvbklkfWA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogcXVlc3Rpb25JZCxcbiAgICAgICAgICAgICAgICAgICAgICBmaWxlOiBhbnN3ZXIuZmlsZXMsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgYW5zd2VyLmZpbGVzO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZGVsZXRlIGFuc3dlci5hdHRhY2htZW50cztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxldCBjb3BpZWRGb3JtcztcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmVsZW1lbnQuY29waWVkRm9ybXMpIHtcbiAgICAgICAgICAgICAgY29waWVkRm9ybXMgPSBlbGVtZW50LmVsZW1lbnQuY29waWVkRm9ybXM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHN1YmZvcm06IEZvcm0gPSB7XG4gICAgICAgICAgICAgIGZvcm1JZDogc3ViZm9ybUlkLFxuICAgICAgICAgICAgICBkZWxldGVkOiBlbGVtZW50LmVsZW1lbnQuZGVsZXRlZCxcbiAgICAgICAgICAgICAgc2NvcmVzOiBlbGVtZW50LmVsZW1lbnQuc2NvcmVzLFxuICAgICAgICAgICAgICBkZWxldGVkU3VibWlzc2lvbnM6IGVsZW1lbnQuZWxlbWVudC5kZWxldGVkU3VibWlzc2lvbnMsXG4gICAgICAgICAgICAgIHN1Ym1pc3Npb25zOiBlbGVtZW50LmVsZW1lbnQuc3VibWlzc2lvbnMsXG4gICAgICAgICAgICAgIGNvcGllZEZvcm1zOiBjb3BpZWRGb3JtcyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3Jtcy5wdXNoKHN1YmZvcm0pO1xuICAgICAgICAgICAgdGhpcy5tYXhQb3NzaWJsZVNjb3JlICs9XG4gICAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudD8ubWF4UG9zc2libGVTY29yZSAqXG4gICAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudD8uc3VibWlzc2lvbnM/Lmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMubWF4UG9zc2libGVHb29kU2NvcmUgKz1cbiAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50Py5tYXhQb3NzaWJsZVNjb3JlPy5nb29kICpcbiAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50Py5zdWJtaXNzaW9ucz8ubGVuZ3RoIHx8IDA7XG4gICAgICAgICAgICB0aGlzLm1heFBvc3NpYmxlQmFkU2NvcmUgKz1cbiAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50Py5tYXhQb3NzaWJsZVNjb3JlPy5iYWQgKlxuICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQ/LnN1Ym1pc3Npb25zPy5sZW5ndGggfHwgMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnUVVFU1RJT05fR1JPVVAnICYmIGVsZW1lbnQuc2hvdykge1xuICAgICAgICAgIC8vIEhhbmRsZSBRdWVzdGlvbiBHcm91cCBieSBpdGVyYXRpbmcgdGhyb3VnaCByb3dzXG4gICAgICAgICAgZWxlbWVudC5lbGVtZW50LnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJvdy5ncmlkLmZvckVhY2goKGdyaWRJdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGdyaWRJdGVtLmVudGl0eVR5cGUgPT09ICdRVUVTVElPTicgJiYgZ3JpZEl0ZW0uc2hvdykge1xuICAgICAgICAgICAgICAgIGxldCBiYXNlUXVlc3Rpb246IGFueTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBncmlkSXRlbS5lbGVtZW50Py5mb3JtRWxlbWVudC5lbGVtZW50VHlwZSA9PT0gJ0ZJTEVfUElDS0VSJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgYmFzZVF1ZXN0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBncmlkSXRlbS5lbGVtZW50LmlkLFxuICAgICAgICAgICAgICAgICAgICBhbnN3ZXI6ICcnLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGdyaWRJdGVtLmVsZW1lbnQuYW5zd2VyKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbklkID0gaXNJblN1YkZvcm1cbiAgICAgICAgICAgICAgICAgICAgICA/IGAke3BhcmVudEZvcm1JZH1fJHtzdWJGb3JtSW5kZXh9XyR7Z3JpZEl0ZW0uZWxlbWVudC5pZH1gXG4gICAgICAgICAgICAgICAgICAgICAgOiBncmlkSXRlbS5lbGVtZW50LmlkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IHF1ZXN0aW9uSWQsXG4gICAgICAgICAgICAgICAgICAgICAgZmlsZTogZ3JpZEl0ZW0uZWxlbWVudC5hbnN3ZXIsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBiYXNlUXVlc3Rpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGdyaWRJdGVtLmVsZW1lbnQuaWQsXG4gICAgICAgICAgICAgICAgICAgIGFuc3dlcjogZ3JpZEl0ZW0uZWxlbWVudC5hbnN3ZXIsXG4gICAgICAgICAgICAgICAgICAgIGFtb3VudEluV29yZHM6IGdyaWRJdGVtLmVsZW1lbnQuYW1vdW50SW5Xb3Jkc1xuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZWRpdCkge1xuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAuLi5iYXNlUXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGFuc3dlcklkOiBncmlkSXRlbS5lbGVtZW50LmFuc3dlcklkIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICBkZWxldGVGaWxlczogZ3JpZEl0ZW0uZWxlbWVudC5kZWxldGVGaWxlcyB8fCBbXSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbnMucHVzaChiYXNlUXVlc3Rpb24pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChncmlkSXRlbS5lbGVtZW50LmNoaWxkTG9naWNzKSB7XG4gICAgICAgICAgICAgICAgICBmb3IgKGxldCBsb2dpYyBvZiBncmlkSXRlbS5lbGVtZW50LmNoaWxkTG9naWNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2dpYy5zaG93TG9naWMpIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCByb3cgb2YgbG9naWMucm93cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZXh0cmFjdFF1ZXN0aW9ucyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LmdyaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEZvcm1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNJblN1YkZvcm0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN1YkZvcm1JbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9ucy5wdXNoKC4uLnJlc3VsdC5hbnN3ZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1zLnB1c2goLi4ucmVzdWx0LmZvcm1zKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ01VTFRJRklFTEQnICYmIGVsZW1lbnQuc2hvdykge1xuICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5yb3dzLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgICAgICByb3cuZ3JpZC5mb3JFYWNoKChncmlkSXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChncmlkSXRlbS5lbnRpdHlUeXBlID09PSAnUVVFU1RJT04nICYmIGdyaWRJdGVtLnNob3cpIHtcbiAgICAgICAgICAgICAgICBxdWVzdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBncmlkSXRlbS5lbGVtZW50LmlkLFxuICAgICAgICAgICAgICAgICAgYW5zd2VyOiBncmlkSXRlbS5lbGVtZW50LmFuc3dlciB8fCAnJyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgYW5zd2VyczogcXVlc3Rpb25zLCBmb3JtczogZm9ybXMgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgcHJvY2Vzc1BhZ2VzID0gKFxuICAgICAgcGFnZXM6IGFueVtdXG4gICAgKTogeyBhbnN3ZXJzOiBBbnN3ZXJbXTsgZm9ybXM6IEZvcm1bXSB9ID0+IHtcbiAgICAgIGNvbnN0IHF1ZXN0aW9uczogQW5zd2VyW10gPSBbXTtcbiAgICAgIGNvbnN0IGZvcm1zOiBGb3JtW10gPSBbXTtcblxuICAgICAgcGFnZXMuZm9yRWFjaCgocGFnZSkgPT4ge1xuICAgICAgICBwYWdlLnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBleHRyYWN0UXVlc3Rpb25zKHJvdy5ncmlkKTtcbiAgICAgICAgICBxdWVzdGlvbnMucHVzaCguLi5yZXN1bHQuYW5zd2Vycyk7XG4gICAgICAgICAgZm9ybXMucHVzaCguLi5yZXN1bHQuZm9ybXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4geyBhbnN3ZXJzOiBxdWVzdGlvbnMsIGZvcm1zOiBmb3JtcyB9O1xuICAgIH07XG4gICAgY29uc3QgcmVzdWx0ID0gcHJvY2Vzc1BhZ2VzKHRoaXMucGFnZXMpO1xuICAgIGNvbnN0IGdyaWRzID0gdGhpcy53aGVuQ2xhdXNlU2VydmljZS5nZXRBY3RpdmVXaGVuQ2xhdXNlR3JpZHMoKTtcbiAgICBjb25zdCBzaW1wbGlmaWVkID0gZ3JpZHMubWFwKGdyaWQgPT4gKHtcbiAgICAgIGVsZW1lbnRJZDogZ3JpZD8uZWxlbWVudD8uaWQgPz8gbnVsbCxcbiAgICAgIGVudGl0eVR5cGU6IGdyaWQ/LmVudGl0eVR5cGUgPz8gbnVsbCxcbiAgICAgIHNob3c6IGdyaWQ/LnNob3cgPz8gZmFsc2VcbiAgICB9KSk7XG4gICAgdGhpcy5xdWVzdGlvbkFuc3dlcnMgPSB7XG4gICAgICBwYXJlbnRJZDogJycsXG4gICAgICBhbnN3ZXJzOiByZXN1bHQuYW5zd2VycyxcbiAgICAgIGZvcm1zOiByZXN1bHQuZm9ybXMsXG4gICAgICBjb3B5U3ViRm9ybXM6IHRoaXMuY29weVN1YmZvcm1zLFxuICAgICAgd2hlbkNsYXVzZUVsZW1lbnRzOiBzaW1wbGlmaWVkXG4gICAgfTtcbiAgfVxuXG4gIGNsZWFyRW1wdHlTdWJtaXNzaW9ucyhzdWJtaXNzaW9uczogYW55KSB7XG4gICAgY29uc3Qgbm9uRW1wdHlTdWJtaXNzaW9uczogU3VibWlzc2lvbltdID0gW107XG4gICAgY29uc3QgZW1wdHlTdWJtaXNzaW9uSWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgc3VibWlzc2lvbnMuZm9yRWFjaCgoc3VibWlzc2lvbjogYW55KSA9PiB7XG4gICAgICBjb25zdCBoYXNWYWx1ZSA9IHN1Ym1pc3Npb24uYW5zd2Vycy5zb21lKFxuICAgICAgICAoYW5zd2VyOiBhbnkpID0+XG4gICAgICAgICAgYW5zd2VyLmFuc3dlciAhPT0gJycgJiZcbiAgICAgICAgICBhbnN3ZXIuYW5zd2VyICE9PSBudWxsICYmXG4gICAgICAgICAgYW5zd2VyLmFuc3dlciAhPT0gdW5kZWZpbmVkXG4gICAgICApO1xuICAgICAgaWYgKGhhc1ZhbHVlKSB7XG4gICAgICAgIG5vbkVtcHR5U3VibWlzc2lvbnMucHVzaChzdWJtaXNzaW9uKTtcbiAgICAgIH0gZWxzZSBpZiAoc3VibWlzc2lvbi5zdWJtaXNzaW9uSWQpIHtcbiAgICAgICAgZW1wdHlTdWJtaXNzaW9uSWRzLnB1c2goc3VibWlzc2lvbi5zdWJtaXNzaW9uSWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3VibWlzc2lvbnMgPSBub25FbXB0eVN1Ym1pc3Npb25zO1xuICAgIHJldHVybiBzdWJtaXNzaW9ucztcbiAgfVxuXG4gIHZhbGlkYXRlQWxsRWxlbWVudExvYWRlZCgpOiB7IHN0YXR1czogYm9vbGVhbjsgbWVzc2FnZTogc3RyaW5nIH0ge1xuICAgIGlmICh0aGlzLnBhZ2VzLmxlbmd0aCA8IHRoaXMucGFnZURldGFpbHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICdQbGVhc2UgZW5zdXJlIGFsbCBwYWdlcyBhcmUgZnVsbHkgdmlzaWJsZSBiZWZvcmUgc3VibWl0dGluZyB0aGUgZm9ybS4nLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBpbmNvbXBsZXRlUGFnZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICB0aGlzLnBhZ2VzLmZvckVhY2goKHA6IGFueSwgaTogbnVtYmVyKSA9PiB7XG4gICAgICBpZiAocCAmJiBBcnJheS5pc0FycmF5KHAucm93cykpIHtcbiAgICAgICAgbGV0IGogPSAwO1xuICAgICAgICBwLnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICByb3cuZ3JpZC5mb3JFYWNoKChncmlkSXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICBqKys7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIXAgfHxcbiAgICAgICAgICAhQXJyYXkuaXNBcnJheShwLnJvd3MpIHx8XG4gICAgICAgICAgKE1hdGguY2VpbChqIC8gMjApICE9IHRoaXMucm93U2V0Q291bnRbaV0gJiYgIXRoaXMubmF2aWdhdGVUbylcbiAgICAgICAgKSB7XG4gICAgICAgICAgaW5jb21wbGV0ZVBhZ2VzLnB1c2godGhpcy5wYWdlRGV0YWlsc1tpXS5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5jb21wbGV0ZVBhZ2VzLnB1c2godGhpcy5wYWdlRGV0YWlsc1tpXS5uYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChpbmNvbXBsZXRlUGFnZXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTogYFNvbWUgc2VjdGlvbnMgYXJlIHN0aWxsIGxvYWRpbmcuIFBsZWFzZSBzY3JvbGwgdGhyb3VnaCB0aGUgZm9sbG93aW5nIHBhZ2VzIHRvIGVuc3VyZSBhbGwgcXVlc3Rpb25zIGFyZSBsb2FkZWQ6ICR7aW5jb21wbGV0ZVBhZ2VzLmpvaW4oXG4gICAgICAgICAgJywgJ1xuICAgICAgICApfS5gLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiB0cnVlLFxuICAgICAgbWVzc2FnZTogJ0dyZWF0ISBBbGwgc2VjdGlvbnMgYXJlIGNvbXBsZXRlLiBZb3UgY2FuIG5vdyBzdWJtaXQgdGhlIGZvcm0uJyxcbiAgICB9O1xuICB9XG4gIHNhdmVhc0RyYWZ0UG9wdXAoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNraXBWYWxpZGF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oU2F2ZURyYWZ0TW9kYWxDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnNDUwcHgnLFxuICAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1kaWFsb2ctY29udGFpbmVyJyxcbiAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHByaW1hcnlDb2xvcjogdGhpcy5wcmltYXJ5Q29sb3IsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uU2tpcCA9IHRydWU7XG4gICAgICAgIHRoaXMuc3VibWl0Rm9ybSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uU2tpcCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2F2ZUFzRHJhZnQoKSB7XG4gICAgdGhpcy52YWxpZGF0aW9uU2tpcCA9IHRydWU7XG4gICAgdGhpcy5kcmFmdCA9IHRydWU7XG4gICAgdGhpcy5zdWJtaXRGb3JtKCk7XG4gIH1cblxuICBhc3luYyBzdWJtaXRGb3JtKCkge1xuICAgIGlmICh0aGlzLndlYmhvb2spIHtcbiAgICAgIHRoaXMud2ViaG9va1BheWxvYWRBcnJheSA9IHRoaXMud2ViaG9vay5tYXAoKHc6IGFueSkgPT4gKHtcbiAgICAgICAgaWQ6IHcuaWQsXG4gICAgICAgIC4uLnRoaXMuZXh0cmFjdEdyb3VwZWRXZWJob29rRGF0YShbd10pLFxuICAgICAgfSkpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudmFsaWRhdGVBbGxFbGVtZW50TG9hZGVkKCkuc3RhdHVzKSB7XG4gICAgICB0aGlzLnRvYXN0ci53YXJuaW5nKCdQbGVhc2Ugd2FpdCBmb3IgYWxsIGVsZW1lbnRzIHRvIGxvYWQnKTtcbiAgICAgIHRoaXMuc3VibWl0LmVtaXQoe1xuICAgICAgICBzdGF0dXM6ICdmYWlsZWQnLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnN1Ym1pc3Npb25JblByb2dyZXNzIHx8IHRoaXMuc3VibWlzc2lvbkluRHJhZnQpIHtcbiAgICAgIHRoaXMuc3VibWl0LmVtaXQoe1xuICAgICAgICBzdGF0dXM6ICdmYWlsZWQnLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCByZWNhcHRjaGFUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRoaXMuaW5WYWxpZFF1ZXN0aW9ucy5jbGVhcigpO1xuICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuY2xlYXJBbGwoKTtcbiAgICBpZiAodGhpcy5lbmFibGVHb29nbGVSZWNhcHRjaGEpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlY2FwdGNoYVRva2VuID0gYXdhaXQgdGhpcy5nZXRUb2tlbigpO1xuXG4gICAgICAgIGlmICghcmVjYXB0Y2hhVG9rZW4pIHtcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihcbiAgICAgICAgICAgICdQbGVhc2UgY29tcGxldGUgdGhlIENBUFRDSEEgdmVyaWZpY2F0aW9uIGJlZm9yZSBzdWJtaXR0aW5nIHRoZSBmb3JtLidcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuc3VibWlzc2lvbkluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnN1Ym1pc3Npb25JbkRyYWZ0ID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2tpcCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZHJhZnQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnN1Ym1pdC5lbWl0KHtcbiAgICAgICAgICAgIHN0YXR1czogJ2ZhaWxlZCcsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgJ0Vycm9yIHdoaWxlIGdldHRpbmcgcmVDQVBUQ0hBIHRva2VuOicsXG4gICAgICAgICAgZXJyb3IuZXJyb3I/Lm1lc3NhZ2VcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ0ZhaWxlZCB0byB2ZXJpZnkgcmVDQVBUQ0hBLicpO1xuICAgICAgICB0aGlzLnN1Ym1pc3Npb25JblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3VibWlzc2lvbkluRHJhZnQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uU2tpcCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRyYWZ0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3VibWl0LmVtaXQoe1xuICAgICAgICAgIHN0YXR1czogJ2ZhaWxlZCcsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHJhZnQgfHwgdGhpcy52YWxpZGF0aW9uU2tpcCkge1xuICAgICAgdGhpcy5zdWJtaXNzaW9uSW5EcmFmdCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3VibWlzc2lvbkluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgIH1cblxuICAgIGxldCB2YWxpZGF0aW9uUmVzcG9uc2UgPSB0cnVlO1xuICAgIGlmICghdGhpcy52YWxpZGF0aW9uU2tpcCkge1xuICAgICAgdmFsaWRhdGlvblJlc3BvbnNlID0gdGhpcy52YWxpZGF0ZUZvcm0odGhpcy5wYWdlcykuaXNWYWxpZDtcbiAgICB9XG5cbiAgICBpZiAoIXZhbGlkYXRpb25SZXNwb25zZSkge1xuICAgICAgdGhpcy5zYXZlYXNEcmFmdFBvcHVwKCk7XG4gICAgICB0aGlzLnN1Ym1pc3Npb25JblByb2dyZXNzID0gZmFsc2U7XG4gICAgICB0aGlzLnN1Ym1pc3Npb25JbkRyYWZ0ID0gZmFsc2U7XG4gICAgICB0aGlzLnZhbGlkYXRpb25Ta2lwID0gZmFsc2U7XG4gICAgICB0aGlzLmRyYWZ0ID0gZmFsc2U7XG4gICAgICB0aGlzLnN1Ym1pdC5lbWl0KHtcbiAgICAgICAgc3RhdHVzOiAnZmFpbGVkJyxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBnZXRDaXJjdWxhclJlcGxhY2VyID0gKCkgPT4ge1xuICAgICAgY29uc3Qgc2VlbiA9IG5ldyBXZWFrU2V0KCk7XG4gICAgICByZXR1cm4gKF9rZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmIChzZWVuLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlZW4uYWRkKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICB0aGlzLmdlbmVyYXRlUXVlc3Rpb25BbnN3ZXJzKCk7XG4gICAgY29uc3QgZm9ybUZpbmFsU2NvcmUgPSB0aGlzLmNhbGN1bGF0ZUZvcm1GaW5hbFNjb3JlKCk7XG4gICAgdGhpcy5xdWVzdGlvbkFuc3dlcnMuc2NvcmVzID0gZm9ybUZpbmFsU2NvcmU7XG4gICAgaWYgKHZhbGlkYXRpb25SZXNwb25zZSkge1xuICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnc2tpcFZhbGlkYXRpb24nLCB0aGlzLnZhbGlkYXRpb25Ta2lwID8gJ3RydWUnIDogJ2ZhbHNlJyk7XG4gICAgICB0aGlzLnF1ZXN0aW9uQW5zd2Vycy5wYXJlbnRJZCA9IHRoaXMucGFyZW50U3VibWlzc2lvbklkO1xuICAgICAgZm9ybURhdGEuYXBwZW5kKFxuICAgICAgICAnanNvbicsXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMucXVlc3Rpb25BbnN3ZXJzLCBnZXRDaXJjdWxhclJlcGxhY2VyKCkpXG4gICAgICApO1xuICAgICAgaWYgKHRoaXMud2ViaG9va1BheWxvYWRBcnJheSkge1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoXG4gICAgICAgICAgJ3dlYmhvb2tQYXlsb2FkJyxcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLndlYmhvb2tQYXlsb2FkQXJyYXkpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ3dlYmhvb2tQYXlsb2FkJywgSlNPTi5zdHJpbmdpZnkoW10pKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3Qgc2VlblF1ZXN0aW9uSWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAgICAgY29uc3QgdW5pcXVlRmlsZXMgPSB0aGlzLmZpbGVzLmZpbHRlcigoZmlsZUl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAoc2VlblF1ZXN0aW9uSWRzLmhhcyhmaWxlSXRlbS5xdWVzdGlvbklkKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZWVuUXVlc3Rpb25JZHMuYWRkKGZpbGVJdGVtLnF1ZXN0aW9uSWQpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICB1bmlxdWVGaWxlcy5mb3JFYWNoKChmaWxlSXRlbSkgPT4ge1xuICAgICAgICAgIGZpbGVJdGVtLmZpbGUuZm9yRWFjaCgoZmlsZTogYW55KSA9PiB7XG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoZmlsZUl0ZW0ucXVlc3Rpb25JZCwgZmlsZS5fZmlsZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgZm9ybVNlcnZpY2VDYWxsID1cbiAgICAgICAgdGhpcy5lZGl0ICYmIHRoaXMuc3VibWlzc2lvbklkXG4gICAgICAgICAgPyB0aGlzLmZvcm1TZXJ2aWNlLnVwZGF0ZUZvcm0oXG4gICAgICAgICAgICAgIHRoaXMubW9kdWxlTmFtZSxcbiAgICAgICAgICAgICAgdGhpcy5zdWJtaXNzaW9uSWQsXG4gICAgICAgICAgICAgIGZvcm1EYXRhLFxuICAgICAgICAgICAgICByZWNhcHRjaGFUb2tlbiA/PyAnJ1xuICAgICAgICAgICAgKVxuICAgICAgICAgIDogdGhpcy5mb3JtU2VydmljZS5zdWJtaXRGb3JtKFxuICAgICAgICAgICAgICB0aGlzLm1vZHVsZU5hbWUsXG4gICAgICAgICAgICAgIGZvcm1EYXRhLFxuICAgICAgICAgICAgICByZWNhcHRjaGFUb2tlbiA/PyAnJ1xuICAgICAgICAgICAgKTtcblxuICAgICAgZm9ybVNlcnZpY2VDYWxsLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MoXG4gICAgICAgICAgICB0aGlzLmVkaXRcbiAgICAgICAgICAgICAgPyAnRm9ybSB1cGRhdGVkIHN1Y2Nlc3NmdWxseSdcbiAgICAgICAgICAgICAgOiAnRm9ybSBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5J1xuICAgICAgICAgICk7XG4gICAgICAgICAgbGV0IGVtaXR0aW5nVmFsdWVzO1xuICAgICAgICAgIGlmICh0aGlzLmVtaXR0ZXJzKSB7XG4gICAgICAgICAgICBlbWl0dGluZ1ZhbHVlcyA9IHRoaXMubWFwRW1pdHRlcnNUb1ZhbHVlcygpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25Ta2lwIHx8IHRoaXMuZHJhZnQpIHtcbiAgICAgICAgICAgIHRoaXMuc3VibWl0LmVtaXQoe1xuICAgICAgICAgICAgICBzdGF0dXM6ICdkcmFmdCcsXG4gICAgICAgICAgICAgIHN1Ym1pc3Npb25JZDogcmVzcG9uc2UucmVzdWx0LFxuICAgICAgICAgICAgICBzY29yZTogZm9ybUZpbmFsU2NvcmUsXG4gICAgICAgICAgICAgIC4uLihlbWl0dGluZ1ZhbHVlcyB8fCB7fSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdWJtaXQuZW1pdCh7XG4gICAgICAgICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICBzdWJtaXNzaW9uSWQ6IHJlc3BvbnNlLnJlc3VsdCxcbiAgICAgICAgICAgICAgc2NvcmU6IGZvcm1GaW5hbFNjb3JlLFxuICAgICAgICAgICAgICAuLi4oZW1pdHRpbmdWYWx1ZXMgfHwge30pLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc3VibWlzc2lvbkluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnN1Ym1pc3Npb25JbkRyYWZ0ID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5kcmFmdCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNraXAgPSBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuY2xlYXJBbGwoKTtcbiAgICAgICAgICB0aGlzLmZpbmRRdWVzdGlvblBhZ2VJbmRleChcbiAgICAgICAgICAgIHRoaXMucGFyc2VFcnJvcnNUb01hcChlcnJvci5lcnJvci5tZXNzYWdlKVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4ID0gdGhpcy5wYWdlcy5sZW5ndGggLSAxO1xuICAgICAgICAgIHRoaXMubmF2aWdhdGVUb0ZpcnN0RXJyb3IoKTtcbiAgICAgICAgICB0aGlzLnN1Ym1pc3Npb25JblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5kcmFmdCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNraXAgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnN1Ym1pc3Npb25JbkRyYWZ0ID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5zYXZlYXNEcmFmdFBvcHVwKCk7XG4gICAgICAgICAgdGhpcy5zdWJtaXQuZW1pdCh7XG4gICAgICAgICAgICBzdGF0dXM6ICdmYWlsZWQnLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IuZXJyb3IubWVzc2FnZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRoaXMudG9hc3RyLmVycm9yKHZhbGlkYXRpb25SZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgIHRoaXMuc3VibWl0LmVtaXQoe1xuICAgICAgICBzdGF0dXM6ICdmYWlsZWQnLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnNhdmVhc0RyYWZ0UG9wdXAoKTtcbiAgICAgIHRoaXMuc3VibWlzc2lvbkluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgIHRoaXMuc3VibWlzc2lvbkluRHJhZnQgPSBmYWxzZTtcbiAgICAgIHRoaXMudmFsaWRhdGlvblNraXAgPSBmYWxzZTtcbiAgICAgIHRoaXMuZHJhZnQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBjYWxjdWxhdGVGb3JtRmluYWxTY29yZSgpOiBTdWJtaXNzaW9uU2NvcmVbXSB7XG4gICAgY29uc3QgZ29vZFNjb3JlID0gdGhpcy5tYXhQb3NzaWJsZUdvb2RTY29yZVxuICAgICAgPyAxMDAgLSAodGhpcy5zdW1PZkdvb2RGaW5kaW5ncyAvIHRoaXMubWF4UG9zc2libGVHb29kU2NvcmUpICogMTAwXG4gICAgICA6IDA7XG5cbiAgICBjb25zdCBiYWRTY29yZSA9IHRoaXMubWF4UG9zc2libGVCYWRTY29yZVxuICAgICAgPyAxMDAgLSAodGhpcy5zdW1PZkJhZEZpbmRpbmdzIC8gdGhpcy5tYXhQb3NzaWJsZUJhZFNjb3JlKSAqIDEwMFxuICAgICAgOiAwO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIHsgc2NvcmVUeXBlOiAnR09PRF9TQ09SRScsIHNjb3JlOiBNYXRoLnJvdW5kKGdvb2RTY29yZSkgfSxcbiAgICAgIHsgc2NvcmVUeXBlOiAnQkFEX1NDT1JFJywgc2NvcmU6IE1hdGgucm91bmQoYmFkU2NvcmUpIH0sXG4gICAgXTtcbiAgfVxuXG4gIG1hcEVtaXR0ZXJzVG9WYWx1ZXMoKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgY29uc3QgYW5zd2VyTWFwID0gbmV3IE1hcChcbiAgICAgIHRoaXMucXVlc3Rpb25BbnN3ZXJzLmFuc3dlcnMubWFwKChxYSkgPT4gW3FhLnF1ZXN0aW9uSWQsIHFhLmFuc3dlcl0pXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc3VsdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXG4gICAgdGhpcy5lbWl0dGVycy5mb3JFYWNoKChlbWl0dGVyKSA9PiB7XG4gICAgICBpZiAoZW1pdHRlci52YWx1ZVNvdXJjZSA9PT0gJ0NVU1RPTV9JTlBVVCcpIHtcbiAgICAgICAgcmVzdWx0W2VtaXR0ZXIua2V5TmFtZV0gPSBlbWl0dGVyLmlucHV0VmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBlbWl0dGVyLnZhbHVlU291cmNlID09PSAnUVVFU1RJT04nICYmXG4gICAgICAgIGVtaXR0ZXIucXVlc3Rpb25JZCAmJlxuICAgICAgICBhbnN3ZXJNYXAuaGFzKGVtaXR0ZXIucXVlc3Rpb25JZClcbiAgICAgICkge1xuICAgICAgICByZXN1bHRbZW1pdHRlci5rZXlOYW1lXSA9IGFuc3dlck1hcC5nZXQoZW1pdHRlci5xdWVzdGlvbklkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwYXJzZUVycm9yc1RvTWFwKGVycm9yU3RyaW5nOiBzdHJpbmcpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBlcnJvck1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgLy8gQ29udmVydCB0aGUgaW5jb3JyZWN0IGZvcm1hdCB0byBhIHZhbGlkIG9iamVjdCBzdHJ1Y3R1cmVcbiAgICBlcnJvclN0cmluZ1xuICAgICAgLnJlcGxhY2UoL1t7fV0vZywgJycpIC8vIFJlbW92ZSBjdXJseSBicmFjZXNcbiAgICAgIC5zcGxpdCgnLCAnKSAvLyBTcGxpdCBrZXktdmFsdWUgcGFpcnNcbiAgICAgIC5mb3JFYWNoKChwYWlyKSA9PiB7XG4gICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHBhaXIuc3BsaXQoJz0nKTtcbiAgICAgICAgaWYgKGtleSAmJiB2YWx1ZSkge1xuICAgICAgICAgIGVycm9yTWFwLnNldChrZXkudHJpbSgpLCB2YWx1ZS50cmltKCkpOyAvLyBTdG9yZSBpbiBNYXBcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICByZXR1cm4gZXJyb3JNYXA7XG4gIH1cbiAgYXN5bmMgbmF2aWdhdGVUb0ZpcnN0RXJyb3IoKSB7XG4gICAgY29uc3QgZmlyc3RFcnJvciA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UuZ2V0Rmlyc3RJbnZhbGlkKCk7XG4gICAgaWYgKCFmaXJzdEVycm9yKSByZXR1cm47XG5cbiAgICBjb25zdCBlbGVtZW50SWQgPSBgcXVlc3Rpb24tJHtmaXJzdEVycm9yLmlkfWA7XG5cbiAgICB0aGlzLnJldHJ5Q291bnQgPSAwO1xuXG4gICAgLy8gQ2hhbmdlIHBhZ2UgaWYgbmVlZGVkXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2VJbmRleCAhPT0gZmlyc3RFcnJvci5wYWdlSW5kZXgpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleCA9IGZpcnN0RXJyb3IucGFnZUluZGV4O1xuICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2VJbmRleCArIDEgPCB0aGlzLnBhZ2VEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLm5leHRQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXggKyAxXTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlSW5kZXggLSAxID49IDApIHtcbiAgICAgICAgdGhpcy5wcmV2aW91c1BhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzW3RoaXMuY3VycmVudFBhZ2VJbmRleCAtIDFdO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRlYm91bmNlKCgpID0+IHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpLCAxMDApO1xuICAgICAgaWYgKHRoaXMubmF2aWdhdGlvbiA9PT0gJ1RBQicpXG4gICAgICAgIHRoaXMuY2hpbGQudHJpZ2dlckZ1bmN0aW9uKGZpcnN0RXJyb3IucGFnZUluZGV4KTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnNjcm9sbFRvRWxlbWVudFdpdGhSZXRyeShlbGVtZW50SWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzY3JvbGxUb0VsZW1lbnRXaXRoUmV0cnkoZWxlbWVudElkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnJldHJ5Q291bnQrKztcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTtcblxuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy5zY3JvbGxBbmRGb2N1cyhlbGVtZW50KSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmV0cnlDb3VudCA8IHRoaXMubWF4UmV0cmllcykge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwKSk7XG4gICAgICByZXR1cm4gdGhpcy5zY3JvbGxUb0VsZW1lbnRXaXRoUmV0cnkoZWxlbWVudElkKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgYEVsZW1lbnQgJHtlbGVtZW50SWR9IG5vdCBmb3VuZCBhZnRlciAke3RoaXMubWF4UmV0cmllc30gYXR0ZW1wdHNgXG4gICAgKTtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy5mYWxsYmFja1Njcm9sbCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgc2Nyb2xsQW5kRm9jdXMoZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICBlbGVtZW50LnNjcm9sbEludG9WaWV3KHtcbiAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAgIGJsb2NrOiAnY2VudGVyJyxcbiAgICAgIGlubGluZTogJ25lYXJlc3QnLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZm9jdXNhYmxlID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJ2lucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBidXR0b24sIFt0YWJpbmRleF06bm90KFt0YWJpbmRleD1cIi0xXCJdKSdcbiAgICApIGFzIEhUTUxFbGVtZW50O1xuICAgIGZvY3VzYWJsZT8uZm9jdXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZmFsbGJhY2tTY3JvbGwoKSB7XG4gICAgY29uc3QgcGFnZUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgYC5wYWdlLSR7dGhpcy5jdXJyZW50UGFnZUluZGV4fWBcbiAgICApO1xuICAgIHBhZ2VFbGVtZW50Py5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnYXV0bycgfSk7XG4gIH1cblxuICBwcml2YXRlIGRlYm91bmNlKGZ1bmM6ICgpID0+IHZvaWQsIGRlbGF5OiBudW1iZXIpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5kZWJvdW5jZVRpbWVyKTtcbiAgICB0aGlzLmRlYm91bmNlVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmMsIGRlbGF5KTtcbiAgfVxuICAvLyAgIGV4dHJhY3RJZChtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgLy8gICAgIGNvbnN0IG1hdGNoID0gbWVzc2FnZS5tYXRjaCgvWzAtOWEtZkEtRi1dezM2fS8pO1xuICAvLyAgICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMF0gOiBudWxsO1xuICAvLyB9XG5cbiAgLy8gIHJlbW92ZUlkKG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vICAgcmV0dXJuIG1lc3NhZ2UucmVwbGFjZSgvWzAtOWEtZkEtRi1dezM2fSQvLCBcIlwiKS50cmltKCk7XG4gIC8vIH1cblxuICBmaW5kUXVlc3Rpb25QYWdlSW5kZXgocXVlc3Rpb25FcnJvcnM6IE1hcDxzdHJpbmcsIHN0cmluZz4pOiB2b2lkIHtcbiAgICBmb3IgKGxldCBwYWdlSW5kZXggPSAwOyBwYWdlSW5kZXggPCB0aGlzLnBhZ2VzLmxlbmd0aDsgcGFnZUluZGV4KyspIHtcbiAgICAgIGNvbnN0IHBhZ2UgPSB0aGlzLnBhZ2VzW3BhZ2VJbmRleF07XG5cbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIHBhZ2Uucm93cykge1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2Ygcm93LmdyaWQpIHtcbiAgICAgICAgICB0aGlzLmNoZWNrQW5kU3RvcmVJbnZhbGlkUXVlc3Rpb25zKFxuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIHF1ZXN0aW9uRXJyb3JzLFxuICAgICAgICAgICAgcGFnZUluZGV4XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tBbmRTdG9yZUludmFsaWRRdWVzdGlvbnMoXG4gICAgZWxlbWVudDogYW55LFxuICAgIHF1ZXN0aW9uRXJyb3JzOiBNYXA8c3RyaW5nLCBzdHJpbmc+LFxuICAgIHBhZ2VJbmRleDogbnVtYmVyXG4gICk6IHZvaWQge1xuICAgIGlmIChlbGVtZW50LmVsZW1lbnQuaWQgJiYgcXVlc3Rpb25FcnJvcnMuaGFzKGVsZW1lbnQuZWxlbWVudC5pZCkpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uuc2V0SW52YWxpZChcbiAgICAgICAgZWxlbWVudC5lbGVtZW50LmlkLFxuICAgICAgICBxdWVzdGlvbkVycm9ycy5nZXQoZWxlbWVudC5lbGVtZW50LmlkKSEsXG4gICAgICAgIHBhZ2VJbmRleFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgc3ViZm9ybXMgcmVjdXJzaXZlbHlcbiAgICBpZiAoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnU1VCRk9STScgJiYgZWxlbWVudC5lbGVtZW50LnJvd3MpIHtcbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIGVsZW1lbnQuZWxlbWVudC5yb3dzKSB7XG4gICAgICAgIGZvciAoY29uc3QgZ3JpZEl0ZW0gb2Ygcm93LmdyaWQpIHtcbiAgICAgICAgICB0aGlzLmNoZWNrQW5kU3RvcmVJbnZhbGlkUXVlc3Rpb25zKFxuICAgICAgICAgICAgZ3JpZEl0ZW0sXG4gICAgICAgICAgICBxdWVzdGlvbkVycm9ycyxcbiAgICAgICAgICAgIHBhZ2VJbmRleFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgKGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1FVRVNUSU9OX0dST1VQJyB8fFxuICAgICAgICBlbGVtZW50LmVudGl0eVR5cGUgPT09ICdNVUxUSUZJRUxEJykgJiZcbiAgICAgIGVsZW1lbnQuZWxlbWVudC5yb3dzXG4gICAgKSB7XG4gICAgICBmb3IgKGNvbnN0IHJvdyBvZiBlbGVtZW50LmVsZW1lbnQucm93cykge1xuICAgICAgICBmb3IgKGNvbnN0IGdyaWRJdGVtIG9mIHJvdy5ncmlkKSB7XG4gICAgICAgICAgdGhpcy5jaGVja0FuZFN0b3JlSW52YWxpZFF1ZXN0aW9ucyhcbiAgICAgICAgICAgIGdyaWRJdGVtLFxuICAgICAgICAgICAgcXVlc3Rpb25FcnJvcnMsXG4gICAgICAgICAgICBwYWdlSW5kZXhcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGxvZ2ljLWJhc2VkIGNvbmRpdGlvbnMgcmVjdXJzaXZlbHlcbiAgICBpZiAoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnUVVFU1RJT04nICYmIGVsZW1lbnQuZWxlbWVudC5jaGlsZExvZ2ljcykge1xuICAgICAgZm9yIChjb25zdCBsb2dpYyBvZiBlbGVtZW50LmVsZW1lbnQuY2hpbGRMb2dpY3MpIHtcbiAgICAgICAgaWYgKGxvZ2ljLnNob3dMb2dpYykge1xuICAgICAgICAgIGZvciAoY29uc3Qgcm93IG9mIGxvZ2ljLnJvd3MpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZ3JpZEl0ZW0gb2Ygcm93LmdyaWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5jaGVja0FuZFN0b3JlSW52YWxpZFF1ZXN0aW9ucyhcbiAgICAgICAgICAgICAgICBncmlkSXRlbSxcbiAgICAgICAgICAgICAgICBxdWVzdGlvbkVycm9ycyxcbiAgICAgICAgICAgICAgICBwYWdlSW5kZXhcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb2N1c1F1ZXN0aW9uRWxlbWVudChjb250YWluZXI6IEhUTUxFbGVtZW50KSB7XG4gICAgLy8gRmluZCBmaXJzdCBmb2N1c2FibGUgZWxlbWVudCB3aXRoaW4gdGhlIHF1ZXN0aW9uXG4gICAgY29uc3QgZm9jdXNhYmxlID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAnaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFt0YWJpbmRleF0nXG4gICAgKTtcbiAgICBpZiAoZm9jdXNhYmxlKSB7XG4gICAgICAoZm9jdXNhYmxlIGFzIEhUTUxFbGVtZW50KS5mb2N1cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250YWluZXIuZm9jdXMoKTtcbiAgICB9XG4gIH1cbiAgdmFsaWRhdGVGb3JtKGpzb25EYXRhOiBhbnkpOiB7XG4gICAgaXNWYWxpZDogYm9vbGVhbjtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgcGFnZUluZGV4OiBudW1iZXIgfCAwO1xuICB9IHtcbiAgICBjb25zdCB2YWxpZGF0ZVF1ZXN0aW9ucyA9IChcbiAgICAgIGZvcm1FbGVtZW50czogYW55W11cbiAgICApOiB7IGlzVmFsaWQ6IGJvb2xlYW47IG1lc3NhZ2U6IHN0cmluZzsgcGFnZUluZGV4OiBudW1iZXIgfCAwIH0gPT4ge1xuICAgICAgZm9yIChsZXQgZWxlbWVudCBvZiBmb3JtRWxlbWVudHMpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1FVRVNUSU9OJykge1xuICAgICAgICAgIGNvbnN0IHJlcXVpcmVkID0gZWxlbWVudC5lbGVtZW50LnJlcXVpcmVkO1xuICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGVsZW1lbnQuZWxlbWVudC5hbnN3ZXI7XG4gICAgICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IGVsZW1lbnQuZWxlbWVudC52YWxpZGF0aW9uO1xuICAgICAgICAgIGNvbnN0IHNob3cgPSBlbGVtZW50LnNob3c7XG4gICAgICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudC5mb3JtRWxlbWVudC5lbGVtZW50VHlwZSA9PT0gJ0ZJTEVfUElDS0VSJykge1xuICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudCA9IGVsZW1lbnQuZWxlbWVudC5hdHRhY2htZW50cztcbiAgICAgICAgICAgIGlmIChyZXF1aXJlZCkge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKCFhbnN3ZXIgfHwgYW5zd2VyPy5sZW5ndGggPT09IDApICYmXG4gICAgICAgICAgICAgICAgKCFhdHRhY2htZW50IHx8IGF0dGFjaG1lbnQ/Lmxlbmd0aCA9PSAwKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluVmFsaWRRdWVzdGlvbnMuc2V0KFxuICAgICAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LmlkLFxuICAgICAgICAgICAgICAgICAgJ1JlcXVpcmVkIGZpbGUgcXVlc3Rpb24gaGFzIG5vIGZpbGVzIHVwbG9hZGVkLidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBGb3JtIGlzIGludmFsaWQgLSBSZXF1aXJlZCBmaWxlIHF1ZXN0aW9uICR7ZWxlbWVudC5lbGVtZW50LnF1ZXN0aW9uTnVtYmVyfSBoYXMgbm8gZmlsZXMgdXBsb2FkZWQuYCxcbiAgICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChyZXF1aXJlZCAmJiBzaG93KSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBhbnN3ZXIgPT09IG51bGwgfHxcbiAgICAgICAgICAgICAgICBhbnN3ZXIgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgICh0eXBlb2YgYW5zd2VyID09PSAnc3RyaW5nJyAmJiBhbnN3ZXIudHJpbSgpID09PSAnJykgfHxcbiAgICAgICAgICAgICAgICAodHlwZW9mIGFuc3dlciA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoYW5zd2VyKS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5WYWxpZFF1ZXN0aW9ucy5zZXQoXG4gICAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuaWQsXG4gICAgICAgICAgICAgICAgICAnVGhpcyBpcyBhIHJlcXVpcmVkIHF1ZXN0aW9uJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYEZvcm0gaXMgaW52YWxpZCAtIFF1ZXN0aW9uICR7ZWxlbWVudC5lbGVtZW50LnF1ZXN0aW9uTnVtYmVyfSBpcyByZXF1aXJlZCBidXQgbm8gYW5zd2VyIHByb3ZpZGVkLmAsXG4gICAgICAgICAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5WYWxpZFF1ZXN0aW9ucy5zZXQoXG4gICAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuaWQsXG4gICAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQudmFsaWRhdGlvbk1lc3NhZ2VcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBGb3JtIGlzIGludmFsaWQgLSBRdWVzdGlvbiAke2VsZW1lbnQuZWxlbWVudC5xdWVzdGlvbk51bWJlcn0gaXMgcmVxdWlyZWQgYnV0IHZhbGlkYXRpb24gaXMgZmFsc2UuYCxcbiAgICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFyZXF1aXJlZCAmJiBhbnN3ZXIgJiYgT2JqZWN0LmtleXMoYW5zd2VyKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5WYWxpZFF1ZXN0aW9ucy5zZXQoXG4gICAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuaWQsXG4gICAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQudmFsaWRhdGlvbk1lc3NhZ2VcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBGb3JtIGlzIGludmFsaWQgLSBRdWVzdGlvbiAke2VsZW1lbnQuZWxlbWVudC5xdWVzdGlvbk51bWJlcn0gaXMgbm90IHJlcXVpcmVkIGJ1dCBhbnN3ZXIgcHJvdmlkZWQgd2l0aCB2YWxpZGF0aW9uIGZhbHNlLmAsXG4gICAgICAgICAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZWxlbWVudC5lbGVtZW50LmNoaWxkTG9naWNzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBsb2dpYyBvZiBlbGVtZW50LmVsZW1lbnQuY2hpbGRMb2dpY3MpIHtcbiAgICAgICAgICAgICAgaWYgKGxvZ2ljLnNob3dMb2dpYykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlUXVlc3Rpb25zKGxvZ2ljLnJvd3MpO1xuICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzVmFsaWQpIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnU1VCRk9STScgJiYgIWVsZW1lbnQuZWxlbWVudC5kZWxldGVkKSB7XG4gICAgICAgICAgaWYoZWxlbWVudC5lbGVtZW50LnByb3BlcnR5Py5zdWJGb3JtU3RydWN0dXJlID09ICdzaW5nbGUnKXtcbiAgICAgICAgICAgIGZvcihsZXQgcm93IG9mIGVsZW1lbnQuZWxlbWVudC5yb3dzKXtcbiAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGVRdWVzdGlvbnMocm93LmdyaWQpO1xuICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5pc1ZhbGlkKSByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlU3ViRm9ybShlbGVtZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgKGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1FVRVNUSU9OX0dST1VQJyB8fFxuICAgICAgICAgICAgZWxlbWVudC5lbnRpdHlUeXBlID09PSAnTVVMVElGSUVMRCcpICYmXG4gICAgICAgICAgZWxlbWVudC5lbGVtZW50LnJvd3NcbiAgICAgICAgKSB7XG4gICAgICAgICAgZm9yIChjb25zdCByb3cgb2YgZWxlbWVudC5lbGVtZW50LnJvd3MpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlUXVlc3Rpb25zKHJvdy5ncmlkKTtcbiAgICAgICAgICAgIGlmICghcmVzdWx0LmlzVmFsaWQgJiYgZWxlbWVudC5lbnRpdHlUeXBlICE9ICdNVUxUSUZJRUxEJylcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIG1lc3NhZ2U6ICcnLCBwYWdlSW5kZXg6IDAgfTtcbiAgICB9O1xuXG4gICAgZm9yIChsZXQgcGFnZUluZGV4ID0gMDsgcGFnZUluZGV4IDwganNvbkRhdGEubGVuZ3RoOyBwYWdlSW5kZXgrKykge1xuICAgICAgY29uc3QgcGFnZSA9IGpzb25EYXRhW3BhZ2VJbmRleF07XG4gICAgICBmb3IgKGxldCByb3cgb2YgcGFnZS5yb3dzKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlUXVlc3Rpb25zKHJvdy5ncmlkKTtcbiAgICAgICAgdGhpcy5pblZhbGlkUXVlc3Rpb25zLmZvckVhY2goKG1lc3NhZ2U6IHN0cmluZywgaWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uuc2V0SW52YWxpZChpZCwgbWVzc2FnZSwgcGFnZUluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaW5WYWxpZFF1ZXN0aW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgICAgIC8vIGlmICghcmVzdWx0LmlzVmFsaWQpIHtcbiAgICAgICAgLy8gICByZXR1cm4ge1xuICAgICAgICAvLyAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgIC8vICAgICBtZXNzYWdlOiBgUGFnZSAke3BhZ2VJbmRleCArIDF9OiAke3Jlc3VsdC5tZXNzYWdlfWAsXG4gICAgICAgIC8vICAgICBwYWdlSW5kZXg6IHBhZ2VJbmRleCxcbiAgICAgICAgLy8gICB9O1xuICAgICAgICAvLyB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleCA9IGpzb25EYXRhLmxlbmd0aCAtIDE7XG4gICAgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuZ2V0Rmlyc3RJbnZhbGlkKCkpIHtcbiAgICAgIHRoaXMubmF2aWdhdGVUb0ZpcnN0RXJyb3IoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiBgUGFnZWAsXG4gICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpc1ZhbGlkOiB0cnVlLFxuICAgICAgbWVzc2FnZTogJ0Zvcm0gaXMgdmFsaWQuJyxcbiAgICAgIHBhZ2VJbmRleDogMCxcbiAgICB9O1xuICB9XG5cbiAgdmFsaWRhdGVTdWJGb3JtKGVsZW1lbnQ6IGFueSkge1xuICAgIGlmIChlbGVtZW50LmVudGl0eVR5cGUgIT09ICdTVUJGT1JNJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgXG4gICAgY29uc3Qgc3VibWlzc2lvbnMgPSBlbGVtZW50LmVsZW1lbnQ/LnN1Ym1pc3Npb25zIHx8IFtdO1xuICBcbiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKiAx77iP4oOjIFN1YmZvcm0gcmVxdWlyZWQgYnV0IG5vIHN1Ym1pc3Npb25cbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbiAgICBpZiAoZWxlbWVudC5lbGVtZW50Py5yZXF1aXJlZCAmJiBzdWJtaXNzaW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuaW5WYWxpZFF1ZXN0aW9ucy5zZXQoXG4gICAgICAgIGVsZW1lbnQuZWxlbWVudC5pZCxcbiAgICAgICAgJ0F0IGxlYXN0IG9uZSBzdWJtaXNzaW9uIGlzIHJlcXVpcmVkJ1xuICAgICAgKTtcbiAgICAgIHJldHVybjsgLy8gbm90aGluZyBlbHNlIHRvIHZhbGlkYXRlXG4gICAgfVxuICBcbiAgICBzdWJtaXNzaW9ucy5mb3JFYWNoKChzdWJtaXNzaW9uOiBhbnksIHN1Ym1pc3Npb25JbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBhbnN3ZXJzID0gc3VibWlzc2lvbi5hbnN3ZXJzIHx8IFtdO1xuICBcbiAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICogMu+4j+KDoyBTdWJtaXNzaW9uIGV4aXN0cyBidXQgbm8gYW5zd2Vyc1xuICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4gICAgICBjb25zdCBoYXNBbnlBbnN3ZXIgPSBhbnN3ZXJzLnNvbWUoXG4gICAgICAgIChhOiBhbnkpID0+XG4gICAgICAgICAgYS5hbnN3ZXIgIT09IG51bGwgJiZcbiAgICAgICAgICBhLmFuc3dlciAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgYS5hbnN3ZXIgIT09ICcnICYmXG4gICAgICAgICAgIShBcnJheS5pc0FycmF5KGEuYW5zd2VyKSAmJiBhLmFuc3dlci5sZW5ndGggPT09IDApXG4gICAgICApO1xuICBcbiAgICAgIGlmIChlbGVtZW50LmVsZW1lbnQ/LnJlcXVpcmVkICYmICFoYXNBbnlBbnN3ZXIpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYCR7ZWxlbWVudC5lbGVtZW50LmlkfWA7XG4gICAgICAgIHRoaXMuaW5WYWxpZFF1ZXN0aW9ucy5zZXQoXG4gICAgICAgICAga2V5LFxuICAgICAgICAgICdBdCBsZWFzdCBvbmUgYW5zd2VyIGlzIHJlcXVpcmVkIGluIHRoZSBzdWJmb3JtJ1xuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gIFxuICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgKiAz77iP4oOjIEV4aXN0aW5nIHF1ZXN0aW9uLWxldmVsIHZhbGlkYXRpb25zXG4gICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbiAgICAgIGFuc3dlcnMuZm9yRWFjaCgoYW5zd2VyT2JqOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLmZpbmRRdWVzdGlvbkJ5SWQoXG4gICAgICAgICAgZWxlbWVudC5lbGVtZW50LnJvd3MsXG4gICAgICAgICAgYW5zd2VyT2JqLnF1ZXN0aW9uSWRcbiAgICAgICAgKTtcbiAgXG4gICAgICAgIGNvbnN0IGFucyA9IGFuc3dlck9iai5hbnN3ZXI7XG4gIFxuICAgICAgICAvLyBSZXF1aXJlZCBxdWVzdGlvbiBjaGVja1xuICAgICAgICBpZiAoKHF1ZXN0aW9uPy5yZXF1aXJlZCB8fCBhbnN3ZXJPYmoucmVxdWlyZWQpICYmXG4gICAgICAgICAgICAoYW5zID09PSAnJyB8fCBhbnMgPT09IG51bGwgfHwgYW5zID09PSB1bmRlZmluZWQgfHwgYW5zPy5sZW5ndGggPT09IDApKSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gYCR7c3VibWlzc2lvbkluZGV4fS0ke3F1ZXN0aW9uLmlkfWA7XG4gICAgICAgICAgdGhpcy5pblZhbGlkUXVlc3Rpb25zLnNldChrZXksICdUaGlzIGlzIGEgcmVxdWlyZWQgcXVlc3Rpb24nKTtcbiAgICAgICAgfVxuICBcbiAgICAgICAgLy8gRW1haWwgdmFsaWRhdGlvblxuICAgICAgICBpZiAocXVlc3Rpb24/LmZvcm1FbGVtZW50Py5lbGVtZW50VHlwZSA9PT0gJ0VNQUlMJyAmJiBhbnMpIHtcbiAgICAgICAgICBjb25zdCBlbWFpbFJlZ2V4ID0gL15bXlxcc0BdK0BbXlxcc0BdK1xcLlteXFxzQF0rJC87XG4gICAgICAgICAgaWYgKCFlbWFpbFJlZ2V4LnRlc3QoYW5zKSkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gYCR7c3VibWlzc2lvbkluZGV4fS0ke3F1ZXN0aW9uLmlkfWA7XG4gICAgICAgICAgICB0aGlzLmluVmFsaWRRdWVzdGlvbnMuc2V0KFxuICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIFxuXG4gIC8vIPCflI0gSGVscGVyOiBmaW5kIHF1ZXN0aW9uIGRlZmluaXRpb24gaW5zaWRlIHJvd3NcbiAgcHJpdmF0ZSBmaW5kUXVlc3Rpb25CeUlkKHJvd3M6IGFueVtdLCBxdWVzdGlvbklkOiBzdHJpbmcpOiBhbnkge1xuICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgIGZvciAoY29uc3QgZ3JpZEVsZW1lbnQgb2Ygcm93LmdyaWQpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGdyaWRFbGVtZW50LmVudGl0eVR5cGUgPT09ICdRVUVTVElPTicgJiZcbiAgICAgICAgICBncmlkRWxlbWVudC5lbGVtZW50LmlkID09PSBxdWVzdGlvbklkXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBncmlkRWxlbWVudC5lbGVtZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdXBkYXRlU3ViRm9ybVdpdGhTdWJtaXNzaW9ucyhldmVudDogYW55KSB7XG4gICAgdGhpcy51cGRhdGVTdWJGb3JtKHRoaXMucGFnZXMsIGV2ZW50KTtcbiAgfVxuXG4gIHVwZGF0ZVN1YkZvcm0gPSAocGFnZXM6IGFueVtdLCB1cGRhdGVkU3ViRm9ybTogYW55KSA9PiB7XG4gICAgcGFnZXMuZm9yRWFjaCgocGFnZSkgPT4ge1xuICAgICAgcGFnZS5yb3dzLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgIHJvdy5ncmlkLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1NVQkZPUk0nICYmXG4gICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuaWQgPT09IHVwZGF0ZWRTdWJGb3JtLmlkXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGV4aXN0aW5nIHN1YmZvcm0gd2l0aCB0aGUgbmV3IGRhdGFcbiAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudCA9IHVwZGF0ZWRTdWJGb3JtO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBlbGVtZW50LmVudGl0eVR5cGUgPT09ICdTVUJGT1JNJyAmJlxuICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LmlkICE9PSB1cGRhdGVkU3ViRm9ybS5mb3JtSWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBtdWx0aXBsZSBzdWJmb3JtcyBsb2dpYyBoZXJlIGlmIG5lZWRlZFxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBlbGVtZW50LmVudGl0eVR5cGUgPT09ICdRVUVTVElPTicgJiZcbiAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5jaGlsZExvZ2ljc1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgdXBkYXRlIGNoaWxkIGxvZ2ljc1xuICAgICAgICAgICAgLy8gZWxlbWVudC5lbGVtZW50LmNoaWxkTG9naWNzLmZvckVhY2goKGxvZ2ljOiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8vICAgaWYgKGxvZ2ljLnNob3dMb2dpYykge1xuICAgICAgICAgICAgLy8gICAgIHRoaXMudXBkYXRlU3ViRm9ybShsb2dpYy5yb3dzLCB1cGRhdGVkU3ViRm9ybSk7XG4gICAgICAgICAgICAvLyAgIH1cbiAgICAgICAgICAgIC8vIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBleHRyYWN0R3JvdXBlZFdlYmhvb2tEYXRhKHdlYmhvb2tzOiBhbnlbXSk6IHtcbiAgICBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBwYXRoVmFyaWFibGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHJlcXVlc3RCb2RpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIH0ge1xuICAgIGNvbnN0IHJlc3VsdDoge1xuICAgICAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICAgIHBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICAgIHBhdGhWYXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgICByZXF1ZXN0Qm9kaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIH0gPSB7XG4gICAgICBoZWFkZXJzOiB7fSxcbiAgICAgIHBhcmFtczoge30sXG4gICAgICBwYXRoVmFyaWFibGVzOiB7fSxcbiAgICAgIHJlcXVlc3RCb2RpZXM6IHt9LFxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IHdlYmhvb2sgb2Ygd2ViaG9va3MgPz8gW10pIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB3ZWJob29rPy5oZWFkZXJzID8/IFtdKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZUZyb21TdG9yYWdlKGl0ZW0udmFsdWVTb3VyY2UsIGl0ZW0uaW5wdXRWYWx1ZSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHJlc3VsdC5oZWFkZXJzW2l0ZW0ua2V5TmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygd2ViaG9vaz8ucGFyYW1zID8/IFtdKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZUZyb21TdG9yYWdlKGl0ZW0udmFsdWVTb3VyY2UsIGl0ZW0uaW5wdXRWYWx1ZSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHJlc3VsdC5wYXJhbXNbaXRlbS5rZXlOYW1lXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB3ZWJob29rPy5wYXRoVmFyaWFibGVzID8/IFtdKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZUZyb21TdG9yYWdlKGl0ZW0udmFsdWVTb3VyY2UsIGl0ZW0uaW5wdXRWYWx1ZSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHJlc3VsdC5wYXRoVmFyaWFibGVzW2l0ZW0ua2V5TmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygd2ViaG9vaz8ucmVxdWVzdEJvZGllcyA/PyBbXSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWVGcm9tU3RvcmFnZShpdGVtLnZhbHVlU291cmNlLCBpdGVtLmlucHV0VmFsdWUpO1xuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICByZXN1bHQucmVxdWVzdEJvZGllc1tpdGVtLmtleU5hbWVdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZ2V0VmFsdWVGcm9tU3RvcmFnZShcbiAgICBzb3VyY2U6ICdMT0NBTF9TVE9SQUdFJyB8ICdTRVNTSU9OX1NUT1JBR0UnLFxuICAgIGtleTogc3RyaW5nXG4gICk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmIChzb3VyY2UgPT09ICdMT0NBTF9TVE9SQUdFJykgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgaWYgKHNvdXJjZSA9PT0gJ1NFU1NJT05fU1RPUkFHRScpIHJldHVybiBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjYW5jZWxsZWQoKXtcbiAgICB0aGlzLmNhbmNlbC5lbWl0KCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJvdXRlci1jb250YWluZXJcIj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTG9hZGluZ1BhZ2VzXCI+XG4gICAgPG5neC1za2VsZXRvbi1sb2FkZXIgY291bnQ9XCI1XCI+PC9uZ3gtc2tlbGV0b24tbG9hZGVyPlxuPC9uZy1jb250YWluZXI+XG5cbiAgPGRpdiBjbGFzcz1cImhlYWQgY29udGFpbmVyXCIgKm5nSWY9XCIhc2tpcE1hcmdpblwiPlxuICAgIDxsaWItaGVhZGVyIFtuYW1lXT1cIm5hbWVcIiBbc2tpcE1hcmdpbl09XCJza2lwTWFyZ2luXCI+PC9saWItaGVhZGVyPlxuICA8L2Rpdj5cblxuXG5cbiAgPGRpdiBjbGFzcz1cImJvZHlcIiBbbmdDbGFzc109XCJ7ICdza2lwLW1hcmdpbic6IHNraXBNYXJnaW4sY29udGFpbmVyOiAhc2tpcE1hcmdpbn1cIj5cblxuICAgIDxsaWItc3VibWlzc2lvbi1jb250YWluZXIgW3BhcmVudFF1ZXN0aW9uQW5zd2Vyc109XCJwYXJlbnRRdWVzdGlvbkFuc3dlcnNcIlxuICAgICpuZ0lmPVwicGFyZW50UXVlc3Rpb25BbnN3ZXJzXCI+PC9saWItc3VibWlzc2lvbi1jb250YWluZXI+XG5cbiAgICA8bGliLW5hdmlnYXRpb24tdGFic1xuICAgICAgKm5nSWY9XCJuYXZpZ2F0aW9uID09ICdUQUInXCJcbiAgICAgIFtza2lwTWFyZ2luXT1cInNraXBNYXJnaW5cIlxuICAgICAgW3NraXBWYWxpZGF0aW9uXT1cInNraXBWYWxpZGF0aW9uXCJcbiAgICAgIFtwYWdlc109XCJwYWdlc1wiXG4gICAgICBbY3VycmVudFBhZ2VJbmRleF09XCJjdXJyZW50UGFnZUluZGV4XCJcbiAgICAgIChwYWdlQ2hhbmdlZCk9XCJzZXRDdXJyZW50UGFnZSgkZXZlbnQpXCJcbiAgICAgIChzdWJtaXRFbWl0KT1cInN1Ym1pdEZvcm0oKVwiXG4gICAgICBbcGFnZURldGFpbHNdPVwicGFnZURldGFpbHNcIlxuICAgICAgW2VsaWdpYmxlRm9yU3VibWlzc2lvbl09XCJlbGlnaWJsZUZvclN1Ym1pc3Npb25cIlxuICAgICAgW2VkaXRdPVwiZWRpdFwiXG4gICAgICBbYWNjZXB0ZWRMYW5ndWFnZV0gPSBcImFjY2VwdGVkTGFuZ3VhZ2VcIlxuICAgICAgW2lzQWN0aW9uVHJpZ2dlcmVkXT1cImlzQWN0aW9uVHJpZ2dlcmVkXCJcbiAgICAgIFtwcmltYXJ5Q29sb3JdPVwicHJpbWFyeUNvbG9yXCJcbiAgICAgIFtzZWNvbmRhcnlDb2xvcl09XCJzZWNvbmRhcnlDb2xvclwiXG4gICAgICBbbWFya0FsbFF1ZXN0aW9uc0FzUmVxdWlyZWRdPVwibWFya0FsbFF1ZXN0aW9uc0FzUmVxdWlyZWRcIlxuICAgICAgW3N1Ym1pc3Npb25JblByb2dyZXNzXT1cInN1Ym1pc3Npb25JblByb2dyZXNzXCJcbiAgICAgIFtzdWJtaXNzaW9uSW5EcmFmdF09XCJzdWJtaXNzaW9uSW5EcmFmdFwiXG4gICAgICBbc2hvd0NhbmNlbEJ1dHRvbl09XCJzaG93Q2FuY2VsQnV0dG9uXCJcbiAgICAgIChzYXZlQXNEcmFmdEVtaXQpPVwic2F2ZUFzRHJhZnQoKVwiXG4gICAgICAoc3ViRm9ybUNoYW5nZSk9XCJ1cGRhdGVTdWJGb3JtV2l0aFN1Ym1pc3Npb25zKCRldmVudClcIlxuICAgICAgKHJvd1NldEluZGV4KT1cImxvYWRNb3JlRGF0YSgkZXZlbnQpXCJcbiAgICAgIChjYW5jZWwpPVwiY2FuY2VsbGVkKClcIlxuICAgID48L2xpYi1uYXZpZ2F0aW9uLXRhYnM+XG4gICAgPGxpYi1uZXh0LXByZXYtbmF2aWdhdGlvblxuICAgICAgKm5nSWY9XCJuYXZpZ2F0aW9uID09ICdORVhUX0FORF9QUkVWSU9VU19CVVRUT04nXCJcbiAgICAgIFtza2lwTWFyZ2luXT1cInNraXBNYXJnaW5cIlxuICAgICAgW2N1cnJlbnRQYWdlSW5kZXhdPVwiY3VycmVudFBhZ2VJbmRleFwiXG4gICAgICBbcGFnZURldGFpbHNdPVwicGFnZURldGFpbHNcIlxuICAgICAgKHJvd1NldEluZGV4KT1cImxvYWRNb3JlRGF0YSgkZXZlbnQpXCJcbiAgICAgIFtwYWdlc109XCJwYWdlc1wiXG4gICAgICBbcHJldmlvdXNQYWdlXT1cInByZXZpb3VzUGFnZVwiXG4gICAgICBbaXNBY3Rpb25UcmlnZ2VyZWRdPVwiaXNBY3Rpb25UcmlnZ2VyZWRcIlxuICAgICAgW2N1cnJlbnRQYWdlXT1cImN1cnJlbnRQYWdlXCJcbiAgICAgIFtwcmltYXJ5Q29sb3JdPVwicHJpbWFyeUNvbG9yXCJcbiAgICAgIFtzZWNvbmRhcnlDb2xvcl09XCJzZWNvbmRhcnlDb2xvclwiXG4gICAgICBbbmV4dFBhZ2VdPVwibmV4dFBhZ2VcIlxuICAgICAgKG5hdmlnYXRlTmV4dCk9XCJuYXZpZ2F0ZVRvTmV4dFBhZ2UoKVwiXG4gICAgICAobmF2aWdhdGVQcmV2aW91cyk9XCJuYXZpZ2F0ZVRvUHJldmlvdXNQYWdlKClcIlxuICAgICAgW2FjY2VwdGVkTGFuZ3VhZ2VdID0gXCJhY2NlcHRlZExhbmd1YWdlXCJcbiAgICAgIChzdWJtaXRFbWl0KT1cInN1Ym1pdEZvcm0oKVwiXG4gICAgICAoc2F2ZUFzRHJhZnRFbWl0KT1cInNhdmVBc0RyYWZ0KClcIlxuICAgICAgW2VkaXRdPVwiZWRpdFwiXG4gICAgICBbZWxpZ2libGVGb3JTdWJtaXNzaW9uXT1cImVsaWdpYmxlRm9yU3VibWlzc2lvblwiXG4gICAgICBbc3VibWlzc2lvbkluUHJvZ3Jlc3NdPVwic3VibWlzc2lvbkluUHJvZ3Jlc3NcIlxuICAgICAgW3N1Ym1pc3Npb25JbkRyYWZ0XT1cInN1Ym1pc3Npb25JbkRyYWZ0XCJcbiAgICAgIFtzaG93Q2FuY2VsQnV0dG9uXT1cInNob3dDYW5jZWxCdXR0b25cIlxuICAgICAgKHN1YkZvcm1DaGFuZ2UpPVwidXBkYXRlU3ViRm9ybVdpdGhTdWJtaXNzaW9ucygkZXZlbnQpXCJcbiAgICAgIChjYW5jZWwpPVwiY2FuY2VsbGVkKClcIlxuICAgICAgIFtza2lwVmFsaWRhdGlvbl09XCJza2lwVmFsaWRhdGlvblwiXG4gICAgPjwvbGliLW5leHQtcHJldi1uYXZpZ2F0aW9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
1610
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VibWl0LWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9mb3JtLXN1Ym1pc3Npb24vc3VibWl0LWZvcm0vc3VibWl0LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9mb3JtLXN1Ym1pc3Npb24vc3VibWl0LWZvcm0vc3VibWl0LWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxLQUFLLE1BQU0sTUFBTSwrQkFBK0IsQ0FBQztBQVF4RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQU12RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUVwRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0VyRCxNQUFNLE9BQU8sbUJBQW1CO0lBK0Y5QixZQUNVLFdBQXdCLEVBQ3hCLE1BQXFCLEVBQ3JCLE1BQWMsRUFDZCxXQUF3QixFQUN4QixnQkFBa0MsRUFDbEMsaUJBQW9DLEVBQ3BDLGlCQUFvQyxFQUNwQyxjQUFxQyxFQUNyQyxxQkFBNEMsRUFDNUMsZ0JBQTRDLEVBQzVDLGdCQUF5QyxFQUMxQyxNQUFpQixFQUNoQixpQkFBbUM7UUFabkMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNs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QUUsT0FBTyxjQUFjLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3JCLENBQUM7K0dBajBEVSxtQkFBbUI7bUdBQW5CLG1CQUFtQix5Z0JBZ0JuQix1QkFBdUIscUVDOUdwQyxxN0ZBNEVBOzs0RkRrQmEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGlCQUFpQjs4ZEFNbEIsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNJLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFFRSxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0ksTUFBTTtzQkFBZixNQUFNO2dCQUVQLEtBQUs7c0JBREosU0FBUzt1QkFBQyx1QkFBdUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBRTVDLGlCQUFpQjtzQkFBekIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zvcm0uc2VydmljZSc7XG5pbXBvcnQgKiBhcyBtYXBwZXIgZnJvbSAnLi4vLi4vc2VydmljZXMvbWFwcGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHVibGljRm9ybSB9IGZyb20gJy4uLy4uL21vZGVscy9wdWJsaWNGb3JtLm1vZGVsJztcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBSZWNhcHRjaGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVjYXB0Y2hhLnNlcnZpY2UnO1xuaW1wb3J0IHsgVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92YWxpZGF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWxlbWVudFRyYWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZWxlbWVudC10cmFja2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmF2aWdhdGlvblRhYnNDb21wb25lbnQgfSBmcm9tICcuLi9uYXZpZ2F0aW9uLXRhYnMvbmF2aWdhdGlvbi10YWJzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb3JtVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mb3JtLXZhbGlkYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbkZ1bmN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FnZ3JlZ2F0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IEVtaXR0ZXJEVE8gfSBmcm9tICcuLi8uLi9tb2RlbHMvZW1pdHRlcnMubW9kZWwnO1xuaW1wb3J0IHsgU2NvcmVDYWxjdWxhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zY29yZS5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBTYXZlRHJhZnRNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL3NhdmUtYXMtZHJhZnQvc2F2ZURyYWZ0TW9kYWxDb21wb25lbnQgJztcbmltcG9ydCB7IFdoZW5DbGF1c2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvd2hlbkNsYXVzZS5zZXJ2aWNlJztcbmltcG9ydCB7IEh0dHBFdmVudFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbmludGVyZmFjZSBBbnN3ZXIge1xuICBxdWVzdGlvbklkOiBzdHJpbmc7XG4gIGFuc3dlcjogYW55O1xuICBhbnN3ZXJJZD86IHN0cmluZztcbiAgZGVsZXRlRmlsZXM/OiBzdHJpbmdbXTtcbiAgZmllbGRzPzogYW55O1xufVxuXG5pbnRlcmZhY2UgU3VibWlzc2lvbiB7XG4gIHN1Ym1pc3Npb25JZD86IHN0cmluZztcbiAgYW5zd2VyczogQW5zd2VyW107XG59XG5cbmludGVyZmFjZSBGb3JtIHtcbiAgZm9ybUlkOiBzdHJpbmc7XG4gIGRlbGV0ZWQ/OiBib29sZWFuO1xuICBkZWxldGVkU3VibWlzc2lvbnM6IGFueVtdO1xuICBzdWJtaXNzaW9uczogU3VibWlzc2lvbltdO1xuICBjb3BpZWRGb3Jtczogc3RyaW5nW107XG4gIHNjb3Jlcz86e1xuICAgIHNjb3JlVHlwZTogc3RyaW5nO1xuICAgIHNjb3JlOiBudW1iZXI7XG4gIH1bXTtcbiAgbWF4aW11bVBvc3NpYmxlU2NvcmU/Om51bWJlcjtcbiAgc2hvdz86Ym9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIENvcHlGb3Jtc3tcbiAgaWQ6IHN0cmluZyxcbiAgdGl0bGU6IHN0cmluZyxcbiAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgcGFyZW50U3ViZm9ybTogc3RyaW5nLFxuICBxdWVzdGlvblJlbGF0aW9uOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG5pbnRlcmZhY2UgV2hlbkNsYXVzZUVsZW1lbnRze1xuICBlbGVtZW50SWQ6c3RyaW5nO1xuICBlbnRpdHlUeXBlOnN0cmluZztcbiAgc2hvdzpib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgUXVlc3Rpb25BbnN3ZXJzV3JhcHBlciB7XG4gIHBhcmVudElkOiBzdHJpbmc7XG4gIGFuc3dlcnM6IEFuc3dlcltdO1xuICBmb3JtczogRm9ybVtdO1xuICBjb3B5U3ViRm9ybXM6Q29weUZvcm1zW107XG4gIHNjb3Jlcz86e1xuICAgIHNjb3JlVHlwZTogc3RyaW5nO1xuICAgIHNjb3JlOiBudW1iZXI7XG4gIH1bXTtcbiAgbWF4aW11bVBvc3NpYmxlU2NvcmU/Om51bWJlcjtcbiAgd2hlbkNsYXVzZUVsZW1lbnRzOiBXaGVuQ2xhdXNlRWxlbWVudHNbXVxufVxuXG5pbnRlcmZhY2UgU3VibWlzc2lvblNjb3JlIHtcbiAgc2NvcmVUeXBlOiBzdHJpbmc7XG4gIHNjb3JlOiBudW1iZXI7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1zdWJtaXQtZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdWJtaXQtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3N1Ym1pdC1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFN1Ym1pdEZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHF1ZXN0aW9uOiBQdWJsaWNGb3JtIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIG1vZHVsZU5hbWU6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBlZGl0OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHN1Ym1pc3Npb25JZDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGFjY2VwdGVkTGFuZ3VhZ2U6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBza2lwTWFyZ2luOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNraXBWYWxpZGF0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIG5hdmlnYXRlVG86IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBjb3VudHJ5OiBzdHJpbmcgPSAnJztcbiAgQE91dHB1dCgpIHN1Ym1pdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGFwaUNhbGxlZDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgY3VycmVudFBhZ2VJbmRleENoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBASW5wdXQoKSBzaG93Q2FuY2VsQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG4gIEBPdXRwdXQoKSBjYW5jZWw6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBWaWV3Q2hpbGQoTmF2aWdhdGlvblRhYnNDb21wb25lbnQsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBjaGlsZCE6IE5hdmlnYXRpb25UYWJzQ29tcG9uZW50O1xuICBASW5wdXQoKSBpc0FjdGlvblRyaWdnZXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgbmFtZTogc3RyaW5nID0gJyc7XG4gIHNhdmVBdXRvbWF0aWNhbGx5OiBib29sZWFuID0gZmFsc2U7XG4gIHNhdmVJbnRlcnZhbDogbnVtYmVyID0gMDtcbiAgY3VzdG9taXplRm9udDogYm9vbGVhbiA9IGZhbHNlO1xuICBmb250RmFtaWx5OiBzdHJpbmcgPSAnJztcbiAgZm9udFNpemU6IG51bWJlciA9IDA7XG4gIHZhbGlkYXRpb25Ta2lwOiBib29sZWFuID0gZmFsc2U7XG4gIGVuYWJsZURhdGFFeHBvcnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZmlsZUZvcm1hdHM6IHN0cmluZ1tdID0gW107XG4gIGVuYWJsZVF1ZXN0aW9uTnVtYmVyaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHF1ZXN0aW9uTnVtYmVyaW5nOiBzdHJpbmcgPSAnJztcbiAgZW5hYmxlR29vZ2xlUmVjYXB0Y2hhOiBib29sZWFuID0gZmFsc2U7XG4gIGdvb2dsZVJlY2FwdGNoYUtleTogc3RyaW5nID0gJyc7XG4gIGdvb2dsZVJlY2FwdGNoYVNlY3JldDogc3RyaW5nID0gJyc7XG4gIG5hdmlnYXRpb246IHN0cmluZyA9ICcnO1xuICBtYXJrQWxsUXVlc3Rpb25zQXNSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwYWdlczogYW55ID0gW107XG4gIGN1cnJlbnRQYWdlSW5kZXg6IG51bWJlciA9IDA7XG4gIHByZXZpb3VzUGFnZTogYW55ID0ge307XG4gIGN1cnJlbnRQYWdlOiBhbnkgPSB7fTtcbiAgbmV4dFBhZ2U6IGFueSA9IHt9O1xuICBsYXN0VGFiOiBib29sZWFuID0gZmFsc2U7XG4gIHF1ZXN0aW9uQW5zd2VyczogUXVlc3Rpb25BbnN3ZXJzV3JhcHBlciA9IHtcbiAgICBwYXJlbnRJZDogJycsXG4gICAgYW5zd2VyczogW10sXG4gICAgZm9ybXM6IFtdLFxuICAgIGNvcHlTdWJGb3JtczogW10sXG4gICAgd2hlbkNsYXVzZUVsZW1lbnRzOiBbXVxuICB9O1xuICB3ZWJob29rOiBhbnk7XG4gIGZpbGVzOiB7IHF1ZXN0aW9uSWQ6IHN0cmluZzsgZmlsZTogYW55IDsgc2hvdz86Ym9vbGVhbn1bXSA9IFtdO1xuICBwYXJlbnRRdWVzdGlvbnM6IGFueTtcbiAgc3VibWlzc2lvbjogYW55ID0ge307XG4gIHBhcmVudFF1ZXN0aW9uQW5zd2VyczogYW55O1xuICBwYXJlbnRTdWJtaXNzaW9uSWQ6IHN0cmluZyA9ICcnO1xuICBzdWJtaXNzaW9uSW5Qcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlO1xuICBzdWJtaXNzaW9uSW5EcmFmdDogYm9vbGVhbiA9IGZhbHNlO1xuICByZWNhcHRjaGFUb2tlbjogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgaXNSZWZyZXNoaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgaW50ZXJ2YWxJZDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgbnVsbCA9IG51bGw7XG4gIHBhZ2VEZXRhaWxzOiBhbnkgPSBbXTtcbiAgcGFnZU51bWJlcjogbnVtYmVyID0gMTtcbiAgcm93U2V0OiBudW1iZXIgPSAwO1xuICByb3dTZXRDb3VudDogW251bWJlcl0gPSBbMF07XG4gIHJldHJ5Q291bnQ6IG51bWJlciA9IDA7XG4gIG1heFJldHJpZXM6IG51bWJlciA9IDU7XG5cbiAgZWxpZ2libGVGb3JTdWJtaXNzaW9uOiB7IHN0YXR1czogYm9vbGVhbjsgbWVzc2FnZTogc3RyaW5nIH0gPSB7XG4gICAgc3RhdHVzOiB0cnVlLFxuICAgIG1lc3NhZ2U6ICcnLFxuICB9O1xuICB3ZWJob29rUGF5bG9hZEFycmF5OiBhbnlbXSA9IFtdO1xuICBpblZhbGlkUXVlc3Rpb25zOiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgdmlzaXRlZFJvd3M6IE1hcDxudW1iZXIsIG51bWJlcj4gPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xuICBhbGxFbGVtZW50SWRzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIGRlYm91bmNlVGltZXI6IGFueTtcbiAgcHJpbWFyeUNvbG9yOiBzdHJpbmcgPSAnIzA4NGZmZic7XG4gIHNlY29uZGFyeUNvbG9yOiBzdHJpbmcgPSAnJztcbiAgaXNMb2FkaW5nUGFnZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29weVN1YmZvcm1zOiBDb3B5Rm9ybXNbXSA9IFtdO1xuICBlbWl0dGVyczogRW1pdHRlckRUT1tdID0gW107XG4gIG1heFBvc3NpYmxlU2NvcmUhOiBudW1iZXI7XG4gIG1heFBvc3NpYmxlR29vZFNjb3JlITogbnVtYmVyO1xuICBtYXhQb3NzaWJsZUJhZFNjb3JlITogbnVtYmVyO1xuICBzdW1PZkZpbmRpbmdzITogbnVtYmVyO1xuICBzdW1PZkdvb2RGaW5kaW5ncyE6IG51bWJlcjtcbiAgc3VtT2ZCYWRGaW5kaW5ncyE6IG51bWJlcjtcbiAgZHJhZnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc3VibWlzc2lvblByb2dyZXNzID0gMDtcbiAgc2hvd1N1Ym1pc3Npb25Mb2FkZXIgPSBmYWxzZTtcbiAgcHJvZ3Jlc3NJbnRlcnZhbDogYW55O1xuICBjdXJyZW50U3RlcCA9ICdTdWJtaXR0aW5nIGZvcm0nO1xuICBhbmltYXRlZERvdHMgPSAnJztcbiAgcHJpdmF0ZSBkb3RJbnRlcnZhbDogYW55O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZm9ybVNlcnZpY2U6IEZvcm1TZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWNhcHRjaGFTZXJ2aWNlOiBSZWNhcHRjaGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgdmFsaWRhdGlvblNlcnZpY2U6IFZhbGlkYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZWxlbWVudFRyYWNrZXI6IEVsZW1lbnRUcmFja2VyU2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1WYWxpZGF0aW9uU2VydmljZTogRm9ybVZhbGlkYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgYWdncmVnYXRlU2VydmljZTogQWdncmVnYXRpb25GdW5jdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzY29yZUNhbGNTZXJ2aWNlOiBTY29yZUNhbGN1bGF0aW9uU2VydmljZSxcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSB3aGVuQ2xhdXNlU2VydmljZTpXaGVuQ2xhdXNlU2VydmljZVxuICApIHtcbiAgICBjb25zdCBuYXZpZ2F0aW9uID0gdGhpcy5yb3V0ZXIuZ2V0Q3VycmVudE5hdmlnYXRpb24oKTtcbiAgICB0aGlzLnN1Ym1pc3Npb24gPSBuYXZpZ2F0aW9uPy5leHRyYXMuc3RhdGU/Llsnc3VibWlzc2lvbiddO1xuICAgIHRoaXMucGFyZW50U3VibWlzc2lvbklkID0gdGhpcy5zdWJtaXNzaW9uPy5pZDtcbiAgICB0aGlzLnBhcmVudFF1ZXN0aW9uQW5zd2VycyA9IHRoaXMuc3VibWlzc2lvbj8ucXVlc3Rpb25BbnN3ZXJzO1xuICAgIHRoaXMucGFyZW50UXVlc3Rpb25zID0gbmF2aWdhdGlvbj8uZXh0cmFzLnN0YXRlPy5bJ3BhcmVudFF1ZXN0aW9ucyddO1xuICAgIHRoaXMuZGF0YVNlcnZpY2Uuc2V0UGFyZW50UXVlc3Rpb25zKHRoaXMucGFyZW50UXVlc3Rpb25zKTtcbiAgfVxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnZpc2l0ZWRSb3dzLmNsZWFyKCk7XG4gICAgdGhpcy5yZWNhcHRjaGFTZXJ2aWNlLnJlbW92ZVJlY2FwdGNoYVNjcmlwdCgpO1xuICAgIGlmICh0aGlzLmludGVydmFsSWQpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbElkKTtcbiAgICAgIHRoaXMuaW50ZXJ2YWxJZCA9IG51bGw7XG4gICAgICB0aGlzLmlzUmVmcmVzaGluZyA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmFnZ3JlZ2F0ZVNlcnZpY2UuY2xlYXJBbGwoKTtcbiAgICB0aGlzLnJlY2FwdGNoYVNlcnZpY2UucmVtb3ZlUmVjYXB0Y2hhU2NyaXB0KCk7XG4gICAgdGhpcy53aGVuQ2xhdXNlU2VydmljZS5yZXNldFNlcnZpY2UoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snYWNjZXB0ZWRMYW5ndWFnZSddKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSAwO1xuICAgICAgdGhpcy5hY2NlcHRlZExhbmd1YWdlID0gY2hhbmdlc1snYWNjZXB0ZWRMYW5ndWFnZSddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGlmICghdGhpcy5lZGl0KSB0aGlzLmdldEZvcm1EYXRhKCk7XG4gICAgfVxuICAgIGlmKGNoYW5nZXNbJ3N1Ym1pc3Npb25JZCddKXtcbiAgICAgIHRoaXMuc3VibWlzc2lvbklkPWNoYW5nZXNbJ3N1Ym1pc3Npb25JZCddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGlmICh0aGlzLmVkaXQgJiYgdGhpcy5zdWJtaXNzaW9uSWQpIHtcbiAgICAgICAgdGhpcy5nZXRTdWJtaXR0ZWRGb3JtRGF0YSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmVkaXQgJiYgdGhpcy5zdWJtaXNzaW9uSWQpIHtcbiAgICAgIC8vIHRoaXMuZ2V0U3VibWl0dGVkRm9ybURhdGEoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhpcy5nZXRGb3JtRGF0YSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVuYWJsZUdvb2dsZVJlY2FwdGNoYSkge1xuICAgICAgdGhpcy5yZWNhcHRjaGFJbml0aWFsaXplZCgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlY2FwdGNoYUluaXRpYWxpemVkKCkge1xuICAgIGF3YWl0IHRoaXMucmVjYXB0Y2hhU2VydmljZS5pbml0aWFsaXplKCk7XG4gICAgdGhpcy5yZWNhcHRjaGFTZXJ2aWNlLnJlbmRlcignY2FwdGNoYS1jb250YWluZXInLCAodG9rZW4pID0+IHt9KTtcbiAgfVxuXG4gIGFzeW5jIGdldFRva2VuKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlY2FwdGNoYVNlcnZpY2UuaW5pdGlhbGl6ZSgpO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIENBUFRDSEEgd2FzIHJlbmRlcmVkXG4gICAgICAgIGlmICghdGhpcy5yZWNhcHRjaGFTZXJ2aWNlLmlzUmVuZGVyZWQoKSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybigncmVDQVBUQ0hBIG5vdCByZW5kZXJlZCB5ZXQuJyk7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgc29sdmVkLCByZXR1cm4gdGhlIHRva2VuXG4gICAgICAgIGlmICh0aGlzLnJlY2FwdGNoYVNlcnZpY2UuaXNSZXNvbHZlZCgpKSB7XG4gICAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLnJlY2FwdGNoYVNlcnZpY2UuZ2V0UmVzcG9uc2UoKTtcblxuICAgICAgICAgIHJldHVybiByZXNvbHZlKHRva2VuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGV4cGlyZWQgb3IgdW5zb2x2ZWQsIHJldHVybiBlbXB0eSBzdHJpbmdcbiAgICAgICAgY29uc29sZS53YXJuKCdyZUNBUFRDSEEgbm90IHJlc29sdmVkIG9yIGV4cGlyZWQuJyk7XG4gICAgICAgIHJldHVybiByZXNvbHZlKCcnKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdyZUNBUFRDSEEgaW5pdGlhbGl6YXRpb24gZmFpbGVkOicsIGVycik7XG4gICAgICAgIHJldHVybiByZXNvbHZlKCcnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGxvYWRGb250KGZvbnROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBmb250UGF0aCA9IGBhc3NldHMvZm9udHMvJHtmb250TmFtZX0ud29mZjJgOyAvLyBBZGp1c3QgZXh0ZW5zaW9uIGFzIHBlciB5b3VyIGZvbnQgZmlsZVxuICAgIGNvbnN0IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICBzdHlsZS5pbm5lckhUTUwgPSBgXG4gICAgICBAZm9udC1mYWNlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6ICcke2ZvbnROYW1lfSc7XG4gICAgICAgIHNyYzogdXJsKCcke2ZvbnRQYXRofScpIGZvcm1hdCgnd29mZjInKTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgICAgfVxuICAgICAgYm9keSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnJHtmb250TmFtZX0nLCBzYW5zLXNlcmlmO1xuICAgICAgfVxuICAgIGA7XG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gIH1cblxuICBnZXRGb3JtRGF0YSgpIHtcbiAgICB0aGlzLmlzTG9hZGluZ1BhZ2VzID0gdHJ1ZTtcbiAgICB0aGlzLmZvcm1TZXJ2aWNlXG4gICAgICAuZ2V0UXVlc3Rpb25zKHRoaXMubW9kdWxlTmFtZSwgMSwgMCwgdHJ1ZSx0aGlzLmNvdW50cnkpXG4gICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nUGFnZXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lbmFibGVHb29nbGVSZWNhcHRjaGEgPVxuICAgICAgICAgIHJlc3BvbnNlLnJlc3VsdC5tb2R1bGVDb25maWd1cmF0aW9uPy5lbmFibGVHb29nbGVSZWNhcHRjaGE7XG4gICAgICAgIHRoaXMucXVlc3Rpb24gPSBtYXBwZXIubWFwUHVibGljRm9ybVRvTW9kZWwocmVzcG9uc2UpO1xuICAgICAgICB0aGlzLmVtaXR0ZXJzID0gdGhpcy5xdWVzdGlvbi5lbWl0dGVycyB8fCBbXTtcbiAgICAgICAgdGhpcy5hc3NpZ25RdWVzdGlvblByb3BlcnRpZXModGhpcy5xdWVzdGlvbik7XG4gICAgICAgIHRoaXMuc2V0VXBGb250RmFtaWx5KHJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5wcmltYXJ5Q29sb3IgPSByZXNwb25zZS5yZXN1bHQucHJpbWFyeUNvbG9yIHx8ICcjMDg0ZmZmJztcbiAgICAgICAgdGhpcy5zZWNvbmRhcnlDb2xvciA9IHJlc3BvbnNlLnJlc3VsdC5zZWNvbmRhcnlDb2xvcjtcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlR29vZ2xlUmVjYXB0Y2hhKSB0aGlzLnJlY2FwdGNoYUluaXRpYWxpemVkKCk7XG4gICAgICAgIGlmIChyZXNwb25zZT8ucmVzdWx0Py5wYWdlRGV0YWlscykge1xuICAgICAgICAgIHRoaXMucGFnZURldGFpbHMgPSByZXNwb25zZS5yZXN1bHQucGFnZURldGFpbHM7XG4gICAgICAgICAgdGhpcy5uZXh0UGFnZSA9IHRoaXMucGFnZURldGFpbHNbMV07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53ZWJob29rID0gcmVzcG9uc2U/LnJlc3VsdD8ud2ViaG9va3M7XG4gICAgICAgIHRoaXMud2ViaG9va1BheWxvYWRBcnJheSA9IHJlc3BvbnNlPy5yZXN1bHQ/LndlYmhvb2tzPy5tYXAoXG4gICAgICAgICAgKHc6IGFueSkgPT4gKHtcbiAgICAgICAgICAgIGlkOiB3LmlkLFxuICAgICAgICAgICAgLi4udGhpcy5leHRyYWN0R3JvdXBlZFdlYmhvb2tEYXRhKFt3XSksXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnJvd1NldENvdW50WzBdID0gcmVzcG9uc2UucmVzdWx0LnRvdGFsTnVtYmVyUm93O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGFnZURldGFpbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoIXRoaXMucGFnZXNbaV0pIHtcbiAgICAgICAgICAgIHRoaXMucGFnZXNbaV0gPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpO1xuICAgICAgfSk7XG4gIH1cblxuICBnZXRTdWJtaXR0ZWRGb3JtRGF0YSgpIHtcbiAgICB0aGlzLmZvcm1TZXJ2aWNlXG4gICAgICAuZ2V0U3VibWl0dGVkRm9ybShcbiAgICAgICAgdGhpcy5tb2R1bGVOYW1lLFxuICAgICAgICB0aGlzLnN1Ym1pc3Npb25JZCxcbiAgICAgICAgMSxcbiAgICAgICAgMCxcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLmVuYWJsZUdvb2dsZVJlY2FwdGNoYSA9XG4gICAgICAgICAgcmVzcG9uc2UucmVzdWx0Lm1vZHVsZUNvbmZpZ3VyYXRpb24uZW5hYmxlR29vZ2xlUmVjYXB0Y2hhO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uID0gbWFwcGVyLm1hcFB1YmxpY0Zvcm1Ub01vZGVsKHJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5hc3NpZ25RdWVzdGlvblByb3BlcnRpZXModGhpcy5xdWVzdGlvbik7XG4gICAgICAgIHRoaXMucHJpbWFyeUNvbG9yID0gcmVzcG9uc2UucmVzdWx0LnByaW1hcnlDb2xvciB8fCAnIzA4NGZmZic7XG4gICAgICAgIHRoaXMuc2Vjb25kYXJ5Q29sb3IgPSByZXNwb25zZS5yZXN1bHQuc2Vjb25kYXJ5Q29sb3I7XG4gICAgICAgIHRoaXMuZW1pdHRlcnMgPSB0aGlzLnF1ZXN0aW9uLmVtaXR0ZXJzIHx8IFtdO1xuICAgICAgICBpZiAocmVzcG9uc2U/LnJlc3VsdD8ucGFnZURldGFpbHMpIHtcbiAgICAgICAgICB0aGlzLnBhZ2VEZXRhaWxzID0gcmVzcG9uc2UucmVzdWx0LnBhZ2VEZXRhaWxzO1xuICAgICAgICAgIHRoaXMubmV4dFBhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzWzFdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud2ViaG9va1BheWxvYWRBcnJheTtcbiAgICAgICAgdGhpcy53ZWJob29rUGF5bG9hZEFycmF5ID0gcmVzcG9uc2U/LnJlc3VsdD8ud2ViaG9va3M/Lm1hcChcbiAgICAgICAgICAodzogYW55KSA9PiAoe1xuICAgICAgICAgICAgaWQ6IHcuaWQsXG4gICAgICAgICAgICAuLi50aGlzLmV4dHJhY3RHcm91cGVkV2ViaG9va0RhdGEoW3ddKSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnJvd1NldENvdW50WzBdID0gcmVzcG9uc2UucmVzdWx0LnRvdGFsTnVtYmVyUm93O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGFnZURldGFpbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoIXRoaXMucGFnZXNbaV0pIHtcbiAgICAgICAgICAgIHRoaXMucGFnZXNbaV0gPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRVcEZvbnRGYW1pbHkocmVzcG9uc2UpO1xuICAgICAgICBpZiAodGhpcy5uYXZpZ2F0ZVRvKSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRlVG9Gb3JtRWxlbWVudCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZUdvb2dsZVJlY2FwdGNoYSkge1xuICAgICAgICAgIHRoaXMucmVjYXB0Y2hhSW5pdGlhbGl6ZWQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrU3VibWlzc2lvbkVsaWdpYmlsaXR5KCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHNldFVwRm9udEZhbWlseShyZXNwb25zZTogYW55KSB7XG4gICAgLy9zZXQgZm9udCBmYW1pbHkgYW5kIGZvbnQgc2l6ZVxuICAgIGlmIChyZXNwb25zZS5yZXN1bHQ/Lm1vZHVsZUNvbmZpZ3VyYXRpb24/LmN1c3RvbWl6ZUZvbnQpIHtcbiAgICAgIHRoaXMuZm9udEZhbWlseSA9IHJlc3BvbnNlLnJlc3VsdC5tb2R1bGVDb25maWd1cmF0aW9uPy5mb250RmFtaWx5O1xuICAgICAgdGhpcy5mb250U2l6ZSA9IHJlc3BvbnNlLnJlc3VsdC5tb2R1bGVDb25maWd1cmF0aW9uPy5mb250U2l6ZSB8fCAxODtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb250RmFtaWx5ID0gJ1BvcHBpbnMnO1xuICAgICAgdGhpcy5mb250U2l6ZSA9IDE4O1xuICAgIH1cbiAgICB0aGlzLmxvYWRGb250KHRoaXMuZm9udEZhbWlseSk7XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgJy0tbGlicmFyeS1mb250LWZhbWlseScsXG4gICAgICB0aGlzLmZvbnRGYW1pbHlcbiAgICApO1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICctLWxpYnJhcnktZm9udC1zaXplJyxcbiAgICAgIHRoaXMuZm9udFNpemUgKyAncHgnXG4gICAgKTtcbiAgfVxuXG4gIG5hdmlnYXRlVG9Gb3JtRWxlbWVudCgpIHtcbiAgICBpZiAoIXRoaXMucGFnZXMpIHJldHVybjtcblxuICAgIGxldCBmb3VuZFBhZ2VJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvLyBTdGVwIDE6IGZpbmQgdGhlIHBhZ2UgaW5kZXhcbiAgICB0aGlzLnBhZ2VzLmZvckVhY2goKHBhZ2U6IGFueSwgcGFnZUluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGlmICghcGFnZT8ucm93cykgcmV0dXJuO1xuXG4gICAgICBwYWdlLnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgaWYgKCFyb3c/LmdyaWQpIHJldHVybjtcblxuICAgICAgICByb3cuZ3JpZC5mb3JFYWNoKChncmlkSXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IGdyaWRJdGVtPy5lbGVtZW50O1xuICAgICAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuO1xuXG4gICAgICAgICAgLy8gQ2FzZSAxOiBEaXJlY3QgcXVlc3Rpb24gbWF0Y2hcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBncmlkSXRlbS5lbnRpdHlUeXBlID09PSAnUVVFU1RJT04nICYmXG4gICAgICAgICAgICBlbGVtZW50LmlkID09PSB0aGlzLm5hdmlnYXRlVG9cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGZvdW5kUGFnZUluZGV4ID0gcGFnZUluZGV4O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENhc2UgMjogU3ViZm9ybSBtYXRjaFxuICAgICAgICAgIGlmIChncmlkSXRlbS5lbnRpdHlUeXBlID09PSAnU1VCRk9STScpIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmlkID09PSB0aGlzLm5hdmlnYXRlVG8pIHtcbiAgICAgICAgICAgICAgZm91bmRQYWdlSW5kZXggPSBwYWdlSW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGVsZW1lbnQuc3VibWlzc2lvbnM/LnNvbWUoXG4gICAgICAgICAgICAgICAgKHM6IGFueSkgPT4gcy5zdWJtaXNzaW9uSWQgPT09IHRoaXMubmF2aWdhdGVUb1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZm91bmRQYWdlSW5kZXggPSBwYWdlSW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaWYgKGZvdW5kUGFnZUluZGV4ICE9PSBudWxsKSB7XG4gICAgICAvLyBTdGVwIDI6IFNldCBjdXJyZW50IHBhZ2VcbiAgICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleCA9IGZvdW5kUGFnZUluZGV4O1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZXNbdGhpcy5jdXJyZW50UGFnZUluZGV4XTtcblxuICAgICAgaWYgKHRoaXMubmF2aWdhdGlvbiA9PSAnVEFCJykge1xuICAgICAgICB0aGlzLmNoaWxkLnRyaWdnZXJGdW5jdGlvbih0aGlzLmN1cnJlbnRQYWdlSW5kZXgpO1xuICAgICAgfSBlbHNlIHtcblxuICAgICAgICB0aGlzLnByZXZpb3VzUGFnZSA9IHRoaXMucGFnZURldGFpbHNbdGhpcy5jdXJyZW50UGFnZUluZGV4IC0gMV07XG4gICAgICAgIHRoaXMubmV4dFBhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzW3RoaXMuY3VycmVudFBhZ2VJbmRleCArIDFdO1xuICAgICAgfVxuICAgICAgLy8gU3RlcCAzOiBXYWl0IGZvciBET00gcmVuZGVyIGFuZCBzY3JvbGxcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50SWQgPSBgcXVlc3Rpb24tJHt0aGlzLm5hdmlnYXRlVG99YDtcbiAgICAgICAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpO1xuICAgICAgICBpZiAoZWwpIHtcbiAgICAgICAgICBlbC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInIH0pO1xuICAgICAgICAgIHRoaXMuY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTtcbiAgICAgICAgfVxuICAgICAgfSwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihgbmF2aWdhdGVUbyBpZCAke3RoaXMubmF2aWdhdGVUb30gbm90IGZvdW5kIGluIGFueSBwYWdlYCk7XG4gICAgfVxuICB9XG5cbiAgYXNzaWduUXVlc3Rpb25Qcm9wZXJ0aWVzKHF1ZXN0aW9uOiBQdWJsaWNGb3JtKSB7XG4gICAgdGhpcy5uYW1lID0gcXVlc3Rpb24ubmFtZTtcbiAgICB0aGlzLnBhZ2VzID0gcXVlc3Rpb24ucGFnZXM7XG4gICAgaWYgKHRoaXMucGFyZW50UXVlc3Rpb25zKSB7XG4gICAgICB0aGlzLnBhcmVudFF1ZXN0aW9uQW5zd2VycyA9IHF1ZXN0aW9uPy5xdWVzdGlvbkFuc3dlcnM7XG4gICAgICB0aGlzLnBhcmVudFN1Ym1pc3Npb25JZCA9IHF1ZXN0aW9uPy5wYXJlbnRJZDtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZXNbMF07XG4gICAgdGhpcy5uZXh0UGFnZSA9IHRoaXMucGFnZXNbMV07XG4gICAgdGhpcy5zYXZlQXV0b21hdGljYWxseSA9IHF1ZXN0aW9uLmZvcm1Db25maWd1cmF0aW9uLnNhdmVBdXRvbWF0aWNhbGx5O1xuICAgIHRoaXMuc2F2ZUludGVydmFsID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uc2F2ZUludGVydmFsO1xuICAgIHRoaXMuY3VzdG9taXplRm9udCA9IHF1ZXN0aW9uLmZvcm1Db25maWd1cmF0aW9uLmN1c3RvbWl6ZUZvbnQ7XG4gICAgdGhpcy5mb250RmFtaWx5ID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZm9udEZhbWlseTtcbiAgICB0aGlzLmZvbnRTaXplID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZm9udFNpemU7XG4gICAgdGhpcy5lbmFibGVEYXRhRXhwb3J0ID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZW5hYmxlRGF0YUV4cG9ydDtcbiAgICB0aGlzLmZpbGVGb3JtYXRzID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZmlsZUZvcm1hdHM7XG4gICAgdGhpcy5lbmFibGVRdWVzdGlvbk51bWJlcmluZyA9XG4gICAgICBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5lbmFibGVRdWVzdGlvbk51bWJlcmluZztcbiAgICB0aGlzLnF1ZXN0aW9uTnVtYmVyaW5nID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24ucXVlc3Rpb25OdW1iZXJpbmc7XG4gICAgdGhpcy5lbmFibGVHb29nbGVSZWNhcHRjaGEgPVxuICAgICAgcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZW5hYmxlR29vZ2xlUmVjYXB0Y2hhO1xuICAgIHRoaXMuZ29vZ2xlUmVjYXB0Y2hhS2V5ID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZ29vZ2xlUmVjYXB0Y2hhS2V5O1xuICAgIHRoaXMuZ29vZ2xlUmVjYXB0Y2hhU2VjcmV0ID1cbiAgICAgIHF1ZXN0aW9uLmZvcm1Db25maWd1cmF0aW9uLmdvb2dsZVJlY2FwdGNoYVNlY3JldDtcbiAgICB0aGlzLm5hdmlnYXRpb24gPSBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5uYXZpZ2F0aW9uO1xuICAgIHRoaXMubWFya0FsbFF1ZXN0aW9uc0FzUmVxdWlyZWQgPVxuICAgICAgcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24ubWFya0FsbFF1ZXN0aW9uc0FzUmVxdWlyZWQ7XG4gICAgdGhpcy5hcGlDYWxsZWQuZW1pdCh0cnVlKTtcbiAgfVxuXG4gIG5hdmlnYXRlVG9OZXh0UGFnZSgpIHtcbiAgICBpZiAoIXRoaXMuaXNMb2FkaW5nKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICBjb25zdCBuZXh0SW5kZXggPSB0aGlzLmN1cnJlbnRQYWdlSW5kZXggKyAxO1xuICAgICAgaWYgKG5leHRJbmRleCA8IHRoaXMucGFnZURldGFpbHMubGVuZ3RoKSB7XG4gICAgICAgIGlmICh0aGlzLm1hcmtBbGxRdWVzdGlvbnNBc1JlcXVpcmVkKSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudFBhZ2VEYXRhID0gdGhpcy5wYWdlc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgICAgIGxldCB2YWxpZGF0aW9uUmVzcG9uc2UgPSB0cnVlO1xuICAgICAgICAgIGlmICghdGhpcy52YWxpZGF0aW9uU2tpcCkge1xuICAgICAgICAgICAgdmFsaWRhdGlvblJlc3BvbnNlID1cbiAgICAgICAgICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvblNlcnZpY2UudmFsaWRhdGVSZXF1aXJlZFF1ZXN0aW9ucyhcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFnZURhdGFcbiAgICAgICAgICAgICAgKS5pc1ZhbGlkO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodmFsaWRhdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzUGFnZSA9IHRoaXMucGFnZURldGFpbHNbdGhpcy5jdXJyZW50UGFnZUluZGV4XTtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhZ2VzW25leHRJbmRleF0ubGVuZ3RoICE9IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZXNbbmV4dEluZGV4XTtcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4ID0gbmV4dEluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRDdXJyZW50UGFnZShuZXh0SW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5uZXh0UGFnZSA9IHRoaXMucGFnZURldGFpbHNbbmV4dEluZGV4ICsgMV07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucHJldmlvdXNQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgICAgIGlmICh0aGlzLnBhZ2VzW25leHRJbmRleF0ubGVuZ3RoICE9IDApIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW25leHRJbmRleF07XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSBuZXh0SW5kZXg7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q3VycmVudFBhZ2UobmV4dEluZGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5uZXh0UGFnZSA9IHRoaXMucGFnZURldGFpbHNbbmV4dEluZGV4ICsgMV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmNoZWNrU3VibWlzc2lvbkVsaWdpYmlsaXR5KCk7XG4gICAgfVxuICB9XG5cbiAgbmF2aWdhdGVUb1ByZXZpb3VzUGFnZSgpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZUluZGV4ID4gMCkge1xuICAgICAgaWYgKHRoaXMubWFya0FsbFF1ZXN0aW9uc0FzUmVxdWlyZWQpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFBhZ2VEYXRhID0gdGhpcy5wYWdlc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgICBsZXQgdmFsaWRhdGlvblJlc3BvbnNlID0gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLnZhbGlkYXRpb25Ta2lwKSB7XG4gICAgICAgICAgdmFsaWRhdGlvblJlc3BvbnNlID1cbiAgICAgICAgICAgIHRoaXMuZm9ybVZhbGlkYXRpb25TZXJ2aWNlLnZhbGlkYXRlUmVxdWlyZWRRdWVzdGlvbnMoXG4gICAgICAgICAgICAgIGN1cnJlbnRQYWdlRGF0YVxuICAgICAgICAgICAgKS5pc1ZhbGlkO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWxpZGF0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICB0aGlzLm5leHRQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleC0tO1xuICAgICAgICAgIGlmICh0aGlzLnBhZ2VzW3RoaXMuY3VycmVudFBhZ2VJbmRleF0ubGVuZ3RoICE9IDApIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q3VycmVudFBhZ2UodGhpcy5jdXJyZW50UGFnZUluZGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5wcmV2aW91c1BhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzW3RoaXMuY3VycmVudFBhZ2VJbmRleCAtIDFdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm5leHRQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXgtLTtcbiAgICAgICAgaWYgKHRoaXMucGFnZXNbdGhpcy5jdXJyZW50UGFnZUluZGV4XS5sZW5ndGggIT0gMCkge1xuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXRDdXJyZW50UGFnZSh0aGlzLmN1cnJlbnRQYWdlSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJldmlvdXNQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXggLSAxXTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpO1xuICB9XG5cbiAgY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTogdm9pZCB7XG4gICAgdGhpcy5lbGlnaWJsZUZvclN1Ym1pc3Npb24gPSB0aGlzLnZhbGlkYXRlQWxsRWxlbWVudExvYWRlZCgpO1xuICB9XG5cbiAgc2V0Q3VycmVudFBhZ2UoaW5kZXg6IG51bWJlcikge1xuICAgIGlmIChpbmRleCA8IHRoaXMucGFnZXMubGVuZ3RoKSB7XG4gICAgICAvLyBJZiBwYWdlIGFscmVhZHkgZXhpc3RzIEFORCBoYXMgY29udGVudCDihpIgbm8gbmVlZCB0byBmZXRjaCBhZ2FpblxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnBhZ2VzW2luZGV4XSAmJlxuICAgICAgICB0aGlzLnBhZ2VzW2luZGV4XS5yb3dzICYmXG4gICAgICAgIHRoaXMucGFnZXNbaW5kZXhdLnJvd3MubGVuZ3RoID4gMFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnBhZ2VOdW1iZXIgPSBpbmRleCArIDE7XG4gICAgaWYgKHRoaXMuZWRpdCkge1xuICAgICAgdGhpcy5mb3JtU2VydmljZVxuICAgICAgICAuZ2V0U3VibWl0dGVkRm9ybShcbiAgICAgICAgICB0aGlzLm1vZHVsZU5hbWUsXG4gICAgICAgICAgdGhpcy5zdWJtaXNzaW9uSWQsXG4gICAgICAgICAgdGhpcy5wYWdlTnVtYmVyLFxuICAgICAgICAgIHRoaXMucm93U2V0XG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4geyAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBtYXBwZWRSZXNwb25zZSA9IG1hcHBlci5tYXBQYWdlVG9Nb2RlbChyZXNwb25zZS5yZXN1bHQucGFnZXNbMF0scmVzcG9uc2UucmVzdWx0Py5jdXJyZW5jeSxyZXNwb25zZS5yZXN1bHQ/LmRlZmF1bHRDdXJyZW5jeSk7XG4gICAgICAgICAgaWYgKG1hcHBlZFJlc3BvbnNlKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VzW2luZGV4XSA9IG1hcHBlZFJlc3BvbnNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSBpbmRleDtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlc1tpbmRleF07XG4gICAgICAgICAgdGhpcy5yb3dTZXRDb3VudFtpbmRleF0gPSByZXNwb25zZS5yZXN1bHQudG90YWxOdW1iZXJSb3c7XG4gICAgICAgICAgdGhpcy5jaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb3JtU2VydmljZVxuICAgICAgICAuZ2V0UXVlc3Rpb25zKHRoaXMubW9kdWxlTmFtZSwgdGhpcy5wYWdlTnVtYmVyLCB0aGlzLnJvd1NldCwgdHJ1ZSx0aGlzLmNvdW50cnkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBtYXBwZWRSZXNwb25zZSA9IG1hcHBlci5tYXBQYWdlVG9Nb2RlbChyZXNwb25zZS5yZXN1bHQucGFnZXNbMF0scmVzcG9uc2UucmVzdWx0Py5jdXJyZW5jeSxyZXNwb25zZS5yZXN1bHQ/LmRlZmF1bHRDdXJyZW5jeSk7XG4gICAgICAgICAgaWYgKG1hcHBlZFJlc3BvbnNlKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VzW2luZGV4XSA9IG1hcHBlZFJlc3BvbnNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSBpbmRleDtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlc1tpbmRleF07XG4gICAgICAgICAgdGhpcy5yb3dTZXRDb3VudFtpbmRleF0gPSByZXNwb25zZS5yZXN1bHQudG90YWxOdW1iZXJSb3c7XG4gICAgICAgICAgdGhpcy5jaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tYXJrQWxsUXVlc3Rpb25zQXNSZXF1aXJlZCkge1xuICAgICAgY29uc3QgY3VycmVudFBhZ2VEYXRhID0gdGhpcy5wYWdlc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgbGV0IHZhbGlkYXRpb25SZXNwb25zZSA9IHRydWU7XG4gICAgICBpZiAoIXRoaXMudmFsaWRhdGlvblNraXApIHtcbiAgICAgICAgdmFsaWRhdGlvblJlc3BvbnNlID1cbiAgICAgICAgICB0aGlzLmZvcm1WYWxpZGF0aW9uU2VydmljZS52YWxpZGF0ZVJlcXVpcmVkUXVlc3Rpb25zKFxuICAgICAgICAgICAgY3VycmVudFBhZ2VEYXRhXG4gICAgICAgICAgKS5pc1ZhbGlkO1xuICAgICAgfVxuICAgICAgaWYgKHZhbGlkYXRpb25SZXNwb25zZSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSBpbmRleDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNoZWNrU3VibWlzc2lvbkVsaWdpYmlsaXR5KCk7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSBpbmRleDtcbiAgICB9XG4gIH1cblxuICBsb2FkTW9yZURhdGEoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0xvYWRpbmcpIHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgIGxldCByb3dDb3VudExpbWl0ID0gdGhpcy5yb3dTZXRDb3VudFtpbmRleF07XG4gICAgICBsZXQgaSA9IDA7XG4gICAgICB0aGlzLnBhZ2VzW2luZGV4XS5yb3dzLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgIHJvdy5ncmlkLmZvckVhY2goKGdyaWRJdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICBpKys7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBsZXQgcm93Q291bnQgPSBpIC8gMjA7XG4gICAgICByb3dDb3VudCA9IE1hdGguY2VpbChyb3dDb3VudCk7XG5cbiAgICAgIGlmICh0aGlzLnZpc2l0ZWRSb3dzLmhhcyhpbmRleCkpIHtcbiAgICAgICAgaWYgKHRoaXMudmlzaXRlZFJvd3MuZ2V0KGluZGV4KSA9PT0gcm93Q291bnQpIHtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocm93Q291bnQgKyAxID4gcm93Q291bnRMaW1pdCAmJiAhdGhpcy5uYXZpZ2F0ZVRvKSB7XG4gICAgICAgIHRoaXMuY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy52aXNpdGVkUm93cy5zZXQoaW5kZXgsIHJvd0NvdW50KTtcblxuICAgICAgaWYgKHRoaXMuZWRpdCkge1xuICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlXG4gICAgICAgICAgLmdldFN1Ym1pdHRlZEZvcm0oXG4gICAgICAgICAgICB0aGlzLm1vZHVsZU5hbWUsXG4gICAgICAgICAgICB0aGlzLnN1Ym1pc3Npb25JZCxcbiAgICAgICAgICAgIGluZGV4ICsgMSxcbiAgICAgICAgICAgIHJvd0NvdW50XG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1Jvd3MgPSByZXNwb25zZT8ucmVzdWx0Py5wYWdlc1swXT8ucm93cyA/PyBbXTtcbiAgICAgICAgICAgIHRoaXMucGFnZXNbaW5kZXhdLnJvd3MgPSBbXG4gICAgICAgICAgICAgIC4uLih0aGlzLnBhZ2VzW2luZGV4XT8ucm93cyA/PyBbXSksXG4gICAgICAgICAgICAgIC4uLm5ld1Jvd3MsXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlc1tpbmRleF07XG4gICAgICAgICAgICB0aGlzLnJvd1NldENvdW50W2luZGV4XSA9IHJlc3BvbnNlLnJlc3VsdC50b3RhbE51bWJlclJvdztcbiAgICAgICAgICAgIHRoaXMuY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlXG4gICAgICAgICAgLmdldFF1ZXN0aW9ucyh0aGlzLm1vZHVsZU5hbWUsIGluZGV4ICsgMSwgcm93Q291bnQpXG4gICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3Um93cyA9IHJlc3BvbnNlPy5yZXN1bHQ/LnBhZ2VzWzBdPy5yb3dzID8/IFtdO1xuICAgICAgICAgICAgdGhpcy5wYWdlc1tpbmRleF0ucm93cyA9IFtcbiAgICAgICAgICAgICAgLi4uKHRoaXMucGFnZXNbaW5kZXhdPy5yb3dzID8/IFtdKSxcbiAgICAgICAgICAgICAgLi4ubmV3Um93cyxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW2luZGV4XTtcbiAgICAgICAgICAgIHRoaXMucm93U2V0Q291bnRbaW5kZXhdID0gcmVzcG9uc2UucmVzdWx0LnRvdGFsTnVtYmVyUm93O1xuICAgICAgICAgICAgdGhpcy5jaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpO1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpO1xuICAgIH1cbiAgfVxuXG4gIGdlbmVyYXRlUXVlc3Rpb25BbnN3ZXJzKCkge1xuICAgIHRoaXMubWF4UG9zc2libGVTY29yZSA9IDE7XG4gICAgdGhpcy5zdW1PZkZpbmRpbmdzID0gMDtcbiAgICB0aGlzLnN1bU9mQmFkRmluZGluZ3MgPSAwO1xuICAgIHRoaXMuc3VtT2ZHb29kRmluZGluZ3MgPSAwO1xuICAgIHRoaXMubWF4UG9zc2libGVCYWRTY29yZSA9IDA7XG4gICAgdGhpcy5tYXhQb3NzaWJsZUdvb2RTY29yZSA9IDA7XG4gICAgdGhpcy5jb3B5U3ViZm9ybXMgPSBbXTtcblxuICAgIC8vIHRoaXMubWF4UG9zc2libGVHb29kU2NvcmUgPSAwO1xuICAgIC8vIHRoaXMubWF4UG9zc2libGVCYWRTY29yZSA9IDA7XG4gICAgY29uc3QgZXh0cmFjdFF1ZXN0aW9ucyA9IChcbiAgICAgIGZvcm1FbGVtZW50czogYW55W10sXG4gICAgICBwYXJlbnRGb3JtSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsLFxuICAgICAgaXNJblN1YkZvcm06IGJvb2xlYW4gPSBmYWxzZSxcbiAgICAgIHN1YkZvcm1JbmRleDogbnVtYmVyID0gMFxuICAgICk6IHsgYW5zd2VyczogQW5zd2VyW107IGZvcm1zOiBGb3JtW10gfSA9PiB7XG4gICAgICBjb25zdCBxdWVzdGlvbnM6IEFuc3dlcltdID0gW107XG4gICAgICBjb25zdCBmb3JtczogRm9ybVtdID0gW107XG4gICAgICBmb3JtRWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnUVVFU1RJT04nICYmIGVsZW1lbnQuc2hvdykge1xuICAgICAgICAgIGxldCBiYXNlUXVlc3Rpb246IGFueTtcbiAgICAgICAgICBpZiAoZWxlbWVudC5lbGVtZW50LmZvcm1FbGVtZW50LmVsZW1lbnRUeXBlID09PSAnRklMRV9QSUNLRVInKSB7XG4gICAgICAgICAgICBiYXNlUXVlc3Rpb24gPSB7XG4gICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGVsZW1lbnQuZWxlbWVudC5pZCxcbiAgICAgICAgICAgICAgYW5zd2VyOiAnJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbGVtZW50LmVsZW1lbnQuYW5zd2VyKSkge1xuICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbklkID0gaXNJblN1YkZvcm1cbiAgICAgICAgICAgICAgICA/IGAke3BhcmVudEZvcm1JZH1fJHtzdWJGb3JtSW5kZXh9XyR7ZWxlbWVudC5lbGVtZW50LmlkfWBcbiAgICAgICAgICAgICAgICA6IGVsZW1lbnQuZWxlbWVudC5pZDtcbiAgICAgICAgICAgICAgdGhpcy5maWxlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBxdWVzdGlvbklkLFxuICAgICAgICAgICAgICAgIGZpbGU6IGVsZW1lbnQuZWxlbWVudC5hbnN3ZXIsXG4gICAgICAgICAgICAgICAgc2hvdzogZWxlbWVudC5zaG93XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBiYXNlUXVlc3Rpb24gPSB7XG4gICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGVsZW1lbnQuZWxlbWVudC5pZCxcbiAgICAgICAgICAgICAgYW5zd2VyOiBlbGVtZW50LmVsZW1lbnQuYW5zd2VyLFxuICAgICAgICAgICAgICBzY29yZTogZWxlbWVudC5lbGVtZW50LnNjb3JlLFxuICAgICAgICAgICAgICBtYXhpbXVtUG9zc2libGVTY29yZTogZWxlbWVudC5lbGVtZW50Lm1heFBvc3NpYmxlU2NvcmUsXG4gICAgICAgICAgICAgIGN1cnJlbmN5U3ltYm9sOiBlbGVtZW50LmVsZW1lbnQ/LmN1cnJlbmN5U3ltYm9sLFxuICAgICAgICAgICAgICBhbW91bnRJbldvcmRzOiBlbGVtZW50LmVsZW1lbnQ/LmFtb3VudEluV29yZHMsXG4gICAgICAgICAgICAgIHNob3c6IGVsZW1lbnQuc2hvd1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuZWRpdCkge1xuICAgICAgICAgICAgcXVlc3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgICAuLi5iYXNlUXVlc3Rpb24sXG4gICAgICAgICAgICAgIGFuc3dlcklkOiBlbGVtZW50LmVsZW1lbnQuYW5zd2VySWQgfHwgJycsXG4gICAgICAgICAgICAgIGRlbGV0ZUZpbGVzOiBlbGVtZW50LmVsZW1lbnQuZGVsZXRlRmlsZXMgfHwgW10sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcXVlc3Rpb25zLnB1c2goYmFzZVF1ZXN0aW9uKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoZWxlbWVudC5lbGVtZW50LmZvcm1FbGVtZW50LmVsZW1lbnRUeXBlID09PSAnRFJPUF9ET1dOJyB8fFxuICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuZm9ybUVsZW1lbnQuZWxlbWVudFR5cGUgPT09ICdSQURJT19CVVRUT04nIHx8XG4gICAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5mb3JtRWxlbWVudC5lbGVtZW50VHlwZSA9PT0gJ0NIRUNLX0JPWCcpICYmXG4gICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuZm9ybUVsZW1lbnQuc2NvcmluZyAmJlxuICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LmZvcm1FbGVtZW50LnNjb3JpbmcuZW5hYmxlU2NvcmluZyAmJlxuICAgICAgICAgICAgIWlzSW5TdWJGb3JtXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLm1heFBvc3NpYmxlU2NvcmUgKj1cbiAgICAgICAgICAgICAgdGhpcy5zY29yZUNhbGNTZXJ2aWNlLmdldE1heFBvc3NpYmxlU2NvcmVGb3JRdWVzdGlvbihcbiAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LnNjb3JlICYmXG4gICAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5zY29yZSAhPSBudWxsICYmXG4gICAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5zY29yZSAhPSB1bmRlZmluZWRcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnN1bU9mRmluZGluZ3MgKz0gZWxlbWVudC5lbGVtZW50LnNjb3JlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChlbGVtZW50LmVsZW1lbnQuY2hpbGRMb2dpY3MpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGxvZ2ljIG9mIGVsZW1lbnQuZWxlbWVudC5jaGlsZExvZ2ljcykge1xuICAgICAgICAgICAgICBpZiAobG9naWMuc2hvd0xvZ2ljKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgcm93IG9mIGxvZ2ljLnJvd3MpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGV4dHJhY3RRdWVzdGlvbnMoXG4gICAgICAgICAgICAgICAgICAgIHJvdy5ncmlkLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRGb3JtSWQsXG4gICAgICAgICAgICAgICAgICAgIGlzSW5TdWJGb3JtLFxuICAgICAgICAgICAgICAgICAgICBzdWJGb3JtSW5kZXhcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbnMucHVzaCguLi5yZXN1bHQuYW5zd2Vycyk7XG4gICAgICAgICAgICAgICAgICBmb3Jtcy5wdXNoKC4uLnJlc3VsdC5mb3Jtcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1NVQkZPUk0nICYmIGVsZW1lbnQuc2hvdykge1xuICAgICAgICAgIGNvbnN0IHN1YmZvcm1JZCA9IGVsZW1lbnQuZWxlbWVudC5pZDtcbiAgICAgICAgICBjb25zdCBzdWJtaXNzaW9uSWQgPSBlbGVtZW50LmVsZW1lbnQuc3VibWlzc2lvbklkO1xuICAgICAgICAgIGlmIChlbGVtZW50LmVsZW1lbnQuY29weVN1YmZvcm1NZXRhKSB7XG4gICAgICAgICAgICB0aGlzLmNvcHlTdWJmb3Jtcy5wdXNoKGVsZW1lbnQuZWxlbWVudC5jb3B5U3ViZm9ybU1ldGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZWxlbWVudC5lbGVtZW50LnByb3BlcnR5LnN1YkZvcm1TdHJ1Y3R1cmUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICBsZXQgYWxsQW5zd2VyczogQW5zd2VyW10gPSBbXTtcblxuICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZXh0cmFjdGVkID0gZXh0cmFjdFF1ZXN0aW9ucyhcbiAgICAgICAgICAgICAgICByb3cuZ3JpZCxcbiAgICAgICAgICAgICAgICBzdWJmb3JtSWQsXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICBmb3Jtcy5sZW5ndGhcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgZXh0cmFjdGVkLmFuc3dlcnMuZm9yRWFjaCgoYW5zd2VyKSA9PiB7XG4gICAgICAgICAgICAgICAgYWxsQW5zd2Vycy5wdXNoKHsgLi4uYW5zd2VyIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbGV0IGNvcGllZEZvcm1zO1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudC5jb3BpZWRGb3Jtcykge1xuICAgICAgICAgICAgICBjb3BpZWRGb3JtcyA9IGVsZW1lbnQuZWxlbWVudC5jb3BpZWRGb3JtcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN1YmZvcm06IEZvcm0gPSB7XG4gICAgICAgICAgICAgIGZvcm1JZDogc3ViZm9ybUlkLFxuICAgICAgICAgICAgICBkZWxldGVkOiBlbGVtZW50LmVsZW1lbnQuZGVsZXRlZCxcbiAgICAgICAgICAgICAgZGVsZXRlZFN1Ym1pc3Npb25zOiBbXSxcbiAgICAgICAgICAgICAgc3VibWlzc2lvbnM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBzdWJtaXNzaW9uSWQ6IHN1Ym1pc3Npb25JZCxcbiAgICAgICAgICAgICAgICAgIGFuc3dlcnM6IGFsbEFuc3dlcnMsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgY29waWVkRm9ybXM6IGNvcGllZEZvcm1zLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZm9ybXMucHVzaChzdWJmb3JtKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuZWxlbWVudC5wcm9wZXJ0eS5zdWJGb3JtU3RydWN0dXJlID09PSAnbXVsdGlwbGUnKSB7XG4gICAgICAgICAgICBjb25zdCBzdWJmb3JtQW5zd2VyczogQW5zd2VyW10gPSBbXTtcbiAgICAgICAgICAgIGxldCBzdWJmb3JtUXVlc3Rpb25zOiBhbnkgPSB7IGFuc3dlcnM6IFtdIH07XG4gICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQucm93cy5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBzdWJmb3JtUXVlc3Rpb25zID0gZXh0cmFjdFF1ZXN0aW9ucyhcbiAgICAgICAgICAgICAgICByb3cuZ3JpZCxcbiAgICAgICAgICAgICAgICBzdWJmb3JtSWQsXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICBmb3Jtcy5sZW5ndGhcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdTdWJmb3JtID0gZm9ybXMuZmluZChcbiAgICAgICAgICAgICAgKGZvcm0pID0+IGZvcm0uZm9ybUlkID09PSBzdWJmb3JtSWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIChlbGVtZW50LmVsZW1lbnQucHJvcGVydHkuc3ViRm9ybVR5cGUgPT0gJ2lubGluZScgfHxcbiAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQucHJvcGVydHkuc3ViRm9ybVR5cGUgPT0gJ2NhcmQnKSAmJlxuICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuc3VibWlzc2lvbnNcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuc3VibWlzc2lvbnMgPSB0aGlzLmNsZWFyRW1wdHlTdWJtaXNzaW9ucyhcbiAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuc3VibWlzc2lvbnNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudD8uc3VibWlzc2lvbnM/LmZvckVhY2goXG4gICAgICAgICAgICAgIChzdWJtaXNzaW9uOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHMgb2Ygc3VibWlzc2lvbi5zY29yZXMgPz8gW10pIHtcbiAgICAgICAgICAgICAgICAgIGlmIChzLnNjb3JlVHlwZSA9PT0gJ0dPT0RfU0NPUkUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VtT2ZHb29kRmluZGluZ3MgKz0gcy5zY29yZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChzLnNjb3JlVHlwZSA9PT0gJ0JBRF9TQ09SRScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdW1PZkJhZEZpbmRpbmdzICs9IHMuc2NvcmU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlbGV0ZSBzdWJtaXNzaW9uLmhhc0FsbFNjb3JpbmdBbnN3ZXJlZE9uY2U7XG4gICAgICAgICAgICAgICAgc3VibWlzc2lvbi5hbnN3ZXJzLmZvckVhY2goKGFuc3dlcjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBkZWxldGUgYW5zd2VyLmh0bWxDb250ZW50O1xuICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYW5zd2VyLmZpbGVzKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbklkID0gYCR7c3ViZm9ybUlkfV8ke2luZGV4fV8ke2Fuc3dlci5xdWVzdGlvbklkfWA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogcXVlc3Rpb25JZCxcbiAgICAgICAgICAgICAgICAgICAgICBmaWxlOiBhbnN3ZXIuZmlsZXMsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgYW5zd2VyLmZpbGVzO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZGVsZXRlIGFuc3dlci5hdHRhY2htZW50cztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxldCBjb3BpZWRGb3JtcztcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmVsZW1lbnQuY29waWVkRm9ybXMpIHtcbiAgICAgICAgICAgICAgY29waWVkRm9ybXMgPSBlbGVtZW50LmVsZW1lbnQuY29waWVkRm9ybXM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHN1YmZvcm06IEZvcm0gPSB7XG4gICAgICAgICAgICAgIGZvcm1JZDogc3ViZm9ybUlkLFxuICAgICAgICAgICAgICBkZWxldGVkOiBlbGVtZW50LmVsZW1lbnQuZGVsZXRlZCxcbiAgICAgICAgICAgICAgc2NvcmVzOiBlbGVtZW50LmVsZW1lbnQuc2NvcmVzLFxuICAgICAgICAgICAgICBkZWxldGVkU3VibWlzc2lvbnM6IGVsZW1lbnQuZWxlbWVudC5kZWxldGVkU3VibWlzc2lvbnMsXG4gICAgICAgICAgICAgIHN1Ym1pc3Npb25zOiBlbGVtZW50LmVsZW1lbnQuc3VibWlzc2lvbnMsXG4gICAgICAgICAgICAgIGNvcGllZEZvcm1zOiBjb3BpZWRGb3JtcyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3Jtcy5wdXNoKHN1YmZvcm0pO1xuICAgICAgICAgICAgdGhpcy5tYXhQb3NzaWJsZVNjb3JlICs9XG4gICAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudD8ubWF4UG9zc2libGVTY29yZSAqXG4gICAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudD8uc3VibWlzc2lvbnM/Lmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMubWF4UG9zc2libGVHb29kU2NvcmUgKz1cbiAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50Py5tYXhQb3NzaWJsZVNjb3JlPy5nb29kICpcbiAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50Py5zdWJtaXNzaW9ucz8ubGVuZ3RoIHx8IDA7XG4gICAgICAgICAgICB0aGlzLm1heFBvc3NpYmxlQmFkU2NvcmUgKz1cbiAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50Py5tYXhQb3NzaWJsZVNjb3JlPy5iYWQgKlxuICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQ/LnN1Ym1pc3Npb25zPy5sZW5ndGggfHwgMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnUVVFU1RJT05fR1JPVVAnICYmIGVsZW1lbnQuc2hvdykge1xuICAgICAgICAgIC8vIEhhbmRsZSBRdWVzdGlvbiBHcm91cCBieSBpdGVyYXRpbmcgdGhyb3VnaCByb3dzXG4gICAgICAgICAgZWxlbWVudC5lbGVtZW50LnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJvdy5ncmlkLmZvckVhY2goKGdyaWRJdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGdyaWRJdGVtLmVudGl0eVR5cGUgPT09ICdRVUVTVElPTicgJiYgZ3JpZEl0ZW0uc2hvdykge1xuICAgICAgICAgICAgICAgIGxldCBiYXNlUXVlc3Rpb246IGFueTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBncmlkSXRlbS5lbGVtZW50Py5mb3JtRWxlbWVudC5lbGVtZW50VHlwZSA9PT0gJ0ZJTEVfUElDS0VSJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgYmFzZVF1ZXN0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBncmlkSXRlbS5lbGVtZW50LmlkLFxuICAgICAgICAgICAgICAgICAgICBhbnN3ZXI6ICcnLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGdyaWRJdGVtLmVsZW1lbnQuYW5zd2VyKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbklkID0gaXNJblN1YkZvcm1cbiAgICAgICAgICAgICAgICAgICAgICA/IGAke3BhcmVudEZvcm1JZH1fJHtzdWJGb3JtSW5kZXh9XyR7Z3JpZEl0ZW0uZWxlbWVudC5pZH1gXG4gICAgICAgICAgICAgICAgICAgICAgOiBncmlkSXRlbS5lbGVtZW50LmlkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IHF1ZXN0aW9uSWQsXG4gICAgICAgICAgICAgICAgICAgICAgZmlsZTogZ3JpZEl0ZW0uZWxlbWVudC5hbnN3ZXIsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBiYXNlUXVlc3Rpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGdyaWRJdGVtLmVsZW1lbnQuaWQsXG4gICAgICAgICAgICAgICAgICAgIGFuc3dlcjogZ3JpZEl0ZW0uZWxlbWVudC5hbnN3ZXIsXG4gICAgICAgICAgICAgICAgICAgIGFtb3VudEluV29yZHM6IGdyaWRJdGVtLmVsZW1lbnQuYW1vdW50SW5Xb3Jkc1xuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZWRpdCkge1xuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAuLi5iYXNlUXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGFuc3dlcklkOiBncmlkSXRlbS5lbGVtZW50LmFuc3dlcklkIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICBkZWxldGVGaWxlczogZ3JpZEl0ZW0uZWxlbWVudC5kZWxldGVGaWxlcyB8fCBbXSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbnMucHVzaChiYXNlUXVlc3Rpb24pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChncmlkSXRlbS5lbGVtZW50LmNoaWxkTG9naWNzKSB7XG4gICAgICAgICAgICAgICAgICBmb3IgKGxldCBsb2dpYyBvZiBncmlkSXRlbS5lbGVtZW50LmNoaWxkTG9naWNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2dpYy5zaG93TG9naWMpIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCByb3cgb2YgbG9naWMucm93cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZXh0cmFjdFF1ZXN0aW9ucyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LmdyaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEZvcm1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNJblN1YkZvcm0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN1YkZvcm1JbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9ucy5wdXNoKC4uLnJlc3VsdC5hbnN3ZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1zLnB1c2goLi4ucmVzdWx0LmZvcm1zKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ01VTFRJRklFTEQnICYmIGVsZW1lbnQuc2hvdykge1xuICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5yb3dzLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgICAgICByb3cuZ3JpZC5mb3JFYWNoKChncmlkSXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChncmlkSXRlbS5lbnRpdHlUeXBlID09PSAnUVVFU1RJT04nICYmIGdyaWRJdGVtLnNob3cpIHtcbiAgICAgICAgICAgICAgICBxdWVzdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBncmlkSXRlbS5lbGVtZW50LmlkLFxuICAgICAgICAgICAgICAgICAgYW5zd2VyOiBncmlkSXRlbS5lbGVtZW50LmFuc3dlciB8fCAnJyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgYW5zd2VyczogcXVlc3Rpb25zLCBmb3JtczogZm9ybXMgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgcHJvY2Vzc1BhZ2VzID0gKFxuICAgICAgcGFnZXM6IGFueVtdXG4gICAgKTogeyBhbnN3ZXJzOiBBbnN3ZXJbXTsgZm9ybXM6IEZvcm1bXSB9ID0+IHtcbiAgICAgIGNvbnN0IHF1ZXN0aW9uczogQW5zd2VyW10gPSBbXTtcbiAgICAgIGNvbnN0IGZvcm1zOiBGb3JtW10gPSBbXTtcblxuICAgICAgcGFnZXMuZm9yRWFjaCgocGFnZSkgPT4ge1xuICAgICAgICBwYWdlLnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBleHRyYWN0UXVlc3Rpb25zKHJvdy5ncmlkKTtcbiAgICAgICAgICBxdWVzdGlvbnMucHVzaCguLi5yZXN1bHQuYW5zd2Vycyk7XG4gICAgICAgICAgZm9ybXMucHVzaCguLi5yZXN1bHQuZm9ybXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4geyBhbnN3ZXJzOiBxdWVzdGlvbnMsIGZvcm1zOiBmb3JtcyB9O1xuICAgIH07XG4gICAgY29uc3QgcmVzdWx0ID0gcHJvY2Vzc1BhZ2VzKHRoaXMucGFnZXMpO1xuICAgIGNvbnN0IGdyaWRzID0gdGhpcy53aGVuQ2xhdXNlU2VydmljZS5nZXRBY3RpdmVXaGVuQ2xhdXNlR3JpZHMoKTtcbiAgICBjb25zdCBzaW1wbGlmaWVkID0gZ3JpZHMubWFwKGdyaWQgPT4gKHtcbiAgICAgIGVsZW1lbnRJZDogZ3JpZD8uZWxlbWVudD8uaWQgPz8gbnVsbCxcbiAgICAgIGVudGl0eVR5cGU6IGdyaWQ/LmVudGl0eVR5cGUgPz8gbnVsbCxcbiAgICAgIHNob3c6IGdyaWQ/LnNob3cgPz8gZmFsc2VcbiAgICB9KSk7XG4gICAgdGhpcy5xdWVzdGlvbkFuc3dlcnMgPSB7XG4gICAgICBwYXJlbnRJZDogJycsXG4gICAgICBhbnN3ZXJzOiByZXN1bHQuYW5zd2VycyxcbiAgICAgIGZvcm1zOiByZXN1bHQuZm9ybXMsXG4gICAgICBjb3B5U3ViRm9ybXM6IHRoaXMuY29weVN1YmZvcm1zLFxuICAgICAgd2hlbkNsYXVzZUVsZW1lbnRzOiBzaW1wbGlmaWVkXG4gICAgfTtcbiAgfVxuXG4gIGNsZWFyRW1wdHlTdWJtaXNzaW9ucyhzdWJtaXNzaW9uczogYW55KSB7XG4gICAgY29uc3Qgbm9uRW1wdHlTdWJtaXNzaW9uczogU3VibWlzc2lvbltdID0gW107XG4gICAgY29uc3QgZW1wdHlTdWJtaXNzaW9uSWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgc3VibWlzc2lvbnMuZm9yRWFjaCgoc3VibWlzc2lvbjogYW55KSA9PiB7XG4gICAgICBjb25zdCBoYXNWYWx1ZSA9IHN1Ym1pc3Npb24uYW5zd2Vycy5zb21lKFxuICAgICAgICAoYW5zd2VyOiBhbnkpID0+XG4gICAgICAgICAgYW5zd2VyLmFuc3dlciAhPT0gJycgJiZcbiAgICAgICAgICBhbnN3ZXIuYW5zd2VyICE9PSBudWxsICYmXG4gICAgICAgICAgYW5zd2VyLmFuc3dlciAhPT0gdW5kZWZpbmVkXG4gICAgICApO1xuICAgICAgaWYgKGhhc1ZhbHVlKSB7XG4gICAgICAgIG5vbkVtcHR5U3VibWlzc2lvbnMucHVzaChzdWJtaXNzaW9uKTtcbiAgICAgIH0gZWxzZSBpZiAoc3VibWlzc2lvbi5zdWJtaXNzaW9uSWQpIHtcbiAgICAgICAgZW1wdHlTdWJtaXNzaW9uSWRzLnB1c2goc3VibWlzc2lvbi5zdWJtaXNzaW9uSWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3VibWlzc2lvbnMgPSBub25FbXB0eVN1Ym1pc3Npb25zO1xuICAgIHJldHVybiBzdWJtaXNzaW9ucztcbiAgfVxuXG4gIHZhbGlkYXRlQWxsRWxlbWVudExvYWRlZCgpOiB7IHN0YXR1czogYm9vbGVhbjsgbWVzc2FnZTogc3RyaW5nIH0ge1xuICAgIGlmICh0aGlzLnBhZ2VzLmxlbmd0aCA8IHRoaXMucGFnZURldGFpbHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICdQbGVhc2UgZW5zdXJlIGFsbCBwYWdlcyBhcmUgZnVsbHkgdmlzaWJsZSBiZWZvcmUgc3VibWl0dGluZyB0aGUgZm9ybS4nLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBpbmNvbXBsZXRlUGFnZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICB0aGlzLnBhZ2VzLmZvckVhY2goKHA6IGFueSwgaTogbnVtYmVyKSA9PiB7XG4gICAgICBpZiAocCAmJiBBcnJheS5pc0FycmF5KHAucm93cykpIHtcbiAgICAgICAgbGV0IGogPSAwO1xuICAgICAgICBwLnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICByb3cuZ3JpZC5mb3JFYWNoKChncmlkSXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICBqKys7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIXAgfHxcbiAgICAgICAgICAhQXJyYXkuaXNBcnJheShwLnJvd3MpIHx8XG4gICAgICAgICAgKE1hdGguY2VpbChqIC8gMjApICE9IHRoaXMucm93U2V0Q291bnRbaV0gJiYgIXRoaXMubmF2aWdhdGVUbylcbiAgICAgICAgKSB7XG4gICAgICAgICAgaW5jb21wbGV0ZVBhZ2VzLnB1c2godGhpcy5wYWdlRGV0YWlsc1tpXS5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5jb21wbGV0ZVBhZ2VzLnB1c2godGhpcy5wYWdlRGV0YWlsc1tpXS5uYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChpbmNvbXBsZXRlUGFnZXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTogYFNvbWUgc2VjdGlvbnMgYXJlIHN0aWxsIGxvYWRpbmcuIFBsZWFzZSBzY3JvbGwgdGhyb3VnaCB0aGUgZm9sbG93aW5nIHBhZ2VzIHRvIGVuc3VyZSBhbGwgcXVlc3Rpb25zIGFyZSBsb2FkZWQ6ICR7aW5jb21wbGV0ZVBhZ2VzLmpvaW4oXG4gICAgICAgICAgJywgJ1xuICAgICAgICApfS5gLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiB0cnVlLFxuICAgICAgbWVzc2FnZTogJ0dyZWF0ISBBbGwgc2VjdGlvbnMgYXJlIGNvbXBsZXRlLiBZb3UgY2FuIG5vdyBzdWJtaXQgdGhlIGZvcm0uJyxcbiAgICB9O1xuICB9XG4gIHNhdmVhc0RyYWZ0UG9wdXAoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNraXBWYWxpZGF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oU2F2ZURyYWZ0TW9kYWxDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnNDUwcHgnLFxuICAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1kaWFsb2ctY29udGFpbmVyJyxcbiAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHByaW1hcnlDb2xvcjogdGhpcy5wcmltYXJ5Q29sb3IsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uU2tpcCA9IHRydWU7XG4gICAgICAgIHRoaXMuc3VibWl0Rm9ybSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uU2tpcCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2F2ZUFzRHJhZnQoKSB7XG4gICAgdGhpcy52YWxpZGF0aW9uU2tpcCA9IHRydWU7XG4gICAgdGhpcy5kcmFmdCA9IHRydWU7XG4gICAgdGhpcy5zdWJtaXRGb3JtKCk7XG4gIH1cblxuICBhc3luYyBzdWJtaXRGb3JtKCkge1xuICAgIHRoaXMuc3RhcnRTdWJtaXNzaW9uTG9hZGVyKCk7XG4gICAgaWYgKHRoaXMud2ViaG9vaykge1xuICAgICAgdGhpcy53ZWJob29rUGF5bG9hZEFycmF5ID0gdGhpcy53ZWJob29rLm1hcCgodzogYW55KSA9PiAoe1xuICAgICAgICBpZDogdy5pZCxcbiAgICAgICAgLi4udGhpcy5leHRyYWN0R3JvdXBlZFdlYmhvb2tEYXRhKFt3XSksXG4gICAgICB9KSk7XG4gICAgfVxuICAgIGlmICghdGhpcy52YWxpZGF0ZUFsbEVsZW1lbnRMb2FkZWQoKS5zdGF0dXMpIHtcbiAgICAgIHRoaXMudG9hc3RyLndhcm5pbmcoJ1BsZWFzZSB3YWl0IGZvciBhbGwgZWxlbWVudHMgdG8gbG9hZCcpO1xuICAgICAgdGhpcy5zdWJtaXQuZW1pdCh7XG4gICAgICAgIHN0YXR1czogJ2ZhaWxlZCcsXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3VibWlzc2lvbkluUHJvZ3Jlc3MgfHwgdGhpcy5zdWJtaXNzaW9uSW5EcmFmdCkge1xuICAgICAgdGhpcy5zdWJtaXQuZW1pdCh7XG4gICAgICAgIHN0YXR1czogJ2ZhaWxlZCcsXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHJlY2FwdGNoYVRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdGhpcy5pblZhbGlkUXVlc3Rpb25zLmNsZWFyKCk7XG4gICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5jbGVhckFsbCgpO1xuICAgIGlmICh0aGlzLmVuYWJsZUdvb2dsZVJlY2FwdGNoYSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVjYXB0Y2hhVG9rZW4gPSBhd2FpdCB0aGlzLmdldFRva2VuKCk7XG5cbiAgICAgICAgaWYgKCFyZWNhcHRjaGFUb2tlbikge1xuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKFxuICAgICAgICAgICAgJ1BsZWFzZSBjb21wbGV0ZSB0aGUgQ0FQVENIQSB2ZXJpZmljYXRpb24gYmVmb3JlIHN1Ym1pdHRpbmcgdGhlIGZvcm0uJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5zdWJtaXNzaW9uSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc3VibWlzc2lvbkluRHJhZnQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnJlc2V0U3VibWlzc2lvbkxvYWRlcigpO1xuICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNraXAgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmRyYWZ0ID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5zdWJtaXQuZW1pdCh7XG4gICAgICAgICAgICBzdGF0dXM6ICdmYWlsZWQnLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICdFcnJvciB3aGlsZSBnZXR0aW5nIHJlQ0FQVENIQSB0b2tlbjonLFxuICAgICAgICAgIGVycm9yLmVycm9yPy5tZXNzYWdlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdGYWlsZWQgdG8gdmVyaWZ5IHJlQ0FQVENIQS4nKTtcbiAgICAgICAgdGhpcy5zdWJtaXNzaW9uSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN1Ym1pc3Npb25JbkRyYWZ0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVzZXRTdWJtaXNzaW9uTG9hZGVyKCk7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvblNraXAgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kcmFmdCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN1Ym1pdC5lbWl0KHtcbiAgICAgICAgICBzdGF0dXM6ICdmYWlsZWQnLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmRyYWZ0IHx8IHRoaXMudmFsaWRhdGlvblNraXApIHtcbiAgICAgIHRoaXMuc3VibWlzc2lvbkluRHJhZnQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN1Ym1pc3Npb25JblByb2dyZXNzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZXQgdmFsaWRhdGlvblJlc3BvbnNlID0gdHJ1ZTtcbiAgICBpZiAoIXRoaXMudmFsaWRhdGlvblNraXApIHtcbiAgICAgIHZhbGlkYXRpb25SZXNwb25zZSA9IHRoaXMudmFsaWRhdGVGb3JtKHRoaXMucGFnZXMpLmlzVmFsaWQ7XG4gICAgfVxuXG4gICAgaWYgKCF2YWxpZGF0aW9uUmVzcG9uc2UpIHtcbiAgICAgIHRoaXMuc2F2ZWFzRHJhZnRQb3B1cCgpO1xuICAgICAgdGhpcy5zdWJtaXNzaW9uSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgdGhpcy5zdWJtaXNzaW9uSW5EcmFmdCA9IGZhbHNlO1xuICAgICAgdGhpcy5yZXNldFN1Ym1pc3Npb25Mb2FkZXIoKTtcbiAgICAgIHRoaXMudmFsaWRhdGlvblNraXAgPSBmYWxzZTtcbiAgICAgIHRoaXMuZHJhZnQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc3VibWl0LmVtaXQoe1xuICAgICAgICBzdGF0dXM6ICdmYWlsZWQnLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGdldENpcmN1bGFyUmVwbGFjZXIgPSAoKSA9PiB7XG4gICAgICBjb25zdCBzZWVuID0gbmV3IFdlYWtTZXQoKTtcbiAgICAgIHJldHVybiAoX2tleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYgKHNlZW4uaGFzKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2Vlbi5hZGQodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHRoaXMuZ2VuZXJhdGVRdWVzdGlvbkFuc3dlcnMoKTtcbiAgICBjb25zdCBmb3JtRmluYWxTY29yZSA9IHRoaXMuY2FsY3VsYXRlRm9ybUZpbmFsU2NvcmUoKTtcbiAgICB0aGlzLnF1ZXN0aW9uQW5zd2Vycy5zY29yZXMgPSBmb3JtRmluYWxTY29yZTtcbiAgICBpZiAodmFsaWRhdGlvblJlc3BvbnNlKSB7XG4gICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgZm9ybURhdGEuYXBwZW5kKCdza2lwVmFsaWRhdGlvbicsIHRoaXMudmFsaWRhdGlvblNraXAgPyAndHJ1ZScgOiAnZmFsc2UnKTtcbiAgICAgIHRoaXMucXVlc3Rpb25BbnN3ZXJzLnBhcmVudElkID0gdGhpcy5wYXJlbnRTdWJtaXNzaW9uSWQ7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoXG4gICAgICAgICdqc29uJyxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5xdWVzdGlvbkFuc3dlcnMsIGdldENpcmN1bGFyUmVwbGFjZXIoKSlcbiAgICAgICk7XG4gICAgICBpZiAodGhpcy53ZWJob29rUGF5bG9hZEFycmF5KSB7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAnd2ViaG9va1BheWxvYWQnLFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMud2ViaG9va1BheWxvYWRBcnJheSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnd2ViaG9va1BheWxvYWQnLCBKU09OLnN0cmluZ2lmeShbXSkpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBzZWVuUXVlc3Rpb25JZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgICAgICBjb25zdCB1bmlxdWVGaWxlcyA9IHRoaXMuZmlsZXMuZmlsdGVyKChmaWxlSXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChzZWVuUXVlc3Rpb25JZHMuaGFzKGZpbGVJdGVtLnF1ZXN0aW9uSWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlZW5RdWVzdGlvbklkcy5hZGQoZmlsZUl0ZW0ucXVlc3Rpb25JZCk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHVuaXF1ZUZpbGVzLmZvckVhY2goKGZpbGVJdGVtKSA9PiB7XG4gICAgICAgICAgZmlsZUl0ZW0uZmlsZS5mb3JFYWNoKChmaWxlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChmaWxlSXRlbS5xdWVzdGlvbklkLCBmaWxlLl9maWxlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBmb3JtU2VydmljZUNhbGwgPVxuICAgICAgICB0aGlzLmVkaXQgJiYgdGhpcy5zdWJtaXNzaW9uSWRcbiAgICAgICAgICA/IHRoaXMuZm9ybVNlcnZpY2UudXBkYXRlRm9ybShcbiAgICAgICAgICAgICAgdGhpcy5tb2R1bGVOYW1lLFxuICAgICAgICAgICAgICB0aGlzLnN1Ym1pc3Npb25JZCxcbiAgICAgICAgICAgICAgZm9ybURhdGEsXG4gICAgICAgICAgICAgIHJlY2FwdGNoYVRva2VuID8/ICcnXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiB0aGlzLmZvcm1TZXJ2aWNlLnN1Ym1pdEZvcm0oXG4gICAgICAgICAgICAgIHRoaXMubW9kdWxlTmFtZSxcbiAgICAgICAgICAgICAgZm9ybURhdGEsXG4gICAgICAgICAgICAgIHJlY2FwdGNoYVRva2VuID8/ICcnXG4gICAgICAgICAgICApO1xuXG4gICAgICBmb3JtU2VydmljZUNhbGwuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKGV2ZW50KSA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgIGlmIChldmVudC50b3RhbCkge1xuICAgICAgICAgICAgICBjb25zdCBwZXJjZW50RG9uZSA9IE1hdGgucm91bmQoKGV2ZW50LmxvYWRlZCAvIGV2ZW50LnRvdGFsKSAqIDEwMCk7XG4gICAgICAgICAgICAgIHRoaXMuc2V0UHJvZ3Jlc3MoTWF0aC5taW4oOTUsIHBlcmNlbnREb25lKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgXG4gICAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IEh0dHBFdmVudFR5cGUuUmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHRoaXMuY29tcGxldGVTdWJtaXNzaW9uTG9hZGVyKCk7XG4gICAgICBcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gZXZlbnQuYm9keTtcbiAgICAgIFxuICAgICAgICAgICAgLy8gZXhpc3Rpbmcgc3VjY2VzcyBsb2dpYyDihpNcbiAgICAgICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MoXG4gICAgICAgICAgICAgIHRoaXMuZWRpdFxuICAgICAgICAgICAgICAgID8gJ0Zvcm0gdXBkYXRlZCBzdWNjZXNzZnVsbHknXG4gICAgICAgICAgICAgICAgOiAnRm9ybSBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5J1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxldCBlbWl0dGluZ1ZhbHVlcztcbiAgICAgICAgICAgIGlmICh0aGlzLmVtaXR0ZXJzKSB7XG4gICAgICAgICAgICAgIGVtaXR0aW5nVmFsdWVzID0gdGhpcy5tYXBFbWl0dGVyc1RvVmFsdWVzKCk7XG4gICAgICAgICAgICB9XG4gIFxuICAgICAgICAgICAgaWYgKHRoaXMudmFsaWRhdGlvblNraXAgfHwgdGhpcy5kcmFmdCkge1xuICAgICAgICAgICAgICB0aGlzLnN1Ym1pdC5lbWl0KHtcbiAgICAgICAgICAgICAgICBzdGF0dXM6ICdkcmFmdCcsXG4gICAgICAgICAgICAgICAgc3VibWlzc2lvbklkOiByZXNwb25zZS5yZXN1bHQsXG4gICAgICAgICAgICAgICAgc2NvcmU6IGZvcm1GaW5hbFNjb3JlLFxuICAgICAgICAgICAgICAgIC4uLihlbWl0dGluZ1ZhbHVlcyB8fCB7fSksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zdWJtaXQuZW1pdCh7XG4gICAgICAgICAgICAgICAgc3RhdHVzOiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgc3VibWlzc2lvbklkOiByZXNwb25zZS5yZXN1bHQsXG4gICAgICAgICAgICAgICAgc2NvcmU6IGZvcm1GaW5hbFNjb3JlLFxuICAgICAgICAgICAgICAgIC4uLihlbWl0dGluZ1ZhbHVlcyB8fCB7fSksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdWJtaXNzaW9uSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zdWJtaXNzaW9uSW5EcmFmdCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kcmFmdCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2tpcCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuY2xlYXJBbGwoKTtcbiAgICAgICAgICB0aGlzLmZpbmRRdWVzdGlvblBhZ2VJbmRleChcbiAgICAgICAgICAgIHRoaXMucGFyc2VFcnJvcnNUb01hcChlcnJvci5lcnJvci5tZXNzYWdlKVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4ID0gdGhpcy5wYWdlcy5sZW5ndGggLSAxO1xuICAgICAgICAgIHRoaXMubmF2aWdhdGVUb0ZpcnN0RXJyb3IoKTtcbiAgICAgICAgICB0aGlzLnJlc2V0U3VibWlzc2lvbkxvYWRlcigpO1xuICAgICAgICAgIHRoaXMuc3VibWlzc2lvbkluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmRyYWZ0ID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2tpcCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc3VibWlzc2lvbkluRHJhZnQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnNhdmVhc0RyYWZ0UG9wdXAoKTtcbiAgICAgICAgICB0aGlzLnN1Ym1pdC5lbWl0KHtcbiAgICAgICAgICAgIHN0YXR1czogJ2ZhaWxlZCcsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvci5lcnJvci5tZXNzYWdlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhpcy50b2FzdHIuZXJyb3IodmFsaWRhdGlvblJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgdGhpcy5zdWJtaXQuZW1pdCh7XG4gICAgICAgIHN0YXR1czogJ2ZhaWxlZCcsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2F2ZWFzRHJhZnRQb3B1cCgpO1xuICAgICAgdGhpcy5zdWJtaXNzaW9uSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgdGhpcy5zdWJtaXNzaW9uSW5EcmFmdCA9IGZhbHNlO1xuICAgICAgdGhpcy5yZXNldFN1Ym1pc3Npb25Mb2FkZXIoKTtcbiAgICAgIHRoaXMudmFsaWRhdGlvblNraXAgPSBmYWxzZTtcbiAgICAgIHRoaXMuZHJhZnQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuc2V0UHJvZ3Jlc3ModmFsdWU6IG51bWJlcikge1xuICB0aGlzLnN1Ym1pc3Npb25Qcm9ncmVzcyA9IHZhbHVlO1xuICB0aGlzLnVwZGF0ZVN0ZXBUZXh0KHZhbHVlKTtcbn1cblxuXG5zdGFydFN1Ym1pc3Npb25Mb2FkZXIoKSB7XG4gIHRoaXMuc2hvd1N1Ym1pc3Npb25Mb2FkZXIgPSB0cnVlO1xuICB0aGlzLnNldFByb2dyZXNzKDApO1xuXG4gIC8vIFNpbXVsYXRlZCBwcm9ncmVzcyB1bnRpbCBiYWNrZW5kIHVwbG9hZCB1cGRhdGVzIGl0XG4gIHRoaXMucHJvZ3Jlc3NJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICBpZiAodGhpcy5zdWJtaXNzaW9uUHJvZ3Jlc3MgPCA4NSkge1xuICAgICAgdGhpcy5zZXRQcm9ncmVzcyh0aGlzLnN1Ym1pc3Npb25Qcm9ncmVzcyArIDIpO1xuICAgIH1cbiAgfSwgMzAwKTtcbn1cblxuY29tcGxldGVTdWJtaXNzaW9uTG9hZGVyKCkge1xuICBjbGVhckludGVydmFsKHRoaXMucHJvZ3Jlc3NJbnRlcnZhbCk7XG5cbiAgdGhpcy5zZXRQcm9ncmVzcygxMDApO1xuXG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIHRoaXMuc2hvd1N1Ym1pc3Npb25Mb2FkZXIgPSBmYWxzZTtcbiAgICB0aGlzLnNldFByb2dyZXNzKDApO1xuICB9LCA1MDApO1xufVxuXG5yZXNldFN1Ym1pc3Npb25Mb2FkZXIoKSB7XG4gIGNsZWFySW50ZXJ2YWwodGhpcy5wcm9ncmVzc0ludGVydmFsKTtcblxuICB0aGlzLnNob3dTdWJtaXNzaW9uTG9hZGVyID0gZmFsc2U7XG4gIGNsZWFySW50ZXJ2YWwodGhpcy5kb3RJbnRlcnZhbCk7XG4gIHRoaXMuYW5pbWF0ZWREb3RzID0gJyc7XG4gIHRoaXMuc2V0UHJvZ3Jlc3MoMCk7XG59XG5cblxuc3RhcnRUZXh0TG9hZGVyKCkge1xuICBsZXQgZG90Q291bnQgPSAwO1xuXG4gIHRoaXMuZG90SW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgZG90Q291bnQgPSAoZG90Q291bnQgKyAxKSAlIDQ7XG4gICAgdGhpcy5hbmltYXRlZERvdHMgPSAnLicucmVwZWF0KGRvdENvdW50KTtcbiAgfSwgNTAwKTtcbn1cblxudXBkYXRlU3RlcFRleHQocHJvZ3Jlc3M6IG51bWJlcikge1xuICBpZiAocHJvZ3Jlc3MgPCAyNSkge1xuICAgIHRoaXMuY3VycmVudFN0ZXAgPSAnVmFsaWRhdGluZyBmb3JtJztcbiAgfSBlbHNlIGlmIChwcm9ncmVzcyA8IDYwKSB7XG4gICAgdGhpcy5jdXJyZW50U3RlcCA9ICdVcGxvYWRpbmcgZGF0YSc7XG4gIH0gZWxzZSBpZiAocHJvZ3Jlc3MgPCA5MCkge1xuICAgIHRoaXMuY3VycmVudFN0ZXAgPSAnU2F2aW5nIHN1Ym1pc3Npb24nO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuY3VycmVudFN0ZXAgPSAnRmluYWxpemluZyc7XG4gIH1cbn1cblxuICBjYWxjdWxhdGVGb3JtRmluYWxTY29yZSgpOiBTdWJtaXNzaW9uU2NvcmVbXSB7XG4gICAgY29uc3QgZ29vZFNjb3JlID0gdGhpcy5tYXhQb3NzaWJsZUdvb2RTY29yZVxuICAgICAgPyAxMDAgLSAodGhpcy5zdW1PZkdvb2RGaW5kaW5ncyAvIHRoaXMubWF4UG9zc2libGVHb29kU2NvcmUpICogMTAwXG4gICAgICA6IDA7XG5cbiAgICBjb25zdCBiYWRTY29yZSA9IHRoaXMubWF4UG9zc2libGVCYWRTY29yZVxuICAgICAgPyAxMDAgLSAodGhpcy5zdW1PZkJhZEZpbmRpbmdzIC8gdGhpcy5tYXhQb3NzaWJsZUJhZFNjb3JlKSAqIDEwMFxuICAgICAgOiAwO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIHsgc2NvcmVUeXBlOiAnR09PRF9TQ09SRScsIHNjb3JlOiBNYXRoLnJvdW5kKGdvb2RTY29yZSkgfSxcbiAgICAgIHsgc2NvcmVUeXBlOiAnQkFEX1NDT1JFJywgc2NvcmU6IE1hdGgucm91bmQoYmFkU2NvcmUpIH0sXG4gICAgXTtcbiAgfVxuXG4gIG1hcEVtaXR0ZXJzVG9WYWx1ZXMoKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgY29uc3QgYW5zd2VyTWFwID0gbmV3IE1hcChcbiAgICAgIHRoaXMucXVlc3Rpb25BbnN3ZXJzLmFuc3dlcnMubWFwKChxYSkgPT4gW3FhLnF1ZXN0aW9uSWQsIHFhLmFuc3dlcl0pXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc3VsdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXG4gICAgdGhpcy5lbWl0dGVycy5mb3JFYWNoKChlbWl0dGVyKSA9PiB7XG4gICAgICBpZiAoZW1pdHRlci52YWx1ZVNvdXJjZSA9PT0gJ0NVU1RPTV9JTlBVVCcpIHtcbiAgICAgICAgcmVzdWx0W2VtaXR0ZXIua2V5TmFtZV0gPSBlbWl0dGVyLmlucHV0VmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBlbWl0dGVyLnZhbHVlU291cmNlID09PSAnUVVFU1RJT04nICYmXG4gICAgICAgIGVtaXR0ZXIucXVlc3Rpb25JZCAmJlxuICAgICAgICBhbnN3ZXJNYXAuaGFzKGVtaXR0ZXIucXVlc3Rpb25JZClcbiAgICAgICkge1xuICAgICAgICByZXN1bHRbZW1pdHRlci5rZXlOYW1lXSA9IGFuc3dlck1hcC5nZXQoZW1pdHRlci5xdWVzdGlvbklkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwYXJzZUVycm9yc1RvTWFwKGVycm9yU3RyaW5nOiBzdHJpbmcpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBlcnJvck1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgLy8gQ29udmVydCB0aGUgaW5jb3JyZWN0IGZvcm1hdCB0byBhIHZhbGlkIG9iamVjdCBzdHJ1Y3R1cmVcbiAgICBlcnJvclN0cmluZ1xuICAgICAgLnJlcGxhY2UoL1t7fV0vZywgJycpIC8vIFJlbW92ZSBjdXJseSBicmFjZXNcbiAgICAgIC5zcGxpdCgnLCAnKSAvLyBTcGxpdCBrZXktdmFsdWUgcGFpcnNcbiAgICAgIC5mb3JFYWNoKChwYWlyKSA9PiB7XG4gICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHBhaXIuc3BsaXQoJz0nKTtcbiAgICAgICAgaWYgKGtleSAmJiB2YWx1ZSkge1xuICAgICAgICAgIGVycm9yTWFwLnNldChrZXkudHJpbSgpLCB2YWx1ZS50cmltKCkpOyAvLyBTdG9yZSBpbiBNYXBcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICByZXR1cm4gZXJyb3JNYXA7XG4gIH1cbiAgYXN5bmMgbmF2aWdhdGVUb0ZpcnN0RXJyb3IoKSB7XG4gICAgY29uc3QgZmlyc3RFcnJvciA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UuZ2V0Rmlyc3RJbnZhbGlkKCk7XG4gICAgaWYgKCFmaXJzdEVycm9yKSByZXR1cm47XG5cbiAgICBjb25zdCBlbGVtZW50SWQgPSBgcXVlc3Rpb24tJHtmaXJzdEVycm9yLmlkfWA7XG5cbiAgICB0aGlzLnJldHJ5Q291bnQgPSAwO1xuXG4gICAgLy8gQ2hhbmdlIHBhZ2UgaWYgbmVlZGVkXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2VJbmRleCAhPT0gZmlyc3RFcnJvci5wYWdlSW5kZXgpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleCA9IGZpcnN0RXJyb3IucGFnZUluZGV4O1xuICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2VJbmRleCArIDEgPCB0aGlzLnBhZ2VEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLm5leHRQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXggKyAxXTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlSW5kZXggLSAxID49IDApIHtcbiAgICAgICAgdGhpcy5wcmV2aW91c1BhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzW3RoaXMuY3VycmVudFBhZ2VJbmRleCAtIDFdO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRlYm91bmNlKCgpID0+IHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpLCAxMDApO1xuICAgICAgaWYgKHRoaXMubmF2aWdhdGlvbiA9PT0gJ1RBQicpXG4gICAgICAgIHRoaXMuY2hpbGQudHJpZ2dlckZ1bmN0aW9uKGZpcnN0RXJyb3IucGFnZUluZGV4KTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnNjcm9sbFRvRWxlbWVudFdpdGhSZXRyeShlbGVtZW50SWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzY3JvbGxUb0VsZW1lbnRXaXRoUmV0cnkoZWxlbWVudElkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnJldHJ5Q291bnQrKztcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTtcblxuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy5zY3JvbGxBbmRGb2N1cyhlbGVtZW50KSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmV0cnlDb3VudCA8IHRoaXMubWF4UmV0cmllcykge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwKSk7XG4gICAgICByZXR1cm4gdGhpcy5zY3JvbGxUb0VsZW1lbnRXaXRoUmV0cnkoZWxlbWVudElkKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgYEVsZW1lbnQgJHtlbGVtZW50SWR9IG5vdCBmb3VuZCBhZnRlciAke3RoaXMubWF4UmV0cmllc30gYXR0ZW1wdHNgXG4gICAgKTtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy5mYWxsYmFja1Njcm9sbCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgc2Nyb2xsQW5kRm9jdXMoZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICBlbGVtZW50LnNjcm9sbEludG9WaWV3KHtcbiAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAgIGJsb2NrOiAnY2VudGVyJyxcbiAgICAgIGlubGluZTogJ25lYXJlc3QnLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZm9jdXNhYmxlID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJ2lucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBidXR0b24sIFt0YWJpbmRleF06bm90KFt0YWJpbmRleD1cIi0xXCJdKSdcbiAgICApIGFzIEhUTUxFbGVtZW50O1xuICAgIGZvY3VzYWJsZT8uZm9jdXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZmFsbGJhY2tTY3JvbGwoKSB7XG4gICAgY29uc3QgcGFnZUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgYC5wYWdlLSR7dGhpcy5jdXJyZW50UGFnZUluZGV4fWBcbiAgICApO1xuICAgIHBhZ2VFbGVtZW50Py5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnYXV0bycgfSk7XG4gIH1cblxuICBwcml2YXRlIGRlYm91bmNlKGZ1bmM6ICgpID0+IHZvaWQsIGRlbGF5OiBudW1iZXIpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5kZWJvdW5jZVRpbWVyKTtcbiAgICB0aGlzLmRlYm91bmNlVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmMsIGRlbGF5KTtcbiAgfVxuICAvLyAgIGV4dHJhY3RJZChtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgLy8gICAgIGNvbnN0IG1hdGNoID0gbWVzc2FnZS5tYXRjaCgvWzAtOWEtZkEtRi1dezM2fS8pO1xuICAvLyAgICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMF0gOiBudWxsO1xuICAvLyB9XG5cbiAgLy8gIHJlbW92ZUlkKG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vICAgcmV0dXJuIG1lc3NhZ2UucmVwbGFjZSgvWzAtOWEtZkEtRi1dezM2fSQvLCBcIlwiKS50cmltKCk7XG4gIC8vIH1cblxuICBmaW5kUXVlc3Rpb25QYWdlSW5kZXgocXVlc3Rpb25FcnJvcnM6IE1hcDxzdHJpbmcsIHN0cmluZz4pOiB2b2lkIHtcbiAgICBmb3IgKGxldCBwYWdlSW5kZXggPSAwOyBwYWdlSW5kZXggPCB0aGlzLnBhZ2VzLmxlbmd0aDsgcGFnZUluZGV4KyspIHtcbiAgICAgIGNvbnN0IHBhZ2UgPSB0aGlzLnBhZ2VzW3BhZ2VJbmRleF07XG5cbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIHBhZ2Uucm93cykge1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2Ygcm93LmdyaWQpIHtcbiAgICAgICAgICB0aGlzLmNoZWNrQW5kU3RvcmVJbnZhbGlkUXVlc3Rpb25zKFxuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIHF1ZXN0aW9uRXJyb3JzLFxuICAgICAgICAgICAgcGFnZUluZGV4XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tBbmRTdG9yZUludmFsaWRRdWVzdGlvbnMoXG4gICAgZWxlbWVudDogYW55LFxuICAgIHF1ZXN0aW9uRXJyb3JzOiBNYXA8c3RyaW5nLCBzdHJpbmc+LFxuICAgIHBhZ2VJbmRleDogbnVtYmVyXG4gICk6IHZvaWQge1xuICAgIGlmIChlbGVtZW50LmVsZW1lbnQuaWQgJiYgcXVlc3Rpb25FcnJvcnMuaGFzKGVsZW1lbnQuZWxlbWVudC5pZCkpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uuc2V0SW52YWxpZChcbiAgICAgICAgZWxlbWVudC5lbGVtZW50LmlkLFxuICAgICAgICBxdWVzdGlvbkVycm9ycy5nZXQoZWxlbWVudC5lbGVtZW50LmlkKSEsXG4gICAgICAgIHBhZ2VJbmRleFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgc3ViZm9ybXMgcmVjdXJzaXZlbHlcbiAgICBpZiAoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnU1VCRk9STScgJiYgZWxlbWVudC5lbGVtZW50LnJvd3MpIHtcbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIGVsZW1lbnQuZWxlbWVudC5yb3dzKSB7XG4gICAgICAgIGZvciAoY29uc3QgZ3JpZEl0ZW0gb2Ygcm93LmdyaWQpIHtcbiAgICAgICAgICB0aGlzLmNoZWNrQW5kU3RvcmVJbnZhbGlkUXVlc3Rpb25zKFxuICAgICAgICAgICAgZ3JpZEl0ZW0sXG4gICAgICAgICAgICBxdWVzdGlvbkVycm9ycyxcbiAgICAgICAgICAgIHBhZ2VJbmRleFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgKGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1FVRVNUSU9OX0dST1VQJyB8fFxuICAgICAgICBlbGVtZW50LmVudGl0eVR5cGUgPT09ICdNVUxUSUZJRUxEJykgJiZcbiAgICAgIGVsZW1lbnQuZWxlbWVudC5yb3dzXG4gICAgKSB7XG4gICAgICBmb3IgKGNvbnN0IHJvdyBvZiBlbGVtZW50LmVsZW1lbnQucm93cykge1xuICAgICAgICBmb3IgKGNvbnN0IGdyaWRJdGVtIG9mIHJvdy5ncmlkKSB7XG4gICAgICAgICAgdGhpcy5jaGVja0FuZFN0b3JlSW52YWxpZFF1ZXN0aW9ucyhcbiAgICAgICAgICAgIGdyaWRJdGVtLFxuICAgICAgICAgICAgcXVlc3Rpb25FcnJvcnMsXG4gICAgICAgICAgICBwYWdlSW5kZXhcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGxvZ2ljLWJhc2VkIGNvbmRpdGlvbnMgcmVjdXJzaXZlbHlcbiAgICBpZiAoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnUVVFU1RJT04nICYmIGVsZW1lbnQuZWxlbWVudC5jaGlsZExvZ2ljcykge1xuICAgICAgZm9yIChjb25zdCBsb2dpYyBvZiBlbGVtZW50LmVsZW1lbnQuY2hpbGRMb2dpY3MpIHtcbiAgICAgICAgaWYgKGxvZ2ljLnNob3dMb2dpYykge1xuICAgICAgICAgIGZvciAoY29uc3Qgcm93IG9mIGxvZ2ljLnJvd3MpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZ3JpZEl0ZW0gb2Ygcm93LmdyaWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5jaGVja0FuZFN0b3JlSW52YWxpZFF1ZXN0aW9ucyhcbiAgICAgICAgICAgICAgICBncmlkSXRlbSxcbiAgICAgICAgICAgICAgICBxdWVzdGlvbkVycm9ycyxcbiAgICAgICAgICAgICAgICBwYWdlSW5kZXhcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb2N1c1F1ZXN0aW9uRWxlbWVudChjb250YWluZXI6IEhUTUxFbGVtZW50KSB7XG4gICAgLy8gRmluZCBmaXJzdCBmb2N1c2FibGUgZWxlbWVudCB3aXRoaW4gdGhlIHF1ZXN0aW9uXG4gICAgY29uc3QgZm9jdXNhYmxlID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAnaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFt0YWJpbmRleF0nXG4gICAgKTtcbiAgICBpZiAoZm9jdXNhYmxlKSB7XG4gICAgICAoZm9jdXNhYmxlIGFzIEhUTUxFbGVtZW50KS5mb2N1cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250YWluZXIuZm9jdXMoKTtcbiAgICB9XG4gIH1cbiAgdmFsaWRhdGVGb3JtKGpzb25EYXRhOiBhbnkpOiB7XG4gICAgaXNWYWxpZDogYm9vbGVhbjtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgcGFnZUluZGV4OiBudW1iZXIgfCAwO1xuICB9IHtcbiAgICBjb25zdCB2YWxpZGF0ZVF1ZXN0aW9ucyA9IChcbiAgICAgIGZvcm1FbGVtZW50czogYW55W11cbiAgICApOiB7IGlzVmFsaWQ6IGJvb2xlYW47IG1lc3NhZ2U6IHN0cmluZzsgcGFnZUluZGV4OiBudW1iZXIgfCAwIH0gPT4ge1xuICAgICAgZm9yIChsZXQgZWxlbWVudCBvZiBmb3JtRWxlbWVudHMpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1FVRVNUSU9OJykge1xuICAgICAgICAgIGNvbnN0IHJlcXVpcmVkID0gZWxlbWVudC5lbGVtZW50LnJlcXVpcmVkO1xuICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGVsZW1lbnQuZWxlbWVudC5hbnN3ZXI7XG4gICAgICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IGVsZW1lbnQuZWxlbWVudC52YWxpZGF0aW9uO1xuICAgICAgICAgIGNvbnN0IHNob3cgPSBlbGVtZW50LnNob3c7XG4gICAgICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudC5mb3JtRWxlbWVudC5lbGVtZW50VHlwZSA9PT0gJ0ZJTEVfUElDS0VSJykge1xuICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudCA9IGVsZW1lbnQuZWxlbWVudC5hdHRhY2htZW50cztcbiAgICAgICAgICAgIGlmIChyZXF1aXJlZCkge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKCFhbnN3ZXIgfHwgYW5zd2VyPy5sZW5ndGggPT09IDApICYmXG4gICAgICAgICAgICAgICAgKCFhdHRhY2htZW50IHx8IGF0dGFjaG1lbnQ/Lmxlbmd0aCA9PSAwKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluVmFsaWRRdWVzdGlvbnMuc2V0KFxuICAgICAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LmlkLFxuICAgICAgICAgICAgICAgICAgJ1JlcXVpcmVkIGZpbGUgcXVlc3Rpb24gaGFzIG5vIGZpbGVzIHVwbG9hZGVkLidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBGb3JtIGlzIGludmFsaWQgLSBSZXF1aXJlZCBmaWxlIHF1ZXN0aW9uICR7ZWxlbWVudC5lbGVtZW50LnF1ZXN0aW9uTnVtYmVyfSBoYXMgbm8gZmlsZXMgdXBsb2FkZWQuYCxcbiAgICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChyZXF1aXJlZCAmJiBzaG93KSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBhbnN3ZXIgPT09IG51bGwgfHxcbiAgICAgICAgICAgICAgICBhbnN3ZXIgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgICh0eXBlb2YgYW5zd2VyID09PSAnc3RyaW5nJyAmJiBhbnN3ZXIudHJpbSgpID09PSAnJykgfHxcbiAgICAgICAgICAgICAgICAodHlwZW9mIGFuc3dlciA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoYW5zd2VyKS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5WYWxpZFF1ZXN0aW9ucy5zZXQoXG4gICAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuaWQsXG4gICAgICAgICAgICAgICAgICAnVGhpcyBpcyBhIHJlcXVpcmVkIHF1ZXN0aW9uJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYEZvcm0gaXMgaW52YWxpZCAtIFF1ZXN0aW9uICR7ZWxlbWVudC5lbGVtZW50LnF1ZXN0aW9uTnVtYmVyfSBpcyByZXF1aXJlZCBidXQgbm8gYW5zd2VyIHByb3ZpZGVkLmAsXG4gICAgICAgICAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5WYWxpZFF1ZXN0aW9ucy5zZXQoXG4gICAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuaWQsXG4gICAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQudmFsaWRhdGlvbk1lc3NhZ2VcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBGb3JtIGlzIGludmFsaWQgLSBRdWVzdGlvbiAke2VsZW1lbnQuZWxlbWVudC5xdWVzdGlvbk51bWJlcn0gaXMgcmVxdWlyZWQgYnV0IHZhbGlkYXRpb24gaXMgZmFsc2UuYCxcbiAgICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFyZXF1aXJlZCAmJiBhbnN3ZXIgJiYgT2JqZWN0LmtleXMoYW5zd2VyKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5WYWxpZFF1ZXN0aW9ucy5zZXQoXG4gICAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuaWQsXG4gICAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQudmFsaWRhdGlvbk1lc3NhZ2VcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBGb3JtIGlzIGludmFsaWQgLSBRdWVzdGlvbiAke2VsZW1lbnQuZWxlbWVudC5xdWVzdGlvbk51bWJlcn0gaXMgbm90IHJlcXVpcmVkIGJ1dCBhbnN3ZXIgcHJvdmlkZWQgd2l0aCB2YWxpZGF0aW9uIGZhbHNlLmAsXG4gICAgICAgICAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZWxlbWVudC5lbGVtZW50LmNoaWxkTG9naWNzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBsb2dpYyBvZiBlbGVtZW50LmVsZW1lbnQuY2hpbGRMb2dpY3MpIHtcbiAgICAgICAgICAgICAgaWYgKGxvZ2ljLnNob3dMb2dpYykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlUXVlc3Rpb25zKGxvZ2ljLnJvd3MpO1xuICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzVmFsaWQpIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnU1VCRk9STScgJiYgIWVsZW1lbnQuZWxlbWVudC5kZWxldGVkKSB7XG4gICAgICAgICAgaWYoZWxlbWVudC5lbGVtZW50LnByb3BlcnR5Py5zdWJGb3JtU3RydWN0dXJlID09ICdzaW5nbGUnKXtcbiAgICAgICAgICAgIGZvcihsZXQgcm93IG9mIGVsZW1lbnQuZWxlbWVudC5yb3dzKXtcbiAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGVRdWVzdGlvbnMocm93LmdyaWQpO1xuICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5pc1ZhbGlkKSByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlU3ViRm9ybShlbGVtZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgKGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1FVRVNUSU9OX0dST1VQJyB8fFxuICAgICAgICAgICAgZWxlbWVudC5lbnRpdHlUeXBlID09PSAnTVVMVElGSUVMRCcpICYmXG4gICAgICAgICAgZWxlbWVudC5lbGVtZW50LnJvd3NcbiAgICAgICAgKSB7XG4gICAgICAgICAgZm9yIChjb25zdCByb3cgb2YgZWxlbWVudC5lbGVtZW50LnJvd3MpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlUXVlc3Rpb25zKHJvdy5ncmlkKTtcbiAgICAgICAgICAgIGlmICghcmVzdWx0LmlzVmFsaWQgJiYgZWxlbWVudC5lbnRpdHlUeXBlICE9ICdNVUxUSUZJRUxEJylcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIG1lc3NhZ2U6ICcnLCBwYWdlSW5kZXg6IDAgfTtcbiAgICB9O1xuXG4gICAgZm9yIChsZXQgcGFnZUluZGV4ID0gMDsgcGFnZUluZGV4IDwganNvbkRhdGEubGVuZ3RoOyBwYWdlSW5kZXgrKykge1xuICAgICAgY29uc3QgcGFnZSA9IGpzb25EYXRhW3BhZ2VJbmRleF07XG4gICAgICBmb3IgKGxldCByb3cgb2YgcGFnZS5yb3dzKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlUXVlc3Rpb25zKHJvdy5ncmlkKTtcbiAgICAgICAgdGhpcy5pblZhbGlkUXVlc3Rpb25zLmZvckVhY2goKG1lc3NhZ2U6IHN0cmluZywgaWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uuc2V0SW52YWxpZChpZCwgbWVzc2FnZSwgcGFnZUluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaW5WYWxpZFF1ZXN0aW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgICAgIC8vIGlmICghcmVzdWx0LmlzVmFsaWQpIHtcbiAgICAgICAgLy8gICByZXR1cm4ge1xuICAgICAgICAvLyAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgIC8vICAgICBtZXNzYWdlOiBgUGFnZSAke3BhZ2VJbmRleCArIDF9OiAke3Jlc3VsdC5tZXNzYWdlfWAsXG4gICAgICAgIC8vICAgICBwYWdlSW5kZXg6IHBhZ2VJbmRleCxcbiAgICAgICAgLy8gICB9O1xuICAgICAgICAvLyB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleCA9IGpzb25EYXRhLmxlbmd0aCAtIDE7XG4gICAgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuZ2V0Rmlyc3RJbnZhbGlkKCkpIHtcbiAgICAgIHRoaXMubmF2aWdhdGVUb0ZpcnN0RXJyb3IoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiBgUGFnZWAsXG4gICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpc1ZhbGlkOiB0cnVlLFxuICAgICAgbWVzc2FnZTogJ0Zvcm0gaXMgdmFsaWQuJyxcbiAgICAgIHBhZ2VJbmRleDogMCxcbiAgICB9O1xuICB9XG5cbiAgdmFsaWRhdGVTdWJGb3JtKGVsZW1lbnQ6IGFueSkge1xuICAgIGlmIChlbGVtZW50LmVudGl0eVR5cGUgIT09ICdTVUJGT1JNJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgXG4gICAgY29uc3Qgc3VibWlzc2lvbnMgPSBlbGVtZW50LmVsZW1lbnQ/LnN1Ym1pc3Npb25zIHx8IFtdO1xuICBcbiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKiAx77iP4oOjIFN1YmZvcm0gcmVxdWlyZWQgYnV0IG5vIHN1Ym1pc3Npb25cbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbiAgICBpZiAoZWxlbWVudC5lbGVtZW50Py5yZXF1aXJlZCAmJiBzdWJtaXNzaW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuaW5WYWxpZFF1ZXN0aW9ucy5zZXQoXG4gICAgICAgIGVsZW1lbnQuZWxlbWVudC5pZCxcbiAgICAgICAgJ0F0IGxlYXN0IG9uZSBzdWJtaXNzaW9uIGlzIHJlcXVpcmVkJ1xuICAgICAgKTtcbiAgICAgIHJldHVybjsgLy8gbm90aGluZyBlbHNlIHRvIHZhbGlkYXRlXG4gICAgfVxuICBcbiAgICBzdWJtaXNzaW9ucy5mb3JFYWNoKChzdWJtaXNzaW9uOiBhbnksIHN1Ym1pc3Npb25JbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBhbnN3ZXJzID0gc3VibWlzc2lvbi5hbnN3ZXJzIHx8IFtdO1xuICBcbiAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICogMu+4j+KDoyBTdWJtaXNzaW9uIGV4aXN0cyBidXQgbm8gYW5zd2Vyc1xuICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4gICAgICBjb25zdCBoYXNBbnlBbnN3ZXIgPSBhbnN3ZXJzLnNvbWUoXG4gICAgICAgIChhOiBhbnkpID0+XG4gICAgICAgICAgYS5hbnN3ZXIgIT09IG51bGwgJiZcbiAgICAgICAgICBhLmFuc3dlciAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgYS5hbnN3ZXIgIT09ICcnICYmXG4gICAgICAgICAgIShBcnJheS5pc0FycmF5KGEuYW5zd2VyKSAmJiBhLmFuc3dlci5sZW5ndGggPT09IDApXG4gICAgICApO1xuICBcbiAgICAgIGlmIChlbGVtZW50LmVsZW1lbnQ/LnJlcXVpcmVkICYmICFoYXNBbnlBbnN3ZXIpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYCR7ZWxlbWVudC5lbGVtZW50LmlkfWA7XG4gICAgICAgIHRoaXMuaW5WYWxpZFF1ZXN0aW9ucy5zZXQoXG4gICAgICAgICAga2V5LFxuICAgICAgICAgICdBdCBsZWFzdCBvbmUgYW5zd2VyIGlzIHJlcXVpcmVkIGluIHRoZSBzdWJmb3JtJ1xuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gIFxuICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgKiAz77iP4oOjIEV4aXN0aW5nIHF1ZXN0aW9uLWxldmVsIHZhbGlkYXRpb25zXG4gICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbiAgICAgIGFuc3dlcnMuZm9yRWFjaCgoYW5zd2VyT2JqOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLmZpbmRRdWVzdGlvbkJ5SWQoXG4gICAgICAgICAgZWxlbWVudC5lbGVtZW50LnJvd3MsXG4gICAgICAgICAgYW5zd2VyT2JqLnF1ZXN0aW9uSWRcbiAgICAgICAgKTtcbiAgXG4gICAgICAgIGNvbnN0IGFucyA9IGFuc3dlck9iai5hbnN3ZXI7XG4gIFxuICAgICAgICAvLyBSZXF1aXJlZCBxdWVzdGlvbiBjaGVja1xuICAgICAgICBpZiAoKHF1ZXN0aW9uPy5yZXF1aXJlZCB8fCBhbnN3ZXJPYmoucmVxdWlyZWQpICYmXG4gICAgICAgICAgICAoYW5zID09PSAnJyB8fCBhbnMgPT09IG51bGwgfHwgYW5zID09PSB1bmRlZmluZWQgfHwgYW5zPy5sZW5ndGggPT09IDApKSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gYCR7c3VibWlzc2lvbkluZGV4fS0ke3F1ZXN0aW9uLmlkfWA7XG4gICAgICAgICAgdGhpcy5pblZhbGlkUXVlc3Rpb25zLnNldChrZXksICdUaGlzIGlzIGEgcmVxdWlyZWQgcXVlc3Rpb24nKTtcbiAgICAgICAgfVxuICBcbiAgICAgICAgLy8gRW1haWwgdmFsaWRhdGlvblxuICAgICAgICBpZiAocXVlc3Rpb24/LmZvcm1FbGVtZW50Py5lbGVtZW50VHlwZSA9PT0gJ0VNQUlMJyAmJiBhbnMpIHtcbiAgICAgICAgICBjb25zdCBlbWFpbFJlZ2V4ID0gL15bXlxcc0BdK0BbXlxcc0BdK1xcLlteXFxzQF0rJC87XG4gICAgICAgICAgaWYgKCFlbWFpbFJlZ2V4LnRlc3QoYW5zKSkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gYCR7c3VibWlzc2lvbkluZGV4fS0ke3F1ZXN0aW9uLmlkfWA7XG4gICAgICAgICAgICB0aGlzLmluVmFsaWRRdWVzdGlvbnMuc2V0KFxuICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIFxuXG4gIC8vIPCflI0gSGVscGVyOiBmaW5kIHF1ZXN0aW9uIGRlZmluaXRpb24gaW5zaWRlIHJvd3NcbiAgcHJpdmF0ZSBmaW5kUXVlc3Rpb25CeUlkKHJvd3M6IGFueVtdLCBxdWVzdGlvbklkOiBzdHJpbmcpOiBhbnkge1xuICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgIGZvciAoY29uc3QgZ3JpZEVsZW1lbnQgb2Ygcm93LmdyaWQpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGdyaWRFbGVtZW50LmVudGl0eVR5cGUgPT09ICdRVUVTVElPTicgJiZcbiAgICAgICAgICBncmlkRWxlbWVudC5lbGVtZW50LmlkID09PSBxdWVzdGlvbklkXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBncmlkRWxlbWVudC5lbGVtZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdXBkYXRlU3ViRm9ybVdpdGhTdWJtaXNzaW9ucyhldmVudDogYW55KSB7XG4gICAgdGhpcy51cGRhdGVTdWJGb3JtKHRoaXMucGFnZXMsIGV2ZW50KTtcbiAgfVxuXG4gIHVwZGF0ZVN1YkZvcm0gPSAocGFnZXM6IGFueVtdLCB1cGRhdGVkU3ViRm9ybTogYW55KSA9PiB7XG4gICAgcGFnZXMuZm9yRWFjaCgocGFnZSkgPT4ge1xuICAgICAgcGFnZS5yb3dzLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgIHJvdy5ncmlkLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1NVQkZPUk0nICYmXG4gICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuaWQgPT09IHVwZGF0ZWRTdWJGb3JtLmlkXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGV4aXN0aW5nIHN1YmZvcm0gd2l0aCB0aGUgbmV3IGRhdGFcbiAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudCA9IHVwZGF0ZWRTdWJGb3JtO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBlbGVtZW50LmVudGl0eVR5cGUgPT09ICdTVUJGT1JNJyAmJlxuICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LmlkICE9PSB1cGRhdGVkU3ViRm9ybS5mb3JtSWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBtdWx0aXBsZSBzdWJmb3JtcyBsb2dpYyBoZXJlIGlmIG5lZWRlZFxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBlbGVtZW50LmVudGl0eVR5cGUgPT09ICdRVUVTVElPTicgJiZcbiAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5jaGlsZExvZ2ljc1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgdXBkYXRlIGNoaWxkIGxvZ2ljc1xuICAgICAgICAgICAgLy8gZWxlbWVudC5lbGVtZW50LmNoaWxkTG9naWNzLmZvckVhY2goKGxvZ2ljOiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8vICAgaWYgKGxvZ2ljLnNob3dMb2dpYykge1xuICAgICAgICAgICAgLy8gICAgIHRoaXMudXBkYXRlU3ViRm9ybShsb2dpYy5yb3dzLCB1cGRhdGVkU3ViRm9ybSk7XG4gICAgICAgICAgICAvLyAgIH1cbiAgICAgICAgICAgIC8vIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBleHRyYWN0R3JvdXBlZFdlYmhvb2tEYXRhKHdlYmhvb2tzOiBhbnlbXSk6IHtcbiAgICBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBwYXRoVmFyaWFibGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHJlcXVlc3RCb2RpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIH0ge1xuICAgIGNvbnN0IHJlc3VsdDoge1xuICAgICAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICAgIHBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICAgIHBhdGhWYXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgICByZXF1ZXN0Qm9kaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIH0gPSB7XG4gICAgICBoZWFkZXJzOiB7fSxcbiAgICAgIHBhcmFtczoge30sXG4gICAgICBwYXRoVmFyaWFibGVzOiB7fSxcbiAgICAgIHJlcXVlc3RCb2RpZXM6IHt9LFxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IHdlYmhvb2sgb2Ygd2ViaG9va3MgPz8gW10pIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB3ZWJob29rPy5oZWFkZXJzID8/IFtdKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZUZyb21TdG9yYWdlKGl0ZW0udmFsdWVTb3VyY2UsIGl0ZW0uaW5wdXRWYWx1ZSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHJlc3VsdC5oZWFkZXJzW2l0ZW0ua2V5TmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygd2ViaG9vaz8ucGFyYW1zID8/IFtdKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZUZyb21TdG9yYWdlKGl0ZW0udmFsdWVTb3VyY2UsIGl0ZW0uaW5wdXRWYWx1ZSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHJlc3VsdC5wYXJhbXNbaXRlbS5rZXlOYW1lXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB3ZWJob29rPy5wYXRoVmFyaWFibGVzID8/IFtdKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZUZyb21TdG9yYWdlKGl0ZW0udmFsdWVTb3VyY2UsIGl0ZW0uaW5wdXRWYWx1ZSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHJlc3VsdC5wYXRoVmFyaWFibGVzW2l0ZW0ua2V5TmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygd2ViaG9vaz8ucmVxdWVzdEJvZGllcyA/PyBbXSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWVGcm9tU3RvcmFnZShpdGVtLnZhbHVlU291cmNlLCBpdGVtLmlucHV0VmFsdWUpO1xuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICByZXN1bHQucmVxdWVzdEJvZGllc1tpdGVtLmtleU5hbWVdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZ2V0VmFsdWVGcm9tU3RvcmFnZShcbiAgICBzb3VyY2U6ICdMT0NBTF9TVE9SQUdFJyB8ICdTRVNTSU9OX1NUT1JBR0UnLFxuICAgIGtleTogc3RyaW5nXG4gICk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmIChzb3VyY2UgPT09ICdMT0NBTF9TVE9SQUdFJykgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgaWYgKHNvdXJjZSA9PT0gJ1NFU1NJT05fU1RPUkFHRScpIHJldHVybiBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjYW5jZWxsZWQoKXtcbiAgICB0aGlzLmNhbmNlbC5lbWl0KCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJvdXRlci1jb250YWluZXJcIj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTG9hZGluZ1BhZ2VzXCI+XG4gICAgPG5neC1za2VsZXRvbi1sb2FkZXIgY291bnQ9XCI1XCI+PC9uZ3gtc2tlbGV0b24tbG9hZGVyPlxuPC9uZy1jb250YWluZXI+XG5cbiAgPGRpdiBjbGFzcz1cImhlYWQgY29udGFpbmVyXCIgKm5nSWY9XCIhc2tpcE1hcmdpblwiPlxuICAgIDxsaWItaGVhZGVyIFtuYW1lXT1cIm5hbWVcIiBbc2tpcE1hcmdpbl09XCJza2lwTWFyZ2luXCI+PC9saWItaGVhZGVyPlxuICA8L2Rpdj5cblxuXG5cbiAgPGRpdiBjbGFzcz1cImJvZHlcIiBbbmdDbGFzc109XCJ7ICdza2lwLW1hcmdpbic6IHNraXBNYXJnaW4sY29udGFpbmVyOiAhc2tpcE1hcmdpbn1cIj5cblxuICAgIDxsaWItc3VibWlzc2lvbi1jb250YWluZXIgW3BhcmVudFF1ZXN0aW9uQW5zd2Vyc109XCJwYXJlbnRRdWVzdGlvbkFuc3dlcnNcIlxuICAgICpuZ0lmPVwicGFyZW50UXVlc3Rpb25BbnN3ZXJzXCI+PC9saWItc3VibWlzc2lvbi1jb250YWluZXI+XG5cbiAgICA8bGliLW5hdmlnYXRpb24tdGFic1xuICAgICAgKm5nSWY9XCJuYXZpZ2F0aW9uID09ICdUQUInXCJcbiAgICAgIFtza2lwTWFyZ2luXT1cInNraXBNYXJnaW5cIlxuICAgICAgW3NraXBWYWxpZGF0aW9uXT1cInNraXBWYWxpZGF0aW9uXCJcbiAgICAgIFtwYWdlc109XCJwYWdlc1wiXG4gICAgICBbY3VycmVudFBhZ2VJbmRleF09XCJjdXJyZW50UGFnZUluZGV4XCJcbiAgICAgIChwYWdlQ2hhbmdlZCk9XCJzZXRDdXJyZW50UGFnZSgkZXZlbnQpXCJcbiAgICAgIChzdWJtaXRFbWl0KT1cInN1Ym1pdEZvcm0oKVwiXG4gICAgICBbcGFnZURldGFpbHNdPVwicGFnZURldGFpbHNcIlxuICAgICAgW2VsaWdpYmxlRm9yU3VibWlzc2lvbl09XCJlbGlnaWJsZUZvclN1Ym1pc3Npb25cIlxuICAgICAgW2VkaXRdPVwiZWRpdFwiXG4gICAgICBbYWNjZXB0ZWRMYW5ndWFnZV0gPSBcImFjY2VwdGVkTGFuZ3VhZ2VcIlxuICAgICAgW2lzQWN0aW9uVHJpZ2dlcmVkXT1cImlzQWN0aW9uVHJpZ2dlcmVkXCJcbiAgICAgIFtwcmltYXJ5Q29sb3JdPVwicHJpbWFyeUNvbG9yXCJcbiAgICAgIFtzZWNvbmRhcnlDb2xvcl09XCJzZWNvbmRhcnlDb2xvclwiXG4gICAgICBbbWFya0FsbFF1ZXN0aW9uc0FzUmVxdWlyZWRdPVwibWFya0FsbFF1ZXN0aW9uc0FzUmVxdWlyZWRcIlxuICAgICAgW3N1Ym1pc3Npb25JblByb2dyZXNzXT1cInN1Ym1pc3Npb25JblByb2dyZXNzXCJcbiAgICAgIFtzdWJtaXNzaW9uSW5EcmFmdF09XCJzdWJtaXNzaW9uSW5EcmFmdFwiXG4gICAgICBbc2hvd0NhbmNlbEJ1dHRvbl09XCJzaG93Q2FuY2VsQnV0dG9uXCJcbiAgICAgIFtzdWJtaXNzaW9uUHJvZ3Jlc3NdPVwic3VibWlzc2lvblByb2dyZXNzXCJcbiAgICAgIFthbmltYXRlZERvdHNdPVwiYW5pbWF0ZWREb3RzXCJcbiAgICAgIFtjdXJyZW50U3RlcF09XCJjdXJyZW50U3RlcFwiXG4gICAgICAoc2F2ZUFzRHJhZnRFbWl0KT1cInNhdmVBc0RyYWZ0KClcIlxuICAgICAgKHN1YkZvcm1DaGFuZ2UpPVwidXBkYXRlU3ViRm9ybVdpdGhTdWJtaXNzaW9ucygkZXZlbnQpXCJcbiAgICAgIChyb3dTZXRJbmRleCk9XCJsb2FkTW9yZURhdGEoJGV2ZW50KVwiXG4gICAgICAoY2FuY2VsKT1cImNhbmNlbGxlZCgpXCJcbiAgICA+PC9saWItbmF2aWdhdGlvbi10YWJzPlxuICAgIDxsaWItbmV4dC1wcmV2LW5hdmlnYXRpb25cbiAgICAgICpuZ0lmPVwibmF2aWdhdGlvbiA9PSAnTkVYVF9BTkRfUFJFVklPVVNfQlVUVE9OJ1wiXG4gICAgICBbc2tpcE1hcmdpbl09XCJza2lwTWFyZ2luXCJcbiAgICAgIFtjdXJyZW50UGFnZUluZGV4XT1cImN1cnJlbnRQYWdlSW5kZXhcIlxuICAgICAgW3BhZ2VEZXRhaWxzXT1cInBhZ2VEZXRhaWxzXCJcbiAgICAgIChyb3dTZXRJbmRleCk9XCJsb2FkTW9yZURhdGEoJGV2ZW50KVwiXG4gICAgICBbcGFnZXNdPVwicGFnZXNcIlxuICAgICAgW3ByZXZpb3VzUGFnZV09XCJwcmV2aW91c1BhZ2VcIlxuICAgICAgW2lzQWN0aW9uVHJpZ2dlcmVkXT1cImlzQWN0aW9uVHJpZ2dlcmVkXCJcbiAgICAgIFtjdXJyZW50UGFnZV09XCJjdXJyZW50UGFnZVwiXG4gICAgICBbcHJpbWFyeUNvbG9yXT1cInByaW1hcnlDb2xvclwiXG4gICAgICBbc2Vjb25kYXJ5Q29sb3JdPVwic2Vjb25kYXJ5Q29sb3JcIlxuICAgICAgW25leHRQYWdlXT1cIm5leHRQYWdlXCJcbiAgICAgIChuYXZpZ2F0ZU5leHQpPVwibmF2aWdhdGVUb05leHRQYWdlKClcIlxuICAgICAgKG5hdmlnYXRlUHJldmlvdXMpPVwibmF2aWdhdGVUb1ByZXZpb3VzUGFnZSgpXCJcbiAgICAgIFthY2NlcHRlZExhbmd1YWdlXSA9IFwiYWNjZXB0ZWRMYW5ndWFnZVwiXG4gICAgICAoc3VibWl0RW1pdCk9XCJzdWJtaXRGb3JtKClcIlxuICAgICAgKHNhdmVBc0RyYWZ0RW1pdCk9XCJzYXZlQXNEcmFmdCgpXCJcbiAgICAgIFtlZGl0XT1cImVkaXRcIlxuICAgICAgW2VsaWdpYmxlRm9yU3VibWlzc2lvbl09XCJlbGlnaWJsZUZvclN1Ym1pc3Npb25cIlxuICAgICAgW3N1Ym1pc3Npb25JblByb2dyZXNzXT1cInN1Ym1pc3Npb25JblByb2dyZXNzXCJcbiAgICAgIFtzdWJtaXNzaW9uSW5EcmFmdF09XCJzdWJtaXNzaW9uSW5EcmFmdFwiXG4gICAgICBbc2hvd0NhbmNlbEJ1dHRvbl09XCJzaG93Q2FuY2VsQnV0dG9uXCJcbiAgICAgIFtzdWJtaXNzaW9uUHJvZ3Jlc3NdPVwic3VibWlzc2lvblByb2dyZXNzXCJcbiAgICAgIFthbmltYXRlZERvdHNdPVwiYW5pbWF0ZWREb3RzXCJcbiAgICAgIFtjdXJyZW50U3RlcF09XCJjdXJyZW50U3RlcFwiXG4gICAgICAoc3ViRm9ybUNoYW5nZSk9XCJ1cGRhdGVTdWJGb3JtV2l0aFN1Ym1pc3Npb25zKCRldmVudClcIlxuICAgICAgKGNhbmNlbCk9XCJjYW5jZWxsZWQoKVwiXG4gICAgICAgW3NraXBWYWxpZGF0aW9uXT1cInNraXBWYWxpZGF0aW9uXCJcbiAgICA+PC9saWItbmV4dC1wcmV2LW5hdmlnYXRpb24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=