vcomply-workflow-engine 3.4.23 → 3.4.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/esm2020/lib/add-multiple-responsibility/add-multiple-responsibility.component.mjs +2 -4
  2. package/esm2020/lib/add-multiple-risk/add-multiple-risk.component.mjs +2 -3
  3. package/esm2020/lib/formgroup/cs-select/cs-select.component.mjs +5 -5
  4. package/esm2020/lib/formgroup/cs-switch/cs-switch.component.mjs +1 -4
  5. package/esm2020/lib/log-an-issue/log-an-issue.component.mjs +1 -11
  6. package/esm2020/lib/more-option/more-option.component.mjs +5 -6
  7. package/esm2020/lib/pipes/filter.pipe.mjs +1 -2
  8. package/esm2020/lib/pipes/search.pipe.mjs +3 -5
  9. package/esm2020/lib/sharedComponents/approval-workflow/approval-create-form/approval-create-form.component.mjs +3 -7
  10. package/esm2020/lib/sharedComponents/approval-workflow/approval-workflow-list/approval-workflow-list.component.mjs +1 -5
  11. package/esm2020/lib/sharedComponents/approval-workflow/approval-workflow.component.mjs +1 -7
  12. package/esm2020/lib/sharedComponents/assessment-editor/create-assessment-container/create-assessment-container.component.mjs +80 -36
  13. package/esm2020/lib/sharedComponents/assessment-list/assessment-list.component.mjs +27 -21
  14. package/esm2020/lib/sharedComponents/assessment-preview/preview/preview.component.mjs +7 -4
  15. package/esm2020/lib/sharedComponents/audit-category-list/audit-category-list.component.mjs +3 -4
  16. package/esm2020/lib/sharedComponents/bulk-responsibility-view/bulk-responsibility-view.component.mjs +3 -9
  17. package/esm2020/lib/sharedComponents/bulk-view/bulk-view.component.mjs +9 -7
  18. package/esm2020/lib/sharedComponents/category-multiselect/category-multi-select.component.mjs +7 -9
  19. package/esm2020/lib/sharedComponents/checkpoint/checkpoints/checkpoints.component.mjs +93 -27
  20. package/esm2020/lib/sharedComponents/checkpoint/checkpoints-questions/checkpoints-questions.component.mjs +11 -9
  21. package/esm2020/lib/sharedComponents/checkpoint-policy/checkpoints-policy-container/checkpoints-policy-container.component.mjs +13 -12
  22. package/esm2020/lib/sharedComponents/checkpoint-policy/checkpoints-policy-questions/checkpoints-policy-questions.component.mjs +28 -19
  23. package/esm2020/lib/sharedComponents/floating-bar/floating-bar.component.mjs +8 -8
  24. package/esm2020/lib/sharedComponents/format-and-evidence/format-and-evidence.component.mjs +35 -37
  25. package/esm2020/lib/sharedComponents/framework-list/parent-table/parent-table.component.mjs +7 -7
  26. package/esm2020/lib/sharedComponents/frequency/frequency-biannual/frequency-biannual.component.mjs +1 -12
  27. package/esm2020/lib/sharedComponents/frequency/frequency-container/frequency-container.component.mjs +1 -3
  28. package/esm2020/lib/sharedComponents/frequency/frequency-daily/frequency-daily.component.mjs +1 -13
  29. package/esm2020/lib/sharedComponents/frequency/frequency-due-date/frequency-due-date.component.mjs +1 -7
  30. package/esm2020/lib/sharedComponents/frequency/frequency-lifecycle/frequency-lifecycle.component.mjs +1 -26
  31. package/esm2020/lib/sharedComponents/frequency/frequency-monthly/frequency-monthly.component.mjs +1 -15
  32. package/esm2020/lib/sharedComponents/frequency/frequency-one-time/frequency-one-time.component.mjs +1 -14
  33. package/esm2020/lib/sharedComponents/frequency/frequency-ongoing/frequency-ongoing.component.mjs +14 -8
  34. package/esm2020/lib/sharedComponents/frequency/frequency-quarterly/frequency-quarterly.component.mjs +1 -13
  35. package/esm2020/lib/sharedComponents/frequency/frequency-radio-list/frequency-radio-list.component.mjs +1 -2
  36. package/esm2020/lib/sharedComponents/frequency/frequency-random/frequency-random.component.mjs +1 -18
  37. package/esm2020/lib/sharedComponents/frequency/frequency-top/frequency-top.component.mjs +2 -2
  38. package/esm2020/lib/sharedComponents/frequency/frequency-weekly/frequency-weekly.component.mjs +1 -12
  39. package/esm2020/lib/sharedComponents/frequency/frequency.service.mjs +2 -11
  40. package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-annual/frequency-dialog-annual.component.mjs +1 -2
  41. package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-biannual/frequency-dialog-biannual.component.mjs +1 -2
  42. package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-monthly/frequency-dialog-monthly.component.mjs +1 -2
  43. package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-one-time/frequency-dialog-one-time.component.mjs +1 -2
  44. package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-quarterly/frequency-dialog-quarterly.component.mjs +1 -2
  45. package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-radio-list/frequency-dialog-radio-list.component.mjs +1 -2
  46. package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-top/frequency-dialog-top.component.mjs +2 -2
  47. package/esm2020/lib/sharedComponents/group-users-list/group-users-list.component.mjs +1 -3
  48. package/esm2020/lib/sharedComponents/link-program/link-program/link-program.component.mjs +48 -38
  49. package/esm2020/lib/sharedComponents/link-program/restapi.service.mjs +31 -16
  50. package/esm2020/lib/sharedComponents/no-data/no-data.component.mjs +2 -4
  51. package/esm2020/lib/sharedComponents/owner-list/owner-list.component.mjs +12 -10
  52. package/esm2020/lib/sharedComponents/program-listing/program-listing.component.mjs +127 -58
  53. package/esm2020/lib/sharedComponents/radio-list-with-pagination/radio-list.component.mjs +4 -7
  54. package/esm2020/lib/sharedComponents/responsibility-centers-list/responsibility-centers-list.component.mjs +9 -7
  55. package/esm2020/lib/sharedComponents/risk-classification/risk-classification.component.mjs +11 -6
  56. package/esm2020/lib/sharedComponents/select-approvers/select-approvers.component.mjs +1 -2
  57. package/esm2020/lib/sharedComponents/users-radio-list/users-radio-list.component.mjs +2 -3
  58. package/esm2020/lib/ui-kit/formgroup/cs-switch/cs-switch.component.mjs +1 -4
  59. package/esm2020/lib/ui-kit/popover/popover-longpress.directive.mjs +1 -3
  60. package/esm2020/lib/ui-kit/popover/popover.component.mjs +26 -12
  61. package/esm2020/lib/ui-kit/tooltip/tooltip.directive.mjs +8 -5
  62. package/esm2020/lib/workflow/shared/components/attributes/attributes.component.mjs +1 -2
  63. package/esm2020/lib/workflow/shared/components/edit-mode/edit-mode.component.mjs +1 -4
  64. package/esm2020/lib/workflow/shared/components/grc-object-list/grc-object-list.component.mjs +1 -2
  65. package/esm2020/lib/workflow/shared/components/list-popup/list-popup.component.mjs +1 -4
  66. package/esm2020/lib/workflow/shared/components/table-card/table-card.component.mjs +4 -8
  67. package/esm2020/lib/workflow-assessment/import-an-assessment/import-an-assessment.component.mjs +245 -108
  68. package/esm2020/lib/workflow-assessment/workflow-assessment.component.mjs +2 -4
  69. package/esm2020/lib/workflow-compliance/workflow-compliance.component.mjs +10 -8
  70. package/esm2020/lib/workflow-engine-container/workflow-engine-container.component.mjs +1 -5
  71. package/esm2020/lib/workflow-program/create-program-ui/assessment-picker/assessment-picker.component.mjs +45 -45
  72. package/esm2020/lib/workflow-program/create-program-ui/define-framework-listing/define-framework-listing.component.mjs +43 -25
  73. package/esm2020/lib/workflow-program/create-program-ui/define-framework-listing/pipes/sub-cat-indeter.pipe.mjs +4 -4
  74. package/esm2020/lib/workflow-program/create-program-ui/floating-bar/floating-bar.component.mjs +1 -2
  75. package/esm2020/lib/workflow-program/create-program-ui/pagination/pagination/pagination.component.mjs +25 -14
  76. package/esm2020/lib/workflow-program/create-program-ui/pipes/assessment-resolver.pipe.mjs +6 -3
  77. package/esm2020/lib/workflow-program/create-program-ui/role-list/role-list.component.mjs +25 -19
  78. package/esm2020/lib/workflow-program/create-program-ui/user-group-list/user-group-list.component.mjs +1 -4
  79. package/esm2020/lib/workflow-program/workflow-program.component.mjs +232 -110
  80. package/esm2020/lib/workflow-services/add-risk.service.mjs +1 -2
  81. package/esm2020/lib/workflow-services/assessment.service.mjs +1 -5
  82. package/esm2020/lib/workflow-services/programs.service.mjs +173 -57
  83. package/fesm2015/vcomply-workflow-engine.mjs +1381 -937
  84. package/fesm2015/vcomply-workflow-engine.mjs.map +1 -1
  85. package/fesm2020/vcomply-workflow-engine.mjs +1394 -945
  86. package/fesm2020/vcomply-workflow-engine.mjs.map +1 -1
  87. package/lib/formgroup/cs-switch/cs-switch.component.d.ts +2 -3
  88. package/lib/sharedComponents/assessment-list/assessment-list.component.d.ts +4 -5
  89. package/lib/sharedComponents/bulk-responsibility-view/bulk-responsibility-view.component.d.ts +2 -3
  90. package/lib/sharedComponents/bulk-view/bulk-view.component.d.ts +2 -3
  91. package/lib/sharedComponents/frequency/frequency-lifecycle/frequency-lifecycle.component.d.ts +2 -4
  92. package/lib/sharedComponents/frequency/frequency-ongoing/frequency-ongoing.component.d.ts +1 -1
  93. package/lib/sharedComponents/link-program/restapi.service.d.ts +3 -3
  94. package/lib/sharedComponents/no-data/no-data.component.d.ts +2 -4
  95. package/lib/ui-kit/formgroup/cs-switch/cs-switch.component.d.ts +2 -3
  96. package/lib/workflow/shared/components/edit-mode/edit-mode.component.d.ts +2 -3
  97. package/lib/workflow/shared/components/list-popup/list-popup.component.d.ts +2 -3
  98. package/lib/workflow/shared/components/table-card/table-card.component.d.ts +2 -5
  99. package/lib/workflow-program/create-program-ui/assessment-picker/assessment-picker.component.d.ts +8 -9
  100. package/lib/workflow-program/create-program-ui/pagination/pagination/pagination.component.d.ts +2 -4
  101. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { Component, Input, EventEmitter, Output, HostListener } from '@angular/core';
1
+ import { Component, Input, EventEmitter, Output, HostListener, } from '@angular/core';
2
2
  import { AddPageDetailsComponent } from '../components/add-page-details/add-page-details.component';
3
3
  import { AssessmentSettingsComponent } from '../components/assessment-settings/assessment-settings.component';
4
4
  import { EditorService } from '../services/editor.service';
@@ -42,7 +42,7 @@ export class CreateAssessmentContainerComponent {
42
42
  this.setIsUploaded = new EventEmitter();
43
43
  this.postAssessment = new EventEmitter();
44
44
  this.entitySettings = {
45
- panelTitle: ''
45
+ panelTitle: '',
46
46
  };
47
47
  }
48
48
  set assessmentData(value) {
@@ -73,23 +73,27 @@ export class CreateAssessmentContainerComponent {
73
73
  }
74
74
  }
75
75
  initializeCheckpoint(checkpointData) {
76
- console.log("initializeCheckpoint ==>", checkpointData);
77
76
  if (checkpointData && Object.keys(checkpointData)?.length > 0) {
78
77
  this.editorService.formsPage = checkpointData;
79
78
  }
80
79
  }
81
80
  setAllPages() {
82
- this.editorService.allPages = [...new Set(this.editorService.formsPage.elements.map((ele) => ele.page))];
81
+ this.editorService.allPages = [
82
+ ...new Set(this.editorService.formsPage.elements.map((ele) => ele.page)),
83
+ ];
83
84
  this.getPageName(1);
84
85
  }
85
86
  addPageDetails() {
86
87
  const ref = this.dialog.open(AddPageDetailsComponent, {
87
- data: { page: this.editorService.currentPageNumber, pageDetails: this.editorService.currentPageDetails, ref: this.editorService },
88
+ data: {
89
+ page: this.editorService.currentPageNumber,
90
+ pageDetails: this.editorService.currentPageDetails,
91
+ ref: this.editorService,
92
+ },
88
93
  position: 'RIGHT',
89
94
  background: 'black',
90
95
  });
91
96
  ref.afterClosed.subscribe((data) => {
92
- console.log("data ====>", data, this.editorService.stepIdentifier, this.editorService.showAddPageOption, this.editorService.showPageDetails);
93
97
  this.generatePageDropdown();
94
98
  });
95
99
  }
@@ -104,7 +108,7 @@ export class CreateAssessmentContainerComponent {
104
108
  getSettingsData() {
105
109
  let settings = {
106
110
  panelTitle: `Assessment settings`,
107
- settingsElements: []
111
+ settingsElements: [],
108
112
  };
109
113
  settings.settingsElements.push({
110
114
  type: 'ASSESSMENT',
@@ -118,7 +122,7 @@ export class CreateAssessmentContainerComponent {
118
122
  weightageEnabled: this.editorService.formsPage.settings.weightageEnabled,
119
123
  settingTitle: 'ASSESSMENT MODE',
120
124
  settingEnableText: `Enable assessment mode for this assessment`,
121
- updateType: 'LAZY'
125
+ updateType: 'LAZY',
122
126
  });
123
127
  settings.settingsElements.push({
124
128
  type: 'RESPONSE_SEGMENT',
@@ -129,7 +133,7 @@ export class CreateAssessmentContainerComponent {
129
133
  settingTitle: 'RESPONSE SEGMENTS',
130
134
  settingEnableText: `Configure Response Segments for this assessment`,
131
135
  updateType: 'LAZY',
132
- segmentData: this.editorService.formsPage.responseSegment
136
+ segmentData: this.editorService.formsPage.responseSegment,
133
137
  });
134
138
  return settings;
135
139
  }
@@ -158,9 +162,12 @@ export class CreateAssessmentContainerComponent {
158
162
  if (confirmDelete) {
159
163
  this.editorService.allPages = this.editorService.allPages.filter((pageNum) => pageNum !== this.editorService.currentPageNumber);
160
164
  this.editorService.allPages = this.updatePageNumbersForAllPages(this.editorService.allPages);
161
- this.editorService.formsPage.pageDetailsList = this.editorService.formsPage.pageDetailsList.filter((pageDetail) => pageDetail.pageNumber !== this.editorService.currentPageNumber);
162
- this.editorService.formsPage.pageDetailsList = this.updatePageNumberForPageDetails(this.editorService.formsPage.pageDetailsList);
163
- this.editorService.formsPage.elements = this.editorService.formsPage.elements.filter((elementDetail) => elementDetail.page !== this.editorService.currentPageNumber);
165
+ this.editorService.formsPage.pageDetailsList =
166
+ this.editorService.formsPage.pageDetailsList.filter((pageDetail) => pageDetail.pageNumber !== this.editorService.currentPageNumber);
167
+ this.editorService.formsPage.pageDetailsList =
168
+ this.updatePageNumberForPageDetails(this.editorService.formsPage.pageDetailsList);
169
+ this.editorService.formsPage.elements =
170
+ this.editorService.formsPage.elements.filter((elementDetail) => elementDetail.page !== this.editorService.currentPageNumber);
164
171
  this.editorService.formsPage.elements = this.updatePageNumberForQuestions(this.editorService.formsPage.elements);
165
172
  if (this.editorService.currentPageNumber > 1) {
166
173
  this.editorService.currentPageNumber -= 1;
@@ -210,10 +217,13 @@ export class CreateAssessmentContainerComponent {
210
217
  }
211
218
  checkforError(mode) {
212
219
  // this.moreOptions = false;
213
- const errorQuestionIndex = this.editorService.formsPage.elements.findIndex((element, index) => (element.errorArray && element.errorArray !== {} && Object.values(element.errorArray).length > 0));
220
+ const errorQuestionIndex = this.editorService.formsPage.elements.findIndex((element, index) => element.errorArray &&
221
+ element.errorArray !== {} &&
222
+ Object.values(element.errorArray).length > 0);
214
223
  if (errorQuestionIndex >= 0) {
215
224
  if (mode === 'full') {
216
- this.editorService.currentPageNumber = this.editorService.formsPage.elements[errorQuestionIndex].page;
225
+ this.editorService.currentPageNumber =
226
+ this.editorService.formsPage.elements[errorQuestionIndex].page;
217
227
  }
218
228
  if (mode !== 'partial') {
219
229
  // this.getPageName(this.editorService.currentPageNumber);
@@ -243,13 +253,22 @@ export class CreateAssessmentContainerComponent {
243
253
  generatePageDropdown() {
244
254
  const list = [];
245
255
  if (this.editorService.formsPage.hasWelcome === true) {
246
- list.push({ value: -1, template: `<span class="page-number">Welcome Screen</span>` });
256
+ list.push({
257
+ value: -1,
258
+ template: `<span class="page-number">Welcome Screen</span>`,
259
+ });
247
260
  }
248
261
  if (this.editorService.formsPage.hasThanks === true) {
249
- list.push({ value: -2, template: `<span class="page-number">Thank you Screen</span>` });
262
+ list.push({
263
+ value: -2,
264
+ template: `<span class="page-number">Thank you Screen</span>`,
265
+ });
250
266
  }
251
267
  this.editorService.allPages.forEach((element) => {
252
- list.push({ value: element, template: this.getPageNameForDropdown(element) });
268
+ list.push({
269
+ value: element,
270
+ template: this.getPageNameForDropdown(element),
271
+ });
253
272
  });
254
273
  return list;
255
274
  }
@@ -292,26 +311,34 @@ export class CreateAssessmentContainerComponent {
292
311
  this.editorService.addPage();
293
312
  this.editorService.currentPageNumber = 1;
294
313
  }
295
- else if (this.editorService.currentPageNumber === -1 || this.editorService.currentPageNumber === -2) {
296
- this.editorService.currentPageNumber = this.editorService.allPages.length;
314
+ else if (this.editorService.currentPageNumber === -1 ||
315
+ this.editorService.currentPageNumber === -2) {
316
+ this.editorService.currentPageNumber =
317
+ this.editorService.allPages.length;
297
318
  }
298
319
  }
299
320
  this.getPageName(this.editorService.currentPageNumber);
300
321
  }
301
322
  getPageName(pageNumber) {
302
- console.log("called 11");
303
- this.editorService.currentPageDetails = { pageName: '', pageNumber: 0, pageDescription: '' };
323
+ this.editorService.currentPageDetails = {
324
+ pageName: '',
325
+ pageNumber: 0,
326
+ pageDescription: '',
327
+ };
304
328
  this.editorService.formsPage.pageDetailsList.forEach((pageDetail) => {
305
329
  if (pageDetail.pageNumber === pageNumber) {
306
- this.editorService.currentPageDetails.pageNumber = pageDetail.pageNumber;
330
+ this.editorService.currentPageDetails.pageNumber =
331
+ pageDetail.pageNumber;
307
332
  this.editorService.currentPageDetails.pageName = pageDetail.pageName;
308
- this.editorService.currentPageDetails.pageDescription = pageDetail.pageDescription;
333
+ this.editorService.currentPageDetails.pageDescription =
334
+ pageDetail.pageDescription;
309
335
  }
310
336
  });
311
337
  this.checkForPageDetails();
312
338
  }
313
339
  checkForPageDetails() {
314
- if (this.editorService.currentPageDetails === undefined || this.editorService.currentPageDetails.pageName === '') {
340
+ if (this.editorService.currentPageDetails === undefined ||
341
+ this.editorService.currentPageDetails.pageName === '') {
315
342
  this.editorService.showAddPageOption = true;
316
343
  this.editorService.showPageDetails = false;
317
344
  }
@@ -326,7 +353,11 @@ export class CreateAssessmentContainerComponent {
326
353
  }
327
354
  addNewPage() {
328
355
  this.editorService.addPage();
329
- this.editorService.currentPageDetails = { pageName: '', pageNumber: this.editorService.currentPageNumber, pageDescription: '' };
356
+ this.editorService.currentPageDetails = {
357
+ pageName: '',
358
+ pageNumber: this.editorService.currentPageNumber,
359
+ pageDescription: '',
360
+ };
330
361
  this.editorService.showPageDetails = false;
331
362
  this.editorService.showAddPageOption = true;
332
363
  this.generatePageDropdown();
@@ -338,7 +369,9 @@ export class CreateAssessmentContainerComponent {
338
369
  // this.showDeletePopup = true;
339
370
  }
340
371
  isPageEmpty() {
341
- if (![...new Set(this.editorService.formsPage.elements.map((element) => element.page))].includes(this.editorService.currentPageNumber)) {
372
+ if (![
373
+ ...new Set(this.editorService.formsPage.elements.map((element) => element.page)),
374
+ ].includes(this.editorService.currentPageNumber)) {
342
375
  return true;
343
376
  }
344
377
  else {
@@ -348,7 +381,8 @@ export class CreateAssessmentContainerComponent {
348
381
  submitAfterErrorCheck(mode) {
349
382
  this.editorService.activeQuestionIndex.next(-10);
350
383
  this.editorService.activeQuestion = -10;
351
- if (this.editorService.stepIdentifier === 'welcomescreen' || this.editorService.stepIdentifier === 'thankyouscreen') {
384
+ if (this.editorService.stepIdentifier === 'welcomescreen' ||
385
+ this.editorService.stepIdentifier === 'thankyouscreen') {
352
386
  this.editorService.currentPageNumber = 1;
353
387
  this.editorService.stepIdentifier = 'pagescreen';
354
388
  }
@@ -375,10 +409,12 @@ export class CreateAssessmentContainerComponent {
375
409
  validateWelcomeThankYou() {
376
410
  const question = this.editorService.formsPage;
377
411
  if (question.hasWelcome === true) {
378
- if (question.hasWelcomeDescription === true && this.editorService.extract(question.welcomeDescription).length === 0) {
412
+ if (question.hasWelcomeDescription === true &&
413
+ this.editorService.extract(question.welcomeDescription).length === 0) {
379
414
  this.editorService.formsPage.hasWelcomeDescription = false;
380
415
  }
381
- if (question.hasWelcomeImage === true && this.editorService.extract(question.welcomeImage).length === 0) {
416
+ if (question.hasWelcomeImage === true &&
417
+ this.editorService.extract(question.welcomeImage).length === 0) {
382
418
  this.editorService.formsPage.hasWelcomeImage = false;
383
419
  }
384
420
  if (this.editorService.extract(question.welcomeDescription).length === 0 &&
@@ -390,10 +426,12 @@ export class CreateAssessmentContainerComponent {
390
426
  }
391
427
  }
392
428
  if (question.hasThanks === true) {
393
- if (question.hasThankyouDescription === true && this.editorService.extract(question.thankyouDescription).length === 0) {
429
+ if (question.hasThankyouDescription === true &&
430
+ this.editorService.extract(question.thankyouDescription).length === 0) {
394
431
  this.editorService.formsPage.hasThankyouDescription = false;
395
432
  }
396
- if (question.hasThankyouImage === true && this.editorService.extract(question.thankyouImage).length === 0) {
433
+ if (question.hasThankyouImage === true &&
434
+ this.editorService.extract(question.thankyouImage).length === 0) {
397
435
  this.editorService.formsPage.hasThankyouImage = false;
398
436
  }
399
437
  if (this.editorService.extract(question.thankyouDescription).length === 0 &&
@@ -409,7 +447,7 @@ export class CreateAssessmentContainerComponent {
409
447
  if (mode === 'ACTIVE' && this.openPortal !== 'RESPONSIBILITY_CHECKPOINT') {
410
448
  const ref = this.dialog.open(ActiveComponent, {
411
449
  data: {
412
- message: `Once published, this assessment will be active and can be associated with a compliance responsibility.`
450
+ message: `Once published, this assessment will be active and can be associated with a compliance responsibility.`,
413
451
  },
414
452
  position: 'CENTER',
415
453
  background: 'black',
@@ -417,13 +455,19 @@ export class CreateAssessmentContainerComponent {
417
455
  ref.afterClosed.subscribe({
418
456
  next: (res) => {
419
457
  if (res === true) {
420
- this.postAssessment.emit({ mode: mode, assessmentDetails: this.editorService.formsPage });
458
+ this.postAssessment.emit({
459
+ mode: mode,
460
+ assessmentDetails: this.editorService.formsPage,
461
+ });
421
462
  }
422
- }
463
+ },
423
464
  });
424
465
  }
425
466
  else {
426
- this.postAssessment.emit({ mode: mode, assessmentDetails: this.editorService.formsPage });
467
+ this.postAssessment.emit({
468
+ mode: mode,
469
+ assessmentDetails: this.editorService.formsPage,
470
+ });
427
471
  }
428
472
  }
429
473
  }
@@ -448,4 +492,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
448
492
  type: HostListener,
449
493
  args: ['document:keydown.escape', ['$event']]
450
494
  }] } });
451
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWFzc2Vzc21lbnQtY29udGFpbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3NoYXJlZENvbXBvbmVudHMvYXNzZXNzbWVudC1lZGl0b3IvY3JlYXRlLWFzc2Vzc21lbnQtY29udGFpbmVyL2NyZWF0ZS1hc3Nlc3NtZW50LWNvbnRhaW5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92eC13b3JrZmxvdy1lbmdpbmUvc3JjL2xpYi9zaGFyZWRDb21wb25lbnRzL2Fzc2Vzc21lbnQtZWRpdG9yL2NyZWF0ZS1hc3Nlc3NtZW50LWNvbnRhaW5lci9jcmVhdGUtYXNzZXNzbWVudC1jb250YWluZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsWUFBWSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0YsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDcEcsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0saUVBQWlFLENBQUM7QUFFOUcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBSzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUN4RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdURBQXVELENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFReEYsTUFBTSxPQUFPLGtDQUFrQztJQTRCN0MsWUFDVSxNQUFxQixFQUN0QixhQUE0QjtJQUNuQyx5Q0FBeUM7SUFDakMsS0FBcUIsRUFDckIsUUFBeUIsRUFDekIsTUFBYztRQUxkLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDdEIsa0JBQWEsR0FBYixh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VUFBVSxFQUFFLE9BQU87YUFDcEIsQ0FBQyxDQUFDO1lBQ0gsR0FBRyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUM7Z0JBQ3hCLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUNqQixJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUU7d0JBQ2hCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7cUJBQzNGO2dCQUNILENBQUM7YUFDRixDQUFDLENBQUE7U0FDSDthQUFNO1lBQ0wsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQztTQUUxRjtJQUNILENBQUM7OytIQTdjVSxrQ0FBa0M7bUhBQWxDLGtDQUFrQywyV0FGbEMsQ0FBQyxhQUFhLENBQUMsMEJDaEI1Qiw0b2FBMEhBOzJGRHhHYSxrQ0FBa0M7a0JBTjlDLFNBQVM7K0JBQ0UsaUNBQWlDLGFBR2hDLENBQUMsYUFBYSxDQUFDO2dOQWFqQixVQUFVO3NCQUFsQixLQUFLO2dCQUNJLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFFc0IsY0FBYztzQkFBMUMsS0FBSzt1QkFBQyxnQkFBZ0I7Z0JBR00sY0FBYztzQkFBMUMsS0FBSzt1QkFBQyxnQkFBZ0I7Z0JBTThCLGdCQUFnQjtzQkFBcEUsWUFBWTt1QkFBQyx5QkFBeUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIEhvc3RMaXN0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBZGRQYWdlRGV0YWlsc0NvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYWRkLXBhZ2UtZGV0YWlscy9hZGQtcGFnZS1kZXRhaWxzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRTZXR0aW5nc0NvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYXNzZXNzbWVudC1zZXR0aW5ncy9hc3Nlc3NtZW50LXNldHRpbmdzLmNvbXBvbmVudCc7XHJcblxyXG5pbXBvcnQgeyBFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZWRpdG9yLnNlcnZpY2UnO1xyXG5cclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi91aS1raXQvZGlhbG9nL2RpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU25hY2tCYXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vdWkta2l0L3NuYWNrLWJhci9zbmFjay1iYXIuc2VydmljZSc7XHJcbmltcG9ydCB7IERlbGV0ZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3VpLWtpdC9hY3Rpb24tZGlhbG9nL2RlbGV0ZS9kZWxldGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQWN0aXZlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdWkta2l0L2FjdGlvbi1kaWFsb2cvYWN0aXZlL2FjdGl2ZS5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtY3JlYXRlLWFzc2Vzc21lbnQtY29udGFpbmVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY3JlYXRlLWFzc2Vzc21lbnQtY29udGFpbmVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jcmVhdGUtYXNzZXNzbWVudC1jb250YWluZXIuY29tcG9uZW50Lmxlc3MnXSxcclxuICBwcm92aWRlcnM6IFtFZGl0b3JTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3JlYXRlQXNzZXNzbWVudENvbnRhaW5lckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgc2hvd0NvbGxhcHNlID0gZmFsc2U7XHJcbiAgZXhwYW5kUGFnZSA9IGZhbHNlO1xyXG4gIGhpZGVRdWVzdGlvbiA9IGZhbHNlO1xyXG4gIGFzc2Vzc21lbnRJZCA9ICcnO1xyXG4gIGFzc2Vzc21lbnROYW1lID0gJyc7XHJcbiAgYXNzZXNzbWVudENhdGVnb3J5ID0gJyc7XHJcbiAgYXNzZXNzbWVudENvbnRyb2xJZCA9ICcnO1xyXG4gIGFzc2Vzc21lbnRDdXJyZW50U3RhdGUgPSAnRFJBRlQnO1xyXG4gIHBhZ2VNb2RlOiAnRURJVCcgfCAnUFJFVklFVycgPSAnRURJVCc7XHJcbiAgaXNMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBvcGVuUG9ydGFsIDonQVNTRVNTTUVOVF9JTVBPUlQnIHwgJ1JFU1BPTlNJQklMSVRZX0NIRUNLUE9JTlQnfCcnID0gJyc7XHJcbiAgQE91dHB1dCgpIHNldElzVXBsb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHBvc3RBc3Nlc3NtZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBASW5wdXQoJ2Fzc2Vzc21lbnRKU09OJykgc2V0IGFzc2Vzc21lbnREYXRhKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZUFzc2Vzc21lbnQodmFsdWUpXHJcbiAgfVxyXG4gIEBJbnB1dCgnY2hlY2twb2ludEpTT04nKSBzZXQgY2hlY2twb2ludERhdGEodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5pbml0aWFsaXplQ2hlY2twb2ludCh2YWx1ZSlcclxuICB9XHJcblxyXG4gIC8qIFdoZW4gdGhlIFwiRXNjYXBlXCIga2V5IGlzIHByZXNzZWQsIGl0IGVtaXRzIGFuIGV2ZW50IHRvIHNldCB0aGUgdmFsdWUgb2YgXCJpc1VwbG9hZGVkXCIgdG9cclxuICBmYWxzZS4gYW5kIGxlZnQgcG9wdXAgd2lsbCBjbG9zZS4gKi9cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScsIFsnJGV2ZW50J10pIG9uS2V5ZG93bkhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHsgXHJcbiAgICB0aGlzLnNldElzVXBsb2FkZWQuZW1pdChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZGlhbG9nOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgcHVibGljIGVkaXRvclNlcnZpY2U6IEVkaXRvclNlcnZpY2UsXHJcbiAgICAvLyBwcml2YXRlICBsYXlvdXRTZXJ2aWNlOiBMYXlvdXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHNuYWNrYmFyOiBTbmFja0JhclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmVkaXRvclNlcnZpY2UuYWRkUGFnZSgpO1xyXG4gICAgdGhpcy5lZGl0b3JTZXJ2aWNlLm51bWJlck9mUGFnZXMoKTtcclxuICAgIC8vIHRoaXMuaW5pdGlhbGl6ZUFzc2Vzc21lbnQoKTtcclxuICB9XHJcbnRyaWdnZXJQcmV2aWV3V2l0aFZhbGlkYXRpb24oKXtcclxuICB0aGlzLmVkaXRvclNlcnZpY2UuYWN0aXZlUXVlc3Rpb25JbmRleC5uZXh0KC0xMCk7XHJcbiAgdGhpcy5lZGl0b3JTZXJ2aWNlLmFjdGl2ZVF1ZXN0aW9uID0gLTEwO1xyXG59XHJcbiAgaW5pdGlhbGl6ZUFzc2Vzc21lbnQoYXNzZXNzbWVudERhdGE6IGFueSkge1xyXG4gICAgaWYgKGFzc2Vzc21lbnREYXRhKSB7XHJcbiAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5mb3Jtc1BhZ2UgPSBhc3Nlc3NtZW50RGF0YS5hc3Nlc3NtZW50RGF0YTtcclxuICAgICAgdGhpcy5hc3Nlc3NtZW50TmFtZSA9IGFzc2Vzc21lbnREYXRhLm1ldGFkYXRhLmFzc2Vzc21lbnRfbmFtZTtcclxuICAgICAgdGhpcy5hc3Nlc3NtZW50Q2F0ZWdvcnkgPSBhc3Nlc3NtZW50RGF0YS5tZXRhZGF0YS5jYXRlZ29yeV9hcnI7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZUNoZWNrcG9pbnQoY2hlY2twb2ludERhdGE6YW55KXtcclxuICAgIGNvbnNvbGUubG9nKFwiaW5pdGlhbGl6ZUNoZWNrcG9pbnQgPT0+XCIsIGNoZWNrcG9pbnREYXRhKVxyXG4gICAgaWYoY2hlY2twb2ludERhdGEgJiYgT2JqZWN0LmtleXMoY2hlY2twb2ludERhdGEpPy5sZW5ndGggPiAwKXtcclxuICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmZvcm1zUGFnZSA9IGNoZWNrcG9pbnREYXRhO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0QWxsUGFnZXMoKSB7XHJcbiAgICB0aGlzLmVkaXRvclNlcnZpY2UuYWxsUGFnZXMgPSBbLi4ubmV3IFNldCh0aGlzLmVkaXRvclNlcnZpY2UuZm9ybXNQYWdlLmVsZW1lbnRzLm1hcCgoZWxlOiBhbnkpID0+IGVsZS5wYWdlKSldO1xyXG4gICAgdGhpcy5nZXRQYWdlTmFtZSgxKTtcclxuICB9XHJcblxyXG4gIGFkZFBhZ2VEZXRhaWxzKCkge1xyXG5cclxuICAgIGNvbnN0IHJlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQWRkUGFnZURldGFpbHNDb21wb25lbnQsIHtcclxuICAgICAgZGF0YTogeyBwYWdlOiB0aGlzLmVkaXRvclNlcnZpY2UuY3VycmVudFBhZ2VOdW1iZXIsIHBhZ2VEZXRhaWxzOiB0aGlzLmVkaXRvclNlcnZpY2UuY3VycmVudFBhZ2VEZXRhaWxzLCByZWY6IHRoaXMuZWRpdG9yU2VydmljZSB9LFxyXG4gICAgICBwb3NpdGlvbjogJ1JJR0hUJyxcclxuICAgICAgYmFja2dyb3VuZDogJ2JsYWNrJyxcclxuICAgIH0pO1xyXG4gICAgcmVmLmFmdGVyQ2xvc2VkLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiZGF0YSA9PT09PlwiLCBkYXRhLCB0aGlzLmVkaXRvclNlcnZpY2Uuc3RlcElkZW50aWZpZXIsIHRoaXMuZWRpdG9yU2VydmljZS5zaG93QWRkUGFnZU9wdGlvbix0aGlzLmVkaXRvclNlcnZpY2Uuc2hvd1BhZ2VEZXRhaWxzKTtcclxuXHJcbiAgICAgIHRoaXMuZ2VuZXJhdGVQYWdlRHJvcGRvd24oKTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZW50aXR5U2V0dGluZ3M6IGFueSA9IHtcclxuICAgIHBhbmVsVGl0bGU6ICcnXHJcbiAgfTtcclxuXHJcbiAgYXNzZXNzbWVudFNldHRpbmdzKCkge1xyXG4gICAgdGhpcy5lbnRpdHlTZXR0aW5ncyA9IHRoaXMuZ2V0U2V0dGluZ3NEYXRhKCk7XHJcbiAgICBjb25zdCByZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEFzc2Vzc21lbnRTZXR0aW5nc0NvbXBvbmVudCwge1xyXG4gICAgICBkYXRhOiB7IHNldHRpbmdzOiB0aGlzLmVudGl0eVNldHRpbmdzLCBzZXJ2aWNlOiB0aGlzLmVkaXRvclNlcnZpY2UgfSxcclxuICAgICAgcG9zaXRpb246ICdSSUdIVCcsXHJcbiAgICAgIGJhY2tncm91bmQ6ICdibGFjaycsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFNldHRpbmdzRGF0YSgpIHtcclxuICAgIGxldCBzZXR0aW5nczogYW55ID0ge1xyXG4gICAgICBwYW5lbFRpdGxlOiBgQXNzZXNzbWVudCBzZXR0aW5nc2AsXHJcblxyXG4gICAgICBzZXR0aW5nc0VsZW1lbnRzOiBbXVxyXG4gICAgfVxyXG4gICAgc2V0dGluZ3Muc2V0dGluZ3NFbGVtZW50cy5wdXNoKFxyXG4gICAgICB7XHJcbiAgICAgICAgdHlwZTogJ0FTU0VTU01FTlQnLFxyXG4gICAgICAgIGVudGl0eVR5cGU6ICdBU1NFU1NNRU5UJyxcclxuICAgICAgICBpc1Zpc2libGU6IHRydWUsXHJcbiAgICAgICAgaXNFbmFibGVkOiB0aGlzLmVkaXRvclNlcnZpY2UuZm9ybXNQYWdlLnNldHRpbmdzLmFzc2Vzc21lbnRNb2RlLFxyXG4gICAgICAgIGhlbHBpbmdUZXh0OiAnWW91IGNhbiBjb25maWd1cmUgc2NvcmVzIGZvciB0aGUgcXVlc3Rpb25zIGFuZCBhbmFseXplIHRoZSByZXNwb25zZXMgc3VibWl0dGVkIGJ5IHRoZSByZXNwb25kZW50IGJhc2VkIG9uIHRoZXNlIHNjb3Jlcy4nLFxyXG4gICAgICAgIGRlZmF1bHRTY29yZTogdGhpcy5lZGl0b3JTZXJ2aWNlLmZvcm1zUGFnZS5zZXR0aW5ncy5kZWZhdWx0U2NvcmUsXHJcbiAgICAgICAgbmVnYXRpdmVTY29yZUNyaXRlcmlhOiB0aGlzLmVkaXRvclNlcnZpY2UuZm9ybXNQYWdlLnNldHRpbmdzLm5lZ2F0aXZlU2NvcmVDcml0ZXJpYSxcclxuICAgICAgICBuZWdhdGl2ZVNjb3JlOiB0aGlzLmVkaXRvclNlcnZpY2UuZm9ybXNQYWdlLnNldHRpbmdzLm5lZ2F0aXZlU2NvcmUsXHJcbiAgICAgICAgd2VpZ2h0YWdlRW5hYmxlZDogdGhpcy5lZGl0b3JTZXJ2aWNlLmZvcm1zUGFnZS5zZXR0aW5ncy53ZWlnaHRhZ2VFbmFibGVkLFxyXG4gICAgICAgIHNldHRpbmdUaXRsZTogJ0FTU0VTU01FTlQgTU9ERScsXHJcbiAgICAgICAgc2V0dGluZ0VuYWJsZVRleHQ6IGBFbmFibGUgYXNzZXNzbWVudCBtb2RlIGZvciB0aGlzIGFzc2Vzc21lbnRgLFxyXG4gICAgICAgIHVwZGF0ZVR5cGU6ICdMQVpZJ1xyXG4gICAgICB9XHJcblxyXG4gICAgKVxyXG4gICAgc2V0dGluZ3Muc2V0dGluZ3NFbGVtZW50cy5wdXNoKFxyXG4gICAgICB7XHJcbiAgICAgICAgdHlwZTogJ1JFU1BPTlNFX1NFR01FTlQnLFxyXG4gICAgICAgIGVudGl0eVR5cGU6ICdBU1NFU1NNRU5UJyxcclxuICAgICAgICBoZWxwaW5nVGV4dDogJ1Jlc3BvbnNlIHNlZ21lbnRzIGxldCB5b3UgZGl2aWRlIHRoZSByZXNwb25zZXMgaW50byBzZXBhcmF0ZSBwYXJ0cyBvciBzZWN0aW9ucyBmb3IgZWFzaWVyIGFuYWx5c2lzIG9mIGRhdGEgYW5kIGFzc2lzdCBpbiBkZWNpc2lvbiBtYWtpbmcuJyxcclxuICAgICAgICBpc1Zpc2libGU6IHRydWUsXHJcbiAgICAgICAgaXNFbmFibGVkOiB0aGlzLmVkaXRvclNlcnZpY2UuZm9ybXNQYWdlLnJlc3BvbnNlU2VnbWVudFsnaXNFbmFibGVkJ10gPz8gZmFsc2UsXHJcbiAgICAgICAgc2V0dGluZ1RpdGxlOiAnUkVTUE9OU0UgU0VHTUVOVFMnLFxyXG4gICAgICAgIHNldHRpbmdFbmFibGVUZXh0OiBgQ29uZmlndXJlIFJlc3BvbnNlIFNlZ21lbnRzIGZvciB0aGlzIGFzc2Vzc21lbnRgLFxyXG4gICAgICAgIHVwZGF0ZVR5cGU6ICdMQVpZJyxcclxuICAgICAgICBzZWdtZW50RGF0YTogdGhpcy5lZGl0b3JTZXJ2aWNlLmZvcm1zUGFnZS5yZXNwb25zZVNlZ21lbnRcclxuICAgICAgfVxyXG4gICAgKVxyXG4gICAgcmV0dXJuIHNldHRpbmdzO1xyXG4gIH1cclxuXHJcbiAgY2xpY2tDb2xsYXBzZSgpIHtcclxuICAgIHRoaXMuc2hvd0NvbGxhcHNlID0gIXRoaXMuc2hvd0NvbGxhcHNlO1xyXG4gIH1cclxuXHJcbiAgY2xpY2tFeHBhbmQoKSB7XHJcbiAgICB0aGlzLmV4cGFuZFBhZ2UgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VFeHBhbmQoKSB7XHJcbiAgICB0aGlzLmV4cGFuZFBhZ2UgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVBhZ2UoKSB7XHJcbiAgICBjb25zdCByZWYgPSB0aGlzLmRpYWxvZy5vcGVuKERlbGV0ZUNvbXBvbmVudCwge1xyXG4gICAgICBkYXRhOiB7IG1lc3NhZ2U6IGBUaGlzIGFjdGlvbiB3aWxsIDxzdHJvbmc+cmVtb3ZlPC9zdHJvbmc+IHRoaXMgcGFnZS5gIH0sXHJcbiAgICAgIHBvc2l0aW9uOiAnQ0VOVEVSJyxcclxuICAgICAgYmFja2dyb3VuZDogJ2JsYWNrJyxcclxuICAgIH0pO1xyXG4gICAgcmVmLmFmdGVyQ2xvc2VkLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcblxyXG4gICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuZGVsZXRlUGFnZUNvbmZpcm0odHJ1ZSlcclxuICAgICAgfVxyXG5cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBkZWxldGVQYWdlQ29uZmlybShjb25maXJtRGVsZXRlOiBhbnkpIHtcclxuICAgIGlmIChjb25maXJtRGVsZXRlKSB7XHJcbiAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5hbGxQYWdlcyA9IHRoaXMuZWRpdG9yU2VydmljZS5hbGxQYWdlcy5maWx0ZXIoKHBhZ2VOdW06IGFueSkgPT4gcGFnZU51bSAhPT0gdGhpcy5lZGl0b3JTZXJ2aWNlLmN1cnJlbnRQYWdlTnVtYmVyKTtcclxuICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmFsbFBhZ2VzID0gdGhpcy51cGRhdGVQYWdlTnVtYmVyc0ZvckFsbFBhZ2VzKHRoaXMuZWRpdG9yU2VydmljZS5hbGxQYWdlcyk7XHJcbiAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5mb3Jtc1BhZ2UucGFnZURldGFpbHNMaXN0ID0gdGhpcy5lZGl0b3JTZXJ2aWNlLmZvcm1zUGFnZS5wYWdlRGV0YWlsc0xpc3QuZmlsdGVyKChwYWdlRGV0YWlsOiBhbnkpID0+XHJcbiAgICAgICAgcGFnZURldGFpbC5wYWdlTnVtYmVyICE9PSB0aGlzLmVkaXRvclNlcnZpY2UuY3VycmVudFBhZ2VOdW1iZXIpO1xyXG4gICAgICB0aGlzLmVkaXRvclNlcnZpY2UuZm9ybXNQYWdlLnBhZ2VEZXRhaWxzTGlzdCA9IHRoaXMudXBkYXRlUGFnZU51bWJlckZvclBhZ2VEZXRhaWxzKHRoaXMuZWRpdG9yU2VydmljZS5mb3Jtc1BhZ2UucGFnZURldGFpbHNMaXN0KTtcclxuICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmZvcm1zUGFnZS5lbGVtZW50cyA9IHRoaXMuZWRpdG9yU2VydmljZS5mb3Jtc1BhZ2UuZWxlbWVudHMuZmlsdGVyKFxyXG4gICAgICAgIChlbGVtZW50RGV0YWlsOiBhbnkpID0+IGVsZW1lbnREZXRhaWwucGFnZSAhPT0gdGhpcy5lZGl0b3JTZXJ2aWNlLmN1cnJlbnRQYWdlTnVtYmVyKTtcclxuICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmZvcm1zUGFnZS5lbGVtZW50cyA9IHRoaXMudXBkYXRlUGFnZU51bWJlckZvclF1ZXN0aW9ucyh0aGlzLmVkaXRvclNlcnZpY2UuZm9ybXNQYWdlLmVsZW1lbnRzKTtcclxuICAgICAgaWYgKHRoaXMuZWRpdG9yU2VydmljZS5jdXJyZW50UGFnZU51bWJlciA+IDEpIHtcclxuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2UuY3VycmVudFBhZ2VOdW1iZXIgLT0gMTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmdldFBhZ2VOYW1lKHRoaXMuZWRpdG9yU2VydmljZS5jdXJyZW50UGFnZU51bWJlcik7XHJcbiAgICAgIHRoaXMuY2hlY2tGb3JQYWdlRGV0YWlscygpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZWRpdG9yU2VydmljZS5hY3RpdmVRdWVzdGlvbiA9IC0xMDtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVBhZ2VOdW1iZXJzRm9yQWxsUGFnZXMoYXJyYXlUb0JlVXBkYXRlZDogYW55KSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5VG9CZVVwZGF0ZWQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGkgPj0gdGhpcy5lZGl0b3JTZXJ2aWNlLmN1cnJlbnRQYWdlTnVtYmVyIC0gMSkge1xyXG4gICAgICAgIGFycmF5VG9CZVVwZGF0ZWRbaV0gLT0gMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFycmF5VG9CZVVwZGF0ZWQ7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVQYWdlTnVtYmVyRm9yUGFnZURldGFpbHMoYXJyYXlUb0JlVXBkYXRlZDogYW55KSB7XHJcbiAgICBhcnJheVRvQmVVcGRhdGVkLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZWxlbWVudC5wYWdlTnVtYmVyID49IHRoaXMuZWRpdG9yU2VydmljZS5jdXJyZW50UGFnZU51bWJlcikge1xyXG4gICAgICAgIGVsZW1lbnQucGFnZU51bWJlciAtPSAxO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBhcnJheVRvQmVVcGRhdGVkO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlUGFnZU51bWJlckZvclF1ZXN0aW9ucyhhcnJheVRvQmVVcGRhdGVkOiBhbnkpIHtcclxuICAgIGFycmF5VG9CZVVwZGF0ZWQuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChlbGVtZW50LnBhZ2UgPj0gdGhpcy5lZGl0b3JTZXJ2aWNlLmN1cnJlbnRQYWdlTnVtYmVyKSB7XHJcbiAgICAgICAgZWxlbWVudC5wYWdlIC09IDE7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGFycmF5VG9CZVVwZGF0ZWQ7XHJcbiAgfVxyXG5cclxuICBvcGVuUXVlc3Rpb24oKSB7XHJcbiAgICB0aGlzLmhpZGVRdWVzdGlvbiA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBjbG9zZVF1ZXN0aW9uKCkge1xyXG4gICAgdGhpcy5oaWRlUXVlc3Rpb24gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVF1ZXN0aW9uV2l0aFZhbGlkYXRpb24oaW5kZXg6IGFueSkge1xyXG4gICAgaWYgKGluZGV4ID09PSAnd2VsY29tZScpIHtcclxuICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmZvcm1zUGFnZS5oYXNXZWxjb21lID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5jdXJyZW50UGFnZU51bWJlciA9IDE7XHJcbiAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5zdGVwSWRlbnRpZmllciA9ICdwYWdlc2NyZWVuJztcclxuICAgIH1cclxuICAgIHRoaXMuZWRpdG9yU2VydmljZS5kZWxldGVRdWVzdGlvbihpbmRleCk7XHJcbiAgfVxyXG5cclxuICBjaGVja2ZvckVycm9yKG1vZGU/OiBhbnkpIHtcclxuICAgIC8vIHRoaXMubW9yZU9wdGlvbnMgPSBmYWxzZTtcclxuICAgIGNvbnN0IGVycm9yUXVlc3Rpb25JbmRleCA9IHRoaXMuZWRpdG9yU2VydmljZS5mb3Jtc1BhZ2UuZWxlbWVudHMuZmluZEluZGV4KFxyXG4gICAgICAoZWxlbWVudDogYW55LCBpbmRleDogYW55KSA9PiAoZWxlbWVudC5lcnJvckFycmF5ICYmIGVsZW1lbnQuZXJyb3JBcnJheSAhPT0ge30gJiYgT2JqZWN0LnZhbHVlcyhlbGVtZW50LmVycm9yQXJyYXkpLmxlbmd0aCA+IDApKTtcclxuICAgIGlmIChlcnJvclF1ZXN0aW9uSW5kZXggPj0gMCkge1xyXG4gICAgICBpZiAobW9kZSA9PT0gJ2Z1bGwnKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmN1cnJlbnRQYWdlTnVtYmVyID0gdGhpcy5lZGl0b3JTZXJ2aWNlLmZvcm1zUGFnZS5lbGVtZW50c1tlcnJvclF1ZXN0aW9uSW5kZXhdLnBhZ2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG1vZGUgIT09ICdwYXJ0aWFsJykge1xyXG4gICAgICAgIC8vIHRoaXMuZ2V0UGFnZU5hbWUodGhpcy5lZGl0b3JTZXJ2aWNlLmN1cnJlbnRQYWdlTnVtYmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmFjdGl2ZVF1ZXN0aW9uID0gZXJyb3JRdWVzdGlvbkluZGV4O1xyXG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5hY3RpdmVRdWVzdGlvbkluZGV4Lm5leHQoZXJyb3JRdWVzdGlvbkluZGV4KTtcclxuXHJcbiAgICAgICAgY29uc3QgcXVlc3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmVkaXRvclNlcnZpY2UuZm9ybXNQYWdlLmVsZW1lbnRzW2Vycm9yUXVlc3Rpb25JbmRleF0ubmFtZSk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAocXVlc3Rpb24pIHtcclxuICAgICAgICAgICAgcXVlc3Rpb24uc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnc3RhcnQnIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sIDIwMCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG1vZGUgPT09ICdzYXZlJykge1xyXG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5hY3RpdmVRdWVzdGlvbiA9IC0xMDtcclxuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2UuYWN0aXZlUXVlc3Rpb25JbmRleC5uZXh0KC0xMCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKG1vZGUgPT09ICdzYXZlJykge1xyXG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5hY3RpdmVRdWVzdGlvbiA9IC0xMDtcclxuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2UuYWN0aXZlUXVlc3Rpb25JbmRleC5uZXh0KC0xMCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2VuZXJhdGVQYWdlRHJvcGRvd24oKSB7XHJcbiAgICBjb25zdCBsaXN0ID0gW107XHJcbiAgICBpZiAodGhpcy5lZGl0b3JTZXJ2aWNlLmZvcm1zUGFnZS5oYXNXZWxjb21lID09PSB0cnVlKSB7XHJcbiAgICAgIGxpc3QucHVzaCh7IHZhbHVlOiAtMSwgdGVtcGxhdGU6IGA8c3BhbiBjbGFzcz1cInBhZ2UtbnVtYmVyXCI+V2VsY29tZSBTY3JlZW48L3NwYW4+YCB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmVkaXRvclNlcnZpY2UuZm9ybXNQYWdlLmhhc1RoYW5rcyA9PT0gdHJ1ZSkge1xyXG4gICAgICBsaXN0LnB1c2goeyB2YWx1ZTogLTIsIHRlbXBsYXRlOiBgPHNwYW4gY2xhc3M9XCJwYWdlLW51bWJlclwiPlRoYW5rIHlvdSBTY3JlZW48L3NwYW4+YCB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVkaXRvclNlcnZpY2UuYWxsUGFnZXMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgIGxpc3QucHVzaCh7IHZhbHVlOiBlbGVtZW50LCB0ZW1wbGF0ZTogdGhpcy5nZXRQYWdlTmFtZUZvckRyb3Bkb3duKGVsZW1lbnQpIH0pO1xyXG5cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBsaXN0O1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFnZU5hbWVGb3JEcm9wZG93bihwYWdlTnVtYmVyOiBhbnkpIHtcclxuICAgIGxldCBwYWdlVmFsdWUgPSBgPHNwYW4gY2xhc3M9XCJwYWdlLW51bWJlclwiPlBhZ2UgJHtwYWdlTnVtYmVyfTwvc3Bhbj5gO1xyXG4gICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmZvcm1zUGFnZS5wYWdlRGV0YWlsc0xpc3QuZm9yRWFjaCgocGFnZURldGFpbDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChwYWdlRGV0YWlsLnBhZ2VOdW1iZXIgPT09IHBhZ2VOdW1iZXIgJiYgcGFnZURldGFpbC5wYWdlTmFtZSAhPT0gJycpIHtcclxuICAgICAgICBwYWdlVmFsdWUgPSBgPHNwYW4gY2xhc3M9XCJwYWdlLWxhYmVsIHZ4LWZzLTkgdngtZnctNjAwIHZ4LXR0LXVwcGVyY2FzZSB2eC1wbC0xIHZ4LXByLTEgdngtbXItMiB2eC1saC0zXCI+UEFHRTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2UtbnVtYmVyIHZ4LWZzLTExIHZ4LXBhcmFncmFwaC10eHRcIj4ke3BhZ2VEZXRhaWwucGFnZU51bWJlcn08L3NwYW4+YFxyXG4gICAgICAgIC8vcGFnZVZhbHVlID0gYDxzcGFuIGNsYXNzPVwicGFnZS1sYWJlbCB2eC1mcy05IHZ4LWZ3LTYwMCB2eC10dC11cHBlcmNhc2UgdngtcGwtMSB2eC1wci0xIHZ4LW1yLTIgdngtbGgtM1wiPlBhZ2UgPC9zcGFuPiA8c3BhbiAke3BhZ2VEZXRhaWwucGFnZU51bWJlcn08L3NwYW4+IDxzcGFuIGNsYXNzPVwicGFnZS1udW1iZXIgdngtZnMtMTEgdngtcGFyYWdyYXBoLXR4dFwiPiAke3BhZ2VEZXRhaWwucGFnZU5hbWV9PC9zcGFuPmA7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHBhZ2VWYWx1ZTtcclxuICB9XHJcblxyXG4gIHBhZ2VDaGFuZ2VkKGV2dDogYW55KSB7XHJcblxyXG4gICAgaWYgKGV2dC52YWx1ZSA9PT0gLTEpIHtcclxuICAgICAgdGhpcy5zZXRJZGVudGlmaWVyKCd3ZWxjb21lc2NyZWVuJyk7XHJcbiAgICB9IGVsc2UgaWYgKGV2dC52YWx1ZSA9PT0gLTIpIHtcclxuICAgICAgdGhpcy5zZXRJZGVudGlmaWVyKCd0aGFua3lvdXNjcmVlbicpO1xyXG4gICAgfSBlbHNlIGlmIChldnQudmFsdWUgPj0gMCkge1xyXG4gICAgICB0aGlzLmVkaXRvclNlcnZpY2UuY3VycmVudFBhZ2VOdW1iZXIgPSBldnQ/LnZhbHVlO1xyXG4gICAgICB0aGlzLnNldElkZW50aWZpZXIoJ3BhZ2VzY3JlZW4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldElkZW50aWZpZXIoc2NyZWVuOiBhbnkpIHtcclxuICAgIHRoaXMuY2hhbmdlVG9JbmFjdGl2ZSgpO1xyXG4gICAgaWYgKHNjcmVlbiA9PT0gJ3dlbGNvbWVzY3JlZW4nKSB7XHJcbiAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5zdGVwSWRlbnRpZmllciA9ICd3ZWxjb21lc2NyZWVuJztcclxuICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmN1cnJlbnRQYWdlTnVtYmVyID0gLTE7XHJcbiAgICB9XHJcbiAgICBpZiAoc2NyZWVuID09PSAndGhhbmt5b3VzY3JlZW4nKSB7XHJcbiAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5zdGVwSWRlbnRpZmllciA9ICd0aGFua3lvdXNjcmVlbic7XHJcbiAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5jdXJyZW50UGFnZU51bWJlciA9IC0yO1xyXG4gICAgfVxyXG4gICAgaWYgKHNjcmVlbiA9PT0gJ3BhZ2VzY3JlZW4nKSB7XHJcbiAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5zdGVwSWRlbnRpZmllciA9ICdwYWdlc2NyZWVuJztcclxuICAgICAgaWYgKHRoaXMuZWRpdG9yU2VydmljZS5hbGxQYWdlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2UuYWRkUGFnZSgpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5jdXJyZW50UGFnZU51bWJlciA9IDE7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5lZGl0b3JTZXJ2aWNlLmN1cnJlbnRQYWdlTnVtYmVyID09PSAtMSB8fCB0aGlzLmVkaXRvclNlcnZpY2UuY3VycmVudFBhZ2VOdW1iZXIgPT09IC0yKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmN1cnJlbnRQYWdlTnVtYmVyID0gdGhpcy5lZGl0b3JTZXJ2aWNlLmFsbFBhZ2VzLmxlbmd0aDtcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIHRoaXMuZ2V0UGFnZU5hbWUodGhpcy5lZGl0b3JTZXJ2aWNlLmN1cnJlbnRQYWdlTnVtYmVyKTtcclxuICB9XHJcblxyXG4gIGdldFBhZ2VOYW1lKHBhZ2VOdW1iZXI6IGFueSkge1xyXG4gICAgY29uc29sZS5sb2coXCJjYWxsZWQgMTFcIilcclxuICAgIHRoaXMuZWRpdG9yU2VydmljZS5jdXJyZW50UGFnZURldGFpbHMgPSB7IHBhZ2VOYW1lOiAnJywgcGFnZU51bWJlcjogMCwgcGFnZURlc2NyaXB0aW9uOiAnJyB9O1xyXG4gICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmZvcm1zUGFnZS5wYWdlRGV0YWlsc0xpc3QuZm9yRWFjaCgocGFnZURldGFpbDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChwYWdlRGV0YWlsLnBhZ2VOdW1iZXIgPT09IHBhZ2VOdW1iZXIpIHtcclxuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2UuY3VycmVudFBhZ2VEZXRhaWxzLnBhZ2VOdW1iZXIgPSBwYWdlRGV0YWlsLnBhZ2VOdW1iZXI7XHJcbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmN1cnJlbnRQYWdlRGV0YWlscy5wYWdlTmFtZSA9IHBhZ2VEZXRhaWwucGFnZU5hbWU7XHJcbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmN1cnJlbnRQYWdlRGV0YWlscy5wYWdlRGVzY3JpcHRpb24gPSBwYWdlRGV0YWlsLnBhZ2VEZXNjcmlwdGlvbjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNoZWNrRm9yUGFnZURldGFpbHMoKTtcclxuICB9XHJcblxyXG4gIGNoZWNrRm9yUGFnZURldGFpbHMoKSB7XHJcbiAgICBpZiAodGhpcy5lZGl0b3JTZXJ2aWNlLmN1cnJlbnRQYWdlRGV0YWlscyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuZWRpdG9yU2VydmljZS5jdXJyZW50UGFnZURldGFpbHMucGFnZU5hbWUgPT09ICcnKSB7XHJcbiAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5zaG93QWRkUGFnZU9wdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5zaG93UGFnZURldGFpbHMgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5zaG93QWRkUGFnZU9wdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmVkaXRvclNlcnZpY2Uuc2hvd1BhZ2VEZXRhaWxzID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoYW5nZVRvSW5hY3RpdmUoKSB7XHJcbiAgICB0aGlzLmVkaXRvclNlcnZpY2UuYWN0aXZlUXVlc3Rpb24gPSAtNTtcclxuICAgIHRoaXMuZWRpdG9yU2VydmljZS5hY3RpdmVRdWVzdGlvbkluZGV4Lm5leHQoLTUpO1xyXG4gIH1cclxuXHJcbiAgYWRkTmV3UGFnZSgpIHtcclxuICAgIHRoaXMuZWRpdG9yU2VydmljZS5hZGRQYWdlKCk7XHJcbiAgICB0aGlzLmVkaXRvclNlcnZpY2UuY3VycmVudFBhZ2VEZXRhaWxzID0geyBwYWdlTmFtZTogJycsIHBhZ2VOdW1iZXI6IHRoaXMuZWRpdG9yU2VydmljZS5jdXJyZW50UGFnZU51bWJlciwgcGFnZURlc2NyaXB0aW9uOiAnJyB9O1xyXG4gICAgdGhpcy5lZGl0b3JTZXJ2aWNlLnNob3dQYWdlRGV0YWlscyA9IGZhbHNlO1xyXG4gICAgdGhpcy5lZGl0b3JTZXJ2aWNlLnNob3dBZGRQYWdlT3B0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMuZ2VuZXJhdGVQYWdlRHJvcGRvd24oKTtcclxuICB9XHJcblxyXG4gIGNhcGl0YWxpemVTdHJpbmcoc3RyaW5nVmFsdWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHN0cmluZ1ZhbHVlWzBdLnRvVXBwZXJDYXNlKCkgKyBzdHJpbmdWYWx1ZS5zbGljZSgxKTtcclxuICB9XHJcblxyXG4gIG9uRGVsZXRlUGFnZUNsaWNrKCkge1xyXG4gICAgLy8gdGhpcy5zaG93RGVsZXRlUG9wdXAgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgaXNQYWdlRW1wdHkoKSB7XHJcbiAgICBpZiAoIVsuLi5uZXcgU2V0KHRoaXMuZWRpdG9yU2VydmljZS5mb3Jtc1BhZ2UuZWxlbWVudHMubWFwKChlbGVtZW50OiBhbnkpID0+IGVsZW1lbnQucGFnZSkpXS5pbmNsdWRlcyh0aGlzLmVkaXRvclNlcnZpY2UuY3VycmVudFBhZ2VOdW1iZXIpKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3VibWl0QWZ0ZXJFcnJvckNoZWNrKG1vZGU6IGFueSkge1xyXG4gICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmFjdGl2ZVF1ZXN0aW9uSW5kZXgubmV4dCgtMTApO1xyXG4gICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmFjdGl2ZVF1ZXN0aW9uID0gLTEwO1xyXG4gICAgaWYgKHRoaXMuZWRpdG9yU2VydmljZS5zdGVwSWRlbnRpZmllciA9PT0gJ3dlbGNvbWVzY3JlZW4nIHx8IHRoaXMuZWRpdG9yU2VydmljZS5zdGVwSWRlbnRpZmllciA9PT0gJ3RoYW5reW91c2NyZWVuJykge1xyXG4gICAgICB0aGlzLmVkaXRvclNlcnZpY2UuY3VycmVudFBhZ2VOdW1iZXIgPSAxO1xyXG4gICAgICB0aGlzLmVkaXRvclNlcnZpY2Uuc3RlcElkZW50aWZpZXIgPSAncGFnZXNjcmVlbic7XHJcbiAgICB9XHJcbiAgICAvL3RoaXMucGFnZU1vZGUgPSAnRURJVCc7XHJcblxyXG4gICAgdGhpcy52YWxpZGF0ZVdlbGNvbWVUaGFua1lvdSgpO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuY2hlY2tmb3JFcnJvcignZnVsbCcpKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBxdWVzdGlvbiBvZiB0aGlzLmVkaXRvclNlcnZpY2UuZm9ybXNQYWdlLmVsZW1lbnRzKSB7XHJcbiAgICAgICAgICBpZiAoIVsnY2hlY2tib3gnLCAnZHJvcGRvd24nLCAnbXVsdGlwbGUtY2hvaWNlJ10uaW5jbHVkZXMocXVlc3Rpb24udHlwZSkpIHtcclxuICAgICAgICAgICAgaWYgKHF1ZXN0aW9uLmNob2ljZXMpIHtcclxuICAgICAgICAgICAgICBxdWVzdGlvbi5jaG9pY2VzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5jb2xvciA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuc2NvcmUgPSAxO1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5pc0ZhaWxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uLm90aGVyQ29uZmlnID0geyBjb2xvcjogJycsIGlzRmFpbGVkOiBmYWxzZSwgc2NvcmU6IDAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zYXZlKG1vZGUpXHJcbiAgICAgIH1cclxuICAgIH0sIDIwMCk7XHJcblxyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVXZWxjb21lVGhhbmtZb3UoKSB7XHJcbiAgICBjb25zdCBxdWVzdGlvbiA9IHRoaXMuZWRpdG9yU2VydmljZS5mb3Jtc1BhZ2U7XHJcbiAgICBpZiAocXVlc3Rpb24uaGFzV2VsY29tZSA9PT0gdHJ1ZSkge1xyXG4gICAgICBpZiAocXVlc3Rpb24uaGFzV2VsY29tZURlc2NyaXB0aW9uID09PSB0cnVlICYmIHRoaXMuZWRpdG9yU2VydmljZS5leHRyYWN0KHF1ZXN0aW9uLndlbGNvbWVEZXNjcmlwdGlvbikubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmZvcm1zUGFnZS5oYXNXZWxjb21lRGVzY3JpcHRpb24gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocXVlc3Rpb24uaGFzV2VsY29tZUltYWdlID09PSB0cnVlICYmIHRoaXMuZWRpdG9yU2VydmljZS5leHRyYWN0KHF1ZXN0aW9uLndlbGNvbWVJbWFnZSkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmZvcm1zUGFnZS5oYXNXZWxjb21lSW1hZ2UgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5lZGl0b3JTZXJ2aWNlLmV4dHJhY3QocXVlc3Rpb24ud2VsY29tZURlc2NyaXB0aW9uKS5sZW5ndGggPT09IDAgJiZcclxuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2UuZXh0cmFjdChxdWVzdGlvbi53ZWxjb21lVGV4dCkubGVuZ3RoID09PSAwICYmXHJcbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmV4dHJhY3QocXVlc3Rpb24ud2VsY29tZUltYWdlKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2UuZm9ybXNQYWdlLmhhc1dlbGNvbWUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2UuZm9ybXNQYWdlLmhhc1dlbGNvbWVEZXNjcmlwdGlvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmZvcm1zUGFnZS5oYXNXZWxjb21lSW1hZ2UgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocXVlc3Rpb24uaGFzVGhhbmtzID09PSB0cnVlKSB7XHJcbiAgICAgIGlmIChxdWVzdGlvbi5oYXNUaGFua3lvdURlc2NyaXB0aW9uID09PSB0cnVlICYmIHRoaXMuZWRpdG9yU2VydmljZS5leHRyYWN0KHF1ZXN0aW9uLnRoYW5reW91RGVzY3JpcHRpb24pLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5mb3Jtc1BhZ2UuaGFzVGhhbmt5b3VEZXNjcmlwdGlvbiA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChxdWVzdGlvbi5oYXNUaGFua3lvdUltYWdlID09PSB0cnVlICYmIHRoaXMuZWRpdG9yU2VydmljZS5leHRyYWN0KHF1ZXN0aW9uLnRoYW5reW91SW1hZ2UpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5mb3Jtc1BhZ2UuaGFzVGhhbmt5b3VJbWFnZSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmVkaXRvclNlcnZpY2UuZXh0cmFjdChxdWVzdGlvbi50aGFua3lvdURlc2NyaXB0aW9uKS5sZW5ndGggPT09IDAgJiZcclxuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2UuZXh0cmFjdChxdWVzdGlvbi50aGFua3lvdVRleHQpLmxlbmd0aCA9PT0gMCAmJlxyXG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5leHRyYWN0KHF1ZXN0aW9uLnRoYW5reW91SW1hZ2UpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5mb3Jtc1BhZ2UuaGFzVGhhbmtzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmZvcm1zUGFnZS5oYXNUaGFua3lvdURlc2NyaXB0aW9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2UuZm9ybXNQYWdlLmhhc1RoYW5reW91SW1hZ2UgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzYXZlKG1vZGU6ICdEUkFGVCcgfCAnQUNUSVZFJykge1xyXG4gICAgaWYgKG1vZGUgPT09ICdBQ1RJVkUnICYmIHRoaXMub3BlblBvcnRhbCAhPT0gJ1JFU1BPTlNJQklMSVRZX0NIRUNLUE9JTlQnKSB7XHJcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQWN0aXZlQ29tcG9uZW50LCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgbWVzc2FnZTogYE9uY2UgcHVibGlzaGVkLCB0aGlzIGFzc2Vzc21lbnQgd2lsbCBiZSBhY3RpdmUgYW5kIGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggYSBjb21wbGlhbmNlIHJlc3BvbnNpYmlsaXR5LmBcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBvc2l0aW9uOiAnQ0VOVEVSJyxcclxuICAgICAgICBiYWNrZ3JvdW5kOiAnYmxhY2snLFxyXG4gICAgICB9KTtcclxuICAgICAgcmVmLmFmdGVyQ2xvc2VkLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9zdEFzc2Vzc21lbnQuZW1pdCh7IG1vZGU6IG1vZGUsIGFzc2Vzc21lbnREZXRhaWxzOiB0aGlzLmVkaXRvclNlcnZpY2UuZm9ybXNQYWdlIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucG9zdEFzc2Vzc21lbnQuZW1pdCh7IG1vZGU6IG1vZGUsIGFzc2Vzc21lbnREZXRhaWxzOiB0aGlzLmVkaXRvclNlcnZpY2UuZm9ybXNQYWdlfSk7XHJcblxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8bmctY29udGFpbmVyPlxyXG4gICAgPGRpdiAqbmdJZj1cInBhZ2VNb2RlID09PSAnRURJVCdcIiBjbGFzcz1cImNyZWF0ZS1hc3Nlc3NtZW50LWNvbnRhaW5lclwiIFtjbGFzcy5mdWxsLXBhZ2VdPVwiZXhwYW5kUGFnZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcmVhdGUtYXNzZXNzbWVudC1oZWFkIHZ4LXAtMiB2eC1wbC0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0IHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIiBbY2xhc3Mud2l0aC10ZW1wbGF0ZS1idG5dPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiYXNzZXNzbWVudENvbnRyb2xJZFwiIGNsYXNzPVwiaWQgdngtZnMtMTAgdngtZnctNTAwIHZ4LWxhYmVsLXR4dCB2eC10dC11cHBlcmNhc2UgdngtbXItMlwiPnt7YXNzZXNzbWVudENvbnRyb2xJZH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJvcGVuUG9ydGFsID09PSAnUkVTUE9OU0lCSUxJVFlfQ0hFQ0tQT0lOVCdcIiBjbGFzcz1cImljb25zIGFycm93LWJhY2sgdngtbXItMVwiIChjbGljayk9XCJzZXRJc1VwbG9hZGVkLmVtaXQoZmFsc2UpXCI+JiN4ZTkxZDs8L2k+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlYWRpbmcgdngtZnMtMTQgdngtZnctNTAwIHZ4LWxhYmVsLXR4dFwiIFthcHBUb29sdGlwXT1cIm9wZW5Qb3J0YWwgPT09ICdSRVNQT05TSUJJTElUWV9DSEVDS1BPSU5UJyA/ICdBZGQgQ2hlY2twb2ludHMnIDphc3Nlc3NtZW50TmFtZVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj57e29wZW5Qb3J0YWwgPT09ICdSRVNQT05TSUJJTElUWV9DSEVDS1BPSU5UJyA/ICdBZGQgQ2hlY2twb2ludHMnIDphc3Nlc3NtZW50TmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8YnV0dG9uIGNsYXNzPVwiZWRpdC1idG4gdngtZnMtMTQgdngtdHh0LWJsdWUgdngtcC0wIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCI+PGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPjwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaWdodCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwib3BlblBvcnRhbCAhPT0gJ1JFU1BPTlNJQklMSVRZX0NIRUNLUE9JTlQnXCIgY2xhc3M9XCJwYWdlLWRyb3Bkb3duIHZ4LXAtMCB2eC1wbC0xIHZ4LXByLTIgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIiBhcHBQb3BvdmVyIChjbGljayk9XCJhY3Rpb24ucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwicmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2UtbGFiZWwgdngtZnMtOSB2eC1mdy02MDAgdngtdHQtdXBwZXJjYXNlIHZ4LXBsLTEgdngtcHItMSB2eC1tci0yIHZ4LWxoLTNcIiAqbmdJZj1cImVkaXRvclNlcnZpY2UuY3VycmVudFBhZ2VOdW1iZXIgPiAwXCI+UEFHRSB7e2VkaXRvclNlcnZpY2U/LmN1cnJlbnRQYWdlTnVtYmVyfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWdlLWxhYmVsIHZ4LWZzLTkgdngtZnctNjAwIHZ4LXR0LXVwcGVyY2FzZSB2eC1wbC0xIHZ4LXByLTEgdngtbXItMiB2eC1saC0zXCIgKm5nSWY9XCJlZGl0b3JTZXJ2aWNlLmN1cnJlbnRQYWdlTnVtYmVyID09PSAtMVwiPldlbGNvbWUgU2NyZWVuPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFnZS1sYWJlbCB2eC1mcy05IHZ4LWZ3LTYwMCB2eC10dC11cHBlcmNhc2UgdngtcGwtMSB2eC1wci0xIHZ4LW1yLTIgdngtbGgtM1wiICpuZ0lmPVwiZWRpdG9yU2VydmljZS5jdXJyZW50UGFnZU51bWJlciA9PT0gLTJcIj5UaGFua3lvdSBTY3JlZW48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cInBhZ2UtbnVtYmVyIHZ4LWZzLTExIHZ4LXBhcmFncmFwaC10eHRcIiAqbmdJZj1cImVkaXRvclNlcnZpY2Uuc3RlcElkZW50aWZpZXI9PSdwYWdlc2NyZWVuJ1wiPnt7ZWRpdG9yU2VydmljZT8uY3VycmVudFBhZ2VEZXRhaWxzPy5wYWdlTmFtZX19PC9zcGFuPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGFycm93IHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHRcIj4mI3hlOWU4OzwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGFwcC1wb3BvdmVyICNhY3Rpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2UtZHJvcGRvd24tcG9wdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwidngtcC0wIHZ4LW0tMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiICpuZ0Zvcj1cImxldCBkYXRhIG9mIGdlbmVyYXRlUGFnZURyb3Bkb3duKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwidngtZC1ibG9jayB2eC1wLTIgdngtbS0wIHZ4LXctMTAwXCIgW2lubmVySFRNTF09XCJkYXRhPy50ZW1wbGF0ZVwiIChjbGljayk9XCJwYWdlQ2hhbmdlZChkYXRhKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwicGFnZS1sYWJlbCB2eC1mcy05IHZ4LWZ3LTYwMCB2eC10dC11cHBlcmNhc2UgdngtcGwtMSB2eC1wci0xIHZ4LW1yLTIgdngtbGgtM1wiPlBBR0U8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFnZS1udW1iZXIgdngtZnMtMTEgdngtcGFyYWdyYXBoLXR4dFwiPjE8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGF0YXxqc29ufX0gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWJvdHRvbSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktZW5kIHZ4LXAtMlwiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImFkZE5ld1BhZ2UoKVwiIGNsYXNzPVwiYWRkLXBhZ2UgdngtZnMtMTEgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LXBsLTIgdngtcHItMiB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPkFERCBORVcgUEFHRTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwib3BlblBvcnRhbCAhPT0gJ1JFU1BPTlNJQklMSVRZX0NIRUNLUE9JTlQnXCIgY2xhc3M9XCJzZXR0aW5ncy1idG4gdngtZnMtMTEgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC10dC11cHBlcmNhc2UgdngtbGgtNiB2eC1wLTAgdngtcGwtMiB2eC1wci0yIHZ4LW0tMCB2eC1tbC0xIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIiAoY2xpY2spPVwiYXNzZXNzbWVudFNldHRpbmdzKClcIj48aSBjbGFzcz1cImljb25zIHZ4LWZzLTEyIHZ4LWQtZmxleCB2eC1tci0xXCI+JiN4ZTkxMzs8L2k+IEFTU0VTU01FTlQgU0VUVElOR1M8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJmYWxzZVwiIGNsYXNzPVwidGVtcGxhdGUtYnRuIHZ4LWZzLTExIHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtdHQtdXBwZXJjYXNlIHZ4LWxoLTYgdngtcC0wIHZ4LXBsLTIgdngtcHItMiB2eC1tLTAgdngtbWwtMSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCI+PGkgY2xhc3M9XCJpY29ucyB2eC1mcy0xMiB2eC1kLWZsZXggdngtbXItMVwiPiYjeGU5ZWQ7PC9pPiBTQVZFIEFTIFRFTVBMQVRFPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcmVhdGUtYXNzZXNzbWVudC1ib2R5XCI+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZWRpdG9yU2VydmljZS5zdGVwSWRlbnRpZmllcj09J3BhZ2VzY3JlZW4nXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNQYWdlRW1wdHkoKVwiIGNsYXNzPVwic2VsZWN0LXF1ZXN0aW9uLXBhcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicXVlc3Rpb24taW5uZXIgdngtcGwtNSB2eC1tYi00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxidXR0b24gY2xhc3M9XCJwYWdlLXRpdGxlIHZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC1sYWJlbC10eHQgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtbWwtMSB2eC1tci0xIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtdy0xMDBcIiAoY2xpY2spPVwiYWRkUGFnZURldGFpbHMoKVwiPjxpIGNsYXNzPVwiaWNvbnMgdngtZnMtMTYgdngtbXItMVwiPiYjeGU5MGE7PC9pPiBQQUdFIFRJVExFPC9idXR0b24+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRpbmcgdngtZnMtMTggdngtcGFyYWdyYXBoLXR4dCB2eC10ZXh0LWNlbnRlciB2eC13LTEwMFwiPlNlbGVjdCBhIHF1ZXN0aW9uIHR5cGUgdG8gYmVnaW46PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLXF1ZXN0aW9uLXR5cGUgKGFkZFF1ZXN0aW9uKT1cImVkaXRvclNlcnZpY2UuYWRkUXVlc3Rpb24oJGV2ZW50KVwiPjwvYXBwLXF1ZXN0aW9uLXR5cGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxvYXRpbmctYmFyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbG9hdGluZy1iYXItY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FuY2VsXCIgKGNsaWNrKT1cInNldElzVXBsb2FkZWQuZW1pdChmYWxzZSlcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxuZy10ZW1wbGF0ZSAjZWxzZUJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1lZGl0b3ItbG9hZGVyPjwvYXBwLWVkaXRvci1sb2FkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNQYWdlRW1wdHkoKSB8fCBlZGl0b3JTZXJ2aWNlLmN1cnJlbnRQYWdlTnVtYmVyIDwgMFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVkaXRvci1zZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVkaXRvci1zZWN0aW9uLWJvZHkgdngtZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtdG9vbGtpdCAoYWRkUXVlc3Rpb24pPVwiZWRpdG9yU2VydmljZS5hZGRRdWVzdGlvbigkZXZlbnQpXCI+PC9hcHAtdG9vbGtpdD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlZGl0b3Itc2VjdGlvbi1pbm5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC13ZWxjb21lLXRoYW5reW91ICpuZ0lmPSdlZGl0b3JTZXJ2aWNlLnN0ZXBJZGVudGlmaWVyPT1cIndlbGNvbWVzY3JlZW5cIicgW2VudGl0eURhdGFdPVwiZWRpdG9yU2VydmljZT8uZm9ybXNQYWdlXCIgW3NlcnZpY2VdPVwiZWRpdG9yU2VydmljZVwiIChkZWxldGVRdWVzdGlvbik9XCJkZWxldGVRdWVzdGlvbldpdGhWYWxpZGF0aW9uKCd3ZWxjb21lJylcIj48L2FwcC13ZWxjb21lLXRoYW5reW91PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxhcHAtcHJldmlldy13ZWxjb21lPjwvYXBwLXByZXZpZXctd2VsY29tZT4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0nZWRpdG9yU2VydmljZS5zdGVwSWRlbnRpZmllcj09XCJwYWdlc2NyZWVuXCInPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPSdlZGl0b3JTZXJ2aWNlLnN0ZXBJZGVudGlmaWVyPT1cInBhZ2VzY3JlZW5cIiAmJiBlZGl0b3JTZXJ2aWNlLnNob3dBZGRQYWdlT3B0aW9uICcgY2xhc3M9XCJwYWdlLXRpdGxlIHZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC1sYWJlbC10eHQgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtbWItMiB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LXctMTAwXCIgKGNsaWNrKT1cImFkZFBhZ2VEZXRhaWxzKClcIj48aSBjbGFzcz1cImljb25zIHZ4LWZzLTE2IHZ4LW1yLTFcIj4mI3hlOTBhOzwvaT4gUEFHRSBUSVRMRTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1wYWdlLWhlYWRlciAoZWRpdCk9XCJhZGRQYWdlRGV0YWlscygpXCIgKm5nSWY9J2VkaXRvclNlcnZpY2Uuc3RlcElkZW50aWZpZXI9PVwicGFnZXNjcmVlblwiICYmIGVkaXRvclNlcnZpY2Uuc2hvd1BhZ2VEZXRhaWxzJyBbcGFnZU5hbWVdPVwiZWRpdG9yU2VydmljZS5jdXJyZW50UGFnZURldGFpbHMucGFnZU5hbWVcIiBbcGFnZURlc2NyaXB0aW9uXT1cImVkaXRvclNlcnZpY2UuY3VycmVudFBhZ2VEZXRhaWxzLnBhZ2VEZXNjcmlwdGlvblwiPjwvYXBwLXBhZ2UtaGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcXVlc3Rpb24gb2YgZWRpdG9yU2VydmljZS5mb3Jtc1BhZ2UuZWxlbWVudHM7bGV0IHF1ZXN0aW9uSW5kZXggPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWVzdGlvbi5wYWdlID09PSBlZGl0b3JTZXJ2aWNlLmN1cnJlbnRQYWdlTnVtYmVyICYmIGVkaXRvclNlcnZpY2Uuc3RlcElkZW50aWZpZXI9PSdwYWdlc2NyZWVuJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWVkaXRvci13cmFwcGVyICAqbmdJZj1cImVkaXRvclNlcnZpY2UuYWN0aXZlUXVlc3Rpb24gPT09IHF1ZXN0aW9uSW5kZXhcIiBbc2VydmljZV09XCJlZGl0b3JTZXJ2aWNlXCIgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCIgW3F1ZXN0aW9uSW5kZXhdPVwicXVlc3Rpb25JbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcGVuUG9ydGFsXT1cIm9wZW5Qb3J0YWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsaWRRdWVzdGlvbkRhdGEpPVwiY2hlY2tmb3JFcnJvcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlbGV0ZVF1ZXN0aW9uKT1cImRlbGV0ZVF1ZXN0aW9uV2l0aFZhbGlkYXRpb24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb3B5UXVlc3Rpb24pPVwiZWRpdG9yU2VydmljZS5jb3B5UXVlc3Rpb24oJGV2ZW50KVwiPjwvYXBwLWVkaXRvci13cmFwcGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLXByZXZpZXctd3JhcHBlciAqbmdJZj1cImVkaXRvclNlcnZpY2UuYWN0aXZlUXVlc3Rpb24gIT09IHF1ZXN0aW9uSW5kZXhcIiAgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCIgW3F1ZXN0aW9uSW5kZXhdPVwicXVlc3Rpb25JbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYWtlQWN0aXZlUXVlc3Rpb24pPVwiZWRpdG9yU2VydmljZS5hY3RpdmVRdWVzdGlvbiA9ICRldmVudFwiPjwvYXBwLXByZXZpZXctd3JhcHBlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5leHQtcXVlc3Rpb24tYXJlYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwYWdlLXRpdGxlIHZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC1sYWJlbC10eHQgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtbWItMiB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LXctMTAwXCIgKGNsaWNrKT1cIm9wZW5RdWVzdGlvbigpXCI+PGkgY2xhc3M9XCJpY29ucyB2eC1mcy0xNiB2eC1tci0xXCI+JiN4ZTkwYTs8L2k+IE5FWFQgUVVFU1RJT048L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmV4dC1xdWVzdGlvbi1wb3B1cCB2eC1wLTNcIiAqbmdJZj1cImhpZGVRdWVzdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLXF1ZXN0aW9uLXR5cGUgKGFkZFF1ZXN0aW9uKT1cImVkaXRvclNlcnZpY2UuYWRkUXVlc3Rpb24oJGV2ZW50KTtjbG9zZVF1ZXN0aW9uKClcIj48L2FwcC1xdWVzdGlvbi10eXBlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCIgKm5nSWY9XCJoaWRlUXVlc3Rpb25cIiAoY2xpY2spPVwiY2xvc2VRdWVzdGlvbigpXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJvcGVuUG9ydGFsICE9PSAnUkVTUE9OU0lCSUxJVFlfQ0hFQ0tQT0lOVCdcIiAoY2xpY2spPVwiYWRkTmV3UGFnZSgpXCIgY2xhc3M9XCJwYWdlLXRpdGxlIHZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC1sYWJlbC10eHQgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtbWItMiB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LXctMTAwXCI+PGkgY2xhc3M9XCJpY29ucyB2eC1mcy0xNiB2eC1tci0xXCI+JiN4ZTkwYTs8L2k+IEFERCBORVcgUEFHRTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmlnaHQtc2lkZS1idG5cIiAqbmdJZj1cIm9wZW5Qb3J0YWwgIT09ICdSRVNQT05TSUJJTElUWV9DSEVDS1BPSU5UJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFleHBhbmRQYWdlXCIgKGNsaWNrKT1cImNsaWNrRXhwYW5kKClcIiBjbGFzcz1cImZ1bGxzY3JlZW4tYnRuIHZ4LWZzLTE0IHZ4LXR4dC1ibHVlIHZ4LXAtMCB2eC1tLTAgdngtbWItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyXCIgW2FwcFRvb2x0aXBdPVwiJ0V4cGFuZCBQYWdlJ1wiIHBsYWNlbWVudD1cImxlZnRcIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCI+PGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5NDU7PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImV4cGFuZFBhZ2VcIiAoY2xpY2spPVwiY2xvc2VFeHBhbmQoKVwiIGNsYXNzPVwiZnVsbHNjcmVlbi1idG4gdngtZnMtMTQgdngtdHh0LWJsdWUgdngtcC0wIHZ4LW0tMCB2eC1tYi0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXJcIiBbYXBwVG9vbHRpcF09XCInU2hyaW5rIFBhZ2UnXCIgcGxhY2VtZW50PVwibGVmdFwiIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIj48aSBjbGFzcz1cImljb25zXCI+JiN4ZTk0NDs8L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZWRpdG9yU2VydmljZS5zdGVwSWRlbnRpZmllcj09J3BhZ2VzY3JlZW4nXCIgKGNsaWNrKT1cImRlbGV0ZVBhZ2UoKVwiIGNsYXNzPVwiZGVsZXRlLWJ0biB2eC1mcy0xNCB2eC10eHQtcmVkIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlclwiIFthcHBUb29sdGlwXT1cIidEZWxldGUgUGFnZSdcIiBwbGFjZW1lbnQ9XCJsZWZ0XCIgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiPjxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTIzOzwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVkaXRvci1zZWN0aW9uLWZvb3RlciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LW10LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic2V0SXNVcGxvYWRlZC5lbWl0KGZhbHNlKVwiIGNsYXNzPVwiY2FuY2VsLWJ0biB2eC1mcy0xNCB2eC1mdy01MDAgdngtdHh0LXJlZCB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LW0tMCB2eC1tbC0xIHZ4LW1yLTEgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlclwiPkNBTkNFTDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICAqbmdJZj1cIm9wZW5Qb3J0YWwgPT09ICdBU1NFU1NNRU5UX0lNUE9SVCdcIiAoY2xpY2spPVwic3VibWl0QWZ0ZXJFcnJvckNoZWNrKCdEUkFGVCcpXCIgW2NsYXNzLmRpc2FibGVkXT1cImFzc2Vzc21lbnRDdXJyZW50U3RhdGUgPT09ICdBQ1RJVkUnXCIgY2xhc3M9XCIgd2hpdGUtYnRuIHZ4LWZzLTE0IHZ4LWZ3LTUwMCB2eC10eHQtYmx1ZSB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LW0tMCB2eC1tbC0xIHZ4LW1yLTEgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlclwiPlNBVkUgQVMgRFJBRlQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAgKm5nSWY9XCJvcGVuUG9ydGFsID09PSAnQVNTRVNTTUVOVF9JTVBPUlQnXCIgKGNsaWNrKT1cInN1Ym1pdEFmdGVyRXJyb3JDaGVjaygnQUNUSVZFJylcIiBjbGFzcz1cIiBibHVlLWJ0biB2eC1mcy0xNCB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LW1sLTEgdngtbXItMSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyXCI+UFVCTElTSDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwib3BlblBvcnRhbCA9PT0gJ1JFU1BPTlNJQklMSVRZX0NIRUNLUE9JTlQnXCIgKGNsaWNrKT1cInN1Ym1pdEFmdGVyRXJyb3JDaGVjaygnQUNUSVZFJylcIiBjbGFzcz1cIiBibHVlLWJ0biB2eC1mcy0xNCB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LW1sLTEgdngtbXItMSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyXCI+TkVYVCAmbmJzcDs8aSBjbGFzcz1cImljb25zXCI+JiN4ZTkxZTs8L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiAoY2xpY2spPVwicGFnZU1vZGUgPSAnUFJFVklFVydcIiBjbGFzcz1cInByZXZpZXctYnRuIHZ4LWZzLTIwIHZ4LXR4dC13aGl0ZSB2eC1wLTAgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXJcIiBbYXBwVG9vbHRpcF09XCInUHJldmlldydcIiBwbGFjZW1lbnQ9XCJsZWZ0XCIgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiPjxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlYWU1OzwvaT48L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJmYWxzZVwiIGNsYXNzPVwiY2xvc2UtYnRuIHZ4LWZzLTEyIHZ4LXR4dC13aGl0ZSB2eC1wLTAgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXJcIiBbYXBwVG9vbHRpcF09XCInQ2xvc2UnXCIgcGxhY2VtZW50PVwibGVmdFwiIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIj48aSBjbGFzcz1cImljb25zXCI+JiN4ZTkwZDs8L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIDxhcHAtYXNzZXNzbWVudC1wcmV2aWV3LWNvbnRhaW5lciAqbmdJZj1cInBhZ2VNb2RlID09PSAnUFJFVklFVydcIiBbcXVlc3Rpb25EZXRhaWxzXT1cImVkaXRvclNlcnZpY2UuZm9ybXNQYWdlXCI+PC9hcHAtYXNzZXNzbWVudC1wcmV2aWV3LWNvbnRhaW5lcj4gLS0+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPCEtLSA8YXBwLWVkaXRvci1sb2FkZXIgKm5nSWY9XCIhaXNMb2FkZWRcIj48L2FwcC1lZGl0b3ItbG9hZGVyPiAtLT5cclxuIl19
495
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWFzc2Vzc21lbnQtY29udGFpbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3NoYXJlZENvbXBvbmVudHMvYXNzZXNzbWVudC1lZGl0b3IvY3JlYXRlLWFzc2Vzc21lbnQtY29udGFpbmVyL2NyZWF0ZS1hc3Nlc3NtZW50LWNvbnRhaW5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92eC13b3JrZmxvdy1lbmdpbmUvc3JjL2xpYi9zaGFyZWRDb21wb25lbnRzL2Fzc2Vzc21lbnQtZWRpdG9yL2NyZWF0ZS1hc3Nlc3NtZW50LWNvbnRhaW5lci9jcmVhdGUtYXNzZXNzbWVudC1jb250YWluZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBRUwsWUFBWSxFQUNaLE1BQU0sRUFDTixZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDcEcsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0saUVBQWlFLENBQUM7QUFFOUcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBSzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUN4RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdURBQXVELENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFReEYsTUFBTSxPQUFPLGtDQUFrQztJQStCN0MsWUFDVSxNQUFxQixFQUN0QixhQUE0QjtJQUNuQyx5Q0FBeUM7SUFDakMsS0FBcUIsRUFDckIsUUFBeUIsRUFDekIsTUFBYztRQUxkLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDdEIsa0JBQWEsR0FBYixh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OzRCQUNWLGlCQUFpQixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUzt5QkFDaEQsQ0FBQyxDQUFDO3FCQUNKO2dCQUNILENBQUM7YUFDRixDQUFDLENBQUM7U0FDSjthQUFNO1lBQ0wsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3ZCLElBQUksRUFBRSxJQUFJO2dCQUNWLGlCQUFpQixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUzthQUNoRCxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7OytIQTdoQlUsa0NBQWtDO21IQUFsQyxrQ0FBa0MsMldBRmxDLENBQUMsYUFBYSxDQUFDLDBCQ3ZCNUIsNG9hQTBIQTsyRkRqR2Esa0NBQWtDO2tCQU45QyxTQUFTOytCQUNFLGlDQUFpQyxhQUdoQyxDQUFDLGFBQWEsQ0FBQztnTkFhakIsVUFBVTtzQkFBbEIsS0FBSztnQkFFSSxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBRXNCLGNBQWM7c0JBQTFDLEtBQUs7dUJBQUMsZ0JBQWdCO2dCQUdNLGNBQWM7c0JBQTFDLEtBQUs7dUJBQUMsZ0JBQWdCO2dCQU04QixnQkFBZ0I7c0JBQXBFLFlBQVk7dUJBQUMseUJBQXlCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE91dHB1dCxcclxuICBIb3N0TGlzdGVuZXIsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFkZFBhZ2VEZXRhaWxzQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9hZGQtcGFnZS1kZXRhaWxzL2FkZC1wYWdlLWRldGFpbHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQXNzZXNzbWVudFNldHRpbmdzQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9hc3Nlc3NtZW50LXNldHRpbmdzL2Fzc2Vzc21lbnQtc2V0dGluZ3MuY29tcG9uZW50JztcclxuXHJcbmltcG9ydCB7IEVkaXRvclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9lZGl0b3Iuc2VydmljZSc7XHJcblxyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3VpLWtpdC9kaWFsb2cvZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTbmFja0JhclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi91aS1raXQvc25hY2stYmFyL3NuYWNrLWJhci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGVsZXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdWkta2l0L2FjdGlvbi1kaWFsb2cvZGVsZXRlL2RlbGV0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBY3RpdmVDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi91aS1raXQvYWN0aW9uLWRpYWxvZy9hY3RpdmUvYWN0aXZlLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1jcmVhdGUtYXNzZXNzbWVudC1jb250YWluZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jcmVhdGUtYXNzZXNzbWVudC1jb250YWluZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NyZWF0ZS1hc3Nlc3NtZW50LWNvbnRhaW5lci5jb21wb25lbnQubGVzcyddLFxyXG4gIHByb3ZpZGVyczogW0VkaXRvclNlcnZpY2VdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3JlYXRlQXNzZXNzbWVudENvbnRhaW5lckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgc2hvd0NvbGxhcHNlID0gZmFsc2U7XHJcbiAgZXhwYW5kUGFnZSA9IGZhbHNlO1xyXG4gIGhpZGVRdWVzdGlvbiA9IGZhbHNlO1xyXG4gIGFzc2Vzc21lbnRJZCA9ICcnO1xyXG4gIGFzc2Vzc21lbnROYW1lID0gJyc7XHJcbiAgYXNzZXNzbWVudENhdGVnb3J5ID0gJyc7XHJcbiAgYXNzZXNzbWVudENvbnRyb2xJZCA9ICcnO1xyXG4gIGFzc2Vzc21lbnRDdXJyZW50U3RhdGUgPSAnRFJBRlQnO1xyXG4gIHBhZ2VNb2RlOiAnRURJVCcgfCAnUFJFVklFVycgPSAnRURJVCc7XHJcbiAgaXNMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBvcGVuUG9ydGFsOiAnQVNTRVNTTUVOVF9JTVBPUlQnIHwgJ1JFU1BPTlNJQklMSVRZX0NIRUNLUE9JTlQnIHwgJycgPVxyXG4gICAgJyc7XHJcbiAgQE91dHB1dCgpIHNldElzVXBsb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHBvc3RBc3Nlc3NtZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBASW5wdXQoJ2Fzc2Vzc21lbnRKU09OJykgc2V0IGFzc2Vzc21lbnREYXRhKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZUFzc2Vzc21lbnQodmFsdWUpO1xyXG4gIH1cclxuICBASW5wdXQoJ2NoZWNrcG9pbnRKU09OJykgc2V0IGNoZWNrcG9pbnREYXRhKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZUNoZWNrcG9pbnQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyogV2hlbiB0aGUgXCJFc2NhcGVcIiBrZXkgaXMgcHJlc3NlZCwgaXQgZW1pdHMgYW4gZXZlbnQgdG8gc2V0IHRoZSB2YWx1ZSBvZiBcImlzVXBsb2FkZWRcIiB0b1xyXG4gIGZhbHNlLiBhbmQgbGVmdCBwb3B1cCB3aWxsIGNsb3NlLiAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24uZXNjYXBlJywgWyckZXZlbnQnXSkgb25LZXlkb3duSGFuZGxlcihcclxuICAgIGV2ZW50OiBLZXlib2FyZEV2ZW50XHJcbiAgKSB7XHJcbiAgICB0aGlzLnNldElzVXBsb2FkZWQuZW1pdChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZGlhbG9nOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgcHVibGljIGVkaXRvclNlcnZpY2U6IEVkaXRvclNlcnZpY2UsXHJcbiAgICAvLyBwcml2YXRlICBsYXlvdXRTZXJ2aWNlOiBMYXlvdXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHNuYWNrYmFyOiBTbmFja0JhclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZWRpdG9yU2VydmljZS5hZGRQYWdlKCk7XHJcbiAgICB0aGlzLmVkaXRvclNlcnZpY2UubnVtYmVyT2ZQYWdlcygpO1xyXG4gICAgLy8gdGhpcy5pbml0aWFsaXplQXNzZXNzbWVudCgpO1xyXG4gIH1cclxuICB0cmlnZ2VyUHJldmlld1dpdGhWYWxpZGF0aW9uKCkge1xyXG4gICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmFjdGl2ZVF1ZXN0aW9uSW5kZXgubmV4dCgtMTApO1xyXG4gICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmFjdGl2ZVF1ZXN0aW9uID0gLTEwO1xyXG4gIH1cclxuICBpbml0aWFsaXplQXNzZXNzbWVudChhc3Nlc3NtZW50RGF0YTogYW55KSB7XHJcbiAgICBpZiAoYXNzZXNzbWVudERhdGEpIHtcclxuICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmZvcm1zUGFnZSA9IGFzc2Vzc21lbnREYXRhLmFzc2Vzc21lbnREYXRhO1xyXG4gICAgICB0aGlzLmFzc2Vzc21lbnROYW1lID0gYXNzZXNzbWVudERhdGEubWV0YWRhdGEuYXNzZXNzbWVudF9uYW1lO1xyXG4gICAgICB0aGlzLmFzc2Vzc21lbnRDYXRlZ29yeSA9IGFzc2Vzc21lbnREYXRhLm1ldGFkYXRhLmNhdGVnb3J5X2FycjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVDaGVja3BvaW50KGNoZWNrcG9pbnREYXRhOiBhbnkpIHtcclxuICAgIGlmIChjaGVja3BvaW50RGF0YSAmJiBPYmplY3Qua2V5cyhjaGVja3BvaW50RGF0YSk/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmZvcm1zUGFnZSA9IGNoZWNrcG9pbnREYXRhO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0QWxsUGFnZXMoKSB7XHJcbiAgICB0aGlzLmVkaXRvclNlcnZpY2UuYWxsUGFnZXMgPSBbXHJcbiAgICAgIC4uLm5ldyBTZXQoXHJcbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmZvcm1zUGFnZS5lbGVtZW50cy5tYXAoKGVsZTogYW55KSA9PiBlbGUucGFnZSlcclxuICAgICAgKSxcclxuICAgIF07XHJcbiAgICB0aGlzLmdldFBhZ2VOYW1lKDEpO1xyXG4gIH1cclxuXHJcbiAgYWRkUGFnZURldGFpbHMoKSB7XHJcbiAgICBjb25zdCByZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEFkZFBhZ2VEZXRhaWxzQ29tcG9uZW50LCB7XHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBwYWdlOiB0aGlzLmVkaXRvclNlcnZpY2UuY3VycmVudFBhZ2VOdW1iZXIsXHJcbiAgICAgICAgcGFnZURldGFpbHM6IHRoaXMuZWRpdG9yU2VydmljZS5jdXJyZW50UGFnZURldGFpbHMsXHJcbiAgICAgICAgcmVmOiB0aGlzLmVkaXRvclNlcnZpY2UsXHJcbiAgICAgIH0sXHJcbiAgICAgIHBvc2l0aW9uOiAnUklHSFQnLFxyXG4gICAgICBiYWNrZ3JvdW5kOiAnYmxhY2snLFxyXG4gICAgfSk7XHJcbiAgICByZWYuYWZ0ZXJDbG9zZWQuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5nZW5lcmF0ZVBhZ2VEcm9wZG93bigpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZW50aXR5U2V0dGluZ3M6IGFueSA9IHtcclxuICAgIHBhbmVsVGl0bGU6ICcnLFxyXG4gIH07XHJcblxyXG4gIGFzc2Vzc21lbnRTZXR0aW5ncygpIHtcclxuICAgIHRoaXMuZW50aXR5U2V0dGluZ3MgPSB0aGlzLmdldFNldHRpbmdzRGF0YSgpO1xyXG4gICAgY29uc3QgcmVmID0gdGhpcy5kaWFsb2cub3BlbihBc3Nlc3NtZW50U2V0dGluZ3NDb21wb25lbnQsIHtcclxuICAgICAgZGF0YTogeyBzZXR0aW5nczogdGhpcy5lbnRpdHlTZXR0aW5ncywgc2VydmljZTogdGhpcy5lZGl0b3JTZXJ2aWNlIH0sXHJcbiAgICAgIHBvc2l0aW9uOiAnUklHSFQnLFxyXG4gICAgICBiYWNrZ3JvdW5kOiAnYmxhY2snLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRTZXR0aW5nc0RhdGEoKSB7XHJcbiAgICBsZXQgc2V0dGluZ3M6IGFueSA9IHtcclxuICAgICAgcGFuZWxUaXRsZTogYEFzc2Vzc21lbnQgc2V0dGluZ3NgLFxyXG5cclxuICAgICAgc2V0dGluZ3NFbGVtZW50czogW10sXHJcbiAgICB9O1xyXG4gICAgc2V0dGluZ3Muc2V0dGluZ3NFbGVtZW50cy5wdXNoKHtcclxuICAgICAgdHlwZTogJ0FTU0VTU01FTlQnLFxyXG4gICAgICBlbnRpdHlUeXBlOiAnQVNTRVNTTUVOVCcsXHJcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcclxuICAgICAgaXNFbmFibGVkOiB0aGlzLmVkaXRvclNlcnZpY2UuZm9ybXNQYWdlLnNldHRpbmdzLmFzc2Vzc21lbnRNb2RlLFxyXG4gICAgICBoZWxwaW5nVGV4dDpcclxuICAgICAgICAnWW91IGNhbiBjb25maWd1cmUgc2NvcmVzIGZvciB0aGUgcXVlc3Rpb25zIGFuZCBhbmFseXplIHRoZSByZXNwb25zZXMgc3VibWl0dGVkIGJ5IHRoZSByZXNwb25kZW50IGJhc2VkIG9uIHRoZXNlIHNjb3Jlcy4nLFxyXG4gICAgICBkZWZhdWx0U2NvcmU6IHRoaXMuZWRpdG9yU2VydmljZS5mb3Jtc1BhZ2Uuc2V0dGluZ3MuZGVmYXVsdFNjb3JlLFxyXG4gICAgICBuZWdhdGl2ZVNjb3JlQ3JpdGVyaWE6XHJcbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmZvcm1zUGFnZS5zZXR0aW5ncy5uZWdhdGl2ZVNjb3JlQ3JpdGVyaWEsXHJcbiAgICAgIG5lZ2F0aXZlU2NvcmU6IHRoaXMuZWRpdG9yU2VydmljZS5mb3Jtc1BhZ2Uuc2V0dGluZ3MubmVnYXRpdmVTY29yZSxcclxuICAgICAgd2VpZ2h0YWdlRW5hYmxlZDogdGhpcy5lZGl0b3JTZXJ2aWNlLmZvcm1zUGFnZS5zZXR0aW5ncy53ZWlnaHRhZ2VFbmFibGVkLFxyXG4gICAgICBzZXR0aW5nVGl0bGU6ICdBU1NFU1NNRU5UIE1PREUnLFxyXG4gICAgICBzZXR0aW5nRW5hYmxlVGV4dDogYEVuYWJsZSBhc3Nlc3NtZW50IG1vZGUgZm9yIHRoaXMgYXNzZXNzbWVudGAsXHJcbiAgICAgIHVwZGF0ZVR5cGU6ICdMQVpZJyxcclxuICAgIH0pO1xyXG4gICAgc2V0dGluZ3Muc2V0dGluZ3NFbGVtZW50cy5wdXNoKHtcclxuICAgICAgdHlwZTogJ1JFU1BPTlNFX1NFR01FTlQnLFxyXG4gICAgICBlbnRpdHlUeXBlOiAnQVNTRVNTTUVOVCcsXHJcbiAgICAgIGhlbHBpbmdUZXh0OlxyXG4gICAgICAgICdSZXNwb25zZSBzZWdtZW50cyBsZXQgeW91IGRpdmlkZSB0aGUgcmVzcG9uc2VzIGludG8gc2VwYXJhdGUgcGFydHMgb3Igc2VjdGlvbnMgZm9yIGVhc2llciBhbmFseXNpcyBvZiBkYXRhIGFuZCBhc3Npc3QgaW4gZGVjaXNpb24gbWFraW5nLicsXHJcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcclxuICAgICAgaXNFbmFibGVkOlxyXG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5mb3Jtc1BhZ2UucmVzcG9uc2VTZWdtZW50Wydpc0VuYWJsZWQnXSA/PyBmYWxzZSxcclxuICAgICAgc2V0dGluZ1RpdGxlOiAnUkVTUE9OU0UgU0VHTUVOVFMnLFxyXG4gICAgICBzZXR0aW5nRW5hYmxlVGV4dDogYENvbmZpZ3VyZSBSZXNwb25zZSBTZWdtZW50cyBmb3IgdGhpcyBhc3Nlc3NtZW50YCxcclxuICAgICAgdXBkYXRlVHlwZTogJ0xBWlknLFxyXG4gICAgICBzZWdtZW50RGF0YTogdGhpcy5lZGl0b3JTZXJ2aWNlLmZvcm1zUGFnZS5yZXNwb25zZVNlZ21lbnQsXHJcbiAgICB9KTtcclxuICAgIHJldHVybiBzZXR0aW5ncztcclxuICB9XHJcblxyXG4gIGNsaWNrQ29sbGFwc2UoKSB7XHJcbiAgICB0aGlzLnNob3dDb2xsYXBzZSA9ICF0aGlzLnNob3dDb2xsYXBzZTtcclxuICB9XHJcblxyXG4gIGNsaWNrRXhwYW5kKCkge1xyXG4gICAgdGhpcy5leHBhbmRQYWdlID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGNsb3NlRXhwYW5kKCkge1xyXG4gICAgdGhpcy5leHBhbmRQYWdlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBkZWxldGVQYWdlKCkge1xyXG4gICAgY29uc3QgcmVmID0gdGhpcy5kaWFsb2cub3BlbihEZWxldGVDb21wb25lbnQsIHtcclxuICAgICAgZGF0YTogeyBtZXNzYWdlOiBgVGhpcyBhY3Rpb24gd2lsbCA8c3Ryb25nPnJlbW92ZTwvc3Ryb25nPiB0aGlzIHBhZ2UuYCB9LFxyXG4gICAgICBwb3NpdGlvbjogJ0NFTlRFUicsXHJcbiAgICAgIGJhY2tncm91bmQ6ICdibGFjaycsXHJcbiAgICB9KTtcclxuICAgIHJlZi5hZnRlckNsb3NlZC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuZGVsZXRlUGFnZUNvbmZpcm0odHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlUGFnZUNvbmZpcm0oY29uZmlybURlbGV0ZTogYW55KSB7XHJcbiAgICBpZiAoY29uZmlybURlbGV0ZSkge1xyXG4gICAgICB0aGlzLmVkaXRvclNlcnZpY2UuYWxsUGFnZXMgPSB0aGlzLmVkaXRvclNlcnZpY2UuYWxsUGFnZXMuZmlsdGVyKFxyXG4gICAgICAgIChwYWdlTnVtOiBhbnkpID0+IHBhZ2VOdW0gIT09IHRoaXMuZWRpdG9yU2VydmljZS5jdXJyZW50UGFnZU51bWJlclxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmVkaXRvclNlcnZpY2UuYWxsUGFnZXMgPSB0aGlzLnVwZGF0ZVBhZ2VOdW1iZXJzRm9yQWxsUGFnZXMoXHJcbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmFsbFBhZ2VzXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5mb3Jtc1BhZ2UucGFnZURldGFpbHNMaXN0ID1cclxuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2UuZm9ybXNQYWdlLnBhZ2VEZXRhaWxzTGlzdC5maWx0ZXIoXHJcbiAgICAgICAgICAocGFnZURldGFpbDogYW55KSA9PlxyXG4gICAgICAgICAgICBwYWdlRGV0YWlsLnBhZ2VOdW1iZXIgIT09IHRoaXMuZWRpdG9yU2VydmljZS5jdXJyZW50UGFnZU51bWJlclxyXG4gICAgICAgICk7XHJcbiAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5mb3Jtc1BhZ2UucGFnZURldGFpbHNMaXN0ID1cclxuICAgICAgICB0aGlzLnVwZGF0ZVBhZ2VOdW1iZXJGb3JQYWdlRGV0YWlscyhcclxuICAgICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5mb3Jtc1BhZ2UucGFnZURldGFpbHNMaXN0XHJcbiAgICAgICAgKTtcclxuICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmZvcm1zUGFnZS5lbGVtZW50cyA9XHJcbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmZvcm1zUGFnZS5lbGVtZW50cy5maWx0ZXIoXHJcbiAgICAgICAgICAoZWxlbWVudERldGFpbDogYW55KSA9PlxyXG4gICAgICAgICAgICBlbGVtZW50RGV0YWlsLnBhZ2UgIT09IHRoaXMuZWRpdG9yU2VydmljZS5jdXJyZW50UGFnZU51bWJlclxyXG4gICAgICAgICk7XHJcbiAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5mb3Jtc1BhZ2UuZWxlbWVudHMgPSB0aGlzLnVwZGF0ZVBhZ2VOdW1iZXJGb3JRdWVzdGlvbnMoXHJcbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmZvcm1zUGFnZS5lbGVtZW50c1xyXG4gICAgICApO1xyXG4gICAgICBpZiAodGhpcy5lZGl0b3JTZXJ2aWNlLmN1cnJlbnRQYWdlTnVtYmVyID4gMSkge1xyXG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5jdXJyZW50UGFnZU51bWJlciAtPSAxO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZ2V0UGFnZU5hbWUodGhpcy5lZGl0b3JTZXJ2aWNlLmN1cnJlbnRQYWdlTnVtYmVyKTtcclxuICAgICAgdGhpcy5jaGVja0ZvclBhZ2VEZXRhaWxzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmFjdGl2ZVF1ZXN0aW9uID0gLTEwO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlUGFnZU51bWJlcnNGb3JBbGxQYWdlcyhhcnJheVRvQmVVcGRhdGVkOiBhbnkpIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXlUb0JlVXBkYXRlZC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoaSA+PSB0aGlzLmVkaXRvclNlcnZpY2UuY3VycmVudFBhZ2VOdW1iZXIgLSAxKSB7XHJcbiAgICAgICAgYXJyYXlUb0JlVXBkYXRlZFtpXSAtPSAxO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXJyYXlUb0JlVXBkYXRlZDtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVBhZ2VOdW1iZXJGb3JQYWdlRGV0YWlscyhhcnJheVRvQmVVcGRhdGVkOiBhbnkpIHtcclxuICAgIGFycmF5VG9CZVVwZGF0ZWQuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChlbGVtZW50LnBhZ2VOdW1iZXIgPj0gdGhpcy5lZGl0b3JTZXJ2aWNlLmN1cnJlbnRQYWdlTnVtYmVyKSB7XHJcbiAgICAgICAgZWxlbWVudC5wYWdlTnVtYmVyIC09IDE7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGFycmF5VG9CZVVwZGF0ZWQ7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVQYWdlTnVtYmVyRm9yUXVlc3Rpb25zKGFycmF5VG9CZVVwZGF0ZWQ6IGFueSkge1xyXG4gICAgYXJyYXlUb0JlVXBkYXRlZC5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgaWYgKGVsZW1lbnQucGFnZSA+PSB0aGlzLmVkaXRvclNlcnZpY2UuY3VycmVudFBhZ2VOdW1iZXIpIHtcclxuICAgICAgICBlbGVtZW50LnBhZ2UgLT0gMTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gYXJyYXlUb0JlVXBkYXRlZDtcclxuICB9XHJcblxyXG4gIG9wZW5RdWVzdGlvbigpIHtcclxuICAgIHRoaXMuaGlkZVF1ZXN0aW9uID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGNsb3NlUXVlc3Rpb24oKSB7XHJcbiAgICB0aGlzLmhpZGVRdWVzdGlvbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlUXVlc3Rpb25XaXRoVmFsaWRhdGlvbihpbmRleDogYW55KSB7XHJcbiAgICBpZiAoaW5kZXggPT09ICd3ZWxjb21lJykge1xyXG4gICAgICB0aGlzLmVkaXRvclNlcnZpY2UuZm9ybXNQYWdlLmhhc1dlbGNvbWUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmN1cnJlbnRQYWdlTnVtYmVyID0gMTtcclxuICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLnN0ZXBJZGVudGlmaWVyID0gJ3BhZ2VzY3JlZW4nO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmRlbGV0ZVF1ZXN0aW9uKGluZGV4KTtcclxuICB9XHJcblxyXG4gIGNoZWNrZm9yRXJyb3IobW9kZT86IGFueSkge1xyXG4gICAgLy8gdGhpcy5tb3JlT3B0aW9ucyA9IGZhbHNlO1xyXG4gICAgY29uc3QgZXJyb3JRdWVzdGlvbkluZGV4ID0gdGhpcy5lZGl0b3JTZXJ2aWNlLmZvcm1zUGFnZS5lbGVtZW50cy5maW5kSW5kZXgoXHJcbiAgICAgIChlbGVtZW50OiBhbnksIGluZGV4OiBhbnkpID0+XHJcbiAgICAgICAgZWxlbWVudC5lcnJvckFycmF5ICYmXHJcbiAgICAgICAgZWxlbWVudC5lcnJvckFycmF5ICE9PSB7fSAmJlxyXG4gICAgICAgIE9iamVjdC52YWx1ZXMoZWxlbWVudC5lcnJvckFycmF5KS5sZW5ndGggPiAwXHJcbiAgICApO1xyXG4gICAgaWYgKGVycm9yUXVlc3Rpb25JbmRleCA+PSAwKSB7XHJcbiAgICAgIGlmIChtb2RlID09PSAnZnVsbCcpIHtcclxuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2UuY3VycmVudFBhZ2VOdW1iZXIgPVxyXG4gICAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmZvcm1zUGFnZS5lbGVtZW50c1tlcnJvclF1ZXN0aW9uSW5kZXhdLnBhZ2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG1vZGUgIT09ICdwYXJ0aWFsJykge1xyXG4gICAgICAgIC8vIHRoaXMuZ2V0UGFnZU5hbWUodGhpcy5lZGl0b3JTZXJ2aWNlLmN1cnJlbnRQYWdlTnVtYmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmFjdGl2ZVF1ZXN0aW9uID0gZXJyb3JRdWVzdGlvbkluZGV4O1xyXG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5hY3RpdmVRdWVzdGlvbkluZGV4Lm5leHQoZXJyb3JRdWVzdGlvbkluZGV4KTtcclxuXHJcbiAgICAgICAgY29uc3QgcXVlc3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcclxuICAgICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5mb3Jtc1BhZ2UuZWxlbWVudHNbZXJyb3JRdWVzdGlvbkluZGV4XS5uYW1lXHJcbiAgICAgICAgKTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIGlmIChxdWVzdGlvbikge1xyXG4gICAgICAgICAgICBxdWVzdGlvbi5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdzdGFydCcgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMjAwKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobW9kZSA9PT0gJ3NhdmUnKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmFjdGl2ZVF1ZXN0aW9uID0gLTEwO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5hY3RpdmVRdWVzdGlvbkluZGV4Lm5leHQoLTEwKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAobW9kZSA9PT0gJ3NhdmUnKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmFjdGl2ZVF1ZXN0aW9uID0gLTEwO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5hY3RpdmVRdWVzdGlvbkluZGV4Lm5leHQoLTEwKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZVBhZ2VEcm9wZG93bigpIHtcclxuICAgIGNvbnN0IGxpc3QgPSBbXTtcclxuICAgIGlmICh0aGlzLmVkaXRvclNlcnZpY2UuZm9ybXNQYWdlLmhhc1dlbGNvbWUgPT09IHRydWUpIHtcclxuICAgICAgbGlzdC5wdXNoKHtcclxuICAgICAgICB2YWx1ZTogLTEsXHJcbiAgICAgICAgdGVtcGxhdGU6IGA8c3BhbiBjbGFzcz1cInBhZ2UtbnVtYmVyXCI+V2VsY29tZSBTY3JlZW48L3NwYW4+YCxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5lZGl0b3JTZXJ2aWNlLmZvcm1zUGFnZS5oYXNUaGFua3MgPT09IHRydWUpIHtcclxuICAgICAgbGlzdC5wdXNoKHtcclxuICAgICAgICB2YWx1ZTogLTIsXHJcbiAgICAgICAgdGVtcGxhdGU6IGA8c3BhbiBjbGFzcz1cInBhZ2UtbnVtYmVyXCI+VGhhbmsgeW91IFNjcmVlbjwvc3Bhbj5gLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVkaXRvclNlcnZpY2UuYWxsUGFnZXMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgIGxpc3QucHVzaCh7XHJcbiAgICAgICAgdmFsdWU6IGVsZW1lbnQsXHJcbiAgICAgICAgdGVtcGxhdGU6IHRoaXMuZ2V0UGFnZU5hbWVGb3JEcm9wZG93bihlbGVtZW50KSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbGlzdDtcclxuICB9XHJcblxyXG4gIGdldFBhZ2VOYW1lRm9yRHJvcGRvd24ocGFnZU51bWJlcjogYW55KSB7XHJcbiAgICBsZXQgcGFnZVZhbHVlID0gYDxzcGFuIGNsYXNzPVwicGFnZS1udW1iZXJcIj5QYWdlICR7cGFnZU51bWJlcn08L3NwYW4+YDtcclxuICAgIHRoaXMuZWRpdG9yU2VydmljZS5mb3Jtc1BhZ2UucGFnZURldGFpbHNMaXN0LmZvckVhY2goKHBhZ2VEZXRhaWw6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocGFnZURldGFpbC5wYWdlTnVtYmVyID09PSBwYWdlTnVtYmVyICYmIHBhZ2VEZXRhaWwucGFnZU5hbWUgIT09ICcnKSB7XHJcbiAgICAgICAgcGFnZVZhbHVlID0gYDxzcGFuIGNsYXNzPVwicGFnZS1sYWJlbCB2eC1mcy05IHZ4LWZ3LTYwMCB2eC10dC11cHBlcmNhc2UgdngtcGwtMSB2eC1wci0xIHZ4LW1yLTIgdngtbGgtM1wiPlBBR0U8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWdlLW51bWJlciB2eC1mcy0xMSB2eC1wYXJhZ3JhcGgtdHh0XCI+JHtwYWdlRGV0YWlsLnBhZ2VOdW1iZXJ9PC9zcGFuPmA7XHJcbiAgICAgICAgLy9wYWdlVmFsdWUgPSBgPHNwYW4gY2xhc3M9XCJwYWdlLWxhYmVsIHZ4LWZzLTkgdngtZnctNjAwIHZ4LXR0LXVwcGVyY2FzZSB2eC1wbC0xIHZ4LXByLTEgdngtbXItMiB2eC1saC0zXCI+UGFnZSA8L3NwYW4+IDxzcGFuICR7cGFnZURldGFpbC5wYWdlTnVtYmVyfTwvc3Bhbj4gPHNwYW4gY2xhc3M9XCJwYWdlLW51bWJlciB2eC1mcy0xMSB2eC1wYXJhZ3JhcGgtdHh0XCI+ICR7cGFnZURldGFpbC5wYWdlTmFtZX08L3NwYW4+YDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcGFnZVZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcGFnZUNoYW5nZWQoZXZ0OiBhbnkpIHtcclxuICAgIGlmIChldnQudmFsdWUgPT09IC0xKSB7XHJcbiAgICAgIHRoaXMuc2V0SWRlbnRpZmllcignd2VsY29tZXNjcmVlbicpO1xyXG4gICAgfSBlbHNlIGlmIChldnQudmFsdWUgPT09IC0yKSB7XHJcbiAgICAgIHRoaXMuc2V0SWRlbnRpZmllcigndGhhbmt5b3VzY3JlZW4nKTtcclxuICAgIH0gZWxzZSBpZiAoZXZ0LnZhbHVlID49IDApIHtcclxuICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmN1cnJlbnRQYWdlTnVtYmVyID0gZXZ0Py52YWx1ZTtcclxuICAgICAgdGhpcy5zZXRJZGVudGlmaWVyKCdwYWdlc2NyZWVuJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRJZGVudGlmaWVyKHNjcmVlbjogYW55KSB7XHJcbiAgICB0aGlzLmNoYW5nZVRvSW5hY3RpdmUoKTtcclxuICAgIGlmIChzY3JlZW4gPT09ICd3ZWxjb21lc2NyZWVuJykge1xyXG4gICAgICB0aGlzLmVkaXRvclNlcnZpY2Uuc3RlcElkZW50aWZpZXIgPSAnd2VsY29tZXNjcmVlbic7XHJcbiAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5jdXJyZW50UGFnZU51bWJlciA9IC0xO1xyXG4gICAgfVxyXG4gICAgaWYgKHNjcmVlbiA9PT0gJ3RoYW5reW91c2NyZWVuJykge1xyXG4gICAgICB0aGlzLmVkaXRvclNlcnZpY2Uuc3RlcElkZW50aWZpZXIgPSAndGhhbmt5b3VzY3JlZW4nO1xyXG4gICAgICB0aGlzLmVkaXRvclNlcnZpY2UuY3VycmVudFBhZ2VOdW1iZXIgPSAtMjtcclxuICAgIH1cclxuICAgIGlmIChzY3JlZW4gPT09ICdwYWdlc2NyZWVuJykge1xyXG4gICAgICB0aGlzLmVkaXRvclNlcnZpY2Uuc3RlcElkZW50aWZpZXIgPSAncGFnZXNjcmVlbic7XHJcbiAgICAgIGlmICh0aGlzLmVkaXRvclNlcnZpY2UuYWxsUGFnZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmFkZFBhZ2UoKTtcclxuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2UuY3VycmVudFBhZ2VOdW1iZXIgPSAxO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5jdXJyZW50UGFnZU51bWJlciA9PT0gLTEgfHxcclxuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2UuY3VycmVudFBhZ2VOdW1iZXIgPT09IC0yXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5jdXJyZW50UGFnZU51bWJlciA9XHJcbiAgICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2UuYWxsUGFnZXMubGVuZ3RoO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmdldFBhZ2VOYW1lKHRoaXMuZWRpdG9yU2VydmljZS5jdXJyZW50UGFnZU51bWJlcik7XHJcbiAgfVxyXG5cclxuICBnZXRQYWdlTmFtZShwYWdlTnVtYmVyOiBhbnkpIHtcclxuICAgIHRoaXMuZWRpdG9yU2VydmljZS5jdXJyZW50UGFnZURldGFpbHMgPSB7XHJcbiAgICAgIHBhZ2VOYW1lOiAnJyxcclxuICAgICAgcGFnZU51bWJlcjogMCxcclxuICAgICAgcGFnZURlc2NyaXB0aW9uOiAnJyxcclxuICAgIH07XHJcbiAgICB0aGlzLmVkaXRvclNlcnZpY2UuZm9ybXNQYWdlLnBhZ2VEZXRhaWxzTGlzdC5mb3JFYWNoKChwYWdlRGV0YWlsOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHBhZ2VEZXRhaWwucGFnZU51bWJlciA9PT0gcGFnZU51bWJlcikge1xyXG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5jdXJyZW50UGFnZURldGFpbHMucGFnZU51bWJlciA9XHJcbiAgICAgICAgICBwYWdlRGV0YWlsLnBhZ2VOdW1iZXI7XHJcbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmN1cnJlbnRQYWdlRGV0YWlscy5wYWdlTmFtZSA9IHBhZ2VEZXRhaWwucGFnZU5hbWU7XHJcbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmN1cnJlbnRQYWdlRGV0YWlscy5wYWdlRGVzY3JpcHRpb24gPVxyXG4gICAgICAgICAgcGFnZURldGFpbC5wYWdlRGVzY3JpcHRpb247XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5jaGVja0ZvclBhZ2VEZXRhaWxzKCk7XHJcbiAgfVxyXG5cclxuICBjaGVja0ZvclBhZ2VEZXRhaWxzKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmVkaXRvclNlcnZpY2UuY3VycmVudFBhZ2VEZXRhaWxzID09PSB1bmRlZmluZWQgfHxcclxuICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmN1cnJlbnRQYWdlRGV0YWlscy5wYWdlTmFtZSA9PT0gJydcclxuICAgICkge1xyXG4gICAgICB0aGlzLmVkaXRvclNlcnZpY2Uuc2hvd0FkZFBhZ2VPcHRpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLmVkaXRvclNlcnZpY2Uuc2hvd1BhZ2VEZXRhaWxzID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVkaXRvclNlcnZpY2Uuc2hvd0FkZFBhZ2VPcHRpb24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLnNob3dQYWdlRGV0YWlscyA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VUb0luYWN0aXZlKCkge1xyXG4gICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmFjdGl2ZVF1ZXN0aW9uID0gLTU7XHJcbiAgICB0aGlzLmVkaXRvclNlcnZpY2UuYWN0aXZlUXVlc3Rpb25JbmRleC5uZXh0KC01KTtcclxuICB9XHJcblxyXG4gIGFkZE5ld1BhZ2UoKSB7XHJcbiAgICB0aGlzLmVkaXRvclNlcnZpY2UuYWRkUGFnZSgpO1xyXG4gICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmN1cnJlbnRQYWdlRGV0YWlscyA9IHtcclxuICAgICAgcGFnZU5hbWU6ICcnLFxyXG4gICAgICBwYWdlTnVtYmVyOiB0aGlzLmVkaXRvclNlcnZpY2UuY3VycmVudFBhZ2VOdW1iZXIsXHJcbiAgICAgIHBhZ2VEZXNjcmlwdGlvbjogJycsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5lZGl0b3JTZXJ2aWNlLnNob3dQYWdlRGV0YWlscyA9IGZhbHNlO1xyXG4gICAgdGhpcy5lZGl0b3JTZXJ2aWNlLnNob3dBZGRQYWdlT3B0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMuZ2VuZXJhdGVQYWdlRHJvcGRvd24oKTtcclxuICB9XHJcblxyXG4gIGNhcGl0YWxpemVTdHJpbmcoc3RyaW5nVmFsdWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHN0cmluZ1ZhbHVlWzBdLnRvVXBwZXJDYXNlKCkgKyBzdHJpbmdWYWx1ZS5zbGljZSgxKTtcclxuICB9XHJcblxyXG4gIG9uRGVsZXRlUGFnZUNsaWNrKCkge1xyXG4gICAgLy8gdGhpcy5zaG93RGVsZXRlUG9wdXAgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgaXNQYWdlRW1wdHkoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgICFbXHJcbiAgICAgICAgLi4ubmV3IFNldChcclxuICAgICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5mb3Jtc1BhZ2UuZWxlbWVudHMubWFwKFxyXG4gICAgICAgICAgICAoZWxlbWVudDogYW55KSA9PiBlbGVtZW50LnBhZ2VcclxuICAgICAgICAgIClcclxuICAgICAgICApLFxyXG4gICAgICBdLmluY2x1ZGVzKHRoaXMuZWRpdG9yU2VydmljZS5jdXJyZW50UGFnZU51bWJlcilcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN1Ym1pdEFmdGVyRXJyb3JDaGVjayhtb2RlOiBhbnkpIHtcclxuICAgIHRoaXMuZWRpdG9yU2VydmljZS5hY3RpdmVRdWVzdGlvbkluZGV4Lm5leHQoLTEwKTtcclxuICAgIHRoaXMuZWRpdG9yU2VydmljZS5hY3RpdmVRdWVzdGlvbiA9IC0xMDtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLnN0ZXBJZGVudGlmaWVyID09PSAnd2VsY29tZXNjcmVlbicgfHxcclxuICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLnN0ZXBJZGVudGlmaWVyID09PSAndGhhbmt5b3VzY3JlZW4nXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmN1cnJlbnRQYWdlTnVtYmVyID0gMTtcclxuICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLnN0ZXBJZGVudGlmaWVyID0gJ3BhZ2VzY3JlZW4nO1xyXG4gICAgfVxyXG4gICAgLy90aGlzLnBhZ2VNb2RlID0gJ0VESVQnO1xyXG5cclxuICAgIHRoaXMudmFsaWRhdGVXZWxjb21lVGhhbmtZb3UoKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLmNoZWNrZm9yRXJyb3IoJ2Z1bGwnKSkge1xyXG4gICAgICAgIGZvciAoY29uc3QgcXVlc3Rpb24gb2YgdGhpcy5lZGl0b3JTZXJ2aWNlLmZvcm1zUGFnZS5lbGVtZW50cykge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhWydjaGVja2JveCcsICdkcm9wZG93bicsICdtdWx0aXBsZS1jaG9pY2UnXS5pbmNsdWRlcyhxdWVzdGlvbi50eXBlKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmIChxdWVzdGlvbi5jaG9pY2VzKSB7XHJcbiAgICAgICAgICAgICAgcXVlc3Rpb24uY2hvaWNlcy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuY29sb3IgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LnNjb3JlID0gMTtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuaXNGYWlsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBxdWVzdGlvbi5vdGhlckNvbmZpZyA9IHsgY29sb3I6ICcnLCBpc0ZhaWxlZDogZmFsc2UsIHNjb3JlOiAwIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2F2ZShtb2RlKTtcclxuICAgICAgfVxyXG4gICAgfSwgMjAwKTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlV2VsY29tZVRoYW5rWW91KCkge1xyXG4gICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLmVkaXRvclNlcnZpY2UuZm9ybXNQYWdlO1xyXG4gICAgaWYgKHF1ZXN0aW9uLmhhc1dlbGNvbWUgPT09IHRydWUpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHF1ZXN0aW9uLmhhc1dlbGNvbWVEZXNjcmlwdGlvbiA9PT0gdHJ1ZSAmJlxyXG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5leHRyYWN0KHF1ZXN0aW9uLndlbGNvbWVEZXNjcmlwdGlvbikubGVuZ3RoID09PSAwXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5mb3Jtc1BhZ2UuaGFzV2VsY29tZURlc2NyaXB0aW9uID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHF1ZXN0aW9uLmhhc1dlbGNvbWVJbWFnZSA9PT0gdHJ1ZSAmJlxyXG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5leHRyYWN0KHF1ZXN0aW9uLndlbGNvbWVJbWFnZSkubGVuZ3RoID09PSAwXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5mb3Jtc1BhZ2UuaGFzV2VsY29tZUltYWdlID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5leHRyYWN0KHF1ZXN0aW9uLndlbGNvbWVEZXNjcmlwdGlvbikubGVuZ3RoID09PSAwICYmXHJcbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmV4dHJhY3QocXVlc3Rpb24ud2VsY29tZVRleHQpLmxlbmd0aCA9PT0gMCAmJlxyXG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5leHRyYWN0KHF1ZXN0aW9uLndlbGNvbWVJbWFnZSkubGVuZ3RoID09PSAwXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5mb3Jtc1BhZ2UuaGFzV2VsY29tZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5mb3Jtc1BhZ2UuaGFzV2VsY29tZURlc2NyaXB0aW9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2UuZm9ybXNQYWdlLmhhc1dlbGNvbWVJbWFnZSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChxdWVzdGlvbi5oYXNUaGFua3MgPT09IHRydWUpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHF1ZXN0aW9uLmhhc1RoYW5reW91RGVzY3JpcHRpb24gPT09IHRydWUgJiZcclxuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2UuZXh0cmFjdChxdWVzdGlvbi50aGFua3lvdURlc2NyaXB0aW9uKS5sZW5ndGggPT09IDBcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmZvcm1zUGFnZS5oYXNUaGFua3lvdURlc2NyaXB0aW9uID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHF1ZXN0aW9uLmhhc1RoYW5reW91SW1hZ2UgPT09IHRydWUgJiZcclxuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2UuZXh0cmFjdChxdWVzdGlvbi50aGFua3lvdUltYWdlKS5sZW5ndGggPT09IDBcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmZvcm1zUGFnZS5oYXNUaGFua3lvdUltYWdlID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5leHRyYWN0KHF1ZXN0aW9uLnRoYW5reW91RGVzY3JpcHRpb24pLmxlbmd0aCA9PT0gMCAmJlxyXG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5leHRyYWN0KHF1ZXN0aW9uLnRoYW5reW91VGV4dCkubGVuZ3RoID09PSAwICYmXHJcbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmV4dHJhY3QocXVlc3Rpb24udGhhbmt5b3VJbWFnZSkubGVuZ3RoID09PSAwXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5mb3Jtc1BhZ2UuaGFzVGhhbmtzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmZvcm1zUGFnZS5oYXNUaGFua3lvdURlc2NyaXB0aW9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2UuZm9ybXNQYWdlLmhhc1RoYW5reW91SW1hZ2UgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzYXZlKG1vZGU6ICdEUkFGVCcgfCAnQUNUSVZFJykge1xyXG4gICAgaWYgKG1vZGUgPT09ICdBQ1RJVkUnICYmIHRoaXMub3BlblBvcnRhbCAhPT0gJ1JFU1BPTlNJQklMSVRZX0NIRUNLUE9JTlQnKSB7XHJcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQWN0aXZlQ29tcG9uZW50LCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgbWVzc2FnZTogYE9uY2UgcHVibGlzaGVkLCB0aGlzIGFzc2Vzc21lbnQgd2lsbCBiZSBhY3RpdmUgYW5kIGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggYSBjb21wbGlhbmNlIHJlc3BvbnNpYmlsaXR5LmAsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBwb3NpdGlvbjogJ0NFTlRFUicsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ2JsYWNrJyxcclxuICAgICAgfSk7XHJcbiAgICAgIHJlZi5hZnRlckNsb3NlZC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnBvc3RBc3Nlc3NtZW50LmVtaXQoe1xyXG4gICAgICAgICAgICAgIG1vZGU6IG1vZGUsXHJcbiAgICAgICAgICAgICAgYXNzZXNzbWVudERldGFpbHM6IHRoaXMuZWRpdG9yU2VydmljZS5mb3Jtc1BhZ2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wb3N0QXNzZXNzbWVudC5lbWl0KHtcclxuICAgICAgICBtb2RlOiBtb2RlLFxyXG4gICAgICAgIGFzc2Vzc21lbnREZXRhaWxzOiB0aGlzLmVkaXRvclNlcnZpY2UuZm9ybXNQYWdlLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lcj5cclxuICAgIDxkaXYgKm5nSWY9XCJwYWdlTW9kZSA9PT0gJ0VESVQnXCIgY2xhc3M9XCJjcmVhdGUtYXNzZXNzbWVudC1jb250YWluZXJcIiBbY2xhc3MuZnVsbC1wYWdlXT1cImV4cGFuZFBhZ2VcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3JlYXRlLWFzc2Vzc21lbnQtaGVhZCB2eC1wLTIgdngtcGwtMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCIgW2NsYXNzLndpdGgtdGVtcGxhdGUtYnRuXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImFzc2Vzc21lbnRDb250cm9sSWRcIiBjbGFzcz1cImlkIHZ4LWZzLTEwIHZ4LWZ3LTUwMCB2eC1sYWJlbC10eHQgdngtdHQtdXBwZXJjYXNlIHZ4LW1yLTJcIj57e2Fzc2Vzc21lbnRDb250cm9sSWR9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwib3BlblBvcnRhbCA9PT0gJ1JFU1BPTlNJQklMSVRZX0NIRUNLUE9JTlQnXCIgY2xhc3M9XCJpY29ucyBhcnJvdy1iYWNrIHZ4LW1yLTFcIiAoY2xpY2spPVwic2V0SXNVcGxvYWRlZC5lbWl0KGZhbHNlKVwiPiYjeGU5MWQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWFkaW5nIHZ4LWZzLTE0IHZ4LWZ3LTUwMCB2eC1sYWJlbC10eHRcIiBbYXBwVG9vbHRpcF09XCJvcGVuUG9ydGFsID09PSAnUkVTUE9OU0lCSUxJVFlfQ0hFQ0tQT0lOVCcgPyAnQWRkIENoZWNrcG9pbnRzJyA6YXNzZXNzbWVudE5hbWVcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+e3tvcGVuUG9ydGFsID09PSAnUkVTUE9OU0lCSUxJVFlfQ0hFQ0tQT0lOVCcgPyAnQWRkIENoZWNrcG9pbnRzJyA6YXNzZXNzbWVudE5hbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiBjbGFzcz1cImVkaXQtYnRuIHZ4LWZzLTE0IHZ4LXR4dC1ibHVlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPjxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT48L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmlnaHQgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIm9wZW5Qb3J0YWwgIT09ICdSRVNQT05TSUJJTElUWV9DSEVDS1BPSU5UJ1wiIGNsYXNzPVwicGFnZS1kcm9wZG93biB2eC1wLTAgdngtcGwtMSB2eC1wci0yIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCIgYXBwUG9wb3ZlciAoY2xpY2spPVwiYWN0aW9uLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWdlLWxhYmVsIHZ4LWZzLTkgdngtZnctNjAwIHZ4LXR0LXVwcGVyY2FzZSB2eC1wbC0xIHZ4LXByLTEgdngtbXItMiB2eC1saC0zXCIgKm5nSWY9XCJlZGl0b3JTZXJ2aWNlLmN1cnJlbnRQYWdlTnVtYmVyID4gMFwiPlBBR0Uge3tlZGl0b3JTZXJ2aWNlPy5jdXJyZW50UGFnZU51bWJlcn19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFnZS1sYWJlbCB2eC1mcy05IHZ4LWZ3LTYwMCB2eC10dC11cHBlcmNhc2UgdngtcGwtMSB2eC1wci0xIHZ4LW1yLTIgdngtbGgtM1wiICpuZ0lmPVwiZWRpdG9yU2VydmljZS5jdXJyZW50UGFnZU51bWJlciA9PT0gLTFcIj5XZWxjb21lIFNjcmVlbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2UtbGFiZWwgdngtZnMtOSB2eC1mdy02MDAgdngtdHQtdXBwZXJjYXNlIHZ4LXBsLTEgdngtcHItMSB2eC1tci0yIHZ4LWxoLTNcIiAqbmdJZj1cImVkaXRvclNlcnZpY2UuY3VycmVudFBhZ2VOdW1iZXIgPT09IC0yXCI+VGhhbmt5b3UgU2NyZWVuPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJwYWdlLW51bWJlciB2eC1mcy0xMSB2eC1wYXJhZ3JhcGgtdHh0XCIgKm5nSWY9XCJlZGl0b3JTZXJ2aWNlLnN0ZXBJZGVudGlmaWVyPT0ncGFnZXNjcmVlbidcIj57e2VkaXRvclNlcnZpY2U/LmN1cnJlbnRQYWdlRGV0YWlscz8ucGFnZU5hbWV9fTwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBhcnJvdyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0XCI+JiN4ZTllODs8L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxhcHAtcG9wb3ZlciAjYWN0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdlLWRyb3Bkb3duLXBvcHVwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cInZ4LXAtMCB2eC1tLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIiAqbmdGb3I9XCJsZXQgZGF0YSBvZiBnZW5lcmF0ZVBhZ2VEcm9wZG93bigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInZ4LWQtYmxvY2sgdngtcC0yIHZ4LW0tMCB2eC13LTEwMFwiIFtpbm5lckhUTUxdPVwiZGF0YT8udGVtcGxhdGVcIiAoY2xpY2spPVwicGFnZUNoYW5nZWQoZGF0YSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cInBhZ2UtbGFiZWwgdngtZnMtOSB2eC1mdy02MDAgdngtdHQtdXBwZXJjYXNlIHZ4LXBsLTEgdngtcHItMSB2eC1tci0yIHZ4LWxoLTNcIj5QQUdFPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2UtbnVtYmVyIHZ4LWZzLTExIHZ4LXBhcmFncmFwaC10eHRcIj4xPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2RhdGF8anNvbn19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1ib3R0b20gdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWVuZCB2eC1wLTJcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJhZGROZXdQYWdlKClcIiBjbGFzcz1cImFkZC1wYWdlIHZ4LWZzLTExIHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1wbC0yIHZ4LXByLTIgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5BREQgTkVXIFBBR0U8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIm9wZW5Qb3J0YWwgIT09ICdSRVNQT05TSUJJTElUWV9DSEVDS1BPSU5UJ1wiIGNsYXNzPVwic2V0dGluZ3MtYnRuIHZ4LWZzLTExIHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtdHQtdXBwZXJjYXNlIHZ4LWxoLTYgdngtcC0wIHZ4LXBsLTIgdngtcHItMiB2eC1tLTAgdngtbWwtMSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCIgKGNsaWNrKT1cImFzc2Vzc21lbnRTZXR0aW5ncygpXCI+PGkgY2xhc3M9XCJpY29ucyB2eC1mcy0xMiB2eC1kLWZsZXggdngtbXItMVwiPiYjeGU5MTM7PC9pPiBBU1NFU1NNRU5UIFNFVFRJTkdTPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZmFsc2VcIiBjbGFzcz1cInRlbXBsYXRlLWJ0biB2eC1mcy0xMSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LXR0LXVwcGVyY2FzZSB2eC1saC02IHZ4LXAtMCB2eC1wbC0yIHZ4LXByLTIgdngtbS0wIHZ4LW1sLTEgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPjxpIGNsYXNzPVwiaWNvbnMgdngtZnMtMTIgdngtZC1mbGV4IHZ4LW1yLTFcIj4mI3hlOWVkOzwvaT4gU0FWRSBBUyBURU1QTEFURTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3JlYXRlLWFzc2Vzc21lbnQtYm9keVwiPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVkaXRvclNlcnZpY2Uuc3RlcElkZW50aWZpZXI9PSdwYWdlc2NyZWVuJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzUGFnZUVtcHR5KClcIiBjbGFzcz1cInNlbGVjdC1xdWVzdGlvbi1wYXJ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInF1ZXN0aW9uLWlubmVyIHZ4LXBsLTUgdngtbWItNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8YnV0dG9uIGNsYXNzPVwicGFnZS10aXRsZSB2eC1mcy0xMSB2eC1mdy02MDAgdngtbGFiZWwtdHh0IHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LW1sLTEgdngtbXItMSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LXctMTAwXCIgKGNsaWNrKT1cImFkZFBhZ2VEZXRhaWxzKClcIj48aSBjbGFzcz1cImljb25zIHZ4LWZzLTE2IHZ4LW1yLTFcIj4mI3hlOTBhOzwvaT4gUEFHRSBUSVRMRTwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkaW5nIHZ4LWZzLTE4IHZ4LXBhcmFncmFwaC10eHQgdngtdGV4dC1jZW50ZXIgdngtdy0xMDBcIj5TZWxlY3QgYSBxdWVzdGlvbiB0eXBlIHRvIGJlZ2luOjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1xdWVzdGlvbi10eXBlIChhZGRRdWVzdGlvbik9XCJlZGl0b3JTZXJ2aWNlLmFkZFF1ZXN0aW9uKCRldmVudClcIj48L2FwcC1xdWVzdGlvbi10eXBlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsb2F0aW5nLWJhclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxvYXRpbmctYmFyLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbFwiIChjbGljayk9XCJzZXRJc1VwbG9hZGVkLmVtaXQoZmFsc2UpXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8bmctdGVtcGxhdGUgI2Vsc2VCbG9jaz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtZWRpdG9yLWxvYWRlcj48L2FwcC1lZGl0b3ItbG9hZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzUGFnZUVtcHR5KCkgfHwgZWRpdG9yU2VydmljZS5jdXJyZW50UGFnZU51bWJlciA8IDBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlZGl0b3Itc2VjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlZGl0b3Itc2VjdGlvbi1ib2R5IHZ4LWQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YXBwLXRvb2xraXQgKGFkZFF1ZXN0aW9uKT1cImVkaXRvclNlcnZpY2UuYWRkUXVlc3Rpb24oJGV2ZW50KVwiPjwvYXBwLXRvb2xraXQ+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWRpdG9yLXNlY3Rpb24taW5uZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtd2VsY29tZS10aGFua3lvdSAqbmdJZj0nZWRpdG9yU2VydmljZS5zdGVwSWRlbnRpZmllcj09XCJ3ZWxjb21lc2NyZWVuXCInIFtlbnRpdHlEYXRhXT1cImVkaXRvclNlcnZpY2U/LmZvcm1zUGFnZVwiIFtzZXJ2aWNlXT1cImVkaXRvclNlcnZpY2VcIiAoZGVsZXRlUXVlc3Rpb24pPVwiZGVsZXRlUXVlc3Rpb25XaXRoVmFsaWRhdGlvbignd2VsY29tZScpXCI+PC9hcHAtd2VsY29tZS10aGFua3lvdT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8YXBwLXByZXZpZXctd2VsY29tZT48L2FwcC1wcmV2aWV3LXdlbGNvbWU+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9J2VkaXRvclNlcnZpY2Uuc3RlcElkZW50aWZpZXI9PVwicGFnZXNjcmVlblwiJz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj0nZWRpdG9yU2VydmljZS5zdGVwSWRlbnRpZmllcj09XCJwYWdlc2NyZWVuXCIgJiYgZWRpdG9yU2VydmljZS5zaG93QWRkUGFnZU9wdGlvbiAnIGNsYXNzPVwicGFnZS10aXRsZSB2eC1mcy0xMSB2eC1mdy02MDAgdngtbGFiZWwtdHh0IHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LW1iLTIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC13LTEwMFwiIChjbGljayk9XCJhZGRQYWdlRGV0YWlscygpXCI+PGkgY2xhc3M9XCJpY29ucyB2eC1mcy0xNiB2eC1tci0xXCI+JiN4ZTkwYTs8L2k+IFBBR0UgVElUTEU8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtcGFnZS1oZWFkZXIgKGVkaXQpPVwiYWRkUGFnZURldGFpbHMoKVwiICpuZ0lmPSdlZGl0b3JTZXJ2aWNlLnN0ZXBJZGVudGlmaWVyPT1cInBhZ2VzY3JlZW5cIiAmJiBlZGl0b3JTZXJ2aWNlLnNob3dQYWdlRGV0YWlscycgW3BhZ2VOYW1lXT1cImVkaXRvclNlcnZpY2UuY3VycmVudFBhZ2VEZXRhaWxzLnBhZ2VOYW1lXCIgW3BhZ2VEZXNjcmlwdGlvbl09XCJlZGl0b3JTZXJ2aWNlLmN1cnJlbnRQYWdlRGV0YWlscy5wYWdlRGVzY3JpcHRpb25cIj48L2FwcC1wYWdlLWhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHF1ZXN0aW9uIG9mIGVkaXRvclNlcnZpY2UuZm9ybXNQYWdlLmVsZW1lbnRzO2xldCBxdWVzdGlvbkluZGV4ID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicXVlc3Rpb24ucGFnZSA9PT0gZWRpdG9yU2VydmljZS5jdXJyZW50UGFnZU51bWJlciAmJiBlZGl0b3JTZXJ2aWNlLnN0ZXBJZGVudGlmaWVyPT0ncGFnZXNjcmVlbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1lZGl0b3Itd3JhcHBlciAgKm5nSWY9XCJlZGl0b3JTZXJ2aWNlLmFjdGl2ZVF1ZXN0aW9uID09PSBxdWVzdGlvbkluZGV4XCIgW3NlcnZpY2VdPVwiZWRpdG9yU2VydmljZVwiIFtxdWVzdGlvbl09XCJxdWVzdGlvblwiIFtxdWVzdGlvbkluZGV4XT1cInF1ZXN0aW9uSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3BlblBvcnRhbF09XCJvcGVuUG9ydGFsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbGlkUXVlc3Rpb25EYXRhKT1cImNoZWNrZm9yRXJyb3IoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWxldGVRdWVzdGlvbik9XCJkZWxldGVRdWVzdGlvbldpdGhWYWxpZGF0aW9uKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29weVF1ZXN0aW9uKT1cImVkaXRvclNlcnZpY2UuY29weVF1ZXN0aW9uKCRldmVudClcIj48L2FwcC1lZGl0b3Itd3JhcHBlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1wcmV2aWV3LXdyYXBwZXIgKm5nSWY9XCJlZGl0b3JTZXJ2aWNlLmFjdGl2ZVF1ZXN0aW9uICE9PSBxdWVzdGlvbkluZGV4XCIgIFtxdWVzdGlvbl09XCJxdWVzdGlvblwiIFtxdWVzdGlvbkluZGV4XT1cInF1ZXN0aW9uSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWFrZUFjdGl2ZVF1ZXN0aW9uKT1cImVkaXRvclNlcnZpY2UuYWN0aXZlUXVlc3Rpb24gPSAkZXZlbnRcIj48L2FwcC1wcmV2aWV3LXdyYXBwZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZXh0LXF1ZXN0aW9uLWFyZWFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicGFnZS10aXRsZSB2eC1mcy0xMSB2eC1mdy02MDAgdngtbGFiZWwtdHh0IHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LW1iLTIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC13LTEwMFwiIChjbGljayk9XCJvcGVuUXVlc3Rpb24oKVwiPjxpIGNsYXNzPVwiaWNvbnMgdngtZnMtMTYgdngtbXItMVwiPiYjeGU5MGE7PC9pPiBORVhUIFFVRVNUSU9OPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5leHQtcXVlc3Rpb24tcG9wdXAgdngtcC0zXCIgKm5nSWY9XCJoaWRlUXVlc3Rpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1xdWVzdGlvbi10eXBlIChhZGRRdWVzdGlvbik9XCJlZGl0b3JTZXJ2aWNlLmFkZFF1ZXN0aW9uKCRldmVudCk7Y2xvc2VRdWVzdGlvbigpXCI+PC9hcHAtcXVlc3Rpb24tdHlwZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheVwiICpuZ0lmPVwiaGlkZVF1ZXN0aW9uXCIgKGNsaWNrKT1cImNsb3NlUXVlc3Rpb24oKVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwib3BlblBvcnRhbCAhPT0gJ1JFU1BPTlNJQklMSVRZX0NIRUNLUE9JTlQnXCIgKGNsaWNrKT1cImFkZE5ld1BhZ2UoKVwiIGNsYXNzPVwicGFnZS10aXRsZSB2eC1mcy0xMSB2eC1mdy02MDAgdngtbGFiZWwtdHh0IHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LW1iLTIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC13LTEwMFwiPjxpIGNsYXNzPVwiaWNvbnMgdngtZnMtMTYgdngtbXItMVwiPiYjeGU5MGE7PC9pPiBBREQgTkVXIFBBR0U8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0LXNpZGUtYnRuXCIgKm5nSWY9XCJvcGVuUG9ydGFsICE9PSAnUkVTUE9OU0lCSUxJVFlfQ0hFQ0tQT0lOVCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhZXhwYW5kUGFnZVwiIChjbGljayk9XCJjbGlja0V4cGFuZCgpXCIgY2xhc3M9XCJmdWxsc2NyZWVuLWJ0biB2eC1mcy0xNCB2eC10eHQtYmx1ZSB2eC1wLTAgdngtbS0wIHZ4LW1iLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlclwiIFthcHBUb29sdGlwXT1cIidFeHBhbmQgUGFnZSdcIiBwbGFjZW1lbnQ9XCJsZWZ0XCIgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiPjxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTQ1OzwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJleHBhbmRQYWdlXCIgKGNsaWNrKT1cImNsb3NlRXhwYW5kKClcIiBjbGFzcz1cImZ1bGxzY3JlZW4tYnRuIHZ4LWZzLTE0IHZ4LXR4dC1ibHVlIHZ4LXAtMCB2eC1tLTAgdngtbWItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyXCIgW2FwcFRvb2x0aXBdPVwiJ1NocmluayBQYWdlJ1wiIHBsYWNlbWVudD1cImxlZnRcIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCI+PGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5NDQ7PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImVkaXRvclNlcnZpY2Uuc3RlcElkZW50aWZpZXI9PSdwYWdlc2NyZWVuJ1wiIChjbGljayk9XCJkZWxldGVQYWdlKClcIiBjbGFzcz1cImRlbGV0ZS1idG4gdngtZnMtMTQgdngtdHh0LXJlZCB2eC1wLTAgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXJcIiBbYXBwVG9vbHRpcF09XCInRGVsZXRlIFBhZ2UnXCIgcGxhY2VtZW50PVwibGVmdFwiIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIj48aSBjbGFzcz1cImljb25zXCI+JiN4ZTkyMzs8L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlZGl0b3Itc2VjdGlvbi1mb290ZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1tdC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInNldElzVXBsb2FkZWQuZW1pdChmYWxzZSlcIiBjbGFzcz1cImNhbmNlbC1idG4gdngtZnMtMTQgdngtZnctNTAwIHZ4LXR4dC1yZWQgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtbWwtMSB2eC1tci0xIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXJcIj5DQU5DRUw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAgKm5nSWY9XCJvcGVuUG9ydGFsID09PSAnQVNTRVNTTUVOVF9JTVBPUlQnXCIgKGNsaWNrKT1cInN1Ym1pdEFmdGVyRXJyb3JDaGVjaygnRFJBRlQnKVwiIFtjbGFzcy5kaXNhYmxlZF09XCJhc3Nlc3NtZW50Q3VycmVudFN0YXRlID09PSAnQUNUSVZFJ1wiIGNsYXNzPVwiIHdoaXRlLWJ0biB2eC1mcy0xNCB2eC1mdy01MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtbWwtMSB2eC1tci0xIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXJcIj5TQVZFIEFTIERSQUZUPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gICpuZ0lmPVwib3BlblBvcnRhbCA9PT0gJ0FTU0VTU01FTlRfSU1QT1JUJ1wiIChjbGljayk9XCJzdWJtaXRBZnRlckVycm9yQ2hlY2soJ0FDVElWRScpXCIgY2xhc3M9XCIgYmx1ZS1idG4gdngtZnMtMTQgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LW0tMCB2eC1tbC0xIHZ4LW1yLTEgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlclwiPlBVQkxJU0g8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIm9wZW5Qb3J0YWwgPT09ICdSRVNQT05TSUJJTElUWV9DSEVDS1BPSU5UJ1wiIChjbGljayk9XCJzdWJtaXRBZnRlckVycm9yQ2hlY2soJ0FDVElWRScpXCIgY2xhc3M9XCIgYmx1ZS1idG4gdngtZnMtMTQgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LW0tMCB2eC1tbC0xIHZ4LW1yLTEgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlclwiPk5FWFQgJm5ic3A7PGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MWU7PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxidXR0b24gKGNsaWNrKT1cInBhZ2VNb2RlID0gJ1BSRVZJRVcnXCIgY2xhc3M9XCJwcmV2aWV3LWJ0biB2eC1mcy0yMCB2eC10eHQtd2hpdGUgdngtcC0wIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyXCIgW2FwcFRvb2x0aXBdPVwiJ1ByZXZpZXcnXCIgcGxhY2VtZW50PVwibGVmdFwiIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIj48aSBjbGFzcz1cImljb25zXCI+JiN4ZWFlNTs8L2k+PC9idXR0b24+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZmFsc2VcIiBjbGFzcz1cImNsb3NlLWJ0biB2eC1mcy0xMiB2eC10eHQtd2hpdGUgdngtcC0wIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyXCIgW2FwcFRvb2x0aXBdPVwiJ0Nsb3NlJ1wiIHBsYWNlbWVudD1cImxlZnRcIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCI+PGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MGQ7PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSA8YXBwLWFzc2Vzc21lbnQtcHJldmlldy1jb250YWluZXIgKm5nSWY9XCJwYWdlTW9kZSA9PT0gJ1BSRVZJRVcnXCIgW3F1ZXN0aW9uRGV0YWlsc109XCJlZGl0b3JTZXJ2aWNlLmZvcm1zUGFnZVwiPjwvYXBwLWFzc2Vzc21lbnQtcHJldmlldy1jb250YWluZXI+IC0tPlxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbjwhLS0gPGFwcC1lZGl0b3ItbG9hZGVyICpuZ0lmPVwiIWlzTG9hZGVkXCI+PC9hcHAtZWRpdG9yLWxvYWRlcj4gLS0+XHJcbiJdfQ==