valtech-components 2.0.583 → 2.0.584

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.
@@ -320,9 +320,16 @@ export class DataTableComponent {
320
320
  this.emitSelectionChange(checked ? 'select' : 'deselect', row);
321
321
  }
322
322
  selectSingleRow(row) {
323
+ const rowId = this.getRowId(row);
324
+ const wasSelected = this.selectedRows.has(rowId);
323
325
  this.selectedRows.clear();
324
- this.selectedRows.add(this.getRowId(row));
325
- this.emitSelectionChange('select', row);
326
+ if (!wasSelected) {
327
+ this.selectedRows.add(rowId);
328
+ this.emitSelectionChange('select', row);
329
+ }
330
+ else {
331
+ this.emitSelectionChange('deselect', row);
332
+ }
326
333
  }
327
334
  emitSelectionChange(action, changedRow) {
328
335
  const selected = this.props.data.filter(row => this.isRowSelected(row));
@@ -518,8 +525,7 @@ export class DataTableComponent {
518
525
  <input
519
526
  type="radio"
520
527
  [checked]="isRowSelected(row)"
521
- (change)="selectSingleRow(row)"
522
- (click)="$event.stopPropagation()"
528
+ (click)="selectSingleRow(row); $event.stopPropagation()"
523
529
  />
524
530
  }
525
531
  </td>
@@ -597,8 +603,7 @@ export class DataTableComponent {
597
603
  <input
598
604
  type="radio"
599
605
  [checked]="isRowSelected(row)"
600
- (change)="selectSingleRow(row)"
601
- (click)="$event.stopPropagation()"
606
+ (click)="selectSingleRow(row); $event.stopPropagation()"
602
607
  />
603
608
  }
604
609
  </div>
@@ -872,8 +877,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
872
877
  <input
873
878
  type="radio"
874
879
  [checked]="isRowSelected(row)"
875
- (change)="selectSingleRow(row)"
876
- (click)="$event.stopPropagation()"
880
+ (click)="selectSingleRow(row); $event.stopPropagation()"
877
881
  />
878
882
  }
879
883
  </td>
@@ -951,8 +955,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
951
955
  <input
952
956
  type="radio"
953
957
  [checked]="isRowSelected(row)"
954
- (change)="selectSingleRow(row)"
955
- (click)="$event.stopPropagation()"
958
+ (click)="selectSingleRow(row); $event.stopPropagation()"
956
959
  />
957
960
  }
958
961
  </div>
@@ -1075,4 +1078,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
1075
1078
  }], pageChange: [{
1076
1079
  type: Output
1077
1080
  }] } });
1078
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBSVosTUFBTSxFQUNOLHVCQUF1QixFQUN2QixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsT0FBTyxFQUNQLFdBQVcsRUFDWCxVQUFVLEVBQ1YsU0FBUyxFQUNULGVBQWUsR0FDaEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixxQkFBcUIsRUFDckIsZUFBZSxHQUNoQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBU0wseUJBQXlCLEdBQzFCLE1BQU0sU0FBUyxDQUFDOzs7QUFFakIsUUFBUSxDQUFDO0lBQ1AsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQixrQkFBa0I7SUFDbEIscUJBQXFCO0lBQ3JCLGVBQWU7Q0FDaEIsQ0FBQyxDQUFDO0FBd1dIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQ0c7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBalovQjtRQW9aWSxhQUFRLEdBQUcsSUFBSSxZQUFZLEVB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFWVDs4QkErQ1EsS0FBSztzQkFBYixLQUFLO2dCQUVJLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uSW5pdCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBpbmplY3QsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIElvbkJ1dHRvbixcbiAgSW9uSWNvbixcbiAgSW9uQ2hlY2tib3gsXG4gIElvblNwaW5uZXIsXG4gIElvblNlbGVjdCxcbiAgSW9uU2VsZWN0T3B0aW9uLFxufSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHtcbiAgY2hldnJvblVwT3V0bGluZSxcbiAgY2hldnJvbkRvd25PdXRsaW5lLFxuICBjaGV2cm9uQmFja091dGxpbmUsXG4gIGNoZXZyb25Gb3J3YXJkT3V0bGluZSxcbiAgZG9jdW1lbnRPdXRsaW5lLFxufSBmcm9tICdpb25pY29ucy9pY29ucyc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4nO1xuaW1wb3J0IHtcbiAgRGF0YVRhYmxlTWV0YWRhdGEsXG4gIERhdGFUYWJsZUNvbHVtbixcbiAgRGF0YVRhYmxlU29ydCxcbiAgRGF0YVRhYmxlUm93Q2xpY2tFdmVudCxcbiAgRGF0YVRhYmxlU2VsZWN0aW9uQ2hhbmdlRXZlbnQsXG4gIERhdGFUYWJsZVNvcnRDaGFuZ2VFdmVudCxcbiAgRGF0YVRhYmxlUGFnZUNoYW5nZUV2ZW50LFxuICBEYXRhVGFibGVFbXB0eVN0YXRlLFxuICBERUZBVUxUX1BBR0VfU0laRV9PUFRJT05TLFxufSBmcm9tICcuL3R5cGVzJztcblxuYWRkSWNvbnMoe1xuICBjaGV2cm9uVXBPdXRsaW5lLFxuICBjaGV2cm9uRG93bk91dGxpbmUsXG4gIGNoZXZyb25CYWNrT3V0bGluZSxcbiAgY2hldnJvbkZvcndhcmRPdXRsaW5lLFxuICBkb2N1bWVudE91dGxpbmUsXG59KTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLWRhdGEtdGFibGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBJb25CdXR0b24sXG4gICAgSW9uSWNvbixcbiAgICBJb25DaGVja2JveCxcbiAgICBJb25TcGlubmVyLFxuICAgIElvblNlbGVjdCxcbiAgICBJb25TZWxlY3RPcHRpb24sXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiXG4gICAgICBbY2xhc3NdPVwicHJvcHMuY3NzQ2xhc3NcIlxuICAgICAgW2NsYXNzLnNpemUtc21hbGxdPVwicHJvcHMuc2l6ZSA9PT0gJ3NtYWxsJ1wiXG4gICAgICBbY2xhc3Muc2l6ZS1tZWRpdW1dPVwicHJvcHMuc2l6ZSA9PT0gJ21lZGl1bScgfHwgIXByb3BzLnNpemVcIlxuICAgICAgW2NsYXNzLnNpemUtbGFyZ2VdPVwicHJvcHMuc2l6ZSA9PT0gJ2xhcmdlJ1wiXG4gICAgICBbY2xhc3MuYm9yZGVyZWRdPVwicHJvcHMuYm9yZGVyZWRcIlxuICAgICAgW2NsYXNzLnN0cmlwZWRdPVwicHJvcHMuc3RyaXBlZFwiXG4gICAgICBbY2xhc3MuaG92ZXJhYmxlXT1cInByb3BzLmhvdmVyYWJsZSAhPT0gZmFsc2VcIlxuICAgICAgW2NsYXNzLnN0aWNreS1oZWFkZXJdPVwicHJvcHMuc3RpY2t5SGVhZGVyXCJcbiAgICAgIFtjbGFzcy5yZXNwb25zaXZlLWNhcmRzXT1cInByb3BzLnJlc3BvbnNpdmVNb2RlID09PSAnY2FyZHMnXCJcbiAgICAgIFtjbGFzcy5lbGV2YXRpb24tbm9uZV09XCJwcm9wcy5lbGV2YXRpb24gPT09ICdub25lJ1wiXG4gICAgICBbY2xhc3MuZWxldmF0aW9uLWxvd109XCJwcm9wcy5lbGV2YXRpb24gPT09ICdsb3cnXCJcbiAgICAgIFtjbGFzcy5lbGV2YXRpb24taGlnaF09XCJwcm9wcy5lbGV2YXRpb24gPT09ICdoaWdoJ1wiXG4gICAgICBbY2xhc3MuaGVhZGVyLWdyYWRpZW50XT1cInByb3BzLmhlYWRlckdyYWRpZW50XCJcbiAgICAgIFtjbGFzcy5jaGVja2JveC1jaXJjdWxhcl09XCJwcm9wcy5jaGVja2JveFN0eWxlID09PSAnY2lyY3VsYXInXCJcbiAgICAgIFtjbGFzcy5yb3ctaGlnaGxpZ2h0LWJvcmRlcl09XCJwcm9wcy5yb3dIaWdobGlnaHRTdHlsZSA9PT0gJ2JvcmRlci1sZWZ0J1wiXG4gICAgICBbY2xhc3Mucm93LWhpZ2hsaWdodC1ib3RoXT1cInByb3BzLnJvd0hpZ2hsaWdodFN0eWxlID09PSAnYm90aCdcIlxuICAgICAgW3N0eWxlLi0tbWF4LWhlaWdodF09XCJwcm9wcy5tYXhIZWlnaHRcIlxuICAgID5cbiAgICAgIDwhLS0gVG9vbGJhciBzbG90IC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRvb2xiYXJcIiAjdG9vbGJhckNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3Rvb2xiYXJdXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gTG9hZGluZyBvdmVybGF5IC0tPlxuICAgICAgQGlmIChwcm9wcy5sb2FkaW5nU3RhdGU/LmxvYWRpbmcpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImxvYWRpbmctb3ZlcmxheVwiPlxuICAgICAgICAgIDxpb24tc3Bpbm5lciBuYW1lPVwiY3Jlc2NlbnRcIj48L2lvbi1zcGlubmVyPlxuICAgICAgICAgIEBpZiAocHJvcHMubG9hZGluZ1N0YXRlPy5tZXNzYWdlKSB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxvYWRpbmctbWVzc2FnZVwiPnt7IHByb3BzLmxvYWRpbmdTdGF0ZS5tZXNzYWdlIH19PC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS13cmFwcGVyXCIgW2NsYXNzLmlzLWxvYWRpbmddPVwicHJvcHMubG9hZGluZ1N0YXRlPy5sb2FkaW5nXCI+XG4gICAgICAgIDx0YWJsZVxuICAgICAgICAgIHJvbGU9XCJncmlkXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInByb3BzLmFyaWFMYWJlbFwiXG4gICAgICAgID5cbiAgICAgICAgICBAaWYgKHByb3BzLmNhcHRpb24pIHtcbiAgICAgICAgICAgIDxjYXB0aW9uIGNsYXNzPVwic3Itb25seVwiPnt7IHByb3BzLmNhcHRpb24gfX08L2NhcHRpb24+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8IS0tIFNlbGVjdGlvbiBjb2x1bW4gLS0+XG4gICAgICAgICAgICAgIEBpZiAocHJvcHMuc2hvd1NlbGVjdGlvbkNvbHVtbiAmJiBwcm9wcy5zZWxlY3Rpb24/Lm1vZGUgPT09ICdtdWx0aXBsZScpIHtcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJzZWxlY3Rpb24tY2VsbFwiPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0FsbFNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiaXNJbmRldGVybWluYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgKGlvbkNoYW5nZSk9XCJ0b2dnbGVTZWxlY3RBbGwoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICA+PC9pb24tY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKHByb3BzLnNob3dTZWxlY3Rpb25Db2x1bW4gJiYgcHJvcHMuc2VsZWN0aW9uPy5tb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInNlbGVjdGlvbi1jZWxsXCI+PC90aD5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIDwhLS0gUm93IG51bWJlciBjb2x1bW4gLS0+XG4gICAgICAgICAgICAgIEBpZiAocHJvcHMuc2hvd1Jvd051bWJlcnMpIHtcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJyb3ctbnVtYmVyLWNlbGxcIj4jPC90aD5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIDwhLS0gRGF0YSBjb2x1bW5zIC0tPlxuICAgICAgICAgICAgICBAZm9yIChjb2x1bW4gb2YgdmlzaWJsZUNvbHVtbnM7IHRyYWNrIGNvbHVtbi5rZXkpIHtcbiAgICAgICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJnZXRDb2x1bW5DbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aF09XCJjb2x1bW4ubWluV2lkdGhcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aF09XCJjb2x1bW4ubWF4V2lkdGhcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnNvcnRhYmxlXT1cImNvbHVtbi5zb3J0YWJsZVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3Muc29ydGVkXT1cImN1cnJlbnRTb3J0Py5jb2x1bW4gPT09IGNvbHVtbi5rZXlcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbHVtbi5zb3J0YWJsZSA/IG9uU29ydChjb2x1bW4pIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXNvcnRdPVwiZ2V0QXJpYVNvcnQoY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQGlmIChjb2x1bW4uaGVhZGVyVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbHVtbi5oZWFkZXJUZW1wbGF0ZTsgY29udGV4dDogeyBjb2x1bW4gfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVhZGVyLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBjb2x1bW4ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbHVtbi5zb3J0YWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzb3J0LWljb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpb24taWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJjaGV2cm9uLXVwLW91dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiY3VycmVudFNvcnQ/LmNvbHVtbiA9PT0gY29sdW1uLmtleSAmJiBjdXJyZW50U29ydD8uZGlyZWN0aW9uID09PSAnYXNjJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID48L2lvbi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiY2hldnJvbi1kb3duLW91dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiY3VycmVudFNvcnQ/LmNvbHVtbiA9PT0gY29sdW1uLmtleSAmJiBjdXJyZW50U29ydD8uZGlyZWN0aW9uID09PSAnZGVzYydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgPCEtLSBBY3Rpb25zIGNvbHVtbiAtLT5cbiAgICAgICAgICAgICAgQGlmIChwcm9wcy5hY3Rpb25zVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJhY3Rpb25zLWNlbGxcIiBbc3R5bGUud2lkdGhdPVwicHJvcHMuYWN0aW9uc1dpZHRoIHx8ICcxMDBweCdcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGdldEFjdGlvbnNMYWJlbCgpIH19XG4gICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3RoZWFkPlxuXG4gICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgQGlmIChkaXNwbGF5ZWREYXRhLmxlbmd0aCA9PT0gMCAmJiAhcHJvcHMubG9hZGluZ1N0YXRlPy5sb2FkaW5nKSB7XG4gICAgICAgICAgICAgIDx0ciBjbGFzcz1cImVtcHR5LXJvd1wiPlxuICAgICAgICAgICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cInRvdGFsQ29sdW1uc1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoZW1wdHlTdGF0ZS50ZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJlbXB0eVN0YXRlLnRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZW1wdHlTdGF0ZS5pY29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gW25hbWVdPVwiZW1wdHlTdGF0ZS5pY29uXCIgY2xhc3M9XCJlbXB0eS1pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChlbXB0eVN0YXRlLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJlbXB0eS10aXRsZVwiPnt7IGVtcHR5U3RhdGUudGl0bGUgfX08L2g0PlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGVtcHR5U3RhdGUuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZW1wdHktZGVzY3JpcHRpb25cIj57eyBlbXB0eVN0YXRlLmRlc2NyaXB0aW9uIH19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICBAZm9yIChyb3cgb2YgZGlzcGxheWVkRGF0YTsgdHJhY2sgdHJhY2tCeUZuKHJvdyk7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiaXNSb3dTZWxlY3RlZChyb3cpXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5jbGlja2FibGVdPVwicHJvcHMucm93Q2xpY2thYmxlXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKHJvdywgaSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPCEtLSBTZWxlY3Rpb24gY2VsbCAtLT5cbiAgICAgICAgICAgICAgICAgIEBpZiAocHJvcHMuc2hvd1NlbGVjdGlvbkNvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJzZWxlY3Rpb24tY2VsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAocHJvcHMuc2VsZWN0aW9uPy5tb2RlID09PSAnbXVsdGlwbGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzUm93U2VsZWN0ZWQocm93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChpb25DaGFuZ2UpPVwidG9nZ2xlUm93U2VsZWN0aW9uKHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvaW9uLWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2UgaWYgKHByb3BzLnNlbGVjdGlvbj8ubW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc1Jvd1NlbGVjdGVkKHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNlbGVjdFNpbmdsZVJvdyhyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgPCEtLSBSb3cgbnVtYmVyIC0tPlxuICAgICAgICAgICAgICAgICAgQGlmIChwcm9wcy5zaG93Um93TnVtYmVycykge1xuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJyb3ctbnVtYmVyLWNlbGxcIj57eyBnZXRSb3dOdW1iZXIoaSkgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICA8IS0tIERhdGEgY2VsbHMgLS0+XG4gICAgICAgICAgICAgICAgICBAZm9yIChjb2x1bW4gb2YgdmlzaWJsZUNvbHVtbnM7IHRyYWNrIGNvbHVtbi5rZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImdldENvbHVtbkNsYXNzKGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS50ZXh0LWFsaWduXT1cImNvbHVtbi5hbGlnblwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbHVtbi5jZWxsVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2x1bW4uY2VsbFRlbXBsYXRlOyBjb250ZXh0OiB7IHJvdywgY29sdW1uLCB2YWx1ZTogZ2V0Q2VsbFZhbHVlKHJvdywgY29sdW1uKSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRGb3JtYXR0ZWRWYWx1ZShyb3csIGNvbHVtbikgfX1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIDwhLS0gQWN0aW9ucyBjZWxsIC0tPlxuICAgICAgICAgICAgICAgICAgQGlmIChwcm9wcy5hY3Rpb25zVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWN0aW9ucy1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInByb3BzLmFjdGlvbnNUZW1wbGF0ZTsgY29udGV4dDogeyByb3csIGluZGV4OiBpIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgPC90YWJsZT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIENhcmQgdmlldyAocmVzcG9uc2l2ZSBtb2JpbGUpIC0tPlxuICAgICAgQGlmIChwcm9wcy5yZXNwb25zaXZlTW9kZSA9PT0gJ2NhcmRzJykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1saXN0XCI+XG4gICAgICAgICAgQGlmIChkaXNwbGF5ZWREYXRhLmxlbmd0aCA9PT0gMCAmJiAhcHJvcHMubG9hZGluZ1N0YXRlPy5sb2FkaW5nKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktc3RhdGVcIj5cbiAgICAgICAgICAgICAgQGlmIChlbXB0eVN0YXRlLmljb24pIHtcbiAgICAgICAgICAgICAgICA8aW9uLWljb24gW25hbWVdPVwiZW1wdHlTdGF0ZS5pY29uXCIgY2xhc3M9XCJlbXB0eS1pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKGVtcHR5U3RhdGUudGl0bGUpIHtcbiAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJlbXB0eS10aXRsZVwiPnt7IGVtcHR5U3RhdGUudGl0bGUgfX08L2g0PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBpZiAoZW1wdHlTdGF0ZS5kZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZW1wdHktZGVzY3JpcHRpb25cIj57eyBlbXB0eVN0YXRlLmRlc2NyaXB0aW9uIH19PC9wPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIEBmb3IgKHJvdyBvZiBkaXNwbGF5ZWREYXRhOyB0cmFjayB0cmFja0J5Rm4ocm93KTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgQGlmIChwcm9wcy5tb2JpbGVDYXJkVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicHJvcHMubW9iaWxlQ2FyZFRlbXBsYXRlOyBjb250ZXh0OiB7IHJvdywgaW5kZXg6IGksIGNvbHVtbnM6IHZpc2libGVDb2x1bW5zIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWNhcmRcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImlzUm93U2VsZWN0ZWQocm93KVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuY2xpY2thYmxlXT1cInByb3BzLnJvd0NsaWNrYWJsZVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljayhyb3csIGksICRldmVudClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDwhLS0gQ2FyZCBoZWFkZXIgd2l0aCBzZWxlY3Rpb24gLS0+XG4gICAgICAgICAgICAgICAgICBAaWYgKHByb3BzLnNob3dTZWxlY3Rpb25Db2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtc2VsZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHByb3BzLnNlbGVjdGlvbj8ubW9kZSA9PT0gJ211bHRpcGxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNSb3dTZWxlY3RlZChyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW9uQ2hhbmdlKT1cInRvZ2dsZVJvd1NlbGVjdGlvbihyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9pb24tY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIGlmIChwcm9wcy5zZWxlY3Rpb24/Lm1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNSb3dTZWxlY3RlZChyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNlbGVjdFNpbmdsZVJvdyhyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKHByb3BzLnNob3dSb3dOdW1iZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJvdy1udW1iZXJcIj57eyBnZXRSb3dOdW1iZXIoaSkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgPCEtLSBDYXJkIGJvZHkgd2l0aCBmaWVsZHMgLS0+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbHVtbiBvZiB2aXNpYmxlQ29sdW1uczsgdHJhY2sgY29sdW1uLmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtZmllbGRfX2xhYmVsXCI+e3sgY29sdW1uLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLWZpZWxkX192YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbHVtbi5jZWxsVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29sdW1uLmNlbGxUZW1wbGF0ZTsgY29udGV4dDogeyByb3csIGNvbHVtbiwgdmFsdWU6IGdldENlbGxWYWx1ZShyb3csIGNvbHVtbikgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRGb3JtYXR0ZWRWYWx1ZShyb3csIGNvbHVtbikgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPCEtLSBDYXJkIGFjdGlvbnMgLS0+XG4gICAgICAgICAgICAgICAgICBAaWYgKHByb3BzLmFjdGlvbnNUZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInByb3BzLmFjdGlvbnNUZW1wbGF0ZTsgY29udGV4dDogeyByb3csIGluZGV4OiBpIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuXG4gICAgICA8IS0tIFBhZ2luYXRpb24gLS0+XG4gICAgICBAaWYgKHByb3BzLnNob3dQYWdpbmF0aW9uICYmIHByb3BzLnBhZ2luYXRpb24pIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2luYXRpb24tY29udGFpbmVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2luYXRpb24taW5mb1wiPlxuICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgIHt7IGdldFBhZ2luYXRpb25JbmZvVGV4dCgpIH19XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIEBpZiAocGFnZVNpemVPcHRpb25zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgPGlvbi1zZWxlY3RcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwicHJvcHMucGFnaW5hdGlvbi5wYWdlU2l6ZVwiXG4gICAgICAgICAgICAgICAgKGlvbkNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIGludGVyZmFjZT1cInBvcG92ZXJcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicGFnZS1zaXplLXNlbGVjdFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAZm9yIChzaXplIG9mIHBhZ2VTaXplT3B0aW9uczsgdHJhY2sgc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgPGlvbi1zZWxlY3Qtb3B0aW9uIFt2YWx1ZV09XCJzaXplXCI+e3sgZ2V0UGVyUGFnZVRleHQoc2l6ZSkgfX08L2lvbi1zZWxlY3Qtb3B0aW9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9pb24tc2VsZWN0PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2luYXRpb24tY29udHJvbHNcIj5cbiAgICAgICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgICAgIGZpbGw9XCJjbGVhclwiXG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJwcm9wcy5wYWdpbmF0aW9uLnBhZ2UgPT09IDBcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZ29Ub1BhZ2UoMClcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImdldEZpcnN0UGFnZUxhYmVsKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJjaGV2cm9uLWJhY2stb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgbmFtZT1cImNoZXZyb24tYmFjay1vdXRsaW5lXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogLTEycHhcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuXG4gICAgICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgICAgICBmaWxsPVwiY2xlYXJcIlxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicHJvcHMucGFnaW5hdGlvbi5wYWdlID09PSAwXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9QYWdlKHByb3BzLnBhZ2luYXRpb24ucGFnZSAtIDEpXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJnZXRQcmV2aW91c1BhZ2VMYWJlbCgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJpY29uLW9ubHlcIiBuYW1lPVwiY2hldnJvbi1iYWNrLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2UtaW5kaWNhdG9yXCI+XG4gICAgICAgICAgICAgIHt7IHByb3BzLnBhZ2luYXRpb24ucGFnZSArIDEgfX0gLyB7eyB0b3RhbFBhZ2VzIH19XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgICAgIGZpbGw9XCJjbGVhclwiXG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJwcm9wcy5wYWdpbmF0aW9uLnBhZ2UgPj0gdG90YWxQYWdlcyAtIDFcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZ29Ub1BhZ2UocHJvcHMucGFnaW5hdGlvbi5wYWdlICsgMSlcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImdldE5leHRQYWdlTGFiZWwoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgbmFtZT1cImNoZXZyb24tZm9yd2FyZC1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cblxuICAgICAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICAgICAgZmlsbD1cImNsZWFyXCJcbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInByb3BzLnBhZ2luYXRpb24ucGFnZSA+PSB0b3RhbFBhZ2VzIC0gMVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJnb1RvUGFnZSh0b3RhbFBhZ2VzIC0gMSlcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImdldExhc3RQYWdlTGFiZWwoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgbmFtZT1cImNoZXZyb24tZm9yd2FyZC1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJpY29uLW9ubHlcIiBuYW1lPVwiY2hldnJvbi1mb3J3YXJkLW91dGxpbmVcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAtMTJweFwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZVVybHM6IFsnLi9kYXRhLXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuLyoqXG4gKiB2YWwtZGF0YS10YWJsZVxuICpcbiAqIEEgZmxleGlibGUgZGF0YSB0YWJsZSBjb21wb25lbnQgZm9yIGRpc3BsYXlpbmcgdGFidWxhciBkYXRhIHdpdGggc29ydGluZyxcbiAqIHBhZ2luYXRpb24sIGFuZCBzZWxlY3Rpb24gZmVhdHVyZXMuXG4gKlxuICogQGV4YW1wbGUgQmFzaWMgdXNhZ2VcbiAqIGBgYGh0bWxcbiAqIDx2YWwtZGF0YS10YWJsZVxuICogICBbcHJvcHNdPVwie1xuICogICAgIGNvbHVtbnM6IFtcbiAqICAgICAgIHsga2V5OiAnbmFtZScsIGxhYmVsOiAnTm9tYnJlJywgc29ydGFibGU6IHRydWUgfSxcbiAqICAgICAgIHsga2V5OiAnZW1haWwnLCBsYWJlbDogJ0VtYWlsJyB9LFxuICogICAgICAgeyBrZXk6ICdzdGF0dXMnLCBsYWJlbDogJ0VzdGFkbycgfVxuICogICAgIF0sXG4gKiAgICAgZGF0YTogdXNlcnNcbiAqICAgfVwiXG4gKiA+PC92YWwtZGF0YS10YWJsZT5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIFdpdGggcGFnaW5hdGlvbiBhbmQgc2VsZWN0aW9uXG4gKiBgYGBodG1sXG4gKiA8dmFsLWRhdGEtdGFibGVcbiAqICAgW3Byb3BzXT1cIntcbiAqICAgICBjb2x1bW5zOiBjb2x1bW5zLFxuICogICAgIGRhdGE6IHBhcnRpY2lwYW50cyxcbiAqICAgICBzaG93UGFnaW5hdGlvbjogdHJ1ZSxcbiAqICAgICBwYWdpbmF0aW9uOiB7XG4gKiAgICAgICBwYWdlOiAwLFxuICogICAgICAgcGFnZVNpemU6IDI1LFxuICogICAgICAgdG90YWw6IHRvdGFsQ291bnRcbiAqICAgICB9LFxuICogICAgIHNlbGVjdGlvbjoge1xuICogICAgICAgbW9kZTogJ211bHRpcGxlJyxcbiAqICAgICAgIHNlbGVjdGVkOiBzZWxlY3RlZFBhcnRpY2lwYW50c1xuICogICAgIH0sXG4gKiAgICAgc2hvd1NlbGVjdGlvbkNvbHVtbjogdHJ1ZVxuICogICB9XCJcbiAqICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAqICAgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxuICogPjwvdmFsLWRhdGEtdGFibGU+XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFUYWJsZUNvbXBvbmVudDxUID0gYW55PiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgcHJvcHM6IERhdGFUYWJsZU1ldGFkYXRhPFQ+O1xuXG4gIEBPdXRwdXQoKSByb3dDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YVRhYmxlUm93Q2xpY2tFdmVudDxUPj4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YVRhYmxlU2VsZWN0aW9uQ2hhbmdlRXZlbnQ8VD4+KCk7XG4gIEBPdXRwdXQoKSBzb3J0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRhVGFibGVTb3J0Q2hhbmdlRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBwYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRhVGFibGVQYWdlQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgZGlzcGxheWVkRGF0YTogVFtdID0gW107XG4gIGN1cnJlbnRTb3J0OiBEYXRhVGFibGVTb3J0IHwgbnVsbCA9IG51bGw7XG4gIHNlbGVjdGVkUm93czogU2V0PGFueT4gPSBuZXcgU2V0KCk7XG5cbiAgLyoqIENhY2hlZCB2aXNpYmxlIGNvbHVtbnMgZm9yIHBlcmZvcm1hbmNlICovXG4gIHByaXZhdGUgX3Zpc2libGVDb2x1bW5zOiBEYXRhVGFibGVDb2x1bW48VD5bXSA9IFtdO1xuXG4gIHByaXZhdGUgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJpdmF0ZSBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVTdGF0ZSgpO1xuICAgIHRoaXMudXBkYXRlRGlzcGxheWVkRGF0YSgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydwcm9wcyddKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVTdGF0ZSgpO1xuICAgICAgdGhpcy51cGRhdGVEaXNwbGF5ZWREYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplU3RhdGUoKTogdm9pZCB7XG4gICAgLy8gQ2FjaGUgdmlzaWJsZSBjb2x1bW5zIGZvciBwZXJmb3JtYW5jZVxuICAgIHRoaXMuX3Zpc2libGVDb2x1bW5zID0gdGhpcy5wcm9wcy5jb2x1bW5zLmZpbHRlcihjID0+IGMudmlzaWJsZSAhPT0gZmFsc2UpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBzb3J0XG4gICAgdGhpcy5jdXJyZW50U29ydCA9IHRoaXMucHJvcHMuc29ydCB8fCBudWxsO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBzZWxlY3Rpb25cbiAgICBpZiAodGhpcy5wcm9wcy5zZWxlY3Rpb24/LnNlbGVjdGVkKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkUm93cyA9IG5ldyBTZXQoXG4gICAgICAgIHRoaXMucHJvcHMuc2VsZWN0aW9uLnNlbGVjdGVkLm1hcChyb3cgPT4gdGhpcy5nZXRSb3dJZChyb3cpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZURpc3BsYXllZERhdGEoKTogdm9pZCB7XG4gICAgbGV0IGRhdGEgPSBbLi4udGhpcy5wcm9wcy5kYXRhXTtcblxuICAgIC8vIEFwcGx5IGNsaWVudC1zaWRlIHNvcnRpbmdcbiAgICBpZiAodGhpcy5wcm9wcy5jbGllbnRTb3J0ICYmIHRoaXMuY3VycmVudFNvcnQpIHtcbiAgICAgIGRhdGEgPSB0aGlzLnNvcnREYXRhKGRhdGEpO1xuICAgIH1cblxuICAgIC8vIEFwcGx5IGNsaWVudC1zaWRlIHBhZ2luYXRpb25cbiAgICBpZiAodGhpcy5wcm9wcy5jbGllbnRQYWdpbmF0aW9uICYmIHRoaXMucHJvcHMucGFnaW5hdGlvbikge1xuICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnByb3BzLnBhZ2luYXRpb24ucGFnZSAqIHRoaXMucHJvcHMucGFnaW5hdGlvbi5wYWdlU2l6ZTtcbiAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgdGhpcy5wcm9wcy5wYWdpbmF0aW9uLnBhZ2VTaXplO1xuICAgICAgZGF0YSA9IGRhdGEuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXNwbGF5ZWREYXRhID0gZGF0YTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgc29ydERhdGEoZGF0YTogVFtdKTogVFtdIHtcbiAgICBpZiAoIXRoaXMuY3VycmVudFNvcnQpIHJldHVybiBkYXRhO1xuXG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5wcm9wcy5jb2x1bW5zLmZpbmQoYyA9PiBjLmtleSA9PT0gdGhpcy5jdXJyZW50U29ydD8uY29sdW1uKTtcbiAgICBpZiAoIWNvbHVtbikgcmV0dXJuIGRhdGE7XG5cbiAgICByZXR1cm4gWy4uLmRhdGFdLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGlmIChjb2x1bW4uc29ydEZuKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbHVtbi5zb3J0Rm4oYSwgYik7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRTb3J0Py5kaXJlY3Rpb24gPT09ICdkZXNjJyA/IC1yZXN1bHQgOiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbHVlQSA9IHRoaXMuZ2V0Q2VsbFZhbHVlKGEsIGNvbHVtbik7XG4gICAgICBjb25zdCB2YWx1ZUIgPSB0aGlzLmdldENlbGxWYWx1ZShiLCBjb2x1bW4pO1xuXG4gICAgICBsZXQgY29tcGFyaXNvbiA9IDA7XG4gICAgICBpZiAodmFsdWVBID09IG51bGwgJiYgdmFsdWVCID09IG51bGwpIGNvbXBhcmlzb24gPSAwO1xuICAgICAgZWxzZSBpZiAodmFsdWVBID09IG51bGwpIGNvbXBhcmlzb24gPSAxO1xuICAgICAgZWxzZSBpZiAodmFsdWVCID09IG51bGwpIGNvbXBhcmlzb24gPSAtMTtcbiAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZUEgPT09ICdzdHJpbmcnICYmIHR5cGVvZiB2YWx1ZUIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbXBhcmlzb24gPSB2YWx1ZUEubG9jYWxlQ29tcGFyZSh2YWx1ZUIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29tcGFyaXNvbiA9IHZhbHVlQSA8IHZhbHVlQiA/IC0xIDogdmFsdWVBID4gdmFsdWVCID8gMSA6IDA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRTb3J0Py5kaXJlY3Rpb24gPT09ICdkZXNjJyA/IC1jb21wYXJpc29uIDogY29tcGFyaXNvbjtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCB2aXNpYmxlQ29sdW1ucygpOiBEYXRhVGFibGVDb2x1bW48VD5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX3Zpc2libGVDb2x1bW5zO1xuICB9XG5cbiAgZ2V0IHRvdGFsQ29sdW1ucygpOiBudW1iZXIge1xuICAgIGxldCBjb3VudCA9IHRoaXMudmlzaWJsZUNvbHVtbnMubGVuZ3RoO1xuICAgIGlmICh0aGlzLnByb3BzLnNob3dTZWxlY3Rpb25Db2x1bW4pIGNvdW50Kys7XG4gICAgaWYgKHRoaXMucHJvcHMuc2hvd1Jvd051bWJlcnMpIGNvdW50Kys7XG4gICAgaWYgKHRoaXMucHJvcHMuYWN0aW9uc1RlbXBsYXRlKSBjb3VudCsrO1xuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIGdldCBlbXB0eVN0YXRlKCk6IERhdGFUYWJsZUVtcHR5U3RhdGUge1xuICAgIGNvbnN0IGRlZmF1bHRFbXB0eVN0YXRlOiBEYXRhVGFibGVFbXB0eVN0YXRlID0ge1xuICAgICAgaWNvbjogJ2RvY3VtZW50LW91dGxpbmUnLFxuICAgICAgdGl0bGU6IHRoaXMuaTE4bi50KCdub0RhdGEnKSxcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmkxOG4udCgnbm9SZWNvcmRzRm91bmQnKSxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLnByb3BzLmVtcHR5U3RhdGUgfHwgZGVmYXVsdEVtcHR5U3RhdGU7XG4gIH1cblxuICAvKiogR2V0IGFjdGlvbnMgY29sdW1uIGxhYmVsICovXG4gIGdldEFjdGlvbnNMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmFjdGlvbnNMYWJlbCB8fCB0aGlzLmkxOG4udCgnYWN0aW9ucycpO1xuICB9XG5cbiAgLyoqIEdldCBwYWdpbmF0aW9uIGluZm8gdGV4dCAqL1xuICBnZXRQYWdpbmF0aW9uSW5mb1RleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5pMThuLnQoJ3Nob3dpbmcnKX0gJHt0aGlzLnBhZ2luYXRpb25TdGFydH0tJHt0aGlzLnBhZ2luYXRpb25FbmR9ICR7dGhpcy5pMThuLnQoJ29mJyl9ICR7dGhpcy5wcm9wcy5wYWdpbmF0aW9uPy50b3RhbH1gO1xuICB9XG5cbiAgLyoqIEdldCBwZXIgcGFnZSB0ZXh0ICovXG4gIGdldFBlclBhZ2VUZXh0KHNpemU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3NpemV9ICR7dGhpcy5pMThuLnQoJ3BlclBhZ2UnKX1gO1xuICB9XG5cbiAgLyoqIEdldCBmaXJzdCBwYWdlIGFyaWEgbGFiZWwgKi9cbiAgZ2V0Rmlyc3RQYWdlTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pMThuLnQoJ2ZpcnN0UGFnZScpO1xuICB9XG5cbiAgLyoqIEdldCBwcmV2aW91cyBwYWdlIGFyaWEgbGFiZWwgKi9cbiAgZ2V0UHJldmlvdXNQYWdlTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pMThuLnQoJ3ByZXZpb3VzUGFnZScpO1xuICB9XG5cbiAgLyoqIEdldCBuZXh0IHBhZ2UgYXJpYSBsYWJlbCAqL1xuICBnZXROZXh0UGFnZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50KCduZXh0UGFnZScpO1xuICB9XG5cbiAgLyoqIEdldCBsYXN0IHBhZ2UgYXJpYSBsYWJlbCAqL1xuICBnZXRMYXN0UGFnZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50KCdsYXN0UGFnZScpO1xuICB9XG5cbiAgZ2V0IHBhZ2VTaXplT3B0aW9ucygpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucGFnaW5hdGlvbj8ucGFnZVNpemVPcHRpb25zIHx8IERFRkFVTFRfUEFHRV9TSVpFX09QVElPTlM7XG4gIH1cblxuICBnZXQgdG90YWxQYWdlcygpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5wcm9wcy5wYWdpbmF0aW9uKSByZXR1cm4gMTtcbiAgICByZXR1cm4gTWF0aC5jZWlsKHRoaXMucHJvcHMucGFnaW5hdGlvbi50b3RhbCAvIHRoaXMucHJvcHMucGFnaW5hdGlvbi5wYWdlU2l6ZSk7XG4gIH1cblxuICBnZXQgcGFnaW5hdGlvblN0YXJ0KCk6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLnByb3BzLnBhZ2luYXRpb24pIHJldHVybiAxO1xuICAgIHJldHVybiB0aGlzLnByb3BzLnBhZ2luYXRpb24ucGFnZSAqIHRoaXMucHJvcHMucGFnaW5hdGlvbi5wYWdlU2l6ZSArIDE7XG4gIH1cblxuICBnZXQgcGFnaW5hdGlvbkVuZCgpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5wcm9wcy5wYWdpbmF0aW9uKSByZXR1cm4gdGhpcy5kaXNwbGF5ZWREYXRhLmxlbmd0aDtcbiAgICByZXR1cm4gTWF0aC5taW4oXG4gICAgICAodGhpcy5wcm9wcy5wYWdpbmF0aW9uLnBhZ2UgKyAxKSAqIHRoaXMucHJvcHMucGFnaW5hdGlvbi5wYWdlU2l6ZSxcbiAgICAgIHRoaXMucHJvcHMucGFnaW5hdGlvbi50b3RhbFxuICAgICk7XG4gIH1cblxuICBnZXQgaXNBbGxTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5kaXNwbGF5ZWREYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmRpc3BsYXllZERhdGEuZXZlcnkocm93ID0+IHRoaXMuaXNSb3dTZWxlY3RlZChyb3cpKTtcbiAgfVxuXG4gIGdldCBpc0luZGV0ZXJtaW5hdGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRDb3VudCA9IHRoaXMuZGlzcGxheWVkRGF0YS5maWx0ZXIocm93ID0+IHRoaXMuaXNSb3dTZWxlY3RlZChyb3cpKS5sZW5ndGg7XG4gICAgcmV0dXJuIHNlbGVjdGVkQ291bnQgPiAwICYmIHNlbGVjdGVkQ291bnQgPCB0aGlzLmRpc3BsYXllZERhdGEubGVuZ3RoO1xuICB9XG5cbiAgZ2V0Q2VsbFZhbHVlKHJvdzogVCwgY29sdW1uOiBEYXRhVGFibGVDb2x1bW48VD4pOiBhbnkge1xuICAgIGNvbnN0IGZpZWxkID0gY29sdW1uLmZpZWxkIHx8IGNvbHVtbi5rZXk7XG4gICAgcmV0dXJuIGZpZWxkLnNwbGl0KCcuJykucmVkdWNlKChvYmo6IGFueSwga2V5KSA9PiBvYmo/LltrZXldLCByb3cpO1xuICB9XG5cbiAgZ2V0Rm9ybWF0dGVkVmFsdWUocm93OiBULCBjb2x1bW46IERhdGFUYWJsZUNvbHVtbjxUPik6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldENlbGxWYWx1ZShyb3csIGNvbHVtbik7XG4gICAgaWYgKGNvbHVtbi5mb3JtYXQpIHtcbiAgICAgIHJldHVybiBjb2x1bW4uZm9ybWF0KHZhbHVlLCByb3cpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUgPz8gJyc7XG4gIH1cblxuICBnZXRDb2x1bW5DbGFzcyhjb2x1bW46IERhdGFUYWJsZUNvbHVtbjxUPik6IHN0cmluZyB7XG4gICAgY29uc3QgY2xhc3NlcyA9IFtjb2x1bW4uY3NzQ2xhc3MgfHwgJyddO1xuICAgIGlmIChjb2x1bW4uc3RpY2t5KSB7XG4gICAgICBjbGFzc2VzLnB1c2goYHN0aWNreS0ke2NvbHVtbi5zdGlja3l9YCk7XG4gICAgfVxuICAgIGlmIChjb2x1bW4uYWxpZ24pIHtcbiAgICAgIGNsYXNzZXMucHVzaChgYWxpZ24tJHtjb2x1bW4uYWxpZ259YCk7XG4gICAgfVxuICAgIHJldHVybiBjbGFzc2VzLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyk7XG4gIH1cblxuICBnZXRBcmlhU29ydChjb2x1bW46IERhdGFUYWJsZUNvbHVtbjxUPik6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICghY29sdW1uLnNvcnRhYmxlKSByZXR1cm4gbnVsbDtcbiAgICBpZiAodGhpcy5jdXJyZW50U29ydD8uY29sdW1uICE9PSBjb2x1bW4ua2V5KSByZXR1cm4gJ25vbmUnO1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRTb3J0LmRpcmVjdGlvbiA9PT0gJ2FzYycgPyAnYXNjZW5kaW5nJyA6ICdkZXNjZW5kaW5nJztcbiAgfVxuXG4gIGdldFJvd051bWJlcihpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBzdGFydCA9IHRoaXMucHJvcHMucm93TnVtYmVyU3RhcnQgPz8gMTtcbiAgICBpZiAodGhpcy5wcm9wcy5wYWdpbmF0aW9uKSB7XG4gICAgICByZXR1cm4gc3RhcnQgKyB0aGlzLnByb3BzLnBhZ2luYXRpb24ucGFnZSAqIHRoaXMucHJvcHMucGFnaW5hdGlvbi5wYWdlU2l6ZSArIGluZGV4O1xuICAgIH1cbiAgICByZXR1cm4gc3RhcnQgKyBpbmRleDtcbiAgfVxuXG4gIGdldFJvd0lkKHJvdzogVCk6IGFueSB7XG4gICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0aW9uPy50cmFja0J5KSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5zZWxlY3Rpb24udHJhY2tCeShyb3cpO1xuICAgIH1cbiAgICByZXR1cm4gcm93O1xuICB9XG5cbiAgdHJhY2tCeUZuKHJvdzogVCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Um93SWQocm93KTtcbiAgfVxuXG4gIGlzUm93U2VsZWN0ZWQocm93OiBUKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRSb3dzLmhhcyh0aGlzLmdldFJvd0lkKHJvdykpO1xuICB9XG5cbiAgb25Tb3J0KGNvbHVtbjogRGF0YVRhYmxlQ29sdW1uPFQ+KTogdm9pZCB7XG4gICAgaWYgKCFjb2x1bW4uc29ydGFibGUpIHJldHVybjtcblxuICAgIGxldCBkaXJlY3Rpb246ICdhc2MnIHwgJ2Rlc2MnIHwgbnVsbCA9ICdhc2MnO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFNvcnQ/LmNvbHVtbiA9PT0gY29sdW1uLmtleSkge1xuICAgICAgaWYgKHRoaXMuY3VycmVudFNvcnQuZGlyZWN0aW9uID09PSAnYXNjJykge1xuICAgICAgICBkaXJlY3Rpb24gPSAnZGVzYyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXJlY3Rpb24gPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkaXJlY3Rpb24pIHtcbiAgICAgIHRoaXMuY3VycmVudFNvcnQgPSB7IGNvbHVtbjogY29sdW1uLmtleSwgZGlyZWN0aW9uIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudFNvcnQgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuc29ydENoYW5nZS5lbWl0KHtcbiAgICAgIGNvbHVtbjogY29sdW1uLmtleSxcbiAgICAgIGRpcmVjdGlvbixcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnByb3BzLmNsaWVudFNvcnQpIHtcbiAgICAgIHRoaXMudXBkYXRlRGlzcGxheWVkRGF0YSgpO1xuICAgIH1cbiAgfVxuXG4gIG9uUm93Q2xpY2socm93OiBULCBpbmRleDogbnVtYmVyLCBldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wcm9wcy5yb3dDbGlja2FibGUpIHJldHVybjtcblxuICAgIHRoaXMucm93Q2xpY2suZW1pdCh7XG4gICAgICByb3csXG4gICAgICBpbmRleCxcbiAgICAgIGV2ZW50LFxuICAgIH0pO1xuICB9XG5cbiAgdG9nZ2xlU2VsZWN0QWxsKGV2ZW50OiBDdXN0b21FdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGNoZWNrZWQgPSBldmVudC5kZXRhaWwuY2hlY2tlZDtcblxuICAgIGlmIChjaGVja2VkKSB7XG4gICAgICB0aGlzLmRpc3BsYXllZERhdGEuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm93cy5hZGQodGhpcy5nZXRSb3dJZChyb3cpKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpc3BsYXllZERhdGEuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm93cy5kZWxldGUodGhpcy5nZXRSb3dJZChyb3cpKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZShjaGVja2VkID8gJ3NlbGVjdEFsbCcgOiAnZGVzZWxlY3RBbGwnKTtcbiAgfVxuXG4gIHRvZ2dsZVJvd1NlbGVjdGlvbihyb3c6IFQsIGV2ZW50OiBDdXN0b21FdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHJvd0lkID0gdGhpcy5nZXRSb3dJZChyb3cpO1xuICAgIGNvbnN0IGNoZWNrZWQgPSBldmVudC5kZXRhaWwuY2hlY2tlZDtcblxuICAgIGlmIChjaGVja2VkKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy5hZGQocm93SWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy5kZWxldGUocm93SWQpO1xuICAgIH1cblxuICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZShjaGVja2VkID8gJ3NlbGVjdCcgOiAnZGVzZWxlY3QnLCByb3cpO1xuICB9XG5cbiAgc2VsZWN0U2luZ2xlUm93KHJvdzogVCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRSb3dzLmNsZWFyKCk7XG4gICAgdGhpcy5zZWxlY3RlZFJvd3MuYWRkKHRoaXMuZ2V0Um93SWQocm93KSk7XG4gICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlKCdzZWxlY3QnLCByb3cpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0U2VsZWN0aW9uQ2hhbmdlKFxuICAgIGFjdGlvbjogJ3NlbGVjdCcgfCAnZGVzZWxlY3QnIHwgJ3NlbGVjdEFsbCcgfCAnZGVzZWxlY3RBbGwnLFxuICAgIGNoYW5nZWRSb3c/OiBUXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5wcm9wcy5kYXRhLmZpbHRlcihyb3cgPT4gdGhpcy5pc1Jvd1NlbGVjdGVkKHJvdykpO1xuXG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh7XG4gICAgICBzZWxlY3RlZCxcbiAgICAgIGNoYW5nZWRSb3csXG4gICAgICBhY3Rpb24sXG4gICAgfSk7XG4gIH1cblxuICBnb1RvUGFnZShwYWdlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucHJvcHMucGFnaW5hdGlvbikgcmV0dXJuO1xuXG4gICAgY29uc3QgcHJldmlvdXNQYWdlID0gdGhpcy5wcm9wcy5wYWdpbmF0aW9uLnBhZ2U7XG4gICAgY29uc3QgbWF4UGFnZSA9IHRoaXMudG90YWxQYWdlcyAtIDE7XG4gICAgY29uc3QgbmV3UGFnZSA9IE1hdGgubWF4KDAsIE1hdGgubWluKHBhZ2UsIG1heFBhZ2UpKTtcblxuICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KHtcbiAgICAgIHBhZ2U6IG5ld1BhZ2UsXG4gICAgICBwYWdlU2l6ZTogdGhpcy5wcm9wcy5wYWdpbmF0aW9uLnBhZ2VTaXplLFxuICAgICAgcHJldmlvdXNQYWdlLFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMucHJvcHMuY2xpZW50UGFnaW5hdGlvbikge1xuICAgICAgdGhpcy5wcm9wcy5wYWdpbmF0aW9uLnBhZ2UgPSBuZXdQYWdlO1xuICAgICAgdGhpcy51cGRhdGVEaXNwbGF5ZWREYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgb25QYWdlU2l6ZUNoYW5nZShldmVudDogQ3VzdG9tRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucHJvcHMucGFnaW5hdGlvbikgcmV0dXJuO1xuXG4gICAgY29uc3QgbmV3UGFnZVNpemUgPSBldmVudC5kZXRhaWwudmFsdWU7XG4gICAgY29uc3QgcHJldmlvdXNQYWdlID0gdGhpcy5wcm9wcy5wYWdpbmF0aW9uLnBhZ2U7XG5cbiAgICAvLyBSZWNhbGN1bGF0ZSBwYWdlIHRvIGtlZXAgZmlyc3QgdmlzaWJsZSBpdGVtXG4gICAgY29uc3QgZmlyc3RJdGVtID0gcHJldmlvdXNQYWdlICogdGhpcy5wcm9wcy5wYWdpbmF0aW9uLnBhZ2VTaXplO1xuICAgIGNvbnN0IG5ld1BhZ2UgPSBNYXRoLmZsb29yKGZpcnN0SXRlbSAvIG5ld1BhZ2VTaXplKTtcblxuICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KHtcbiAgICAgIHBhZ2U6IG5ld1BhZ2UsXG4gICAgICBwYWdlU2l6ZTogbmV3UGFnZVNpemUsXG4gICAgICBwcmV2aW91c1BhZ2UsXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5wcm9wcy5jbGllbnRQYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLnByb3BzLnBhZ2luYXRpb24ucGFnZVNpemUgPSBuZXdQYWdlU2l6ZTtcbiAgICAgIHRoaXMucHJvcHMucGFnaW5hdGlvbi5wYWdlID0gbmV3UGFnZTtcbiAgICAgIHRoaXMudXBkYXRlRGlzcGxheWVkRGF0YSgpO1xuICAgIH1cbiAgfVxufVxuIl19
1081
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBSVosTUFBTSxFQUNOLHVCQUF1QixFQUN2QixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsT0FBTyxFQUNQLFdBQVcsRUFDWCxVQUFVLEVBQ1YsU0FBUyxFQUNULGVBQWUsR0FDaEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixxQkFBcUIsRUFDckIsZUFBZSxHQUNoQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBU0wseUJBQXlCLEdBQzFCLE1BQU0sU0FBUyxDQUFDOzs7QUFFakIsUUFBUSxDQUFDO0lBQ1AsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQixrQkFBa0I7SUFDbEIscUJBQXFCO0lBQ3JCLGVBQWU7Q0FDaEIsQ0FBQyxDQUFDO0FBc1dIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQ0c7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBL1kvQjtRQWtaWSxhQUFRLEdBQUcsSUFBSSxZQUFZLEVB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1WVDs4QkErQ1EsS0FBSztzQkFBYixLQUFLO2dCQUVJLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uSW5pdCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBpbmplY3QsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIElvbkJ1dHRvbixcbiAgSW9uSWNvbixcbiAgSW9uQ2hlY2tib3gsXG4gIElvblNwaW5uZXIsXG4gIElvblNlbGVjdCxcbiAgSW9uU2VsZWN0T3B0aW9uLFxufSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHtcbiAgY2hldnJvblVwT3V0bGluZSxcbiAgY2hldnJvbkRvd25PdXRsaW5lLFxuICBjaGV2cm9uQmFja091dGxpbmUsXG4gIGNoZXZyb25Gb3J3YXJkT3V0bGluZSxcbiAgZG9jdW1lbnRPdXRsaW5lLFxufSBmcm9tICdpb25pY29ucy9pY29ucyc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4nO1xuaW1wb3J0IHtcbiAgRGF0YVRhYmxlTWV0YWRhdGEsXG4gIERhdGFUYWJsZUNvbHVtbixcbiAgRGF0YVRhYmxlU29ydCxcbiAgRGF0YVRhYmxlUm93Q2xpY2tFdmVudCxcbiAgRGF0YVRhYmxlU2VsZWN0aW9uQ2hhbmdlRXZlbnQsXG4gIERhdGFUYWJsZVNvcnRDaGFuZ2VFdmVudCxcbiAgRGF0YVRhYmxlUGFnZUNoYW5nZUV2ZW50LFxuICBEYXRhVGFibGVFbXB0eVN0YXRlLFxuICBERUZBVUxUX1BBR0VfU0laRV9PUFRJT05TLFxufSBmcm9tICcuL3R5cGVzJztcblxuYWRkSWNvbnMoe1xuICBjaGV2cm9uVXBPdXRsaW5lLFxuICBjaGV2cm9uRG93bk91dGxpbmUsXG4gIGNoZXZyb25CYWNrT3V0bGluZSxcbiAgY2hldnJvbkZvcndhcmRPdXRsaW5lLFxuICBkb2N1bWVudE91dGxpbmUsXG59KTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLWRhdGEtdGFibGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBJb25CdXR0b24sXG4gICAgSW9uSWNvbixcbiAgICBJb25DaGVja2JveCxcbiAgICBJb25TcGlubmVyLFxuICAgIElvblNlbGVjdCxcbiAgICBJb25TZWxlY3RPcHRpb24sXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiXG4gICAgICBbY2xhc3NdPVwicHJvcHMuY3NzQ2xhc3NcIlxuICAgICAgW2NsYXNzLnNpemUtc21hbGxdPVwicHJvcHMuc2l6ZSA9PT0gJ3NtYWxsJ1wiXG4gICAgICBbY2xhc3Muc2l6ZS1tZWRpdW1dPVwicHJvcHMuc2l6ZSA9PT0gJ21lZGl1bScgfHwgIXByb3BzLnNpemVcIlxuICAgICAgW2NsYXNzLnNpemUtbGFyZ2VdPVwicHJvcHMuc2l6ZSA9PT0gJ2xhcmdlJ1wiXG4gICAgICBbY2xhc3MuYm9yZGVyZWRdPVwicHJvcHMuYm9yZGVyZWRcIlxuICAgICAgW2NsYXNzLnN0cmlwZWRdPVwicHJvcHMuc3RyaXBlZFwiXG4gICAgICBbY2xhc3MuaG92ZXJhYmxlXT1cInByb3BzLmhvdmVyYWJsZSAhPT0gZmFsc2VcIlxuICAgICAgW2NsYXNzLnN0aWNreS1oZWFkZXJdPVwicHJvcHMuc3RpY2t5SGVhZGVyXCJcbiAgICAgIFtjbGFzcy5yZXNwb25zaXZlLWNhcmRzXT1cInByb3BzLnJlc3BvbnNpdmVNb2RlID09PSAnY2FyZHMnXCJcbiAgICAgIFtjbGFzcy5lbGV2YXRpb24tbm9uZV09XCJwcm9wcy5lbGV2YXRpb24gPT09ICdub25lJ1wiXG4gICAgICBbY2xhc3MuZWxldmF0aW9uLWxvd109XCJwcm9wcy5lbGV2YXRpb24gPT09ICdsb3cnXCJcbiAgICAgIFtjbGFzcy5lbGV2YXRpb24taGlnaF09XCJwcm9wcy5lbGV2YXRpb24gPT09ICdoaWdoJ1wiXG4gICAgICBbY2xhc3MuaGVhZGVyLWdyYWRpZW50XT1cInByb3BzLmhlYWRlckdyYWRpZW50XCJcbiAgICAgIFtjbGFzcy5jaGVja2JveC1jaXJjdWxhcl09XCJwcm9wcy5jaGVja2JveFN0eWxlID09PSAnY2lyY3VsYXInXCJcbiAgICAgIFtjbGFzcy5yb3ctaGlnaGxpZ2h0LWJvcmRlcl09XCJwcm9wcy5yb3dIaWdobGlnaHRTdHlsZSA9PT0gJ2JvcmRlci1sZWZ0J1wiXG4gICAgICBbY2xhc3Mucm93LWhpZ2hsaWdodC1ib3RoXT1cInByb3BzLnJvd0hpZ2hsaWdodFN0eWxlID09PSAnYm90aCdcIlxuICAgICAgW3N0eWxlLi0tbWF4LWhlaWdodF09XCJwcm9wcy5tYXhIZWlnaHRcIlxuICAgID5cbiAgICAgIDwhLS0gVG9vbGJhciBzbG90IC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRvb2xiYXJcIiAjdG9vbGJhckNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3Rvb2xiYXJdXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gTG9hZGluZyBvdmVybGF5IC0tPlxuICAgICAgQGlmIChwcm9wcy5sb2FkaW5nU3RhdGU/LmxvYWRpbmcpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImxvYWRpbmctb3ZlcmxheVwiPlxuICAgICAgICAgIDxpb24tc3Bpbm5lciBuYW1lPVwiY3Jlc2NlbnRcIj48L2lvbi1zcGlubmVyPlxuICAgICAgICAgIEBpZiAocHJvcHMubG9hZGluZ1N0YXRlPy5tZXNzYWdlKSB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxvYWRpbmctbWVzc2FnZVwiPnt7IHByb3BzLmxvYWRpbmdTdGF0ZS5tZXNzYWdlIH19PC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS13cmFwcGVyXCIgW2NsYXNzLmlzLWxvYWRpbmddPVwicHJvcHMubG9hZGluZ1N0YXRlPy5sb2FkaW5nXCI+XG4gICAgICAgIDx0YWJsZVxuICAgICAgICAgIHJvbGU9XCJncmlkXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInByb3BzLmFyaWFMYWJlbFwiXG4gICAgICAgID5cbiAgICAgICAgICBAaWYgKHByb3BzLmNhcHRpb24pIHtcbiAgICAgICAgICAgIDxjYXB0aW9uIGNsYXNzPVwic3Itb25seVwiPnt7IHByb3BzLmNhcHRpb24gfX08L2NhcHRpb24+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8IS0tIFNlbGVjdGlvbiBjb2x1bW4gLS0+XG4gICAgICAgICAgICAgIEBpZiAocHJvcHMuc2hvd1NlbGVjdGlvbkNvbHVtbiAmJiBwcm9wcy5zZWxlY3Rpb24/Lm1vZGUgPT09ICdtdWx0aXBsZScpIHtcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJzZWxlY3Rpb24tY2VsbFwiPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0FsbFNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiaXNJbmRldGVybWluYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgKGlvbkNoYW5nZSk9XCJ0b2dnbGVTZWxlY3RBbGwoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICA+PC9pb24tY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKHByb3BzLnNob3dTZWxlY3Rpb25Db2x1bW4gJiYgcHJvcHMuc2VsZWN0aW9uPy5tb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInNlbGVjdGlvbi1jZWxsXCI+PC90aD5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIDwhLS0gUm93IG51bWJlciBjb2x1bW4gLS0+XG4gICAgICAgICAgICAgIEBpZiAocHJvcHMuc2hvd1Jvd051bWJlcnMpIHtcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJyb3ctbnVtYmVyLWNlbGxcIj4jPC90aD5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIDwhLS0gRGF0YSBjb2x1bW5zIC0tPlxuICAgICAgICAgICAgICBAZm9yIChjb2x1bW4gb2YgdmlzaWJsZUNvbHVtbnM7IHRyYWNrIGNvbHVtbi5rZXkpIHtcbiAgICAgICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJnZXRDb2x1bW5DbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aF09XCJjb2x1bW4ubWluV2lkdGhcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aF09XCJjb2x1bW4ubWF4V2lkdGhcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnNvcnRhYmxlXT1cImNvbHVtbi5zb3J0YWJsZVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3Muc29ydGVkXT1cImN1cnJlbnRTb3J0Py5jb2x1bW4gPT09IGNvbHVtbi5rZXlcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbHVtbi5zb3J0YWJsZSA/IG9uU29ydChjb2x1bW4pIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXNvcnRdPVwiZ2V0QXJpYVNvcnQoY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQGlmIChjb2x1bW4uaGVhZGVyVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbHVtbi5oZWFkZXJUZW1wbGF0ZTsgY29udGV4dDogeyBjb2x1bW4gfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVhZGVyLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBjb2x1bW4ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbHVtbi5zb3J0YWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzb3J0LWljb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpb24taWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJjaGV2cm9uLXVwLW91dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiY3VycmVudFNvcnQ/LmNvbHVtbiA9PT0gY29sdW1uLmtleSAmJiBjdXJyZW50U29ydD8uZGlyZWN0aW9uID09PSAnYXNjJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID48L2lvbi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiY2hldnJvbi1kb3duLW91dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiY3VycmVudFNvcnQ/LmNvbHVtbiA9PT0gY29sdW1uLmtleSAmJiBjdXJyZW50U29ydD8uZGlyZWN0aW9uID09PSAnZGVzYydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgPCEtLSBBY3Rpb25zIGNvbHVtbiAtLT5cbiAgICAgICAgICAgICAgQGlmIChwcm9wcy5hY3Rpb25zVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJhY3Rpb25zLWNlbGxcIiBbc3R5bGUud2lkdGhdPVwicHJvcHMuYWN0aW9uc1dpZHRoIHx8ICcxMDBweCdcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGdldEFjdGlvbnNMYWJlbCgpIH19XG4gICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3RoZWFkPlxuXG4gICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgQGlmIChkaXNwbGF5ZWREYXRhLmxlbmd0aCA9PT0gMCAmJiAhcHJvcHMubG9hZGluZ1N0YXRlPy5sb2FkaW5nKSB7XG4gICAgICAgICAgICAgIDx0ciBjbGFzcz1cImVtcHR5LXJvd1wiPlxuICAgICAgICAgICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cInRvdGFsQ29sdW1uc1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoZW1wdHlTdGF0ZS50ZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJlbXB0eVN0YXRlLnRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZW1wdHlTdGF0ZS5pY29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gW25hbWVdPVwiZW1wdHlTdGF0ZS5pY29uXCIgY2xhc3M9XCJlbXB0eS1pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChlbXB0eVN0YXRlLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJlbXB0eS10aXRsZVwiPnt7IGVtcHR5U3RhdGUudGl0bGUgfX08L2g0PlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGVtcHR5U3RhdGUuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZW1wdHktZGVzY3JpcHRpb25cIj57eyBlbXB0eVN0YXRlLmRlc2NyaXB0aW9uIH19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICBAZm9yIChyb3cgb2YgZGlzcGxheWVkRGF0YTsgdHJhY2sgdHJhY2tCeUZuKHJvdyk7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiaXNSb3dTZWxlY3RlZChyb3cpXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5jbGlja2FibGVdPVwicHJvcHMucm93Q2xpY2thYmxlXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKHJvdywgaSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPCEtLSBTZWxlY3Rpb24gY2VsbCAtLT5cbiAgICAgICAgICAgICAgICAgIEBpZiAocHJvcHMuc2hvd1NlbGVjdGlvbkNvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJzZWxlY3Rpb24tY2VsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAocHJvcHMuc2VsZWN0aW9uPy5tb2RlID09PSAnbXVsdGlwbGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzUm93U2VsZWN0ZWQocm93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChpb25DaGFuZ2UpPVwidG9nZ2xlUm93U2VsZWN0aW9uKHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvaW9uLWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2UgaWYgKHByb3BzLnNlbGVjdGlvbj8ubW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc1Jvd1NlbGVjdGVkKHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0U2luZ2xlUm93KHJvdyk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgPCEtLSBSb3cgbnVtYmVyIC0tPlxuICAgICAgICAgICAgICAgICAgQGlmIChwcm9wcy5zaG93Um93TnVtYmVycykge1xuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJyb3ctbnVtYmVyLWNlbGxcIj57eyBnZXRSb3dOdW1iZXIoaSkgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICA8IS0tIERhdGEgY2VsbHMgLS0+XG4gICAgICAgICAgICAgICAgICBAZm9yIChjb2x1bW4gb2YgdmlzaWJsZUNvbHVtbnM7IHRyYWNrIGNvbHVtbi5rZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImdldENvbHVtbkNsYXNzKGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS50ZXh0LWFsaWduXT1cImNvbHVtbi5hbGlnblwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbHVtbi5jZWxsVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2x1bW4uY2VsbFRlbXBsYXRlOyBjb250ZXh0OiB7IHJvdywgY29sdW1uLCB2YWx1ZTogZ2V0Q2VsbFZhbHVlKHJvdywgY29sdW1uKSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRGb3JtYXR0ZWRWYWx1ZShyb3csIGNvbHVtbikgfX1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIDwhLS0gQWN0aW9ucyBjZWxsIC0tPlxuICAgICAgICAgICAgICAgICAgQGlmIChwcm9wcy5hY3Rpb25zVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWN0aW9ucy1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInByb3BzLmFjdGlvbnNUZW1wbGF0ZTsgY29udGV4dDogeyByb3csIGluZGV4OiBpIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgPC90YWJsZT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIENhcmQgdmlldyAocmVzcG9uc2l2ZSBtb2JpbGUpIC0tPlxuICAgICAgQGlmIChwcm9wcy5yZXNwb25zaXZlTW9kZSA9PT0gJ2NhcmRzJykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1saXN0XCI+XG4gICAgICAgICAgQGlmIChkaXNwbGF5ZWREYXRhLmxlbmd0aCA9PT0gMCAmJiAhcHJvcHMubG9hZGluZ1N0YXRlPy5sb2FkaW5nKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktc3RhdGVcIj5cbiAgICAgICAgICAgICAgQGlmIChlbXB0eVN0YXRlLmljb24pIHtcbiAgICAgICAgICAgICAgICA8aW9uLWljb24gW25hbWVdPVwiZW1wdHlTdGF0ZS5pY29uXCIgY2xhc3M9XCJlbXB0eS1pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKGVtcHR5U3RhdGUudGl0bGUpIHtcbiAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJlbXB0eS10aXRsZVwiPnt7IGVtcHR5U3RhdGUudGl0bGUgfX08L2g0PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBpZiAoZW1wdHlTdGF0ZS5kZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZW1wdHktZGVzY3JpcHRpb25cIj57eyBlbXB0eVN0YXRlLmRlc2NyaXB0aW9uIH19PC9wPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIEBmb3IgKHJvdyBvZiBkaXNwbGF5ZWREYXRhOyB0cmFjayB0cmFja0J5Rm4ocm93KTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgQGlmIChwcm9wcy5tb2JpbGVDYXJkVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicHJvcHMubW9iaWxlQ2FyZFRlbXBsYXRlOyBjb250ZXh0OiB7IHJvdywgaW5kZXg6IGksIGNvbHVtbnM6IHZpc2libGVDb2x1bW5zIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWNhcmRcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImlzUm93U2VsZWN0ZWQocm93KVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuY2xpY2thYmxlXT1cInByb3BzLnJvd0NsaWNrYWJsZVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljayhyb3csIGksICRldmVudClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDwhLS0gQ2FyZCBoZWFkZXIgd2l0aCBzZWxlY3Rpb24gLS0+XG4gICAgICAgICAgICAgICAgICBAaWYgKHByb3BzLnNob3dTZWxlY3Rpb25Db2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtc2VsZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHByb3BzLnNlbGVjdGlvbj8ubW9kZSA9PT0gJ211bHRpcGxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNSb3dTZWxlY3RlZChyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW9uQ2hhbmdlKT1cInRvZ2dsZVJvd1NlbGVjdGlvbihyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9pb24tY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIGlmIChwcm9wcy5zZWxlY3Rpb24/Lm1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNSb3dTZWxlY3RlZChyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0U2luZ2xlUm93KHJvdyk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChwcm9wcy5zaG93Um93TnVtYmVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyb3ctbnVtYmVyXCI+e3sgZ2V0Um93TnVtYmVyKGkpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIDwhLS0gQ2FyZCBib2R5IHdpdGggZmllbGRzIC0tPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChjb2x1bW4gb2YgdmlzaWJsZUNvbHVtbnM7IHRyYWNrIGNvbHVtbi5rZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLWZpZWxkX19sYWJlbFwiPnt7IGNvbHVtbi5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC1maWVsZF9fdmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChjb2x1bW4uY2VsbFRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbHVtbi5jZWxsVGVtcGxhdGU7IGNvbnRleHQ6IHsgcm93LCBjb2x1bW4sIHZhbHVlOiBnZXRDZWxsVmFsdWUocm93LCBjb2x1bW4pIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0Rm9ybWF0dGVkVmFsdWUocm93LCBjb2x1bW4pIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDwhLS0gQ2FyZCBhY3Rpb25zIC0tPlxuICAgICAgICAgICAgICAgICAgQGlmIChwcm9wcy5hY3Rpb25zVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwcm9wcy5hY3Rpb25zVGVtcGxhdGU7IGNvbnRleHQ6IHsgcm93LCBpbmRleDogaSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cblxuICAgICAgPCEtLSBQYWdpbmF0aW9uIC0tPlxuICAgICAgQGlmIChwcm9wcy5zaG93UGFnaW5hdGlvbiAmJiBwcm9wcy5wYWdpbmF0aW9uKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYWdpbmF0aW9uLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdpbmF0aW9uLWluZm9cIj5cbiAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICB7eyBnZXRQYWdpbmF0aW9uSW5mb1RleHQoKSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICBAaWYgKHBhZ2VTaXplT3B0aW9ucy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgIDxpb24tc2VsZWN0XG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInByb3BzLnBhZ2luYXRpb24ucGFnZVNpemVcIlxuICAgICAgICAgICAgICAgIChpb25DaGFuZ2UpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBpbnRlcmZhY2U9XCJwb3BvdmVyXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInBhZ2Utc2l6ZS1zZWxlY3RcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQGZvciAoc2l6ZSBvZiBwYWdlU2l6ZU9wdGlvbnM7IHRyYWNrIHNpemUpIHtcbiAgICAgICAgICAgICAgICAgIDxpb24tc2VsZWN0LW9wdGlvbiBbdmFsdWVdPVwic2l6ZVwiPnt7IGdldFBlclBhZ2VUZXh0KHNpemUpIH19PC9pb24tc2VsZWN0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvaW9uLXNlbGVjdD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdpbmF0aW9uLWNvbnRyb2xzXCI+XG4gICAgICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgICAgICBmaWxsPVwiY2xlYXJcIlxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicHJvcHMucGFnaW5hdGlvbi5wYWdlID09PSAwXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9QYWdlKDApXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJnZXRGaXJzdFBhZ2VMYWJlbCgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJpY29uLW9ubHlcIiBuYW1lPVwiY2hldnJvbi1iYWNrLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJjaGV2cm9uLWJhY2stb3V0bGluZVwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IC0xMnB4XCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cblxuICAgICAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICAgICAgZmlsbD1cImNsZWFyXCJcbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInByb3BzLnBhZ2luYXRpb24ucGFnZSA9PT0gMFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJnb1RvUGFnZShwcm9wcy5wYWdpbmF0aW9uLnBhZ2UgLSAxKVwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZ2V0UHJldmlvdXNQYWdlTGFiZWwoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgbmFtZT1cImNoZXZyb24tYmFjay1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cblxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWdlLWluZGljYXRvclwiPlxuICAgICAgICAgICAgICB7eyBwcm9wcy5wYWdpbmF0aW9uLnBhZ2UgKyAxIH19IC8ge3sgdG90YWxQYWdlcyB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgICAgICBmaWxsPVwiY2xlYXJcIlxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicHJvcHMucGFnaW5hdGlvbi5wYWdlID49IHRvdGFsUGFnZXMgLSAxXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9QYWdlKHByb3BzLnBhZ2luYXRpb24ucGFnZSArIDEpXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJnZXROZXh0UGFnZUxhYmVsKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJjaGV2cm9uLWZvcndhcmQtb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XG5cbiAgICAgICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgICAgIGZpbGw9XCJjbGVhclwiXG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJwcm9wcy5wYWdpbmF0aW9uLnBhZ2UgPj0gdG90YWxQYWdlcyAtIDFcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZ29Ub1BhZ2UodG90YWxQYWdlcyAtIDEpXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJnZXRMYXN0UGFnZUxhYmVsKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJjaGV2cm9uLWZvcndhcmQtb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgbmFtZT1cImNoZXZyb24tZm9yd2FyZC1vdXRsaW5lXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogLTEycHhcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0YS10YWJsZS5jb21wb25lbnQuc2NzcyddLFxufSlcbi8qKlxuICogdmFsLWRhdGEtdGFibGVcbiAqXG4gKiBBIGZsZXhpYmxlIGRhdGEgdGFibGUgY29tcG9uZW50IGZvciBkaXNwbGF5aW5nIHRhYnVsYXIgZGF0YSB3aXRoIHNvcnRpbmcsXG4gKiBwYWdpbmF0aW9uLCBhbmQgc2VsZWN0aW9uIGZlYXR1cmVzLlxuICpcbiAqIEBleGFtcGxlIEJhc2ljIHVzYWdlXG4gKiBgYGBodG1sXG4gKiA8dmFsLWRhdGEtdGFibGVcbiAqICAgW3Byb3BzXT1cIntcbiAqICAgICBjb2x1bW5zOiBbXG4gKiAgICAgICB7IGtleTogJ25hbWUnLCBsYWJlbDogJ05vbWJyZScsIHNvcnRhYmxlOiB0cnVlIH0sXG4gKiAgICAgICB7IGtleTogJ2VtYWlsJywgbGFiZWw6ICdFbWFpbCcgfSxcbiAqICAgICAgIHsga2V5OiAnc3RhdHVzJywgbGFiZWw6ICdFc3RhZG8nIH1cbiAqICAgICBdLFxuICogICAgIGRhdGE6IHVzZXJzXG4gKiAgIH1cIlxuICogPjwvdmFsLWRhdGEtdGFibGU+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBXaXRoIHBhZ2luYXRpb24gYW5kIHNlbGVjdGlvblxuICogYGBgaHRtbFxuICogPHZhbC1kYXRhLXRhYmxlXG4gKiAgIFtwcm9wc109XCJ7XG4gKiAgICAgY29sdW1uczogY29sdW1ucyxcbiAqICAgICBkYXRhOiBwYXJ0aWNpcGFudHMsXG4gKiAgICAgc2hvd1BhZ2luYXRpb246IHRydWUsXG4gKiAgICAgcGFnaW5hdGlvbjoge1xuICogICAgICAgcGFnZTogMCxcbiAqICAgICAgIHBhZ2VTaXplOiAyNSxcbiAqICAgICAgIHRvdGFsOiB0b3RhbENvdW50XG4gKiAgICAgfSxcbiAqICAgICBzZWxlY3Rpb246IHtcbiAqICAgICAgIG1vZGU6ICdtdWx0aXBsZScsXG4gKiAgICAgICBzZWxlY3RlZDogc2VsZWN0ZWRQYXJ0aWNpcGFudHNcbiAqICAgICB9LFxuICogICAgIHNob3dTZWxlY3Rpb25Db2x1bW46IHRydWVcbiAqICAgfVwiXG4gKiAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gKiAgIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcbiAqID48L3ZhbC1kYXRhLXRhYmxlPlxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhVGFibGVDb21wb25lbnQ8VCA9IGFueT4gaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIHByb3BzOiBEYXRhVGFibGVNZXRhZGF0YTxUPjtcblxuICBAT3V0cHV0KCkgcm93Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFUYWJsZVJvd0NsaWNrRXZlbnQ8VD4+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFUYWJsZVNlbGVjdGlvbkNoYW5nZUV2ZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgc29ydENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YVRhYmxlU29ydENoYW5nZUV2ZW50PigpO1xuICBAT3V0cHV0KCkgcGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YVRhYmxlUGFnZUNoYW5nZUV2ZW50PigpO1xuXG4gIGRpc3BsYXllZERhdGE6IFRbXSA9IFtdO1xuICBjdXJyZW50U29ydDogRGF0YVRhYmxlU29ydCB8IG51bGwgPSBudWxsO1xuICBzZWxlY3RlZFJvd3M6IFNldDxhbnk+ID0gbmV3IFNldCgpO1xuXG4gIC8qKiBDYWNoZWQgdmlzaWJsZSBjb2x1bW5zIGZvciBwZXJmb3JtYW5jZSAqL1xuICBwcml2YXRlIF92aXNpYmxlQ29sdW1uczogRGF0YVRhYmxlQ29sdW1uPFQ+W10gPSBbXTtcblxuICBwcml2YXRlIGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByaXZhdGUgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsaXplU3RhdGUoKTtcbiAgICB0aGlzLnVwZGF0ZURpc3BsYXllZERhdGEoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1sncHJvcHMnXSkge1xuICAgICAgdGhpcy5pbml0aWFsaXplU3RhdGUoKTtcbiAgICAgIHRoaXMudXBkYXRlRGlzcGxheWVkRGF0YSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVN0YXRlKCk6IHZvaWQge1xuICAgIC8vIENhY2hlIHZpc2libGUgY29sdW1ucyBmb3IgcGVyZm9ybWFuY2VcbiAgICB0aGlzLl92aXNpYmxlQ29sdW1ucyA9IHRoaXMucHJvcHMuY29sdW1ucy5maWx0ZXIoYyA9PiBjLnZpc2libGUgIT09IGZhbHNlKTtcblxuICAgIC8vIEluaXRpYWxpemUgc29ydFxuICAgIHRoaXMuY3VycmVudFNvcnQgPSB0aGlzLnByb3BzLnNvcnQgfHwgbnVsbDtcblxuICAgIC8vIEluaXRpYWxpemUgc2VsZWN0aW9uXG4gICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0aW9uPy5zZWxlY3RlZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBuZXcgU2V0KFxuICAgICAgICB0aGlzLnByb3BzLnNlbGVjdGlvbi5zZWxlY3RlZC5tYXAocm93ID0+IHRoaXMuZ2V0Um93SWQocm93KSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEaXNwbGF5ZWREYXRhKCk6IHZvaWQge1xuICAgIGxldCBkYXRhID0gWy4uLnRoaXMucHJvcHMuZGF0YV07XG5cbiAgICAvLyBBcHBseSBjbGllbnQtc2lkZSBzb3J0aW5nXG4gICAgaWYgKHRoaXMucHJvcHMuY2xpZW50U29ydCAmJiB0aGlzLmN1cnJlbnRTb3J0KSB7XG4gICAgICBkYXRhID0gdGhpcy5zb3J0RGF0YShkYXRhKTtcbiAgICB9XG5cbiAgICAvLyBBcHBseSBjbGllbnQtc2lkZSBwYWdpbmF0aW9uXG4gICAgaWYgKHRoaXMucHJvcHMuY2xpZW50UGFnaW5hdGlvbiAmJiB0aGlzLnByb3BzLnBhZ2luYXRpb24pIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5wcm9wcy5wYWdpbmF0aW9uLnBhZ2UgKiB0aGlzLnByb3BzLnBhZ2luYXRpb24ucGFnZVNpemU7XG4gICAgICBjb25zdCBlbmQgPSBzdGFydCArIHRoaXMucHJvcHMucGFnaW5hdGlvbi5wYWdlU2l6ZTtcbiAgICAgIGRhdGEgPSBkYXRhLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIHRoaXMuZGlzcGxheWVkRGF0YSA9IGRhdGE7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIHNvcnREYXRhKGRhdGE6IFRbXSk6IFRbXSB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRTb3J0KSByZXR1cm4gZGF0YTtcblxuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMucHJvcHMuY29sdW1ucy5maW5kKGMgPT4gYy5rZXkgPT09IHRoaXMuY3VycmVudFNvcnQ/LmNvbHVtbik7XG4gICAgaWYgKCFjb2x1bW4pIHJldHVybiBkYXRhO1xuXG4gICAgcmV0dXJuIFsuLi5kYXRhXS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBpZiAoY29sdW1uLnNvcnRGbikge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb2x1bW4uc29ydEZuKGEsIGIpO1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50U29ydD8uZGlyZWN0aW9uID09PSAnZGVzYycgPyAtcmVzdWx0IDogcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2YWx1ZUEgPSB0aGlzLmdldENlbGxWYWx1ZShhLCBjb2x1bW4pO1xuICAgICAgY29uc3QgdmFsdWVCID0gdGhpcy5nZXRDZWxsVmFsdWUoYiwgY29sdW1uKTtcblxuICAgICAgbGV0IGNvbXBhcmlzb24gPSAwO1xuICAgICAgaWYgKHZhbHVlQSA9PSBudWxsICYmIHZhbHVlQiA9PSBudWxsKSBjb21wYXJpc29uID0gMDtcbiAgICAgIGVsc2UgaWYgKHZhbHVlQSA9PSBudWxsKSBjb21wYXJpc29uID0gMTtcbiAgICAgIGVsc2UgaWYgKHZhbHVlQiA9PSBudWxsKSBjb21wYXJpc29uID0gLTE7XG4gICAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWVBID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWVCID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb21wYXJpc29uID0gdmFsdWVBLmxvY2FsZUNvbXBhcmUodmFsdWVCKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbXBhcmlzb24gPSB2YWx1ZUEgPCB2YWx1ZUIgPyAtMSA6IHZhbHVlQSA+IHZhbHVlQiA/IDEgOiAwO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jdXJyZW50U29ydD8uZGlyZWN0aW9uID09PSAnZGVzYycgPyAtY29tcGFyaXNvbiA6IGNvbXBhcmlzb247XG4gICAgfSk7XG4gIH1cblxuICBnZXQgdmlzaWJsZUNvbHVtbnMoKTogRGF0YVRhYmxlQ29sdW1uPFQ+W10ge1xuICAgIHJldHVybiB0aGlzLl92aXNpYmxlQ29sdW1ucztcbiAgfVxuXG4gIGdldCB0b3RhbENvbHVtbnMoKTogbnVtYmVyIHtcbiAgICBsZXQgY291bnQgPSB0aGlzLnZpc2libGVDb2x1bW5zLmxlbmd0aDtcbiAgICBpZiAodGhpcy5wcm9wcy5zaG93U2VsZWN0aW9uQ29sdW1uKSBjb3VudCsrO1xuICAgIGlmICh0aGlzLnByb3BzLnNob3dSb3dOdW1iZXJzKSBjb3VudCsrO1xuICAgIGlmICh0aGlzLnByb3BzLmFjdGlvbnNUZW1wbGF0ZSkgY291bnQrKztcbiAgICByZXR1cm4gY291bnQ7XG4gIH1cblxuICBnZXQgZW1wdHlTdGF0ZSgpOiBEYXRhVGFibGVFbXB0eVN0YXRlIHtcbiAgICBjb25zdCBkZWZhdWx0RW1wdHlTdGF0ZTogRGF0YVRhYmxlRW1wdHlTdGF0ZSA9IHtcbiAgICAgIGljb246ICdkb2N1bWVudC1vdXRsaW5lJyxcbiAgICAgIHRpdGxlOiB0aGlzLmkxOG4udCgnbm9EYXRhJyksXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5pMThuLnQoJ25vUmVjb3Jkc0ZvdW5kJyksXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5lbXB0eVN0YXRlIHx8IGRlZmF1bHRFbXB0eVN0YXRlO1xuICB9XG5cbiAgLyoqIEdldCBhY3Rpb25zIGNvbHVtbiBsYWJlbCAqL1xuICBnZXRBY3Rpb25zTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5hY3Rpb25zTGFiZWwgfHwgdGhpcy5pMThuLnQoJ2FjdGlvbnMnKTtcbiAgfVxuXG4gIC8qKiBHZXQgcGFnaW5hdGlvbiBpbmZvIHRleHQgKi9cbiAgZ2V0UGFnaW5hdGlvbkluZm9UZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuaTE4bi50KCdzaG93aW5nJyl9ICR7dGhpcy5wYWdpbmF0aW9uU3RhcnR9LSR7dGhpcy5wYWdpbmF0aW9uRW5kfSAke3RoaXMuaTE4bi50KCdvZicpfSAke3RoaXMucHJvcHMucGFnaW5hdGlvbj8udG90YWx9YDtcbiAgfVxuXG4gIC8qKiBHZXQgcGVyIHBhZ2UgdGV4dCAqL1xuICBnZXRQZXJQYWdlVGV4dChzaXplOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtzaXplfSAke3RoaXMuaTE4bi50KCdwZXJQYWdlJyl9YDtcbiAgfVxuXG4gIC8qKiBHZXQgZmlyc3QgcGFnZSBhcmlhIGxhYmVsICovXG4gIGdldEZpcnN0UGFnZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50KCdmaXJzdFBhZ2UnKTtcbiAgfVxuXG4gIC8qKiBHZXQgcHJldmlvdXMgcGFnZSBhcmlhIGxhYmVsICovXG4gIGdldFByZXZpb3VzUGFnZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50KCdwcmV2aW91c1BhZ2UnKTtcbiAgfVxuXG4gIC8qKiBHZXQgbmV4dCBwYWdlIGFyaWEgbGFiZWwgKi9cbiAgZ2V0TmV4dFBhZ2VMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udCgnbmV4dFBhZ2UnKTtcbiAgfVxuXG4gIC8qKiBHZXQgbGFzdCBwYWdlIGFyaWEgbGFiZWwgKi9cbiAgZ2V0TGFzdFBhZ2VMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udCgnbGFzdFBhZ2UnKTtcbiAgfVxuXG4gIGdldCBwYWdlU2l6ZU9wdGlvbnMoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnBhZ2luYXRpb24/LnBhZ2VTaXplT3B0aW9ucyB8fCBERUZBVUxUX1BBR0VfU0laRV9PUFRJT05TO1xuICB9XG5cbiAgZ2V0IHRvdGFsUGFnZXMoKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMucHJvcHMucGFnaW5hdGlvbikgcmV0dXJuIDE7XG4gICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLnByb3BzLnBhZ2luYXRpb24udG90YWwgLyB0aGlzLnByb3BzLnBhZ2luYXRpb24ucGFnZVNpemUpO1xuICB9XG5cbiAgZ2V0IHBhZ2luYXRpb25TdGFydCgpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5wcm9wcy5wYWdpbmF0aW9uKSByZXR1cm4gMTtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5wYWdpbmF0aW9uLnBhZ2UgKiB0aGlzLnByb3BzLnBhZ2luYXRpb24ucGFnZVNpemUgKyAxO1xuICB9XG5cbiAgZ2V0IHBhZ2luYXRpb25FbmQoKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMucHJvcHMucGFnaW5hdGlvbikgcmV0dXJuIHRoaXMuZGlzcGxheWVkRGF0YS5sZW5ndGg7XG4gICAgcmV0dXJuIE1hdGgubWluKFxuICAgICAgKHRoaXMucHJvcHMucGFnaW5hdGlvbi5wYWdlICsgMSkgKiB0aGlzLnByb3BzLnBhZ2luYXRpb24ucGFnZVNpemUsXG4gICAgICB0aGlzLnByb3BzLnBhZ2luYXRpb24udG90YWxcbiAgICApO1xuICB9XG5cbiAgZ2V0IGlzQWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuZGlzcGxheWVkRGF0YS5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ZWREYXRhLmV2ZXJ5KHJvdyA9PiB0aGlzLmlzUm93U2VsZWN0ZWQocm93KSk7XG4gIH1cblxuICBnZXQgaXNJbmRldGVybWluYXRlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlbGVjdGVkQ291bnQgPSB0aGlzLmRpc3BsYXllZERhdGEuZmlsdGVyKHJvdyA9PiB0aGlzLmlzUm93U2VsZWN0ZWQocm93KSkubGVuZ3RoO1xuICAgIHJldHVybiBzZWxlY3RlZENvdW50ID4gMCAmJiBzZWxlY3RlZENvdW50IDwgdGhpcy5kaXNwbGF5ZWREYXRhLmxlbmd0aDtcbiAgfVxuXG4gIGdldENlbGxWYWx1ZShyb3c6IFQsIGNvbHVtbjogRGF0YVRhYmxlQ29sdW1uPFQ+KTogYW55IHtcbiAgICBjb25zdCBmaWVsZCA9IGNvbHVtbi5maWVsZCB8fCBjb2x1bW4ua2V5O1xuICAgIHJldHVybiBmaWVsZC5zcGxpdCgnLicpLnJlZHVjZSgob2JqOiBhbnksIGtleSkgPT4gb2JqPy5ba2V5XSwgcm93KTtcbiAgfVxuXG4gIGdldEZvcm1hdHRlZFZhbHVlKHJvdzogVCwgY29sdW1uOiBEYXRhVGFibGVDb2x1bW48VD4pOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRDZWxsVmFsdWUocm93LCBjb2x1bW4pO1xuICAgIGlmIChjb2x1bW4uZm9ybWF0KSB7XG4gICAgICByZXR1cm4gY29sdW1uLmZvcm1hdCh2YWx1ZSwgcm93KTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlID8/ICcnO1xuICB9XG5cbiAgZ2V0Q29sdW1uQ2xhc3MoY29sdW1uOiBEYXRhVGFibGVDb2x1bW48VD4pOiBzdHJpbmcge1xuICAgIGNvbnN0IGNsYXNzZXMgPSBbY29sdW1uLmNzc0NsYXNzIHx8ICcnXTtcbiAgICBpZiAoY29sdW1uLnN0aWNreSkge1xuICAgICAgY2xhc3Nlcy5wdXNoKGBzdGlja3ktJHtjb2x1bW4uc3RpY2t5fWApO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLmFsaWduKSB7XG4gICAgICBjbGFzc2VzLnB1c2goYGFsaWduLSR7Y29sdW1uLmFsaWdufWApO1xuICAgIH1cbiAgICByZXR1cm4gY2xhc3Nlcy5maWx0ZXIoQm9vbGVhbikuam9pbignICcpO1xuICB9XG5cbiAgZ2V0QXJpYVNvcnQoY29sdW1uOiBEYXRhVGFibGVDb2x1bW48VD4pOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoIWNvbHVtbi5zb3J0YWJsZSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKHRoaXMuY3VycmVudFNvcnQ/LmNvbHVtbiAhPT0gY29sdW1uLmtleSkgcmV0dXJuICdub25lJztcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50U29ydC5kaXJlY3Rpb24gPT09ICdhc2MnID8gJ2FzY2VuZGluZycgOiAnZGVzY2VuZGluZyc7XG4gIH1cblxuICBnZXRSb3dOdW1iZXIoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLnByb3BzLnJvd051bWJlclN0YXJ0ID8/IDE7XG4gICAgaWYgKHRoaXMucHJvcHMucGFnaW5hdGlvbikge1xuICAgICAgcmV0dXJuIHN0YXJ0ICsgdGhpcy5wcm9wcy5wYWdpbmF0aW9uLnBhZ2UgKiB0aGlzLnByb3BzLnBhZ2luYXRpb24ucGFnZVNpemUgKyBpbmRleDtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXJ0ICsgaW5kZXg7XG4gIH1cblxuICBnZXRSb3dJZChyb3c6IFQpOiBhbnkge1xuICAgIGlmICh0aGlzLnByb3BzLnNlbGVjdGlvbj8udHJhY2tCeSkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuc2VsZWN0aW9uLnRyYWNrQnkocm93KTtcbiAgICB9XG4gICAgcmV0dXJuIHJvdztcbiAgfVxuXG4gIHRyYWNrQnlGbihyb3c6IFQpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFJvd0lkKHJvdyk7XG4gIH1cblxuICBpc1Jvd1NlbGVjdGVkKHJvdzogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUm93cy5oYXModGhpcy5nZXRSb3dJZChyb3cpKTtcbiAgfVxuXG4gIG9uU29ydChjb2x1bW46IERhdGFUYWJsZUNvbHVtbjxUPik6IHZvaWQge1xuICAgIGlmICghY29sdW1uLnNvcnRhYmxlKSByZXR1cm47XG5cbiAgICBsZXQgZGlyZWN0aW9uOiAnYXNjJyB8ICdkZXNjJyB8IG51bGwgPSAnYXNjJztcblxuICAgIGlmICh0aGlzLmN1cnJlbnRTb3J0Py5jb2x1bW4gPT09IGNvbHVtbi5rZXkpIHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRTb3J0LmRpcmVjdGlvbiA9PT0gJ2FzYycpIHtcbiAgICAgICAgZGlyZWN0aW9uID0gJ2Rlc2MnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlyZWN0aW9uID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGlyZWN0aW9uKSB7XG4gICAgICB0aGlzLmN1cnJlbnRTb3J0ID0geyBjb2x1bW46IGNvbHVtbi5rZXksIGRpcmVjdGlvbiB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnRTb3J0ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnNvcnRDaGFuZ2UuZW1pdCh7XG4gICAgICBjb2x1bW46IGNvbHVtbi5rZXksXG4gICAgICBkaXJlY3Rpb24sXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5wcm9wcy5jbGllbnRTb3J0KSB7XG4gICAgICB0aGlzLnVwZGF0ZURpc3BsYXllZERhdGEoKTtcbiAgICB9XG4gIH1cblxuICBvblJvd0NsaWNrKHJvdzogVCwgaW5kZXg6IG51bWJlciwgZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucHJvcHMucm93Q2xpY2thYmxlKSByZXR1cm47XG5cbiAgICB0aGlzLnJvd0NsaWNrLmVtaXQoe1xuICAgICAgcm93LFxuICAgICAgaW5kZXgsXG4gICAgICBldmVudCxcbiAgICB9KTtcbiAgfVxuXG4gIHRvZ2dsZVNlbGVjdEFsbChldmVudDogQ3VzdG9tRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjaGVja2VkID0gZXZlbnQuZGV0YWlsLmNoZWNrZWQ7XG5cbiAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgdGhpcy5kaXNwbGF5ZWREYXRhLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MuYWRkKHRoaXMuZ2V0Um93SWQocm93KSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwbGF5ZWREYXRhLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MuZGVsZXRlKHRoaXMuZ2V0Um93SWQocm93KSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2UoY2hlY2tlZCA/ICdzZWxlY3RBbGwnIDogJ2Rlc2VsZWN0QWxsJyk7XG4gIH1cblxuICB0b2dnbGVSb3dTZWxlY3Rpb24ocm93OiBULCBldmVudDogQ3VzdG9tRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCByb3dJZCA9IHRoaXMuZ2V0Um93SWQocm93KTtcbiAgICBjb25zdCBjaGVja2VkID0gZXZlbnQuZGV0YWlsLmNoZWNrZWQ7XG5cbiAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFJvd3MuYWRkKHJvd0lkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZFJvd3MuZGVsZXRlKHJvd0lkKTtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2UoY2hlY2tlZCA/ICdzZWxlY3QnIDogJ2Rlc2VsZWN0Jywgcm93KTtcbiAgfVxuXG4gIHNlbGVjdFNpbmdsZVJvdyhyb3c6IFQpOiB2b2lkIHtcbiAgICBjb25zdCByb3dJZCA9IHRoaXMuZ2V0Um93SWQocm93KTtcbiAgICBjb25zdCB3YXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRSb3dzLmhhcyhyb3dJZCk7XG5cbiAgICB0aGlzLnNlbGVjdGVkUm93cy5jbGVhcigpO1xuXG4gICAgaWYgKCF3YXNTZWxlY3RlZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFJvd3MuYWRkKHJvd0lkKTtcbiAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZSgnc2VsZWN0Jywgcm93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlKCdkZXNlbGVjdCcsIHJvdyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbWl0U2VsZWN0aW9uQ2hhbmdlKFxuICAgIGFjdGlvbjogJ3NlbGVjdCcgfCAnZGVzZWxlY3QnIHwgJ3NlbGVjdEFsbCcgfCAnZGVzZWxlY3RBbGwnLFxuICAgIGNoYW5nZWRSb3c/OiBUXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5wcm9wcy5kYXRhLmZpbHRlcihyb3cgPT4gdGhpcy5pc1Jvd1NlbGVjdGVkKHJvdykpO1xuXG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh7XG4gICAgICBzZWxlY3RlZCxcbiAgICAgIGNoYW5nZWRSb3csXG4gICAgICBhY3Rpb24sXG4gICAgfSk7XG4gIH1cblxuICBnb1RvUGFnZShwYWdlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucHJvcHMucGFnaW5hdGlvbikgcmV0dXJuO1xuXG4gICAgY29uc3QgcHJldmlvdXNQYWdlID0gdGhpcy5wcm9wcy5wYWdpbmF0aW9uLnBhZ2U7XG4gICAgY29uc3QgbWF4UGFnZSA9IHRoaXMudG90YWxQYWdlcyAtIDE7XG4gICAgY29uc3QgbmV3UGFnZSA9IE1hdGgubWF4KDAsIE1hdGgubWluKHBhZ2UsIG1heFBhZ2UpKTtcblxuICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KHtcbiAgICAgIHBhZ2U6IG5ld1BhZ2UsXG4gICAgICBwYWdlU2l6ZTogdGhpcy5wcm9wcy5wYWdpbmF0aW9uLnBhZ2VTaXplLFxuICAgICAgcHJldmlvdXNQYWdlLFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMucHJvcHMuY2xpZW50UGFnaW5hdGlvbikge1xuICAgICAgdGhpcy5wcm9wcy5wYWdpbmF0aW9uLnBhZ2UgPSBuZXdQYWdlO1xuICAgICAgdGhpcy51cGRhdGVEaXNwbGF5ZWREYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgb25QYWdlU2l6ZUNoYW5nZShldmVudDogQ3VzdG9tRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucHJvcHMucGFnaW5hdGlvbikgcmV0dXJuO1xuXG4gICAgY29uc3QgbmV3UGFnZVNpemUgPSBldmVudC5kZXRhaWwudmFsdWU7XG4gICAgY29uc3QgcHJldmlvdXNQYWdlID0gdGhpcy5wcm9wcy5wYWdpbmF0aW9uLnBhZ2U7XG5cbiAgICAvLyBSZWNhbGN1bGF0ZSBwYWdlIHRvIGtlZXAgZmlyc3QgdmlzaWJsZSBpdGVtXG4gICAgY29uc3QgZmlyc3RJdGVtID0gcHJldmlvdXNQYWdlICogdGhpcy5wcm9wcy5wYWdpbmF0aW9uLnBhZ2VTaXplO1xuICAgIGNvbnN0IG5ld1BhZ2UgPSBNYXRoLmZsb29yKGZpcnN0SXRlbSAvIG5ld1BhZ2VTaXplKTtcblxuICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KHtcbiAgICAgIHBhZ2U6IG5ld1BhZ2UsXG4gICAgICBwYWdlU2l6ZTogbmV3UGFnZVNpemUsXG4gICAgICBwcmV2aW91c1BhZ2UsXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5wcm9wcy5jbGllbnRQYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLnByb3BzLnBhZ2luYXRpb24ucGFnZVNpemUgPSBuZXdQYWdlU2l6ZTtcbiAgICAgIHRoaXMucHJvcHMucGFnaW5hdGlvbi5wYWdlID0gbmV3UGFnZTtcbiAgICAgIHRoaXMudXBkYXRlRGlzcGxheWVkRGF0YSgpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -20887,9 +20887,16 @@ class DataTableComponent {
20887
20887
  this.emitSelectionChange(checked ? 'select' : 'deselect', row);
20888
20888
  }
20889
20889
  selectSingleRow(row) {
20890
+ const rowId = this.getRowId(row);
20891
+ const wasSelected = this.selectedRows.has(rowId);
20890
20892
  this.selectedRows.clear();
20891
- this.selectedRows.add(this.getRowId(row));
20892
- this.emitSelectionChange('select', row);
20893
+ if (!wasSelected) {
20894
+ this.selectedRows.add(rowId);
20895
+ this.emitSelectionChange('select', row);
20896
+ }
20897
+ else {
20898
+ this.emitSelectionChange('deselect', row);
20899
+ }
20893
20900
  }
20894
20901
  emitSelectionChange(action, changedRow) {
20895
20902
  const selected = this.props.data.filter(row => this.isRowSelected(row));
@@ -21085,8 +21092,7 @@ class DataTableComponent {
21085
21092
  <input
21086
21093
  type="radio"
21087
21094
  [checked]="isRowSelected(row)"
21088
- (change)="selectSingleRow(row)"
21089
- (click)="$event.stopPropagation()"
21095
+ (click)="selectSingleRow(row); $event.stopPropagation()"
21090
21096
  />
21091
21097
  }
21092
21098
  </td>
@@ -21164,8 +21170,7 @@ class DataTableComponent {
21164
21170
  <input
21165
21171
  type="radio"
21166
21172
  [checked]="isRowSelected(row)"
21167
- (change)="selectSingleRow(row)"
21168
- (click)="$event.stopPropagation()"
21173
+ (click)="selectSingleRow(row); $event.stopPropagation()"
21169
21174
  />
21170
21175
  }
21171
21176
  </div>
@@ -21439,8 +21444,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
21439
21444
  <input
21440
21445
  type="radio"
21441
21446
  [checked]="isRowSelected(row)"
21442
- (change)="selectSingleRow(row)"
21443
- (click)="$event.stopPropagation()"
21447
+ (click)="selectSingleRow(row); $event.stopPropagation()"
21444
21448
  />
21445
21449
  }
21446
21450
  </td>
@@ -21518,8 +21522,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
21518
21522
  <input
21519
21523
  type="radio"
21520
21524
  [checked]="isRowSelected(row)"
21521
- (change)="selectSingleRow(row)"
21522
- (click)="$event.stopPropagation()"
21525
+ (click)="selectSingleRow(row); $event.stopPropagation()"
21523
21526
  />
21524
21527
  }
21525
21528
  </div>