ngx-material-entity 18.2.5 → 18.2.6

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.
@@ -613,8 +613,7 @@ export class NgxMatEntityInputComponent {
613
613
  isLoading: false,
614
614
  shouldShowMissingError: this.metadataEntityArray.required(this.entity),
615
615
  selection: new SelectionModel(true, []),
616
- // eslint-disable-next-line typescript/no-misused-promises
617
- clickCell: (entity, dCol) => this.editArrayItem(entity, dCol)
616
+ clickCell: (entity, dCol) => void this.editArrayItem(entity, dCol)
618
617
  }
619
618
  };
620
619
  this.entityArrayTableContext.$implicit.dataSource.data = this.entity[this.propertyKey];
@@ -632,7 +631,15 @@ export class NgxMatEntityInputComponent {
632
631
  hideOmitForCreate: true
633
632
  }
634
633
  };
635
- this.addArrayItemFormContext2 = LodashUtilities.cloneDeep(this.addArrayItemFormContext);
634
+ this.addArrayItemFormContext2 = {
635
+ $implicit: {
636
+ entity: this.arrayItem,
637
+ tabs: EntityUtilities.getEntityTabs(this.arrayItem, this.injector, true),
638
+ inputChangeEvent: () => { },
639
+ hideOmitForCreate: true,
640
+ isReadOnly: () => true
641
+ }
642
+ };
636
643
  this.addArrayItemDialogData = new CreateDataBuilder(this.globalConfig, this.metadataEntityArray.createDialogData)
637
644
  .withDefault('createButtonLabel', this.globalConfig.addLabel)
638
645
  .withDefault('title', this.globalConfig.addArrayItemTitle)
@@ -1145,7 +1152,6 @@ export class NgxMatEntityInputComponent {
1145
1152
  hideOmitForCreate: true
1146
1153
  }
1147
1154
  };
1148
- this.addArrayItemFormContext2 = LodashUtilities.cloneDeep(this.addArrayItemFormContext);
1149
1155
  this.addArrayItemDialogRef = this.dialog.open(this.addArrayItemDialog, {
1150
1156
  minWidth: '60%',
1151
1157
  autoFocus: false,
@@ -1188,7 +1194,7 @@ export class NgxMatEntityInputComponent {
1188
1194
  };
1189
1195
  await this.checkIsArrayItemValid();
1190
1196
  this.emitChange();
1191
- }, 1);
1197
+ }, 150);
1192
1198
  }
1193
1199
  /**
1194
1200
  * Adds the array item defined in the dialog.
@@ -1358,4 +1364,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.7", ngImpor
1358
1364
  type: ViewChild,
1359
1365
  args: ['editHasManyDialog']
1360
1366
  }] } });
1361
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdGVyaWFsLWVudGl0eS9zcmMvY29tcG9uZW50cy9pbnB1dC9pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL2lucHV0L2lucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25LLE9BQU8sRUFBRSxXQUFXLEVBQVcsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxF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QzVCLG9CQUFvQjt3QkFDcEIsMEJBQTBCO3dCQUMxQixhQUFhO3dCQUNiLGVBQWU7cUJBQ2xCOzswQkE0VkksTUFBTTsyQkFBQyxnQ0FBZ0M7OzBCQUV2QyxNQUFNOzJCQUFDLGtDQUFrQztrRUFsVjlDLE1BQU07c0JBREwsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBT3pCLFdBQVc7c0JBRFYsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBT3pCLHlCQUF5QjtzQkFEeEIsS0FBSztnQkFXTixpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBU04sZUFBZTtzQkFEZCxLQUFLO2dCQVNOLFVBQVU7c0JBRFQsS0FBSztnQkFTTixVQUFVO3NCQURULEtBQUs7Z0JBU0csZ0JBQWdCO3NCQUR4QixNQUFNO2dCQVNLLElBQUk7c0JBRGYsU0FBUzt1QkFBQyxPQUFPO2dCQWdCTixTQUFTO3NCQURwQixTQUFTO3VCQUFDLFlBQVk7Z0JBb0VOLGtCQUFrQjtzQkFEbEMsU0FBUzt1QkFBQyxvQkFBb0I7Z0JBSWQsbUJBQW1CO3NCQURuQyxTQUFTO3VCQUFDLHFCQUFxQjtnQkE0RWYsbUJBQW1CO3NCQURuQyxTQUFTO3VCQUFDLHFCQUFxQjtnQkFJZixpQkFBaUI7c0JBRGpDLFNBQVM7dUJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVudmlyb25tZW50SW5qZWN0b3IsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIGluamVjdCwgcnVuSW5JbmplY3Rpb25Db250ZXh0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgTmdNb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEJhZGdlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYmFkZ2UnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dNb2R1bGUsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yLCBNYXRQYWdpbmF0b3JNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgTWF0U29ydCwgTWF0U29ydE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlLCBNYXRUYWJsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IE1hdFRhYnNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBGYUljb25Db21wb25lbnQsIEljb25EZWZpbml0aW9uIH0gZnJvbSAnQGZvcnRhd2Vzb21lL2FuZ3VsYXItZm9udGF3ZXNvbWUnO1xuaW1wb3J0IHsgZmFTZWFyY2ggfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQXJyYXlEYXRlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuL2FycmF5L2FycmF5LWRhdGUtaW5wdXQvYXJyYXktZGF0ZS1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXJyYXlEYXRlUmFuZ2VJbnB1dENvbXBvbmVudCB9IGZyb20gJy4vYXJyYXkvYXJyYXktZGF0ZS1yYW5nZS1pbnB1dC9hcnJheS1kYXRlLXJhbmdlLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBcnJheURhdGVUaW1lSW5wdXRDb21wb25lbnQgfSBmcm9tICcuL2FycmF5L2FycmF5LWRhdGUtdGltZS1pbnB1dC9hcnJheS1kYXRlLXRpbWUtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IEFycmF5U3RyaW5nQXV0b2NvbXBsZXRlQ2hpcHNDb21wb25lbnQgfSBmcm9tICcuL2FycmF5L2FycmF5LXN0cmluZy1hdXRvY29tcGxldGUtY2hpcHMvYXJyYXktc3RyaW5nLWF1dG9jb21wbGV0ZS1jaGlwcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXJyYXlTdHJpbmdDaGlwc0lucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9hcnJheS9hcnJheS1zdHJpbmctY2hpcHMtaW5wdXQvYXJyYXktc3RyaW5nLWNoaXBzLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCb29sZWFuQ2hlY2tib3hJbnB1dENvbXBvbmVudCB9IGZyb20gJy4vYm9vbGVhbi9ib29sZWFuLWNoZWNrYm94LWlucHV0L2Jvb2xlYW4tY2hlY2tib3gtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IEJvb2xlYW5Ecm9wZG93bklucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9ib29sZWFuL2Jvb2xlYW4tZHJvcGRvd24taW5wdXQvYm9vbGVhbi1kcm9wZG93bi1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQm9vbGVhblRvZ2dsZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9ib29sZWFuL2Jvb2xlYW4tdG9nZ2xlLWlucHV0L2Jvb2xlYW4tdG9nZ2xlLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDdXN0b21JbnB1dENvbXBvbmVudCB9IGZyb20gJy4vY3VzdG9tL2N1c3RvbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0ZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9kYXRlL2RhdGUtaW5wdXQvZGF0ZS1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0ZVJhbmdlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuL2RhdGUvZGF0ZS1yYW5nZS1pbnB1dC9kYXRlLXJhbmdlLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlVGltZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9kYXRlL2RhdGUtdGltZS1pbnB1dC9kYXRlLXRpbWUtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IEZpbGVEZWZhdWx0SW5wdXRDb21wb25lbnQgfSBmcm9tICcuL2ZpbGUvZmlsZS1kZWZhdWx0LWlucHV0L2ZpbGUtZGVmYXVsdC1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmlsZUltYWdlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuL2ZpbGUvZmlsZS1pbWFnZS1pbnB1dC9maWxlLWltYWdlLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOdW1iZXJEcm9wZG93bklucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9udW1iZXIvbnVtYmVyLWRyb3Bkb3duLWlucHV0L251bWJlci1kcm9wZG93bi1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTnVtYmVySW5wdXRDb21wb25lbnQgfSBmcm9tICcuL251bWJlci9udW1iZXItaW5wdXQvbnVtYmVyLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOdW1iZXJTbGlkZXJJbnB1dENvbXBvbmVudCB9IGZyb20gJy4vbnVtYmVyL251bWJlci1zbGlkZXItaW5wdXQvbnVtYmVyLXNsaWRlci1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVmZXJlbmNlc01hbnlJbnB1dENvbXBvbmVudCB9IGZyb20gJy4vcmVsYXRpb25zL3JlZmVyZW5jZXMtbWFueS1pbnB1dC9yZWZlcmVuY2VzLW1hbnktaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IFN0cmluZ0F1dG9jb21wbGV0ZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9zdHJpbmcvc3RyaW5nLWF1dG9jb21wbGV0ZS1pbnB1dC9zdHJpbmctYXV0b2NvbXBsZXRlLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdHJpbmdEcm9wZG93bklucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9zdHJpbmcvc3RyaW5nLWRyb3Bkb3duLWlucHV0L3N0cmluZy1kcm9wZG93bi1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3RyaW5nSW5wdXRDb21wb25lbnQgfSBmcm9tICcuL3N0cmluZy9zdHJpbmctaW5wdXQvc3RyaW5nLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdHJpbmdQYXNzd29yZElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9zdHJpbmcvc3RyaW5nLXBhc3N3b3JkLWlucHV0L3N0cmluZy1wYXNzd29yZC1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3RyaW5nVGV4dGJveElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9zdHJpbmcvc3RyaW5nLXRleHRib3gtaW5wdXQvc3RyaW5nLXRleHRib3gtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IEJhc2VFbnRpdHlUeXBlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgRWRpdEFycmF5SXRlbURpYWxvZ0RhdGFJbnRlcm5hbCwgRW50aXR5QXJyYXlEZWNvcmF0b3JDb25maWdJbnRlcm5hbCB9IGZyb20gJy4uLy4uL2RlY29yYXRvcnMvYXJyYXkvYXJyYXktZGVjb3JhdG9yLWludGVybmFsLmRhdGEnO1xuaW1wb3J0IHsgRGVjb3JhdG9yVHlwZXMgfSBmcm9tICcuLi8uLi9kZWNvcmF0b3JzL2Jhc2UvZGVjb3JhdG9yLXR5cGVzLmVudW0nO1xuaW1wb3J0IHsgRHJvcGRvd25WYWx1ZSB9IGZyb20gJy4uLy4uL2RlY29yYXRvcnMvYmFzZS9kcm9wZG93bi12YWx1ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUHJvcGVydHlEZWNvcmF0b3JDb25maWdJbnRlcm5hbCB9IGZyb20gJy4uLy4uL2RlY29yYXRvcnMvYmFzZS9wcm9wZXJ0eS1kZWNvcmF0b3ItaW50ZXJuYWwuZGF0YSc7XG5pbXBvcnQgeyBIYXNNYW55RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgfSBmcm9tICcuLi8uLi9kZWNvcmF0b3JzL2hhcy1tYW55L2hhcy1tYW55LWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IERlZmF1bHRPYmplY3REZWNvcmF0b3JDb25maWdJbnRlcm5hbCwgRHJvcGRvd25PYmplY3REZWNvcmF0b3JDb25maWdJbnRlcm5hbCB9IGZyb20gJy4uLy4uL2RlY29yYXRvcnMvb2JqZWN0L29iamVjdC1kZWNvcmF0b3ItaW50ZXJuYWwuZGF0YSc7XG5pbXBvcnQgeyBSZWZlcmVuY2VzT25lRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgfSBmcm9tICcuLi8uLi9kZWNvcmF0b3JzL3JlZmVyZW5jZXMtb25lL3JlZmVyZW5jZXMtb25lLWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IER5bmFtaWNTdHlsZUNsYXNzRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9keW5hbWljLXN0eWxlLWNsYXNzLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBMb2Rhc2hVdGlsaXRpZXMgfSBmcm9tICcuLi8uLi9lbmNhcHN1bGF0aW9uL2xvZGFzaC51dGlsaXRpZXMnO1xuaW1wb3J0IHsgUmVmbGVjdFV0aWxpdGllcyB9IGZyb20gJy4uLy4uL2VuY2Fwc3VsYXRpb24vcmVmbGVjdC51dGlsaXRpZXMnO1xuaW1wb3J0IHsgVVVJRFV0aWxpdGllcyB9IGZyb20gJy4uLy4uL2VuY2Fwc3VsYXRpb24vdXVpZC51dGlsaXRpZXMnO1xuaW1wb3J0IHsgZGVmYXVsdEZhbHNlIH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zL2RlZmF1bHQtZmFsc2UuZnVuY3Rpb24nO1xuaW1wb3J0IHsgZ2V0Q2hhbmdlc1Rvb2x0aXBDb250ZW50IH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zL2dldC1jaGFuZ2VzLXRvb2x0aXAtY29udGVudC5mdW5jdGlvbic7XG5pbXBvcnQgeyBOR1hfR0VUX1ZBTElEQVRJT05fRVJST1JfTUVTU0FHRSB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucy9nZXQtdmFsaWRhdGlvbi1lcnJvci1tZXNzYWdlLmZ1bmN0aW9uJztcbmltcG9ydCB7IGdldFZhbGlkYXRpb25FcnJvcnNUb29sdGlwQ29udGVudCB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucy9nZXQtdmFsaWRhdGlvbi1lcnJvcnMtdG9vbHRpcC1jb250ZW50LmZ1bmN0aW9uJztcbmltcG9ydCB7IHRhYmxlQ29sdW1uVmFsdWVUb1NvcnRWYWx1ZSB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucy90YWJsZS1jb2x1bW4tdmFsdWUtdG8tc29ydC12YWx1ZS5mdW5jdGlvbic7XG5pbXBvcnQgeyBOR1hfQ09NUExFVEVfR0xPQkFMX0RFRkFVTFRfVkFMVUVTLCBOZ3hHbG9iYWxEZWZhdWx0VmFsdWVzIH0gZnJvbSAnLi4vLi4vZ2xvYmFsLWNvbmZpZ3VyYXRpb24tdmFsdWVzJztcbmltcG9ydCB7IEVudGl0eVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbnRpdHkuc2VydmljZSc7XG5pbXBvcnQgeyBEYXRlVXRpbGl0aWVzIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2RhdGUudXRpbGl0aWVzJztcbmltcG9ydCB7IERpZmZlcmVuY2UsIEVudGl0eVRhYiwgRW50aXR5VXRpbGl0aWVzIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2VudGl0eS51dGlsaXRpZXMnO1xuaW1wb3J0IHsgU2VsZWN0aW9uVXRpbGl0aWVzIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL3NlbGVjdGlvbi51dGlsaXRpZXMnO1xuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9yLCBWYWxpZGF0aW9uVXRpbGl0aWVzIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL3ZhbGlkYXRpb24udXRpbGl0aWVzJztcbmltcG9ydCB7IENvbmZpcm1EaWFsb2dEYXRhQnVpbGRlciwgQ29uZmlybURpYWxvZ0RhdGFJbnRlcm5hbCB9IGZyb20gJy4uL2NvbmZpcm0tZGlhbG9nL2NvbmZpcm0tZGlhbG9nLWRhdGEuYnVpbGRlcic7XG5pbXBvcnQgeyBOZ3hNYXRFbnRpdHlDb25maXJtRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vY29uZmlybS1kaWFsb2cvY29uZmlybS1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IEludGVybmFsQ3VzdG9tVGFibGVDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vY3VzdG9tLXRhYmxlL2N1c3RvbS10YWJsZS1jb25maWd1cmF0aW9uLm1vZGVsJztcbmltcG9ydCB7IENyZWF0ZURhdGFCdWlsZGVyLCBDcmVhdGVEYXRhSW50ZXJuYWwgfSBmcm9tICcuLi90YWJsZS9jcmVhdGUtZGlhbG9nL2NyZWF0ZS1kYXRhLmJ1aWxkZXInO1xuaW1wb3J0IHsgRGlzcGxheUNvbHVtblZhbHVlQ29tcG9uZW50IH0gZnJvbSAnLi4vdGFibGUvZGlzcGxheS1jb2x1bW4tdmFsdWUvZGlzcGxheS1jb2x1bW4tdmFsdWUuY29tcG9uZW50JztcbmltcG9ydCB7IEVkaXRBY3Rpb25JbnRlcm5hbCB9IGZyb20gJy4uL3RhYmxlL2VkaXQtZGlhbG9nL2VkaXQtZGF0YS5idWlsZGVyJztcbmltcG9ydCB7IERpc3BsYXlDb2x1bW4sIER5bmFtaWNTdHlsZUNsYXNzZXMgfSBmcm9tICcuLi90YWJsZS90YWJsZS1kYXRhJztcbmltcG9ydCB7IEJhc2VUYWJsZUFjdGlvbkludGVybmFsLCBUYWJsZUFjdGlvbkludGVybmFsIH0gZnJvbSAnLi4vdGFibGUvdGFibGUtZGF0YS5idWlsZGVyJztcbmltcG9ydCB7IFRvb2x0aXBDb21wb25lbnQgfSBmcm9tICcuLi90b29sdGlwL3Rvb2x0aXAuY29tcG9uZW50JztcblxuLyoqXG4gKiBHZW5lcmljIHR5cGUgZm9yIGNvbnRleHRzIHRoYXQgY2FuIGZpbGwgYW4gaW5saW5lIHRlbXBsYXRlLlxuICovXG50eXBlIFRlbXBsYXRlQ29udGV4dDxUPiA9IHtcbiAgICAvKipcbiAgICAgKiBUaGUgYWN0dWFsIHZhbHVlLiBUaGUgJGltcGxpY2l0IGlzIG5lZWRlZCBzbyB0aGF0IHdlIGRvbid0IG5lZWQgdG8gc3BlY2lmeSBhIGtleSB3aGVuIHdyaXRpbmcgXCJsZXQtY29udGV4dFwiIGluIHRoZSBodG1sIHRlbXBsYXRlLlxuICAgICAqL1xuICAgICRpbXBsaWNpdDogVFxufTtcblxuLyoqXG4gKiBBIGZvcm0gY29udGV4dCB0aGF0IGlzIHVzZWQgdG8gZmlsbCBhbiBpbmxpbmUgdGVtcGxhdGUuXG4gKiBUaGlzIGlzIHVzZWQgdG8gZ28gYXJvdW5kIHRoZSBsaW1pdGF0aW9ucyBvZiBoYXZpbmcgZXZlcnl0aGluZyBpbiB0aGUgc2FtZSBmaWxlIGR1ZSB0byBjaXJjdWxhciBkZXBlbmRlbmNpZXMuXG4gKiBUaGUgZm9ybXMgYXJlIHVzZWQgZm9yIG9iamVjdCwgaGFzTWFueSwgcmVmZXJlbmNlc01hbnkgYW5kIHRoZSBkaWFsb2dzLlxuICovXG50eXBlIEZvcm1Db250ZXh0PEVudGl0eVR5cGUgZXh0ZW5kcyBCYXNlRW50aXR5VHlwZTxFbnRpdHlUeXBlPj4gPSB7XG4gICAgLyoqXG4gICAgICogVGhlIGVudGl0eSB0byBidWlsZCB0aGUgZm9ybSBmb3IuXG4gICAgICovXG4gICAgZW50aXR5OiBFbnRpdHlUeXBlLFxuICAgIC8qKlxuICAgICAqIFRoZSB0YWJzIHRvIGRpc3BsYXkuXG4gICAgICovXG4gICAgdGFiczogRW50aXR5VGFiPEVudGl0eVR5cGU+W10sXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgZWRpdCB2YWx1ZXMgc2hvdWxkIGJlIG9taXR0ZWQuXG4gICAgICovXG4gICAgaGlkZU9taXRGb3JFZGl0PzogYm9vbGVhbixcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCBjcmVhdGUgdmFsdWVzIHNob3VsZCBiZSBvbWl0dGVkLlxuICAgICAqL1xuICAgIGhpZGVPbWl0Rm9yQ3JlYXRlPzogYm9vbGVhbixcbiAgICAvKipcbiAgICAgKiBXaGF0IGhhcHBlbnMgd2hlbiB0aGUgaW5wdXQgY2hhbmdlcy5cbiAgICAgKi9cbiAgICBpbnB1dENoYW5nZUV2ZW50OiAoKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPixcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgaW5wdXQgaXMgcmVhZG9ubHkuXG4gICAgICovXG4gICAgaXNSZWFkT25seT86IChwcm9wZXJ0eTogRW50aXR5VHlwZSwga2V5OiBrZXlvZiBFbnRpdHlUeXBlKSA9PiBib29sZWFuLFxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoZSBpbnB1dCBpcyB2YWxpZCBlbXB0eS5cbiAgICAgKi9cbiAgICB2YWxpZEVtcHR5PzogKCkgPT4gYm9vbGVhblxufTtcblxuLyoqXG4gKiBBIHRhYmxlIGNvbnRleHQgdGhhdCBpcyB1c2VkIHRvIGZpbGwgYW4gaW5saW5lIHRlbXBsYXRlLlxuICogVGhpcyBpcyB1c2VkIHRvIGdvIGFyb3VuZCB0aGUgbGltaXRhdGlvbnMgb2YgaGF2aW5nIGV2ZXJ5dGhpbmcgaW4gdGhlIHNhbWUgZmlsZSBkdWUgdG8gY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICogVGhlIHRhYmxlIGlzIHVzZWQgZm9yIGVudGl0eSBhcnJheSBhbmQgaGFzTWFueS5cbiAqL1xudHlwZSBUYWJsZUNvbnRleHQ8VD4gPSBJbnRlcm5hbEN1c3RvbVRhYmxlQ29uZmlndXJhdGlvbiAmIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBzb3VyY2Ugb2YgdGhlIHRhYmxlLlxuICAgICAqL1xuICAgIGRhdGFTb3VyY2U6IE1hdFRhYmxlRGF0YVNvdXJjZTxUPixcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCBhIGVycm9yIG1lc3NhZ2Ugc2hvdWxkIGJlIHNob3duIHdoZW4gdGhlIHRhYmxlIGlzIGVtcHR5LlxuICAgICAqL1xuICAgIHNob3VsZFNob3dNaXNzaW5nRXJyb3I6IGJvb2xlYW4sXG4gICAgLyoqXG4gICAgICogVGhlIHNlbGVjdGlvbiBvZiB0aGUgdGFibGUuXG4gICAgICovXG4gICAgc2VsZWN0aW9uOiBTZWxlY3Rpb25Nb2RlbDxUPixcbiAgICAvKipcbiAgICAgKiBXaGF0IGhhcHBlbnMgd2hlbiBhIGNlbGwgaXMgY2xpY2tlZC5cbiAgICAgKi9cbiAgICBjbGlja0NlbGw6ICh2YWx1ZTogVCwgZGlzcGxheUNvbHVtbjogRGlzcGxheUNvbHVtbjxUPikgPT4gdm9pZCxcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgZGF0YSBmb3IgdGhlIHRhYmxlIGlzIGN1cnJlbnRseSBiZWluZyBsb2FkZWQuXG4gICAgICovXG4gICAgaXNMb2FkaW5nOiBib29sZWFuLFxuICAgIC8qKlxuICAgICAqIEFsbCBjb2x1bW5zIHRoYXQgc2hvdWxkIGJlIGRpc3BsYXllZC5cbiAgICAgKi9cbiAgICBkaXNwbGF5ZWRDb2x1bW5zOiBzdHJpbmdbXVxufTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBpbnB1dCBjb21wb25lbnQuIEl0IGdldHMgdGhlIG1ldGFkYXRhIG9mIHRoZSBwcm9wZXJ0eSBmcm9tIHRoZSBnaXZlbiBASW5wdXQgXCJlbnRpdHlcIiBhbmQgQElucHV0IFwicHJvcGVydHlLZXlcIlxuICogYW5kIGRpc3BsYXlzIHRoZSBpbnB1dCBmaWVsZCBhY2NvcmRpbmdseS5cbiAqXG4gKiBZb3UgY2FuIGFsc28gZGVmaW5lIGEgbWV0aG9kIHRoYXQgZ2VuZXJhdGVzIGVycm9yLW1lc3NhZ2VzIGFuZCBpZiB0aGUgaW5wdXQgc2hvdWxkIGJlIGhpZGRlbiB3aGVuIGl0cyBtZXRhZGF0YSBzYXlzXG4gKiB0aGF0IGl0IHNob3VsZCBiZSBvbWl0dGVkIGZvciBjcmVhdGluZyBvciB1cGRhdGluZy5cbiAqIFRoZSBsYXN0IHBhcnQgYmVpbmcgbW9zdGx5IHJlbGV2YW50IGlmIHlvdSB3YW50IHRvIHVzZSB0aGlzIGNvbXBvbmVudCBpbnNpZGUgYW4gbmdGb3IuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd4LW1hdC1lbnRpdHktaW5wdXQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vaW5wdXQuY29tcG9uZW50LnNjc3MnLCAnLi4vLi4vc2Nzcy9kaWFsb2ctc3R5bGVzLnNjc3MnLCAnLi4vLi4vc2Nzcy90YWlsd2luZC1jbGFzc2VzLnNjc3MnXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgRGlzcGxheUNvbHVtblZhbHVlQ29tcG9uZW50LFxuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIE1hdFRhYnNNb2R1bGUsXG4gICAgICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICAgICAgTWF0U2VsZWN0TW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgTWF0RGlhbG9nTW9kdWxlLFxuICAgICAgICBNYXRCYWRnZU1vZHVsZSxcbiAgICAgICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgICAgIE1hdE1lbnVNb2R1bGUsXG4gICAgICAgIE1hdFBhZ2luYXRvck1vZHVsZSxcbiAgICAgICAgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLFxuICAgICAgICBNYXRUYWJsZU1vZHVsZSxcbiAgICAgICAgTWF0Q2hlY2tib3hNb2R1bGUsXG4gICAgICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgVG9vbHRpcENvbXBvbmVudCxcbiAgICAgICAgU3RyaW5nSW5wdXRDb21wb25lbnQsXG4gICAgICAgIFN0cmluZ1RleHRib3hJbnB1dENvbXBvbmVudCxcbiAgICAgICAgU3RyaW5nQXV0b2NvbXBsZXRlSW5wdXRDb21wb25lbnQsXG4gICAgICAgIFN0cmluZ0Ryb3Bkb3duSW5wdXRDb21wb25lbnQsXG4gICAgICAgIFN0cmluZ1Bhc3N3b3JkSW5wdXRDb21wb25lbnQsXG4gICAgICAgIEJvb2xlYW5DaGVja2JveElucHV0Q29tcG9uZW50LFxuICAgICAgICBCb29sZWFuVG9nZ2xlSW5wdXRDb21wb25lbnQsXG4gICAgICAgIEJvb2xlYW5Ecm9wZG93bklucHV0Q29tcG9uZW50LFxuICAgICAgICBOdW1iZXJJbnB1dENvbXBvbmVudCxcbiAgICAgICAgTnVtYmVyRHJvcGRvd25JbnB1dENvbXBvbmVudCxcbiAgICAgICAgTnVtYmVyU2xpZGVySW5wdXRDb21wb25lbnQsXG4gICAgICAgIEFycmF5RGF0ZUlucHV0Q29tcG9uZW50LFxuICAgICAgICBBcnJheURhdGVSYW5nZUlucHV0Q29tcG9uZW50LFxuICAgICAgICBBcnJheURhdGVUaW1lSW5wdXRDb21wb25lbnQsXG4gICAgICAgIEFycmF5U3RyaW5nQXV0b2NvbXBsZXRlQ2hpcHNDb21wb25lbnQsXG4gICAgICAgIEFycmF5U3RyaW5nQ2hpcHNJbnB1dENvbXBvbmVudCxcbiAgICAgICAgRGF0ZUlucHV0Q29tcG9uZW50LFxuICAgICAgICBEYXRlUmFuZ2VJbnB1dENvbXBvbmVudCxcbiAgICAgICAgRGF0ZVRpbWVJbnB1dENvbXBvbmVudCxcbiAgICAgICAgRmlsZURlZmF1bHRJbnB1dENvbXBvbmVudCxcbiAgICAgICAgRmlsZUltYWdlSW5wdXRDb21wb25lbnQsXG4gICAgICAgIFJlZmVyZW5jZXNNYW55SW5wdXRDb21wb25lbnQsXG4gICAgICAgIEN1c3RvbUlucHV0Q29tcG9uZW50LFxuICAgICAgICBEeW5hbWljU3R5bGVDbGFzc0RpcmVjdGl2ZSxcbiAgICAgICAgTWF0U29ydE1vZHVsZSxcbiAgICAgICAgRmFJY29uQ29tcG9uZW50XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBOZ3hNYXRFbnRpdHlJbnB1dENvbXBvbmVudDxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgZmFTZWFyY2g6IEljb25EZWZpbml0aW9uID0gZmFTZWFyY2g7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZW50aXR5IG9uIHdoaWNoIHRoZSBwcm9wZXJ0eSBleGlzdHMuIFVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgXCJwcm9wZXJ0eUtleVwiXG4gICAgICogdG8gZGV0ZXJtaW5lIHRoZSBwcm9wZXJ0eSBmb3Igd2hpY2ggdGhlIGlucHV0IHNob3VsZCBiZSBnZW5lcmF0ZWQuXG4gICAgICovXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgICBlbnRpdHkhOiBFbnRpdHlUeXBlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGdlbmVyYXRlIHRoZSBpbnB1dCBmb3IuIFVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgXCJlbnRpdHlcIi5cbiAgICAgKi9cbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICAgIHByb3BlcnR5S2V5IToga2V5b2YgRW50aXR5VHlwZTtcblxuICAgIC8qKlxuICAgICAqIChvcHRpb25hbCkgQSBjdXN0b20gZnVuY3Rpb24gdG8gZ2VuZXJhdGUgdGhlIGVycm9yLW1lc3NhZ2UgZm9yIGludmFsaWQgaW5wdXRzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZT86IChtb2RlbDogTmdNb2RlbCkgPT4gc3RyaW5nO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgaW50ZXJuYWxHZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlITogKG1vZGVsOiBOZ01vZGVsKSA9PiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGhpZGUgYSB2YWx1ZSBpZiBpdCBpcyBvbWl0dGVkIGZvciBjcmVhdGlvbi5cbiAgICAgKiBJcyB1c2VkIGludGVybmFsbHkgZm9yIHRoZSBvYmplY3QgcHJvcGVydHkuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGhpZGVPbWl0Rm9yQ3JlYXRlPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gaGlkZSBhIHZhbHVlIGlmIGl0IGlzIG9taXR0ZWQgZm9yIGVkaXRpbmcuXG4gICAgICogSXMgdXNlZCBpbnRlcm5hbGx5IGZvciB0aGUgb2JqZWN0IHByb3BlcnR5LlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBoaWRlT21pdEZvckVkaXQ/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgYW4gZW1wdHkgdmFsdWUgc2hvdWxkIGJlIHZhbGlkLlxuICAgICAqIElzIHVzZWQgaW50ZXJuYWxseSBmb3IgdGhlIG9iamVjdCBwcm9wZXJ0eS5cbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHZhbGlkRW1wdHk/OiBib29sZWFuOyAvLyBUT0RPXG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgaW5wdXQgc2hvdWxkIGJlIHJlYWRvbmx5LlxuICAgICAqIEluIHRoYXQgY2FzZSBpdCBpcyBkaXNhYmxlZCwgYnV0IG1vc3Qgb2YgdGhlIGRlZmF1bHQgc3R5bGluZyBpcyBvdmVyd3JpdHRlbi5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXNSZWFkT25seT86IGJvb2xlYW47XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBpbnRlcm5hbElzUmVhZE9ubHkhOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgd2hlbiB0aGUgaW5wdXQgdmFsdWUgaGFzIGJlZW4gY2hhbmdlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBpbnB1dENoYW5nZUV2ZW50OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBBIHNldHRlciBmb3IgdGhlIGhhcyBtYW55IGFuZCBhcnJheSBzb3J0LlxuICAgICAqIElzIG5lZWRlZCBiZWNhdXNlIHRoZSBzb3J0IGlzIGluc2lkZSBhIHN3aXRjaCBjYXNlLFxuICAgICAqIHdoaWNoIG1lYW5zIHRoYXQgYXQgbmdPbkluaXQgaXQgY2FuJ3QgYmUgaW5pdGlhbGl6ZWQuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZChNYXRTb3J0KVxuICAgIHByaXZhdGUgc2V0IHNvcnQoc29ydDogTWF0U29ydCkge1xuICAgICAgICBpZiAodGhpcy5oYXNNYW55VGFibGVDb250ZXh0ICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5oYXNNYW55VGFibGVDb250ZXh0LiRpbXBsaWNpdC5kYXRhU291cmNlLnNvcnQgPSB0aGlzLmhhc01hbnlUYWJsZUNvbnRleHQuJGltcGxpY2l0LmRhdGFTb3VyY2Uuc29ydCA/PyBzb3J0O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVudGl0eUFycmF5VGFibGVDb250ZXh0ICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5lbnRpdHlBcnJheVRhYmxlQ29udGV4dC4kaW1wbGljaXQuZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5lbnRpdHlBcnJheVRhYmxlQ29udGV4dC4kaW1wbGljaXQuZGF0YVNvdXJjZS5zb3J0ID8/IHNvcnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNldHRlciBmb3IgdGhlIGhhcyBtYW55IGFuZCBhcnJheSBwYWdpbmF0b3IuXG4gICAgICogSXMgbmVlZGVkIGJlY2F1c2UgdGhlIHBhZ2luYXRvciBpcyBpbnNpZGUgYSBzd2l0Y2ggY2FzZSxcbiAgICAgKiB3aGljaCBtZWFucyB0aGF0IGF0IG5nT25Jbml0IGl0IGNhbid0IGJlIGluaXRpYWxpemVkLlxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yKVxuICAgIHByaXZhdGUgc2V0IHBhZ2luYXRvcihwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcikge1xuICAgICAgICBpZiAodGhpcy5oYXNNYW55VGFibGVDb250ZXh0ICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5oYXNNYW55VGFibGVDb250ZXh0LiRpbXBsaWNpdC5kYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMuaGFzTWFueVRhYmxlQ29udGV4dC4kaW1wbGljaXQuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPz8gcGFnaW5hdG9yO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVudGl0eUFycmF5VGFibGVDb250ZXh0ICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHN0eWxpc3RpYy9tYXgtbGVuXG4gICAgICAgICAgICB0aGlzLmVudGl0eUFycmF5VGFibGVDb250ZXh0LiRpbXBsaWNpdC5kYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMuZW50aXR5QXJyYXlUYWJsZUNvbnRleHQuJGltcGxpY2l0LmRhdGFTb3VyY2UucGFnaW5hdG9yID8/IHBhZ2luYXRvcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBkZWNvcmF0b3IgZm9yIHRoaXMgaW5wdXQuXG4gICAgICovXG4gICAgdHlwZSE6IERlY29yYXRvclR5cGVzO1xuICAgIC8qKlxuICAgICAqIFRoZSBwcm9wZXJ0eSBtZXRhZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBkZWNvcmF0b3IuXG4gICAgICovXG4gICAgbWV0YWRhdGEhOiBQcm9wZXJ0eURlY29yYXRvckNvbmZpZ0ludGVybmFsPHVua25vd24+O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1ldGFkYXRhIG9mIGFuIG9iamVjdCBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBtZXRhZGF0YURlZmF1bHRPYmplY3QhOiBEZWZhdWx0T2JqZWN0RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8RW50aXR5VHlwZT47XG4gICAgLyoqXG4gICAgICogVGhlIGZvcm0gY29udGV4dCBmb3IgYW4gb2JqZWN0IHByb3BlcnR5LlxuICAgICAqL1xuICAgIG9iamVjdEZvcm1Db250ZXh0ITogVGVtcGxhdGVDb250ZXh0PEZvcm1Db250ZXh0PEVudGl0eVR5cGU+PjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtZXRhZGF0YSBvZiBhbiBkcm9wZG93biBvYmplY3QgcHJvcGVydHkuXG4gICAgICovXG4gICAgbWV0YWRhdGFEcm9wZG93bk9iamVjdCE6IERyb3Bkb3duT2JqZWN0RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8RW50aXR5VHlwZT47XG4gICAgLyoqXG4gICAgICogQWxsIHBvc3NpYmxlIGRyb3Bkb3duIHZhbHVlcyBmb3IgdGhlIG9iamVjdCBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBwcml2YXRlIG9iamVjdERyb3Bkb3duVmFsdWVzOiBEcm9wZG93blZhbHVlPEVudGl0eVR5cGUgfCB1bmRlZmluZWQ+W10gPSBbXTtcbiAgICAvKipcbiAgICAgKiBBIHVuaXF1ZSBpbnB1dCBuYW1lIGZvciB0aGUgcmVmZXJlbmNlcyBvbmUgcHJvcGVydHkuXG4gICAgICovXG4gICAgb2JqZWN0RHJvcGRvd25OYW1lITogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEFsbCBjdXJyZW50bHkgc2hvd24gZHJvcGRvd24gdmFsdWVzIGZvciB0aGUgb2JqZWN0IHByb3BlcnR5LlxuICAgICAqL1xuICAgIGZpbHRlcmVkT2JqZWN0RHJvcGRvd25WYWx1ZXM6IERyb3Bkb3duVmFsdWU8RW50aXR5VHlwZSB8IHVuZGVmaW5lZD5bXSA9IFtdO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLXJldHVybnNcbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIG9iamVjdCBhcyBhIGRyb3AgZG93biB2YWx1ZS5cbiAgICAgKi9cbiAgICBnZXQgY3VycmVudE9iamVjdERyb3Bkb3duVmFsdWUoKTogRHJvcGRvd25WYWx1ZTxFbnRpdHlUeXBlIHwgdW5kZWZpbmVkPiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IHZhbHVlOiBEcm9wZG93blZhbHVlPEVudGl0eVR5cGUgfCB1bmRlZmluZWQ+W10gPSBMb2Rhc2hVdGlsaXRpZXMuY2xvbmVEZWVwKHRoaXMub2JqZWN0RHJvcGRvd25WYWx1ZXMgPz8gW10pO1xuICAgICAgICByZXR1cm4gdmFsdWUuZmluZCh2ID0+IExvZGFzaFV0aWxpdGllcy5pc0VxdWFsKHYudmFsdWUsIHRoaXMuZW50aXR5W3RoaXMucHJvcGVydHlLZXldKSk7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLXJldHVybnNcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgY3VycmVudCBvYmplY3QgZHJvcGRvd24gdmFsdWUgc2hvdWxkIGJlIHNob3duIGluIHRoZSBkcm9wZG93bi5cbiAgICAgKi9cbiAgICBnZXQgc2hvdWxkRGlzcGxheUN1cnJlbnRPYmplY3REcm9wZG93blZhbHVlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmN1cnJlbnRPYmplY3REcm9wZG93blZhbHVlXG4gICAgICAgICAgICAmJiAhdGhpcy5maWx0ZXJlZE9iamVjdERyb3Bkb3duVmFsdWVzLmZpbmQodiA9PiBMb2Rhc2hVdGlsaXRpZXMuaXNFcXVhbCh2LnZhbHVlLCB0aGlzLmN1cnJlbnRPYmplY3REcm9wZG93blZhbHVlPy52YWx1ZSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBIGNvbXBhcmVXaXRoIG1ldGhvZCBmb3IgdGhlIHNlbGVjdC5cbiAgICAgKiBVc2VzIGJpbmQuXG4gICAgICovXG4gICAgY29tcGFyZU9iamVjdHNCb3VuZDogKHZhbHVlMT86IEVudGl0eVR5cGUsIHZhbHVlMj86IEVudGl0eVR5cGUpID0+IGJvb2xlYW4gPSB0aGlzLmNvbXBhcmVPYmplY3RzLmJpbmQodGhpcyk7XG5cbiAgICBAVmlld0NoaWxkKCdhZGRBcnJheUl0ZW1EaWFsb2cnKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWRkQXJyYXlJdGVtRGlhbG9nITogVGVtcGxhdGVSZWY8dW5rbm93bj47XG4gICAgcHJpdmF0ZSBhZGRBcnJheUl0ZW1EaWFsb2dSZWYhOiBNYXREaWFsb2dSZWY8dW5rbm93bj47XG4gICAgQFZpZXdDaGlsZCgnZWRpdEFycmF5SXRlbURpYWxvZycpXG4gICAgcHJpdmF0ZSByZWFkb25seSBlZGl0QXJyYXlJdGVtRGlhbG9nITogVGVtcGxhdGVSZWY8dW5rbm93bj47XG4gICAgcHJpdmF0ZSBlZGl0QXJyYXlJdGVtRGlhbG9nUmVmITogTWF0RGlhbG9nUmVmPHVua25vd24+O1xuICAgIC8qKlxuICAgICAqIFRoZSBtZXRhZGF0YSBvZiBhbiBlbnRpdHkgYXJyYXkgcHJvcGVydHkuXG4gICAgICovXG4gICAgbWV0YWRhdGFFbnRpdHlBcnJheSE6IEVudGl0eUFycmF5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8RW50aXR5VHlwZT47XG4gICAgLyoqXG4gICAgICogVGhlIHRhYmxlIGNvbnRleHQgZm9yIHRoZSBlbnRpdHkgYXJyYXkgaW5wdXQuXG4gICAgICovXG4gICAgZW50aXR5QXJyYXlUYWJsZUNvbnRleHQhOiBUZW1wbGF0ZUNvbnRleHQ8VGFibGVDb250ZXh0PEVudGl0eVR5cGU+PjtcbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBhcnJheSBpdGVtIHRvIGJlIGFkZGVkIG9yIHVwZGF0ZWQuXG4gICAgICovXG4gICAgYXJyYXlJdGVtITogRW50aXR5VHlwZTtcbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgaXRlbSBiZWZvcmUgYW55IGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUuIFVzZWQgdG8gY2hlY2sgaWYgdGhlIGZvcm0gaXMgZGlydHkuXG4gICAgICovXG4gICAgYXJyYXlJdGVtUHJpb3JDaGFuZ2VzITogRW50aXR5VHlwZTtcbiAgICAvKipcbiAgICAgKiBUaGUgZm9ybSBjb250ZXh0IGZvciBhZGRpbmcgYW4gYXJyYXkgaXRlbS5cbiAgICAgKi9cbiAgICBhZGRBcnJheUl0ZW1Gb3JtQ29udGV4dCE6IFRlbXBsYXRlQ29udGV4dDxGb3JtQ29udGV4dDxFbnRpdHlUeXBlPj47XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBhZGRBcnJheUl0ZW1Gb3JtQ29udGV4dDIhOiBUZW1wbGF0ZUNvbnRleHQ8Rm9ybUNvbnRleHQ8RW50aXR5VHlwZT4+O1xuICAgIC8qKlxuICAgICAqIFRoZSBmb3JtIGNvbnRleHQgZm9yIGVkaXRpbmcgYW4gYXJyYXkgaXRlbS5cbiAgICAgKi9cbiAgICBlZGl0QXJyYXlJdGVtRm9ybUNvbnRleHQhOiBUZW1wbGF0ZUNvbnRleHQ8Rm9ybUNvbnRleHQ8RW50aXR5VHlwZT4+O1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoZSBhcnJheSBpdGVtIGlzIHZhbGlkLlxuICAgICAqL1xuICAgIGlzQXJyYXlJdGVtVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgYXJyYXkgaXRlbSBpcyBkaXJ0eS5cbiAgICAgKi9cbiAgICBpc0FycmF5SXRlbURpcnR5OiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4IG9mIHRoZSBhcnJheSBpdGVtIHRoYXQgaXMgYmVpbmcgZWRpdGVkLlxuICAgICAqL1xuICAgIHByaXZhdGUgaW5kZXhPZkVkaXRlZEFycmF5SXRlbSE6IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBDb25maWcgZm9yIHRoZSBkaWFsb2cgdGhhdCBhZGRzIGEgbmV3IGFycmF5IGl0ZW0uXG4gICAgICovXG4gICAgYWRkQXJyYXlJdGVtRGlhbG9nRGF0YSE6IENyZWF0ZURhdGFJbnRlcm5hbDtcbiAgICAvKipcbiAgICAgKiBUaGUgdGFicyB0byBkaXNwbGF5IGluc2lkZSB0aGUgZWRpdCBhcnJheSBpdGVtIGRpYWxvZy5cbiAgICAgKi9cbiAgICBlZGl0QXJyYXlJdGVtRGlhbG9nRGF0YSE6IEVkaXRBcnJheUl0ZW1EaWFsb2dEYXRhSW50ZXJuYWw8RW50aXR5VHlwZT47XG4gICAgLyoqXG4gICAgICogQWxsIHZhbGlkYXRpb24gZXJyb3JzIGZvciB0aGUgYXJyYXkgaXRlbS5cbiAgICAgKi9cbiAgICBhcnJheUl0ZW1WYWxpZGF0aW9uRXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JbXSA9IFtdO1xuICAgIC8qKlxuICAgICAqIEFsbCB0aGUgY2hhbmdlcyB0aGF0IGhhdmUgYmVlbiBkb25lIHRvIHRoZSBhcnJheSBpdGVtLlxuICAgICAqL1xuICAgIGFycmF5SXRlbUNoYW5nZXM6IERpZmZlcmVuY2U8RW50aXR5VHlwZT5bXSA9IFtdO1xuICAgIC8qKlxuICAgICAqIFdoYXQgdG8gZGlzcGxheSBpbnNpZGUgdGhlIGFycmF5IGl0ZW0gdG9vbHRpcC5cbiAgICAgKi9cbiAgICBhcnJheUl0ZW1Ub29sdGlwQ29udGVudDogc3RyaW5nID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiBNZXRhZGF0YSBvZiBhIGhhcyBtYW55IHByb3BlcnR5LlxuICAgICAqL1xuICAgIG1ldGFkYXRhSGFzTWFueSE6IEhhc01hbnlEZWNvcmF0b3JDb25maWdJbnRlcm5hbDxFbnRpdHlUeXBlLCBFbnRpdHlUeXBlPjtcbiAgICAvKipcbiAgICAgKiBUaGUgdGFibGUgY29udGV4dCBmb3IgdGhlIGhhcyBtYW55IGlucHV0LlxuICAgICAqL1xuICAgIGhhc01hbnlUYWJsZUNvbnRleHQhOiBUZW1wbGF0ZUNvbnRleHQ8VGFibGVDb250ZXh0PEVudGl0eVR5cGU+PjtcbiAgICAvKipcbiAgICAgKiBUaGUgaGFzIG1hbnkgaW1wb3J0IGFjdGlvbi5cbiAgICAgKi9cbiAgICBoYXNNYW55SW1wb3J0QWN0aW9uITogQmFzZVRhYmxlQWN0aW9uSW50ZXJuYWw7XG4gICAgcHJpdmF0ZSBoYXNNYW55RW50aXR5U2VydmljZSE6IEVudGl0eVNlcnZpY2U8RW50aXR5VHlwZT47XG4gICAgQFZpZXdDaGlsZCgnY3JlYXRlSGFzTWFueURpYWxvZycpXG4gICAgcHJpdmF0ZSByZWFkb25seSBjcmVhdGVIYXNNYW55RGlhbG9nITogVGVtcGxhdGVSZWY8dW5rbm93bj47XG4gICAgcHJpdmF0ZSBjcmVhdGVIYXNNYW55RGlhbG9nUmVmITogTWF0RGlhbG9nUmVmPHVua25vd24+O1xuICAgIEBWaWV3Q2hpbGQoJ2VkaXRIYXNNYW55RGlhbG9nJylcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVkaXRIYXNNYW55RGlhbG9nITogVGVtcGxhdGVSZWY8dW5rbm93bj47XG4gICAgcHJpdmF0ZSBlZGl0SGFzTWFueURpYWxvZ1JlZiE6IE1hdERpYWxvZ1JlZjx1bmtub3duPjtcbiAgICAvKipcbiAgICAgKiBBIHNpbmdsZSBoYXMgbWFueSBlbnRpdHkuXG4gICAgICovXG4gICAgaGFzTWFueUVudGl0eSE6IEVudGl0eVR5cGU7XG4gICAgLyoqXG4gICAgICogVGhlIHNpbmdsZSBoYXMgbWFueSBlbnRpdHkgYmVmb3JlIGFueSBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlLiBJcyB1c2VkIHRvIGRldGVybWluZSBpZiB0aGUgZm9ybSBpcyBkaXJ0eS5cbiAgICAgKi9cbiAgICBoYXNNYW55RW50aXR5UHJpb3JDaGFuZ2VzITogRW50aXR5VHlwZTtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgaGFzIG1hbnkgZW50aXR5IGlzIHZhbGlkLlxuICAgICAqL1xuICAgIGlzSGFzTWFueUVudGl0eVZhbGlkOiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQWxsIHZhbGlkYXRpb24gZXJyb3JzIG9mIHRoZSBoYXMgbWFueSBlbnRpdHkuXG4gICAgICovXG4gICAgaGFzTWFueVZhbGlkYXRpb25FcnJvcnM6IFZhbGlkYXRpb25FcnJvcltdID0gW107XG4gICAgLyoqXG4gICAgICogQWxsIHRoZSBjaGFuZ2VzIHRoYXQgaGF2ZSBiZWVuIGRvbmUgdG8gdGhlIGhhcyBtYW55IGVudGl0eS5cbiAgICAgKi9cbiAgICBoYXNNYW55Q2hhbmdlczogRGlmZmVyZW5jZTxFbnRpdHlUeXBlPltdID0gW107XG4gICAgLyoqXG4gICAgICogV2hhdCB0byBkaXNwbGF5IGluc2lkZSB0aGUgaGFzIG1hbnkgdG9vbHRpcC5cbiAgICAgKi9cbiAgICBoYXNNYW55VG9vbHRpcENvbnRlbnQ6IHN0cmluZyA9ICcnO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoZSBoYXMgbWFueSBlbnRpdHkgaXMgZGlydHkuXG4gICAgICovXG4gICAgaXNIYXNNYW55RW50aXR5RGlydHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgY3VycmVudCB1c2VyIGlzIGFsbG93ZWQgdG8gY3JlYXRlIGEgaGFzIG1hbnkgZW50aXR5LlxuICAgICAqL1xuICAgIGhhc01hbnlBbGxvd0NyZWF0ZSE6IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVGhlIGZvcm0gY29udGV4dCBmb3IgY3JlYXRpbmcgYW4gaGFzIG1hbnkgZW50aXR5LlxuICAgICAqL1xuICAgIGhhc01hbnlDcmVhdGVGb3JtQ29udGV4dCE6IFRlbXBsYXRlQ29udGV4dDxGb3JtQ29udGV4dDxFbnRpdHlUeXBlPj47XG4gICAgLyoqXG4gICAgICogVGhlIGZvcm0gY29udGV4dCBmb3IgZWRpdGluZyBhbiBoYXMgbWFueSBlbnRpdHkuXG4gICAgICovXG4gICAgaGFzTWFueUVkaXRGb3JtQ29udGV4dCE6IFRlbXBsYXRlQ29udGV4dDxGb3JtQ29udGV4dDxFbnRpdHlUeXBlPj47XG4gICAgcHJpdmF0ZSBoYXNNYW55Q3JlYXRlQmFzZVVybCE6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBtZXRhZGF0YSBmb3IgYSByZWZlcmVuY2VzIG9uZSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBtZXRhZGF0YVJlZmVyZW5jZXNPbmUhOiBSZWZlcmVuY2VzT25lRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8RW50aXR5VHlwZT47XG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlcyB0aGF0IGNhbiBiZSBwb3NzaWJseSByZWZlcmVuY2VkLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVmZXJlbmNlc09uZUFsbFJlZmVyZW5jZWRFbnRpdGllcyE6IEVudGl0eVR5cGVbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgcG9zc2libGUgcmVmZXJlbmNlcyBvbmUgZHJvcGRvd24gdmFsdWVzLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVmZXJlbmNlc09uZURyb3Bkb3duVmFsdWVzITogRHJvcGRvd25WYWx1ZTxzdHJpbmc+W107XG4gICAgLyoqXG4gICAgICogVGhlIGZpbHRlcmVkIGRyb3Bkb3duIHZhbHVlcyB0aGF0IGdldCBkaXNwbGF5ZWQgaW4gdGhlIHJlZmVyZW5jZXMgb25lIGRyb3Bkb3duIGlucHV0LlxuICAgICAqL1xuICAgIGZpbHRlcmVkUmVmZXJlbmNlc09uZURyb3Bkb3duVmFsdWVzITogRHJvcGRvd25WYWx1ZTxzdHJpbmc+W107XG4gICAgLyoqXG4gICAgICogQSB1bmlxdWUgaW5wdXQgbmFtZSBmb3IgdGhlIHJlZmVyZW5jZXMgb25lIHByb3BlcnR5LlxuICAgICAqL1xuICAgIHJlZmVyZW5jZXNPbmVOYW1lITogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBmb3JtIGNvbnRleHQgZm9yIGFuIHJlZmVyZW5jZXMgb25lIHByb3BlcnR5LlxuICAgICAqL1xuICAgIHJlZmVyZW5jZXNPbmVGb3JtQ29udGV4dCE6IFRlbXBsYXRlQ29udGV4dDxGb3JtQ29udGV4dDxFbnRpdHlUeXBlPj47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZW51bSBWYWx1ZXMgZm9yIGFsbCB0aGUgZGlmZmVyZW50IERlY29yYXRvclR5cGVzLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IERlY29yYXRvclR5cGVzOiB0eXBlb2YgRGVjb3JhdG9yVHlwZXMgPSBEZWNvcmF0b3JUeXBlcztcbiAgICAvKipcbiAgICAgKiBDb250YWlucyBIZWxwZXJNZXRob2RzIGFyb3VuZCBoYW5kbGluZyBFbnRpdGllcyBhbmQgdGhlaXIgcHJvcGVydHktbWV0YWRhdGEuXG4gICAgICovXG4gICAgRW50aXR5VXRpbGl0aWVzOiB0eXBlb2YgRW50aXR5VXRpbGl0aWVzID0gRW50aXR5VXRpbGl0aWVzO1xuICAgIC8qKlxuICAgICAqIENvbnRhaW5zIEhlbHBlciBGdW5jdGlvbnMgZm9yIGhhbmRsaW5nIGRhdGUgcHJvcGVydGllcy5cbiAgICAgKi9cbiAgICBEYXRlVXRpbGl0aWVzOiB0eXBlb2YgRGF0ZVV0aWxpdGllcyA9IERhdGVVdGlsaXRpZXM7XG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgZnVuY3Rpb25hbGl0eSBhcm91bmQgbWF0ZXJpYWwgc2VsZWN0aW9ucyBpbnNpZGUgb2YgdGFibGVzLlxuICAgICAqL1xuICAgIFNlbGVjdGlvblV0aWxpdGllczogdHlwZW9mIFNlbGVjdGlvblV0aWxpdGllcyA9IFNlbGVjdGlvblV0aWxpdGllcztcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLXJldHVybnNcbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZHJvcGRvd24gdmFsdWUgZm9yIHJlZmVyZW5jZXMgb25lLlxuICAgICAqIElzIG5lZWRlZCBzbyB0aGF0IHRoZSBkcm9wZG93biB2YWx1ZSB3aWxsIHN0aWxsIGJlIGRpc3BsYXllZCxcbiAgICAgKiBldmVuIHdoZW4gdGhlIGZpbHRlciBtZXRob2QgcmVtb3ZlcyB0aGUgdmFsdWUgZnJvbSB0aGUgc2VsZWN0YWJsZSBkcm9wZG93biB2YWx1ZXMuXG4gICAgICovXG4gICAgZ2V0IGN1cnJlbnRSZWZlcmVuY2VzT25lRHJvcGRvd25WYWx1ZSgpOiBEcm9wZG93blZhbHVlPHN0cmluZz4gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gTG9kYXNoVXRpbGl0aWVzLmNsb25lRGVlcCh0aGlzLnJlZmVyZW5jZXNPbmVEcm9wZG93blZhbHVlcyA/PyBbXSlcbiAgICAgICAgICAgIC5maW5kKHYgPT4gdi52YWx1ZSA9PT0gdGhpcy5lbnRpdHlbdGhpcy5wcm9wZXJ0eUtleV0pO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLXJldHVybnNcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHJlZmVyZW5jZXMgb25lIHZhbHVlIHNob3VsZCBiZSBzaG93bixcbiAgICAgKiBhbHRob3VnaCBpdCB3b3VsZCBoYXZlIGJlZW4gZmlsdGVyZWQgb3V0IGJ5IHRoZSBzZWFyY2guXG4gICAgICovXG4gICAgZ2V0IHNob3VsZERpc3BsYXlDdXJyZW50UmVmZXJlbmNlc09uZURyb3Bkb3duVmFsdWUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuY3VycmVudFJlZmVyZW5jZXNPbmVEcm9wZG93blZhbHVlXG4gICAgICAgICAgICAmJiAhdGhpcy5maWx0ZXJlZFJlZmVyZW5jZXNPbmVEcm9wZG93blZhbHVlcy5maW5kKHYgPT4gdi52YWx1ZSA9PT0gdGhpcy5jdXJyZW50UmVmZXJlbmNlc09uZURyb3Bkb3duVmFsdWU/LnZhbHVlKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogRW52aXJvbm1lbnRJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgQEluamVjdChOR1hfR0VUX1ZBTElEQVRJT05fRVJST1JfTUVTU0FHRSlcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlZmF1bHRHZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlOiAobW9kZWw6IE5nTW9kZWwpID0+IHN0cmluZyxcbiAgICAgICAgQEluamVjdChOR1hfQ09NUExFVEVfR0xPQkFMX0RFRkFVTFRfVkFMVUVTKVxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZ2xvYmFsQ29uZmlnOiBOZ3hHbG9iYWxEZWZhdWx0VmFsdWVzLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHA6IEh0dHBDbGllbnRcbiAgICApIHt9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgdGhlIGlucHV0IHdpdGggdGhlIGdpdmVuIGtleSBvbiB0aGUgZ2l2ZW4gcHJvcGVydHkgaXMgcmVhZG9ubHkuXG4gICAgICogQHBhcmFtIHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IG9uIHdoaWNoIHRvIGNoZWNrIHRoZSBpbnB1dC5cbiAgICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleSBmb3IgdGhlIGlucHV0IHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIFdoZXRoZXIgb3Igbm90IHRoZSBpbnB1dCBpcyByZWFkb25seS5cbiAgICAgKi9cbiAgICBpc1Byb3BlcnR5UmVhZE9ubHkocHJvcGVydHk6IEVudGl0eVR5cGUsIGtleToga2V5b2YgRW50aXR5VHlwZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuaW5qZWN0b3IsICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmludGVybmFsSXNSZWFkT25seSB8fCB0aGlzLm1ldGFkYXRhRGVmYXVsdE9iamVjdD8uaXNSZWFkT25seShwcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1ldGFkYXRhOiBQcm9wZXJ0eURlY29yYXRvckNvbmZpZ0ludGVybmFsPHVua25vd24+IHwgdW5kZWZpbmVkID0gRW50aXR5VXRpbGl0aWVzLmdldFByb3BlcnR5TWV0YWRhdGEocHJvcGVydHksIGtleSk7XG4gICAgICAgICAgICBpZiAoIW1ldGFkYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBtZXRhZGF0YSB3YXMgZm91bmQgZm9yIHRoZSBrZXkgXCIke1N0cmluZyhrZXkpfVwiYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbWV0YWRhdGEuaXNSZWFkT25seShwcm9wZXJ0eSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHZhbHVlIHRvIGRpc3BsYXkgaW4gdGhlIGNvbHVtbi5cbiAgICAgKiBSdW5zIGluIGVudmlyb25tZW50IGNvbnRleHQgdG8gZW5hYmxlIGluamVjdGlvbi5cbiAgICAgKiBAcGFyYW0gZW50aXR5IC0gVGhlIGVudGl0eSB0byBnZXQgdGhlIHZhbHVlIGZyb20uXG4gICAgICogQHBhcmFtIGRpc3BsYXlDb2x1bW4gLSBUaGUgZGlzcGxheSBjb2x1bW4gdG8gZ2V0IHRoZSB2YWx1ZSBmcm9tLlxuICAgICAqIEByZXR1cm5zIFRoZSB2YWx1ZSBvZiB0aGUgZGlzcGxheSBjb2x1bW4uXG4gICAgICovXG4gICAgZ2V0RGlzcGxheUNvbHVtblZhbHVlKGVudGl0eTogRW50aXR5VHlwZSwgZGlzcGxheUNvbHVtbjogRGlzcGxheUNvbHVtbjxFbnRpdHlUeXBlPik6IHVua25vd24ge1xuICAgICAgICByZXR1cm4gcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuaW5qZWN0b3IsICgpID0+IGRpc3BsYXlDb2x1bW4udmFsdWUoZW50aXR5KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYSBjZWxsQ2xpY2tlZCBldmVudCB3aGVuIHRoZSBjbGlja2VkIGNvbHVtbiBpcyBlbmFibGVkIGFuZCBjbGlja2luZyBpcyBhbGxvd2VkIGJ5IHRoZSBjb25maWd1cmF0aW9uLlxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSBvZiB0aGUgcm93IHRoYXQgd2FzIGNsaWNrZWQuXG4gICAgICogQHBhcmFtIGRDb2wgLSBUaGUgZGlzcGxheSBjb2x1bW4gb2YgdGhlIHJvdyB0aGF0IHdhcyBjbGlja2VkLlxuICAgICAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIGNvbnRleHQgb2YgdGhlIHRhYmxlIHdoZXJlIHRoZSBjZWxsIHdhcyBjbGlja2VkLlxuICAgICAqL1xuICAgIGNsaWNrQ2VsbDxUPih2YWx1ZTogVCwgZENvbDogRGlzcGxheUNvbHVtbjxUPiwgY29udGV4dDogVGFibGVDb250ZXh0PFQ+KTogdm9pZCB7XG4gICAgICAgIGlmIChkQ29sLmRpc2FibGVDbGljayA9PSB0cnVlIHx8ICFjb250ZXh0LmFsbG93Q2xpY2sodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29udGV4dC5jbGlja0NlbGwodmFsdWUsIGRDb2wpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmludGVybmFsR2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZSA/PyB0aGlzLmRlZmF1bHRHZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlO1xuICAgICAgICB0aGlzLmludGVybmFsSXNSZWFkT25seSA9IHRoaXMuaXNSZWFkT25seSA/PyBmYWxzZTtcblxuICAgICAgICBjb25zdCBmb3VuZFR5cGU6IERlY29yYXRvclR5cGVzIHwgdW5kZWZpbmVkID0gRW50aXR5VXRpbGl0aWVzLmdldFByb3BlcnR5VHlwZSh0aGlzLmVudGl0eSwgdGhpcy5wcm9wZXJ0eUtleSk7XG4gICAgICAgIGlmIChmb3VuZFR5cGUgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHR5cGUgd2FzIGZvdW5kIGZvciB0aGUga2V5IFwiJHtTdHJpbmcodGhpcy5wcm9wZXJ0eUtleSl9XCJgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnR5cGUgPSBmb3VuZFR5cGU7XG4gICAgICAgIGlmICh0aGlzLnZhbGlkRW1wdHkgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRNZXRhZGF0YTogUHJvcGVydHlEZWNvcmF0b3JDb25maWdJbnRlcm5hbDx1bmtub3duPiA9IFJlZmxlY3RVdGlsaXRpZXMuZ2V0TWV0YWRhdGEoXG4gICAgICAgICAgICAgICAgJ21ldGFkYXRhJyxcbiAgICAgICAgICAgICAgICB0aGlzLmVudGl0eSxcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BlcnR5S2V5XG4gICAgICAgICAgICApIGFzIFByb3BlcnR5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8dW5rbm93bj47XG4gICAgICAgICAgICBSZWZsZWN0VXRpbGl0aWVzLmRlZmluZU1ldGFkYXRhKCdtZXRhZGF0YScsIHsgLi4uY3VycmVudE1ldGFkYXRhLCByZXF1aXJlZDogZGVmYXVsdEZhbHNlIH0sIHRoaXMuZW50aXR5LCB0aGlzLnByb3BlcnR5S2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZvdW5kTWV0YWRhdGE6IFByb3BlcnR5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8dW5rbm93bj4gfCB1bmRlZmluZWQgPSBFbnRpdHlVdGlsaXRpZXMuZ2V0UHJvcGVydHlNZXRhZGF0YShcbiAgICAgICAgICAgIHRoaXMuZW50aXR5LFxuICAgICAgICAgICAgdGhpcy5wcm9wZXJ0eUtleSxcbiAgICAgICAgICAgIHRoaXMudHlwZVxuICAgICAgICApO1xuICAgICAgICBpZiAoIWZvdW5kTWV0YWRhdGEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gbWV0YWRhdGEgd2FzIGZvdW5kIGZvciB0aGUga2V5IFwiJHtTdHJpbmcodGhpcy5wcm9wZXJ0eUtleSl9XCJgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1ldGFkYXRhID0gZm91bmRNZXRhZGF0YTtcblxuICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5PQkpFQ1RfRFJPUERPV046IHtcbiAgICAgICAgICAgICAgICB2b2lkIHRoaXMuaW5pdERyb3Bkb3duT2JqZWN0SW5wdXQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuT0JKRUNUOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0T2JqZWN0SW5wdXQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuQVJSQVk6IHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRFbnRpdHlBcnJheSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5IQVNfTUFOWToge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdEhhc01hbnkoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuUkVGRVJFTkNFU19PTkU6IHtcbiAgICAgICAgICAgICAgICB2b2lkIHRoaXMuaW5pdFJlZmVyZW5jZXNPbmUoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgaW5pdFJlZmVyZW5jZXNPbmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMubWV0YWRhdGFSZWZlcmVuY2VzT25lID0gdGhpcy5tZXRhZGF0YSBhcyBSZWZlcmVuY2VzT25lRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8RW50aXR5VHlwZT47XG4gICAgICAgIHRoaXMucmVmZXJlbmNlc09uZU5hbWUgPSB0aGlzLnByb3BlcnR5S2V5LnRvU3RyaW5nKCkgKyAnaW5wdXQnICsgVVVJRFV0aWxpdGllcy5jcmVhdGUoKTtcblxuICAgICAgICBhd2FpdCBydW5JbkluamVjdGlvbkNvbnRleHQoXG4gICAgICAgICAgICB0aGlzLmluamVjdG9yLFxuICAgICAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVmZXJlbmNlc09uZUFsbFJlZmVyZW5jZWRFbnRpdGllcyA9IGF3YWl0IHRoaXMubWV0YWRhdGFSZWZlcmVuY2VzT25lLmdldFJlZmVyZW5jZWRFbnRpdGllcygpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVmZXJlbmNlc09uZURyb3Bkb3duVmFsdWVzID0gdGhpcy5tZXRhZGF0YVJlZmVyZW5jZXNPbmUuZ2V0RHJvcGRvd25WYWx1ZXMoXG4gICAgICAgICAgICAgICAgICAgIExvZGFzaFV0aWxpdGllcy5jbG9uZURlZXAodGhpcy5yZWZlcmVuY2VzT25lQWxsUmVmZXJlbmNlZEVudGl0aWVzKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJlZFJlZmVyZW5jZXNPbmVEcm9wZG93blZhbHVlcyA9IExvZGFzaFV0aWxpdGllcy5jbG9uZURlZXAodGhpcy5yZWZlcmVuY2VzT25lRHJvcGRvd25WYWx1ZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmVmZXJlbmNlc09uZU9iamVjdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbHRlcnMgdGhlIHJlZmVyZW5jZXMgb25lIGRyb3Bkb3duIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0gc2VhcmNoSW5wdXQgLSBUaGUgc2VhcmNoIGlucHV0IHRvIGZpbHRlciBmb3IuXG4gICAgICovXG4gICAgZmlsdGVyUmVmZXJlbmNlc09uZVZhbHVlcyhzZWFyY2hJbnB1dDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZpbHRlcjogc3RyaW5nID0gc2VhcmNoSW5wdXQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJlZFJlZmVyZW5jZXNPbmVEcm9wZG93blZhbHVlcyA9IExvZGFzaFV0aWxpdGllcy5jbG9uZURlZXAodGhpcy5yZWZlcmVuY2VzT25lRHJvcGRvd25WYWx1ZXMpLmZpbHRlcihvcHRpb24gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi5kaXNwbGF5TmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlcikgfHwgb3B0aW9uLnZhbHVlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0SGFzTWFueSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tZXRhZGF0YSA9IG5ldyBIYXNNYW55RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwoXG4gICAgICAgICAgICB0aGlzLm1ldGFkYXRhIGFzIEhhc01hbnlEZWNvcmF0b3JDb25maWdJbnRlcm5hbDxFbnRpdHlUeXBlLCBFbnRpdHlUeXBlPixcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsQ29uZmlnXG4gICAgICAgICk7XG4gICAgICAgIFJlZmxlY3RVdGlsaXRpZXMuZGVmaW5lTWV0YWRhdGEoJ21ldGFkYXRhJywgdGhpcy5tZXRhZGF0YSwgdGhpcy5lbnRpdHksIHRoaXMucHJvcGVydHlLZXkpO1xuICAgICAgICB0aGlzLm1ldGFkYXRhSGFzTWFueSA9IHRoaXMubWV0YWRhdGEgYXMgSGFzTWFueURlY29yYXRvckNvbmZpZ0ludGVybmFsPEVudGl0eVR5cGUsIEVudGl0eVR5cGU+O1xuICAgICAgICB0aGlzLmhhc01hbnlJbXBvcnRBY3Rpb24gPSBuZXcgQmFzZVRhYmxlQWN0aW9uSW50ZXJuYWwoe1xuICAgICAgICAgICAgLi4udGhpcy5tZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLmltcG9ydEFjdGlvbkRhdGEsXG4gICAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuc3RhcnRJbXBvcnRKc29uKClcbiAgICAgICAgfSwgdGhpcy5nbG9iYWxDb25maWcpO1xuXG4gICAgICAgIHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLmluamVjdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhc01hbnlBbGxvd0NyZWF0ZSA9IHRoaXMubWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5iYXNlRGF0YS5hbGxvd0NyZWF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5oYXNNYW55RW50aXR5U2VydmljZSA9IGluamVjdDxFbnRpdHlTZXJ2aWNlPEVudGl0eVR5cGU+Pih0aGlzLm1ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuYmFzZURhdGEuRW50aXR5U2VydmljZUNsYXNzKTtcbiAgICAgICAgICAgIHRoaXMuaGFzTWFueUNyZWF0ZUJhc2VVcmwgPSB0aGlzLm1ldGFkYXRhSGFzTWFueS5jcmVhdGVCYXNlVXJsKHRoaXMuZW50aXR5LCB0aGlzLm1ldGFkYXRhSGFzTWFueSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGdpdmVuRGlzcGxheUNvbHVtbnM6IHN0cmluZ1tdID0gdGhpcy5tZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLmRpc3BsYXlDb2x1bW5zLm1hcCgodikgPT4gdi5kaXNwbGF5TmFtZSk7XG4gICAgICAgIGlmIChnaXZlbkRpc3BsYXlDb2x1bW5zLmZpbmQocyA9PiBzID09PSAnc2VsZWN0JykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgVGhlIG5hbWUgXCJzZWxlY3RcIiBmb3IgYSBkaXNwbGF5IGNvbHVtbiBpcyByZXNlcnZlZC5cbiAgICAgICAgICAgICAgICBQbGVhc2UgY2hvb3NlIGEgZGlmZmVyZW50IG5hbWUuYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhc01hbnlUYWJsZUNvbnRleHQgPSB7XG4gICAgICAgICAgICAkaW1wbGljaXQ6IHtcbiAgICAgICAgICAgICAgICAuLi5uZXcgSW50ZXJuYWxDdXN0b21UYWJsZUNvbmZpZ3VyYXRpb24oXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2xvYmFsQ29uZmlnLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5Q29sdW1uczogdGhpcy5tZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLmRpc3BsYXlDb2x1bW5zIGFzIERpc3BsYXlDb2x1bW48dW5rbm93bj5bXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhTZWxlY3Rpb246ICF0aGlzLmludGVybmFsSXNSZWFkT25seSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzdHlsaXN0aWMvbWF4LWxlblxuICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1pY1Jvd1N0eWxlQ2xhc3NlczogdGhpcy5tZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLmR5bmFtaWNSb3dTdHlsZUNsYXNzZXMgYXMgRHluYW1pY1N0eWxlQ2xhc3Nlczx1bmtub3duPixcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93Q2xpY2s6ICgoZW50aXR5OiBFbnRpdHlUeXBlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5iYXNlRGF0YS5hbGxvd1JlYWQoZW50aXR5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0aGlzLm1ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuYmFzZURhdGEuYWxsb3dVcGRhdGUoZW50aXR5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pIGFzICh2YWx1ZTogdW5rbm93bikgPT4gYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlMb2FkaW5nU3Bpbm5lcjogdGhpcy5tZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLmRpc3BsYXlMb2FkaW5nU3Bpbm5lcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFN0cmluZ0ZvclJvdzogdGhpcy5tZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLnNlYXJjaFN0cmluZyBhcyAodmFsdWU6IHVua25vd24pID0+IHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBkaXNwbGF5ZWRDb2x1bW5zOiAhdGhpcy5tZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLnRhYmxlQWN0aW9ucy5maWx0ZXIodEEgPT4gdEEudHlwZSA9PT0gJ211bHRpLXNlbGVjdCcpLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICA/IGdpdmVuRGlzcGxheUNvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgOiBbJ3NlbGVjdCddLmNvbmNhdChnaXZlbkRpc3BsYXlDb2x1bW5zKSxcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlOiBuZXcgTWF0VGFibGVEYXRhU291cmNlKCksXG4gICAgICAgICAgICAgICAgaXNMb2FkaW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNob3VsZFNob3dNaXNzaW5nRXJyb3I6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogbmV3IFNlbGVjdGlvbk1vZGVsPEVudGl0eVR5cGU+KHRydWUsIFtdKSxcbiAgICAgICAgICAgICAgICBjbGlja0NlbGw6IChlbnRpdHksIGRDb2wpID0+IHRoaXMuZWRpdEhhc01hbnlFbnRpdHkoZW50aXR5LCBkQ29sKVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFzTWFueVRhYmxlQ29udGV4dC4kaW1wbGljaXQuZGF0YVNvdXJjZS5zb3J0aW5nRGF0YUFjY2Vzc29yID0gKGVudGl0eTogRW50aXR5VHlwZSwgaGVhZGVyOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5pbmplY3RvciwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3BsYXlDb2x1bW46IERpc3BsYXlDb2x1bW48RW50aXR5VHlwZT4gPSB0aGlzLm1ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuYmFzZURhdGEuZGlzcGxheUNvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgLmZpbmQoKGRwKSA9PiBkcC5kaXNwbGF5TmFtZSA9PT0gaGVhZGVyKSBhcyBEaXNwbGF5Q29sdW1uPEVudGl0eVR5cGU+O1xuICAgICAgICAgICAgICAgIHJldHVybiB0YWJsZUNvbHVtblZhbHVlVG9Tb3J0VmFsdWUoZGlzcGxheUNvbHVtbi52YWx1ZShlbnRpdHkpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmhhc01hbnlUYWJsZUNvbnRleHQuJGltcGxpY2l0LmRhdGFTb3VyY2UuZmlsdGVyUHJlZGljYXRlID0gKGVudGl0eTogRW50aXR5VHlwZSwgZmlsdGVyOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlYXJjaFN0cjogc3RyaW5nID0gdGhpcy5tZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLnNlYXJjaFN0cmluZyhlbnRpdHkpO1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkU2VhcmNoU3RyaW5nOiBzdHJpbmcgPSBzZWFyY2hTdHIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZEZpbHRlclN0cmluZzogc3RyaW5nID0gZmlsdGVyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkU2VhcmNoU3RyaW5nLmluY2x1ZGVzKGZvcm1hdHRlZEZpbHRlclN0cmluZyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYXNNYW55RW50aXR5U2VydmljZS5lbnRpdGllc1N1YmplY3Quc3Vic2NyaWJlKChlbnRpdGllcykgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYXNNYW55VGFibGVDb250ZXh0LiRpbXBsaWNpdC5kYXRhU291cmNlLmRhdGEgPSBlbnRpdGllcztcbiAgICAgICAgICAgIHRoaXMuaGFzTWFueVRhYmxlQ29udGV4dC4kaW1wbGljaXQuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB2b2lkIHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLmluamVjdG9yLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZWFkQmFzZVVybDogc3RyaW5nID0gdGhpcy5tZXRhZGF0YUhhc01hbnkucmVhZEJhc2VVcmwodGhpcy5lbnRpdHksIHRoaXMubWV0YWRhdGFIYXNNYW55KTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFzTWFueUVudGl0eVNlcnZpY2UucmVhZChyZWFkQmFzZVVybCk7XG4gICAgICAgICAgICB0aGlzLmhhc01hbnlUYWJsZUNvbnRleHQuJGltcGxpY2l0LmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRFbnRpdHlBcnJheSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tZXRhZGF0YSA9IG5ldyBFbnRpdHlBcnJheURlY29yYXRvckNvbmZpZ0ludGVybmFsKFxuICAgICAgICAgICAgdGhpcy5tZXRhZGF0YSBhcyBFbnRpdHlBcnJheURlY29yYXRvckNvbmZpZ0ludGVybmFsPEVudGl0eVR5cGU+LFxuICAgICAgICAgICAgdGhpcy5nbG9iYWxDb25maWdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5tZXRhZGF0YUVudGl0eUFycmF5ID0gdGhpcy5tZXRhZGF0YSBhcyBFbnRpdHlBcnJheURlY29yYXRvckNvbmZpZ0ludGVybmFsPEVudGl0eVR5cGU+O1xuICAgICAgICBpZiAodGhpcy5lbnRpdHlbdGhpcy5wcm9wZXJ0eUtleV0gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAodGhpcy5lbnRpdHlbdGhpcy5wcm9wZXJ0eUtleV0gYXMgRW50aXR5VHlwZVtdKSA9IFtdO1xuICAgICAgICAgICAgUmVmbGVjdFV0aWxpdGllcy5kZWZpbmVNZXRhZGF0YSgnbWV0YWRhdGEnLCB0aGlzLm1ldGFkYXRhLCB0aGlzLmVudGl0eSwgdGhpcy5wcm9wZXJ0eUtleSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLm1ldGFkYXRhRW50aXR5QXJyYXkuY3JlYXRlSW5saW5lICYmICF0aGlzLm1ldGFkYXRhRW50aXR5QXJyYXkuY3JlYXRlRGlhbG9nRGF0YSkge1xuICAgICAgICAgICAgdGhpcy5tZXRhZGF0YUVudGl0eUFycmF5LmNyZWF0ZURpYWxvZ0RhdGEgPSB7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICdBZGQnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGdpdmVuRGlzcGxheUNvbHVtbnM6IHN0cmluZ1tdID0gdGhpcy5tZXRhZGF0YUVudGl0eUFycmF5LmRpc3BsYXlDb2x1bW5zLm1hcCgodikgPT4gdi5kaXNwbGF5TmFtZSk7XG4gICAgICAgIGlmIChnaXZlbkRpc3BsYXlDb2x1bW5zLmZpbmQocyA9PiBzID09PSAnc2VsZWN0JykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgVGhlIG5hbWUgXCJzZWxlY3RcIiBmb3IgYSBkaXNwbGF5IGNvbHVtbiBpcyByZXNlcnZlZC5cbiAgICAgICAgICAgICAgICBQbGVhc2UgY2hvb3NlIGEgZGlmZmVyZW50IG5hbWUuYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVudGl0eUFycmF5VGFibGVDb250ZXh0ID0ge1xuICAgICAgICAgICAgJGltcGxpY2l0OiB7XG4gICAgICAgICAgICAgICAgLi4ubmV3IEludGVybmFsQ3VzdG9tVGFibGVDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdsb2JhbENvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUNvbHVtbnM6IHRoaXMubWV0YWRhdGFFbnRpdHlBcnJheS5kaXNwbGF5Q29sdW1ucyBhcyBEaXNwbGF5Q29sdW1uPHVua25vd24+W10sXG4gICAgICAgICAgICAgICAgICAgICAgICB3aXRoU2VsZWN0aW9uOiAhdGhpcy5pbnRlcm5hbElzUmVhZE9ubHksXG4gICAgICAgICAgICAgICAgICAgICAgICBkeW5hbWljUm93U3R5bGVDbGFzc2VzOiB0aGlzLm1ldGFkYXRhRW50aXR5QXJyYXkuZHluYW1pY1Jvd1N0eWxlQ2xhc3NlcyBhcyBEeW5hbWljU3R5bGVDbGFzc2VzPHVua25vd24+LFxuICAgICAgICAgICAgICAgICAgICAgICAgZW1wdHlFcnJvck1lc3NhZ2U6IHRoaXMubWV0YWRhdGFFbnRpdHlBcnJheS5taXNzaW5nRXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGRpc3BsYXllZENvbHVtbnM6IHRoaXMuaW50ZXJuYWxJc1JlYWRPbmx5ID8gZ2l2ZW5EaXNwbGF5Q29sdW1ucyA6IFsnc2VsZWN0J10uY29uY2F0KGdpdmVuRGlzcGxheUNvbHVtbnMpLFxuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2U6IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UoKSxcbiAgICAgICAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNob3VsZFNob3dNaXNzaW5nRXJyb3I6IHRoaXMubWV0YWRhdGFFbnRpdHlBcnJheS5yZXF1aXJlZCh0aGlzLmVudGl0eSksXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBuZXcgU2VsZWN0aW9uTW9kZWw8RW50aXR5VHlwZT4odHJ1ZSwgW10pLFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB0eXBlc2NyaXB0L25vLW1pc3VzZWQtcHJvbWlzZXNcbiAgICAgICAgICAgICAgICBjbGlja0NlbGw6IChlbnRpdHksIGRDb2wpID0+IHRoaXMuZWRpdEFycmF5SXRlbShlbnRpdHksIGRDb2wpXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZW50aXR5QXJyYXlUYWJsZUNvbnRleHQuJGltcGxpY2l0LmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZW50aXR5W3RoaXMucHJvcGVydHlLZXldIGFzIEVudGl0eVR5cGVbXTtcblxuICAgICAgICB0aGlzLmFycmF5SXRlbSA9IG5ldyB0aGlzLm1ldGFkYXRhRW50aXR5QXJyYXkuRW50aXR5Q2xhc3MoKTtcbiAgICAgICAgdGhpcy5hcnJheUl0ZW1QcmlvckNoYW5nZXMgPSBMb2Rhc2hVdGlsaXRpZXMuY2xvbmVEZWVwKHRoaXMuYXJyYXlJdGVtKTtcbiAgICAgICAgRW50aXR5VXRpbGl0aWVzLnNldERlZmF1bHRWYWx1ZXModGhpcy5hcnJheUl0ZW0pO1xuXG4gICAgICAgIHRoaXMuYWRkQXJyYXlJdGVtRm9ybUNvbnRleHQgPSB7XG4gICAgICAgICAgICAkaW1wbGljaXQ6IHtcbiAgICAgICAgICAgICAgICBlbnRpdHk6IHRoaXMuYXJyYXlJdGVtLFxuICAgICAgICAgICAgICAgIHRhYnM6IEVudGl0eVV0aWxpdGllcy5nZXRFbnRpdHlUYWJzKHRoaXMuYXJyYXlJdGVtLCB0aGlzLmluamVjdG9yLCB0cnVlKSxcbiAgICAgICAgICAgICAgICBpbnB1dENoYW5nZUV2ZW50OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZvaWQgdGhpcy5jaGVja0lzQXJyYXlJdGVtVmFsaWQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRBcnJheUl0ZW1Gb3JtQ29udGV4dC4kaW1wbGljaXQudGFicyA9IEVudGl0eVV0aWxpdGllcy5nZXRFbnRpdHlUYWJzKHRoaXMuYXJyYXlJdGVtLCB0aGlzLmluamVjdG9yLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGhpZGVPbWl0Rm9yQ3JlYXRlOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuYWRkQXJyYXlJdGVtRm9ybUNvbnRleHQyID0gTG9kYXNoVXRpbGl0aWVzLmNsb25lRGVlcCh0aGlzLmFkZEFycmF5SXRlbUZvcm1Db250ZXh0KTtcbiAgICAgICAgdGhpcy5hZGRBcnJheUl0ZW1EaWFsb2dEYXRhID0gbmV3IENyZWF0ZURhdGFCdWlsZGVyKHRoaXMuZ2xvYmFsQ29uZmlnLCB0aGlzLm1ldGFkYXRhRW50aXR5QXJyYXkuY3JlYXRlRGlhbG9nRGF0YSlcbiAgICAgICAgICAgIC53aXRoRGVmYXVsdCgnY3JlYXRlQnV0dG9uTGFiZWwnLCB0aGlzLmdsb2JhbENvbmZpZy5hZGRMYWJlbClcbiAgICAgICAgICAgIC53aXRoRGVmYXVsdCgndGl0bGUnLCB0aGlzLmdsb2JhbENvbmZpZy5hZGRBcnJheUl0ZW1UaXRsZSlcbiAgICAgICAgICAgIC5nZXRSZXN1bHQoKTtcblxuICAgICAgICB0aGlzLmVkaXRBcnJheUl0ZW1EaWFsb2dEYXRhID0gdGhpcy5tZXRhZGF0YUVudGl0eUFycmF5LmVkaXREaWFsb2dEYXRhO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgaW5pdERyb3Bkb3duT2JqZWN0SW5wdXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMubWV0YWRhdGFEcm9wZG93bk9iamVjdCA9IHRoaXMubWV0YWRhdGEgYXMgRHJvcGRvd25PYmplY3REZWNvcmF0b3JDb25maWdJbnRlcm5hbDxFbnRpdHlUeXBlPjtcbiAgICAgICAgdGhpcy5vYmplY3REcm9wZG93bk5hbWUgPSB0aGlzLnByb3BlcnR5S2V5LnRvU3RyaW5nKCkgKyAnaW5wdXQnICsgVVVJRFV0aWxpdGllcy5jcmVhdGUoKTtcblxuICAgICAgICBhd2FpdCBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5pbmplY3RvciwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vYmplY3REcm9wZG93blZhbHVlcyA9IGF3YWl0IHRoaXMubWV0YWRhdGFEcm9wZG93bk9iamVjdC5kcm9wZG93blZhbHVlcyh0aGlzLmVudGl0eSk7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkT2JqZWN0RHJvcGRvd25WYWx1ZXMgPSBMb2Rhc2hVdGlsaXRpZXMuY2xvbmVEZWVwKHRoaXMub2JqZWN0RHJvcGRvd25WYWx1ZXMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRPYmplY3RJbnB1dCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tZXRhZGF0YURlZmF1bHRPYmplY3QgPSB0aGlzLm1ldGFkYXRhIGFzIERlZmF1bHRPYmplY3REZWNvcmF0b3JDb25maWdJbnRlcm5hbDxFbnRpdHlUeXBlPjtcbiAgICAgICAgY29uc3Qgb2JqZWN0UHJvcGVydHk6IEVudGl0eVR5cGUgPSB0aGlzLmVudGl0eVt0aGlzLnByb3BlcnR5S2V5XSBhcyBFbnRpdHlUeXBlO1xuICAgICAgICBjb25zdCBvYmplY3RQcm9wZXJ0eVRhYnM6IEVudGl0eVRhYjxFbnRpdHlUeXBlPltdID0gRW50aXR5VXRpbGl0aWVzLmdldEVudGl0eVRhYnMoXG4gICAgICAgICAgICBvYmplY3RQcm9wZXJ0eSxcbiAgICAgICAgICAgIHRoaXMuaW5qZWN0b3IsXG4gICAgICAgICAgICB0aGlzLmhpZGVPbWl0Rm9yQ3JlYXRlLFxuICAgICAgICAgICAgdGhpcy5oaWRlT21pdEZvckVkaXQsXG4gICAgICAgICAgICB0aGlzLm1ldGFkYXRhRGVmYXVsdE9iamVjdC5vbWl0XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMub2JqZWN0Rm9ybUNvbnRleHQgPSB7XG4gICAgICAgICAgICAkaW1wbGljaXQ6IHtcbiAgICAgICAgICAgICAgICBlbnRpdHk6IG9iamVjdFByb3BlcnR5LFxuICAgICAgICAgICAgICAgIHRhYnM6IG9iamVjdFByb3BlcnR5VGFicyxcbiAgICAgICAgICAgICAgICBoaWRlT21pdEZvckNyZWF0ZTogdGhpcy5oaWRlT21pdEZvckNyZWF0ZSxcbiAgICAgICAgICAgICAgICBoaWRlT21pdEZvckVkaXQ6IHRoaXMuaGlkZU9taXRGb3JFZGl0LFxuICAgICAgICAgICAgICAgIGlzUmVhZE9ubHk6IChwcm9wZXJ0eSwga2V5KSA9PiB0aGlzLmlzUHJvcGVydHlSZWFkT25seShwcm9wZXJ0eSwga2V5KSxcbiAgICAgICAgICAgICAgICBpbnB1dENoYW5nZUV2ZW50OiAoKSA9PiB0aGlzLmVtaXRDaGFuZ2UoKSxcbiAgICAgICAgICAgICAgICB2YWxpZEVtcHR5OiAoKSA9PiAhdGhpcy5tZXRhZGF0YS5yZXF1aXJlZCh0aGlzLmVudGl0eSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0SW1wb3J0SnNvbigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICBpbnB1dC50eXBlID0gJ2ZpbGUnO1xuICAgICAgICBpbnB1dC5hY2NlcHQgPSAnYXBwbGljYXRpb24vanNvbic7XG4gICAgICAgIGlucHV0Lm9uY2hhbmdlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlucHV0LmZpbGVzKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5pbXBvcnRKc29uKGlucHV0LmZpbGVzWzBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaW5wdXQuY2xpY2soKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGltcG9ydEpzb24oZmlsZTogRmlsZSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc3R5bGlzdGljL21heC1sZW5cbiAgICAgICAgY29uc3QgZGlhbG9nRGF0YTogQ29uZmlybURpYWxvZ0RhdGFJbnRlcm5hbCA9IG5ldyBDb25maXJtRGlhbG9nRGF0YUJ1aWxkZXIodGhpcy5nbG9iYWxDb25maWcsIHRoaXMuaGFzTWFueUltcG9ydEFjdGlvbi5jb25maXJtRGlhbG9nRGF0YSlcbiAgICAgICAgICAgIC53aXRoRGVmYXVsdCgndGV4dCcsIHRoaXMubWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5iYXNlRGF0YS5pbXBvcnRBY3Rpb25EYXRhLmNvbmZpcm1EaWFsb2dEYXRhPy50ZXh0KVxuICAgICAgICAgICAgLndpdGhEZWZhdWx0KCd0aXRsZScsIHRoaXMuaGFzTWFueUltcG9ydEFjdGlvbi5kaXNwbGF5TmFtZSlcbiAgICAgICAgICAgIC5nZXRSZXN1bHQoKTtcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8Tmd4TWF0RW50aXR5Q29uZmlybURpYWxvZ0NvbXBvbmVudCwgYm9vbGVhbj4gPSB0aGlzLmRpYWxvZy5vcGVuKE5neE1hdEVudGl0eUNvbmZpcm1EaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICAgIGRhdGE6IGRpYWxvZ0RhdGEsXG4gICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgICAgICAgICAgcmVzdG9yZUZvY3VzOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzOiBib29sZWFuIHwgdW5kZWZpbmVkID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkpO1xuICAgICAgICBpZiAocmVzID09IHRydWUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFzTWFueUVudGl0eVNlcnZpY2UuaW1wb3J0KGZpbGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHR3byBvYmplY3RzIGFyZSBlcXVhbC4gSXMgbmVlZGVkIGZvciB0aGUgZHJvcGRvd24uXG4gICAgICogQHBhcmFtIHZhbHVlMSAtIFRoZSBmaXJzdCBvYmplY3QgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUyIC0gVGhlIHNlY29uZCBvYmplY3QgdG8gY29tcGFyZS5cbiAgICAgKiBAcmV0dXJucyBXaGV0aGVyIG9yIG5vdCB0aGUgb2JqZWN0cyBhcmUgdGhlIHNhbWUuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjb21wYXJlT2JqZWN0cyh2YWx1ZTE/OiBFbnRpdHlUeXBlLCB2YWx1ZTI/OiBFbnRpdHlUeXBlKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHZhbHVlT2JqZWN0MTogRW50aXR5VHlwZSA9IG5ldyB0aGlzLm1ldGFkYXRhRHJvcGRvd25PYmplY3QuRW50aXR5Q2xhc3ModmFsdWUxKTtcbiAgICAgICAgY29uc3QgdmFsdWVPYmplY3QyOiBFbnRpdHlUeXBlID0gbmV3IHRoaXMubWV0YWRhdGFEcm9wZG93bk9iamVjdC5FbnRpdHlDbGFzcyh2YWx1ZTIpO1xuICAgICAgICByZXR1cm4gTG9kYXNoVXRpbGl0aWVzLmlzRXF1YWwodmFsdWVPYmplY3QxLCB2YWx1ZU9iamVjdDIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbHRlcnMgdGhlIGRyb3Bkb3duIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0gc2VhcmNoSW5wdXQgLSBUaGUgc2VhcmNoIGlucHV0IHRvIGZpbHRlciBmb3IuXG4gICAgICovXG4gICAgZmlsdGVyT2JqZWN0RHJvcGRvd25WYWx1ZXMoc2VhcmNoSW5wdXQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaWx0ZXI6IHN0cmluZyA9IHNlYXJjaElucHV0LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRPYmplY3REcm9wZG93blZhbHVlcyA9IExvZGFzaFV0aWxpdGllcy5jbG9uZURlZXAodGhpcy5vYmplY3REcm9wZG93blZhbHVlcykuZmlsdGVyKG9wdGlvbiA9PiB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uLmRpc3BsYXlOYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyKSB8fCBKU09OLnN0cmluZ2lmeShvcHRpb24udmFsdWUpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAuaW5jbHVkZXMoZmlsdGVyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcmVmZXJlbmNlcyBvbmUgb2JqZWN0IHVzaW5nIHRoZSBpbnB1dCBpZC5cbiAgICAgKi9cbiAgICBzZXRSZWZlcmVuY2VzT25lT2JqZWN0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBmb3VuZEVudGl0eTogRW50aXR5VHlwZSB8IHVuZGVmaW5lZCA9IHRoaXMubWV0YWRhdGFSZWZlcmVuY2VzT25lLmdldEVudGl0eUZvcklkKFxuICAgICAgICAgICAgdGhpcy5lbnRpdHlbdGhpcy5wcm9wZXJ0eUtleV0gYXMgc3RyaW5nLFxuICAgICAgICAgICAgdGhpcy5yZWZlcmVuY2VzT25lQWxsUmVmZXJlbmNlZEVudGl0aWVzXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZXNPbmVPYmplY3Q6IEVudGl0eVR5cGUgPSBuZXcgdGhpcy5tZXRhZGF0YVJlZmVyZW5jZXNPbmUuRW50aXR5Q2xhc3MoZm91bmRFbnRpdHkpO1xuICAgICAgICBjb25zdCByZWZlcmVuY2VzT25lUHJvcGVydHlUYWJzOiBFbnRpdHlUYWI8RW50aXR5VHlwZT5bXSA9IEVudGl0eVV0aWxpdGllcy5nZXRFbnRpdHlUYWJzKFxuICAgICAgICAgICAgcmVmZXJlbmNlc09uZU9iamVjdCxcbiAgICAgICAgICAgIHRoaXMuaW5qZWN0b3IsXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICB0aGlzLm1ldGFkYXRhUmVmZXJlbmNlc09uZS5vbWl0XG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHRoaXMubWV0YWRhdGFSZWZlcmVuY2VzT25lLmRyb3Bkb3duT25seSkge1xuICAgICAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlZmVyZW5jZXNPbmVGb3JtQ29udGV4dCA9IHtcbiAgICAgICAgICAgICRpbXBsaWNpdDoge1xuICAgICAgICAgICAgICAgIGVudGl0eTogcmVmZXJlbmNlc09uZU9iamVjdCxcbiAgICAgICAgICAgICAgICB0YWJzOiByZWZlcmVuY2VzT25lUHJvcGVydHlUYWJzLFxuICAgICAgICAgICAgICAgIGhpZGVPbWl0Rm9yQ3JlYXRlOiB0aGlzLmhpZGVPbWl0Rm9yQ3JlYXRlLFxuICAgICAgICAgICAgICAgIGhpZGVPbWl0Rm9yRWRpdDogdGhpcy5oaWRlT21pdEZvckVkaXQsXG4gICAgICAgICAgICAgICAgaXNSZWFkT25seTogKCkgPT4gdHJ1ZSxcbiAgICAgICAgICAgICAgICBpbnB1dENoYW5nZUV2ZW50OiAoKSA9PiB0aGlzLmVtaXRDaGFuZ2UoKSxcbiAgICAgICAgICAgICAgICB2YWxpZEVtcHR5OiAoKSA9PiAhdGhpcy5tZXRhZGF0YS5yZXF1aXJlZCh0aGlzLmVudGl0eSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRWRpdHMgYW4gZW50aXR5LiBUaGlzIGVpdGhlciBjYWxscyB0aGUgZWRpdC1NZXRob2QgcHJvdmlkZWQgYnkgdGhlIHVzZXIgb3IgdXNlcyBhIGRlZmF1bHQgZWRpdC1kaWFsb2cuXG4gICAgICogQHBhcmFtIGVudGl0eSAtIFRoZSBlbnRpdHkgdGhhdCBzaG91bGQgYmUgdXBkYXRlZC5cbiAgICAgKiBAcGFyYW0gZENvbCAtIFRoZSBkaXNwbGF5IGNvbHVtbiB0aGF0IHdhcyBjbGlja2VkIG9uLlxuICAgICAqIEB0aHJvd3MgV2hlbiBubyBFbnRpdHlDbGFzcyB3YXMgcHJvdmlkZWQsIGFzIGEgbmV3IGNhbGwgaXMgbmVlZGVkIHRvIGluaXRpYWxpemUgbWV0YWRhdGEuXG4gICAgICovXG4gICAgZWRpdEhhc01hbnlFbnRpdHkoZW50aXR5OiBFbnRpdHlUeXBlLCBkQ29sOiBEaXNwbGF5Q29sdW1uPEVudGl0eVR5cGU+KTogdm9pZCB7XG4gICAgICAgIGlmICgoZENvbC5kaXNhYmxlQ2xpY2sgPT09IHRydWUpIHx8ICghdGhpcy5oYXNNYW55QWxsb3dVcGRhdGUoZW50aXR5KSAmJiAhdGhpcy5oYXNNYW55QWxsb3dSZWFkKGVudGl0eSkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLm1ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuYmFzZURhdGEuRW50aXR5Q2xhc3MpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gXCJFbnRpdHlDbGFzc1wiIHNwZWNpZmllZCBmb3IgdGhpcyB0YWJsZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuYmFzZURhdGEuZWRpdCkge1xuICAgICAgICAgICAgdGhpcy5tZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLmVkaXQobmV3IHRoaXMubWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5iYXNlRGF0YS5FbnRpdHlDbGFzcyhlbnRpdHkpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLmRlZmF1bHRFZGl0ID09ICdwYWdlJykge1xuICAgICAgICAgICAgdGhpcy5lZGl0SGFzTWFueURlZmF1bHRQYWdlKG5ldyB0aGlzLm1ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuYmFzZURhdGEuRW50aXR5Q2xhc3MoZW50aXR5KSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdm9pZCB0aGlzLmVkaXRIYXNNYW55RGVmYXVsdERpYWxvZyhuZXcgdGhpcy5tZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLkVudGl0eUNsYXNzKGVudGl0eSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdXBkYXRpbmcgdGhlIHByb3ZpZGVkIGVudGl0eSBmcm9tIHRoZSBoYXMgbWFueSBwcm9wZXJ0eSBpcyBhbGxvd2VkLlxuICAgICAqIEBwYXJhbSBlbnRpdHkgLSBBIHNpbmdsZSB2YWx1ZSBvZiB0aGUgaGFzIG1hbnkgcHJvcGVydHkgdGhhdCB0aGUgdXNlciB3YW50cyB0byBlZGl0LlxuICAgICAqIEByZXR1cm5zIFRydWUgd2hlbiB0aGUgdXNlciBjYW4gZWRpdCB0aGUgcHJvdmlkZWQgZW50aXR5IGFuZCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgaGFzTWFueUFsbG93VXBkYXRlKGVudGl0eTogRW50aXR5VHlwZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuaW5qZWN0b3IsICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuYmFzZURhdGEuYWxsb3dVcGRhdGUoZW50aXR5KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB2aWV3aW5nIHRoZSBwcm92aWRlZCBlbnRpdHkgZnJvbSB0aGUgaGFzIG1hbnkgcHJvcGVydHkgaXMgYWxsb3dlZC5cbiAgICAgKiBAcGFyYW0gZW50aXR5IC0gQSBzaW5nbGUgdmFsdWUgb2YgdGhlIGhhcyBtYW55IHByb3BlcnR5IHRoYXQgdGhlIHVzZXIgd2FudHMgdG8gdmlldy5cbiAgICAgKiBAcmV0dXJucyBUcnVlIHdoZW4gdGhlIHVzZXIgY2FuIHZpZXcgdGhlIHByb3ZpZGVkIGVudGl0eSBhbmQgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGhhc01hbnlBbGxvd1JlYWQoZW50aXR5OiBFbnRpdHlUeXBlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5pbmplY3RvciwgKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5iYXNlRGF0YS5hbGxvd1JlYWQoZW50aXR5KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBkZWxldGluZyB0aGUgcHJvdmlkZWQgZW50aXR5IGZyb20gdGhlIGhhcyBtYW55IHByb3BlcnR5IGlzIGFsbG93ZWQuXG4gICAgICogQHBhcmFtIGVudGl0eSAtIEEgc2luZ2xlIHZhbHVlIG9mIHRoZSBoYXMgbWFueSBwcm9wZXJ0eSB0aGF0IHRoZSB1c2VyIHdhbnRzIHRvIGRlbGV0ZS5cbiAgICAgKiBAcmV0dXJucyBUcnVlIHdoZW4gdGhlIHVzZXIgY2FuIGRlbGV0ZSB0aGUgcHJvdmlkZWQgZW50aXR5IGFuZCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgaGFzTWFueUFsbG93RGVsZXRlKGVudGl0eTogRW50aXR5VHlwZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuaW5qZWN0b3IsICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuYmFzZURhdGEuYWxsb3dEZWxldGUoZW50aXR5KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGFuIEVkaXRBY3Rpb24gaXMgZGlzYWJsZWQgKGUuZy4gQmVjYXVzZSB0aGUgY3VycmVudCBlbnRyeSBkb2Vzbid0IGZ1bGxmaWwgdGhlIHJlcXVpcmVtZW50cykuXG4gICAgICogQHBhcmFtIGFjdGlvbiAtIFRoZSBFZGl0QWN0aW9uIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIFdoZXRoZXIgb3Igbm90IHRoZSBBY3Rpb24gY2FuIGJlIHVzZWQuXG4gICAgICovXG4gICAgaGFzTWFueUVkaXRBY3Rpb25EaXNhYmxlZChhY3Rpb246IEVkaXRBY3Rpb25JbnRlcm5hbDxFbnRpdHlUeXBlPik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuaW5qZWN0b3IsICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhYWN0aW9uLmVuYWJsZWQodGhpcy5oYXNNYW55RW50aXR5UHJpb3JDaGFuZ2VzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyB0aGUgZWRpdCBhY3Rpb24gb24gdGhlIGVudGl0eS5cbiAgICAgKiBAcGFyYW0gYWN0aW9uIC0gVGhlIGFjdGlvbiB0byBydW4uXG4gICAgICovXG4gICAgYXN5bmMgaGFzTWFueVJ1bkVkaXRBY3Rpb24oYWN0aW9uOiBFZGl0QWN0aW9uSW50ZXJuYWw8RW50aXR5VHlwZT4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgcmVxdWlyZUNvbmZpcm1EaWFsb2c6IGJvb2xlYW4gPSBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5pbmplY3RvciwgKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi5yZXF1aXJlQ29uZmlybURpYWxvZyh0aGlzLmhhc01hbnlFbnRpdHlQcmlvckNoYW5nZXMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXJlcXVpcmVDb25maXJtRGlhbG9nKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvbmZpcm1IYXNNYW55UnVuRWRpdEFjdGlvbihhY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPE5neE1hdEVudGl0eUNvbmZpcm1EaWFsb2dDb21wb25lbnQsIGJvb2xlYW4+ID0gdGhpcy5kaWFsb2cub3BlbihOZ3hNYXRFbnRpdHlDb25maXJtRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgICBkYXRhOiBhY3Rpb24uY29uZmlybURpYWxvZ0RhdGEsXG4gICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgICAgICAgICAgcmVzdG9yZUZvY3VzOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzOiBib29sZWFuIHwgdW5kZWZpbmVkID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkpO1xuICAgICAgICBpZiAocmVzID09IHRydWUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY29uZmlybUhhc01hbnlSdW5FZGl0QWN0aW9uKGFjdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNvbmZpcm1IYXNNYW55UnVuRWRpdEFjdGlvbihhY3Rpb246IEVkaXRBY3Rpb25JbnRlcm5hbDxFbnRpdHlUeXBlPik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5pbmplY3RvciwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgYWN0aW9uLmFjdGlvbih0aGlzLmhhc01hbnlFbnRpdHksIHRoaXMuaGFzTWFueUVudGl0eVByaW9yQ2hhbmdlcyk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrSGFzTWFueUVudGl0eSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVkaXRIYXNNYW55RGVmYXVsdFBhZ2UoZW50aXR5OiBFbnRpdHlUeXBlKTogdm9pZCB7XG4gICAgICAgIHZvaWQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycnLCB0aGlzLmhhc01hbnlFbnRpdHlTZXJ2aWNlLmVkaXRCYXNlUm91dGUsIGVudGl0eVt0aGlzLmhhc01hbnlFbnRpdHlTZXJ2aWNlLmlkS2V5XV0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZWRpdEhhc01hbnlEZWZhdWx0RGlhbG9nKGVudGl0eTogRW50aXR5VHlwZSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmhhc01hbnlFbnRpdHkgPSBMb2Rhc2hVdGlsaXRpZXMuY2xvbmVEZWVwKGVudGl0eSk7XG4gICAgICAgIHRoaXMuaGFzTWFueUVudGl0eVByaW9yQ2hhbmdlcyA9IExvZGFzaFV0aWxpdGllcy5jbG9uZURlZXAodGhpcy5oYXNNYW55RW50aXR5KTtcbiAgICAgICAgdGhpcy5oYXNNYW55RWRpdEZvcm1Db250ZXh0ID0ge1xuICAgICAgICAgICAgJGltcGxpY2l0OiB7XG4gICAgICAgICAgICAgICAgZW50aXR5OiB0aGlzLmhhc01hbnlFbnRpdHksXG4gICAgICAgICAgICAgICAgaGlkZU9taXRGb3JFZGl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzUmVhZE9ubHk6IChwcm9wZXJ0eSwga2V5KSA9PiB0aGlzLmlzUHJvcGVydHlSZWFkT25seShwcm9wZXJ0eSwga2V5KSxcbiAgICAgICAgICAgICAgICBpbnB1dENoYW5nZUV2ZW50OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZvaWQgdGhpcy5jaGVja0hhc01hbnlFbnRpdHkoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNNYW55RWRpdEZvcm1Db250ZXh0LiRpbXBsaWNpdC50YWJzID0gRW50aXR5VXRpbGl0aWVzLmdldEVudGl0eVRhYnMoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc01hbnlFbnRpdHksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluamVjdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0YWJzOiBFbnRpdHlVdGlsaXRpZXMuZ2V0RW50aXR5VGFicyh0aGlzLmhhc01hbnlFbnRpdHksIHRoaXMuaW5qZWN0b3IsIGZhbHNlLCB0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBhd2FpdCB0aGlzLmNoZWNrSGFzTWFueUVudGl0eSgpO1xuICAgICAgICB0aGlzLmVkaXRIYXNNYW55RGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihcbiAgICAgICAgICAgIHRoaXMuZWRpdEhhc01hbnlEaWFsb2csXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbWluV2lkdGg6ICc2MCUnLFxuICAgICAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICAgICAgICAgICAgcmVzdG9yZUZvY3VzOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICBjb25zdCByZXM6IG51bWJlciA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuZWRpdEhhc01hbnlEaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKSkgYXMgbnVtYmVyO1xuICAgICAgICBpZiAocmVzID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhOiBFbnRpdHlUeXBlW10gPSB0aGlzLmhhc01hbnlUYWJsZUNvbnRleHQuJGltcGxpY2l0LmRhdGFTb3VyY2UuZGF0YTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzdHlsaXN0aWMvbWF4LWxlblxuICAgICAgICAgICAgZGF0YVt0aGlzLmhhc01hbnlUYWJsZUNvbnRleHQuJGltcGxpY2l0LmRhdGFTb3VyY2UuZGF0YS5maW5kSW5kZXgoKGUpID0+IGVbdGhpcy5oYXNNYW55RW50aXR5U2VydmljZS5pZEtleV0gPT09IGVudGl0eVt0aGlzLmhhc01hbnlFbnRpdHlTZXJ2aWNlLmlkS2V5XSldID0gZW50aXR5O1xuICAgICAgICAgICAgdGhpcy5oYXNNYW55VGFibGVDb250ZXh0LiRpbXBsaWNpdC5kYXRhU291cmNlLmRhdGEgPSBkYXRhO1xuICAgICAgICAgICAgdGhpcy5oYXNNYW55VGFibGVDb250ZXh0LiRpbXBsaWNpdC5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyaWVzIHRvIHNhdmUgdGhlIGNoYW5nZXMgYW5kIGNsb3NlIHRoZSBkaWFsb2cgYWZ0ZXJ3YXJkcy5cbiAgICAgKiBBbHNvIGhhbmRsZXMgdGhlIGNvbmZpcm1hdGlvbiBpZiByZXF1aXJlZC5cbiAgICAgKi9cbiAgICBhc3luYyBkaWFsb2dFZGl0SGFzTWFueSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuaW50ZXJuYWxJc1JlYWRPbmx5IHx8ICF0aGlzLmlzSGFzTWFueUVudGl0eVZhbGlkIHx8ICF0aGlzLmlzSGFzTWFueUVudGl0eURpcnR5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLm1ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuZWRpdERhdGEuZWRpdFJlcXVpcmVzQ29uZmlybURpYWxvZykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5kaWFsb2dDb25maXJtRWRpdEhhc01hbnkoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzdHlsaXN0aWMvbWF4LWxlblxuICAgICAgICBjb25zdCBkaWFsb2dEYXRhOiBDb25maXJtRGlhbG9nRGF0YUludGVybmFsID0gbmV3IENvbmZpcm1EaWFsb2dEYXRhQnVpbGRlcih0aGlzLmdsb2JhbENvbmZpZywgdGhpcy5tZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmVkaXREYXRhLmNvbmZpcm1FZGl0RGlhbG9nRGF0YSlcbiAgICAgICAgICAgIC53aXRoRGVmYXVsdCgndGV4dCcsIHRoaXMuZ2xvYmFsQ29uZmlnLmNvbmZpcm1TYXZlVGV4dClcbiAgICAgICAgICAgIC53aXRoRGVmYXVsdCgnY29uZmlybUJ1dHRvbkxhYmVsJywgdGhpcy5nbG9iYWxDb25maWcuc2F2ZUxhYmVsKVxuICAgICAgICAgICAgLndpdGhEZWZhdWx0KCd0aXRsZScsIHRoaXMuZ2xvYmFsQ29uZmlnLmVkaXRMYWJlbClcbiAgICAgICAgICAgIC5nZXRSZXN1bHQoKTtcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8Tmd4TWF0RW50aXR5Q29uZmlybURpYWxvZ0NvbXBvbmVudCwgYm9vbGVhbj4gPSB0aGlzLmRpYWxvZy5vcGVuKE5neE1hdEVudGl0eUNvbmZpcm1EaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICAgIGRhdGE6IGRpYWxvZ0RhdGEsXG4gICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgICAgICAgICAgcmVzdG9yZUZvY3VzOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzOiBib29sZWFuIHwgdW5kZWZpbmVkID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkpO1xuICAgICAgICBpZiAocmVzID09IHRydWUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZGlhbG9nQ29uZmlybUVkaXRIYXNNYW55KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJpdmF0ZSBhc3luYyBkaWFsb2dDb25maXJtRWRpdEhhc01hbnkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaGFzTWFueUVudGl0eVNlcnZpY2UudXBkYXRlKHRoaXMuaGFzTWFueUVudGl0eSwgdGhpcy5oYXNNYW55RW50aXR5UHJpb3JDaGFuZ2VzKTtcbiAgICAgICAgdGhpcy5lZGl0SGFzTWFueURpYWxvZ1JlZi5jbG9zZSgxKTtcbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZXMgdG8gZGVsZXRlIHRoZSBlbnRpdHkgYW5kIGNsb3NlIHRoZSBkaWFsb2cgYWZ0ZXJ3YXJkcy5cbiAgICAgKiBBbHNvIGhhbmRsZXMgdGhlIGNvbmZpcm1hdGlvbiBpZiByZXF1aXJlZC5cbiAgICAgKi9cbiAgICBhc3luYyBkZWxldGVIYXNNYW55RW50aXR5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXRoaXMubWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5lZGl0RGF0YS5kZWxldGVSZXF1aXJlc0NvbmZpcm1EaWFsb2cpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY29uZmlybURlbGV0ZUhhc01hbnlFbnRpdHkoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzdHlsaXN0aWMvbWF4LWxlblxuICAgICAgICBjb25zdCBkaWFsb2dEYXRhOiBDb25maXJtRGlhbG9nRGF0YUludGVybmFsID0gbmV3IENvbmZpcm1EaWFsb2dEYXRhQnVpbGRlcih0aGlzLmdsb2JhbENvbmZpZywgdGhpcy5tZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmVkaXREYXRhLmNvbmZpcm1EZWxldGVEaWFsb2dEYXRhKVxuICAgICAgICAgICAgLndpdGhEZWZhdWx0KCd0ZXh0JywgdGhpcy5nbG9iYWxDb25maWcuY29uZmlybURlbGV0ZVRleHQpXG4gICAgICAgICAgICAud2l0aERlZmF1bHQoJ3R5cGUnLCAnZGVsZXRlJylcbiAgICAgICAgICAgIC53aXRoRGVmYXVsdCgnY29uZmlybUJ1dHRvbkxhYmVsJywgdGhpcy5nbG9iYWxDb25maWcuZGVsZXRlTGFiZWwpXG4gICAgICAgICAgICAud2l0aERlZmF1bHQoJ3RpdGxlJywgdGhpcy5nbG9iYWxDb25maWcuZGVsZXRlTGFiZWwpXG4gICAgICAgICAgICAuZ2V0UmVzdWx0KCk7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPE5neE1hdEVudGl0eUNvbmZpcm1EaWFsb2dDb21wb25lbnQsIGJvb2xlYW4+ID0gdGhpcy5kaWFsb2cub3BlbihOZ3hNYXRFbnRpdHlDb25maXJtRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgICBkYXRhOiBkaWFsb2dEYXRhLFxuICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgICAgIHJlc3RvcmVGb2N1czogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlczogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpKTtcbiAgICAgICAgaWYgKHJlcyA9PSB0cnVlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvbmZpcm1EZWxldGVIYXNNYW55RW50aXR5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNvbmZpcm1EZWxldGVIYXNNYW55RW50aXR5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmhhc01hbnlFbnRpdHlTZXJ2aWNlLmRlbGV0ZSh0aGlzLmhhc01hbnlFbnRpdHlQcmlvckNoYW5nZXMpO1xuICAgICAgICB0aGlzLmVkaXRIYXNNYW55RGlhbG9nUmVmLmNsb3NlKDIpO1xuICAgICAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYW5jZWxzIHRoZSBlZGl0aW5nIG9mIHRoZSBoYXMgbWFueSBlbnRpdHkgYW5kIGNsb3NlcyB0aGUgZGlhbG9nLlxuICAgICAqL1xuICAgIGRpYWxvZ0NhbmNlbEVkaXRIYXNNYW55KCk6IHZvaWQge1xuICAgICAgICBFbnRpdHlVdGlsaXRpZXMucmVzZXRDaGFuZ2VzT25FbnRpdHkodGhpcy5oYXNNYW55RW50aXR5LCB0aGlzLmhhc01hbnlFbnRpdHlQcmlvckNoYW5nZXMpO1xuICAgICAgICB0aGlzLmVkaXRIYXNNYW55RGlhbG9nUmVmLmNsb3NlKDApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgRW50aXR5LiBUaGlzIGVpdGhlciBjYWxscyB0aGUgY3JlYXRlLU1ldGhvZCBwcm92aWRlZCBieSB0aGUgdXNlciBvciB1c2VzIGEgZGVmYXVsdCBjcmVhdGUtZGlhbG9nLlxuICAgICAqIEB0aHJvd3MgV2hlbiBubyBFbnRpdHlDbGFzcyB3YXMgcHJvdmlkZWQsIGFzIGEgbmV3IGNhbGwgaXMgbmVlZGVkIHRvIGluaXRpYWxpemUgbWV0YWRhdGEuXG4gICAgICovXG4gICAgY3JlYXRlSGFzTWFueUVudGl0eSgpOiB2b2lkIHtcbiAgICAgICAgdm9pZCBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5pbmplY3RvciwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMubWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5iYXNlRGF0YS5hbGxvd0NyZWF0ZSgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuYmFzZURhdGEuRW50aXR5Q2xhc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBcIkVudGl0eUNsYXNzXCIgc3BlY2lmaWVkIGZvciB0aGlzIHRhYmxlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuYmFzZURhdGEuY3JlYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5iYXNlRGF0YS5jcmVhdGUobmV3IHRoaXMubWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5iYXNlRGF0YS5FbnRpdHlDbGFzcygpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHk6IEVudGl0eVR5cGUgPSBuZXcgdGhpcy5tZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLkVudGl0eUNsYXNzKCk7XG4gICAgICAgICAgICAgICAgRW50aXR5VXRpbGl0aWVzLnNldERlZmF1bHRWYWx1ZXMoZW50aXR5KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLmRlZmF1bHRDcmVhdGUgPT0gJ3BhZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlSGFzTWFueURlZmF1bHRQYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jcmVhdGVIYXNNYW55RGVmYXVsdERpYWxvZyhlbnRpdHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUhhc01hbnlEZWZhdWx0UGFnZSgpOiB2b2lkIHtcbiAgICAgICAgdm9pZCB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMuaGFzTWFueUVudGl0eVNlcnZpY2UuY3JlYXRlQmFzZVJvdXRlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNyZWF0ZUhhc01hbnlEZWZhdWx0RGlhbG9nKGVudGl0eTogRW50aXR5VHlwZSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmhhc01hbnlFbnRpdHkgPSBlbnRpdHk7XG4gICAgICAgIHRoaXMuaGFzTWFueUNyZWF0ZUZvcm1Db250ZXh0ID0ge1xuICAgICAgICAgICAgJGltcGxpY2l0OiB7XG4gICAgICAgICAgICAgICAgZW50aXR5OiB0aGlzLmhhc01hbnlFbnRpdHksXG4gICAgICAgICAgICAgICAgaGlkZU9taXRGb3JDcmVhdGU6IHRydWUsXG4gICAgICAgICAgICAgICAgaW5wdXRDaGFuZ2VFdmVudDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2b2lkIHRoaXMuY2hlY2tJc0hhc01hbnlFbnRpdHlWYWxpZCgnY3JlYXRlJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzTWFueUNyZWF0ZUZvcm1Db250ZXh0LiRpbXBsaWNpdC50YWJzID0gRW50aXR5VXRpbGl0aWVzLmdldEVudGl0eVRhYnModGhpcy5oYXNNYW55RW50aXR5LCB0aGlzLmluamVjdG9yLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRhYnM6IEVudGl0eVV0aWxpdGllcy5nZXRFbnRpdHlUYWJzKHRoaXMuaGFzTWFueUVudGl0eSwgdGhpcy5pbmplY3RvciwgdHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGVja0lzSGFzTWFueUVudGl0eVZhbGlkKCdjcmVhdGUnKTtcbiAgICAgICAgdGhpcy5jcmVhdGVIYXNNYW55RGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlSGFzTWFueURpYWxvZyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtaW5XaWR0aDogJzYwJScsXG4gICAgICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICByZXN0b3JlRm9jdXM6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyB0aGUgaGFzIG1hbnkgZW50aXR5IG92ZXIgdGhlIGRpYWxvZy5cbiAgICAgKi9cbiAgICBhc3luYyBkaWFsb2dDcmVhdGVIYXNNYW55KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXRoaXMuaXNIYXNNYW55RW50aXR5VmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMubWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5jcmVhdGVEYXRhLmNyZWF0ZVJlcXVpcmVzQ29uZmlybURpYWxvZykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5kaWFsb2dDb25maXJtQ3JlYXRlSGFzTWFueSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHN0eWxpc3RpYy9tYXgtbGVuXG4gICAgICAgIGNvbnN0IGRpYWxvZ0RhdGE6IENvbmZpcm1EaWFsb2dEYXRhSW50ZXJuYWwgPSBuZXcgQ29uZmlybURpYWxvZ0RhdGFCdWlsZGVyKHRoaXMuZ2xvYmFsQ29uZmlnLCB0aGlzLm1ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuY3JlYXRlRGF0YS5jb25maXJtQ3JlYXRlRGlhbG9nRGF0YSlcbiAgICAgICAgICAgIC53aXRoRGVmYXVsdCgndGV4dCcsIHRoaXMuZ2xvYmFsQ29uZmlnLmNvbmZpcm1DcmVhdGVUZXh0KVxuICAgICAgICAgICAgLndpdGhEZWZhdWx0KCdjb25maXJtQnV0dG9uTGFiZWwnLCB0aGlzLmdsb2JhbENvbmZpZy5jcmVhdGVMYWJlbClcbiAgICAgICAgICAgIC53aXRoRGVmYXVsdCgndGl0bGUnLCB0aGlzLmdsb2JhbENvbmZpZy5jcmVhdGVMYWJlbClcbiAgICAgICAgICAgIC5nZXRSZXN1bHQoKTtcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8Tmd4TWF0RW50aXR5Q29uZmlybURpYWxvZ0NvbXBvbmVudCwgYm9vbGVhbj4gPSB0aGlzLmRpYWxvZy5vcGVuKE5neE1hdEVudGl0eUNvbmZpcm1EaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICAgIGRhdGE6IGRpYWxvZ0RhdGEsXG4gICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgICAgICAgICAgcmVzdG9yZUZvY3VzOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzOiBib29sZWFuIHwgdW5kZWZpbmVkID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkpO1xuICAgICAgICBpZiAocmVzID09IHRydWUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZGlhbG9nQ29uZmlybUNyZWF0ZUhhc01hbnkoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcml2YXRlIGFzeW5jIGRpYWxvZ0NvbmZpcm1DcmVhdGVIYXNNYW55KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmhhc01hbnlFbnRpdHlTZXJ2aWNlLmNyZWF0ZSh0aGlzLmhhc01hbnlFbnRpdHksIHRoaXMuaGFzTWFueUNyZWF0ZUJhc2VVcmwpO1xuICAgICAgICB0aGlzLmNyZWF0ZUhhc01hbnlEaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FuY2VscyB0aGUgY3JlYXRpbmcgb2YgdGhlIGhhcyBtYW55IGVudGl0eSBhbmQgY2xvc2VzIHRoZSBkaWFsb2cuXG4gICAgICovXG4gICAgZGlhbG9nQ2FuY2VsQ3JlYXRlSGFzTWFueSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jcmVhdGVIYXNNYW55RGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyB0aGUgVGFibGVBY3Rpb24gZm9yIGFsbCBzZWxlY3RlZCBlbnRyaWVzLlxuICAgICAqIEFsc28gaGFuZGxlcyBjb25maXJtYXRpb24gd2l0aCBhbiBhZGRpdGlvbmFsIGRpYWwjb2cgaWYgY29uZmlndXJlZC5cbiAgICAgKiBAcGFyYW0gYWN0aW9uIC0gVGhlIFRhYmxlQWN0aW9uIHRvIHJ1bi5cbiAgICAgKi9cbiAgICBhc3luYyBydW5IYXNNYW55VGFibGVBY3Rpb24oYWN0aW9uOiBUYWJsZUFjdGlvbkludGVybmFsPEVudGl0eVR5cGU+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHJlcXVpcmVDb25maXJtRGlhbG9nOiBib29sZWFuID0gcnVuSW5JbmplY3Rpb25Db250ZXh0KFxuICAgICAgICAgICAgdGhpcy5pbmplY3RvcixcbiAgICAgICAgICAgICgpID0+IGFjdGlvbi5yZXF1aXJlQ29uZmlybURpYWxvZyh0aGlzLmhhc01hbnlUYWJsZUNvbnRleHQuJGltcGxpY2l0LnNlbGVjdGlvbi5zZWxlY3RlZClcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFyZXF1aXJlQ29uZmlybURpYWxvZykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb25maXJtUnVuSGFzTWFueVRhYmxlQWN0aW9uKGFjdGlvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWZhdWx0VGV4dDogc3RyaW5nW10gPSBhY3Rpb24udHlwZSA9PT0gJ211bHRpLXNlbGVjdCdcbiAgICAgICAgICAgID8gdGhpcy5nbG9iYWxDb25maWcuY29uZmlybU11bHRpU2VsZWN0QWN0aW9uVGV4dCh0aGlzLmhhc01hbnlUYWJsZUNvbnRleHQuJGltcGxpY2l0LnNlbGVjdGlvbi5zZWxlY3RlZClcbiAgICAgICAgICAgIDogdGhpcy5nbG9iYWxDb25maWcuY29uZmlybUJhc2VBY3Rpb25UZXh0O1xuICAgICAgICBjb25zdCBkaWFsb2dEYXRhOiBDb25maXJtRGlhbG9nRGF0YUludGVybmFsID0gbmV3IENvbmZpcm1EaWFsb2dEYXRhQnVpbGRlcih0aGlzLmdsb2JhbENvbmZpZywgYWN0aW9uLmNvbmZpcm1EaWFsb2dEYXRhKVxuICAgICAgICAgICAgLndpdGhEZWZhdWx0KCd0ZXh0JywgZGVmYXVsdFRleHQpXG4gICAgICAgICAgICAud2l0aERlZmF1bHQoJ3RpdGxlJywgYWN0aW9uLmRpc3BsYXlOYW1lKVxuICAgICAgICAgICAgLmdldFJlc3VsdCgpO1xuICAgICAgICBjb25zdCBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxOZ3hNYXRFbnRpdHlDb25maXJtRGlhbG9nQ29tcG9uZW50LCBib29sZWFuPiA9IHRoaXMuZGlhbG9nLm9wZW4oTmd4TWF0RW50aXR5Q29uZmlybURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgICAgZGF0YTogZGlhbG9nRGF0YSxcbiAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICAgICAgICByZXN0b3JlRm9jdXM6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXM6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKSk7XG4gICAgICAgIGlmIChyZXMgPT0gdHJ1ZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb25maXJtUnVuSGFzTWFueVRhYmxlQWN0aW9uKGFjdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNvbmZpcm1SdW5IYXNNYW55VGFibGVBY3Rpb24oYWN0aW9uOiBUYWJsZUFjdGlvbkludGVybmFsPEVudGl0eVR5cGU+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLmluamVjdG9yLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCBhY3Rpb24uYWN0aW9uKHRoaXMuaGFzTWFueVRhYmxlQ29udGV4dC4kaW1wbGljaXQuc2VsZWN0aW9uLnNlbGVjdGVkKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYW4gVGFibGVBY3Rpb24gaXMgZGlzYWJsZWQgKGUuZy4gQmVjYXVzZSBubyBlbnRyaWVzIGhhdmUgYmVlbiBzZWxlY3RlZCkuXG4gICAgICogQHBhcmFtIGFjdGlvbiAtIFRoZSBUYWJsZUFjdGlvbiB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyBXaGV0aGVyIG9yIG5vdCB0aGUgQWN0aW9uIGNhbiBiZSB1c2VkLlxuICAgICAqL1xuICAgIGhhc01hbnlUYWJsZUFjdGlvbkRpc2FibGVkKGFjdGlvbjogVGFibGVBY3Rpb25JbnRlcm5hbDxFbnRpdHlUeXBlPik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuaW5qZWN0b3IsICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhYWN0aW9uLmVuYWJsZWQodGhpcy5oYXNNYW55VGFibGVDb250ZXh0LiRpbXBsaWNpdC5zZWxlY3Rpb24uc2VsZWN0ZWQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBzZWFyY2ggaW5wdXQgdG8gZmlsdGVyIHRoZSB0YWJsZSBlbnRyaWVzLlxuICAgICAqIEBwYXJhbSBldmVudCAtIFRoZSBrZXl1cC1ldmVudCB3aGljaCBjb250YWlucyB0aGUgc2VhcmNoLXN0cmluZyBvZiB0aGUgdXNlci5cbiAgICAgKi9cbiAgICBhcHBseUhhc01hbnlGaWx0ZXIoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZpbHRlclZhbHVlOiBzdHJpbmcgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgICAgICB0aGlzLmhhc01hbnlUYWJsZUNvbnRleHQuJGltcGxpY2l0LmRhdGFTb3VyY2UuZmlsdGVyID0gZmlsdGVyVmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZSBlbnRpdHkgaXMgdmFsaWQgZm9yIHVwZGF0aW5nIGFuZCBpZiBpdCBpcyBkaXJ0eS5cbiAgICAgKi9cbiAgICBhc3luYyBjaGVja0hhc01hbnlFbnRpdHkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tJc0hhc01hbnlFbnRpdHlWYWxpZCgndXBkYXRlJyk7XG4gICAgICAgIHRoaXMuaGFzTWFueUNoYW5nZXMgPSBhd2FpdCBFbnRpdHlVdGlsaXRpZXMuZ2V0RGlmZmVyZW5jZXNCZXR3ZWVuRW50aXRpZXMoXG4gICAgICAgICAgICB0aGlzLmhhc01hbnlFbnRpdHksXG4gICAgICAgICAgICB0aGlzLmhhc01hbnlFbnRpdHlQcmlvckNoYW5nZXMsXG4gICAgICAgICAgICB0aGlzLmh0dHAsXG4gICAgICAgICAgICB0aGlzLmluamVjdG9yXG4gICAgICAgICk7XG4gICAgICAgIGlmICghdGhpcy5oYXNNYW55VmFsaWRhdGlvbkVycm9ycy5sZW5ndGggJiYgdGhpcy5oYXNNYW55Q2hhbmdlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuaGFzTWFueVRvb2x0aXBDb250ZW50ID0gcnVuSW5JbmplY3Rpb25Db250ZXh0KFxuICAgICAgICAgICAgICAgIHRoaXMuaW5qZWN0b3IsXG4gICAgICAgICAgICAgICAgKCkgPT4gZ2V0Q2hhbmdlc1Rvb2x0aXBDb250ZW50KHRoaXMuaGFzTWFueUNoYW5nZXMpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNIYXNNYW55RW50aXR5RGlydHkgPSAhIXRoaXMuaGFzTWFueUNoYW5nZXMubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgZW50aXR5IGlzIHZhbGlkLlxuICAgICAqIEBwYXJhbSBvbWl0IC0gV2hldGhlciB2YWx1ZXMgb21pdHRlZCBmb3IgY3JlYXRlIG9yIHVwZGF0ZSBzaG91bGQgYmUgbGVmdCBvdXQuXG4gICAgICovXG4gICAgYXN5bmMgY2hlY2tJc0hhc01hbnlFbnRpdHlWYWxpZChvbWl0OiAnY3JlYXRlJyB8ICd1cGRhdGUnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuaGFzTWFueVZhbGlkYXRpb25FcnJvcnMgPSBhd2FpdCBWYWxpZGF0aW9uVXRpbGl0aWVzLmdldEVudGl0eVZhbGlkYXRpb25FcnJvcnModGhpcy5oYXNNYW55RW50aXR5LCB0aGlzLmluamVjdG9yLCBvbWl0KTtcbiAgICAgICAgaWYgKHRoaXMuaGFzTWFueVZhbGlkYXRpb25FcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmhhc01hbnlUb29sdGlwQ29udGVudCA9IHJ1bkluSW5qZWN0aW9uQ29udGV4dChcbiAgICAgICAgICAgICAgICB0aGlzLmluamVjdG9yLFxuICAgICAgICAgICAgICAgICgpID0+IGdldFZhbGlkYXRpb25FcnJvcnNUb29sdGlwQ29udGVudCh0aGlzLmhhc01hbnlWYWxpZGF0aW9uRXJyb3JzKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzSGFzTWFueUVudGl0eVZhbGlkID0gdGhpcy5oYXNNYW55VmFsaWRhdGlvbkVycm9ycy5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGFycmF5IGl0ZW0gaXMgdmFsaWQgYW5kIGlmIHRoZSBhcnJheSBpdGVtIGlzIGRpcnR5LlxuICAgICAqL1xuICAgIGFzeW5jIGNoZWNrQXJyYXlJdGVtKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmNoZWNrSXNBcnJheUl0ZW1WYWxpZCgpO1xuICAgICAgICBhd2FpdCB0aGlzLmNoZWNrSXNBcnJheUl0ZW1EaXJ0eSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgYXJyYXkgaXRlbSBpcyBkaXJ0eS5cbiAgICAgKi9cbiAgICBhc3luYyBjaGVja0lzQXJyYXlJdGVtRGlydHkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuYXJyYXlJdGVtQ2hhbmdlcyA9IGF3YWl0IEVudGl0eVV0aWxpdGllcy5nZXREaWZmZXJlbmNlc0JldHdlZW5FbnRpdGllcyhcbiAgICAgICAgICAgIHRoaXMuYXJyYXlJdGVtLFxuICAgICAgICAgICAgdGhpcy5hcnJheUl0ZW1QcmlvckNoYW5nZXMsXG4gICAgICAgICAgICB0aGlzLmh0dHAsXG4gICAgICAgICAgICB0aGlzLmluamVjdG9yXG4gICAgICAgICk7XG4gICAgICAgIGlmICghdGhpcy5hcnJheUl0ZW1WYWxpZGF0aW9uRXJyb3JzLmxlbmd0aCAmJiB0aGlzLmFycmF5SXRlbUNoYW5nZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmFycmF5SXRlbVRvb2x0aXBDb250ZW50ID0gcnVuSW5JbmplY3Rpb25Db250ZXh0KFxuICAgICAgICAgICAgICAgIHRoaXMuaW5qZWN0b3IsXG4gICAgICAgICAgICAgICAgKCkgPT4gZ2V0Q2hhbmdlc1Rvb2x0aXBDb250ZW50KHRoaXMuYXJyYXlJdGVtQ2hhbmdlcylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0FycmF5SXRlbURpcnR5ID0gISF0aGlzLmFycmF5SXRlbUNoYW5nZXMubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgYXJyYXlJdGVtIGlzIHZhbGlkLlxuICAgICAqL1xuICAgIGFzeW5jIGNoZWNrSXNBcnJheUl0ZW1WYWxpZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5hcnJheUl0ZW1WYWxpZGF0aW9uRXJyb3JzID0gYXdhaXQgVmFsaWRhdGlvblV0aWxpdGllcy5nZXRFbnRpdHlWYWxpZGF0aW9uRXJyb3JzKHRoaXMuYXJyYXlJdGVtLCB0aGlzLmluamVjdG9yLCAnY3JlYXRlJyk7XG4gICAgICAgIGlmICh0aGlzLmFycmF5SXRlbVZhbGlkYXRpb25FcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmFycmF5SXRlbVRvb2x0aXBDb250ZW50ID0gcnVuSW5JbmplY3Rpb25Db250ZXh0KFxuICAgICAgICAgICAgICAgIHRoaXMuaW5qZWN0b3IsXG4gICAgICAgICAgICAgICAgKCkgPT4gZ2V0VmFsaWRhdGlvbkVycm9yc1Rvb2x0aXBDb250ZW50KHRoaXMuYXJyYXlJdGVtVmFsaWRhdGlvbkVycm9ycylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0FycmF5SXRlbVZhbGlkID0gdGhpcy5hcnJheUl0ZW1WYWxpZGF0aW9uRXJyb3JzLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyB0aGF0IGEgdGhlIHZhbHVlIGhhcyBiZWVuIGNoYW5nZWQuXG4gICAgICovXG4gICAgZW1pdENoYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbnB1dENoYW5nZUV2ZW50LmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmllcyB0byBhZGQgYW4gaXRlbSB0byB0aGUgZW50aXR5IGFycmF5LlxuICAgICAqIERvZXMgdGhpcyBlaXRoZXIgaW5saW5lIGlmIHRoZSBcImNyZWF0ZUlubGluZVwiLW1ldGFkYXRhIGlzIHNldCB0byB0cnVlXG4gICAgICogb3IgaW4gYSBzZXBhcmF0ZSBkaWFsb2cgaWYgaXQgaXMgc2V0IHRvIGZhbHNlLlxuICAgICAqL1xuICAgIGFzeW5jIGFkZEVudGl0eSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGVja0lzQXJyYXlJdGVtVmFsaWQoKTtcbiAgICAgICAgaWYgKCF0aGlzLm1ldGFkYXRhRW50aXR5QXJyYXkuY3JlYXRlSW5saW5lKSB7XG4gICAgICAgICAgICB0aGlzLmFycmF5SXRlbSA9IG5ldyB0aGlzLm1ldGFkYXRhRW50aXR5QXJyYXkuRW50aXR5Q2xhc3MoKTtcbiAgICAgICAgICAgIHRoaXMuYXJyYXlJdGVtUHJpb3JDaGFuZ2VzID0gTG9kYXNoVXRpbGl0aWVzLmNsb25lRGVlcCh0aGlzLmFycmF5SXRlbSk7XG4gICAgICAgICAgICBFbnRpdHlVdGlsaXRpZXMuc2V0RGVmYXVsdFZhbHVlcyh0aGlzLmFycmF5SXRlbSk7XG5cbiAgICAgICAgICAgIHRoaXMuYWRkQXJyYXlJdGVtRm9ybUNvbnRleHQgPSB7XG4gICAgICAgICAgICAgICAgJGltcGxpY2l0OiB7XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eTogdGhpcy5hcnJheUl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIHRhYnM6IEVudGl0eVV0aWxpdGllcy5nZXRFbnRpdHlUYWJzKHRoaXMuYXJyYXlJdGVtLCB0aGlzLmluamVjdG9yLCB0cnVlKSxcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRDaGFuZ2VFdmVudDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCB0aGlzLmNoZWNrSXNBcnJheUl0ZW1WYWxpZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRBcnJheUl0ZW1Gb3JtQ29udGV4dC4kaW1wbGljaXQudGFicyA9IEVudGl0eVV0aWxpdGllcy5nZXRFbnRpdHlUYWJzKHRoaXMuYXJyYXlJdGVtLCB0aGlzLmluamVjdG9yLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgaGlkZU9taXRGb3JDcmVhdGU6IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5hZGRBcnJheUl0ZW1Gb3JtQ29udGV4dDIgPSBMb2Rhc2hVdGlsaXRpZXMuY2xvbmVEZWVwKHRoaXMuYWRkQXJyYXlJdGVtRm9ybUNvbnRleHQpO1xuICAgICAgICAgICAgdGhpcy5hZGRBcnJheUl0ZW1EaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFxuICAgICAgICAgICAgICAgIHRoaXMuYWRkQXJyYXlJdGVtRGlhbG9nLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6ICc2MCUnLFxuICAgICAgICAgICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICByZXN0b3JlRm9jdXM6IGZhbHNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMubWV0YWRhdGFFbnRpdHlBcnJheS5hbGxvd0R1cGxpY2F0ZXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdiBvZiB0aGlzLmVudGl0eUFycmF5VGFibGVDb250ZXh0LiRpbXBsaWNpdC5kYXRhU291cmNlLmRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXdhaXQgRW50aXR5VXRpbGl0aWVzLmlzRXF1YWwodGhpcy5hcnJheUl0ZW0sIHYsIHRoaXMubWV0YWRhdGEsIHRoaXMubWV0YWRhdGFFbnRpdHlBcnJheS5pdGVtVHlwZSwgdGhpcy5odHRwKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZy5vcGVuKE5neE1hdEVudGl0eUNvbmZpcm1EaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMubWV0YWRhdGFFbnRpdHlBcnJheS5kdXBsaWNhdGVzRXJyb3JEaWFsb2csXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdG9yZUZvY3VzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICh0aGlzLmVudGl0eVt0aGlzLnByb3BlcnR5S2V5XSBhcyBFbnRpdHlUeXBlW10pLnB1c2goTG9kYXNoVXRpbGl0aWVzLmNsb25lRGVlcCh0aGlzLmFycmF5SXRlbSkpO1xuICAgICAgICB0aGlzLmVudGl0eUFycmF5VGFibGVDb250ZXh0LiRpbXBsaWNpdC5kYXRhU291cmNlLmRhdGEgPSAodGhpcy5lbnRpdHlbdGhpcy5wcm9wZXJ0eUtleV0gYXMgRW50aXR5VHlwZVtdKTtcblxuICAgICAgICB0aGlzLmFkZEFycmF5SXRlbUZvcm1Db250ZXh0ID0gdW5kZWZpbmVkIGFzIHVua25vd24gYXMgVGVtcGxhdGVDb250ZXh0PEZvcm1Db250ZXh0PEVudGl0eVR5cGU+PjtcbiAgICAgICAgdGhpcy5hcnJheUl0ZW0gPSBuZXcgdGhpcy5tZXRhZGF0YUVudGl0eUFycmF5LkVudGl0eUNsYXNzKCk7XG4gICAgICAgIHRoaXMuYXJyYXlJdGVtUHJpb3JDaGFuZ2VzID0gTG9kYXNoVXRpbGl0aWVzLmNsb25lRGVlcCh0aGlzLmFycmF5SXRlbSk7XG4gICAgICAgIEVudGl0eVV0aWxpdGllcy5zZXREZWZhdWx0VmFsdWVzKHRoaXMuYXJyYXlJdGVtKTtcblxuICAgICAgICBzZXRUaW1lb3V0KFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHR5cGVzY3JpcHQvbm8tbWlzdXNlZC1wcm9taXNlc1xuICAgICAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkQXJyYXlJdGVtRm9ybUNvbnRleHQgPSB7XG4gICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiB0aGlzLmFycmF5SXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYnM6IEVudGl0eVV0aWxpdGllcy5nZXRFbnRpdHlUYWJzKHRoaXMuYXJyYXlJdGVtLCB0aGlzLmluamVjdG9yLCB0cnVlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0Q2hhbmdlRXZlbnQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIHRoaXMuY2hlY2tJc0FycmF5SXRlbVZhbGlkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHN0eWxpc3RpYy9tYXgtbGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRBcnJheUl0ZW1Gb3JtQ29udGV4dC4kaW1wbGljaXQudGFicyA9IEVudGl0eVV0aWxpdGllcy5nZXRFbnRpdHlUYWJzKHRoaXMuYXJyYXlJdGVtLCB0aGlzLmluamVjdG9yLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRlT21pdEZvckNyZWF0ZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tJc0FycmF5SXRlbVZhbGlkKCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyB0aGUgYXJyYXkgaXRlbSBkZWZpbmVkIGluIHRoZSBkaWFsb2cuXG4gICAgICovXG4gICAgYXN5bmMgYWRkQXJyYXlJdGVtKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXRoaXMuaXNBcnJheUl0ZW1WYWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgICh0aGlzLmVudGl0eVt0aGlzLnByb3BlcnR5S2V5XSBhcyBFbnRpdHlUeXBlW10pLnB1c2goTG9kYXNoVXRpbGl0aWVzLmNsb25lRGVlcCh0aGlzLmFycmF5SXRlbSkpO1xuICAgICAgICB0aGlzLmVudGl0eUFycmF5VGFibGVDb250ZXh0LiRpbXBsaWNpdC5kYXRhU291cmNlLmRhdGEgPSAodGhpcy5lbnRpdHlbdGhpcy5wcm9wZXJ0eUtleV0gYXMgRW50aXR5VHlwZVtdKTtcblxuICAgICAgICBhd2FpdCB0aGlzLmNsb3NlQWRkQXJyYXlJdGVtRGlhbG9nKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FuY2VscyBhZGRpbmcgdGhlIGFycmF5IGl0ZW0gZGVmaW5lZCBpbiB0aGUgZGlhbG9nLlxuICAgICAqL1xuICAgIGFzeW5jIGNsb3NlQWRkQXJyYXlJdGVtRGlhbG9nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmFkZEFycmF5SXRlbURpYWxvZ1JlZi5jbG9zZSgpO1xuICAgICAgICBFbnRpdHlVdGlsaXRpZXMucmVzZXRDaGFuZ2VzT25FbnRpdHkodGhpcy5hcnJheUl0ZW0sIHRoaXMuYXJyYXlJdGVtUHJpb3JDaGFuZ2VzKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGVja0lzQXJyYXlJdGVtVmFsaWQoKTtcbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRWRpdHMgYW4gZW50aXR5IGFycmF5IGl0ZW0uXG4gICAgICogQHBhcmFtIGVudGl0eSAtIFRoZSBlbnRpdHkgdGhhdCBoYXMgYmVlbiBjbGlja2VkLlxuICAgICAqIEBwYXJhbSBkQ29sIC0gVGhlIGRpc3BsYXkgY29sdW1uIHRoYXQgd2FzIGNsaWNrZWQgb24uXG4gICAgICovXG4gICAgYXN5bmMgZWRpdEFycmF5SXRlbShlbnRpdHk6IEVudGl0eVR5cGUsIGRDb2w6IERpc3BsYXlDb2x1bW48RW50aXR5VHlwZT4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKGRDb2wuZGlzYWJsZUNsaWNrID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbmRleE9mRWRpdGVkQXJyYXlJdGVtID0gdGhpcy5lbnRpdHlBcnJheVRhYmxlQ29udGV4dC4kaW1wbGljaXQuZGF0YVNvdXJjZS5kYXRhLmluZGV4T2YoZW50aXR5KTtcbiAgICAgICAgdGhpcy5hcnJheUl0ZW0gPSBuZXcgdGhpcy5tZXRhZGF0YUVudGl0eUFycmF5LkVudGl0eUNsYXNzKGVudGl0eSk7XG4gICAgICAgIHRoaXMuYXJyYXlJdGVtUHJpb3JDaGFuZ2VzID0gTG9kYXNoVXRpbGl0aWVzLmNsb25lRGVlcCh0aGlzLmFycmF5SXRlbSk7XG5cbiAgICAgICAgdGhpcy5lZGl0QXJyYXlJdGVtRm9ybUNvbnRleHQgPSB7XG4gICAgICAgICAgICAkaW1wbGljaXQ6IHtcbiAgICAgICAgICAgICAgICBlbnRpdHk6IHRoaXMuYXJyYXlJdGVtLFxuICAgICAgICAgICAgICAgIHRhYnM6IEVudGl0eVV0aWxpdGllcy5nZXRFbnRpdHlUYWJzKHRoaXMuYXJyYXlJdGVtLCB0aGlzLmluamVjdG9yLCB0cnVlKSxcbiAgICAgICAgICAgICAgICBpc1JlYWRPbmx5OiAocHJvcGVydHksIGtleSkgPT4gdGhpcy5pc1Byb3BlcnR5UmVhZE9ubHkocHJvcGVydHksIGtleSksXG4gICAgICAgICAgICAgICAgaW5wdXRDaGFuZ2VFdmVudDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2b2lkIHRoaXMuY2hlY2tBcnJheUl0ZW0oKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0QXJyYXlJdGVtRm9ybUNvbnRleHQuJGltcGxpY2l0LnRhYnMgPSBFbnRpdHlVdGlsaXRpZXMuZ2V0RW50aXR5VGFicyh0aGlzLmFycmF5SXRlbSwgdGhpcy5pbmplY3RvciwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBoaWRlT21pdEZvckVkaXQ6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBhd2FpdCB0aGlzLmNoZWNrQXJyYXlJdGVtKCk7XG5cbiAgICAgICAgdGhpcy5lZGl0QXJyYXlJdGVtRGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihcbiAgICAgICAgICAgIHRoaXMuZWRpdEFycmF5SXRlbURpYWxvZyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtaW5XaWR0aDogJzYwJScsXG4gICAgICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICByZXN0b3JlRm9jdXM6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2F2ZXMgY2hhbmdlcyBvbiB0aGUgYXJyYXkgaXRlbSBpbiB0aGUgZGlhbG9nLlxuICAgICAqL1xuICAgIHNhdmVBcnJheUl0ZW0oKTogdm9pZCB7XG4gICAgICAgICh0aGlzLmVudGl0eVt0aGlzLnByb3BlcnR5S2V5XSBhcyBFbnRpdHlUeXBlW10pW3RoaXMuaW5kZXhPZkVkaXRlZEFycmF5SXRlbV0gPSBMb2Rhc2hVdGlsaXRpZXMuY2xvbmVEZWVwKHRoaXMuYXJyYXlJdGVtKTtcbiAgICAgICAgdGhpcy5lbnRpdHlBcnJheVRhYmxlQ29udGV4dC4kaW1wbGljaXQuZGF0YVNvdXJjZS5kYXRhID0gKHRoaXMuZW50aXR5W3RoaXMucHJvcGVydHlLZXldIGFzIEVudGl0eVR5cGVbXSk7XG5cbiAgICAgICAgdm9pZCB0aGlzLmNsb3NlRWRpdEFycmF5SXRlbURpYWxvZygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb3NlcyB0aGUgZWRpdCBhcnJheSBpdGVtIGRpYWxvZyBhbmQgcmVzZXRzIGNoYW5nZXMuXG4gICAgICovXG4gICAgYXN5bmMgY2xvc2VFZGl0QXJyYXlJdGVtRGlhbG9nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmVkaXRBcnJheUl0ZW1EaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5hcnJheUl0ZW0gPSBuZXcgdGhpcy5tZXRhZGF0YUVudGl0eUFycmF5LkVudGl0eUNsYXNzKCk7XG4gICAgICAgIHRoaXMuYXJyYXlJdGVtUHJpb3JDaGFuZ2VzID0gTG9kYXNoVXRpbGl0aWVzLmNsb25lRGVlcCh0aGlzLmFycmF5SXRlbSk7XG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tBcnJheUl0ZW0oKTtcbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwgc2VsZWN0ZWQgZW50cmllcyBmcm9tIHRoZSBlbnRpdHkgYXJyYXkuXG4gICAgICovXG4gICAgcmVtb3ZlRnJvbUVudGl0eUFycmF5KCk6IHZvaWQge1xuICAgICAgICBTZWxlY3Rpb25VdGlsaXRpZXMucmVtb3ZlKFxuICAgICAgICAgICAgdGhpcy5lbnRpdHlBcnJheVRhYmxlQ29udGV4dC4kaW1wbGljaXQuc2VsZWN0aW9uLFxuICAgICAgICAgICAgdGhpcy5lbnRpdHlbdGhpcy5wcm9wZXJ0eUtleV0gYXMgRW50aXR5VHlwZVtdLFxuICAgICAgICAgICAgdGhpcy5lbnRpdHlBcnJheVRhYmxlQ29udGV4dC4kaW1wbGljaXQuZGF0YVNvdXJjZVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICB9XG59IiwiPCEtLSBlc2xpbnQtZGlzYWJsZSBhbmd1bGFyL25vLWNhbGwtZXhwcmVzc2lvbiAtLT5cbkBpZighKGhpZGVPbWl0Rm9yQ3JlYXRlICYmIG1ldGFkYXRhLm9taXRGb3JDcmVhdGUpICYmICEoaGlkZU9taXRGb3JFZGl0ICYmIG1ldGFkYXRhLm9taXRGb3JVcGRhdGUpKSB7XG4gICAgQHN3aXRjaCAodHlwZSkge1xuICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tU3RyaW5ncy0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuICAgICAgICBAY2FzZSAoRGVjb3JhdG9yVHlwZXMuU1RSSU5HKSB7XG4gICAgICAgICAgICA8c3RyaW5nLWlucHV0XG4gICAgICAgICAgICAgICAgW2VudGl0eV09XCJlbnRpdHlcIlxuICAgICAgICAgICAgICAgIFtrZXldPVwicHJvcGVydHlLZXlcIlxuICAgICAgICAgICAgICAgIFtnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXT1cImludGVybmFsR2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgW2lzUmVhZE9ubHldPVwiaW50ZXJuYWxJc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2VFdmVudCk9XCJlbWl0Q2hhbmdlKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9zdHJpbmctaW5wdXQ+XG4gICAgICAgIH1cbiAgICAgICAgQGNhc2UgKERlY29yYXRvclR5cGVzLlNUUklOR19URVhUQk9YKSB7XG4gICAgICAgICAgICA8c3RyaW5nLXRleHRib3gtaW5wdXRcbiAgICAgICAgICAgICAgICBbZW50aXR5XT1cImVudGl0eVwiXG4gICAgICAgICAgICAgICAgW2tleV09XCJwcm9wZXJ0eUtleVwiXG4gICAgICAgICAgICAgICAgW2dldFZhbGlkYXRpb25FcnJvck1lc3NhZ2VdPVwiaW50ZXJuYWxHZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICBbaXNSZWFkT25seV09XCJpbnRlcm5hbElzUmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgIChpbnB1dENoYW5nZUV2ZW50KT1cImVtaXRDaGFuZ2UoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3N0cmluZy10ZXh0Ym94LWlucHV0PlxuICAgICAgICB9XG4gICAgICAgIEBjYXNlIChEZWNvcmF0b3JUeXBlcy5TVFJJTkdfQVVUT0NPTVBMRVRFKSB7XG4gICAgICAgICAgICA8c3RyaW5nLWF1dG9jb21wbGV0ZS1pbnB1dFxuICAgICAgICAgICAgICAgIFtlbnRpdHldPVwiZW50aXR5XCJcbiAgICAgICAgICAgICAgICBba2V5XT1cInByb3BlcnR5S2V5XCJcbiAgICAgICAgICAgICAgICBbZ2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZV09XCJpbnRlcm5hbEdldFZhbGlkYXRpb25FcnJvck1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgIFtpc1JlYWRPbmx5XT1cImludGVybmFsSXNSZWFkT25seVwiXG4gICAgICAgICAgICAgICAgKGlucHV0Q2hhbmdlRXZlbnQpPVwiZW1pdENoYW5nZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvc3RyaW5nLWF1dG9jb21wbGV0ZS1pbnB1dD5cbiAgICAgICAgfVxuICAgICAgICBAY2FzZSAoRGVjb3JhdG9yVHlwZXMuU1RSSU5HX0RST1BET1dOKSB7XG4gICAgICAgICAgICA8c3RyaW5nLWRyb3Bkb3duLWlucHV0XG4gICAgICAgICAgICAgICAgW2VudGl0eV09XCJlbnRpdHlcIlxuICAgICAgICAgICAgICAgIFtrZXldPVwicHJvcGVydHlLZXlcIlxuICAgICAgICAgICAgICAgIFtnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXT1cImludGVybmFsR2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgW2lzUmVhZE9ubHldPVwiaW50ZXJuYWxJc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2VFdmVudCk9XCJlbWl0Q2hhbmdlKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9zdHJpbmctZHJvcGRvd24taW5wdXQ+XG4gICAgICAgIH1cbiAgICAgICAgQGNhc2UgKERlY29yYXRvclR5cGVzLlNUUklOR19QQVNTV09SRCkge1xuICAgICAgICAgICAgPHN0cmluZy1wYXNzd29yZC1pbnB1dFxuICAgICAgICAgICAgICAgIFtlbnRpdHldPVwiZW50aXR5XCJcbiAgICAgICAgICAgICAgICBba2V5XT1cInByb3BlcnR5S2V5XCJcbiAgICAgICAgICAgICAgICBbZ2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZV09XCJpbnRlcm5hbEdldFZhbGlkYXRpb25FcnJvck1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgIFtpc1JlYWRPbmx5XT1cImludGVybmFsSXNSZWFkT25seVwiXG4gICAgICAgICAgICAgICAgKGlucHV0Q2hhbmdlRXZlbnQpPVwiZW1pdENoYW5nZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvc3RyaW5nLXBhc3N3b3JkLWlucHV0PlxuICAgICAgICB9XG4gICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS1Cb29sZWFucy0tLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICAgIEBjYXNlIChEZWNvcmF0b3JUeXBlcy5CT09MRUFOX0NIRUNLQk9YKSB7XG4gICAgICAgICAgICA8Ym9vbGVhbi1jaGVja2JveC1pbnB1dFxuICAgICAgICAgICAgICAgIFtlbnRpdHldPVwiZW50aXR5XCJcbiAgICAgICAgICAgICAgICBba2V5XT1cInByb3BlcnR5S2V5XCJcbiAgICAgICAgICAgICAgICBbZ2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZV09XCJpbnRlcm5hbEdldFZhbGlkYXRpb25FcnJvck1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgIFtpc1JlYWRPbmx5XT1cImludGVybmFsSXNSZWFkT25seVwiXG4gICAgICAgICAgICAgICAgKGlucHV0Q2hhbmdlRXZlbnQpPVwiZW1pdENoYW5nZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvYm9vbGVhbi1jaGVja2JveC1pbnB1dD5cbiAgICAgICAgfVxuICAgICAgICBAY2FzZSAoRGVjb3JhdG9yVHlwZXMuQk9PTEVBTl9UT0dHTEUpIHtcbiAgICAgICAgICAgIDxib29sZWFuLXRvZ2dsZS1pbnB1dFxuICAgICAgICAgICAgICAgIFtlbnRpdHldPVwiZW50aXR5XCJcbiAgICAgICAgICAgICAgICBba2V5XT1cInByb3BlcnR5S2V5XCJcbiAgICAgICAgICAgICAgICBbZ2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZV09XCJpbnRlcm5hbEdldFZhbGlkYXRpb25FcnJvck1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgIFtpc1JlYWRPbmx5XT1cImludGVybmFsSXNSZWFkT25seVwiXG4gICAgICAgICAgICAgICAgKGlucHV0Q2hhbmdlRXZlbnQpPVwiZW1pdENoYW5nZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvYm9vbGVhbi10b2dnbGUtaW5wdXQ+XG4gICAgICAgIH1cbiAgICAgICAgQGNhc2UgKERlY29yYXRvclR5cGVzLkJPT0xFQU5fRFJPUERPV04pIHtcbiAgICAgICAgICAgIDxib29sZWFuLWRyb3Bkb3duLWlucHV0XG4gICAgICAgICAgICAgICAgW2VudGl0eV09XCJlbnRpdHlcIlxuICAgICAgICAgICAgICAgIFtrZXldPVwicHJvcGVydHlLZXlcIlxuICAgICAgICAgICAgICAgIFtnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXT1cImludGVybmFsR2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgW2lzUmVhZE9ubHldPVwiaW50ZXJuYWxJc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2VFdmVudCk9XCJlbWl0Q2hhbmdlKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9ib29sZWFuLWRyb3Bkb3duLWlucHV0PlxuICAgICAgICB9XG4gICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tTnVtYmVycy0tLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICAgIEBjYXNlIChEZWNvcmF0b3JUeXBlcy5OVU1CRVIpIHtcbiAgICAgICAgICAgIDxudW1iZXItaW5wdXRcbiAgICAgICAgICAgICAgICBbZW50aXR5XT1cImVudGl0eVwiXG4gICAgICAgICAgICAgICAgW2tleV09XCJwcm9wZXJ0eUtleVwiXG4gICAgICAgICAgICAgICAgW2dldFZhbGlkYXRpb25FcnJvck1lc3NhZ2VdPVwiaW50ZXJuYWxHZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICBbaXNSZWFkT25seV09XCJpbnRlcm5hbElzUmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgIChpbnB1dENoYW5nZUV2ZW50KT1cImVtaXRDaGFuZ2UoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L251bWJlci1pbnB1dD5cbiAgICAgICAgfVxuICAgICAgICBAY2FzZSAoRGVjb3JhdG9yVHlwZXMuTlVNQkVSX0RST1BET1dOKSB7XG4gICAgICAgICAgICA8bnVtYmVyLWRyb3Bkb3duLWlucHV0XG4gICAgICAgICAgICAgICAgW2VudGl0eV09XCJlbnRpdHlcIlxuICAgICAgICAgICAgICAgIFtrZXldPVwicHJvcGVydHlLZXlcIlxuICAgICAgICAgICAgICAgIFtnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXT1cImludGVybmFsR2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgW2lzUmVhZE9ubHldPVwiaW50ZXJuYWxJc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2VFdmVudCk9XCJlbWl0Q2hhbmdlKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9udW1iZXItZHJvcGRvd24taW5wdXQ+XG4gICAgICAgIH1cbiAgICAgICAgQGNhc2UgKERlY29yYXRvclR5cGVzLk5VTUJFUl9TTElERVIpIHtcbiAgICAgICAgICAgIDxudW1iZXItc2xpZGVyLWlucHV0XG4gICAgICAgICAgICAgICAgW2VudGl0eV09XCJlbnRpdHlcIlxuICAgICAgICAgICAgICAgIFtrZXldPVwicHJvcGVydHlLZXlcIlxuICAgICAgICAgICAgICAgIFtnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXT1cImludGVybmFsR2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgW2lzUmVhZE9ubHldPVwiaW50ZXJuYWxJc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2VFdmVudCk9XCJlbWl0Q2hhbmdlKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9udW1iZXItc2xpZGVyLWlucHV0PlxuICAgICAgICB9XG4gICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLUFycmF5LS0tLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICAgIEBjYXNlIChEZWNvcmF0b3JUeXBlcy5BUlJBWV9EQVRFKSB7XG4gICAgICAgICAgICA8YXJyYXktZGF0ZS1pbnB1dFxuICAgICAgICAgICAgICAgIFtlbnRpdHldPVwiZW50aXR5XCJcbiAgICAgICAgICAgICAgICBba2V5XT1cInByb3BlcnR5S2V5XCJcbiAgICAgICAgICAgICAgICBbZ2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZV09XCJpbnRlcm5hbEdldFZhbGlkYXRpb25FcnJvck1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgIFtpc1JlYWRPbmx5XT1cImludGVybmFsSXNSZWFkT25seVwiXG4gICAgICAgICAgICAgICAgKGlucHV0Q2hhbmdlRXZlbnQpPVwiZW1pdENoYW5nZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvYXJyYXktZGF0ZS1pbnB1dD5cbiAgICAgICAgfVxuICAgICAgICBAY2FzZSAoRGVjb3JhdG9yVHlwZXMuQVJSQVlfREFURV9USU1FKSB7XG4gICAgICAgICAgICA8YXJyYXktZGF0ZS10aW1lLWlucHV0XG4gICAgICAgICAgICAgICAgW2VudGl0eV09XCJlbnRpdHlcIlxuICAgICAgICAgICAgICAgIFtrZXldPVwicHJvcGVydHlLZXlcIlxuICAgICAgICAgICAgICAgIFtnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXT1cImludGVybmFsR2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgW2lzUmVhZE9ubHldPVwiaW50ZXJuYWxJc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2VFdmVudCk9XCJlbWl0Q2hhbmdlKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9hcnJheS1kYXRlLXRpbWUtaW5wdXQ+XG4gICAgICAgIH1cbiAgICAgICAgQGNhc2UgKERlY29yYXRvclR5cGVzLkFSUkFZX0RBVEVfUkFOR0UpIHtcbiAgICAgICAgICAgIDxhcnJheS1kYXRlLXJhbmdlLWlucHV0XG4gICAgICAgICAgICAgICAgW2VudGl0eV09XCJlbnRpdHlcIlxuICAgICAgICAgICAgICAgIFtrZXldPVwicHJvcGVydHlLZXlcIlxuICAgICAgICAgICAgICAgIFtnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXT1cImludGVybmFsR2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgW2lzUmVhZE9ubHldPVwiaW50ZXJuYWxJc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2VFdmVudCk9XCJlbWl0Q2hhbmdlKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9hcnJheS1kYXRlLXJhbmdlLWlucHV0PlxuICAgICAgICB9XG4gICAgICAgIEBjYXNlIChEZWNvcmF0b3JUeXBlcy5BUlJBWV9TVFJJTkdfQ0hJUFMpIHtcbiAgICAgICAgICAgIDxhcnJheS1zdHJpbmctY2hpcHMtaW5wdXRcbiAgICAgICAgICAgICAgICBbZW50aXR5XT1cImVudGl0eVwiXG4gICAgICAgICAgICAgICAgW2tleV09XCJwcm9wZXJ0eUtleVwiXG4gICAgICAgICAgICAgICAgW2dldFZhbGlkYXRpb25FcnJvck1lc3NhZ2VdPVwiaW50ZXJuYWxHZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICBbaXNSZWFkT25seV09XCJpbnRlcm5hbElzUmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgIChpbnB1dENoYW5nZUV2ZW50KT1cImVtaXRDaGFuZ2UoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2FycmF5LXN0cmluZy1jaGlwcy1pbnB1dD5cbiAgICAgICAgfVxuICAgICAgICBAY2FzZSAoRGVjb3JhdG9yVHlwZXMuQVJSQVlfU1RSSU5HX0FVVE9DT01QTEVURV9DSElQUykge1xuICAgICAgICAgICAgPGFycmF5LXN0cmluZy1hdXRvY29tcGxldGUtY2hpcHNcbiAgICAgICAgICAgICAgICBbZW50aXR5XT1cImVudGl0eVwiXG4gICAgICAgICAgICAgICAgW2tleV09XCJwcm9wZXJ0eUtleVwiXG4gICAgICAgICAgICAgICAgW2dldFZhbGlkYXRpb25FcnJvck1lc3NhZ2VdPVwiaW50ZXJuYWxHZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICBbaXNSZWFkT25seV09XCJpbnRlcm5hbElzUmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgIChpbnB1dENoYW5nZUV2ZW50KT1cImVtaXRDaGFuZ2UoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2FycmF5LXN0cmluZy1hdXRvY29tcGxldGUtY2hpcHM+XG4gICAgICAgIH1cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tRGF0ZXMtLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgQGNhc2UgKERlY29yYXRvclR5cGVzLkRBVEUpIHtcbiAgICAgICAgICAgIDxkYXRlLWlucHV0XG4gICAgICAgICAgICAgICAgW2VudGl0eV09XCJlbnRpdHlcIlxuICAgICAgICAgICAgICAgIFtrZXldPVwicHJvcGVydHlLZXlcIlxuICAgICAgICAgICAgICAgIFtnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXT1cImludGVybmFsR2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgW2lzUmVhZE9ubHldPVwiaW50ZXJuYWxJc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2VFdmVudCk9XCJlbWl0Q2hhbmdlKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9kYXRlLWlucHV0PlxuICAgICAgICB9XG4gICAgICAgIEBjYXNlIChEZWNvcmF0b3JUeXBlcy5EQVRFX1JBTkdFKSB7XG4gICAgICAgICAgICA8ZGF0ZS1yYW5nZS1pbnB1dFxuICAgICAgICAgICAgICAgIFtlbnRpdHldPVwiZW50aXR5XCJcbiAgICAgICAgICAgICAgICBba2V5XT1cInByb3BlcnR5S2V5XCJcbiAgICAgICAgICAgICAgICBbZ2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZV09XCJpbnRlcm5hbEdldFZhbGlkYXRpb25FcnJvck1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgIFtpc1JlYWRPbmx5XT1cImludGVybmFsSXNSZWFkT25seVwiXG4gICAgICAgICAgICAgICAgKGlucHV0Q2hhbmdlRXZlbnQpPVwiZW1pdENoYW5nZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvZGF0ZS1yYW5nZS1pbnB1dD5cbiAgICAgICAgfVxuICAgICAgICBAY2FzZSAoRGVjb3JhdG9yVHlwZXMuREFURV9USU1FKSB7XG4gICAgICAgICAgICA8ZGF0ZS10aW1lLWlucHV0XG4gICAgICAgICAgICAgICAgW2VudGl0eV09XCJlbnRpdHlcIlxuICAgICAgICAgICAgICAgIFtrZXldPVwicHJvcGVydHlLZXlcIlxuICAgICAgICAgICAgICAgIFtnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXT1cImludGVybmFsR2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgW2lzUmVhZE9ubHldPVwiaW50ZXJuYWxJc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2VFdmVudCk9XCJlbWl0Q2hhbmdlKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9kYXRlLXRpbWUtaW5wdXQ+XG4gICAgICAgIH1cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tRmlsZXMtLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgQGNhc2UgKERlY29yYXRvclR5cGVzLkZJTEVfREVGQVVMVCkge1xuICAgICAgICAgICAgPGZpbGUtZGVmYXVsdC1pbnB1dFxuICAgICAgICAgICAgICAgIFtlbnRpdHldPVwiZW50aXR5XCJcbiAgICAgICAgICAgICAgICBba2V5XT1cInByb3BlcnR5S2V5XCJcbiAgICAgICAgICAgICAgICBbZ2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZV09XCJpbnRlcm5hbEdldFZhbGlkYXRpb25FcnJvck1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgIFtpc1JlYWRPbmx5XT1cImludGVybmFsSXNSZWFkT25seVwiXG4gICAgICAgICAgICAgICAgKGlucHV0Q2hhbmdlRXZlbnQpPVwiZW1pdENoYW5nZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvZmlsZS1kZWZhdWx0LWlucHV0PlxuICAgICAgICB9XG4gICAgICAgIEBjYXNlIChEZWNvcmF0b3JUeXBlcy5GSUxFX0lNQUdFKSB7XG4gICAgICAgICAgICA8ZmlsZS1pbWFnZS1pbnB1dFxuICAgICAgICAgICAgICAgIFtlbnRpdHldPVwiZW50aXR5XCJcbiAgICAgICAgICAgICAgICBba2V5XT1cInByb3BlcnR5S2V5XCJcbiAgICAgICAgICAgICAgICBbZ2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZV09XCJpbnRlcm5hbEdldFZhbGlkYXRpb25FcnJvck1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgIFtpc1JlYWRPbmx5XT1cImludGVybmFsSXNSZWFkT25seVwiXG4gICAgICAgICAgICAgICAgKGlucHV0Q2hhbmdlRXZlbnQpPVwiZW1pdENoYW5nZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvZmlsZS1pbWFnZS1pbnB1dD5cbiAgICAgICAgfVxuICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuICAgICAgICA8IS0tLS0tLS0tLS0tLS0tIHJlZmVyZW5jZXMgbWFueSAtLS0tLS0tLS0tLS0tPlxuICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuICAgICAgICBAY2FzZSAoRGVjb3JhdG9yVHlwZXMuUkVGRVJFTkNFU19NQU5ZKSB7XG4gICAgICAgICAgICA8cmVmZXJlbmNlcy1tYW55LWlucHV0XG4gICAgICAgICAgICAgICAgW2VudGl0eV09XCJlbnRpdHlcIlxuICAgICAgICAgICAgICAgIFtrZXldPVwicHJvcGVydHlLZXlcIlxuICAgICAgICAgICAgICAgIFtnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXT1cImludGVybmFsR2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgW2lzUmVhZE9ubHldPVwiaW50ZXJuYWxJc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2VFdmVudCk9XCJlbWl0Q2hhbmdlKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9yZWZlcmVuY2VzLW1hbnktaW5wdXQ+XG4gICAgICAgIH1cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tQ3VzdG9tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgQGNhc2UgKERlY29yYXRvclR5cGVzLkNVU1RPTSkge1xuICAgICAgICAgICAgPGN1c3RvbS1pbnB1dFxuICAgICAgICAgICAgICAgIFtlbnRpdHldPVwiZW50aXR5XCJcbiAgICAgICAgICAgICAgICBba2V5XT1cInByb3BlcnR5S2V5XCJcbiAgICAgICAgICAgICAgICBbZ2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZV09XCJpbnRlcm5hbEdldFZhbGlkYXRpb25FcnJvck1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgIFtpc1JlYWRPbmx5XT1cImludGVybmFsSXNSZWFkT25seVwiXG4gICAgICAgICAgICAgICAgKGlucHV0Q2hhbmdlRXZlbnQpPVwiZW1pdENoYW5nZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvY3VzdG9tLWlucHV0PlxuICAgICAgICB9XG4gICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLU9iamVjdC0tLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICAgIEBjYXNlIChEZWNvcmF0b3JUeXBlcy5PQkpFQ1QpIHtcbiAgICAgICAgICAgIDxiPnt7bWV0YWRhdGFEZWZhdWx0T2JqZWN0LmRpc3BsYXlOYW1lfX08L2I+XG4gICAgICAgICAgICA8IS0tIGl0ZXJhdGVzIG92ZXIgdGhlIG9iamVjdCBwcm9wZXJ0aWVzIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvcm07IGNvbnRleHQ6IG9iamVjdEZvcm1Db250ZXh0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS1PYmplY3QgRHJvcGRvd24tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgQGNhc2UgKERlY29yYXRvclR5cGVzLk9CSkVDVF9EUk9QRE9XTikge1xuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e21ldGFkYXRhLmRpc3BsYXlOYW1lfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCAjbW9kZWw9XCJuZ01vZGVsXCJcbiAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwib2JqZWN0RHJvcGRvd25OYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cIm1ldGFkYXRhLnJlcXVpcmVkKGVudGl0eSlcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaW50ZXJuYWxJc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbXBhcmVXaXRoXT1cImNvbXBhcmVPYmplY3RzQm91bmRcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVudGl0eVtwcm9wZXJ0eUtleV1cIlxuICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cImVtaXRDaGFuZ2UoKVwiXG4gICAgICAgICAgICAgICAgICAgIChvcGVuZWQpPVwic2VsZWN0U2VhcmNoSW5wdXQuZm9jdXMoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJzZWxlY3Qtc2VhcmNoLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBhbmd1bGFyL25vLWFueSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAjc2VsZWN0U2VhcmNoSW5wdXQgbWF0SW5wdXQgKGtleXVwKT1cImZpbHRlck9iamVjdERyb3Bkb3duVmFsdWVzKCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZmEtaWNvbiBtYXRTdWZmaXggW2ljb25dPVwiZmFTZWFyY2hcIj48L2ZhLWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoIW1ldGFkYXRhLnJlcXVpcmVkKGVudGl0eSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uPi08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChzaG91bGREaXNwbGF5Q3VycmVudE9iamVjdERyb3Bkb3duVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJjdXJyZW50T2JqZWN0RHJvcGRvd25WYWx1ZT8udmFsdWVcIj57e2N1cnJlbnRPYmplY3REcm9wZG93blZhbHVlPy5kaXNwbGF5TmFtZX19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKHZhbHVlIG9mIGZpbHRlcmVkT2JqZWN0RHJvcGRvd25WYWx1ZXM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cInZhbHVlLnZhbHVlXCI+e3t2YWx1ZS5kaXNwbGF5TmFtZX19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+e3tpbnRlcm5hbEdldFZhbGlkYXRpb25FcnJvck1lc3NhZ2UobW9kZWwpfX08L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIH1cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLSByZWZlcmVuY2VzIG9uZSAtLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgQGNhc2UgKERlY29yYXRvclR5cGVzLlJFRkVSRU5DRVNfT05FKSB7XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgW2NsYXNzLnctZnVsbF09XCJtZXRhZGF0YVJlZmVyZW5jZXNPbmUuZHJvcGRvd25Pbmx5XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e21ldGFkYXRhLmRpc3BsYXlOYW1lfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCAjaW5wdXRNb2RlbD1cIm5nTW9kZWxcIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJyZWZlcmVuY2VzT25lTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpbnRlcm5hbElzUmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwibWV0YWRhdGEucmVxdWlyZWQoZW50aXR5KVwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW50aXR5W3Byb3BlcnR5S2V5XVwiXG4gICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwic2V0UmVmZXJlbmNlc09uZU9iamVjdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgKG9wZW5lZCk9XCJzZWxlY3RTZWFyY2hJbnB1dC5mb2N1cygpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInNlbGVjdC1zZWFyY2gtaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGFuZ3VsYXIvbm8tYW55IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICNzZWxlY3RTZWFyY2hJbnB1dCBtYXRJbnB1dCAoa2V5dXApPVwiZmlsdGVyUmVmZXJlbmNlc09uZVZhbHVlcygkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGZhLWljb24gbWF0U3VmZml4IFtpY29uXT1cImZhU2VhcmNoXCI+PC9mYS1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKCFtZXRhZGF0YS5yZXF1aXJlZChlbnRpdHkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbj4tPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoc2hvdWxkRGlzcGxheUN1cnJlbnRSZWZlcmVuY2VzT25lRHJvcGRvd25WYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImN1cnJlbnRSZWZlcmVuY2VzT25lRHJvcGRvd25WYWx1ZT8udmFsdWVcIj57e2N1cnJlbnRSZWZlcmVuY2VzT25lRHJvcGRvd25WYWx1ZT8uZGlzcGxheU5hbWV9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAZm9yICh2YWx1ZSBvZiBmaWx0ZXJlZFJlZmVyZW5jZXNPbmVEcm9wZG93blZhbHVlczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidmFsdWUudmFsdWVcIj57e3ZhbHVlLmRpc3BsYXlOYW1lfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvcj57e2ludGVybmFsR2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZShpbnB1dE1vZGVsKX19PC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPCEtLSBpdGVyYXRlcyBvdmVyIHRoZSByZWZlcmVuY2VzIG9uZSBwcm9wZXJ0aWVzIC0tPlxuICAgICAgICAgICAgQGlmIChyZWZlcmVuY2VzT25lRm9ybUNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9ybTsgY29udGV4dDogcmVmZXJlbmNlc09uZUZvcm1Db250ZXh0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tQXJyYXktLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgQGNhc2UgKERlY29yYXRvclR5cGVzLkFSUkFZKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW50aXR5QXJyYXlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF0LWVsZXZhdGlvbi16OCBlbGV2YXRpb24tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcnJheS1oZWFkbGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+e3ttZXRhZGF0YUVudGl0eUFycmF5LmRpc3BsYXlOYW1lfX08L2I+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICBAaWYgKG1ldGFkYXRhRW50aXR5QXJyYXkuY3JlYXRlSW5saW5lICYmICFpbnRlcm5hbElzUmVhZE9ubHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoYWRkQXJyYXlJdGVtRm9ybUNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9ybTsgY29udGV4dDogYWRkQXJyYXlJdGVtRm9ybUNvbnRleHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBlbHNlIGlmIChhZGRBcnJheUl0ZW1Gb3JtQ29udGV4dDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9ybTsgY29udGV4dDogYWRkQXJyYXlJdGVtRm9ybUNvbnRleHQyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmICghaW50ZXJuYWxJc1JlYWRPbmx5ICYmIGVudGl0eUFycmF5VGFibGVDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZXRhZGF0YUVudGl0eUFycmF5LmNyZWF0ZUlubGluZSAmJiAhaXNBcnJheUl0ZW1WYWxpZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRFbnRpdHkoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e21ldGFkYXRhRW50aXR5QXJyYXkuYWRkQnV0dG9uTGFiZWx9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhZW50aXR5QXJyYXlUYWJsZUNvbnRleHQuJGltcGxpY2l0LnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlRnJvbUVudGl0eUFycmF5KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ttZXRhZGF0YUVudGl0eUFycmF5LnJlbW92ZUJ1dHRvbkxhYmVsfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoZW50aXR5QXJyYXlUYWJsZUNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YWJsZTsgY29udGV4dDogZW50aXR5QXJyYXlUYWJsZUNvbnRleHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0gaGFzIG1hbnkgLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgQGNhc2UgKERlY29yYXRvclR5cGVzLkhBU19NQU5ZKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGFzTWFueVwiPlxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cInRpdGxlXCI+e3ttZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLnRpdGxlfX08L2gyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGdyaWQtY29scy0xMiBnYXAteC02XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImxnOmNvbC1zcGFuLTggbWQ6Y29sLXNwYW4tNiBjb2wtc3Bhbi0xMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e21ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuYmFzZURhdGEuc2VhcmNoTGFiZWx9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IChrZXl1cCk9XCJhcHBseUhhc01hbnlGaWx0ZXIoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKG1ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuYmFzZURhdGEudGFibGVBY3Rpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5sZzpjb2wtc3Bhbi0yXT1cImhhc01hbnlBbGxvd0NyZWF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmxnOmNvbC1zcGFuLTRdPVwiIWhhc01hbnlBbGxvd0NyZWF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm1kOmNvbC1zcGFuLTNdPVwiaGFzTWFueUFsbG93Q3JlYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MubWQ6Y29sLXNwYW4tNl09XCIhaGFzTWFueUFsbG93Q3JlYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuY29sLXNwYW4tNl09XCJoYXNNYW55QWxsb3dDcmVhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5jb2wtc3Bhbi0xMl09XCIhaGFzTWFueUFsbG93Q3JlYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImFjdGlvbnMtYnV0dG9uXCIgbWF0LXJhaXNlZC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ttZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLnRhYmxlQWN0aW9uc0xhYmVsfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAobWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5iYXNlRGF0YS5hbGxvd0pzb25JbXBvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtbWVudS1pdGVtIFtkaXNhYmxlZF09XCJoYXNNYW55VGFibGVBY3Rpb25EaXNhYmxlZChoYXNNYW55SW1wb3J0QWN0aW9uKVwiIChjbGljayk9XCJydW5IYXNNYW55VGFibGVBY3Rpb24oaGFzTWFueUltcG9ydEFjdGlvbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3toYXNNYW55SW1wb3J0QWN0aW9uLmRpc3BsYXlOYW1lfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGFjdGlvbiBvZiBtZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLnRhYmxlQWN0aW9uczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LW1lbnUtaXRlbSBbZGlzYWJsZWRdPVwiaGFzTWFueVRhYmxlQWN0aW9uRGlzYWJsZWQoYWN0aW9uKVwiIChjbGljayk9XCJydW5IYXNNYW55VGFibGVBY3Rpb24oYWN0aW9uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2FjdGlvbi5kaXNwbGF5TmFtZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoaGFzTWFueUFsbG93Q3JlYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmxnOmNvbC1zcGFuLTJdPVwibWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5iYXNlRGF0YS50YWJsZUFjdGlvbnMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MubGc6Y29sLXNwYW4tNF09XCIhbWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5iYXNlRGF0YS50YWJsZUFjdGlvbnMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MubWQ6Y29sLXNwYW4tM109XCJtZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLnRhYmxlQWN0aW9ucy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5tZDpjb2wtc3Bhbi02XT1cIiFtZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLnRhYmxlQWN0aW9ucy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5jb2wtc3Bhbi02XT1cIm1ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuYmFzZURhdGEudGFibGVBY3Rpb25zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmNvbC1zcGFuLTEyXT1cIiFtZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLnRhYmxlQWN0aW9ucy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY3JlYXRlLWJ1dHRvblwiIG1hdC1yYWlzZWQtYnV0dG9uIChjbGljayk9XCJjcmVhdGVIYXNNYW55RW50aXR5KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ttZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLmNyZWF0ZUJ1dHRvbkxhYmVsfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXQtZWxldmF0aW9uLXo4IGVsZXZhdGlvbi1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChoYXNNYW55VGFibGVDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFibGU7IGNvbnRleHQ6IGhhc01hbnlUYWJsZUNvbnRleHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIEBkZWZhdWx0IHtcbiAgICAgICAgICAgIDxkaXY+RVJST1I6IFRoZSB0eXBlIHt7dHlwZX19IGlzIG5vdCBrbm93bi48L2Rpdj5cbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG48bmctdGVtcGxhdGUgI3RhYmxlIGxldC1jb250ZXh0PlxuICAgIDxtYXQtdGFibGUgbWF0U29ydCBbZGF0YVNvdXJjZV09XCJjb250ZXh0LmRhdGFTb3VyY2VcIiBbY2xhc3MudGFibGUtd2l0aC1lcnJvci1zbG90XT1cImNvbnRleHQuc2hvdWxkU2hvd01pc3NpbmdFcnJvclwiPlxuICAgICAgICA8IS0tIHNlbGVjdCBDb2x1bW4gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic2VsZWN0XCI+XG4gICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggW2NoZWNrZWRdPVwiY29udGV4dC5zZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiBTZWxlY3Rpb25VdGlsaXRpZXMuaXNBbGxTZWxlY3RlZChjb250ZXh0LnNlbGVjdGlvbiwgY29udGV4dC5kYXRhU291cmNlKVwiXG4gICAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cImNvbnRleHQuc2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgIVNlbGVjdGlvblV0aWxpdGllcy5pc0FsbFNlbGVjdGVkKGNvbnRleHQuc2VsZWN0aW9uLCBjb250ZXh0LmRhdGFTb3VyY2UpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBTZWxlY3Rpb25VdGlsaXRpZXMubWFzdGVyVG9nZ2xlKGNvbnRleHQuc2VsZWN0aW9uLCBjb250ZXh0LmRhdGFTb3VyY2UpIDogbnVsbFwiPlxuICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgdmFsdWVcIiBbZHluYW1pY1N0eWxlQ2xhc3Nlc109XCJjb250ZXh0LmR5bmFtaWNSb3dTdHlsZUNsYXNzZXNcIiBbdmFsdWVdPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IFtjaGVja2VkXT1cImNvbnRleHQuc2VsZWN0aW9uLmlzU2VsZWN0ZWQodmFsdWUpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiJGV2ZW50ID8gY29udGV4dC5zZWxlY3Rpb24udG9nZ2xlKHZhbHVlKSA6IG51bGxcIj5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIEBmb3IgKGRDb2wgb2YgY29udGV4dC5kaXNwbGF5Q29sdW1uczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwiZENvbC5kaXNwbGF5TmFtZVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICB7e2RDb2wuZGlzcGxheU5hbWV9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCB2YWx1ZVwiIFtjbGFzcy5lbmFibGVkXT1cIiFkQ29sLmRpc2FibGVDbGljayAmJiBjb250ZXh0LmFsbG93Q2xpY2sodmFsdWUpXCJcbiAgICAgICAgICAgICAgICAgICAgW2R5bmFtaWNTdHlsZUNsYXNzZXNdPVwiY29udGV4dC5keW5hbWljUm93U3R5bGVDbGFzc2VzXCIgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrQ2VsbCh2YWx1ZSwgZENvbCwgY29udGV4dClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChkQ29sLkNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpc3BsYXktY29sdW1uLXZhbHVlIFtlbnRpdHldPVwidmFsdWVcIiBbQ29tcG9uZW50Q2xhc3NdPVwiZENvbC5Db21wb25lbnRcIj48L2Rpc3BsYXktY29sdW1uLXZhbHVlPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7Z2V0RGlzcGxheUNvbHVtblZhbHVlKHZhbHVlLCBkQ29sKX19XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cblxuICAgICAgICA8bWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImNvbnRleHQuZGlzcGxheWVkQ29sdW1uc1wiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgIDxtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBjb250ZXh0LmRpc3BsYXllZENvbHVtbnNcIj48L21hdC1yb3c+XG4gICAgPC9tYXQtdGFibGU+XG5cbiAgICBAaWYgKGNvbnRleHQuZGlzcGxheUxvYWRpbmdTcGlubmVyICYmIGNvbnRleHQuaXNMb2FkaW5nKSB7XG4gICAgICAgIDxtYXQtc3Bpbm5lcj5cbiAgICAgICAgPC9tYXQtc3Bpbm5lcj5cbiAgICB9XG4gICAgQGVsc2UgaWYgKGNvbnRleHQuc2hvdWxkU2hvd01pc3NpbmdFcnJvciAmJiAhY29udGV4dC5kYXRhU291cmNlLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1lcnJvclwiPnt7Y29udGV4dC5lbXB0eUVycm9yTWVzc2FnZX19PC9kaXY+XG4gICAgfVxuXG4gICAgPG1hdC1wYWdpbmF0b3IgW2xlbmd0aF09XCJjb250ZXh0LmRhdGFTb3VyY2UuZmlsdGVyZWREYXRhLmxlbmd0aFwiIFtwYWdlSW5kZXhdPVwiMFwiIFtwYWdlU2l6ZV09XCIxMFwiIFtwYWdlU2l6ZU9wdGlvbnNdPVwiWzUsIDEwLCAyNSwgNTBdXCI+PC9tYXQtcGFnaW5hdG9yPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG48IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUZvcm0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbjwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuPG5nLXRlbXBsYXRlICNmb3JtIGxldC1jb250ZXh0PlxuICAgIDwhLS0gZXNsaW50LWRpc2FibGUgYW5ndWxhci9uby1jYWxsLWV4cHJlc3Npb24gLS0+XG4gICAgQGlmIChjb250ZXh0LnRhYnMubGVuZ3RoID4gMSkge1xuICAgICAgICA8bWF0LXRhYi1ncm91cCBwcmVzZXJ2ZUNvbnRlbnQ+XG4gICAgICAgICAgICBAZm9yICh0YWIgb2YgY29udGV4dC50YWJzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICA8bWF0LXRhYiBbbGFiZWxdPVwidGFiLnRhYk5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAocm93IG9mIHRhYi5yb3dzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGdyaWQtY29scy0xMiBnYXAteC02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoa2V5IG9mIHJvdy5rZXlzOyB0cmFjayBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1tYXQtZW50aXR5LWlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZW50aXR5XT1cImNvbnRleHQuZW50aXR5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcm9wZXJ0eUtleV09XCJrZXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dldFZhbGlkYXRpb25FcnJvck1lc3NhZ2VdPVwiaW50ZXJuYWxHZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWxpZEVtcHR5XT1cImNvbnRleHQudmFsaWRFbXB0eT8uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzUmVhZE9ubHldPVwiY29udGV4dC5pc1JlYWRPbmx5Py4oY29udGV4dC5lbnRpdHksIGtleSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIkVudGl0eVV0aWxpdGllcy5nZXRXaWR0aENsYXNzZXMoY29udGV4dC5lbnRpdHksIGtleSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVPbWl0Rm9yRWRpdF09XCJjb250ZXh0LmhpZGVPbWl0Rm9yRWRpdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZU9taXRGb3JDcmVhdGVdPVwiY29udGV4dC5oaWRlT21pdEZvckNyZWF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2VFdmVudCk9XCJjb250ZXh0LmlucHV0Q2hhbmdlRXZlbnQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtbWF0LWVudGl0eS1pbnB1dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9tYXQtdGFiLWdyb3VwPlxuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICAgIEBpZiAoIWNvbnRleHQudGFicy5sZW5ndGgpIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibm8tZW50aXR5LXRhYnNcIj5cbiAgICAgICAgICAgICAgICBFUlJPUjogTm8gSW5wdXRzLiBEaWQgeW91IGNvcnJlY3RseSBhc3NpZ24gYWxsIHZhbHVlcyBpbiB0aGUgbW9kZWwgY29uc3RydWN0b3I/XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIH1cbiAgICAgICAgQGVsc2Uge1xuICAgICAgICAgICAgQGZvciAocm93IG9mIGNvbnRleHQudGFic1swXS5yb3dzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBncmlkLWNvbHMtMTIgZ2FwLXgtNlwiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChrZXkgb2Ygcm93LmtleXM7IHRyYWNrIGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1tYXQtZW50aXR5LWlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VudGl0eV09XCJjb250ZXh0LmVudGl0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb3BlcnR5S2V5XT1cImtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dldFZhbGlkYXRpb25FcnJvck1lc3NhZ2VdPVwiaW50ZXJuYWxHZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsaWRFbXB0eV09XCJjb250ZXh0LnZhbGlkRW1wdHk/LigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNSZWFkT25seV09XCJjb250ZXh0LmlzUmVhZE9ubHk/Lihjb250ZXh0LmVudGl0eSwga2V5KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIkVudGl0eVV0aWxpdGllcy5nZXRXaWR0aENsYXNzZXMoY29udGV4dC5lbnRpdHksIGtleSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlT21pdEZvckVkaXRdPVwiY29udGV4dC5oaWRlT21pdEZvckVkaXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlT21pdEZvckNyZWF0ZV09XCJjb250ZXh0LmhpZGVPbWl0Rm9yQ3JlYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2VFdmVudCk9XCJjb250ZXh0LmlucHV0Q2hhbmdlRXZlbnQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25neC1tYXQtZW50aXR5LWlucHV0PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuXG48IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbjwhLS0tLS0tLS0tLS0tLS0tLS0tLS1BZGQgQXJyYXkgSXRlbSBEaWFsb2ctLS0tLS0tLS0tLS0tLS0tPlxuPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG48bmctdGVtcGxhdGUgI2FkZEFycmF5SXRlbURpYWxvZz5cbiAgICA8ZGl2IGNsYXNzPVwibWF0LWRpYWxvZy10aXRsZVwiPlxuICAgICAgICA8ZGl2Pnt7YWRkQXJyYXlJdGVtRGlhbG9nRGF0YS50aXRsZX19PC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8Zm9ybSAobmdTdWJtaXQpPVwiYWRkQXJyYXlJdGVtKClcIj5cbiAgICAgICAgPG1hdC1kaWFsb2ctY29udGVudD5cbiAgICAgICAgICAgIEBpZiAoYWRkQXJyYXlJdGVtRm9ybUNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9ybTsgY29udGV4dDogYWRkQXJyYXlJdGVtRm9ybUNvbnRleHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgXG4gICAgICAgIDxtYXQtZGlhbG9nLWFjdGlvbnM+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGlhbG9nLWJ1dHRvbi13aXRoLWluZm8taWNvblwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIG1hdC1yYWlzZWQtYnV0dG9uIG1hdEJhZGdlQ29sb3I9XCJ3YXJuXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0FycmF5SXRlbVZhbGlkXCJcbiAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlXT1cImFycmF5SXRlbVZhbGlkYXRpb25FcnJvcnMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlSGlkZGVuXT1cIiFhcnJheUl0ZW1WYWxpZGF0aW9uRXJyb3JzLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7e2FkZEFycmF5SXRlbURpYWxvZ0RhdGEuY3JlYXRlQnV0dG9uTGFiZWx9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIEBpZiAoYXJyYXlJdGVtVmFsaWRhdGlvbkVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5neC1tYXQtZW50aXR5LXRvb2x0aXAgW3Rvb2x0aXBDb250ZW50XT1cImFycmF5SXRlbVRvb2x0aXBDb250ZW50XCI+PC9uZ3gtbWF0LWVudGl0eS10b29sdGlwPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LXJhaXNlZC1idXR0b24gY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCIgKGNsaWNrKT1cImNsb3NlQWRkQXJyYXlJdGVtRGlhbG9nKClcIj5cbiAgICAgICAgICAgICAgICB7e2FkZEFycmF5SXRlbURpYWxvZ0RhdGEuY2FuY2VsQnV0dG9uTGFiZWx9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgIDwvZm9ybT5cblxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG48IS0tLS0tLS0tLS0tLS0tLS0tLS0tRWRpdCBBcnJheSBJdGVtIERpYWxvZy0tLS0tLS0tLS0tLS0tLS0+XG48IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbjxuZy10ZW1wbGF0ZSAjZWRpdEFycmF5SXRlbURpYWxvZz5cbiAgICA8ZGl2IGNsYXNzPVwibWF0LWRpYWxvZy10aXRsZVwiPlxuICAgICAgICA8ZGl2Pnt7ZWRpdEFycmF5SXRlbURpYWxvZ0RhdGEudGl0bGUoYXJyYXlJdGVtUHJpb3JDaGFuZ2VzKX19PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgXG4gICAgPGZvcm0gKG5nU3VibWl0KT1cInNhdmVBcnJheUl0ZW0oKVwiPlxuICAgICAgICA8bWF0LWRpYWxvZy1jb250ZW50PlxuICAgICAgICAgICAgQGlmIChlZGl0QXJyYXlJdGVtRm9ybUNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9ybTsgY29udGV4dDogZWRpdEFycmF5SXRlbUZvcm1Db250ZXh0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvbWF0LWRpYWxvZy1jb250ZW50PlxuICAgICAgICBcbiAgICAgICAgPG1hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaWFsb2ctYnV0dG9uLXdpdGgtaW5mby1pY29uXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgbWF0LXJhaXNlZC1idXR0b24gbWF0QmFkZ2VDb2xvcj1cIndhcm5cIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYmFkZ2UtY2hhbmdlc109XCIhYXJyYXlJdGVtVmFsaWRhdGlvbkVycm9ycy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaW50ZXJuYWxJc1JlYWRPbmx5IHx8ICFpc0FycmF5SXRlbVZhbGlkIHx8ICFpc0FycmF5SXRlbURpcnR5XCJcbiAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlXT1cImFycmF5SXRlbVZhbGlkYXRpb25FcnJvcnMubGVuZ3RoID4gMCA/IGFycmF5SXRlbVZhbGlkYXRpb25FcnJvcnMubGVuZ3RoIDogYXJyYXlJdGVtQ2hhbmdlcy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VIaWRkZW5dPVwiIWFycmF5SXRlbVZhbGlkYXRpb25FcnJvcnMubGVuZ3RoICYmICFhcnJheUl0ZW1DaGFuZ2VzLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7e2VkaXRBcnJheUl0ZW1EaWFsb2dEYXRhLmNvbmZpcm1CdXR0b25MYWJlbH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgQGlmIChhcnJheUl0ZW1WYWxpZGF0aW9uRXJyb3JzLmxlbmd0aCB8fCBhcnJheUl0ZW1DaGFuZ2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICA8bmd4LW1hdC1lbnRpdHktdG9vbHRpcCBbdG9vbHRpcENvbnRlbnRdPVwiYXJyYXlJdGVtVG9vbHRpcENvbnRlbnRcIj48L25neC1tYXQtZW50aXR5LXRvb2x0aXA+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtcmFpc2VkLWJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIiAoY2xpY2spPVwiY2xvc2VFZGl0QXJyYXlJdGVtRGlhbG9nKClcIj5cbiAgICAgICAgICAgICAgICB7e2VkaXRBcnJheUl0ZW1EaWFsb2dEYXRhLmNhbmNlbEJ1dHRvbkxhYmVsfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICA8L2Zvcm0+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbjwhLS0tLS0tLS0tLS0tLS0tLS0tLS1DcmVhdGUgSGFzIE1hbnkgRGlhbG9nLS0tLS0tLS0tLS0tLS0tLT5cbjwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuPG5nLXRlbXBsYXRlICNjcmVhdGVIYXNNYW55RGlhbG9nPlxuICAgIDxkaXYgY2xhc3M9XCJtYXQtZGlhbG9nLXRpdGxlXCI+XG4gICAgICAgIDxkaXY+e3ttZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmNyZWF0ZURhdGEudGl0bGV9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIFxuICAgIDxmb3JtIChuZ1N1Ym1pdCk9XCJkaWFsb2dDcmVhdGVIYXNNYW55KClcIj5cbiAgICAgICAgPG1hdC1kaWFsb2ctY29udGVudD5cbiAgICAgICAgICAgIEBpZiAoaGFzTWFueUNyZWF0ZUZvcm1Db250ZXh0KSB7XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvcm07IGNvbnRleHQ6IGhhc01hbnlDcmVhdGVGb3JtQ29udGV4dFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L21hdC1kaWFsb2ctY29udGVudD5cbiAgICAgICAgXG4gICAgICAgIDxtYXQtZGlhbG9nLWFjdGlvbnM+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGlhbG9nLWJ1dHRvbi13aXRoLWluZm8taWNvblwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIG1hdC1yYWlzZWQtYnV0dG9uIG1hdEJhZGdlQ29sb3I9XCJ3YXJuXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0hhc01hbnlFbnRpdHlWYWxpZFwiXG4gICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZV09XCJoYXNNYW55VmFsaWRhdGlvbkVycm9ycy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VIaWRkZW5dPVwiIWhhc01hbnlWYWxpZGF0aW9uRXJyb3JzLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7e21ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuY3JlYXRlRGF0YS5jcmVhdGVCdXR0b25MYWJlbH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgQGlmIChoYXNNYW55VmFsaWRhdGlvbkVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5neC1tYXQtZW50aXR5LXRvb2x0aXAgW3Rvb2x0aXBDb250ZW50XT1cImhhc01hbnlUb29sdGlwQ29udGVudFwiPjwvbmd4LW1hdC1lbnRpdHktdG9vbHRpcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1yYWlzZWQtYnV0dG9uIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiIChjbGljayk9XCJkaWFsb2dDYW5jZWxDcmVhdGVIYXNNYW55KClcIj5cbiAgICAgICAgICAgICAgICB7e21ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuY3JlYXRlRGF0YS5jYW5jZWxCdXR0b25MYWJlbH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9tYXQtZGlhbG9nLWFjdGlvbnM+XG4gICAgPC9mb3JtPlxuICAgIFxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG48IS0tLS0tLS0tLS0tLS0tLS0tLS0tRWRpdCBIYXMgTWFueSBEaWFsb2ctLS0tLS0tLS0tLS0tLS0tLT5cbjwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuPG5nLXRlbXBsYXRlICNlZGl0SGFzTWFueURpYWxvZz5cbiAgICA8ZGl2IGNsYXNzPVwibWF0LWRpYWxvZy10aXRsZVwiPlxuICAgICAgICA8ZGl2Pnt7bWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5lZGl0RGF0YS50aXRsZShoYXNNYW55RW50aXR5UHJpb3JDaGFuZ2VzKX19PC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICBAaWYgKG1ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuZWRpdERhdGEuYWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtcmFpc2VkLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiPlxuICAgICAgICAgICAgICAgICAgICB7e21ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuZWRpdERhdGEuYWN0aW9uc0xhYmVsfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChhY3Rpb24gb2YgbWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5lZGl0RGF0YS5hY3Rpb25zOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LW1lbnUtaXRlbSBbZGlzYWJsZWRdPVwiaGFzTWFueUVkaXRBY3Rpb25EaXNhYmxlZChhY3Rpb24pXCIgKGNsaWNrKT1cImhhc01hbnlSdW5FZGl0QWN0aW9uKGFjdGlvbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7YWN0aW9uLmRpc3BsYXlOYW1lfX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgXG4gICAgICAgICAgICBAaWYgKGhhc01hbnlBbGxvd0RlbGV0ZShoYXNNYW55RW50aXR5KSkge1xuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwid2FyblwiIGNsYXNzPVwiZGVsZXRlLWJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiAoY2xpY2spPVwiZGVsZXRlSGFzTWFueUVudGl0eSgpXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7bWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5lZGl0RGF0YS5kZWxldGVCdXR0b25MYWJlbH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIFxuICAgIDxmb3JtIChuZ1N1Ym1pdCk9XCJkaWFsb2dFZGl0SGFzTWFueSgpXCI+XG4gICAgICAgIDxtYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgICAgICAgICBAaWYgKGhhc01hbnlFZGl0Rm9ybUNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9ybTsgY29udGV4dDogaGFzTWFueUVkaXRGb3JtQ29udGV4dFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L21hdC1kaWFsb2ctY29udGVudD5cbiAgICAgICAgXG4gICAgICAgIDxtYXQtZGlhbG9nLWFjdGlvbnM+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGlhbG9nLWJ1dHRvbi13aXRoLWluZm8taWNvblwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIG1hdC1yYWlzZWQtYnV0dG9uIG1hdEJhZGdlQ29sb3I9XCJ3YXJuXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmJhZGdlLWNoYW5nZXNdPVwiIWhhc01hbnlWYWxpZGF0aW9uRXJyb3JzLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpbnRlcm5hbElzUmVhZE9ubHkgfHwgIWlzSGFzTWFueUVudGl0eVZhbGlkIHx8ICFpc0hhc01hbnlFbnRpdHlEaXJ0eVwiXG4gICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZV09XCJoYXNNYW55VmFsaWRhdGlvbkVycm9ycy5sZW5ndGggPiAwID8gaGFzTWFueVZhbGlkYXRpb25FcnJvcnMubGVuZ3RoIDogaGFzTWFueUNoYW5nZXMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlSGlkZGVuXT1cIiFoYXNNYW55VmFsaWRhdGlvbkVycm9ycy5sZW5ndGggJiYgIWhhc01hbnlDaGFuZ2VzLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7e21ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuZWRpdERhdGEuY29uZmlybUJ1dHRvbkxhYmVsfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICBAaWYgKGhhc01hbnlWYWxpZGF0aW9uRXJyb3JzLmxlbmd0aCB8fCBoYXNNYW55Q2hhbmdlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5neC1tYXQtZW50aXR5LXRvb2x0aXAgW3Rvb2x0aXBDb250ZW50XT1cImhhc01hbnlUb29sdGlwQ29udGVudFwiPjwvbmd4LW1hdC1lbnRpdHktdG9vbHRpcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1yYWlzZWQtYnV0dG9uIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiIChjbGljayk9XCJkaWFsb2dDYW5jZWxFZGl0SGFzTWFueSgpXCI+XG4gICAgICAgICAgICAgICAge3ttZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmVkaXREYXRhLmNhbmNlbEJ1dHRvbkxhYmVsfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICA8L2Zvcm0+XG48L25nLXRlbXBsYXRlPiJdfQ==
1367
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdGVyaWFsLWVudGl0eS9zcmMvY29tcG9uZW50cy9pbnB1dC9pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL2lucHV0L2lucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25LLE9BQU8sRUFBRSxXQUFXLEVBQVcsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxF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MkI7d0JBQzNCLHFDQUFxQzt3QkFDckMsOEJBQThCO3dCQUM5QixrQkFBa0I7d0JBQ2xCLHVCQUF1Qjt3QkFDdkIsc0JBQXNCO3dCQUN0Qix5QkFBeUI7d0JBQ3pCLHVCQUF1Qjt3QkFDdkIsNEJBQTRCO3dCQUM1QixvQkFBb0I7d0JBQ3BCLDBCQUEwQjt3QkFDMUIsYUFBYTt3QkFDYixlQUFlO3FCQUNsQjs7MEJBNFZJLE1BQU07MkJBQUMsZ0NBQWdDOzswQkFFdkMsTUFBTTsyQkFBQyxrQ0FBa0M7a0VBbFY5QyxNQUFNO3NCQURMLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQU96QixXQUFXO3NCQURWLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQU96Qix5QkFBeUI7c0JBRHhCLEtBQUs7Z0JBV04saUJBQWlCO3NCQURoQixLQUFLO2dCQVNOLGVBQWU7c0JBRGQsS0FBSztnQkFTTixVQUFVO3NCQURULEtBQUs7Z0JBU04sVUFBVTtzQkFEVCxLQUFLO2dCQVNHLGdCQUFnQjtzQkFEeEIsTUFBTTtnQkFTSyxJQUFJO3NCQURmLFNBQVM7dUJBQUMsT0FBTztnQkFnQk4sU0FBUztzQkFEcEIsU0FBUzt1QkFBQyxZQUFZO2dCQW9FTixrQkFBa0I7c0JBRGxDLFNBQVM7dUJBQUMsb0JBQW9CO2dCQUlkLG1CQUFtQjtzQkFEbkMsU0FBUzt1QkFBQyxxQkFBcUI7Z0JBNEVmLG1CQUFtQjtzQkFEbkMsU0FBUzt1QkFBQyxxQkFBcUI7Z0JBSWYsaUJBQWlCO3NCQURqQyxTQUFTO3VCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFbnZpcm9ubWVudEluamVjdG9yLCBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBpbmplY3QsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIE5nTW9kZWwgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRCYWRnZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2JhZGdlJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nTW9kdWxlLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcbmltcG9ydCB7IE1hdFBhZ2luYXRvciwgTWF0UGFnaW5hdG9yTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IE1hdFNvcnQsIE1hdFNvcnRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSwgTWF0VGFibGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBNYXRUYWJzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFicyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRmFJY29uQ29tcG9uZW50LCBJY29uRGVmaW5pdGlvbiB9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcbmltcG9ydCB7IGZhU2VhcmNoIH0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zJztcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEFycmF5RGF0ZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9hcnJheS9hcnJheS1kYXRlLWlucHV0L2FycmF5LWRhdGUtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IEFycmF5RGF0ZVJhbmdlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuL2FycmF5L2FycmF5LWRhdGUtcmFuZ2UtaW5wdXQvYXJyYXktZGF0ZS1yYW5nZS1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXJyYXlEYXRlVGltZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9hcnJheS9hcnJheS1kYXRlLXRpbWUtaW5wdXQvYXJyYXktZGF0ZS10aW1lLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBcnJheVN0cmluZ0F1dG9jb21wbGV0ZUNoaXBzQ29tcG9uZW50IH0gZnJvbSAnLi9hcnJheS9hcnJheS1zdHJpbmctYXV0b2NvbXBsZXRlLWNoaXBzL2FycmF5LXN0cmluZy1hdXRvY29tcGxldGUtY2hpcHMuY29tcG9uZW50JztcbmltcG9ydCB7IEFycmF5U3RyaW5nQ2hpcHNJbnB1dENvbXBvbmVudCB9IGZyb20gJy4vYXJyYXkvYXJyYXktc3RyaW5nLWNoaXBzLWlucHV0L2FycmF5LXN0cmluZy1jaGlwcy1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQm9vbGVhbkNoZWNrYm94SW5wdXRDb21wb25lbnQgfSBmcm9tICcuL2Jvb2xlYW4vYm9vbGVhbi1jaGVja2JveC1pbnB1dC9ib29sZWFuLWNoZWNrYm94LWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCb29sZWFuRHJvcGRvd25JbnB1dENvbXBvbmVudCB9IGZyb20gJy4vYm9vbGVhbi9ib29sZWFuLWRyb3Bkb3duLWlucHV0L2Jvb2xlYW4tZHJvcGRvd24taW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IEJvb2xlYW5Ub2dnbGVJbnB1dENvbXBvbmVudCB9IGZyb20gJy4vYm9vbGVhbi9ib29sZWFuLXRvZ2dsZS1pbnB1dC9ib29sZWFuLXRvZ2dsZS1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3VzdG9tSW5wdXRDb21wb25lbnQgfSBmcm9tICcuL2N1c3RvbS9jdXN0b20uY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVJbnB1dENvbXBvbmVudCB9IGZyb20gJy4vZGF0ZS9kYXRlLWlucHV0L2RhdGUtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVSYW5nZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9kYXRlL2RhdGUtcmFuZ2UtaW5wdXQvZGF0ZS1yYW5nZS1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0ZVRpbWVJbnB1dENvbXBvbmVudCB9IGZyb20gJy4vZGF0ZS9kYXRlLXRpbWUtaW5wdXQvZGF0ZS10aW1lLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGaWxlRGVmYXVsdElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9maWxlL2ZpbGUtZGVmYXVsdC1pbnB1dC9maWxlLWRlZmF1bHQtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IEZpbGVJbWFnZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9maWxlL2ZpbGUtaW1hZ2UtaW5wdXQvZmlsZS1pbWFnZS1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTnVtYmVyRHJvcGRvd25JbnB1dENvbXBvbmVudCB9IGZyb20gJy4vbnVtYmVyL251bWJlci1kcm9wZG93bi1pbnB1dC9udW1iZXItZHJvcGRvd24taW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IE51bWJlcklucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9udW1iZXIvbnVtYmVyLWlucHV0L251bWJlci1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTnVtYmVyU2xpZGVySW5wdXRDb21wb25lbnQgfSBmcm9tICcuL251bWJlci9udW1iZXItc2xpZGVyLWlucHV0L251bWJlci1zbGlkZXItaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IFJlZmVyZW5jZXNNYW55SW5wdXRDb21wb25lbnQgfSBmcm9tICcuL3JlbGF0aW9ucy9yZWZlcmVuY2VzLW1hbnktaW5wdXQvcmVmZXJlbmNlcy1tYW55LWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdHJpbmdBdXRvY29tcGxldGVJbnB1dENvbXBvbmVudCB9IGZyb20gJy4vc3RyaW5nL3N0cmluZy1hdXRvY29tcGxldGUtaW5wdXQvc3RyaW5nLWF1dG9jb21wbGV0ZS1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3RyaW5nRHJvcGRvd25JbnB1dENvbXBvbmVudCB9IGZyb20gJy4vc3RyaW5nL3N0cmluZy1kcm9wZG93bi1pbnB1dC9zdHJpbmctZHJvcGRvd24taW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IFN0cmluZ0lucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9zdHJpbmcvc3RyaW5nLWlucHV0L3N0cmluZy1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3RyaW5nUGFzc3dvcmRJbnB1dENvbXBvbmVudCB9IGZyb20gJy4vc3RyaW5nL3N0cmluZy1wYXNzd29yZC1pbnB1dC9zdHJpbmctcGFzc3dvcmQtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IFN0cmluZ1RleHRib3hJbnB1dENvbXBvbmVudCB9IGZyb20gJy4vc3RyaW5nL3N0cmluZy10ZXh0Ym94LWlucHV0L3N0cmluZy10ZXh0Ym94LWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCYXNlRW50aXR5VHlwZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7IEVkaXRBcnJheUl0ZW1EaWFsb2dEYXRhSW50ZXJuYWwsIEVudGl0eUFycmF5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgfSBmcm9tICcuLi8uLi9kZWNvcmF0b3JzL2FycmF5L2FycmF5LWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IERlY29yYXRvclR5cGVzIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9ycy9iYXNlL2RlY29yYXRvci10eXBlcy5lbnVtJztcbmltcG9ydCB7IERyb3Bkb3duVmFsdWUgfSBmcm9tICcuLi8uLi9kZWNvcmF0b3JzL2Jhc2UvZHJvcGRvd24tdmFsdWUuaW50ZXJmYWNlJztcbmltcG9ydCB7IFByb3BlcnR5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgfSBmcm9tICcuLi8uLi9kZWNvcmF0b3JzL2Jhc2UvcHJvcGVydHktZGVjb3JhdG9yLWludGVybmFsLmRhdGEnO1xuaW1wb3J0IHsgSGFzTWFueURlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9ycy9oYXMtbWFueS9oYXMtbWFueS1kZWNvcmF0b3ItaW50ZXJuYWwuZGF0YSc7XG5pbXBvcnQgeyBEZWZhdWx0T2JqZWN0RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwsIERyb3Bkb3duT2JqZWN0RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgfSBmcm9tICcuLi8uLi9kZWNvcmF0b3JzL29iamVjdC9vYmplY3QtZGVjb3JhdG9yLWludGVybmFsLmRhdGEnO1xuaW1wb3J0IHsgUmVmZXJlbmNlc09uZURlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9ycy9yZWZlcmVuY2VzLW9uZS9yZWZlcmVuY2VzLW9uZS1kZWNvcmF0b3ItaW50ZXJuYWwuZGF0YSc7XG5pbXBvcnQgeyBEeW5hbWljU3R5bGVDbGFzc0RpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZHluYW1pYy1zdHlsZS1jbGFzcy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTG9kYXNoVXRpbGl0aWVzIH0gZnJvbSAnLi4vLi4vZW5jYXBzdWxhdGlvbi9sb2Rhc2gudXRpbGl0aWVzJztcbmltcG9ydCB7IFJlZmxlY3RVdGlsaXRpZXMgfSBmcm9tICcuLi8uLi9lbmNhcHN1bGF0aW9uL3JlZmxlY3QudXRpbGl0aWVzJztcbmltcG9ydCB7IFVVSURVdGlsaXRpZXMgfSBmcm9tICcuLi8uLi9lbmNhcHN1bGF0aW9uL3V1aWQudXRpbGl0aWVzJztcbmltcG9ydCB7IGRlZmF1bHRGYWxzZSB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucy9kZWZhdWx0LWZhbHNlLmZ1bmN0aW9uJztcbmltcG9ydCB7IGdldENoYW5nZXNUb29sdGlwQ29udGVudCB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucy9nZXQtY2hhbmdlcy10b29sdGlwLWNvbnRlbnQuZnVuY3Rpb24nO1xuaW1wb3J0IHsgTkdYX0dFVF9WQUxJREFUSU9OX0VSUk9SX01FU1NBR0UgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMvZ2V0LXZhbGlkYXRpb24tZXJyb3ItbWVzc2FnZS5mdW5jdGlvbic7XG5pbXBvcnQgeyBnZXRWYWxpZGF0aW9uRXJyb3JzVG9vbHRpcENvbnRlbnQgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMvZ2V0LXZhbGlkYXRpb24tZXJyb3JzLXRvb2x0aXAtY29udGVudC5mdW5jdGlvbic7XG5pbXBvcnQgeyB0YWJsZUNvbHVtblZhbHVlVG9Tb3J0VmFsdWUgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMvdGFibGUtY29sdW1uLXZhbHVlLXRvLXNvcnQtdmFsdWUuZnVuY3Rpb24nO1xuaW1wb3J0IHsgTkdYX0NPTVBMRVRFX0dMT0JBTF9ERUZBVUxUX1ZBTFVFUywgTmd4R2xvYmFsRGVmYXVsdFZhbHVlcyB9IGZyb20gJy4uLy4uL2dsb2JhbC1jb25maWd1cmF0aW9uLXZhbHVlcyc7XG5pbXBvcnQgeyBFbnRpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZW50aXR5LnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0ZVV0aWxpdGllcyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9kYXRlLnV0aWxpdGllcyc7XG5pbXBvcnQgeyBEaWZmZXJlbmNlLCBFbnRpdHlUYWIsIEVudGl0eVV0aWxpdGllcyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9lbnRpdHkudXRpbGl0aWVzJztcbmltcG9ydCB7IFNlbGVjdGlvblV0aWxpdGllcyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9zZWxlY3Rpb24udXRpbGl0aWVzJztcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvciwgVmFsaWRhdGlvblV0aWxpdGllcyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy92YWxpZGF0aW9uLnV0aWxpdGllcyc7XG5pbXBvcnQgeyBDb25maXJtRGlhbG9nRGF0YUJ1aWxkZXIsIENvbmZpcm1EaWFsb2dEYXRhSW50ZXJuYWwgfSBmcm9tICcuLi9jb25maXJtLWRpYWxvZy9jb25maXJtLWRpYWxvZy1kYXRhLmJ1aWxkZXInO1xuaW1wb3J0IHsgTmd4TWF0RW50aXR5Q29uZmlybURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2NvbmZpcm0tZGlhbG9nL2NvbmZpcm0tZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbnRlcm5hbEN1c3RvbVRhYmxlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL2N1c3RvbS10YWJsZS9jdXN0b20tdGFibGUtY29uZmlndXJhdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBDcmVhdGVEYXRhQnVpbGRlciwgQ3JlYXRlRGF0YUludGVybmFsIH0gZnJvbSAnLi4vdGFibGUvY3JlYXRlLWRpYWxvZy9jcmVhdGUtZGF0YS5idWlsZGVyJztcbmltcG9ydCB7IERpc3BsYXlDb2x1bW5WYWx1ZUNvbXBvbmVudCB9IGZyb20gJy4uL3RhYmxlL2Rpc3BsYXktY29sdW1uLXZhbHVlL2Rpc3BsYXktY29sdW1uLXZhbHVlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFZGl0QWN0aW9uSW50ZXJuYWwgfSBmcm9tICcuLi90YWJsZS9lZGl0LWRpYWxvZy9lZGl0LWRhdGEuYnVpbGRlcic7XG5pbXBvcnQgeyBEaXNwbGF5Q29sdW1uLCBEeW5hbWljU3R5bGVDbGFzc2VzIH0gZnJvbSAnLi4vdGFibGUvdGFibGUtZGF0YSc7XG5pbXBvcnQgeyBCYXNlVGFibGVBY3Rpb25JbnRlcm5hbCwgVGFibGVBY3Rpb25JbnRlcm5hbCB9IGZyb20gJy4uL3RhYmxlL3RhYmxlLWRhdGEuYnVpbGRlcic7XG5pbXBvcnQgeyBUb29sdGlwQ29tcG9uZW50IH0gZnJvbSAnLi4vdG9vbHRpcC90b29sdGlwLmNvbXBvbmVudCc7XG5cbi8qKlxuICogR2VuZXJpYyB0eXBlIGZvciBjb250ZXh0cyB0aGF0IGNhbiBmaWxsIGFuIGlubGluZSB0ZW1wbGF0ZS5cbiAqL1xudHlwZSBUZW1wbGF0ZUNvbnRleHQ8VD4gPSB7XG4gICAgLyoqXG4gICAgICogVGhlIGFjdHVhbCB2YWx1ZS4gVGhlICRpbXBsaWNpdCBpcyBuZWVkZWQgc28gdGhhdCB3ZSBkb24ndCBuZWVkIHRvIHNwZWNpZnkgYSBrZXkgd2hlbiB3cml0aW5nIFwibGV0LWNvbnRleHRcIiBpbiB0aGUgaHRtbCB0ZW1wbGF0ZS5cbiAgICAgKi9cbiAgICAkaW1wbGljaXQ6IFRcbn07XG5cbi8qKlxuICogQSBmb3JtIGNvbnRleHQgdGhhdCBpcyB1c2VkIHRvIGZpbGwgYW4gaW5saW5lIHRlbXBsYXRlLlxuICogVGhpcyBpcyB1c2VkIHRvIGdvIGFyb3VuZCB0aGUgbGltaXRhdGlvbnMgb2YgaGF2aW5nIGV2ZXJ5dGhpbmcgaW4gdGhlIHNhbWUgZmlsZSBkdWUgdG8gY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICogVGhlIGZvcm1zIGFyZSB1c2VkIGZvciBvYmplY3QsIGhhc01hbnksIHJlZmVyZW5jZXNNYW55IGFuZCB0aGUgZGlhbG9ncy5cbiAqL1xudHlwZSBGb3JtQ29udGV4dDxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+ID0ge1xuICAgIC8qKlxuICAgICAqIFRoZSBlbnRpdHkgdG8gYnVpbGQgdGhlIGZvcm0gZm9yLlxuICAgICAqL1xuICAgIGVudGl0eTogRW50aXR5VHlwZSxcbiAgICAvKipcbiAgICAgKiBUaGUgdGFicyB0byBkaXNwbGF5LlxuICAgICAqL1xuICAgIHRhYnM6IEVudGl0eVRhYjxFbnRpdHlUeXBlPltdLFxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IGVkaXQgdmFsdWVzIHNob3VsZCBiZSBvbWl0dGVkLlxuICAgICAqL1xuICAgIGhpZGVPbWl0Rm9yRWRpdD86IGJvb2xlYW4sXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgY3JlYXRlIHZhbHVlcyBzaG91bGQgYmUgb21pdHRlZC5cbiAgICAgKi9cbiAgICBoaWRlT21pdEZvckNyZWF0ZT86IGJvb2xlYW4sXG4gICAgLyoqXG4gICAgICogV2hhdCBoYXBwZW5zIHdoZW4gdGhlIGlucHV0IGNoYW5nZXMuXG4gICAgICovXG4gICAgaW5wdXRDaGFuZ2VFdmVudDogKCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4sXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIGlucHV0IGlzIHJlYWRvbmx5LlxuICAgICAqL1xuICAgIGlzUmVhZE9ubHk/OiAocHJvcGVydHk6IEVudGl0eVR5cGUsIGtleToga2V5b2YgRW50aXR5VHlwZSkgPT4gYm9vbGVhbixcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgaW5wdXQgaXMgdmFsaWQgZW1wdHkuXG4gICAgICovXG4gICAgdmFsaWRFbXB0eT86ICgpID0+IGJvb2xlYW5cbn07XG5cbi8qKlxuICogQSB0YWJsZSBjb250ZXh0IHRoYXQgaXMgdXNlZCB0byBmaWxsIGFuIGlubGluZSB0ZW1wbGF0ZS5cbiAqIFRoaXMgaXMgdXNlZCB0byBnbyBhcm91bmQgdGhlIGxpbWl0YXRpb25zIG9mIGhhdmluZyBldmVyeXRoaW5nIGluIHRoZSBzYW1lIGZpbGUgZHVlIHRvIGNpcmN1bGFyIGRlcGVuZGVuY2llcy5cbiAqIFRoZSB0YWJsZSBpcyB1c2VkIGZvciBlbnRpdHkgYXJyYXkgYW5kIGhhc01hbnkuXG4gKi9cbnR5cGUgVGFibGVDb250ZXh0PFQ+ID0gSW50ZXJuYWxDdXN0b21UYWJsZUNvbmZpZ3VyYXRpb24gJiB7XG4gICAgLyoqXG4gICAgICogVGhlIGRhdGEgc291cmNlIG9mIHRoZSB0YWJsZS5cbiAgICAgKi9cbiAgICBkYXRhU291cmNlOiBNYXRUYWJsZURhdGFTb3VyY2U8VD4sXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgYSBlcnJvciBtZXNzYWdlIHNob3VsZCBiZSBzaG93biB3aGVuIHRoZSB0YWJsZSBpcyBlbXB0eS5cbiAgICAgKi9cbiAgICBzaG91bGRTaG93TWlzc2luZ0Vycm9yOiBib29sZWFuLFxuICAgIC8qKlxuICAgICAqIFRoZSBzZWxlY3Rpb24gb2YgdGhlIHRhYmxlLlxuICAgICAqL1xuICAgIHNlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8VD4sXG4gICAgLyoqXG4gICAgICogV2hhdCBoYXBwZW5zIHdoZW4gYSBjZWxsIGlzIGNsaWNrZWQuXG4gICAgICovXG4gICAgY2xpY2tDZWxsOiAodmFsdWU6IFQsIGRpc3BsYXlDb2x1bW46IERpc3BsYXlDb2x1bW48VD4pID0+IHZvaWQsXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIGRhdGEgZm9yIHRoZSB0YWJsZSBpcyBjdXJyZW50bHkgYmVpbmcgbG9hZGVkLlxuICAgICAqL1xuICAgIGlzTG9hZGluZzogYm9vbGVhbixcbiAgICAvKipcbiAgICAgKiBBbGwgY29sdW1ucyB0aGF0IHNob3VsZCBiZSBkaXNwbGF5ZWQuXG4gICAgICovXG4gICAgZGlzcGxheWVkQ29sdW1uczogc3RyaW5nW11cbn07XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgaW5wdXQgY29tcG9uZW50LiBJdCBnZXRzIHRoZSBtZXRhZGF0YSBvZiB0aGUgcHJvcGVydHkgZnJvbSB0aGUgZ2l2ZW4gQElucHV0IFwiZW50aXR5XCIgYW5kIEBJbnB1dCBcInByb3BlcnR5S2V5XCJcbiAqIGFuZCBkaXNwbGF5cyB0aGUgaW5wdXQgZmllbGQgYWNjb3JkaW5nbHkuXG4gKlxuICogWW91IGNhbiBhbHNvIGRlZmluZSBhIG1ldGhvZCB0aGF0IGdlbmVyYXRlcyBlcnJvci1tZXNzYWdlcyBhbmQgaWYgdGhlIGlucHV0IHNob3VsZCBiZSBoaWRkZW4gd2hlbiBpdHMgbWV0YWRhdGEgc2F5c1xuICogdGhhdCBpdCBzaG91bGQgYmUgb21pdHRlZCBmb3IgY3JlYXRpbmcgb3IgdXBkYXRpbmcuXG4gKiBUaGUgbGFzdCBwYXJ0IGJlaW5nIG1vc3RseSByZWxldmFudCBpZiB5b3Ugd2FudCB0byB1c2UgdGhpcyBjb21wb25lbnQgaW5zaWRlIGFuIG5nRm9yLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25neC1tYXQtZW50aXR5LWlucHV0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2lucHV0LmNvbXBvbmVudC5zY3NzJywgJy4uLy4uL3Njc3MvZGlhbG9nLXN0eWxlcy5zY3NzJywgJy4uLy4uL3Njc3MvdGFpbHdpbmQtY2xhc3Nlcy5zY3NzJ10sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIERpc3BsYXlDb2x1bW5WYWx1ZUNvbXBvbmVudCxcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBNYXRUYWJzTW9kdWxlLFxuICAgICAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgICAgIE1hdFNlbGVjdE1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIE1hdERpYWxvZ01vZHVsZSxcbiAgICAgICAgTWF0QmFkZ2VNb2R1bGUsXG4gICAgICAgIE1hdElucHV0TW9kdWxlLFxuICAgICAgICBNYXRNZW51TW9kdWxlLFxuICAgICAgICBNYXRQYWdpbmF0b3JNb2R1bGUsXG4gICAgICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcbiAgICAgICAgTWF0VGFibGVNb2R1bGUsXG4gICAgICAgIE1hdENoZWNrYm94TW9kdWxlLFxuICAgICAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgICAgIFRvb2x0aXBDb21wb25lbnQsXG4gICAgICAgIFN0cmluZ0lucHV0Q29tcG9uZW50LFxuICAgICAgICBTdHJpbmdUZXh0Ym94SW5wdXRDb21wb25lbnQsXG4gICAgICAgIFN0cmluZ0F1dG9jb21wbGV0ZUlucHV0Q29tcG9uZW50LFxuICAgICAgICBTdHJpbmdEcm9wZG93bklucHV0Q29tcG9uZW50LFxuICAgICAgICBTdHJpbmdQYXNzd29yZElucHV0Q29tcG9uZW50LFxuICAgICAgICBCb29sZWFuQ2hlY2tib3hJbnB1dENvbXBvbmVudCxcbiAgICAgICAgQm9vbGVhblRvZ2dsZUlucHV0Q29tcG9uZW50LFxuICAgICAgICBCb29sZWFuRHJvcGRvd25JbnB1dENvbXBvbmVudCxcbiAgICAgICAgTnVtYmVySW5wdXRDb21wb25lbnQsXG4gICAgICAgIE51bWJlckRyb3Bkb3duSW5wdXRDb21wb25lbnQsXG4gICAgICAgIE51bWJlclNsaWRlcklucHV0Q29tcG9uZW50LFxuICAgICAgICBBcnJheURhdGVJbnB1dENvbXBvbmVudCxcbiAgICAgICAgQXJyYXlEYXRlUmFuZ2VJbnB1dENvbXBvbmVudCxcbiAgICAgICAgQXJyYXlEYXRlVGltZUlucHV0Q29tcG9uZW50LFxuICAgICAgICBBcnJheVN0cmluZ0F1dG9jb21wbGV0ZUNoaXBzQ29tcG9uZW50LFxuICAgICAgICBBcnJheVN0cmluZ0NoaXBzSW5wdXRDb21wb25lbnQsXG4gICAgICAgIERhdGVJbnB1dENvbXBvbmVudCxcbiAgICAgICAgRGF0ZVJhbmdlSW5wdXRDb21wb25lbnQsXG4gICAgICAgIERhdGVUaW1lSW5wdXRDb21wb25lbnQsXG4gICAgICAgIEZpbGVEZWZhdWx0SW5wdXRDb21wb25lbnQsXG4gICAgICAgIEZpbGVJbWFnZUlucHV0Q29tcG9uZW50LFxuICAgICAgICBSZWZlcmVuY2VzTWFueUlucHV0Q29tcG9uZW50LFxuICAgICAgICBDdXN0b21JbnB1dENvbXBvbmVudCxcbiAgICAgICAgRHluYW1pY1N0eWxlQ2xhc3NEaXJlY3RpdmUsXG4gICAgICAgIE1hdFNvcnRNb2R1bGUsXG4gICAgICAgIEZhSWNvbkNvbXBvbmVudFxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTmd4TWF0RW50aXR5SW5wdXRDb21wb25lbnQ8RW50aXR5VHlwZSBleHRlbmRzIEJhc2VFbnRpdHlUeXBlPEVudGl0eVR5cGU+PiBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIGZhU2VhcmNoOiBJY29uRGVmaW5pdGlvbiA9IGZhU2VhcmNoO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVudGl0eSBvbiB3aGljaCB0aGUgcHJvcGVydHkgZXhpc3RzLiBVc2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFwicHJvcGVydHlLZXlcIlxuICAgICAqIHRvIGRldGVybWluZSB0aGUgcHJvcGVydHkgZm9yIHdoaWNoIHRoZSBpbnB1dCBzaG91bGQgYmUgZ2VuZXJhdGVkLlxuICAgICAqL1xuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gICAgZW50aXR5ITogRW50aXR5VHlwZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBnZW5lcmF0ZSB0aGUgaW5wdXQgZm9yLiBVc2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFwiZW50aXR5XCIuXG4gICAgICovXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgICBwcm9wZXJ0eUtleSE6IGtleW9mIEVudGl0eVR5cGU7XG5cbiAgICAvKipcbiAgICAgKiAob3B0aW9uYWwpIEEgY3VzdG9tIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIHRoZSBlcnJvci1tZXNzYWdlIGZvciBpbnZhbGlkIGlucHV0cy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGdldFZhbGlkYXRpb25FcnJvck1lc3NhZ2U/OiAobW9kZWw6IE5nTW9kZWwpID0+IHN0cmluZztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIGludGVybmFsR2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZSE6IChtb2RlbDogTmdNb2RlbCkgPT4gc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBoaWRlIGEgdmFsdWUgaWYgaXQgaXMgb21pdHRlZCBmb3IgY3JlYXRpb24uXG4gICAgICogSXMgdXNlZCBpbnRlcm5hbGx5IGZvciB0aGUgb2JqZWN0IHByb3BlcnR5LlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBoaWRlT21pdEZvckNyZWF0ZT86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGhpZGUgYSB2YWx1ZSBpZiBpdCBpcyBvbWl0dGVkIGZvciBlZGl0aW5nLlxuICAgICAqIElzIHVzZWQgaW50ZXJuYWxseSBmb3IgdGhlIG9iamVjdCBwcm9wZXJ0eS5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGlkZU9taXRGb3JFZGl0PzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IGFuIGVtcHR5IHZhbHVlIHNob3VsZCBiZSB2YWxpZC5cbiAgICAgKiBJcyB1c2VkIGludGVybmFsbHkgZm9yIHRoZSBvYmplY3QgcHJvcGVydHkuXG4gICAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB2YWxpZEVtcHR5PzogYm9vbGVhbjsgLy8gVE9ET1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIGlucHV0IHNob3VsZCBiZSByZWFkb25seS5cbiAgICAgKiBJbiB0aGF0IGNhc2UgaXQgaXMgZGlzYWJsZWQsIGJ1dCBtb3N0IG9mIHRoZSBkZWZhdWx0IHN0eWxpbmcgaXMgb3ZlcndyaXR0ZW4uXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGlzUmVhZE9ubHk/OiBib29sZWFuO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgaW50ZXJuYWxJc1JlYWRPbmx5ITogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEVtaXRzIHdoZW4gdGhlIGlucHV0IHZhbHVlIGhhcyBiZWVuIGNoYW5nZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgaW5wdXRDaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICogQSBzZXR0ZXIgZm9yIHRoZSBoYXMgbWFueSBhbmQgYXJyYXkgc29ydC5cbiAgICAgKiBJcyBuZWVkZWQgYmVjYXVzZSB0aGUgc29ydCBpcyBpbnNpZGUgYSBzd2l0Y2ggY2FzZSxcbiAgICAgKiB3aGljaCBtZWFucyB0aGF0IGF0IG5nT25Jbml0IGl0IGNhbid0IGJlIGluaXRpYWxpemVkLlxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoTWF0U29ydClcbiAgICBwcml2YXRlIHNldCBzb3J0KHNvcnQ6IE1hdFNvcnQpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzTWFueVRhYmxlQ29udGV4dCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaGFzTWFueVRhYmxlQ29udGV4dC4kaW1wbGljaXQuZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5oYXNNYW55VGFibGVDb250ZXh0LiRpbXBsaWNpdC5kYXRhU291cmNlLnNvcnQgPz8gc29ydDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5lbnRpdHlBcnJheVRhYmxlQ29udGV4dCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZW50aXR5QXJyYXlUYWJsZUNvbnRleHQuJGltcGxpY2l0LmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuZW50aXR5QXJyYXlUYWJsZUNvbnRleHQuJGltcGxpY2l0LmRhdGFTb3VyY2Uuc29ydCA/PyBzb3J0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzZXR0ZXIgZm9yIHRoZSBoYXMgbWFueSBhbmQgYXJyYXkgcGFnaW5hdG9yLlxuICAgICAqIElzIG5lZWRlZCBiZWNhdXNlIHRoZSBwYWdpbmF0b3IgaXMgaW5zaWRlIGEgc3dpdGNoIGNhc2UsXG4gICAgICogd2hpY2ggbWVhbnMgdGhhdCBhdCBuZ09uSW5pdCBpdCBjYW4ndCBiZSBpbml0aWFsaXplZC5cbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcilcbiAgICBwcml2YXRlIHNldCBwYWdpbmF0b3IocGFnaW5hdG9yOiBNYXRQYWdpbmF0b3IpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzTWFueVRhYmxlQ29udGV4dCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaGFzTWFueVRhYmxlQ29udGV4dC4kaW1wbGljaXQuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLmhhc01hbnlUYWJsZUNvbnRleHQuJGltcGxpY2l0LmRhdGFTb3VyY2UucGFnaW5hdG9yID8/IHBhZ2luYXRvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5lbnRpdHlBcnJheVRhYmxlQ29udGV4dCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzdHlsaXN0aWMvbWF4LWxlblxuICAgICAgICAgICAgdGhpcy5lbnRpdHlBcnJheVRhYmxlQ29udGV4dC4kaW1wbGljaXQuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLmVudGl0eUFycmF5VGFibGVDb250ZXh0LiRpbXBsaWNpdC5kYXRhU291cmNlLnBhZ2luYXRvciA/PyBwYWdpbmF0b3I7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgZGVjb3JhdG9yIGZvciB0aGlzIGlucHV0LlxuICAgICAqL1xuICAgIHR5cGUhOiBEZWNvcmF0b3JUeXBlcztcbiAgICAvKipcbiAgICAgKiBUaGUgcHJvcGVydHkgbWV0YWRhdGEgcmVjZWl2ZWQgZnJvbSB0aGUgZGVjb3JhdG9yLlxuICAgICAqL1xuICAgIG1ldGFkYXRhITogUHJvcGVydHlEZWNvcmF0b3JDb25maWdJbnRlcm5hbDx1bmtub3duPjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtZXRhZGF0YSBvZiBhbiBvYmplY3QgcHJvcGVydHkuXG4gICAgICovXG4gICAgbWV0YWRhdGFEZWZhdWx0T2JqZWN0ITogRGVmYXVsdE9iamVjdERlY29yYXRvckNvbmZpZ0ludGVybmFsPEVudGl0eVR5cGU+O1xuICAgIC8qKlxuICAgICAqIFRoZSBmb3JtIGNvbnRleHQgZm9yIGFuIG9iamVjdCBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBvYmplY3RGb3JtQ29udGV4dCE6IFRlbXBsYXRlQ29udGV4dDxGb3JtQ29udGV4dDxFbnRpdHlUeXBlPj47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWV0YWRhdGEgb2YgYW4gZHJvcGRvd24gb2JqZWN0IHByb3BlcnR5LlxuICAgICAqL1xuICAgIG1ldGFkYXRhRHJvcGRvd25PYmplY3QhOiBEcm9wZG93bk9iamVjdERlY29yYXRvckNvbmZpZ0ludGVybmFsPEVudGl0eVR5cGU+O1xuICAgIC8qKlxuICAgICAqIEFsbCBwb3NzaWJsZSBkcm9wZG93biB2YWx1ZXMgZm9yIHRoZSBvYmplY3QgcHJvcGVydHkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBvYmplY3REcm9wZG93blZhbHVlczogRHJvcGRvd25WYWx1ZTxFbnRpdHlUeXBlIHwgdW5kZWZpbmVkPltdID0gW107XG4gICAgLyoqXG4gICAgICogQSB1bmlxdWUgaW5wdXQgbmFtZSBmb3IgdGhlIHJlZmVyZW5jZXMgb25lIHByb3BlcnR5LlxuICAgICAqL1xuICAgIG9iamVjdERyb3Bkb3duTmFtZSE6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBbGwgY3VycmVudGx5IHNob3duIGRyb3Bkb3duIHZhbHVlcyBmb3IgdGhlIG9iamVjdCBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBmaWx0ZXJlZE9iamVjdERyb3Bkb3duVmFsdWVzOiBEcm9wZG93blZhbHVlPEVudGl0eVR5cGUgfCB1bmRlZmluZWQ+W10gPSBbXTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1yZXR1cm5zXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBvYmplY3QgYXMgYSBkcm9wIGRvd24gdmFsdWUuXG4gICAgICovXG4gICAgZ2V0IGN1cnJlbnRPYmplY3REcm9wZG93blZhbHVlKCk6IERyb3Bkb3duVmFsdWU8RW50aXR5VHlwZSB8IHVuZGVmaW5lZD4gfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCB2YWx1ZTogRHJvcGRvd25WYWx1ZTxFbnRpdHlUeXBlIHwgdW5kZWZpbmVkPltdID0gTG9kYXNoVXRpbGl0aWVzLmNsb25lRGVlcCh0aGlzLm9iamVjdERyb3Bkb3duVmFsdWVzID8/IFtdKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlLmZpbmQodiA9PiBMb2Rhc2hVdGlsaXRpZXMuaXNFcXVhbCh2LnZhbHVlLCB0aGlzLmVudGl0eVt0aGlzLnByb3BlcnR5S2V5XSkpO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1yZXR1cm5zXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIGN1cnJlbnQgb2JqZWN0IGRyb3Bkb3duIHZhbHVlIHNob3VsZCBiZSBzaG93biBpbiB0aGUgZHJvcGRvd24uXG4gICAgICovXG4gICAgZ2V0IHNob3VsZERpc3BsYXlDdXJyZW50T2JqZWN0RHJvcGRvd25WYWx1ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5jdXJyZW50T2JqZWN0RHJvcGRvd25WYWx1ZVxuICAgICAgICAgICAgJiYgIXRoaXMuZmlsdGVyZWRPYmplY3REcm9wZG93blZhbHVlcy5maW5kKHYgPT4gTG9kYXNoVXRpbGl0aWVzLmlzRXF1YWwodi52YWx1ZSwgdGhpcy5jdXJyZW50T2JqZWN0RHJvcGRvd25WYWx1ZT8udmFsdWUpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQSBjb21wYXJlV2l0aCBtZXRob2QgZm9yIHRoZSBzZWxlY3QuXG4gICAgICogVXNlcyBiaW5kLlxuICAgICAqL1xuICAgIGNvbXBhcmVPYmplY3RzQm91bmQ6ICh2YWx1ZTE/OiBFbnRpdHlUeXBlLCB2YWx1ZTI/OiBFbnRpdHlUeXBlKSA9PiBib29sZWFuID0gdGhpcy5jb21wYXJlT2JqZWN0cy5iaW5kKHRoaXMpO1xuXG4gICAgQFZpZXdDaGlsZCgnYWRkQXJyYXlJdGVtRGlhbG9nJylcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFkZEFycmF5SXRlbURpYWxvZyE6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuICAgIHByaXZhdGUgYWRkQXJyYXlJdGVtRGlhbG9nUmVmITogTWF0RGlhbG9nUmVmPHVua25vd24+O1xuICAgIEBWaWV3Q2hpbGQoJ2VkaXRBcnJheUl0ZW1EaWFsb2cnKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgZWRpdEFycmF5SXRlbURpYWxvZyE6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuICAgIHByaXZhdGUgZWRpdEFycmF5SXRlbURpYWxvZ1JlZiE6IE1hdERpYWxvZ1JlZjx1bmtub3duPjtcbiAgICAvKipcbiAgICAgKiBUaGUgbWV0YWRhdGEgb2YgYW4gZW50aXR5IGFycmF5IHByb3BlcnR5LlxuICAgICAqL1xuICAgIG1ldGFkYXRhRW50aXR5QXJyYXkhOiBFbnRpdHlBcnJheURlY29yYXRvckNvbmZpZ0ludGVybmFsPEVudGl0eVR5cGU+O1xuICAgIC8qKlxuICAgICAqIFRoZSB0YWJsZSBjb250ZXh0IGZvciB0aGUgZW50aXR5IGFycmF5IGlucHV0LlxuICAgICAqL1xuICAgIGVudGl0eUFycmF5VGFibGVDb250ZXh0ITogVGVtcGxhdGVDb250ZXh0PFRhYmxlQ29udGV4dDxFbnRpdHlUeXBlPj47XG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgYXJyYXkgaXRlbSB0byBiZSBhZGRlZCBvciB1cGRhdGVkLlxuICAgICAqL1xuICAgIGFycmF5SXRlbSE6IEVudGl0eVR5cGU7XG4gICAgLyoqXG4gICAgICogVGhlIGFycmF5IGl0ZW0gYmVmb3JlIGFueSBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlLiBVc2VkIHRvIGNoZWNrIGlmIHRoZSBmb3JtIGlzIGRpcnR5LlxuICAgICAqL1xuICAgIGFycmF5SXRlbVByaW9yQ2hhbmdlcyE6IEVudGl0eVR5cGU7XG4gICAgLyoqXG4gICAgICogVGhlIGZvcm0gY29udGV4dCBmb3IgYWRkaW5nIGFuIGFycmF5IGl0ZW0uXG4gICAgICovXG4gICAgYWRkQXJyYXlJdGVtRm9ybUNvbnRleHQhOiBUZW1wbGF0ZUNvbnRleHQ8Rm9ybUNvbnRleHQ8RW50aXR5VHlwZT4+O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgYWRkQXJyYXlJdGVtRm9ybUNvbnRleHQyITogVGVtcGxhdGVDb250ZXh0PEZvcm1Db250ZXh0PEVudGl0eVR5cGU+PjtcbiAgICAvKipcbiAgICAgKiBUaGUgZm9ybSBjb250ZXh0IGZvciBlZGl0aW5nIGFuIGFycmF5IGl0ZW0uXG4gICAgICovXG4gICAgZWRpdEFycmF5SXRlbUZvcm1Db250ZXh0ITogVGVtcGxhdGVDb250ZXh0PEZvcm1Db250ZXh0PEVudGl0eVR5cGU+PjtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgYXJyYXkgaXRlbSBpcyB2YWxpZC5cbiAgICAgKi9cbiAgICBpc0FycmF5SXRlbVZhbGlkOiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIGFycmF5IGl0ZW0gaXMgZGlydHkuXG4gICAgICovXG4gICAgaXNBcnJheUl0ZW1EaXJ0eTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIFRoZSBpbmRleCBvZiB0aGUgYXJyYXkgaXRlbSB0aGF0IGlzIGJlaW5nIGVkaXRlZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGluZGV4T2ZFZGl0ZWRBcnJheUl0ZW0hOiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogQ29uZmlnIGZvciB0aGUgZGlhbG9nIHRoYXQgYWRkcyBhIG5ldyBhcnJheSBpdGVtLlxuICAgICAqL1xuICAgIGFkZEFycmF5SXRlbURpYWxvZ0RhdGEhOiBDcmVhdGVEYXRhSW50ZXJuYWw7XG4gICAgLyoqXG4gICAgICogVGhlIHRhYnMgdG8gZGlzcGxheSBpbnNpZGUgdGhlIGVkaXQgYXJyYXkgaXRlbSBkaWFsb2cuXG4gICAgICovXG4gICAgZWRpdEFycmF5SXRlbURpYWxvZ0RhdGEhOiBFZGl0QXJyYXlJdGVtRGlhbG9nRGF0YUludGVybmFsPEVudGl0eVR5cGU+O1xuICAgIC8qKlxuICAgICAqIEFsbCB2YWxpZGF0aW9uIGVycm9ycyBmb3IgdGhlIGFycmF5IGl0ZW0uXG4gICAgICovXG4gICAgYXJyYXlJdGVtVmFsaWRhdGlvbkVycm9yczogVmFsaWRhdGlvbkVycm9yW10gPSBbXTtcbiAgICAvKipcbiAgICAgKiBBbGwgdGhlIGNoYW5nZXMgdGhhdCBoYXZlIGJlZW4gZG9uZSB0byB0aGUgYXJyYXkgaXRlbS5cbiAgICAgKi9cbiAgICBhcnJheUl0ZW1DaGFuZ2VzOiBEaWZmZXJlbmNlPEVudGl0eVR5cGU+W10gPSBbXTtcbiAgICAvKipcbiAgICAgKiBXaGF0IHRvIGRpc3BsYXkgaW5zaWRlIHRoZSBhcnJheSBpdGVtIHRvb2x0aXAuXG4gICAgICovXG4gICAgYXJyYXlJdGVtVG9vbHRpcENvbnRlbnQ6IHN0cmluZyA9ICcnO1xuXG4gICAgLyoqXG4gICAgICogTWV0YWRhdGEgb2YgYSBoYXMgbWFueSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBtZXRhZGF0YUhhc01hbnkhOiBIYXNNYW55RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8RW50aXR5VHlwZSwgRW50aXR5VHlwZT47XG4gICAgLyoqXG4gICAgICogVGhlIHRhYmxlIGNvbnRleHQgZm9yIHRoZSBoYXMgbWFueSBpbnB1dC5cbiAgICAgKi9cbiAgICBoYXNNYW55VGFibGVDb250ZXh0ITogVGVtcGxhdGVDb250ZXh0PFRhYmxlQ29udGV4dDxFbnRpdHlUeXBlPj47XG4gICAgLyoqXG4gICAgICogVGhlIGhhcyBtYW55IGltcG9ydCBhY3Rpb24uXG4gICAgICovXG4gICAgaGFzTWFueUltcG9ydEFjdGlvbiE6IEJhc2VUYWJsZUFjdGlvbkludGVybmFsO1xuICAgIHByaXZhdGUgaGFzTWFueUVudGl0eVNlcnZpY2UhOiBFbnRpdHlTZXJ2aWNlPEVudGl0eVR5cGU+O1xuICAgIEBWaWV3Q2hpbGQoJ2NyZWF0ZUhhc01hbnlEaWFsb2cnKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgY3JlYXRlSGFzTWFueURpYWxvZyE6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuICAgIHByaXZhdGUgY3JlYXRlSGFzTWFueURpYWxvZ1JlZiE6IE1hdERpYWxvZ1JlZjx1bmtub3duPjtcbiAgICBAVmlld0NoaWxkKCdlZGl0SGFzTWFueURpYWxvZycpXG4gICAgcHJpdmF0ZSByZWFkb25seSBlZGl0SGFzTWFueURpYWxvZyE6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuICAgIHByaXZhdGUgZWRpdEhhc01hbnlEaWFsb2dSZWYhOiBNYXREaWFsb2dSZWY8dW5rbm93bj47XG4gICAgLyoqXG4gICAgICogQSBzaW5nbGUgaGFzIG1hbnkgZW50aXR5LlxuICAgICAqL1xuICAgIGhhc01hbnlFbnRpdHkhOiBFbnRpdHlUeXBlO1xuICAgIC8qKlxuICAgICAqIFRoZSBzaW5nbGUgaGFzIG1hbnkgZW50aXR5IGJlZm9yZSBhbnkgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZS4gSXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgdGhlIGZvcm0gaXMgZGlydHkuXG4gICAgICovXG4gICAgaGFzTWFueUVudGl0eVByaW9yQ2hhbmdlcyE6IEVudGl0eVR5cGU7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIGhhcyBtYW55IGVudGl0eSBpcyB2YWxpZC5cbiAgICAgKi9cbiAgICBpc0hhc01hbnlFbnRpdHlWYWxpZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIEFsbCB2YWxpZGF0aW9uIGVycm9ycyBvZiB0aGUgaGFzIG1hbnkgZW50aXR5LlxuICAgICAqL1xuICAgIGhhc01hbnlWYWxpZGF0aW9uRXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JbXSA9IFtdO1xuICAgIC8qKlxuICAgICAqIEFsbCB0aGUgY2hhbmdlcyB0aGF0IGhhdmUgYmVlbiBkb25lIHRvIHRoZSBoYXMgbWFueSBlbnRpdHkuXG4gICAgICovXG4gICAgaGFzTWFueUNoYW5nZXM6IERpZmZlcmVuY2U8RW50aXR5VHlwZT5bXSA9IFtdO1xuICAgIC8qKlxuICAgICAqIFdoYXQgdG8gZGlzcGxheSBpbnNpZGUgdGhlIGhhcyBtYW55IHRvb2x0aXAuXG4gICAgICovXG4gICAgaGFzTWFueVRvb2x0aXBDb250ZW50OiBzdHJpbmcgPSAnJztcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgaGFzIG1hbnkgZW50aXR5IGlzIGRpcnR5LlxuICAgICAqL1xuICAgIGlzSGFzTWFueUVudGl0eURpcnR5OiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIGN1cnJlbnQgdXNlciBpcyBhbGxvd2VkIHRvIGNyZWF0ZSBhIGhhcyBtYW55IGVudGl0eS5cbiAgICAgKi9cbiAgICBoYXNNYW55QWxsb3dDcmVhdGUhOiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFRoZSBmb3JtIGNvbnRleHQgZm9yIGNyZWF0aW5nIGFuIGhhcyBtYW55IGVudGl0eS5cbiAgICAgKi9cbiAgICBoYXNNYW55Q3JlYXRlRm9ybUNvbnRleHQhOiBUZW1wbGF0ZUNvbnRleHQ8Rm9ybUNvbnRleHQ8RW50aXR5VHlwZT4+O1xuICAgIC8qKlxuICAgICAqIFRoZSBmb3JtIGNvbnRleHQgZm9yIGVkaXRpbmcgYW4gaGFzIG1hbnkgZW50aXR5LlxuICAgICAqL1xuICAgIGhhc01hbnlFZGl0Rm9ybUNvbnRleHQhOiBUZW1wbGF0ZUNvbnRleHQ8Rm9ybUNvbnRleHQ8RW50aXR5VHlwZT4+O1xuICAgIHByaXZhdGUgaGFzTWFueUNyZWF0ZUJhc2VVcmwhOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWV0YWRhdGEgZm9yIGEgcmVmZXJlbmNlcyBvbmUgcHJvcGVydHkuXG4gICAgICovXG4gICAgbWV0YWRhdGFSZWZlcmVuY2VzT25lITogUmVmZXJlbmNlc09uZURlY29yYXRvckNvbmZpZ0ludGVybmFsPEVudGl0eVR5cGU+O1xuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZXMgdGhhdCBjYW4gYmUgcG9zc2libHkgcmVmZXJlbmNlZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlZmVyZW5jZXNPbmVBbGxSZWZlcmVuY2VkRW50aXRpZXMhOiBFbnRpdHlUeXBlW107XG4gICAgLyoqXG4gICAgICogVGhlIHBvc3NpYmxlIHJlZmVyZW5jZXMgb25lIGRyb3Bkb3duIHZhbHVlcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlZmVyZW5jZXNPbmVEcm9wZG93blZhbHVlcyE6IERyb3Bkb3duVmFsdWU8c3RyaW5nPltdO1xuICAgIC8qKlxuICAgICAqIFRoZSBmaWx0ZXJlZCBkcm9wZG93biB2YWx1ZXMgdGhhdCBnZXQgZGlzcGxheWVkIGluIHRoZSByZWZlcmVuY2VzIG9uZSBkcm9wZG93biBpbnB1dC5cbiAgICAgKi9cbiAgICBmaWx0ZXJlZFJlZmVyZW5jZXNPbmVEcm9wZG93blZhbHVlcyE6IERyb3Bkb3duVmFsdWU8c3RyaW5nPltdO1xuICAgIC8qKlxuICAgICAqIEEgdW5pcXVlIGlucHV0IG5hbWUgZm9yIHRoZSByZWZlcmVuY2VzIG9uZSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICByZWZlcmVuY2VzT25lTmFtZSE6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgZm9ybSBjb250ZXh0IGZvciBhbiByZWZlcmVuY2VzIG9uZSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICByZWZlcmVuY2VzT25lRm9ybUNvbnRleHQhOiBUZW1wbGF0ZUNvbnRleHQ8Rm9ybUNvbnRleHQ8RW50aXR5VHlwZT4+O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVudW0gVmFsdWVzIGZvciBhbGwgdGhlIGRpZmZlcmVudCBEZWNvcmF0b3JUeXBlcy5cbiAgICAgKi9cbiAgICByZWFkb25seSBEZWNvcmF0b3JUeXBlczogdHlwZW9mIERlY29yYXRvclR5cGVzID0gRGVjb3JhdG9yVHlwZXM7XG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgSGVscGVyTWV0aG9kcyBhcm91bmQgaGFuZGxpbmcgRW50aXRpZXMgYW5kIHRoZWlyIHByb3BlcnR5LW1ldGFkYXRhLlxuICAgICAqL1xuICAgIEVudGl0eVV0aWxpdGllczogdHlwZW9mIEVudGl0eVV0aWxpdGllcyA9IEVudGl0eVV0aWxpdGllcztcbiAgICAvKipcbiAgICAgKiBDb250YWlucyBIZWxwZXIgRnVuY3Rpb25zIGZvciBoYW5kbGluZyBkYXRlIHByb3BlcnRpZXMuXG4gICAgICovXG4gICAgRGF0ZVV0aWxpdGllczogdHlwZW9mIERhdGVVdGlsaXRpZXMgPSBEYXRlVXRpbGl0aWVzO1xuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgYXJvdW5kIG1hdGVyaWFsIHNlbGVjdGlvbnMgaW5zaWRlIG9mIHRhYmxlcy5cbiAgICAgKi9cbiAgICBTZWxlY3Rpb25VdGlsaXRpZXM6IHR5cGVvZiBTZWxlY3Rpb25VdGlsaXRpZXMgPSBTZWxlY3Rpb25VdGlsaXRpZXM7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1yZXR1cm5zXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGRyb3Bkb3duIHZhbHVlIGZvciByZWZlcmVuY2VzIG9uZS5cbiAgICAgKiBJcyBuZWVkZWQgc28gdGhhdCB0aGUgZHJvcGRvd24gdmFsdWUgd2lsbCBzdGlsbCBiZSBkaXNwbGF5ZWQsXG4gICAgICogZXZlbiB3aGVuIHRoZSBmaWx0ZXIgbWV0aG9kIHJlbW92ZXMgdGhlIHZhbHVlIGZyb20gdGhlIHNlbGVjdGFibGUgZHJvcGRvd24gdmFsdWVzLlxuICAgICAqL1xuICAgIGdldCBjdXJyZW50UmVmZXJlbmNlc09uZURyb3Bkb3duVmFsdWUoKTogRHJvcGRvd25WYWx1ZTxzdHJpbmc+IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIExvZGFzaFV0aWxpdGllcy5jbG9uZURlZXAodGhpcy5yZWZlcmVuY2VzT25lRHJvcGRvd25WYWx1ZXMgPz8gW10pXG4gICAgICAgICAgICAuZmluZCh2ID0+IHYudmFsdWUgPT09IHRoaXMuZW50aXR5W3RoaXMucHJvcGVydHlLZXldKTtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1yZXR1cm5zXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCByZWZlcmVuY2VzIG9uZSB2YWx1ZSBzaG91bGQgYmUgc2hvd24sXG4gICAgICogYWx0aG91Z2ggaXQgd291bGQgaGF2ZSBiZWVuIGZpbHRlcmVkIG91dCBieSB0aGUgc2VhcmNoLlxuICAgICAqL1xuICAgIGdldCBzaG91bGREaXNwbGF5Q3VycmVudFJlZmVyZW5jZXNPbmVEcm9wZG93blZhbHVlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmN1cnJlbnRSZWZlcmVuY2VzT25lRHJvcGRvd25WYWx1ZVxuICAgICAgICAgICAgJiYgIXRoaXMuZmlsdGVyZWRSZWZlcmVuY2VzT25lRHJvcGRvd25WYWx1ZXMuZmluZCh2ID0+IHYudmFsdWUgPT09IHRoaXMuY3VycmVudFJlZmVyZW5jZXNPbmVEcm9wZG93blZhbHVlPy52YWx1ZSk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEVudmlyb25tZW50SW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIEBJbmplY3QoTkdYX0dFVF9WQUxJREFUSU9OX0VSUk9SX01FU1NBR0UpXG4gICAgICAgIHByb3RlY3RlZCByZWFkb25seSBkZWZhdWx0R2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZTogKG1vZGVsOiBOZ01vZGVsKSA9PiBzdHJpbmcsXG4gICAgICAgIEBJbmplY3QoTkdYX0NPTVBMRVRFX0dMT0JBTF9ERUZBVUxUX1ZBTFVFUylcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IGdsb2JhbENvbmZpZzogTmd4R2xvYmFsRGVmYXVsdFZhbHVlcyxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50XG4gICAgKSB7fVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZSBpbnB1dCB3aXRoIHRoZSBnaXZlbiBrZXkgb24gdGhlIGdpdmVuIHByb3BlcnR5IGlzIHJlYWRvbmx5LlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBvbiB3aGljaCB0byBjaGVjayB0aGUgaW5wdXQuXG4gICAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkgZm9yIHRoZSBpbnB1dCB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyBXaGV0aGVyIG9yIG5vdCB0aGUgaW5wdXQgaXMgcmVhZG9ubHkuXG4gICAgICovXG4gICAgaXNQcm9wZXJ0eVJlYWRPbmx5KHByb3BlcnR5OiBFbnRpdHlUeXBlLCBrZXk6IGtleW9mIEVudGl0eVR5cGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLmluamVjdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnRlcm5hbElzUmVhZE9ubHkgfHwgdGhpcy5tZXRhZGF0YURlZmF1bHRPYmplY3Q/LmlzUmVhZE9ubHkocHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBtZXRhZGF0YTogUHJvcGVydHlEZWNvcmF0b3JDb25maWdJbnRlcm5hbDx1bmtub3duPiB8IHVuZGVmaW5lZCA9IEVudGl0eVV0aWxpdGllcy5nZXRQcm9wZXJ0eU1ldGFkYXRhKHByb3BlcnR5LCBrZXkpO1xuICAgICAgICAgICAgaWYgKCFtZXRhZGF0YSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gbWV0YWRhdGEgd2FzIGZvdW5kIGZvciB0aGUga2V5IFwiJHtTdHJpbmcoa2V5KX1cImApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG1ldGFkYXRhLmlzUmVhZE9ubHkocHJvcGVydHkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB2YWx1ZSB0byBkaXNwbGF5IGluIHRoZSBjb2x1bW4uXG4gICAgICogUnVucyBpbiBlbnZpcm9ubWVudCBjb250ZXh0IHRvIGVuYWJsZSBpbmplY3Rpb24uXG4gICAgICogQHBhcmFtIGVudGl0eSAtIFRoZSBlbnRpdHkgdG8gZ2V0IHRoZSB2YWx1ZSBmcm9tLlxuICAgICAqIEBwYXJhbSBkaXNwbGF5Q29sdW1uIC0gVGhlIGRpc3BsYXkgY29sdW1uIHRvIGdldCB0aGUgdmFsdWUgZnJvbS5cbiAgICAgKiBAcmV0dXJucyBUaGUgdmFsdWUgb2YgdGhlIGRpc3BsYXkgY29sdW1uLlxuICAgICAqL1xuICAgIGdldERpc3BsYXlDb2x1bW5WYWx1ZShlbnRpdHk6IEVudGl0eVR5cGUsIGRpc3BsYXlDb2x1bW46IERpc3BsYXlDb2x1bW48RW50aXR5VHlwZT4pOiB1bmtub3duIHtcbiAgICAgICAgcmV0dXJuIHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLmluamVjdG9yLCAoKSA9PiBkaXNwbGF5Q29sdW1uLnZhbHVlKGVudGl0eSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVtaXRzIGEgY2VsbENsaWNrZWQgZXZlbnQgd2hlbiB0aGUgY2xpY2tlZCBjb2x1bW4gaXMgZW5hYmxlZCBhbmQgY2xpY2tpbmcgaXMgYWxsb3dlZCBieSB0aGUgY29uZmlndXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgb2YgdGhlIHJvdyB0aGF0IHdhcyBjbGlja2VkLlxuICAgICAqIEBwYXJhbSBkQ29sIC0gVGhlIGRpc3BsYXkgY29sdW1uIG9mIHRoZSByb3cgdGhhdCB3YXMgY2xpY2tlZC5cbiAgICAgKiBAcGFyYW0gY29udGV4dCAtIFRoZSBjb250ZXh0IG9mIHRoZSB0YWJsZSB3aGVyZSB0aGUgY2VsbCB3YXMgY2xpY2tlZC5cbiAgICAgKi9cbiAgICBjbGlja0NlbGw8VD4odmFsdWU6IFQsIGRDb2w6IERpc3BsYXlDb2x1bW48VD4sIGNvbnRleHQ6IFRhYmxlQ29udGV4dDxUPik6IHZvaWQge1xuICAgICAgICBpZiAoZENvbC5kaXNhYmxlQ2xpY2sgPT0gdHJ1ZSB8fCAhY29udGV4dC5hbGxvd0NsaWNrKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRleHQuY2xpY2tDZWxsKHZhbHVlLCBkQ29sKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEdldFZhbGlkYXRpb25FcnJvck1lc3NhZ2UgPSB0aGlzLmdldFZhbGlkYXRpb25FcnJvck1lc3NhZ2UgPz8gdGhpcy5kZWZhdWx0R2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbElzUmVhZE9ubHkgPSB0aGlzLmlzUmVhZE9ubHkgPz8gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgZm91bmRUeXBlOiBEZWNvcmF0b3JUeXBlcyB8IHVuZGVmaW5lZCA9IEVudGl0eVV0aWxpdGllcy5nZXRQcm9wZXJ0eVR5cGUodGhpcy5lbnRpdHksIHRoaXMucHJvcGVydHlLZXkpO1xuICAgICAgICBpZiAoZm91bmRUeXBlID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyB0eXBlIHdhcyBmb3VuZCBmb3IgdGhlIGtleSBcIiR7U3RyaW5nKHRoaXMucHJvcGVydHlLZXkpfVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50eXBlID0gZm91bmRUeXBlO1xuICAgICAgICBpZiAodGhpcy52YWxpZEVtcHR5ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50TWV0YWRhdGE6IFByb3BlcnR5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8dW5rbm93bj4gPSBSZWZsZWN0VXRpbGl0aWVzLmdldE1ldGFkYXRhKFxuICAgICAgICAgICAgICAgICdtZXRhZGF0YScsXG4gICAgICAgICAgICAgICAgdGhpcy5lbnRpdHksXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wZXJ0eUtleVxuICAgICAgICAgICAgKSBhcyBQcm9wZXJ0eURlY29yYXRvckNvbmZpZ0ludGVybmFsPHVua25vd24+O1xuICAgICAgICAgICAgUmVmbGVjdFV0aWxpdGllcy5kZWZpbmVNZXRhZGF0YSgnbWV0YWRhdGEnLCB7IC4uLmN1cnJlbnRNZXRhZGF0YSwgcmVxdWlyZWQ6IGRlZmF1bHRGYWxzZSB9LCB0aGlzLmVudGl0eSwgdGhpcy5wcm9wZXJ0eUtleSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmb3VuZE1ldGFkYXRhOiBQcm9wZXJ0eURlY29yYXRvckNvbmZpZ0ludGVybmFsPHVua25vd24+IHwgdW5kZWZpbmVkID0gRW50aXR5VXRpbGl0aWVzLmdldFByb3BlcnR5TWV0YWRhdGEoXG4gICAgICAgICAgICB0aGlzLmVudGl0eSxcbiAgICAgICAgICAgIHRoaXMucHJvcGVydHlLZXksXG4gICAgICAgICAgICB0aGlzLnR5cGVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFmb3VuZE1ldGFkYXRhKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIG1ldGFkYXRhIHdhcyBmb3VuZCBmb3IgdGhlIGtleSBcIiR7U3RyaW5nKHRoaXMucHJvcGVydHlLZXkpfVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tZXRhZGF0YSA9IGZvdW5kTWV0YWRhdGE7XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuT0JKRUNUX0RST1BET1dOOiB7XG4gICAgICAgICAgICAgICAgdm9pZCB0aGlzLmluaXREcm9wZG93bk9iamVjdElucHV0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLk9CSkVDVDoge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdE9iamVjdElucHV0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkFSUkFZOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0RW50aXR5QXJyYXkoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuSEFTX01BTlk6IHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRIYXNNYW55KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLlJFRkVSRU5DRVNfT05FOiB7XG4gICAgICAgICAgICAgICAgdm9pZCB0aGlzLmluaXRSZWZlcmVuY2VzT25lKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGluaXRSZWZlcmVuY2VzT25lKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLm1ldGFkYXRhUmVmZXJlbmNlc09uZSA9IHRoaXMubWV0YWRhdGEgYXMgUmVmZXJlbmNlc09uZURlY29yYXRvckNvbmZpZ0ludGVybmFsPEVudGl0eVR5cGU+O1xuICAgICAgICB0aGlzLnJlZmVyZW5jZXNPbmVOYW1lID0gdGhpcy5wcm9wZXJ0eUtleS50b1N0cmluZygpICsgJ2lucHV0JyArIFVVSURVdGlsaXRpZXMuY3JlYXRlKCk7XG5cbiAgICAgICAgYXdhaXQgcnVuSW5JbmplY3Rpb25Db250ZXh0KFxuICAgICAgICAgICAgdGhpcy5pbmplY3RvcixcbiAgICAgICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZmVyZW5jZXNPbmVBbGxSZWZlcmVuY2VkRW50aXRpZXMgPSBhd2FpdCB0aGlzLm1ldGFkYXRhUmVmZXJlbmNlc09uZS5nZXRSZWZlcmVuY2VkRW50aXRpZXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZmVyZW5jZXNPbmVEcm9wZG93blZhbHVlcyA9IHRoaXMubWV0YWRhdGFSZWZlcmVuY2VzT25lLmdldERyb3Bkb3duVmFsdWVzKFxuICAgICAgICAgICAgICAgICAgICBMb2Rhc2hVdGlsaXRpZXMuY2xvbmVEZWVwKHRoaXMucmVmZXJlbmNlc09uZUFsbFJlZmVyZW5jZWRFbnRpdGllcylcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRSZWZlcmVuY2VzT25lRHJvcGRvd25WYWx1ZXMgPSBMb2Rhc2hVdGlsaXRpZXMuY2xvbmVEZWVwKHRoaXMucmVmZXJlbmNlc09uZURyb3Bkb3duVmFsdWVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJlZmVyZW5jZXNPbmVPYmplY3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaWx0ZXJzIHRoZSByZWZlcmVuY2VzIG9uZSBkcm9wZG93biB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHNlYXJjaElucHV0IC0gVGhlIHNlYXJjaCBpbnB1dCB0byBmaWx0ZXIgZm9yLlxuICAgICAqL1xuICAgIGZpbHRlclJlZmVyZW5jZXNPbmVWYWx1ZXMoc2VhcmNoSW5wdXQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaWx0ZXI6IHN0cmluZyA9IHNlYXJjaElucHV0LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRSZWZlcmVuY2VzT25lRHJvcGRvd25WYWx1ZXMgPSBMb2Rhc2hVdGlsaXRpZXMuY2xvbmVEZWVwKHRoaXMucmVmZXJlbmNlc09uZURyb3Bkb3duVmFsdWVzKS5maWx0ZXIob3B0aW9uID0+IHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb24uZGlzcGxheU5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXIpIHx8IG9wdGlvbi52YWx1ZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlcik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdEhhc01hbnkoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubWV0YWRhdGEgPSBuZXcgSGFzTWFueURlY29yYXRvckNvbmZpZ0ludGVybmFsKFxuICAgICAgICAgICAgdGhpcy5tZXRhZGF0YSBhcyBIYXNNYW55RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8RW50aXR5VHlwZSwgRW50aXR5VHlwZT4sXG4gICAgICAgICAgICB0aGlzLmdsb2JhbENvbmZpZ1xuICAgICAgICApO1xuICAgICAgICBSZWZsZWN0VXRpbGl0aWVzLmRlZmluZU1ldGFkYXRhKCdtZXRhZGF0YScsIHRoaXMubWV0YWRhdGEsIHRoaXMuZW50aXR5LCB0aGlzLnByb3BlcnR5S2V5KTtcbiAgICAgICAgdGhpcy5tZXRhZGF0YUhhc01hbnkgPSB0aGlzLm1ldGFkYXRhIGFzIEhhc01hbnlEZWNvcmF0b3JDb25maWdJbnRlcm5hbDxFbnRpdHlUeXBlLCBFbnRpdHlUeXBlPjtcbiAgICAgICAgdGhpcy5oYXNNYW55SW1wb3J0QWN0aW9uID0gbmV3IEJhc2VUYWJsZUFjdGlvbkludGVybmFsKHtcbiAgICAgICAgICAgIC4uLnRoaXMubWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5iYXNlRGF0YS5pbXBvcnRBY3Rpb25EYXRhLFxuICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLnN0YXJ0SW1wb3J0SnNvbigpXG4gICAgICAgIH0sIHRoaXMuZ2xvYmFsQ29uZmlnKTtcblxuICAgICAgICBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5pbmplY3RvciwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYXNNYW55QWxsb3dDcmVhdGUgPSB0aGlzLm1ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuYmFzZURhdGEuYWxsb3dDcmVhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuaGFzTWFueUVudGl0eVNlcnZpY2UgPSBpbmplY3Q8RW50aXR5U2VydmljZTxFbnRpdHlUeXBlPj4odGhpcy5tZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLkVudGl0eVNlcnZpY2VDbGFzcyk7XG4gICAgICAgICAgICB0aGlzLmhhc01hbnlDcmVhdGVCYXNlVXJsID0gdGhpcy5tZXRhZGF0YUhhc01hbnkuY3JlYXRlQmFzZVVybCh0aGlzLmVudGl0eSwgdGhpcy5tZXRhZGF0YUhhc01hbnkpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBnaXZlbkRpc3BsYXlDb2x1bW5zOiBzdHJpbmdbXSA9IHRoaXMubWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5iYXNlRGF0YS5kaXNwbGF5Q29sdW1ucy5tYXAoKHYpID0+IHYuZGlzcGxheU5hbWUpO1xuICAgICAgICBpZiAoZ2l2ZW5EaXNwbGF5Q29sdW1ucy5maW5kKHMgPT4gcyA9PT0gJ3NlbGVjdCcpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYFRoZSBuYW1lIFwic2VsZWN0XCIgZm9yIGEgZGlzcGxheSBjb2x1bW4gaXMgcmVzZXJ2ZWQuXG4gICAgICAgICAgICAgICAgUGxlYXNlIGNob29zZSBhIGRpZmZlcmVudCBuYW1lLmBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oYXNNYW55VGFibGVDb250ZXh0ID0ge1xuICAgICAgICAgICAgJGltcGxpY2l0OiB7XG4gICAgICAgICAgICAgICAgLi4ubmV3IEludGVybmFsQ3VzdG9tVGFibGVDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdsb2JhbENvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUNvbHVtbnM6IHRoaXMubWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5iYXNlRGF0YS5kaXNwbGF5Q29sdW1ucyBhcyBEaXNwbGF5Q29sdW1uPHVua25vd24+W10sXG4gICAgICAgICAgICAgICAgICAgICAgICB3aXRoU2VsZWN0aW9uOiAhdGhpcy5pbnRlcm5hbElzUmVhZE9ubHksXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc3R5bGlzdGljL21heC1sZW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWNSb3dTdHlsZUNsYXNzZXM6IHRoaXMubWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5iYXNlRGF0YS5keW5hbWljUm93U3R5bGVDbGFzc2VzIGFzIER5bmFtaWNTdHlsZUNsYXNzZXM8dW5rbm93bj4sXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd0NsaWNrOiAoKGVudGl0eTogRW50aXR5VHlwZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuYmFzZURhdGEuYWxsb3dSZWFkKGVudGl0eSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgdGhpcy5tZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLmFsbG93VXBkYXRlKGVudGl0eSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSBhcyAodmFsdWU6IHVua25vd24pID0+IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5TG9hZGluZ1NwaW5uZXI6IHRoaXMubWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5iYXNlRGF0YS5kaXNwbGF5TG9hZGluZ1NwaW5uZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hTdHJpbmdGb3JSb3c6IHRoaXMubWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5iYXNlRGF0YS5zZWFyY2hTdHJpbmcgYXMgKHZhbHVlOiB1bmtub3duKSA9PiBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgZGlzcGxheWVkQ29sdW1uczogIXRoaXMubWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5iYXNlRGF0YS50YWJsZUFjdGlvbnMuZmlsdGVyKHRBID0+IHRBLnR5cGUgPT09ICdtdWx0aS1zZWxlY3QnKS5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgPyBnaXZlbkRpc3BsYXlDb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgIDogWydzZWxlY3QnXS5jb25jYXQoZ2l2ZW5EaXNwbGF5Q29sdW1ucyksXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZTogbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSgpLFxuICAgICAgICAgICAgICAgIGlzTG9hZGluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzaG91bGRTaG93TWlzc2luZ0Vycm9yOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb246IG5ldyBTZWxlY3Rpb25Nb2RlbDxFbnRpdHlUeXBlPih0cnVlLCBbXSksXG4gICAgICAgICAgICAgICAgY2xpY2tDZWxsOiAoZW50aXR5LCBkQ29sKSA9PiB0aGlzLmVkaXRIYXNNYW55RW50aXR5KGVudGl0eSwgZENvbClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhc01hbnlUYWJsZUNvbnRleHQuJGltcGxpY2l0LmRhdGFTb3VyY2Uuc29ydGluZ0RhdGFBY2Nlc3NvciA9IChlbnRpdHk6IEVudGl0eVR5cGUsIGhlYWRlcjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuaW5qZWN0b3IsICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXNwbGF5Q29sdW1uOiBEaXNwbGF5Q29sdW1uPEVudGl0eVR5cGU+ID0gdGhpcy5tZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLmRpc3BsYXlDb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgIC5maW5kKChkcCkgPT4gZHAuZGlzcGxheU5hbWUgPT09IGhlYWRlcikgYXMgRGlzcGxheUNvbHVtbjxFbnRpdHlUeXBlPjtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFibGVDb2x1bW5WYWx1ZVRvU29ydFZhbHVlKGRpc3BsYXlDb2x1bW4udmFsdWUoZW50aXR5KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5oYXNNYW55VGFibGVDb250ZXh0LiRpbXBsaWNpdC5kYXRhU291cmNlLmZpbHRlclByZWRpY2F0ZSA9IChlbnRpdHk6IEVudGl0eVR5cGUsIGZpbHRlcjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWFyY2hTdHI6IHN0cmluZyA9IHRoaXMubWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5iYXNlRGF0YS5zZWFyY2hTdHJpbmcoZW50aXR5KTtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZFNlYXJjaFN0cmluZzogc3RyaW5nID0gc2VhcmNoU3RyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRGaWx0ZXJTdHJpbmc6IHN0cmluZyA9IGZpbHRlci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZFNlYXJjaFN0cmluZy5pbmNsdWRlcyhmb3JtYXR0ZWRGaWx0ZXJTdHJpbmcpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFzTWFueUVudGl0eVNlcnZpY2UuZW50aXRpZXNTdWJqZWN0LnN1YnNjcmliZSgoZW50aXRpZXMpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFzTWFueVRhYmxlQ29udGV4dC4kaW1wbGljaXQuZGF0YVNvdXJjZS5kYXRhID0gZW50aXRpZXM7XG4gICAgICAgICAgICB0aGlzLmhhc01hbnlUYWJsZUNvbnRleHQuJGltcGxpY2l0LnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB9KTtcbiAgICAgICAgdm9pZCBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5pbmplY3RvciwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVhZEJhc2VVcmw6IHN0cmluZyA9IHRoaXMubWV0YWRhdGFIYXNNYW55LnJlYWRCYXNlVXJsKHRoaXMuZW50aXR5LCB0aGlzLm1ldGFkYXRhSGFzTWFueSk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmhhc01hbnlFbnRpdHlTZXJ2aWNlLnJlYWQocmVhZEJhc2VVcmwpO1xuICAgICAgICAgICAgdGhpcy5oYXNNYW55VGFibGVDb250ZXh0LiRpbXBsaWNpdC5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0RW50aXR5QXJyYXkoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubWV0YWRhdGEgPSBuZXcgRW50aXR5QXJyYXlEZWNvcmF0b3JDb25maWdJbnRlcm5hbChcbiAgICAgICAgICAgIHRoaXMubWV0YWRhdGEgYXMgRW50aXR5QXJyYXlEZWNvcmF0b3JDb25maWdJbnRlcm5hbDxFbnRpdHlUeXBlPixcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsQ29uZmlnXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubWV0YWRhdGFFbnRpdHlBcnJheSA9IHRoaXMubWV0YWRhdGEgYXMgRW50aXR5QXJyYXlEZWNvcmF0b3JDb25maWdJbnRlcm5hbDxFbnRpdHlUeXBlPjtcbiAgICAgICAgaWYgKHRoaXMuZW50aXR5W3RoaXMucHJvcGVydHlLZXldID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgKHRoaXMuZW50aXR5W3RoaXMucHJvcGVydHlLZXldIGFzIEVudGl0eVR5cGVbXSkgPSBbXTtcbiAgICAgICAgICAgIFJlZmxlY3RVdGlsaXRpZXMuZGVmaW5lTWV0YWRhdGEoJ21ldGFkYXRhJywgdGhpcy5tZXRhZGF0YSwgdGhpcy5lbnRpdHksIHRoaXMucHJvcGVydHlLZXkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5tZXRhZGF0YUVudGl0eUFycmF5LmNyZWF0ZUlubGluZSAmJiAhdGhpcy5tZXRhZGF0YUVudGl0eUFycmF5LmNyZWF0ZURpYWxvZ0RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMubWV0YWRhdGFFbnRpdHlBcnJheS5jcmVhdGVEaWFsb2dEYXRhID0ge1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnQWRkJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBnaXZlbkRpc3BsYXlDb2x1bW5zOiBzdHJpbmdbXSA9IHRoaXMubWV0YWRhdGFFbnRpdHlBcnJheS5kaXNwbGF5Q29sdW1ucy5tYXAoKHYpID0+IHYuZGlzcGxheU5hbWUpO1xuICAgICAgICBpZiAoZ2l2ZW5EaXNwbGF5Q29sdW1ucy5maW5kKHMgPT4gcyA9PT0gJ3NlbGVjdCcpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYFRoZSBuYW1lIFwic2VsZWN0XCIgZm9yIGEgZGlzcGxheSBjb2x1bW4gaXMgcmVzZXJ2ZWQuXG4gICAgICAgICAgICAgICAgUGxlYXNlIGNob29zZSBhIGRpZmZlcmVudCBuYW1lLmBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbnRpdHlBcnJheVRhYmxlQ29udGV4dCA9IHtcbiAgICAgICAgICAgICRpbXBsaWNpdDoge1xuICAgICAgICAgICAgICAgIC4uLm5ldyBJbnRlcm5hbEN1c3RvbVRhYmxlQ29uZmlndXJhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nbG9iYWxDb25maWcsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlDb2x1bW5zOiB0aGlzLm1ldGFkYXRhRW50aXR5QXJyYXkuZGlzcGxheUNvbHVtbnMgYXMgRGlzcGxheUNvbHVtbjx1bmtub3duPltdLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2l0aFNlbGVjdGlvbjogIXRoaXMuaW50ZXJuYWxJc1JlYWRPbmx5LFxuICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1pY1Jvd1N0eWxlQ2xhc3NlczogdGhpcy5tZXRhZGF0YUVudGl0eUFycmF5LmR5bmFtaWNSb3dTdHlsZUNsYXNzZXMgYXMgRHluYW1pY1N0eWxlQ2xhc3Nlczx1bmtub3duPixcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtcHR5RXJyb3JNZXNzYWdlOiB0aGlzLm1ldGFkYXRhRW50aXR5QXJyYXkubWlzc2luZ0Vycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBkaXNwbGF5ZWRDb2x1bW5zOiB0aGlzLmludGVybmFsSXNSZWFkT25seSA/IGdpdmVuRGlzcGxheUNvbHVtbnMgOiBbJ3NlbGVjdCddLmNvbmNhdChnaXZlbkRpc3BsYXlDb2x1bW5zKSxcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlOiBuZXcgTWF0VGFibGVEYXRhU291cmNlKCksXG4gICAgICAgICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzaG91bGRTaG93TWlzc2luZ0Vycm9yOiB0aGlzLm1ldGFkYXRhRW50aXR5QXJyYXkucmVxdWlyZWQodGhpcy5lbnRpdHkpLFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogbmV3IFNlbGVjdGlvbk1vZGVsPEVudGl0eVR5cGU+KHRydWUsIFtdKSxcbiAgICAgICAgICAgICAgICBjbGlja0NlbGw6IChlbnRpdHksIGRDb2wpID0+IHZvaWQgdGhpcy5lZGl0QXJyYXlJdGVtKGVudGl0eSwgZENvbClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5lbnRpdHlBcnJheVRhYmxlQ29udGV4dC4kaW1wbGljaXQuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5lbnRpdHlbdGhpcy5wcm9wZXJ0eUtleV0gYXMgRW50aXR5VHlwZVtdO1xuXG4gICAgICAgIHRoaXMuYXJyYXlJdGVtID0gbmV3IHRoaXMubWV0YWRhdGFFbnRpdHlBcnJheS5FbnRpdHlDbGFzcygpO1xuICAgICAgICB0aGlzLmFycmF5SXRlbVByaW9yQ2hhbmdlcyA9IExvZGFzaFV0aWxpdGllcy5jbG9uZURlZXAodGhpcy5hcnJheUl0ZW0pO1xuICAgICAgICBFbnRpdHlVdGlsaXRpZXMuc2V0RGVmYXVsdFZhbHVlcyh0aGlzLmFycmF5SXRlbSk7XG5cbiAgICAgICAgdGhpcy5hZGRBcnJheUl0ZW1Gb3JtQ29udGV4dCA9IHtcbiAgICAgICAgICAgICRpbXBsaWNpdDoge1xuICAgICAgICAgICAgICAgIGVudGl0eTogdGhpcy5hcnJheUl0ZW0sXG4gICAgICAgICAgICAgICAgdGFiczogRW50aXR5VXRpbGl0aWVzLmdldEVudGl0eVRhYnModGhpcy5hcnJheUl0ZW0sIHRoaXMuaW5qZWN0b3IsIHRydWUpLFxuICAgICAgICAgICAgICAgIGlucHV0Q2hhbmdlRXZlbnQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdm9pZCB0aGlzLmNoZWNrSXNBcnJheUl0ZW1WYWxpZCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEFycmF5SXRlbUZvcm1Db250ZXh0LiRpbXBsaWNpdC50YWJzID0gRW50aXR5VXRpbGl0aWVzLmdldEVudGl0eVRhYnModGhpcy5hcnJheUl0ZW0sIHRoaXMuaW5qZWN0b3IsIHRydWUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaGlkZU9taXRGb3JDcmVhdGU6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5hZGRBcnJheUl0ZW1Gb3JtQ29udGV4dDIgPSB7XG4gICAgICAgICAgICAkaW1wbGljaXQ6IHtcbiAgICAgICAgICAgICAgICBlbnRpdHk6IHRoaXMuYXJyYXlJdGVtLFxuICAgICAgICAgICAgICAgIHRhYnM6IEVudGl0eVV0aWxpdGllcy5nZXRFbnRpdHlUYWJzKHRoaXMuYXJyYXlJdGVtLCB0aGlzLmluamVjdG9yLCB0cnVlKSxcbiAgICAgICAgICAgICAgICBpbnB1dENoYW5nZUV2ZW50OiAoKSA9PiB7fSxcbiAgICAgICAgICAgICAgICBoaWRlT21pdEZvckNyZWF0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc1JlYWRPbmx5OiAoKSA9PiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuYWRkQXJyYXlJdGVtRGlhbG9nRGF0YSA9IG5ldyBDcmVhdGVEYXRhQnVpbGRlcih0aGlzLmdsb2JhbENvbmZpZywgdGhpcy5tZXRhZGF0YUVudGl0eUFycmF5LmNyZWF0ZURpYWxvZ0RhdGEpXG4gICAgICAgICAgICAud2l0aERlZmF1bHQoJ2NyZWF0ZUJ1dHRvbkxhYmVsJywgdGhpcy5nbG9iYWxDb25maWcuYWRkTGFiZWwpXG4gICAgICAgICAgICAud2l0aERlZmF1bHQoJ3RpdGxlJywgdGhpcy5nbG9iYWxDb25maWcuYWRkQXJyYXlJdGVtVGl0bGUpXG4gICAgICAgICAgICAuZ2V0UmVzdWx0KCk7XG5cbiAgICAgICAgdGhpcy5lZGl0QXJyYXlJdGVtRGlhbG9nRGF0YSA9IHRoaXMubWV0YWRhdGFFbnRpdHlBcnJheS5lZGl0RGlhbG9nRGF0YTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGluaXREcm9wZG93bk9iamVjdElucHV0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLm1ldGFkYXRhRHJvcGRvd25PYmplY3QgPSB0aGlzLm1ldGFkYXRhIGFzIERyb3Bkb3duT2JqZWN0RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8RW50aXR5VHlwZT47XG4gICAgICAgIHRoaXMub2JqZWN0RHJvcGRvd25OYW1lID0gdGhpcy5wcm9wZXJ0eUtleS50b1N0cmluZygpICsgJ2lucHV0JyArIFVVSURVdGlsaXRpZXMuY3JlYXRlKCk7XG5cbiAgICAgICAgYXdhaXQgcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuaW5qZWN0b3IsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub2JqZWN0RHJvcGRvd25WYWx1ZXMgPSBhd2FpdCB0aGlzLm1ldGFkYXRhRHJvcGRvd25PYmplY3QuZHJvcGRvd25WYWx1ZXModGhpcy5lbnRpdHkpO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZE9iamVjdERyb3Bkb3duVmFsdWVzID0gTG9kYXNoVXRpbGl0aWVzLmNsb25lRGVlcCh0aGlzLm9iamVjdERyb3Bkb3duVmFsdWVzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0T2JqZWN0SW5wdXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubWV0YWRhdGFEZWZhdWx0T2JqZWN0ID0gdGhpcy5tZXRhZGF0YSBhcyBEZWZhdWx0T2JqZWN0RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8RW50aXR5VHlwZT47XG4gICAgICAgIGNvbnN0IG9iamVjdFByb3BlcnR5OiBFbnRpdHlUeXBlID0gdGhpcy5lbnRpdHlbdGhpcy5wcm9wZXJ0eUtleV0gYXMgRW50aXR5VHlwZTtcbiAgICAgICAgY29uc3Qgb2JqZWN0UHJvcGVydHlUYWJzOiBFbnRpdHlUYWI8RW50aXR5VHlwZT5bXSA9IEVudGl0eVV0aWxpdGllcy5nZXRFbnRpdHlUYWJzKFxuICAgICAgICAgICAgb2JqZWN0UHJvcGVydHksXG4gICAgICAgICAgICB0aGlzLmluamVjdG9yLFxuICAgICAgICAgICAgdGhpcy5oaWRlT21pdEZvckNyZWF0ZSxcbiAgICAgICAgICAgIHRoaXMuaGlkZU9taXRGb3JFZGl0LFxuICAgICAgICAgICAgdGhpcy5tZXRhZGF0YURlZmF1bHRPYmplY3Qub21pdFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm9iamVjdEZvcm1Db250ZXh0ID0ge1xuICAgICAgICAgICAgJGltcGxpY2l0OiB7XG4gICAgICAgICAgICAgICAgZW50aXR5OiBvYmplY3RQcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICB0YWJzOiBvYmplY3RQcm9wZXJ0eVRhYnMsXG4gICAgICAgICAgICAgICAgaGlkZU9taXRGb3JDcmVhdGU6IHRoaXMuaGlkZU9taXRGb3JDcmVhdGUsXG4gICAgICAgICAgICAgICAgaGlkZU9taXRGb3JFZGl0OiB0aGlzLmhpZGVPbWl0Rm9yRWRpdCxcbiAgICAgICAgICAgICAgICBpc1JlYWRPbmx5OiAocHJvcGVydHksIGtleSkgPT4gdGhpcy5pc1Byb3BlcnR5UmVhZE9ubHkocHJvcGVydHksIGtleSksXG4gICAgICAgICAgICAgICAgaW5wdXRDaGFuZ2VFdmVudDogKCkgPT4gdGhpcy5lbWl0Q2hhbmdlKCksXG4gICAgICAgICAgICAgICAgdmFsaWRFbXB0eTogKCkgPT4gIXRoaXMubWV0YWRhdGEucmVxdWlyZWQodGhpcy5lbnRpdHkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGFydEltcG9ydEpzb24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlucHV0OiBIVE1MSW5wdXRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgaW5wdXQudHlwZSA9ICdmaWxlJztcbiAgICAgICAgaW5wdXQuYWNjZXB0ID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuICAgICAgICBpbnB1dC5vbmNoYW5nZSA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmIChpbnB1dC5maWxlcykge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaW1wb3J0SnNvbihpbnB1dC5maWxlc1swXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlucHV0LmNsaWNrKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBpbXBvcnRKc29uKGZpbGU6IEZpbGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHN0eWxpc3RpYy9tYXgtbGVuXG4gICAgICAgIGNvbnN0IGRpYWxvZ0RhdGE6IENvbmZpcm1EaWFsb2dEYXRhSW50ZXJuYWwgPSBuZXcgQ29uZmlybURpYWxvZ0RhdGFCdWlsZGVyKHRoaXMuZ2xvYmFsQ29uZmlnLCB0aGlzLmhhc01hbnlJbXBvcnRBY3Rpb24uY29uZmlybURpYWxvZ0RhdGEpXG4gICAgICAgICAgICAud2l0aERlZmF1bHQoJ3RleHQnLCB0aGlzLm1ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuYmFzZURhdGEuaW1wb3J0QWN0aW9uRGF0YS5jb25maXJtRGlhbG9nRGF0YT8udGV4dClcbiAgICAgICAgICAgIC53aXRoRGVmYXVsdCgndGl0bGUnLCB0aGlzLmhhc01hbnlJbXBvcnRBY3Rpb24uZGlzcGxheU5hbWUpXG4gICAgICAgICAgICAuZ2V0UmVzdWx0KCk7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPE5neE1hdEVudGl0eUNvbmZpcm1EaWFsb2dDb21wb25lbnQsIGJvb2xlYW4+ID0gdGhpcy5kaWFsb2cub3BlbihOZ3hNYXRFbnRpdHlDb25maXJtRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgICBkYXRhOiBkaWFsb2dEYXRhLFxuICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgICAgIHJlc3RvcmVGb2N1czogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlczogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpKTtcbiAgICAgICAgaWYgKHJlcyA9PSB0cnVlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmhhc01hbnlFbnRpdHlTZXJ2aWNlLmltcG9ydChmaWxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0d28gb2JqZWN0cyBhcmUgZXF1YWwuIElzIG5lZWRlZCBmb3IgdGhlIGRyb3Bkb3duLlxuICAgICAqIEBwYXJhbSB2YWx1ZTEgLSBUaGUgZmlyc3Qgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHZhbHVlMiAtIFRoZSBzZWNvbmQgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAgICogQHJldHVybnMgV2hldGhlciBvciBub3QgdGhlIG9iamVjdHMgYXJlIHRoZSBzYW1lLlxuICAgICAqL1xuICAgIHByaXZhdGUgY29tcGFyZU9iamVjdHModmFsdWUxPzogRW50aXR5VHlwZSwgdmFsdWUyPzogRW50aXR5VHlwZSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB2YWx1ZU9iamVjdDE6IEVudGl0eVR5cGUgPSBuZXcgdGhpcy5tZXRhZGF0YURyb3Bkb3duT2JqZWN0LkVudGl0eUNsYXNzKHZhbHVlMSk7XG4gICAgICAgIGNvbnN0IHZhbHVlT2JqZWN0MjogRW50aXR5VHlwZSA9IG5ldyB0aGlzLm1ldGFkYXRhRHJvcGRvd25PYmplY3QuRW50aXR5Q2xhc3ModmFsdWUyKTtcbiAgICAgICAgcmV0dXJuIExvZGFzaFV0aWxpdGllcy5pc0VxdWFsKHZhbHVlT2JqZWN0MSwgdmFsdWVPYmplY3QyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaWx0ZXJzIHRoZSBkcm9wZG93biB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHNlYXJjaElucHV0IC0gVGhlIHNlYXJjaCBpbnB1dCB0byBmaWx0ZXIgZm9yLlxuICAgICAqL1xuICAgIGZpbHRlck9iamVjdERyb3Bkb3duVmFsdWVzKHNlYXJjaElucHV0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmlsdGVyOiBzdHJpbmcgPSBzZWFyY2hJbnB1dC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB0aGlzLmZpbHRlcmVkT2JqZWN0RHJvcGRvd25WYWx1ZXMgPSBMb2Rhc2hVdGlsaXRpZXMuY2xvbmVEZWVwKHRoaXMub2JqZWN0RHJvcGRvd25WYWx1ZXMpLmZpbHRlcihvcHRpb24gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi5kaXNwbGF5TmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlcikgfHwgSlNPTi5zdHJpbmdpZnkob3B0aW9uLnZhbHVlKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgLmluY2x1ZGVzKGZpbHRlcik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHJlZmVyZW5jZXMgb25lIG9iamVjdCB1c2luZyB0aGUgaW5wdXQgaWQuXG4gICAgICovXG4gICAgc2V0UmVmZXJlbmNlc09uZU9iamVjdCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZm91bmRFbnRpdHk6IEVudGl0eVR5cGUgfCB1bmRlZmluZWQgPSB0aGlzLm1ldGFkYXRhUmVmZXJlbmNlc09uZS5nZXRFbnRpdHlGb3JJZChcbiAgICAgICAgICAgIHRoaXMuZW50aXR5W3RoaXMucHJvcGVydHlLZXldIGFzIHN0cmluZyxcbiAgICAgICAgICAgIHRoaXMucmVmZXJlbmNlc09uZUFsbFJlZmVyZW5jZWRFbnRpdGllc1xuICAgICAgICApO1xuICAgICAgICBjb25zdCByZWZlcmVuY2VzT25lT2JqZWN0OiBFbnRpdHlUeXBlID0gbmV3IHRoaXMubWV0YWRhdGFSZWZlcmVuY2VzT25lLkVudGl0eUNsYXNzKGZvdW5kRW50aXR5KTtcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlc09uZVByb3BlcnR5VGFiczogRW50aXR5VGFiPEVudGl0eVR5cGU+W10gPSBFbnRpdHlVdGlsaXRpZXMuZ2V0RW50aXR5VGFicyhcbiAgICAgICAgICAgIHJlZmVyZW5jZXNPbmVPYmplY3QsXG4gICAgICAgICAgICB0aGlzLmluamVjdG9yLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgdGhpcy5tZXRhZGF0YVJlZmVyZW5jZXNPbmUub21pdFxuICAgICAgICApO1xuXG4gICAgICAgIGlmICh0aGlzLm1ldGFkYXRhUmVmZXJlbmNlc09uZS5kcm9wZG93bk9ubHkpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZWZlcmVuY2VzT25lRm9ybUNvbnRleHQgPSB7XG4gICAgICAgICAgICAkaW1wbGljaXQ6IHtcbiAgICAgICAgICAgICAgICBlbnRpdHk6IHJlZmVyZW5jZXNPbmVPYmplY3QsXG4gICAgICAgICAgICAgICAgdGFiczogcmVmZXJlbmNlc09uZVByb3BlcnR5VGFicyxcbiAgICAgICAgICAgICAgICBoaWRlT21pdEZvckNyZWF0ZTogdGhpcy5oaWRlT21pdEZvckNyZWF0ZSxcbiAgICAgICAgICAgICAgICBoaWRlT21pdEZvckVkaXQ6IHRoaXMuaGlkZU9taXRGb3JFZGl0LFxuICAgICAgICAgICAgICAgIGlzUmVhZE9ubHk6ICgpID0+IHRydWUsXG4gICAgICAgICAgICAgICAgaW5wdXRDaGFuZ2VFdmVudDogKCkgPT4gdGhpcy5lbWl0Q2hhbmdlKCksXG4gICAgICAgICAgICAgICAgdmFsaWRFbXB0eTogKCkgPT4gIXRoaXMubWV0YWRhdGEucmVxdWlyZWQodGhpcy5lbnRpdHkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVkaXRzIGFuIGVudGl0eS4gVGhpcyBlaXRoZXIgY2FsbHMgdGhlIGVkaXQtTWV0aG9kIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIG9yIHVzZXMgYSBkZWZhdWx0IGVkaXQtZGlhbG9nLlxuICAgICAqIEBwYXJhbSBlbnRpdHkgLSBUaGUgZW50aXR5IHRoYXQgc2hvdWxkIGJlIHVwZGF0ZWQuXG4gICAgICogQHBhcmFtIGRDb2wgLSBUaGUgZGlzcGxheSBjb2x1bW4gdGhhdCB3YXMgY2xpY2tlZCBvbi5cbiAgICAgKiBAdGhyb3dzIFdoZW4gbm8gRW50aXR5Q2xhc3Mgd2FzIHByb3ZpZGVkLCBhcyBhIG5ldyBjYWxsIGlzIG5lZWRlZCB0byBpbml0aWFsaXplIG1ldGFkYXRhLlxuICAgICAqL1xuICAgIGVkaXRIYXNNYW55RW50aXR5KGVudGl0eTogRW50aXR5VHlwZSwgZENvbDogRGlzcGxheUNvbHVtbjxFbnRpdHlUeXBlPik6IHZvaWQge1xuICAgICAgICBpZiAoKGRDb2wuZGlzYWJsZUNsaWNrID09PSB0cnVlKSB8fCAoIXRoaXMuaGFzTWFueUFsbG93VXBkYXRlKGVudGl0eSkgJiYgIXRoaXMuaGFzTWFueUFsbG93UmVhZChlbnRpdHkpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5tZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLkVudGl0eUNsYXNzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFwiRW50aXR5Q2xhc3NcIiBzcGVjaWZpZWQgZm9yIHRoaXMgdGFibGUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLmVkaXQpIHtcbiAgICAgICAgICAgIHRoaXMubWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5iYXNlRGF0YS5lZGl0KG5ldyB0aGlzLm1ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuYmFzZURhdGEuRW50aXR5Q2xhc3MoZW50aXR5KSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5iYXNlRGF0YS5kZWZhdWx0RWRpdCA9PSAncGFnZScpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdEhhc01hbnlEZWZhdWx0UGFnZShuZXcgdGhpcy5tZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLkVudGl0eUNsYXNzKGVudGl0eSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZvaWQgdGhpcy5lZGl0SGFzTWFueURlZmF1bHREaWFsb2cobmV3IHRoaXMubWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5iYXNlRGF0YS5FbnRpdHlDbGFzcyhlbnRpdHkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHVwZGF0aW5nIHRoZSBwcm92aWRlZCBlbnRpdHkgZnJvbSB0aGUgaGFzIG1hbnkgcHJvcGVydHkgaXMgYWxsb3dlZC5cbiAgICAgKiBAcGFyYW0gZW50aXR5IC0gQSBzaW5nbGUgdmFsdWUgb2YgdGhlIGhhcyBtYW55IHByb3BlcnR5IHRoYXQgdGhlIHVzZXIgd2FudHMgdG8gZWRpdC5cbiAgICAgKiBAcmV0dXJucyBUcnVlIHdoZW4gdGhlIHVzZXIgY2FuIGVkaXQgdGhlIHByb3ZpZGVkIGVudGl0eSBhbmQgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGhhc01hbnlBbGxvd1VwZGF0ZShlbnRpdHk6IEVudGl0eVR5cGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLmluamVjdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLmFsbG93VXBkYXRlKGVudGl0eSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdmlld2luZyB0aGUgcHJvdmlkZWQgZW50aXR5IGZyb20gdGhlIGhhcyBtYW55IHByb3BlcnR5IGlzIGFsbG93ZWQuXG4gICAgICogQHBhcmFtIGVudGl0eSAtIEEgc2luZ2xlIHZhbHVlIG9mIHRoZSBoYXMgbWFueSBwcm9wZXJ0eSB0aGF0IHRoZSB1c2VyIHdhbnRzIHRvIHZpZXcuXG4gICAgICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSB1c2VyIGNhbiB2aWV3IHRoZSBwcm92aWRlZCBlbnRpdHkgYW5kIGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBoYXNNYW55QWxsb3dSZWFkKGVudGl0eTogRW50aXR5VHlwZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuaW5qZWN0b3IsICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuYmFzZURhdGEuYWxsb3dSZWFkKGVudGl0eSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZGVsZXRpbmcgdGhlIHByb3ZpZGVkIGVudGl0eSBmcm9tIHRoZSBoYXMgbWFueSBwcm9wZXJ0eSBpcyBhbGxvd2VkLlxuICAgICAqIEBwYXJhbSBlbnRpdHkgLSBBIHNpbmdsZSB2YWx1ZSBvZiB0aGUgaGFzIG1hbnkgcHJvcGVydHkgdGhhdCB0aGUgdXNlciB3YW50cyB0byBkZWxldGUuXG4gICAgICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSB1c2VyIGNhbiBkZWxldGUgdGhlIHByb3ZpZGVkIGVudGl0eSBhbmQgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGhhc01hbnlBbGxvd0RlbGV0ZShlbnRpdHk6IEVudGl0eVR5cGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLmluamVjdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLmFsbG93RGVsZXRlKGVudGl0eSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBhbiBFZGl0QWN0aW9uIGlzIGRpc2FibGVkIChlLmcuIEJlY2F1c2UgdGhlIGN1cnJlbnQgZW50cnkgZG9lc24ndCBmdWxsZmlsIHRoZSByZXF1aXJlbWVudHMpLlxuICAgICAqIEBwYXJhbSBhY3Rpb24gLSBUaGUgRWRpdEFjdGlvbiB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyBXaGV0aGVyIG9yIG5vdCB0aGUgQWN0aW9uIGNhbiBiZSB1c2VkLlxuICAgICAqL1xuICAgIGhhc01hbnlFZGl0QWN0aW9uRGlzYWJsZWQoYWN0aW9uOiBFZGl0QWN0aW9uSW50ZXJuYWw8RW50aXR5VHlwZT4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLmluamVjdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gIWFjdGlvbi5lbmFibGVkKHRoaXMuaGFzTWFueUVudGl0eVByaW9yQ2hhbmdlcyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1bnMgdGhlIGVkaXQgYWN0aW9uIG9uIHRoZSBlbnRpdHkuXG4gICAgICogQHBhcmFtIGFjdGlvbiAtIFRoZSBhY3Rpb24gdG8gcnVuLlxuICAgICAqL1xuICAgIGFzeW5jIGhhc01hbnlSdW5FZGl0QWN0aW9uKGFjdGlvbjogRWRpdEFjdGlvbkludGVybmFsPEVudGl0eVR5cGU+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHJlcXVpcmVDb25maXJtRGlhbG9nOiBib29sZWFuID0gcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuaW5qZWN0b3IsICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhY3Rpb24ucmVxdWlyZUNvbmZpcm1EaWFsb2codGhpcy5oYXNNYW55RW50aXR5UHJpb3JDaGFuZ2VzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFyZXF1aXJlQ29uZmlybURpYWxvZykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb25maXJtSGFzTWFueVJ1bkVkaXRBY3Rpb24oYWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxOZ3hNYXRFbnRpdHlDb25maXJtRGlhbG9nQ29tcG9uZW50LCBib29sZWFuPiA9IHRoaXMuZGlhbG9nLm9wZW4oTmd4TWF0RW50aXR5Q29uZmlybURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgICAgZGF0YTogYWN0aW9uLmNvbmZpcm1EaWFsb2dEYXRhLFxuICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgICAgIHJlc3RvcmVGb2N1czogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlczogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpKTtcbiAgICAgICAgaWYgKHJlcyA9PSB0cnVlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvbmZpcm1IYXNNYW55UnVuRWRpdEFjdGlvbihhY3Rpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjb25maXJtSGFzTWFueVJ1bkVkaXRBY3Rpb24oYWN0aW9uOiBFZGl0QWN0aW9uSW50ZXJuYWw8RW50aXR5VHlwZT4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuaW5qZWN0b3IsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IGFjdGlvbi5hY3Rpb24odGhpcy5oYXNNYW55RW50aXR5LCB0aGlzLmhhc01hbnlFbnRpdHlQcmlvckNoYW5nZXMpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0hhc01hbnlFbnRpdHkoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlZGl0SGFzTWFueURlZmF1bHRQYWdlKGVudGl0eTogRW50aXR5VHlwZSk6IHZvaWQge1xuICAgICAgICB2b2lkIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnJywgdGhpcy5oYXNNYW55RW50aXR5U2VydmljZS5lZGl0QmFzZVJvdXRlLCBlbnRpdHlbdGhpcy5oYXNNYW55RW50aXR5U2VydmljZS5pZEtleV1dKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGVkaXRIYXNNYW55RGVmYXVsdERpYWxvZyhlbnRpdHk6IEVudGl0eVR5cGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5oYXNNYW55RW50aXR5ID0gTG9kYXNoVXRpbGl0aWVzLmNsb25lRGVlcChlbnRpdHkpO1xuICAgICAgICB0aGlzLmhhc01hbnlFbnRpdHlQcmlvckNoYW5nZXMgPSBMb2Rhc2hVdGlsaXRpZXMuY2xvbmVEZWVwKHRoaXMuaGFzTWFueUVudGl0eSk7XG4gICAgICAgIHRoaXMuaGFzTWFueUVkaXRGb3JtQ29udGV4dCA9IHtcbiAgICAgICAgICAgICRpbXBsaWNpdDoge1xuICAgICAgICAgICAgICAgIGVudGl0eTogdGhpcy5oYXNNYW55RW50aXR5LFxuICAgICAgICAgICAgICAgIGhpZGVPbWl0Rm9yRWRpdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc1JlYWRPbmx5OiAocHJvcGVydHksIGtleSkgPT4gdGhpcy5pc1Byb3BlcnR5UmVhZE9ubHkocHJvcGVydHksIGtleSksXG4gICAgICAgICAgICAgICAgaW5wdXRDaGFuZ2VFdmVudDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2b2lkIHRoaXMuY2hlY2tIYXNNYW55RW50aXR5KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzTWFueUVkaXRGb3JtQ29udGV4dC4kaW1wbGljaXQudGFicyA9IEVudGl0eVV0aWxpdGllcy5nZXRFbnRpdHlUYWJzKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNNYW55RW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmplY3RvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGFiczogRW50aXR5VXRpbGl0aWVzLmdldEVudGl0eVRhYnModGhpcy5oYXNNYW55RW50aXR5LCB0aGlzLmluamVjdG9yLCBmYWxzZSwgdHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGVja0hhc01hbnlFbnRpdHkoKTtcbiAgICAgICAgdGhpcy5lZGl0SGFzTWFueURpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oXG4gICAgICAgICAgICB0aGlzLmVkaXRIYXNNYW55RGlhbG9nLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG1pbldpZHRoOiAnNjAlJyxcbiAgICAgICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHJlc3RvcmVGb2N1czogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcmVzOiBudW1iZXIgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmVkaXRIYXNNYW55RGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkpIGFzIG51bWJlcjtcbiAgICAgICAgaWYgKHJlcyA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3QgZGF0YTogRW50aXR5VHlwZVtdID0gdGhpcy5oYXNNYW55VGFibGVDb250ZXh0LiRpbXBsaWNpdC5kYXRhU291cmNlLmRhdGE7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc3R5bGlzdGljL21heC1sZW5cbiAgICAgICAgICAgIGRhdGFbdGhpcy5oYXNNYW55VGFibGVDb250ZXh0LiRpbXBsaWNpdC5kYXRhU291cmNlLmRhdGEuZmluZEluZGV4KChlKSA9PiBlW3RoaXMuaGFzTWFueUVudGl0eVNlcnZpY2UuaWRLZXldID09PSBlbnRpdHlbdGhpcy5oYXNNYW55RW50aXR5U2VydmljZS5pZEtleV0pXSA9IGVudGl0eTtcbiAgICAgICAgICAgIHRoaXMuaGFzTWFueVRhYmxlQ29udGV4dC4kaW1wbGljaXQuZGF0YVNvdXJjZS5kYXRhID0gZGF0YTtcbiAgICAgICAgICAgIHRoaXMuaGFzTWFueVRhYmxlQ29udGV4dC4kaW1wbGljaXQuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmllcyB0byBzYXZlIHRoZSBjaGFuZ2VzIGFuZCBjbG9zZSB0aGUgZGlhbG9nIGFmdGVyd2FyZHMuXG4gICAgICogQWxzbyBoYW5kbGVzIHRoZSBjb25maXJtYXRpb24gaWYgcmVxdWlyZWQuXG4gICAgICovXG4gICAgYXN5bmMgZGlhbG9nRWRpdEhhc01hbnkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLmludGVybmFsSXNSZWFkT25seSB8fCAhdGhpcy5pc0hhc01hbnlFbnRpdHlWYWxpZCB8fCAhdGhpcy5pc0hhc01hbnlFbnRpdHlEaXJ0eSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5tZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmVkaXREYXRhLmVkaXRSZXF1aXJlc0NvbmZpcm1EaWFsb2cpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZGlhbG9nQ29uZmlybUVkaXRIYXNNYW55KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc3R5bGlzdGljL21heC1sZW5cbiAgICAgICAgY29uc3QgZGlhbG9nRGF0YTogQ29uZmlybURpYWxvZ0RhdGFJbnRlcm5hbCA9IG5ldyBDb25maXJtRGlhbG9nRGF0YUJ1aWxkZXIodGhpcy5nbG9iYWxDb25maWcsIHRoaXMubWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5lZGl0RGF0YS5jb25maXJtRWRpdERpYWxvZ0RhdGEpXG4gICAgICAgICAgICAud2l0aERlZmF1bHQoJ3RleHQnLCB0aGlzLmdsb2JhbENvbmZpZy5jb25maXJtU2F2ZVRleHQpXG4gICAgICAgICAgICAud2l0aERlZmF1bHQoJ2NvbmZpcm1CdXR0b25MYWJlbCcsIHRoaXMuZ2xvYmFsQ29uZmlnLnNhdmVMYWJlbClcbiAgICAgICAgICAgIC53aXRoRGVmYXVsdCgndGl0bGUnLCB0aGlzLmdsb2JhbENvbmZpZy5lZGl0TGFiZWwpXG4gICAgICAgICAgICAuZ2V0UmVzdWx0KCk7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPE5neE1hdEVudGl0eUNvbmZpcm1EaWFsb2dDb21wb25lbnQsIGJvb2xlYW4+ID0gdGhpcy5kaWFsb2cub3BlbihOZ3hNYXRFbnRpdHlDb25maXJtRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgICBkYXRhOiBkaWFsb2dEYXRhLFxuICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgICAgIHJlc3RvcmVGb2N1czogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlczogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpKTtcbiAgICAgICAgaWYgKHJlcyA9PSB0cnVlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmRpYWxvZ0NvbmZpcm1FZGl0SGFzTWFueSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByaXZhdGUgYXN5bmMgZGlhbG9nQ29uZmlybUVkaXRIYXNNYW55KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmhhc01hbnlFbnRpdHlTZXJ2aWNlLnVwZGF0ZSh0aGlzLmhhc01hbnlFbnRpdHksIHRoaXMuaGFzTWFueUVudGl0eVByaW9yQ2hhbmdlcyk7XG4gICAgICAgIHRoaXMuZWRpdEhhc01hbnlEaWFsb2dSZWYuY2xvc2UoMSk7XG4gICAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyaWVzIHRvIGRlbGV0ZSB0aGUgZW50aXR5IGFuZCBjbG9zZSB0aGUgZGlhbG9nIGFmdGVyd2FyZHMuXG4gICAgICogQWxzbyBoYW5kbGVzIHRoZSBjb25maXJtYXRpb24gaWYgcmVxdWlyZWQuXG4gICAgICovXG4gICAgYXN5bmMgZGVsZXRlSGFzTWFueUVudGl0eSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLm1ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuZWRpdERhdGEuZGVsZXRlUmVxdWlyZXNDb25maXJtRGlhbG9nKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvbmZpcm1EZWxldGVIYXNNYW55RW50aXR5KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc3R5bGlzdGljL21heC1sZW5cbiAgICAgICAgY29uc3QgZGlhbG9nRGF0YTogQ29uZmlybURpYWxvZ0RhdGFJbnRlcm5hbCA9IG5ldyBDb25maXJtRGlhbG9nRGF0YUJ1aWxkZXIodGhpcy5nbG9iYWxDb25maWcsIHRoaXMubWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5lZGl0RGF0YS5jb25maXJtRGVsZXRlRGlhbG9nRGF0YSlcbiAgICAgICAgICAgIC53aXRoRGVmYXVsdCgndGV4dCcsIHRoaXMuZ2xvYmFsQ29uZmlnLmNvbmZpcm1EZWxldGVUZXh0KVxuICAgICAgICAgICAgLndpdGhEZWZhdWx0KCd0eXBlJywgJ2RlbGV0ZScpXG4gICAgICAgICAgICAud2l0aERlZmF1bHQoJ2NvbmZpcm1CdXR0b25MYWJlbCcsIHRoaXMuZ2xvYmFsQ29uZmlnLmRlbGV0ZUxhYmVsKVxuICAgICAgICAgICAgLndpdGhEZWZhdWx0KCd0aXRsZScsIHRoaXMuZ2xvYmFsQ29uZmlnLmRlbGV0ZUxhYmVsKVxuICAgICAgICAgICAgLmdldFJlc3VsdCgpO1xuICAgICAgICBjb25zdCBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxOZ3hNYXRFbnRpdHlDb25maXJtRGlhbG9nQ29tcG9uZW50LCBib29sZWFuPiA9IHRoaXMuZGlhbG9nLm9wZW4oTmd4TWF0RW50aXR5Q29uZmlybURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgICAgZGF0YTogZGlhbG9nRGF0YSxcbiAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICAgICAgICByZXN0b3JlRm9jdXM6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXM6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKSk7XG4gICAgICAgIGlmIChyZXMgPT0gdHJ1ZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb25maXJtRGVsZXRlSGFzTWFueUVudGl0eSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjb25maXJtRGVsZXRlSGFzTWFueUVudGl0eSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5oYXNNYW55RW50aXR5U2VydmljZS5kZWxldGUodGhpcy5oYXNNYW55RW50aXR5UHJpb3JDaGFuZ2VzKTtcbiAgICAgICAgdGhpcy5lZGl0SGFzTWFueURpYWxvZ1JlZi5jbG9zZSgyKTtcbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FuY2VscyB0aGUgZWRpdGluZyBvZiB0aGUgaGFzIG1hbnkgZW50aXR5IGFuZCBjbG9zZXMgdGhlIGRpYWxvZy5cbiAgICAgKi9cbiAgICBkaWFsb2dDYW5jZWxFZGl0SGFzTWFueSgpOiB2b2lkIHtcbiAgICAgICAgRW50aXR5VXRpbGl0aWVzLnJlc2V0Q2hhbmdlc09uRW50aXR5KHRoaXMuaGFzTWFueUVudGl0eSwgdGhpcy5oYXNNYW55RW50aXR5UHJpb3JDaGFuZ2VzKTtcbiAgICAgICAgdGhpcy5lZGl0SGFzTWFueURpYWxvZ1JlZi5jbG9zZSgwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IEVudGl0eS4gVGhpcyBlaXRoZXIgY2FsbHMgdGhlIGNyZWF0ZS1NZXRob2QgcHJvdmlkZWQgYnkgdGhlIHVzZXIgb3IgdXNlcyBhIGRlZmF1bHQgY3JlYXRlLWRpYWxvZy5cbiAgICAgKiBAdGhyb3dzIFdoZW4gbm8gRW50aXR5Q2xhc3Mgd2FzIHByb3ZpZGVkLCBhcyBhIG5ldyBjYWxsIGlzIG5lZWRlZCB0byBpbml0aWFsaXplIG1ldGFkYXRhLlxuICAgICAqL1xuICAgIGNyZWF0ZUhhc01hbnlFbnRpdHkoKTogdm9pZCB7XG4gICAgICAgIHZvaWQgcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuaW5qZWN0b3IsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuYmFzZURhdGEuYWxsb3dDcmVhdGUoKSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5tZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLkVudGl0eUNsYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gXCJFbnRpdHlDbGFzc1wiIHNwZWNpZmllZCBmb3IgdGhpcyB0YWJsZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLmNyZWF0ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuYmFzZURhdGEuY3JlYXRlKG5ldyB0aGlzLm1ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuYmFzZURhdGEuRW50aXR5Q2xhc3MoKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5OiBFbnRpdHlUeXBlID0gbmV3IHRoaXMubWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5iYXNlRGF0YS5FbnRpdHlDbGFzcygpO1xuICAgICAgICAgICAgICAgIEVudGl0eVV0aWxpdGllcy5zZXREZWZhdWx0VmFsdWVzKGVudGl0eSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5iYXNlRGF0YS5kZWZhdWx0Q3JlYXRlID09ICdwYWdlJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUhhc01hbnlEZWZhdWx0UGFnZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY3JlYXRlSGFzTWFueURlZmF1bHREaWFsb2coZW50aXR5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVIYXNNYW55RGVmYXVsdFBhZ2UoKTogdm9pZCB7XG4gICAgICAgIHZvaWQgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLmhhc01hbnlFbnRpdHlTZXJ2aWNlLmNyZWF0ZUJhc2VSb3V0ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjcmVhdGVIYXNNYW55RGVmYXVsdERpYWxvZyhlbnRpdHk6IEVudGl0eVR5cGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5oYXNNYW55RW50aXR5ID0gZW50aXR5O1xuICAgICAgICB0aGlzLmhhc01hbnlDcmVhdGVGb3JtQ29udGV4dCA9IHtcbiAgICAgICAgICAgICRpbXBsaWNpdDoge1xuICAgICAgICAgICAgICAgIGVudGl0eTogdGhpcy5oYXNNYW55RW50aXR5LFxuICAgICAgICAgICAgICAgIGhpZGVPbWl0Rm9yQ3JlYXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlucHV0Q2hhbmdlRXZlbnQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdm9pZCB0aGlzLmNoZWNrSXNIYXNNYW55RW50aXR5VmFsaWQoJ2NyZWF0ZScpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc01hbnlDcmVhdGVGb3JtQ29udGV4dC4kaW1wbGljaXQudGFicyA9IEVudGl0eVV0aWxpdGllcy5nZXRFbnRpdHlUYWJzKHRoaXMuaGFzTWFueUVudGl0eSwgdGhpcy5pbmplY3RvciwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0YWJzOiBFbnRpdHlVdGlsaXRpZXMuZ2V0RW50aXR5VGFicyh0aGlzLmhhc01hbnlFbnRpdHksIHRoaXMuaW5qZWN0b3IsIHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tJc0hhc01hbnlFbnRpdHlWYWxpZCgnY3JlYXRlJyk7XG4gICAgICAgIHRoaXMuY3JlYXRlSGFzTWFueURpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUhhc01hbnlEaWFsb2csXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbWluV2lkdGg6ICc2MCUnLFxuICAgICAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICAgICAgICAgICAgcmVzdG9yZUZvY3VzOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgdGhlIGhhcyBtYW55IGVudGl0eSBvdmVyIHRoZSBkaWFsb2cuXG4gICAgICovXG4gICAgYXN5bmMgZGlhbG9nQ3JlYXRlSGFzTWFueSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLmlzSGFzTWFueUVudGl0eVZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLm1ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuY3JlYXRlRGF0YS5jcmVhdGVSZXF1aXJlc0NvbmZpcm1EaWFsb2cpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZGlhbG9nQ29uZmlybUNyZWF0ZUhhc01hbnkoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzdHlsaXN0aWMvbWF4LWxlblxuICAgICAgICBjb25zdCBkaWFsb2dEYXRhOiBDb25maXJtRGlhbG9nRGF0YUludGVybmFsID0gbmV3IENvbmZpcm1EaWFsb2dEYXRhQnVpbGRlcih0aGlzLmdsb2JhbENvbmZpZywgdGhpcy5tZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmNyZWF0ZURhdGEuY29uZmlybUNyZWF0ZURpYWxvZ0RhdGEpXG4gICAgICAgICAgICAud2l0aERlZmF1bHQoJ3RleHQnLCB0aGlzLmdsb2JhbENvbmZpZy5jb25maXJtQ3JlYXRlVGV4dClcbiAgICAgICAgICAgIC53aXRoRGVmYXVsdCgnY29uZmlybUJ1dHRvbkxhYmVsJywgdGhpcy5nbG9iYWxDb25maWcuY3JlYXRlTGFiZWwpXG4gICAgICAgICAgICAud2l0aERlZmF1bHQoJ3RpdGxlJywgdGhpcy5nbG9iYWxDb25maWcuY3JlYXRlTGFiZWwpXG4gICAgICAgICAgICAuZ2V0UmVzdWx0KCk7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPE5neE1hdEVudGl0eUNvbmZpcm1EaWFsb2dDb21wb25lbnQsIGJvb2xlYW4+ID0gdGhpcy5kaWFsb2cub3BlbihOZ3hNYXRFbnRpdHlDb25maXJtRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgICBkYXRhOiBkaWFsb2dEYXRhLFxuICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgICAgIHJlc3RvcmVGb2N1czogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlczogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpKTtcbiAgICAgICAgaWYgKHJlcyA9PSB0cnVlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmRpYWxvZ0NvbmZpcm1DcmVhdGVIYXNNYW55KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJpdmF0ZSBhc3luYyBkaWFsb2dDb25maXJtQ3JlYXRlSGFzTWFueSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5oYXNNYW55RW50aXR5U2VydmljZS5jcmVhdGUodGhpcy5oYXNNYW55RW50aXR5LCB0aGlzLmhhc01hbnlDcmVhdGVCYXNlVXJsKTtcbiAgICAgICAgdGhpcy5jcmVhdGVIYXNNYW55RGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbmNlbHMgdGhlIGNyZWF0aW5nIG9mIHRoZSBoYXMgbWFueSBlbnRpdHkgYW5kIGNsb3NlcyB0aGUgZGlhbG9nLlxuICAgICAqL1xuICAgIGRpYWxvZ0NhbmNlbENyZWF0ZUhhc01hbnkoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3JlYXRlSGFzTWFueURpYWxvZ1JlZi5jbG9zZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1bnMgdGhlIFRhYmxlQWN0aW9uIGZvciBhbGwgc2VsZWN0ZWQgZW50cmllcy5cbiAgICAgKiBBbHNvIGhhbmRsZXMgY29uZmlybWF0aW9uIHdpdGggYW4gYWRkaXRpb25hbCBkaWFsI29nIGlmIGNvbmZpZ3VyZWQuXG4gICAgICogQHBhcmFtIGFjdGlvbiAtIFRoZSBUYWJsZUFjdGlvbiB0byBydW4uXG4gICAgICovXG4gICAgYXN5bmMgcnVuSGFzTWFueVRhYmxlQWN0aW9uKGFjdGlvbjogVGFibGVBY3Rpb25JbnRlcm5hbDxFbnRpdHlUeXBlPik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCByZXF1aXJlQ29uZmlybURpYWxvZzogYm9vbGVhbiA9IHJ1bkluSW5qZWN0aW9uQ29udGV4dChcbiAgICAgICAgICAgIHRoaXMuaW5qZWN0b3IsXG4gICAgICAgICAgICAoKSA9PiBhY3Rpb24ucmVxdWlyZUNvbmZpcm1EaWFsb2codGhpcy5oYXNNYW55VGFibGVDb250ZXh0LiRpbXBsaWNpdC5zZWxlY3Rpb24uc2VsZWN0ZWQpXG4gICAgICAgICk7XG4gICAgICAgIGlmICghcmVxdWlyZUNvbmZpcm1EaWFsb2cpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY29uZmlybVJ1bkhhc01hbnlUYWJsZUFjdGlvbihhY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVmYXVsdFRleHQ6IHN0cmluZ1tdID0gYWN0aW9uLnR5cGUgPT09ICdtdWx0aS1zZWxlY3QnXG4gICAgICAgICAgICA/IHRoaXMuZ2xvYmFsQ29uZmlnLmNvbmZpcm1NdWx0aVNlbGVjdEFjdGlvblRleHQodGhpcy5oYXNNYW55VGFibGVDb250ZXh0LiRpbXBsaWNpdC5zZWxlY3Rpb24uc2VsZWN0ZWQpXG4gICAgICAgICAgICA6IHRoaXMuZ2xvYmFsQ29uZmlnLmNvbmZpcm1CYXNlQWN0aW9uVGV4dDtcbiAgICAgICAgY29uc3QgZGlhbG9nRGF0YTogQ29uZmlybURpYWxvZ0RhdGFJbnRlcm5hbCA9IG5ldyBDb25maXJtRGlhbG9nRGF0YUJ1aWxkZXIodGhpcy5nbG9iYWxDb25maWcsIGFjdGlvbi5jb25maXJtRGlhbG9nRGF0YSlcbiAgICAgICAgICAgIC53aXRoRGVmYXVsdCgndGV4dCcsIGRlZmF1bHRUZXh0KVxuICAgICAgICAgICAgLndpdGhEZWZhdWx0KCd0aXRsZScsIGFjdGlvbi5kaXNwbGF5TmFtZSlcbiAgICAgICAgICAgIC5nZXRSZXN1bHQoKTtcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8Tmd4TWF0RW50aXR5Q29uZmlybURpYWxvZ0NvbXBvbmVudCwgYm9vbGVhbj4gPSB0aGlzLmRpYWxvZy5vcGVuKE5neE1hdEVudGl0eUNvbmZpcm1EaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICAgIGRhdGE6IGRpYWxvZ0RhdGEsXG4gICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgICAgICAgICAgcmVzdG9yZUZvY3VzOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzOiBib29sZWFuIHwgdW5kZWZpbmVkID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkpO1xuICAgICAgICBpZiAocmVzID09IHRydWUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY29uZmlybVJ1bkhhc01hbnlUYWJsZUFjdGlvbihhY3Rpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjb25maXJtUnVuSGFzTWFueVRhYmxlQWN0aW9uKGFjdGlvbjogVGFibGVBY3Rpb25JbnRlcm5hbDxFbnRpdHlUeXBlPik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5pbmplY3RvciwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgYWN0aW9uLmFjdGlvbih0aGlzLmhhc01hbnlUYWJsZUNvbnRleHQuJGltcGxpY2l0LnNlbGVjdGlvbi5zZWxlY3RlZCk7XG4gICAgICAgICAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGFuIFRhYmxlQWN0aW9uIGlzIGRpc2FibGVkIChlLmcuIEJlY2F1c2Ugbm8gZW50cmllcyBoYXZlIGJlZW4gc2VsZWN0ZWQpLlxuICAgICAqIEBwYXJhbSBhY3Rpb24gLSBUaGUgVGFibGVBY3Rpb24gdG8gY2hlY2suXG4gICAgICogQHJldHVybnMgV2hldGhlciBvciBub3QgdGhlIEFjdGlvbiBjYW4gYmUgdXNlZC5cbiAgICAgKi9cbiAgICBoYXNNYW55VGFibGVBY3Rpb25EaXNhYmxlZChhY3Rpb246IFRhYmxlQWN0aW9uSW50ZXJuYWw8RW50aXR5VHlwZT4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLmluamVjdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gIWFjdGlvbi5lbmFibGVkKHRoaXMuaGFzTWFueVRhYmxlQ29udGV4dC4kaW1wbGljaXQuc2VsZWN0aW9uLnNlbGVjdGVkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgc2VhcmNoIGlucHV0IHRvIGZpbHRlciB0aGUgdGFibGUgZW50cmllcy5cbiAgICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUga2V5dXAtZXZlbnQgd2hpY2ggY29udGFpbnMgdGhlIHNlYXJjaC1zdHJpbmcgb2YgdGhlIHVzZXIuXG4gICAgICovXG4gICAgYXBwbHlIYXNNYW55RmlsdGVyKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaWx0ZXJWYWx1ZTogc3RyaW5nID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgICAgICAgdGhpcy5oYXNNYW55VGFibGVDb250ZXh0LiRpbXBsaWNpdC5kYXRhU291cmNlLmZpbHRlciA9IGZpbHRlclZhbHVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgZW50aXR5IGlzIHZhbGlkIGZvciB1cGRhdGluZyBhbmQgaWYgaXQgaXMgZGlydHkuXG4gICAgICovXG4gICAgYXN5bmMgY2hlY2tIYXNNYW55RW50aXR5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmNoZWNrSXNIYXNNYW55RW50aXR5VmFsaWQoJ3VwZGF0ZScpO1xuICAgICAgICB0aGlzLmhhc01hbnlDaGFuZ2VzID0gYXdhaXQgRW50aXR5VXRpbGl0aWVzLmdldERpZmZlcmVuY2VzQmV0d2VlbkVudGl0aWVzKFxuICAgICAgICAgICAgdGhpcy5oYXNNYW55RW50aXR5LFxuICAgICAgICAgICAgdGhpcy5oYXNNYW55RW50aXR5UHJpb3JDaGFuZ2VzLFxuICAgICAgICAgICAgdGhpcy5odHRwLFxuICAgICAgICAgICAgdGhpcy5pbmplY3RvclxuICAgICAgICApO1xuICAgICAgICBpZiAoIXRoaXMuaGFzTWFueVZhbGlkYXRpb25FcnJvcnMubGVuZ3RoICYmIHRoaXMuaGFzTWFueUNoYW5nZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmhhc01hbnlUb29sdGlwQ29udGVudCA9IHJ1bkluSW5qZWN0aW9uQ29udGV4dChcbiAgICAgICAgICAgICAgICB0aGlzLmluamVjdG9yLFxuICAgICAgICAgICAgICAgICgpID0+IGdldENoYW5nZXNUb29sdGlwQ29udGVudCh0aGlzLmhhc01hbnlDaGFuZ2VzKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzSGFzTWFueUVudGl0eURpcnR5ID0gISF0aGlzLmhhc01hbnlDaGFuZ2VzLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgdGhlIGVudGl0eSBpcyB2YWxpZC5cbiAgICAgKiBAcGFyYW0gb21pdCAtIFdoZXRoZXIgdmFsdWVzIG9taXR0ZWQgZm9yIGNyZWF0ZSBvciB1cGRhdGUgc2hvdWxkIGJlIGxlZnQgb3V0LlxuICAgICAqL1xuICAgIGFzeW5jIGNoZWNrSXNIYXNNYW55RW50aXR5VmFsaWQob21pdDogJ2NyZWF0ZScgfCAndXBkYXRlJyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmhhc01hbnlWYWxpZGF0aW9uRXJyb3JzID0gYXdhaXQgVmFsaWRhdGlvblV0aWxpdGllcy5nZXRFbnRpdHlWYWxpZGF0aW9uRXJyb3JzKHRoaXMuaGFzTWFueUVudGl0eSwgdGhpcy5pbmplY3Rvciwgb21pdCk7XG4gICAgICAgIGlmICh0aGlzLmhhc01hbnlWYWxpZGF0aW9uRXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5oYXNNYW55VG9vbHRpcENvbnRlbnQgPSBydW5JbkluamVjdGlvbkNvbnRleHQoXG4gICAgICAgICAgICAgICAgdGhpcy5pbmplY3RvcixcbiAgICAgICAgICAgICAgICAoKSA9PiBnZXRWYWxpZGF0aW9uRXJyb3JzVG9vbHRpcENvbnRlbnQodGhpcy5oYXNNYW55VmFsaWRhdGlvbkVycm9ycylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0hhc01hbnlFbnRpdHlWYWxpZCA9IHRoaXMuaGFzTWFueVZhbGlkYXRpb25FcnJvcnMubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBhcnJheSBpdGVtIGlzIHZhbGlkIGFuZCBpZiB0aGUgYXJyYXkgaXRlbSBpcyBkaXJ0eS5cbiAgICAgKi9cbiAgICBhc3luYyBjaGVja0FycmF5SXRlbSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGVja0lzQXJyYXlJdGVtVmFsaWQoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGVja0lzQXJyYXlJdGVtRGlydHkoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgdGhlIGFycmF5IGl0ZW0gaXMgZGlydHkuXG4gICAgICovXG4gICAgYXN5bmMgY2hlY2tJc0FycmF5SXRlbURpcnR5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmFycmF5SXRlbUNoYW5nZXMgPSBhd2FpdCBFbnRpdHlVdGlsaXRpZXMuZ2V0RGlmZmVyZW5jZXNCZXR3ZWVuRW50aXRpZXMoXG4gICAgICAgICAgICB0aGlzLmFycmF5SXRlbSxcbiAgICAgICAgICAgIHRoaXMuYXJyYXlJdGVtUHJpb3JDaGFuZ2VzLFxuICAgICAgICAgICAgdGhpcy5odHRwLFxuICAgICAgICAgICAgdGhpcy5pbmplY3RvclxuICAgICAgICApO1xuICAgICAgICBpZiAoIXRoaXMuYXJyYXlJdGVtVmFsaWRhdGlvbkVycm9ycy5sZW5ndGggJiYgdGhpcy5hcnJheUl0ZW1DaGFuZ2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5hcnJheUl0ZW1Ub29sdGlwQ29udGVudCA9IHJ1bkluSW5qZWN0aW9uQ29udGV4dChcbiAgICAgICAgICAgICAgICB0aGlzLmluamVjdG9yLFxuICAgICAgICAgICAgICAgICgpID0+IGdldENoYW5nZXNUb29sdGlwQ29udGVudCh0aGlzLmFycmF5SXRlbUNoYW5nZXMpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNBcnJheUl0ZW1EaXJ0eSA9ICEhdGhpcy5hcnJheUl0ZW1DaGFuZ2VzLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgdGhlIGFycmF5SXRlbSBpcyB2YWxpZC5cbiAgICAgKi9cbiAgICBhc3luYyBjaGVja0lzQXJyYXlJdGVtVmFsaWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuYXJyYXlJdGVtVmFsaWRhdGlvbkVycm9ycyA9IGF3YWl0IFZhbGlkYXRpb25VdGlsaXRpZXMuZ2V0RW50aXR5VmFsaWRhdGlvbkVycm9ycyh0aGlzLmFycmF5SXRlbSwgdGhpcy5pbmplY3RvciwgJ2NyZWF0ZScpO1xuICAgICAgICBpZiAodGhpcy5hcnJheUl0ZW1WYWxpZGF0aW9uRXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5hcnJheUl0ZW1Ub29sdGlwQ29udGVudCA9IHJ1bkluSW5qZWN0aW9uQ29udGV4dChcbiAgICAgICAgICAgICAgICB0aGlzLmluamVjdG9yLFxuICAgICAgICAgICAgICAgICgpID0+IGdldFZhbGlkYXRpb25FcnJvcnNUb29sdGlwQ29udGVudCh0aGlzLmFycmF5SXRlbVZhbGlkYXRpb25FcnJvcnMpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNBcnJheUl0ZW1WYWxpZCA9IHRoaXMuYXJyYXlJdGVtVmFsaWRhdGlvbkVycm9ycy5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW1pdHMgdGhhdCBhIHRoZSB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkLlxuICAgICAqL1xuICAgIGVtaXRDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5wdXRDaGFuZ2VFdmVudC5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZXMgdG8gYWRkIGFuIGl0ZW0gdG8gdGhlIGVudGl0eSBhcnJheS5cbiAgICAgKiBEb2VzIHRoaXMgZWl0aGVyIGlubGluZSBpZiB0aGUgXCJjcmVhdGVJbmxpbmVcIi1tZXRhZGF0YSBpcyBzZXQgdG8gdHJ1ZVxuICAgICAqIG9yIGluIGEgc2VwYXJhdGUgZGlhbG9nIGlmIGl0IGlzIHNldCB0byBmYWxzZS5cbiAgICAgKi9cbiAgICBhc3luYyBhZGRFbnRpdHkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tJc0FycmF5SXRlbVZhbGlkKCk7XG4gICAgICAgIGlmICghdGhpcy5tZXRhZGF0YUVudGl0eUFycmF5LmNyZWF0ZUlubGluZSkge1xuICAgICAgICAgICAgdGhpcy5hcnJheUl0ZW0gPSBuZXcgdGhpcy5tZXRhZGF0YUVudGl0eUFycmF5LkVudGl0eUNsYXNzKCk7XG4gICAgICAgICAgICB0aGlzLmFycmF5SXRlbVByaW9yQ2hhbmdlcyA9IExvZGFzaFV0aWxpdGllcy5jbG9uZURlZXAodGhpcy5hcnJheUl0ZW0pO1xuICAgICAgICAgICAgRW50aXR5VXRpbGl0aWVzLnNldERlZmF1bHRWYWx1ZXModGhpcy5hcnJheUl0ZW0pO1xuXG4gICAgICAgICAgICB0aGlzLmFkZEFycmF5SXRlbUZvcm1Db250ZXh0ID0ge1xuICAgICAgICAgICAgICAgICRpbXBsaWNpdDoge1xuICAgICAgICAgICAgICAgICAgICBlbnRpdHk6IHRoaXMuYXJyYXlJdGVtLFxuICAgICAgICAgICAgICAgICAgICB0YWJzOiBFbnRpdHlVdGlsaXRpZXMuZ2V0RW50aXR5VGFicyh0aGlzLmFycmF5SXRlbSwgdGhpcy5pbmplY3RvciwgdHJ1ZSksXG4gICAgICAgICAgICAgICAgICAgIGlucHV0Q2hhbmdlRXZlbnQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgdGhpcy5jaGVja0lzQXJyYXlJdGVtVmFsaWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQXJyYXlJdGVtRm9ybUNvbnRleHQuJGltcGxpY2l0LnRhYnMgPSBFbnRpdHlVdGlsaXRpZXMuZ2V0RW50aXR5VGFicyh0aGlzLmFycmF5SXRlbSwgdGhpcy5pbmplY3RvciwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGhpZGVPbWl0Rm9yQ3JlYXRlOiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuYWRkQXJyYXlJdGVtRGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEFycmF5SXRlbURpYWxvZyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiAnNjAlJyxcbiAgICAgICAgICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgcmVzdG9yZUZvY3VzOiBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLm1ldGFkYXRhRW50aXR5QXJyYXkuYWxsb3dEdXBsaWNhdGVzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHYgb2YgdGhpcy5lbnRpdHlBcnJheVRhYmxlQ29udGV4dC4kaW1wbGljaXQuZGF0YVNvdXJjZS5kYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGF3YWl0IEVudGl0eVV0aWxpdGllcy5pc0VxdWFsKHRoaXMuYXJyYXlJdGVtLCB2LCB0aGlzLm1ldGFkYXRhLCB0aGlzLm1ldGFkYXRhRW50aXR5QXJyYXkuaXRlbVR5cGUsIHRoaXMuaHR0cCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2cub3BlbihOZ3hNYXRFbnRpdHlDb25maXJtRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLm1ldGFkYXRhRW50aXR5QXJyYXkuZHVwbGljYXRlc0Vycm9yRGlhbG9nLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RvcmVGb2N1czogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAodGhpcy5lbnRpdHlbdGhpcy5wcm9wZXJ0eUtleV0gYXMgRW50aXR5VHlwZVtdKS5wdXNoKExvZGFzaFV0aWxpdGllcy5jbG9uZURlZXAodGhpcy5hcnJheUl0ZW0pKTtcbiAgICAgICAgdGhpcy5lbnRpdHlBcnJheVRhYmxlQ29udGV4dC4kaW1wbGljaXQuZGF0YVNvdXJjZS5kYXRhID0gKHRoaXMuZW50aXR5W3RoaXMucHJvcGVydHlLZXldIGFzIEVudGl0eVR5cGVbXSk7XG5cbiAgICAgICAgdGhpcy5hZGRBcnJheUl0ZW1Gb3JtQ29udGV4dCA9IHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIFRlbXBsYXRlQ29udGV4dDxGb3JtQ29udGV4dDxFbnRpdHlUeXBlPj47XG4gICAgICAgIHRoaXMuYXJyYXlJdGVtID0gbmV3IHRoaXMubWV0YWRhdGFFbnRpdHlBcnJheS5FbnRpdHlDbGFzcygpO1xuICAgICAgICB0aGlzLmFycmF5SXRlbVByaW9yQ2hhbmdlcyA9IExvZGFzaFV0aWxpdGllcy5jbG9uZURlZXAodGhpcy5hcnJheUl0ZW0pO1xuICAgICAgICBFbnRpdHlVdGlsaXRpZXMuc2V0RGVmYXVsdFZhbHVlcyh0aGlzLmFycmF5SXRlbSk7XG5cbiAgICAgICAgc2V0VGltZW91dChcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB0eXBlc2NyaXB0L25vLW1pc3VzZWQtcHJvbWlzZXNcbiAgICAgICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEFycmF5SXRlbUZvcm1Db250ZXh0ID0ge1xuICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogdGhpcy5hcnJheUl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJzOiBFbnRpdHlVdGlsaXRpZXMuZ2V0RW50aXR5VGFicyh0aGlzLmFycmF5SXRlbSwgdGhpcy5pbmplY3RvciwgdHJ1ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dENoYW5nZUV2ZW50OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCB0aGlzLmNoZWNrSXNBcnJheUl0ZW1WYWxpZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzdHlsaXN0aWMvbWF4LWxlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQXJyYXlJdGVtRm9ybUNvbnRleHQuJGltcGxpY2l0LnRhYnMgPSBFbnRpdHlVdGlsaXRpZXMuZ2V0RW50aXR5VGFicyh0aGlzLmFycmF5SXRlbSwgdGhpcy5pbmplY3RvciwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZU9taXRGb3JDcmVhdGU6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrSXNBcnJheUl0ZW1WYWxpZCgpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMTUwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyB0aGUgYXJyYXkgaXRlbSBkZWZpbmVkIGluIHRoZSBkaWFsb2cuXG4gICAgICovXG4gICAgYXN5bmMgYWRkQXJyYXlJdGVtKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXRoaXMuaXNBcnJheUl0ZW1WYWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgICh0aGlzLmVudGl0eVt0aGlzLnByb3BlcnR5S2V5XSBhcyBFbnRpdHlUeXBlW10pLnB1c2goTG9kYXNoVXRpbGl0aWVzLmNsb25lRGVlcCh0aGlzLmFycmF5SXRlbSkpO1xuICAgICAgICB0aGlzLmVudGl0eUFycmF5VGFibGVDb250ZXh0LiRpbXBsaWNpdC5kYXRhU291cmNlLmRhdGEgPSAodGhpcy5lbnRpdHlbdGhpcy5wcm9wZXJ0eUtleV0gYXMgRW50aXR5VHlwZVtdKTtcblxuICAgICAgICBhd2FpdCB0aGlzLmNsb3NlQWRkQXJyYXlJdGVtRGlhbG9nKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FuY2VscyBhZGRpbmcgdGhlIGFycmF5IGl0ZW0gZGVmaW5lZCBpbiB0aGUgZGlhbG9nLlxuICAgICAqL1xuICAgIGFzeW5jIGNsb3NlQWRkQXJyYXlJdGVtRGlhbG9nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmFkZEFycmF5SXRlbURpYWxvZ1JlZi5jbG9zZSgpO1xuICAgICAgICBFbnRpdHlVdGlsaXRpZXMucmVzZXRDaGFuZ2VzT25FbnRpdHkodGhpcy5hcnJheUl0ZW0sIHRoaXMuYXJyYXlJdGVtUHJpb3JDaGFuZ2VzKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGVja0lzQXJyYXlJdGVtVmFsaWQoKTtcbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRWRpdHMgYW4gZW50aXR5IGFycmF5IGl0ZW0uXG4gICAgICogQHBhcmFtIGVudGl0eSAtIFRoZSBlbnRpdHkgdGhhdCBoYXMgYmVlbiBjbGlja2VkLlxuICAgICAqIEBwYXJhbSBkQ29sIC0gVGhlIGRpc3BsYXkgY29sdW1uIHRoYXQgd2FzIGNsaWNrZWQgb24uXG4gICAgICovXG4gICAgYXN5bmMgZWRpdEFycmF5SXRlbShlbnRpdHk6IEVudGl0eVR5cGUsIGRDb2w6IERpc3BsYXlDb2x1bW48RW50aXR5VHlwZT4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKGRDb2wuZGlzYWJsZUNsaWNrID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbmRleE9mRWRpdGVkQXJyYXlJdGVtID0gdGhpcy5lbnRpdHlBcnJheVRhYmxlQ29udGV4dC4kaW1wbGljaXQuZGF0YVNvdXJjZS5kYXRhLmluZGV4T2YoZW50aXR5KTtcbiAgICAgICAgdGhpcy5hcnJheUl0ZW0gPSBuZXcgdGhpcy5tZXRhZGF0YUVudGl0eUFycmF5LkVudGl0eUNsYXNzKGVudGl0eSk7XG4gICAgICAgIHRoaXMuYXJyYXlJdGVtUHJpb3JDaGFuZ2VzID0gTG9kYXNoVXRpbGl0aWVzLmNsb25lRGVlcCh0aGlzLmFycmF5SXRlbSk7XG5cbiAgICAgICAgdGhpcy5lZGl0QXJyYXlJdGVtRm9ybUNvbnRleHQgPSB7XG4gICAgICAgICAgICAkaW1wbGljaXQ6IHtcbiAgICAgICAgICAgICAgICBlbnRpdHk6IHRoaXMuYXJyYXlJdGVtLFxuICAgICAgICAgICAgICAgIHRhYnM6IEVudGl0eVV0aWxpdGllcy5nZXRFbnRpdHlUYWJzKHRoaXMuYXJyYXlJdGVtLCB0aGlzLmluamVjdG9yLCB0cnVlKSxcbiAgICAgICAgICAgICAgICBpc1JlYWRPbmx5OiAocHJvcGVydHksIGtleSkgPT4gdGhpcy5pc1Byb3BlcnR5UmVhZE9ubHkocHJvcGVydHksIGtleSksXG4gICAgICAgICAgICAgICAgaW5wdXRDaGFuZ2VFdmVudDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2b2lkIHRoaXMuY2hlY2tBcnJheUl0ZW0oKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0QXJyYXlJdGVtRm9ybUNvbnRleHQuJGltcGxpY2l0LnRhYnMgPSBFbnRpdHlVdGlsaXRpZXMuZ2V0RW50aXR5VGFicyh0aGlzLmFycmF5SXRlbSwgdGhpcy5pbmplY3RvciwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBoaWRlT21pdEZvckVkaXQ6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBhd2FpdCB0aGlzLmNoZWNrQXJyYXlJdGVtKCk7XG5cbiAgICAgICAgdGhpcy5lZGl0QXJyYXlJdGVtRGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihcbiAgICAgICAgICAgIHRoaXMuZWRpdEFycmF5SXRlbURpYWxvZyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtaW5XaWR0aDogJzYwJScsXG4gICAgICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICByZXN0b3JlRm9jdXM6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2F2ZXMgY2hhbmdlcyBvbiB0aGUgYXJyYXkgaXRlbSBpbiB0aGUgZGlhbG9nLlxuICAgICAqL1xuICAgIHNhdmVBcnJheUl0ZW0oKTogdm9pZCB7XG4gICAgICAgICh0aGlzLmVudGl0eVt0aGlzLnByb3BlcnR5S2V5XSBhcyBFbnRpdHlUeXBlW10pW3RoaXMuaW5kZXhPZkVkaXRlZEFycmF5SXRlbV0gPSBMb2Rhc2hVdGlsaXRpZXMuY2xvbmVEZWVwKHRoaXMuYXJyYXlJdGVtKTtcbiAgICAgICAgdGhpcy5lbnRpdHlBcnJheVRhYmxlQ29udGV4dC4kaW1wbGljaXQuZGF0YVNvdXJjZS5kYXRhID0gKHRoaXMuZW50aXR5W3RoaXMucHJvcGVydHlLZXldIGFzIEVudGl0eVR5cGVbXSk7XG5cbiAgICAgICAgdm9pZCB0aGlzLmNsb3NlRWRpdEFycmF5SXRlbURpYWxvZygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb3NlcyB0aGUgZWRpdCBhcnJheSBpdGVtIGRpYWxvZyBhbmQgcmVzZXRzIGNoYW5nZXMuXG4gICAgICovXG4gICAgYXN5bmMgY2xvc2VFZGl0QXJyYXlJdGVtRGlhbG9nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmVkaXRBcnJheUl0ZW1EaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5hcnJheUl0ZW0gPSBuZXcgdGhpcy5tZXRhZGF0YUVudGl0eUFycmF5LkVudGl0eUNsYXNzKCk7XG4gICAgICAgIHRoaXMuYXJyYXlJdGVtUHJpb3JDaGFuZ2VzID0gTG9kYXNoVXRpbGl0aWVzLmNsb25lRGVlcCh0aGlzLmFycmF5SXRlbSk7XG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tBcnJheUl0ZW0oKTtcbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwgc2VsZWN0ZWQgZW50cmllcyBmcm9tIHRoZSBlbnRpdHkgYXJyYXkuXG4gICAgICovXG4gICAgcmVtb3ZlRnJvbUVudGl0eUFycmF5KCk6IHZvaWQge1xuICAgICAgICBTZWxlY3Rpb25VdGlsaXRpZXMucmVtb3ZlKFxuICAgICAgICAgICAgdGhpcy5lbnRpdHlBcnJheVRhYmxlQ29udGV4dC4kaW1wbGljaXQuc2VsZWN0aW9uLFxuICAgICAgICAgICAgdGhpcy5lbnRpdHlbdGhpcy5wcm9wZXJ0eUtleV0gYXMgRW50aXR5VHlwZVtdLFxuICAgICAgICAgICAgdGhpcy5lbnRpdHlBcnJheVRhYmxlQ29udGV4dC4kaW1wbGljaXQuZGF0YVNvdXJjZVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICB9XG59IiwiPCEtLSBlc2xpbnQtZGlzYWJsZSBhbmd1bGFyL25vLWNhbGwtZXhwcmVzc2lvbiAtLT5cbkBpZighKGhpZGVPbWl0Rm9yQ3JlYXRlICYmIG1ldGFkYXRhLm9taXRGb3JDcmVhdGUpICYmICEoaGlkZU9taXRGb3JFZGl0ICYmIG1ldGFkYXRhLm9taXRGb3JVcGRhdGUpKSB7XG4gICAgQHN3aXRjaCAodHlwZSkge1xuICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tU3RyaW5ncy0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuICAgICAgICBAY2FzZSAoRGVjb3JhdG9yVHlwZXMuU1RSSU5HKSB7XG4gICAgICAgICAgICA8c3RyaW5nLWlucHV0XG4gICAgICAgICAgICAgICAgW2VudGl0eV09XCJlbnRpdHlcIlxuICAgICAgICAgICAgICAgIFtrZXldPVwicHJvcGVydHlLZXlcIlxuICAgICAgICAgICAgICAgIFtnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXT1cImludGVybmFsR2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgW2lzUmVhZE9ubHldPVwiaW50ZXJuYWxJc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2VFdmVudCk9XCJlbWl0Q2hhbmdlKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9zdHJpbmctaW5wdXQ+XG4gICAgICAgIH1cbiAgICAgICAgQGNhc2UgKERlY29yYXRvclR5cGVzLlNUUklOR19URVhUQk9YKSB7XG4gICAgICAgICAgICA8c3RyaW5nLXRleHRib3gtaW5wdXRcbiAgICAgICAgICAgICAgICBbZW50aXR5XT1cImVudGl0eVwiXG4gICAgICAgICAgICAgICAgW2tleV09XCJwcm9wZXJ0eUtleVwiXG4gICAgICAgICAgICAgICAgW2dldFZhbGlkYXRpb25FcnJvck1lc3NhZ2VdPVwiaW50ZXJuYWxHZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICBbaXNSZWFkT25seV09XCJpbnRlcm5hbElzUmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgIChpbnB1dENoYW5nZUV2ZW50KT1cImVtaXRDaGFuZ2UoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3N0cmluZy10ZXh0Ym94LWlucHV0PlxuICAgICAgICB9XG4gICAgICAgIEBjYXNlIChEZWNvcmF0b3JUeXBlcy5TVFJJTkdfQVVUT0NPTVBMRVRFKSB7XG4gICAgICAgICAgICA8c3RyaW5nLWF1dG9jb21wbGV0ZS1pbnB1dFxuICAgICAgICAgICAgICAgIFtlbnRpdHldPVwiZW50aXR5XCJcbiAgICAgICAgICAgICAgICBba2V5XT1cInByb3BlcnR5S2V5XCJcbiAgICAgICAgICAgICAgICBbZ2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZV09XCJpbnRlcm5hbEdldFZhbGlkYXRpb25FcnJvck1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgIFtpc1JlYWRPbmx5XT1cImludGVybmFsSXNSZWFkT25seVwiXG4gICAgICAgICAgICAgICAgKGlucHV0Q2hhbmdlRXZlbnQpPVwiZW1pdENoYW5nZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvc3RyaW5nLWF1dG9jb21wbGV0ZS1pbnB1dD5cbiAgICAgICAgfVxuICAgICAgICBAY2FzZSAoRGVjb3JhdG9yVHlwZXMuU1RSSU5HX0RST1BET1dOKSB7XG4gICAgICAgICAgICA8c3RyaW5nLWRyb3Bkb3duLWlucHV0XG4gICAgICAgICAgICAgICAgW2VudGl0eV09XCJlbnRpdHlcIlxuICAgICAgICAgICAgICAgIFtrZXldPVwicHJvcGVydHlLZXlcIlxuICAgICAgICAgICAgICAgIFtnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXT1cImludGVybmFsR2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgW2lzUmVhZE9ubHldPVwiaW50ZXJuYWxJc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2VFdmVudCk9XCJlbWl0Q2hhbmdlKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9zdHJpbmctZHJvcGRvd24taW5wdXQ+XG4gICAgICAgIH1cbiAgICAgICAgQGNhc2UgKERlY29yYXRvclR5cGVzLlNUUklOR19QQVNTV09SRCkge1xuICAgICAgICAgICAgPHN0cmluZy1wYXNzd29yZC1pbnB1dFxuICAgICAgICAgICAgICAgIFtlbnRpdHldPVwiZW50aXR5XCJcbiAgICAgICAgICAgICAgICBba2V5XT1cInByb3BlcnR5S2V5XCJcbiAgICAgICAgICAgICAgICBbZ2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZV09XCJpbnRlcm5hbEdldFZhbGlkYXRpb25FcnJvck1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgIFtpc1JlYWRPbmx5XT1cImludGVybmFsSXNSZWFkT25seVwiXG4gICAgICAgICAgICAgICAgKGlucHV0Q2hhbmdlRXZlbnQpPVwiZW1pdENoYW5nZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvc3RyaW5nLXBhc3N3b3JkLWlucHV0PlxuICAgICAgICB9XG4gICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS1Cb29sZWFucy0tLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICAgIEBjYXNlIChEZWNvcmF0b3JUeXBlcy5CT09MRUFOX0NIRUNLQk9YKSB7XG4gICAgICAgICAgICA8Ym9vbGVhbi1jaGVja2JveC1pbnB1dFxuICAgICAgICAgICAgICAgIFtlbnRpdHldPVwiZW50aXR5XCJcbiAgICAgICAgICAgICAgICBba2V5XT1cInByb3BlcnR5S2V5XCJcbiAgICAgICAgICAgICAgICBbZ2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZV09XCJpbnRlcm5hbEdldFZhbGlkYXRpb25FcnJvck1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgIFtpc1JlYWRPbmx5XT1cImludGVybmFsSXNSZWFkT25seVwiXG4gICAgICAgICAgICAgICAgKGlucHV0Q2hhbmdlRXZlbnQpPVwiZW1pdENoYW5nZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvYm9vbGVhbi1jaGVja2JveC1pbnB1dD5cbiAgICAgICAgfVxuICAgICAgICBAY2FzZSAoRGVjb3JhdG9yVHlwZXMuQk9PTEVBTl9UT0dHTEUpIHtcbiAgICAgICAgICAgIDxib29sZWFuLXRvZ2dsZS1pbnB1dFxuICAgICAgICAgICAgICAgIFtlbnRpdHldPVwiZW50aXR5XCJcbiAgICAgICAgICAgICAgICBba2V5XT1cInByb3BlcnR5S2V5XCJcbiAgICAgICAgICAgICAgICBbZ2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZV09XCJpbnRlcm5hbEdldFZhbGlkYXRpb25FcnJvck1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgIFtpc1JlYWRPbmx5XT1cImludGVybmFsSXNSZWFkT25seVwiXG4gICAgICAgICAgICAgICAgKGlucHV0Q2hhbmdlRXZlbnQpPVwiZW1pdENoYW5nZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvYm9vbGVhbi10b2dnbGUtaW5wdXQ+XG4gICAgICAgIH1cbiAgICAgICAgQGNhc2UgKERlY29yYXRvclR5cGVzLkJPT0xFQU5fRFJPUERPV04pIHtcbiAgICAgICAgICAgIDxib29sZWFuLWRyb3Bkb3duLWlucHV0XG4gICAgICAgICAgICAgICAgW2VudGl0eV09XCJlbnRpdHlcIlxuICAgICAgICAgICAgICAgIFtrZXldPVwicHJvcGVydHlLZXlcIlxuICAgICAgICAgICAgICAgIFtnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXT1cImludGVybmFsR2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgW2lzUmVhZE9ubHldPVwiaW50ZXJuYWxJc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2VFdmVudCk9XCJlbWl0Q2hhbmdlKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9ib29sZWFuLWRyb3Bkb3duLWlucHV0PlxuICAgICAgICB9XG4gICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tTnVtYmVycy0tLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICAgIEBjYXNlIChEZWNvcmF0b3JUeXBlcy5OVU1CRVIpIHtcbiAgICAgICAgICAgIDxudW1iZXItaW5wdXRcbiAgICAgICAgICAgICAgICBbZW50aXR5XT1cImVudGl0eVwiXG4gICAgICAgICAgICAgICAgW2tleV09XCJwcm9wZXJ0eUtleVwiXG4gICAgICAgICAgICAgICAgW2dldFZhbGlkYXRpb25FcnJvck1lc3NhZ2VdPVwiaW50ZXJuYWxHZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICBbaXNSZWFkT25seV09XCJpbnRlcm5hbElzUmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgIChpbnB1dENoYW5nZUV2ZW50KT1cImVtaXRDaGFuZ2UoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L251bWJlci1pbnB1dD5cbiAgICAgICAgfVxuICAgICAgICBAY2FzZSAoRGVjb3JhdG9yVHlwZXMuTlVNQkVSX0RST1BET1dOKSB7XG4gICAgICAgICAgICA8bnVtYmVyLWRyb3Bkb3duLWlucHV0XG4gICAgICAgICAgICAgICAgW2VudGl0eV09XCJlbnRpdHlcIlxuICAgICAgICAgICAgICAgIFtrZXldPVwicHJvcGVydHlLZXlcIlxuICAgICAgICAgICAgICAgIFtnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXT1cImludGVybmFsR2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgW2lzUmVhZE9ubHldPVwiaW50ZXJuYWxJc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2VFdmVudCk9XCJlbWl0Q2hhbmdlKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9udW1iZXItZHJvcGRvd24taW5wdXQ+XG4gICAgICAgIH1cbiAgICAgICAgQGNhc2UgKERlY29yYXRvclR5cGVzLk5VTUJFUl9TTElERVIpIHtcbiAgICAgICAgICAgIDxudW1iZXItc2xpZGVyLWlucHV0XG4gICAgICAgICAgICAgICAgW2VudGl0eV09XCJlbnRpdHlcIlxuICAgICAgICAgICAgICAgIFtrZXldPVwicHJvcGVydHlLZXlcIlxuICAgICAgICAgICAgICAgIFtnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXT1cImludGVybmFsR2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgW2lzUmVhZE9ubHldPVwiaW50ZXJuYWxJc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2VFdmVudCk9XCJlbWl0Q2hhbmdlKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9udW1iZXItc2xpZGVyLWlucHV0PlxuICAgICAgICB9XG4gICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLUFycmF5LS0tLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICAgIEBjYXNlIChEZWNvcmF0b3JUeXBlcy5BUlJBWV9EQVRFKSB7XG4gICAgICAgICAgICA8YXJyYXktZGF0ZS1pbnB1dFxuICAgICAgICAgICAgICAgIFtlbnRpdHldPVwiZW50aXR5XCJcbiAgICAgICAgICAgICAgICBba2V5XT1cInByb3BlcnR5S2V5XCJcbiAgICAgICAgICAgICAgICBbZ2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZV09XCJpbnRlcm5hbEdldFZhbGlkYXRpb25FcnJvck1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgIFtpc1JlYWRPbmx5XT1cImludGVybmFsSXNSZWFkT25seVwiXG4gICAgICAgICAgICAgICAgKGlucHV0Q2hhbmdlRXZlbnQpPVwiZW1pdENoYW5nZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvYXJyYXktZGF0ZS1pbnB1dD5cbiAgICAgICAgfVxuICAgICAgICBAY2FzZSAoRGVjb3JhdG9yVHlwZXMuQVJSQVlfREFURV9USU1FKSB7XG4gICAgICAgICAgICA8YXJyYXktZGF0ZS10aW1lLWlucHV0XG4gICAgICAgICAgICAgICAgW2VudGl0eV09XCJlbnRpdHlcIlxuICAgICAgICAgICAgICAgIFtrZXldPVwicHJvcGVydHlLZXlcIlxuICAgICAgICAgICAgICAgIFtnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXT1cImludGVybmFsR2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgW2lzUmVhZE9ubHldPVwiaW50ZXJuYWxJc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2VFdmVudCk9XCJlbWl0Q2hhbmdlKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9hcnJheS1kYXRlLXRpbWUtaW5wdXQ+XG4gICAgICAgIH1cbiAgICAgICAgQGNhc2UgKERlY29yYXRvclR5cGVzLkFSUkFZX0RBVEVfUkFOR0UpIHtcbiAgICAgICAgICAgIDxhcnJheS1kYXRlLXJhbmdlLWlucHV0XG4gICAgICAgICAgICAgICAgW2VudGl0eV09XCJlbnRpdHlcIlxuICAgICAgICAgICAgICAgIFtrZXldPVwicHJvcGVydHlLZXlcIlxuICAgICAgICAgICAgICAgIFtnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXT1cImludGVybmFsR2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgW2lzUmVhZE9ubHldPVwiaW50ZXJuYWxJc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2VFdmVudCk9XCJlbWl0Q2hhbmdlKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9hcnJheS1kYXRlLXJhbmdlLWlucHV0PlxuICAgICAgICB9XG4gICAgICAgIEBjYXNlIChEZWNvcmF0b3JUeXBlcy5BUlJBWV9TVFJJTkdfQ0hJUFMpIHtcbiAgICAgICAgICAgIDxhcnJheS1zdHJpbmctY2hpcHMtaW5wdXRcbiAgICAgICAgICAgICAgICBbZW50aXR5XT1cImVudGl0eVwiXG4gICAgICAgICAgICAgICAgW2tleV09XCJwcm9wZXJ0eUtleVwiXG4gICAgICAgICAgICAgICAgW2dldFZhbGlkYXRpb25FcnJvck1lc3NhZ2VdPVwiaW50ZXJuYWxHZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICBbaXNSZWFkT25seV09XCJpbnRlcm5hbElzUmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgIChpbnB1dENoYW5nZUV2ZW50KT1cImVtaXRDaGFuZ2UoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2FycmF5LXN0cmluZy1jaGlwcy1pbnB1dD5cbiAgICAgICAgfVxuICAgICAgICBAY2FzZSAoRGVjb3JhdG9yVHlwZXMuQVJSQVlfU1RSSU5HX0FVVE9DT01QTEVURV9DSElQUykge1xuICAgICAgICAgICAgPGFycmF5LXN0cmluZy1hdXRvY29tcGxldGUtY2hpcHNcbiAgICAgICAgICAgICAgICBbZW50aXR5XT1cImVudGl0eVwiXG4gICAgICAgICAgICAgICAgW2tleV09XCJwcm9wZXJ0eUtleVwiXG4gICAgICAgICAgICAgICAgW2dldFZhbGlkYXRpb25FcnJvck1lc3NhZ2VdPVwiaW50ZXJuYWxHZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICBbaXNSZWFkT25seV09XCJpbnRlcm5hbElzUmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgIChpbnB1dENoYW5nZUV2ZW50KT1cImVtaXRDaGFuZ2UoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2FycmF5LXN0cmluZy1hdXRvY29tcGxldGUtY2hpcHM+XG4gICAgICAgIH1cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tRGF0ZXMtLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgQGNhc2UgKERlY29yYXRvclR5cGVzLkRBVEUpIHtcbiAgICAgICAgICAgIDxkYXRlLWlucHV0XG4gICAgICAgICAgICAgICAgW2VudGl0eV09XCJlbnRpdHlcIlxuICAgICAgICAgICAgICAgIFtrZXldPVwicHJvcGVydHlLZXlcIlxuICAgICAgICAgICAgICAgIFtnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXT1cImludGVybmFsR2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgW2lzUmVhZE9ubHldPVwiaW50ZXJuYWxJc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2VFdmVudCk9XCJlbWl0Q2hhbmdlKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9kYXRlLWlucHV0PlxuICAgICAgICB9XG4gICAgICAgIEBjYXNlIChEZWNvcmF0b3JUeXBlcy5EQVRFX1JBTkdFKSB7XG4gICAgICAgICAgICA8ZGF0ZS1yYW5nZS1pbnB1dFxuICAgICAgICAgICAgICAgIFtlbnRpdHldPVwiZW50aXR5XCJcbiAgICAgICAgICAgICAgICBba2V5XT1cInByb3BlcnR5S2V5XCJcbiAgICAgICAgICAgICAgICBbZ2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZV09XCJpbnRlcm5hbEdldFZhbGlkYXRpb25FcnJvck1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgIFtpc1JlYWRPbmx5XT1cImludGVybmFsSXNSZWFkT25seVwiXG4gICAgICAgICAgICAgICAgKGlucHV0Q2hhbmdlRXZlbnQpPVwiZW1pdENoYW5nZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvZGF0ZS1yYW5nZS1pbnB1dD5cbiAgICAgICAgfVxuICAgICAgICBAY2FzZSAoRGVjb3JhdG9yVHlwZXMuREFURV9USU1FKSB7XG4gICAgICAgICAgICA8ZGF0ZS10aW1lLWlucHV0XG4gICAgICAgICAgICAgICAgW2VudGl0eV09XCJlbnRpdHlcIlxuICAgICAgICAgICAgICAgIFtrZXldPVwicHJvcGVydHlLZXlcIlxuICAgICAgICAgICAgICAgIFtnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXT1cImludGVybmFsR2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgW2lzUmVhZE9ubHldPVwiaW50ZXJuYWxJc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2VFdmVudCk9XCJlbWl0Q2hhbmdlKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9kYXRlLXRpbWUtaW5wdXQ+XG4gICAgICAgIH1cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tRmlsZXMtLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgQGNhc2UgKERlY29yYXRvclR5cGVzLkZJTEVfREVGQVVMVCkge1xuICAgICAgICAgICAgPGZpbGUtZGVmYXVsdC1pbnB1dFxuICAgICAgICAgICAgICAgIFtlbnRpdHldPVwiZW50aXR5XCJcbiAgICAgICAgICAgICAgICBba2V5XT1cInByb3BlcnR5S2V5XCJcbiAgICAgICAgICAgICAgICBbZ2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZV09XCJpbnRlcm5hbEdldFZhbGlkYXRpb25FcnJvck1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgIFtpc1JlYWRPbmx5XT1cImludGVybmFsSXNSZWFkT25seVwiXG4gICAgICAgICAgICAgICAgKGlucHV0Q2hhbmdlRXZlbnQpPVwiZW1pdENoYW5nZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvZmlsZS1kZWZhdWx0LWlucHV0PlxuICAgICAgICB9XG4gICAgICAgIEBjYXNlIChEZWNvcmF0b3JUeXBlcy5GSUxFX0lNQUdFKSB7XG4gICAgICAgICAgICA8ZmlsZS1pbWFnZS1pbnB1dFxuICAgICAgICAgICAgICAgIFtlbnRpdHldPVwiZW50aXR5XCJcbiAgICAgICAgICAgICAgICBba2V5XT1cInByb3BlcnR5S2V5XCJcbiAgICAgICAgICAgICAgICBbZ2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZV09XCJpbnRlcm5hbEdldFZhbGlkYXRpb25FcnJvck1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgIFtpc1JlYWRPbmx5XT1cImludGVybmFsSXNSZWFkT25seVwiXG4gICAgICAgICAgICAgICAgKGlucHV0Q2hhbmdlRXZlbnQpPVwiZW1pdENoYW5nZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvZmlsZS1pbWFnZS1pbnB1dD5cbiAgICAgICAgfVxuICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuICAgICAgICA8IS0tLS0tLS0tLS0tLS0tIHJlZmVyZW5jZXMgbWFueSAtLS0tLS0tLS0tLS0tPlxuICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuICAgICAgICBAY2FzZSAoRGVjb3JhdG9yVHlwZXMuUkVGRVJFTkNFU19NQU5ZKSB7XG4gICAgICAgICAgICA8cmVmZXJlbmNlcy1tYW55LWlucHV0XG4gICAgICAgICAgICAgICAgW2VudGl0eV09XCJlbnRpdHlcIlxuICAgICAgICAgICAgICAgIFtrZXldPVwicHJvcGVydHlLZXlcIlxuICAgICAgICAgICAgICAgIFtnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXT1cImludGVybmFsR2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgW2lzUmVhZE9ubHldPVwiaW50ZXJuYWxJc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2VFdmVudCk9XCJlbWl0Q2hhbmdlKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9yZWZlcmVuY2VzLW1hbnktaW5wdXQ+XG4gICAgICAgIH1cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tQ3VzdG9tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgQGNhc2UgKERlY29yYXRvclR5cGVzLkNVU1RPTSkge1xuICAgICAgICAgICAgPGN1c3RvbS1pbnB1dFxuICAgICAgICAgICAgICAgIFtlbnRpdHldPVwiZW50aXR5XCJcbiAgICAgICAgICAgICAgICBba2V5XT1cInByb3BlcnR5S2V5XCJcbiAgICAgICAgICAgICAgICBbZ2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZV09XCJpbnRlcm5hbEdldFZhbGlkYXRpb25FcnJvck1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgIFtpc1JlYWRPbmx5XT1cImludGVybmFsSXNSZWFkT25seVwiXG4gICAgICAgICAgICAgICAgKGlucHV0Q2hhbmdlRXZlbnQpPVwiZW1pdENoYW5nZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvY3VzdG9tLWlucHV0PlxuICAgICAgICB9XG4gICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLU9iamVjdC0tLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICAgIEBjYXNlIChEZWNvcmF0b3JUeXBlcy5PQkpFQ1QpIHtcbiAgICAgICAgICAgIDxiPnt7bWV0YWRhdGFEZWZhdWx0T2JqZWN0LmRpc3BsYXlOYW1lfX08L2I+XG4gICAgICAgICAgICA8IS0tIGl0ZXJhdGVzIG92ZXIgdGhlIG9iamVjdCBwcm9wZXJ0aWVzIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvcm07IGNvbnRleHQ6IG9iamVjdEZvcm1Db250ZXh0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS1PYmplY3QgRHJvcGRvd24tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgQGNhc2UgKERlY29yYXRvclR5cGVzLk9CSkVDVF9EUk9QRE9XTikge1xuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e21ldGFkYXRhLmRpc3BsYXlOYW1lfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCAjbW9kZWw9XCJuZ01vZGVsXCJcbiAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwib2JqZWN0RHJvcGRvd25OYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cIm1ldGFkYXRhLnJlcXVpcmVkKGVudGl0eSlcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaW50ZXJuYWxJc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbXBhcmVXaXRoXT1cImNvbXBhcmVPYmplY3RzQm91bmRcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVudGl0eVtwcm9wZXJ0eUtleV1cIlxuICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cImVtaXRDaGFuZ2UoKVwiXG4gICAgICAgICAgICAgICAgICAgIChvcGVuZWQpPVwic2VsZWN0U2VhcmNoSW5wdXQuZm9jdXMoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJzZWxlY3Qtc2VhcmNoLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBhbmd1bGFyL25vLWFueSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAjc2VsZWN0U2VhcmNoSW5wdXQgbWF0SW5wdXQgKGtleXVwKT1cImZpbHRlck9iamVjdERyb3Bkb3duVmFsdWVzKCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZmEtaWNvbiBtYXRTdWZmaXggW2ljb25dPVwiZmFTZWFyY2hcIj48L2ZhLWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoIW1ldGFkYXRhLnJlcXVpcmVkKGVudGl0eSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uPi08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChzaG91bGREaXNwbGF5Q3VycmVudE9iamVjdERyb3Bkb3duVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJjdXJyZW50T2JqZWN0RHJvcGRvd25WYWx1ZT8udmFsdWVcIj57e2N1cnJlbnRPYmplY3REcm9wZG93blZhbHVlPy5kaXNwbGF5TmFtZX19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKHZhbHVlIG9mIGZpbHRlcmVkT2JqZWN0RHJvcGRvd25WYWx1ZXM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cInZhbHVlLnZhbHVlXCI+e3t2YWx1ZS5kaXNwbGF5TmFtZX19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+e3tpbnRlcm5hbEdldFZhbGlkYXRpb25FcnJvck1lc3NhZ2UobW9kZWwpfX08L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIH1cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLSByZWZlcmVuY2VzIG9uZSAtLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgQGNhc2UgKERlY29yYXRvclR5cGVzLlJFRkVSRU5DRVNfT05FKSB7XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgW2NsYXNzLnctZnVsbF09XCJtZXRhZGF0YVJlZmVyZW5jZXNPbmUuZHJvcGRvd25Pbmx5XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e21ldGFkYXRhLmRpc3BsYXlOYW1lfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCAjaW5wdXRNb2RlbD1cIm5nTW9kZWxcIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJyZWZlcmVuY2VzT25lTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpbnRlcm5hbElzUmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwibWV0YWRhdGEucmVxdWlyZWQoZW50aXR5KVwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW50aXR5W3Byb3BlcnR5S2V5XVwiXG4gICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwic2V0UmVmZXJlbmNlc09uZU9iamVjdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgKG9wZW5lZCk9XCJzZWxlY3RTZWFyY2hJbnB1dC5mb2N1cygpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInNlbGVjdC1zZWFyY2gtaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGFuZ3VsYXIvbm8tYW55IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICNzZWxlY3RTZWFyY2hJbnB1dCBtYXRJbnB1dCAoa2V5dXApPVwiZmlsdGVyUmVmZXJlbmNlc09uZVZhbHVlcygkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGZhLWljb24gbWF0U3VmZml4IFtpY29uXT1cImZhU2VhcmNoXCI+PC9mYS1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKCFtZXRhZGF0YS5yZXF1aXJlZChlbnRpdHkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbj4tPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoc2hvdWxkRGlzcGxheUN1cnJlbnRSZWZlcmVuY2VzT25lRHJvcGRvd25WYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImN1cnJlbnRSZWZlcmVuY2VzT25lRHJvcGRvd25WYWx1ZT8udmFsdWVcIj57e2N1cnJlbnRSZWZlcmVuY2VzT25lRHJvcGRvd25WYWx1ZT8uZGlzcGxheU5hbWV9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAZm9yICh2YWx1ZSBvZiBmaWx0ZXJlZFJlZmVyZW5jZXNPbmVEcm9wZG93blZhbHVlczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidmFsdWUudmFsdWVcIj57e3ZhbHVlLmRpc3BsYXlOYW1lfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvcj57e2ludGVybmFsR2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZShpbnB1dE1vZGVsKX19PC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPCEtLSBpdGVyYXRlcyBvdmVyIHRoZSByZWZlcmVuY2VzIG9uZSBwcm9wZXJ0aWVzIC0tPlxuICAgICAgICAgICAgQGlmIChyZWZlcmVuY2VzT25lRm9ybUNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9ybTsgY29udGV4dDogcmVmZXJlbmNlc09uZUZvcm1Db250ZXh0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tQXJyYXktLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgQGNhc2UgKERlY29yYXRvclR5cGVzLkFSUkFZKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW50aXR5QXJyYXlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF0LWVsZXZhdGlvbi16OCBlbGV2YXRpb24tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcnJheS1oZWFkbGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+e3ttZXRhZGF0YUVudGl0eUFycmF5LmRpc3BsYXlOYW1lfX08L2I+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICBAaWYgKG1ldGFkYXRhRW50aXR5QXJyYXkuY3JlYXRlSW5saW5lICYmICFpbnRlcm5hbElzUmVhZE9ubHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoYWRkQXJyYXlJdGVtRm9ybUNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9ybTsgY29udGV4dDogYWRkQXJyYXlJdGVtRm9ybUNvbnRleHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBlbHNlIGlmIChhZGRBcnJheUl0ZW1Gb3JtQ29udGV4dDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9ybTsgY29udGV4dDogYWRkQXJyYXlJdGVtRm9ybUNvbnRleHQyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmICghaW50ZXJuYWxJc1JlYWRPbmx5ICYmIGVudGl0eUFycmF5VGFibGVDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZXRhZGF0YUVudGl0eUFycmF5LmNyZWF0ZUlubGluZSAmJiAhaXNBcnJheUl0ZW1WYWxpZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRFbnRpdHkoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e21ldGFkYXRhRW50aXR5QXJyYXkuYWRkQnV0dG9uTGFiZWx9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhZW50aXR5QXJyYXlUYWJsZUNvbnRleHQuJGltcGxpY2l0LnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlRnJvbUVudGl0eUFycmF5KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ttZXRhZGF0YUVudGl0eUFycmF5LnJlbW92ZUJ1dHRvbkxhYmVsfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoZW50aXR5QXJyYXlUYWJsZUNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YWJsZTsgY29udGV4dDogZW50aXR5QXJyYXlUYWJsZUNvbnRleHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0gaGFzIG1hbnkgLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgQGNhc2UgKERlY29yYXRvclR5cGVzLkhBU19NQU5ZKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGFzTWFueVwiPlxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cInRpdGxlXCI+e3ttZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLnRpdGxlfX08L2gyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGdyaWQtY29scy0xMiBnYXAteC02XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImxnOmNvbC1zcGFuLTggbWQ6Y29sLXNwYW4tNiBjb2wtc3Bhbi0xMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e21ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuYmFzZURhdGEuc2VhcmNoTGFiZWx9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IChrZXl1cCk9XCJhcHBseUhhc01hbnlGaWx0ZXIoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKG1ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuYmFzZURhdGEudGFibGVBY3Rpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5sZzpjb2wtc3Bhbi0yXT1cImhhc01hbnlBbGxvd0NyZWF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmxnOmNvbC1zcGFuLTRdPVwiIWhhc01hbnlBbGxvd0NyZWF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm1kOmNvbC1zcGFuLTNdPVwiaGFzTWFueUFsbG93Q3JlYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MubWQ6Y29sLXNwYW4tNl09XCIhaGFzTWFueUFsbG93Q3JlYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuY29sLXNwYW4tNl09XCJoYXNNYW55QWxsb3dDcmVhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5jb2wtc3Bhbi0xMl09XCIhaGFzTWFueUFsbG93Q3JlYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImFjdGlvbnMtYnV0dG9uXCIgbWF0LXJhaXNlZC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ttZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLnRhYmxlQWN0aW9uc0xhYmVsfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAobWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5iYXNlRGF0YS5hbGxvd0pzb25JbXBvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtbWVudS1pdGVtIFtkaXNhYmxlZF09XCJoYXNNYW55VGFibGVBY3Rpb25EaXNhYmxlZChoYXNNYW55SW1wb3J0QWN0aW9uKVwiIChjbGljayk9XCJydW5IYXNNYW55VGFibGVBY3Rpb24oaGFzTWFueUltcG9ydEFjdGlvbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3toYXNNYW55SW1wb3J0QWN0aW9uLmRpc3BsYXlOYW1lfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGFjdGlvbiBvZiBtZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLnRhYmxlQWN0aW9uczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LW1lbnUtaXRlbSBbZGlzYWJsZWRdPVwiaGFzTWFueVRhYmxlQWN0aW9uRGlzYWJsZWQoYWN0aW9uKVwiIChjbGljayk9XCJydW5IYXNNYW55VGFibGVBY3Rpb24oYWN0aW9uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2FjdGlvbi5kaXNwbGF5TmFtZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoaGFzTWFueUFsbG93Q3JlYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmxnOmNvbC1zcGFuLTJdPVwibWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5iYXNlRGF0YS50YWJsZUFjdGlvbnMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MubGc6Y29sLXNwYW4tNF09XCIhbWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5iYXNlRGF0YS50YWJsZUFjdGlvbnMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MubWQ6Y29sLXNwYW4tM109XCJtZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLnRhYmxlQWN0aW9ucy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5tZDpjb2wtc3Bhbi02XT1cIiFtZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLnRhYmxlQWN0aW9ucy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5jb2wtc3Bhbi02XT1cIm1ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuYmFzZURhdGEudGFibGVBY3Rpb25zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmNvbC1zcGFuLTEyXT1cIiFtZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLnRhYmxlQWN0aW9ucy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY3JlYXRlLWJ1dHRvblwiIG1hdC1yYWlzZWQtYnV0dG9uIChjbGljayk9XCJjcmVhdGVIYXNNYW55RW50aXR5KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ttZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmJhc2VEYXRhLmNyZWF0ZUJ1dHRvbkxhYmVsfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXQtZWxldmF0aW9uLXo4IGVsZXZhdGlvbi1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChoYXNNYW55VGFibGVDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFibGU7IGNvbnRleHQ6IGhhc01hbnlUYWJsZUNvbnRleHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIEBkZWZhdWx0IHtcbiAgICAgICAgICAgIDxkaXY+RVJST1I6IFRoZSB0eXBlIHt7dHlwZX19IGlzIG5vdCBrbm93bi48L2Rpdj5cbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG48bmctdGVtcGxhdGUgI3RhYmxlIGxldC1jb250ZXh0PlxuICAgIDxtYXQtdGFibGUgbWF0U29ydCBbZGF0YVNvdXJjZV09XCJjb250ZXh0LmRhdGFTb3VyY2VcIiBbY2xhc3MudGFibGUtd2l0aC1lcnJvci1zbG90XT1cImNvbnRleHQuc2hvdWxkU2hvd01pc3NpbmdFcnJvclwiPlxuICAgICAgICA8IS0tIHNlbGVjdCBDb2x1bW4gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic2VsZWN0XCI+XG4gICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggW2NoZWNrZWRdPVwiY29udGV4dC5zZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiBTZWxlY3Rpb25VdGlsaXRpZXMuaXNBbGxTZWxlY3RlZChjb250ZXh0LnNlbGVjdGlvbiwgY29udGV4dC5kYXRhU291cmNlKVwiXG4gICAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cImNvbnRleHQuc2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgIVNlbGVjdGlvblV0aWxpdGllcy5pc0FsbFNlbGVjdGVkKGNvbnRleHQuc2VsZWN0aW9uLCBjb250ZXh0LmRhdGFTb3VyY2UpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBTZWxlY3Rpb25VdGlsaXRpZXMubWFzdGVyVG9nZ2xlKGNvbnRleHQuc2VsZWN0aW9uLCBjb250ZXh0LmRhdGFTb3VyY2UpIDogbnVsbFwiPlxuICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgdmFsdWVcIiBbZHluYW1pY1N0eWxlQ2xhc3Nlc109XCJjb250ZXh0LmR5bmFtaWNSb3dTdHlsZUNsYXNzZXNcIiBbdmFsdWVdPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IFtjaGVja2VkXT1cImNvbnRleHQuc2VsZWN0aW9uLmlzU2VsZWN0ZWQodmFsdWUpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiJGV2ZW50ID8gY29udGV4dC5zZWxlY3Rpb24udG9nZ2xlKHZhbHVlKSA6IG51bGxcIj5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIEBmb3IgKGRDb2wgb2YgY29udGV4dC5kaXNwbGF5Q29sdW1uczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwiZENvbC5kaXNwbGF5TmFtZVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICB7e2RDb2wuZGlzcGxheU5hbWV9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCB2YWx1ZVwiIFtjbGFzcy5lbmFibGVkXT1cIiFkQ29sLmRpc2FibGVDbGljayAmJiBjb250ZXh0LmFsbG93Q2xpY2sodmFsdWUpXCJcbiAgICAgICAgICAgICAgICAgICAgW2R5bmFtaWNTdHlsZUNsYXNzZXNdPVwiY29udGV4dC5keW5hbWljUm93U3R5bGVDbGFzc2VzXCIgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrQ2VsbCh2YWx1ZSwgZENvbCwgY29udGV4dClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChkQ29sLkNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpc3BsYXktY29sdW1uLXZhbHVlIFtlbnRpdHldPVwidmFsdWVcIiBbQ29tcG9uZW50Q2xhc3NdPVwiZENvbC5Db21wb25lbnRcIj48L2Rpc3BsYXktY29sdW1uLXZhbHVlPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7Z2V0RGlzcGxheUNvbHVtblZhbHVlKHZhbHVlLCBkQ29sKX19XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cblxuICAgICAgICA8bWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImNvbnRleHQuZGlzcGxheWVkQ29sdW1uc1wiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgIDxtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBjb250ZXh0LmRpc3BsYXllZENvbHVtbnNcIj48L21hdC1yb3c+XG4gICAgPC9tYXQtdGFibGU+XG5cbiAgICBAaWYgKGNvbnRleHQuZGlzcGxheUxvYWRpbmdTcGlubmVyICYmIGNvbnRleHQuaXNMb2FkaW5nKSB7XG4gICAgICAgIDxtYXQtc3Bpbm5lcj5cbiAgICAgICAgPC9tYXQtc3Bpbm5lcj5cbiAgICB9XG4gICAgQGVsc2UgaWYgKGNvbnRleHQuc2hvdWxkU2hvd01pc3NpbmdFcnJvciAmJiAhY29udGV4dC5kYXRhU291cmNlLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1lcnJvclwiPnt7Y29udGV4dC5lbXB0eUVycm9yTWVzc2FnZX19PC9kaXY+XG4gICAgfVxuXG4gICAgPG1hdC1wYWdpbmF0b3IgW2xlbmd0aF09XCJjb250ZXh0LmRhdGFTb3VyY2UuZmlsdGVyZWREYXRhLmxlbmd0aFwiIFtwYWdlSW5kZXhdPVwiMFwiIFtwYWdlU2l6ZV09XCIxMFwiIFtwYWdlU2l6ZU9wdGlvbnNdPVwiWzUsIDEwLCAyNSwgNTBdXCI+PC9tYXQtcGFnaW5hdG9yPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG48IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUZvcm0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbjwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuPG5nLXRlbXBsYXRlICNmb3JtIGxldC1jb250ZXh0PlxuICAgIDwhLS0gZXNsaW50LWRpc2FibGUgYW5ndWxhci9uby1jYWxsLWV4cHJlc3Npb24gLS0+XG4gICAgQGlmIChjb250ZXh0LnRhYnMubGVuZ3RoID4gMSkge1xuICAgICAgICA8bWF0LXRhYi1ncm91cCBwcmVzZXJ2ZUNvbnRlbnQ+XG4gICAgICAgICAgICBAZm9yICh0YWIgb2YgY29udGV4dC50YWJzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICA8bWF0LXRhYiBbbGFiZWxdPVwidGFiLnRhYk5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAocm93IG9mIHRhYi5yb3dzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGdyaWQtY29scy0xMiBnYXAteC02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoa2V5IG9mIHJvdy5rZXlzOyB0cmFjayBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1tYXQtZW50aXR5LWlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZW50aXR5XT1cImNvbnRleHQuZW50aXR5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcm9wZXJ0eUtleV09XCJrZXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dldFZhbGlkYXRpb25FcnJvck1lc3NhZ2VdPVwiaW50ZXJuYWxHZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWxpZEVtcHR5XT1cImNvbnRleHQudmFsaWRFbXB0eT8uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzUmVhZE9ubHldPVwiY29udGV4dC5pc1JlYWRPbmx5Py4oY29udGV4dC5lbnRpdHksIGtleSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIkVudGl0eVV0aWxpdGllcy5nZXRXaWR0aENsYXNzZXMoY29udGV4dC5lbnRpdHksIGtleSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVPbWl0Rm9yRWRpdF09XCJjb250ZXh0LmhpZGVPbWl0Rm9yRWRpdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZU9taXRGb3JDcmVhdGVdPVwiY29udGV4dC5oaWRlT21pdEZvckNyZWF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2VFdmVudCk9XCJjb250ZXh0LmlucHV0Q2hhbmdlRXZlbnQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtbWF0LWVudGl0eS1pbnB1dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9tYXQtdGFiLWdyb3VwPlxuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICAgIEBpZiAoIWNvbnRleHQudGFicy5sZW5ndGgpIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibm8tZW50aXR5LXRhYnNcIj5cbiAgICAgICAgICAgICAgICBFUlJPUjogTm8gSW5wdXRzLiBEaWQgeW91IGNvcnJlY3RseSBhc3NpZ24gYWxsIHZhbHVlcyBpbiB0aGUgbW9kZWwgY29uc3RydWN0b3I/XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIH1cbiAgICAgICAgQGVsc2Uge1xuICAgICAgICAgICAgQGZvciAocm93IG9mIGNvbnRleHQudGFic1swXS5yb3dzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBncmlkLWNvbHMtMTIgZ2FwLXgtNlwiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChrZXkgb2Ygcm93LmtleXM7IHRyYWNrIGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1tYXQtZW50aXR5LWlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VudGl0eV09XCJjb250ZXh0LmVudGl0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb3BlcnR5S2V5XT1cImtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dldFZhbGlkYXRpb25FcnJvck1lc3NhZ2VdPVwiaW50ZXJuYWxHZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsaWRFbXB0eV09XCJjb250ZXh0LnZhbGlkRW1wdHk/LigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNSZWFkT25seV09XCJjb250ZXh0LmlzUmVhZE9ubHk/Lihjb250ZXh0LmVudGl0eSwga2V5KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIkVudGl0eVV0aWxpdGllcy5nZXRXaWR0aENsYXNzZXMoY29udGV4dC5lbnRpdHksIGtleSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlT21pdEZvckVkaXRdPVwiY29udGV4dC5oaWRlT21pdEZvckVkaXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlT21pdEZvckNyZWF0ZV09XCJjb250ZXh0LmhpZGVPbWl0Rm9yQ3JlYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2VFdmVudCk9XCJjb250ZXh0LmlucHV0Q2hhbmdlRXZlbnQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25neC1tYXQtZW50aXR5LWlucHV0PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuXG48IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbjwhLS0tLS0tLS0tLS0tLS0tLS0tLS1BZGQgQXJyYXkgSXRlbSBEaWFsb2ctLS0tLS0tLS0tLS0tLS0tPlxuPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG48bmctdGVtcGxhdGUgI2FkZEFycmF5SXRlbURpYWxvZz5cbiAgICA8ZGl2IGNsYXNzPVwibWF0LWRpYWxvZy10aXRsZVwiPlxuICAgICAgICA8ZGl2Pnt7YWRkQXJyYXlJdGVtRGlhbG9nRGF0YS50aXRsZX19PC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8Zm9ybSAobmdTdWJtaXQpPVwiYWRkQXJyYXlJdGVtKClcIj5cbiAgICAgICAgPG1hdC1kaWFsb2ctY29udGVudD5cbiAgICAgICAgICAgIEBpZiAoYWRkQXJyYXlJdGVtRm9ybUNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9ybTsgY29udGV4dDogYWRkQXJyYXlJdGVtRm9ybUNvbnRleHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgXG4gICAgICAgIDxtYXQtZGlhbG9nLWFjdGlvbnM+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGlhbG9nLWJ1dHRvbi13aXRoLWluZm8taWNvblwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIG1hdC1yYWlzZWQtYnV0dG9uIG1hdEJhZGdlQ29sb3I9XCJ3YXJuXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0FycmF5SXRlbVZhbGlkXCJcbiAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlXT1cImFycmF5SXRlbVZhbGlkYXRpb25FcnJvcnMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlSGlkZGVuXT1cIiFhcnJheUl0ZW1WYWxpZGF0aW9uRXJyb3JzLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7e2FkZEFycmF5SXRlbURpYWxvZ0RhdGEuY3JlYXRlQnV0dG9uTGFiZWx9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIEBpZiAoYXJyYXlJdGVtVmFsaWRhdGlvbkVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5neC1tYXQtZW50aXR5LXRvb2x0aXAgW3Rvb2x0aXBDb250ZW50XT1cImFycmF5SXRlbVRvb2x0aXBDb250ZW50XCI+PC9uZ3gtbWF0LWVudGl0eS10b29sdGlwPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LXJhaXNlZC1idXR0b24gY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCIgKGNsaWNrKT1cImNsb3NlQWRkQXJyYXlJdGVtRGlhbG9nKClcIj5cbiAgICAgICAgICAgICAgICB7e2FkZEFycmF5SXRlbURpYWxvZ0RhdGEuY2FuY2VsQnV0dG9uTGFiZWx9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgIDwvZm9ybT5cblxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG48IS0tLS0tLS0tLS0tLS0tLS0tLS0tRWRpdCBBcnJheSBJdGVtIERpYWxvZy0tLS0tLS0tLS0tLS0tLS0+XG48IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbjxuZy10ZW1wbGF0ZSAjZWRpdEFycmF5SXRlbURpYWxvZz5cbiAgICA8ZGl2IGNsYXNzPVwibWF0LWRpYWxvZy10aXRsZVwiPlxuICAgICAgICA8ZGl2Pnt7ZWRpdEFycmF5SXRlbURpYWxvZ0RhdGEudGl0bGUoYXJyYXlJdGVtUHJpb3JDaGFuZ2VzKX19PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgXG4gICAgPGZvcm0gKG5nU3VibWl0KT1cInNhdmVBcnJheUl0ZW0oKVwiPlxuICAgICAgICA8bWF0LWRpYWxvZy1jb250ZW50PlxuICAgICAgICAgICAgQGlmIChlZGl0QXJyYXlJdGVtRm9ybUNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9ybTsgY29udGV4dDogZWRpdEFycmF5SXRlbUZvcm1Db250ZXh0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvbWF0LWRpYWxvZy1jb250ZW50PlxuICAgICAgICBcbiAgICAgICAgPG1hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaWFsb2ctYnV0dG9uLXdpdGgtaW5mby1pY29uXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgbWF0LXJhaXNlZC1idXR0b24gbWF0QmFkZ2VDb2xvcj1cIndhcm5cIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYmFkZ2UtY2hhbmdlc109XCIhYXJyYXlJdGVtVmFsaWRhdGlvbkVycm9ycy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaW50ZXJuYWxJc1JlYWRPbmx5IHx8ICFpc0FycmF5SXRlbVZhbGlkIHx8ICFpc0FycmF5SXRlbURpcnR5XCJcbiAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlXT1cImFycmF5SXRlbVZhbGlkYXRpb25FcnJvcnMubGVuZ3RoID4gMCA/IGFycmF5SXRlbVZhbGlkYXRpb25FcnJvcnMubGVuZ3RoIDogYXJyYXlJdGVtQ2hhbmdlcy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VIaWRkZW5dPVwiIWFycmF5SXRlbVZhbGlkYXRpb25FcnJvcnMubGVuZ3RoICYmICFhcnJheUl0ZW1DaGFuZ2VzLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7e2VkaXRBcnJheUl0ZW1EaWFsb2dEYXRhLmNvbmZpcm1CdXR0b25MYWJlbH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgQGlmIChhcnJheUl0ZW1WYWxpZGF0aW9uRXJyb3JzLmxlbmd0aCB8fCBhcnJheUl0ZW1DaGFuZ2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICA8bmd4LW1hdC1lbnRpdHktdG9vbHRpcCBbdG9vbHRpcENvbnRlbnRdPVwiYXJyYXlJdGVtVG9vbHRpcENvbnRlbnRcIj48L25neC1tYXQtZW50aXR5LXRvb2x0aXA+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtcmFpc2VkLWJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIiAoY2xpY2spPVwiY2xvc2VFZGl0QXJyYXlJdGVtRGlhbG9nKClcIj5cbiAgICAgICAgICAgICAgICB7e2VkaXRBcnJheUl0ZW1EaWFsb2dEYXRhLmNhbmNlbEJ1dHRvbkxhYmVsfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICA8L2Zvcm0+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbjwhLS0tLS0tLS0tLS0tLS0tLS0tLS1DcmVhdGUgSGFzIE1hbnkgRGlhbG9nLS0tLS0tLS0tLS0tLS0tLT5cbjwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuPG5nLXRlbXBsYXRlICNjcmVhdGVIYXNNYW55RGlhbG9nPlxuICAgIDxkaXYgY2xhc3M9XCJtYXQtZGlhbG9nLXRpdGxlXCI+XG4gICAgICAgIDxkaXY+e3ttZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmNyZWF0ZURhdGEudGl0bGV9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIFxuICAgIDxmb3JtIChuZ1N1Ym1pdCk9XCJkaWFsb2dDcmVhdGVIYXNNYW55KClcIj5cbiAgICAgICAgPG1hdC1kaWFsb2ctY29udGVudD5cbiAgICAgICAgICAgIEBpZiAoaGFzTWFueUNyZWF0ZUZvcm1Db250ZXh0KSB7XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvcm07IGNvbnRleHQ6IGhhc01hbnlDcmVhdGVGb3JtQ29udGV4dFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L21hdC1kaWFsb2ctY29udGVudD5cbiAgICAgICAgXG4gICAgICAgIDxtYXQtZGlhbG9nLWFjdGlvbnM+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGlhbG9nLWJ1dHRvbi13aXRoLWluZm8taWNvblwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIG1hdC1yYWlzZWQtYnV0dG9uIG1hdEJhZGdlQ29sb3I9XCJ3YXJuXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0hhc01hbnlFbnRpdHlWYWxpZFwiXG4gICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZV09XCJoYXNNYW55VmFsaWRhdGlvbkVycm9ycy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VIaWRkZW5dPVwiIWhhc01hbnlWYWxpZGF0aW9uRXJyb3JzLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7e21ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuY3JlYXRlRGF0YS5jcmVhdGVCdXR0b25MYWJlbH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgQGlmIChoYXNNYW55VmFsaWRhdGlvbkVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5neC1tYXQtZW50aXR5LXRvb2x0aXAgW3Rvb2x0aXBDb250ZW50XT1cImhhc01hbnlUb29sdGlwQ29udGVudFwiPjwvbmd4LW1hdC1lbnRpdHktdG9vbHRpcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1yYWlzZWQtYnV0dG9uIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiIChjbGljayk9XCJkaWFsb2dDYW5jZWxDcmVhdGVIYXNNYW55KClcIj5cbiAgICAgICAgICAgICAgICB7e21ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuY3JlYXRlRGF0YS5jYW5jZWxCdXR0b25MYWJlbH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9tYXQtZGlhbG9nLWFjdGlvbnM+XG4gICAgPC9mb3JtPlxuICAgIFxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG48IS0tLS0tLS0tLS0tLS0tLS0tLS0tRWRpdCBIYXMgTWFueSBEaWFsb2ctLS0tLS0tLS0tLS0tLS0tLT5cbjwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuPG5nLXRlbXBsYXRlICNlZGl0SGFzTWFueURpYWxvZz5cbiAgICA8ZGl2IGNsYXNzPVwibWF0LWRpYWxvZy10aXRsZVwiPlxuICAgICAgICA8ZGl2Pnt7bWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5lZGl0RGF0YS50aXRsZShoYXNNYW55RW50aXR5UHJpb3JDaGFuZ2VzKX19PC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICBAaWYgKG1ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuZWRpdERhdGEuYWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtcmFpc2VkLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiPlxuICAgICAgICAgICAgICAgICAgICB7e21ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuZWRpdERhdGEuYWN0aW9uc0xhYmVsfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChhY3Rpb24gb2YgbWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5lZGl0RGF0YS5hY3Rpb25zOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LW1lbnUtaXRlbSBbZGlzYWJsZWRdPVwiaGFzTWFueUVkaXRBY3Rpb25EaXNhYmxlZChhY3Rpb24pXCIgKGNsaWNrKT1cImhhc01hbnlSdW5FZGl0QWN0aW9uKGFjdGlvbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7YWN0aW9uLmRpc3BsYXlOYW1lfX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgXG4gICAgICAgICAgICBAaWYgKGhhc01hbnlBbGxvd0RlbGV0ZShoYXNNYW55RW50aXR5KSkge1xuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwid2FyblwiIGNsYXNzPVwiZGVsZXRlLWJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiAoY2xpY2spPVwiZGVsZXRlSGFzTWFueUVudGl0eSgpXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7bWV0YWRhdGFIYXNNYW55LnRhYmxlRGF0YS5lZGl0RGF0YS5kZWxldGVCdXR0b25MYWJlbH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIFxuICAgIDxmb3JtIChuZ1N1Ym1pdCk9XCJkaWFsb2dFZGl0SGFzTWFueSgpXCI+XG4gICAgICAgIDxtYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgICAgICAgICBAaWYgKGhhc01hbnlFZGl0Rm9ybUNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9ybTsgY29udGV4dDogaGFzTWFueUVkaXRGb3JtQ29udGV4dFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L21hdC1kaWFsb2ctY29udGVudD5cbiAgICAgICAgXG4gICAgICAgIDxtYXQtZGlhbG9nLWFjdGlvbnM+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGlhbG9nLWJ1dHRvbi13aXRoLWluZm8taWNvblwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIG1hdC1yYWlzZWQtYnV0dG9uIG1hdEJhZGdlQ29sb3I9XCJ3YXJuXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmJhZGdlLWNoYW5nZXNdPVwiIWhhc01hbnlWYWxpZGF0aW9uRXJyb3JzLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpbnRlcm5hbElzUmVhZE9ubHkgfHwgIWlzSGFzTWFueUVudGl0eVZhbGlkIHx8ICFpc0hhc01hbnlFbnRpdHlEaXJ0eVwiXG4gICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZV09XCJoYXNNYW55VmFsaWRhdGlvbkVycm9ycy5sZW5ndGggPiAwID8gaGFzTWFueVZhbGlkYXRpb25FcnJvcnMubGVuZ3RoIDogaGFzTWFueUNoYW5nZXMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlSGlkZGVuXT1cIiFoYXNNYW55VmFsaWRhdGlvbkVycm9ycy5sZW5ndGggJiYgIWhhc01hbnlDaGFuZ2VzLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7e21ldGFkYXRhSGFzTWFueS50YWJsZURhdGEuZWRpdERhdGEuY29uZmlybUJ1dHRvbkxhYmVsfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICBAaWYgKGhhc01hbnlWYWxpZGF0aW9uRXJyb3JzLmxlbmd0aCB8fCBoYXNNYW55Q2hhbmdlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5neC1tYXQtZW50aXR5LXRvb2x0aXAgW3Rvb2x0aXBDb250ZW50XT1cImhhc01hbnlUb29sdGlwQ29udGVudFwiPjwvbmd4LW1hdC1lbnRpdHktdG9vbHRpcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1yYWlzZWQtYnV0dG9uIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiIChjbGljayk9XCJkaWFsb2dDYW5jZWxFZGl0SGFzTWFueSgpXCI+XG4gICAgICAgICAgICAgICAge3ttZXRhZGF0YUhhc01hbnkudGFibGVEYXRhLmVkaXREYXRhLmNhbmNlbEJ1dHRvbkxhYmVsfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICA8L2Zvcm0+XG48L25nLXRlbXBsYXRlPiJdfQ==