@annalib/anna-core 20.6.2 → 20.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/esm2022/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.mjs +5 -7
  2. package/esm2022/lib/anna-core-shared-lib/components/anna-deleted-order-icon-template/anna-deleted-order-icon-template.component.mjs +4 -6
  3. package/esm2022/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.mjs +16 -13
  4. package/esm2022/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.mjs +5 -7
  5. package/esm2022/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.mjs +1 -1
  6. package/esm2022/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.mjs +4 -6
  7. package/esm2022/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.mjs +5 -7
  8. package/esm2022/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.mjs +5 -7
  9. package/esm2022/lib/anna-core-shared-lib/directives/digits-only/digits-only.directive.mjs +27 -34
  10. package/esm2022/lib/anna-core-shared-lib/directives/fixed-rows-popup-table/fixed-rows-popup-table.directive.mjs +5 -5
  11. package/esm2022/lib/anna-core-shared-lib/directives/show-ellipsis-text/show-ellipsis-text.directive.mjs +17 -15
  12. package/esm2022/lib/anna-core-shared-lib/models/anna-global-dropdown-config.model.mjs +1 -1
  13. package/esm2022/lib/anna-core-shared-lib/models/anna-non-editable-gt-models.mjs +1 -1
  14. package/esm2022/lib/anna-core-shared-lib/models/anna-tooltip.model.mjs +2 -2
  15. package/esm2022/lib/anna-core-shared-lib/pipes/annaConvertArrayToCommaSeperatedValue.pipe.mjs +3 -3
  16. package/esm2022/lib/anna-core-shared-lib/pipes/annaDateFormatter.pipe.mjs +3 -4
  17. package/esm2022/lib/anna-core-shared-lib/pipes/annaFilterSearchedText.pipe.mjs +17 -19
  18. package/esm2022/lib/anna-core-shared-lib/pipes/annaReplaceChar.pipe.mjs +2 -1
  19. package/esm2022/lib/anna-core-shared-lib/services/anna-date-time-format.service.mjs +102 -81
  20. package/esm2022/lib/anna-core-shared-lib/services/anna-filter.service.mjs +363 -371
  21. package/esm2022/lib/anna-core-shared-lib/services/anna-generic-table.service.mjs +29 -31
  22. package/esm2022/lib/anna-core-shared-lib/services/anna-global-config.service.mjs +1 -1
  23. package/esm2022/lib/anna-core-shared-lib/services/anna-number-format.service.mjs +21 -15
  24. package/esm2022/lib/anna-core-shared-lib/services/anna-persisting-filter.service.mjs +6 -7
  25. package/esm2022/lib/anna-core-shared-lib/services/anna-sort.service.mjs +41 -43
  26. package/esm2022/lib/anna-core.module.mjs +28 -47
  27. package/esm2022/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.mjs +19 -19
  28. package/esm2022/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.mjs +76 -88
  29. package/esm2022/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-checkbox-filter/anna-column-checkbox-filter.component.mjs +40 -36
  30. package/esm2022/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-date-range-filter/anna-column-date-range-filter.component.mjs +14 -13
  31. package/esm2022/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-slider-filter/anna-column-slider-filter.component.mjs +23 -23
  32. package/esm2022/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-time-filter/anna-column-time-filter.component.mjs +31 -34
  33. package/esm2022/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.mjs +108 -103
  34. package/esm2022/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.mjs +13 -9
  35. package/esm2022/public-api.mjs +27 -30
  36. package/fesm2022/annalib-anna-core.mjs +3359 -4096
  37. package/fesm2022/annalib-anna-core.mjs.map +1 -1
  38. package/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.d.ts +2 -5
  39. package/lib/anna-core-shared-lib/components/anna-deleted-order-icon-template/anna-deleted-order-icon-template.component.d.ts +2 -5
  40. package/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.d.ts +4 -6
  41. package/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.d.ts +2 -5
  42. package/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.d.ts +2 -5
  43. package/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.d.ts +2 -5
  44. package/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.d.ts +2 -5
  45. package/lib/anna-core-shared-lib/directives/digits-only/digits-only.directive.d.ts +1 -1
  46. package/lib/anna-core-shared-lib/directives/fixed-rows-popup-table/fixed-rows-popup-table.directive.d.ts +3 -3
  47. package/lib/anna-core-shared-lib/directives/show-ellipsis-text/show-ellipsis-text.directive.d.ts +3 -3
  48. package/lib/anna-core-shared-lib/models/anna-non-editable-gt-models.d.ts +1 -1
  49. package/lib/anna-core-shared-lib/models/anna-tooltip.model.d.ts +1 -1
  50. package/lib/anna-core-shared-lib/pipes/annaDateFormatter.pipe.d.ts +0 -1
  51. package/lib/anna-core-shared-lib/services/anna-date-time-format.service.d.ts +3 -2
  52. package/lib/anna-core-shared-lib/services/anna-filter.service.d.ts +4 -4
  53. package/lib/anna-core-shared-lib/services/anna-global-config.service.d.ts +2 -2
  54. package/lib/anna-core-shared-lib/services/anna-persisting-filter.service.d.ts +0 -1
  55. package/lib/anna-core.module.d.ts +12 -15
  56. package/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.d.ts +1 -1
  57. package/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.d.ts +2 -2
  58. package/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-checkbox-filter/anna-column-checkbox-filter.component.d.ts +4 -4
  59. package/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-date-range-filter/anna-column-date-range-filter.component.d.ts +3 -3
  60. package/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-slider-filter/anna-column-slider-filter.component.d.ts +4 -4
  61. package/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-time-filter/anna-column-time-filter.component.d.ts +4 -4
  62. package/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.d.ts +9 -9
  63. package/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.d.ts +2 -2
  64. package/package.json +1 -1
  65. package/public-api.d.ts +14 -17
  66. package/src/lib/anna-common-scss/_filters.scss +12 -0
  67. package/esm2022/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.mjs +0 -352
  68. package/esm2022/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/anna-fixed-row-size-table-virtual-scroll-strategy.directive.mjs +0 -204
  69. package/esm2022/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/index.mjs +0 -2
  70. package/esm2022/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.mjs +0 -180
  71. package/esm2022/lib/anna-generic-table-lib/directives/anna-virtual-table/index.mjs +0 -2
  72. package/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.d.ts +0 -141
  73. package/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/anna-fixed-row-size-table-virtual-scroll-strategy.directive.d.ts +0 -89
  74. package/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/index.d.ts +0 -1
  75. package/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.d.ts +0 -45
  76. package/lib/anna-generic-table-lib/directives/anna-virtual-table/index.d.ts +0 -1
@@ -1,27 +1,33 @@
1
1
  // Angular import statements
2
- import { Component, Input, ViewChildren, QueryList, Output, EventEmitter, ChangeDetectorRef, ChangeDetectionStrategy, } from "@angular/core";
2
+ import { AsyncPipe, NgClass, NgFor, NgIf, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgTemplateOutlet, } from "@angular/common";
3
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, QueryList, ViewChildren, } from "@angular/core";
4
+ import { FormsModule } from "@angular/forms";
5
+ import { MatRadioModule } from "@angular/material/radio";
6
+ import { MatTableModule } from "@angular/material/table";
7
+ import { NgbTooltip } from "@ng-bootstrap/ng-bootstrap";
3
8
  // Third party import statements
4
9
  import { cloneDeep, isEqual, uniq } from "lodash-es";
10
+ import { NgCircleProgressModule } from "ng-circle-progress";
11
+ import { NgxSkeletonLoaderModule } from "ngx-skeleton-loader";
12
+ import { BehaviorSubject } from "rxjs";
13
+ // eslint-disable-next-line max-len
14
+ import { AnnaIconColumnComponent } from "../../../anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component";
15
+ import { AnnaNoDataComponent } from "../../../anna-core-shared-lib/components/anna-no-data/anna-no-data.component";
16
+ // eslint-disable-next-line max-len
17
+ import { ShowEllipsisTextOnHoverDirective } from "../../../anna-core-shared-lib/directives/show-ellipsis-text/show-ellipsis-text.directive";
18
+ import { RadioButtonModel } from "../../../anna-core-shared-lib/models/anna-tooltip.model";
5
19
  import { AnnaDateTimeFormatService } from "../../../anna-core-shared-lib/services/anna-date-time-format.service";
6
- import { AnnaSortService } from "../../../anna-core-shared-lib/services/anna-sort.service";
7
20
  import { AnnaFilterService } from "../../../anna-core-shared-lib/services/anna-filter.service";
8
- import { BehaviorSubject } from "rxjs";
9
- import { NgCircleProgressModule } from "ng-circle-progress";
10
- import { AnnaColumnTimeFilterComponent } from "../anna-column-filters/anna-column-time-filter/anna-column-time-filter.component";
21
+ import { AnnaSortService } from "../../../anna-core-shared-lib/services/anna-sort.service";
22
+ // eslint-disable-next-line max-len
23
+ import { AnnaColumnCheckboxFilterComponent } from "../anna-column-filters/anna-column-checkbox-filter/anna-column-checkbox-filter.component";
24
+ // eslint-disable-next-line max-len
11
25
  import { AnnaColumnDateRangeFilterComponent } from "../anna-column-filters/anna-column-date-range-filter/anna-column-date-range-filter.component";
26
+ // eslint-disable-next-line max-len
12
27
  import { AnnaColumnSliderFilterComponent } from "../anna-column-filters/anna-column-slider-filter/anna-column-slider-filter.component";
13
- import { AnnaColumnCheckboxFilterComponent } from "../anna-column-filters/anna-column-checkbox-filter/anna-column-checkbox-filter.component";
14
- import { AnnaNoDataComponent } from "../../../anna-core-shared-lib/components/anna-no-data/anna-no-data.component";
28
+ // eslint-disable-next-line max-len
29
+ import { AnnaColumnTimeFilterComponent } from "../anna-column-filters/anna-column-time-filter/anna-column-time-filter.component";
15
30
  import { AnnaEstIconTemplateComponent } from "../../../anna-core-shared-lib/components/anna-est-icon-template/anna-est-icon-template.component";
16
- import { MatRadioModule } from "@angular/material/radio";
17
- import { FormsModule } from "@angular/forms";
18
- import { AnnaIconColumnComponent } from "../../../anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component";
19
- import { showEllipsisTextOnHoverDirective } from "../../../anna-core-shared-lib/directives/show-ellipsis-text/show-ellipsis-text.directive";
20
- import { NgxSkeletonLoaderModule } from "ngx-skeleton-loader";
21
- import { NgbTooltip } from "@ng-bootstrap/ng-bootstrap";
22
- import { MatTableModule } from "@angular/material/table";
23
- import { NgClass, NgStyle, NgFor, NgIf, NgTemplateOutlet, NgSwitch, NgSwitchCase, NgSwitchDefault, AsyncPipe, } from "@angular/common";
24
- import { RadioButtonModel } from "../../../anna-core-shared-lib/models/anna-tooltip.model";
25
31
  import * as i0 from "@angular/core";
26
32
  import * as i1 from "../../../anna-core-shared-lib/services/anna-sort.service";
27
33
  import * as i2 from "../../../anna-core-shared-lib/services/anna-date-time-format.service";
@@ -102,8 +108,8 @@ export class AnnaNonEditableGenericTableComponent {
102
108
  }
103
109
  ngOnChanges(changes) {
104
110
  if (changes &&
105
- changes["gtDimension"] &&
106
- changes["gtDimension"].currentValue &&
111
+ changes.gtDimension &&
112
+ changes.gtDimension.currentValue &&
107
113
  this.setTableHeightWhenRowSizeIsFixed) {
108
114
  this.setTableHeight();
109
115
  this.setTableBottomBorder();
@@ -114,20 +120,20 @@ export class AnnaNonEditableGenericTableComponent {
114
120
  this.isNoDataToDisplaySubject$.next(false);
115
121
  this.setTableBottomBorder();
116
122
  }
117
- else if (changes["percentDone"] ||
118
- changes["downloadInProgress"] ||
119
- (changes["starredInProgress"] && changes["starredInProgress"].currentValue != undefined)) {
120
- //no task will be performed
123
+ else if (changes.percentDone ||
124
+ changes.downloadInProgress ||
125
+ (changes.starredInProgress && changes.starredInProgress.currentValue !== undefined)) {
126
+ // no task will be performed
121
127
  }
122
128
  else {
123
129
  this.setInitialRowsForTable();
124
130
  this.disableEnableEachColumnTooltipIcon();
125
131
  this.tableColumns = this.tableHeaders.filter((x) => x.visible).map((x) => x.headerInfo[0].objectKey);
126
- if ((this.tableData && this.tableData.length == 0) ||
127
- (this.tableData.length == 2 && this.checkIfAllTheElementsAreZero())) {
132
+ if ((this.tableData && this.tableData.length === 0) ||
133
+ (this.tableData.length === 2 && this.checkIfAllTheElementsAreZero())) {
128
134
  this.tableData = Array(2).fill(0);
129
135
  this.renderedData = cloneDeep(this.tableData);
130
- this.marginTop = -this.gtDimension.rowHeight - this.gtDimension.rowHeight / 2 + "px";
136
+ this.marginTop = `${-this.gtDimension.rowHeight - this.gtDimension.rowHeight / 2}px`;
131
137
  this.isNoDataToDisplaySubject$.next(true);
132
138
  }
133
139
  else {
@@ -136,27 +142,26 @@ export class AnnaNonEditableGenericTableComponent {
136
142
  this.showSkeletonLoading = false;
137
143
  this.setTableBottomBorder();
138
144
  }
139
- //setting table column here as well because while showing skeleton loader, we should show table headers.
140
- if (changes["tableHeaders"] &&
141
- !isEqual(changes["tableHeaders"].currentValue, changes["tableHeaders"].previousValue)) {
145
+ // setting table column here as well because while showing skeleton loader, we should show table headers.
146
+ if (changes.tableHeaders && !isEqual(changes.tableHeaders.currentValue, changes.tableHeaders.previousValue)) {
142
147
  this.tableColumns = this.tableHeaders.filter((x) => x.visible).map((x) => x.headerInfo[0].objectKey);
143
148
  this.annaSortService.columnSortState = new Map();
144
149
  this.annaFilterService.initialValueMap = new Map();
145
150
  // this.setColumnSortStateMap();
146
151
  this.setActiveStateObject();
147
152
  }
148
- if (changes["totalRowInfo"] && changes["totalRowInfo"].currentValue) {
153
+ if (changes.totalRowInfo && changes.totalRowInfo.currentValue) {
149
154
  this.totalRowColumns = this.totalRowInfo.map((x) => x.colName);
150
155
  }
151
156
  this.cdRef.detectChanges();
152
157
  }
153
158
  setFilterAlignmentBasedOnScreenResolution() {
154
- let viewportHeight = window.innerHeight;
159
+ const viewportHeight = window.innerHeight;
155
160
  if (viewportHeight < 740) {
156
- this.filterAlignment = "left right";
161
+ this.filterAlignment = "left right top bottom";
157
162
  }
158
163
  else {
159
- this.filterAlignment = "bottom left right";
164
+ this.filterAlignment = "bottom left right top";
160
165
  }
161
166
  }
162
167
  setTableBottomBorder() {
@@ -171,7 +176,7 @@ export class AnnaNonEditableGenericTableComponent {
171
176
  }
172
177
  }
173
178
  checkIfAllTheElementsAreZero() {
174
- return !this.tableData.some((item) => item != 0);
179
+ return !this.tableData.some((item) => item !== 0);
175
180
  }
176
181
  showHideTotalRow() {
177
182
  this.gtGeneralConfig.totalRow = !this.gtGeneralConfig.totalRow;
@@ -184,20 +189,20 @@ export class AnnaNonEditableGenericTableComponent {
184
189
  }
185
190
  setTableHeight() {
186
191
  let viewportHeight = window.innerHeight;
187
- let rowHeight = this.gtDimension.rowHeight;
188
- let headerHeight = this.gtDimension.headerHeight;
189
- let dataOnTopHeight = this.gtDimension.dataOnTopHeight;
190
- let marginFromBottom = this.gtDimension.marginFromBottom;
192
+ const { rowHeight } = this.gtDimension;
193
+ const { headerHeight } = this.gtDimension;
194
+ const { dataOnTopHeight } = this.gtDimension;
195
+ const { marginFromBottom } = this.gtDimension;
191
196
  let actualTableHeight;
192
197
  if (this.fixNumberOfRowsForPopup) {
193
- let maxNoOfRowsToDisplay = viewportHeight < 740 ? 5 : 10;
198
+ const maxNoOfRowsToDisplay = viewportHeight < 740 ? 5 : 10;
194
199
  this.maximumRowsWhichCanBeRenderedWithoutScroll = maxNoOfRowsToDisplay;
195
200
  actualTableHeight = this.maximumRowsWhichCanBeRenderedWithoutScroll * rowHeight + headerHeight;
196
201
  }
197
202
  else {
198
- let minHeightForTable = headerHeight + 3 * rowHeight;
203
+ const minHeightForTable = headerHeight + 3 * rowHeight;
199
204
  viewportHeight = viewportHeight <= dataOnTopHeight ? dataOnTopHeight + minHeightForTable : viewportHeight;
200
- let heightLeftForTable = viewportHeight - dataOnTopHeight - marginFromBottom;
205
+ const heightLeftForTable = viewportHeight - dataOnTopHeight - marginFromBottom;
201
206
  this.maximumRowsWhichCanBeRenderedWithoutScroll =
202
207
  Math.ceil((heightLeftForTable - headerHeight - rowHeight) / rowHeight) + 1;
203
208
  actualTableHeight = viewportHeight - dataOnTopHeight - marginFromBottom;
@@ -435,7 +440,7 @@ export class AnnaNonEditableGenericTableComponent {
435
440
  this.toggleCheckbox.emit({ rowData, columnKeys, isCheckboxSelected });
436
441
  }
437
442
  selectOrUnselectRadiobox(rowData, columnKeys, isCheckboxSelected) {
438
- if (rowData[columnKeys] == isCheckboxSelected)
443
+ if (rowData[columnKeys] === isCheckboxSelected)
439
444
  return;
440
445
  rowData[columnKeys] = isCheckboxSelected;
441
446
  this.toggleCheckbox.emit({ rowData, columnKeys, isCheckboxSelected });
@@ -452,7 +457,7 @@ export class AnnaNonEditableGenericTableComponent {
452
457
  undoMgSpot(data) {
453
458
  this.undoIconClicked.emit({ data, mgOrCredit: "MakeGood" });
454
459
  }
455
- //Sort and Filter Logic begins!
460
+ // Sort and Filter Logic begins!
456
461
  closeTooltip() {
457
462
  if (this.tooltip && this.tooltip.isOpen()) {
458
463
  this.tooltip.close();
@@ -468,12 +473,12 @@ export class AnnaNonEditableGenericTableComponent {
468
473
  bindTheValueToToolTip(tooltip, header) {
469
474
  this.bindValueFuncCalled = true;
470
475
  // if same tooltip opened close it
471
- if (tooltip == this.tooltip) {
476
+ if (tooltip === this.tooltip) {
472
477
  this.bindValueFuncCalled = false;
473
478
  this.closeTooltip();
474
479
  }
475
480
  else {
476
- let enabledHeaders = [];
481
+ const enabledHeaders = [];
477
482
  this.checkIfUniqueValuePresentForTheHeader(header, enabledHeaders);
478
483
  this.openTooltip(tooltip, enabledHeaders, header);
479
484
  if (window.innerWidth < 1500 &&
@@ -482,38 +487,37 @@ export class AnnaNonEditableGenericTableComponent {
482
487
  this.columnFilterOpened.emit();
483
488
  }
484
489
  this.showCheckboxesForTimeFilter =
485
- this.gtGeneralConfig.component == "SPOTDETAILS" ||
486
- this.gtGeneralConfig.component == "EXCLUDEINVENTORYPOPUP" ||
487
- this.gtGeneralConfig.component == "RATING";
490
+ this.gtGeneralConfig.component === "SPOTDETAILS" ||
491
+ this.gtGeneralConfig.component === "EXCLUDEINVENTORYPOPUP" ||
492
+ this.gtGeneralConfig.component === "RATING";
488
493
  this.showFilterTooltipTabs = header.filterSortObjectKeys.length > 1;
489
494
  this.bindValueFuncCalled = false;
490
495
  }
491
496
  }
492
497
  checkIfUniqueValuePresentForTheHeader(header, enabledHeaders) {
493
498
  header.filterSortObjectKeys.forEach((item) => {
494
- let dataToCheck = this.annaFilterService.getFilterOptionsData(this.tableData, this.clonedTableData, item);
495
- if (item == "period") {
496
- let uniqStartDate = uniq(dataToCheck.map((u) => u["startDate"]));
497
- let uniqEndDate = uniq(dataToCheck.map((u) => u["endDate"]));
499
+ const dataToCheck = this.annaFilterService.getFilterOptionsData(this.tableData, this.clonedTableData, item);
500
+ if (item === "period") {
501
+ const uniqStartDate = uniq(dataToCheck.map((u) => u.startDate));
502
+ const uniqEndDate = uniq(dataToCheck.map((u) => u.endDate));
498
503
  if (uniqStartDate.length > 1 || uniqEndDate.length > 1 || this.isTooltipActive([item])) {
499
504
  enabledHeaders.push(item);
500
505
  }
501
506
  }
502
507
  else {
503
- let values = dataToCheck.map((u) => u[item]);
508
+ const values = dataToCheck.map((u) => u[item]);
504
509
  // if last applied filter is this header, push it alos as enabledHeader
505
510
  let activeAndLastlyAppliedHeader = false;
506
511
  if (this.annaFilterService.appliedFiltersArray.length > 0 &&
507
- this.annaFilterService.appliedFiltersArray[this.annaFilterService.appliedFiltersArray.length - 1] ==
508
- item) {
512
+ this.annaFilterService.appliedFiltersArray[this.annaFilterService.appliedFiltersArray.length - 1] === item) {
509
513
  activeAndLastlyAppliedHeader = true;
510
514
  }
511
- if (header.filter == "CHECKBOX" &&
515
+ if (header.filter === "CHECKBOX" &&
512
516
  (uniq(values).filter((n) => n != null).length > 1 || activeAndLastlyAppliedHeader)) {
513
517
  enabledHeaders.push(item);
514
518
  }
515
- else if (header.filter != "CHECKBOX" &&
516
- (uniq(values).filter((n) => n != null && n != "-").length > 1 || activeAndLastlyAppliedHeader)) {
519
+ else if (header.filter !== "CHECKBOX" &&
520
+ (uniq(values).filter((n) => n != null && n !== "-").length > 1 || activeAndLastlyAppliedHeader)) {
517
521
  enabledHeaders.push(item);
518
522
  }
519
523
  }
@@ -523,9 +527,10 @@ export class AnnaNonEditableGenericTableComponent {
523
527
  this.closeTooltip();
524
528
  this.tooltip = tooltip;
525
529
  this.tooltip.open();
526
- //convert key into the header
530
+ // convert key into the header
527
531
  this.filterTabObjects = header.map((key, index) => {
528
- let value = this.tooltipRadioTextMap.has(key) ? this.tooltipRadioTextMap.get(key) : key; //change to display name
532
+ // change to display name
533
+ const value = this.tooltipRadioTextMap.has(key) ? this.tooltipRadioTextMap.get(key) : key;
529
534
  return new RadioButtonModel(key, value, columnHeader.isSortRequired[index], columnHeader.isFilterRequired[index]);
530
535
  });
531
536
  }
@@ -536,24 +541,23 @@ export class AnnaNonEditableGenericTableComponent {
536
541
  let values = [];
537
542
  item.disableTooltipIcon = true;
538
543
  item.filterSortObjectKeys.forEach((key) => {
539
- let latestFilters = this.annaFilterService.appliedFiltersArray;
544
+ const latestFilters = this.annaFilterService.appliedFiltersArray;
540
545
  if (latestFilters.length > 0 &&
541
546
  item.disableTooltipIcon &&
542
- latestFilters[latestFilters.length - 1] == key) {
547
+ latestFilters[latestFilters.length - 1] === key) {
543
548
  item.disableTooltipIcon = false;
544
549
  }
545
550
  if (item.disableTooltipIcon) {
546
- if (key == "period") {
547
- let uniqStartDate = uniq(this.tableData.map((u) => u["startDate"]));
548
- let uniqEndDate = uniq(this.tableData.map((u) => u["endDate"]));
549
- item.disableTooltipIcon =
550
- uniqStartDate.length > 1 || uniqEndDate.length > 1 ? false : true;
551
+ if (key === "period") {
552
+ const uniqStartDate = uniq(this.tableData.map((u) => u.startDate));
553
+ const uniqEndDate = uniq(this.tableData.map((u) => u.endDate));
554
+ item.disableTooltipIcon = !(uniqStartDate.length > 1 || uniqEndDate.length > 1);
551
555
  }
552
556
  else {
553
557
  values = this.tableData.map((u) => u[key]);
554
- if ((item.filter == "CHECKBOX" && uniq(values).filter((n) => n != null).length > 1) ||
555
- (item.filter != "CHECKBOX" &&
556
- uniq(values).filter((n) => n != null && n != "-").length > 1)) {
558
+ if ((item.filter === "CHECKBOX" && uniq(values).filter((n) => n != null).length > 1) ||
559
+ (item.filter !== "CHECKBOX" &&
560
+ uniq(values).filter((n) => n != null && n !== "-").length > 1)) {
557
561
  item.disableTooltipIcon = false;
558
562
  }
559
563
  }
@@ -564,32 +568,32 @@ export class AnnaNonEditableGenericTableComponent {
564
568
  });
565
569
  }
566
570
  setMarginLeftForFilterIcon() {
567
- let elementArr = this.viewChildTableHeaders.toArray();
571
+ const elementArr = this.viewChildTableHeaders.toArray();
568
572
  elementArr.forEach((item) => {
569
- let childDivElements = item.nativeElement.children;
570
- if (childDivElements.length == 2) {
571
- let firstParagraphOffsetWidth = childDivElements[0]?.children[0]?.offsetWidth
573
+ const childDivElements = item.nativeElement.children;
574
+ if (childDivElements.length === 2) {
575
+ const firstParagraphOffsetWidth = childDivElements[0]?.children[0]?.offsetWidth
572
576
  ? childDivElements[0]?.children[0]?.offsetWidth
573
577
  : 0;
574
- let secondParagraphOffsetWidth = childDivElements[1].children[0]?.offsetWidth
578
+ const secondParagraphOffsetWidth = childDivElements[1].children[0]?.offsetWidth
575
579
  ? childDivElements[1].children[0]?.offsetWidth
576
580
  : 0;
577
581
  if (firstParagraphOffsetWidth > secondParagraphOffsetWidth) {
578
- let diff = firstParagraphOffsetWidth - secondParagraphOffsetWidth;
579
- if (childDivElements[0].children.length == 2) {
580
- childDivElements[0].children[1].style.marginLeft = 4 + "px";
582
+ const diff = firstParagraphOffsetWidth - secondParagraphOffsetWidth;
583
+ if (childDivElements[0].children.length === 2) {
584
+ childDivElements[0].children[1].style.marginLeft = `${4}px`;
581
585
  }
582
- if (childDivElements[1].children.length == 2) {
583
- childDivElements[1].children[1].style.marginLeft = diff + 4 + "px";
586
+ if (childDivElements[1].children.length === 2) {
587
+ childDivElements[1].children[1].style.marginLeft = `${diff + 4}px`;
584
588
  }
585
589
  }
586
590
  else {
587
- let diff = secondParagraphOffsetWidth - firstParagraphOffsetWidth;
588
- if (childDivElements[0].children.length == 2) {
589
- childDivElements[0].children[1].style.marginLeft = diff + 4 + "px";
591
+ const diff = secondParagraphOffsetWidth - firstParagraphOffsetWidth;
592
+ if (childDivElements[0].children.length === 2) {
593
+ childDivElements[0].children[1].style.marginLeft = `${diff + 4}px`;
590
594
  }
591
- if (childDivElements[1].children.length == 2) {
592
- childDivElements[1].children[1].style.marginLeft = 4 + "px";
595
+ if (childDivElements[1].children.length === 2) {
596
+ childDivElements[1].children[1].style.marginLeft = `${4}px`;
593
597
  }
594
598
  }
595
599
  }
@@ -615,16 +619,16 @@ export class AnnaNonEditableGenericTableComponent {
615
619
  if ("orderId" in rowData && iconClass.includes("mdi-star")) {
616
620
  this.selectedStarredOrderId = rowData.orderId;
617
621
  }
618
- this.gtIconClicked.emit({ data: rowData, iconClass: iconClass });
622
+ this.gtIconClicked.emit({ data: rowData, iconClass });
619
623
  }
620
624
  svgIconClicked(data) {
621
625
  this.gtSVGIconClicked.emit(data);
622
626
  }
623
627
  textActionClicked(rowData, id, columnHeader) {
624
- this.gtTextActionClicked.emit({ data: rowData, id: id, columnHeader: columnHeader, isIconClicked: false });
628
+ this.gtTextActionClicked.emit({ data: rowData, id, columnHeader, isIconClicked: false });
625
629
  }
626
630
  iconClickedOnStringIconActionType(rowData, id, columnHeader) {
627
- this.gtTextActionClicked.emit({ data: rowData, id: id, columnHeader: columnHeader, isIconClicked: true });
631
+ this.gtTextActionClicked.emit({ data: rowData, id, columnHeader, isIconClicked: true });
628
632
  }
629
633
  innerHTMLCellClicked(event, rowData) {
630
634
  this.gtInnerHTMLClicked.emit({ event, rowData });
@@ -640,7 +644,7 @@ export class AnnaNonEditableGenericTableComponent {
640
644
  this.tableHeaders.forEach((item) => {
641
645
  item.headerInfo.forEach((header) => {
642
646
  if (header.showTooltipIcon) {
643
- let key = header.filterSortObjectKeys.join(",");
647
+ const key = header.filterSortObjectKeys.join(",");
644
648
  header.joinedFilterSortObjectKeys = key;
645
649
  // ANNA-4113 fix
646
650
  if (this.annaFilterService.resetFilterSortActiveStatus) {
@@ -667,7 +671,7 @@ export class AnnaNonEditableGenericTableComponent {
667
671
  const buffer = 150;
668
672
  const limit = tableScrollHeight - tableViewHeight - buffer;
669
673
  if (scrollLocation > limit) {
670
- let data = this.getTableData(this.start, this.end);
674
+ const data = this.getTableData(this.start, this.end);
671
675
  this.renderedData = this.renderedData.concat(data);
672
676
  this.updateIndex();
673
677
  }
@@ -696,31 +700,32 @@ export class AnnaNonEditableGenericTableComponent {
696
700
  }
697
701
  this.selectedRowTypeForDownload = parentChildOrTotalRow;
698
702
  this.downloadSpotDetails.emit({
699
- parentChildOrTotalRow: parentChildOrTotalRow,
703
+ parentChildOrTotalRow,
700
704
  inventoryCodeId: this.selectedInventoryIdForDownload,
701
705
  demographic: this.selectedDemographicForDownload,
702
706
  });
703
707
  }
704
708
  tableContainerScrolled(event) {
705
709
  this.isScrolledLeft = event.target.scrollLeft > 0;
706
- this.isScrollEnded = Math.round(event.target.scrollLeft) == event.target.scrollWidth - event.target.clientWidth;
710
+ this.isScrollEnded =
711
+ Math.round(event.target.scrollLeft) === event.target.scrollWidth - event.target.clientWidth;
707
712
  this.removeTooltipOnScroll();
708
713
  }
709
714
  mouseEnterOnStringTextActionType(rowData, tooltipKey) {
710
715
  this.textActionTooltip = rowData[tooltipKey];
711
- this.notificationIconHover.emit({ rowData: rowData, type: "on-enter" });
716
+ this.notificationIconHover.emit({ rowData, type: "on-enter" });
712
717
  }
713
718
  mouseEnterOnStringTextActionTypeContainingTable(rowData, tooltipKey) {
714
719
  this.tooltipContainingTable = rowData[tooltipKey];
715
720
  }
716
721
  mouseLeaveTextActionType(rowData) {
717
- this.notificationIconHoverLeave.emit({ rowData: rowData, type: "on-leave" });
722
+ this.notificationIconHoverLeave.emit({ rowData, type: "on-leave" });
718
723
  }
719
724
  mouseEnterOnTextActionType(rowData, tooltipKey) {
720
725
  this.textActionTooltip = rowData[tooltipKey];
721
726
  }
722
727
  onClickableDataClicked(Rowdata, id) {
723
- this.clickableDataClicked.emit({ data: Rowdata, id: id });
728
+ this.clickableDataClicked.emit({ data: Rowdata, id });
724
729
  }
725
730
  removeTooltipOnScroll() {
726
731
  const elements = document.getElementsByClassName("remarks-info-tooltip");
@@ -741,10 +746,10 @@ export class AnnaNonEditableGenericTableComponent {
741
746
  this.totalRowIconClicked.emit(colName);
742
747
  }
743
748
  changesMadeInEditableInputBox(event, editedObject, pasteEvent) {
744
- let enteredValue = pasteEvent ? event.clipboardData.getData("text") : event.key;
745
- let dotIndex = editedObject.value.indexOf(".");
746
- if (event.keyCode != 8 &&
747
- event.keyCode != 46 &&
749
+ const enteredValue = pasteEvent ? event.clipboardData.getData("text") : event.key;
750
+ const dotIndex = editedObject.value.indexOf(".");
751
+ if (event.keyCode !== 8 &&
752
+ event.keyCode !== 46 &&
748
753
  !(event.keyCode >= 37 && event.keyCode <= 40) &&
749
754
  ((!editedObject?.allowSpecialCharacters && !/[`0-9.]/.test(enteredValue)) ||
750
755
  (editedObject?.charactersToRestrict && editedObject?.charactersToRestrict.includes(enteredValue)) ||
@@ -756,7 +761,7 @@ export class AnnaNonEditableGenericTableComponent {
756
761
  }
757
762
  }
758
763
  editableInputValueChanged(value, row, keyEdited) {
759
- this.editableInputEdited.emit({ row: row, value: value, keyEdited: keyEdited });
764
+ this.editableInputEdited.emit({ row, value, keyEdited });
760
765
  }
761
766
  radioButtonIconClicked(data) {
762
767
  this.radioButtonMessageIconClicked.emit(data);
@@ -776,7 +781,7 @@ export class AnnaNonEditableGenericTableComponent {
776
781
  this.closeTooltip();
777
782
  }
778
783
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AnnaNonEditableGenericTableComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.AnnaSortService }, { token: i2.AnnaDateTimeFormatService }, { token: i3.AnnaFilterService }], target: i0.ɵɵFactoryTarget.Component }); }
779
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AnnaNonEditableGenericTableComponent, isStandalone: true, selector: "anna-core-non-editable-generic-table-lib", inputs: { showSkeletonLoading: "showSkeletonLoading", tableHeaders: "tableHeaders", tableData: "tableData", clonedTableData: "clonedTableData", gtGeneralConfig: "gtGeneralConfig", totalRowInfo: "totalRowInfo", gtDimension: "gtDimension", tableClass: "tableClass", maximumRowsWhichCanBeRenderedWithoutScroll: "maximumRowsWhichCanBeRenderedWithoutScroll", fixNumberOfRowsForPopup: "fixNumberOfRowsForPopup", limit: "limit", includeBorderInTableHeight: "includeBorderInTableHeight", downloadInProgress: "downloadInProgress", percentDone: "percentDone", starredInProgress: "starredInProgress", clickableRow: "clickableRow", setTableHeightWhenRowSizeIsFixed: "setTableHeightWhenRowSizeIsFixed", tableBorderBottomClassRequired: "tableBorderBottomClassRequired", hideSomeTds: "hideSomeTds", tdsHaveRowSpan: "tdsHaveRowSpan", multipleTablesPresent: "multipleTablesPresent", showOrHideToggleForTotalRow: "showOrHideToggleForTotalRow" }, outputs: { toggleCheckbox: "toggleCheckbox", toggleRowCheckbox: "toggleRowCheckbox", toggleHeaderCheckbox: "toggleHeaderCheckbox", undoIconClicked: "undoIconClicked", filterAppliedToTable: "filterAppliedToTable", sortingAppliedToTable: "sortingAppliedToTable", rowClicked: "rowClicked", radioButtonSelected: "radioButtonSelected", columnFilterOpened: "columnFilterOpened", columnFilterClosed: "columnFilterClosed", gtIconClicked: "gtIconClicked", gtSVGIconClicked: "gtSVGIconClicked", gtTextActionClicked: "gtTextActionClicked", gtViewDetailClicked: "gtViewDetailClicked", gtInnerHTMLClicked: "gtInnerHTMLClicked", downloadSpotDetails: "downloadSpotDetails", clickableDataClicked: "clickableDataClicked", totalRowIconClicked: "totalRowIconClicked", notificationIconHover: "notificationIconHover", notificationIconHoverLeave: "notificationIconHoverLeave", editableInputEdited: "editableInputEdited", radioButtonMessageIconClicked: "radioButtonMessageIconClicked" }, viewQueries: [{ propertyName: "viewChildTableHeaders", predicate: ["tableHeader"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\r\n id=\"generic-table-conatiner\"\r\n class=\"table-container {{ gtGeneralConfig?.tableOuterContainerName }} {{ tableBottomBorderClass }}\"\r\n [ngClass]=\"{\r\n 'scroll-left-shadow-effect': isScrolledLeft,\r\n 'scroll-right-shadow-effect': !isScrollEnded,\r\n 'clickable-row': clickableRow,\r\n 'no-data-table': (isNoDataToDisplaySubject$ | async),\r\n 'table-with-show-hide-total-row-toggle': showOrHideToggleForTotalRow\r\n }\"\r\n (scroll)=\"onTableContainerScroll($event)\"\r\n>\r\n <div\r\n [class]=\"gtGeneralConfig.tableContainerName\"\r\n class=\"horizontal-scroll-for-table-container\"\r\n [ngStyle]=\"{\r\n height:\r\n tableData.length < maximumRowsWhichCanBeRenderedWithoutScroll\r\n ? 'calc(' +\r\n (gtDimension.rowHeight * tableData.length +\r\n (!tableData.length || !gtGeneralConfig.totalRow\r\n ? gtDimension.headerHeight\r\n : gtDimension.headerHeight + gtDimension.rowHeight)) +\r\n 'px)'\r\n : gtDimension.tableHeight\r\n }\"\r\n >\r\n <button\r\n *ngIf=\"showOrHideToggleForTotalRow && !showSkeletonLoading && !(isNoDataToDisplaySubject$ | async)\"\r\n [ngClass]=\"{\r\n 'shift-toggle-top-on-total-row-click': !gtGeneralConfig.totalRow\r\n }\"\r\n class=\"show-or-hide-toggle-btn\"\r\n (click)=\"showHideTotalRow()\"\r\n >\r\n <i\r\n class=\"mdi mdi-menu-swap\"\r\n tooltipClass=\"show-or-hide-toggle-tooltip\"\r\n placement=\"auto\"\r\n container=\"body\"\r\n [ngbTooltip]=\"showOrHideToggleForTotalRowTooltip\"\r\n ></i>\r\n </button>\r\n <table\r\n class=\"gt\"\r\n [ngClass]=\"tableClass\"\r\n mat-table\r\n [dataSource]=\"renderedData\"\r\n >\r\n <tr\r\n class=\"header-row\"\r\n mat-header-row\r\n *matHeaderRowDef=\"tableColumns; sticky: true\"\r\n [style.height.px]=\"gtDimension.headerHeight\"\r\n ></tr>\r\n <tr\r\n class=\"total-row\"\r\n mat-header-row\r\n [style.height.px]=\"gtDimension.rowHeight\"\r\n *matHeaderRowDef=\"totalRowColumns; sticky: true\"\r\n [class.hidden]=\"\r\n showSkeletonLoading ||\r\n (!showSkeletonLoading && !tableData.length) ||\r\n (isNoDataToDisplaySubject$ | async) ||\r\n (!showSkeletonLoading && !gtGeneralConfig.totalRow)\r\n \"\r\n ></tr>\r\n <tr\r\n [class]=\"rowData.gtClass\"\r\n [ngClass]=\"{ 'no-border-tr': (isNoDataToDisplaySubject$ | async) }\"\r\n mat-row\r\n *matRowDef=\"let rowData; columns: tableColumns\"\r\n [style.height.px]=\"gtDimension.rowHeight\"\r\n (click)=\"dataRowClicked(rowData)\"\r\n ></tr>\r\n\r\n <!-- TOTAL ROW -->\r\n <ng-container\r\n [matColumnDef]=\"column.colName\"\r\n *ngFor=\"let column of totalRowInfo; trackBy: trackByFn\"\r\n >\r\n <td\r\n mat-header-cell\r\n *matHeaderCellDef\r\n [attr.colspan]=\"column.colspan\"\r\n class=\"{{ column.class }}\"\r\n >\r\n <ng-container *ngIf=\"column['isActionColumn']\">\r\n <a\r\n *ngFor=\"let data of column.actionData\"\r\n [class]=\"data.class\"\r\n (click)=\"onClickableDataClicked({}, data.id)\"\r\n >\r\n {{ data.name }}\r\n </a>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column['isIconColumn']\">\r\n <i\r\n class=\"{{ column?.iconData?.class }}\"\r\n (click)=\"iconClickedInTotalRow(column?.colName)\"\r\n >\r\n </i>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!column['isActionColumn']\">\r\n \r\n <strong class=\"upper-label\">{{ column.data }} <span class=\"red-text-totol-row\" *ngIf=\"column.additionalRedTextAfterData\">{{column.additionalRedTextAfterData}}</span></strong>\r\n <ng-container *ngIf=\"column.lowerData\">\r\n <br />\r\n <span\r\n *ngIf=\"\r\n column.colName == 'total-potential-booked-unit' &&\r\n gtGeneralConfig.component == 'RATING';\r\n else columnLowerData\r\n \"\r\n class=\"clickable-data\"\r\n (click)=\"spotDetailsDownloadClicked('TOTALROW')\"\r\n [ngClass]=\"{ 'disabled-clickable-data': downloadInProgress }\"\r\n >{{ column.lowerData }}\r\n <span class=\"material-icons spot-details-download-icons\">get_app</span>\r\n <ng-container *ngIf=\"downloadInProgress && selectedRowTypeForDownload == 'TOTALROW'\">\r\n <ng-container [ngTemplateOutlet]=\"circularProgressBar\"></ng-container>\r\n </ng-container>\r\n </span>\r\n <ng-template #columnLowerData>\r\n <span class=\"lower-label\">{{ column.lowerData }}</span>\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.tooltipMessage && gtGeneralConfig.component != 'LUR_VIOLATIONS'\">\r\n <i\r\n class=\"{{ column.tooltipIconClass }}\"\r\n container=\"body\"\r\n [ngbTooltip]=\"column.tooltipMessage\"\r\n tooltipClass=\"gt-total-row-tooltip\"\r\n placement=\"bottom\"\r\n ></i>\r\n </ng-container>\r\n <ng-container *ngIf=\"gtGeneralConfig.component == 'LUR_VIOLATIONS' && column.tooltipMessage\">\r\n <i\r\n class=\"mi mdi-info-outline info-label\"\r\n container=\"body\"\r\n [ngbTooltip]=\"lurViolationTotalRowToolTip\"\r\n tooltipClass=\"gt-total-row-tooltip\"\r\n placement=\"bottom\"\r\n ></i>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- MAIN ROW -->\r\n <ng-container\r\n [matColumnDef]=\"columnDef.headerInfo[0].objectKey\"\r\n *ngFor=\"let columnDef of tableHeaders; trackBy: trackByFn\"\r\n >\r\n <th\r\n #tableHeader\r\n nowrap\r\n mat-header-cell\r\n *matHeaderCellDef\r\n [style.width]=\"columnDef.width\"\r\n >\r\n <div\r\n class=\"row mx-0\"\r\n *ngFor=\"let header of columnDef.headerInfo; let j = index\"\r\n >\r\n <p\r\n *ngIf=\"header.typeOfHeaderData === 'STRING'\"\r\n [ngClass]=\"{ 'upper-label': j === 0, 'lower-label': j === 1 }\"\r\n >\r\n <ngx-skeleton-loader\r\n *ngIf=\"header.name == null\"\r\n count=\"1\"\r\n [theme]=\"{\r\n height: '10px',\r\n display: 'block',\r\n width: columnDef.width,\r\n 'max-width': 'calc(100% - 20px)'\r\n }\"\r\n >\r\n </ngx-skeleton-loader>\r\n <ng-container *ngIf=\"header.name\">\r\n {{ header.name }}\r\n </ng-container>\r\n <ng-container *ngIf=\"header.tooltip && header.tooltip.tooltipMessage\">\r\n <i\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"header.tooltip.tooltipMessage\"\r\n container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n </ng-container>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'impsInfoTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"impsInfoTooltip\"\r\n container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"\r\n header.tooltip && header.tooltip.name == 'spotsColumnEquivalizationMessageTooltip'\r\n \"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n container=\"body\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"spotsColumnEquivalizationMessageTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'underDeliveryTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n container=\"body\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"underDeliveryTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'overDeliveryTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n container=\"body\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"overDeliveryTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'ratingInfoTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"ratingInfoTooltip\"\r\n container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'rateInfoTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"rateInfoTooltip\"\r\n container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'ongoingRevBookedColumnTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"ongoingRevBookedColumnTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'completedRevBookedColumnTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"completedRevBookedColumnTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedRate'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"avgBookedRate\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedRtg'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"avgBookedRtg\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedImps'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"avgBookedImps\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'automationTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"automationTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'rebateImpact'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"rebateImpact\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'projectedImpsRtg'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"projectedImpsRtg\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n </p>\r\n\r\n <ng-container *ngIf=\"header.typeOfHeaderData === 'CHECKBOX'\">\r\n <span\r\n *ngIf=\"gtGeneralConfig.isHeaderChecked\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"selectUnselectAllRows()\"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!gtGeneralConfig.isHeaderChecked\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n [ngClass]=\"{ 'disable-checkbox': gtGeneralConfig.disableHeaderCheckbox }\"\r\n (click)=\"selectUnselectAllRows()\"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n </ng-container>\r\n\r\n <div\r\n *ngIf=\"gtGeneralConfig.showAllColumnFilter\"\r\n class=\"sort-filter-container\"\r\n >\r\n <ng-container *ngIf=\"header.showTooltipIcon\">\r\n <!-- Active tooltip Functionality -->\r\n <ng-container *ngIf=\"header.filter === 'CHECKBOX'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.isFilterSortActive &&\r\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\"\r\n [ngbTooltip]=\"filterTooltip\"\r\n placement=\"{{ filterAlignment }}\"\r\n container=\"body\"\r\n tooltipClass=\"non-edit-checkbox-tooltip\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'SLIDER'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.isFilterSortActive &&\r\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\"\r\n [ngbTooltip]=\"sliderToolTip\"\r\n placement=\"bottom left-top\"\r\n container=\"body\"\r\n tooltipClass=\"non-edit-slider-tooltip\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t1=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t1, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'DATE'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.isFilterSortActive &&\r\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\"\r\n [ngbTooltip]=\"datePickerTooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n tooltipClass=\"non-edit-datepicker-tooltip\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t2=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t2, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'WEEK'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.isFilterSortActive &&\r\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\"\r\n [ngbTooltip]=\"weekPickerToolTip\"\r\n placement=\"bottom left-top\"\r\n container=\"body\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t3=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t3, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'TIME'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.isFilterSortActive &&\r\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\"\r\n [ngbTooltip]=\"timeFilterToolTip\"\r\n placement=\"bottom left-top auto\"\r\n container=\"body\"\r\n tooltipClass=\"non-edit-time-tooltip\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t4=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t4, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!header.showTooltipIcon\">\r\n <span id=\"no-filter-space\"></span><br />\r\n </ng-container>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'lurViolationInfoTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"lurViolationInfoTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n </div>\r\n </div>\r\n </th>\r\n\r\n <ng-container *matCellDef=\"let ROW_DATA\">\r\n <td\r\n mat-cell\r\n [style.background]=\"ROW_DATA.backgroundColor\"\r\n [style.border]=\"ROW_DATA.border\"\r\n class=\"{{ ROW_DATA.rowClass }}\"\r\n [ngClass]=\"ROW_DATA[columnDef.headerInfo[0].objectKey + 'TdClass']\"\r\n [attr.rowspan]=\"ROW_DATA[columnDef.headerInfo[0].objectKey + 'Rowspan']\"\r\n *ngIf=\"\r\n !hideSomeTds ||\r\n (hideSomeTds && !ROW_DATA['hide' + columnDef.headerInfo[0].objectKey + 'Td'])\r\n \"\r\n >\r\n <ngx-skeleton-loader\r\n *ngIf=\"showSkeletonLoading\"\r\n count=\"1\"\r\n [theme]=\"{ height: '10px', display: 'block' }\"\r\n >\r\n </ngx-skeleton-loader>\r\n\r\n <ng-container *ngIf=\"!showSkeletonLoading\">\r\n <ng-container *ngIf=\"tableData.length > 0 && !(isNoDataToDisplaySubject$ | async)\">\r\n <ng-container\r\n *ngFor=\"\r\n let subline of columnDef.headerInfo;\r\n let subLineIndex = index;\r\n trackBy: trackByFn\r\n \"\r\n >\r\n <div showEllipsisTextOnHover>\r\n <ng-container [ngSwitch]=\"columnDef.headerInfo[subLineIndex].typeOfBodyData\">\r\n <ng-container *ngSwitchCase=\"'ICON'\">\r\n <i\r\n *ngIf=\"\r\n !(\r\n starredInProgress &&\r\n ROW_DATA.orderId == selectedStarredOrderId\r\n )\r\n \"\r\n [class]=\"ROW_DATA.iconClass\"\r\n (click)=\"iconClicked(ROW_DATA, ROW_DATA.iconClass)\"\r\n ngbTooltip=\"{{ ROW_DATA.iconTitleText }}\"\r\n placement=\"bottom\"\r\n container=\"body\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n ></i>\r\n <ng-container\r\n *ngIf=\"\r\n starredInProgress && ROW_DATA.orderId == selectedStarredOrderId\r\n \"\r\n >\r\n <div class=\"spinner-for-button-directive\"></div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'ICON_CELL'\">\r\n <ng-container\r\n *ngFor=\"\r\n let action of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n >\r\n <ng-container *ngIf=\"action.showObjectKey\">\r\n {{ ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey] }}\r\n </ng-container>\r\n\r\n <i\r\n *ngIf=\"action.showIcon\"\r\n [class]=\"action.iconClass\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionType(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n tooltipClass=\"team-user-tooltip remove-on-scroll-class\"\r\n [ngbTooltip]=\"action.showTooltip ? action.tooltipData : null\"\r\n (click)=\"\r\n textActionClicked(\r\n ROW_DATA,\r\n action.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n [disableTooltip]=\"!action.showTooltip\"\r\n >\r\n </i>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'HTML_STRING'\">\r\n <p\r\n [innerHTML]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n (click)=\"innerHTMLCellClicked($event, ROW_DATA)\"\r\n ></p>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'SVG_ICON'\">\r\n <anna-core-anna-icon-column\r\n [componentName]=\"gtGeneralConfig.component\"\r\n [dataObject]=\"ROW_DATA\"\r\n [iconToShow]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n \"\r\n (onColumnIconClicked)=\"svgIconClicked($event)\"\r\n ></anna-core-anna-icon-column>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'TEXT_ACTIONS'\">\r\n <ng-container\r\n *ngFor=\"\r\n let text of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n >\r\n <button\r\n *ngIf=\"text.showTooltip\"\r\n (click)=\"\r\n textActionClicked(\r\n ROW_DATA,\r\n text.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n [disabled]=\"text.isDisabled\"\r\n class=\"{{ text.class }}\"\r\n (mouseenter)=\"\r\n mouseEnterOnTextActionType(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n [ngbTooltip]=\"textActionTooltipTemplate\"\r\n placement=\"auto\"\r\n container=\"body\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n >\r\n {{ text.name }}\r\n </button>\r\n\r\n <button\r\n *ngIf=\"!text.showTooltip\"\r\n (click)=\"\r\n textActionClicked(\r\n ROW_DATA,\r\n text.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n [disabled]=\"text.isDisabled\"\r\n class=\"{{ text.class }}\"\r\n >\r\n {{ text.name }}\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'CHECKBOX'\">\r\n <span\r\n *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n [ngClass]=\"{\r\n 'disable-checkbox':\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n false\r\n )\r\n \"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n [ngClass]=\"{\r\n 'disable-checkbox':\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n true\r\n )\r\n \"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n\r\n <ng-container\r\n *ngFor=\"\r\n let action of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n >\r\n <i\r\n *ngIf=\"action.showIcon\"\r\n [class]=\"action.iconClass\"\r\n [ngClass]=\"{ disabled: action.disabledIcon }\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionTypeContainingTable(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n tooltipClass=\"tooltip-containing-table remove-on-scroll-class\"\r\n [ngbTooltip]=\"tooltipContainingTableTemplate\"\r\n >\r\n </i>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'CLICKABLE_DATA'\">\r\n <a\r\n *ngFor=\"\r\n let text of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n [class]=\"text.class\"\r\n (click)=\"onClickableDataClicked(ROW_DATA, text.id)\"\r\n >\r\n {{ text.name }}\r\n </a>\r\n <span\r\n *ngIf=\"\r\n subline.objectKey == 'displayBookedUnits' &&\r\n gtGeneralConfig.component == 'RATING'\r\n \"\r\n class=\"clickable-data\"\r\n (click)=\"spotDetailsDownloadClicked('DATAROW', ROW_DATA)\"\r\n [ngClass]=\"{ 'disabled-clickable-data': downloadInProgress }\"\r\n >{{ ROW_DATA.displayBookedUnits }}\r\n <span class=\"material-icons spot-details-download-icons\"\r\n >get_app</span\r\n >\r\n <ng-container\r\n *ngIf=\"\r\n downloadInProgress &&\r\n ROW_DATA.inventoryCodeId ==\r\n selectedInventoryIdForDownload &&\r\n ROW_DATA.demographic == selectedDemographicForDownload\r\n \"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"circularProgressBar\"\r\n ></ng-container>\r\n </ng-container>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'STRING___ICON_OR_TEXT_ACTION'\">\r\n <ng-container\r\n *ngFor=\"\r\n let action of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n >\r\n <span\r\n [class]=\"action.additionalTextBeforeLinkClass\"\r\n [innerHtml]=\"action.additionalTextBeforeLink\"\r\n ngbTooltip=\"{{ action.additionalTextBeforeLink }}\"\r\n placement=\"bottom\"\r\n container=\"body\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n [disableTooltip]=\"!action.enableTooltipForAdditionalText\"\r\n ></span>\r\n\r\n <ng-container *ngIf=\"action && action.typeOfData == 'STRING'\">\r\n {{ action.data }}\r\n </ng-container>\r\n\r\n <a\r\n [id]=\"action.id\"\r\n *ngIf=\"action.showLink\"\r\n (click)=\"\r\n textActionClicked(\r\n ROW_DATA,\r\n action.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n [class]=\"action.linkClass\"\r\n [ngClass]=\"{ disabled: action.disabledLink }\"\r\n >{{ action.data }}</a\r\n >\r\n <span\r\n ngbTooltip=\"{{ action.additionalTextAfterLink }}\"\r\n placement=\"bottom\"\r\n container=\"body\"\r\n [class]=\"action.additionalTextAfterLinkClass\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n [disableTooltip]=\"!action.enableTooltipForAdditionalAfterText\"\r\n >\r\n {{ action.additionalTextAfterLink }}\r\n </span>\r\n\r\n <ng-container *ngIf=\"action.showTooltip\">\r\n <ng-container *ngIf=\"action.tooltipData.innerHtml\">\r\n <i\r\n *ngIf=\"action.showIcon\"\r\n [class]=\"action.iconClass\"\r\n [ngClass]=\"{ disabled: action.disabledIcon }\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionTypeContainingTable(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n tooltipClass=\"tooltip-containing-table remove-on-scroll-class\"\r\n [ngbTooltip]=\"tooltipContainingTableTemplate\"\r\n >\r\n </i>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!action.tooltipData.tooltipTableBody\">\r\n <i\r\n *ngIf=\"action.showIcon\"\r\n [class]=\"action.iconClass\"\r\n [ngClass]=\"{ disabled: action.disabledIcon }\"\r\n (click)=\"\r\n iconClickedOnStringIconActionType(\r\n ROW_DATA,\r\n action.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n (mouseleave)=\"mouseLeaveTextActionType(ROW_DATA)\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionType(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n [placement]=\"\r\n action.tooltipPlacement\r\n ? action.tooltipPlacement\r\n : 'bottom auto'\r\n \"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n tooltipClass=\"team-user-tooltip remove-on-scroll-class {{\r\n action.tooltipClass\r\n }}\"\r\n [ngbTooltip]=\"userLoggedInDetails\"\r\n >\r\n </i>\r\n <ng-container *ngIf=\"action['showSvgIcon']\">\r\n <anna-core-anna-est-icon-template\r\n class=\"float-right\"\r\n *ngIf=\"action['svgIconName'] == 'anna-icon'\"\r\n (mouseleave)=\"mouseLeaveTextActionType(ROW_DATA)\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionType(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex]\r\n .tooltipKey\r\n )\r\n \"\r\n [placement]=\"\r\n action.tooltipPlacement\r\n ? action.tooltipPlacement\r\n : 'bottom auto'\r\n \"\r\n tooltipClass=\"team-user-tooltip remove-on-scroll-class {{\r\n action['tooltipClass']\r\n }}\"\r\n [ngbTooltip]=\"userLoggedInDetails\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n >\r\n </anna-core-anna-est-icon-template>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!action.showTooltip\">\r\n <i\r\n *ngIf=\"action.showIcon\"\r\n [class]=\"action.iconClass\"\r\n [ngClass]=\"{ disabled: action.disabledIcon }\"\r\n (click)=\"\r\n iconClickedOnStringIconActionType(\r\n ROW_DATA,\r\n action.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n >\r\n </i>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'STRING_OR_INPUT'\">\r\n <ng-container\r\n *ngIf=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]?.type ==\r\n 'STRING';\r\n else inputBox\r\n \"\r\n >\r\n <span\r\n [innerHtml]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n ?.value\r\n \"\r\n ></span>\r\n </ng-container>\r\n <ng-template #inputBox>\r\n <input\r\n placeholder=\"{{\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n ?.placeholder\r\n }}\"\r\n showEllipsisTextOnHover\r\n class=\"{{\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .className\r\n }}\"\r\n (keydown)=\"\r\n changesMadeInEditableInputBox(\r\n $event,\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey],\r\n false\r\n )\r\n \"\r\n (paste)=\"\r\n changesMadeInEditableInputBox(\r\n $event,\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey],\r\n true\r\n )\r\n \"\r\n (ngModelChange)=\"\r\n editableInputValueChanged(\r\n $event,\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey\r\n )\r\n \"\r\n [ngModel]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].value\r\n \"\r\n [disabled]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .disabled\r\n \"\r\n [ngClass]=\"{\r\n 'red-border':\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .hasError\r\n }\"\r\n />\r\n\r\n <i\r\n *ngIf=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .showIcon\r\n \"\r\n container=\"body\"\r\n [ngbTooltip]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .iconTooltip\r\n \"\r\n tooltipClass=\"gt-total-row-tooltip\"\r\n placement=\"bottom\"\r\n class=\"{{\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .iconClass\r\n }}\"\r\n >\r\n </i>\r\n <ng-container\r\n *ngIf=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey][\r\n 'showSvgIcon'\r\n ]\r\n \"\r\n >\r\n <anna-core-anna-est-icon-template\r\n class=\"float-right\"\r\n *ngIf=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey][\r\n 'svgIconName'\r\n ] == 'anna-icon'\r\n \"\r\n [placement]=\"'bottom auto'\"\r\n tooltipClass=\"gt-total-row-tooltip\"\r\n [ngbTooltip]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .iconTooltip\r\n \"\r\n container=\"body\"\r\n >\r\n </anna-core-anna-est-icon-template>\r\n </ng-container>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'HTML'\">\r\n <span\r\n [innerHtml]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n ></span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'SINGLE_RADIO'\">\r\n <span\r\n *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n [ngClass]=\"{\r\n 'disable-checkbox':\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n class=\"mdi mdi-radiobox-marked\"\r\n (click)=\"(null)\"\r\n >\r\n </span>\r\n <span\r\n *ngIf=\"!ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n class=\"mdi mdi-radiobox-blank\"\r\n [ngClass]=\"{\r\n 'disable-checkbox':\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n true\r\n )\r\n \"\r\n >\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'RADIO'\">\r\n <mat-radio-group\r\n *ngIf=\"ROW_DATA['RadioButtonConfig']\"\r\n [ngModel]=\"ROW_DATA[subline.objectKey]\"\r\n [disabled]=\"ROW_DATA['RadioButtonConfig'][0].isDisabled\"\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let radioButton of ROW_DATA['RadioButtonConfig'];\r\n let last = last\r\n \"\r\n >\r\n <mat-radio-button\r\n value=\"{{ radioButton.value }}\"\r\n class=\"{{ radioButton.class }}\"\r\n (click)=\"\r\n radioButtonClicked(\r\n ROW_DATA,\r\n radioButton.value,\r\n ROW_DATA['RadioButtonConfig'][0].isDisabled\r\n )\r\n \"\r\n >{{ radioButton.label }}\r\n </mat-radio-button>\r\n <i\r\n class=\" {{ radioButton.iconClass }}\"\r\n (click)=\"radioButtonIconClicked(ROW_DATA)\"\r\n ></i>\r\n <br *ngIf=\"!last\" />\r\n </ng-container>\r\n </mat-radio-group>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'STRING_WITH_TOOLTIP'\">\r\n <ng-container\r\n *ngFor=\"\r\n let action of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n >\r\n <span> {{ action?.dataToDisplay }}</span>\r\n <span\r\n *ngIf=\"action?.showTooltip\"\r\n [ngbTooltip]=\"textActionTooltipTemplate\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionType(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n [placement]=\"action?.tooltipPosition\"\r\n container=\"body\"\r\n [class]=\"action?.tooltipIconClass\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n [disableTooltip]=\"action?.disableTooltip\"\r\n >\r\n </span>\r\n <span> {{ action?.dataToDisplayAfterTooltip }}</span>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n <ng-container *ngIf=\"subline.objectKey != 'description'\">\r\n <span>{{\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n }}</span>\r\n <i\r\n *ngIf=\"\r\n subline.objectKey == 'inventoryCode' &&\r\n ROW_DATA['isSellerGroup'] &&\r\n gtGeneralConfig.component == 'RATING'\r\n \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n [ngbTooltip]=\"sellerHierarchyTooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n triggers=\"manual\"\r\n (hidden)=\"closeTooltip()\"\r\n #info=\"ngbTooltip\"\r\n tooltipClass=\"hierarchy-tooltip remove-on-scroll-class\"\r\n (mouseenter)=\"\r\n bindTheValueToSellerGroupTooltip(\r\n ROW_DATA.sellerGroupHierarchy,\r\n info\r\n )\r\n \"\r\n >\r\n </i>\r\n\r\n <i\r\n *ngIf=\"\r\n subline.objectKey == 'displayBookedAverageRating' &&\r\n gtGeneralConfig.component == 'RATING' &&\r\n ROW_DATA['showRatingAverageIcon']\r\n \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n (mouseenter)=\"\r\n setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\r\n \"\r\n tooltipClass=\"posted-avg-tooltip remove-on-scroll-class\"\r\n [ngbTooltip]=\"postedRatingDifference\"\r\n >\r\n </i>\r\n\r\n <i\r\n *ngIf=\"\r\n subline.objectKey == 'displayBookedAverageImpression' &&\r\n gtGeneralConfig.component == 'RATING' &&\r\n ROW_DATA['showImpressionAverageIcon']\r\n \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n (mouseenter)=\"\r\n setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\r\n \"\r\n tooltipClass=\"posted-avg-tooltip remove-on-scroll-class\"\r\n [ngbTooltip]=\"postedImpDifference\"\r\n >\r\n </i>\r\n </ng-container>\r\n <ng-container *ngIf=\"subline.objectKey == 'description'\">\r\n <p\r\n *ngIf=\"\r\n ROW_DATA.descriptionMessage ||\r\n ROW_DATA.descriptionEmailReferenceNum\r\n \"\r\n >\r\n <ng-container *ngIf=\"ROW_DATA.descriptionMessage\">\r\n {{ ROW_DATA.descriptionMessage }}\r\n <br />\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"\r\n ROW_DATA.descriptionEmailReferenceNum != '-' &&\r\n ROW_DATA.descriptionEmailReferenceNum != ''\r\n \"\r\n >\r\n Email Ref: {{ ROW_DATA.descriptionEmailReferenceNum }}\r\n <br />\r\n </ng-container>\r\n </p>\r\n <a\r\n href=\"{{ ROW_DATA.descriptionDetailsUrl }}\"\r\n target=\"_blank\"\r\n *ngIf=\"\r\n ROW_DATA.descriptionDetailsUrlType === 'PDF' ||\r\n ROW_DATA.descriptionDetailsUrlType === 'EXCEL'\r\n \"\r\n >\r\n <button class=\"btn viewDetailsAndEmailBtn\">Download</button>\r\n </a>\r\n <ng-container\r\n *ngIf=\"ROW_DATA.activityname.toLowerCase() == 'order onboarded'\"\r\n >\r\n <a\r\n *ngIf=\"ROW_DATA.descriptionDetailsUrlType === 'LINK'\"\r\n (click)=\"viewDetailsClicked(ROW_DATA)\"\r\n >\r\n <button class=\"btn viewDetailsAndEmailBtn order-onboarded\">\r\n View details\r\n </button>\r\n </a>\r\n </ng-container>\r\n\r\n <a\r\n href=\"{{ ROW_DATA.descriptionEmailUrl }}\"\r\n target=\"_blank\"\r\n *ngIf=\"\r\n ROW_DATA.descriptionEmailUrl != '-' &&\r\n ROW_DATA.descriptionEmailUrl != ''\r\n \"\r\n >\r\n <button class=\"btn viewDetailsAndEmailBtn\">View email</button>\r\n </a>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"isNoDataToDisplaySubject$ | async\">\r\n <div>\r\n {{ null }}\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n </table>\r\n </div>\r\n <anna-core-no-data-lib\r\n [width]=\"noDataWidth\"\r\n [marginTop]=\"marginTop\"\r\n *ngIf=\"isNoDataToDisplaySubject$ | async\"\r\n >\r\n </anna-core-no-data-lib>\r\n</div>\r\n\r\n<!-- Checkbox template -->\r\n<ng-template #filterTooltip>\r\n <anna-core-anna-column-checkbox-filter\r\n [tableData]=\"tableData\"\r\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\"\r\n [clonedTableData]=\"clonedTableData\"\r\n [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\"\r\n (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\"\r\n >\r\n </anna-core-anna-column-checkbox-filter>\r\n</ng-template>\r\n\r\n<!-- Slider template -->\r\n<ng-template #sliderToolTip>\r\n <anna-core-anna-column-slider-filter\r\n [tableData]=\"tableData\"\r\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\"\r\n [clonedTableData]=\"clonedTableData\"\r\n [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\"\r\n (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\"\r\n >\r\n </anna-core-anna-column-slider-filter>\r\n</ng-template>\r\n\r\n<!-- Date Picker Template -->\r\n<ng-template #datePickerTooltip>\r\n <anna-core-anna-column-date-range-filter\r\n [tableData]=\"tableData\"\r\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\"\r\n [clonedTableData]=\"clonedTableData\"\r\n [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\"\r\n (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\"\r\n >\r\n </anna-core-anna-column-date-range-filter>\r\n</ng-template>\r\n\r\n<!-- Week Picker Template -->\r\n<ng-template #weekPickerToolTip>\r\n <!-- <div class=\"weekpicker-container\">\r\n <anna-core-week-calendar-filter-lib\r\n [week-calendar-config]=\"gtGeneralConfig.multiWeekPickerConfig\"\r\n (apply)=\"applyWeekFilter($event)\"\r\n [from-date]=\"calendarMinEnabledDate\"\r\n [to-date]=\"calendarMaxEnabledDate\"\r\n >\r\n </anna-core-week-calendar-filter-lib>\r\n </div> -->\r\n</ng-template>\r\n\r\n<!-- Time Filter Template -->\r\n<ng-template #timeFilterToolTip>\r\n <anna-core-anna-column-time-filter\r\n [tableData]=\"tableData\"\r\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\"\r\n [showAllTimeRangeCheckboxes]=\"showCheckboxesForTimeFilter\"\r\n [clonedTableData]=\"clonedTableData\"\r\n [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\"\r\n (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\"\r\n >\r\n </anna-core-anna-column-time-filter>\r\n</ng-template>\r\n\r\n<ng-template #columnInfoTooltip>\r\n <p style=\"color: black; white-space: nowrap\">This preemption is rejected and not marked for credit.</p>\r\n</ng-template>\r\n\r\n<ng-template #ratingInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked Rating' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected Rating' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #impsInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked IMPS' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected IMPS' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #spotsColumnEquivalizationMessageTooltip>\r\n <p class=\"spot-column-tooltip-message\">\r\n This consists of equivalized spots and un-equivalized Paid Programs & un-equivalized Non-spots.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #underDeliveryTooltip>\r\n <p class=\"spot-column-tooltip-message\">\r\n Indicates the Under-delivery percentage based on booked and posted RTG/IMPS.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #overDeliveryTooltip>\r\n <p class=\"spot-column-tooltip-message\">\r\n Indicates the Over-delivery percentage based on booked and posted RTG/IMPS.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #rateInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked Rate' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected $ Value' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #sellerHierarchyTooltip>\r\n <ng-container *ngIf=\"sellerGroupHierarchy.length > 0\">\r\n <section class=\"hierarchy-table-container\">\r\n <table class=\"seller-hierarchy-table\">\r\n <thead>\r\n <tr>\r\n <th>#</th>\r\n <th>Inventory Codes</th>\r\n <th>Program/Description</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of sellerGroupHierarchy; let tooltipIndex = index\">\r\n <td>{{ tooltipIndex + 1 }}</td>\r\n <td>\r\n <span showEllipsisTextOnHover>{{ data.InventoryCode }}</span>\r\n </td>\r\n <td>\r\n <span showEllipsisTextOnHover>{{ data.Program }}</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </section>\r\n </ng-container>\r\n <ng-container *ngIf=\"sellerGroupHierarchy.length == 0\">\r\n <span style=\"color: #000\">Seller group not available for this inventory code</span>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #lurViolationInfoTooltip>\r\n <p class=\"first-row\">The values are for the entire week.</p>\r\n</ng-template>\r\n\r\n<ng-template #postedRatingDifference>\r\n <p class=\"difference-text\">\r\n The difference between posted and booked average rating is\r\n {{ isDifferenceLessThan25Percent ? \"less\" : \"more\" }} than 25%.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #postedImpDifference>\r\n <p class=\"difference-text\">\r\n The difference between posted and booked average impression is\r\n {{ isDifferenceLessThan25Percent ? \"less\" : \"more\" }} than 25%.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #ongoingRevBookedColumnTooltip>\r\n <p>The Booked $ value, Spots, GRP, CPP, IMPS, CPM corresponds on the last permanent revision generated</p>\r\n</ng-template>\r\n\r\n<ng-template #completedRevBookedColumnTooltip>\r\n <p>The Booked $ value corresponds on the last permanent revision generated</p>\r\n</ng-template>\r\n\r\n<ng-template #avgBookedRate>\r\n <p>This is the booked average Rate</p>\r\n</ng-template>\r\n\r\n<ng-template #avgBookedRtg>\r\n <p>This is the booked average RTG</p>\r\n</ng-template>\r\n\r\n<ng-template #avgBookedImps>\r\n <p>This is the booked average IMP(\u2019000)</p>\r\n</ng-template>\r\n\r\n<ng-template #projectedImpsRtg>\r\n <p>\r\n All projections are derived from the sum of actual posted information until the last posted date and estimates\r\n for the remaining selected period.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #automationTooltip>\r\n <p>\r\n Please get the order business rules approved to activate the order for automation. Only for the\r\n automation-activated orders, any approved MGs, ADUs, or credited spots on ANNA will be fed into the traffic\r\n system i.e. ANNA revisions.\r\n <!-- removed below line as part of enhancmennt in 14.0 releas -->\r\n <!-- Additionally, ANNA will only enter buyer revisions into traffic for the selected\r\n Medialine/WOC orders. -->\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #rebateImpact>\r\n <p>Rebate impact value is for the originally ordered spot length and is not equivalized.</p>\r\n</ng-template>\r\n\r\n<ng-template #lurViolationTotalRowToolTip>\r\n <ul>\r\n <li>\r\n <strong>POLITICAL RATE VIOLATIONS:</strong>\r\n Violations flagged when non-political spots are booked at a rate lower than the minimum booked rate for\r\n political candidates for the same week, Inventory Code and Revenue Class.\r\n </li>\r\n <li>\r\n <strong>CANDIDATE TO CANDIDATE VIOLATION:</strong>\r\n Violations flagged when political spots are booked at different rates to other political spots for the same\r\n week, Inventory Code and Revenue Class.\r\n </li>\r\n </ul>\r\n</ng-template>\r\n\r\n<ng-template #circularProgressBar>\r\n <circle-progress\r\n [percent]=\"percentDone\"\r\n [radius]=\"5\"\r\n [showTitle]=\"false\"\r\n [showUnits]=\"false\"\r\n [showSubtitle]=\"false\"\r\n [outerStrokeWidth]=\"3\"\r\n [innerStrokeWidth]=\"3\"\r\n [space]=\"-3\"\r\n [outerStrokeColor]=\"'#268bff'\"\r\n [innerStrokeColor]=\"'#d5d5d5'\"\r\n [animationDuration]=\"10\"\r\n ></circle-progress>\r\n</ng-template>\r\n\r\n<ng-template #userLoggedInDetails>\r\n <div class=\"tooltip-div-container\">\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n <span *ngIf=\"data.key != 'read'\">\r\n {{ data.key }} <b> {{ data.value }}</b>\r\n </span>\r\n <span *ngIf=\"data.key == 'read'\">\r\n {{ data.value }}\r\n </span>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #markAsReadTip>\r\n <div class=\"notification-tooltip-div-container\">\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n {{ data.value }}\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #textActionTooltipTemplate>\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n {{ data.key }} <b> {{ data.value }}</b>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #showOrHideToggleForTotalRowTooltip>\r\n <div>\r\n {{ showOrHideToggleForTotalRow && !gtGeneralConfig.totalRow ? \"Show Total Row\" : \"Hide Total Row\" }}\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #tooltipContainingTableTemplate>\r\n <div\r\n *ngIf=\"tooltipContainingTable\"\r\n [innerHTML]=\"tooltipContainingTable.innerHtml\"\r\n class=\"notification-tooltip-div-container\"\r\n >\r\n <!-- <ul>\r\n <li *ngFor=\"let headerMsg of tooltipContainingTable.tableHeaderMsg\">\r\n <b> {{headerMsg}} </b>\r\n </li>\r\n </ul>\r\n\r\n <table class=\"tooltip-table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let header of tooltipContainingTable.tooltipTableHeader\">\r\n {{ header}}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let rows of tooltipContainingTable.tooltipTableBody\">\r\n <td *ngFor=\"let data of rows\">\r\n {{ data }}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <ul>\r\n <li style=\"margin-top:10px; padding:0\" *ngFor=\"let footerMsg of tooltipContainingTable.tableFooterMsg\">\r\n {{ footerMsg }} \r\n </li>\r\n </ul> -->\r\n </div>\r\n</ng-template>\r\n<!-- <ng-template #textActionTooltipTemplate>\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n {{ data.key }} <b> {{data.value}}</b>\r\n </ng-container>\r\n</ng-template> -->\r\n", styles: ["::ng-deep .show-or-hide-toggle-tooltip .tooltip-inner{max-width:229px}.show-or-hide-toggle-btn.shift-toggle-top-on-total-row-click{transform:translate(calc(var(--app-left-space-show-hide-total-row-icon) - 12px),48px)}.show-or-hide-toggle-btn{width:16px;height:16px;padding:0;margin:0;border-radius:50%;position:absolute;transform:translate(calc(var(--app-left-space-show-hide-total-row-icon) - 12px),73px);z-index:1000;background-color:#d9d9d9}.show-or-hide-toggle-btn i.mdi.mdi-menu-swap{font-size:16px;display:flex}#generic-table-conatiner.table-with-show-hide-total-row-toggle .total-row td:nth-of-type(2){padding-left:16px!important}.sort-btn{background:#fff;border:none;border-right:1px solid #1b88ff;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.07;letter-spacing:normal;color:#1b88ff;cursor:pointer;flex:1;text-align:center}.sort-btn:last-of-type{border-right:none}.sort-btn.active{color:#202b47;text-decoration:none}p.sort-container{margin-top:8px;padding-bottom:8px;border-bottom:1px solid #e6e6e6;margin-bottom:0;display:flex}::ng-deep .tooltip-inner{max-height:22rem;background-color:#fff;border:1px solid white;border-radius:5px;box-shadow:0 2px 2px #0000003d,0 0 2px #0000001f;max-width:251px;width:100%;padding:0!important}::ng-deep .tooltip-inner div.radio-container{flex-wrap:wrap}::ng-deep .md-drppicker{box-shadow:unset!important}::ng-deep .available{color:#999}::ng-deep .bs-tooltip-bottom .arrow:before{border-bottom-color:#fff!important}::ng-deep .bs-tooltip-left .arrow:before{border-left-color:#fff!important}::ng-deep .tooltip.show{opacity:1}.input{text-align:left;margin:5px 10px 5px 5px;display:flex;align-items:center;width:230px;white-space:nowrap}.data{color:#000;font-weight:700;margin-left:5px;margin-right:5px}span.data{display:inline-block;text-overflow:ellipsis;white-space:pre;width:100%;overflow:hidden}.check-box{font-size:14px;cursor:pointer;position:relative;top:-1px}span.mdi-filter.active{color:#000;opacity:1!important;pointer-events:all!important}p{margin-bottom:0;line-height:initial}span.mdi-filter{color:#cbcbcb}::ng-deep .ngx-slider-pointer{top:-5px!important;width:12px!important;height:12px!important;background:#bdbdbd!important;border:1px solid #ffffff!important;box-shadow:0 1px 3px #0000004d!important;border-radius:16px!important}input:focus{outline:none}input::placeholder{color:#c8c8c8}.cancel-btn{background:#c7e1ff;color:#268bff}.apply-btn{background:#268bff;color:#fff;margin-left:.3125rem}div.radio-container{display:flex;white-space:nowrap;justify-content:space-between;background-color:#f4f4f4;border-radius:.125rem;margin:.4375rem .4375rem .25rem}div.radio-container div{flex:1;width:50%}div.radio-container div.full-width{width:100%}div.radio-container input{position:relative;top:.125rem;margin-right:.25rem}div.radio-container label{font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:0;color:#4a4a4a;margin:0;padding-left:.125rem}div.radio-container label:first-of-type{margin-right:.188rem}div.radio-container input[type=radio]{appearance:none;display:inline-block;width:.9375rem;height:.9375rem;padding:.125rem;background-clip:content-box;border:.125rem solid #268bff;background-color:transparent;border-radius:50%}div.radio-container input[type=radio]:checked{background-color:#268bff}.checkbox-filter-buttons-container{padding:0 8px!important}.buttons-container{display:flex;margin:0px auto .4375rem;justify-content:center;padding:0 12px}.buttons-container .button{padding:0 10px;width:100%;margin:8px 0 0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.buttons-container button:last-of-type{background-color:#268bff;color:#fff;margin-left:.5rem}.buttons-container button.disabled{background:#bdbdbd;opacity:.5;color:#4a4a4a}.button{display:inline-block;margin:8px 4px 0 8px;padding:0 16px;border-radius:4px;text-align:center;outline:none;font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.67;letter-spacing:normal;border:none;color:#268bff;background-color:#e5f1ff}.search-box{display:flex;align-items:center;color:#c8c8c8;border:1px solid #e6e6e6;border-radius:.125rem;margin:.25rem .4375rem .188rem;height:1.5rem;padding:.188rem 8px .188rem .5rem}.search-box .search-bar-close{margin-left:auto;float:right}.search-icon{margin:0 4px 0 0;font-size:1.125rem;color:#9b9b9b}.filter-icon{justify-content:right;margin-left:auto;color:#d4d4d4;color:#a1a1a1;font-size:16px;cursor:pointer}.data{margin:0 13px 0 8px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.86;letter-spacing:\"\";color:#4a4a4a}.search-input{margin:1px 0 1px 4px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#c8c8c8;width:calc(100% - 38px)}.check-box{color:#268bff}.tooltip-data-container{overflow-y:scroll;max-height:8rem}.searchbar{width:100%;display:flex;justify-content:flex-end;align-items:flex-end}.clear-button{opacity:.5;font-family:Roboto;font-size:.9375rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;text-decoration:underline;border:none;background-color:#fff;color:#4a4a4a;margin-left:.625rem;padding:0}.clear-button:focus{outline:none;box-shadow:none}.unchecked{color:#268bff}cdk-virtual-scroll-viewport.dropdown-data-container{max-height:12.3rem;width:100%;overflow-y:auto;overflow-x:hidden}cdk-virtual-scroll-viewport.dropdown-data-container p.input{margin-left:0}cdk-virtual-scroll-viewport.dropdown-data-container p.input span.mi{padding-left:.4375rem}cdk-virtual-scroll-viewport.dropdown-data-container p.input:hover{background-color:#ebebeb;cursor:pointer}cdk-virtual-scroll-viewport.dropdown-data-container::-webkit-scrollbar{width:.188rem}cdk-virtual-scroll-viewport.dropdown-data-container::-webkit-scrollbar-thumb{color:#d3d3d3;background:#d3d3d3}section.min-maxContainer{display:flex;justify-content:center;margin-bottom:-.125rem;margin-top:.5rem;width:100%}section.min-maxContainer input{width:30%;height:1.875rem;border:1px solid lightgray;color:gray}section.min-maxContainer span{display:inline-block;padding-left:.5rem;padding-right:.5rem;position:relative;top:.3125rem;color:#666}.time-container{width:100%;display:flex;padding:0 .75rem}.time-container input.form-control:disabled{background-color:#fff;width:2.813rem}.time-container input.numberInput:focus{box-shadow:none;border-color:#c2cfd6}.time-container .dot{color:#cbcbcb;position:relative;left:-7px;font-size:17px}.time-container div.arrow-container{flex-direction:column;display:flex;margin-top:.375rem;width:9px;height:18px;margin-right:1.1875rem}.time-container div.arrow-container i{color:#000;cursor:pointer;max-height:9px;font-size:25px;width:10px}.time-container div.arrow-container i:before{width:0;height:0;pointer-events:none;position:relative;left:-9px;top:-11px}.mdi-filter{cursor:pointer}.time-label-container{display:flex;justify-content:flex-start}.time-label-container label{margin-bottom:0;color:#4a4a4a;margin-top:.125rem;margin-left:.75rem;font-weight:700}.time-heading{color:#000;font-size:.8125rem;text-align:left;padding-left:.625rem;margin-top:.625rem;font-weight:700}.column-clear-all{width:94%;text-align:center;border:none;font-size:14px;background:none;text-decoration:underline;color:#268bff}.checkbox-container{display:flex;padding-inline:.625rem}.checkbox-container .data{text-align:left}.checkbox-container:first-of-type{margin-top:.625rem;font-weight:500}.column-clear-all{width:94%;text-align:center;border:none;background:none;text-decoration:underline;color:#268bff}.column-clear-all:disabled{opacity:.5;color:#4a4a4a;font-weight:400}.column-clear-all.align-center{text-align:center}span.mdi-filter-variant.disabled{pointer-events:none;opacity:.5}.datepicker-container{width:100%}span.mdi-filter-variant{color:#cbcbcb;cursor:pointer;font-size:.875rem}span.mdi-filter-variant.active{color:#000}p.filter-tab{font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:normal;color:#1b88ff;border-radius:5px;background-color:#f4f4f4;padding-inline:8px;cursor:pointer;overflow:hidden;text-align:center;text-overflow:ellipsis}p.filter-tab.active{color:#fff;background-color:#1b88ff}button.filter-text-btn{background:#fff;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;border:none;color:#268bff;margin-inline:4px;margin-top:2px}button.filter-text-btn:disabled{color:#b1b1b1;cursor:not-allowed}::ng-deep .non-edit-datepicker-tooltip .tooltip-inner{max-width:310px!important;width:283px!important;overflow-y:initial!important;padding:0!important}input.slider-text::-webkit-outer-spin-button,input.slider-text::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input.slider-text{-moz-appearance:textfield}input.slider-text.red-border{border:1px solid #f44336!important}::ng-deep .checkbox-sort p.sort-container{margin-top:8px!important;padding-bottom:8px!important}i.mdi-close{cursor:pointer}i.mdi-close.disable-close-icon{pointer-events:none;cursor:not-allowed}input.error-border{border:1px solid #f44336!important}::ng-deep .non-edit-checkbox-tooltip .tooltip-inner{width:238px!important;padding:0!important}::ng-deep .non-edit-slider-tooltip .tooltip-inner{width:238px!important;padding:0!important}::ng-deep .non-edit-time-tooltip .tooltip-inner{width:250px!important;padding:0!important}::ng-deep .non-edit-time-tooltip.bs-tooltip-start{padding:.4rem}::ng-deep .non-edit-time-tooltip.bs-tooltip-start .tooltip-arrow{right:0;top:5px!important;width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}::ng-deep .non-edit-time-tooltip.bs-tooltip-start .tooltip-arrow:before{border-left-color:#fff;left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height)}::ng-deep .no-bottom-border p.sort-container{border-bottom:none!important}::ng-deep .ngx-slider-pointer-min:after{display:none}::ng-deep .ngx-slider-pointer-max:after{display:none}::ng-deep .ngx-slider span.ngx-slider-pointer{width:12px;height:12px;top:-5px;background-color:#bdbdbd}::ng-deep .ngx-slider span.ngx-slider-bar{height:3px;background:#ededed}::ng-deep .ngx-slider span.ngx-slider-selection{background:#bdbdbd}::ng-deep .ngx-slider span.ngx-slider-bubble{bottom:-22px;font-size:12px;color:#333}::ng-deep .show-min.ngx-slider span.ngx-slider-model-value{background:#fff;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003}::ng-deep .show-max.ngx-slider span.ngx-slider-model-high{background:#fff;box-shadow:none}::ng-deep .ngx-slider span.ngx-slider-combined{background:#fff;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003}::ng-deep .ngx-slider{top:10px!important;margin:5px 0 2px!important}::ng-deep .ngx-slider-animate{top:0!important}.sidebar-slider{margin-bottom:35px!important;margin-left:5px;margin-right:5px}.slider-placeholder{height:14px}::ng-deep .filter-calendar select.form-select:focus{border-color:#c2cfd6;box-shadow:none}::ng-deep .filter-calendar select.form-select{background-color:#fff}.no-data-case{padding-left:.4375rem!important;font-size:.875rem!important;margin-top:10px!important;cursor:pointer}.red-text-totol-row{color:#f44336!important}.check-mark,.unread-mark{cursor:pointer}.on-hover:hover .unread-mark,.notificationHover .check-mark{opacity:0;cursor:pointer}.on-hover:hover .check-mark{opacity:1;cursor:pointer}:host ::ng-deep .gt{table-layout:fixed;margin-bottom:0;width:100%}:host ::ng-deep .gt th,:host ::ng-deep .gt td{padding:2px 8px;line-height:normal}:host ::ng-deep .gt thead tr th .upper-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#4a4a4a;margin-bottom:0}:host ::ng-deep .gt thead tr th .lower-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#a7a7a7;margin-bottom:0}:host ::ng-deep .gt thead tr th{background-color:#ededed;position:sticky;position:-webkit-sticky;top:0;border-top:none!important;border-bottom:none!important;outline:none!important;box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4}:host ::ng-deep .gt thead tr th br{display:block;content:\"\";margin-top:-8px}:host ::ng-deep .gt thead tr th div.row{display:flex;flex-wrap:nowrap;justify-content:space-between;align-items:center;width:max-content}:host ::ng-deep .gt thead tr th div.sort-filter-container{display:flex;flex-wrap:nowrap;align-items:center;margin-left:.25rem;margin-right:auto}:host ::ng-deep .gt thead tr th span.mdi-filter-variant{font-size:13px!important;top:-1px!important;position:relative}:host ::ng-deep .gt thead tr th:first-of-type{box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4,inset 1px 0 #d4d4d4}:host ::ng-deep .gt tbody tr td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}:host ::ng-deep .gt tbody tr td:nth-of-type(n+2){box-shadow:inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}:host ::ng-deep .gt tbody tr td .upper-label{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:0px;color:#000;display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .gt tbody tr td .lower-label{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:0px;color:#a7a7a7;display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .gt tbody tr br{display:block;content:\"\";margin-top:-8px}:host ::ng-deep .gt tbody tr:nth-of-type(1) td{border-top:none!important}:host ::ng-deep .gt .custom-column-checkbox-checked,:host ::ng-deep .gt .custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}:host ::ng-deep .gt .custom-column-checkbox-checked{color:#268bff}:host ::ng-deep .gt .custom-column-checkbox-unchecked{color:#4a4a4a}:host ::ng-deep .bottom-border .gt tbody tr:last-of-type td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4}:host ::ng-deep .bottom-border .gt tbody tr:last-of-type td:nth-of-type(n+2){box-shadow:inset -1px 0 #d4d4d4}.table-container{overflow-x:auto;overflow-y:auto}.rowSelectCheckbox,#selectAllRowsCheckbox{cursor:pointer}.disable-checkbox{color:#dedede!important;pointer-events:none!important}.mdi-warning{color:#f3c639;font-size:16px;line-height:28px}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{opacity:1}.redcolor-status{color:#c62a2a}#no-filter-space{width:.875rem}::ng-deep .mat-button-toggle-appearance-standard .mat-button-toggle-label-content{line-height:1.875rem!important;width:2.625rem;padding:0 .625rem}input.numberInput{margin-right:-.8125rem;padding:0 0 0 .625rem;height:1.875rem}::ng-deep .mat-button-toggle-checked{background-color:#268bff!important;color:#fff!important}::ng-deep .mat-button-toggle-group-appearance-standard{border-radius:0}.hidden{display:none}.no-data-div{margin-top:2.5px}.no-data-div label{margin:0;width:auto;font-weight:500;background-color:#d3d3d3;padding:.3125rem 1.125rem;border-radius:.25rem}.column-values:nth-of-type(2){color:#a7a7a7!important}.custom-column-checkbox-checked,.custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}.custom-column-checkbox-checked{color:#268bff}.custom-column-checkbox-unchecked{color:#4a4a4a}.time-filter-checkboxes>div>p{color:#151b1e}::ng-deep .margin-bottom-zero .mat-radio-label{margin-bottom:0}:host ::ng-deep mat-radio-group br{margin-top:0!important}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio__background{width:var(--mat-radio-size);height:var(--mat-radio-size)}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio__inner-circle{border-width:calc(var(--mat-radio-size) / 2)}:host ::ng-deep mat-radio-group mat-radio-button .mdc-form-field>label{margin:0 0 0 4px;padding:0;top:-2px;position:relative}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio--disabled+label{color:var(--primary-text-color-dark)!important}:host ::ng-deep mat-radio-group mat-radio-button.mat-mdc-radio-button .mdc-form-field .mdc-radio{padding:0}:host ::ng-deep mat-radio-group mat-radio-button .mdc-form-field>label{left:-94px;font-size:12px;color:#4a4a4a;position:relative}::ng-deep .reject.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff0}::ng-deep .reject.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:#ff0}::ng-deep .resubmit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff0}::ng-deep .resubmit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:#ff0}::ng-deep .noAction.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:green}::ng-deep .noAction.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:green}::ng-deep .approve.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:green}::ng-deep .approve.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:green}::ng-deep .credit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:red}::ng-deep .credit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:red}::ng-deep .mat-radio-button.mat-radio-disabled .mat-radio-outer-circle{border-color:#00000061!important}::ng-deep .mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-inner-circle{background-color:#00000061!important}::ng-deep tr.white-background-row{background:#fff}::ng-deep tr.gray-background-row{background:#e9e9e980!important}.remarks-tooltip,.mdi-information,.mdi-information-outline,.seller-tooltip{font-size:.875rem;color:#268bff;position:relative;top:.1875rem;cursor:pointer}.seller-tooltip{top:-1px;float:right}::ng-deep .remarks-info-tooltip .tooltip-inner{max-width:19.25rem!important}.rating-icon,.lur-violation-icon{color:#268bff;cursor:pointer;position:relative;left:-2px}::ng-deep .rating-info-tooltip .tooltip-inner{max-width:800px!important}.spots-info-icon{color:#268bff;cursor:pointer;margin:1px 2px 0 -14px}.spots-info-icon-ol{color:#268bff;cursor:pointer;margin:1px 4px 0 -2px}::ng-deep .spot-info-tooltip .tooltip-inner{position:relative;max-width:220px!important;background:#fff;word-break:break-word;display:flex}::ng-deep .spot-info-tooltip-for-orderlisting-table .tooltip-inner{max-width:220px!important;background:#fff;word-break:break-word;display:flex}p.first-row{padding:.5rem .5rem 0;color:#000;white-space:nowrap;text-align:left}p.second-row{padding:2px .5rem .5rem;color:#000;white-space:nowrap;text-align:left}::ng-deep .gt-total-row-tooltip{opacity:1!important}::ng-deep .gt-total-row-tooltip .tooltip-inner{color:#000;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;background-color:#fff;padding:4px!important;width:100%;border-radius:2px!important}::ng-deep .gt-total-row-tooltip .arrow:before{border-top-color:#fff!important}.info-label{margin-left:4px;color:#268bff;vertical-align:text-top}::ng-deep .hierarchy-tooltip{max-width:-moz-fit-content;max-width:fit-content;width:310px!important}::ng-deep .hierarchy-tooltip .tooltip-inner{padding:4px!important;max-width:22.75rem;max-height:11.25rem}table.seller-hierarchy-table{table-layout:fixed}table.seller-hierarchy-table tr th{font-family:Roboto;font-size:.75rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:1.67;letter-spacing:normal;color:#5e5e5e;white-space:nowrap;background:#ededed;position:sticky;box-shadow:inset 0 1px #d4d4d4;top:0;z-index:1}table.seller-hierarchy-table tr th:nth-child(1){width:20px}table.seller-hierarchy-table tr th:first-of-type,table.seller-hierarchy-table tr td:first-of-type{width:20px;border-left:1px solid #d4d4d4}table.seller-hierarchy-table tr th:last-of-type,table.seller-hierarchy-table tr td:last-of-type{border-right:1px solid #d4d4d4;width:7.875rem!important}table.seller-hierarchy-table tr th:nth-of-type(2){width:7.75rem!important}table.seller-hierarchy-table tr td{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#4a4a4a;box-shadow:none!important;border-top:1px solid #d4d4d4;border-bottom:1px solid #d4d4d4}table.seller-hierarchy-table tr td:nth-of-type(2),table.seller-hierarchy-table tr td:nth-of-type(3){padding-top:.25rem}table.seller-hierarchy-table tr td span{display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;position:relative}section.hierarchy-table-container{max-height:8.75rem;overflow:auto}section.hierarchy-table-container::-webkit-scrollbar-track{margin-top:1.5rem}.difference-text{padding:.5rem;color:#000;text-align:left}::ng-deep .posted-avg-tooltip .tooltip-inner{width:13.8125rem!important}::ng-deep .drrBooked-info-tooltip{transform:translate(26px,6px)}::ng-deep .drrBooked-info-tooltip .tooltip-inner{max-width:307px!important;width:242px!important;background:#fff;word-break:break-word;display:flex;padding:4px!important;text-align:left}::ng-deep .drrBooked-info-tooltip .tooltip-inner p{color:#000}::ng-deep .drrBooked-info-tooltip .arrow:before{border-right-color:#fff!important}.clickable-data{cursor:pointer;color:#268bff!important;display:flex!important;align-items:center}.clickable-data .spot-details-download-icons{font-size:12px}.disabled-clickable-data{pointer-events:none;color:#d4d4d4!important}.spot-column-tooltip-message{color:#000;width:max-content;text-align:left}div.spinner-for-button-directive{position:relative;left:-1px}.clickable-row table tr.mat-row td{cursor:pointer!important}.tooltip-div-container{text-align:left!important;padding:12px 4px;color:#4a4a4a!important;font-size:12px!important;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}.notification-tooltip-div-container{text-align:left!important;padding:6px 8px;color:#4a4a4a!important;font-size:12px!important;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}.mdi-information,.mdi-information-outline{left:3px;top:1px}.mdi-information-outline{position:static}::ng-deep .team-user-tooltip.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .team-user-tooltip .tooltip-inner{opacity:1!important;width:-moz-fit-content!important;width:fit-content!important;max-width:520px;border-radius:2px;padding:0 4px!important}::ng-deep .team-user-tooltip .tooltip-inner .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:#fff!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .gt-icon-column-tooltip{opacity:1!important}::ng-deep .gt-icon-column-tooltip .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:#fff!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .gt-icon-column-tooltip.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .gt-icon-column-tooltip .tooltip-inner{width:100%}::ng-deep .tooltip-containing-table{opacity:1!important}::ng-deep .tooltip-containing-table .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:#fff!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .tooltip-containing-table.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .tooltip-containing-table li{margin:0!important;padding:0!important}::ng-deep .tooltip-containing-table ul{margin:0!important;padding-left:8px!important}::ng-deep .tooltip-containing-table .tooltip-inner{width:100%;max-width:230px}table.tooltip-table{table-layout:fixed;margin:4px 0 0;width:100%}table.tooltip-table th,table.tooltip-table td{padding:2px 8px;line-height:normal}table.tooltip-table thead tr th:first-of-type{box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4,inset 1px 0 #d4d4d4!important;border:none}table.tooltip-table thead tr th{color:#5e5e5e!important;font-size:12px;font-weight:500;font-family:Roboto;line-height:1.67;background-color:#ededed;border-top:none!important;border-bottom:none!important;outline:none!important;box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4}table.tooltip-table thead tr th div.row{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}table.tooltip-table tbody tr td{color:#5e5e5e!important;font-size:12px;font-weight:500;font-family:Roboto;line-height:1.67}table.tooltip-table tbody tr td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}table.tooltip-table tbody tr td:nth-of-type(n+2){box-shadow:inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}.bottom-border{border-bottom:1px solid #d4d4d4!important}i.disabled{pointer-events:none!important}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i4.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i4.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i4.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i4.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i4.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i4.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i4.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i4.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i4.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i4.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "ngmodule", type: NgxSkeletonLoaderModule }, { kind: "component", type: i5.NgxSkeletonLoaderComponent, selector: "ngx-skeleton-loader", inputs: ["count", "loadingText", "appearance", "animation", "ariaLabel", "theme"] }, { kind: "directive", type: showEllipsisTextOnHoverDirective, selector: "[showEllipsisTextOnHover]" }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: AnnaIconColumnComponent, selector: "anna-core-anna-icon-column", inputs: ["componentName", "iconToShow", "dataObject"], outputs: ["onColumnIconClicked"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i7.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { kind: "component", type: i7.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "directive", type: NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: AnnaNoDataComponent, selector: "anna-core-no-data-lib", inputs: ["width", "marginTop"] }, { kind: "component", type: AnnaColumnCheckboxFilterComponent, selector: "anna-core-anna-column-checkbox-filter", inputs: ["showFilterHeaderTabs", "isLurAndCsrComponent", "tableData", "clonedTableData", "filterTabObjects"], outputs: ["filterAppliedToTable", "sortingAppliedToTable", "getSortType", "closeTooltip"] }, { kind: "component", type: AnnaColumnSliderFilterComponent, selector: "anna-core-anna-column-slider-filter", inputs: ["filterTabObjects", "isLurAndCsrComponent", "tableData", "showFilterHeaderTabs", "clonedTableData"], outputs: ["closeTooltip", "filterAppliedToTable", "getSortType", "sortingAppliedToTable"] }, { kind: "component", type: AnnaColumnDateRangeFilterComponent, selector: "anna-core-anna-column-date-range-filter", inputs: ["tableData", "clonedTableData", "filterTabObjects", "isLurAndCsrComponent", "showFilterHeaderTabs"], outputs: ["filterAppliedToTable", "sortingAppliedToTable", "getSortType", "closeTooltip"] }, { kind: "component", type: AnnaColumnTimeFilterComponent, selector: "anna-core-anna-column-time-filter", inputs: ["tableData", "clonedTableData", "filterTabObjects", "showFilterHeaderTabs", "showAllTimeRangeCheckboxes", "isLurAndCsrComponent", "gtGeneralConfig", "showClearAllFilter", "startFromText", "endToText", "isSortAndFilterAbsent"], outputs: ["timeChanges", "filterAppliedToTable", "sortingAppliedToTable", "getSortType", "closeTooltip"] }, { kind: "component", type: AnnaEstIconTemplateComponent, selector: "anna-core-anna-est-icon-template" }, { kind: "ngmodule", type: NgCircleProgressModule }, { kind: "component", type: i8.CircleProgressComponent, selector: "circle-progress", inputs: ["name", "class", "backgroundGradient", "backgroundColor", "backgroundGradientStopColor", "backgroundOpacity", "backgroundStroke", "backgroundStrokeWidth", "backgroundPadding", "radius", "space", "percent", "toFixed", "maxPercent", "renderOnClick", "units", "unitsFontSize", "unitsFontWeight", "unitsColor", "outerStrokeGradient", "outerStrokeWidth", "outerStrokeColor", "outerStrokeGradientStopColor", "outerStrokeLinecap", "innerStrokeColor", "innerStrokeWidth", "titleFormat", "title", "titleColor", "titleFontSize", "titleFontWeight", "subtitleFormat", "subtitle", "subtitleColor", "subtitleFontSize", "subtitleFontWeight", "imageSrc", "imageHeight", "imageWidth", "animation", "animateTitle", "animateSubtitle", "animationDuration", "showTitle", "showSubtitle", "showUnits", "showImage", "showBackground", "showInnerStroke", "clockwise", "responsive", "startFromZero", "showZeroOuterStroke", "lazy", "options"], outputs: ["onClick"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
784
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AnnaNonEditableGenericTableComponent, isStandalone: true, selector: "anna-core-non-editable-generic-table-lib", inputs: { showSkeletonLoading: "showSkeletonLoading", tableHeaders: "tableHeaders", tableData: "tableData", clonedTableData: "clonedTableData", gtGeneralConfig: "gtGeneralConfig", totalRowInfo: "totalRowInfo", gtDimension: "gtDimension", tableClass: "tableClass", maximumRowsWhichCanBeRenderedWithoutScroll: "maximumRowsWhichCanBeRenderedWithoutScroll", fixNumberOfRowsForPopup: "fixNumberOfRowsForPopup", limit: "limit", includeBorderInTableHeight: "includeBorderInTableHeight", downloadInProgress: "downloadInProgress", percentDone: "percentDone", starredInProgress: "starredInProgress", clickableRow: "clickableRow", setTableHeightWhenRowSizeIsFixed: "setTableHeightWhenRowSizeIsFixed", tableBorderBottomClassRequired: "tableBorderBottomClassRequired", hideSomeTds: "hideSomeTds", tdsHaveRowSpan: "tdsHaveRowSpan", multipleTablesPresent: "multipleTablesPresent", showOrHideToggleForTotalRow: "showOrHideToggleForTotalRow" }, outputs: { toggleCheckbox: "toggleCheckbox", toggleRowCheckbox: "toggleRowCheckbox", toggleHeaderCheckbox: "toggleHeaderCheckbox", undoIconClicked: "undoIconClicked", filterAppliedToTable: "filterAppliedToTable", sortingAppliedToTable: "sortingAppliedToTable", rowClicked: "rowClicked", radioButtonSelected: "radioButtonSelected", columnFilterOpened: "columnFilterOpened", columnFilterClosed: "columnFilterClosed", gtIconClicked: "gtIconClicked", gtSVGIconClicked: "gtSVGIconClicked", gtTextActionClicked: "gtTextActionClicked", gtViewDetailClicked: "gtViewDetailClicked", gtInnerHTMLClicked: "gtInnerHTMLClicked", downloadSpotDetails: "downloadSpotDetails", clickableDataClicked: "clickableDataClicked", totalRowIconClicked: "totalRowIconClicked", notificationIconHover: "notificationIconHover", notificationIconHoverLeave: "notificationIconHoverLeave", editableInputEdited: "editableInputEdited", radioButtonMessageIconClicked: "radioButtonMessageIconClicked" }, viewQueries: [{ propertyName: "viewChildTableHeaders", predicate: ["tableHeader"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\r\n id=\"generic-table-conatiner\"\r\n class=\"table-container {{ gtGeneralConfig?.tableOuterContainerName }} {{ tableBottomBorderClass }}\"\r\n [ngClass]=\"{\r\n 'scroll-left-shadow-effect': isScrolledLeft,\r\n 'scroll-right-shadow-effect': !isScrollEnded,\r\n 'clickable-row': clickableRow,\r\n 'no-data-table': (isNoDataToDisplaySubject$ | async),\r\n 'table-with-show-hide-total-row-toggle': showOrHideToggleForTotalRow\r\n }\"\r\n (scroll)=\"onTableContainerScroll($event)\"\r\n>\r\n <div\r\n [class]=\"gtGeneralConfig.tableContainerName\"\r\n class=\"horizontal-scroll-for-table-container\"\r\n [ngStyle]=\"{\r\n height:\r\n tableData.length < maximumRowsWhichCanBeRenderedWithoutScroll\r\n ? 'calc(' +\r\n (gtDimension.rowHeight * tableData.length +\r\n (!tableData.length || !gtGeneralConfig.totalRow\r\n ? gtDimension.headerHeight\r\n : gtDimension.headerHeight + gtDimension.rowHeight)) +\r\n 'px)'\r\n : gtDimension.tableHeight\r\n }\"\r\n >\r\n <button\r\n *ngIf=\"showOrHideToggleForTotalRow && !showSkeletonLoading && (isNoDataToDisplaySubject$ | async) === false\"\r\n [ngClass]=\"{\r\n 'shift-toggle-top-on-total-row-click': !gtGeneralConfig.totalRow\r\n }\"\r\n class=\"show-or-hide-toggle-btn\"\r\n (click)=\"showHideTotalRow()\"\r\n >\r\n <i\r\n class=\"mdi mdi-menu-swap\"\r\n tooltipClass=\"show-or-hide-toggle-tooltip\"\r\n placement=\"auto\"\r\n container=\"body\"\r\n [ngbTooltip]=\"showOrHideToggleForTotalRowTooltip\"\r\n ></i>\r\n </button>\r\n <table\r\n class=\"gt\"\r\n [ngClass]=\"tableClass\"\r\n mat-table\r\n [dataSource]=\"renderedData\"\r\n >\r\n <tr\r\n class=\"header-row\"\r\n mat-header-row\r\n *matHeaderRowDef=\"tableColumns; sticky: true\"\r\n [style.height.px]=\"gtDimension.headerHeight\"\r\n ></tr>\r\n <tr\r\n class=\"total-row\"\r\n mat-header-row\r\n [style.height.px]=\"gtDimension.rowHeight\"\r\n *matHeaderRowDef=\"totalRowColumns; sticky: true\"\r\n [class.hidden]=\"\r\n showSkeletonLoading ||\r\n (!showSkeletonLoading && !tableData.length) ||\r\n (isNoDataToDisplaySubject$ | async) ||\r\n (!showSkeletonLoading && !gtGeneralConfig.totalRow)\r\n \"\r\n ></tr>\r\n <tr\r\n [class]=\"rowData.gtClass\"\r\n [ngClass]=\"{ 'no-border-tr': (isNoDataToDisplaySubject$ | async) }\"\r\n mat-row\r\n *matRowDef=\"let rowData; columns: tableColumns\"\r\n [style.height.px]=\"gtDimension.rowHeight\"\r\n (click)=\"dataRowClicked(rowData)\"\r\n ></tr>\r\n\r\n <!-- TOTAL ROW -->\r\n <ng-container\r\n [matColumnDef]=\"column.colName\"\r\n *ngFor=\"let column of totalRowInfo; trackBy: trackByFn\"\r\n >\r\n <td\r\n mat-header-cell\r\n *matHeaderCellDef\r\n [attr.colspan]=\"column.colspan\"\r\n class=\"{{ column.class }}\"\r\n >\r\n <ng-container *ngIf=\"column['isActionColumn']\">\r\n <a\r\n *ngFor=\"let data of column.actionData\"\r\n [class]=\"data.class\"\r\n (click)=\"onClickableDataClicked({}, data.id)\"\r\n >\r\n {{ data.name }}\r\n </a>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column['isIconColumn']\">\r\n <i\r\n class=\"{{ column?.iconData?.class }}\"\r\n (click)=\"iconClickedInTotalRow(column?.colName)\"\r\n >\r\n </i>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!column['isActionColumn']\">\r\n <strong class=\"upper-label\"\r\n >{{ column.data }}\r\n <span\r\n class=\"red-text-totol-row\"\r\n *ngIf=\"column.additionalRedTextAfterData\"\r\n >{{ column.additionalRedTextAfterData }}</span\r\n ></strong\r\n >\r\n <ng-container *ngIf=\"column.lowerData\">\r\n <br />\r\n <span\r\n *ngIf=\"\r\n column.colName === 'total-potential-booked-unit' &&\r\n gtGeneralConfig.component === 'RATING';\r\n else columnLowerData\r\n \"\r\n class=\"clickable-data\"\r\n (click)=\"spotDetailsDownloadClicked('TOTALROW')\"\r\n [ngClass]=\"{ 'disabled-clickable-data': downloadInProgress }\"\r\n >{{ column.lowerData }}\r\n <span class=\"material-icons spot-details-download-icons\">get_app</span>\r\n <ng-container *ngIf=\"downloadInProgress && selectedRowTypeForDownload === 'TOTALROW'\">\r\n <ng-container [ngTemplateOutlet]=\"circularProgressBar\"></ng-container>\r\n </ng-container>\r\n </span>\r\n <ng-template #columnLowerData>\r\n <span class=\"lower-label\">{{ column.lowerData }}</span>\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.tooltipMessage && gtGeneralConfig.component !== 'LUR_VIOLATIONS'\">\r\n <i\r\n class=\"{{ column.tooltipIconClass }}\"\r\n container=\"body\"\r\n [ngbTooltip]=\"column.tooltipMessage\"\r\n tooltipClass=\"gt-total-row-tooltip\"\r\n placement=\"bottom\"\r\n ></i>\r\n </ng-container>\r\n <ng-container *ngIf=\"gtGeneralConfig.component === 'LUR_VIOLATIONS' && column.tooltipMessage\">\r\n <i\r\n class=\"mi mdi-info-outline info-label\"\r\n container=\"body\"\r\n [ngbTooltip]=\"lurViolationTotalRowToolTip\"\r\n tooltipClass=\"gt-total-row-tooltip\"\r\n placement=\"bottom\"\r\n ></i>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- MAIN ROW -->\r\n <ng-container\r\n [matColumnDef]=\"columnDef.headerInfo[0].objectKey\"\r\n *ngFor=\"let columnDef of tableHeaders; trackBy: trackByFn\"\r\n >\r\n <th\r\n #tableHeader\r\n nowrap\r\n mat-header-cell\r\n *matHeaderCellDef\r\n [style.width]=\"columnDef.width\"\r\n >\r\n <div\r\n class=\"row mx-0\"\r\n *ngFor=\"let header of columnDef.headerInfo; let j = index\"\r\n >\r\n <p\r\n *ngIf=\"header.typeOfHeaderData === 'STRING'\"\r\n [ngClass]=\"{ 'upper-label': j === 0, 'lower-label': j === 1 }\"\r\n >\r\n <ngx-skeleton-loader\r\n *ngIf=\"header.name == null\"\r\n count=\"1\"\r\n [theme]=\"{\r\n height: '10px',\r\n display: 'block',\r\n width: columnDef.width,\r\n 'max-width': 'calc(100% - 20px)'\r\n }\"\r\n >\r\n </ngx-skeleton-loader>\r\n <ng-container *ngIf=\"header.name\">\r\n {{ header.name }}\r\n </ng-container>\r\n <ng-container *ngIf=\"header.tooltip && header.tooltip.tooltipMessage\">\r\n <i\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"header.tooltip.tooltipMessage\"\r\n container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n </ng-container>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name === 'impsInfoTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"impsInfoTooltip\"\r\n container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"\r\n header.tooltip && header.tooltip.name === 'spotsColumnEquivalizationMessageTooltip'\r\n \"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n container=\"body\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"spotsColumnEquivalizationMessageTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name === 'underDeliveryTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n container=\"body\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"underDeliveryTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name === 'overDeliveryTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n container=\"body\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"overDeliveryTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name === 'ratingInfoTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"ratingInfoTooltip\"\r\n container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name === 'rateInfoTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"rateInfoTooltip\"\r\n container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name === 'ongoingRevBookedColumnTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"ongoingRevBookedColumnTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name === 'completedRevBookedColumnTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"completedRevBookedColumnTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name === 'avgBookedRate'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"avgBookedRate\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name === 'avgBookedRtg'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"avgBookedRtg\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name === 'avgBookedImps'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"avgBookedImps\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name === 'automationTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"automationTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name === 'rebateImpact'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"rebateImpact\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name === 'projectedImpsRtg'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"projectedImpsRtg\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n </p>\r\n\r\n <ng-container *ngIf=\"header.typeOfHeaderData === 'CHECKBOX'\">\r\n <span\r\n *ngIf=\"gtGeneralConfig.isHeaderChecked\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"selectUnselectAllRows()\"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!gtGeneralConfig.isHeaderChecked\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n [ngClass]=\"{ 'disable-checkbox': gtGeneralConfig.disableHeaderCheckbox }\"\r\n (click)=\"selectUnselectAllRows()\"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n </ng-container>\r\n\r\n <div\r\n *ngIf=\"gtGeneralConfig.showAllColumnFilter\"\r\n class=\"sort-filter-container\"\r\n >\r\n <ng-container *ngIf=\"header.showTooltipIcon\">\r\n <!-- Active tooltip Functionality -->\r\n <ng-container *ngIf=\"header.filter === 'CHECKBOX'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.isFilterSortActive &&\r\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\"\r\n [ngbTooltip]=\"filterTooltip\"\r\n placement=\"{{ filterAlignment }}\"\r\n container=\"body\"\r\n tooltipClass=\"non-edit-checkbox-tooltip\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'SLIDER'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.isFilterSortActive &&\r\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\"\r\n [ngbTooltip]=\"sliderToolTip\"\r\n placement=\"bottom left-top\"\r\n container=\"body\"\r\n tooltipClass=\"non-edit-slider-tooltip\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t1=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t1, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'DATE'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.isFilterSortActive &&\r\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\"\r\n [ngbTooltip]=\"datePickerTooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n tooltipClass=\"non-edit-datepicker-tooltip\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t2=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t2, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'WEEK'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.isFilterSortActive &&\r\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\"\r\n [ngbTooltip]=\"weekPickerToolTip\"\r\n placement=\"bottom left-top\"\r\n container=\"body\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t3=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t3, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'TIME'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.isFilterSortActive &&\r\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\"\r\n [ngbTooltip]=\"timeFilterToolTip\"\r\n placement=\"bottom left-top auto\"\r\n container=\"body\"\r\n tooltipClass=\"non-edit-time-tooltip\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t4=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t4, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!header.showTooltipIcon\">\r\n <span id=\"no-filter-space\"></span><br />\r\n </ng-container>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name === 'lurViolationInfoTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"lurViolationInfoTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n </div>\r\n </div>\r\n </th>\r\n\r\n <ng-container *matCellDef=\"let ROW_DATA\">\r\n <td\r\n mat-cell\r\n [style.background]=\"ROW_DATA.backgroundColor\"\r\n [style.border]=\"ROW_DATA.border\"\r\n class=\"{{ ROW_DATA.rowClass }}\"\r\n [ngClass]=\"ROW_DATA[columnDef.headerInfo[0].objectKey + 'TdClass']\"\r\n [attr.rowspan]=\"ROW_DATA[columnDef.headerInfo[0].objectKey + 'Rowspan']\"\r\n *ngIf=\"\r\n !hideSomeTds ||\r\n (hideSomeTds && !ROW_DATA['hide' + columnDef.headerInfo[0].objectKey + 'Td'])\r\n \"\r\n >\r\n <ngx-skeleton-loader\r\n *ngIf=\"showSkeletonLoading\"\r\n count=\"1\"\r\n [theme]=\"{ height: '10px', display: 'block' }\"\r\n >\r\n </ngx-skeleton-loader>\r\n\r\n <ng-container *ngIf=\"!showSkeletonLoading\">\r\n <ng-container *ngIf=\"tableData.length > 0 && (isNoDataToDisplaySubject$ | async) === false\">\r\n <ng-container\r\n *ngFor=\"\r\n let subline of columnDef.headerInfo;\r\n let subLineIndex = index;\r\n trackBy: trackByFn\r\n \"\r\n >\r\n <div annaCoreShowEllipsisTextOnHover>\r\n <ng-container [ngSwitch]=\"columnDef.headerInfo[subLineIndex].typeOfBodyData\">\r\n <ng-container *ngSwitchCase=\"'ICON'\">\r\n <i\r\n *ngIf=\"\r\n !(\r\n starredInProgress &&\r\n ROW_DATA.orderId === selectedStarredOrderId\r\n )\r\n \"\r\n [class]=\"ROW_DATA.iconClass\"\r\n (click)=\"iconClicked(ROW_DATA, ROW_DATA.iconClass)\"\r\n ngbTooltip=\"{{ ROW_DATA.iconTitleText }}\"\r\n placement=\"bottom\"\r\n container=\"body\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n ></i>\r\n <ng-container\r\n *ngIf=\"\r\n starredInProgress && ROW_DATA.orderId === selectedStarredOrderId\r\n \"\r\n >\r\n <div class=\"spinner-for-button-directive\"></div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'ICON_CELL'\">\r\n <ng-container\r\n *ngFor=\"\r\n let action of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n >\r\n <ng-container *ngIf=\"action.showObjectKey\">\r\n {{ ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey] }}\r\n </ng-container>\r\n\r\n <i\r\n *ngIf=\"action.showIcon\"\r\n [class]=\"action.iconClass\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionType(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n tooltipClass=\"team-user-tooltip remove-on-scroll-class\"\r\n [ngbTooltip]=\"action.showTooltip ? action.tooltipData : null\"\r\n (click)=\"\r\n textActionClicked(\r\n ROW_DATA,\r\n action.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n [disableTooltip]=\"!action.showTooltip\"\r\n >\r\n </i>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'HTML_STRING'\">\r\n <p\r\n [innerHTML]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n (click)=\"innerHTMLCellClicked($event, ROW_DATA)\"\r\n ></p>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'SVG_ICON'\">\r\n <anna-core-icon-column\r\n [componentName]=\"gtGeneralConfig.component\"\r\n [dataObject]=\"ROW_DATA\"\r\n [iconToShow]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n \"\r\n (columnIconClicked)=\"svgIconClicked($event)\"\r\n ></anna-core-icon-column>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'TEXT_ACTIONS'\">\r\n <ng-container\r\n *ngFor=\"\r\n let text of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n >\r\n <button\r\n *ngIf=\"text.showTooltip\"\r\n (click)=\"\r\n textActionClicked(\r\n ROW_DATA,\r\n text.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n [disabled]=\"text.isDisabled\"\r\n class=\"{{ text.class }}\"\r\n (mouseenter)=\"\r\n mouseEnterOnTextActionType(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n [ngbTooltip]=\"textActionTooltipTemplate\"\r\n placement=\"auto\"\r\n container=\"body\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n >\r\n {{ text.name }}\r\n </button>\r\n\r\n <button\r\n *ngIf=\"!text.showTooltip\"\r\n (click)=\"\r\n textActionClicked(\r\n ROW_DATA,\r\n text.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n [disabled]=\"text.isDisabled\"\r\n class=\"{{ text.class }}\"\r\n >\r\n {{ text.name }}\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'CHECKBOX'\">\r\n <span\r\n *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n [ngClass]=\"{\r\n 'disable-checkbox':\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n false\r\n )\r\n \"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n [ngClass]=\"{\r\n 'disable-checkbox':\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n true\r\n )\r\n \"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n\r\n <ng-container\r\n *ngFor=\"\r\n let action of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n >\r\n <i\r\n *ngIf=\"action.showIcon\"\r\n [class]=\"action.iconClass\"\r\n [ngClass]=\"{ disabled: action.disabledIcon }\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionTypeContainingTable(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n tooltipClass=\"tooltip-containing-table remove-on-scroll-class\"\r\n [ngbTooltip]=\"tooltipContainingTableTemplate\"\r\n >\r\n </i>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'CLICKABLE_DATA'\">\r\n <a\r\n *ngFor=\"\r\n let text of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n [class]=\"text.class\"\r\n (click)=\"onClickableDataClicked(ROW_DATA, text.id)\"\r\n >\r\n {{ text.name }}\r\n </a>\r\n <span\r\n *ngIf=\"\r\n subline.objectKey === 'displayBookedUnits' &&\r\n gtGeneralConfig.component === 'RATING'\r\n \"\r\n class=\"clickable-data\"\r\n (click)=\"spotDetailsDownloadClicked('DATAROW', ROW_DATA)\"\r\n [ngClass]=\"{ 'disabled-clickable-data': downloadInProgress }\"\r\n >{{ ROW_DATA.displayBookedUnits }}\r\n <span class=\"material-icons spot-details-download-icons\"\r\n >get_app</span\r\n >\r\n <ng-container\r\n *ngIf=\"\r\n downloadInProgress &&\r\n ROW_DATA.inventoryCodeId ===\r\n selectedInventoryIdForDownload &&\r\n ROW_DATA.demographic === selectedDemographicForDownload\r\n \"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"circularProgressBar\"\r\n ></ng-container>\r\n </ng-container>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'STRING___ICON_OR_TEXT_ACTION'\">\r\n <ng-container\r\n *ngFor=\"\r\n let action of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n >\r\n <span\r\n [class]=\"action.additionalTextBeforeLinkClass\"\r\n [innerHtml]=\"action.additionalTextBeforeLink\"\r\n ngbTooltip=\"{{ action.additionalTextBeforeLink }}\"\r\n placement=\"bottom\"\r\n container=\"body\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n [disableTooltip]=\"!action.enableTooltipForAdditionalText\"\r\n ></span>\r\n\r\n <ng-container *ngIf=\"action && action.typeOfData === 'STRING'\">\r\n {{ action.data }}\r\n </ng-container>\r\n\r\n <a\r\n [id]=\"action.id\"\r\n *ngIf=\"action.showLink\"\r\n (click)=\"\r\n textActionClicked(\r\n ROW_DATA,\r\n action.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n [class]=\"action.linkClass\"\r\n [ngClass]=\"{ disabled: action.disabledLink }\"\r\n >{{ action.data }}</a\r\n >\r\n <span\r\n ngbTooltip=\"{{ action.additionalTextAfterLink }}\"\r\n placement=\"bottom\"\r\n container=\"body\"\r\n [class]=\"action.additionalTextAfterLinkClass\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n [disableTooltip]=\"!action.enableTooltipForAdditionalAfterText\"\r\n >\r\n {{ action.additionalTextAfterLink }}\r\n </span>\r\n\r\n <ng-container *ngIf=\"action.showTooltip\">\r\n <ng-container *ngIf=\"action.tooltipData.innerHtml\">\r\n <i\r\n *ngIf=\"action.showIcon\"\r\n [class]=\"action.iconClass\"\r\n [ngClass]=\"{ disabled: action.disabledIcon }\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionTypeContainingTable(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n tooltipClass=\"tooltip-containing-table remove-on-scroll-class\"\r\n [ngbTooltip]=\"tooltipContainingTableTemplate\"\r\n >\r\n </i>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!action.tooltipData.tooltipTableBody\">\r\n <i\r\n *ngIf=\"action.showIcon\"\r\n [class]=\"action.iconClass\"\r\n [ngClass]=\"{ disabled: action.disabledIcon }\"\r\n (click)=\"\r\n iconClickedOnStringIconActionType(\r\n ROW_DATA,\r\n action.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n (mouseleave)=\"mouseLeaveTextActionType(ROW_DATA)\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionType(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n [placement]=\"\r\n action.tooltipPlacement\r\n ? action.tooltipPlacement\r\n : 'bottom auto'\r\n \"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n tooltipClass=\"team-user-tooltip remove-on-scroll-class {{\r\n action.tooltipClass\r\n }}\"\r\n [ngbTooltip]=\"userLoggedInDetails\"\r\n >\r\n </i>\r\n <ng-container *ngIf=\"action['showSvgIcon']\">\r\n <anna-core-anna-est-icon-template\r\n class=\"float-right\"\r\n *ngIf=\"action['svgIconName'] === 'anna-icon'\"\r\n (mouseleave)=\"mouseLeaveTextActionType(ROW_DATA)\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionType(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex]\r\n .tooltipKey\r\n )\r\n \"\r\n [placement]=\"\r\n action.tooltipPlacement\r\n ? action.tooltipPlacement\r\n : 'bottom auto'\r\n \"\r\n tooltipClass=\"team-user-tooltip remove-on-scroll-class {{\r\n action['tooltipClass']\r\n }}\"\r\n [ngbTooltip]=\"userLoggedInDetails\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n >\r\n </anna-core-anna-est-icon-template>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!action.showTooltip\">\r\n <i\r\n *ngIf=\"action.showIcon\"\r\n [class]=\"action.iconClass\"\r\n [ngClass]=\"{ disabled: action.disabledIcon }\"\r\n (click)=\"\r\n iconClickedOnStringIconActionType(\r\n ROW_DATA,\r\n action.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n >\r\n </i>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'STRING_OR_INPUT'\">\r\n <ng-container\r\n *ngIf=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]?.type ===\r\n 'STRING';\r\n else inputBox\r\n \"\r\n >\r\n <span\r\n [innerHtml]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n ?.value\r\n \"\r\n ></span>\r\n </ng-container>\r\n <ng-template #inputBox>\r\n <input\r\n placeholder=\"{{\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n ?.placeholder\r\n }}\"\r\n annaCoreShowEllipsisTextOnHover\r\n class=\"{{\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .className\r\n }}\"\r\n (keydown)=\"\r\n changesMadeInEditableInputBox(\r\n $event,\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey],\r\n false\r\n )\r\n \"\r\n (paste)=\"\r\n changesMadeInEditableInputBox(\r\n $event,\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey],\r\n true\r\n )\r\n \"\r\n (ngModelChange)=\"\r\n editableInputValueChanged(\r\n $event,\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey\r\n )\r\n \"\r\n [ngModel]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].value\r\n \"\r\n [disabled]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .disabled\r\n \"\r\n [ngClass]=\"{\r\n 'red-border':\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .hasError\r\n }\"\r\n />\r\n\r\n <i\r\n *ngIf=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .showIcon\r\n \"\r\n container=\"body\"\r\n [ngbTooltip]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .iconTooltip\r\n \"\r\n tooltipClass=\"gt-total-row-tooltip\"\r\n placement=\"bottom\"\r\n class=\"{{\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .iconClass\r\n }}\"\r\n >\r\n </i>\r\n <ng-container\r\n *ngIf=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey][\r\n 'showSvgIcon'\r\n ]\r\n \"\r\n >\r\n <anna-core-anna-est-icon-template\r\n class=\"float-right\"\r\n *ngIf=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey][\r\n 'svgIconName'\r\n ] === 'anna-icon'\r\n \"\r\n [placement]=\"'bottom auto'\"\r\n tooltipClass=\"gt-total-row-tooltip\"\r\n [ngbTooltip]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .iconTooltip\r\n \"\r\n container=\"body\"\r\n >\r\n </anna-core-anna-est-icon-template>\r\n </ng-container>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'HTML'\">\r\n <span\r\n [innerHtml]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n ></span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'SINGLE_RADIO'\">\r\n <span\r\n *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n [ngClass]=\"{\r\n 'disable-checkbox':\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n class=\"mdi mdi-radiobox-marked\"\r\n (click)=\"(null)\"\r\n >\r\n </span>\r\n <span\r\n *ngIf=\"!ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n class=\"mdi mdi-radiobox-blank\"\r\n [ngClass]=\"{\r\n 'disable-checkbox':\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n true\r\n )\r\n \"\r\n >\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'RADIO'\">\r\n <mat-radio-group\r\n *ngIf=\"ROW_DATA['RadioButtonConfig']\"\r\n [ngModel]=\"ROW_DATA[subline.objectKey]\"\r\n [disabled]=\"ROW_DATA['RadioButtonConfig'][0].isDisabled\"\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let radioButton of ROW_DATA['RadioButtonConfig'];\r\n let last = last\r\n \"\r\n >\r\n <mat-radio-button\r\n value=\"{{ radioButton.value }}\"\r\n class=\"{{ radioButton.class }}\"\r\n (click)=\"\r\n radioButtonClicked(\r\n ROW_DATA,\r\n radioButton.value,\r\n ROW_DATA['RadioButtonConfig'][0].isDisabled\r\n )\r\n \"\r\n >{{ radioButton.label }}\r\n </mat-radio-button>\r\n <i\r\n class=\" {{ radioButton.iconClass }}\"\r\n (click)=\"radioButtonIconClicked(ROW_DATA)\"\r\n ></i>\r\n <br *ngIf=\"!last\" />\r\n </ng-container>\r\n </mat-radio-group>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'STRING_WITH_TOOLTIP'\">\r\n <ng-container\r\n *ngFor=\"\r\n let action of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n >\r\n <span> {{ action?.dataToDisplay }}</span>\r\n <span\r\n *ngIf=\"action?.showTooltip\"\r\n [ngbTooltip]=\"textActionTooltipTemplate\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionType(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n [placement]=\"action?.tooltipPosition\"\r\n container=\"body\"\r\n [class]=\"action?.tooltipIconClass\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n [disableTooltip]=\"action?.disableTooltip\"\r\n >\r\n </span>\r\n <span> {{ action?.dataToDisplayAfterTooltip }}</span>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n <ng-container *ngIf=\"subline.objectKey !== 'description'\">\r\n <span>{{\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n }}</span>\r\n <i\r\n *ngIf=\"\r\n subline.objectKey === 'inventoryCode' &&\r\n ROW_DATA['isSellerGroup'] &&\r\n gtGeneralConfig.component === 'RATING'\r\n \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n [ngbTooltip]=\"sellerHierarchyTooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n triggers=\"manual\"\r\n (hidden)=\"closeTooltip()\"\r\n #info=\"ngbTooltip\"\r\n tooltipClass=\"hierarchy-tooltip remove-on-scroll-class\"\r\n (mouseenter)=\"\r\n bindTheValueToSellerGroupTooltip(\r\n ROW_DATA.sellerGroupHierarchy,\r\n info\r\n )\r\n \"\r\n >\r\n </i>\r\n\r\n <i\r\n *ngIf=\"\r\n subline.objectKey === 'displayBookedAverageRating' &&\r\n gtGeneralConfig.component === 'RATING' &&\r\n ROW_DATA['showRatingAverageIcon']\r\n \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n (mouseenter)=\"\r\n setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\r\n \"\r\n tooltipClass=\"posted-avg-tooltip remove-on-scroll-class\"\r\n [ngbTooltip]=\"postedRatingDifference\"\r\n >\r\n </i>\r\n\r\n <i\r\n *ngIf=\"\r\n subline.objectKey === 'displayBookedAverageImpression' &&\r\n gtGeneralConfig.component === 'RATING' &&\r\n ROW_DATA['showImpressionAverageIcon']\r\n \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n (mouseenter)=\"\r\n setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\r\n \"\r\n tooltipClass=\"posted-avg-tooltip remove-on-scroll-class\"\r\n [ngbTooltip]=\"postedImpDifference\"\r\n >\r\n </i>\r\n </ng-container>\r\n <ng-container *ngIf=\"subline.objectKey === 'description'\">\r\n <p\r\n *ngIf=\"\r\n ROW_DATA.descriptionMessage ||\r\n ROW_DATA.descriptionEmailReferenceNum\r\n \"\r\n >\r\n <ng-container *ngIf=\"ROW_DATA.descriptionMessage\">\r\n {{ ROW_DATA.descriptionMessage }}\r\n <br />\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"\r\n ROW_DATA.descriptionEmailReferenceNum !== '-' &&\r\n ROW_DATA.descriptionEmailReferenceNum !== ''\r\n \"\r\n >\r\n Email Ref: {{ ROW_DATA.descriptionEmailReferenceNum }}\r\n <br />\r\n </ng-container>\r\n </p>\r\n <a\r\n href=\"{{ ROW_DATA.descriptionDetailsUrl }}\"\r\n target=\"_blank\"\r\n *ngIf=\"\r\n ROW_DATA.descriptionDetailsUrlType === 'PDF' ||\r\n ROW_DATA.descriptionDetailsUrlType === 'EXCEL'\r\n \"\r\n >\r\n <button class=\"btn viewDetailsAndEmailBtn\">Download</button>\r\n </a>\r\n <ng-container\r\n *ngIf=\"\r\n ROW_DATA.activityname.toLowerCase() === 'order onboarded'\r\n \"\r\n >\r\n <a\r\n *ngIf=\"ROW_DATA.descriptionDetailsUrlType === 'LINK'\"\r\n (click)=\"viewDetailsClicked(ROW_DATA)\"\r\n >\r\n <button class=\"btn viewDetailsAndEmailBtn order-onboarded\">\r\n View details\r\n </button>\r\n </a>\r\n </ng-container>\r\n\r\n <a\r\n href=\"{{ ROW_DATA.descriptionEmailUrl }}\"\r\n target=\"_blank\"\r\n *ngIf=\"\r\n ROW_DATA.descriptionEmailUrl !== '-' &&\r\n ROW_DATA.descriptionEmailUrl !== ''\r\n \"\r\n >\r\n <button class=\"btn viewDetailsAndEmailBtn\">View email</button>\r\n </a>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"isNoDataToDisplaySubject$ | async\">\r\n <div>\r\n {{ null }}\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n </table>\r\n </div>\r\n <anna-core-no-data-lib\r\n [width]=\"noDataWidth\"\r\n [marginTop]=\"marginTop\"\r\n *ngIf=\"isNoDataToDisplaySubject$ | async\"\r\n >\r\n </anna-core-no-data-lib>\r\n</div>\r\n\r\n<!-- Checkbox template -->\r\n<ng-template #filterTooltip>\r\n <anna-core-anna-column-checkbox-filter\r\n [tableData]=\"tableData\"\r\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\"\r\n [clonedTableData]=\"clonedTableData\"\r\n [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\"\r\n (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\"\r\n >\r\n </anna-core-anna-column-checkbox-filter>\r\n</ng-template>\r\n\r\n<!-- Slider template -->\r\n<ng-template #sliderToolTip>\r\n <anna-core-anna-column-slider-filter\r\n [tableData]=\"tableData\"\r\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\"\r\n [clonedTableData]=\"clonedTableData\"\r\n [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\"\r\n (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\"\r\n >\r\n </anna-core-anna-column-slider-filter>\r\n</ng-template>\r\n\r\n<!-- Date Picker Template -->\r\n<ng-template #datePickerTooltip>\r\n <anna-core-anna-column-date-range-filter\r\n [tableData]=\"tableData\"\r\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\"\r\n [clonedTableData]=\"clonedTableData\"\r\n [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\"\r\n (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\"\r\n >\r\n </anna-core-anna-column-date-range-filter>\r\n</ng-template>\r\n\r\n<!-- Week Picker Template -->\r\n<ng-template #weekPickerToolTip>\r\n <!-- <div class=\"weekpicker-container\">\r\n <anna-core-week-calendar-filter-lib\r\n [week-calendar-config]=\"gtGeneralConfig.multiWeekPickerConfig\"\r\n (apply)=\"applyWeekFilter($event)\"\r\n [from-date]=\"calendarMinEnabledDate\"\r\n [to-date]=\"calendarMaxEnabledDate\"\r\n >\r\n </anna-core-week-calendar-filter-lib>\r\n </div> -->\r\n</ng-template>\r\n\r\n<!-- Time Filter Template -->\r\n<ng-template #timeFilterToolTip>\r\n <anna-core-anna-column-time-filter\r\n [tableData]=\"tableData\"\r\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\"\r\n [showAllTimeRangeCheckboxes]=\"showCheckboxesForTimeFilter\"\r\n [clonedTableData]=\"clonedTableData\"\r\n [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\"\r\n (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\"\r\n >\r\n </anna-core-anna-column-time-filter>\r\n</ng-template>\r\n\r\n<ng-template #columnInfoTooltip>\r\n <p class=\"black-color-text white-space-nowrap\">This preemption is rejected and not marked for credit.</p>\r\n</ng-template>\r\n\r\n<ng-template #ratingInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked Rating' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected Rating' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #impsInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked IMPS' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected IMPS' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #spotsColumnEquivalizationMessageTooltip>\r\n <p class=\"spot-column-tooltip-message\">\r\n This consists of equivalized spots and un-equivalized Paid Programs & un-equivalized Non-spots.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #underDeliveryTooltip>\r\n <p class=\"spot-column-tooltip-message\">\r\n Indicates the Under-delivery percentage based on booked and posted RTG/IMPS.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #overDeliveryTooltip>\r\n <p class=\"spot-column-tooltip-message\">\r\n Indicates the Over-delivery percentage based on booked and posted RTG/IMPS.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #rateInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked Rate' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected $ Value' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #sellerHierarchyTooltip>\r\n <ng-container *ngIf=\"sellerGroupHierarchy.length > 0\">\r\n <section class=\"hierarchy-table-container\">\r\n <table class=\"seller-hierarchy-table\">\r\n <thead>\r\n <tr>\r\n <th>#</th>\r\n <th>Inventory Codes</th>\r\n <th>Program/Description</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of sellerGroupHierarchy; let tooltipIndex = index\">\r\n <td>{{ tooltipIndex + 1 }}</td>\r\n <td>\r\n <span annaCoreShowEllipsisTextOnHover>{{ data.InventoryCode }}</span>\r\n </td>\r\n <td>\r\n <span annaCoreShowEllipsisTextOnHover>{{ data.Program }}</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </section>\r\n </ng-container>\r\n <ng-container *ngIf=\"sellerGroupHierarchy.length === 0\">\r\n <span class=\"black-color-text\">Seller group not available for this inventory code</span>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #lurViolationInfoTooltip>\r\n <p class=\"first-row\">The values are for the entire week.</p>\r\n</ng-template>\r\n\r\n<ng-template #postedRatingDifference>\r\n <p class=\"difference-text\">\r\n The difference between posted and booked average rating is\r\n {{ isDifferenceLessThan25Percent ? \"less\" : \"more\" }} than 25%.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #postedImpDifference>\r\n <p class=\"difference-text\">\r\n The difference between posted and booked average impression is\r\n {{ isDifferenceLessThan25Percent ? \"less\" : \"more\" }} than 25%.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #ongoingRevBookedColumnTooltip>\r\n <p>The Booked $ value, Spots, GRP, CPP, IMPS, CPM corresponds on the last permanent revision generated</p>\r\n</ng-template>\r\n\r\n<ng-template #completedRevBookedColumnTooltip>\r\n <p>The Booked $ value corresponds on the last permanent revision generated</p>\r\n</ng-template>\r\n\r\n<ng-template #avgBookedRate>\r\n <p>This is the booked average Rate</p>\r\n</ng-template>\r\n\r\n<ng-template #avgBookedRtg>\r\n <p>This is the booked average RTG</p>\r\n</ng-template>\r\n\r\n<ng-template #avgBookedImps>\r\n <p>This is the booked average IMP(\u2019000)</p>\r\n</ng-template>\r\n\r\n<ng-template #projectedImpsRtg>\r\n <p>\r\n All projections are derived from the sum of actual posted information until the last posted date and estimates\r\n for the remaining selected period.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #automationTooltip>\r\n <p>\r\n Please get the order business rules approved to activate the order for automation. Only for the\r\n automation-activated orders, any approved MGs, ADUs, or credited spots on ANNA will be fed into the traffic\r\n system i.e. ANNA revisions.\r\n <!-- removed below line as part of enhancmennt in 14.0 releas -->\r\n <!-- Additionally, ANNA will only enter buyer revisions into traffic for the selected\r\n Medialine/WOC orders. -->\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #rebateImpact>\r\n <p>Rebate impact value is for the originally ordered spot length and is not equivalized.</p>\r\n</ng-template>\r\n\r\n<ng-template #lurViolationTotalRowToolTip>\r\n <ul>\r\n <li>\r\n <strong>POLITICAL RATE VIOLATIONS:</strong>\r\n Violations flagged when non-political spots are booked at a rate lower than the minimum booked rate for\r\n political candidates for the same week, Inventory Code and Revenue Class.\r\n </li>\r\n <li>\r\n <strong>CANDIDATE TO CANDIDATE VIOLATION:</strong>\r\n Violations flagged when political spots are booked at different rates to other political spots for the same\r\n week, Inventory Code and Revenue Class.\r\n </li>\r\n </ul>\r\n</ng-template>\r\n\r\n<ng-template #circularProgressBar>\r\n <circle-progress\r\n [percent]=\"percentDone\"\r\n [radius]=\"5\"\r\n [showTitle]=\"false\"\r\n [showUnits]=\"false\"\r\n [showSubtitle]=\"false\"\r\n [outerStrokeWidth]=\"3\"\r\n [innerStrokeWidth]=\"3\"\r\n [space]=\"-3\"\r\n [outerStrokeColor]=\"'#268bff'\"\r\n [innerStrokeColor]=\"'#d5d5d5'\"\r\n [animationDuration]=\"10\"\r\n ></circle-progress>\r\n</ng-template>\r\n\r\n<ng-template #userLoggedInDetails>\r\n <div class=\"tooltip-div-container\">\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n <span *ngIf=\"data.key !== 'read'\">\r\n {{ data.key }} <b> {{ data.value }}</b>\r\n </span>\r\n <span *ngIf=\"data.key === 'read'\">\r\n {{ data.value }}\r\n </span>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #markAsReadTip>\r\n <div class=\"notification-tooltip-div-container\">\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n {{ data.value }}\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #textActionTooltipTemplate>\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n {{ data.key }} <b> {{ data.value }}</b>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #showOrHideToggleForTotalRowTooltip>\r\n <div>\r\n {{ showOrHideToggleForTotalRow && !gtGeneralConfig.totalRow ? \"Show Total Row\" : \"Hide Total Row\" }}\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #tooltipContainingTableTemplate>\r\n <div\r\n *ngIf=\"tooltipContainingTable\"\r\n [innerHTML]=\"tooltipContainingTable.innerHtml\"\r\n class=\"notification-tooltip-div-container\"\r\n >\r\n <!-- <ul>\r\n <li *ngFor=\"let headerMsg of tooltipContainingTable.tableHeaderMsg\">\r\n <b> {{headerMsg}} </b>\r\n </li>\r\n </ul>\r\n\r\n <table class=\"tooltip-table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let header of tooltipContainingTable.tooltipTableHeader\">\r\n {{ header}}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let rows of tooltipContainingTable.tooltipTableBody\">\r\n <td *ngFor=\"let data of rows\">\r\n {{ data }}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <ul>\r\n <li style=\"margin-top:10px; padding:0\" *ngFor=\"let footerMsg of tooltipContainingTable.tableFooterMsg\">\r\n {{ footerMsg }} \r\n </li>\r\n </ul> -->\r\n </div>\r\n</ng-template>\r\n<!-- <ng-template #textActionTooltipTemplate>\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n {{ data.key }} <b> {{data.value}}</b>\r\n </ng-container>\r\n</ng-template> -->\r\n", styles: ["::ng-deep .show-or-hide-toggle-tooltip .tooltip-inner{max-width:229px}.show-or-hide-toggle-btn.shift-toggle-top-on-total-row-click{transform:translate(calc(var(--app-left-space-show-hide-total-row-icon) - 12px),48px)}.show-or-hide-toggle-btn{width:16px;height:16px;padding:0;margin:0;border-radius:50%;position:absolute;transform:translate(calc(var(--app-left-space-show-hide-total-row-icon) - 12px),73px);z-index:1000;background-color:#d9d9d9}.show-or-hide-toggle-btn i.mdi.mdi-menu-swap{font-size:16px;display:flex}#generic-table-conatiner.table-with-show-hide-total-row-toggle .total-row td:nth-of-type(2){padding-left:16px!important}.sort-btn{background:#fff;border:none;border-right:1px solid #1b88ff;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.07;letter-spacing:normal;color:#1b88ff;cursor:pointer;flex:1;text-align:center}.sort-btn:last-of-type{border-right:none}.sort-btn.active{color:#202b47;text-decoration:none}p.sort-container{margin-top:8px;padding-bottom:8px;border-bottom:1px solid #e6e6e6;margin-bottom:0;display:flex}::ng-deep .tooltip-inner{max-height:22rem;background-color:#fff;border:1px solid white;border-radius:5px;box-shadow:0 2px 2px #0000003d,0 0 2px #0000001f;max-width:251px;width:100%;padding:0!important}::ng-deep .tooltip-inner div.radio-container{flex-wrap:wrap}::ng-deep .md-drppicker{box-shadow:unset!important}::ng-deep .available{color:#999}::ng-deep .bs-tooltip-bottom .arrow:before{border-bottom-color:#fff!important}::ng-deep .bs-tooltip-left .arrow:before{border-left-color:#fff!important}::ng-deep .tooltip.show{opacity:1}.input{text-align:left;margin:5px 10px 5px 5px;display:flex;align-items:center;width:230px;white-space:nowrap}.data{color:#000;font-weight:700;margin-left:5px;margin-right:5px}span.data{display:inline-block;text-overflow:ellipsis;white-space:pre;width:100%;overflow:hidden}.check-box{font-size:14px;cursor:pointer;position:relative;top:-1px}span.mdi-filter.active{color:#000;opacity:1!important;pointer-events:all!important}p{margin-bottom:0;line-height:initial}span.mdi-filter{color:#cbcbcb}::ng-deep .ngx-slider-pointer{top:-5px!important;width:12px!important;height:12px!important;background:#bdbdbd!important;border:1px solid #ffffff!important;box-shadow:0 1px 3px #0000004d!important;border-radius:16px!important}input:focus{outline:none}input::placeholder{color:#c8c8c8}.cancel-btn{background:#c7e1ff;color:#268bff}.apply-btn{background:#268bff;color:#fff;margin-left:.3125rem}div.radio-container{display:flex;white-space:nowrap;justify-content:space-between;background-color:#f4f4f4;border-radius:.125rem;margin:.4375rem .4375rem .25rem}div.radio-container div{flex:1;width:50%}div.radio-container div.full-width{width:100%}div.radio-container input{position:relative;top:.125rem;margin-right:.25rem}div.radio-container label{font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:0;color:#4a4a4a;margin:0;padding-left:.125rem}div.radio-container label:first-of-type{margin-right:.188rem}div.radio-container input[type=radio]{appearance:none;display:inline-block;width:.9375rem;height:.9375rem;padding:.125rem;background-clip:content-box;border:.125rem solid #268bff;background-color:transparent;border-radius:50%}div.radio-container input[type=radio]:checked{background-color:#268bff}.checkbox-filter-buttons-container{padding:0 8px!important}.buttons-container{display:flex;margin:0px auto .4375rem;justify-content:center;padding:0 12px}.buttons-container .button{padding:0 10px;width:100%;margin:8px 0 0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.buttons-container button:last-of-type{background-color:#268bff;color:#fff;margin-left:.5rem}.buttons-container button.disabled{background:#bdbdbd;opacity:.5;color:#4a4a4a}.button{display:inline-block;margin:8px 4px 0 8px;padding:0 16px;border-radius:4px;text-align:center;outline:none;font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.67;letter-spacing:normal;border:none;color:#268bff;background-color:#e5f1ff}.search-box{display:flex;align-items:center;color:#c8c8c8;border:1px solid #e6e6e6;border-radius:.125rem;margin:.25rem .4375rem .188rem;height:1.5rem;padding:.188rem 8px .188rem .5rem}.search-box .search-bar-close{margin-left:auto;float:right}.search-icon{margin:0 4px 0 0;font-size:1.125rem;color:#9b9b9b}.filter-icon{justify-content:right;margin-left:auto;color:#d4d4d4;color:#a1a1a1;font-size:16px;cursor:pointer}.data{margin:0 13px 0 8px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.86;letter-spacing:\"\";color:#4a4a4a}.search-input{font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#c8c8c8;width:calc(100% - 38px);margin:1px 0 1px 2px;border:none;padding:0}.check-box{color:#268bff}.tooltip-data-container{overflow-y:scroll;max-height:8rem}.searchbar{width:100%;display:flex;justify-content:flex-end;align-items:flex-end}.clear-button{opacity:.5;font-family:Roboto;font-size:.9375rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;text-decoration:underline;border:none;background-color:#fff;color:#4a4a4a;margin-left:.625rem;padding:0}.clear-button:focus{outline:none;box-shadow:none}.unchecked{color:#268bff}cdk-virtual-scroll-viewport.dropdown-data-container{max-height:12.3rem;width:100%;overflow-y:auto;overflow-x:hidden}cdk-virtual-scroll-viewport.dropdown-data-container p.input{margin-left:0}cdk-virtual-scroll-viewport.dropdown-data-container p.input span.mi{padding-left:.4375rem}cdk-virtual-scroll-viewport.dropdown-data-container p.input:hover{background-color:#ebebeb;cursor:pointer}cdk-virtual-scroll-viewport.dropdown-data-container::-webkit-scrollbar{width:.188rem}cdk-virtual-scroll-viewport.dropdown-data-container::-webkit-scrollbar-thumb{color:#d3d3d3;background:#d3d3d3}section.min-maxContainer{display:flex;justify-content:center;margin-bottom:-.125rem;margin-top:.5rem;width:100%}section.min-maxContainer input{width:30%;height:1.875rem;border:1px solid lightgray;color:gray}section.min-maxContainer span{display:inline-block;padding-left:.5rem;padding-right:.5rem;position:relative;top:.3125rem;color:#666}.time-container{width:100%;display:flex;padding:0 .75rem}.time-container input.form-control:disabled{background-color:#fff;width:2.813rem}.time-container input.numberInput:focus{box-shadow:none;border-color:#c2cfd6}.time-container .dot{color:#cbcbcb;position:relative;left:-7px;font-size:17px}.time-container div.arrow-container{flex-direction:column;display:flex;margin-top:.375rem;width:9px;height:18px;margin-right:1.1875rem}.time-container div.arrow-container i{color:#000;cursor:pointer;max-height:9px;font-size:25px;width:10px}.time-container div.arrow-container i:before{width:0;height:0;pointer-events:none;position:relative;left:-9px;top:-11px}.mdi-filter{cursor:pointer}.time-label-container{display:flex;justify-content:flex-start}.time-label-container label{margin-bottom:0;color:#4a4a4a;margin-top:.125rem;margin-left:.75rem;font-weight:700}.time-heading{color:#000;font-size:.8125rem;text-align:left;padding-left:.625rem;margin-top:.625rem;font-weight:700}.column-clear-all{width:94%;text-align:center;border:none;font-size:14px;background:none;text-decoration:underline;color:#268bff}.checkbox-container{display:flex;padding-inline:.625rem}.checkbox-container .data{text-align:left}.checkbox-container:first-of-type{margin-top:.625rem;font-weight:500}.column-clear-all{width:94%;text-align:center;border:none;background:none;text-decoration:underline;color:#268bff}.column-clear-all:disabled{opacity:.5;color:#4a4a4a;font-weight:400}.column-clear-all.align-center{text-align:center}span.mdi-filter-variant.disabled{pointer-events:none;opacity:.5}.datepicker-container{width:100%}span.mdi-filter-variant{color:#cbcbcb;cursor:pointer;font-size:.875rem}span.mdi-filter-variant.active{color:#000}p.filter-tab{font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:normal;color:#1b88ff;border-radius:5px;background-color:#f4f4f4;padding-inline:8px;cursor:pointer;overflow:hidden;text-align:center;text-overflow:ellipsis}p.filter-tab.active{color:#fff;background-color:#1b88ff}button.filter-text-btn{background:#fff;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;border:none;color:#268bff;margin-inline:4px;margin-top:2px}button.filter-text-btn:disabled{color:#b1b1b1;cursor:not-allowed}::ng-deep .non-edit-datepicker-tooltip .tooltip-inner{max-width:310px!important;width:283px!important;overflow-y:initial!important;padding:0!important}input.slider-text::-webkit-outer-spin-button,input.slider-text::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input.slider-text{-moz-appearance:textfield}input.slider-text.red-border{border:1px solid #f44336!important}::ng-deep .checkbox-sort p.sort-container{margin-top:8px!important;padding-bottom:8px!important}i.mdi-close{cursor:pointer}i.mdi-close.disable-close-icon{pointer-events:none;cursor:not-allowed}input.error-border{border:1px solid #f44336!important}::ng-deep .non-edit-checkbox-tooltip .tooltip-inner{width:238px!important;padding:0!important}::ng-deep .non-edit-slider-tooltip .tooltip-inner{width:238px!important;padding:0!important}::ng-deep .non-edit-time-tooltip .tooltip-inner{width:250px!important;padding:0!important}::ng-deep .non-edit-time-tooltip.bs-tooltip-start{padding:.4rem}::ng-deep .non-edit-time-tooltip.bs-tooltip-start .tooltip-arrow{right:0;top:5px!important;width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}::ng-deep .non-edit-time-tooltip.bs-tooltip-start .tooltip-arrow:before{border-left-color:#fff;left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height)}::ng-deep .no-bottom-border p.sort-container{border-bottom:none!important}::ng-deep .ngx-slider-pointer-min:after{display:none}::ng-deep .ngx-slider-pointer-max:after{display:none}::ng-deep .ngx-slider span.ngx-slider-pointer{width:12px;height:12px;top:-5px;background-color:#bdbdbd}::ng-deep .ngx-slider span.ngx-slider-bar{height:3px;background:#ededed}::ng-deep .ngx-slider span.ngx-slider-selection{background:#bdbdbd}::ng-deep .ngx-slider span.ngx-slider-bubble{bottom:-22px;font-size:12px;color:#333}::ng-deep .show-min.ngx-slider span.ngx-slider-model-value{background:#fff;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003}::ng-deep .show-max.ngx-slider span.ngx-slider-model-high{background:#fff;box-shadow:none}::ng-deep .ngx-slider span.ngx-slider-combined{background:#fff;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003}::ng-deep .ngx-slider{top:10px!important;margin:5px 0 2px!important}::ng-deep .ngx-slider-animate{top:0!important}.sidebar-slider{margin-bottom:35px!important;margin-left:5px;margin-right:5px}.slider-placeholder{height:14px}::ng-deep .filter-calendar select.form-select:focus{border-color:#c2cfd6;box-shadow:none}::ng-deep .filter-calendar select.form-select{background-color:#fff}.no-data-case{padding-left:.4375rem!important;font-size:.875rem!important;margin-top:10px!important;cursor:pointer}.virtual-scroll-div{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.red-text-totol-row{color:#f44336!important}.check-mark,.unread-mark{cursor:pointer}.on-hover:hover .unread-mark,.notificationHover .check-mark{opacity:0;cursor:pointer}.on-hover:hover .check-mark{opacity:1;cursor:pointer}:host ::ng-deep .gt{table-layout:fixed;margin-bottom:0;width:100%}:host ::ng-deep .gt th,:host ::ng-deep .gt td{padding:2px 8px;line-height:normal}:host ::ng-deep .gt thead tr th .upper-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#4a4a4a;margin-bottom:0}:host ::ng-deep .gt thead tr th .lower-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#a7a7a7;margin-bottom:0}:host ::ng-deep .gt thead tr th{background-color:#ededed;position:sticky;position:-webkit-sticky;top:0;border-top:none!important;border-bottom:none!important;outline:none!important;box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4}:host ::ng-deep .gt thead tr th br{display:block;content:\"\";margin-top:-8px}:host ::ng-deep .gt thead tr th div.row{display:flex;flex-wrap:nowrap;justify-content:space-between;align-items:center;width:max-content}:host ::ng-deep .gt thead tr th div.sort-filter-container{display:flex;flex-wrap:nowrap;align-items:center;margin-left:.25rem;margin-right:auto}:host ::ng-deep .gt thead tr th span.mdi-filter-variant{font-size:13px!important;top:-1px!important;position:relative}:host ::ng-deep .gt thead tr th:first-of-type{box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4,inset 1px 0 #d4d4d4}:host ::ng-deep .gt tbody tr td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}:host ::ng-deep .gt tbody tr td:nth-of-type(n+2){box-shadow:inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}:host ::ng-deep .gt tbody tr td .upper-label{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:0px;color:#000;display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .gt tbody tr td .lower-label{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:0px;color:#a7a7a7;display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .gt tbody tr br{display:block;content:\"\";margin-top:-8px}:host ::ng-deep .gt tbody tr:nth-of-type(1) td{border-top:none!important}:host ::ng-deep .gt .custom-column-checkbox-checked,:host ::ng-deep .gt .custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}:host ::ng-deep .gt .custom-column-checkbox-checked{color:#268bff}:host ::ng-deep .gt .custom-column-checkbox-unchecked{color:#4a4a4a}:host ::ng-deep .bottom-border .gt tbody tr:last-of-type td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4}:host ::ng-deep .bottom-border .gt tbody tr:last-of-type td:nth-of-type(n+2){box-shadow:inset -1px 0 #d4d4d4}.table-container{overflow-x:auto;overflow-y:auto}.rowSelectCheckbox,#selectAllRowsCheckbox{cursor:pointer}.disable-checkbox{color:#dedede!important;pointer-events:none!important}.mdi-warning{color:#f3c639;font-size:16px;line-height:28px}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{opacity:1}.redcolor-status{color:#c62a2a}#no-filter-space{width:.875rem}::ng-deep .mat-button-toggle-appearance-standard .mat-button-toggle-label-content{line-height:1.875rem!important;width:2.625rem;padding:0 .625rem}input.numberInput{margin-right:-.8125rem;padding:0 0 0 .625rem;height:1.875rem}::ng-deep .mat-button-toggle-checked{background-color:#268bff!important;color:#fff!important}::ng-deep .mat-button-toggle-group-appearance-standard{border-radius:0}.hidden{display:none}.no-data-div{margin-top:2.5px}.no-data-div label{margin:0;width:auto;font-weight:500;background-color:#d3d3d3;padding:.3125rem 1.125rem;border-radius:.25rem}.column-values:nth-of-type(2){color:#a7a7a7!important}.custom-column-checkbox-checked,.custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}.custom-column-checkbox-checked{color:#268bff}.custom-column-checkbox-unchecked{color:#4a4a4a}.time-filter-checkboxes>div>p{color:#151b1e}::ng-deep .margin-bottom-zero .mat-radio-label{margin-bottom:0}:host ::ng-deep mat-radio-group br{margin-top:0!important}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio__background{width:var(--mat-radio-size);height:var(--mat-radio-size)}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio__inner-circle{border-width:calc(var(--mat-radio-size) / 2)}:host ::ng-deep mat-radio-group mat-radio-button .mdc-form-field>label{margin:0 0 0 4px;padding:0;top:-2px;position:relative}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio--disabled+label{color:var(--primary-text-color-dark)!important}:host ::ng-deep mat-radio-group mat-radio-button.mat-mdc-radio-button .mdc-form-field .mdc-radio{padding:0}:host ::ng-deep mat-radio-group mat-radio-button .mdc-form-field>label{left:-94px;font-size:12px;color:#4a4a4a;position:relative}::ng-deep .reject.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff0}::ng-deep .reject.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:#ff0}::ng-deep .resubmit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff0}::ng-deep .resubmit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:#ff0}::ng-deep .noAction.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:green}::ng-deep .noAction.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:green}::ng-deep .approve.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:green}::ng-deep .approve.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:green}::ng-deep .credit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:red}::ng-deep .credit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:red}::ng-deep .mat-radio-button.mat-radio-disabled .mat-radio-outer-circle{border-color:#00000061!important}::ng-deep .mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-inner-circle{background-color:#00000061!important}::ng-deep tr.white-background-row{background:#fff}::ng-deep tr.gray-background-row{background:#e9e9e980!important}.remarks-tooltip,.mdi-information,.mdi-information-outline,.seller-tooltip{font-size:.875rem;color:#268bff;position:relative;top:.1875rem;cursor:pointer}.seller-tooltip{top:-1px;float:right}::ng-deep .remarks-info-tooltip .tooltip-inner{max-width:19.25rem!important}.rating-icon,.lur-violation-icon{color:#268bff;cursor:pointer;position:relative;left:-2px}::ng-deep .rating-info-tooltip .tooltip-inner{max-width:800px!important}.spots-info-icon{color:#268bff;cursor:pointer;margin:1px 2px 0 -14px}.spots-info-icon-ol{color:#268bff;cursor:pointer;margin:1px 4px 0 -2px}::ng-deep .spot-info-tooltip .tooltip-inner{position:relative;max-width:220px!important;background:#fff;word-break:break-word;display:flex}::ng-deep .spot-info-tooltip-for-orderlisting-table .tooltip-inner{max-width:220px!important;background:#fff;word-break:break-word;display:flex}p.first-row{padding:.5rem .5rem 0;color:#000;white-space:nowrap;text-align:left}p.second-row{padding:2px .5rem .5rem;color:#000;white-space:nowrap;text-align:left}::ng-deep .gt-total-row-tooltip{opacity:1!important}::ng-deep .gt-total-row-tooltip .tooltip-inner{color:#000;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;background-color:#fff;padding:4px!important;width:100%;border-radius:2px!important}::ng-deep .gt-total-row-tooltip .arrow:before{border-top-color:#fff!important}.info-label{margin-left:4px;color:#268bff;vertical-align:text-top}::ng-deep .hierarchy-tooltip{max-width:-moz-fit-content;max-width:fit-content;width:310px!important}::ng-deep .hierarchy-tooltip .tooltip-inner{padding:4px!important;max-width:22.75rem;max-height:11.25rem}table.seller-hierarchy-table{table-layout:fixed}table.seller-hierarchy-table tr th{font-family:Roboto;font-size:.75rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:1.67;letter-spacing:normal;color:#5e5e5e;white-space:nowrap;background:#ededed;position:sticky;box-shadow:inset 0 1px #d4d4d4;top:0;z-index:1}table.seller-hierarchy-table tr th:nth-child(1){width:20px}table.seller-hierarchy-table tr th:first-of-type,table.seller-hierarchy-table tr td:first-of-type{width:20px;border-left:1px solid #d4d4d4}table.seller-hierarchy-table tr th:last-of-type,table.seller-hierarchy-table tr td:last-of-type{border-right:1px solid #d4d4d4;width:7.875rem!important}table.seller-hierarchy-table tr th:nth-of-type(2){width:7.75rem!important}table.seller-hierarchy-table tr td{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#4a4a4a;box-shadow:none!important;border-top:1px solid #d4d4d4;border-bottom:1px solid #d4d4d4}table.seller-hierarchy-table tr td:nth-of-type(2),table.seller-hierarchy-table tr td:nth-of-type(3){padding-top:.25rem}table.seller-hierarchy-table tr td span{display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;position:relative}section.hierarchy-table-container{max-height:8.75rem;overflow:auto}section.hierarchy-table-container::-webkit-scrollbar-track{margin-top:1.5rem}.difference-text{padding:.5rem;color:#000;text-align:left}::ng-deep .posted-avg-tooltip .tooltip-inner{width:13.8125rem!important}::ng-deep .drrBooked-info-tooltip{transform:translate(26px,6px)}::ng-deep .drrBooked-info-tooltip .tooltip-inner{max-width:307px!important;width:242px!important;background:#fff;word-break:break-word;display:flex;padding:4px!important;text-align:left}::ng-deep .drrBooked-info-tooltip .tooltip-inner p{color:#000}::ng-deep .drrBooked-info-tooltip .arrow:before{border-right-color:#fff!important}.clickable-data{cursor:pointer;color:#268bff!important;display:flex!important;align-items:center}.clickable-data .spot-details-download-icons{font-size:12px}.disabled-clickable-data{pointer-events:none;color:#d4d4d4!important}.spot-column-tooltip-message{color:#000;width:max-content;text-align:left}div.spinner-for-button-directive{position:relative;left:-1px}.clickable-row table tr.mat-row td{cursor:pointer!important}.tooltip-div-container{text-align:left!important;padding:12px 4px;color:#4a4a4a!important;font-size:12px!important;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}.notification-tooltip-div-container{text-align:left!important;padding:6px 8px;color:#4a4a4a!important;font-size:12px!important;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}.mdi-information,.mdi-information-outline{left:3px;top:1px}.mdi-information-outline{position:static}::ng-deep .team-user-tooltip.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .team-user-tooltip .tooltip-inner{opacity:1!important;width:-moz-fit-content!important;width:fit-content!important;max-width:520px;border-radius:2px;padding:0 4px!important}::ng-deep .team-user-tooltip .tooltip-inner .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:#fff!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .gt-icon-column-tooltip{opacity:1!important}::ng-deep .gt-icon-column-tooltip .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:#fff!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .gt-icon-column-tooltip.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .gt-icon-column-tooltip .tooltip-inner{width:100%}::ng-deep .tooltip-containing-table{opacity:1!important}::ng-deep .tooltip-containing-table .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:#fff!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .tooltip-containing-table.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .tooltip-containing-table li{margin:0!important;padding:0!important}::ng-deep .tooltip-containing-table ul{margin:0!important;padding-left:8px!important}::ng-deep .tooltip-containing-table .tooltip-inner{width:100%;max-width:230px}table.tooltip-table{table-layout:fixed;margin:4px 0 0;width:100%}table.tooltip-table th,table.tooltip-table td{padding:2px 8px;line-height:normal}table.tooltip-table thead tr th:first-of-type{box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4,inset 1px 0 #d4d4d4!important;border:none}table.tooltip-table thead tr th{color:#5e5e5e!important;font-size:12px;font-weight:500;font-family:Roboto;line-height:1.67;background-color:#ededed;border-top:none!important;border-bottom:none!important;outline:none!important;box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4}table.tooltip-table thead tr th div.row{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}table.tooltip-table tbody tr td{color:#5e5e5e!important;font-size:12px;font-weight:500;font-family:Roboto;line-height:1.67}table.tooltip-table tbody tr td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}table.tooltip-table tbody tr td:nth-of-type(n+2){box-shadow:inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}.bottom-border{border-bottom:1px solid #d4d4d4!important}i.disabled{pointer-events:none!important}.black-color-text{color:#000}.white-space-nowrap{white-space:nowrap}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i4.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i4.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i4.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i4.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i4.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i4.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i4.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i4.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i4.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i4.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "ngmodule", type: NgxSkeletonLoaderModule }, { kind: "component", type: i5.NgxSkeletonLoaderComponent, selector: "ngx-skeleton-loader", inputs: ["count", "loadingText", "appearance", "animation", "ariaLabel", "theme"] }, { kind: "directive", type: ShowEllipsisTextOnHoverDirective, selector: "[annaCoreShowEllipsisTextOnHover]" }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: AnnaIconColumnComponent, selector: "anna-core-icon-column", inputs: ["componentName", "iconToShow", "dataObject"], outputs: ["columnIconClicked"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i7.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { kind: "component", type: i7.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "directive", type: NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: AnnaNoDataComponent, selector: "anna-core-no-data-lib", inputs: ["width", "marginTop"] }, { kind: "component", type: AnnaColumnCheckboxFilterComponent, selector: "anna-core-anna-column-checkbox-filter", inputs: ["showFilterHeaderTabs", "isLurAndCsrComponent", "tableData", "clonedTableData", "filterTabObjects"], outputs: ["filterAppliedToTable", "sortingAppliedToTable", "getSortType", "closeTooltip"] }, { kind: "component", type: AnnaColumnSliderFilterComponent, selector: "anna-core-anna-column-slider-filter", inputs: ["filterTabObjects", "isLurAndCsrComponent", "tableData", "showFilterHeaderTabs", "clonedTableData"], outputs: ["closeTooltip", "filterAppliedToTable", "getSortType", "sortingAppliedToTable"] }, { kind: "component", type: AnnaColumnDateRangeFilterComponent, selector: "anna-core-anna-column-date-range-filter", inputs: ["tableData", "clonedTableData", "filterTabObjects", "isLurAndCsrComponent", "showFilterHeaderTabs"], outputs: ["filterAppliedToTable", "sortingAppliedToTable", "getSortType", "closeTooltip"] }, { kind: "component", type: AnnaColumnTimeFilterComponent, selector: "anna-core-anna-column-time-filter", inputs: ["tableData", "clonedTableData", "filterTabObjects", "showFilterHeaderTabs", "showAllTimeRangeCheckboxes", "isLurAndCsrComponent", "gtGeneralConfig", "showClearAllFilter", "startFromText", "endToText", "isSortAndFilterAbsent"], outputs: ["timeChanges", "filterAppliedToTable", "sortingAppliedToTable", "getSortType", "closeTooltip"] }, { kind: "component", type: AnnaEstIconTemplateComponent, selector: "anna-core-anna-est-icon-template" }, { kind: "ngmodule", type: NgCircleProgressModule }, { kind: "component", type: i8.CircleProgressComponent, selector: "circle-progress", inputs: ["name", "class", "backgroundGradient", "backgroundColor", "backgroundGradientStopColor", "backgroundOpacity", "backgroundStroke", "backgroundStrokeWidth", "backgroundPadding", "radius", "space", "percent", "toFixed", "maxPercent", "renderOnClick", "units", "unitsFontSize", "unitsFontWeight", "unitsColor", "outerStrokeGradient", "outerStrokeWidth", "outerStrokeColor", "outerStrokeGradientStopColor", "outerStrokeLinecap", "innerStrokeColor", "innerStrokeWidth", "titleFormat", "title", "titleColor", "titleFontSize", "titleFontWeight", "subtitleFormat", "subtitle", "subtitleColor", "subtitleFontSize", "subtitleFontWeight", "imageSrc", "imageHeight", "imageWidth", "animation", "animateTitle", "animateSubtitle", "animationDuration", "showTitle", "showSubtitle", "showUnits", "showImage", "showBackground", "showInnerStroke", "clockwise", "responsive", "startFromZero", "showZeroOuterStroke", "lazy", "options"], outputs: ["onClick"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
780
785
  }
781
786
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AnnaNonEditableGenericTableComponent, decorators: [{
782
787
  type: Component,
@@ -789,7 +794,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
789
794
  NgTemplateOutlet,
790
795
  NgbTooltip,
791
796
  NgxSkeletonLoaderModule,
792
- showEllipsisTextOnHoverDirective,
797
+ ShowEllipsisTextOnHoverDirective,
793
798
  NgSwitch,
794
799
  NgSwitchCase,
795
800
  AnnaIconColumnComponent,
@@ -804,7 +809,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
804
809
  AnnaEstIconTemplateComponent,
805
810
  NgCircleProgressModule,
806
811
  AsyncPipe,
807
- ], template: "<div\r\n id=\"generic-table-conatiner\"\r\n class=\"table-container {{ gtGeneralConfig?.tableOuterContainerName }} {{ tableBottomBorderClass }}\"\r\n [ngClass]=\"{\r\n 'scroll-left-shadow-effect': isScrolledLeft,\r\n 'scroll-right-shadow-effect': !isScrollEnded,\r\n 'clickable-row': clickableRow,\r\n 'no-data-table': (isNoDataToDisplaySubject$ | async),\r\n 'table-with-show-hide-total-row-toggle': showOrHideToggleForTotalRow\r\n }\"\r\n (scroll)=\"onTableContainerScroll($event)\"\r\n>\r\n <div\r\n [class]=\"gtGeneralConfig.tableContainerName\"\r\n class=\"horizontal-scroll-for-table-container\"\r\n [ngStyle]=\"{\r\n height:\r\n tableData.length < maximumRowsWhichCanBeRenderedWithoutScroll\r\n ? 'calc(' +\r\n (gtDimension.rowHeight * tableData.length +\r\n (!tableData.length || !gtGeneralConfig.totalRow\r\n ? gtDimension.headerHeight\r\n : gtDimension.headerHeight + gtDimension.rowHeight)) +\r\n 'px)'\r\n : gtDimension.tableHeight\r\n }\"\r\n >\r\n <button\r\n *ngIf=\"showOrHideToggleForTotalRow && !showSkeletonLoading && !(isNoDataToDisplaySubject$ | async)\"\r\n [ngClass]=\"{\r\n 'shift-toggle-top-on-total-row-click': !gtGeneralConfig.totalRow\r\n }\"\r\n class=\"show-or-hide-toggle-btn\"\r\n (click)=\"showHideTotalRow()\"\r\n >\r\n <i\r\n class=\"mdi mdi-menu-swap\"\r\n tooltipClass=\"show-or-hide-toggle-tooltip\"\r\n placement=\"auto\"\r\n container=\"body\"\r\n [ngbTooltip]=\"showOrHideToggleForTotalRowTooltip\"\r\n ></i>\r\n </button>\r\n <table\r\n class=\"gt\"\r\n [ngClass]=\"tableClass\"\r\n mat-table\r\n [dataSource]=\"renderedData\"\r\n >\r\n <tr\r\n class=\"header-row\"\r\n mat-header-row\r\n *matHeaderRowDef=\"tableColumns; sticky: true\"\r\n [style.height.px]=\"gtDimension.headerHeight\"\r\n ></tr>\r\n <tr\r\n class=\"total-row\"\r\n mat-header-row\r\n [style.height.px]=\"gtDimension.rowHeight\"\r\n *matHeaderRowDef=\"totalRowColumns; sticky: true\"\r\n [class.hidden]=\"\r\n showSkeletonLoading ||\r\n (!showSkeletonLoading && !tableData.length) ||\r\n (isNoDataToDisplaySubject$ | async) ||\r\n (!showSkeletonLoading && !gtGeneralConfig.totalRow)\r\n \"\r\n ></tr>\r\n <tr\r\n [class]=\"rowData.gtClass\"\r\n [ngClass]=\"{ 'no-border-tr': (isNoDataToDisplaySubject$ | async) }\"\r\n mat-row\r\n *matRowDef=\"let rowData; columns: tableColumns\"\r\n [style.height.px]=\"gtDimension.rowHeight\"\r\n (click)=\"dataRowClicked(rowData)\"\r\n ></tr>\r\n\r\n <!-- TOTAL ROW -->\r\n <ng-container\r\n [matColumnDef]=\"column.colName\"\r\n *ngFor=\"let column of totalRowInfo; trackBy: trackByFn\"\r\n >\r\n <td\r\n mat-header-cell\r\n *matHeaderCellDef\r\n [attr.colspan]=\"column.colspan\"\r\n class=\"{{ column.class }}\"\r\n >\r\n <ng-container *ngIf=\"column['isActionColumn']\">\r\n <a\r\n *ngFor=\"let data of column.actionData\"\r\n [class]=\"data.class\"\r\n (click)=\"onClickableDataClicked({}, data.id)\"\r\n >\r\n {{ data.name }}\r\n </a>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column['isIconColumn']\">\r\n <i\r\n class=\"{{ column?.iconData?.class }}\"\r\n (click)=\"iconClickedInTotalRow(column?.colName)\"\r\n >\r\n </i>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!column['isActionColumn']\">\r\n \r\n <strong class=\"upper-label\">{{ column.data }} <span class=\"red-text-totol-row\" *ngIf=\"column.additionalRedTextAfterData\">{{column.additionalRedTextAfterData}}</span></strong>\r\n <ng-container *ngIf=\"column.lowerData\">\r\n <br />\r\n <span\r\n *ngIf=\"\r\n column.colName == 'total-potential-booked-unit' &&\r\n gtGeneralConfig.component == 'RATING';\r\n else columnLowerData\r\n \"\r\n class=\"clickable-data\"\r\n (click)=\"spotDetailsDownloadClicked('TOTALROW')\"\r\n [ngClass]=\"{ 'disabled-clickable-data': downloadInProgress }\"\r\n >{{ column.lowerData }}\r\n <span class=\"material-icons spot-details-download-icons\">get_app</span>\r\n <ng-container *ngIf=\"downloadInProgress && selectedRowTypeForDownload == 'TOTALROW'\">\r\n <ng-container [ngTemplateOutlet]=\"circularProgressBar\"></ng-container>\r\n </ng-container>\r\n </span>\r\n <ng-template #columnLowerData>\r\n <span class=\"lower-label\">{{ column.lowerData }}</span>\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.tooltipMessage && gtGeneralConfig.component != 'LUR_VIOLATIONS'\">\r\n <i\r\n class=\"{{ column.tooltipIconClass }}\"\r\n container=\"body\"\r\n [ngbTooltip]=\"column.tooltipMessage\"\r\n tooltipClass=\"gt-total-row-tooltip\"\r\n placement=\"bottom\"\r\n ></i>\r\n </ng-container>\r\n <ng-container *ngIf=\"gtGeneralConfig.component == 'LUR_VIOLATIONS' && column.tooltipMessage\">\r\n <i\r\n class=\"mi mdi-info-outline info-label\"\r\n container=\"body\"\r\n [ngbTooltip]=\"lurViolationTotalRowToolTip\"\r\n tooltipClass=\"gt-total-row-tooltip\"\r\n placement=\"bottom\"\r\n ></i>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- MAIN ROW -->\r\n <ng-container\r\n [matColumnDef]=\"columnDef.headerInfo[0].objectKey\"\r\n *ngFor=\"let columnDef of tableHeaders; trackBy: trackByFn\"\r\n >\r\n <th\r\n #tableHeader\r\n nowrap\r\n mat-header-cell\r\n *matHeaderCellDef\r\n [style.width]=\"columnDef.width\"\r\n >\r\n <div\r\n class=\"row mx-0\"\r\n *ngFor=\"let header of columnDef.headerInfo; let j = index\"\r\n >\r\n <p\r\n *ngIf=\"header.typeOfHeaderData === 'STRING'\"\r\n [ngClass]=\"{ 'upper-label': j === 0, 'lower-label': j === 1 }\"\r\n >\r\n <ngx-skeleton-loader\r\n *ngIf=\"header.name == null\"\r\n count=\"1\"\r\n [theme]=\"{\r\n height: '10px',\r\n display: 'block',\r\n width: columnDef.width,\r\n 'max-width': 'calc(100% - 20px)'\r\n }\"\r\n >\r\n </ngx-skeleton-loader>\r\n <ng-container *ngIf=\"header.name\">\r\n {{ header.name }}\r\n </ng-container>\r\n <ng-container *ngIf=\"header.tooltip && header.tooltip.tooltipMessage\">\r\n <i\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"header.tooltip.tooltipMessage\"\r\n container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n </ng-container>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'impsInfoTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"impsInfoTooltip\"\r\n container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"\r\n header.tooltip && header.tooltip.name == 'spotsColumnEquivalizationMessageTooltip'\r\n \"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n container=\"body\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"spotsColumnEquivalizationMessageTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'underDeliveryTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n container=\"body\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"underDeliveryTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'overDeliveryTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n container=\"body\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"overDeliveryTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'ratingInfoTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"ratingInfoTooltip\"\r\n container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'rateInfoTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"rateInfoTooltip\"\r\n container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'ongoingRevBookedColumnTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"ongoingRevBookedColumnTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'completedRevBookedColumnTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"completedRevBookedColumnTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedRate'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"avgBookedRate\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedRtg'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"avgBookedRtg\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedImps'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"avgBookedImps\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'automationTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"automationTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'rebateImpact'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"rebateImpact\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'projectedImpsRtg'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"projectedImpsRtg\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n </p>\r\n\r\n <ng-container *ngIf=\"header.typeOfHeaderData === 'CHECKBOX'\">\r\n <span\r\n *ngIf=\"gtGeneralConfig.isHeaderChecked\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"selectUnselectAllRows()\"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!gtGeneralConfig.isHeaderChecked\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n [ngClass]=\"{ 'disable-checkbox': gtGeneralConfig.disableHeaderCheckbox }\"\r\n (click)=\"selectUnselectAllRows()\"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n </ng-container>\r\n\r\n <div\r\n *ngIf=\"gtGeneralConfig.showAllColumnFilter\"\r\n class=\"sort-filter-container\"\r\n >\r\n <ng-container *ngIf=\"header.showTooltipIcon\">\r\n <!-- Active tooltip Functionality -->\r\n <ng-container *ngIf=\"header.filter === 'CHECKBOX'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.isFilterSortActive &&\r\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\"\r\n [ngbTooltip]=\"filterTooltip\"\r\n placement=\"{{ filterAlignment }}\"\r\n container=\"body\"\r\n tooltipClass=\"non-edit-checkbox-tooltip\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'SLIDER'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.isFilterSortActive &&\r\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\"\r\n [ngbTooltip]=\"sliderToolTip\"\r\n placement=\"bottom left-top\"\r\n container=\"body\"\r\n tooltipClass=\"non-edit-slider-tooltip\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t1=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t1, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'DATE'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.isFilterSortActive &&\r\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\"\r\n [ngbTooltip]=\"datePickerTooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n tooltipClass=\"non-edit-datepicker-tooltip\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t2=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t2, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'WEEK'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.isFilterSortActive &&\r\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\"\r\n [ngbTooltip]=\"weekPickerToolTip\"\r\n placement=\"bottom left-top\"\r\n container=\"body\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t3=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t3, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'TIME'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.isFilterSortActive &&\r\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\"\r\n [ngbTooltip]=\"timeFilterToolTip\"\r\n placement=\"bottom left-top auto\"\r\n container=\"body\"\r\n tooltipClass=\"non-edit-time-tooltip\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t4=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t4, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!header.showTooltipIcon\">\r\n <span id=\"no-filter-space\"></span><br />\r\n </ng-container>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'lurViolationInfoTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"lurViolationInfoTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n </div>\r\n </div>\r\n </th>\r\n\r\n <ng-container *matCellDef=\"let ROW_DATA\">\r\n <td\r\n mat-cell\r\n [style.background]=\"ROW_DATA.backgroundColor\"\r\n [style.border]=\"ROW_DATA.border\"\r\n class=\"{{ ROW_DATA.rowClass }}\"\r\n [ngClass]=\"ROW_DATA[columnDef.headerInfo[0].objectKey + 'TdClass']\"\r\n [attr.rowspan]=\"ROW_DATA[columnDef.headerInfo[0].objectKey + 'Rowspan']\"\r\n *ngIf=\"\r\n !hideSomeTds ||\r\n (hideSomeTds && !ROW_DATA['hide' + columnDef.headerInfo[0].objectKey + 'Td'])\r\n \"\r\n >\r\n <ngx-skeleton-loader\r\n *ngIf=\"showSkeletonLoading\"\r\n count=\"1\"\r\n [theme]=\"{ height: '10px', display: 'block' }\"\r\n >\r\n </ngx-skeleton-loader>\r\n\r\n <ng-container *ngIf=\"!showSkeletonLoading\">\r\n <ng-container *ngIf=\"tableData.length > 0 && !(isNoDataToDisplaySubject$ | async)\">\r\n <ng-container\r\n *ngFor=\"\r\n let subline of columnDef.headerInfo;\r\n let subLineIndex = index;\r\n trackBy: trackByFn\r\n \"\r\n >\r\n <div showEllipsisTextOnHover>\r\n <ng-container [ngSwitch]=\"columnDef.headerInfo[subLineIndex].typeOfBodyData\">\r\n <ng-container *ngSwitchCase=\"'ICON'\">\r\n <i\r\n *ngIf=\"\r\n !(\r\n starredInProgress &&\r\n ROW_DATA.orderId == selectedStarredOrderId\r\n )\r\n \"\r\n [class]=\"ROW_DATA.iconClass\"\r\n (click)=\"iconClicked(ROW_DATA, ROW_DATA.iconClass)\"\r\n ngbTooltip=\"{{ ROW_DATA.iconTitleText }}\"\r\n placement=\"bottom\"\r\n container=\"body\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n ></i>\r\n <ng-container\r\n *ngIf=\"\r\n starredInProgress && ROW_DATA.orderId == selectedStarredOrderId\r\n \"\r\n >\r\n <div class=\"spinner-for-button-directive\"></div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'ICON_CELL'\">\r\n <ng-container\r\n *ngFor=\"\r\n let action of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n >\r\n <ng-container *ngIf=\"action.showObjectKey\">\r\n {{ ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey] }}\r\n </ng-container>\r\n\r\n <i\r\n *ngIf=\"action.showIcon\"\r\n [class]=\"action.iconClass\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionType(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n tooltipClass=\"team-user-tooltip remove-on-scroll-class\"\r\n [ngbTooltip]=\"action.showTooltip ? action.tooltipData : null\"\r\n (click)=\"\r\n textActionClicked(\r\n ROW_DATA,\r\n action.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n [disableTooltip]=\"!action.showTooltip\"\r\n >\r\n </i>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'HTML_STRING'\">\r\n <p\r\n [innerHTML]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n (click)=\"innerHTMLCellClicked($event, ROW_DATA)\"\r\n ></p>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'SVG_ICON'\">\r\n <anna-core-anna-icon-column\r\n [componentName]=\"gtGeneralConfig.component\"\r\n [dataObject]=\"ROW_DATA\"\r\n [iconToShow]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n \"\r\n (onColumnIconClicked)=\"svgIconClicked($event)\"\r\n ></anna-core-anna-icon-column>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'TEXT_ACTIONS'\">\r\n <ng-container\r\n *ngFor=\"\r\n let text of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n >\r\n <button\r\n *ngIf=\"text.showTooltip\"\r\n (click)=\"\r\n textActionClicked(\r\n ROW_DATA,\r\n text.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n [disabled]=\"text.isDisabled\"\r\n class=\"{{ text.class }}\"\r\n (mouseenter)=\"\r\n mouseEnterOnTextActionType(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n [ngbTooltip]=\"textActionTooltipTemplate\"\r\n placement=\"auto\"\r\n container=\"body\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n >\r\n {{ text.name }}\r\n </button>\r\n\r\n <button\r\n *ngIf=\"!text.showTooltip\"\r\n (click)=\"\r\n textActionClicked(\r\n ROW_DATA,\r\n text.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n [disabled]=\"text.isDisabled\"\r\n class=\"{{ text.class }}\"\r\n >\r\n {{ text.name }}\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'CHECKBOX'\">\r\n <span\r\n *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n [ngClass]=\"{\r\n 'disable-checkbox':\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n false\r\n )\r\n \"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n [ngClass]=\"{\r\n 'disable-checkbox':\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n true\r\n )\r\n \"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n\r\n <ng-container\r\n *ngFor=\"\r\n let action of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n >\r\n <i\r\n *ngIf=\"action.showIcon\"\r\n [class]=\"action.iconClass\"\r\n [ngClass]=\"{ disabled: action.disabledIcon }\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionTypeContainingTable(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n tooltipClass=\"tooltip-containing-table remove-on-scroll-class\"\r\n [ngbTooltip]=\"tooltipContainingTableTemplate\"\r\n >\r\n </i>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'CLICKABLE_DATA'\">\r\n <a\r\n *ngFor=\"\r\n let text of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n [class]=\"text.class\"\r\n (click)=\"onClickableDataClicked(ROW_DATA, text.id)\"\r\n >\r\n {{ text.name }}\r\n </a>\r\n <span\r\n *ngIf=\"\r\n subline.objectKey == 'displayBookedUnits' &&\r\n gtGeneralConfig.component == 'RATING'\r\n \"\r\n class=\"clickable-data\"\r\n (click)=\"spotDetailsDownloadClicked('DATAROW', ROW_DATA)\"\r\n [ngClass]=\"{ 'disabled-clickable-data': downloadInProgress }\"\r\n >{{ ROW_DATA.displayBookedUnits }}\r\n <span class=\"material-icons spot-details-download-icons\"\r\n >get_app</span\r\n >\r\n <ng-container\r\n *ngIf=\"\r\n downloadInProgress &&\r\n ROW_DATA.inventoryCodeId ==\r\n selectedInventoryIdForDownload &&\r\n ROW_DATA.demographic == selectedDemographicForDownload\r\n \"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"circularProgressBar\"\r\n ></ng-container>\r\n </ng-container>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'STRING___ICON_OR_TEXT_ACTION'\">\r\n <ng-container\r\n *ngFor=\"\r\n let action of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n >\r\n <span\r\n [class]=\"action.additionalTextBeforeLinkClass\"\r\n [innerHtml]=\"action.additionalTextBeforeLink\"\r\n ngbTooltip=\"{{ action.additionalTextBeforeLink }}\"\r\n placement=\"bottom\"\r\n container=\"body\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n [disableTooltip]=\"!action.enableTooltipForAdditionalText\"\r\n ></span>\r\n\r\n <ng-container *ngIf=\"action && action.typeOfData == 'STRING'\">\r\n {{ action.data }}\r\n </ng-container>\r\n\r\n <a\r\n [id]=\"action.id\"\r\n *ngIf=\"action.showLink\"\r\n (click)=\"\r\n textActionClicked(\r\n ROW_DATA,\r\n action.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n [class]=\"action.linkClass\"\r\n [ngClass]=\"{ disabled: action.disabledLink }\"\r\n >{{ action.data }}</a\r\n >\r\n <span\r\n ngbTooltip=\"{{ action.additionalTextAfterLink }}\"\r\n placement=\"bottom\"\r\n container=\"body\"\r\n [class]=\"action.additionalTextAfterLinkClass\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n [disableTooltip]=\"!action.enableTooltipForAdditionalAfterText\"\r\n >\r\n {{ action.additionalTextAfterLink }}\r\n </span>\r\n\r\n <ng-container *ngIf=\"action.showTooltip\">\r\n <ng-container *ngIf=\"action.tooltipData.innerHtml\">\r\n <i\r\n *ngIf=\"action.showIcon\"\r\n [class]=\"action.iconClass\"\r\n [ngClass]=\"{ disabled: action.disabledIcon }\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionTypeContainingTable(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n tooltipClass=\"tooltip-containing-table remove-on-scroll-class\"\r\n [ngbTooltip]=\"tooltipContainingTableTemplate\"\r\n >\r\n </i>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!action.tooltipData.tooltipTableBody\">\r\n <i\r\n *ngIf=\"action.showIcon\"\r\n [class]=\"action.iconClass\"\r\n [ngClass]=\"{ disabled: action.disabledIcon }\"\r\n (click)=\"\r\n iconClickedOnStringIconActionType(\r\n ROW_DATA,\r\n action.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n (mouseleave)=\"mouseLeaveTextActionType(ROW_DATA)\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionType(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n [placement]=\"\r\n action.tooltipPlacement\r\n ? action.tooltipPlacement\r\n : 'bottom auto'\r\n \"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n tooltipClass=\"team-user-tooltip remove-on-scroll-class {{\r\n action.tooltipClass\r\n }}\"\r\n [ngbTooltip]=\"userLoggedInDetails\"\r\n >\r\n </i>\r\n <ng-container *ngIf=\"action['showSvgIcon']\">\r\n <anna-core-anna-est-icon-template\r\n class=\"float-right\"\r\n *ngIf=\"action['svgIconName'] == 'anna-icon'\"\r\n (mouseleave)=\"mouseLeaveTextActionType(ROW_DATA)\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionType(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex]\r\n .tooltipKey\r\n )\r\n \"\r\n [placement]=\"\r\n action.tooltipPlacement\r\n ? action.tooltipPlacement\r\n : 'bottom auto'\r\n \"\r\n tooltipClass=\"team-user-tooltip remove-on-scroll-class {{\r\n action['tooltipClass']\r\n }}\"\r\n [ngbTooltip]=\"userLoggedInDetails\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n >\r\n </anna-core-anna-est-icon-template>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!action.showTooltip\">\r\n <i\r\n *ngIf=\"action.showIcon\"\r\n [class]=\"action.iconClass\"\r\n [ngClass]=\"{ disabled: action.disabledIcon }\"\r\n (click)=\"\r\n iconClickedOnStringIconActionType(\r\n ROW_DATA,\r\n action.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n >\r\n </i>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'STRING_OR_INPUT'\">\r\n <ng-container\r\n *ngIf=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]?.type ==\r\n 'STRING';\r\n else inputBox\r\n \"\r\n >\r\n <span\r\n [innerHtml]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n ?.value\r\n \"\r\n ></span>\r\n </ng-container>\r\n <ng-template #inputBox>\r\n <input\r\n placeholder=\"{{\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n ?.placeholder\r\n }}\"\r\n showEllipsisTextOnHover\r\n class=\"{{\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .className\r\n }}\"\r\n (keydown)=\"\r\n changesMadeInEditableInputBox(\r\n $event,\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey],\r\n false\r\n )\r\n \"\r\n (paste)=\"\r\n changesMadeInEditableInputBox(\r\n $event,\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey],\r\n true\r\n )\r\n \"\r\n (ngModelChange)=\"\r\n editableInputValueChanged(\r\n $event,\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey\r\n )\r\n \"\r\n [ngModel]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].value\r\n \"\r\n [disabled]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .disabled\r\n \"\r\n [ngClass]=\"{\r\n 'red-border':\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .hasError\r\n }\"\r\n />\r\n\r\n <i\r\n *ngIf=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .showIcon\r\n \"\r\n container=\"body\"\r\n [ngbTooltip]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .iconTooltip\r\n \"\r\n tooltipClass=\"gt-total-row-tooltip\"\r\n placement=\"bottom\"\r\n class=\"{{\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .iconClass\r\n }}\"\r\n >\r\n </i>\r\n <ng-container\r\n *ngIf=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey][\r\n 'showSvgIcon'\r\n ]\r\n \"\r\n >\r\n <anna-core-anna-est-icon-template\r\n class=\"float-right\"\r\n *ngIf=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey][\r\n 'svgIconName'\r\n ] == 'anna-icon'\r\n \"\r\n [placement]=\"'bottom auto'\"\r\n tooltipClass=\"gt-total-row-tooltip\"\r\n [ngbTooltip]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .iconTooltip\r\n \"\r\n container=\"body\"\r\n >\r\n </anna-core-anna-est-icon-template>\r\n </ng-container>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'HTML'\">\r\n <span\r\n [innerHtml]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n ></span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'SINGLE_RADIO'\">\r\n <span\r\n *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n [ngClass]=\"{\r\n 'disable-checkbox':\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n class=\"mdi mdi-radiobox-marked\"\r\n (click)=\"(null)\"\r\n >\r\n </span>\r\n <span\r\n *ngIf=\"!ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n class=\"mdi mdi-radiobox-blank\"\r\n [ngClass]=\"{\r\n 'disable-checkbox':\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n true\r\n )\r\n \"\r\n >\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'RADIO'\">\r\n <mat-radio-group\r\n *ngIf=\"ROW_DATA['RadioButtonConfig']\"\r\n [ngModel]=\"ROW_DATA[subline.objectKey]\"\r\n [disabled]=\"ROW_DATA['RadioButtonConfig'][0].isDisabled\"\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let radioButton of ROW_DATA['RadioButtonConfig'];\r\n let last = last\r\n \"\r\n >\r\n <mat-radio-button\r\n value=\"{{ radioButton.value }}\"\r\n class=\"{{ radioButton.class }}\"\r\n (click)=\"\r\n radioButtonClicked(\r\n ROW_DATA,\r\n radioButton.value,\r\n ROW_DATA['RadioButtonConfig'][0].isDisabled\r\n )\r\n \"\r\n >{{ radioButton.label }}\r\n </mat-radio-button>\r\n <i\r\n class=\" {{ radioButton.iconClass }}\"\r\n (click)=\"radioButtonIconClicked(ROW_DATA)\"\r\n ></i>\r\n <br *ngIf=\"!last\" />\r\n </ng-container>\r\n </mat-radio-group>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'STRING_WITH_TOOLTIP'\">\r\n <ng-container\r\n *ngFor=\"\r\n let action of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n >\r\n <span> {{ action?.dataToDisplay }}</span>\r\n <span\r\n *ngIf=\"action?.showTooltip\"\r\n [ngbTooltip]=\"textActionTooltipTemplate\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionType(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n [placement]=\"action?.tooltipPosition\"\r\n container=\"body\"\r\n [class]=\"action?.tooltipIconClass\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n [disableTooltip]=\"action?.disableTooltip\"\r\n >\r\n </span>\r\n <span> {{ action?.dataToDisplayAfterTooltip }}</span>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n <ng-container *ngIf=\"subline.objectKey != 'description'\">\r\n <span>{{\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n }}</span>\r\n <i\r\n *ngIf=\"\r\n subline.objectKey == 'inventoryCode' &&\r\n ROW_DATA['isSellerGroup'] &&\r\n gtGeneralConfig.component == 'RATING'\r\n \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n [ngbTooltip]=\"sellerHierarchyTooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n triggers=\"manual\"\r\n (hidden)=\"closeTooltip()\"\r\n #info=\"ngbTooltip\"\r\n tooltipClass=\"hierarchy-tooltip remove-on-scroll-class\"\r\n (mouseenter)=\"\r\n bindTheValueToSellerGroupTooltip(\r\n ROW_DATA.sellerGroupHierarchy,\r\n info\r\n )\r\n \"\r\n >\r\n </i>\r\n\r\n <i\r\n *ngIf=\"\r\n subline.objectKey == 'displayBookedAverageRating' &&\r\n gtGeneralConfig.component == 'RATING' &&\r\n ROW_DATA['showRatingAverageIcon']\r\n \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n (mouseenter)=\"\r\n setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\r\n \"\r\n tooltipClass=\"posted-avg-tooltip remove-on-scroll-class\"\r\n [ngbTooltip]=\"postedRatingDifference\"\r\n >\r\n </i>\r\n\r\n <i\r\n *ngIf=\"\r\n subline.objectKey == 'displayBookedAverageImpression' &&\r\n gtGeneralConfig.component == 'RATING' &&\r\n ROW_DATA['showImpressionAverageIcon']\r\n \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n (mouseenter)=\"\r\n setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\r\n \"\r\n tooltipClass=\"posted-avg-tooltip remove-on-scroll-class\"\r\n [ngbTooltip]=\"postedImpDifference\"\r\n >\r\n </i>\r\n </ng-container>\r\n <ng-container *ngIf=\"subline.objectKey == 'description'\">\r\n <p\r\n *ngIf=\"\r\n ROW_DATA.descriptionMessage ||\r\n ROW_DATA.descriptionEmailReferenceNum\r\n \"\r\n >\r\n <ng-container *ngIf=\"ROW_DATA.descriptionMessage\">\r\n {{ ROW_DATA.descriptionMessage }}\r\n <br />\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"\r\n ROW_DATA.descriptionEmailReferenceNum != '-' &&\r\n ROW_DATA.descriptionEmailReferenceNum != ''\r\n \"\r\n >\r\n Email Ref: {{ ROW_DATA.descriptionEmailReferenceNum }}\r\n <br />\r\n </ng-container>\r\n </p>\r\n <a\r\n href=\"{{ ROW_DATA.descriptionDetailsUrl }}\"\r\n target=\"_blank\"\r\n *ngIf=\"\r\n ROW_DATA.descriptionDetailsUrlType === 'PDF' ||\r\n ROW_DATA.descriptionDetailsUrlType === 'EXCEL'\r\n \"\r\n >\r\n <button class=\"btn viewDetailsAndEmailBtn\">Download</button>\r\n </a>\r\n <ng-container\r\n *ngIf=\"ROW_DATA.activityname.toLowerCase() == 'order onboarded'\"\r\n >\r\n <a\r\n *ngIf=\"ROW_DATA.descriptionDetailsUrlType === 'LINK'\"\r\n (click)=\"viewDetailsClicked(ROW_DATA)\"\r\n >\r\n <button class=\"btn viewDetailsAndEmailBtn order-onboarded\">\r\n View details\r\n </button>\r\n </a>\r\n </ng-container>\r\n\r\n <a\r\n href=\"{{ ROW_DATA.descriptionEmailUrl }}\"\r\n target=\"_blank\"\r\n *ngIf=\"\r\n ROW_DATA.descriptionEmailUrl != '-' &&\r\n ROW_DATA.descriptionEmailUrl != ''\r\n \"\r\n >\r\n <button class=\"btn viewDetailsAndEmailBtn\">View email</button>\r\n </a>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"isNoDataToDisplaySubject$ | async\">\r\n <div>\r\n {{ null }}\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n </table>\r\n </div>\r\n <anna-core-no-data-lib\r\n [width]=\"noDataWidth\"\r\n [marginTop]=\"marginTop\"\r\n *ngIf=\"isNoDataToDisplaySubject$ | async\"\r\n >\r\n </anna-core-no-data-lib>\r\n</div>\r\n\r\n<!-- Checkbox template -->\r\n<ng-template #filterTooltip>\r\n <anna-core-anna-column-checkbox-filter\r\n [tableData]=\"tableData\"\r\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\"\r\n [clonedTableData]=\"clonedTableData\"\r\n [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\"\r\n (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\"\r\n >\r\n </anna-core-anna-column-checkbox-filter>\r\n</ng-template>\r\n\r\n<!-- Slider template -->\r\n<ng-template #sliderToolTip>\r\n <anna-core-anna-column-slider-filter\r\n [tableData]=\"tableData\"\r\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\"\r\n [clonedTableData]=\"clonedTableData\"\r\n [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\"\r\n (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\"\r\n >\r\n </anna-core-anna-column-slider-filter>\r\n</ng-template>\r\n\r\n<!-- Date Picker Template -->\r\n<ng-template #datePickerTooltip>\r\n <anna-core-anna-column-date-range-filter\r\n [tableData]=\"tableData\"\r\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\"\r\n [clonedTableData]=\"clonedTableData\"\r\n [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\"\r\n (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\"\r\n >\r\n </anna-core-anna-column-date-range-filter>\r\n</ng-template>\r\n\r\n<!-- Week Picker Template -->\r\n<ng-template #weekPickerToolTip>\r\n <!-- <div class=\"weekpicker-container\">\r\n <anna-core-week-calendar-filter-lib\r\n [week-calendar-config]=\"gtGeneralConfig.multiWeekPickerConfig\"\r\n (apply)=\"applyWeekFilter($event)\"\r\n [from-date]=\"calendarMinEnabledDate\"\r\n [to-date]=\"calendarMaxEnabledDate\"\r\n >\r\n </anna-core-week-calendar-filter-lib>\r\n </div> -->\r\n</ng-template>\r\n\r\n<!-- Time Filter Template -->\r\n<ng-template #timeFilterToolTip>\r\n <anna-core-anna-column-time-filter\r\n [tableData]=\"tableData\"\r\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\"\r\n [showAllTimeRangeCheckboxes]=\"showCheckboxesForTimeFilter\"\r\n [clonedTableData]=\"clonedTableData\"\r\n [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\"\r\n (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\"\r\n >\r\n </anna-core-anna-column-time-filter>\r\n</ng-template>\r\n\r\n<ng-template #columnInfoTooltip>\r\n <p style=\"color: black; white-space: nowrap\">This preemption is rejected and not marked for credit.</p>\r\n</ng-template>\r\n\r\n<ng-template #ratingInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked Rating' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected Rating' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #impsInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked IMPS' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected IMPS' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #spotsColumnEquivalizationMessageTooltip>\r\n <p class=\"spot-column-tooltip-message\">\r\n This consists of equivalized spots and un-equivalized Paid Programs & un-equivalized Non-spots.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #underDeliveryTooltip>\r\n <p class=\"spot-column-tooltip-message\">\r\n Indicates the Under-delivery percentage based on booked and posted RTG/IMPS.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #overDeliveryTooltip>\r\n <p class=\"spot-column-tooltip-message\">\r\n Indicates the Over-delivery percentage based on booked and posted RTG/IMPS.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #rateInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked Rate' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected $ Value' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #sellerHierarchyTooltip>\r\n <ng-container *ngIf=\"sellerGroupHierarchy.length > 0\">\r\n <section class=\"hierarchy-table-container\">\r\n <table class=\"seller-hierarchy-table\">\r\n <thead>\r\n <tr>\r\n <th>#</th>\r\n <th>Inventory Codes</th>\r\n <th>Program/Description</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of sellerGroupHierarchy; let tooltipIndex = index\">\r\n <td>{{ tooltipIndex + 1 }}</td>\r\n <td>\r\n <span showEllipsisTextOnHover>{{ data.InventoryCode }}</span>\r\n </td>\r\n <td>\r\n <span showEllipsisTextOnHover>{{ data.Program }}</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </section>\r\n </ng-container>\r\n <ng-container *ngIf=\"sellerGroupHierarchy.length == 0\">\r\n <span style=\"color: #000\">Seller group not available for this inventory code</span>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #lurViolationInfoTooltip>\r\n <p class=\"first-row\">The values are for the entire week.</p>\r\n</ng-template>\r\n\r\n<ng-template #postedRatingDifference>\r\n <p class=\"difference-text\">\r\n The difference between posted and booked average rating is\r\n {{ isDifferenceLessThan25Percent ? \"less\" : \"more\" }} than 25%.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #postedImpDifference>\r\n <p class=\"difference-text\">\r\n The difference between posted and booked average impression is\r\n {{ isDifferenceLessThan25Percent ? \"less\" : \"more\" }} than 25%.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #ongoingRevBookedColumnTooltip>\r\n <p>The Booked $ value, Spots, GRP, CPP, IMPS, CPM corresponds on the last permanent revision generated</p>\r\n</ng-template>\r\n\r\n<ng-template #completedRevBookedColumnTooltip>\r\n <p>The Booked $ value corresponds on the last permanent revision generated</p>\r\n</ng-template>\r\n\r\n<ng-template #avgBookedRate>\r\n <p>This is the booked average Rate</p>\r\n</ng-template>\r\n\r\n<ng-template #avgBookedRtg>\r\n <p>This is the booked average RTG</p>\r\n</ng-template>\r\n\r\n<ng-template #avgBookedImps>\r\n <p>This is the booked average IMP(\u2019000)</p>\r\n</ng-template>\r\n\r\n<ng-template #projectedImpsRtg>\r\n <p>\r\n All projections are derived from the sum of actual posted information until the last posted date and estimates\r\n for the remaining selected period.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #automationTooltip>\r\n <p>\r\n Please get the order business rules approved to activate the order for automation. Only for the\r\n automation-activated orders, any approved MGs, ADUs, or credited spots on ANNA will be fed into the traffic\r\n system i.e. ANNA revisions.\r\n <!-- removed below line as part of enhancmennt in 14.0 releas -->\r\n <!-- Additionally, ANNA will only enter buyer revisions into traffic for the selected\r\n Medialine/WOC orders. -->\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #rebateImpact>\r\n <p>Rebate impact value is for the originally ordered spot length and is not equivalized.</p>\r\n</ng-template>\r\n\r\n<ng-template #lurViolationTotalRowToolTip>\r\n <ul>\r\n <li>\r\n <strong>POLITICAL RATE VIOLATIONS:</strong>\r\n Violations flagged when non-political spots are booked at a rate lower than the minimum booked rate for\r\n political candidates for the same week, Inventory Code and Revenue Class.\r\n </li>\r\n <li>\r\n <strong>CANDIDATE TO CANDIDATE VIOLATION:</strong>\r\n Violations flagged when political spots are booked at different rates to other political spots for the same\r\n week, Inventory Code and Revenue Class.\r\n </li>\r\n </ul>\r\n</ng-template>\r\n\r\n<ng-template #circularProgressBar>\r\n <circle-progress\r\n [percent]=\"percentDone\"\r\n [radius]=\"5\"\r\n [showTitle]=\"false\"\r\n [showUnits]=\"false\"\r\n [showSubtitle]=\"false\"\r\n [outerStrokeWidth]=\"3\"\r\n [innerStrokeWidth]=\"3\"\r\n [space]=\"-3\"\r\n [outerStrokeColor]=\"'#268bff'\"\r\n [innerStrokeColor]=\"'#d5d5d5'\"\r\n [animationDuration]=\"10\"\r\n ></circle-progress>\r\n</ng-template>\r\n\r\n<ng-template #userLoggedInDetails>\r\n <div class=\"tooltip-div-container\">\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n <span *ngIf=\"data.key != 'read'\">\r\n {{ data.key }} <b> {{ data.value }}</b>\r\n </span>\r\n <span *ngIf=\"data.key == 'read'\">\r\n {{ data.value }}\r\n </span>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #markAsReadTip>\r\n <div class=\"notification-tooltip-div-container\">\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n {{ data.value }}\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #textActionTooltipTemplate>\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n {{ data.key }} <b> {{ data.value }}</b>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #showOrHideToggleForTotalRowTooltip>\r\n <div>\r\n {{ showOrHideToggleForTotalRow && !gtGeneralConfig.totalRow ? \"Show Total Row\" : \"Hide Total Row\" }}\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #tooltipContainingTableTemplate>\r\n <div\r\n *ngIf=\"tooltipContainingTable\"\r\n [innerHTML]=\"tooltipContainingTable.innerHtml\"\r\n class=\"notification-tooltip-div-container\"\r\n >\r\n <!-- <ul>\r\n <li *ngFor=\"let headerMsg of tooltipContainingTable.tableHeaderMsg\">\r\n <b> {{headerMsg}} </b>\r\n </li>\r\n </ul>\r\n\r\n <table class=\"tooltip-table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let header of tooltipContainingTable.tooltipTableHeader\">\r\n {{ header}}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let rows of tooltipContainingTable.tooltipTableBody\">\r\n <td *ngFor=\"let data of rows\">\r\n {{ data }}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <ul>\r\n <li style=\"margin-top:10px; padding:0\" *ngFor=\"let footerMsg of tooltipContainingTable.tableFooterMsg\">\r\n {{ footerMsg }} \r\n </li>\r\n </ul> -->\r\n </div>\r\n</ng-template>\r\n<!-- <ng-template #textActionTooltipTemplate>\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n {{ data.key }} <b> {{data.value}}</b>\r\n </ng-container>\r\n</ng-template> -->\r\n", styles: ["::ng-deep .show-or-hide-toggle-tooltip .tooltip-inner{max-width:229px}.show-or-hide-toggle-btn.shift-toggle-top-on-total-row-click{transform:translate(calc(var(--app-left-space-show-hide-total-row-icon) - 12px),48px)}.show-or-hide-toggle-btn{width:16px;height:16px;padding:0;margin:0;border-radius:50%;position:absolute;transform:translate(calc(var(--app-left-space-show-hide-total-row-icon) - 12px),73px);z-index:1000;background-color:#d9d9d9}.show-or-hide-toggle-btn i.mdi.mdi-menu-swap{font-size:16px;display:flex}#generic-table-conatiner.table-with-show-hide-total-row-toggle .total-row td:nth-of-type(2){padding-left:16px!important}.sort-btn{background:#fff;border:none;border-right:1px solid #1b88ff;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.07;letter-spacing:normal;color:#1b88ff;cursor:pointer;flex:1;text-align:center}.sort-btn:last-of-type{border-right:none}.sort-btn.active{color:#202b47;text-decoration:none}p.sort-container{margin-top:8px;padding-bottom:8px;border-bottom:1px solid #e6e6e6;margin-bottom:0;display:flex}::ng-deep .tooltip-inner{max-height:22rem;background-color:#fff;border:1px solid white;border-radius:5px;box-shadow:0 2px 2px #0000003d,0 0 2px #0000001f;max-width:251px;width:100%;padding:0!important}::ng-deep .tooltip-inner div.radio-container{flex-wrap:wrap}::ng-deep .md-drppicker{box-shadow:unset!important}::ng-deep .available{color:#999}::ng-deep .bs-tooltip-bottom .arrow:before{border-bottom-color:#fff!important}::ng-deep .bs-tooltip-left .arrow:before{border-left-color:#fff!important}::ng-deep .tooltip.show{opacity:1}.input{text-align:left;margin:5px 10px 5px 5px;display:flex;align-items:center;width:230px;white-space:nowrap}.data{color:#000;font-weight:700;margin-left:5px;margin-right:5px}span.data{display:inline-block;text-overflow:ellipsis;white-space:pre;width:100%;overflow:hidden}.check-box{font-size:14px;cursor:pointer;position:relative;top:-1px}span.mdi-filter.active{color:#000;opacity:1!important;pointer-events:all!important}p{margin-bottom:0;line-height:initial}span.mdi-filter{color:#cbcbcb}::ng-deep .ngx-slider-pointer{top:-5px!important;width:12px!important;height:12px!important;background:#bdbdbd!important;border:1px solid #ffffff!important;box-shadow:0 1px 3px #0000004d!important;border-radius:16px!important}input:focus{outline:none}input::placeholder{color:#c8c8c8}.cancel-btn{background:#c7e1ff;color:#268bff}.apply-btn{background:#268bff;color:#fff;margin-left:.3125rem}div.radio-container{display:flex;white-space:nowrap;justify-content:space-between;background-color:#f4f4f4;border-radius:.125rem;margin:.4375rem .4375rem .25rem}div.radio-container div{flex:1;width:50%}div.radio-container div.full-width{width:100%}div.radio-container input{position:relative;top:.125rem;margin-right:.25rem}div.radio-container label{font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:0;color:#4a4a4a;margin:0;padding-left:.125rem}div.radio-container label:first-of-type{margin-right:.188rem}div.radio-container input[type=radio]{appearance:none;display:inline-block;width:.9375rem;height:.9375rem;padding:.125rem;background-clip:content-box;border:.125rem solid #268bff;background-color:transparent;border-radius:50%}div.radio-container input[type=radio]:checked{background-color:#268bff}.checkbox-filter-buttons-container{padding:0 8px!important}.buttons-container{display:flex;margin:0px auto .4375rem;justify-content:center;padding:0 12px}.buttons-container .button{padding:0 10px;width:100%;margin:8px 0 0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.buttons-container button:last-of-type{background-color:#268bff;color:#fff;margin-left:.5rem}.buttons-container button.disabled{background:#bdbdbd;opacity:.5;color:#4a4a4a}.button{display:inline-block;margin:8px 4px 0 8px;padding:0 16px;border-radius:4px;text-align:center;outline:none;font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.67;letter-spacing:normal;border:none;color:#268bff;background-color:#e5f1ff}.search-box{display:flex;align-items:center;color:#c8c8c8;border:1px solid #e6e6e6;border-radius:.125rem;margin:.25rem .4375rem .188rem;height:1.5rem;padding:.188rem 8px .188rem .5rem}.search-box .search-bar-close{margin-left:auto;float:right}.search-icon{margin:0 4px 0 0;font-size:1.125rem;color:#9b9b9b}.filter-icon{justify-content:right;margin-left:auto;color:#d4d4d4;color:#a1a1a1;font-size:16px;cursor:pointer}.data{margin:0 13px 0 8px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.86;letter-spacing:\"\";color:#4a4a4a}.search-input{margin:1px 0 1px 4px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#c8c8c8;width:calc(100% - 38px)}.check-box{color:#268bff}.tooltip-data-container{overflow-y:scroll;max-height:8rem}.searchbar{width:100%;display:flex;justify-content:flex-end;align-items:flex-end}.clear-button{opacity:.5;font-family:Roboto;font-size:.9375rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;text-decoration:underline;border:none;background-color:#fff;color:#4a4a4a;margin-left:.625rem;padding:0}.clear-button:focus{outline:none;box-shadow:none}.unchecked{color:#268bff}cdk-virtual-scroll-viewport.dropdown-data-container{max-height:12.3rem;width:100%;overflow-y:auto;overflow-x:hidden}cdk-virtual-scroll-viewport.dropdown-data-container p.input{margin-left:0}cdk-virtual-scroll-viewport.dropdown-data-container p.input span.mi{padding-left:.4375rem}cdk-virtual-scroll-viewport.dropdown-data-container p.input:hover{background-color:#ebebeb;cursor:pointer}cdk-virtual-scroll-viewport.dropdown-data-container::-webkit-scrollbar{width:.188rem}cdk-virtual-scroll-viewport.dropdown-data-container::-webkit-scrollbar-thumb{color:#d3d3d3;background:#d3d3d3}section.min-maxContainer{display:flex;justify-content:center;margin-bottom:-.125rem;margin-top:.5rem;width:100%}section.min-maxContainer input{width:30%;height:1.875rem;border:1px solid lightgray;color:gray}section.min-maxContainer span{display:inline-block;padding-left:.5rem;padding-right:.5rem;position:relative;top:.3125rem;color:#666}.time-container{width:100%;display:flex;padding:0 .75rem}.time-container input.form-control:disabled{background-color:#fff;width:2.813rem}.time-container input.numberInput:focus{box-shadow:none;border-color:#c2cfd6}.time-container .dot{color:#cbcbcb;position:relative;left:-7px;font-size:17px}.time-container div.arrow-container{flex-direction:column;display:flex;margin-top:.375rem;width:9px;height:18px;margin-right:1.1875rem}.time-container div.arrow-container i{color:#000;cursor:pointer;max-height:9px;font-size:25px;width:10px}.time-container div.arrow-container i:before{width:0;height:0;pointer-events:none;position:relative;left:-9px;top:-11px}.mdi-filter{cursor:pointer}.time-label-container{display:flex;justify-content:flex-start}.time-label-container label{margin-bottom:0;color:#4a4a4a;margin-top:.125rem;margin-left:.75rem;font-weight:700}.time-heading{color:#000;font-size:.8125rem;text-align:left;padding-left:.625rem;margin-top:.625rem;font-weight:700}.column-clear-all{width:94%;text-align:center;border:none;font-size:14px;background:none;text-decoration:underline;color:#268bff}.checkbox-container{display:flex;padding-inline:.625rem}.checkbox-container .data{text-align:left}.checkbox-container:first-of-type{margin-top:.625rem;font-weight:500}.column-clear-all{width:94%;text-align:center;border:none;background:none;text-decoration:underline;color:#268bff}.column-clear-all:disabled{opacity:.5;color:#4a4a4a;font-weight:400}.column-clear-all.align-center{text-align:center}span.mdi-filter-variant.disabled{pointer-events:none;opacity:.5}.datepicker-container{width:100%}span.mdi-filter-variant{color:#cbcbcb;cursor:pointer;font-size:.875rem}span.mdi-filter-variant.active{color:#000}p.filter-tab{font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:normal;color:#1b88ff;border-radius:5px;background-color:#f4f4f4;padding-inline:8px;cursor:pointer;overflow:hidden;text-align:center;text-overflow:ellipsis}p.filter-tab.active{color:#fff;background-color:#1b88ff}button.filter-text-btn{background:#fff;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;border:none;color:#268bff;margin-inline:4px;margin-top:2px}button.filter-text-btn:disabled{color:#b1b1b1;cursor:not-allowed}::ng-deep .non-edit-datepicker-tooltip .tooltip-inner{max-width:310px!important;width:283px!important;overflow-y:initial!important;padding:0!important}input.slider-text::-webkit-outer-spin-button,input.slider-text::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input.slider-text{-moz-appearance:textfield}input.slider-text.red-border{border:1px solid #f44336!important}::ng-deep .checkbox-sort p.sort-container{margin-top:8px!important;padding-bottom:8px!important}i.mdi-close{cursor:pointer}i.mdi-close.disable-close-icon{pointer-events:none;cursor:not-allowed}input.error-border{border:1px solid #f44336!important}::ng-deep .non-edit-checkbox-tooltip .tooltip-inner{width:238px!important;padding:0!important}::ng-deep .non-edit-slider-tooltip .tooltip-inner{width:238px!important;padding:0!important}::ng-deep .non-edit-time-tooltip .tooltip-inner{width:250px!important;padding:0!important}::ng-deep .non-edit-time-tooltip.bs-tooltip-start{padding:.4rem}::ng-deep .non-edit-time-tooltip.bs-tooltip-start .tooltip-arrow{right:0;top:5px!important;width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}::ng-deep .non-edit-time-tooltip.bs-tooltip-start .tooltip-arrow:before{border-left-color:#fff;left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height)}::ng-deep .no-bottom-border p.sort-container{border-bottom:none!important}::ng-deep .ngx-slider-pointer-min:after{display:none}::ng-deep .ngx-slider-pointer-max:after{display:none}::ng-deep .ngx-slider span.ngx-slider-pointer{width:12px;height:12px;top:-5px;background-color:#bdbdbd}::ng-deep .ngx-slider span.ngx-slider-bar{height:3px;background:#ededed}::ng-deep .ngx-slider span.ngx-slider-selection{background:#bdbdbd}::ng-deep .ngx-slider span.ngx-slider-bubble{bottom:-22px;font-size:12px;color:#333}::ng-deep .show-min.ngx-slider span.ngx-slider-model-value{background:#fff;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003}::ng-deep .show-max.ngx-slider span.ngx-slider-model-high{background:#fff;box-shadow:none}::ng-deep .ngx-slider span.ngx-slider-combined{background:#fff;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003}::ng-deep .ngx-slider{top:10px!important;margin:5px 0 2px!important}::ng-deep .ngx-slider-animate{top:0!important}.sidebar-slider{margin-bottom:35px!important;margin-left:5px;margin-right:5px}.slider-placeholder{height:14px}::ng-deep .filter-calendar select.form-select:focus{border-color:#c2cfd6;box-shadow:none}::ng-deep .filter-calendar select.form-select{background-color:#fff}.no-data-case{padding-left:.4375rem!important;font-size:.875rem!important;margin-top:10px!important;cursor:pointer}.red-text-totol-row{color:#f44336!important}.check-mark,.unread-mark{cursor:pointer}.on-hover:hover .unread-mark,.notificationHover .check-mark{opacity:0;cursor:pointer}.on-hover:hover .check-mark{opacity:1;cursor:pointer}:host ::ng-deep .gt{table-layout:fixed;margin-bottom:0;width:100%}:host ::ng-deep .gt th,:host ::ng-deep .gt td{padding:2px 8px;line-height:normal}:host ::ng-deep .gt thead tr th .upper-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#4a4a4a;margin-bottom:0}:host ::ng-deep .gt thead tr th .lower-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#a7a7a7;margin-bottom:0}:host ::ng-deep .gt thead tr th{background-color:#ededed;position:sticky;position:-webkit-sticky;top:0;border-top:none!important;border-bottom:none!important;outline:none!important;box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4}:host ::ng-deep .gt thead tr th br{display:block;content:\"\";margin-top:-8px}:host ::ng-deep .gt thead tr th div.row{display:flex;flex-wrap:nowrap;justify-content:space-between;align-items:center;width:max-content}:host ::ng-deep .gt thead tr th div.sort-filter-container{display:flex;flex-wrap:nowrap;align-items:center;margin-left:.25rem;margin-right:auto}:host ::ng-deep .gt thead tr th span.mdi-filter-variant{font-size:13px!important;top:-1px!important;position:relative}:host ::ng-deep .gt thead tr th:first-of-type{box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4,inset 1px 0 #d4d4d4}:host ::ng-deep .gt tbody tr td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}:host ::ng-deep .gt tbody tr td:nth-of-type(n+2){box-shadow:inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}:host ::ng-deep .gt tbody tr td .upper-label{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:0px;color:#000;display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .gt tbody tr td .lower-label{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:0px;color:#a7a7a7;display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .gt tbody tr br{display:block;content:\"\";margin-top:-8px}:host ::ng-deep .gt tbody tr:nth-of-type(1) td{border-top:none!important}:host ::ng-deep .gt .custom-column-checkbox-checked,:host ::ng-deep .gt .custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}:host ::ng-deep .gt .custom-column-checkbox-checked{color:#268bff}:host ::ng-deep .gt .custom-column-checkbox-unchecked{color:#4a4a4a}:host ::ng-deep .bottom-border .gt tbody tr:last-of-type td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4}:host ::ng-deep .bottom-border .gt tbody tr:last-of-type td:nth-of-type(n+2){box-shadow:inset -1px 0 #d4d4d4}.table-container{overflow-x:auto;overflow-y:auto}.rowSelectCheckbox,#selectAllRowsCheckbox{cursor:pointer}.disable-checkbox{color:#dedede!important;pointer-events:none!important}.mdi-warning{color:#f3c639;font-size:16px;line-height:28px}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{opacity:1}.redcolor-status{color:#c62a2a}#no-filter-space{width:.875rem}::ng-deep .mat-button-toggle-appearance-standard .mat-button-toggle-label-content{line-height:1.875rem!important;width:2.625rem;padding:0 .625rem}input.numberInput{margin-right:-.8125rem;padding:0 0 0 .625rem;height:1.875rem}::ng-deep .mat-button-toggle-checked{background-color:#268bff!important;color:#fff!important}::ng-deep .mat-button-toggle-group-appearance-standard{border-radius:0}.hidden{display:none}.no-data-div{margin-top:2.5px}.no-data-div label{margin:0;width:auto;font-weight:500;background-color:#d3d3d3;padding:.3125rem 1.125rem;border-radius:.25rem}.column-values:nth-of-type(2){color:#a7a7a7!important}.custom-column-checkbox-checked,.custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}.custom-column-checkbox-checked{color:#268bff}.custom-column-checkbox-unchecked{color:#4a4a4a}.time-filter-checkboxes>div>p{color:#151b1e}::ng-deep .margin-bottom-zero .mat-radio-label{margin-bottom:0}:host ::ng-deep mat-radio-group br{margin-top:0!important}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio__background{width:var(--mat-radio-size);height:var(--mat-radio-size)}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio__inner-circle{border-width:calc(var(--mat-radio-size) / 2)}:host ::ng-deep mat-radio-group mat-radio-button .mdc-form-field>label{margin:0 0 0 4px;padding:0;top:-2px;position:relative}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio--disabled+label{color:var(--primary-text-color-dark)!important}:host ::ng-deep mat-radio-group mat-radio-button.mat-mdc-radio-button .mdc-form-field .mdc-radio{padding:0}:host ::ng-deep mat-radio-group mat-radio-button .mdc-form-field>label{left:-94px;font-size:12px;color:#4a4a4a;position:relative}::ng-deep .reject.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff0}::ng-deep .reject.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:#ff0}::ng-deep .resubmit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff0}::ng-deep .resubmit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:#ff0}::ng-deep .noAction.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:green}::ng-deep .noAction.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:green}::ng-deep .approve.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:green}::ng-deep .approve.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:green}::ng-deep .credit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:red}::ng-deep .credit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:red}::ng-deep .mat-radio-button.mat-radio-disabled .mat-radio-outer-circle{border-color:#00000061!important}::ng-deep .mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-inner-circle{background-color:#00000061!important}::ng-deep tr.white-background-row{background:#fff}::ng-deep tr.gray-background-row{background:#e9e9e980!important}.remarks-tooltip,.mdi-information,.mdi-information-outline,.seller-tooltip{font-size:.875rem;color:#268bff;position:relative;top:.1875rem;cursor:pointer}.seller-tooltip{top:-1px;float:right}::ng-deep .remarks-info-tooltip .tooltip-inner{max-width:19.25rem!important}.rating-icon,.lur-violation-icon{color:#268bff;cursor:pointer;position:relative;left:-2px}::ng-deep .rating-info-tooltip .tooltip-inner{max-width:800px!important}.spots-info-icon{color:#268bff;cursor:pointer;margin:1px 2px 0 -14px}.spots-info-icon-ol{color:#268bff;cursor:pointer;margin:1px 4px 0 -2px}::ng-deep .spot-info-tooltip .tooltip-inner{position:relative;max-width:220px!important;background:#fff;word-break:break-word;display:flex}::ng-deep .spot-info-tooltip-for-orderlisting-table .tooltip-inner{max-width:220px!important;background:#fff;word-break:break-word;display:flex}p.first-row{padding:.5rem .5rem 0;color:#000;white-space:nowrap;text-align:left}p.second-row{padding:2px .5rem .5rem;color:#000;white-space:nowrap;text-align:left}::ng-deep .gt-total-row-tooltip{opacity:1!important}::ng-deep .gt-total-row-tooltip .tooltip-inner{color:#000;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;background-color:#fff;padding:4px!important;width:100%;border-radius:2px!important}::ng-deep .gt-total-row-tooltip .arrow:before{border-top-color:#fff!important}.info-label{margin-left:4px;color:#268bff;vertical-align:text-top}::ng-deep .hierarchy-tooltip{max-width:-moz-fit-content;max-width:fit-content;width:310px!important}::ng-deep .hierarchy-tooltip .tooltip-inner{padding:4px!important;max-width:22.75rem;max-height:11.25rem}table.seller-hierarchy-table{table-layout:fixed}table.seller-hierarchy-table tr th{font-family:Roboto;font-size:.75rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:1.67;letter-spacing:normal;color:#5e5e5e;white-space:nowrap;background:#ededed;position:sticky;box-shadow:inset 0 1px #d4d4d4;top:0;z-index:1}table.seller-hierarchy-table tr th:nth-child(1){width:20px}table.seller-hierarchy-table tr th:first-of-type,table.seller-hierarchy-table tr td:first-of-type{width:20px;border-left:1px solid #d4d4d4}table.seller-hierarchy-table tr th:last-of-type,table.seller-hierarchy-table tr td:last-of-type{border-right:1px solid #d4d4d4;width:7.875rem!important}table.seller-hierarchy-table tr th:nth-of-type(2){width:7.75rem!important}table.seller-hierarchy-table tr td{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#4a4a4a;box-shadow:none!important;border-top:1px solid #d4d4d4;border-bottom:1px solid #d4d4d4}table.seller-hierarchy-table tr td:nth-of-type(2),table.seller-hierarchy-table tr td:nth-of-type(3){padding-top:.25rem}table.seller-hierarchy-table tr td span{display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;position:relative}section.hierarchy-table-container{max-height:8.75rem;overflow:auto}section.hierarchy-table-container::-webkit-scrollbar-track{margin-top:1.5rem}.difference-text{padding:.5rem;color:#000;text-align:left}::ng-deep .posted-avg-tooltip .tooltip-inner{width:13.8125rem!important}::ng-deep .drrBooked-info-tooltip{transform:translate(26px,6px)}::ng-deep .drrBooked-info-tooltip .tooltip-inner{max-width:307px!important;width:242px!important;background:#fff;word-break:break-word;display:flex;padding:4px!important;text-align:left}::ng-deep .drrBooked-info-tooltip .tooltip-inner p{color:#000}::ng-deep .drrBooked-info-tooltip .arrow:before{border-right-color:#fff!important}.clickable-data{cursor:pointer;color:#268bff!important;display:flex!important;align-items:center}.clickable-data .spot-details-download-icons{font-size:12px}.disabled-clickable-data{pointer-events:none;color:#d4d4d4!important}.spot-column-tooltip-message{color:#000;width:max-content;text-align:left}div.spinner-for-button-directive{position:relative;left:-1px}.clickable-row table tr.mat-row td{cursor:pointer!important}.tooltip-div-container{text-align:left!important;padding:12px 4px;color:#4a4a4a!important;font-size:12px!important;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}.notification-tooltip-div-container{text-align:left!important;padding:6px 8px;color:#4a4a4a!important;font-size:12px!important;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}.mdi-information,.mdi-information-outline{left:3px;top:1px}.mdi-information-outline{position:static}::ng-deep .team-user-tooltip.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .team-user-tooltip .tooltip-inner{opacity:1!important;width:-moz-fit-content!important;width:fit-content!important;max-width:520px;border-radius:2px;padding:0 4px!important}::ng-deep .team-user-tooltip .tooltip-inner .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:#fff!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .gt-icon-column-tooltip{opacity:1!important}::ng-deep .gt-icon-column-tooltip .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:#fff!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .gt-icon-column-tooltip.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .gt-icon-column-tooltip .tooltip-inner{width:100%}::ng-deep .tooltip-containing-table{opacity:1!important}::ng-deep .tooltip-containing-table .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:#fff!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .tooltip-containing-table.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .tooltip-containing-table li{margin:0!important;padding:0!important}::ng-deep .tooltip-containing-table ul{margin:0!important;padding-left:8px!important}::ng-deep .tooltip-containing-table .tooltip-inner{width:100%;max-width:230px}table.tooltip-table{table-layout:fixed;margin:4px 0 0;width:100%}table.tooltip-table th,table.tooltip-table td{padding:2px 8px;line-height:normal}table.tooltip-table thead tr th:first-of-type{box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4,inset 1px 0 #d4d4d4!important;border:none}table.tooltip-table thead tr th{color:#5e5e5e!important;font-size:12px;font-weight:500;font-family:Roboto;line-height:1.67;background-color:#ededed;border-top:none!important;border-bottom:none!important;outline:none!important;box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4}table.tooltip-table thead tr th div.row{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}table.tooltip-table tbody tr td{color:#5e5e5e!important;font-size:12px;font-weight:500;font-family:Roboto;line-height:1.67}table.tooltip-table tbody tr td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}table.tooltip-table tbody tr td:nth-of-type(n+2){box-shadow:inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}.bottom-border{border-bottom:1px solid #d4d4d4!important}i.disabled{pointer-events:none!important}\n"] }]
812
+ ], template: "<div\r\n id=\"generic-table-conatiner\"\r\n class=\"table-container {{ gtGeneralConfig?.tableOuterContainerName }} {{ tableBottomBorderClass }}\"\r\n [ngClass]=\"{\r\n 'scroll-left-shadow-effect': isScrolledLeft,\r\n 'scroll-right-shadow-effect': !isScrollEnded,\r\n 'clickable-row': clickableRow,\r\n 'no-data-table': (isNoDataToDisplaySubject$ | async),\r\n 'table-with-show-hide-total-row-toggle': showOrHideToggleForTotalRow\r\n }\"\r\n (scroll)=\"onTableContainerScroll($event)\"\r\n>\r\n <div\r\n [class]=\"gtGeneralConfig.tableContainerName\"\r\n class=\"horizontal-scroll-for-table-container\"\r\n [ngStyle]=\"{\r\n height:\r\n tableData.length < maximumRowsWhichCanBeRenderedWithoutScroll\r\n ? 'calc(' +\r\n (gtDimension.rowHeight * tableData.length +\r\n (!tableData.length || !gtGeneralConfig.totalRow\r\n ? gtDimension.headerHeight\r\n : gtDimension.headerHeight + gtDimension.rowHeight)) +\r\n 'px)'\r\n : gtDimension.tableHeight\r\n }\"\r\n >\r\n <button\r\n *ngIf=\"showOrHideToggleForTotalRow && !showSkeletonLoading && (isNoDataToDisplaySubject$ | async) === false\"\r\n [ngClass]=\"{\r\n 'shift-toggle-top-on-total-row-click': !gtGeneralConfig.totalRow\r\n }\"\r\n class=\"show-or-hide-toggle-btn\"\r\n (click)=\"showHideTotalRow()\"\r\n >\r\n <i\r\n class=\"mdi mdi-menu-swap\"\r\n tooltipClass=\"show-or-hide-toggle-tooltip\"\r\n placement=\"auto\"\r\n container=\"body\"\r\n [ngbTooltip]=\"showOrHideToggleForTotalRowTooltip\"\r\n ></i>\r\n </button>\r\n <table\r\n class=\"gt\"\r\n [ngClass]=\"tableClass\"\r\n mat-table\r\n [dataSource]=\"renderedData\"\r\n >\r\n <tr\r\n class=\"header-row\"\r\n mat-header-row\r\n *matHeaderRowDef=\"tableColumns; sticky: true\"\r\n [style.height.px]=\"gtDimension.headerHeight\"\r\n ></tr>\r\n <tr\r\n class=\"total-row\"\r\n mat-header-row\r\n [style.height.px]=\"gtDimension.rowHeight\"\r\n *matHeaderRowDef=\"totalRowColumns; sticky: true\"\r\n [class.hidden]=\"\r\n showSkeletonLoading ||\r\n (!showSkeletonLoading && !tableData.length) ||\r\n (isNoDataToDisplaySubject$ | async) ||\r\n (!showSkeletonLoading && !gtGeneralConfig.totalRow)\r\n \"\r\n ></tr>\r\n <tr\r\n [class]=\"rowData.gtClass\"\r\n [ngClass]=\"{ 'no-border-tr': (isNoDataToDisplaySubject$ | async) }\"\r\n mat-row\r\n *matRowDef=\"let rowData; columns: tableColumns\"\r\n [style.height.px]=\"gtDimension.rowHeight\"\r\n (click)=\"dataRowClicked(rowData)\"\r\n ></tr>\r\n\r\n <!-- TOTAL ROW -->\r\n <ng-container\r\n [matColumnDef]=\"column.colName\"\r\n *ngFor=\"let column of totalRowInfo; trackBy: trackByFn\"\r\n >\r\n <td\r\n mat-header-cell\r\n *matHeaderCellDef\r\n [attr.colspan]=\"column.colspan\"\r\n class=\"{{ column.class }}\"\r\n >\r\n <ng-container *ngIf=\"column['isActionColumn']\">\r\n <a\r\n *ngFor=\"let data of column.actionData\"\r\n [class]=\"data.class\"\r\n (click)=\"onClickableDataClicked({}, data.id)\"\r\n >\r\n {{ data.name }}\r\n </a>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column['isIconColumn']\">\r\n <i\r\n class=\"{{ column?.iconData?.class }}\"\r\n (click)=\"iconClickedInTotalRow(column?.colName)\"\r\n >\r\n </i>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!column['isActionColumn']\">\r\n <strong class=\"upper-label\"\r\n >{{ column.data }}\r\n <span\r\n class=\"red-text-totol-row\"\r\n *ngIf=\"column.additionalRedTextAfterData\"\r\n >{{ column.additionalRedTextAfterData }}</span\r\n ></strong\r\n >\r\n <ng-container *ngIf=\"column.lowerData\">\r\n <br />\r\n <span\r\n *ngIf=\"\r\n column.colName === 'total-potential-booked-unit' &&\r\n gtGeneralConfig.component === 'RATING';\r\n else columnLowerData\r\n \"\r\n class=\"clickable-data\"\r\n (click)=\"spotDetailsDownloadClicked('TOTALROW')\"\r\n [ngClass]=\"{ 'disabled-clickable-data': downloadInProgress }\"\r\n >{{ column.lowerData }}\r\n <span class=\"material-icons spot-details-download-icons\">get_app</span>\r\n <ng-container *ngIf=\"downloadInProgress && selectedRowTypeForDownload === 'TOTALROW'\">\r\n <ng-container [ngTemplateOutlet]=\"circularProgressBar\"></ng-container>\r\n </ng-container>\r\n </span>\r\n <ng-template #columnLowerData>\r\n <span class=\"lower-label\">{{ column.lowerData }}</span>\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.tooltipMessage && gtGeneralConfig.component !== 'LUR_VIOLATIONS'\">\r\n <i\r\n class=\"{{ column.tooltipIconClass }}\"\r\n container=\"body\"\r\n [ngbTooltip]=\"column.tooltipMessage\"\r\n tooltipClass=\"gt-total-row-tooltip\"\r\n placement=\"bottom\"\r\n ></i>\r\n </ng-container>\r\n <ng-container *ngIf=\"gtGeneralConfig.component === 'LUR_VIOLATIONS' && column.tooltipMessage\">\r\n <i\r\n class=\"mi mdi-info-outline info-label\"\r\n container=\"body\"\r\n [ngbTooltip]=\"lurViolationTotalRowToolTip\"\r\n tooltipClass=\"gt-total-row-tooltip\"\r\n placement=\"bottom\"\r\n ></i>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- MAIN ROW -->\r\n <ng-container\r\n [matColumnDef]=\"columnDef.headerInfo[0].objectKey\"\r\n *ngFor=\"let columnDef of tableHeaders; trackBy: trackByFn\"\r\n >\r\n <th\r\n #tableHeader\r\n nowrap\r\n mat-header-cell\r\n *matHeaderCellDef\r\n [style.width]=\"columnDef.width\"\r\n >\r\n <div\r\n class=\"row mx-0\"\r\n *ngFor=\"let header of columnDef.headerInfo; let j = index\"\r\n >\r\n <p\r\n *ngIf=\"header.typeOfHeaderData === 'STRING'\"\r\n [ngClass]=\"{ 'upper-label': j === 0, 'lower-label': j === 1 }\"\r\n >\r\n <ngx-skeleton-loader\r\n *ngIf=\"header.name == null\"\r\n count=\"1\"\r\n [theme]=\"{\r\n height: '10px',\r\n display: 'block',\r\n width: columnDef.width,\r\n 'max-width': 'calc(100% - 20px)'\r\n }\"\r\n >\r\n </ngx-skeleton-loader>\r\n <ng-container *ngIf=\"header.name\">\r\n {{ header.name }}\r\n </ng-container>\r\n <ng-container *ngIf=\"header.tooltip && header.tooltip.tooltipMessage\">\r\n <i\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"header.tooltip.tooltipMessage\"\r\n container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n </ng-container>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name === 'impsInfoTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"impsInfoTooltip\"\r\n container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"\r\n header.tooltip && header.tooltip.name === 'spotsColumnEquivalizationMessageTooltip'\r\n \"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n container=\"body\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"spotsColumnEquivalizationMessageTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name === 'underDeliveryTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n container=\"body\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"underDeliveryTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name === 'overDeliveryTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n container=\"body\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"overDeliveryTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name === 'ratingInfoTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"ratingInfoTooltip\"\r\n container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name === 'rateInfoTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"rateInfoTooltip\"\r\n container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name === 'ongoingRevBookedColumnTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"ongoingRevBookedColumnTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name === 'completedRevBookedColumnTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"completedRevBookedColumnTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name === 'avgBookedRate'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"avgBookedRate\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name === 'avgBookedRtg'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"avgBookedRtg\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name === 'avgBookedImps'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"avgBookedImps\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name === 'automationTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"automationTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name === 'rebateImpact'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"rebateImpact\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name === 'projectedImpsRtg'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"projectedImpsRtg\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n </p>\r\n\r\n <ng-container *ngIf=\"header.typeOfHeaderData === 'CHECKBOX'\">\r\n <span\r\n *ngIf=\"gtGeneralConfig.isHeaderChecked\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"selectUnselectAllRows()\"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!gtGeneralConfig.isHeaderChecked\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n [ngClass]=\"{ 'disable-checkbox': gtGeneralConfig.disableHeaderCheckbox }\"\r\n (click)=\"selectUnselectAllRows()\"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n </ng-container>\r\n\r\n <div\r\n *ngIf=\"gtGeneralConfig.showAllColumnFilter\"\r\n class=\"sort-filter-container\"\r\n >\r\n <ng-container *ngIf=\"header.showTooltipIcon\">\r\n <!-- Active tooltip Functionality -->\r\n <ng-container *ngIf=\"header.filter === 'CHECKBOX'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.isFilterSortActive &&\r\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\"\r\n [ngbTooltip]=\"filterTooltip\"\r\n placement=\"{{ filterAlignment }}\"\r\n container=\"body\"\r\n tooltipClass=\"non-edit-checkbox-tooltip\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'SLIDER'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.isFilterSortActive &&\r\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\"\r\n [ngbTooltip]=\"sliderToolTip\"\r\n placement=\"bottom left-top\"\r\n container=\"body\"\r\n tooltipClass=\"non-edit-slider-tooltip\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t1=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t1, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'DATE'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.isFilterSortActive &&\r\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\"\r\n [ngbTooltip]=\"datePickerTooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n tooltipClass=\"non-edit-datepicker-tooltip\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t2=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t2, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'WEEK'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.isFilterSortActive &&\r\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\"\r\n [ngbTooltip]=\"weekPickerToolTip\"\r\n placement=\"bottom left-top\"\r\n container=\"body\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t3=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t3, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'TIME'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.isFilterSortActive &&\r\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\"\r\n [ngbTooltip]=\"timeFilterToolTip\"\r\n placement=\"bottom left-top auto\"\r\n container=\"body\"\r\n tooltipClass=\"non-edit-time-tooltip\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t4=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t4, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!header.showTooltipIcon\">\r\n <span id=\"no-filter-space\"></span><br />\r\n </ng-container>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name === 'lurViolationInfoTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"lurViolationInfoTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n </div>\r\n </div>\r\n </th>\r\n\r\n <ng-container *matCellDef=\"let ROW_DATA\">\r\n <td\r\n mat-cell\r\n [style.background]=\"ROW_DATA.backgroundColor\"\r\n [style.border]=\"ROW_DATA.border\"\r\n class=\"{{ ROW_DATA.rowClass }}\"\r\n [ngClass]=\"ROW_DATA[columnDef.headerInfo[0].objectKey + 'TdClass']\"\r\n [attr.rowspan]=\"ROW_DATA[columnDef.headerInfo[0].objectKey + 'Rowspan']\"\r\n *ngIf=\"\r\n !hideSomeTds ||\r\n (hideSomeTds && !ROW_DATA['hide' + columnDef.headerInfo[0].objectKey + 'Td'])\r\n \"\r\n >\r\n <ngx-skeleton-loader\r\n *ngIf=\"showSkeletonLoading\"\r\n count=\"1\"\r\n [theme]=\"{ height: '10px', display: 'block' }\"\r\n >\r\n </ngx-skeleton-loader>\r\n\r\n <ng-container *ngIf=\"!showSkeletonLoading\">\r\n <ng-container *ngIf=\"tableData.length > 0 && (isNoDataToDisplaySubject$ | async) === false\">\r\n <ng-container\r\n *ngFor=\"\r\n let subline of columnDef.headerInfo;\r\n let subLineIndex = index;\r\n trackBy: trackByFn\r\n \"\r\n >\r\n <div annaCoreShowEllipsisTextOnHover>\r\n <ng-container [ngSwitch]=\"columnDef.headerInfo[subLineIndex].typeOfBodyData\">\r\n <ng-container *ngSwitchCase=\"'ICON'\">\r\n <i\r\n *ngIf=\"\r\n !(\r\n starredInProgress &&\r\n ROW_DATA.orderId === selectedStarredOrderId\r\n )\r\n \"\r\n [class]=\"ROW_DATA.iconClass\"\r\n (click)=\"iconClicked(ROW_DATA, ROW_DATA.iconClass)\"\r\n ngbTooltip=\"{{ ROW_DATA.iconTitleText }}\"\r\n placement=\"bottom\"\r\n container=\"body\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n ></i>\r\n <ng-container\r\n *ngIf=\"\r\n starredInProgress && ROW_DATA.orderId === selectedStarredOrderId\r\n \"\r\n >\r\n <div class=\"spinner-for-button-directive\"></div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'ICON_CELL'\">\r\n <ng-container\r\n *ngFor=\"\r\n let action of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n >\r\n <ng-container *ngIf=\"action.showObjectKey\">\r\n {{ ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey] }}\r\n </ng-container>\r\n\r\n <i\r\n *ngIf=\"action.showIcon\"\r\n [class]=\"action.iconClass\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionType(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n tooltipClass=\"team-user-tooltip remove-on-scroll-class\"\r\n [ngbTooltip]=\"action.showTooltip ? action.tooltipData : null\"\r\n (click)=\"\r\n textActionClicked(\r\n ROW_DATA,\r\n action.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n [disableTooltip]=\"!action.showTooltip\"\r\n >\r\n </i>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'HTML_STRING'\">\r\n <p\r\n [innerHTML]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n (click)=\"innerHTMLCellClicked($event, ROW_DATA)\"\r\n ></p>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'SVG_ICON'\">\r\n <anna-core-icon-column\r\n [componentName]=\"gtGeneralConfig.component\"\r\n [dataObject]=\"ROW_DATA\"\r\n [iconToShow]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n \"\r\n (columnIconClicked)=\"svgIconClicked($event)\"\r\n ></anna-core-icon-column>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'TEXT_ACTIONS'\">\r\n <ng-container\r\n *ngFor=\"\r\n let text of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n >\r\n <button\r\n *ngIf=\"text.showTooltip\"\r\n (click)=\"\r\n textActionClicked(\r\n ROW_DATA,\r\n text.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n [disabled]=\"text.isDisabled\"\r\n class=\"{{ text.class }}\"\r\n (mouseenter)=\"\r\n mouseEnterOnTextActionType(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n [ngbTooltip]=\"textActionTooltipTemplate\"\r\n placement=\"auto\"\r\n container=\"body\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n >\r\n {{ text.name }}\r\n </button>\r\n\r\n <button\r\n *ngIf=\"!text.showTooltip\"\r\n (click)=\"\r\n textActionClicked(\r\n ROW_DATA,\r\n text.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n [disabled]=\"text.isDisabled\"\r\n class=\"{{ text.class }}\"\r\n >\r\n {{ text.name }}\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'CHECKBOX'\">\r\n <span\r\n *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n [ngClass]=\"{\r\n 'disable-checkbox':\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n false\r\n )\r\n \"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n [ngClass]=\"{\r\n 'disable-checkbox':\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n true\r\n )\r\n \"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n\r\n <ng-container\r\n *ngFor=\"\r\n let action of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n >\r\n <i\r\n *ngIf=\"action.showIcon\"\r\n [class]=\"action.iconClass\"\r\n [ngClass]=\"{ disabled: action.disabledIcon }\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionTypeContainingTable(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n tooltipClass=\"tooltip-containing-table remove-on-scroll-class\"\r\n [ngbTooltip]=\"tooltipContainingTableTemplate\"\r\n >\r\n </i>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'CLICKABLE_DATA'\">\r\n <a\r\n *ngFor=\"\r\n let text of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n [class]=\"text.class\"\r\n (click)=\"onClickableDataClicked(ROW_DATA, text.id)\"\r\n >\r\n {{ text.name }}\r\n </a>\r\n <span\r\n *ngIf=\"\r\n subline.objectKey === 'displayBookedUnits' &&\r\n gtGeneralConfig.component === 'RATING'\r\n \"\r\n class=\"clickable-data\"\r\n (click)=\"spotDetailsDownloadClicked('DATAROW', ROW_DATA)\"\r\n [ngClass]=\"{ 'disabled-clickable-data': downloadInProgress }\"\r\n >{{ ROW_DATA.displayBookedUnits }}\r\n <span class=\"material-icons spot-details-download-icons\"\r\n >get_app</span\r\n >\r\n <ng-container\r\n *ngIf=\"\r\n downloadInProgress &&\r\n ROW_DATA.inventoryCodeId ===\r\n selectedInventoryIdForDownload &&\r\n ROW_DATA.demographic === selectedDemographicForDownload\r\n \"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"circularProgressBar\"\r\n ></ng-container>\r\n </ng-container>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'STRING___ICON_OR_TEXT_ACTION'\">\r\n <ng-container\r\n *ngFor=\"\r\n let action of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n >\r\n <span\r\n [class]=\"action.additionalTextBeforeLinkClass\"\r\n [innerHtml]=\"action.additionalTextBeforeLink\"\r\n ngbTooltip=\"{{ action.additionalTextBeforeLink }}\"\r\n placement=\"bottom\"\r\n container=\"body\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n [disableTooltip]=\"!action.enableTooltipForAdditionalText\"\r\n ></span>\r\n\r\n <ng-container *ngIf=\"action && action.typeOfData === 'STRING'\">\r\n {{ action.data }}\r\n </ng-container>\r\n\r\n <a\r\n [id]=\"action.id\"\r\n *ngIf=\"action.showLink\"\r\n (click)=\"\r\n textActionClicked(\r\n ROW_DATA,\r\n action.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n [class]=\"action.linkClass\"\r\n [ngClass]=\"{ disabled: action.disabledLink }\"\r\n >{{ action.data }}</a\r\n >\r\n <span\r\n ngbTooltip=\"{{ action.additionalTextAfterLink }}\"\r\n placement=\"bottom\"\r\n container=\"body\"\r\n [class]=\"action.additionalTextAfterLinkClass\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n [disableTooltip]=\"!action.enableTooltipForAdditionalAfterText\"\r\n >\r\n {{ action.additionalTextAfterLink }}\r\n </span>\r\n\r\n <ng-container *ngIf=\"action.showTooltip\">\r\n <ng-container *ngIf=\"action.tooltipData.innerHtml\">\r\n <i\r\n *ngIf=\"action.showIcon\"\r\n [class]=\"action.iconClass\"\r\n [ngClass]=\"{ disabled: action.disabledIcon }\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionTypeContainingTable(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n tooltipClass=\"tooltip-containing-table remove-on-scroll-class\"\r\n [ngbTooltip]=\"tooltipContainingTableTemplate\"\r\n >\r\n </i>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!action.tooltipData.tooltipTableBody\">\r\n <i\r\n *ngIf=\"action.showIcon\"\r\n [class]=\"action.iconClass\"\r\n [ngClass]=\"{ disabled: action.disabledIcon }\"\r\n (click)=\"\r\n iconClickedOnStringIconActionType(\r\n ROW_DATA,\r\n action.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n (mouseleave)=\"mouseLeaveTextActionType(ROW_DATA)\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionType(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n [placement]=\"\r\n action.tooltipPlacement\r\n ? action.tooltipPlacement\r\n : 'bottom auto'\r\n \"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n tooltipClass=\"team-user-tooltip remove-on-scroll-class {{\r\n action.tooltipClass\r\n }}\"\r\n [ngbTooltip]=\"userLoggedInDetails\"\r\n >\r\n </i>\r\n <ng-container *ngIf=\"action['showSvgIcon']\">\r\n <anna-core-anna-est-icon-template\r\n class=\"float-right\"\r\n *ngIf=\"action['svgIconName'] === 'anna-icon'\"\r\n (mouseleave)=\"mouseLeaveTextActionType(ROW_DATA)\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionType(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex]\r\n .tooltipKey\r\n )\r\n \"\r\n [placement]=\"\r\n action.tooltipPlacement\r\n ? action.tooltipPlacement\r\n : 'bottom auto'\r\n \"\r\n tooltipClass=\"team-user-tooltip remove-on-scroll-class {{\r\n action['tooltipClass']\r\n }}\"\r\n [ngbTooltip]=\"userLoggedInDetails\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n >\r\n </anna-core-anna-est-icon-template>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!action.showTooltip\">\r\n <i\r\n *ngIf=\"action.showIcon\"\r\n [class]=\"action.iconClass\"\r\n [ngClass]=\"{ disabled: action.disabledIcon }\"\r\n (click)=\"\r\n iconClickedOnStringIconActionType(\r\n ROW_DATA,\r\n action.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n >\r\n </i>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'STRING_OR_INPUT'\">\r\n <ng-container\r\n *ngIf=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]?.type ===\r\n 'STRING';\r\n else inputBox\r\n \"\r\n >\r\n <span\r\n [innerHtml]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n ?.value\r\n \"\r\n ></span>\r\n </ng-container>\r\n <ng-template #inputBox>\r\n <input\r\n placeholder=\"{{\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n ?.placeholder\r\n }}\"\r\n annaCoreShowEllipsisTextOnHover\r\n class=\"{{\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .className\r\n }}\"\r\n (keydown)=\"\r\n changesMadeInEditableInputBox(\r\n $event,\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey],\r\n false\r\n )\r\n \"\r\n (paste)=\"\r\n changesMadeInEditableInputBox(\r\n $event,\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey],\r\n true\r\n )\r\n \"\r\n (ngModelChange)=\"\r\n editableInputValueChanged(\r\n $event,\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey\r\n )\r\n \"\r\n [ngModel]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].value\r\n \"\r\n [disabled]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .disabled\r\n \"\r\n [ngClass]=\"{\r\n 'red-border':\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .hasError\r\n }\"\r\n />\r\n\r\n <i\r\n *ngIf=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .showIcon\r\n \"\r\n container=\"body\"\r\n [ngbTooltip]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .iconTooltip\r\n \"\r\n tooltipClass=\"gt-total-row-tooltip\"\r\n placement=\"bottom\"\r\n class=\"{{\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .iconClass\r\n }}\"\r\n >\r\n </i>\r\n <ng-container\r\n *ngIf=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey][\r\n 'showSvgIcon'\r\n ]\r\n \"\r\n >\r\n <anna-core-anna-est-icon-template\r\n class=\"float-right\"\r\n *ngIf=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey][\r\n 'svgIconName'\r\n ] === 'anna-icon'\r\n \"\r\n [placement]=\"'bottom auto'\"\r\n tooltipClass=\"gt-total-row-tooltip\"\r\n [ngbTooltip]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .iconTooltip\r\n \"\r\n container=\"body\"\r\n >\r\n </anna-core-anna-est-icon-template>\r\n </ng-container>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'HTML'\">\r\n <span\r\n [innerHtml]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n ></span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'SINGLE_RADIO'\">\r\n <span\r\n *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n [ngClass]=\"{\r\n 'disable-checkbox':\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n class=\"mdi mdi-radiobox-marked\"\r\n (click)=\"(null)\"\r\n >\r\n </span>\r\n <span\r\n *ngIf=\"!ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n class=\"mdi mdi-radiobox-blank\"\r\n [ngClass]=\"{\r\n 'disable-checkbox':\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n true\r\n )\r\n \"\r\n >\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'RADIO'\">\r\n <mat-radio-group\r\n *ngIf=\"ROW_DATA['RadioButtonConfig']\"\r\n [ngModel]=\"ROW_DATA[subline.objectKey]\"\r\n [disabled]=\"ROW_DATA['RadioButtonConfig'][0].isDisabled\"\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let radioButton of ROW_DATA['RadioButtonConfig'];\r\n let last = last\r\n \"\r\n >\r\n <mat-radio-button\r\n value=\"{{ radioButton.value }}\"\r\n class=\"{{ radioButton.class }}\"\r\n (click)=\"\r\n radioButtonClicked(\r\n ROW_DATA,\r\n radioButton.value,\r\n ROW_DATA['RadioButtonConfig'][0].isDisabled\r\n )\r\n \"\r\n >{{ radioButton.label }}\r\n </mat-radio-button>\r\n <i\r\n class=\" {{ radioButton.iconClass }}\"\r\n (click)=\"radioButtonIconClicked(ROW_DATA)\"\r\n ></i>\r\n <br *ngIf=\"!last\" />\r\n </ng-container>\r\n </mat-radio-group>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'STRING_WITH_TOOLTIP'\">\r\n <ng-container\r\n *ngFor=\"\r\n let action of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n >\r\n <span> {{ action?.dataToDisplay }}</span>\r\n <span\r\n *ngIf=\"action?.showTooltip\"\r\n [ngbTooltip]=\"textActionTooltipTemplate\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionType(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n [placement]=\"action?.tooltipPosition\"\r\n container=\"body\"\r\n [class]=\"action?.tooltipIconClass\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n [disableTooltip]=\"action?.disableTooltip\"\r\n >\r\n </span>\r\n <span> {{ action?.dataToDisplayAfterTooltip }}</span>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n <ng-container *ngIf=\"subline.objectKey !== 'description'\">\r\n <span>{{\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n }}</span>\r\n <i\r\n *ngIf=\"\r\n subline.objectKey === 'inventoryCode' &&\r\n ROW_DATA['isSellerGroup'] &&\r\n gtGeneralConfig.component === 'RATING'\r\n \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n [ngbTooltip]=\"sellerHierarchyTooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n triggers=\"manual\"\r\n (hidden)=\"closeTooltip()\"\r\n #info=\"ngbTooltip\"\r\n tooltipClass=\"hierarchy-tooltip remove-on-scroll-class\"\r\n (mouseenter)=\"\r\n bindTheValueToSellerGroupTooltip(\r\n ROW_DATA.sellerGroupHierarchy,\r\n info\r\n )\r\n \"\r\n >\r\n </i>\r\n\r\n <i\r\n *ngIf=\"\r\n subline.objectKey === 'displayBookedAverageRating' &&\r\n gtGeneralConfig.component === 'RATING' &&\r\n ROW_DATA['showRatingAverageIcon']\r\n \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n (mouseenter)=\"\r\n setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\r\n \"\r\n tooltipClass=\"posted-avg-tooltip remove-on-scroll-class\"\r\n [ngbTooltip]=\"postedRatingDifference\"\r\n >\r\n </i>\r\n\r\n <i\r\n *ngIf=\"\r\n subline.objectKey === 'displayBookedAverageImpression' &&\r\n gtGeneralConfig.component === 'RATING' &&\r\n ROW_DATA['showImpressionAverageIcon']\r\n \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n (mouseenter)=\"\r\n setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\r\n \"\r\n tooltipClass=\"posted-avg-tooltip remove-on-scroll-class\"\r\n [ngbTooltip]=\"postedImpDifference\"\r\n >\r\n </i>\r\n </ng-container>\r\n <ng-container *ngIf=\"subline.objectKey === 'description'\">\r\n <p\r\n *ngIf=\"\r\n ROW_DATA.descriptionMessage ||\r\n ROW_DATA.descriptionEmailReferenceNum\r\n \"\r\n >\r\n <ng-container *ngIf=\"ROW_DATA.descriptionMessage\">\r\n {{ ROW_DATA.descriptionMessage }}\r\n <br />\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"\r\n ROW_DATA.descriptionEmailReferenceNum !== '-' &&\r\n ROW_DATA.descriptionEmailReferenceNum !== ''\r\n \"\r\n >\r\n Email Ref: {{ ROW_DATA.descriptionEmailReferenceNum }}\r\n <br />\r\n </ng-container>\r\n </p>\r\n <a\r\n href=\"{{ ROW_DATA.descriptionDetailsUrl }}\"\r\n target=\"_blank\"\r\n *ngIf=\"\r\n ROW_DATA.descriptionDetailsUrlType === 'PDF' ||\r\n ROW_DATA.descriptionDetailsUrlType === 'EXCEL'\r\n \"\r\n >\r\n <button class=\"btn viewDetailsAndEmailBtn\">Download</button>\r\n </a>\r\n <ng-container\r\n *ngIf=\"\r\n ROW_DATA.activityname.toLowerCase() === 'order onboarded'\r\n \"\r\n >\r\n <a\r\n *ngIf=\"ROW_DATA.descriptionDetailsUrlType === 'LINK'\"\r\n (click)=\"viewDetailsClicked(ROW_DATA)\"\r\n >\r\n <button class=\"btn viewDetailsAndEmailBtn order-onboarded\">\r\n View details\r\n </button>\r\n </a>\r\n </ng-container>\r\n\r\n <a\r\n href=\"{{ ROW_DATA.descriptionEmailUrl }}\"\r\n target=\"_blank\"\r\n *ngIf=\"\r\n ROW_DATA.descriptionEmailUrl !== '-' &&\r\n ROW_DATA.descriptionEmailUrl !== ''\r\n \"\r\n >\r\n <button class=\"btn viewDetailsAndEmailBtn\">View email</button>\r\n </a>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"isNoDataToDisplaySubject$ | async\">\r\n <div>\r\n {{ null }}\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n </table>\r\n </div>\r\n <anna-core-no-data-lib\r\n [width]=\"noDataWidth\"\r\n [marginTop]=\"marginTop\"\r\n *ngIf=\"isNoDataToDisplaySubject$ | async\"\r\n >\r\n </anna-core-no-data-lib>\r\n</div>\r\n\r\n<!-- Checkbox template -->\r\n<ng-template #filterTooltip>\r\n <anna-core-anna-column-checkbox-filter\r\n [tableData]=\"tableData\"\r\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\"\r\n [clonedTableData]=\"clonedTableData\"\r\n [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\"\r\n (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\"\r\n >\r\n </anna-core-anna-column-checkbox-filter>\r\n</ng-template>\r\n\r\n<!-- Slider template -->\r\n<ng-template #sliderToolTip>\r\n <anna-core-anna-column-slider-filter\r\n [tableData]=\"tableData\"\r\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\"\r\n [clonedTableData]=\"clonedTableData\"\r\n [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\"\r\n (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\"\r\n >\r\n </anna-core-anna-column-slider-filter>\r\n</ng-template>\r\n\r\n<!-- Date Picker Template -->\r\n<ng-template #datePickerTooltip>\r\n <anna-core-anna-column-date-range-filter\r\n [tableData]=\"tableData\"\r\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\"\r\n [clonedTableData]=\"clonedTableData\"\r\n [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\"\r\n (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\"\r\n >\r\n </anna-core-anna-column-date-range-filter>\r\n</ng-template>\r\n\r\n<!-- Week Picker Template -->\r\n<ng-template #weekPickerToolTip>\r\n <!-- <div class=\"weekpicker-container\">\r\n <anna-core-week-calendar-filter-lib\r\n [week-calendar-config]=\"gtGeneralConfig.multiWeekPickerConfig\"\r\n (apply)=\"applyWeekFilter($event)\"\r\n [from-date]=\"calendarMinEnabledDate\"\r\n [to-date]=\"calendarMaxEnabledDate\"\r\n >\r\n </anna-core-week-calendar-filter-lib>\r\n </div> -->\r\n</ng-template>\r\n\r\n<!-- Time Filter Template -->\r\n<ng-template #timeFilterToolTip>\r\n <anna-core-anna-column-time-filter\r\n [tableData]=\"tableData\"\r\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\"\r\n [showAllTimeRangeCheckboxes]=\"showCheckboxesForTimeFilter\"\r\n [clonedTableData]=\"clonedTableData\"\r\n [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\"\r\n (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\"\r\n >\r\n </anna-core-anna-column-time-filter>\r\n</ng-template>\r\n\r\n<ng-template #columnInfoTooltip>\r\n <p class=\"black-color-text white-space-nowrap\">This preemption is rejected and not marked for credit.</p>\r\n</ng-template>\r\n\r\n<ng-template #ratingInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked Rating' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected Rating' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #impsInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked IMPS' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected IMPS' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #spotsColumnEquivalizationMessageTooltip>\r\n <p class=\"spot-column-tooltip-message\">\r\n This consists of equivalized spots and un-equivalized Paid Programs & un-equivalized Non-spots.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #underDeliveryTooltip>\r\n <p class=\"spot-column-tooltip-message\">\r\n Indicates the Under-delivery percentage based on booked and posted RTG/IMPS.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #overDeliveryTooltip>\r\n <p class=\"spot-column-tooltip-message\">\r\n Indicates the Over-delivery percentage based on booked and posted RTG/IMPS.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #rateInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked Rate' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected $ Value' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #sellerHierarchyTooltip>\r\n <ng-container *ngIf=\"sellerGroupHierarchy.length > 0\">\r\n <section class=\"hierarchy-table-container\">\r\n <table class=\"seller-hierarchy-table\">\r\n <thead>\r\n <tr>\r\n <th>#</th>\r\n <th>Inventory Codes</th>\r\n <th>Program/Description</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of sellerGroupHierarchy; let tooltipIndex = index\">\r\n <td>{{ tooltipIndex + 1 }}</td>\r\n <td>\r\n <span annaCoreShowEllipsisTextOnHover>{{ data.InventoryCode }}</span>\r\n </td>\r\n <td>\r\n <span annaCoreShowEllipsisTextOnHover>{{ data.Program }}</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </section>\r\n </ng-container>\r\n <ng-container *ngIf=\"sellerGroupHierarchy.length === 0\">\r\n <span class=\"black-color-text\">Seller group not available for this inventory code</span>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #lurViolationInfoTooltip>\r\n <p class=\"first-row\">The values are for the entire week.</p>\r\n</ng-template>\r\n\r\n<ng-template #postedRatingDifference>\r\n <p class=\"difference-text\">\r\n The difference between posted and booked average rating is\r\n {{ isDifferenceLessThan25Percent ? \"less\" : \"more\" }} than 25%.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #postedImpDifference>\r\n <p class=\"difference-text\">\r\n The difference between posted and booked average impression is\r\n {{ isDifferenceLessThan25Percent ? \"less\" : \"more\" }} than 25%.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #ongoingRevBookedColumnTooltip>\r\n <p>The Booked $ value, Spots, GRP, CPP, IMPS, CPM corresponds on the last permanent revision generated</p>\r\n</ng-template>\r\n\r\n<ng-template #completedRevBookedColumnTooltip>\r\n <p>The Booked $ value corresponds on the last permanent revision generated</p>\r\n</ng-template>\r\n\r\n<ng-template #avgBookedRate>\r\n <p>This is the booked average Rate</p>\r\n</ng-template>\r\n\r\n<ng-template #avgBookedRtg>\r\n <p>This is the booked average RTG</p>\r\n</ng-template>\r\n\r\n<ng-template #avgBookedImps>\r\n <p>This is the booked average IMP(\u2019000)</p>\r\n</ng-template>\r\n\r\n<ng-template #projectedImpsRtg>\r\n <p>\r\n All projections are derived from the sum of actual posted information until the last posted date and estimates\r\n for the remaining selected period.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #automationTooltip>\r\n <p>\r\n Please get the order business rules approved to activate the order for automation. Only for the\r\n automation-activated orders, any approved MGs, ADUs, or credited spots on ANNA will be fed into the traffic\r\n system i.e. ANNA revisions.\r\n <!-- removed below line as part of enhancmennt in 14.0 releas -->\r\n <!-- Additionally, ANNA will only enter buyer revisions into traffic for the selected\r\n Medialine/WOC orders. -->\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #rebateImpact>\r\n <p>Rebate impact value is for the originally ordered spot length and is not equivalized.</p>\r\n</ng-template>\r\n\r\n<ng-template #lurViolationTotalRowToolTip>\r\n <ul>\r\n <li>\r\n <strong>POLITICAL RATE VIOLATIONS:</strong>\r\n Violations flagged when non-political spots are booked at a rate lower than the minimum booked rate for\r\n political candidates for the same week, Inventory Code and Revenue Class.\r\n </li>\r\n <li>\r\n <strong>CANDIDATE TO CANDIDATE VIOLATION:</strong>\r\n Violations flagged when political spots are booked at different rates to other political spots for the same\r\n week, Inventory Code and Revenue Class.\r\n </li>\r\n </ul>\r\n</ng-template>\r\n\r\n<ng-template #circularProgressBar>\r\n <circle-progress\r\n [percent]=\"percentDone\"\r\n [radius]=\"5\"\r\n [showTitle]=\"false\"\r\n [showUnits]=\"false\"\r\n [showSubtitle]=\"false\"\r\n [outerStrokeWidth]=\"3\"\r\n [innerStrokeWidth]=\"3\"\r\n [space]=\"-3\"\r\n [outerStrokeColor]=\"'#268bff'\"\r\n [innerStrokeColor]=\"'#d5d5d5'\"\r\n [animationDuration]=\"10\"\r\n ></circle-progress>\r\n</ng-template>\r\n\r\n<ng-template #userLoggedInDetails>\r\n <div class=\"tooltip-div-container\">\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n <span *ngIf=\"data.key !== 'read'\">\r\n {{ data.key }} <b> {{ data.value }}</b>\r\n </span>\r\n <span *ngIf=\"data.key === 'read'\">\r\n {{ data.value }}\r\n </span>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #markAsReadTip>\r\n <div class=\"notification-tooltip-div-container\">\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n {{ data.value }}\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #textActionTooltipTemplate>\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n {{ data.key }} <b> {{ data.value }}</b>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #showOrHideToggleForTotalRowTooltip>\r\n <div>\r\n {{ showOrHideToggleForTotalRow && !gtGeneralConfig.totalRow ? \"Show Total Row\" : \"Hide Total Row\" }}\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #tooltipContainingTableTemplate>\r\n <div\r\n *ngIf=\"tooltipContainingTable\"\r\n [innerHTML]=\"tooltipContainingTable.innerHtml\"\r\n class=\"notification-tooltip-div-container\"\r\n >\r\n <!-- <ul>\r\n <li *ngFor=\"let headerMsg of tooltipContainingTable.tableHeaderMsg\">\r\n <b> {{headerMsg}} </b>\r\n </li>\r\n </ul>\r\n\r\n <table class=\"tooltip-table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let header of tooltipContainingTable.tooltipTableHeader\">\r\n {{ header}}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let rows of tooltipContainingTable.tooltipTableBody\">\r\n <td *ngFor=\"let data of rows\">\r\n {{ data }}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <ul>\r\n <li style=\"margin-top:10px; padding:0\" *ngFor=\"let footerMsg of tooltipContainingTable.tableFooterMsg\">\r\n {{ footerMsg }} \r\n </li>\r\n </ul> -->\r\n </div>\r\n</ng-template>\r\n<!-- <ng-template #textActionTooltipTemplate>\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n {{ data.key }} <b> {{data.value}}</b>\r\n </ng-container>\r\n</ng-template> -->\r\n", styles: ["::ng-deep .show-or-hide-toggle-tooltip .tooltip-inner{max-width:229px}.show-or-hide-toggle-btn.shift-toggle-top-on-total-row-click{transform:translate(calc(var(--app-left-space-show-hide-total-row-icon) - 12px),48px)}.show-or-hide-toggle-btn{width:16px;height:16px;padding:0;margin:0;border-radius:50%;position:absolute;transform:translate(calc(var(--app-left-space-show-hide-total-row-icon) - 12px),73px);z-index:1000;background-color:#d9d9d9}.show-or-hide-toggle-btn i.mdi.mdi-menu-swap{font-size:16px;display:flex}#generic-table-conatiner.table-with-show-hide-total-row-toggle .total-row td:nth-of-type(2){padding-left:16px!important}.sort-btn{background:#fff;border:none;border-right:1px solid #1b88ff;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.07;letter-spacing:normal;color:#1b88ff;cursor:pointer;flex:1;text-align:center}.sort-btn:last-of-type{border-right:none}.sort-btn.active{color:#202b47;text-decoration:none}p.sort-container{margin-top:8px;padding-bottom:8px;border-bottom:1px solid #e6e6e6;margin-bottom:0;display:flex}::ng-deep .tooltip-inner{max-height:22rem;background-color:#fff;border:1px solid white;border-radius:5px;box-shadow:0 2px 2px #0000003d,0 0 2px #0000001f;max-width:251px;width:100%;padding:0!important}::ng-deep .tooltip-inner div.radio-container{flex-wrap:wrap}::ng-deep .md-drppicker{box-shadow:unset!important}::ng-deep .available{color:#999}::ng-deep .bs-tooltip-bottom .arrow:before{border-bottom-color:#fff!important}::ng-deep .bs-tooltip-left .arrow:before{border-left-color:#fff!important}::ng-deep .tooltip.show{opacity:1}.input{text-align:left;margin:5px 10px 5px 5px;display:flex;align-items:center;width:230px;white-space:nowrap}.data{color:#000;font-weight:700;margin-left:5px;margin-right:5px}span.data{display:inline-block;text-overflow:ellipsis;white-space:pre;width:100%;overflow:hidden}.check-box{font-size:14px;cursor:pointer;position:relative;top:-1px}span.mdi-filter.active{color:#000;opacity:1!important;pointer-events:all!important}p{margin-bottom:0;line-height:initial}span.mdi-filter{color:#cbcbcb}::ng-deep .ngx-slider-pointer{top:-5px!important;width:12px!important;height:12px!important;background:#bdbdbd!important;border:1px solid #ffffff!important;box-shadow:0 1px 3px #0000004d!important;border-radius:16px!important}input:focus{outline:none}input::placeholder{color:#c8c8c8}.cancel-btn{background:#c7e1ff;color:#268bff}.apply-btn{background:#268bff;color:#fff;margin-left:.3125rem}div.radio-container{display:flex;white-space:nowrap;justify-content:space-between;background-color:#f4f4f4;border-radius:.125rem;margin:.4375rem .4375rem .25rem}div.radio-container div{flex:1;width:50%}div.radio-container div.full-width{width:100%}div.radio-container input{position:relative;top:.125rem;margin-right:.25rem}div.radio-container label{font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:0;color:#4a4a4a;margin:0;padding-left:.125rem}div.radio-container label:first-of-type{margin-right:.188rem}div.radio-container input[type=radio]{appearance:none;display:inline-block;width:.9375rem;height:.9375rem;padding:.125rem;background-clip:content-box;border:.125rem solid #268bff;background-color:transparent;border-radius:50%}div.radio-container input[type=radio]:checked{background-color:#268bff}.checkbox-filter-buttons-container{padding:0 8px!important}.buttons-container{display:flex;margin:0px auto .4375rem;justify-content:center;padding:0 12px}.buttons-container .button{padding:0 10px;width:100%;margin:8px 0 0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.buttons-container button:last-of-type{background-color:#268bff;color:#fff;margin-left:.5rem}.buttons-container button.disabled{background:#bdbdbd;opacity:.5;color:#4a4a4a}.button{display:inline-block;margin:8px 4px 0 8px;padding:0 16px;border-radius:4px;text-align:center;outline:none;font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.67;letter-spacing:normal;border:none;color:#268bff;background-color:#e5f1ff}.search-box{display:flex;align-items:center;color:#c8c8c8;border:1px solid #e6e6e6;border-radius:.125rem;margin:.25rem .4375rem .188rem;height:1.5rem;padding:.188rem 8px .188rem .5rem}.search-box .search-bar-close{margin-left:auto;float:right}.search-icon{margin:0 4px 0 0;font-size:1.125rem;color:#9b9b9b}.filter-icon{justify-content:right;margin-left:auto;color:#d4d4d4;color:#a1a1a1;font-size:16px;cursor:pointer}.data{margin:0 13px 0 8px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.86;letter-spacing:\"\";color:#4a4a4a}.search-input{font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#c8c8c8;width:calc(100% - 38px);margin:1px 0 1px 2px;border:none;padding:0}.check-box{color:#268bff}.tooltip-data-container{overflow-y:scroll;max-height:8rem}.searchbar{width:100%;display:flex;justify-content:flex-end;align-items:flex-end}.clear-button{opacity:.5;font-family:Roboto;font-size:.9375rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;text-decoration:underline;border:none;background-color:#fff;color:#4a4a4a;margin-left:.625rem;padding:0}.clear-button:focus{outline:none;box-shadow:none}.unchecked{color:#268bff}cdk-virtual-scroll-viewport.dropdown-data-container{max-height:12.3rem;width:100%;overflow-y:auto;overflow-x:hidden}cdk-virtual-scroll-viewport.dropdown-data-container p.input{margin-left:0}cdk-virtual-scroll-viewport.dropdown-data-container p.input span.mi{padding-left:.4375rem}cdk-virtual-scroll-viewport.dropdown-data-container p.input:hover{background-color:#ebebeb;cursor:pointer}cdk-virtual-scroll-viewport.dropdown-data-container::-webkit-scrollbar{width:.188rem}cdk-virtual-scroll-viewport.dropdown-data-container::-webkit-scrollbar-thumb{color:#d3d3d3;background:#d3d3d3}section.min-maxContainer{display:flex;justify-content:center;margin-bottom:-.125rem;margin-top:.5rem;width:100%}section.min-maxContainer input{width:30%;height:1.875rem;border:1px solid lightgray;color:gray}section.min-maxContainer span{display:inline-block;padding-left:.5rem;padding-right:.5rem;position:relative;top:.3125rem;color:#666}.time-container{width:100%;display:flex;padding:0 .75rem}.time-container input.form-control:disabled{background-color:#fff;width:2.813rem}.time-container input.numberInput:focus{box-shadow:none;border-color:#c2cfd6}.time-container .dot{color:#cbcbcb;position:relative;left:-7px;font-size:17px}.time-container div.arrow-container{flex-direction:column;display:flex;margin-top:.375rem;width:9px;height:18px;margin-right:1.1875rem}.time-container div.arrow-container i{color:#000;cursor:pointer;max-height:9px;font-size:25px;width:10px}.time-container div.arrow-container i:before{width:0;height:0;pointer-events:none;position:relative;left:-9px;top:-11px}.mdi-filter{cursor:pointer}.time-label-container{display:flex;justify-content:flex-start}.time-label-container label{margin-bottom:0;color:#4a4a4a;margin-top:.125rem;margin-left:.75rem;font-weight:700}.time-heading{color:#000;font-size:.8125rem;text-align:left;padding-left:.625rem;margin-top:.625rem;font-weight:700}.column-clear-all{width:94%;text-align:center;border:none;font-size:14px;background:none;text-decoration:underline;color:#268bff}.checkbox-container{display:flex;padding-inline:.625rem}.checkbox-container .data{text-align:left}.checkbox-container:first-of-type{margin-top:.625rem;font-weight:500}.column-clear-all{width:94%;text-align:center;border:none;background:none;text-decoration:underline;color:#268bff}.column-clear-all:disabled{opacity:.5;color:#4a4a4a;font-weight:400}.column-clear-all.align-center{text-align:center}span.mdi-filter-variant.disabled{pointer-events:none;opacity:.5}.datepicker-container{width:100%}span.mdi-filter-variant{color:#cbcbcb;cursor:pointer;font-size:.875rem}span.mdi-filter-variant.active{color:#000}p.filter-tab{font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:normal;color:#1b88ff;border-radius:5px;background-color:#f4f4f4;padding-inline:8px;cursor:pointer;overflow:hidden;text-align:center;text-overflow:ellipsis}p.filter-tab.active{color:#fff;background-color:#1b88ff}button.filter-text-btn{background:#fff;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;border:none;color:#268bff;margin-inline:4px;margin-top:2px}button.filter-text-btn:disabled{color:#b1b1b1;cursor:not-allowed}::ng-deep .non-edit-datepicker-tooltip .tooltip-inner{max-width:310px!important;width:283px!important;overflow-y:initial!important;padding:0!important}input.slider-text::-webkit-outer-spin-button,input.slider-text::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input.slider-text{-moz-appearance:textfield}input.slider-text.red-border{border:1px solid #f44336!important}::ng-deep .checkbox-sort p.sort-container{margin-top:8px!important;padding-bottom:8px!important}i.mdi-close{cursor:pointer}i.mdi-close.disable-close-icon{pointer-events:none;cursor:not-allowed}input.error-border{border:1px solid #f44336!important}::ng-deep .non-edit-checkbox-tooltip .tooltip-inner{width:238px!important;padding:0!important}::ng-deep .non-edit-slider-tooltip .tooltip-inner{width:238px!important;padding:0!important}::ng-deep .non-edit-time-tooltip .tooltip-inner{width:250px!important;padding:0!important}::ng-deep .non-edit-time-tooltip.bs-tooltip-start{padding:.4rem}::ng-deep .non-edit-time-tooltip.bs-tooltip-start .tooltip-arrow{right:0;top:5px!important;width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}::ng-deep .non-edit-time-tooltip.bs-tooltip-start .tooltip-arrow:before{border-left-color:#fff;left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height)}::ng-deep .no-bottom-border p.sort-container{border-bottom:none!important}::ng-deep .ngx-slider-pointer-min:after{display:none}::ng-deep .ngx-slider-pointer-max:after{display:none}::ng-deep .ngx-slider span.ngx-slider-pointer{width:12px;height:12px;top:-5px;background-color:#bdbdbd}::ng-deep .ngx-slider span.ngx-slider-bar{height:3px;background:#ededed}::ng-deep .ngx-slider span.ngx-slider-selection{background:#bdbdbd}::ng-deep .ngx-slider span.ngx-slider-bubble{bottom:-22px;font-size:12px;color:#333}::ng-deep .show-min.ngx-slider span.ngx-slider-model-value{background:#fff;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003}::ng-deep .show-max.ngx-slider span.ngx-slider-model-high{background:#fff;box-shadow:none}::ng-deep .ngx-slider span.ngx-slider-combined{background:#fff;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003}::ng-deep .ngx-slider{top:10px!important;margin:5px 0 2px!important}::ng-deep .ngx-slider-animate{top:0!important}.sidebar-slider{margin-bottom:35px!important;margin-left:5px;margin-right:5px}.slider-placeholder{height:14px}::ng-deep .filter-calendar select.form-select:focus{border-color:#c2cfd6;box-shadow:none}::ng-deep .filter-calendar select.form-select{background-color:#fff}.no-data-case{padding-left:.4375rem!important;font-size:.875rem!important;margin-top:10px!important;cursor:pointer}.virtual-scroll-div{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.red-text-totol-row{color:#f44336!important}.check-mark,.unread-mark{cursor:pointer}.on-hover:hover .unread-mark,.notificationHover .check-mark{opacity:0;cursor:pointer}.on-hover:hover .check-mark{opacity:1;cursor:pointer}:host ::ng-deep .gt{table-layout:fixed;margin-bottom:0;width:100%}:host ::ng-deep .gt th,:host ::ng-deep .gt td{padding:2px 8px;line-height:normal}:host ::ng-deep .gt thead tr th .upper-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#4a4a4a;margin-bottom:0}:host ::ng-deep .gt thead tr th .lower-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#a7a7a7;margin-bottom:0}:host ::ng-deep .gt thead tr th{background-color:#ededed;position:sticky;position:-webkit-sticky;top:0;border-top:none!important;border-bottom:none!important;outline:none!important;box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4}:host ::ng-deep .gt thead tr th br{display:block;content:\"\";margin-top:-8px}:host ::ng-deep .gt thead tr th div.row{display:flex;flex-wrap:nowrap;justify-content:space-between;align-items:center;width:max-content}:host ::ng-deep .gt thead tr th div.sort-filter-container{display:flex;flex-wrap:nowrap;align-items:center;margin-left:.25rem;margin-right:auto}:host ::ng-deep .gt thead tr th span.mdi-filter-variant{font-size:13px!important;top:-1px!important;position:relative}:host ::ng-deep .gt thead tr th:first-of-type{box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4,inset 1px 0 #d4d4d4}:host ::ng-deep .gt tbody tr td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}:host ::ng-deep .gt tbody tr td:nth-of-type(n+2){box-shadow:inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}:host ::ng-deep .gt tbody tr td .upper-label{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:0px;color:#000;display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .gt tbody tr td .lower-label{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:0px;color:#a7a7a7;display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .gt tbody tr br{display:block;content:\"\";margin-top:-8px}:host ::ng-deep .gt tbody tr:nth-of-type(1) td{border-top:none!important}:host ::ng-deep .gt .custom-column-checkbox-checked,:host ::ng-deep .gt .custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}:host ::ng-deep .gt .custom-column-checkbox-checked{color:#268bff}:host ::ng-deep .gt .custom-column-checkbox-unchecked{color:#4a4a4a}:host ::ng-deep .bottom-border .gt tbody tr:last-of-type td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4}:host ::ng-deep .bottom-border .gt tbody tr:last-of-type td:nth-of-type(n+2){box-shadow:inset -1px 0 #d4d4d4}.table-container{overflow-x:auto;overflow-y:auto}.rowSelectCheckbox,#selectAllRowsCheckbox{cursor:pointer}.disable-checkbox{color:#dedede!important;pointer-events:none!important}.mdi-warning{color:#f3c639;font-size:16px;line-height:28px}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{opacity:1}.redcolor-status{color:#c62a2a}#no-filter-space{width:.875rem}::ng-deep .mat-button-toggle-appearance-standard .mat-button-toggle-label-content{line-height:1.875rem!important;width:2.625rem;padding:0 .625rem}input.numberInput{margin-right:-.8125rem;padding:0 0 0 .625rem;height:1.875rem}::ng-deep .mat-button-toggle-checked{background-color:#268bff!important;color:#fff!important}::ng-deep .mat-button-toggle-group-appearance-standard{border-radius:0}.hidden{display:none}.no-data-div{margin-top:2.5px}.no-data-div label{margin:0;width:auto;font-weight:500;background-color:#d3d3d3;padding:.3125rem 1.125rem;border-radius:.25rem}.column-values:nth-of-type(2){color:#a7a7a7!important}.custom-column-checkbox-checked,.custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}.custom-column-checkbox-checked{color:#268bff}.custom-column-checkbox-unchecked{color:#4a4a4a}.time-filter-checkboxes>div>p{color:#151b1e}::ng-deep .margin-bottom-zero .mat-radio-label{margin-bottom:0}:host ::ng-deep mat-radio-group br{margin-top:0!important}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio__background{width:var(--mat-radio-size);height:var(--mat-radio-size)}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio__inner-circle{border-width:calc(var(--mat-radio-size) / 2)}:host ::ng-deep mat-radio-group mat-radio-button .mdc-form-field>label{margin:0 0 0 4px;padding:0;top:-2px;position:relative}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio--disabled+label{color:var(--primary-text-color-dark)!important}:host ::ng-deep mat-radio-group mat-radio-button.mat-mdc-radio-button .mdc-form-field .mdc-radio{padding:0}:host ::ng-deep mat-radio-group mat-radio-button .mdc-form-field>label{left:-94px;font-size:12px;color:#4a4a4a;position:relative}::ng-deep .reject.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff0}::ng-deep .reject.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:#ff0}::ng-deep .resubmit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff0}::ng-deep .resubmit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:#ff0}::ng-deep .noAction.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:green}::ng-deep .noAction.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:green}::ng-deep .approve.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:green}::ng-deep .approve.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:green}::ng-deep .credit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:red}::ng-deep .credit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:red}::ng-deep .mat-radio-button.mat-radio-disabled .mat-radio-outer-circle{border-color:#00000061!important}::ng-deep .mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-inner-circle{background-color:#00000061!important}::ng-deep tr.white-background-row{background:#fff}::ng-deep tr.gray-background-row{background:#e9e9e980!important}.remarks-tooltip,.mdi-information,.mdi-information-outline,.seller-tooltip{font-size:.875rem;color:#268bff;position:relative;top:.1875rem;cursor:pointer}.seller-tooltip{top:-1px;float:right}::ng-deep .remarks-info-tooltip .tooltip-inner{max-width:19.25rem!important}.rating-icon,.lur-violation-icon{color:#268bff;cursor:pointer;position:relative;left:-2px}::ng-deep .rating-info-tooltip .tooltip-inner{max-width:800px!important}.spots-info-icon{color:#268bff;cursor:pointer;margin:1px 2px 0 -14px}.spots-info-icon-ol{color:#268bff;cursor:pointer;margin:1px 4px 0 -2px}::ng-deep .spot-info-tooltip .tooltip-inner{position:relative;max-width:220px!important;background:#fff;word-break:break-word;display:flex}::ng-deep .spot-info-tooltip-for-orderlisting-table .tooltip-inner{max-width:220px!important;background:#fff;word-break:break-word;display:flex}p.first-row{padding:.5rem .5rem 0;color:#000;white-space:nowrap;text-align:left}p.second-row{padding:2px .5rem .5rem;color:#000;white-space:nowrap;text-align:left}::ng-deep .gt-total-row-tooltip{opacity:1!important}::ng-deep .gt-total-row-tooltip .tooltip-inner{color:#000;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;background-color:#fff;padding:4px!important;width:100%;border-radius:2px!important}::ng-deep .gt-total-row-tooltip .arrow:before{border-top-color:#fff!important}.info-label{margin-left:4px;color:#268bff;vertical-align:text-top}::ng-deep .hierarchy-tooltip{max-width:-moz-fit-content;max-width:fit-content;width:310px!important}::ng-deep .hierarchy-tooltip .tooltip-inner{padding:4px!important;max-width:22.75rem;max-height:11.25rem}table.seller-hierarchy-table{table-layout:fixed}table.seller-hierarchy-table tr th{font-family:Roboto;font-size:.75rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:1.67;letter-spacing:normal;color:#5e5e5e;white-space:nowrap;background:#ededed;position:sticky;box-shadow:inset 0 1px #d4d4d4;top:0;z-index:1}table.seller-hierarchy-table tr th:nth-child(1){width:20px}table.seller-hierarchy-table tr th:first-of-type,table.seller-hierarchy-table tr td:first-of-type{width:20px;border-left:1px solid #d4d4d4}table.seller-hierarchy-table tr th:last-of-type,table.seller-hierarchy-table tr td:last-of-type{border-right:1px solid #d4d4d4;width:7.875rem!important}table.seller-hierarchy-table tr th:nth-of-type(2){width:7.75rem!important}table.seller-hierarchy-table tr td{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#4a4a4a;box-shadow:none!important;border-top:1px solid #d4d4d4;border-bottom:1px solid #d4d4d4}table.seller-hierarchy-table tr td:nth-of-type(2),table.seller-hierarchy-table tr td:nth-of-type(3){padding-top:.25rem}table.seller-hierarchy-table tr td span{display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;position:relative}section.hierarchy-table-container{max-height:8.75rem;overflow:auto}section.hierarchy-table-container::-webkit-scrollbar-track{margin-top:1.5rem}.difference-text{padding:.5rem;color:#000;text-align:left}::ng-deep .posted-avg-tooltip .tooltip-inner{width:13.8125rem!important}::ng-deep .drrBooked-info-tooltip{transform:translate(26px,6px)}::ng-deep .drrBooked-info-tooltip .tooltip-inner{max-width:307px!important;width:242px!important;background:#fff;word-break:break-word;display:flex;padding:4px!important;text-align:left}::ng-deep .drrBooked-info-tooltip .tooltip-inner p{color:#000}::ng-deep .drrBooked-info-tooltip .arrow:before{border-right-color:#fff!important}.clickable-data{cursor:pointer;color:#268bff!important;display:flex!important;align-items:center}.clickable-data .spot-details-download-icons{font-size:12px}.disabled-clickable-data{pointer-events:none;color:#d4d4d4!important}.spot-column-tooltip-message{color:#000;width:max-content;text-align:left}div.spinner-for-button-directive{position:relative;left:-1px}.clickable-row table tr.mat-row td{cursor:pointer!important}.tooltip-div-container{text-align:left!important;padding:12px 4px;color:#4a4a4a!important;font-size:12px!important;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}.notification-tooltip-div-container{text-align:left!important;padding:6px 8px;color:#4a4a4a!important;font-size:12px!important;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}.mdi-information,.mdi-information-outline{left:3px;top:1px}.mdi-information-outline{position:static}::ng-deep .team-user-tooltip.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .team-user-tooltip .tooltip-inner{opacity:1!important;width:-moz-fit-content!important;width:fit-content!important;max-width:520px;border-radius:2px;padding:0 4px!important}::ng-deep .team-user-tooltip .tooltip-inner .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:#fff!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .gt-icon-column-tooltip{opacity:1!important}::ng-deep .gt-icon-column-tooltip .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:#fff!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .gt-icon-column-tooltip.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .gt-icon-column-tooltip .tooltip-inner{width:100%}::ng-deep .tooltip-containing-table{opacity:1!important}::ng-deep .tooltip-containing-table .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:#fff!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .tooltip-containing-table.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .tooltip-containing-table li{margin:0!important;padding:0!important}::ng-deep .tooltip-containing-table ul{margin:0!important;padding-left:8px!important}::ng-deep .tooltip-containing-table .tooltip-inner{width:100%;max-width:230px}table.tooltip-table{table-layout:fixed;margin:4px 0 0;width:100%}table.tooltip-table th,table.tooltip-table td{padding:2px 8px;line-height:normal}table.tooltip-table thead tr th:first-of-type{box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4,inset 1px 0 #d4d4d4!important;border:none}table.tooltip-table thead tr th{color:#5e5e5e!important;font-size:12px;font-weight:500;font-family:Roboto;line-height:1.67;background-color:#ededed;border-top:none!important;border-bottom:none!important;outline:none!important;box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4}table.tooltip-table thead tr th div.row{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}table.tooltip-table tbody tr td{color:#5e5e5e!important;font-size:12px;font-weight:500;font-family:Roboto;line-height:1.67}table.tooltip-table tbody tr td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}table.tooltip-table tbody tr td:nth-of-type(n+2){box-shadow:inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}.bottom-border{border-bottom:1px solid #d4d4d4!important}i.disabled{pointer-events:none!important}.black-color-text{color:#000}.white-space-nowrap{white-space:nowrap}\n"] }]
808
813
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.AnnaSortService }, { type: i2.AnnaDateTimeFormatService }, { type: i3.AnnaFilterService }]; }, propDecorators: { showSkeletonLoading: [{
809
814
  type: Input
810
815
  }], tableHeaders: [{
@@ -897,4 +902,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
897
902
  type: ViewChildren,
898
903
  args: ["tableHeader"]
899
904
  }] } });
900
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1ub24tZWRpdGFibGUtZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbm5hLWNvcmUvc3JjL2xpYi9hbm5hLWdlbmVyaWMtdGFibGUtbGliL2NvbXBvbmVudHMvYW5uYS1ub24tZWRpdGFibGUtZ2VuZXJpYy10YWJsZS9hbm5hLW5vbi1lZGl0YWJsZS1nZW5lcmljLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FubmEtY29yZS9zcmMvbGliL2FubmEtZ2VuZXJpYy10YWJsZS1saWIvY29tcG9uZW50cy9hbm5hLW5vbi1lZGl0YWJsZS1nZW5lcmljLXRhYmxlL2FubmEtbm9uLWVkaXRhYmxlLWdlbmVyaWMtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCO0FBQzVCLE9BQU8sRUFDSCxTQUFTLEVBRVQsS0FBSyxFQUNMLFlBQVksRUFDWixTQUFTLEVBQ1QsTUFBTSxFQUNOLFlBQVksRUFHWixpQkFBaUIsRUFHakIsdUJBQXVCLEdBQzFCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLGdDQUFnQztBQUNoQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFTckQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sc0VBQXNFLENBQUM7QUFNakgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQy9GLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sa0ZB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RyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxnQ0FBZ0M7c0JBQXhDLEtBQUs7Z0JBQ0csOEJBQThCO3NCQUF0QyxLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csMkJBQTJCO3NCQUFuQyxLQUFLO2dCQUVJLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csMEJBQTBCO3NCQUFuQyxNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyw2QkFBNkI7c0JBQXRDLE1BQU07Z0JBbUNzQixxQkFBcUI7c0JBQWpELFlBQVk7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXIgaW1wb3J0IHN0YXRlbWVudHNcclxuaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCxcclxuICAgIE9uSW5pdCxcclxuICAgIElucHV0LFxyXG4gICAgVmlld0NoaWxkcmVuLFxyXG4gICAgUXVlcnlMaXN0LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgU2ltcGxlQ2hhbmdlcyxcclxuICAgIE9uQ2hhbmdlcyxcclxuICAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEFmdGVyVmlld0NoZWNrZWQsXHJcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLy8gVGhpcmQgcGFydHkgaW1wb3J0IHN0YXRlbWVudHNcclxuaW1wb3J0IHsgY2xvbmVEZWVwLCBpc0VxdWFsLCB1bmlxIH0gZnJvbSBcImxvZGFzaC1lc1wiO1xyXG5cclxuLy9zdWItZW50cmllcyBvZiBhbm5hIGxpYiBpbXBvcnQgc3RhdGVtZW50XHJcbmltcG9ydCB7XHJcbiAgICBJR3RHZW5lcmFsQ29uZmlnLFxyXG4gICAgSUd0VGFibGVIZWFkZXIsXHJcbiAgICBJSGVhZGVySW5mbyxcclxuICAgIElUb3RhbFJvd0luZm8sXHJcbn0gZnJvbSBcIi4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL21vZGVscy9hbm5hLW5vbi1lZGl0YWJsZS1ndC1tb2RlbHNcIjtcclxuaW1wb3J0IHsgQW5uYURhdGVUaW1lRm9ybWF0U2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9zZXJ2aWNlcy9hbm5hLWRhdGUtdGltZS1mb3JtYXQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBJV2Vla0NhbGVuZGFyIH0gZnJvbSBcIi4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL21vZGVscy9hbm5hLWdsb2JhbC1kcm9wZG93bi1jb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHtcclxuICAgIEd0Q29sdW1uSWNvbkVtaXR0ZWREYXRhLFxyXG4gICAgUmF0aW5nU2VsbGVyR3JvdXBIaWVyYXJjaHksXHJcbn0gZnJvbSBcIi4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL21vZGVscy9hbm5hLWdlbmVyaWMtZGF0YS10eXBlLm1vZGVsXCI7XHJcbmltcG9ydCB7IEFubmFTb3J0U2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9zZXJ2aWNlcy9hbm5hLXNvcnQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBBbm5hRmlsdGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9zZXJ2aWNlcy9hbm5hLWZpbHRlci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IE5nQ2lyY2xlUHJvZ3Jlc3NNb2R1bGUgfSBmcm9tIFwibmctY2lyY2xlLXByb2dyZXNzXCI7XHJcbmltcG9ydCB7IEFubmFDb2x1bW5UaW1lRmlsdGVyQ29tcG9uZW50IH0gZnJvbSBcIi4uL2FubmEtY29sdW1uLWZpbHRlcnMvYW5uYS1jb2x1bW4tdGltZS1maWx0ZXIvYW5uYS1jb2x1bW4tdGltZS1maWx0ZXIuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEFubmFDb2x1bW5EYXRlUmFuZ2VGaWx0ZXJDb21wb25lbnQgfSBmcm9tIFwiLi4vYW5uYS1jb2x1bW4tZmlsdGVycy9hbm5hLWNvbHVtbi1kYXRlLXJhbmdlLWZpbHRlci9hbm5hLWNvbHVtbi1kYXRlLXJhbmdlLWZpbHRlci5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgQW5uYUNvbHVtblNsaWRlckZpbHRlckNvbXBvbmVudCB9IGZyb20gXCIuLi9hbm5hLWNvbHVtbi1maWx0ZXJzL2FubmEtY29sdW1uLXNsaWRlci1maWx0ZXIvYW5uYS1jb2x1bW4tc2xpZGVyLWZpbHRlci5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgQW5uYUNvbHVtbkNoZWNrYm94RmlsdGVyQ29tcG9uZW50IH0gZnJvbSBcIi4uL2FubmEtY29sdW1uLWZpbHRlcnMvYW5uYS1jb2x1bW4tY2hlY2tib3gtZmlsdGVyL2FubmEtY29sdW1uLWNoZWNrYm94LWZpbHRlci5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgQW5uYU5vRGF0YUNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9jb21wb25lbnRzL2FubmEtbm8tZGF0YS9hbm5hLW5vLWRhdGEuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEFubmFFc3RJY29uVGVtcGxhdGVDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvY29tcG9uZW50cy9hbm5hLWVzdC1pY29uLXRlbXBsYXRlL2FubmEtZXN0LWljb24tdGVtcGxhdGUuY29tcG9uZW50XCI7XHJcblxyXG5pbXBvcnQgeyBNYXRSYWRpb01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9yYWRpb1wiO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBBbm5hSWNvbkNvbHVtbkNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9jb21wb25lbnRzL2FubmEtaWNvbi1jb2x1bW4vYW5uYS1pY29uLWNvbHVtbi5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgc2hvd0VsbGlwc2lzVGV4dE9uSG92ZXJEaXJlY3RpdmUgfSBmcm9tIFwiLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvZGlyZWN0aXZlcy9zaG93LWVsbGlwc2lzLXRleHQvc2hvdy1lbGxpcHNpcy10ZXh0LmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQgeyBOZ3hTa2VsZXRvbkxvYWRlck1vZHVsZSB9IGZyb20gXCJuZ3gtc2tlbGV0b24tbG9hZGVyXCI7XHJcbmltcG9ydCB7IE5nYlRvb2x0aXAgfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuaW1wb3J0IHsgTWF0VGFibGVNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGVcIjtcclxuaW1wb3J0IHtcclxuICAgIE5nQ2xhc3MsXHJcbiAgICBOZ1N0eWxlLFxyXG4gICAgTmdGb3IsXHJcbiAgICBOZ0lmLFxyXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcclxuICAgIE5nU3dpdGNoLFxyXG4gICAgTmdTd2l0Y2hDYXNlLFxyXG4gICAgTmdTd2l0Y2hEZWZhdWx0LFxyXG4gICAgQXN5bmNQaXBlLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHsgUmFkaW9CdXR0b25Nb2RlbCB9IGZyb20gXCIuLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9tb2RlbHMvYW5uYS10b29sdGlwLm1vZGVsXCI7XHJcblxyXG5pbnRlcmZhY2Uga2V5VmFsdWVUb29sdGlwVHlwZSB7XHJcbiAgICBrZXk6IHN0cmluZztcclxuICAgIHZhbHVlOiBzdHJpbmc7XHJcbn1cclxuaW50ZXJmYWNlIHRhYmxlVG9vbHRpcFR5cGUge1xyXG4gICAgdG9vbHRpcFRhYmxlSGVhZGVyOiBzdHJpbmdbXTtcclxuICAgIHRvb2x0aXBUYWJsZUJvZHk6IHN0cmluZ1tdW107XHJcbiAgICB0YWJsZUhlYWRlck1zZzogc3RyaW5nW107XHJcbiAgICB0YWJsZUZvb3Rlck1zZzogc3RyaW5nW107XHJcbiAgICBpbm5lckh0bWw6IHN0cmluZztcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogXCJhbm5hLWNvcmUtbm9uLWVkaXRhYmxlLWdlbmVyaWMtdGFibGUtbGliXCIsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCIuL2FubmEtbm9uLWVkaXRhYmxlLWdlbmVyaWMtdGFibGUuY29tcG9uZW50Lmh0bWxcIixcclxuICAgIHN0eWxlVXJsczogW1wiLi9hbm5hLW5vbi1lZGl0YWJsZS1nZW5lcmljLXRhYmxlLmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICAgIE5nQ2xhc3MsXHJcbiAgICAgICAgTmdTdHlsZSxcclxuICAgICAgICBNYXRUYWJsZU1vZHVsZSxcclxuICAgICAgICBOZ0ZvcixcclxuICAgICAgICBOZ0lmLFxyXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXHJcbiAgICAgICAgTmdiVG9vbHRpcCxcclxuICAgICAgICBOZ3hTa2VsZXRvbkxvYWRlck1vZHVsZSxcclxuICAgICAgICBzaG93RWxsaXBzaXNUZXh0T25Ib3ZlckRpcmVjdGl2ZSxcclxuICAgICAgICBOZ1N3aXRjaCxcclxuICAgICAgICBOZ1N3aXRjaENhc2UsXHJcbiAgICAgICAgQW5uYUljb25Db2x1bW5Db21wb25lbnQsXHJcbiAgICAgICAgRm9ybXNNb2R1bGUsXHJcbiAgICAgICAgTWF0UmFkaW9Nb2R1bGUsXHJcbiAgICAgICAgTmdTd2l0Y2hEZWZhdWx0LFxyXG4gICAgICAgIEFubmFOb0RhdGFDb21wb25lbnQsXHJcbiAgICAgICAgQW5uYUNvbHVtbkNoZWNrYm94RmlsdGVyQ29tcG9uZW50LFxyXG4gICAgICAgIEFubmFDb2x1bW5TbGlkZXJGaWx0ZXJDb21wb25lbnQsXHJcbiAgICAgICAgQW5uYUNvbHVtbkRhdGVSYW5nZUZpbHRlckNvbXBvbmVudCxcclxuICAgICAgICBBbm5hQ29sdW1uVGltZUZpbHRlckNvbXBvbmVudCxcclxuICAgICAgICBBbm5hRXN0SWNvblRlbXBsYXRlQ29tcG9uZW50LFxyXG4gICAgICAgIE5nQ2lyY2xlUHJvZ3Jlc3NNb2R1bGUsXHJcbiAgICAgICAgQXN5bmNQaXBlLFxyXG4gICAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFubmFOb25FZGl0YWJsZUdlbmVyaWNUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdDaGVja2VkIHtcclxuICAgIEBJbnB1dCgpIHNob3dTa2VsZXRvbkxvYWRpbmc6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSB0YWJsZUhlYWRlcnM6IElHdFRhYmxlSGVhZGVyW107XHJcbiAgICBASW5wdXQoKSB0YWJsZURhdGE6IGFueVtdO1xyXG4gICAgQElucHV0KCkgY2xvbmVkVGFibGVEYXRhOiBhbnlbXTtcclxuICAgIEBJbnB1dCgpIGd0R2VuZXJhbENvbmZpZzogSUd0R2VuZXJhbENvbmZpZztcclxuICAgIEBJbnB1dCgpIHRvdGFsUm93SW5mbz86IElUb3RhbFJvd0luZm9bXTtcclxuICAgIEBJbnB1dCgpIGd0RGltZW5zaW9uOiB7XHJcbiAgICAgICAgcm93SGVpZ2h0OiBudW1iZXI7XHJcbiAgICAgICAgaGVhZGVySGVpZ2h0OiBudW1iZXI7XHJcbiAgICAgICAgZGF0YU9uVG9wSGVpZ2h0OiBudW1iZXI7XHJcbiAgICAgICAgbWFyZ2luRnJvbUJvdHRvbTogbnVtYmVyO1xyXG4gICAgICAgIHRhYmxlSGVpZ2h0Pzogc3RyaW5nO1xyXG4gICAgfTtcclxuICAgIEBJbnB1dCgpIHRhYmxlQ2xhc3M6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIG1heGltdW1Sb3dzV2hpY2hDYW5CZVJlbmRlcmVkV2l0aG91dFNjcm9sbDogbnVtYmVyID0gNTtcclxuICAgIEBJbnB1dCgpIGZpeE51bWJlck9mUm93c0ZvclBvcHVwOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBsaW1pdDogbnVtYmVyID0gMzA7XHJcbiAgICBASW5wdXQoKSBpbmNsdWRlQm9yZGVySW5UYWJsZUhlaWdodDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBASW5wdXQoKSBkb3dubG9hZEluUHJvZ3Jlc3M6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBwZXJjZW50RG9uZTogbnVtYmVyO1xyXG4gICAgQElucHV0KCkgc3RhcnJlZEluUHJvZ3Jlc3M6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBjbGlja2FibGVSb3c6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIHNldFRhYmxlSGVpZ2h0V2hlblJvd1NpemVJc0ZpeGVkOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIHRhYmxlQm9yZGVyQm90dG9tQ2xhc3NSZXF1aXJlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBASW5wdXQoKSBoaWRlU29tZVRkczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgdGRzSGF2ZVJvd1NwYW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIG11bHRpcGxlVGFibGVzUHJlc2VudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgc2hvd09ySGlkZVRvZ2dsZUZvclRvdGFsUm93OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgQE91dHB1dCgpIHRvZ2dsZUNoZWNrYm94ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIHRvZ2dsZVJvd0NoZWNrYm94ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIHRvZ2dsZUhlYWRlckNoZWNrYm94ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIHVuZG9JY29uQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBmaWx0ZXJBcHBsaWVkVG9UYWJsZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBzb3J0aW5nQXBwbGllZFRvVGFibGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgcm93Q2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSByYWRpb0J1dHRvblNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIGNvbHVtbkZpbHRlck9wZW5lZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBjb2x1bW5GaWx0ZXJDbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgZ3RJY29uQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBndFNWR0ljb25DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIGd0VGV4dEFjdGlvbkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgZ3RWaWV3RGV0YWlsQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBndElubmVySFRNTENsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgZG93bmxvYWRTcG90RGV0YWlscyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBjbGlja2FibGVEYXRhQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSB0b3RhbFJvd0ljb25DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIG5vdGlmaWNhdGlvbkljb25Ib3ZlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBub3RpZmljYXRpb25JY29uSG92ZXJMZWF2ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBlZGl0YWJsZUlucHV0RWRpdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIHJhZGlvQnV0dG9uTWVzc2FnZUljb25DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAgIG51bWJlck9mU2tlbGV0b25Sb3dzOiBudW1iZXJbXVtdID0gQXJyYXkoMjApLmZpbGwoMCk7XHJcbiAgICB0YWJsZURhdGFXcmFwcGVyOiBhbnlbXTtcclxuICAgIHJvd0NoZWNrZWQ6IGJvb2xlYW47XHJcbiAgICBpc0FsbFJvd3NDaGVja2VkOiBib29sZWFuO1xyXG4gICAgbm9EYXRhV2lkdGg6IHN0cmluZyA9IFwiNTAlXCI7XHJcbiAgICBtYXJrZWRGb3JDcmVkaXRTdGF0dXM6IHN0cmluZztcclxuICAgIG1hcmtlZEZvck1HU3RhdHVzOiBzdHJpbmc7XHJcbiAgICBmaWx0ZXJBbGlnbm1lbnQ6IHN0cmluZyA9IFwiYm90dG9tIGF1dG9cIjtcclxuXHJcbiAgICAvL1NvcnQgYW5kIEZpbHRlclxyXG4gICAgdG9vbHRpcFJhZGlvVGV4dE1hcDogTWFwPGFueSwgYW55PjtcclxuICAgIGZpbHRlclRhYk9iamVjdHM6IGFueVtdO1xyXG4gICAgdG9vbHRpcDogYW55O1xyXG4gICAgZGlzYWJsZUNvbHVtbkNsZWFyQWxsQnRuOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIG1hcmdpbiA9IDU7XHJcblxyXG4gICAgLy9XZWVrIEZpbHRlclxyXG4gICAgbXVsdGlXZWVrUGlja2VyQ29uZmlnOiBJV2Vla0NhbGVuZGFyO1xyXG5cclxuICAgIHRhYmxlQ29sdW1uczogc3RyaW5nW10gPSBbXTtcclxuICAgIHRvdGFsUm93Q29sdW1uczogc3RyaW5nW10gPSBudWxsO1xyXG4gICAgYmluZFZhbHVlRnVuY0NhbGxlZDogYm9vbGVhbjtcclxuXHJcbiAgICBoaWVyYXJjaHlUb29sdGlwOiB7IG9wZW46ICgpID0+IHZvaWQ7IGNsb3NlOiAoKSA9PiB2b2lkIH07XHJcbiAgICBzZWxsZXJHcm91cEhpZXJhcmNoeTogUmF0aW5nU2VsbGVyR3JvdXBIaWVyYXJjaHlbXTtcclxuICAgIHNob3dGaWx0ZXJUb29sdGlwVGFiczogYm9vbGVhbjsgLy9DaGFuZ2UgdGhlIE5hbWVcclxuXHJcbiAgICBpc1Njcm9sbGVkTGVmdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcm93Qm9yZGVyV2lkdGg6IG51bWJlciA9IDI7XHJcblxyXG4gICAgc2FtZVRvb2x0aXBDbGlja2VkOiBib29sZWFuO1xyXG4gICAgaXNTY3JvbGxFbmRlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBtYXJnaW5Ub3A6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBAVmlld0NoaWxkcmVuKFwidGFibGVIZWFkZXJcIikgdmlld0NoaWxkVGFibGVIZWFkZXJzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XHJcblxyXG4gICAgaXNEaWZmZXJlbmNlTGVzc1RoYW4yNVBlcmNlbnQ6IGJvb2xlYW47XHJcbiAgICBzdGFydDogbnVtYmVyID0gMDtcclxuICAgIGVuZDogbnVtYmVyID0gdGhpcy5saW1pdCArIHRoaXMuc3RhcnQ7XHJcbiAgICByZW5kZXJlZERhdGE6IGFueVtdO1xyXG4gICAgc2VsZWN0ZWRJbnZlbnRvcnlJZEZvckRvd25sb2FkOiBudW1iZXI7XHJcbiAgICBzZWxlY3RlZERlbW9ncmFwaGljRm9yRG93bmxvYWQ6IGFueTtcclxuICAgIHNlbGVjdGVkUm93VHlwZUZvckRvd25sb2FkOiBzdHJpbmc7XHJcbiAgICBoZWlnaHRPZkNoZWNrYm94VG9vbHRpcEZpbHRlcjogbnVtYmVyO1xyXG4gICAgaXNOb0RhdGFUb0Rpc3BsYXlTdWJqZWN0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgc2VsZWN0ZWRTdGFycmVkT3JkZXJJZDogc3RyaW5nO1xyXG5cclxuICAgIHRleHRBY3Rpb25Ub29sdGlwOiBrZXlWYWx1ZVRvb2x0aXBUeXBlW10gPSBbXTtcclxuICAgIHRvb2x0aXBDb250YWluaW5nVGFibGU6IHRhYmxlVG9vbHRpcFR5cGUgPSBudWxsO1xyXG4gICAgdGFibGVCb3R0b21Cb3JkZXJDbGFzczogc3RyaW5nID0gbnVsbDtcclxuICAgIHNob3dDaGVja2JveGVzRm9yVGltZUZpbHRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIHByaXZhdGUgYW5uYVNvcnRTZXJ2aWNlOiBBbm5hU29ydFNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIGFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2U6IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIGFubmFGaWx0ZXJTZXJ2aWNlOiBBbm5hRmlsdGVyU2VydmljZSxcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuc2V0VG9vbHRpcFJhZGlvTmFtZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZXRNYXJnaW5MZWZ0Rm9yRmlsdGVySWNvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShgLS1oaWRlLXRvdGFsLXJvdy1zY3JvbGxiYXItb2Zmc2V0YCwgXCIwcHhcIik7XHJcbiAgICAgICAgdGhpcy5zZXRGaWx0ZXJBbGlnbm1lbnRCYXNlZE9uU2NyZWVuUmVzb2x1dGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGRldGVjdENoYW5nZXMoKSB7XHJcbiAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgY2hhbmdlcyAmJlxyXG4gICAgICAgICAgICBjaGFuZ2VzW1wiZ3REaW1lbnNpb25cIl0gJiZcclxuICAgICAgICAgICAgY2hhbmdlc1tcImd0RGltZW5zaW9uXCJdLmN1cnJlbnRWYWx1ZSAmJlxyXG4gICAgICAgICAgICB0aGlzLnNldFRhYmxlSGVpZ2h0V2hlblJvd1NpemVJc0ZpeGVkXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VGFibGVIZWlnaHQoKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRUYWJsZUJvdHRvbUJvcmRlcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5zaG93U2tlbGV0b25Mb2FkaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFibGVEYXRhID0gdGhpcy5udW1iZXJPZlNrZWxldG9uUm93cztcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlZERhdGEgPSB0aGlzLm51bWJlck9mU2tlbGV0b25Sb3dzO1xyXG4gICAgICAgICAgICB0aGlzLmlzTm9EYXRhVG9EaXNwbGF5U3ViamVjdCQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VGFibGVCb3R0b21Cb3JkZXIoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICBjaGFuZ2VzW1wicGVyY2VudERvbmVcIl0gfHxcclxuICAgICAgICAgICAgY2hhbmdlc1tcImRvd25sb2FkSW5Qcm9ncmVzc1wiXSB8fFxyXG4gICAgICAgICAgICAoY2hhbmdlc1tcInN0YXJyZWRJblByb2dyZXNzXCJdICYmIGNoYW5nZXNbXCJzdGFycmVkSW5Qcm9ncmVzc1wiXS5jdXJyZW50VmFsdWUgIT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICAvL25vIHRhc2sgd2lsbCBiZSBwZXJmb3JtZWRcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldEluaXRpYWxSb3dzRm9yVGFibGUoKTtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlRW5hYmxlRWFjaENvbHVtblRvb2x0aXBJY29uKCk7XHJcbiAgICAgICAgICAgIHRoaXMudGFibGVDb2x1bW5zID0gdGhpcy50YWJsZUhlYWRlcnMuZmlsdGVyKCh4KSA9PiB4LnZpc2libGUpLm1hcCgoeCkgPT4geC5oZWFkZXJJbmZvWzBdLm9iamVjdEtleSk7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICh0aGlzLnRhYmxlRGF0YSAmJiB0aGlzLnRhYmxlRGF0YS5sZW5ndGggPT0gMCkgfHxcclxuICAgICAgICAgICAgICAgICh0aGlzLnRhYmxlRGF0YS5sZW5ndGggPT0gMiAmJiB0aGlzLmNoZWNrSWZBbGxUaGVFbGVtZW50c0FyZVplcm8oKSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IEFycmF5KDIpLmZpbGwoMCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVkRGF0YSA9IGNsb25lRGVlcCh0aGlzLnRhYmxlRGF0YSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hcmdpblRvcCA9IC10aGlzLmd0RGltZW5zaW9uLnJvd0hlaWdodCAtIHRoaXMuZ3REaW1lbnNpb24ucm93SGVpZ2h0IC8gMiArIFwicHhcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNOb0RhdGFUb0Rpc3BsYXlTdWJqZWN0JC5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc05vRGF0YVRvRGlzcGxheVN1YmplY3QkLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNob3dTa2VsZXRvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zZXRUYWJsZUJvdHRvbUJvcmRlcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9zZXR0aW5nIHRhYmxlIGNvbHVtbiBoZXJlIGFzIHdlbGwgYmVjYXVzZSB3aGlsZSBzaG93aW5nIHNrZWxldG9uIGxvYWRlciwgd2Ugc2hvdWxkIHNob3cgdGFibGUgaGVhZGVycy5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGNoYW5nZXNbXCJ0YWJsZUhlYWRlcnNcIl0gJiZcclxuICAgICAgICAgICAgIWlzRXF1YWwoY2hhbmdlc1tcInRhYmxlSGVhZGVyc1wiXS5jdXJyZW50VmFsdWUsIGNoYW5nZXNbXCJ0YWJsZUhlYWRlcnNcIl0ucHJldmlvdXNWYWx1ZSlcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy50YWJsZUNvbHVtbnMgPSB0aGlzLnRhYmxlSGVhZGVycy5maWx0ZXIoKHgpID0+IHgudmlzaWJsZSkubWFwKCh4KSA9PiB4LmhlYWRlckluZm9bMF0ub2JqZWN0S2V5KTtcclxuICAgICAgICAgICAgdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlID0gbmV3IE1hcCgpO1xyXG4gICAgICAgICAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmluaXRpYWxWYWx1ZU1hcCA9IG5ldyBNYXAoKTtcclxuICAgICAgICAgICAgLy8gdGhpcy5zZXRDb2x1bW5Tb3J0U3RhdGVNYXAoKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVTdGF0ZU9iamVjdCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNoYW5nZXNbXCJ0b3RhbFJvd0luZm9cIl0gJiYgY2hhbmdlc1tcInRvdGFsUm93SW5mb1wiXS5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy50b3RhbFJvd0NvbHVtbnMgPSB0aGlzLnRvdGFsUm93SW5mby5tYXAoKHgpID0+IHguY29sTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEZpbHRlckFsaWdubWVudEJhc2VkT25TY3JlZW5SZXNvbHV0aW9uKCkge1xyXG4gICAgICAgIGxldCB2aWV3cG9ydEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcclxuICAgICAgICBpZiAodmlld3BvcnRIZWlnaHQgPCA3NDApIHtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJBbGlnbm1lbnQgPSBcImxlZnQgcmlnaHRcIjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlckFsaWdubWVudCA9IFwiYm90dG9tIGxlZnQgcmlnaHRcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGFibGVCb3R0b21Cb3JkZXIoKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLnRhYmxlQm9yZGVyQm90dG9tQ2xhc3NSZXF1aXJlZCAmJlxyXG4gICAgICAgICAgICB0aGlzLnRhYmxlRGF0YSAmJlxyXG4gICAgICAgICAgICB0aGlzLnRhYmxlRGF0YS5sZW5ndGggJiZcclxuICAgICAgICAgICAgdGhpcy5tYXhpbXVtUm93c1doaWNoQ2FuQmVSZW5kZXJlZFdpdGhvdXRTY3JvbGwgPCB0aGlzLnRhYmxlRGF0YS5sZW5ndGhcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy50YWJsZUJvdHRvbUJvcmRlckNsYXNzID0gXCJib3R0b20tYm9yZGVyXCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy50YWJsZUJvdHRvbUJvcmRlckNsYXNzID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tJZkFsbFRoZUVsZW1lbnRzQXJlWmVybygpIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMudGFibGVEYXRhLnNvbWUoKGl0ZW0pID0+IGl0ZW0gIT0gMCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd0hpZGVUb3RhbFJvdygpIHtcclxuICAgICAgICB0aGlzLmd0R2VuZXJhbENvbmZpZy50b3RhbFJvdyA9ICF0aGlzLmd0R2VuZXJhbENvbmZpZy50b3RhbFJvdztcclxuICAgICAgICBpZiAoIXRoaXMuZ3RHZW5lcmFsQ29uZmlnLnRvdGFsUm93KSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShgLS1oaWRlLXRvdGFsLXJvdy1zY3JvbGxiYXItb2Zmc2V0YCwgXCI1MHB4XCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShgLS1oaWRlLXRvdGFsLXJvdy1zY3JvbGxiYXItb2Zmc2V0YCwgXCIwcHhcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNldFRhYmxlSGVpZ2h0KCkge1xyXG4gICAgICAgIGxldCB2aWV3cG9ydEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcclxuICAgICAgICBsZXQgcm93SGVpZ2h0ID0gdGhpcy5ndERpbWVuc2lvbi5yb3dIZWlnaHQ7XHJcbiAgICAgICAgbGV0IGhlYWRlckhlaWdodCA9IHRoaXMuZ3REaW1lbnNpb24uaGVhZGVySGVpZ2h0O1xyXG4gICAgICAgIGxldCBkYXRhT25Ub3BIZWlnaHQgPSB0aGlzLmd0RGltZW5zaW9uLmRhdGFPblRvcEhlaWdodDtcclxuICAgICAgICBsZXQgbWFyZ2luRnJvbUJvdHRvbSA9IHRoaXMuZ3REaW1lbnNpb24ubWFyZ2luRnJvbUJvdHRvbTtcclxuICAgICAgICBsZXQgYWN0dWFsVGFibGVIZWlnaHQ7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmZpeE51bWJlck9mUm93c0ZvclBvcHVwKSB7XHJcbiAgICAgICAgICAgIGxldCBtYXhOb09mUm93c1RvRGlzcGxheSA9IHZpZXdwb3J0SGVpZ2h0IDwgNzQwID8gNSA6IDEwO1xyXG4gICAgICAgICAgICB0aGlzLm1heGltdW1Sb3dzV2hpY2hDYW5CZVJlbmRlcmVkV2l0aG91dFNjcm9sbCA9IG1heE5vT2ZSb3dzVG9EaXNwbGF5O1xyXG4gICAgICAgICAgICBhY3R1YWxUYWJsZUhlaWdodCA9IHRoaXMubWF4aW11bVJvd3NXaGljaENhbkJlUmVuZGVyZWRXaXRob3V0U2Nyb2xsICogcm93SGVpZ2h0ICsgaGVhZGVySGVpZ2h0O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBtaW5IZWlnaHRGb3JUYWJsZSA9IGhlYWRlckhlaWdodCArIDMgKiByb3dIZWlnaHQ7XHJcbiAgICAgICAgICAgIHZpZXdwb3J0SGVpZ2h0ID0gdmlld3BvcnRIZWlnaHQgPD0gZGF0YU9uVG9wSGVpZ2h0ID8gZGF0YU9uVG9wSGVpZ2h0ICsgbWluSGVpZ2h0Rm9yVGFibGUgOiB2aWV3cG9ydEhlaWdodDtcclxuICAgICAgICAgICAgbGV0IGhlaWdodExlZnRGb3JUYWJsZSA9IHZpZXdwb3J0SGVpZ2h0IC0gZGF0YU9uVG9wSGVpZ2h0IC0gbWFyZ2luRnJvbUJvdHRvbTtcclxuICAgICAgICAgICAgdGhpcy5tYXhpbXVtUm93c1doaWNoQ2FuQmVSZW5kZXJlZFdpdGhvdXRTY3JvbGwgPVxyXG4gICAgICAgICAgICAgICAgTWF0aC5jZWlsKChoZWlnaHRMZWZ0Rm9yVGFibGUgLSBoZWFkZXJIZWlnaHQgLSByb3dIZWlnaHQpIC8gcm93SGVpZ2h0KSArIDE7XHJcbiAgICAgICAgICAgIGFjdHVhbFRhYmxlSGVpZ2h0ID0gdmlld3BvcnRIZWlnaHQgLSBkYXRhT25Ub3BIZWlnaHQgLSBtYXJnaW5Gcm9tQm90dG9tO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbGV0IGFjdHVhbFRhYmxlSGVpZ2h0ID0gaGVpZ2h0TGVmdEZvclRhYmxlIC0gKChoZWlnaHRMZWZ0Rm9yVGFibGUgLSBoZWFkZXJIZWlnaHQgLSByb3dIZWlnaHQpICUgcm93SGVpZ2h0KTtcclxuXHJcbiAgICAgICAgdGhpcy5ndERpbWVuc2lvbi50YWJsZUhlaWdodCA9IGAke2FjdHVhbFRhYmxlSGVpZ2h0fXB4YDtcclxuXHJcbiAgICAgICAgdGhpcy5udW1iZXJPZlNrZWxldG9uUm93cyA9IHRoaXMubWF4aW11bVJvd3NXaGljaENhbkJlUmVuZGVyZWRXaXRob3V0U2Nyb2xsXHJcbiAgICAgICAgICAgID8gQXJyYXkodGhpcy5tYXhpbXVtUm93c1doaWNoQ2FuQmVSZW5kZXJlZFdpdGhvdXRTY3JvbGwpLmZpbGwoMClcclxuICAgICAgICAgICAgOiBBcnJheSg1KS5maWxsKDApO1xyXG4gICAgfVxyXG5cclxuICAgIHRyYWNrQnlGbihpbmRleDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIGluZGV4O1xyXG4gICAgfVxyXG5cclxuICAgIHNldFRvb2x0aXBSYWRpb05hbWVzKCkge1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcCA9IG5ldyBNYXAoKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiU3RhcnRUaW1lRm9yRmlsdGVyXCIsIFwiU3RhcnQgVGltZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiRW5kVGltZUZvckZpbHRlclwiLCBcIkVuZCBUaW1lXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJzdGFydFRpbWVGb3JGaWx0ZXJcIiwgXCJTdGFydCBUaW1lXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJlbmRUaW1lRm9yRmlsdGVyXCIsIFwiRW5kIFRpbWVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInN0YXJ0X3RpbWVfZm9yX2ZpbHRlclwiLCBcIlN0YXJ0IFRpbWVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImVuZF90aW1lX2Zvcl9maWx0ZXJcIiwgXCJFbmQgVGltZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicHJpbWFyeUFFTmFtZVwiLCBcIlByaW1hcnkgQUVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInJlZ2lvblwiLCBcIlJlZ2lvblwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYWdlbmN5TmFtZVwiLCBcIkFnZW5jeVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwibG9jYXRpb25cIiwgXCJMb2NhdGlvblwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYWR2ZXJ0aXNlck5hbWVcIiwgXCJBZHZlcnRpc2VyXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwcm9kdWN0Q29kZVwiLCBcIlByb2R1Y3QgQ29kZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZmxpZ2h0U3RhcnREYXRlXCIsIFwiU3RhcnQgRGF0ZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZmxpZ2h0RW5kRGF0ZVwiLCBcIkVuZCBEYXRlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJvcmRlcklkQW5kUmV2TnVtYmVyXCIsIFwiU1ROIE9yZGVyIy1SZXYjXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJzdGF0aW9uT3JkZXJOdW1iZXJcIiwgXCJTVE4gT3JkZXIjXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJhbHRlcm5hdGVPcmRlcklkXCIsIFwiQWx0L1JlcCBPcmRlciAjXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJncnBcIiwgXCJHUlBcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImNwcFwiLCBcIkNQUFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiaW1wc1wiLCBcIklNUFNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImNwbVwiLCBcIkNQTVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwib2ZmZXJlZE1Hc1wiLCBcIk9mZmVyZWQgTUdcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIm91dHN0YW5kaW5nUEVcIiwgXCJPL1MgUEVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIm9mZmVyZWRBRFVzXCIsIFwiT2ZmZXJlZCBBRFVzXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJ1ZERlZmljaXRWYWx1ZVwiLCBcIk8vUyBBdWQgRGVsdGFcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInN0YXJ0RW5kVGltZU11bHRpXCIsIFwiVGltZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkVmFsdWVcIiwgXCJCb29rZWRcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZFNwb3RzXCIsIFwiU3BvdHNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlVzZXJDcmVkaXRlZFZhbHVlXCIsIFwiVXNlciBDcmVkaXRlZFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiVXNlclVucmVzb2x2ZWRWYWx1ZVwiLCBcIlVzZXIgVW5yZXNvbHZlZFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQnV5ZXJBZGRlZFZhbHVlXCIsIFwiQnV5ZXIgQWRkZWRcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkJ1eWVyRGVsZXRlZFZhbHVlXCIsIFwiQnV5ZXIgRGVsZXRlZFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwidXNlckNoYW5nZXNcIiwgXCJVc2VyIENoYW5nZXNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJ1eWVyQ2hhbmdlc1wiLCBcIkJ1eWVyIENoYW5nZXNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInVzZXJNR1wiLCBcIlVzZXIgTUdcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInVzZXJBRFVzXCIsIFwiVXNlciBBRFVzXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJpbnZlbnRvcnlDb2RlXCIsIFwiSW52ZW50b3J5IENvZGVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInByb2dyYW1cIiwgXCJQcm9ncmFtXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJhZ2VuY3lcIiwgXCJBZ2VuY3lcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImFkdmVydGlzZXJcIiwgXCJBZHZlcnRpc2VyXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJzdGFydERhdGVcIiwgXCJTdGFydCBEYXRlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJlbmREYXRlXCIsIFwiRW5kIERhdGVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImRhdGVcIiwgXCJEYXRlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJyY3ZQcmVlbXB0XCIsIFwiJCBNYWRlZ29vZCBQRXNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIm9zUHJlZW1wdFwiLCBcIiQgTy9TIFBFc1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicmN2VW5kZXJEbHlcIiwgXCJSZWNvdmVyZWQgVURcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIm9zVW5kZXJEbHlcIiwgXCJPL3MgVW5kZXIgRGx5XCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwcmltYXJ5QWVcIiwgXCJQcmltYXJ5IEFFXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJyZWdpb25cIiwgXCJSZWdpb25cIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInJldkNvZGUxXCIsIFwiUmV2IGNvZGUgMVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwib3JkZXJOb1Jldk5vXCIsIFwiU1ROIE9yZGVyIy1SZXYjXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJyZXZDb2RlMlwiLCBcIlJldiBjb2RlIDJcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInJldkNvZGUzXCIsIFwiUmV2IGNvZGUgM1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkXCIsIFwiJCBCb29rZWRcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInNwb3RzXCIsIFwiU3BvdHNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInBvc3RlZEF1ZFBlcmNlbnRcIiwgXCJQb3N0ZWQgJVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicmV2aXNpb25cIiwgXCJSZXZpc2lvblwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYnV5ZXJPcmRlcklkXCIsIFwiQUxUL1JFUCBPcmRlciNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImRlbW9cIiwgXCJEZW1vXCIpO1xyXG5cclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYXZlcmFnZVJhdGVUaGlzWWVhclwiLCBcIkF2Zy4gUmF0ZSAoVFkpXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJhdmVyYWdlUmF0ZUxhc3RZZWFyXCIsIFwiQXZnLiBSYXQgKExZKVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYXZlcmFnZUNQUFwiLCBcIkF2Zy4gQ1BQXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwcm9qZWN0ZWRDUFBcIiwgXCJQcm9qLiBDUFAgKDMwcylcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInByb2plY3RlZENQTVwiLCBcIlByb2ouIENQTSAoMzBzKVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYXZlcmFnZUNQTVwiLCBcIkF2Zy4gQ1BNXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJJTVBTRGlmZlwiLCBcIklNUFMgKCcwMDApIERpZmYuXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJSVEdEaWZmXCIsIFwiUlRHIERpZmYuXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJib29rZWRFcUNwbVZhbHVlXCIsIFwiQm9va2VkIENQTSAoMzBzKVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkRXFDcHBWYWx1ZVwiLCBcIkJvb2tlZCBDUFAgKDMwcylcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInBvc3RlZEFkdVwiLCBcIiQgUG9zdGVkIEFEVXNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInNjaGVkdWxlZEFkdVwiLCBcIiQgU2NoZWR1bGVkIEFEVXNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImF1ZGllbmNlRGVmaWNpdFwiLCBcIiQgTy9TIEF1ZGllbmNlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwb3N0ZWRBdWRQZXJjZW50XCIsIFwiUG9zdGVkIEF1ZGllbmNlICVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInBvdGVudGlhbFVuaXRzVmFsdWVcIiwgXCJQT1QgVW5pdHNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZFVuaXRzVmFsdWVcIiwgXCJCb29rZWQgRXEgVW5pdHNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZEFtb3VudFdpdGhaZXJvUmF0aW5nVmFsdWVcIiwgXCJUb3RhbCAkIEJvb2tlZFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkQW1vdW50UGVyY2VudGFnZVdpdGhaZXJvUmF0aW5nVmFsdWVcIiwgXCIlIEFnYWluc3QgQWxsIERlbW9zXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJib29rZWRBbW91bnRXaXRob3V0WmVyb1JhdGluZ1ZhbHVlXCIsIFwiJEJvb2tlZCBXaXRoIEltcHMo4oCZMDAwKVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkQW1vdW50UGVyY2VudGFnZVdpdGhvdXRaZXJvUmF0aW5nVmFsdWVcIiwgXCIlIEFnYWluc3QgQWxsIERlbW9zXCIpO1xyXG5cclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwidG90YWxCb29rZWRBbW91bnRWYWx1ZVwiLCBcIlRvdGFsICRCb29rZWRcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImF2ZXJhZ2VVbml0UmF0ZVZhbHVlXCIsIFwiIEFVUlwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwidG90YWxCb29rZWRBbW91bnRXaXRoUmF0aW5nVmFsdWVcIiwgXCIkQm9va2VkIFdpdGggUmF0aW5nXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJhdmVyYWdlVW5pdFJhdGVXaXRoUmF0aW5nVmFsdWVcIiwgXCJBVVIgV2l0aCBSYXRpbmdcIik7XHJcblxyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJ0b3RhbEJvb2tlZEFtb3VudFdpdGhJbXByZXNzaW9uVmFsdWVcIiwgXCIkQm9va2VkIFdpdGggSU1QU1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYXZlcmFnZVVuaXRSYXRlV2l0aEltcHJlc3Npb25WYWx1ZVwiLCBcIkFVUiBXaXRoIElNUFNcIik7XHJcblxyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJib29rZWRVbml0c1dpdGhSYXRpbmdWYWx1ZVwiLCBcIkJvb2tlZCBVbml0cyBXaXRoIFJhdGluZ1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicG9zdGVkVW5pdHNXaXRoUmF0aW5nVmFsdWVcIiwgXCJQb3N0ZWQgVW5pdHMgV2l0aCBSYXRpbmdcIik7XHJcblxyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJib29rZWRVbml0c1dpdGhJbXByZXNzaW9uVmFsdWVcIiwgXCJCb29rZWQgVW5pdHMgV2l0aCBJTVBTXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwb3N0ZWRVbml0c1dpdGhJbXByZXNzaW9uVmFsdWVcIiwgXCJQb3N0ZWQgVW5pdHMgV2l0aCBJTVBTXCIpO1xyXG5cclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkUmF0aW5nc1wiLCBcIkJvb2tlZCBSYXRpbmdcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInBvc3RlZFJhdGluZ3NcIiwgXCJQT1NURUQgUmF0aW5nXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJQb3N0ZWRSYXRpbmdcIiwgXCJQb3N0ZWQgUlRHXCIpO1xyXG5cclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkSW1wcmVzc2lvbnNcIiwgXCJCb29rZWQgSU1QKCcwMDApXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwb3N0ZWRJbXByZXNzaW9uc1wiLCBcIlBvc3RlZCBJTVAoJzAwMClcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlBvc3RlZEltcHJlc3Npb25zXCIsIFwiUG9zdGVkIElNUCgnMDAwKVwiKTtcclxuXHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZEF2ZXJhZ2VSYXRpbmdcIiwgXCJCb29rZWQgQVUgUmF0aW5nXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwb3N0ZWRBdmVyYWdlUmF0aW5nXCIsIFwiUG9zdGVkIEFVIFJhdGluZ1wiKTtcclxuXHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZEF2ZXJhZ2VJbXByZXNzaW9uXCIsIFwiQm9va2VkIEFVIElNUFNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInBvc3RlZEF2ZXJhZ2VJbXByZXNzaW9uXCIsIFwiUG9zdGVkIEFVIElNUFNcIik7XHJcblxyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJib29rZWRDcHBWYWx1ZVwiLCBcIkJvb2tlZCBDUFBcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZEVmZmVjdGl2ZUNwcFZhbHVlXCIsIFwiRWZmZWN0aXZlIENQUFwiKTtcclxuXHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZENwbVZhbHVlXCIsIFwiQm9va2VkIENQTVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkRWZmZWN0aXZlQ3BtVmFsdWVcIiwgXCJFZmZlY3RpdmUgQ1BNXCIpO1xyXG5cclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwib3JkZXJTb3VyY2VcIiwgXCJPcmRlciBSb3V0ZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwib3JkZXJDYXRlZ29yeVwiLCBcIlJldiBDYXRlZ29yeVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiY2FzaE9yVHJhZGVcIiwgXCJDL1RcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInJldmlzaW9uU3RhcnREYXRlXCIsIFwiUmV2aXNpb24gU3RhcnQgRGF0ZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwibmFtZVwiLCBcIm5hbWVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInJvbGVcIiwgXCJyb2xlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJzdGF0aW9uQ291bnRcIiwgXCJzdGF0aW9uQ291bnRcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInN0YXRpb25MaXN0XCIsIFwic3RhdGlvbkxpc3RcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImFwcHJvdmVkT25cIiwgXCJBcHByb3ZlZCBPblwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYXBwcm92ZWRCeVwiLCBcIkFwcHJvdmVkIEJ5XCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJPREltcHNcIiwgXCJQcm9qLiBPRCBJTVBTXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJVREltcHNcIiwgXCJQcm9qLiBVRCBJTVBTXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJPREdycFwiLCBcIlByb2ouIE9EIEdSUFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiVURHcnBcIiwgXCJQcm9qLiBVRCBHUlBcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInVkSW1wc1BlcmNlbnRcIiwgXCJQcm9qLiBVRCAlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJ1ZEdycFBlcmNlbnRcIiwgXCJQcm9qLiBVRCBHUlAgJVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwib2RJbXBzUGVyY2VudFwiLCBcIlByb2ouIE9EICVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIm9kR3JwUGVyY2VudFwiLCBcIlByb2ouIE9EIEdSUCAlXCIpO1xyXG5cclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiUmV2aXNpb25OdW1iZXJcIiwgXCJSZXZpc2lvbiAjXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJSZXZpc2lvblR5cGVcIiwgXCJSZXZpc2lvbiBUeXBlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJHZW5lcmF0ZWRPblwiLCBcIkdlbmVyYXRlZCBPblwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQm9va2VkVmFsdWVGb3JEaXNwbGF5XCIsIFwiJCBCT09LRURcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkJvb2tlZFZhbHVlXCIsIFwiJCBCb29rZWRcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkJvb2tlZFNwb3RzXCIsIFwiU3BvdHNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkJvb2tlZEdSUFwiLCBcIkdSUFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQm9va2VkSU1QU1JldlRhYlwiLCBcIklNUFMnKDAwMClcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkJvb2tlZENQUFwiLCBcIkNQUFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQm9va2VkQ1BNXCIsIFwiQ1BNXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJNR3NWYWx1ZUZvckRpc3BsYXlcIiwgXCIkIE1HU1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiTUdzVmFsdWVcIiwgXCIkIE1HU1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQURVc1ZhbHVlRm9yRGlzcGxheVwiLCBcIiQgQURVU1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQURVc1ZhbHVlXCIsIFwiJCBBRFVTXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCdXllckNoYW5nZXNWYWx1ZUZvckRpc3BsYXlcIiwgXCIkIEJ1eWVyIENoYW5nZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQnV5ZXJDaGFuZ2VzVmFsdWVcIiwgXCIkIEJ1eWVyIENoYW5nZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiVXNlckNoYW5nZXNWYWx1ZUZvckRpc3BsYXlcIiwgXCIkIFNlbGxlciBVc2VyIENoYW5nZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiVXNlckNoYW5nZXNWYWx1ZVwiLCBcIiQgU2VsbGVyIFVzZXIgQ2hhbmdlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJTZWxsZXJMaW5lXCIsIFwiU2VsbGVyIExpbmUgI1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQnV5ZXJMaW5lXCIsIFwiQnV5IExpbmUgI1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiU3BvdFN0YXR1c1wiLCBcIlNwb3QgU3RhdHVzXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJJbnZlbnRvcnlDb2RlXCIsIFwiSW52ZW50b3J5IENvZGVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkJ1eWVyUHJvZ3JhbU5hbWVcIiwgXCJCdXllciBQcm9ncmFtIE5hbWVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlJldmVudWVDbGFzc1wiLCBcIlJldmVudWUgQ2xhc3NcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIldlZWtseUFVUlwiLCBcIkJvb2tlZCBBdmcuIFJhdGVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkJvb2tlZFJhdGVcIiwgXCJCb29rZWQgUmF0ZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYXZlcmFnZVJhdGVcIiwgXCJBdmVyYWdlIFJhdGVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZEF2ZXJhZ2VSYXRlXCIsIFwiQm9va2VkIEFWRy4gUmF0ZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZG9sbGFySU1QU0ltcGFjdFwiLCBcIiQgSU1QUyBJbXBhY3RcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImRvbGxhclJUR0ltcGFjdFwiLCBcIiQgUlRHIElNUEFDVFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiSU1QU0ltcGFjdFwiLCBcIklNUFMgKCcwMDApIElNUEFDVFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiUlRHSW1wYWN0XCIsIFwiUlRHIEltcGFjdFwiKTtcclxuXHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImludmVudG9yeUZpbGxQZXJjZW50YWdlU2FtZVdlZWtcIiwgXCJJbnYgRmlsbCBTYW1lIFdlZWsgKExZKVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiaW52ZW50b3J5RmlsbFBlcmNlbnRhZ2VGaW5hbFwiLCBcIkludiBGaWxsIEZpbmFsIChMWSlcIik7XHJcblxyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwcm9qZWN0ZWRSVEdcIiwgXCJQcm9qZWN0ZWQgUlRHXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwcm9qZWN0ZWRJTVBTXCIsIFwiUHJvamVjdGVkIElNUFMoJzAwMClcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImRlc2lyZWRDUE1cIiwgXCJEZXNpcmVkIENQTVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZGVzaXJlZENQUFwiLCBcIkRlc2lyZWQgQ1BQXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJvcmlnaW5cIiwgXCJPcmlnaW5cIik7XHJcblxyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCb29rZWRSVEdcIiwgXCJCb29rZWQgUlRHXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCb29rZWRJTVBTXCIsIFwiQm9va2VkIElNUFMoJzAwMClcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIklNUFNcIiwgXCJJTVAoJzAwMClcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkFVUlRHXCIsIFwiQXZnIFJUR1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQVVJTVBTXCIsIFwiQXZnIElNUCgnMDAwKVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiUG9zdGVkUmF0aW5nc09ySW1wcmVzc2lvbnNcIiwgXCJQb3N0ZWQgUlRHXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJTY2hlZHVsZUZsaWdodFdlZWtcIiwgXCJTY2hlZHVsZSBXZWVrXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJTY2hlZHVsZWREYXlcIiwgXCJTY2hlZHVsZWQgRGF5XCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJBaXJTdGF0dXNcIiwgXCJBaXIgU3RhdHVzXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJBaXJEYXRlQW5kVGltZVwiLCBcIkFpciBEYXRlICYgVGltZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQWlyRGF0ZVwiLCBcIkFpciBEYXRlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJOb3JtYWxpemVkT3JkZXJlZFJhdGluZ1wiLCBcIk5vcm1hbGl6ZWQgQm9va2VkIFJUR1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiTm9ybWFsaXplZE9yZGVyZWRJbXByZXNzaW9uc1wiLCBcIk5vcm1hbGl6ZWQgQm9va2VkIElNUCgnMDAwKVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiTm9ybWFsaXplZFBvc3RlZFJhdGluZ1wiLCBcIk5vcm1hbGl6ZWQgUG9zdGVkIFJUR1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiTm9ybWFsaXplZFBvc3RlZEltcHJlc3Npb25zXCIsIFwiTm9ybWFsaXplZCBQb3N0ZWQgSU1QKCcwMDApXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJBZElkXCIsIFwiQWQtSWRcIik7XHJcblxyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJkaXNwbGF5aW1wc1wiLCBcIklNUFNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImRpc3BsYXlHcnBcIiwgXCJHUlBcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZFNwb3RzRm9yRGlzcGxheVwiLCBcIlNwb3RzXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJkaXNwbGF5U3BvdHNcIiwgXCJTcG90c1wiKTtcclxuXHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImVzdGltYXRlTm9cIiwgXCJFc3RpbWF0ZSNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInByaW1hcnlCdXllclwiLCBcIlByaW1hcnkgQnV5ZXJcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInByaW1hcnlCdXllck5hbWVcIiwgXCJQcmltYXJ5IEJ1eWVyXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJzZWNvbmRhcnlCdXllck5hbWVcIiwgXCJTZWNvbmRhcnkgQnV5ZXJcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInNlY29uZGFyeUJ1eWVyXCIsIFwiU2Vjb25kYXJ5IEJ1eWVyXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJ0aW1lb3V0RGF0ZVwiLCBcIlRpbWVvdXQgRGF0ZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiRGlzcGxheXRTcG90U3RhdHVzQklcIiwgXCJTcG90IFN0YXR1c1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiTGluZVNwb3RcIiwgXCJMaW5lLlNwb3RcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkx1cldpbmRvd05hbWVcIiwgXCJQb2xpdGljYWwgV2luZG93XCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJsaW5lQW5kU3BvdE51bWJlclwiLCBcIkxpbmUuU3BvdCNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImxlbmd0aFwiLCBcIkxlbmd0aFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicmV2Q2xhc3NcIiwgXCJSZXYgQ2xhc3NcIik7XHJcblxyXG4gICAgICAgIC8vIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJ1ZFZhbHVlXCIsIFwiJCBVRFwiKTtcclxuICAgICAgICAvLyB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwib2RWYWx1ZVwiLCBcIiQgT0RcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInVkVmFsdWVcIiwgXCJQcm9qLiAkIFVEXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJvZFZhbHVlXCIsIFwiUHJvai4gJCBPRFwiKTtcclxuXHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkludmVudG9yeUNvZGVcIiwgXCJJbnZlbnRvcnkgQ29kZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQnV5ZXJQcm9ncmFtTmFtZVwiLCBcIkJ1eWVyIFByb2dyYW0gTmFtZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiU3RhcnRUaW1lXCIsIFwiU3RhcnQgVGltZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiRW5kVGltZVwiLCBcIkVuZCBUaW1lXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJXZWVrbHlBVVJcIiwgXCJCb29rZWQgQXZnLiBSYXRlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJEaXNwbGF5UmV2ZW51ZUNsYXNzXCIsIFwiUmV2IENsYXNzXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJBY3R1YWxXZWVrU3RhcnREYXRlXCIsIFwiV2Vla1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiV2Vla0RheVwiLCBcIkRheVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiRGlzcGxheUxlbmd0aFwiLCBcIkxlbmd0aFwiKTtcclxuXHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIk90aGVyQXZhaWxhYmxlU3BvdHNUYWJsZUludmVudG9yeUNvZGVcIiwgXCJJbnZlbnRvcnkgQ29kZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlQnV5ZXJQcm9ncmFtTmFtZVwiLCBcIkJ1eWVyIFByb2dyYW0gTmFtZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlU3RhcnRUaW1lXCIsIFwiU3RhcnQgVGltZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlRW5kVGltZVwiLCBcIkVuZCBUaW1lXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJPdGhlckF2YWlsYWJsZVNwb3RzVGFibGVXZWVrbHlBVVJcIiwgXCJCb29rZWQgQXZnLiBSYXRlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJPdGhlckF2YWlsYWJsZVNwb3RzVGFibGVEaXNwbGF5UmV2ZW51ZUNsYXNzXCIsIFwiUmV2IENsYXNzXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJPdGhlckF2YWlsYWJsZVNwb3RzVGFibGVBY3R1YWxXZWVrU3RhcnREYXRlXCIsIFwiV2Vla1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlV2Vla0RheVwiLCBcIkRheVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlRGlzcGxheUxlbmd0aFwiLCBcIkxlbmd0aFwiKTtcclxuXHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlByb2plY3RlZEltcHJlc3Npb25zXCIsIFwiUHJvamVjdGVkIElNUCgnMDAwKVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiUHJvamVjdGVkUnRnXCIsIFwiUHJvamVjdGVkIFJUR1wiKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RPclVuc2VsZWN0Q2hlY2tib3gocm93RGF0YTogYW55LCBjb2x1bW5LZXlzOiBhbnksIGlzQ2hlY2tib3hTZWxlY3RlZDogYW55KSB7XHJcbiAgICAgICAgcm93RGF0YVtjb2x1bW5LZXlzXSA9ICFyb3dEYXRhW2NvbHVtbktleXNdO1xyXG4gICAgICAgIHRoaXMudG9nZ2xlQ2hlY2tib3guZW1pdCh7IHJvd0RhdGEsIGNvbHVtbktleXMsIGlzQ2hlY2tib3hTZWxlY3RlZCB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RPclVuc2VsZWN0UmFkaW9ib3gocm93RGF0YTogYW55LCBjb2x1bW5LZXlzOiBhbnksIGlzQ2hlY2tib3hTZWxlY3RlZDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmIChyb3dEYXRhW2NvbHVtbktleXNdID09IGlzQ2hlY2tib3hTZWxlY3RlZCkgcmV0dXJuO1xyXG4gICAgICAgIHJvd0RhdGFbY29sdW1uS2V5c10gPSBpc0NoZWNrYm94U2VsZWN0ZWQ7XHJcbiAgICAgICAgdGhpcy50b2dnbGVDaGVja2JveC5lbWl0KHsgcm93RGF0YSwgY29sdW1uS2V5cywgaXNDaGVja2JveFNlbGVjdGVkIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdFVuc2VsZWN0QWxsUm93cygpIHtcclxuICAgICAgICB0aGlzLnRvZ2dsZUhlYWRlckNoZWNrYm94LmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RVbnNlbGVjdFJvdyhyb3dEYXRhOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnRvZ2dsZVJvd0NoZWNrYm94LmVtaXQocm93RGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgdW5kb0NyZWRpdGVkU3BvdChkYXRhOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnVuZG9JY29uQ2xpY2tlZC5lbWl0KHsgZGF0YSwgbWdPckNyZWRpdDogXCJDcmVkaXRcIiB9KTtcclxuICAgIH1cclxuXHJcbiAgICB1bmRvTWdTcG90KGRhdGE6IGFueSkge1xyXG4gICAgICAgIHRoaXMudW5kb0ljb25DbGlja2VkLmVtaXQoeyBkYXRhLCBtZ09yQ3JlZGl0OiBcIk1ha2VHb29kXCIgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy9Tb3J0IGFuZCBGaWx0ZXIgTG9naWMgYmVnaW5zIVxyXG4gICAgY2xvc2VUb29sdGlwKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnRvb2x0aXAgJiYgdGhpcy50b29sdGlwLmlzT3BlbigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcC5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRvb2x0aXAgPSBudWxsO1xyXG4gICAgICAgIGlmICghdGhpcy5iaW5kVmFsdWVGdW5jQ2FsbGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sdW1uRmlsdGVyQ2xvc2VkLmVtaXQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaXNUb29sdGlwQWN0aXZlKGhlYWRlcjogYW55W10pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pc1Rvb2x0aXBBY3RpdmUoaGVhZGVyLCB0aGlzLmFubmFTb3J0U2VydmljZS5jb2x1bW5Tb3J0U3RhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGJpbmRUaGVWYWx1ZVRvVG9vbFRpcCh0b29sdGlwOiBhbnksIGhlYWRlcjogSUhlYWRlckluZm8pIHtcclxuICAgICAgICB0aGlzLmJpbmRWYWx1ZUZ1bmNDYWxsZWQgPSB0cnVlO1xyXG4gICAgICAgIC8vIGlmIHNhbWUgdG9vbHRpcCBvcGVuZWQgY2xvc2UgaXRcclxuICAgICAgICBpZiAodG9vbHRpcCA9PSB0aGlzLnRvb2x0aXApIHtcclxuICAgICAgICAgICAgdGhpcy5iaW5kVmFsdWVGdW5jQ2FsbGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2VUb29sdGlwKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IGVuYWJsZWRIZWFkZXJzOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrSWZVbmlxdWVWYWx1ZVByZXNlbnRGb3JUaGVIZWFkZXIoaGVhZGVyLCBlbmFibGVkSGVhZGVycyk7XHJcbiAgICAgICAgICAgIHRoaXMub3BlblRvb2x0aXAodG9vbHRpcCwgZW5hYmxlZEhlYWRlcnMsIGhlYWRlcik7XHJcblxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuaW5uZXJXaWR0aCA8IDE1MDAgJiZcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5pbm5lckhlaWdodCA8IDc2OCAmJlxyXG4gICAgICAgICAgICAgICAgIXRoaXMuYW5uYUZpbHRlclNlcnZpY2Uuc2xpZGVyU2V0LmhhcyhoZWFkZXIuZmlsdGVyU29ydE9iamVjdEtleXNbMF0pXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5GaWx0ZXJPcGVuZWQuZW1pdCgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNob3dDaGVja2JveGVzRm9yVGltZUZpbHRlciA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmd0R2VuZXJhbENvbmZpZy5jb21wb25lbnQgPT0gXCJTUE9UREVUQUlMU1wiIHx8XHJcbiAgICAgICAgICAgICAgICB0aGlzLmd0R2VuZXJhbENvbmZpZy5jb21wb25lbnQgPT0gXCJFWENMVURFSU5WRU5UT1JZUE9QVVBcIiB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5ndEdlbmVyYWxDb25maWcuY29tcG9uZW50ID09IFwiUkFUSU5HXCI7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0ZpbHRlclRvb2x0aXBUYWJzID0gaGVhZGVyLmZpbHRlclNvcnRPYmplY3RLZXlzLmxlbmd0aCA+IDE7XHJcbiAgICAgICAgICAgIHRoaXMuYmluZFZhbHVlRnVuY0NhbGxlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjaGVja0lmVW5pcXVlVmFsdWVQcmVzZW50Rm9yVGhlSGVhZGVyKGhlYWRlcjogSUhlYWRlckluZm8sIGVuYWJsZWRIZWFkZXJzOiBhbnlbXSkge1xyXG4gICAgICAgIGhlYWRlci5maWx0ZXJTb3J0T2JqZWN0S2V5cy5mb3JFYWNoKChpdGVtOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgbGV0IGRhdGFUb0NoZWNrID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5nZXRGaWx0ZXJPcHRpb25zRGF0YSh0aGlzLnRhYmxlRGF0YSwgdGhpcy5jbG9uZWRUYWJsZURhdGEsIGl0ZW0pO1xyXG4gICAgICAgICAgICBpZiAoaXRlbSA9PSBcInBlcmlvZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdW5pcVN0YXJ0RGF0ZSA9IHVuaXEoZGF0YVRvQ2hlY2subWFwKCh1OiB7IFt4OiBzdHJpbmddOiBhbnkgfSkgPT4gdVtcInN0YXJ0RGF0ZVwiXSkpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHVuaXFFbmREYXRlID0gdW5pcShkYXRhVG9DaGVjay5tYXAoKHU6IHsgW3g6IHN0cmluZ106IGFueSB9KSA9PiB1W1wiZW5kRGF0ZVwiXSkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHVuaXFTdGFydERhdGUubGVuZ3RoID4gMSB8fCB1bmlxRW5kRGF0ZS5sZW5ndGggPiAxIHx8IHRoaXMuaXNUb29sdGlwQWN0aXZlKFtpdGVtXSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVkSGVhZGVycy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlcyA9IGRhdGFUb0NoZWNrLm1hcCgodTogeyBbeDogc3RyaW5nXTogYW55IH0pID0+IHVbaXRlbV0pO1xyXG4gICAgICAgICAgICAgICAgLy8gaWYgbGFzdCBhcHBsaWVkIGZpbHRlciBpcyB0aGlzIGhlYWRlciwgcHVzaCBpdCBhbG9zIGFzIGVuYWJsZWRIZWFkZXJcclxuICAgICAgICAgICAgICAgIGxldCBhY3RpdmVBbmRMYXN0bHlBcHBsaWVkSGVhZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5hcHBsaWVkRmlsdGVyc0FycmF5Lmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmFwcGxpZWRGaWx0ZXJzQXJyYXlbdGhpcy5hbm5hRmlsdGVyU2VydmljZS5hcHBsaWVkRmlsdGVyc0FycmF5Lmxlbmd0aCAtIDFdID09XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1cclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUFuZExhc3RseUFwcGxpZWRIZWFkZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlci5maWx0ZXIgPT0gXCJDSEVDS0JPWFwiICYmXHJcbiAgICAgICAgICAgICAgICAgICAgKHVuaXEodmFsdWVzKS5maWx0ZXIoKG4pID0+IG4gIT0gbnVsbCkubGVuZ3RoID4gMSB8fCBhY3RpdmVBbmRMYXN0bHlBcHBsaWVkSGVhZGVyKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlZEhlYWRlcnMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyLmZpbHRlciAhPSBcIkNIRUNLQk9YXCIgJiZcclxuICAgICAgICAgICAgICAgICAgICAodW5pcSh2YWx1ZXMpLmZpbHRlcigobikgPT4gbiAhPSBudWxsICYmIG4gIT0gXCItXCIpLmxlbmd0aCA+IDEgfHwgYWN0aXZlQW5kTGFzdGx5QXBwbGllZEhlYWRlcilcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZWRIZWFkZXJzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuVG9vbHRpcCh0b29sdGlwOiBhbnksIGhlYWRlcjogYW55LCBjb2x1bW5IZWFkZXI6IElIZWFkZXJJbmZvKSB7XHJcbiAgICAgICAgdGhpcy5jbG9zZVRvb2x0aXAoKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXAgPSB0b29sdGlwO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcC5vcGVuKCk7XHJcbiAgICAgICAgLy9jb252ZXJ0IGtleSBpbnRvIHRoZSBoZWFkZXJcclxuICAgICAgICB0aGlzLmZpbHRlclRhYk9iamVjdHMgPSBoZWFkZXIubWFwKChrZXk6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuaGFzKGtleSkgPyB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuZ2V0KGtleSkgOiBrZXk7IC8vY2hhbmdlIHRvIGRpc3BsYXkgbmFtZVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJhZGlvQnV0dG9uTW9kZWwoXHJcbiAgICAgICAgICAgICAgICBrZXksXHJcbiAgICAgICAgICAgICAgICB2YWx1ZSxcclxuICAgICAgICAgICAgICAgIGNvbHVtbkhlYWRlci5pc1NvcnRSZXF1aXJlZFtpbmRleF0sXHJcbiAgICAgICAgICAgICAgICBjb2x1bW5IZWFkZXIuaXNGaWx0ZXJSZXF1aXJlZFtpbmRleF0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZUVuYWJsZUVhY2hDb2x1bW5Ub29sdGlwSWNvbigpIHtcclxuICAgICAgICB0aGlzLnRhYmxlSGVhZGVycy5mb3JFYWNoKChoZWFkZXIpID0+IHtcclxuICAgICAgICAgICAgaGVhZGVyLmhlYWRlckluZm8uZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uc2hvd1Rvb2x0aXBJY29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZGlzYWJsZVRvb2x0aXBJY29uID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5maWx0ZXJTb3J0T2JqZWN0S2V5cy5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxhdGVzdEZpbHRlcnMgPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmFwcGxpZWRGaWx0ZXJzQXJyYXk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXRlc3RGaWx0ZXJzLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZGlzYWJsZVRvb2x0aXBJY29uICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXRlc3RGaWx0ZXJzW2xhdGVzdEZpbHRlcnMubGVuZ3RoIC0gMV0gPT0ga2V5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5kaXNhYmxlVG9vbHRpcEljb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uZGlzYWJsZVRvb2x0aXBJY29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09IFwicGVyaW9kXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdW5pcVN0YXJ0RGF0ZSA9IHVuaXEoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVEYXRhLm1hcCgodTogeyBbeDogc3RyaW5nXTogYW55IH0pID0+IHVbXCJzdGFydERhdGVcIl0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVuaXFFbmREYXRlID0gdW5pcSh0aGlzLnRhYmxlRGF0YS5tYXAoKHU6IHsgW3g6IHN0cmluZ106IGFueSB9KSA9PiB1W1wiZW5kRGF0ZVwiXSkpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmRpc2FibGVUb29sdGlwSWNvbiA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXFTdGFydERhdGUubGVuZ3RoID4gMSB8fCB1bmlxRW5kRGF0ZS5sZW5ndGggPiAxID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSB0aGlzLnRhYmxlRGF0YS5tYXAoKHU6IHsgW3g6IHN0cmluZ106IGFueSB9KSA9PiB1W2tleV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW0uZmlsdGVyID09IFwiQ0hFQ0tCT1hcIiAmJiB1bmlxKHZhbHVlcykuZmlsdGVyKChuKSA9PiBuICE9IG51bGwpLmxlbmd0aCA+IDEpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpdGVtLmZpbHRlciAhPSBcIkNIRUNLQk9YXCIgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXEodmFsdWVzKS5maWx0ZXIoKG4pID0+IG4gIT0gbnVsbCAmJiBuICE9IFwiLVwiKS5sZW5ndGggPiAxKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmRpc2FibGVUb29sdGlwSWNvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRNYXJnaW5MZWZ0Rm9yRmlsdGVySWNvbigpIHtcclxuICAgICAgICBsZXQgZWxlbWVudEFyciA9IHRoaXMudmlld0NoaWxkVGFibGVIZWFkZXJzLnRvQXJyYXkoKTtcclxuICAgICAgICBlbGVtZW50QXJyLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgbGV0IGNoaWxkRGl2RWxlbWVudHMgPSBpdGVtLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW47XHJcblxyXG4gICAgICAgICAgICBpZiAoY2hpbGREaXZFbGVtZW50cy5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICAgICAgbGV0IGZpcnN0UGFyYWdyYXBoT2Zmc2V0V2lkdGg6IG51bWJlciA9IGNoaWxkRGl2RWxlbWVudHNbMF0/LmNoaWxkcmVuWzBdPy5vZmZzZXRXaWR0aFxyXG4gICAgICAgICAgICAgICAgICAgID8gY2hpbGREaXZFbGVtZW50c1swXT8uY2hpbGRyZW5bMF0/Lm9mZnNldFdpZHRoXHJcbiAgICAgICAgICAgICAgICAgICAgOiAwO1xyXG4gICAgICAgICAgICAgICAgbGV0IHNlY29uZFBhcmFncmFwaE9mZnNldFdpZHRoOiBudW1iZXIgPSBjaGlsZERpdkVsZW1lbnRzWzFdLmNoaWxkcmVuWzBdPy5vZmZzZXRXaWR0aFxyXG4gICAgICAgICAgICAgICAgICAgID8gY2hpbGREaXZFbGVtZW50c1sxXS5jaGlsZHJlblswXT8ub2Zmc2V0V2lkdGhcclxuICAgICAgICAgICAgICAgICAgICA6IDA7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGZpcnN0UGFyYWdyYXBoT2Zmc2V0V2lkdGggPiBzZWNvbmRQYXJhZ3JhcGhPZmZzZXRXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkaWZmID0gZmlyc3RQYXJhZ3JhcGhPZmZzZXRXaWR0aCAtIHNlY29uZFBhcmFncmFwaE9mZnNldFdpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZERpdkVsZW1lbnRzWzBdLmNoaWxkcmVuLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRGl2RWxlbWVudHNbMF0uY2hpbGRyZW5bMV0uc3R5bGUubWFyZ2luTGVmdCA9IDQgKyBcInB4XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGREaXZFbGVtZW50c1sxXS5jaGlsZHJlbi5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZERpdkVsZW1lbnRzWzFdLmNoaWxkcmVuWzFdLnN0eWxlLm1hcmdpbkxlZnQgPSBkaWZmICsgNCArIFwicHhcIjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkaWZmID0gc2Vjb25kUGFyYWdyYXBoT2Zmc2V0V2lkdGggLSBmaXJzdFBhcmFncmFwaE9mZnNldFdpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZERpdkVsZW1lbnRzWzBdLmNoaWxkcmVuLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRGl2RWxlbWVudHNbMF0uY2hpbGRyZW5bMV0uc3R5bGUubWFyZ2luTGVmdCA9IGRpZmYgKyA0ICsgXCJweFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkRGl2RWxlbWVudHNbMV0uY2hpbGRyZW4ubGVuZ3RoID09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGREaXZFbGVtZW50c1sxXS5jaGlsZHJlblsxXS5zdHlsZS5tYXJnaW5MZWZ0ID0gNCArIFwicHhcIjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBkYXRhUm93Q2xpY2tlZChyb3dEYXRhOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnJvd0NsaWNrZWQuZW1pdChyb3dEYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICByYWRpb0J1dHRvbkNsaWNrZWQoZGF0YTogYW55LCBhY3Rpb246IHN0cmluZywgaXNEaXNhYmxlZDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICghaXNEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnJhZGlvQnV0dG9uU2VsZWN0ZWQuZW1pdCh7IGRhdGEsIGFjdGlvbiB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYmluZFRoZVZhbHVlVG9TZWxsZXJHcm91cFRvb2x0aXAoc2VsbGVyR3JvdXBIaWVyYXJjaHk6IFJhdGluZ1NlbGxlckdyb3VwSGllcmFyY2h5W10sIHRvb2x0aXA6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmhpZXJhcmNoeVRvb2x0aXAgJiYgdGhpcy5oaWVyYXJjaHlUb29sdGlwLm9wZW4pIHtcclxuICAgICAgICAgICAgdGhpcy5oaWVyYXJjaHlUb29sdGlwLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VsbGVyR3JvdXBIaWVyYXJjaHkgPSBzZWxsZXJHcm91cEhpZXJhcmNoeTtcclxuICAgICAgICB0aGlzLmhpZXJhcmNoeVRvb2x0aXAgPSB0b29sdGlwO1xyXG4gICAgICAgIHRoaXMuaGllcmFyY2h5VG9vbHRpcC5vcGVuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWNvbkNsaWNrZWQocm93RGF0YTogYW55LCBpY29uQ2xhc3M6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChcIm9yZGVySWRcIiBpbiByb3dEYXRhICYmIGljb25DbGFzcy5pbmNsdWRlcyhcIm1kaS1zdGFyXCIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdGFycmVkT3JkZXJJZCA9IHJvd0RhdGEub3JkZXJJZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZ3RJY29uQ2xpY2tlZC5lbWl0KHsgZGF0YTogcm93RGF0YSwgaWNvbkNsYXNzOiBpY29uQ2xhc3MgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3ZnSWNvbkNsaWNrZWQoZGF0YTogR3RDb2x1bW5JY29uRW1pdHRlZERhdGEpIHtcclxuICAgICAgICB0aGlzLmd0U1ZHSWNvbkNsaWNrZWQuZW1pdChkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICB0ZXh0QWN0aW9uQ2xpY2tlZChyb3dEYXRhOiBhbnksIGlkOiBhbnksIGNvbHVtbkhlYWRlcjogSUhlYWRlckluZm8pIHtcclxuICAgICAgICB0aGlzLmd0VGV4dEFjdGlvbkNsaWNrZWQuZW1pdCh7IGRhdGE6IHJvd0RhdGEsIGlkOiBpZCwgY29sdW1uSGVhZGVyOiBjb2x1bW5IZWFkZXIsIGlzSWNvbkNsaWNrZWQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGljb25DbGlja2VkT25TdHJpbmdJY29uQWN0aW9uVHlwZShyb3dEYXRhOiBhbnksIGlkOiBhbnksIGNvbHVtbkhlYWRlcjogSUhlYWRlckluZm8pIHtcclxuICAgICAgICB0aGlzLmd0VGV4dEFjdGlvbkNsaWNrZWQuZW1pdCh7IGRhdGE6IHJvd0RhdGEsIGlkOiBpZCwgY29sdW1uSGVhZGVyOiBjb2x1bW5IZWFkZXIsIGlzSWNvbkNsaWNrZWQ6IHRydWUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5uZXJIVE1MQ2VsbENsaWNrZWQoZXZlbnQ6IGFueSwgcm93RGF0YTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5ndElubmVySFRNTENsaWNrZWQuZW1pdCh7IGV2ZW50LCByb3dEYXRhIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHZpZXdEZXRhaWxzQ2xpY2tlZChyb3dEYXRhOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmd0Vmlld0RldGFpbENsaWNrZWQuZW1pdCh7IGRhdGE6IHJvd0RhdGEgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0QWN0aXZlU3RhdGVPYmplY3QoKSB7XHJcbiAgICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmUgPVxyXG4gICAgICAgICAgICAhdGhpcy5hbm5hRmlsdGVyU2VydmljZS5yZXNldEZpbHRlclNvcnRBY3RpdmVTdGF0dXMgfHwgdGhpcy5tdWx0aXBsZVRhYmxlc1ByZXNlbnRcclxuICAgICAgICAgICAgICAgID8gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmVcclxuICAgICAgICAgICAgICAgIDoge307XHJcbiAgICAgICAgdGhpcy50YWJsZUhlYWRlcnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBpdGVtLmhlYWRlckluZm8uZm9yRWFjaCgoaGVhZGVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGVhZGVyLnNob3dUb29sdGlwSWNvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBrZXkgPSBoZWFkZXIuZmlsdGVyU29ydE9iamVjdEtleXMuam9pbihcIixcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyLmpvaW5lZEZpbHRlclNvcnRPYmplY3RLZXlzID0ga2V5O1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEFOTkEtNDExMyBmaXhcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hbm5hRmlsdGVyU2VydmljZS5yZXNldEZpbHRlclNvcnRBY3RpdmVTdGF0dXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmVba2V5XSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5yZXNldEZpbHRlclNvcnRBY3RpdmVTdGF0dXMgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHNldElzRGlmZmVyZW5jZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuaXNEaWZmZXJlbmNlTGVzc1RoYW4yNVBlcmNlbnQgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXNldEluZGV4KCkge1xyXG4gICAgICAgIHRoaXMuc3RhcnQgPSAwO1xyXG4gICAgICAgIHRoaXMuZW5kID0gdGhpcy5saW1pdCArIHRoaXMuc3RhcnQ7XHJcbiAgICB9XHJcblxyXG4gICAgb25UYWJsZUNvbnRhaW5lclNjcm9sbChlOiBhbnkpIHtcclxuICAgICAgICBjb25zdCB0YWJsZVZpZXdIZWlnaHQgPSBlLnRhcmdldC5vZmZzZXRIZWlnaHQ7IC8vIHZpZXdwb3J0XHJcbiAgICAgICAgY29uc3QgdGFibGVTY3JvbGxIZWlnaHQgPSBlLnRhcmdldC5zY3JvbGxIZWlnaHQ7IC8vIGxlbmd0aCBvZiBhbGwgdGFibGVcclxuICAgICAgICBjb25zdCBzY3JvbGxMb2NhdGlvbiA9IGUudGFyZ2V0LnNjcm9sbFRvcDsgLy8gaG93IGZhciB1c2VyIHNjcm9sbGVkXHJcblxyXG4gICAgICAgIHRoaXMucmVtb3ZlVG9vbHRpcE9uU2Nyb2xsKCk7XHJcblxyXG4gICAgICAgIC8vIElmIHRoZSB1c2VyIGhhcyBzY3JvbGxlZCB3aXRoaW4gMTUwcHggb2YgdGhlIGJvdHRvbSwgYWRkIG1vcmUgZGF0YVxyXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IDE1MDtcclxuICAgICAgICBjb25zdCBsaW1pdCA9IHRhYmxlU2Nyb2xsSGVpZ2h0IC0gdGFibGVWaWV3SGVpZ2h0IC0gYnVmZmVyO1xyXG4gICAgICAgIGlmIChzY3JvbGxMb2NhdGlvbiA+IGxpbWl0KSB7XHJcbiAgICAgICAgICAgIGxldCBkYXRhID0gdGhpcy5nZXRUYWJsZURhdGEodGhpcy5zdGFydCwgdGhpcy5lbmQpO1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVkRGF0YSA9IHRoaXMucmVuZGVyZWREYXRhLmNvbmNhdChkYXRhKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVJbmRleCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRhYmxlQ29udGFpbmVyU2Nyb2xsZWQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VGFibGVEYXRhKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVEYXRhPy5maWx0ZXIoKHZhbHVlLCBpbmRleCkgPT4gaW5kZXggPj0gc3RhcnQgJiYgaW5kZXggPCBlbmQpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUluZGV4KCkge1xyXG4gICAgICAgIHRoaXMuc3RhcnQgPSB0aGlzLmVuZDtcclxuICAgICAgICB0aGlzLmVuZCA9IHRoaXMubGltaXQgKyB0aGlzLnN0YXJ0O1xyXG4gICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxSb3dzRm9yVGFibGUoKSB7XHJcbiAgICAgICAgdGhpcy5yZXNldEluZGV4KCk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlZERhdGEgPSB0aGlzLmdldFRhYmxlRGF0YSh0aGlzLnN0YXJ0LCB0aGlzLmVuZCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVJbmRleCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNwb3REZXRhaWxzRG93bmxvYWRDbGlja2VkKHBhcmVudENoaWxkT3JUb3RhbFJvdzogXCJEQVRBUk9XXCIgfCBcIlRPVEFMUk9XXCIsIHJvd2RhdGE/OiBhbnkpIHtcclxuICAgICAgICBpZiAocm93ZGF0YSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW52ZW50b3J5SWRGb3JEb3dubG9hZCA9IHJvd2RhdGEuaW52ZW50b3J5Q29kZUlkO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGVtb2dyYXBoaWNGb3JEb3dubG9hZCA9IHJvd2RhdGEuZGVtb2dyYXBoaWM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEludmVudG9yeUlkRm9yRG93bmxvYWQgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGVtb2dyYXBoaWNGb3JEb3dubG9hZCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dUeXBlRm9yRG93bmxvYWQgPSBwYXJlbnRDaGlsZE9yVG90YWxSb3c7XHJcbiAgICAgICAgdGhpcy5kb3dubG9hZFNwb3REZXRhaWxzLmVtaXQoe1xyXG4gICAgICAgICAgICBwYXJlbnRDaGlsZE9yVG90YWxSb3c6IHBhcmVudENoaWxkT3JUb3RhbFJvdyxcclxuICAgICAgICAgICAgaW52ZW50b3J5Q29kZUlkOiB0aGlzLnNlbGVjdGVkSW52ZW50b3J5SWRGb3JEb3dubG9hZCxcclxuICAgICAgICAgICAgZGVtb2dyYXBoaWM6IHRoaXMuc2VsZWN0ZWREZW1vZ3JhcGhpY0ZvckRvd25sb2FkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRhYmxlQ29udGFpbmVyU2Nyb2xsZWQoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIHRoaXMuaXNTY3JvbGxlZExlZnQgPSBldmVudC50YXJnZXQuc2Nyb2xsTGVmdCA+IDA7XHJcbiAgICAgICAgdGhpcy5pc1Njcm9sbEVuZGVkID0gTWF0aC5yb3VuZChldmVudC50YXJnZXQuc2Nyb2xsTGVmdCkgPT0gZXZlbnQudGFyZ2V0LnNjcm9sbFdpZHRoIC0gZXZlbnQudGFyZ2V0LmNsaWVudFdpZHRoO1xyXG4gICAgICAgIHRoaXMucmVtb3ZlVG9vbHRpcE9uU2Nyb2xsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbW91c2VFbnRlck9uU3RyaW5nVGV4dEFjdGlvblR5cGUocm93RGF0YTogYW55LCB0b29sdGlwS2V5OiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnRleHRBY3Rpb25Ub29sdGlwID0gcm93RGF0YVt0b29sdGlwS2V5XTtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkljb25Ib3Zlci5lbWl0KHsgcm93RGF0YTogcm93RGF0YSwgdHlwZTogXCJvbi1lbnRlclwiIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlRW50ZXJPblN0cmluZ1RleHRBY3Rpb25UeXBlQ29udGFpbmluZ1RhYmxlKHJvd0RhdGE6IGFueSwgdG9vbHRpcEtleTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy50b29sdGlwQ29udGFpbmluZ1RhYmxlID0gcm93RGF0YVt0b29sdGlwS2V5XTtcclxuICAgIH1cclxuXHJcbiAgICBtb3VzZUxlYXZlVGV4dEFjdGlvblR5cGUocm93RGF0YTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25JY29uSG92ZXJMZWF2ZS5lbWl0KHsgcm93RGF0YTogcm93RGF0YSwgdHlwZTogXCJvbi1sZWF2ZVwiIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlRW50ZXJPblRleHRBY3Rpb25UeXBlKHJvd0RhdGE6IGFueSwgdG9vbHRpcEtleTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy50ZXh0QWN0aW9uVG9vbHRpcCA9IHJvd0RhdGFbdG9vbHRpcEtleV07XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGlja2FibGVEYXRhQ2xpY2tlZChSb3dkYXRhOiBhbnksIGlkOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLmNsaWNrYWJsZURhdGFDbGlja2VkLmVtaXQoeyBkYXRhOiBSb3dkYXRhLCBpZDogaWQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlVG9vbHRpcE9uU2Nyb2xsKCkge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInJlbWFya3MtaW5mby10b29sdGlwXCIpO1xyXG4gICAgICAgIC8vIGNvbnN0IHRvb2x0aXBFbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJ0b29sdGlwXCIpO1xyXG4gICAgICAgIGNvbnN0IGd0VG9vbHRpcCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJyZW1vdmUtb24tc2Nyb2xsLWNsYXNzXCIpO1xyXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIudG9vbHRpcDpub3QoLmtlZXAtb24tc2Nyb2xsLXRvb2x0aXApXCIpLmZvckVhY2goKGUpID0+IHtcclxuICAgICAgICAgICAgZS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgdGhpcy50b29sdGlwID0gbnVsbDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgd2hpbGUgKGVsZW1lbnRzICYmIGVsZW1lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZWxlbWVudHNbMF0ucmVtb3ZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdoaWxlIChndFRvb2x0aXAgJiYgZ3RUb29sdGlwLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZ3RUb29sdGlwWzBdLnJlbW92ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpY29uQ2xpY2tlZEluVG90YWxSb3coY29sTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy50b3RhbFJvd0ljb25DbGlja2VkLmVtaXQoY29sTmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlc01hZGVJbkVkaXRhYmxlSW5wdXRCb3goZXZlbnQ6IGFueSwgZWRpdGVkT2JqZWN0OiBhbnksIHBhc3RlRXZlbnQ6IGJvb2xlYW4pIHtcclxuICAgICAgICBsZXQgZW50ZXJlZFZhbHVlID0gcGFzdGVFdmVudCA/IGV2ZW50LmNsaXBib2FyZERhdGEuZ2V0RGF0YShcInRleHRcIikgOiBldmVudC5rZXk7XHJcbiAgICAgICAgbGV0IGRvdEluZGV4ID0gZWRpdGVkT2JqZWN0LnZhbHVlLmluZGV4T2YoXCIuXCIpO1xyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGV2ZW50LmtleUNvZGUgIT0gOCAmJlxyXG4gICAgICAgICAgICBldmVudC5rZXlDb2RlICE9IDQ2ICYmXHJcbiAgICAgICAgICAgICEoZXZlbnQua2V5Q29kZSA+PSAzNyAmJiBldmVudC5rZXlDb2RlIDw9IDQwKSAmJlxyXG4gICAgICAgICAgICAoKCFlZGl0ZWRPYmplY3Q/LmFsbG93U3BlY2lhbENoYXJhY3RlcnMgJiYgIS9bYDAtOS5dLy50ZXN0KGVudGVyZWRWYWx1ZSkpIHx8XHJcbiAgICAgICAgICAgICAgICAoZWRpdGVkT2JqZWN0Py5jaGFyYWN0ZXJzVG9SZXN0cmljdCAmJiBlZGl0ZWRPYmplY3Q/LmNoYXJhY3RlcnNUb1Jlc3RyaWN0LmluY2x1ZGVzKGVudGVyZWRWYWx1ZSkpIHx8XHJcbiAgICAgICAgICAgICAgICAoZWRpdGVkT2JqZWN0LmlzRGVjaW1hbFBvaW50Q2hlY2tSZXF1aXJlZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGRvdEluZGV4ID49IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICBldmVudD8udGFyZ2V0Py5zZWxlY3Rpb25TdGFydCA+IGRvdEluZGV4ICYmXHJcbiAgICAgICAgICAgICAgICAgICAgZWRpdGVkT2JqZWN0LnZhbHVlLmxlbmd0aCAtIChkb3RJbmRleCArIDEpID49IGVkaXRlZE9iamVjdC5tYXhEZWNpbWFsUG9pbnRzQWxsb3dlZCkpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGVkaXRhYmxlSW5wdXRWYWx1ZUNoYW5nZWQodmFsdWU6IGFueSwgcm93OiBhbnksIGtleUVkaXRlZDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0YWJsZUlucHV0RWRpdGVkLmVtaXQoeyByb3c6IHJvdywgdmFsdWU6IHZhbHVlLCBrZXlFZGl0ZWQ6IGtleUVkaXRlZCB9KTtcclxuICAgIH1cclxuXHJcbiAgICByYWRpb0J1dHRvbkljb25DbGlja2VkKGRhdGE6IGFueSkge1xyXG4gICAgICAgIHRoaXMucmFkaW9CdXR0b25NZXNzYWdlSWNvbkNsaWNrZWQuZW1pdChkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBmaWx0ZXJBcHBsaWVkKHRhYmxlRGF0YTogYW55W10pIHtcclxuICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IHRhYmxlRGF0YTtcclxuICAgICAgICB0aGlzLnNldEluaXRpYWxSb3dzRm9yVGFibGUoKTtcclxuICAgICAgICB0aGlzLmRpc2FibGVFbmFibGVFYWNoQ29sdW1uVG9vbHRpcEljb24oKTtcclxuICAgICAgICB0aGlzLmZpbHRlckFwcGxpZWRUb1RhYmxlLmVtaXQodGFibGVEYXRhKTtcclxuICAgICAgICB0aGlzLmNsb3NlVG9vbHRpcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNvcnRpbmdBcHBsaWVkKHRhYmxlRGF0YTogYW55W10pIHtcclxuICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IHRhYmxlRGF0YTtcclxuICAgICAgICB0aGlzLnNldEluaXRpYWxSb3dzRm9yVGFibGUoKTtcclxuICAgICAgICB0aGlzLmRpc2FibGVFbmFibGVFYWNoQ29sdW1uVG9vbHRpcEljb24oKTtcclxuICAgICAgICB0aGlzLnNvcnRpbmdBcHBsaWVkVG9UYWJsZS5lbWl0KHRhYmxlRGF0YSk7XHJcbiAgICAgICAgdGhpcy5jbG9zZVRvb2x0aXAoKTtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2XHJcbiAgICBpZD1cImdlbmVyaWMtdGFibGUtY29uYXRpbmVyXCJcclxuICAgIGNsYXNzPVwidGFibGUtY29udGFpbmVyIHt7IGd0R2VuZXJhbENvbmZpZz8udGFibGVPdXRlckNvbnRhaW5lck5hbWUgfX0ge3sgdGFibGVCb3R0b21Cb3JkZXJDbGFzcyB9fVwiXHJcbiAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgJ3Njcm9sbC1sZWZ0LXNoYWRvdy1lZmZlY3QnOiBpc1Njcm9sbGVkTGVmdCxcclxuICAgICAgICAnc2Nyb2xsLXJpZ2h0LXNoYWRvdy1lZmZlY3QnOiAhaXNTY3JvbGxFbmRlZCxcclxuICAgICAgICAnY2xpY2thYmxlLXJvdyc6IGNsaWNrYWJsZVJvdyxcclxuICAgICAgICAnbm8tZGF0YS10YWJsZSc6IChpc05vRGF0YVRvRGlzcGxheVN1YmplY3QkIHwgYXN5bmMpLFxyXG4gICAgICAgICd0YWJsZS13aXRoLXNob3ctaGlkZS10b3RhbC1yb3ctdG9nZ2xlJzogc2hvd09ySGlkZVRvZ2dsZUZvclRvdGFsUm93XHJcbiAgICB9XCJcclxuICAgIChzY3JvbGwpPVwib25UYWJsZUNvbnRhaW5lclNjcm9sbCgkZXZlbnQpXCJcclxuPlxyXG4gICAgPGRpdlxyXG4gICAgICAgIFtjbGFzc109XCJndEdlbmVyYWxDb25maWcudGFibGVDb250YWluZXJOYW1lXCJcclxuICAgICAgICBjbGFzcz1cImhvcml6b250YWwtc2Nyb2xsLWZvci10YWJsZS1jb250YWluZXJcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgaGVpZ2h0OlxyXG4gICAgICAgICAgICAgICAgdGFibGVEYXRhLmxlbmd0aCA8IG1heGltdW1Sb3dzV2hpY2hDYW5CZVJlbmRlcmVkV2l0aG91dFNjcm9sbFxyXG4gICAgICAgICAgICAgICAgICAgID8gJ2NhbGMoJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAoZ3REaW1lbnNpb24ucm93SGVpZ2h0ICogdGFibGVEYXRhLmxlbmd0aCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCF0YWJsZURhdGEubGVuZ3RoIHx8ICFndEdlbmVyYWxDb25maWcudG90YWxSb3dcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBndERpbWVuc2lvbi5oZWFkZXJIZWlnaHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBndERpbWVuc2lvbi5oZWFkZXJIZWlnaHQgKyBndERpbWVuc2lvbi5yb3dIZWlnaHQpKSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAncHgpJ1xyXG4gICAgICAgICAgICAgICAgICAgIDogZ3REaW1lbnNpb24udGFibGVIZWlnaHRcclxuICAgICAgICB9XCJcclxuICAgID5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0lmPVwic2hvd09ySGlkZVRvZ2dsZUZvclRvdGFsUm93ICYmICFzaG93U2tlbGV0b25Mb2FkaW5nICYmICEoaXNOb0RhdGFUb0Rpc3BsYXlTdWJqZWN0JCB8IGFzeW5jKVwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICdzaGlmdC10b2dnbGUtdG9wLW9uLXRvdGFsLXJvdy1jbGljayc6ICFndEdlbmVyYWxDb25maWcudG90YWxSb3dcclxuICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwic2hvdy1vci1oaWRlLXRvZ2dsZS1idG5cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwic2hvd0hpZGVUb3RhbFJvdygpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktbWVudS1zd2FwXCJcclxuICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInNob3ctb3ItaGlkZS10b2dnbGUtdG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJhdXRvXCJcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwic2hvd09ySGlkZVRvZ2dsZUZvclRvdGFsUm93VG9vbHRpcFwiXHJcbiAgICAgICAgICAgID48L2k+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPHRhYmxlXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZ3RcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ0YWJsZUNsYXNzXCJcclxuICAgICAgICAgICAgbWF0LXRhYmxlXHJcbiAgICAgICAgICAgIFtkYXRhU291cmNlXT1cInJlbmRlcmVkRGF0YVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8dHJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaGVhZGVyLXJvd1wiXHJcbiAgICAgICAgICAgICAgICBtYXQtaGVhZGVyLXJvd1xyXG4gICAgICAgICAgICAgICAgKm1hdEhlYWRlclJvd0RlZj1cInRhYmxlQ29sdW1uczsgc3RpY2t5OiB0cnVlXCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiZ3REaW1lbnNpb24uaGVhZGVySGVpZ2h0XCJcclxuICAgICAgICAgICAgPjwvdHI+XHJcbiAgICAgICAgICAgIDx0clxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0b3RhbC1yb3dcIlxyXG4gICAgICAgICAgICAgICAgbWF0LWhlYWRlci1yb3dcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiZ3REaW1lbnNpb24ucm93SGVpZ2h0XCJcclxuICAgICAgICAgICAgICAgICptYXRIZWFkZXJSb3dEZWY9XCJ0b3RhbFJvd0NvbHVtbnM7IHN0aWNreTogdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuaGlkZGVuXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgIHNob3dTa2VsZXRvbkxvYWRpbmcgfHxcclxuICAgICAgICAgICAgICAgICAgICAoIXNob3dTa2VsZXRvbkxvYWRpbmcgJiYgIXRhYmxlRGF0YS5sZW5ndGgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKGlzTm9EYXRhVG9EaXNwbGF5U3ViamVjdCQgfCBhc3luYykgfHxcclxuICAgICAgICAgICAgICAgICAgICAoIXNob3dTa2VsZXRvbkxvYWRpbmcgJiYgIWd0R2VuZXJhbENvbmZpZy50b3RhbFJvdylcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID48L3RyPlxyXG4gICAgICAgICAgICA8dHJcclxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dEYXRhLmd0Q2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnbm8tYm9yZGVyLXRyJzogKGlzTm9EYXRhVG9EaXNwbGF5U3ViamVjdCQgfCBhc3luYykgfVwiXHJcbiAgICAgICAgICAgICAgICBtYXQtcm93XHJcbiAgICAgICAgICAgICAgICAqbWF0Um93RGVmPVwibGV0IHJvd0RhdGE7IGNvbHVtbnM6IHRhYmxlQ29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImd0RGltZW5zaW9uLnJvd0hlaWdodFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGF0YVJvd0NsaWNrZWQocm93RGF0YSlcIlxyXG4gICAgICAgICAgICA+PC90cj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gVE9UQUwgUk9XIC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5jb2xOYW1lXCJcclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdG90YWxSb3dJbmZvOyB0cmFja0J5OiB0cmFja0J5Rm5cIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgICAgICAgICBtYXQtaGVhZGVyLWNlbGxcclxuICAgICAgICAgICAgICAgICAgICAqbWF0SGVhZGVyQ2VsbERlZlxyXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmNvbHNwYW5dPVwiY29sdW1uLmNvbHNwYW5cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgY29sdW1uLmNsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uWydpc0FjdGlvbkNvbHVtbiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YSBvZiBjb2x1bW4uYWN0aW9uRGF0YVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiZGF0YS5jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja2FibGVEYXRhQ2xpY2tlZCh7fSwgZGF0YS5pZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uWydpc0ljb25Db2x1bW4nXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBjb2x1bW4/Lmljb25EYXRhPy5jbGFzcyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaWNvbkNsaWNrZWRJblRvdGFsUm93KGNvbHVtbj8uY29sTmFtZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb2x1bW5bJ2lzQWN0aW9uQ29sdW1uJ11cIj5cclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZyBjbGFzcz1cInVwcGVyLWxhYmVsXCI+e3sgY29sdW1uLmRhdGEgfX0gPHNwYW4gY2xhc3M9XCJyZWQtdGV4dC10b3RvbC1yb3dcIiAqbmdJZj1cImNvbHVtbi5hZGRpdGlvbmFsUmVkVGV4dEFmdGVyRGF0YVwiPnt7Y29sdW1uLmFkZGl0aW9uYWxSZWRUZXh0QWZ0ZXJEYXRhfX08L3NwYW4+PC9zdHJvbmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4ubG93ZXJEYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmNvbE5hbWUgPT0gJ3RvdGFsLXBvdGVudGlhbC1ib29rZWQtdW5pdCcgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0R2VuZXJhbENvbmZpZy5jb21wb25lbnQgPT0gJ1JBVElORyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgY29sdW1uTG93ZXJEYXRhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNsaWNrYWJsZS1kYXRhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic3BvdERldGFpbHNEb3dubG9hZENsaWNrZWQoJ1RPVEFMUk9XJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2Rpc2FibGVkLWNsaWNrYWJsZS1kYXRhJzogZG93bmxvYWRJblByb2dyZXNzIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyBjb2x1bW4ubG93ZXJEYXRhIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBzcG90LWRldGFpbHMtZG93bmxvYWQtaWNvbnNcIj5nZXRfYXBwPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkb3dubG9hZEluUHJvZ3Jlc3MgJiYgc2VsZWN0ZWRSb3dUeXBlRm9yRG93bmxvYWQgPT0gJ1RPVEFMUk9XJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNpcmN1bGFyUHJvZ3Jlc3NCYXJcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY29sdW1uTG93ZXJEYXRhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibG93ZXItbGFiZWxcIj57eyBjb2x1bW4ubG93ZXJEYXRhIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4udG9vbHRpcE1lc3NhZ2UgJiYgZ3RHZW5lcmFsQ29uZmlnLmNvbXBvbmVudCAhPSAnTFVSX1ZJT0xBVElPTlMnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgY29sdW1uLnRvb2x0aXBJY29uQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImNvbHVtbi50b29sdGlwTWVzc2FnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwiZ3QtdG90YWwtcm93LXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImd0R2VuZXJhbENvbmZpZy5jb21wb25lbnQgPT0gJ0xVUl9WSU9MQVRJT05TJyAmJiBjb2x1bW4udG9vbHRpcE1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtaSBtZGktaW5mby1vdXRsaW5lIGluZm8tbGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImx1clZpb2xhdGlvblRvdGFsUm93VG9vbFRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwiZ3QtdG90YWwtcm93LXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBNQUlOIFJPVyAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgW21hdENvbHVtbkRlZl09XCJjb2x1bW5EZWYuaGVhZGVySW5mb1swXS5vYmplY3RLZXlcIlxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbkRlZiBvZiB0YWJsZUhlYWRlcnM7IHRyYWNrQnk6IHRyYWNrQnlGblwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDx0aFxyXG4gICAgICAgICAgICAgICAgICAgICN0YWJsZUhlYWRlclxyXG4gICAgICAgICAgICAgICAgICAgIG5vd3JhcFxyXG4gICAgICAgICAgICAgICAgICAgIG1hdC1oZWFkZXItY2VsbFxyXG4gICAgICAgICAgICAgICAgICAgICptYXRIZWFkZXJDZWxsRGVmXHJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbHVtbkRlZi53aWR0aFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdyBteC0wXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGhlYWRlciBvZiBjb2x1bW5EZWYuaGVhZGVySW5mbzsgbGV0IGogPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWFkZXIudHlwZU9mSGVhZGVyRGF0YSA9PT0gJ1NUUklORydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAndXBwZXItbGFiZWwnOiBqID09PSAwLCAnbG93ZXItbGFiZWwnOiBqID09PSAxIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNrZWxldG9uLWxvYWRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGVhZGVyLm5hbWUgPT0gbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ9XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGhlbWVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMHB4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2Jsb2NrJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGNvbHVtbkRlZi53aWR0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21heC13aWR0aCc6ICdjYWxjKDEwMCUgLSAyMHB4KSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LXNrZWxldG9uLWxvYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXIubmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGhlYWRlci5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC50b29sdGlwTWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBmbG9hdDogaGVhZGVyWyd0b29sdGlwJ10uaWNvblBvc2l0aW9uIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdD1cIm5nYlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiaGVhZGVyLnRvb2x0aXAudG9vbHRpcE1lc3NhZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcENsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGVhZGVyLnRvb2x0aXAgJiYgaGVhZGVyLnRvb2x0aXAubmFtZSA9PSAnaW1wc0luZm9Ub29sdGlwJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgZmxvYXQ6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbiB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdD1cIm5nYlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImltcHNJbmZvVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09ICdzcG90c0NvbHVtbkVxdWl2YWxpemF0aW9uTWVzc2FnZVRvb2x0aXAnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLmljb25DbGFzcyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBmbG9hdDogaGVhZGVyWyd0b29sdGlwJ10uaWNvblBvc2l0aW9uIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0PVwibmdiVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwic3BvdHNDb2x1bW5FcXVpdmFsaXphdGlvbk1lc3NhZ2VUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGVhZGVyLnRvb2x0aXAgJiYgaGVhZGVyLnRvb2x0aXAubmFtZSA9PSAndW5kZXJEZWxpdmVyeVRvb2x0aXAnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLmljb25DbGFzcyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBmbG9hdDogaGVhZGVyWyd0b29sdGlwJ10uaWNvblBvc2l0aW9uIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0PVwibmdiVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwidW5kZXJEZWxpdmVyeVRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBQb3NpdGlvbiB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcENsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09ICdvdmVyRGVsaXZlcnlUb29sdGlwJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgZmxvYXQ6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbiB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdD1cIm5nYlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cIm92ZXJEZWxpdmVyeVRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBQb3NpdGlvbiB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcENsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09ICdyYXRpbmdJbmZvVG9vbHRpcCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGZsb2F0OiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb24gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Q9XCJuZ2JUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJyYXRpbmdJbmZvVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT0gJ3JhdGVJbmZvVG9vbHRpcCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGZsb2F0OiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb24gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Q9XCJuZ2JUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJyYXRlSW5mb1Rvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBQb3NpdGlvbiB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcENsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09ICdvbmdvaW5nUmV2Qm9va2VkQ29sdW1uVG9vbHRpcCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGZsb2F0OiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb24gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Q9XCJuZ2JUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJvbmdvaW5nUmV2Qm9va2VkQ29sdW1uVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT0gJ2NvbXBsZXRlZFJldkJvb2tlZENvbHVtblRvb2x0aXAnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLmljb25DbGFzcyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBmbG9hdDogaGVhZGVyWyd0b29sdGlwJ10uaWNvblBvc2l0aW9uIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0PVwibmdiVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiY29tcGxldGVkUmV2Qm9va2VkQ29sdW1uVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT0gJ2F2Z0Jvb2tlZFJhdGUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLmljb25DbGFzcyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBmbG9hdDogaGVhZGVyWyd0b29sdGlwJ10uaWNvblBvc2l0aW9uIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0PVwibmdiVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiYXZnQm9va2VkUmF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT0gJ2F2Z0Jvb2tlZFJ0ZydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGZsb2F0OiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb24gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Q9XCJuZ2JUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJhdmdCb29rZWRSdGdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBQb3NpdGlvbiB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcENsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09ICdhdmdCb29rZWRJbXBzJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgZmxvYXQ6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbiB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdD1cIm5nYlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImF2Z0Jvb2tlZEltcHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBQb3NpdGlvbiB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcENsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGVhZGVyLnRvb2x0aXAgJiYgaGVhZGVyLnRvb2x0aXAubmFtZSA9PSAnYXV0b21hdGlvblRvb2x0aXAnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLmljb25DbGFzcyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBmbG9hdDogaGVhZGVyWyd0b29sdGlwJ10uaWNvblBvc2l0aW9uIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0PVwibmdiVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiYXV0b21hdGlvblRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBQb3NpdGlvbiB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcENsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGVhZGVyLnRvb2x0aXAgJiYgaGVhZGVyLnRvb2x0aXAubmFtZSA9PSAncmViYXRlSW1wYWN0J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgZmxvYXQ6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbiB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdD1cIm5nYlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInJlYmF0ZUltcGFjdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09ICdwcm9qZWN0ZWRJbXBzUnRnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgZmxvYXQ6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbiB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdD1cIm5nYlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInByb2plY3RlZEltcHNSdGdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBQb3NpdGlvbiB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcENsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlci50eXBlT2ZIZWFkZXJEYXRhID09PSAnQ0hFQ0tCT1gnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ3RHZW5lcmFsQ29uZmlnLmlzSGVhZGVyQ2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBjdXN0b20tY29sdW1uLWNoZWNrYm94LWNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RVbnNlbGVjdEFsbFJvd3MoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfYm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWd0R2VuZXJhbENvbmZpZy5pc0hlYWRlckNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgY3VzdG9tLWNvbHVtbi1jaGVja2JveC11bmNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2Rpc2FibGUtY2hlY2tib3gnOiBndEdlbmVyYWxDb25maWcuZGlzYWJsZUhlYWRlckNoZWNrYm94IH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RVbnNlbGVjdEFsbFJvd3MoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfYm94X291dGxpbmVfYmxhbmtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImd0R2VuZXJhbENvbmZpZy5zaG93QWxsQ29sdW1uRmlsdGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic29ydC1maWx0ZXItY29udGFpbmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlci5zaG93VG9vbHRpcEljb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEFjdGl2ZSB0b29sdGlwIEZ1bmN0aW9uYWxpdHkgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlci5maWx0ZXIgPT09ICdDSEVDS0JPWCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1maWx0ZXItdmFyaWFudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmUgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5uYUZpbHRlclNlcnZpY2UuaXNGaWx0ZXJTb3J0QWN0aXZlW2hlYWRlci5qb2luZWRGaWx0ZXJTb3J0T2JqZWN0S2V5c10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGhlYWRlci5kaXNhYmxlVG9vbHRpcEljb24gfHwgc2hvd1NrZWxldG9uTG9hZGluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJmaWx0ZXJUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInt7IGZpbHRlckFsaWdubWVudCB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cIm5vbi1lZGl0LWNoZWNrYm94LXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJtYW51YWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Q9XCJuZ2JUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJiaW5kVGhlVmFsdWVUb1Rvb2xUaXAodCwgaGVhZGVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGlkZGVuKT1cImNsb3NlVG9vbHRpcCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXIuZmlsdGVyID09PSAnU0xJREVSJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZpbHRlci12YXJpYW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmU6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubmFGaWx0ZXJTZXJ2aWNlLmlzRmlsdGVyU29ydEFjdGl2ZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmVbaGVhZGVyLmpvaW5lZEZpbHRlclNvcnRPYmplY3RLZXlzXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogaGVhZGVyLmRpc2FibGVUb29sdGlwSWNvbiB8fCBzaG93U2tlbGV0b25Mb2FkaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInNsaWRlclRvb2xUaXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tIGxlZnQtdG9wXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwibm9uLWVkaXQtc2xpZGVyLXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJtYW51YWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3QxPVwibmdiVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYmluZFRoZVZhbHVlVG9Ub29sVGlwKHQxLCBoZWFkZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoaWRkZW4pPVwiY2xvc2VUb29sdGlwKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlci5maWx0ZXIgPT09ICdEQVRFJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZpbHRlci12YXJpYW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmU6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubmFGaWx0ZXJTZXJ2aWNlLmlzRmlsdGVyU29ydEFjdGl2ZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmVbaGVhZGVyLmpvaW5lZEZpbHRlclNvcnRPYmplY3RLZXlzXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogaGVhZGVyLmRpc2FibGVUb29sdGlwSWNvbiB8fCBzaG93U2tlbGV0b25Mb2FkaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImRhdGVQaWNrZXJUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbSBhdXRvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwibm9uLWVkaXQtZGF0ZXBpY2tlci10b29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwiJ291dHNpZGUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJzPVwibWFudWFsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0Mj1cIm5nYlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImJpbmRUaGVWYWx1ZVRvVG9vbFRpcCh0MiwgaGVhZGVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGlkZGVuKT1cImNsb3NlVG9vbHRpcCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXIuZmlsdGVyID09PSAnV0VFSydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1maWx0ZXItdmFyaWFudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmUgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5uYUZpbHRlclNlcnZpY2UuaXNGaWx0ZXJTb3J0QWN0aXZlW2hlYWRlci5qb2luZWRGaWx0ZXJTb3J0T2JqZWN0S2V5c10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGhlYWRlci5kaXNhYmxlVG9vbHRpcEljb24gfHwgc2hvd1NrZWxldG9uTG9hZGluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJ3ZWVrUGlja2VyVG9vbFRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20gbGVmdC10b3BcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2Vycz1cIm1hbnVhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdDM9XCJuZ2JUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJiaW5kVGhlVmFsdWVUb1Rvb2xUaXAodDMsIGhlYWRlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhpZGRlbik9XCJjbG9zZVRvb2x0aXAoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyLmZpbHRlciA9PT0gJ1RJTUUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZmlsdGVyLXZhcmlhbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5uYUZpbHRlclNlcnZpY2UuaXNGaWx0ZXJTb3J0QWN0aXZlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubmFGaWx0ZXJTZXJ2aWNlLmlzRmlsdGVyU29ydEFjdGl2ZVtoZWFkZXIuam9pbmVkRmlsdGVyU29ydE9iamVjdEtleXNdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBoZWFkZXIuZGlzYWJsZVRvb2x0aXBJY29uIHx8IHNob3dTa2VsZXRvbkxvYWRpbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwidGltZUZpbHRlclRvb2xUaXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tIGxlZnQtdG9wIGF1dG9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJub24tZWRpdC10aW1lLXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJtYW51YWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Q0PVwibmdiVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYmluZFRoZVZhbHVlVG9Ub29sVGlwKHQ0LCBoZWFkZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoaWRkZW4pPVwiY2xvc2VUb29sdGlwKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaGVhZGVyLnNob3dUb29sdGlwSWNvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPVwibm8tZmlsdGVyLXNwYWNlXCI+PC9zcGFuPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGVhZGVyLnRvb2x0aXAgJiYgaGVhZGVyLnRvb2x0aXAubmFtZSA9PSAnbHVyVmlvbGF0aW9uSW5mb1Rvb2x0aXAnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLmljb25DbGFzcyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBmbG9hdDogaGVhZGVyWyd0b29sdGlwJ10uaWNvblBvc2l0aW9uIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0PVwibmdiVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwibHVyVmlvbGF0aW9uSW5mb1Rvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBQb3NpdGlvbiB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcENsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3RoPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm1hdENlbGxEZWY9XCJsZXQgUk9XX0RBVEFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWNlbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwiUk9XX0RBVEEuYmFja2dyb3VuZENvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJST1dfREFUQS5ib3JkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IFJPV19EQVRBLnJvd0NsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bMF0ub2JqZWN0S2V5ICsgJ1RkQ2xhc3MnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnJvd3NwYW5dPVwiUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bMF0ub2JqZWN0S2V5ICsgJ1Jvd3NwYW4nXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaGlkZVNvbWVUZHMgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoaWRlU29tZVRkcyAmJiAhUk9XX0RBVEFbJ2hpZGUnICsgY29sdW1uRGVmLmhlYWRlckluZm9bMF0ub2JqZWN0S2V5ICsgJ1RkJ10pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNrZWxldG9uLWxvYWRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93U2tlbGV0b25Mb2FkaW5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50PVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGhlbWVdPVwieyBoZWlnaHQ6ICcxMHB4JywgZGlzcGxheTogJ2Jsb2NrJyB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25neC1za2VsZXRvbi1sb2FkZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNob3dTa2VsZXRvbkxvYWRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJsZURhdGEubGVuZ3RoID4gMCAmJiAhKGlzTm9EYXRhVG9EaXNwbGF5U3ViamVjdCQgfCBhc3luYylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHN1YmxpbmUgb2YgY29sdW1uRGVmLmhlYWRlckluZm87XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3ViTGluZUluZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5Rm5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc2hvd0VsbGlwc2lzVGV4dE9uSG92ZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLnR5cGVPZkJvZHlEYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ0lDT04nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJyZWRJblByb2dyZXNzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLm9yZGVySWQgPT0gc2VsZWN0ZWRTdGFycmVkT3JkZXJJZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiUk9XX0RBVEEuaWNvbkNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpY29uQ2xpY2tlZChST1dfREFUQSwgUk9XX0RBVEEuaWNvbkNsYXNzKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2JUb29sdGlwPVwie3sgUk9XX0RBVEEuaWNvblRpdGxlVGV4dCB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJndC1pY29uLWNvbHVtbi10b29sdGlwIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJyZWRJblByb2dyZXNzICYmIFJPV19EQVRBLm9yZGVySWQgPT0gc2VsZWN0ZWRTdGFycmVkT3JkZXJJZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXItZm9yLWJ1dHRvbi1kaXJlY3RpdmVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidJQ09OX0NFTEwnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhY3Rpb24gb2YgUk9XX0RBVEFbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0uYWN0aW9uS2V5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGlvbi5zaG93T2JqZWN0S2V5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uLnNob3dJY29uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiYWN0aW9uLmljb25DbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlRW50ZXJPblN0cmluZ1RleHRBY3Rpb25UeXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLnRvb2x0aXBLZXlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tIGF1dG9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwidGVhbS11c2VyLXRvb2x0aXAgcmVtb3ZlLW9uLXNjcm9sbC1jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiYWN0aW9uLnNob3dUb29sdGlwID8gYWN0aW9uLnRvb2x0aXBEYXRhIDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWN0aW9uQ2xpY2tlZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZVRvb2x0aXBdPVwiIWFjdGlvbi5zaG93VG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInSFRNTF9TVFJJTkcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIlJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaW5uZXJIVE1MQ2VsbENsaWNrZWQoJGV2ZW50LCBST1dfREFUQSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInU1ZHX0lDT04nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhbm5hLWNvcmUtYW5uYS1pY29uLWNvbHVtblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudE5hbWVdPVwiZ3RHZW5lcmFsQ29uZmlnLmNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YU9iamVjdF09XCJST1dfREFUQVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvblRvU2hvd109XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25Db2x1bW5JY29uQ2xpY2tlZCk9XCJzdmdJY29uQ2xpY2tlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYW5uYS1jb3JlLWFubmEtaWNvbi1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidURVhUX0FDVElPTlMnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0ZXh0IG9mIFJPV19EQVRBW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLmFjdGlvbktleVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRleHQuc2hvd1Rvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFjdGlvbkNsaWNrZWQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0ZXh0LmlzRGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgdGV4dC5jbGFzcyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlRW50ZXJPblRleHRBY3Rpb25UeXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLnRvb2x0aXBLZXlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwidGV4dEFjdGlvblRvb2x0aXBUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYXV0b1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwiZ3QtaWNvbi1jb2x1bW4tdG9vbHRpcCByZW1vdmUtb24tc2Nyb2xsLWNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0ZXh0Lm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiF0ZXh0LnNob3dUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBY3Rpb25DbGlja2VkKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidGV4dC5pc0Rpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IHRleHQuY2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRleHQubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInQ0hFQ0tCT1gnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpc2FibGUtY2hlY2tib3gnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLmlzRGlzYWJsZWRLZXldXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgY3VzdG9tLWNvbHVtbi1jaGVja2JveC1jaGVja2VkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RPclVuc2VsZWN0Q2hlY2tib3goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19ib3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgY3VzdG9tLWNvbHVtbi1jaGVja2JveC11bmNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaXNhYmxlLWNoZWNrYm94JzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5pc0Rpc2FibGVkS2V5XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0T3JVbnNlbGVjdENoZWNrYm94KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19ib3hfb3V0bGluZV9ibGFua1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWN0aW9uIG9mIFJPV19EQVRBW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLmFjdGlvbktleVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24uc2hvd0ljb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJhY3Rpb24uaWNvbkNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBhY3Rpb24uZGlzYWJsZWRJY29uIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VzZUVudGVyT25TdHJpbmdUZXh0QWN0aW9uVHlwZUNvbnRhaW5pbmdUYWJsZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS50b29sdGlwS2V5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbSBhdXRvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInRvb2x0aXAtY29udGFpbmluZy10YWJsZSByZW1vdmUtb24tc2Nyb2xsLWNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJ0b29sdGlwQ29udGFpbmluZ1RhYmxlVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ0NMSUNLQUJMRV9EQVRBJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRleHQgb2YgUk9XX0RBVEFbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0uYWN0aW9uS2V5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ0ZXh0LmNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrYWJsZURhdGFDbGlja2VkKFJPV19EQVRBLCB0ZXh0LmlkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRleHQubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmxpbmUub2JqZWN0S2V5ID09ICdkaXNwbGF5Qm9va2VkVW5pdHMnICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RHZW5lcmFsQ29uZmlnLmNvbXBvbmVudCA9PSAnUkFUSU5HJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2xpY2thYmxlLWRhdGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNwb3REZXRhaWxzRG93bmxvYWRDbGlja2VkKCdEQVRBUk9XJywgUk9XX0RBVEEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2Rpc2FibGVkLWNsaWNrYWJsZS1kYXRhJzogZG93bmxvYWRJblByb2dyZXNzIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IFJPV19EQVRBLmRpc3BsYXlCb29rZWRVbml0cyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBzcG90LWRldGFpbHMtZG93bmxvYWQtaWNvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5nZXRfYXBwPC9zcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bmxvYWRJblByb2dyZXNzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLmludmVudG9yeUNvZGVJZCA9PVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJbnZlbnRvcnlJZEZvckRvd25sb2FkICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLmRlbW9ncmFwaGljID09IHNlbGVjdGVkRGVtb2dyYXBoaWNGb3JEb3dubG9hZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjaXJjdWxhclByb2dyZXNzQmFyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInU1RSSU5HX19fSUNPTl9PUl9URVhUX0FDVElPTidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFjdGlvbiBvZiBST1dfREFUQVtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5hY3Rpb25LZXlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJhY3Rpb24uYWRkaXRpb25hbFRleHRCZWZvcmVMaW5rQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckh0bWxdPVwiYWN0aW9uLmFkZGl0aW9uYWxUZXh0QmVmb3JlTGlua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdiVG9vbHRpcD1cInt7IGFjdGlvbi5hZGRpdGlvbmFsVGV4dEJlZm9yZUxpbmsgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwiZ3QtaWNvbi1jb2x1bW4tdG9vbHRpcCByZW1vdmUtb24tc2Nyb2xsLWNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZVRvb2x0aXBdPVwiIWFjdGlvbi5lbmFibGVUb29sdGlwRm9yQWRkaXRpb25hbFRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aW9uICYmIGFjdGlvbi50eXBlT2ZEYXRhID09ICdTVFJJTkcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYWN0aW9uLmRhdGEgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImFjdGlvbi5pZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24uc2hvd0xpbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFjdGlvbkNsaWNrZWQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImFjdGlvbi5saW5rQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgZGlzYWJsZWQ6IGFjdGlvbi5kaXNhYmxlZExpbmsgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IGFjdGlvbi5kYXRhIH19PC9hXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5nYlRvb2x0aXA9XCJ7eyBhY3Rpb24uYWRkaXRpb25hbFRleHRBZnRlckxpbmsgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImFjdGlvbi5hZGRpdGlvbmFsVGV4dEFmdGVyTGlua0NsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJndC1pY29uLWNvbHVtbi10b29sdGlwIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlVG9vbHRpcF09XCIhYWN0aW9uLmVuYWJsZVRvb2x0aXBGb3JBZGRpdGlvbmFsQWZ0ZXJUZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhY3Rpb24uYWRkaXRpb25hbFRleHRBZnRlckxpbmsgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aW9uLnNob3dUb29sdGlwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGlvbi50b29sdGlwRGF0YS5pbm5lckh0bWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uLnNob3dJY29uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJhY3Rpb24uaWNvbkNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgZGlzYWJsZWQ6IGFjdGlvbi5kaXNhYmxlZEljb24gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VzZUVudGVyT25TdHJpbmdUZXh0QWN0aW9uVHlwZUNvbnRhaW5pbmdUYWJsZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0udG9vbHRpcEtleVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20gYXV0b1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ0b29sdGlwLWNvbnRhaW5pbmctdGFibGUgcmVtb3ZlLW9uLXNjcm9sbC1jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJ0b29sdGlwQ29udGFpbmluZ1RhYmxlVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFhY3Rpb24udG9vbHRpcERhdGEudG9vbHRpcFRhYmxlQm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24uc2hvd0ljb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImFjdGlvbi5pY29uQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogYWN0aW9uLmRpc2FibGVkSWNvbiB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uQ2xpY2tlZE9uU3RyaW5nSWNvbkFjdGlvblR5cGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwibW91c2VMZWF2ZVRleHRBY3Rpb25UeXBlKFJPV19EQVRBKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VzZUVudGVyT25TdHJpbmdUZXh0QWN0aW9uVHlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0udG9vbHRpcEtleVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2VtZW50XT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi50b29sdGlwUGxhY2VtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYWN0aW9uLnRvb2x0aXBQbGFjZW1lbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnYm90dG9tIGF1dG8nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwidGVhbS11c2VyLXRvb2x0aXAgcmVtb3ZlLW9uLXNjcm9sbC1jbGFzcyB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi50b29sdGlwQ2xhc3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInVzZXJMb2dnZWRJbkRldGFpbHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGlvblsnc2hvd1N2Z0ljb24nXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFubmEtY29yZS1hbm5hLWVzdC1pY29uLXRlbXBsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbG9hdC1yaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb25bJ3N2Z0ljb25OYW1lJ10gPT0gJ2FubmEtaWNvbidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIm1vdXNlTGVhdmVUZXh0QWN0aW9uVHlwZShST1dfREFUQSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VzZUVudGVyT25TdHJpbmdUZXh0QWN0aW9uVHlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50b29sdGlwS2V5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZW1lbnRdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi50b29sdGlwUGxhY2VtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGFjdGlvbi50b29sdGlwUGxhY2VtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdib3R0b20gYXV0bydcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInRlYW0tdXNlci10b29sdGlwIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3Mge3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uWyd0b29sdGlwQ2xhc3MnXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJ1c2VyTG9nZ2VkSW5EZXRhaWxzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hbm5hLWNvcmUtYW5uYS1lc3QtaWNvbi10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWFjdGlvbi5zaG93VG9vbHRpcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uLnNob3dJY29uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImFjdGlvbi5pY29uQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBhY3Rpb24uZGlzYWJsZWRJY29uIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uQ2xpY2tlZE9uU3RyaW5nSWNvbkFjdGlvblR5cGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInU1RSSU5HX09SX0lOUFVUJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XT8udHlwZSA9PVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU1RSSU5HJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlucHV0Qm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckh0bWxdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpbnB1dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/LnBsYWNlaG9sZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dFbGxpcHNpc1RleHRPbkhvdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jbGFzc05hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXNNYWRlSW5FZGl0YWJsZUlucHV0Qm94KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhc3RlKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzTWFkZUluRWRpdGFibGVJbnB1dEJveChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlSW5wdXRWYWx1ZUNoYW5nZWQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV0udmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZGlzYWJsZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlZC1ib3JkZXInOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmhhc0Vycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2hvd0ljb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5pY29uVG9vbHRpcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwiZ3QtdG90YWwtcm93LXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5pY29uQ2xhc3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Nob3dTdmdJY29uJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YW5uYS1jb3JlLWFubmEtZXN0LWljb24tdGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbG9hdC1yaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1bXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N2Z0ljb25OYW1lJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA9PSAnYW5uYS1pY29uJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2VtZW50XT1cIidib3R0b20gYXV0bydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJndC10b3RhbC1yb3ctdG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmljb25Ub29sdGlwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FubmEtY29yZS1hbm5hLWVzdC1pY29uLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidIVE1MJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySHRtbF09XCJST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInU0lOR0xFX1JBRElPJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaXNhYmxlLWNoZWNrYm94JzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5pc0Rpc2FibGVkS2V5XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktcmFkaW9ib3gtbWFya2VkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIobnVsbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIVJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktcmFkaW9ib3gtYmxhbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaXNhYmxlLWNoZWNrYm94JzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5pc0Rpc2FibGVkS2V5XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0T3JVbnNlbGVjdENoZWNrYm94KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1JBRElPJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWdyb3VwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlJPV19EQVRBWydSYWRpb0J1dHRvbkNvbmZpZyddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIlJPV19EQVRBW3N1YmxpbmUub2JqZWN0S2V5XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiUk9XX0RBVEFbJ1JhZGlvQnV0dG9uQ29uZmlnJ11bMF0uaXNEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJhZGlvQnV0dG9uIG9mIFJPV19EQVRBWydSYWRpb0J1dHRvbkNvbmZpZyddO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGFzdCA9IGxhc3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwie3sgcmFkaW9CdXR0b24udmFsdWUgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IHJhZGlvQnV0dG9uLmNsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaW9CdXR0b25DbGlja2VkKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhZGlvQnV0dG9uLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBWydSYWRpb0J1dHRvbkNvbmZpZyddWzBdLmlzRGlzYWJsZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IHJhZGlvQnV0dG9uLmxhYmVsIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiIHt7IHJhZGlvQnV0dG9uLmljb25DbGFzcyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyYWRpb0J1dHRvbkljb25DbGlja2VkKFJPV19EQVRBKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgKm5nSWY9XCIhbGFzdFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcmFkaW8tZ3JvdXA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidTVFJJTkdfV0lUSF9UT09MVElQJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWN0aW9uIG9mIFJPV19EQVRBW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLmFjdGlvbktleVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiB7eyBhY3Rpb24/LmRhdGFUb0Rpc3BsYXkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uPy5zaG93VG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwidGV4dEFjdGlvblRvb2x0aXBUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlRW50ZXJPblN0cmluZ1RleHRBY3Rpb25UeXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLnRvb2x0aXBLZXlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlbWVudF09XCJhY3Rpb24/LnRvb2x0aXBQb3NpdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImFjdGlvbj8udG9vbHRpcEljb25DbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwiZ3QtaWNvbi1jb2x1bW4tdG9vbHRpcCByZW1vdmUtb24tc2Nyb2xsLWNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZVRvb2x0aXBdPVwiYWN0aW9uPy5kaXNhYmxlVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4ge3sgYWN0aW9uPy5kYXRhVG9EaXNwbGF5QWZ0ZXJUb29sdGlwIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3VibGluZS5vYmplY3RLZXkgIT0gJ2Rlc2NyaXB0aW9uJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJsaW5lLm9iamVjdEtleSA9PSAnaW52ZW50b3J5Q29kZScgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbJ2lzU2VsbGVyR3JvdXAnXSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndEdlbmVyYWxDb25maWcuY29tcG9uZW50ID09ICdSQVRJTkcnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1pIG1kaS1pbmZvLW91dGxpbmUgc2VsbGVyLXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInNlbGxlckhpZXJhcmNoeVRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbSBhdXRvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJzPVwibWFudWFsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGlkZGVuKT1cImNsb3NlVG9vbHRpcCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjaW5mbz1cIm5nYlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cImhpZXJhcmNoeS10b29sdGlwIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kVGhlVmFsdWVUb1NlbGxlckdyb3VwVG9vbHRpcChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLnNlbGxlckdyb3VwSGllcmFyY2h5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmxpbmUub2JqZWN0S2V5ID09ICdkaXNwbGF5Qm9va2VkQXZlcmFnZVJhdGluZycgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RHZW5lcmFsQ29uZmlnLmNvbXBvbmVudCA9PSAnUkFUSU5HJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVsnc2hvd1JhdGluZ0F2ZXJhZ2VJY29uJ11cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWkgbWRpLWluZm8tb3V0bGluZSBzZWxsZXItdG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tIGF1dG9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzRGlmZmVyZW5jZShST1dfREFUQS5pc0RpZmZlcmVuY2VMZXNzVGhhbjI1UGVyY2VudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInBvc3RlZC1hdmctdG9vbHRpcCByZW1vdmUtb24tc2Nyb2xsLWNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJwb3N0ZWRSYXRpbmdEaWZmZXJlbmNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmxpbmUub2JqZWN0S2V5ID09ICdkaXNwbGF5Qm9va2VkQXZlcmFnZUltcHJlc3Npb24nICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0R2VuZXJhbENvbmZpZy5jb21wb25lbnQgPT0gJ1JBVElORycgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbJ3Nob3dJbXByZXNzaW9uQXZlcmFnZUljb24nXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtaSBtZGktaW5mby1vdXRsaW5lIHNlbGxlci10b29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20gYXV0b1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9DbG9zZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNEaWZmZXJlbmNlKFJPV19EQVRBLmlzRGlmZmVyZW5jZUxlc3NUaGFuMjVQZXJjZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwicG9zdGVkLWF2Zy10b29sdGlwIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInBvc3RlZEltcERpZmZlcmVuY2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN1YmxpbmUub2JqZWN0S2V5ID09ICdkZXNjcmlwdGlvbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEuZGVzY3JpcHRpb25NZXNzYWdlIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLmRlc2NyaXB0aW9uRW1haWxSZWZlcmVuY2VOdW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJST1dfREFUQS5kZXNjcmlwdGlvbk1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgUk9XX0RBVEEuZGVzY3JpcHRpb25NZXNzYWdlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLmRlc2NyaXB0aW9uRW1haWxSZWZlcmVuY2VOdW0gIT0gJy0nICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQS5kZXNjcmlwdGlvbkVtYWlsUmVmZXJlbmNlTnVtICE9ICcnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbWFpbCBSZWY6IHt7IFJPV19EQVRBLmRlc2NyaXB0aW9uRW1haWxSZWZlcmVuY2VOdW0gfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9XCJ7eyBST1dfREFUQS5kZXNjcmlwdGlvbkRldGFpbHNVcmwgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEuZGVzY3JpcHRpb25EZXRhaWxzVXJsVHlwZSA9PT0gJ1BERicgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEuZGVzY3JpcHRpb25EZXRhaWxzVXJsVHlwZSA9PT0gJ0VYQ0VMJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biB2aWV3RGV0YWlsc0FuZEVtYWlsQnRuXCI+RG93bmxvYWQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlJPV19EQVRBLmFjdGl2aXR5bmFtZS50b0xvd2VyQ2FzZSgpID09ICdvcmRlciBvbmJvYXJkZWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlJPV19EQVRBLmRlc2NyaXB0aW9uRGV0YWlsc1VybFR5cGUgPT09ICdMSU5LJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ2aWV3RGV0YWlsc0NsaWNrZWQoUk9XX0RBVEEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gdmlld0RldGFpbHNBbmRFbWFpbEJ0biBvcmRlci1vbmJvYXJkZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXcgZGV0YWlsc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9XCJ7eyBST1dfREFUQS5kZXNjcmlwdGlvbkVtYWlsVXJsIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLmRlc2NyaXB0aW9uRW1haWxVcmwgIT0gJy0nICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLmRlc2NyaXB0aW9uRW1haWxVcmwgIT0gJydcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gdmlld0RldGFpbHNBbmRFbWFpbEJ0blwiPlZpZXcgZW1haWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc05vRGF0YVRvRGlzcGxheVN1YmplY3QkIHwgYXN5bmNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBudWxsIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L3RhYmxlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8YW5uYS1jb3JlLW5vLWRhdGEtbGliXHJcbiAgICAgICAgW3dpZHRoXT1cIm5vRGF0YVdpZHRoXCJcclxuICAgICAgICBbbWFyZ2luVG9wXT1cIm1hcmdpblRvcFwiXHJcbiAgICAgICAgKm5nSWY9XCJpc05vRGF0YVRvRGlzcGxheVN1YmplY3QkIHwgYXN5bmNcIlxyXG4gICAgPlxyXG4gICAgPC9hbm5hLWNvcmUtbm8tZGF0YS1saWI+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSBDaGVja2JveCB0ZW1wbGF0ZSAtLT5cclxuPG5nLXRlbXBsYXRlICNmaWx0ZXJUb29sdGlwPlxyXG4gICAgPGFubmEtY29yZS1hbm5hLWNvbHVtbi1jaGVja2JveC1maWx0ZXJcclxuICAgICAgICBbdGFibGVEYXRhXT1cInRhYmxlRGF0YVwiXHJcbiAgICAgICAgW3Nob3dGaWx0ZXJIZWFkZXJUYWJzXT1cInNob3dGaWx0ZXJUb29sdGlwVGFic1wiXHJcbiAgICAgICAgW2lzTHVyQW5kQ3NyQ29tcG9uZW50XT1cImZhbHNlXCJcclxuICAgICAgICBbY2xvbmVkVGFibGVEYXRhXT1cImNsb25lZFRhYmxlRGF0YVwiXHJcbiAgICAgICAgW2ZpbHRlclRhYk9iamVjdHNdPVwiZmlsdGVyVGFiT2JqZWN0c1wiXHJcbiAgICAgICAgKGZpbHRlckFwcGxpZWRUb1RhYmxlKT1cImZpbHRlckFwcGxpZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNvcnRpbmdBcHBsaWVkVG9UYWJsZSk9XCJzb3J0aW5nQXBwbGllZCgkZXZlbnQpXCJcclxuICAgICAgICAoY2xvc2VUb29sdGlwKT1cImNsb3NlVG9vbHRpcCgpXCJcclxuICAgID5cclxuICAgIDwvYW5uYS1jb3JlLWFubmEtY29sdW1uLWNoZWNrYm94LWZpbHRlcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gU2xpZGVyIHRlbXBsYXRlIC0tPlxyXG48bmctdGVtcGxhdGUgI3NsaWRlclRvb2xUaXA+XHJcbiAgICA8YW5uYS1jb3JlLWFubmEtY29sdW1uLXNsaWRlci1maWx0ZXJcclxuICAgICAgICBbdGFibGVEYXRhXT1cInRhYmxlRGF0YVwiXHJcbiAgICAgICAgW3Nob3dGaWx0ZXJIZWFkZXJUYWJzXT1cInNob3dGaWx0ZXJUb29sdGlwVGFic1wiXHJcbiAgICAgICAgW2lzTHVyQW5kQ3NyQ29tcG9uZW50XT1cImZhbHNlXCJcclxuICAgICAgICBbY2xvbmVkVGFibGVEYXRhXT1cImNsb25lZFRhYmxlRGF0YVwiXHJcbiAgICAgICAgW2ZpbHRlclRhYk9iamVjdHNdPVwiZmlsdGVyVGFiT2JqZWN0c1wiXHJcbiAgICAgICAgKGZpbHRlckFwcGxpZWRUb1RhYmxlKT1cImZpbHRlckFwcGxpZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNvcnRpbmdBcHBsaWVkVG9UYWJsZSk9XCJzb3J0aW5nQXBwbGllZCgkZXZlbnQpXCJcclxuICAgICAgICAoY2xvc2VUb29sdGlwKT1cImNsb3NlVG9vbHRpcCgpXCJcclxuICAgID5cclxuICAgIDwvYW5uYS1jb3JlLWFubmEtY29sdW1uLXNsaWRlci1maWx0ZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIERhdGUgUGlja2VyIFRlbXBsYXRlIC0tPlxyXG48bmctdGVtcGxhdGUgI2RhdGVQaWNrZXJUb29sdGlwPlxyXG4gICAgPGFubmEtY29yZS1hbm5hLWNvbHVtbi1kYXRlLXJhbmdlLWZpbHRlclxyXG4gICAgICAgIFt0YWJsZURhdGFdPVwidGFibGVEYXRhXCJcclxuICAgICAgICBbc2hvd0ZpbHRlckhlYWRlclRhYnNdPVwic2hvd0ZpbHRlclRvb2x0aXBUYWJzXCJcclxuICAgICAgICBbaXNMdXJBbmRDc3JDb21wb25lbnRdPVwiZmFsc2VcIlxyXG4gICAgICAgIFtjbG9uZWRUYWJsZURhdGFdPVwiY2xvbmVkVGFibGVEYXRhXCJcclxuICAgICAgICBbZmlsdGVyVGFiT2JqZWN0c109XCJmaWx0ZXJUYWJPYmplY3RzXCJcclxuICAgICAgICAoZmlsdGVyQXBwbGllZFRvVGFibGUpPVwiZmlsdGVyQXBwbGllZCgkZXZlbnQpXCJcclxuICAgICAgICAoc29ydGluZ0FwcGxpZWRUb1RhYmxlKT1cInNvcnRpbmdBcHBsaWVkKCRldmVudClcIlxyXG4gICAgICAgIChjbG9zZVRvb2x0aXApPVwiY2xvc2VUb29sdGlwKClcIlxyXG4gICAgPlxyXG4gICAgPC9hbm5hLWNvcmUtYW5uYS1jb2x1bW4tZGF0ZS1yYW5nZS1maWx0ZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIFdlZWsgUGlja2VyIFRlbXBsYXRlIC0tPlxyXG48bmctdGVtcGxhdGUgI3dlZWtQaWNrZXJUb29sVGlwPlxyXG4gICAgPCEtLSA8ZGl2IGNsYXNzPVwid2Vla3BpY2tlci1jb250YWluZXJcIj5cclxuICAgICAgICA8YW5uYS1jb3JlLXdlZWstY2FsZW5kYXItZmlsdGVyLWxpYlxyXG4gICAgICAgICAgICBbd2Vlay1jYWxlbmRhci1jb25maWddPVwiZ3RHZW5lcmFsQ29uZmlnLm11bHRpV2Vla1BpY2tlckNvbmZpZ1wiXHJcbiAgICAgICAgICAgIChhcHBseSk9XCJhcHBseVdlZWtGaWx0ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIFtmcm9tLWRhdGVdPVwiY2FsZW5kYXJNaW5FbmFibGVkRGF0ZVwiXHJcbiAgICAgICAgICAgIFt0by1kYXRlXT1cImNhbGVuZGFyTWF4RW5hYmxlZERhdGVcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L2FubmEtY29yZS13ZWVrLWNhbGVuZGFyLWZpbHRlci1saWI+XHJcbiAgICA8L2Rpdj4gLS0+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIFRpbWUgRmlsdGVyIFRlbXBsYXRlIC0tPlxyXG48bmctdGVtcGxhdGUgI3RpbWVGaWx0ZXJUb29sVGlwPlxyXG4gICAgPGFubmEtY29yZS1hbm5hLWNvbHVtbi10aW1lLWZpbHRlclxyXG4gICAgICAgIFt0YWJsZURhdGFdPVwidGFibGVEYXRhXCJcclxuICAgICAgICBbc2hvd0ZpbHRlckhlYWRlclRhYnNdPVwic2hvd0ZpbHRlclRvb2x0aXBUYWJzXCJcclxuICAgICAgICBbaXNMdXJBbmRDc3JDb21wb25lbnRdPVwiZmFsc2VcIlxyXG4gICAgICAgIFtzaG93QWxsVGltZVJhbmdlQ2hlY2tib3hlc109XCJzaG93Q2hlY2tib3hlc0ZvclRpbWVGaWx0ZXJcIlxyXG4gICAgICAgIFtjbG9uZWRUYWJsZURhdGFdPVwiY2xvbmVkVGFibGVEYXRhXCJcclxuICAgICAgICBbZmlsdGVyVGFiT2JqZWN0c109XCJmaWx0ZXJUYWJPYmplY3RzXCJcclxuICAgICAgICAoZmlsdGVyQXBwbGllZFRvVGFibGUpPVwiZmlsdGVyQXBwbGllZCgkZXZlbnQpXCJcclxuICAgICAgICAoc29ydGluZ0FwcGxpZWRUb1RhYmxlKT1cInNvcnRpbmdBcHBsaWVkKCRldmVudClcIlxyXG4gICAgICAgIChjbG9zZVRvb2x0aXApPVwiY2xvc2VUb29sdGlwKClcIlxyXG4gICAgPlxyXG4gICAgPC9hbm5hLWNvcmUtYW5uYS1jb2x1bW4tdGltZS1maWx0ZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2NvbHVtbkluZm9Ub29sdGlwPlxyXG4gICAgPHAgc3R5bGU9XCJjb2xvcjogYmxhY2s7IHdoaXRlLXNwYWNlOiBub3dyYXBcIj5UaGlzIHByZWVtcHRpb24gaXMgcmVqZWN0ZWQgYW5kIG5vdCBtYXJrZWQgZm9yIGNyZWRpdC48L3A+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3JhdGluZ0luZm9Ub29sdGlwPlxyXG4gICAgPHAgY2xhc3M9XCJmaXJzdC1yb3dcIj5TaG93cyAnQm9va2VkIFJhdGluZycgZm9yIFByZWVtcHRpb25zICYgTWFrZUdvb2QgT2ZmZXJlZCBzcG90KHMpLjwvcD5cclxuICAgIDxwIGNsYXNzPVwic2Vjb25kLXJvd1wiPlNob3dzICdQcm9qZWN0ZWQgUmF0aW5nJyBmb3IgQURVIE9mZmVyZWQgc3BvdChzKS48L3A+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2ltcHNJbmZvVG9vbHRpcD5cclxuICAgIDxwIGNsYXNzPVwiZmlyc3Qtcm93XCI+U2hvd3MgJ0Jvb2tlZCBJTVBTJyBmb3IgUHJlZW1wdGlvbnMgJiBNYWtlR29vZCBPZmZlcmVkIHNwb3QocykuPC9wPlxyXG4gICAgPHAgY2xhc3M9XCJzZWNvbmQtcm93XCI+U2hvd3MgJ1Byb2plY3RlZCBJTVBTJyBmb3IgQURVIE9mZmVyZWQgc3BvdChzKS48L3A+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3Nwb3RzQ29sdW1uRXF1aXZhbGl6YXRpb25NZXNzYWdlVG9vbHRpcD5cclxuICAgIDxwIGNsYXNzPVwic3BvdC1jb2x1bW4tdG9vbHRpcC1tZXNzYWdlXCI+XHJcbiAgICAgICAgVGhpcyBjb25zaXN0cyBvZiBlcXVpdmFsaXplZCBzcG90cyBhbmQgdW4tZXF1aXZhbGl6ZWQgUGFpZCBQcm9ncmFtcyAmIHVuLWVxdWl2YWxpemVkIE5vbi1zcG90cy5cclxuICAgIDwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjdW5kZXJEZWxpdmVyeVRvb2x0aXA+XHJcbiAgICA8cCBjbGFzcz1cInNwb3QtY29sdW1uLXRvb2x0aXAtbWVzc2FnZVwiPlxyXG4gICAgICAgIEluZGljYXRlcyB0aGUgVW5kZXItZGVsaXZlcnkgcGVyY2VudGFnZSBiYXNlZCBvbiBib29rZWQgYW5kIHBvc3RlZCBSVEcvSU1QUy5cclxuICAgIDwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjb3ZlckRlbGl2ZXJ5VG9vbHRpcD5cclxuICAgIDxwIGNsYXNzPVwic3BvdC1jb2x1bW4tdG9vbHRpcC1tZXNzYWdlXCI+XHJcbiAgICAgICAgSW5kaWNhdGVzIHRoZSBPdmVyLWRlbGl2ZXJ5IHBlcmNlbnRhZ2UgYmFzZWQgb24gYm9va2VkIGFuZCBwb3N0ZWQgUlRHL0lNUFMuXHJcbiAgICA8L3A+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3JhdGVJbmZvVG9vbHRpcD5cclxuICAgIDxwIGNsYXNzPVwiZmlyc3Qtcm93XCI+U2hvd3MgJ0Jvb2tlZCBSYXRlJyBmb3IgUHJlZW1wdGlvbnMgJiBNYWtlR29vZCBPZmZlcmVkIHNwb3QocykuPC9wPlxyXG4gICAgPHAgY2xhc3M9XCJzZWNvbmQtcm93XCI+U2hvd3MgJ1Byb2plY3RlZCAkIFZhbHVlJyBmb3IgQURVIE9mZmVyZWQgc3BvdChzKS48L3A+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3NlbGxlckhpZXJhcmNoeVRvb2x0aXA+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsbGVyR3JvdXBIaWVyYXJjaHkubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiaGllcmFyY2h5LXRhYmxlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJzZWxsZXItaGllcmFyY2h5LXRhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+IzwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5JbnZlbnRvcnkgQ29kZXM8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+UHJvZ3JhbS9EZXNjcmlwdGlvbjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBkYXRhIG9mIHNlbGxlckdyb3VwSGllcmFyY2h5OyBsZXQgdG9vbHRpcEluZGV4ID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IHRvb2x0aXBJbmRleCArIDEgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzaG93RWxsaXBzaXNUZXh0T25Ib3Zlcj57eyBkYXRhLkludmVudG9yeUNvZGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHNob3dFbGxpcHNpc1RleHRPbkhvdmVyPnt7IGRhdGEuUHJvZ3JhbSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICA8L3NlY3Rpb24+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxsZXJHcm91cEhpZXJhcmNoeS5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6ICMwMDBcIj5TZWxsZXIgZ3JvdXAgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyBpbnZlbnRvcnkgY29kZTwvc3Bhbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNsdXJWaW9sYXRpb25JbmZvVG9vbHRpcD5cclxuICAgIDxwIGNsYXNzPVwiZmlyc3Qtcm93XCI+VGhlIHZhbHVlcyBhcmUgZm9yIHRoZSBlbnRpcmUgd2Vlay48L3A+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3Bvc3RlZFJhdGluZ0RpZmZlcmVuY2U+XHJcbiAgICA8cCBjbGFzcz1cImRpZmZlcmVuY2UtdGV4dFwiPlxyXG4gICAgICAgIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gcG9zdGVkIGFuZCBib29rZWQgYXZlcmFnZSByYXRpbmcgaXNcclxuICAgICAgICB7eyBpc0RpZmZlcmVuY2VMZXNzVGhhbjI1UGVyY2VudCA/IFwibGVzc1wiIDogXCJtb3JlXCIgfX0gdGhhbiAyNSUuXHJcbiAgICA8L3A+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3Bvc3RlZEltcERpZmZlcmVuY2U+XHJcbiAgICA8cCBjbGFzcz1cImRpZmZlcmVuY2UtdGV4dFwiPlxyXG4gICAgICAgIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gcG9zdGVkIGFuZCBib29rZWQgYXZlcmFnZSBpbXByZXNzaW9uIGlzXHJcbiAgICAgICAge3sgaXNEaWZmZXJlbmNlTGVzc1RoYW4yNVBlcmNlbnQgPyBcImxlc3NcIiA6IFwibW9yZVwiIH19IHRoYW4gMjUlLlxyXG4gICAgPC9wPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNvbmdvaW5nUmV2Qm9va2VkQ29sdW1uVG9vbHRpcD5cclxuICAgIDxwPlRoZSBCb29rZWQgJCB2YWx1ZSwgU3BvdHMsIEdSUCwgQ1BQLCBJTVBTLCBDUE0gY29ycmVzcG9uZHMgb24gdGhlIGxhc3QgcGVybWFuZW50IHJldmlzaW9uIGdlbmVyYXRlZDwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY29tcGxldGVkUmV2Qm9va2VkQ29sdW1uVG9vbHRpcD5cclxuICAgIDxwPlRoZSBCb29rZWQgJCB2YWx1ZSBjb3JyZXNwb25kcyBvbiB0aGUgbGFzdCBwZXJtYW5lbnQgcmV2aXNpb24gZ2VuZXJhdGVkPC9wPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNhdmdCb29rZWRSYXRlPlxyXG4gICAgPHA+VGhpcyBpcyB0aGUgYm9va2VkIGF2ZXJhZ2UgUmF0ZTwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYXZnQm9va2VkUnRnPlxyXG4gICAgPHA+VGhpcyBpcyB0aGUgYm9va2VkIGF2ZXJhZ2UgUlRHPC9wPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNhdmdCb29rZWRJbXBzPlxyXG4gICAgPHA+VGhpcyBpcyB0aGUgYm9va2VkIGF2ZXJhZ2UgSU1QKOKAmTAwMCk8L3A+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3Byb2plY3RlZEltcHNSdGc+XHJcbiAgICA8cD5cclxuICAgICAgICBBbGwgcHJvamVjdGlvbnMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgc3VtIG9mIGFjdHVhbCBwb3N0ZWQgaW5mb3JtYXRpb24gdW50aWwgdGhlIGxhc3QgcG9zdGVkIGRhdGUgYW5kIGVzdGltYXRlc1xyXG4gICAgICAgIGZvciB0aGUgcmVtYWluaW5nIHNlbGVjdGVkIHBlcmlvZC5cclxuICAgIDwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYXV0b21hdGlvblRvb2x0aXA+XHJcbiAgICA8cD5cclxuICAgICAgICBQbGVhc2UgZ2V0IHRoZSBvcmRlciBidXNpbmVzcyBydWxlcyBhcHByb3ZlZCB0byBhY3RpdmF0ZSB0aGUgb3JkZXIgZm9yIGF1dG9tYXRpb24uIE9ubHkgZm9yIHRoZVxyXG4gICAgICAgIGF1dG9tYXRpb24tYWN0aXZhdGVkIG9yZGVycywgYW55IGFwcHJvdmVkIE1HcywgQURVcywgb3IgY3JlZGl0ZWQgc3BvdHMgb24gQU5OQSB3aWxsIGJlIGZlZCBpbnRvIHRoZSB0cmFmZmljXHJcbiAgICAgICAgc3lzdGVtIGkuZS4gQU5OQSByZXZpc2lvbnMuXHJcbiAgICAgICAgPCEtLSByZW1vdmVkIGJlbG93IGxpbmUgYXMgcGFydCBvZiBlbmhhbmNtZW5udCBpbiAxNC4wIHJlbGVhcyAtLT5cclxuICAgICAgICA8IS0tIEFkZGl0aW9uYWxseSwgQU5OQSB3aWxsIG9ubHkgZW50ZXIgYnV5ZXIgcmV2aXNpb25zIGludG8gdHJhZmZpYyBmb3IgdGhlIHNlbGVjdGVkXHJcbiAgICAgICAgTWVkaWFsaW5lL1dPQyBvcmRlcnMuIC0tPlxyXG4gICAgPC9wPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNyZWJhdGVJbXBhY3Q+XHJcbiAgICA8cD5SZWJhdGUgaW1wYWN0IHZhbHVlIGlzIGZvciB0aGUgb3JpZ2luYWxseSBvcmRlcmVkIHNwb3QgbGVuZ3RoIGFuZCBpcyBub3QgZXF1aXZhbGl6ZWQuPC9wPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNsdXJWaW9sYXRpb25Ub3RhbFJvd1Rvb2xUaXA+XHJcbiAgICA8dWw+XHJcbiAgICAgICAgPGxpPlxyXG4gICAgICAgICAgICA8c3Ryb25nPlBPTElUSUNBTCBSQVRFIFZJT0xBVElPTlM6PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIFZpb2xhdGlvbnMgZmxhZ2dlZCB3aGVuIG5vbi1wb2xpdGljYWwgc3BvdHMgYXJlIGJvb2tlZCBhdCBhIHJhdGUgbG93ZXIgdGhhbiB0aGUgbWluaW11bSBib29rZWQgcmF0ZSBmb3JcclxuICAgICAgICAgICAgcG9saXRpY2FsIGNhbmRpZGF0ZXMgZm9yIHRoZSBzYW1lIHdlZWssIEludmVudG9yeSBDb2RlIGFuZCBSZXZlbnVlIENsYXNzLlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPlxyXG4gICAgICAgICAgICA8c3Ryb25nPkNBTkRJREFURSBUTyBDQU5ESURBVEUgVklPTEFUSU9OOjwvc3Ryb25nPlxyXG4gICAgICAgICAgICBWaW9sYXRpb25zIGZsYWdnZWQgd2hlbiBwb2xpdGljYWwgc3BvdHMgYXJlIGJvb2tlZCBhdCBkaWZmZXJlbnQgcmF0ZXMgdG8gb3RoZXIgcG9saXRpY2FsIHNwb3RzIGZvciB0aGUgc2FtZVxyXG4gICAgICAgICAgICB3ZWVrLCBJbnZlbnRvcnkgQ29kZSBhbmQgUmV2ZW51ZSBDbGFzcy5cclxuICAgICAgICA8L2xpPlxyXG4gICAgPC91bD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY2lyY3VsYXJQcm9ncmVzc0Jhcj5cclxuICAgIDxjaXJjbGUtcHJvZ3Jlc3NcclxuICAgICAgICBbcGVyY2VudF09XCJwZXJjZW50RG9uZVwiXHJcbiAgICAgICAgW3JhZGl1c109XCI1XCJcclxuICAgICAgICBbc2hvd1RpdGxlXT1cImZhbHNlXCJcclxuICAgICAgICBbc2hvd1VuaXRzXT1cImZhbHNlXCJcclxuICAgICAgICBbc2hvd1N1YnRpdGxlXT1cImZhbHNlXCJcclxuICAgICAgICBbb3V0ZXJTdHJva2VXaWR0aF09XCIzXCJcclxuICAgICAgICBbaW5uZXJTdHJva2VXaWR0aF09XCIzXCJcclxuICAgICAgICBbc3BhY2VdPVwiLTNcIlxyXG4gICAgICAgIFtvdXRlclN0cm9rZUNvbG9yXT1cIicjMjY4YmZmJ1wiXHJcbiAgICAgICAgW2lubmVyU3Ryb2tlQ29sb3JdPVwiJyNkNWQ1ZDUnXCJcclxuICAgICAgICBbYW5pbWF0aW9uRHVyYXRpb25dPVwiMTBcIlxyXG4gICAgPjwvY2lyY2xlLXByb2dyZXNzPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICN1c2VyTG9nZ2VkSW5EZXRhaWxzPlxyXG4gICAgPGRpdiBjbGFzcz1cInRvb2x0aXAtZGl2LWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRhdGEgb2YgdGV4dEFjdGlvblRvb2x0aXBcIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkYXRhLmtleSAhPSAncmVhZCdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGEua2V5IH19IDxiPiB7eyBkYXRhLnZhbHVlIH19PC9iPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGF0YS5rZXkgPT0gJ3JlYWQnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhLnZhbHVlIH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNtYXJrQXNSZWFkVGlwPlxyXG4gICAgPGRpdiBjbGFzcz1cIm5vdGlmaWNhdGlvbi10b29sdGlwLWRpdi1jb250YWluZXJcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkYXRhIG9mIHRleHRBY3Rpb25Ub29sdGlwXCI+XHJcbiAgICAgICAgICAgIHt7IGRhdGEudmFsdWUgfX1cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICN0ZXh0QWN0aW9uVG9vbHRpcFRlbXBsYXRlPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZGF0YSBvZiB0ZXh0QWN0aW9uVG9vbHRpcFwiPlxyXG4gICAgICAgIHt7IGRhdGEua2V5IH19IDxiPiB7eyBkYXRhLnZhbHVlIH19PC9iPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3Nob3dPckhpZGVUb2dnbGVGb3JUb3RhbFJvd1Rvb2x0aXA+XHJcbiAgICA8ZGl2PlxyXG4gICAgICAgIHt7IHNob3dPckhpZGVUb2dnbGVGb3JUb3RhbFJvdyAmJiAhZ3RHZW5lcmFsQ29uZmlnLnRvdGFsUm93ID8gXCJTaG93IFRvdGFsIFJvd1wiIDogXCJIaWRlIFRvdGFsIFJvd1wiIH19XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjdG9vbHRpcENvbnRhaW5pbmdUYWJsZVRlbXBsYXRlPlxyXG4gICAgPGRpdlxyXG4gICAgICAgICpuZ0lmPVwidG9vbHRpcENvbnRhaW5pbmdUYWJsZVwiXHJcbiAgICAgICAgW2lubmVySFRNTF09XCJ0b29sdGlwQ29udGFpbmluZ1RhYmxlLmlubmVySHRtbFwiXHJcbiAgICAgICAgY2xhc3M9XCJub3RpZmljYXRpb24tdG9vbHRpcC1kaXYtY29udGFpbmVyXCJcclxuICAgID5cclxuICAgICAgICA8IS0tIDx1bD5cclxuICAgICAgPGxpICpuZ0Zvcj1cImxldCBoZWFkZXJNc2cgb2YgdG9vbHRpcENvbnRhaW5pbmdUYWJsZS50YWJsZUhlYWRlck1zZ1wiPlxyXG4gICAgICAgIDxiPiB7e2hlYWRlck1zZ319ICA8L2I+XHJcbiAgICAgIDwvbGk+XHJcbiAgICA8L3VsPlxyXG5cclxuICAgIDx0YWJsZSBjbGFzcz1cInRvb2x0aXAtdGFibGVcIj5cclxuICAgICAgPHRoZWFkPlxyXG4gICAgICAgIDx0cj5cclxuICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgaGVhZGVyIG9mIHRvb2x0aXBDb250YWluaW5nVGFibGUudG9vbHRpcFRhYmxlSGVhZGVyXCI+XHJcbiAgICAgICAgICAgIHt7IGhlYWRlcn19XHJcbiAgICAgICAgICA8L3RoPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgIDwvdGhlYWQ+XHJcbiAgICAgIDx0Ym9keT5cclxuICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHJvd3Mgb2YgdG9vbHRpcENvbnRhaW5pbmdUYWJsZS50b29sdGlwVGFibGVCb2R5XCI+XHJcbiAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGRhdGEgb2Ygcm93c1wiPlxyXG4gICAgICAgICAgICB7eyBkYXRhIH19XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgIDwvdGJvZHk+XHJcbiAgICA8L3RhYmxlPlxyXG5cclxuICAgIDx1bD5cclxuICAgICAgPGxpIHN0eWxlPVwibWFyZ2luLXRvcDoxMHB4OyBwYWRkaW5nOjBcIiAqbmdGb3I9XCJsZXQgZm9vdGVyTXNnIG9mIHRvb2x0aXBDb250YWluaW5nVGFibGUudGFibGVGb290ZXJNc2dcIj5cclxuICAgICAgICB7eyBmb290ZXJNc2cgfX0gXHJcbiAgICAgIDwvbGk+XHJcbiAgICA8L3VsPiAtLT5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tIDxuZy10ZW1wbGF0ZSAjdGV4dEFjdGlvblRvb2x0aXBUZW1wbGF0ZT5cclxuICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZGF0YSBvZiB0ZXh0QWN0aW9uVG9vbHRpcFwiPlxyXG4gICAgICB7eyBkYXRhLmtleSB9fSA8Yj4ge3tkYXRhLnZhbHVlfX08L2I+XHJcbiAgIDwvbmctY29udGFpbmVyPlxyXG48L25nLXRlbXBsYXRlPiAtLT5cclxuIl19
905
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1ub24tZWRpdGFibGUtZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbm5hLWNvcmUvc3JjL2xpYi9hbm5hLWdlbmVyaWMtdGFibGUtbGliL2NvbXBvbmVudHMvYW5uYS1ub24tZWRpdGFibGUtZ2VuZXJpYy10YWJsZS9hbm5hLW5vbi1lZGl0YWJsZS1nZW5lcmljLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FubmEtY29yZS9zcmMvbGliL2FubmEtZ2VuZXJpYy10YWJsZS1saWIvY29tcG9uZW50cy9hbm5hLW5vbi1lZGl0YWJsZS1nZW5lcmljLXRhYmxlL2FubmEtbm9uLWVkaXRhYmxlLWdlbmVyaWMtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCO0FBQzVCLE9BQU8sRUFDSCxTQUFTLEVBQ1QsT0FBTyxFQUNQLEtBQUssRUFDTCxJQUFJLEVBQ0osT0FBTyxFQUNQLFFBQVEsRUFDUixZQUFZLEVBQ1osZUFBZSxFQUNmLGdCQUFnQixHQUNuQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBRVQsWUFBWSxHQUNmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxnQ0FBZ0M7QUFDaEMsT0FBTyxFQUFFLFNB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cUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLDJCQUEyQjtzQkFBbkMsS0FBSztnQkFFSSxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNHLDBCQUEwQjtzQkFBbkMsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csNkJBQTZCO3NCQUF0QyxNQUFNO2dCQW1Dc0IscUJBQXFCO3NCQUFqRCxZQUFZO3VCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyIGltcG9ydCBzdGF0ZW1lbnRzXHJcbmltcG9ydCB7XHJcbiAgICBBc3luY1BpcGUsXHJcbiAgICBOZ0NsYXNzLFxyXG4gICAgTmdGb3IsXHJcbiAgICBOZ0lmLFxyXG4gICAgTmdTdHlsZSxcclxuICAgIE5nU3dpdGNoLFxyXG4gICAgTmdTd2l0Y2hDYXNlLFxyXG4gICAgTmdTd2l0Y2hEZWZhdWx0LFxyXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7XHJcbiAgICBBZnRlclZpZXdDaGVja2VkLFxyXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIENvbXBvbmVudCxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uQ2hhbmdlcyxcclxuICAgIE9uSW5pdCxcclxuICAgIE91dHB1dCxcclxuICAgIFF1ZXJ5TGlzdCxcclxuICAgIFNpbXBsZUNoYW5nZXMsXHJcbiAgICBWaWV3Q2hpbGRyZW4sXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgTWF0UmFkaW9Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvcmFkaW9cIjtcclxuaW1wb3J0IHsgTWF0VGFibGVNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGVcIjtcclxuaW1wb3J0IHsgTmdiVG9vbHRpcCB9IGZyb20gXCJAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcFwiO1xyXG4vLyBUaGlyZCBwYXJ0eSBpbXBvcnQgc3RhdGVtZW50c1xyXG5pbXBvcnQgeyBjbG9uZURlZXAsIGlzRXF1YWwsIHVuaXEgfSBmcm9tIFwibG9kYXNoLWVzXCI7XHJcbmltcG9ydCB7IE5nQ2lyY2xlUHJvZ3Jlc3NNb2R1bGUgfSBmcm9tIFwibmctY2lyY2xlLXByb2dyZXNzXCI7XHJcbmltcG9ydCB7IE5neFNrZWxldG9uTG9hZGVyTW9kdWxlIH0gZnJvbSBcIm5neC1za2VsZXRvbi1sb2FkZXJcIjtcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXHJcbmltcG9ydCB7IEFubmFJY29uQ29sdW1uQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL2NvbXBvbmVudHMvYW5uYS1pY29uLWNvbHVtbi9hbm5hLWljb24tY29sdW1uLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBBbm5hTm9EYXRhQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL2NvbXBvbmVudHMvYW5uYS1uby1kYXRhL2FubmEtbm8tZGF0YS5jb21wb25lbnRcIjtcclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cclxuaW1wb3J0IHsgU2hvd0VsbGlwc2lzVGV4dE9uSG92ZXJEaXJlY3RpdmUgfSBmcm9tIFwiLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvZGlyZWN0aXZlcy9zaG93LWVsbGlwc2lzLXRleHQvc2hvdy1lbGxpcHNpcy10ZXh0LmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1xyXG4gICAgR3RDb2x1bW5JY29uRW1pdHRlZERhdGEsXHJcbiAgICBSYXRpbmdTZWxsZXJHcm91cEhpZXJhcmNoeSxcclxufSBmcm9tIFwiLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvbW9kZWxzL2FubmEtZ2VuZXJpYy1kYXRhLXR5cGUubW9kZWxcIjtcclxuaW1wb3J0IHsgSVdlZWtDYWxlbmRhciB9IGZyb20gXCIuLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9tb2RlbHMvYW5uYS1nbG9iYWwtZHJvcGRvd24tY29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7XHJcbiAgICBJR3RHZW5lcmFsQ29uZmlnLFxyXG4gICAgSUd0VGFibGVIZWFkZXIsXHJcbiAgICBJSGVhZGVySW5mbyxcclxuICAgIElUb3RhbFJvd0luZm8sXHJcbn0gZnJvbSBcIi4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL21vZGVscy9hbm5hLW5vbi1lZGl0YWJsZS1ndC1tb2RlbHNcIjtcclxuaW1wb3J0IHsgUmFkaW9CdXR0b25Nb2RlbCB9IGZyb20gXCIuLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9tb2RlbHMvYW5uYS10b29sdGlwLm1vZGVsXCI7XHJcbmltcG9ydCB7IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvc2VydmljZXMvYW5uYS1kYXRlLXRpbWUtZm9ybWF0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQW5uYUZpbHRlclNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvc2VydmljZXMvYW5uYS1maWx0ZXIuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBBbm5hU29ydFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvc2VydmljZXMvYW5uYS1zb3J0LnNlcnZpY2VcIjtcclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cclxuaW1wb3J0IHsgQW5uYUNvbHVtbkNoZWNrYm94RmlsdGVyQ29tcG9uZW50IH0gZnJvbSBcIi4uL2FubmEtY29sdW1uLWZpbHRlcnMvYW5uYS1jb2x1bW4tY2hlY2tib3gtZmlsdGVyL2FubmEtY29sdW1uLWNoZWNrYm94LWZpbHRlci5jb21wb25lbnRcIjtcclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cclxuaW1wb3J0IHsgQW5uYUNvbHVtbkRhdGVSYW5nZUZpbHRlckNvbXBvbmVudCB9IGZyb20gXCIuLi9hbm5hLWNvbHVtbi1maWx0ZXJzL2FubmEtY29sdW1uLWRhdGUtcmFuZ2UtZmlsdGVyL2FubmEtY29sdW1uLWRhdGUtcmFuZ2UtZmlsdGVyLmNvbXBvbmVudFwiO1xyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxyXG5pbXBvcnQgeyBBbm5hQ29sdW1uU2xpZGVyRmlsdGVyQ29tcG9uZW50IH0gZnJvbSBcIi4uL2FubmEtY29sdW1uLWZpbHRlcnMvYW5uYS1jb2x1bW4tc2xpZGVyLWZpbHRlci9hbm5hLWNvbHVtbi1zbGlkZXItZmlsdGVyLmNvbXBvbmVudFwiO1xyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxyXG5pbXBvcnQgeyBBbm5hQ29sdW1uVGltZUZpbHRlckNvbXBvbmVudCB9IGZyb20gXCIuLi9hbm5hLWNvbHVtbi1maWx0ZXJzL2FubmEtY29sdW1uLXRpbWUtZmlsdGVyL2FubmEtY29sdW1uLXRpbWUtZmlsdGVyLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBBbm5hRXN0SWNvblRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL2NvbXBvbmVudHMvYW5uYS1lc3QtaWNvbi10ZW1wbGF0ZS9hbm5hLWVzdC1pY29uLXRlbXBsYXRlLmNvbXBvbmVudFwiO1xyXG5cclxuaW50ZXJmYWNlIEtleVZhbHVlVG9vbHRpcFR5cGUge1xyXG4gICAga2V5OiBzdHJpbmc7XHJcbiAgICB2YWx1ZTogc3RyaW5nO1xyXG59XHJcbmludGVyZmFjZSBUYWJsZVRvb2x0aXBUeXBlIHtcclxuICAgIHRvb2x0aXBUYWJsZUhlYWRlcjogc3RyaW5nW107XHJcbiAgICB0b29sdGlwVGFibGVCb2R5OiBzdHJpbmdbXVtdO1xyXG4gICAgdGFibGVIZWFkZXJNc2c6IHN0cmluZ1tdO1xyXG4gICAgdGFibGVGb290ZXJNc2c6IHN0cmluZ1tdO1xyXG4gICAgaW5uZXJIdG1sOiBzdHJpbmc7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6IFwiYW5uYS1jb3JlLW5vbi1lZGl0YWJsZS1nZW5lcmljLXRhYmxlLWxpYlwiLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwiLi9hbm5hLW5vbi1lZGl0YWJsZS1nZW5lcmljLXRhYmxlLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgICBzdHlsZVVybHM6IFtcIi4vYW5uYS1ub24tZWRpdGFibGUtZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuc2Nzc1wiXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgICBOZ0NsYXNzLFxyXG4gICAgICAgIE5nU3R5bGUsXHJcbiAgICAgICAgTWF0VGFibGVNb2R1bGUsXHJcbiAgICAgICAgTmdGb3IsXHJcbiAgICAgICAgTmdJZixcclxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxyXG4gICAgICAgIE5nYlRvb2x0aXAsXHJcbiAgICAgICAgTmd4U2tlbGV0b25Mb2FkZXJNb2R1bGUsXHJcbiAgICAgICAgU2hvd0VsbGlwc2lzVGV4dE9uSG92ZXJEaXJlY3RpdmUsXHJcbiAgICAgICAgTmdTd2l0Y2gsXHJcbiAgICAgICAgTmdTd2l0Y2hDYXNlLFxyXG4gICAgICAgIEFubmFJY29uQ29sdW1uQ29tcG9uZW50LFxyXG4gICAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICAgIE1hdFJhZGlvTW9kdWxlLFxyXG4gICAgICAgIE5nU3dpdGNoRGVmYXVsdCxcclxuICAgICAgICBBbm5hTm9EYXRhQ29tcG9uZW50LFxyXG4gICAgICAgIEFubmFDb2x1bW5DaGVja2JveEZpbHRlckNvbXBvbmVudCxcclxuICAgICAgICBBbm5hQ29sdW1uU2xpZGVyRmlsdGVyQ29tcG9uZW50LFxyXG4gICAgICAgIEFubmFDb2x1bW5EYXRlUmFuZ2VGaWx0ZXJDb21wb25lbnQsXHJcbiAgICAgICAgQW5uYUNvbHVtblRpbWVGaWx0ZXJDb21wb25lbnQsXHJcbiAgICAgICAgQW5uYUVzdEljb25UZW1wbGF0ZUNvbXBvbmVudCxcclxuICAgICAgICBOZ0NpcmNsZVByb2dyZXNzTW9kdWxlLFxyXG4gICAgICAgIEFzeW5jUGlwZSxcclxuICAgIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBbm5hTm9uRWRpdGFibGVHZW5lcmljVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3Q2hlY2tlZCB7XHJcbiAgICBASW5wdXQoKSBzaG93U2tlbGV0b25Mb2FkaW5nOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgdGFibGVIZWFkZXJzOiBJR3RUYWJsZUhlYWRlcltdO1xyXG4gICAgQElucHV0KCkgdGFibGVEYXRhOiBhbnlbXTtcclxuICAgIEBJbnB1dCgpIGNsb25lZFRhYmxlRGF0YTogYW55W107XHJcbiAgICBASW5wdXQoKSBndEdlbmVyYWxDb25maWc6IElHdEdlbmVyYWxDb25maWc7XHJcbiAgICBASW5wdXQoKSB0b3RhbFJvd0luZm8/OiBJVG90YWxSb3dJbmZvW107XHJcbiAgICBASW5wdXQoKSBndERpbWVuc2lvbjoge1xyXG4gICAgICAgIHJvd0hlaWdodDogbnVtYmVyO1xyXG4gICAgICAgIGhlYWRlckhlaWdodDogbnVtYmVyO1xyXG4gICAgICAgIGRhdGFPblRvcEhlaWdodDogbnVtYmVyO1xyXG4gICAgICAgIG1hcmdpbkZyb21Cb3R0b206IG51bWJlcjtcclxuICAgICAgICB0YWJsZUhlaWdodD86IHN0cmluZztcclxuICAgIH07XHJcbiAgICBASW5wdXQoKSB0YWJsZUNsYXNzOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBtYXhpbXVtUm93c1doaWNoQ2FuQmVSZW5kZXJlZFdpdGhvdXRTY3JvbGw6IG51bWJlciA9IDU7XHJcbiAgICBASW5wdXQoKSBmaXhOdW1iZXJPZlJvd3NGb3JQb3B1cDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgbGltaXQ6IG51bWJlciA9IDMwO1xyXG4gICAgQElucHV0KCkgaW5jbHVkZUJvcmRlckluVGFibGVIZWlnaHQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgQElucHV0KCkgZG93bmxvYWRJblByb2dyZXNzOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgcGVyY2VudERvbmU6IG51bWJlcjtcclxuICAgIEBJbnB1dCgpIHN0YXJyZWRJblByb2dyZXNzOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgY2xpY2thYmxlUm93OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBzZXRUYWJsZUhlaWdodFdoZW5Sb3dTaXplSXNGaXhlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBASW5wdXQoKSB0YWJsZUJvcmRlckJvdHRvbUNsYXNzUmVxdWlyZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgQElucHV0KCkgaGlkZVNvbWVUZHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIHRkc0hhdmVSb3dTcGFuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBtdWx0aXBsZVRhYmxlc1ByZXNlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIHNob3dPckhpZGVUb2dnbGVGb3JUb3RhbFJvdzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIEBPdXRwdXQoKSB0b2dnbGVDaGVja2JveCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSB0b2dnbGVSb3dDaGVja2JveCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSB0b2dnbGVIZWFkZXJDaGVja2JveCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSB1bmRvSWNvbkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgZmlsdGVyQXBwbGllZFRvVGFibGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgc29ydGluZ0FwcGxpZWRUb1RhYmxlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIHJvd0NsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgcmFkaW9CdXR0b25TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBjb2x1bW5GaWx0ZXJPcGVuZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgY29sdW1uRmlsdGVyQ2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIGd0SWNvbkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgZ3RTVkdJY29uQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBndFRleHRBY3Rpb25DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIGd0Vmlld0RldGFpbENsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgZ3RJbm5lckhUTUxDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIGRvd25sb2FkU3BvdERldGFpbHMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgY2xpY2thYmxlRGF0YUNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgdG90YWxSb3dJY29uQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBub3RpZmljYXRpb25JY29uSG92ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgbm90aWZpY2F0aW9uSWNvbkhvdmVyTGVhdmUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgZWRpdGFibGVJbnB1dEVkaXRlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSByYWRpb0J1dHRvbk1lc3NhZ2VJY29uQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgICBudW1iZXJPZlNrZWxldG9uUm93czogbnVtYmVyW11bXSA9IEFycmF5KDIwKS5maWxsKDApO1xyXG4gICAgdGFibGVEYXRhV3JhcHBlcjogYW55W107XHJcbiAgICByb3dDaGVja2VkOiBib29sZWFuO1xyXG4gICAgaXNBbGxSb3dzQ2hlY2tlZDogYm9vbGVhbjtcclxuICAgIG5vRGF0YVdpZHRoOiBzdHJpbmcgPSBcIjUwJVwiO1xyXG4gICAgbWFya2VkRm9yQ3JlZGl0U3RhdHVzOiBzdHJpbmc7XHJcbiAgICBtYXJrZWRGb3JNR1N0YXR1czogc3RyaW5nO1xyXG4gICAgZmlsdGVyQWxpZ25tZW50OiBzdHJpbmcgPSBcImJvdHRvbSBhdXRvXCI7XHJcblxyXG4gICAgLy8gU29ydCBhbmQgRmlsdGVyXHJcbiAgICB0b29sdGlwUmFkaW9UZXh0TWFwOiBNYXA8YW55LCBhbnk+O1xyXG4gICAgZmlsdGVyVGFiT2JqZWN0czogYW55W107XHJcbiAgICB0b29sdGlwOiBhbnk7XHJcbiAgICBkaXNhYmxlQ29sdW1uQ2xlYXJBbGxCdG46IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgbWFyZ2luID0gNTtcclxuXHJcbiAgICAvLyBXZWVrIEZpbHRlclxyXG4gICAgbXVsdGlXZWVrUGlja2VyQ29uZmlnOiBJV2Vla0NhbGVuZGFyO1xyXG5cclxuICAgIHRhYmxlQ29sdW1uczogc3RyaW5nW10gPSBbXTtcclxuICAgIHRvdGFsUm93Q29sdW1uczogc3RyaW5nW10gPSBudWxsO1xyXG4gICAgYmluZFZhbHVlRnVuY0NhbGxlZDogYm9vbGVhbjtcclxuXHJcbiAgICBoaWVyYXJjaHlUb29sdGlwOiB7IG9wZW46ICgpID0+IHZvaWQ7IGNsb3NlOiAoKSA9PiB2b2lkIH07XHJcbiAgICBzZWxsZXJHcm91cEhpZXJhcmNoeTogUmF0aW5nU2VsbGVyR3JvdXBIaWVyYXJjaHlbXTtcclxuICAgIHNob3dGaWx0ZXJUb29sdGlwVGFiczogYm9vbGVhbjsgLy8gQ2hhbmdlIHRoZSBOYW1lXHJcblxyXG4gICAgaXNTY3JvbGxlZExlZnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHJvd0JvcmRlcldpZHRoOiBudW1iZXIgPSAyO1xyXG5cclxuICAgIHNhbWVUb29sdGlwQ2xpY2tlZDogYm9vbGVhbjtcclxuICAgIGlzU2Nyb2xsRW5kZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgbWFyZ2luVG9wOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgQFZpZXdDaGlsZHJlbihcInRhYmxlSGVhZGVyXCIpIHZpZXdDaGlsZFRhYmxlSGVhZGVyczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xyXG5cclxuICAgIGlzRGlmZmVyZW5jZUxlc3NUaGFuMjVQZXJjZW50OiBib29sZWFuO1xyXG4gICAgc3RhcnQ6IG51bWJlciA9IDA7XHJcbiAgICBlbmQ6IG51bWJlciA9IHRoaXMubGltaXQgKyB0aGlzLnN0YXJ0O1xyXG4gICAgcmVuZGVyZWREYXRhOiBhbnlbXTtcclxuICAgIHNlbGVjdGVkSW52ZW50b3J5SWRGb3JEb3dubG9hZDogbnVtYmVyO1xyXG4gICAgc2VsZWN0ZWREZW1vZ3JhcGhpY0ZvckRvd25sb2FkOiBhbnk7XHJcbiAgICBzZWxlY3RlZFJvd1R5cGVGb3JEb3dubG9hZDogc3RyaW5nO1xyXG4gICAgaGVpZ2h0T2ZDaGVja2JveFRvb2x0aXBGaWx0ZXI6IG51bWJlcjtcclxuICAgIGlzTm9EYXRhVG9EaXNwbGF5U3ViamVjdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHNlbGVjdGVkU3RhcnJlZE9yZGVySWQ6IHN0cmluZztcclxuXHJcbiAgICB0ZXh0QWN0aW9uVG9vbHRpcDogS2V5VmFsdWVUb29sdGlwVHlwZVtdID0gW107XHJcbiAgICB0b29sdGlwQ29udGFpbmluZ1RhYmxlOiBUYWJsZVRvb2x0aXBUeXBlID0gbnVsbDtcclxuICAgIHRhYmxlQm90dG9tQm9yZGVyQ2xhc3M6IHN0cmluZyA9IG51bGw7XHJcbiAgICBzaG93Q2hlY2tib3hlc0ZvclRpbWVGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwcml2YXRlIGFubmFTb3J0U2VydmljZTogQW5uYVNvcnRTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBhbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlOiBBbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBhbm5hRmlsdGVyU2VydmljZTogQW5uYUZpbHRlclNlcnZpY2UsXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLnNldFRvb2x0aXBSYWRpb05hbWVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2V0TWFyZ2luTGVmdEZvckZpbHRlckljb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoYC0taGlkZS10b3RhbC1yb3ctc2Nyb2xsYmFyLW9mZnNldGAsIFwiMHB4XCIpO1xyXG4gICAgICAgIHRoaXMuc2V0RmlsdGVyQWxpZ25tZW50QmFzZWRPblNjcmVlblJlc29sdXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBkZXRlY3RDaGFuZ2VzKCkge1xyXG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGNoYW5nZXMgJiZcclxuICAgICAgICAgICAgY2hhbmdlcy5ndERpbWVuc2lvbiAmJlxyXG4gICAgICAgICAgICBjaGFuZ2VzLmd0RGltZW5zaW9uLmN1cnJlbnRWYWx1ZSAmJlxyXG4gICAgICAgICAgICB0aGlzLnNldFRhYmxlSGVpZ2h0V2hlblJvd1NpemVJc0ZpeGVkXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VGFibGVIZWlnaHQoKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRUYWJsZUJvdHRvbUJvcmRlcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5zaG93U2tlbGV0b25Mb2FkaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFibGVEYXRhID0gdGhpcy5udW1iZXJPZlNrZWxldG9uUm93cztcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlZERhdGEgPSB0aGlzLm51bWJlck9mU2tlbGV0b25Sb3dzO1xyXG4gICAgICAgICAgICB0aGlzLmlzTm9EYXRhVG9EaXNwbGF5U3ViamVjdCQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VGFibGVCb3R0b21Cb3JkZXIoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICBjaGFuZ2VzLnBlcmNlbnREb25lIHx8XHJcbiAgICAgICAgICAgIGNoYW5nZXMuZG93bmxvYWRJblByb2dyZXNzIHx8XHJcbiAgICAgICAgICAgIChjaGFuZ2VzLnN0YXJyZWRJblByb2dyZXNzICYmIGNoYW5nZXMuc3RhcnJlZEluUHJvZ3Jlc3MuY3VycmVudFZhbHVlICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIC8vIG5vIHRhc2sgd2lsbCBiZSBwZXJmb3JtZWRcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldEluaXRpYWxSb3dzRm9yVGFibGUoKTtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlRW5hYmxlRWFjaENvbHVtblRvb2x0aXBJY29uKCk7XHJcbiAgICAgICAgICAgIHRoaXMudGFibGVDb2x1bW5zID0gdGhpcy50YWJsZUhlYWRlcnMuZmlsdGVyKCh4KSA9PiB4LnZpc2libGUpLm1hcCgoeCkgPT4geC5oZWFkZXJJbmZvWzBdLm9iamVjdEtleSk7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICh0aGlzLnRhYmxlRGF0YSAmJiB0aGlzLnRhYmxlRGF0YS5sZW5ndGggPT09IDApIHx8XHJcbiAgICAgICAgICAgICAgICAodGhpcy50YWJsZURhdGEubGVuZ3RoID09PSAyICYmIHRoaXMuY2hlY2tJZkFsbFRoZUVsZW1lbnRzQXJlWmVybygpKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudGFibGVEYXRhID0gQXJyYXkoMikuZmlsbCgwKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZWREYXRhID0gY2xvbmVEZWVwKHRoaXMudGFibGVEYXRhKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubWFyZ2luVG9wID0gYCR7LXRoaXMuZ3REaW1lbnNpb24ucm93SGVpZ2h0IC0gdGhpcy5ndERpbWVuc2lvbi5yb3dIZWlnaHQgLyAyfXB4YDtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNOb0RhdGFUb0Rpc3BsYXlTdWJqZWN0JC5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc05vRGF0YVRvRGlzcGxheVN1YmplY3QkLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNob3dTa2VsZXRvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zZXRUYWJsZUJvdHRvbUJvcmRlcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2V0dGluZyB0YWJsZSBjb2x1bW4gaGVyZSBhcyB3ZWxsIGJlY2F1c2Ugd2hpbGUgc2hvd2luZyBza2VsZXRvbiBsb2FkZXIsIHdlIHNob3VsZCBzaG93IHRhYmxlIGhlYWRlcnMuXHJcbiAgICAgICAgaWYgKGNoYW5nZXMudGFibGVIZWFkZXJzICYmICFpc0VxdWFsKGNoYW5nZXMudGFibGVIZWFkZXJzLmN1cnJlbnRWYWx1ZSwgY2hhbmdlcy50YWJsZUhlYWRlcnMucHJldmlvdXNWYWx1ZSkpIHtcclxuICAgICAgICAgICAgdGhpcy50YWJsZUNvbHVtbnMgPSB0aGlzLnRhYmxlSGVhZGVycy5maWx0ZXIoKHgpID0+IHgudmlzaWJsZSkubWFwKCh4KSA9PiB4LmhlYWRlckluZm9bMF0ub2JqZWN0S2V5KTtcclxuICAgICAgICAgICAgdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlID0gbmV3IE1hcCgpO1xyXG4gICAgICAgICAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmluaXRpYWxWYWx1ZU1hcCA9IG5ldyBNYXAoKTtcclxuICAgICAgICAgICAgLy8gdGhpcy5zZXRDb2x1bW5Tb3J0U3RhdGVNYXAoKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVTdGF0ZU9iamVjdCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNoYW5nZXMudG90YWxSb3dJbmZvICYmIGNoYW5nZXMudG90YWxSb3dJbmZvLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvdGFsUm93Q29sdW1ucyA9IHRoaXMudG90YWxSb3dJbmZvLm1hcCgoeCkgPT4geC5jb2xOYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RmlsdGVyQWxpZ25tZW50QmFzZWRPblNjcmVlblJlc29sdXRpb24oKSB7XHJcbiAgICAgICAgY29uc3Qgdmlld3BvcnRIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcbiAgICAgICAgaWYgKHZpZXdwb3J0SGVpZ2h0IDwgNzQwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyQWxpZ25tZW50ID0gXCJsZWZ0IHJpZ2h0IHRvcCBib3R0b21cIjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlckFsaWdubWVudCA9IFwiYm90dG9tIGxlZnQgcmlnaHQgdG9wXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNldFRhYmxlQm90dG9tQm9yZGVyKCkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy50YWJsZUJvcmRlckJvdHRvbUNsYXNzUmVxdWlyZWQgJiZcclxuICAgICAgICAgICAgdGhpcy50YWJsZURhdGEgJiZcclxuICAgICAgICAgICAgdGhpcy50YWJsZURhdGEubGVuZ3RoICYmXHJcbiAgICAgICAgICAgIHRoaXMubWF4aW11bVJvd3NXaGljaENhbkJlUmVuZGVyZWRXaXRob3V0U2Nyb2xsIDwgdGhpcy50YWJsZURhdGEubGVuZ3RoXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFibGVCb3R0b21Cb3JkZXJDbGFzcyA9IFwiYm90dG9tLWJvcmRlclwiO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFibGVCb3R0b21Cb3JkZXJDbGFzcyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrSWZBbGxUaGVFbGVtZW50c0FyZVplcm8oKSB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLnRhYmxlRGF0YS5zb21lKChpdGVtKSA9PiBpdGVtICE9PSAwKTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93SGlkZVRvdGFsUm93KCkge1xyXG4gICAgICAgIHRoaXMuZ3RHZW5lcmFsQ29uZmlnLnRvdGFsUm93ID0gIXRoaXMuZ3RHZW5lcmFsQ29uZmlnLnRvdGFsUm93O1xyXG4gICAgICAgIGlmICghdGhpcy5ndEdlbmVyYWxDb25maWcudG90YWxSb3cpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KGAtLWhpZGUtdG90YWwtcm93LXNjcm9sbGJhci1vZmZzZXRgLCBcIjUwcHhcIik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KGAtLWhpZGUtdG90YWwtcm93LXNjcm9sbGJhci1vZmZzZXRgLCBcIjBweFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGFibGVIZWlnaHQoKSB7XHJcbiAgICAgICAgbGV0IHZpZXdwb3J0SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0O1xyXG4gICAgICAgIGNvbnN0IHsgcm93SGVpZ2h0IH0gPSB0aGlzLmd0RGltZW5zaW9uO1xyXG4gICAgICAgIGNvbnN0IHsgaGVhZGVySGVpZ2h0IH0gPSB0aGlzLmd0RGltZW5zaW9uO1xyXG4gICAgICAgIGNvbnN0IHsgZGF0YU9uVG9wSGVpZ2h0IH0gPSB0aGlzLmd0RGltZW5zaW9uO1xyXG4gICAgICAgIGNvbnN0IHsgbWFyZ2luRnJvbUJvdHRvbSB9ID0gdGhpcy5ndERpbWVuc2lvbjtcclxuICAgICAgICBsZXQgYWN0dWFsVGFibGVIZWlnaHQ7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmZpeE51bWJlck9mUm93c0ZvclBvcHVwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1heE5vT2ZSb3dzVG9EaXNwbGF5ID0gdmlld3BvcnRIZWlnaHQgPCA3NDAgPyA1IDogMTA7XHJcbiAgICAgICAgICAgIHRoaXMubWF4aW11bVJvd3NXaGljaENhbkJlUmVuZGVyZWRXaXRob3V0U2Nyb2xsID0gbWF4Tm9PZlJvd3NUb0Rpc3BsYXk7XHJcbiAgICAgICAgICAgIGFjdHVhbFRhYmxlSGVpZ2h0ID0gdGhpcy5tYXhpbXVtUm93c1doaWNoQ2FuQmVSZW5kZXJlZFdpdGhvdXRTY3JvbGwgKiByb3dIZWlnaHQgKyBoZWFkZXJIZWlnaHQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgbWluSGVpZ2h0Rm9yVGFibGUgPSBoZWFkZXJIZWlnaHQgKyAzICogcm93SGVpZ2h0O1xyXG4gICAgICAgICAgICB2aWV3cG9ydEhlaWdodCA9IHZpZXdwb3J0SGVpZ2h0IDw9IGRhdGFPblRvcEhlaWdodCA/IGRhdGFPblRvcEhlaWdodCArIG1pbkhlaWdodEZvclRhYmxlIDogdmlld3BvcnRIZWlnaHQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodExlZnRGb3JUYWJsZSA9IHZpZXdwb3J0SGVpZ2h0IC0gZGF0YU9uVG9wSGVpZ2h0IC0gbWFyZ2luRnJvbUJvdHRvbTtcclxuICAgICAgICAgICAgdGhpcy5tYXhpbXVtUm93c1doaWNoQ2FuQmVSZW5kZXJlZFdpdGhvdXRTY3JvbGwgPVxyXG4gICAgICAgICAgICAgICAgTWF0aC5jZWlsKChoZWlnaHRMZWZ0Rm9yVGFibGUgLSBoZWFkZXJIZWlnaHQgLSByb3dIZWlnaHQpIC8gcm93SGVpZ2h0KSArIDE7XHJcbiAgICAgICAgICAgIGFjdHVhbFRhYmxlSGVpZ2h0ID0gdmlld3BvcnRIZWlnaHQgLSBkYXRhT25Ub3BIZWlnaHQgLSBtYXJnaW5Gcm9tQm90dG9tO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbGV0IGFjdHVhbFRhYmxlSGVpZ2h0ID0gaGVpZ2h0TGVmdEZvclRhYmxlIC0gKChoZWlnaHRMZWZ0Rm9yVGFibGUgLSBoZWFkZXJIZWlnaHQgLSByb3dIZWlnaHQpICUgcm93SGVpZ2h0KTtcclxuXHJcbiAgICAgICAgdGhpcy5ndERpbWVuc2lvbi50YWJsZUhlaWdodCA9IGAke2FjdHVhbFRhYmxlSGVpZ2h0fXB4YDtcclxuXHJcbiAgICAgICAgdGhpcy5udW1iZXJPZlNrZWxldG9uUm93cyA9IHRoaXMubWF4aW11bVJvd3NXaGljaENhbkJlUmVuZGVyZWRXaXRob3V0U2Nyb2xsXHJcbiAgICAgICAgICAgID8gQXJyYXkodGhpcy5tYXhpbXVtUm93c1doaWNoQ2FuQmVSZW5kZXJlZFdpdGhvdXRTY3JvbGwpLmZpbGwoMClcclxuICAgICAgICAgICAgOiBBcnJheSg1KS5maWxsKDApO1xyXG4gICAgfVxyXG5cclxuICAgIHRyYWNrQnlGbihpbmRleDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIGluZGV4O1xyXG4gICAgfVxyXG5cclxuICAgIHNldFRvb2x0aXBSYWRpb05hbWVzKCkge1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcCA9IG5ldyBNYXAoKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiU3RhcnRUaW1lRm9yRmlsdGVyXCIsIFwiU3RhcnQgVGltZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiRW5kVGltZUZvckZpbHRlclwiLCBcIkVuZCBUaW1lXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJzdGFydFRpbWVGb3JGaWx0ZXJcIiwgXCJTdGFydCBUaW1lXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJlbmRUaW1lRm9yRmlsdGVyXCIsIFwiRW5kIFRpbWVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInN0YXJ0X3RpbWVfZm9yX2ZpbHRlclwiLCBcIlN0YXJ0IFRpbWVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImVuZF90aW1lX2Zvcl9maWx0ZXJcIiwgXCJFbmQgVGltZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicHJpbWFyeUFFTmFtZVwiLCBcIlByaW1hcnkgQUVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInJlZ2lvblwiLCBcIlJlZ2lvblwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYWdlbmN5TmFtZVwiLCBcIkFnZW5jeVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwibG9jYXRpb25cIiwgXCJMb2NhdGlvblwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYWR2ZXJ0aXNlck5hbWVcIiwgXCJBZHZlcnRpc2VyXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwcm9kdWN0Q29kZVwiLCBcIlByb2R1Y3QgQ29kZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZmxpZ2h0U3RhcnREYXRlXCIsIFwiU3RhcnQgRGF0ZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZmxpZ2h0RW5kRGF0ZVwiLCBcIkVuZCBEYXRlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJvcmRlcklkQW5kUmV2TnVtYmVyXCIsIFwiU1ROIE9yZGVyIy1SZXYjXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJzdGF0aW9uT3JkZXJOdW1iZXJcIiwgXCJTVE4gT3JkZXIjXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJhbHRlcm5hdGVPcmRlcklkXCIsIFwiQWx0L1JlcCBPcmRlciAjXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJncnBcIiwgXCJHUlBcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImNwcFwiLCBcIkNQUFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiaW1wc1wiLCBcIklNUFNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImNwbVwiLCBcIkNQTVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwib2ZmZXJlZE1Hc1wiLCBcIk9mZmVyZWQgTUdcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIm91dHN0YW5kaW5nUEVcIiwgXCJPL1MgUEVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIm9mZmVyZWRBRFVzXCIsIFwiT2ZmZXJlZCBBRFVzXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJ1ZERlZmljaXRWYWx1ZVwiLCBcIk8vUyBBdWQgRGVsdGFcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInN0YXJ0RW5kVGltZU11bHRpXCIsIFwiVGltZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkVmFsdWVcIiwgXCJCb29rZWRcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZFNwb3RzXCIsIFwiU3BvdHNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlVzZXJDcmVkaXRlZFZhbHVlXCIsIFwiVXNlciBDcmVkaXRlZFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiVXNlclVucmVzb2x2ZWRWYWx1ZVwiLCBcIlVzZXIgVW5yZXNvbHZlZFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQnV5ZXJBZGRlZFZhbHVlXCIsIFwiQnV5ZXIgQWRkZWRcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkJ1eWVyRGVsZXRlZFZhbHVlXCIsIFwiQnV5ZXIgRGVsZXRlZFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwidXNlckNoYW5nZXNcIiwgXCJVc2VyIENoYW5nZXNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJ1eWVyQ2hhbmdlc1wiLCBcIkJ1eWVyIENoYW5nZXNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInVzZXJNR1wiLCBcIlVzZXIgTUdcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInVzZXJBRFVzXCIsIFwiVXNlciBBRFVzXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJpbnZlbnRvcnlDb2RlXCIsIFwiSW52ZW50b3J5IENvZGVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInByb2dyYW1cIiwgXCJQcm9ncmFtXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJhZ2VuY3lcIiwgXCJBZ2VuY3lcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImFkdmVydGlzZXJcIiwgXCJBZHZlcnRpc2VyXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJzdGFydERhdGVcIiwgXCJTdGFydCBEYXRlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJlbmREYXRlXCIsIFwiRW5kIERhdGVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImRhdGVcIiwgXCJEYXRlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJyY3ZQcmVlbXB0XCIsIFwiJCBNYWRlZ29vZCBQRXNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIm9zUHJlZW1wdFwiLCBcIiQgTy9TIFBFc1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicmN2VW5kZXJEbHlcIiwgXCJSZWNvdmVyZWQgVURcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIm9zVW5kZXJEbHlcIiwgXCJPL3MgVW5kZXIgRGx5XCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwcmltYXJ5QWVcIiwgXCJQcmltYXJ5IEFFXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJyZWdpb25cIiwgXCJSZWdpb25cIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInJldkNvZGUxXCIsIFwiUmV2IGNvZGUgMVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwib3JkZXJOb1Jldk5vXCIsIFwiU1ROIE9yZGVyIy1SZXYjXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJyZXZDb2RlMlwiLCBcIlJldiBjb2RlIDJcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInJldkNvZGUzXCIsIFwiUmV2IGNvZGUgM1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkXCIsIFwiJCBCb29rZWRcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInNwb3RzXCIsIFwiU3BvdHNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInBvc3RlZEF1ZFBlcmNlbnRcIiwgXCJQb3N0ZWQgJVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicmV2aXNpb25cIiwgXCJSZXZpc2lvblwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYnV5ZXJPcmRlcklkXCIsIFwiQUxUL1JFUCBPcmRlciNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImRlbW9cIiwgXCJEZW1vXCIpO1xyXG5cclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYXZlcmFnZVJhdGVUaGlzWWVhclwiLCBcIkF2Zy4gUmF0ZSAoVFkpXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJhdmVyYWdlUmF0ZUxhc3RZZWFyXCIsIFwiQXZnLiBSYXQgKExZKVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYXZlcmFnZUNQUFwiLCBcIkF2Zy4gQ1BQXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwcm9qZWN0ZWRDUFBcIiwgXCJQcm9qLiBDUFAgKDMwcylcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInByb2plY3RlZENQTVwiLCBcIlByb2ouIENQTSAoMzBzKVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYXZlcmFnZUNQTVwiLCBcIkF2Zy4gQ1BNXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJJTVBTRGlmZlwiLCBcIklNUFMgKCcwMDApIERpZmYuXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJSVEdEaWZmXCIsIFwiUlRHIERpZmYuXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJib29rZWRFcUNwbVZhbHVlXCIsIFwiQm9va2VkIENQTSAoMzBzKVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkRXFDcHBWYWx1ZVwiLCBcIkJvb2tlZCBDUFAgKDMwcylcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInBvc3RlZEFkdVwiLCBcIiQgUG9zdGVkIEFEVXNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInNjaGVkdWxlZEFkdVwiLCBcIiQgU2NoZWR1bGVkIEFEVXNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImF1ZGllbmNlRGVmaWNpdFwiLCBcIiQgTy9TIEF1ZGllbmNlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwb3N0ZWRBdWRQZXJjZW50XCIsIFwiUG9zdGVkIEF1ZGllbmNlICVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInBvdGVudGlhbFVuaXRzVmFsdWVcIiwgXCJQT1QgVW5pdHNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZFVuaXRzVmFsdWVcIiwgXCJCb29rZWQgRXEgVW5pdHNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZEFtb3VudFdpdGhaZXJvUmF0aW5nVmFsdWVcIiwgXCJUb3RhbCAkIEJvb2tlZFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkQW1vdW50UGVyY2VudGFnZVdpdGhaZXJvUmF0aW5nVmFsdWVcIiwgXCIlIEFnYWluc3QgQWxsIERlbW9zXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJib29rZWRBbW91bnRXaXRob3V0WmVyb1JhdGluZ1ZhbHVlXCIsIFwiJEJvb2tlZCBXaXRoIEltcHMo4oCZMDAwKVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkQW1vdW50UGVyY2VudGFnZVdpdGhvdXRaZXJvUmF0aW5nVmFsdWVcIiwgXCIlIEFnYWluc3QgQWxsIERlbW9zXCIpO1xyXG5cclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwidG90YWxCb29rZWRBbW91bnRWYWx1ZVwiLCBcIlRvdGFsICRCb29rZWRcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImF2ZXJhZ2VVbml0UmF0ZVZhbHVlXCIsIFwiIEFVUlwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwidG90YWxCb29rZWRBbW91bnRXaXRoUmF0aW5nVmFsdWVcIiwgXCIkQm9va2VkIFdpdGggUmF0aW5nXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJhdmVyYWdlVW5pdFJhdGVXaXRoUmF0aW5nVmFsdWVcIiwgXCJBVVIgV2l0aCBSYXRpbmdcIik7XHJcblxyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJ0b3RhbEJvb2tlZEFtb3VudFdpdGhJbXByZXNzaW9uVmFsdWVcIiwgXCIkQm9va2VkIFdpdGggSU1QU1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYXZlcmFnZVVuaXRSYXRlV2l0aEltcHJlc3Npb25WYWx1ZVwiLCBcIkFVUiBXaXRoIElNUFNcIik7XHJcblxyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJib29rZWRVbml0c1dpdGhSYXRpbmdWYWx1ZVwiLCBcIkJvb2tlZCBVbml0cyBXaXRoIFJhdGluZ1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicG9zdGVkVW5pdHNXaXRoUmF0aW5nVmFsdWVcIiwgXCJQb3N0ZWQgVW5pdHMgV2l0aCBSYXRpbmdcIik7XHJcblxyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJib29rZWRVbml0c1dpdGhJbXByZXNzaW9uVmFsdWVcIiwgXCJCb29rZWQgVW5pdHMgV2l0aCBJTVBTXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwb3N0ZWRVbml0c1dpdGhJbXByZXNzaW9uVmFsdWVcIiwgXCJQb3N0ZWQgVW5pdHMgV2l0aCBJTVBTXCIpO1xyXG5cclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkUmF0aW5nc1wiLCBcIkJvb2tlZCBSYXRpbmdcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInBvc3RlZFJhdGluZ3NcIiwgXCJQT1NURUQgUmF0aW5nXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJQb3N0ZWRSYXRpbmdcIiwgXCJQb3N0ZWQgUlRHXCIpO1xyXG5cclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkSW1wcmVzc2lvbnNcIiwgXCJCb29rZWQgSU1QKCcwMDApXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwb3N0ZWRJbXByZXNzaW9uc1wiLCBcIlBvc3RlZCBJTVAoJzAwMClcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlBvc3RlZEltcHJlc3Npb25zXCIsIFwiUG9zdGVkIElNUCgnMDAwKVwiKTtcclxuXHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZEF2ZXJhZ2VSYXRpbmdcIiwgXCJCb29rZWQgQVUgUmF0aW5nXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwb3N0ZWRBdmVyYWdlUmF0aW5nXCIsIFwiUG9zdGVkIEFVIFJhdGluZ1wiKTtcclxuXHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZEF2ZXJhZ2VJbXByZXNzaW9uXCIsIFwiQm9va2VkIEFVIElNUFNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInBvc3RlZEF2ZXJhZ2VJbXByZXNzaW9uXCIsIFwiUG9zdGVkIEFVIElNUFNcIik7XHJcblxyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJib29rZWRDcHBWYWx1ZVwiLCBcIkJvb2tlZCBDUFBcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZEVmZmVjdGl2ZUNwcFZhbHVlXCIsIFwiRWZmZWN0aXZlIENQUFwiKTtcclxuXHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZENwbVZhbHVlXCIsIFwiQm9va2VkIENQTVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkRWZmZWN0aXZlQ3BtVmFsdWVcIiwgXCJFZmZlY3RpdmUgQ1BNXCIpO1xyXG5cclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwib3JkZXJTb3VyY2VcIiwgXCJPcmRlciBSb3V0ZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwib3JkZXJDYXRlZ29yeVwiLCBcIlJldiBDYXRlZ29yeVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiY2FzaE9yVHJhZGVcIiwgXCJDL1RcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInJldmlzaW9uU3RhcnREYXRlXCIsIFwiUmV2aXNpb24gU3RhcnQgRGF0ZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwibmFtZVwiLCBcIm5hbWVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInJvbGVcIiwgXCJyb2xlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJzdGF0aW9uQ291bnRcIiwgXCJzdGF0aW9uQ291bnRcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInN0YXRpb25MaXN0XCIsIFwic3RhdGlvbkxpc3RcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImFwcHJvdmVkT25cIiwgXCJBcHByb3ZlZCBPblwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYXBwcm92ZWRCeVwiLCBcIkFwcHJvdmVkIEJ5XCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJPREltcHNcIiwgXCJQcm9qLiBPRCBJTVBTXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJVREltcHNcIiwgXCJQcm9qLiBVRCBJTVBTXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJPREdycFwiLCBcIlByb2ouIE9EIEdSUFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiVURHcnBcIiwgXCJQcm9qLiBVRCBHUlBcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInVkSW1wc1BlcmNlbnRcIiwgXCJQcm9qLiBVRCAlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJ1ZEdycFBlcmNlbnRcIiwgXCJQcm9qLiBVRCBHUlAgJVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwib2RJbXBzUGVyY2VudFwiLCBcIlByb2ouIE9EICVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIm9kR3JwUGVyY2VudFwiLCBcIlByb2ouIE9EIEdSUCAlXCIpO1xyXG5cclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiUmV2aXNpb25OdW1iZXJcIiwgXCJSZXZpc2lvbiAjXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJSZXZpc2lvblR5cGVcIiwgXCJSZXZpc2lvbiBUeXBlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJHZW5lcmF0ZWRPblwiLCBcIkdlbmVyYXRlZCBPblwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQm9va2VkVmFsdWVGb3JEaXNwbGF5XCIsIFwiJCBCT09LRURcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkJvb2tlZFZhbHVlXCIsIFwiJCBCb29rZWRcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkJvb2tlZFNwb3RzXCIsIFwiU3BvdHNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkJvb2tlZEdSUFwiLCBcIkdSUFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQm9va2VkSU1QU1JldlRhYlwiLCBcIklNUFMnKDAwMClcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkJvb2tlZENQUFwiLCBcIkNQUFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQm9va2VkQ1BNXCIsIFwiQ1BNXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJNR3NWYWx1ZUZvckRpc3BsYXlcIiwgXCIkIE1HU1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiTUdzVmFsdWVcIiwgXCIkIE1HU1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQURVc1ZhbHVlRm9yRGlzcGxheVwiLCBcIiQgQURVU1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQURVc1ZhbHVlXCIsIFwiJCBBRFVTXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCdXllckNoYW5nZXNWYWx1ZUZvckRpc3BsYXlcIiwgXCIkIEJ1eWVyIENoYW5nZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQnV5ZXJDaGFuZ2VzVmFsdWVcIiwgXCIkIEJ1eWVyIENoYW5nZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiVXNlckNoYW5nZXNWYWx1ZUZvckRpc3BsYXlcIiwgXCIkIFNlbGxlciBVc2VyIENoYW5nZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiVXNlckNoYW5nZXNWYWx1ZVwiLCBcIiQgU2VsbGVyIFVzZXIgQ2hhbmdlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJTZWxsZXJMaW5lXCIsIFwiU2VsbGVyIExpbmUgI1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQnV5ZXJMaW5lXCIsIFwiQnV5IExpbmUgI1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiU3BvdFN0YXR1c1wiLCBcIlNwb3QgU3RhdHVzXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJJbnZlbnRvcnlDb2RlXCIsIFwiSW52ZW50b3J5IENvZGVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkJ1eWVyUHJvZ3JhbU5hbWVcIiwgXCJCdXllciBQcm9ncmFtIE5hbWVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlJldmVudWVDbGFzc1wiLCBcIlJldmVudWUgQ2xhc3NcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIldlZWtseUFVUlwiLCBcIkJvb2tlZCBBdmcuIFJhdGVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkJvb2tlZFJhdGVcIiwgXCJCb29rZWQgUmF0ZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYXZlcmFnZVJhdGVcIiwgXCJBdmVyYWdlIFJhdGVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZEF2ZXJhZ2VSYXRlXCIsIFwiQm9va2VkIEFWRy4gUmF0ZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZG9sbGFySU1QU0ltcGFjdFwiLCBcIiQgSU1QUyBJbXBhY3RcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImRvbGxhclJUR0ltcGFjdFwiLCBcIiQgUlRHIElNUEFDVFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiSU1QU0ltcGFjdFwiLCBcIklNUFMgKCcwMDApIElNUEFDVFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiUlRHSW1wYWN0XCIsIFwiUlRHIEltcGFjdFwiKTtcclxuXHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImludmVudG9yeUZpbGxQZXJjZW50YWdlU2FtZVdlZWtcIiwgXCJJbnYgRmlsbCBTYW1lIFdlZWsgKExZKVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiaW52ZW50b3J5RmlsbFBlcmNlbnRhZ2VGaW5hbFwiLCBcIkludiBGaWxsIEZpbmFsIChMWSlcIik7XHJcblxyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwcm9qZWN0ZWRSVEdcIiwgXCJQcm9qZWN0ZWQgUlRHXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwcm9qZWN0ZWRJTVBTXCIsIFwiUHJvamVjdGVkIElNUFMoJzAwMClcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImRlc2lyZWRDUE1cIiwgXCJEZXNpcmVkIENQTVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZGVzaXJlZENQUFwiLCBcIkRlc2lyZWQgQ1BQXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJvcmlnaW5cIiwgXCJPcmlnaW5cIik7XHJcblxyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCb29rZWRSVEdcIiwgXCJCb29rZWQgUlRHXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCb29rZWRJTVBTXCIsIFwiQm9va2VkIElNUFMoJzAwMClcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIklNUFNcIiwgXCJJTVAoJzAwMClcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkFVUlRHXCIsIFwiQXZnIFJUR1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQVVJTVBTXCIsIFwiQXZnIElNUCgnMDAwKVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiUG9zdGVkUmF0aW5nc09ySW1wcmVzc2lvbnNcIiwgXCJQb3N0ZWQgUlRHXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJTY2hlZHVsZUZsaWdodFdlZWtcIiwgXCJTY2hlZHVsZSBXZWVrXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJTY2hlZHVsZWREYXlcIiwgXCJTY2hlZHVsZWQgRGF5XCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJBaXJTdGF0dXNcIiwgXCJBaXIgU3RhdHVzXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJBaXJEYXRlQW5kVGltZVwiLCBcIkFpciBEYXRlICYgVGltZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQWlyRGF0ZVwiLCBcIkFpciBEYXRlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJOb3JtYWxpemVkT3JkZXJlZFJhdGluZ1wiLCBcIk5vcm1hbGl6ZWQgQm9va2VkIFJUR1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiTm9ybWFsaXplZE9yZGVyZWRJbXByZXNzaW9uc1wiLCBcIk5vcm1hbGl6ZWQgQm9va2VkIElNUCgnMDAwKVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiTm9ybWFsaXplZFBvc3RlZFJhdGluZ1wiLCBcIk5vcm1hbGl6ZWQgUG9zdGVkIFJUR1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiTm9ybWFsaXplZFBvc3RlZEltcHJlc3Npb25zXCIsIFwiTm9ybWFsaXplZCBQb3N0ZWQgSU1QKCcwMDApXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJBZElkXCIsIFwiQWQtSWRcIik7XHJcblxyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJkaXNwbGF5aW1wc1wiLCBcIklNUFNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImRpc3BsYXlHcnBcIiwgXCJHUlBcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZFNwb3RzRm9yRGlzcGxheVwiLCBcIlNwb3RzXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJkaXNwbGF5U3BvdHNcIiwgXCJTcG90c1wiKTtcclxuXHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImVzdGltYXRlTm9cIiwgXCJFc3RpbWF0ZSNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInByaW1hcnlCdXllclwiLCBcIlByaW1hcnkgQnV5ZXJcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInByaW1hcnlCdXllck5hbWVcIiwgXCJQcmltYXJ5IEJ1eWVyXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJzZWNvbmRhcnlCdXllck5hbWVcIiwgXCJTZWNvbmRhcnkgQnV5ZXJcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInNlY29uZGFyeUJ1eWVyXCIsIFwiU2Vjb25kYXJ5IEJ1eWVyXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJ0aW1lb3V0RGF0ZVwiLCBcIlRpbWVvdXQgRGF0ZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiRGlzcGxheXRTcG90U3RhdHVzQklcIiwgXCJTcG90IFN0YXR1c1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiTGluZVNwb3RcIiwgXCJMaW5lLlNwb3RcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkx1cldpbmRvd05hbWVcIiwgXCJQb2xpdGljYWwgV2luZG93XCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJsaW5lQW5kU3BvdE51bWJlclwiLCBcIkxpbmUuU3BvdCNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImxlbmd0aFwiLCBcIkxlbmd0aFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicmV2Q2xhc3NcIiwgXCJSZXYgQ2xhc3NcIik7XHJcblxyXG4gICAgICAgIC8vIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJ1ZFZhbHVlXCIsIFwiJCBVRFwiKTtcclxuICAgICAgICAvLyB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwib2RWYWx1ZVwiLCBcIiQgT0RcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInVkVmFsdWVcIiwgXCJQcm9qLiAkIFVEXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJvZFZhbHVlXCIsIFwiUHJvai4gJCBPRFwiKTtcclxuXHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkludmVudG9yeUNvZGVcIiwgXCJJbnZlbnRvcnkgQ29kZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQnV5ZXJQcm9ncmFtTmFtZVwiLCBcIkJ1eWVyIFByb2dyYW0gTmFtZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiU3RhcnRUaW1lXCIsIFwiU3RhcnQgVGltZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiRW5kVGltZVwiLCBcIkVuZCBUaW1lXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJXZWVrbHlBVVJcIiwgXCJCb29rZWQgQXZnLiBSYXRlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJEaXNwbGF5UmV2ZW51ZUNsYXNzXCIsIFwiUmV2IENsYXNzXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJBY3R1YWxXZWVrU3RhcnREYXRlXCIsIFwiV2Vla1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiV2Vla0RheVwiLCBcIkRheVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiRGlzcGxheUxlbmd0aFwiLCBcIkxlbmd0aFwiKTtcclxuXHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIk90aGVyQXZhaWxhYmxlU3BvdHNUYWJsZUludmVudG9yeUNvZGVcIiwgXCJJbnZlbnRvcnkgQ29kZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlQnV5ZXJQcm9ncmFtTmFtZVwiLCBcIkJ1eWVyIFByb2dyYW0gTmFtZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlU3RhcnRUaW1lXCIsIFwiU3RhcnQgVGltZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlRW5kVGltZVwiLCBcIkVuZCBUaW1lXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJPdGhlckF2YWlsYWJsZVNwb3RzVGFibGVXZWVrbHlBVVJcIiwgXCJCb29rZWQgQXZnLiBSYXRlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJPdGhlckF2YWlsYWJsZVNwb3RzVGFibGVEaXNwbGF5UmV2ZW51ZUNsYXNzXCIsIFwiUmV2IENsYXNzXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJPdGhlckF2YWlsYWJsZVNwb3RzVGFibGVBY3R1YWxXZWVrU3RhcnREYXRlXCIsIFwiV2Vla1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlV2Vla0RheVwiLCBcIkRheVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlRGlzcGxheUxlbmd0aFwiLCBcIkxlbmd0aFwiKTtcclxuXHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlByb2plY3RlZEltcHJlc3Npb25zXCIsIFwiUHJvamVjdGVkIElNUCgnMDAwKVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiUHJvamVjdGVkUnRnXCIsIFwiUHJvamVjdGVkIFJUR1wiKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RPclVuc2VsZWN0Q2hlY2tib3gocm93RGF0YTogYW55LCBjb2x1bW5LZXlzOiBhbnksIGlzQ2hlY2tib3hTZWxlY3RlZDogYW55KSB7XHJcbiAgICAgICAgcm93RGF0YVtjb2x1bW5LZXlzXSA9ICFyb3dEYXRhW2NvbHVtbktleXNdO1xyXG4gICAgICAgIHRoaXMudG9nZ2xlQ2hlY2tib3guZW1pdCh7IHJvd0RhdGEsIGNvbHVtbktleXMsIGlzQ2hlY2tib3hTZWxlY3RlZCB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RPclVuc2VsZWN0UmFkaW9ib3gocm93RGF0YTogYW55LCBjb2x1bW5LZXlzOiBhbnksIGlzQ2hlY2tib3hTZWxlY3RlZDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmIChyb3dEYXRhW2NvbHVtbktleXNdID09PSBpc0NoZWNrYm94U2VsZWN0ZWQpIHJldHVybjtcclxuICAgICAgICByb3dEYXRhW2NvbHVtbktleXNdID0gaXNDaGVja2JveFNlbGVjdGVkO1xyXG4gICAgICAgIHRoaXMudG9nZ2xlQ2hlY2tib3guZW1pdCh7IHJvd0RhdGEsIGNvbHVtbktleXMsIGlzQ2hlY2tib3hTZWxlY3RlZCB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RVbnNlbGVjdEFsbFJvd3MoKSB7XHJcbiAgICAgICAgdGhpcy50b2dnbGVIZWFkZXJDaGVja2JveC5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0VW5zZWxlY3RSb3cocm93RGF0YTogYW55KSB7XHJcbiAgICAgICAgdGhpcy50b2dnbGVSb3dDaGVja2JveC5lbWl0KHJvd0RhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHVuZG9DcmVkaXRlZFNwb3QoZGF0YTogYW55KSB7XHJcbiAgICAgICAgdGhpcy51bmRvSWNvbkNsaWNrZWQuZW1pdCh7IGRhdGEsIG1nT3JDcmVkaXQ6IFwiQ3JlZGl0XCIgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdW5kb01nU3BvdChkYXRhOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnVuZG9JY29uQ2xpY2tlZC5lbWl0KHsgZGF0YSwgbWdPckNyZWRpdDogXCJNYWtlR29vZFwiIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNvcnQgYW5kIEZpbHRlciBMb2dpYyBiZWdpbnMhXHJcbiAgICBjbG9zZVRvb2x0aXAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudG9vbHRpcCAmJiB0aGlzLnRvb2x0aXAuaXNPcGVuKCkpIHtcclxuICAgICAgICAgICAgdGhpcy50b29sdGlwLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudG9vbHRpcCA9IG51bGw7XHJcbiAgICAgICAgaWYgKCF0aGlzLmJpbmRWYWx1ZUZ1bmNDYWxsZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb2x1bW5GaWx0ZXJDbG9zZWQuZW1pdCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpc1Rvb2x0aXBBY3RpdmUoaGVhZGVyOiBhbnlbXSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmlzVG9vbHRpcEFjdGl2ZShoZWFkZXIsIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNvbHVtblNvcnRTdGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYmluZFRoZVZhbHVlVG9Ub29sVGlwKHRvb2x0aXA6IGFueSwgaGVhZGVyOiBJSGVhZGVySW5mbykge1xyXG4gICAgICAgIHRoaXMuYmluZFZhbHVlRnVuY0NhbGxlZCA9IHRydWU7XHJcbiAgICAgICAgLy8gaWYgc2FtZSB0b29sdGlwIG9wZW5lZCBjbG9zZSBpdFxyXG4gICAgICAgIGlmICh0b29sdGlwID09PSB0aGlzLnRvb2x0aXApIHtcclxuICAgICAgICAgICAgdGhpcy5iaW5kVmFsdWVGdW5jQ2FsbGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2VUb29sdGlwKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgZW5hYmxlZEhlYWRlcnM6IGFueVtdID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tJZlVuaXF1ZVZhbHVlUHJlc2VudEZvclRoZUhlYWRlcihoZWFkZXIsIGVuYWJsZWRIZWFkZXJzKTtcclxuICAgICAgICAgICAgdGhpcy5vcGVuVG9vbHRpcCh0b29sdGlwLCBlbmFibGVkSGVhZGVycywgaGVhZGVyKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5pbm5lcldpZHRoIDwgMTUwMCAmJlxyXG4gICAgICAgICAgICAgICAgd2luZG93LmlubmVySGVpZ2h0IDwgNzY4ICYmXHJcbiAgICAgICAgICAgICAgICAhdGhpcy5hbm5hRmlsdGVyU2VydmljZS5zbGlkZXJTZXQuaGFzKGhlYWRlci5maWx0ZXJTb3J0T2JqZWN0S2V5c1swXSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkZpbHRlck9wZW5lZC5lbWl0KCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0NoZWNrYm94ZXNGb3JUaW1lRmlsdGVyID1cclxuICAgICAgICAgICAgICAgIHRoaXMuZ3RHZW5lcmFsQ29uZmlnLmNvbXBvbmVudCA9PT0gXCJTUE9UREVUQUlMU1wiIHx8XHJcbiAgICAgICAgICAgICAgICB0aGlzLmd0R2VuZXJhbENvbmZpZy5jb21wb25lbnQgPT09IFwiRVhDTFVERUlOVkVOVE9SWVBPUFVQXCIgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3RHZW5lcmFsQ29uZmlnLmNvbXBvbmVudCA9PT0gXCJSQVRJTkdcIjtcclxuICAgICAgICAgICAgdGhpcy5zaG93RmlsdGVyVG9vbHRpcFRhYnMgPSBoZWFkZXIuZmlsdGVyU29ydE9iamVjdEtleXMubGVuZ3RoID4gMTtcclxuICAgICAgICAgICAgdGhpcy5iaW5kVmFsdWVGdW5jQ2FsbGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrSWZVbmlxdWVWYWx1ZVByZXNlbnRGb3JUaGVIZWFkZXIoaGVhZGVyOiBJSGVhZGVySW5mbywgZW5hYmxlZEhlYWRlcnM6IGFueVtdKSB7XHJcbiAgICAgICAgaGVhZGVyLmZpbHRlclNvcnRPYmplY3RLZXlzLmZvckVhY2goKGl0ZW06IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhVG9DaGVjayA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuZ2V0RmlsdGVyT3B0aW9uc0RhdGEodGhpcy50YWJsZURhdGEsIHRoaXMuY2xvbmVkVGFibGVEYXRhLCBpdGVtKTtcclxuICAgICAgICAgICAgaWYgKGl0ZW0gPT09IFwicGVyaW9kXCIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHVuaXFTdGFydERhdGUgPSB1bmlxKGRhdGFUb0NoZWNrLm1hcCgodTogeyBbeDogc3RyaW5nXTogYW55IH0pID0+IHUuc3RhcnREYXRlKSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1bmlxRW5kRGF0ZSA9IHVuaXEoZGF0YVRvQ2hlY2subWFwKCh1OiB7IFt4OiBzdHJpbmddOiBhbnkgfSkgPT4gdS5lbmREYXRlKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodW5pcVN0YXJ0RGF0ZS5sZW5ndGggPiAxIHx8IHVuaXFFbmREYXRlLmxlbmd0aCA+IDEgfHwgdGhpcy5pc1Rvb2x0aXBBY3RpdmUoW2l0ZW1dKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZWRIZWFkZXJzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBkYXRhVG9DaGVjay5tYXAoKHU6IHsgW3g6IHN0cmluZ106IGFueSB9KSA9PiB1W2l0ZW1dKTtcclxuICAgICAgICAgICAgICAgIC8vIGlmIGxhc3QgYXBwbGllZCBmaWx0ZXIgaXMgdGhpcyBoZWFkZXIsIHB1c2ggaXQgYWxvcyBhcyBlbmFibGVkSGVhZGVyXHJcbiAgICAgICAgICAgICAgICBsZXQgYWN0aXZlQW5kTGFzdGx5QXBwbGllZEhlYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuYXBwbGllZEZpbHRlcnNBcnJheS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5hcHBsaWVkRmlsdGVyc0FycmF5W1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmFwcGxpZWRGaWx0ZXJzQXJyYXkubGVuZ3RoIC0gMVxyXG4gICAgICAgICAgICAgICAgICAgIF0gPT09IGl0ZW1cclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUFuZExhc3RseUFwcGxpZWRIZWFkZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlci5maWx0ZXIgPT09IFwiQ0hFQ0tCT1hcIiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICh1bmlxKHZhbHVlcykuZmlsdGVyKChuKSA9PiBuICE9IG51bGwpLmxlbmd0aCA+IDEgfHwgYWN0aXZlQW5kTGFzdGx5QXBwbGllZEhlYWRlcilcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZWRIZWFkZXJzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlci5maWx0ZXIgIT09IFwiQ0hFQ0tCT1hcIiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICh1bmlxKHZhbHVlcykuZmlsdGVyKChuKSA9PiBuICE9IG51bGwgJiYgbiAhPT0gXCItXCIpLmxlbmd0aCA+IDEgfHwgYWN0aXZlQW5kTGFzdGx5QXBwbGllZEhlYWRlcilcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZWRIZWFkZXJzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuVG9vbHRpcCh0b29sdGlwOiBhbnksIGhlYWRlcjogYW55LCBjb2x1bW5IZWFkZXI6IElIZWFkZXJJbmZvKSB7XHJcbiAgICAgICAgdGhpcy5jbG9zZVRvb2x0aXAoKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXAgPSB0b29sdGlwO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcC5vcGVuKCk7XHJcbiAgICAgICAgLy8gY29udmVydCBrZXkgaW50byB0aGUgaGVhZGVyXHJcbiAgICAgICAgdGhpcy5maWx0ZXJUYWJPYmplY3RzID0gaGVhZGVyLm1hcCgoa2V5OiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgLy8gY2hhbmdlIHRvIGRpc3BsYXkgbmFtZVxyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5oYXMoa2V5KSA/IHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5nZXQoa2V5KSA6IGtleTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSYWRpb0J1dHRvbk1vZGVsKFxyXG4gICAgICAgICAgICAgICAga2V5LFxyXG4gICAgICAgICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAgICAgICBjb2x1bW5IZWFkZXIuaXNTb3J0UmVxdWlyZWRbaW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgY29sdW1uSGVhZGVyLmlzRmlsdGVyUmVxdWlyZWRbaW5kZXhdLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVFbmFibGVFYWNoQ29sdW1uVG9vbHRpcEljb24oKSB7XHJcbiAgICAgICAgdGhpcy50YWJsZUhlYWRlcnMuZm9yRWFjaCgoaGVhZGVyKSA9PiB7XHJcbiAgICAgICAgICAgIGhlYWRlci5oZWFkZXJJbmZvLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLnNob3dUb29sdGlwSWNvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLmRpc2FibGVUb29sdGlwSWNvbiA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZmlsdGVyU29ydE9iamVjdEtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhdGVzdEZpbHRlcnMgPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmFwcGxpZWRGaWx0ZXJzQXJyYXk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXRlc3RGaWx0ZXJzLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZGlzYWJsZVRvb2x0aXBJY29uICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXRlc3RGaWx0ZXJzW2xhdGVzdEZpbHRlcnMubGVuZ3RoIC0gMV0gPT09IGtleVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZGlzYWJsZVRvb2x0aXBJY29uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmRpc2FibGVUb29sdGlwSWNvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gXCJwZXJpb2RcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuaXFTdGFydERhdGUgPSB1bmlxKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlRGF0YS5tYXAoKHU6IHsgW3g6IHN0cmluZ106IGFueSB9KSA9PiB1LnN0YXJ0RGF0ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bmlxRW5kRGF0ZSA9IHVuaXEodGhpcy50YWJsZURhdGEubWFwKCh1OiB7IFt4OiBzdHJpbmddOiBhbnkgfSkgPT4gdS5lbmREYXRlKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZGlzYWJsZVRvb2x0aXBJY29uID0gISh1bmlxU3RhcnREYXRlLmxlbmd0aCA+IDEgfHwgdW5pcUVuZERhdGUubGVuZ3RoID4gMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IHRoaXMudGFibGVEYXRhLm1hcCgodTogeyBbeDogc3RyaW5nXTogYW55IH0pID0+IHVba2V5XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXRlbS5maWx0ZXIgPT09IFwiQ0hFQ0tCT1hcIiAmJiB1bmlxKHZhbHVlcykuZmlsdGVyKChuKSA9PiBuICE9IG51bGwpLmxlbmd0aCA+IDEpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpdGVtLmZpbHRlciAhPT0gXCJDSEVDS0JPWFwiICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxKHZhbHVlcykuZmlsdGVyKChuKSA9PiBuICE9IG51bGwgJiYgbiAhPT0gXCItXCIpLmxlbmd0aCA+IDEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZGlzYWJsZVRvb2x0aXBJY29uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNldE1hcmdpbkxlZnRGb3JGaWx0ZXJJY29uKCkge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnRBcnIgPSB0aGlzLnZpZXdDaGlsZFRhYmxlSGVhZGVycy50b0FycmF5KCk7XHJcbiAgICAgICAgZWxlbWVudEFyci5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkRGl2RWxlbWVudHMgPSBpdGVtLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW47XHJcblxyXG4gICAgICAgICAgICBpZiAoY2hpbGREaXZFbGVtZW50cy5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0UGFyYWdyYXBoT2Zmc2V0V2lkdGg6IG51bWJlciA9IGNoaWxkRGl2RWxlbWVudHNbMF0/LmNoaWxkcmVuWzBdPy5vZmZzZXRXaWR0aFxyXG4gICAgICAgICAgICAgICAgICAgID8gY2hpbGREaXZFbGVtZW50c1swXT8uY2hpbGRyZW5bMF0/Lm9mZnNldFdpZHRoXHJcbiAgICAgICAgICAgICAgICAgICAgOiAwO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2Vjb25kUGFyYWdyYXBoT2Zmc2V0V2lkdGg6IG51bWJlciA9IGNoaWxkRGl2RWxlbWVudHNbMV0uY2hpbGRyZW5bMF0/Lm9mZnNldFdpZHRoXHJcbiAgICAgICAgICAgICAgICAgICAgPyBjaGlsZERpdkVsZW1lbnRzWzFdLmNoaWxkcmVuWzBdPy5vZmZzZXRXaWR0aFxyXG4gICAgICAgICAgICAgICAgICAgIDogMDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3RQYXJhZ3JhcGhPZmZzZXRXaWR0aCA+IHNlY29uZFBhcmFncmFwaE9mZnNldFdpZHRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlmZiA9IGZpcnN0UGFyYWdyYXBoT2Zmc2V0V2lkdGggLSBzZWNvbmRQYXJhZ3JhcGhPZmZzZXRXaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGREaXZFbGVtZW50c1swXS5jaGlsZHJlbi5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGREaXZFbGVtZW50c1swXS5jaGlsZHJlblsxXS5zdHlsZS5tYXJnaW5MZWZ0ID0gYCR7NH1weGA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGREaXZFbGVtZW50c1sxXS5jaGlsZHJlbi5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGREaXZFbGVtZW50c1sxXS5jaGlsZHJlblsxXS5zdHlsZS5tYXJnaW5MZWZ0ID0gYCR7ZGlmZiArIDR9cHhgO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlmZiA9IHNlY29uZFBhcmFncmFwaE9mZnNldFdpZHRoIC0gZmlyc3RQYXJhZ3JhcGhPZmZzZXRXaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGREaXZFbGVtZW50c1swXS5jaGlsZHJlbi5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGREaXZFbGVtZW50c1swXS5jaGlsZHJlblsxXS5zdHlsZS5tYXJnaW5MZWZ0ID0gYCR7ZGlmZiArIDR9cHhgO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkRGl2RWxlbWVudHNbMV0uY2hpbGRyZW4ubGVuZ3RoID09PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRGl2RWxlbWVudHNbMV0uY2hpbGRyZW5bMV0uc3R5bGUubWFyZ2luTGVmdCA9IGAkezR9cHhgO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGRhdGFSb3dDbGlja2VkKHJvd0RhdGE6IGFueSkge1xyXG4gICAgICAgIHRoaXMucm93Q2xpY2tlZC5lbWl0KHJvd0RhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHJhZGlvQnV0dG9uQ2xpY2tlZChkYXRhOiBhbnksIGFjdGlvbjogc3RyaW5nLCBpc0Rpc2FibGVkOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmFkaW9CdXR0b25TZWxlY3RlZC5lbWl0KHsgZGF0YSwgYWN0aW9uIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBiaW5kVGhlVmFsdWVUb1NlbGxlckdyb3VwVG9vbHRpcChzZWxsZXJHcm91cEhpZXJhcmNoeTogUmF0aW5nU2VsbGVyR3JvdXBIaWVyYXJjaHlbXSwgdG9vbHRpcDogYW55KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGllcmFyY2h5VG9vbHRpcCAmJiB0aGlzLmhpZXJhcmNoeVRvb2x0aXAub3Blbikge1xyXG4gICAgICAgICAgICB0aGlzLmhpZXJhcmNoeVRvb2x0aXAuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxsZXJHcm91cEhpZXJhcmNoeSA9IHNlbGxlckdyb3VwSGllcmFyY2h5O1xyXG4gICAgICAgIHRoaXMuaGllcmFyY2h5VG9vbHRpcCA9IHRvb2x0aXA7XHJcbiAgICAgICAgdGhpcy5oaWVyYXJjaHlUb29sdGlwLm9wZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBpY29uQ2xpY2tlZChyb3dEYXRhOiBhbnksIGljb25DbGFzczogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKFwib3JkZXJJZFwiIGluIHJvd0RhdGEgJiYgaWNvbkNsYXNzLmluY2x1ZGVzKFwibWRpLXN0YXJcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFN0YXJyZWRPcmRlcklkID0gcm93RGF0YS5vcmRlcklkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5ndEljb25DbGlja2VkLmVtaXQoeyBkYXRhOiByb3dEYXRhLCBpY29uQ2xhc3MgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3ZnSWNvbkNsaWNrZWQoZGF0YTogR3RDb2x1bW5JY29uRW1pdHRlZERhdGEpIHtcclxuICAgICAgICB0aGlzLmd0U1ZHSWNvbkNsaWNrZWQuZW1pdChkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICB0ZXh0QWN0aW9uQ2xpY2tlZChyb3dEYXRhOiBhbnksIGlkOiBhbnksIGNvbHVtbkhlYWRlcjogSUhlYWRlckluZm8pIHtcclxuICAgICAgICB0aGlzLmd0VGV4dEFjdGlvbkNsaWNrZWQuZW1pdCh7IGRhdGE6IHJvd0RhdGEsIGlkLCBjb2x1bW5IZWFkZXIsIGlzSWNvbkNsaWNrZWQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGljb25DbGlja2VkT25TdHJpbmdJY29uQWN0aW9uVHlwZShyb3dEYXRhOiBhbnksIGlkOiBhbnksIGNvbHVtbkhlYWRlcjogSUhlYWRlckluZm8pIHtcclxuICAgICAgICB0aGlzLmd0VGV4dEFjdGlvbkNsaWNrZWQuZW1pdCh7IGRhdGE6IHJvd0RhdGEsIGlkLCBjb2x1bW5IZWFkZXIsIGlzSWNvbkNsaWNrZWQ6IHRydWUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5uZXJIVE1MQ2VsbENsaWNrZWQoZXZlbnQ6IGFueSwgcm93RGF0YTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5ndElubmVySFRNTENsaWNrZWQuZW1pdCh7IGV2ZW50LCByb3dEYXRhIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHZpZXdEZXRhaWxzQ2xpY2tlZChyb3dEYXRhOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmd0Vmlld0RldGFpbENsaWNrZWQuZW1pdCh7IGRhdGE6IHJvd0RhdGEgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0QWN0aXZlU3RhdGVPYmplY3QoKSB7XHJcbiAgICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmUgPVxyXG4gICAgICAgICAgICAhdGhpcy5hbm5hRmlsdGVyU2VydmljZS5yZXNldEZpbHRlclNvcnRBY3RpdmVTdGF0dXMgfHwgdGhpcy5tdWx0aXBsZVRhYmxlc1ByZXNlbnRcclxuICAgICAgICAgICAgICAgID8gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmVcclxuICAgICAgICAgICAgICAgIDoge307XHJcbiAgICAgICAgdGhpcy50YWJsZUhlYWRlcnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBpdGVtLmhlYWRlckluZm8uZm9yRWFjaCgoaGVhZGVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGVhZGVyLnNob3dUb29sdGlwSWNvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGhlYWRlci5maWx0ZXJTb3J0T2JqZWN0S2V5cy5qb2luKFwiLFwiKTtcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXIuam9pbmVkRmlsdGVyU29ydE9iamVjdEtleXMgPSBrZXk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQU5OQS00MTEzIGZpeFxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnJlc2V0RmlsdGVyU29ydEFjdGl2ZVN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmlzRmlsdGVyU29ydEFjdGl2ZVtrZXldID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnJlc2V0RmlsdGVyU29ydEFjdGl2ZVN0YXR1cyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0SXNEaWZmZXJlbmNlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5pc0RpZmZlcmVuY2VMZXNzVGhhbjI1UGVyY2VudCA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SW5kZXgoKSB7XHJcbiAgICAgICAgdGhpcy5zdGFydCA9IDA7XHJcbiAgICAgICAgdGhpcy5lbmQgPSB0aGlzLmxpbWl0ICsgdGhpcy5zdGFydDtcclxuICAgIH1cclxuXHJcbiAgICBvblRhYmxlQ29udGFpbmVyU2Nyb2xsKGU6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IHRhYmxlVmlld0hlaWdodCA9IGUudGFyZ2V0Lm9mZnNldEhlaWdodDsgLy8gdmlld3BvcnRcclxuICAgICAgICBjb25zdCB0YWJsZVNjcm9sbEhlaWdodCA9IGUudGFyZ2V0LnNjcm9sbEhlaWdodDsgLy8gbGVuZ3RoIG9mIGFsbCB0YWJsZVxyXG4gICAgICAgIGNvbnN0IHNjcm9sbExvY2F0aW9uID0gZS50YXJnZXQuc2Nyb2xsVG9wOyAvLyBob3cgZmFyIHVzZXIgc2Nyb2xsZWRcclxuXHJcbiAgICAgICAgdGhpcy5yZW1vdmVUb29sdGlwT25TY3JvbGwoKTtcclxuXHJcbiAgICAgICAgLy8gSWYgdGhlIHVzZXIgaGFzIHNjcm9sbGVkIHdpdGhpbiAxNTBweCBvZiB0aGUgYm90dG9tLCBhZGQgbW9yZSBkYXRhXHJcbiAgICAgICAgY29uc3QgYnVmZmVyID0gMTUwO1xyXG4gICAgICAgIGNvbnN0IGxpbWl0ID0gdGFibGVTY3JvbGxIZWlnaHQgLSB0YWJsZVZpZXdIZWlnaHQgLSBidWZmZXI7XHJcbiAgICAgICAgaWYgKHNjcm9sbExvY2F0aW9uID4gbGltaXQpIHtcclxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0VGFibGVEYXRhKHRoaXMuc3RhcnQsIHRoaXMuZW5kKTtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlZERhdGEgPSB0aGlzLnJlbmRlcmVkRGF0YS5jb25jYXQoZGF0YSk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSW5kZXgoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50YWJsZUNvbnRhaW5lclNjcm9sbGVkKGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRhYmxlRGF0YShzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRhYmxlRGF0YT8uZmlsdGVyKCh2YWx1ZSwgaW5kZXgpID0+IGluZGV4ID49IHN0YXJ0ICYmIGluZGV4IDwgZW5kKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVJbmRleCgpIHtcclxuICAgICAgICB0aGlzLnN0YXJ0ID0gdGhpcy5lbmQ7XHJcbiAgICAgICAgdGhpcy5lbmQgPSB0aGlzLmxpbWl0ICsgdGhpcy5zdGFydDtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbml0aWFsUm93c0ZvclRhYmxlKCkge1xyXG4gICAgICAgIHRoaXMucmVzZXRJbmRleCgpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZWREYXRhID0gdGhpcy5nZXRUYWJsZURhdGEodGhpcy5zdGFydCwgdGhpcy5lbmQpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlSW5kZXgoKTtcclxuICAgIH1cclxuXHJcbiAgICBzcG90RGV0YWlsc0Rvd25sb2FkQ2xpY2tlZChwYXJlbnRDaGlsZE9yVG90YWxSb3c6IFwiREFUQVJPV1wiIHwgXCJUT1RBTFJPV1wiLCByb3dkYXRhPzogYW55KSB7XHJcbiAgICAgICAgaWYgKHJvd2RhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEludmVudG9yeUlkRm9yRG93bmxvYWQgPSByb3dkYXRhLmludmVudG9yeUNvZGVJZDtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERlbW9ncmFwaGljRm9yRG93bmxvYWQgPSByb3dkYXRhLmRlbW9ncmFwaGljO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbnZlbnRvcnlJZEZvckRvd25sb2FkID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERlbW9ncmFwaGljRm9yRG93bmxvYWQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93VHlwZUZvckRvd25sb2FkID0gcGFyZW50Q2hpbGRPclRvdGFsUm93O1xyXG4gICAgICAgIHRoaXMuZG93bmxvYWRTcG90RGV0YWlscy5lbWl0KHtcclxuICAgICAgICAgICAgcGFyZW50Q2hpbGRPclRvdGFsUm93LFxyXG4gICAgICAgICAgICBpbnZlbnRvcnlDb2RlSWQ6IHRoaXMuc2VsZWN0ZWRJbnZlbnRvcnlJZEZvckRvd25sb2FkLFxyXG4gICAgICAgICAgICBkZW1vZ3JhcGhpYzogdGhpcy5zZWxlY3RlZERlbW9ncmFwaGljRm9yRG93bmxvYWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGFibGVDb250YWluZXJTY3JvbGxlZChldmVudDogYW55KSB7XHJcbiAgICAgICAgdGhpcy5pc1Njcm9sbGVkTGVmdCA9IGV2ZW50LnRhcmdldC5zY3JvbGxMZWZ0ID4gMDtcclxuICAgICAgICB0aGlzLmlzU2Nyb2xsRW5kZWQgPVxyXG4gICAgICAgICAgICBNYXRoLnJvdW5kKGV2ZW50LnRhcmdldC5zY3JvbGxMZWZ0KSA9PT0gZXZlbnQudGFyZ2V0LnNjcm9sbFdpZHRoIC0gZXZlbnQudGFyZ2V0LmNsaWVudFdpZHRoO1xyXG4gICAgICAgIHRoaXMucmVtb3ZlVG9vbHRpcE9uU2Nyb2xsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbW91c2VFbnRlck9uU3RyaW5nVGV4dEFjdGlvblR5cGUocm93RGF0YTogYW55LCB0b29sdGlwS2V5OiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnRleHRBY3Rpb25Ub29sdGlwID0gcm93RGF0YVt0b29sdGlwS2V5XTtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkljb25Ib3Zlci5lbWl0KHsgcm93RGF0YSwgdHlwZTogXCJvbi1lbnRlclwiIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlRW50ZXJPblN0cmluZ1RleHRBY3Rpb25UeXBlQ29udGFpbmluZ1RhYmxlKHJvd0RhdGE6IGFueSwgdG9vbHRpcEtleTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy50b29sdGlwQ29udGFpbmluZ1RhYmxlID0gcm93RGF0YVt0b29sdGlwS2V5XTtcclxuICAgIH1cclxuXHJcbiAgICBtb3VzZUxlYXZlVGV4dEFjdGlvblR5cGUocm93RGF0YTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25JY29uSG92ZXJMZWF2ZS5lbWl0KHsgcm93RGF0YSwgdHlwZTogXCJvbi1sZWF2ZVwiIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlRW50ZXJPblRleHRBY3Rpb25UeXBlKHJvd0RhdGE6IGFueSwgdG9vbHRpcEtleTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy50ZXh0QWN0aW9uVG9vbHRpcCA9IHJvd0RhdGFbdG9vbHRpcEtleV07XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGlja2FibGVEYXRhQ2xpY2tlZChSb3dkYXRhOiBhbnksIGlkOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLmNsaWNrYWJsZURhdGFDbGlja2VkLmVtaXQoeyBkYXRhOiBSb3dkYXRhLCBpZCB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVUb29sdGlwT25TY3JvbGwoKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwicmVtYXJrcy1pbmZvLXRvb2x0aXBcIik7XHJcbiAgICAgICAgLy8gY29uc3QgdG9vbHRpcEVsZW1lbnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInRvb2x0aXBcIik7XHJcbiAgICAgICAgY29uc3QgZ3RUb29sdGlwID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInJlbW92ZS1vbi1zY3JvbGwtY2xhc3NcIik7XHJcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi50b29sdGlwOm5vdCgua2VlcC1vbi1zY3JvbGwtdG9vbHRpcClcIikuZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICBlLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnRvb2x0aXAgPSBudWxsO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB3aGlsZSAoZWxlbWVudHMgJiYgZWxlbWVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBlbGVtZW50c1swXS5yZW1vdmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgd2hpbGUgKGd0VG9vbHRpcCAmJiBndFRvb2x0aXAubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBndFRvb2x0aXBbMF0ucmVtb3ZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGljb25DbGlja2VkSW5Ub3RhbFJvdyhjb2xOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnRvdGFsUm93SWNvbkNsaWNrZWQuZW1pdChjb2xOYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VzTWFkZUluRWRpdGFibGVJbnB1dEJveChldmVudDogYW55LCBlZGl0ZWRPYmplY3Q6IGFueSwgcGFzdGVFdmVudDogYm9vbGVhbikge1xyXG4gICAgICAgIGNvbnN0IGVudGVyZWRWYWx1ZSA9IHBhc3RlRXZlbnQgPyBldmVudC5jbGlwYm9hcmREYXRhLmdldERhdGEoXCJ0ZXh0XCIpIDogZXZlbnQua2V5O1xyXG4gICAgICAgIGNvbnN0IGRvdEluZGV4ID0gZWRpdGVkT2JqZWN0LnZhbHVlLmluZGV4T2YoXCIuXCIpO1xyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGV2ZW50LmtleUNvZGUgIT09IDggJiZcclxuICAgICAgICAgICAgZXZlbnQua2V5Q29kZSAhPT0gNDYgJiZcclxuICAgICAgICAgICAgIShldmVudC5rZXlDb2RlID49IDM3ICYmIGV2ZW50LmtleUNvZGUgPD0gNDApICYmXHJcbiAgICAgICAgICAgICgoIWVkaXRlZE9iamVjdD8uYWxsb3dTcGVjaWFsQ2hhcmFjdGVycyAmJiAhL1tgMC05Ll0vLnRlc3QoZW50ZXJlZFZhbHVlKSkgfHxcclxuICAgICAgICAgICAgICAgIChlZGl0ZWRPYmplY3Q/LmNoYXJhY3RlcnNUb1Jlc3RyaWN0ICYmIGVkaXRlZE9iamVjdD8uY2hhcmFjdGVyc1RvUmVzdHJpY3QuaW5jbHVkZXMoZW50ZXJlZFZhbHVlKSkgfHxcclxuICAgICAgICAgICAgICAgIChlZGl0ZWRPYmplY3QuaXNEZWNpbWFsUG9pbnRDaGVja1JlcXVpcmVkICYmXHJcbiAgICAgICAgICAgICAgICAgICAgZG90SW5kZXggPj0gMCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50Py50YXJnZXQ/LnNlbGVjdGlvblN0YXJ0ID4gZG90SW5kZXggJiZcclxuICAgICAgICAgICAgICAgICAgICBlZGl0ZWRPYmplY3QudmFsdWUubGVuZ3RoIC0gKGRvdEluZGV4ICsgMSkgPj0gZWRpdGVkT2JqZWN0Lm1heERlY2ltYWxQb2ludHNBbGxvd2VkKSlcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZWRpdGFibGVJbnB1dFZhbHVlQ2hhbmdlZCh2YWx1ZTogYW55LCByb3c6IGFueSwga2V5RWRpdGVkOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmVkaXRhYmxlSW5wdXRFZGl0ZWQuZW1pdCh7IHJvdywgdmFsdWUsIGtleUVkaXRlZCB9KTtcclxuICAgIH1cclxuXHJcbiAgICByYWRpb0J1dHRvbkljb25DbGlja2VkKGRhdGE6IGFueSkge1xyXG4gICAgICAgIHRoaXMucmFkaW9CdXR0b25NZXNzYWdlSWNvbkNsaWNrZWQuZW1pdChkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBmaWx0ZXJBcHBsaWVkKHRhYmxlRGF0YTogYW55W10pIHtcclxuICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IHRhYmxlRGF0YTtcclxuICAgICAgICB0aGlzLnNldEluaXRpYWxSb3dzRm9yVGFibGUoKTtcclxuICAgICAgICB0aGlzLmRpc2FibGVFbmFibGVFYWNoQ29sdW1uVG9vbHRpcEljb24oKTtcclxuICAgICAgICB0aGlzLmZpbHRlckFwcGxpZWRUb1RhYmxlLmVtaXQodGFibGVEYXRhKTtcclxuICAgICAgICB0aGlzLmNsb3NlVG9vbHRpcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNvcnRpbmdBcHBsaWVkKHRhYmxlRGF0YTogYW55W10pIHtcclxuICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IHRhYmxlRGF0YTtcclxuICAgICAgICB0aGlzLnNldEluaXRpYWxSb3dzRm9yVGFibGUoKTtcclxuICAgICAgICB0aGlzLmRpc2FibGVFbmFibGVFYWNoQ29sdW1uVG9vbHRpcEljb24oKTtcclxuICAgICAgICB0aGlzLnNvcnRpbmdBcHBsaWVkVG9UYWJsZS5lbWl0KHRhYmxlRGF0YSk7XHJcbiAgICAgICAgdGhpcy5jbG9zZVRvb2x0aXAoKTtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2XHJcbiAgICBpZD1cImdlbmVyaWMtdGFibGUtY29uYXRpbmVyXCJcclxuICAgIGNsYXNzPVwidGFibGUtY29udGFpbmVyIHt7IGd0R2VuZXJhbENvbmZpZz8udGFibGVPdXRlckNvbnRhaW5lck5hbWUgfX0ge3sgdGFibGVCb3R0b21Cb3JkZXJDbGFzcyB9fVwiXHJcbiAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgJ3Njcm9sbC1sZWZ0LXNoYWRvdy1lZmZlY3QnOiBpc1Njcm9sbGVkTGVmdCxcclxuICAgICAgICAnc2Nyb2xsLXJpZ2h0LXNoYWRvdy1lZmZlY3QnOiAhaXNTY3JvbGxFbmRlZCxcclxuICAgICAgICAnY2xpY2thYmxlLXJvdyc6IGNsaWNrYWJsZVJvdyxcclxuICAgICAgICAnbm8tZGF0YS10YWJsZSc6IChpc05vRGF0YVRvRGlzcGxheVN1YmplY3QkIHwgYXN5bmMpLFxyXG4gICAgICAgICd0YWJsZS13aXRoLXNob3ctaGlkZS10b3RhbC1yb3ctdG9nZ2xlJzogc2hvd09ySGlkZVRvZ2dsZUZvclRvdGFsUm93XHJcbiAgICB9XCJcclxuICAgIChzY3JvbGwpPVwib25UYWJsZUNvbnRhaW5lclNjcm9sbCgkZXZlbnQpXCJcclxuPlxyXG4gICAgPGRpdlxyXG4gICAgICAgIFtjbGFzc109XCJndEdlbmVyYWxDb25maWcudGFibGVDb250YWluZXJOYW1lXCJcclxuICAgICAgICBjbGFzcz1cImhvcml6b250YWwtc2Nyb2xsLWZvci10YWJsZS1jb250YWluZXJcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgaGVpZ2h0OlxyXG4gICAgICAgICAgICAgICAgdGFibGVEYXRhLmxlbmd0aCA8IG1heGltdW1Sb3dzV2hpY2hDYW5CZVJlbmRlcmVkV2l0aG91dFNjcm9sbFxyXG4gICAgICAgICAgICAgICAgICAgID8gJ2NhbGMoJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAoZ3REaW1lbnNpb24ucm93SGVpZ2h0ICogdGFibGVEYXRhLmxlbmd0aCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCF0YWJsZURhdGEubGVuZ3RoIHx8ICFndEdlbmVyYWxDb25maWcudG90YWxSb3dcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBndERpbWVuc2lvbi5oZWFkZXJIZWlnaHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBndERpbWVuc2lvbi5oZWFkZXJIZWlnaHQgKyBndERpbWVuc2lvbi5yb3dIZWlnaHQpKSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAncHgpJ1xyXG4gICAgICAgICAgICAgICAgICAgIDogZ3REaW1lbnNpb24udGFibGVIZWlnaHRcclxuICAgICAgICB9XCJcclxuICAgID5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0lmPVwic2hvd09ySGlkZVRvZ2dsZUZvclRvdGFsUm93ICYmICFzaG93U2tlbGV0b25Mb2FkaW5nICYmIChpc05vRGF0YVRvRGlzcGxheVN1YmplY3QkIHwgYXN5bmMpID09PSBmYWxzZVwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICdzaGlmdC10b2dnbGUtdG9wLW9uLXRvdGFsLXJvdy1jbGljayc6ICFndEdlbmVyYWxDb25maWcudG90YWxSb3dcclxuICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwic2hvdy1vci1oaWRlLXRvZ2dsZS1idG5cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwic2hvd0hpZGVUb3RhbFJvdygpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktbWVudS1zd2FwXCJcclxuICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInNob3ctb3ItaGlkZS10b2dnbGUtdG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJhdXRvXCJcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwic2hvd09ySGlkZVRvZ2dsZUZvclRvdGFsUm93VG9vbHRpcFwiXHJcbiAgICAgICAgICAgID48L2k+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPHRhYmxlXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZ3RcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ0YWJsZUNsYXNzXCJcclxuICAgICAgICAgICAgbWF0LXRhYmxlXHJcbiAgICAgICAgICAgIFtkYXRhU291cmNlXT1cInJlbmRlcmVkRGF0YVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8dHJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaGVhZGVyLXJvd1wiXHJcbiAgICAgICAgICAgICAgICBtYXQtaGVhZGVyLXJvd1xyXG4gICAgICAgICAgICAgICAgKm1hdEhlYWRlclJvd0RlZj1cInRhYmxlQ29sdW1uczsgc3RpY2t5OiB0cnVlXCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiZ3REaW1lbnNpb24uaGVhZGVySGVpZ2h0XCJcclxuICAgICAgICAgICAgPjwvdHI+XHJcbiAgICAgICAgICAgIDx0clxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0b3RhbC1yb3dcIlxyXG4gICAgICAgICAgICAgICAgbWF0LWhlYWRlci1yb3dcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiZ3REaW1lbnNpb24ucm93SGVpZ2h0XCJcclxuICAgICAgICAgICAgICAgICptYXRIZWFkZXJSb3dEZWY9XCJ0b3RhbFJvd0NvbHVtbnM7IHN0aWNreTogdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuaGlkZGVuXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgIHNob3dTa2VsZXRvbkxvYWRpbmcgfHxcclxuICAgICAgICAgICAgICAgICAgICAoIXNob3dTa2VsZXRvbkxvYWRpbmcgJiYgIXRhYmxlRGF0YS5sZW5ndGgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKGlzTm9EYXRhVG9EaXNwbGF5U3ViamVjdCQgfCBhc3luYykgfHxcclxuICAgICAgICAgICAgICAgICAgICAoIXNob3dTa2VsZXRvbkxvYWRpbmcgJiYgIWd0R2VuZXJhbENvbmZpZy50b3RhbFJvdylcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID48L3RyPlxyXG4gICAgICAgICAgICA8dHJcclxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dEYXRhLmd0Q2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnbm8tYm9yZGVyLXRyJzogKGlzTm9EYXRhVG9EaXNwbGF5U3ViamVjdCQgfCBhc3luYykgfVwiXHJcbiAgICAgICAgICAgICAgICBtYXQtcm93XHJcbiAgICAgICAgICAgICAgICAqbWF0Um93RGVmPVwibGV0IHJvd0RhdGE7IGNvbHVtbnM6IHRhYmxlQ29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImd0RGltZW5zaW9uLnJvd0hlaWdodFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGF0YVJvd0NsaWNrZWQocm93RGF0YSlcIlxyXG4gICAgICAgICAgICA+PC90cj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gVE9UQUwgUk9XIC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5jb2xOYW1lXCJcclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdG90YWxSb3dJbmZvOyB0cmFja0J5OiB0cmFja0J5Rm5cIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgICAgICAgICBtYXQtaGVhZGVyLWNlbGxcclxuICAgICAgICAgICAgICAgICAgICAqbWF0SGVhZGVyQ2VsbERlZlxyXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmNvbHNwYW5dPVwiY29sdW1uLmNvbHNwYW5cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgY29sdW1uLmNsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uWydpc0FjdGlvbkNvbHVtbiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YSBvZiBjb2x1bW4uYWN0aW9uRGF0YVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiZGF0YS5jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja2FibGVEYXRhQ2xpY2tlZCh7fSwgZGF0YS5pZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uWydpc0ljb25Db2x1bW4nXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBjb2x1bW4/Lmljb25EYXRhPy5jbGFzcyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaWNvbkNsaWNrZWRJblRvdGFsUm93KGNvbHVtbj8uY29sTmFtZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb2x1bW5bJ2lzQWN0aW9uQ29sdW1uJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZyBjbGFzcz1cInVwcGVyLWxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyBjb2x1bW4uZGF0YSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJlZC10ZXh0LXRvdG9sLXJvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4uYWRkaXRpb25hbFJlZFRleHRBZnRlckRhdGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyBjb2x1bW4uYWRkaXRpb25hbFJlZFRleHRBZnRlckRhdGEgfX08L3NwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3N0cm9uZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4ubG93ZXJEYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmNvbE5hbWUgPT09ICd0b3RhbC1wb3RlbnRpYWwtYm9va2VkLXVuaXQnICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndEdlbmVyYWxDb25maWcuY29tcG9uZW50ID09PSAnUkFUSU5HJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBjb2x1bW5Mb3dlckRhdGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2xpY2thYmxlLWRhdGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzcG90RGV0YWlsc0Rvd25sb2FkQ2xpY2tlZCgnVE9UQUxST1cnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZGlzYWJsZWQtY2xpY2thYmxlLWRhdGEnOiBkb3dubG9hZEluUHJvZ3Jlc3MgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IGNvbHVtbi5sb3dlckRhdGEgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zIHNwb3QtZGV0YWlscy1kb3dubG9hZC1pY29uc1wiPmdldF9hcHA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRvd25sb2FkSW5Qcm9ncmVzcyAmJiBzZWxlY3RlZFJvd1R5cGVGb3JEb3dubG9hZCA9PT0gJ1RPVEFMUk9XJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNpcmN1bGFyUHJvZ3Jlc3NCYXJcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY29sdW1uTG93ZXJEYXRhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibG93ZXItbGFiZWxcIj57eyBjb2x1bW4ubG93ZXJEYXRhIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4udG9vbHRpcE1lc3NhZ2UgJiYgZ3RHZW5lcmFsQ29uZmlnLmNvbXBvbmVudCAhPT0gJ0xVUl9WSU9MQVRJT05TJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IGNvbHVtbi50b29sdGlwSWNvbkNsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJjb2x1bW4udG9vbHRpcE1lc3NhZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cImd0LXRvdGFsLXJvdy10b29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJndEdlbmVyYWxDb25maWcuY29tcG9uZW50ID09PSAnTFVSX1ZJT0xBVElPTlMnICYmIGNvbHVtbi50b29sdGlwTWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1pIG1kaS1pbmZvLW91dGxpbmUgaW5mby1sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwibHVyVmlvbGF0aW9uVG90YWxSb3dUb29sVGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJndC10b3RhbC1yb3ctdG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8IS0tIE1BSU4gUk9XIC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbkRlZi5oZWFkZXJJbmZvWzBdLm9iamVjdEtleVwiXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uRGVmIG9mIHRhYmxlSGVhZGVyczsgdHJhY2tCeTogdHJhY2tCeUZuXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHRoXHJcbiAgICAgICAgICAgICAgICAgICAgI3RhYmxlSGVhZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgbm93cmFwXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0LWhlYWRlci1jZWxsXHJcbiAgICAgICAgICAgICAgICAgICAgKm1hdEhlYWRlckNlbGxEZWZcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiY29sdW1uRGVmLndpZHRoXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93IG14LTBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaGVhZGVyIG9mIGNvbHVtbkRlZi5oZWFkZXJJbmZvOyBsZXQgaiA9IGluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhlYWRlci50eXBlT2ZIZWFkZXJEYXRhID09PSAnU1RSSU5HJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICd1cHBlci1sYWJlbCc6IGogPT09IDAsICdsb3dlci1sYWJlbCc6IGogPT09IDEgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2tlbGV0b24tbG9hZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWFkZXIubmFtZSA9PSBudWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aGVtZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwcHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnYmxvY2snLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogY29sdW1uRGVmLndpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWF4LXdpZHRoJzogJ2NhbGMoMTAwJSAtIDIwcHgpJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2tlbGV0b24tbG9hZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlci5uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaGVhZGVyLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLnRvb2x0aXBNZXNzYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGZsb2F0OiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb24gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0PVwibmdiVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJoZWFkZXIudG9vbHRpcC50b29sdGlwTWVzc2FnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09PSAnaW1wc0luZm9Ub29sdGlwJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgZmxvYXQ6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbiB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdD1cIm5nYlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImltcHNJbmZvVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09PSAnc3BvdHNDb2x1bW5FcXVpdmFsaXphdGlvbk1lc3NhZ2VUb29sdGlwJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgZmxvYXQ6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbiB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdD1cIm5nYlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInNwb3RzQ29sdW1uRXF1aXZhbGl6YXRpb25NZXNzYWdlVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT09ICd1bmRlckRlbGl2ZXJ5VG9vbHRpcCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGZsb2F0OiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb24gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Q9XCJuZ2JUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJ1bmRlckRlbGl2ZXJ5VG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT09ICdvdmVyRGVsaXZlcnlUb29sdGlwJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgZmxvYXQ6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbiB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdD1cIm5nYlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cIm92ZXJEZWxpdmVyeVRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBQb3NpdGlvbiB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcENsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09PSAncmF0aW5nSW5mb1Rvb2x0aXAnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLmljb25DbGFzcyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBmbG9hdDogaGVhZGVyWyd0b29sdGlwJ10uaWNvblBvc2l0aW9uIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0PVwibmdiVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwicmF0aW5nSW5mb1Rvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBQb3NpdGlvbiB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcENsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09PSAncmF0ZUluZm9Ub29sdGlwJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgZmxvYXQ6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbiB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdD1cIm5nYlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInJhdGVJbmZvVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT09ICdvbmdvaW5nUmV2Qm9va2VkQ29sdW1uVG9vbHRpcCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGZsb2F0OiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb24gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Q9XCJuZ2JUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJvbmdvaW5nUmV2Qm9va2VkQ29sdW1uVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT09ICdjb21wbGV0ZWRSZXZCb29rZWRDb2x1bW5Ub29sdGlwJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgZmxvYXQ6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbiB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdD1cIm5nYlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImNvbXBsZXRlZFJldkJvb2tlZENvbHVtblRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBQb3NpdGlvbiB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcENsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09PSAnYXZnQm9va2VkUmF0ZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGZsb2F0OiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb24gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Q9XCJuZ2JUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJhdmdCb29rZWRSYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGVhZGVyLnRvb2x0aXAgJiYgaGVhZGVyLnRvb2x0aXAubmFtZSA9PT0gJ2F2Z0Jvb2tlZFJ0ZydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGZsb2F0OiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb24gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Q9XCJuZ2JUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJhdmdCb29rZWRSdGdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBQb3NpdGlvbiB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcENsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09PSAnYXZnQm9va2VkSW1wcydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGZsb2F0OiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb24gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Q9XCJuZ2JUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJhdmdCb29rZWRJbXBzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT09ICdhdXRvbWF0aW9uVG9vbHRpcCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGZsb2F0OiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb24gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Q9XCJuZ2JUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJhdXRvbWF0aW9uVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09PSAncmViYXRlSW1wYWN0J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgZmxvYXQ6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbiB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdD1cIm5nYlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInJlYmF0ZUltcGFjdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09PSAncHJvamVjdGVkSW1wc1J0ZydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGZsb2F0OiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb24gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Q9XCJuZ2JUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJwcm9qZWN0ZWRJbXBzUnRnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXIudHlwZU9mSGVhZGVyRGF0YSA9PT0gJ0NIRUNLQk9YJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImd0R2VuZXJhbENvbmZpZy5pc0hlYWRlckNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgY3VzdG9tLWNvbHVtbi1jaGVja2JveC1jaGVja2VkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0VW5zZWxlY3RBbGxSb3dzKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2JveFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFndEdlbmVyYWxDb25maWcuaXNIZWFkZXJDaGVja2VkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGN1c3RvbS1jb2x1bW4tY2hlY2tib3gtdW5jaGVja2VkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdkaXNhYmxlLWNoZWNrYm94JzogZ3RHZW5lcmFsQ29uZmlnLmRpc2FibGVIZWFkZXJDaGVja2JveCB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0VW5zZWxlY3RBbGxSb3dzKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2JveF9vdXRsaW5lX2JsYW5rXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJndEdlbmVyYWxDb25maWcuc2hvd0FsbENvbHVtbkZpbHRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNvcnQtZmlsdGVyLWNvbnRhaW5lclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXIuc2hvd1Rvb2x0aXBJY29uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBBY3RpdmUgdG9vbHRpcCBGdW5jdGlvbmFsaXR5IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXIuZmlsdGVyID09PSAnQ0hFQ0tCT1gnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZmlsdGVyLXZhcmlhbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5uYUZpbHRlclNlcnZpY2UuaXNGaWx0ZXJTb3J0QWN0aXZlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubmFGaWx0ZXJTZXJ2aWNlLmlzRmlsdGVyU29ydEFjdGl2ZVtoZWFkZXIuam9pbmVkRmlsdGVyU29ydE9iamVjdEtleXNdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBoZWFkZXIuZGlzYWJsZVRvb2x0aXBJY29uIHx8IHNob3dTa2VsZXRvbkxvYWRpbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiZmlsdGVyVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBmaWx0ZXJBbGlnbm1lbnQgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJub24tZWRpdC1jaGVja2JveC10b29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwiJ291dHNpZGUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJzPVwibWFudWFsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0PVwibmdiVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYmluZFRoZVZhbHVlVG9Ub29sVGlwKHQsIGhlYWRlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhpZGRlbik9XCJjbG9zZVRvb2x0aXAoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyLmZpbHRlciA9PT0gJ1NMSURFUidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1maWx0ZXItdmFyaWFudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmUgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5uYUZpbHRlclNlcnZpY2UuaXNGaWx0ZXJTb3J0QWN0aXZlW2hlYWRlci5qb2luZWRGaWx0ZXJTb3J0T2JqZWN0S2V5c10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGhlYWRlci5kaXNhYmxlVG9vbHRpcEljb24gfHwgc2hvd1NrZWxldG9uTG9hZGluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJzbGlkZXJUb29sVGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbSBsZWZ0LXRvcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cIm5vbi1lZGl0LXNsaWRlci10b29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwiJ291dHNpZGUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJzPVwibWFudWFsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0MT1cIm5nYlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImJpbmRUaGVWYWx1ZVRvVG9vbFRpcCh0MSwgaGVhZGVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGlkZGVuKT1cImNsb3NlVG9vbHRpcCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXIuZmlsdGVyID09PSAnREFURSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1maWx0ZXItdmFyaWFudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmUgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5uYUZpbHRlclNlcnZpY2UuaXNGaWx0ZXJTb3J0QWN0aXZlW2hlYWRlci5qb2luZWRGaWx0ZXJTb3J0T2JqZWN0S2V5c10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGhlYWRlci5kaXNhYmxlVG9vbHRpcEljb24gfHwgc2hvd1NrZWxldG9uTG9hZGluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJkYXRlUGlja2VyVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20gYXV0b1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cIm5vbi1lZGl0LWRhdGVwaWNrZXItdG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2Vycz1cIm1hbnVhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdDI9XCJuZ2JUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJiaW5kVGhlVmFsdWVUb1Rvb2xUaXAodDIsIGhlYWRlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhpZGRlbik9XCJjbG9zZVRvb2x0aXAoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyLmZpbHRlciA9PT0gJ1dFRUsnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZmlsdGVyLXZhcmlhbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5uYUZpbHRlclNlcnZpY2UuaXNGaWx0ZXJTb3J0QWN0aXZlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubmFGaWx0ZXJTZXJ2aWNlLmlzRmlsdGVyU29ydEFjdGl2ZVtoZWFkZXIuam9pbmVkRmlsdGVyU29ydE9iamVjdEtleXNdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBoZWFkZXIuZGlzYWJsZVRvb2x0aXBJY29uIHx8IHNob3dTa2VsZXRvbkxvYWRpbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwid2Vla1BpY2tlclRvb2xUaXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tIGxlZnQtdG9wXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJtYW51YWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3QzPVwibmdiVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYmluZFRoZVZhbHVlVG9Ub29sVGlwKHQzLCBoZWFkZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoaWRkZW4pPVwiY2xvc2VUb29sdGlwKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlci5maWx0ZXIgPT09ICdUSU1FJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZpbHRlci12YXJpYW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmU6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubmFGaWx0ZXJTZXJ2aWNlLmlzRmlsdGVyU29ydEFjdGl2ZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmVbaGVhZGVyLmpvaW5lZEZpbHRlclNvcnRPYmplY3RLZXlzXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogaGVhZGVyLmRpc2FibGVUb29sdGlwSWNvbiB8fCBzaG93U2tlbGV0b25Mb2FkaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInRpbWVGaWx0ZXJUb29sVGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbSBsZWZ0LXRvcCBhdXRvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwibm9uLWVkaXQtdGltZS10b29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwiJ291dHNpZGUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJzPVwibWFudWFsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0ND1cIm5nYlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImJpbmRUaGVWYWx1ZVRvVG9vbFRpcCh0NCwgaGVhZGVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGlkZGVuKT1cImNsb3NlVG9vbHRpcCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWhlYWRlci5zaG93VG9vbHRpcEljb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD1cIm5vLWZpbHRlci1zcGFjZVwiPjwvc3Bhbj48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT09ICdsdXJWaW9sYXRpb25JbmZvVG9vbHRpcCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGZsb2F0OiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb24gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Q9XCJuZ2JUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJsdXJWaW9sYXRpb25JbmZvVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGg+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbWF0Q2VsbERlZj1cImxldCBST1dfREFUQVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXQtY2VsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJST1dfREFUQS5iYWNrZ3JvdW5kQ29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cIlJPV19EQVRBLmJvcmRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgUk9XX0RBVEEucm93Q2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1swXS5vYmplY3RLZXkgKyAnVGRDbGFzcyddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIucm93c3Bhbl09XCJST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1swXS5vYmplY3RLZXkgKyAnUm93c3BhbiddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFoaWRlU29tZVRkcyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhpZGVTb21lVGRzICYmICFST1dfREFUQVsnaGlkZScgKyBjb2x1bW5EZWYuaGVhZGVySW5mb1swXS5vYmplY3RLZXkgKyAnVGQnXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2tlbGV0b24tbG9hZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dTa2VsZXRvbkxvYWRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ9XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aGVtZV09XCJ7IGhlaWdodDogJzEwcHgnLCBkaXNwbGF5OiAnYmxvY2snIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LXNrZWxldG9uLWxvYWRlcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2hvd1NrZWxldG9uTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYmxlRGF0YS5sZW5ndGggPiAwICYmIChpc05vRGF0YVRvRGlzcGxheVN1YmplY3QkIHwgYXN5bmMpID09PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3VibGluZSBvZiBjb2x1bW5EZWYuaGVhZGVySW5mbztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdWJMaW5lSW5kZXggPSBpbmRleDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlGblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBhbm5hQ29yZVNob3dFbGxpcHNpc1RleHRPbkhvdmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS50eXBlT2ZCb2R5RGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidJQ09OJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFycmVkSW5Qcm9ncmVzcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQS5vcmRlcklkID09PSBzZWxlY3RlZFN0YXJyZWRPcmRlcklkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJST1dfREFUQS5pY29uQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImljb25DbGlja2VkKFJPV19EQVRBLCBST1dfREFUQS5pY29uQ2xhc3MpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5nYlRvb2x0aXA9XCJ7eyBST1dfREFUQS5pY29uVGl0bGVUZXh0IH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cImd0LWljb24tY29sdW1uLXRvb2x0aXAgcmVtb3ZlLW9uLXNjcm9sbC1jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnJlZEluUHJvZ3Jlc3MgJiYgUk9XX0RBVEEub3JkZXJJZCA9PT0gc2VsZWN0ZWRTdGFycmVkT3JkZXJJZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXItZm9yLWJ1dHRvbi1kaXJlY3RpdmVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidJQ09OX0NFTEwnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhY3Rpb24gb2YgUk9XX0RBVEFbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0uYWN0aW9uS2V5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGlvbi5zaG93T2JqZWN0S2V5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uLnNob3dJY29uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiYWN0aW9uLmljb25DbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlRW50ZXJPblN0cmluZ1RleHRBY3Rpb25UeXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLnRvb2x0aXBLZXlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tIGF1dG9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwidGVhbS11c2VyLXRvb2x0aXAgcmVtb3ZlLW9uLXNjcm9sbC1jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiYWN0aW9uLnNob3dUb29sdGlwID8gYWN0aW9uLnRvb2x0aXBEYXRhIDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWN0aW9uQ2xpY2tlZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZVRvb2x0aXBdPVwiIWFjdGlvbi5zaG93VG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInSFRNTF9TVFJJTkcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIlJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaW5uZXJIVE1MQ2VsbENsaWNrZWQoJGV2ZW50LCBST1dfREFUQSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInU1ZHX0lDT04nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhbm5hLWNvcmUtaWNvbi1jb2x1bW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnROYW1lXT1cImd0R2VuZXJhbENvbmZpZy5jb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFPYmplY3RdPVwiUk9XX0RBVEFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25Ub1Nob3ddPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbHVtbkljb25DbGlja2VkKT1cInN2Z0ljb25DbGlja2VkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9hbm5hLWNvcmUtaWNvbi1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidURVhUX0FDVElPTlMnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0ZXh0IG9mIFJPV19EQVRBW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLmFjdGlvbktleVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRleHQuc2hvd1Rvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFjdGlvbkNsaWNrZWQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0ZXh0LmlzRGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgdGV4dC5jbGFzcyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlRW50ZXJPblRleHRBY3Rpb25UeXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLnRvb2x0aXBLZXlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwidGV4dEFjdGlvblRvb2x0aXBUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYXV0b1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwiZ3QtaWNvbi1jb2x1bW4tdG9vbHRpcCByZW1vdmUtb24tc2Nyb2xsLWNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0ZXh0Lm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiF0ZXh0LnNob3dUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBY3Rpb25DbGlja2VkKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidGV4dC5pc0Rpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IHRleHQuY2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRleHQubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInQ0hFQ0tCT1gnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpc2FibGUtY2hlY2tib3gnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLmlzRGlzYWJsZWRLZXldXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgY3VzdG9tLWNvbHVtbi1jaGVja2JveC1jaGVja2VkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RPclVuc2VsZWN0Q2hlY2tib3goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19ib3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgY3VzdG9tLWNvbHVtbi1jaGVja2JveC11bmNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaXNhYmxlLWNoZWNrYm94JzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5pc0Rpc2FibGVkS2V5XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0T3JVbnNlbGVjdENoZWNrYm94KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19ib3hfb3V0bGluZV9ibGFua1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWN0aW9uIG9mIFJPV19EQVRBW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLmFjdGlvbktleVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24uc2hvd0ljb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJhY3Rpb24uaWNvbkNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBhY3Rpb24uZGlzYWJsZWRJY29uIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VzZUVudGVyT25TdHJpbmdUZXh0QWN0aW9uVHlwZUNvbnRhaW5pbmdUYWJsZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS50b29sdGlwS2V5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbSBhdXRvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInRvb2x0aXAtY29udGFpbmluZy10YWJsZSByZW1vdmUtb24tc2Nyb2xsLWNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJ0b29sdGlwQ29udGFpbmluZ1RhYmxlVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ0NMSUNLQUJMRV9EQVRBJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRleHQgb2YgUk9XX0RBVEFbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0uYWN0aW9uS2V5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ0ZXh0LmNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrYWJsZURhdGFDbGlja2VkKFJPV19EQVRBLCB0ZXh0LmlkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRleHQubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmxpbmUub2JqZWN0S2V5ID09PSAnZGlzcGxheUJvb2tlZFVuaXRzJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0R2VuZXJhbENvbmZpZy5jb21wb25lbnQgPT09ICdSQVRJTkcnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjbGlja2FibGUtZGF0YVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic3BvdERldGFpbHNEb3dubG9hZENsaWNrZWQoJ0RBVEFST1cnLCBST1dfREFUQSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZGlzYWJsZWQtY2xpY2thYmxlLWRhdGEnOiBkb3dubG9hZEluUHJvZ3Jlc3MgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgUk9XX0RBVEEuZGlzcGxheUJvb2tlZFVuaXRzIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zIHNwb3QtZGV0YWlscy1kb3dubG9hZC1pY29uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPmdldF9hcHA8L3NwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZEluUHJvZ3Jlc3MgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEuaW52ZW50b3J5Q29kZUlkID09PVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJbnZlbnRvcnlJZEZvckRvd25sb2FkICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLmRlbW9ncmFwaGljID09PSBzZWxlY3RlZERlbW9ncmFwaGljRm9yRG93bmxvYWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2lyY3VsYXJQcm9ncmVzc0JhclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1NUUklOR19fX0lDT05fT1JfVEVYVF9BQ1RJT04nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhY3Rpb24gb2YgUk9XX0RBVEFbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0uYWN0aW9uS2V5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiYWN0aW9uLmFkZGl0aW9uYWxUZXh0QmVmb3JlTGlua0NsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIdG1sXT1cImFjdGlvbi5hZGRpdGlvbmFsVGV4dEJlZm9yZUxpbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5nYlRvb2x0aXA9XCJ7eyBhY3Rpb24uYWRkaXRpb25hbFRleHRCZWZvcmVMaW5rIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cImd0LWljb24tY29sdW1uLXRvb2x0aXAgcmVtb3ZlLW9uLXNjcm9sbC1jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVUb29sdGlwXT1cIiFhY3Rpb24uZW5hYmxlVG9vbHRpcEZvckFkZGl0aW9uYWxUZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGlvbiAmJiBhY3Rpb24udHlwZU9mRGF0YSA9PT0gJ1NUUklORydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhY3Rpb24uZGF0YSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiYWN0aW9uLmlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGlvbi5zaG93TGlua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWN0aW9uQ2xpY2tlZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiYWN0aW9uLmxpbmtDbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogYWN0aW9uLmRpc2FibGVkTGluayB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgYWN0aW9uLmRhdGEgfX08L2FcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdiVG9vbHRpcD1cInt7IGFjdGlvbi5hZGRpdGlvbmFsVGV4dEFmdGVyTGluayB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiYWN0aW9uLmFkZGl0aW9uYWxUZXh0QWZ0ZXJMaW5rQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cImd0LWljb24tY29sdW1uLXRvb2x0aXAgcmVtb3ZlLW9uLXNjcm9sbC1jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVUb29sdGlwXT1cIiFhY3Rpb24uZW5hYmxlVG9vbHRpcEZvckFkZGl0aW9uYWxBZnRlclRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFjdGlvbi5hZGRpdGlvbmFsVGV4dEFmdGVyTGluayB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY3Rpb24uc2hvd1Rvb2x0aXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aW9uLnRvb2x0aXBEYXRhLmlubmVySHRtbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24uc2hvd0ljb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImFjdGlvbi5pY29uQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogYWN0aW9uLmRpc2FibGVkSWNvbiB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlRW50ZXJPblN0cmluZ1RleHRBY3Rpb25UeXBlQ29udGFpbmluZ1RhYmxlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS50b29sdGlwS2V5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbSBhdXRvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9DbG9zZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInRvb2x0aXAtY29udGFpbmluZy10YWJsZSByZW1vdmUtb24tc2Nyb2xsLWNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInRvb2x0aXBDb250YWluaW5nVGFibGVUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWFjdGlvbi50b29sdGlwRGF0YS50b29sdGlwVGFibGVCb2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGlvbi5zaG93SWNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiYWN0aW9uLmljb25DbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBhY3Rpb24uZGlzYWJsZWRJY29uIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25DbGlja2VkT25TdHJpbmdJY29uQWN0aW9uVHlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJtb3VzZUxlYXZlVGV4dEFjdGlvblR5cGUoUk9XX0RBVEEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlRW50ZXJPblN0cmluZ1RleHRBY3Rpb25UeXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS50b29sdGlwS2V5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZW1lbnRdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLnRvb2x0aXBQbGFjZW1lbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhY3Rpb24udG9vbHRpcFBsYWNlbWVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdib3R0b20gYXV0bydcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ0ZWFtLXVzZXItdG9vbHRpcCByZW1vdmUtb24tc2Nyb2xsLWNsYXNzIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLnRvb2x0aXBDbGFzc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwidXNlckxvZ2dlZEluRGV0YWlsc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aW9uWydzaG93U3ZnSWNvbiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YW5uYS1jb3JlLWFubmEtZXN0LWljb24tdGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsb2F0LXJpZ2h0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGlvblsnc3ZnSWNvbk5hbWUnXSA9PT0gJ2FubmEtaWNvbidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIm1vdXNlTGVhdmVUZXh0QWN0aW9uVHlwZShST1dfREFUQSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VzZUVudGVyT25TdHJpbmdUZXh0QWN0aW9uVHlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50b29sdGlwS2V5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZW1lbnRdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi50b29sdGlwUGxhY2VtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGFjdGlvbi50b29sdGlwUGxhY2VtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdib3R0b20gYXV0bydcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInRlYW0tdXNlci10b29sdGlwIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3Mge3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uWyd0b29sdGlwQ2xhc3MnXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJ1c2VyTG9nZ2VkSW5EZXRhaWxzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hbm5hLWNvcmUtYW5uYS1lc3QtaWNvbi10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWFjdGlvbi5zaG93VG9vbHRpcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uLnNob3dJY29uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImFjdGlvbi5pY29uQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBhY3Rpb24uZGlzYWJsZWRJY29uIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uQ2xpY2tlZE9uU3RyaW5nSWNvbkFjdGlvblR5cGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInU1RSSU5HX09SX0lOUFVUJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XT8udHlwZSA9PT1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NUUklORyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpbnB1dEJveFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIdG1sXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8udmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaW5wdXRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5wbGFjZWhvbGRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5hQ29yZVNob3dFbGxpcHNpc1RleHRPbkhvdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jbGFzc05hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXNNYWRlSW5FZGl0YWJsZUlucHV0Qm94KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhc3RlKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzTWFkZUluRWRpdGFibGVJbnB1dEJveChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlSW5wdXRWYWx1ZUNoYW5nZWQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV0udmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZGlzYWJsZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlZC1ib3JkZXInOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmhhc0Vycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2hvd0ljb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5pY29uVG9vbHRpcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwiZ3QtdG90YWwtcm93LXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5pY29uQ2xhc3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Nob3dTdmdJY29uJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YW5uYS1jb3JlLWFubmEtZXN0LWljb24tdGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbG9hdC1yaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1bXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N2Z0ljb25OYW1lJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA9PT0gJ2FubmEtaWNvbidcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlbWVudF09XCInYm90dG9tIGF1dG8nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwiZ3QtdG90YWwtcm93LXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5pY29uVG9vbHRpcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hbm5hLWNvcmUtYW5uYS1lc3QtaWNvbi10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInSFRNTCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckh0bWxdPVwiUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1NJTkdMRV9SQURJTydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlzYWJsZS1jaGVja2JveCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0uaXNEaXNhYmxlZEtleV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLXJhZGlvYm94LW1hcmtlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiKG51bGwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLXJhZGlvYm94LWJsYW5rXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlzYWJsZS1jaGVja2JveCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0uaXNEaXNhYmxlZEtleV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdE9yVW5zZWxlY3RDaGVja2JveChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidSQURJTydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1ncm91cFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJST1dfREFUQVsnUmFkaW9CdXR0b25Db25maWcnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJST1dfREFUQVtzdWJsaW5lLm9iamVjdEtleV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlJPV19EQVRBWydSYWRpb0J1dHRvbkNvbmZpZyddWzBdLmlzRGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByYWRpb0J1dHRvbiBvZiBST1dfREFUQVsnUmFkaW9CdXR0b25Db25maWcnXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxhc3QgPSBsYXN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInt7IHJhZGlvQnV0dG9uLnZhbHVlIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyByYWRpb0J1dHRvbi5jbGFzcyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhZGlvQnV0dG9uQ2xpY2tlZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpb0J1dHRvbi52YWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVsnUmFkaW9CdXR0b25Db25maWcnXVswXS5pc0Rpc2FibGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyByYWRpb0J1dHRvbi5sYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIiB7eyByYWRpb0J1dHRvbi5pY29uQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmFkaW9CdXR0b25JY29uQ2xpY2tlZChST1dfREFUQSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyICpuZ0lmPVwiIWxhc3RcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInU1RSSU5HX1dJVEhfVE9PTFRJUCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFjdGlvbiBvZiBST1dfREFUQVtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5hY3Rpb25LZXlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4ge3sgYWN0aW9uPy5kYXRhVG9EaXNwbGF5IH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGlvbj8uc2hvd1Rvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInRleHRBY3Rpb25Ub29sdGlwVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VzZUVudGVyT25TdHJpbmdUZXh0QWN0aW9uVHlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS50b29sdGlwS2V5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZW1lbnRdPVwiYWN0aW9uPy50b29sdGlwUG9zaXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJhY3Rpb24/LnRvb2x0aXBJY29uQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cImd0LWljb24tY29sdW1uLXRvb2x0aXAgcmVtb3ZlLW9uLXNjcm9sbC1jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVUb29sdGlwXT1cImFjdGlvbj8uZGlzYWJsZVRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+IHt7IGFjdGlvbj8uZGF0YVRvRGlzcGxheUFmdGVyVG9vbHRpcCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN1YmxpbmUub2JqZWN0S2V5ICE9PSAnZGVzY3JpcHRpb24nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmxpbmUub2JqZWN0S2V5ID09PSAnaW52ZW50b3J5Q29kZScgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbJ2lzU2VsbGVyR3JvdXAnXSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndEdlbmVyYWxDb25maWcuY29tcG9uZW50ID09PSAnUkFUSU5HJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtaSBtZGktaW5mby1vdXRsaW5lIHNlbGxlci10b29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJzZWxsZXJIaWVyYXJjaHlUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20gYXV0b1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9DbG9zZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2Vycz1cIm1hbnVhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhpZGRlbik9XCJjbG9zZVRvb2x0aXAoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2luZm89XCJuZ2JUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJoaWVyYXJjaHktdG9vbHRpcCByZW1vdmUtb24tc2Nyb2xsLWNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZFRoZVZhbHVlVG9TZWxsZXJHcm91cFRvb2x0aXAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQS5zZWxsZXJHcm91cEhpZXJhcmNoeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJsaW5lLm9iamVjdEtleSA9PT0gJ2Rpc3BsYXlCb29rZWRBdmVyYWdlUmF0aW5nJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndEdlbmVyYWxDb25maWcuY29tcG9uZW50ID09PSAnUkFUSU5HJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVsnc2hvd1JhdGluZ0F2ZXJhZ2VJY29uJ11cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWkgbWRpLWluZm8tb3V0bGluZSBzZWxsZXItdG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tIGF1dG9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzRGlmZmVyZW5jZShST1dfREFUQS5pc0RpZmZlcmVuY2VMZXNzVGhhbjI1UGVyY2VudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInBvc3RlZC1hdmctdG9vbHRpcCByZW1vdmUtb24tc2Nyb2xsLWNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJwb3N0ZWRSYXRpbmdEaWZmZXJlbmNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmxpbmUub2JqZWN0S2V5ID09PSAnZGlzcGxheUJvb2tlZEF2ZXJhZ2VJbXByZXNzaW9uJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndEdlbmVyYWxDb25maWcuY29tcG9uZW50ID09PSAnUkFUSU5HJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVsnc2hvd0ltcHJlc3Npb25BdmVyYWdlSWNvbiddXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1pIG1kaS1pbmZvLW91dGxpbmUgc2VsbGVyLXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbSBhdXRvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJc0RpZmZlcmVuY2UoUk9XX0RBVEEuaXNEaWZmZXJlbmNlTGVzc1RoYW4yNVBlcmNlbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJwb3N0ZWQtYXZnLXRvb2x0aXAgcmVtb3ZlLW9uLXNjcm9sbC1jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwicG9zdGVkSW1wRGlmZmVyZW5jZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3VibGluZS5vYmplY3RLZXkgPT09ICdkZXNjcmlwdGlvbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEuZGVzY3JpcHRpb25NZXNzYWdlIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLmRlc2NyaXB0aW9uRW1haWxSZWZlcmVuY2VOdW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJST1dfREFUQS5kZXNjcmlwdGlvbk1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgUk9XX0RBVEEuZGVzY3JpcHRpb25NZXNzYWdlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLmRlc2NyaXB0aW9uRW1haWxSZWZlcmVuY2VOdW0gIT09ICctJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEuZGVzY3JpcHRpb25FbWFpbFJlZmVyZW5jZU51bSAhPT0gJydcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVtYWlsIFJlZjoge3sgUk9XX0RBVEEuZGVzY3JpcHRpb25FbWFpbFJlZmVyZW5jZU51bSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj1cInt7IFJPV19EQVRBLmRlc2NyaXB0aW9uRGV0YWlsc1VybCB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQS5kZXNjcmlwdGlvbkRldGFpbHNVcmxUeXBlID09PSAnUERGJyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQS5kZXNjcmlwdGlvbkRldGFpbHNVcmxUeXBlID09PSAnRVhDRUwnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIHZpZXdEZXRhaWxzQW5kRW1haWxCdG5cIj5Eb3dubG9hZDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLmFjdGl2aXR5bmFtZS50b0xvd2VyQ2FzZSgpID09PSAnb3JkZXIgb25ib2FyZGVkJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJST1dfREFUQS5kZXNjcmlwdGlvbkRldGFpbHNVcmxUeXBlID09PSAnTElOSydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidmlld0RldGFpbHNDbGlja2VkKFJPV19EQVRBKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIHZpZXdEZXRhaWxzQW5kRW1haWxCdG4gb3JkZXItb25ib2FyZGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3IGRldGFpbHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPVwie3sgUk9XX0RBVEEuZGVzY3JpcHRpb25FbWFpbFVybCB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQS5kZXNjcmlwdGlvbkVtYWlsVXJsICE9PSAnLScgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEuZGVzY3JpcHRpb25FbWFpbFVybCAhPT0gJydcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gdmlld0RldGFpbHNBbmRFbWFpbEJ0blwiPlZpZXcgZW1haWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc05vRGF0YVRvRGlzcGxheVN1YmplY3QkIHwgYXN5bmNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBudWxsIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L3RhYmxlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8YW5uYS1jb3JlLW5vLWRhdGEtbGliXHJcbiAgICAgICAgW3dpZHRoXT1cIm5vRGF0YVdpZHRoXCJcclxuICAgICAgICBbbWFyZ2luVG9wXT1cIm1hcmdpblRvcFwiXHJcbiAgICAgICAgKm5nSWY9XCJpc05vRGF0YVRvRGlzcGxheVN1YmplY3QkIHwgYXN5bmNcIlxyXG4gICAgPlxyXG4gICAgPC9hbm5hLWNvcmUtbm8tZGF0YS1saWI+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSBDaGVja2JveCB0ZW1wbGF0ZSAtLT5cclxuPG5nLXRlbXBsYXRlICNmaWx0ZXJUb29sdGlwPlxyXG4gICAgPGFubmEtY29yZS1hbm5hLWNvbHVtbi1jaGVja2JveC1maWx0ZXJcclxuICAgICAgICBbdGFibGVEYXRhXT1cInRhYmxlRGF0YVwiXHJcbiAgICAgICAgW3Nob3dGaWx0ZXJIZWFkZXJUYWJzXT1cInNob3dGaWx0ZXJUb29sdGlwVGFic1wiXHJcbiAgICAgICAgW2lzTHVyQW5kQ3NyQ29tcG9uZW50XT1cImZhbHNlXCJcclxuICAgICAgICBbY2xvbmVkVGFibGVEYXRhXT1cImNsb25lZFRhYmxlRGF0YVwiXHJcbiAgICAgICAgW2ZpbHRlclRhYk9iamVjdHNdPVwiZmlsdGVyVGFiT2JqZWN0c1wiXHJcbiAgICAgICAgKGZpbHRlckFwcGxpZWRUb1RhYmxlKT1cImZpbHRlckFwcGxpZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNvcnRpbmdBcHBsaWVkVG9UYWJsZSk9XCJzb3J0aW5nQXBwbGllZCgkZXZlbnQpXCJcclxuICAgICAgICAoY2xvc2VUb29sdGlwKT1cImNsb3NlVG9vbHRpcCgpXCJcclxuICAgID5cclxuICAgIDwvYW5uYS1jb3JlLWFubmEtY29sdW1uLWNoZWNrYm94LWZpbHRlcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gU2xpZGVyIHRlbXBsYXRlIC0tPlxyXG48bmctdGVtcGxhdGUgI3NsaWRlclRvb2xUaXA+XHJcbiAgICA8YW5uYS1jb3JlLWFubmEtY29sdW1uLXNsaWRlci1maWx0ZXJcclxuICAgICAgICBbdGFibGVEYXRhXT1cInRhYmxlRGF0YVwiXHJcbiAgICAgICAgW3Nob3dGaWx0ZXJIZWFkZXJUYWJzXT1cInNob3dGaWx0ZXJUb29sdGlwVGFic1wiXHJcbiAgICAgICAgW2lzTHVyQW5kQ3NyQ29tcG9uZW50XT1cImZhbHNlXCJcclxuICAgICAgICBbY2xvbmVkVGFibGVEYXRhXT1cImNsb25lZFRhYmxlRGF0YVwiXHJcbiAgICAgICAgW2ZpbHRlclRhYk9iamVjdHNdPVwiZmlsdGVyVGFiT2JqZWN0c1wiXHJcbiAgICAgICAgKGZpbHRlckFwcGxpZWRUb1RhYmxlKT1cImZpbHRlckFwcGxpZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNvcnRpbmdBcHBsaWVkVG9UYWJsZSk9XCJzb3J0aW5nQXBwbGllZCgkZXZlbnQpXCJcclxuICAgICAgICAoY2xvc2VUb29sdGlwKT1cImNsb3NlVG9vbHRpcCgpXCJcclxuICAgID5cclxuICAgIDwvYW5uYS1jb3JlLWFubmEtY29sdW1uLXNsaWRlci1maWx0ZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIERhdGUgUGlja2VyIFRlbXBsYXRlIC0tPlxyXG48bmctdGVtcGxhdGUgI2RhdGVQaWNrZXJUb29sdGlwPlxyXG4gICAgPGFubmEtY29yZS1hbm5hLWNvbHVtbi1kYXRlLXJhbmdlLWZpbHRlclxyXG4gICAgICAgIFt0YWJsZURhdGFdPVwidGFibGVEYXRhXCJcclxuICAgICAgICBbc2hvd0ZpbHRlckhlYWRlclRhYnNdPVwic2hvd0ZpbHRlclRvb2x0aXBUYWJzXCJcclxuICAgICAgICBbaXNMdXJBbmRDc3JDb21wb25lbnRdPVwiZmFsc2VcIlxyXG4gICAgICAgIFtjbG9uZWRUYWJsZURhdGFdPVwiY2xvbmVkVGFibGVEYXRhXCJcclxuICAgICAgICBbZmlsdGVyVGFiT2JqZWN0c109XCJmaWx0ZXJUYWJPYmplY3RzXCJcclxuICAgICAgICAoZmlsdGVyQXBwbGllZFRvVGFibGUpPVwiZmlsdGVyQXBwbGllZCgkZXZlbnQpXCJcclxuICAgICAgICAoc29ydGluZ0FwcGxpZWRUb1RhYmxlKT1cInNvcnRpbmdBcHBsaWVkKCRldmVudClcIlxyXG4gICAgICAgIChjbG9zZVRvb2x0aXApPVwiY2xvc2VUb29sdGlwKClcIlxyXG4gICAgPlxyXG4gICAgPC9hbm5hLWNvcmUtYW5uYS1jb2x1bW4tZGF0ZS1yYW5nZS1maWx0ZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIFdlZWsgUGlja2VyIFRlbXBsYXRlIC0tPlxyXG48bmctdGVtcGxhdGUgI3dlZWtQaWNrZXJUb29sVGlwPlxyXG4gICAgPCEtLSA8ZGl2IGNsYXNzPVwid2Vla3BpY2tlci1jb250YWluZXJcIj5cclxuICAgICAgICA8YW5uYS1jb3JlLXdlZWstY2FsZW5kYXItZmlsdGVyLWxpYlxyXG4gICAgICAgICAgICBbd2Vlay1jYWxlbmRhci1jb25maWddPVwiZ3RHZW5lcmFsQ29uZmlnLm11bHRpV2Vla1BpY2tlckNvbmZpZ1wiXHJcbiAgICAgICAgICAgIChhcHBseSk9XCJhcHBseVdlZWtGaWx0ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIFtmcm9tLWRhdGVdPVwiY2FsZW5kYXJNaW5FbmFibGVkRGF0ZVwiXHJcbiAgICAgICAgICAgIFt0by1kYXRlXT1cImNhbGVuZGFyTWF4RW5hYmxlZERhdGVcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L2FubmEtY29yZS13ZWVrLWNhbGVuZGFyLWZpbHRlci1saWI+XHJcbiAgICA8L2Rpdj4gLS0+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIFRpbWUgRmlsdGVyIFRlbXBsYXRlIC0tPlxyXG48bmctdGVtcGxhdGUgI3RpbWVGaWx0ZXJUb29sVGlwPlxyXG4gICAgPGFubmEtY29yZS1hbm5hLWNvbHVtbi10aW1lLWZpbHRlclxyXG4gICAgICAgIFt0YWJsZURhdGFdPVwidGFibGVEYXRhXCJcclxuICAgICAgICBbc2hvd0ZpbHRlckhlYWRlclRhYnNdPVwic2hvd0ZpbHRlclRvb2x0aXBUYWJzXCJcclxuICAgICAgICBbaXNMdXJBbmRDc3JDb21wb25lbnRdPVwiZmFsc2VcIlxyXG4gICAgICAgIFtzaG93QWxsVGltZVJhbmdlQ2hlY2tib3hlc109XCJzaG93Q2hlY2tib3hlc0ZvclRpbWVGaWx0ZXJcIlxyXG4gICAgICAgIFtjbG9uZWRUYWJsZURhdGFdPVwiY2xvbmVkVGFibGVEYXRhXCJcclxuICAgICAgICBbZmlsdGVyVGFiT2JqZWN0c109XCJmaWx0ZXJUYWJPYmplY3RzXCJcclxuICAgICAgICAoZmlsdGVyQXBwbGllZFRvVGFibGUpPVwiZmlsdGVyQXBwbGllZCgkZXZlbnQpXCJcclxuICAgICAgICAoc29ydGluZ0FwcGxpZWRUb1RhYmxlKT1cInNvcnRpbmdBcHBsaWVkKCRldmVudClcIlxyXG4gICAgICAgIChjbG9zZVRvb2x0aXApPVwiY2xvc2VUb29sdGlwKClcIlxyXG4gICAgPlxyXG4gICAgPC9hbm5hLWNvcmUtYW5uYS1jb2x1bW4tdGltZS1maWx0ZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2NvbHVtbkluZm9Ub29sdGlwPlxyXG4gICAgPHAgY2xhc3M9XCJibGFjay1jb2xvci10ZXh0IHdoaXRlLXNwYWNlLW5vd3JhcFwiPlRoaXMgcHJlZW1wdGlvbiBpcyByZWplY3RlZCBhbmQgbm90IG1hcmtlZCBmb3IgY3JlZGl0LjwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjcmF0aW5nSW5mb1Rvb2x0aXA+XHJcbiAgICA8cCBjbGFzcz1cImZpcnN0LXJvd1wiPlNob3dzICdCb29rZWQgUmF0aW5nJyBmb3IgUHJlZW1wdGlvbnMgJiBNYWtlR29vZCBPZmZlcmVkIHNwb3QocykuPC9wPlxyXG4gICAgPHAgY2xhc3M9XCJzZWNvbmQtcm93XCI+U2hvd3MgJ1Byb2plY3RlZCBSYXRpbmcnIGZvciBBRFUgT2ZmZXJlZCBzcG90KHMpLjwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjaW1wc0luZm9Ub29sdGlwPlxyXG4gICAgPHAgY2xhc3M9XCJmaXJzdC1yb3dcIj5TaG93cyAnQm9va2VkIElNUFMnIGZvciBQcmVlbXB0aW9ucyAmIE1ha2VHb29kIE9mZmVyZWQgc3BvdChzKS48L3A+XHJcbiAgICA8cCBjbGFzcz1cInNlY29uZC1yb3dcIj5TaG93cyAnUHJvamVjdGVkIElNUFMnIGZvciBBRFUgT2ZmZXJlZCBzcG90KHMpLjwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjc3BvdHNDb2x1bW5FcXVpdmFsaXphdGlvbk1lc3NhZ2VUb29sdGlwPlxyXG4gICAgPHAgY2xhc3M9XCJzcG90LWNvbHVtbi10b29sdGlwLW1lc3NhZ2VcIj5cclxuICAgICAgICBUaGlzIGNvbnNpc3RzIG9mIGVxdWl2YWxpemVkIHNwb3RzIGFuZCB1bi1lcXVpdmFsaXplZCBQYWlkIFByb2dyYW1zICYgdW4tZXF1aXZhbGl6ZWQgTm9uLXNwb3RzLlxyXG4gICAgPC9wPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICN1bmRlckRlbGl2ZXJ5VG9vbHRpcD5cclxuICAgIDxwIGNsYXNzPVwic3BvdC1jb2x1bW4tdG9vbHRpcC1tZXNzYWdlXCI+XHJcbiAgICAgICAgSW5kaWNhdGVzIHRoZSBVbmRlci1kZWxpdmVyeSBwZXJjZW50YWdlIGJhc2VkIG9uIGJvb2tlZCBhbmQgcG9zdGVkIFJURy9JTVBTLlxyXG4gICAgPC9wPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNvdmVyRGVsaXZlcnlUb29sdGlwPlxyXG4gICAgPHAgY2xhc3M9XCJzcG90LWNvbHVtbi10b29sdGlwLW1lc3NhZ2VcIj5cclxuICAgICAgICBJbmRpY2F0ZXMgdGhlIE92ZXItZGVsaXZlcnkgcGVyY2VudGFnZSBiYXNlZCBvbiBib29rZWQgYW5kIHBvc3RlZCBSVEcvSU1QUy5cclxuICAgIDwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjcmF0ZUluZm9Ub29sdGlwPlxyXG4gICAgPHAgY2xhc3M9XCJmaXJzdC1yb3dcIj5TaG93cyAnQm9va2VkIFJhdGUnIGZvciBQcmVlbXB0aW9ucyAmIE1ha2VHb29kIE9mZmVyZWQgc3BvdChzKS48L3A+XHJcbiAgICA8cCBjbGFzcz1cInNlY29uZC1yb3dcIj5TaG93cyAnUHJvamVjdGVkICQgVmFsdWUnIGZvciBBRFUgT2ZmZXJlZCBzcG90KHMpLjwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjc2VsbGVySGllcmFyY2h5VG9vbHRpcD5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxsZXJHcm91cEhpZXJhcmNoeS5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJoaWVyYXJjaHktdGFibGUtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInNlbGxlci1oaWVyYXJjaHktdGFibGVcIj5cclxuICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4jPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkludmVudG9yeSBDb2RlczwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5Qcm9ncmFtL0Rlc2NyaXB0aW9uPC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGRhdGEgb2Ygc2VsbGVyR3JvdXBIaWVyYXJjaHk7IGxldCB0b29sdGlwSW5kZXggPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgdG9vbHRpcEluZGV4ICsgMSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFubmFDb3JlU2hvd0VsbGlwc2lzVGV4dE9uSG92ZXI+e3sgZGF0YS5JbnZlbnRvcnlDb2RlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBhbm5hQ29yZVNob3dFbGxpcHNpc1RleHRPbkhvdmVyPnt7IGRhdGEuUHJvZ3JhbSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICA8L3NlY3Rpb24+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxsZXJHcm91cEhpZXJhcmNoeS5sZW5ndGggPT09IDBcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImJsYWNrLWNvbG9yLXRleHRcIj5TZWxsZXIgZ3JvdXAgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyBpbnZlbnRvcnkgY29kZTwvc3Bhbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNsdXJWaW9sYXRpb25JbmZvVG9vbHRpcD5cclxuICAgIDxwIGNsYXNzPVwiZmlyc3Qtcm93XCI+VGhlIHZhbHVlcyBhcmUgZm9yIHRoZSBlbnRpcmUgd2Vlay48L3A+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3Bvc3RlZFJhdGluZ0RpZmZlcmVuY2U+XHJcbiAgICA8cCBjbGFzcz1cImRpZmZlcmVuY2UtdGV4dFwiPlxyXG4gICAgICAgIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gcG9zdGVkIGFuZCBib29rZWQgYXZlcmFnZSByYXRpbmcgaXNcclxuICAgICAgICB7eyBpc0RpZmZlcmVuY2VMZXNzVGhhbjI1UGVyY2VudCA/IFwibGVzc1wiIDogXCJtb3JlXCIgfX0gdGhhbiAyNSUuXHJcbiAgICA8L3A+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3Bvc3RlZEltcERpZmZlcmVuY2U+XHJcbiAgICA8cCBjbGFzcz1cImRpZmZlcmVuY2UtdGV4dFwiPlxyXG4gICAgICAgIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gcG9zdGVkIGFuZCBib29rZWQgYXZlcmFnZSBpbXByZXNzaW9uIGlzXHJcbiAgICAgICAge3sgaXNEaWZmZXJlbmNlTGVzc1RoYW4yNVBlcmNlbnQgPyBcImxlc3NcIiA6IFwibW9yZVwiIH19IHRoYW4gMjUlLlxyXG4gICAgPC9wPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNvbmdvaW5nUmV2Qm9va2VkQ29sdW1uVG9vbHRpcD5cclxuICAgIDxwPlRoZSBCb29rZWQgJCB2YWx1ZSwgU3BvdHMsIEdSUCwgQ1BQLCBJTVBTLCBDUE0gY29ycmVzcG9uZHMgb24gdGhlIGxhc3QgcGVybWFuZW50IHJldmlzaW9uIGdlbmVyYXRlZDwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY29tcGxldGVkUmV2Qm9va2VkQ29sdW1uVG9vbHRpcD5cclxuICAgIDxwPlRoZSBCb29rZWQgJCB2YWx1ZSBjb3JyZXNwb25kcyBvbiB0aGUgbGFzdCBwZXJtYW5lbnQgcmV2aXNpb24gZ2VuZXJhdGVkPC9wPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNhdmdCb29rZWRSYXRlPlxyXG4gICAgPHA+VGhpcyBpcyB0aGUgYm9va2VkIGF2ZXJhZ2UgUmF0ZTwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYXZnQm9va2VkUnRnPlxyXG4gICAgPHA+VGhpcyBpcyB0aGUgYm9va2VkIGF2ZXJhZ2UgUlRHPC9wPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNhdmdCb29rZWRJbXBzPlxyXG4gICAgPHA+VGhpcyBpcyB0aGUgYm9va2VkIGF2ZXJhZ2UgSU1QKOKAmTAwMCk8L3A+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3Byb2plY3RlZEltcHNSdGc+XHJcbiAgICA8cD5cclxuICAgICAgICBBbGwgcHJvamVjdGlvbnMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgc3VtIG9mIGFjdHVhbCBwb3N0ZWQgaW5mb3JtYXRpb24gdW50aWwgdGhlIGxhc3QgcG9zdGVkIGRhdGUgYW5kIGVzdGltYXRlc1xyXG4gICAgICAgIGZvciB0aGUgcmVtYWluaW5nIHNlbGVjdGVkIHBlcmlvZC5cclxuICAgIDwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYXV0b21hdGlvblRvb2x0aXA+XHJcbiAgICA8cD5cclxuICAgICAgICBQbGVhc2UgZ2V0IHRoZSBvcmRlciBidXNpbmVzcyBydWxlcyBhcHByb3ZlZCB0byBhY3RpdmF0ZSB0aGUgb3JkZXIgZm9yIGF1dG9tYXRpb24uIE9ubHkgZm9yIHRoZVxyXG4gICAgICAgIGF1dG9tYXRpb24tYWN0aXZhdGVkIG9yZGVycywgYW55IGFwcHJvdmVkIE1HcywgQURVcywgb3IgY3JlZGl0ZWQgc3BvdHMgb24gQU5OQSB3aWxsIGJlIGZlZCBpbnRvIHRoZSB0cmFmZmljXHJcbiAgICAgICAgc3lzdGVtIGkuZS4gQU5OQSByZXZpc2lvbnMuXHJcbiAgICAgICAgPCEtLSByZW1vdmVkIGJlbG93IGxpbmUgYXMgcGFydCBvZiBlbmhhbmNtZW5udCBpbiAxNC4wIHJlbGVhcyAtLT5cclxuICAgICAgICA8IS0tIEFkZGl0aW9uYWxseSwgQU5OQSB3aWxsIG9ubHkgZW50ZXIgYnV5ZXIgcmV2aXNpb25zIGludG8gdHJhZmZpYyBmb3IgdGhlIHNlbGVjdGVkXHJcbiAgICAgICAgTWVkaWFsaW5lL1dPQyBvcmRlcnMuIC0tPlxyXG4gICAgPC9wPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNyZWJhdGVJbXBhY3Q+XHJcbiAgICA8cD5SZWJhdGUgaW1wYWN0IHZhbHVlIGlzIGZvciB0aGUgb3JpZ2luYWxseSBvcmRlcmVkIHNwb3QgbGVuZ3RoIGFuZCBpcyBub3QgZXF1aXZhbGl6ZWQuPC9wPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNsdXJWaW9sYXRpb25Ub3RhbFJvd1Rvb2xUaXA+XHJcbiAgICA8dWw+XHJcbiAgICAgICAgPGxpPlxyXG4gICAgICAgICAgICA8c3Ryb25nPlBPTElUSUNBTCBSQVRFIFZJT0xBVElPTlM6PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIFZpb2xhdGlvbnMgZmxhZ2dlZCB3aGVuIG5vbi1wb2xpdGljYWwgc3BvdHMgYXJlIGJvb2tlZCBhdCBhIHJhdGUgbG93ZXIgdGhhbiB0aGUgbWluaW11bSBib29rZWQgcmF0ZSBmb3JcclxuICAgICAgICAgICAgcG9saXRpY2FsIGNhbmRpZGF0ZXMgZm9yIHRoZSBzYW1lIHdlZWssIEludmVudG9yeSBDb2RlIGFuZCBSZXZlbnVlIENsYXNzLlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPlxyXG4gICAgICAgICAgICA8c3Ryb25nPkNBTkRJREFURSBUTyBDQU5ESURBVEUgVklPTEFUSU9OOjwvc3Ryb25nPlxyXG4gICAgICAgICAgICBWaW9sYXRpb25zIGZsYWdnZWQgd2hlbiBwb2xpdGljYWwgc3BvdHMgYXJlIGJvb2tlZCBhdCBkaWZmZXJlbnQgcmF0ZXMgdG8gb3RoZXIgcG9saXRpY2FsIHNwb3RzIGZvciB0aGUgc2FtZVxyXG4gICAgICAgICAgICB3ZWVrLCBJbnZlbnRvcnkgQ29kZSBhbmQgUmV2ZW51ZSBDbGFzcy5cclxuICAgICAgICA8L2xpPlxyXG4gICAgPC91bD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY2lyY3VsYXJQcm9ncmVzc0Jhcj5cclxuICAgIDxjaXJjbGUtcHJvZ3Jlc3NcclxuICAgICAgICBbcGVyY2VudF09XCJwZXJjZW50RG9uZVwiXHJcbiAgICAgICAgW3JhZGl1c109XCI1XCJcclxuICAgICAgICBbc2hvd1RpdGxlXT1cImZhbHNlXCJcclxuICAgICAgICBbc2hvd1VuaXRzXT1cImZhbHNlXCJcclxuICAgICAgICBbc2hvd1N1YnRpdGxlXT1cImZhbHNlXCJcclxuICAgICAgICBbb3V0ZXJTdHJva2VXaWR0aF09XCIzXCJcclxuICAgICAgICBbaW5uZXJTdHJva2VXaWR0aF09XCIzXCJcclxuICAgICAgICBbc3BhY2VdPVwiLTNcIlxyXG4gICAgICAgIFtvdXRlclN0cm9rZUNvbG9yXT1cIicjMjY4YmZmJ1wiXHJcbiAgICAgICAgW2lubmVyU3Ryb2tlQ29sb3JdPVwiJyNkNWQ1ZDUnXCJcclxuICAgICAgICBbYW5pbWF0aW9uRHVyYXRpb25dPVwiMTBcIlxyXG4gICAgPjwvY2lyY2xlLXByb2dyZXNzPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICN1c2VyTG9nZ2VkSW5EZXRhaWxzPlxyXG4gICAgPGRpdiBjbGFzcz1cInRvb2x0aXAtZGl2LWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRhdGEgb2YgdGV4dEFjdGlvblRvb2x0aXBcIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkYXRhLmtleSAhPT0gJ3JlYWQnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhLmtleSB9fSA8Yj4ge3sgZGF0YS52YWx1ZSB9fTwvYj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRhdGEua2V5ID09PSAncmVhZCdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGEudmFsdWUgfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI21hcmtBc1JlYWRUaXA+XHJcbiAgICA8ZGl2IGNsYXNzPVwibm90aWZpY2F0aW9uLXRvb2x0aXAtZGl2LWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRhdGEgb2YgdGV4dEFjdGlvblRvb2x0aXBcIj5cclxuICAgICAgICAgICAge3sgZGF0YS52YWx1ZSB9fVxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3RleHRBY3Rpb25Ub29sdGlwVGVtcGxhdGU+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkYXRhIG9mIHRleHRBY3Rpb25Ub29sdGlwXCI+XHJcbiAgICAgICAge3sgZGF0YS5rZXkgfX0gPGI+IHt7IGRhdGEudmFsdWUgfX08L2I+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjc2hvd09ySGlkZVRvZ2dsZUZvclRvdGFsUm93VG9vbHRpcD5cclxuICAgIDxkaXY+XHJcbiAgICAgICAge3sgc2hvd09ySGlkZVRvZ2dsZUZvclRvdGFsUm93ICYmICFndEdlbmVyYWxDb25maWcudG90YWxSb3cgPyBcIlNob3cgVG90YWwgUm93XCIgOiBcIkhpZGUgVG90YWwgUm93XCIgfX1cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICN0b29sdGlwQ29udGFpbmluZ1RhYmxlVGVtcGxhdGU+XHJcbiAgICA8ZGl2XHJcbiAgICAgICAgKm5nSWY9XCJ0b29sdGlwQ29udGFpbmluZ1RhYmxlXCJcclxuICAgICAgICBbaW5uZXJIVE1MXT1cInRvb2x0aXBDb250YWluaW5nVGFibGUuaW5uZXJIdG1sXCJcclxuICAgICAgICBjbGFzcz1cIm5vdGlmaWNhdGlvbi10b29sdGlwLWRpdi1jb250YWluZXJcIlxyXG4gICAgPlxyXG4gICAgICAgIDwhLS0gPHVsPlxyXG4gICAgICA8bGkgKm5nRm9yPVwibGV0IGhlYWRlck1zZyBvZiB0b29sdGlwQ29udGFpbmluZ1RhYmxlLnRhYmxlSGVhZGVyTXNnXCI+XHJcbiAgICAgICAgPGI+IHt7aGVhZGVyTXNnfX0gIDwvYj5cclxuICAgICAgPC9saT5cclxuICAgIDwvdWw+XHJcblxyXG4gICAgPHRhYmxlIGNsYXNzPVwidG9vbHRpcC10YWJsZVwiPlxyXG4gICAgICA8dGhlYWQ+XHJcbiAgICAgICAgPHRyPlxyXG4gICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBoZWFkZXIgb2YgdG9vbHRpcENvbnRhaW5pbmdUYWJsZS50b29sdGlwVGFibGVIZWFkZXJcIj5cclxuICAgICAgICAgICAge3sgaGVhZGVyfX1cclxuICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgPC90aGVhZD5cclxuICAgICAgPHRib2R5PlxyXG4gICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcm93cyBvZiB0b29sdGlwQ29udGFpbmluZ1RhYmxlLnRvb2x0aXBUYWJsZUJvZHlcIj5cclxuICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgZGF0YSBvZiByb3dzXCI+XHJcbiAgICAgICAgICAgIHt7IGRhdGEgfX1cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgPC90Ym9keT5cclxuICAgIDwvdGFibGU+XHJcblxyXG4gICAgPHVsPlxyXG4gICAgICA8bGkgc3R5bGU9XCJtYXJnaW4tdG9wOjEwcHg7IHBhZGRpbmc6MFwiICpuZ0Zvcj1cImxldCBmb290ZXJNc2cgb2YgdG9vbHRpcENvbnRhaW5pbmdUYWJsZS50YWJsZUZvb3Rlck1zZ1wiPlxyXG4gICAgICAgIHt7IGZvb3Rlck1zZyB9fSBcclxuICAgICAgPC9saT5cclxuICAgIDwvdWw+IC0tPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0gPG5nLXRlbXBsYXRlICN0ZXh0QWN0aW9uVG9vbHRpcFRlbXBsYXRlPlxyXG4gICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkYXRhIG9mIHRleHRBY3Rpb25Ub29sdGlwXCI+XHJcbiAgICAgIHt7IGRhdGEua2V5IH19IDxiPiB7e2RhdGEudmFsdWV9fTwvYj5cclxuICAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctdGVtcGxhdGU+IC0tPlxyXG4iXX0=