@sunbird-cb/cbp-ai 0.1.105 → 0.1.106

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.
@@ -517,6 +517,12 @@ export class RoleMappingGenerationComponent {
517
517
  this.sharedService.cbpPlanFinalObj['ministry'] = selectedMinistry;
518
518
  this.sharedService.cbpPlanFinalObj['role_mapping_generation'] = [];
519
519
  this.sharedService.roleMappingGenerationData = [];
520
+ // Selecting a different ministry/state invalidates any previously selected department
521
+ this.roleMappingForm.get('departments')?.setValue(null);
522
+ this.selectedDepartmentObj = null;
523
+ this.pinnedDepartmentOptions = [];
524
+ this.sharedService.cbpPlanFinalObj['department_name'] = '';
525
+ this.sharedService.cbpPlanFinalObj['departments'] = '';
520
526
  localStorage.setItem('cbpPlanFinalObj', JSON.stringify(this.sharedService.cbpPlanFinalObj));
521
527
  if (selectedMinistryId && (this.selectedMinistryType === 'state' || this.selectedMinistryType === 'ministry')) {
522
528
  this.departmentMinistryId = selectedMinistryId;
@@ -1107,4 +1113,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1107
1113
  type: ViewChild,
1108
1114
  args: ['departmentSelect', { static: false }]
1109
1115
  }] } });
1110
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS1tYXBwaW5nLWdlbmVyYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvcm9sZS1tYXBwaW5nLWdlbmVyYXRpb24vcm9sZS1tYXBwaW5nLWdlbmVyYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvcm9sZS1tYXBwaW5nLWdlbmVyYXRpb24vcm9sZS1tYXBwaW5nLWdlbmVyYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFnQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBdUMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakYsT0FBTyxRQUFRLE1BQU0sYUFBYSxDQUFDO0FBQ25DLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBRW5ILE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBaUIsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVcvRSxNQUFNLE9BQU8sOEJBQThCO0lBK0Z6QyxZQUNVLFFBQXNCLEVBQ3ZCLGFBQTRCLEVBQzNCLEVBQWUsRUFDZixRQUFxQixFQUN0QixNQUFpQixFQUNqQixrQkFBc0MsRUFDckMsTUFBYztRQU5kLGFBQVEsR0FBUixRQUFRLENBQWM7UUFDdkIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDM0IsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLGFBQVEsR0FBUixRQUFRLENBQWE7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNqQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3JDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFuR2Ysb0JBQWUsR0FBRyxLQUFLLENBQUE7UUFDaEMsVUFBSyxHQUFHLHNCQUFzQixDQUFDO1FBRS9CLGtCQUFhLEdBQUcsRUFBRSxDQUFBO1FBQ2xCLGVBQVUsR0FBRyxFQUFFLENBQUE7UUFFZixxQkFBZ0IsR0FBYSxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGFBQWE7WUFDNUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ3BFLHlCQUFvQixHQUFXLFVBQVUsQ0FBQztRQUMxQyxpQkFBWSxHQUFRLEVBQUUsQ0FBQTtRQUN0QixxQkFBZ0IsR0FBUSxFQUFFLENBQUE7UUFFMUIsZUFBVSxHQUFHLElBQUksQ0FBQTtRQUNqQixlQUFVLEdBQUc7WUFDWDtnQkFDRSxLQUFLLEVBQUUsNkJBQTZCO2FBQ3JDO1lBQ0Q7Z0JBQ0UsS0FBSyxFQUFFLG1CQUFtQjthQUMzQjtZQUNEO2dCQUNFLEtBQUssRUFBRSxtQkFBbUI7YUFDM0I7WUFDRDtnQkFDRSxLQUFLLEVBQUUsWUFBWTthQUNwQjtZQUNEO2dCQUNFLEtBQUssRUFBRSxhQUFhO2FBQ3JCO1lBQ0Q7Z0JBQ0UsS0FBSyxFQUFFLFFBQVE7YUFDaEI7U0FFRixDQUFBO1FBQ0QsbUJBQWMsR0FBVSxFQUFFLENBQUE7UUFDMUIsWUFBTyxHQUFHLEtBQUssQ0FBQTtRQUNmLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ25CLGlCQUFZLEdBQUc7WUFDYixpQkFBaUI7WUFDakIsb0JBQW9CO1lBQ3BCLHlFQUF5RTtZQUN6RSwwQkFBMEI7WUFDMUIsbUVBQW1FO1lBQ25FLFlBQVk7U0FDYixDQUFDO1FBQ0YsZ0JBQVcsR0FBa0IsSUFBSSxDQUFDO1FBQ2xDLGlCQUFZLEdBQWtCLElBQUksQ0FBQztRQUNuQyxVQUFLLEdBQUcsS0FBSyxDQUFBO1FBQ2IsZ0JBQVcsR0FBUSxFQUFFLENBQUE7UUFDckIsdUJBQWtCLEdBQUcsRUFBRSxDQUFBO1FBRXZCLFdBQU0sR0FBYSxFQUFFLENBQUM7UUFDdEIsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUV0QiwyQkFBc0IsR0FBVyxFQUFFLENBQUM7UUFDcEMscUJBQWdCLEdBQUc7WUFDakIscUNBQXFDO1lBQ3JDLG1EQUFtRDtZQUNuRCw4REFBOEQ7WUFDOUQsZ0RBQWdEO1lBQ2hELHFDQUFxQztZQUNyQyxzREFBc0Q7U0FDdkQsQ0FBQztRQUNRLHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUE7UUFDNUMsZ0NBQTJCLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQTtRQUNyRCxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUE7UUFDaEQsd0JBQW1CLEdBQVEsRUFBRSxDQUFBO1FBQzdCLG9CQUFlLEdBQUcsRUFBRSxDQUFBO1FBQ3BCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsd0JBQW1CLEdBQUcsS0FBSyxDQUFBO1FBQzNCLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLDJCQUFzQixHQUFVLEVBQUUsQ0FBQztRQUNuQywwQkFBcUIsR0FBUSxJQUFJLENBQUE7UUFDakMsNEJBQXVCLEdBQVUsRUFBRSxDQUFBO1FBRW5DLHVCQUFrQixHQUFHLEVBQUUsQ0FBQTtRQUN2QixxQkFBZ0IsR0FBRyxDQUFDLENBQUE7UUFDcEIsc0JBQWlCLEdBQUcsSUFBSSxDQUFBO1FBQ3hCLHNCQUFpQixHQUFHLEtBQUssQ0FBQTtRQUN6QiwwQkFBcUIsR0FBRyxFQUFFLENBQUE7UUFDMUIseUJBQW9CLEdBQUcsRUFBRSxDQUFBO1FBQ2pCLDRCQUF1QixHQUFHLElBQUksT0FBTyxFQUFVLENBQUE7UUFDL0Msd0JBQW1CLEdBQUcsQ0FBQyxDQUFBO1FBQy9CLHlCQUFvQixHQUFHLEVBQUUsQ0FBQTtRQUN6QixlQUFVLEdBQUcsS0FBSyxDQUFBO1FBQ2xCLHFCQUFnQixHQUFRLElBQUksQ0FBQTtRQUM1QixjQUFTLEdBQUcsRUFBRSxDQUFBO1FBQ2QsMEJBQXFCLEdBQUcsSUFBSSxDQUFBO1FBQzVCLGtDQUE2QixHQUFHLElBQUksQ0FBQTtRQUNwQyx1Q0FBa0MsR0FBRyxLQUFLLENBQUE7UUFDMUMsMkNBQXNDLEdBQUcsS0FBSyxDQUFBO1FBQ3RDLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBZzhCdkMsdUJBQWtCLEdBQUcsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUNsQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFBO1lBQzFCLElBQUksS0FBSyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLEtBQUssQ0FBQyxZQUFZLEdBQUcsRUFBRSxFQUFFO2dCQUNuRSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUE7YUFDdkI7UUFDSCxDQUFDLENBQUE7UUEzN0JDLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDO1FBQzlELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxrQkFBa0IsQ0FBTSxFQUFFLENBQUMsQ0FBQTtRQUNqRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ3hFLENBQUM7SUFFRCxRQUFRO1FBRU4sSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FDL0IsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUNqQixvQkFBb0IsRUFBRSxFQUN0QixTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUN6QixDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQWEsRUFBRSxFQUFFO1lBQzVCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUE7WUFDbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM1QixDQUFDLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQTtRQUU5QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLEVBQUUsQ0FBQTtRQUM5RCxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFO1lBRzNGLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1lBQ3ZCLHlCQUF5QjtTQUMxQjthQUFNO1lBQ0wsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNkLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQTthQUN2QjtZQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7Z0JBQ25DLFlBQVksRUFBRSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO2dCQUMvQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztnQkFDckMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNiLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDakIsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZCLG1CQUFtQixFQUFFLEVBQUU7YUFDeEIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3RFLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO29CQUN6QixZQUFZLEVBQUUsSUFBSTtvQkFDbEIsUUFBUSxFQUFFLElBQUk7b0JBQ2QsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsV0FBVyxFQUFFLEVBQUU7b0JBQ2YsaUJBQWlCLEVBQUUsRUFBRTtvQkFDckIsbUJBQW1CLEVBQUUsRUFBRTtpQkFDeEIsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsNkVBQTZFO2dCQUN2RyxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUU7b0JBQ3BCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2lCQUMvRTtxQkFBTTtvQkFDTCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQztvQkFDM0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUN2RDtnQkFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxzQkFBc0IsRUFBRSxDQUFDO1lBQ3BFLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7Z0JBQzNELElBQUksa0JBQWtCLEdBQUcsS0FBSyxDQUFBO2dCQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO29CQUNoQyxrQkFBa0I7d0JBQ2hCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUVsRCxDQUFDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsa0JBQWtCLEVBQUU7b0JBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUVoRTtnQkFFRCxJQUFJLE1BQU0sS0FBSyxPQUFPLEVBQUU7b0JBQ3RCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUE7b0JBQ2xDLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxLQUFLLENBQUE7aUJBQzNDO3FCQUFNO29CQUNMLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUE7b0JBQ2pDLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxJQUFJLENBQUE7aUJBQzFDO1lBRUgsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQU9ILENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUM7UUFDNUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUE7UUFDdEIsSUFBSSxPQUFPLEdBQUc7WUFDWixlQUFlLEVBQUUsUUFBUSxDQUFDLFFBQVE7WUFDbEMsZUFBZSxFQUFFLElBQUk7WUFDckIsSUFBSSxFQUFFLENBQUM7WUFDUCxLQUFLLEVBQUUsR0FBRztTQUNYLENBQUE7UUFDRCxJQUFJLE9BQU8sUUFBUSxFQUFFLFdBQVcsS0FBSyxRQUFRLEVBQUU7WUFDN0MsT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxXQUFXLENBQUE7U0FDakQ7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQTtRQUV0QixJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2pFLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7Z0JBQzNDLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQTtnQkFDaEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUE7Z0JBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxFQUFFLEtBQUssQ0FBQTtnQkFDM0IsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQTtnQkFDbEMsSUFBSSxDQUFDLDZCQUE2QixHQUFHLEtBQUssQ0FBQTtnQkFDMUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUMsRUFBRTtvQkFDN0IsSUFBRyxJQUFJLEVBQUUsYUFBYSxLQUFLLHVCQUF1QixFQUFFO3dCQUNsRCxRQUFRLEdBQUUsUUFBUSxHQUFDLENBQUMsQ0FBQTtxQkFDckI7Z0JBQ0gsQ0FBQyxDQUFDLENBQUE7Z0JBRUYsSUFBRyxRQUFRLEdBQUcsQ0FBQyxFQUFFO29CQUNmLElBQUksQ0FBQyxrQ0FBa0MsR0FBRyxJQUFJLENBQUE7aUJBQy9DO3FCQUFNO29CQUNMLElBQUksQ0FBQyxrQ0FBa0MsR0FBRyxLQUFLLENBQUE7aUJBQ2hEO2dCQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO2FBQ2hEO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFBO2dCQUNuQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQTtnQkFDdkIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQTtnQkFDbEMsSUFBSSxDQUFDLDZCQUE2QixHQUFHLEtBQUssQ0FBQTthQUMzQztRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxnQkFBZ0I7UUFDcEIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxTQUFTLEtBQUssVUFBVSxFQUFFO1lBQ3ZELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUE7WUFDaEUsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUE7WUFDNUIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUU7Z0JBQ3pDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUE7Z0JBQ2xFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUE7YUFDM0I7WUFFRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO2dCQUNuQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztnQkFDOUQsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQ3ZFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDYixXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQztnQkFDNUMsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLENBQUM7YUFDeEIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7Z0JBQzNELElBQUksa0JBQWtCLEdBQUcsS0FBSyxDQUFBO2dCQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO29CQUNoQyxrQkFBa0I7d0JBQ2hCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUVsRCxDQUFDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsa0JBQWtCLEVBQUU7b0JBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUVoRTtnQkFFRCxJQUFJLE1BQU0sS0FBSyxPQUFPLEVBQUU7b0JBQ3RCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUE7b0JBQ2xDLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxLQUFLLENBQUE7aUJBQzNDO3FCQUFNO29CQUNMLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUE7b0JBQ2pDLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxJQUFJLENBQUE7aUJBQzFDO1lBRUgsQ0FBQyxDQUFDLENBQUM7WUFFSCxxREFBcUQ7WUFDckQsNkVBQTZFO1lBQzdFLGlDQUFpQztZQUNqQyxvREFBb0Q7WUFDcEQsc0JBQXNCO1lBQ3RCLG1CQUFtQjtZQUNuQix1QkFBdUI7WUFDdkIsNEJBQTRCO1lBQzVCLFFBQVE7WUFDUiw0QkFBNEI7WUFDNUIscUZBQXFGO1lBQ3JGLGFBQWE7WUFDYixrRUFBa0U7WUFDbEUsNkRBQTZEO1lBQzdELE1BQU07WUFDTix1RUFBdUU7WUFDdkUsTUFBTTtZQUVOLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRTtnQkFDakQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQTthQUNqRTtZQUVELDhCQUE4QjtTQUMvQjthQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsU0FBUyxLQUFLLE9BQU8sRUFBRTtZQUM1RCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFBO1lBQ2pFLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFBO1lBQzVCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUE7WUFDbEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUMxQixJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUU7Z0JBQ2pELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUE7YUFDakU7WUFDRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO2dCQUNuQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztnQkFDOUQsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQ3ZFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDYixXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQztnQkFDNUMsaUJBQWlCLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLGlCQUFpQixDQUFDO2FBQ3pELENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO2dCQUMzRCxJQUFJLGtCQUFrQixHQUFHLEtBQUssQ0FBQTtnQkFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDaEMsa0JBQWtCO3dCQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFFbEQsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLGtCQUFrQixFQUFFO29CQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFFaEU7Z0JBRUQsSUFBSSxNQUFNLEtBQUssT0FBTyxFQUFFO29CQUN0QixJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFBO29CQUNsQyxJQUFJLENBQUMsNkJBQTZCLEdBQUcsS0FBSyxDQUFBO2lCQUMzQztxQkFBTTtvQkFDTCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFBO29CQUNqQyxJQUFJLENBQUMsNkJBQTZCLEdBQUcsSUFBSSxDQUFBO2lCQUMxQztZQUVILENBQUMsQ0FBQyxDQUFDO1lBRUgscURBQXFEO1lBQ3JELDZFQUE2RTtZQUM3RSxpQ0FBaUM7WUFDakMsb0RBQW9EO1lBQ3BELHNCQUFzQjtZQUN0QixtQkFBbUI7WUFDbkIsdUJBQXVCO1lBQ3ZCLDRCQUE0QjtZQUM1QixRQUFRO1lBQ1IsNEJBQTRCO1lBQzVCLHFGQUFxRjtZQUNyRixhQUFhO1lBQ2Isa0VBQWtFO1lBQ2xFLDZEQUE2RDtZQUM3RCxNQUFNO1lBQ04sdUVBQXVFO1lBQ3ZFLE1BQU07WUFDTixPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQTtZQUNuRCxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUU7Z0JBQ2pELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUE7YUFDakU7U0FDRjtRQUNELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzdELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFBO0lBQzdCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFBO0lBRW5DLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxRQUFhLEVBQUUsT0FBWTtRQUMxQyxNQUFNLFdBQVcsR0FBYSxFQUFFLENBQUM7UUFFakMsS0FBSyxNQUFNLEdBQUcsSUFBSSxRQUFRLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDO2dCQUFFLFNBQVM7WUFFNUMsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVsQyxxRkFBcUY7WUFDckYsTUFBTSxPQUFPLEdBQ1gsT0FBTyxhQUFhLEtBQUssUUFBUTtnQkFDL0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUM7Z0JBQ2hFLENBQUMsQ0FBQyxhQUFhLEtBQUssWUFBWSxDQUFDO1lBRXJDLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ1osV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN2QjtTQUNGO1FBRUQsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELHFCQUFxQjtRQUVuQixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDN0QsTUFBTSxRQUFRLEdBQVEsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUVyQyxRQUFRLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNoRSxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4RCxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDdEUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQzlFLFFBQVEsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsaUJBQWlCLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDLENBQUM7UUFDaEYsTUFBTSxJQUFJLEdBQVMsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUMvRixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN6QixJQUFJLElBQUksRUFBRTtZQUNSLFFBQVEsQ0FBQyxNQUFNLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDOUM7UUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsR0FBRyxpQkFBaUIsRUFBRSxXQUFXLENBQUE7UUFDbEYsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxLQUFLLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3JHLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsY0FBYyxFQUFFLE9BQU8sQ0FBQTtRQUMvRSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ3JELElBQUksQ0FBQyxVQUFVLEtBQUssaUJBQWlCLENBQUMsUUFBUSxDQUMvQyxDQUFDO1FBRUYsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGdCQUFnQixDQUFDO1FBQzVDLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxHQUFHLGdCQUFnQixDQUFBO1FBQ2pFLFlBQVksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUE7UUFDM0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUE7UUFDekQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDbkMsS0FBSyxNQUFNLElBQUksSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDckMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3JDO1FBR0QsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBRXhGLElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtZQUN2RCxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUMsQ0FBQTtZQUMzQyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzlDLElBQUksYUFBYSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2xJLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLCtCQUErQixFQUFFO29CQUNsRSxLQUFLLEVBQUUsT0FBTztvQkFDZCxJQUFJLEVBQUUsRUFBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBQztvQkFDakMsVUFBVSxFQUFFLHFCQUFxQjtvQkFDakMsU0FBUyxFQUFFLE9BQU87b0JBQ2xCLFNBQVMsRUFBRSxNQUFNO29CQUNqQixZQUFZLEVBQUUsSUFBSSxDQUFDLCtDQUErQztpQkFDbkUsQ0FBQyxDQUFDO2dCQUVILFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQ3pDLElBQUksTUFBTSxLQUFLLE9BQU8sRUFBRTt3QkFDdEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO3dCQUM5QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQTt3QkFDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQ0FBcUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsU0FBUyxDQUFDOzRCQUM5SSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQ0FDWixtQkFBbUI7Z0NBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dDQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQTtnQ0FDcEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQTtnQ0FDMUIsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUE7NEJBQ2pDLENBQUM7NEJBQ0QsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0NBQ2YsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQTtnQ0FDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFO29DQUM1QyxRQUFRLEVBQUUsSUFBSTtvQ0FDZCxVQUFVLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztpQ0FDL0IsQ0FBQyxDQUFDO2dDQUNILElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFBO2dDQUNwQixrQ0FBa0M7NEJBQ3BDLENBQUM7eUJBQ0YsQ0FBQyxDQUFDO3FCQUNKO3lCQUFNO3dCQUNMLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFBO3FCQUNoQztnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO2lCQUFNO2dCQUNMLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFBO2FBQ2hDO1NBQ0Y7YUFBTTtZQUNMLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFBO1lBQy9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztTQUNyQztJQUVILENBQUM7SUFHRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUE7UUFDdEIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFBO1FBQy9DLE9BQU8sSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDeEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUE7Z0JBQzNCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFBO2dCQUN2QixxRkFBcUY7Z0JBQ3JGLElBQUksYUFBYSxLQUFLLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtvQkFDL0MsT0FBTyxFQUFFLENBQUE7b0JBQ1QsT0FBTTtpQkFDUDtnQkFDRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFBO2dCQUM1QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQTtnQkFDdEIsSUFBSSxhQUFhLEtBQUssVUFBVSxFQUFFO29CQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7d0JBQ3BCLElBQUksSUFBSSxFQUFFLFNBQVMsS0FBSyxVQUFVLEVBQUU7NEJBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO3lCQUM3QjtvQkFDSCxDQUFDLENBQUMsQ0FBQTtpQkFDSDtxQkFBTSxJQUFJLGFBQWEsS0FBSyxPQUFPLEVBQUU7b0JBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTt3QkFDcEIsSUFBSSxJQUFJLEVBQUUsU0FBUyxLQUFLLE9BQU8sRUFBRTs0QkFDL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7eUJBQzdCO29CQUNILENBQUMsQ0FBQyxDQUFBO2lCQUNIO2dCQUVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDakQsQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsb0JBQW9CLENBQUMsS0FBSztRQUM5QixPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUUzQixJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFBO1FBQ2hFLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsRUFBRSxDQUFBO1FBQ2xFLElBQUksQ0FBQyxhQUFhLENBQUMseUJBQXlCLEdBQUcsRUFBRSxDQUFBO1FBQ2pELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFBO1FBQ3ZDLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFBO1FBRXRCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNkLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFBO1NBQzdCO1FBRUQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQTtRQUMzRixJQUFJLEtBQUssRUFBRSxLQUFLLEtBQUssT0FBTyxFQUFFO1lBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3ZEO2FBQU0sSUFBSSxLQUFLLEVBQUUsS0FBSyxLQUFLLFVBQVUsRUFBRTtZQUN0QyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUN2RDtRQUVELElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUNuRCxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUMxRCxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUE7UUFDdEQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQTtRQUMzRiwrQkFBK0I7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxFQUFFLFFBQVEsRUFBRTtZQUNqRCxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2xELFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2dCQUM5QyxxQ0FBcUM7Z0JBQ3JDLDhDQUE4QztZQUNoRCxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUE7U0FDVDtJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFVO1FBQ3pCLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN2QyxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUE7UUFDeEIsK0NBQStDO1FBQy9DLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLGtCQUFrQixDQUFDLENBQUM7UUFDaEcsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGdCQUFnQixDQUFBO1FBQzNDLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUFDLEVBQUUsQ0FBQTtRQUN2RCxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQTtRQUNqRSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUNsRSxJQUFJLENBQUMsYUFBYSxDQUFDLHlCQUF5QixHQUFHLEVBQUUsQ0FBQTtRQUNqRCxZQUFZLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFBO1FBQzNGLElBQUksa0JBQWtCLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEtBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxVQUFVLENBQUMsRUFBRTtZQUM3RyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsa0JBQWtCLENBQUE7WUFDOUMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEVBQUUsQ0FBQTtZQUMvQixJQUFJLENBQUMsc0JBQXNCLEdBQUcsRUFBRSxDQUFBO1lBQ2hDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDM0I7UUFFRCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQTtJQUM3QixDQUFDO0lBRUQsVUFBVTtJQUVWLENBQUM7SUFFRCxXQUFXO0lBRVgsQ0FBQztJQUVELFdBQVc7UUFDVCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztRQUU5QyxNQUFNLE9BQU8sR0FBRztZQUNkLE1BQU0sRUFBRSxHQUFHO1lBQ1gsUUFBUSxFQUFFLGNBQWM7WUFDeEIsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFO1lBQ3RDLFdBQVcsRUFBRTtnQkFDWCxLQUFLLEVBQUUsQ0FBQztnQkFDUixPQUFPLEVBQUUsSUFBSSxFQUFHLHNDQUFzQzthQUN2RDtZQUNELEtBQUssRUFBRTtnQkFDTCxJQUFJLEVBQUUsSUFBSTtnQkFDVixNQUFNLEVBQUUsSUFBSTtnQkFDWixXQUFXLEVBQUUsVUFBVTthQUN4QjtTQUNGLENBQUM7UUFFRixRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBRS9DLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBVTtRQUNyQixNQUFNLEtBQUssR0FBYSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUMzQyxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDbkIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUVoRSx3REFBd0Q7UUFDeEQsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ2pCLE9BQU8sRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFFeEIsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBRXpDLGNBQWM7UUFDZCxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsUUFBUSxFQUFFO1lBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsK0JBQStCLFFBQVEsUUFBUSxDQUFDO1lBQ25FLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN2QyxPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxDQUFDO1lBQ2xDLE9BQU87U0FDUjtRQUVELE1BQU0sVUFBVSxHQUFXLEVBQUUsQ0FBQztRQUM5QixNQUFNLFlBQVksR0FBYSxFQUFFLENBQUM7UUFDbEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBRWxELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUV0QixhQUFhO1lBQ2IsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsRUFBRTtnQkFDeEIsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLGFBQWEsSUFBSSxDQUFDLGFBQWEsS0FBSyxDQUFDLENBQUM7Z0JBQ3BFLFNBQVM7YUFDVjtZQUVELGFBQWE7WUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMxQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksaUJBQWlCLENBQUMsQ0FBQztnQkFDakQsU0FBUzthQUNWO1lBRUQsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN2QjtRQUVELDBDQUEwQztRQUMxQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsb0JBQW9CLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUVqRSxPQUFPLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hCLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sRUFBRSxzQkFBc0IsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsZUFBZSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDaEQsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBO1lBRVIsT0FBTztTQUNSO1FBRUQsbURBQW1EO1FBQ25ELElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDO1FBRS9CLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyw0QkFBNEIsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1NBQzFFO1FBRUQsT0FBTyxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QixPQUFPLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLENBQUM7UUFDekIsT0FBTyxFQUFFLHNCQUFzQixDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBT0QsV0FBVyxDQUFDLEtBQUs7UUFDZixJQUFJLEtBQUssRUFBRTtZQUNULElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFBO1lBQ2pCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQzVCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxVQUFVLENBQUE7WUFFdEMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFBO1NBQ3ZCO2FBQU07WUFDTCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtTQUNuQjtJQUNILENBQUM7SUFFRCx3QkFBd0I7UUFDdEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFFdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFO1lBQy9CLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN4QyxPQUFPO1NBQ1I7UUFFRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDN0QsSUFBSSxjQUFjLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUVwQyxxQkFBcUI7UUFDckIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUNyRCxJQUFJLENBQUMsVUFBVSxLQUFLLGlCQUFpQixDQUFDLFFBQVEsQ0FDL0MsQ0FBQztRQUVGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxnQkFBZ0IsQ0FBQztRQUU1QyxxQkFBcUI7UUFDckIsY0FBYyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxpQkFBaUIsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7UUFDM0UsY0FBYyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDLENBQUM7UUFFNUUsSUFBSSxpQkFBaUIsQ0FBQyxXQUFXLEVBQUU7WUFDakMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDdkU7UUFFRCxJQUFJLGlCQUFpQixDQUFDLGlCQUFpQixFQUFFO1lBQ3ZDLGNBQWMsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLENBQUM7U0FDM0U7UUFFRCx1QkFBdUI7UUFDdkIsTUFBTSxLQUFLLEdBQ1QsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUU5RSxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXRDLGtDQUFrQztRQUNsQyxJQUFJLEtBQUssRUFBRTtZQUNULElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDeEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQVUsRUFBRSxFQUFFO29CQUMzQixjQUFjLENBQUMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hFLENBQUMsQ0FBQyxDQUFDO2FBQ0o7aUJBQU07Z0JBQ0wsY0FBYyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2pFO1NBQ0Y7UUFFRCx3QkFBd0I7UUFDeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQy9CLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDcEMsSUFBSSxLQUFLLFlBQVksSUFBSSxFQUFFO2dCQUN6QixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxhQUFhLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUM7YUFDcEU7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsS0FBSyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2FBQ2pDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFHSCxxQ0FBcUM7UUFDckMsSUFBSSxHQUFHLEdBQVE7WUFDYixlQUFlLEVBQUUsaUJBQWlCLENBQUMsUUFBUTtZQUMzQyxXQUFXLEVBQUUsaUJBQWlCLENBQUMsaUJBQWlCO1lBQ2hELGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE9BQU87U0FDN0MsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLG9CQUFvQixLQUFLLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxXQUFXLEVBQUU7WUFDMUUsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQzdDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxpQkFBaUIsQ0FBQyxXQUFXLENBQ3BELENBQUM7WUFFRixHQUFHLENBQUMsYUFBYSxHQUFHLGlCQUFpQixDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7WUFDeEQsR0FBRyxDQUFDLGVBQWUsR0FBRyxjQUFjLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztTQUNyRDtRQUlELGNBQWM7UUFDZCxNQUFNLENBQ0osRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFlLDhCQUE4QjtRQUNyRCxRQUFRLENBQUMsSUFBSSxDQUFDLENBQVMsZ0NBQWdDO1NBQ3hEO2FBQ0UsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQ3hCLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUNuRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUMxQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLENBQUMsMEJBQTBCO2dCQUN4RCxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUMxRCxJQUFHLElBQUksSUFBSSxJQUFJLEVBQUUsTUFBTSxLQUFLLFFBQVEsRUFBRTtvQkFDbkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFBO29CQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUcsa0JBQWtCO29CQUMxQyxJQUFJLENBQUMseUNBQXlDLEVBQUUsQ0FBQTtvQkFDaEQsT0FBTztpQkFDVjthQUNGO2lCQUFNO2dCQUVMLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFBO2FBQ3BCO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUNmLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FDWixJQUFJLEVBQUUsTUFBTSxLQUFLLFdBQVc7WUFDNUIsSUFBSSxFQUFFLE1BQU0sS0FBSyxRQUFRLEVBQzNCLElBQUksQ0FBQywyQ0FBMkM7U0FDakQsQ0FDTTthQUNBLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNoQixPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxDQUFBO1lBQ3hDLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLFdBQVcsRUFBRTtnQkFHbEMsSUFBSSxDQUFDLHNDQUFzQyxHQUFHLEtBQUssQ0FBQTtnQkFDdkQsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBRyxrQkFBa0I7Z0JBQzFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3pCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLCtCQUErQixFQUFFO29CQUNsRSxLQUFLLEVBQUUsT0FBTztvQkFDZCxJQUFJLEVBQUUsRUFBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBQztvQkFDakMsVUFBVSxFQUFFLHFCQUFxQjtvQkFDakMsU0FBUyxFQUFFLE9BQU87b0JBQ2xCLFNBQVMsRUFBRSxNQUFNO29CQUNqQixZQUFZLEVBQUUsSUFBSSxDQUFDLCtDQUErQztpQkFDbkUsQ0FBQyxDQUFDO2dCQUVILFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQ3pDLElBQUksTUFBTSxLQUFLLE9BQU8sRUFBRTt3QkFDdEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO3dCQUU5QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQTt3QkFDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQ0FBcUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsU0FBUyxDQUFDOzRCQUM5SSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQ0FDWixtQkFBbUI7Z0NBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dDQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQTtnQ0FDcEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQTtnQ0FDMUIsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUE7NEJBQ2pDLENBQUM7NEJBQ0QsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0NBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFO29DQUM1QyxRQUFRLEVBQUUsSUFBSTtvQ0FDZCxVQUFVLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztpQ0FDL0IsQ0FBQyxDQUFDO2dDQUNILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUE7Z0NBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFBO2dDQUNwQixrQ0FBa0M7NEJBQ3BDLENBQUM7eUJBQ0YsQ0FBQyxDQUFDO3FCQUNKO3lCQUFNLElBQUksTUFBTSxLQUFLLFFBQVEsRUFBRTt3QkFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUE7d0JBQ3BCLGtDQUFrQzt3QkFDbEMsK0JBQStCO3dCQUMvQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQzt3QkFFbkMsNEVBQTRFO3dCQUM1RSwyQ0FBMkM7d0JBQzNDLE1BQU07d0JBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMseUJBQXlCLENBQUM7NEJBQzNELElBQUksRUFBRSxhQUFhLENBQUM7d0JBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMseUJBQXlCLEdBQUcsSUFBSSxFQUFFLGFBQWEsQ0FBQzt3QkFDbkUsWUFBWSxDQUFDLE9BQU8sQ0FDbEIsaUJBQWlCLEVBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FDbkQsQ0FBQzt3QkFFRixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQzt3QkFDbkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRTs0QkFDakMsbUJBQW1CLEVBQUUsUUFBUTt5QkFDOUIsQ0FBQyxDQUFDO3dCQUNILDJCQUEyQjtxQkFFNUI7eUJBQU07d0JBQ0wsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUE7cUJBQ3JCO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBR0o7aUJBQU0sSUFBSSxJQUFJLENBQUMsa0NBQWtDLEVBQUU7Z0JBQ2xELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFBO2dCQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQTtnQkFDdkIsSUFBSSxDQUFDLHNDQUFzQyxHQUFHLElBQUksQ0FBQTtnQkFDbEQsT0FBTzthQUNSO2lCQUNJLElBQUksSUFBSSxFQUFFLE1BQU0sS0FBSyxXQUFXLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxzQ0FBc0MsR0FBRyxLQUFLLENBQUE7Z0JBQ25ELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQTtnQkFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMseUJBQXlCLENBQUM7b0JBQzNELElBQUksRUFBRSxhQUFhLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMseUJBQXlCLEdBQUcsSUFBSSxFQUFFLGFBQWEsQ0FBQztnQkFDbkUsWUFBWSxDQUFDLE9BQU8sQ0FDbEIsaUJBQWlCLEVBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FDbkQsQ0FBQztnQkFFRixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFFbkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0NBQWtDLEVBQUUsR0FBRyxFQUFFO29CQUMxRCxRQUFRLEVBQUUsSUFBSTtvQkFDZCxVQUFVLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztpQkFDakMsQ0FBQyxDQUFDO2dCQUVILElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQzthQUNwQztpQkFBTSxJQUFHLElBQUksSUFBSSxJQUFJLEVBQUUsTUFBTSxLQUFLLFFBQVEsRUFBRTtnQkFDdkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUE7Z0JBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUcsa0JBQWtCO2dCQUMxQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQTtnQkFDakMsT0FBTzthQUNWO1FBRVAsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3RDLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUVuQiwwREFBMEQ7UUFDMUQsSUFBSSxVQUFVLElBQUksQ0FBQyxFQUFFO1lBQ25CLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQywwQ0FBMEM7U0FDM0Q7YUFBTSxJQUFJLFVBQVUsSUFBSSxFQUFFLEVBQUU7WUFDM0IsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLGdEQUFnRDtTQUNqRTthQUFNLElBQUksVUFBVSxJQUFJLEVBQUUsRUFBRTtZQUMzQixVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsb0NBQW9DO1NBQ3JEO2FBQU0sSUFBSSxVQUFVLElBQUksRUFBRSxFQUFFO1lBQzNCLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyx1Q0FBdUM7U0FDeEQ7YUFBTSxJQUFJLFVBQVUsSUFBSSxFQUFFLEVBQUU7WUFDM0IsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLDhDQUE4QztTQUMvRDthQUFNO1lBQ0wsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLG1DQUFtQztTQUNwRDtRQUVELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUN0QyxJQUFJLFVBQVUsS0FBSyxDQUFDO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFFL0IsZ0RBQWdEO1FBQ2hELElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUVuQixJQUFJLFVBQVUsSUFBSSxFQUFFLEVBQUU7WUFDcEIsNENBQTRDO1lBQzVDLFVBQVUsR0FBRyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDckM7YUFBTSxJQUFJLFVBQVUsSUFBSSxFQUFFLEVBQUU7WUFDM0IsZ0RBQWdEO1lBQ2hELFVBQVUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDakQ7YUFBTSxJQUFJLFVBQVUsSUFBSSxFQUFFLEVBQUU7WUFDM0IsbURBQW1EO1lBQ25ELFVBQVUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDakQ7YUFBTSxJQUFJLFVBQVUsSUFBSSxHQUFHLEVBQUU7WUFDNUIsa0RBQWtEO1lBQ2xELFVBQVUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDakQ7YUFBTTtZQUNMLDJEQUEyRDtZQUMzRCxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDOUQ7UUFFRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsbUNBQW1DLENBQUM7UUFFbEUsZ0RBQWdEO1FBQ2hELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzVFLElBQUk7Z0JBQ0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBRTdDLCtCQUErQjtnQkFDL0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDaEYsSUFBSSxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO2dCQUUvRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFFbkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0NBQWtDLEVBQUUsR0FBRyxFQUFFO29CQUMxRCxRQUFRLEVBQUUsSUFBSTtvQkFDZCxVQUFVLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztpQkFDakMsQ0FBQyxDQUFDO2FBQ0o7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDVixPQUFPLENBQUMsS0FBSyxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZ0RBQWdELEVBQUUsR0FBRyxFQUFFO29CQUN4RSxRQUFRLEVBQUUsSUFBSTtvQkFDZCxVQUFVLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztpQkFDL0IsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsc0VBQXNFO0lBQ3RFLDRCQUE0QjtRQUMxQixJQUFJLElBQUksQ0FBQyxzQkFBc0IsS0FBSyxtQ0FBbUMsRUFBRTtZQUN2RSxPQUFPLEdBQUcsQ0FBQztTQUNaO1FBQ0QsT0FBTyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBR0QsVUFBVSxDQUFDLEtBQWE7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU87UUFFakUscUNBQXFDO1FBQ3JDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVuQyw0QkFBNEI7UUFDNUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQztRQUUxRSxnQ0FBZ0M7UUFDaEMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDbEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFDdEIsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQXFCLENBQUM7WUFDdkUsSUFBSSxLQUFLO2dCQUFFLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1NBQzdCO0lBQ0gsQ0FBQztJQUdELGtCQUFrQixDQUFDLGFBQXNCLEVBQUUsSUFBaUI7UUFDMUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNyRCxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQTtZQUMzQixZQUFZLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7WUFDekQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLEVBQUUsZ0JBQWdCLENBQUE7WUFDN0MscUZBQXFGO1lBQ3JGLElBQUksYUFBYSxJQUFJLGFBQWEsS0FBSyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7Z0JBQ2hFLElBQUksRUFBRSxFQUFFLENBQUE7Z0JBQ1IsT0FBTTthQUNQO1lBQ0QsSUFBSSxvQkFBb0IsR0FBRyxFQUFFLENBQUE7WUFDN0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNqQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsU0FBUyxLQUFLLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFO29CQUMzSCxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7aUJBQ2hDO1lBQ0gsQ0FBQyxDQUFDLENBQUE7WUFFRixJQUFJLENBQUMsWUFBWSxHQUFHLG9CQUFvQixDQUFBO1lBQ3hDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQTtZQUNoRCxJQUFJLENBQUMsWUFBWSxHQUFHLG9CQUFvQixDQUFDO1lBQ3pDLElBQUksRUFBRSxFQUFFLENBQUE7UUFDVixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxRQUFRLENBQUMsTUFBZTtRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztJQUMxQixDQUFDO0lBRUQsa0JBQWtCLENBQUMsTUFBZTtRQUNoQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsTUFBTSxDQUFBO1FBQ2pDLElBQUksTUFBTSxFQUFFO1lBQ1YsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFO29CQUNyRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUE7aUJBQzlGO1lBQ0gsQ0FBQyxDQUFDLENBQUE7U0FDSDthQUFNLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQ3JDLGlHQUFpRztZQUNqRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1NBQ3RDO0lBQ0gsQ0FBQztJQVNELGVBQWUsQ0FBQyxLQUFLLEdBQUcsS0FBSztRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQzlCLE9BQU07U0FDUDtRQUNELElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRTtZQUNqRSxPQUFNO1NBQ1A7UUFDRCxJQUFJLEtBQUssRUFBRTtZQUNULElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUE7WUFDekIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQTtTQUM5QjtRQUNELE1BQU0sU0FBUyxHQUFHLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFBO1FBQzVDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUE7UUFDN0IsTUFBTSxPQUFPLEdBQUc7WUFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtZQUM5QixNQUFNLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUM3QixLQUFLLEVBQUUsSUFBSSxDQUFDLHFCQUFxQjtTQUNsQyxDQUFBO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixLQUFLLFVBQVU7WUFDdEQsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQztZQUNqRixDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDNUUsT0FBTyxDQUFDLFNBQVMsQ0FBQztZQUNoQixJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDWixJQUFJLFNBQVMsS0FBSyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7b0JBQzFDLE9BQU07aUJBQ1A7Z0JBQ0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQTtnQkFDOUIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQTtnQkFDeEUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLGtCQUFrQixDQUFBO2dCQUNqRSxJQUFJLENBQUMsZ0JBQWdCLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQTtnQkFDckMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO29CQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxLQUFLLElBQUksRUFBRSxVQUFVLENBQUMsRUFBRTt3QkFDdEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7cUJBQy9CO2dCQUNILENBQUMsQ0FBQyxDQUFBO2dCQUNGLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFBO2dCQUN4RixJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQTtnQkFDckMsSUFBSSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxVQUFVLEVBQUU7b0JBQ3JHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLDJDQUEyQyxFQUFFLEdBQUcsRUFBRTt3QkFDbkUsUUFBUSxFQUFFLElBQUk7d0JBQ2QsVUFBVSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7cUJBQy9CLENBQUMsQ0FBQztvQkFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtvQkFDMUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFBO29CQUN0RCxZQUFZLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFBO2lCQUM1RjtZQUNILENBQUM7WUFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUNWLElBQUksU0FBUyxLQUFLLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtvQkFDMUMsT0FBTTtpQkFDUDtnQkFDRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFBO1lBQ2hDLENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLDhFQUE4RTtJQUM5RSxnRkFBZ0Y7SUFDaEYsOEJBQThCO1FBQzVCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEtBQUssQ0FBQTtRQUNsRSxJQUFJLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO2VBQ3ZDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxLQUFLLFVBQVUsQ0FBQyxFQUFFO1lBQ3hFLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxFQUFFLENBQUE7WUFDakMsT0FBTTtTQUNQO1FBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxLQUFLLFVBQVUsQ0FBQztlQUN2RSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxVQUFVLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztlQUMzRixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3ZILElBQUksQ0FBQyx1QkFBdUIsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUMzRCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQUs7UUFDZCxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1lBQy9DLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBRTNDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDL0MsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQ3BDLENBQUM7U0FDSDthQUFNO1lBQ0wsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFBO1NBQ3RDO0lBRUgsQ0FBQztJQUVELG9CQUFvQixDQUFDLEtBQUs7UUFDeEIsTUFBTSxLQUFLLEdBQUcsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFDbkYsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUNqRCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUE7UUFDNUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFBO1FBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUE7SUFDMUIsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQztRQUU1QyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFDcEcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQixFQUFFLENBQUE7UUFDOUQsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRTtZQUMzRixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtTQUNuRjtRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUcvRixJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQTtRQUVqRSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLEtBQUssUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVGLElBQUksY0FBYyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxjQUFjLENBQUE7U0FDNUM7UUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLGNBQWMsRUFBRSxPQUFPLENBQUE7UUFDL0UsWUFBWSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQTtRQUMzRixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQTtJQUM3QixDQUFDO0lBRUEsa0JBQWtCO1FBRWpCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO0lBRWpELENBQUM7SUFFRCwwQkFBMEI7UUFDeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzREFBc0QsQ0FBQyxDQUFBO1FBQ3BFLGdFQUFnRTtRQUMvRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQywrQkFBK0IsRUFBRTtZQUM5RCxLQUFLLEVBQUUsT0FBTztZQUNkLElBQUksRUFBRSxFQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxtQkFBbUIsR0FBRTtZQUM3RCxVQUFVLEVBQUUscUJBQXFCO1lBQ2pDLFNBQVMsRUFBRSxPQUFPO1lBQ2xCLFNBQVMsRUFBRSxNQUFNO1lBQ2pCLFlBQVksRUFBRSxJQUFJLENBQUMsK0NBQStDO1NBQ25FLENBQUMsQ0FBQztRQUVELFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDekMsSUFBSSxNQUFNLEtBQUssT0FBTyxFQUFFO2dCQUN0QixPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQzlCLElBQUksQ0FBQyx5Q0FBeUMsRUFBRSxDQUFBO2dCQUNoRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQTthQUNwQjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQTthQUNyQjtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ1YsQ0FBQztJQUVELHlDQUF5QztRQUN0QyxJQUFJLENBQUMsYUFBYSxDQUFDLHFDQUFxQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDckksSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ1osbUJBQW1CO2dCQUNuQixPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUE7Z0JBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUE7Z0JBQzFCLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFBO1lBQ2pDLENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDZixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUU7b0JBQzVDLFFBQVEsRUFBRSxJQUFJO29CQUNkLFVBQVUsRUFBRSxDQUFDLGdCQUFnQixDQUFDO2lCQUMvQixDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQTtnQkFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUE7Z0JBQ3BCLGtDQUFrQztZQUNwQyxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ2YsQ0FBQzsrR0E3c0NVLDhCQUE4QjttR0FBOUIsOEJBQThCLDBlQ3BCM0MseTNZQXlOTTs7NEZEck1PLDhCQUE4QjtrQkFMMUMsU0FBUzsrQkFDRSw2QkFBNkI7aVFBS0ssVUFBVTtzQkFBckQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUVqQyxlQUFlO3NCQUF2QixLQUFLO2dCQStESSxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csMkJBQTJCO3NCQUFwQyxNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBUzJDLGdCQUFnQjtzQkFBakUsU0FBUzt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcbmltcG9ydCBodG1sMnBkZiBmcm9tICdodG1sMnBkZi5qcyc7XG5pbXBvcnQgeyBEZWxldGVSb2xlTWFwcGluZ1BvcHVwQ29tcG9uZW50IH0gZnJvbSAnLi4vZGVsZXRlLXJvbGUtbWFwcGluZy1wb3B1cC9kZWxldGUtcm9sZS1tYXBwaW5nLXBvcHVwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgaW50ZXJ2YWwsIG9mLCBjb25jYXQsIFJlcGxheVN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFrZVdoaWxlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyB0YWtlVW50aWwsIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNYXRTZWxlY3QgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFNoYXJlZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9tb2R1bGVzL3NoYXJlZC9zZXJ2aWNlcy9zaGFyZWQuc2VydmljZSc7XG5pbXBvcnQgeyBSb2xlTWFwcGluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9tb2R1bGVzL3NoYXJlZC9zZXJ2aWNlcy9yb2xlLW1hcHBpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBFdmVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9tb2R1bGVzL3NoYXJlZC9zZXJ2aWNlcy9ldmVudC5zZXJ2aWNlJztcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1yb2xlLW1hcHBpbmctZ2VuZXJhdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9yb2xlLW1hcHBpbmctZ2VuZXJhdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JvbGUtbWFwcGluZy1nZW5lcmF0aW9uLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUm9sZU1hcHBpbmdHZW5lcmF0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoJ3BkZkNvbnRlbnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgcGRmQ29udGVudCE6IEVsZW1lbnRSZWY7XG4gIFxuICBASW5wdXQoKSBsb2dpblN0YXR1c0ZsYWcgPSBmYWxzZVxuICB0aXRsZSA9ICdzdW5iaXJkLWNiLXN0YXRpY3dlYic7XG4gIGlzTWFpbnRlbmFuY2VQYWdlOiBhbnlcbiAgc2VsZWN0ZWRWYWx1ZSA9ICcnXG4gIHNlYXJjaFRleHQgPSAnJ1xuICBkYXRhU291cmNlOiBhbnlcbiAgZGlzcGxheWVkQ29sdW1uczogc3RyaW5nW10gPSBbJ1JlcXVlc3RJZCcsICd0aXRsZScsICdyZXF1ZXN0b3InLCAncmVxdWVzdFR5cGUnLFxuICAgICdyZXF1ZXN0U3RhdHVzJywgJ2Fzc2lnbmVlJywgJ3JlcXVlc3RlZE9uJywgJ2ludGVyZXN0cycsICdhY3Rpb24nXVxuICBzZWxlY3RlZE1pbmlzdHJ5VHlwZTogc3RyaW5nID0gJ21pbmlzdHJ5JztcbiAgbWluaXN0cnlEYXRhOiBhbnkgPSBbXVxuICBtaW5pc3RyeUZ1bGxEYXRhOiBhbnkgPSBbXVxuICByb2xlTWFwcGluZ0Zvcm0hOiBGb3JtR3JvdXA7XG4gIGRpc2FibGVCdG4gPSB0cnVlXG4gIHNlY3RvckRhdGEgPSBbXG4gICAge1xuICAgICAgdmFsdWU6ICdXb21lbiBhbmQgY2hpbGQgZGV2ZWxvcG1lbnQnXG4gICAgfSxcbiAgICB7XG4gICAgICB2YWx1ZTogJ1J1cmFsIGRldmVsb3BtZW50J1xuICAgIH0sXG4gICAge1xuICAgICAgdmFsdWU6ICdVcmJhbiBkZXZlbG9wbWVudCdcbiAgICB9LFxuICAgIHtcbiAgICAgIHZhbHVlOiAnSGVhbHRoY2FyZSdcbiAgICB9LFxuICAgIHtcbiAgICAgIHZhbHVlOiAnQWdyaWN1bHR1cmUnXG4gICAgfSxcbiAgICB7XG4gICAgICB2YWx1ZTogJ090aGVycydcbiAgICB9XG5cbiAgXVxuICBkZXBhcnRtZW50RGF0YTogYW55W10gPSBbXVxuICBsb2FkaW5nID0gZmFsc2VcbiAgbWF4RmlsZVNpemVNQiA9IDI1O1xuICBhbGxvd2VkVHlwZXMgPSBbXG4gICAgJ2FwcGxpY2F0aW9uL3BkZicsXG4gICAgJ2FwcGxpY2F0aW9uL21zd29yZCcsXG4gICAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50JyxcbiAgICAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsJyxcbiAgICAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnLFxuICAgICd0ZXh0L3BsYWluJ1xuICBdO1xuICB1cGxvYWRFcnJvcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHVwbG9hZGVkRmlsZTogRmlsZVtdIHwgbnVsbCA9IG51bGw7XG4gIGxvZ2luID0gZmFsc2VcbiAgY2JwRmluYWxPYmo6IGFueSA9IHt9XG4gIHNlbGVjdGVkTWluaXN0cnlJZCA9ICcnXG4gIG9yaWdpbmFsRm9ybVZhbHVlczogYW55XG4gIGNodW5rczogc3RyaW5nW10gPSBbXTtcbiAgZnVsbEpzb246IHN0cmluZyA9ICcnO1xuICBwYXJzZWREYXRhOiBhbnk7XG4gIGN1cnJlbnRQcm9jZXNzaW5nU3RhZ2U6IHN0cmluZyA9ICcnO1xuICBwcm9jZXNzaW5nU3RhZ2VzID0gW1xuICAgICdJbml0aWFsaXppbmcgQ0JQIFBsYW4gZ2VuZXJhdGlvbi4uLicsXG4gICAgJ0FuYWx5emluZyBkZXBhcnRtZW50YWwgY29tcGV0ZW5jeSByZXF1aXJlbWVudHMuLi4nLFxuICAgICdQcm9jZXNzaW5nIHdvcmsgb3JkZXIgc3BlY2lmaWNhdGlvbnMgYW5kIHJvbGUgZGVmaW5pdGlvbnMuLi4nLFxuICAgICdHZW5lcmF0aW5nIGRldGFpbGVkIHJvbGVzICYgcmVzcG9zaWJpbGl0aWVzLi4uJyxcbiAgICAnR2VuZXJhdGluZyBkZXRhaWxlZCBjb21wZXRlbmNpZXMuLi4nLFxuICAgICdWYWxpZGF0aW5nIHJvbGUgbWFwcGluZyAgYW5kIGZpbmFsaXppbmcgdGhlIENCUCBQbGFuJ1xuICBdO1xuICBAT3V0cHV0KCkgc3VjY2Vzc1JvbGVNYXBwaW5nID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQE91dHB1dCgpIGFscmVhZHlBdmFpbGFibGVSb2xlTWFwcGluZyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBPdXRwdXQoKSBsb2dpblN1Y2Nlc3MgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBzZWxlY3RlZE1pbmlzdHJ5T2JqOiBhbnkgPSAnJ1xuICBsb2dpblVzZXJPcmdJZHMgPSBbXVxuICBwYW5lbE9wZW4gPSBmYWxzZTtcbiAgZGVwYXJ0bWVudFBhbmVsT3BlbiA9IGZhbHNlXG4gIGZpbHRlcmVkTGlzdCA9IFtdO1xuICBmaWx0ZXJlZERlcGFydG1lbnRMaXN0OiBhbnlbXSA9IFtdO1xuICBzZWxlY3RlZERlcGFydG1lbnRPYmo6IGFueSA9IG51bGxcbiAgcGlubmVkRGVwYXJ0bWVudE9wdGlvbnM6IGFueVtdID0gW11cbiAgQFZpZXdDaGlsZCgnZGVwYXJ0bWVudFNlbGVjdCcsIHsgc3RhdGljOiBmYWxzZSB9KSBkZXBhcnRtZW50U2VsZWN0ITogTWF0U2VsZWN0O1xuICBkZXBhcnRtZW50UGFnZVNpemUgPSA1MFxuICBkZXBhcnRtZW50T2Zmc2V0ID0gMFxuICBkZXBhcnRtZW50SGFzTW9yZSA9IHRydWVcbiAgZGVwYXJ0bWVudExvYWRpbmcgPSBmYWxzZVxuICBkZXBhcnRtZW50U2VhcmNoUXVlcnkgPSAnJ1xuICBkZXBhcnRtZW50TWluaXN0cnlJZCA9ICcnXG4gIHByaXZhdGUgZGVwYXJ0bWVudFNlYXJjaFN1YmplY3QgPSBuZXcgU3ViamVjdDxzdHJpbmc+KClcbiAgcHJpdmF0ZSBkZXBhcnRtZW50UmVxdWVzdElkID0gMFxuICBvcmlnaW5hbE1pbmlzdHJ5RGF0YSA9IFtdXG4gIGFwaUxvYWRpbmcgPSBmYWxzZVxuICBmaXJzdEFwaVJlc3BvbnNlOiBhbnkgPSBudWxsXG4gIGRvY3VtZW50cyA9IFtdXG4gIGRpc2FibGVVcGxvYWREb2N1bWVudCA9IHRydWVcbiAgZGlzYWJsZVVwbG9hZERvY3VtZW50T3JpZ2luYWwgPSB0cnVlXG4gIHdvcmtBbGxvY2F0aW9uT3JkZXJEb2N1bWVudE1pc3NpbmcgPSBmYWxzZVxuICBzaG93V29ya0FsbG9jYXRpb25PcmRlckRvY3VtZW50TWlzc2luZyA9IGZhbHNlXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGV2ZW50U3ZjOiBFdmVudFNlcnZpY2UsXG4gICAgcHVibGljIHNoYXJlZFNlcnZpY2U6IFNoYXJlZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogTWF0U25hY2tCYXIsXG4gICAgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgIHB1YmxpYyByb2xlTWFwcGluZ1NlcnZpY2U6IFJvbGVNYXBwaW5nU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXG4gICkge1xuICAgIHRoaXMucm91dGVyLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRSZXVzZVJvdXRlID0gKCkgPT4gZmFsc2U7XG4gICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZTxhbnk+KFtdKVxuICAgIHRoaXMuaXNNYWludGVuYW5jZVBhZ2UgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnL21haW50ZW5hbmNlJylcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuXG4gICAgdGhpcy5kZXBhcnRtZW50U2VhcmNoU3ViamVjdC5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lKDMwMCksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgKS5zdWJzY3JpYmUoKHF1ZXJ5OiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMuZGVwYXJ0bWVudFNlYXJjaFF1ZXJ5ID0gcXVlcnlcbiAgICAgIHRoaXMubG9hZERlcGFydG1lbnRzKHRydWUpXG4gICAgfSlcblxuICAgIHRoaXMubG9naW4gPSB0aGlzLnNoYXJlZFNlcnZpY2UuY2hlY2tJZkxvZ2luKClcblxuICAgIHRoaXMuY2JwRmluYWxPYmogPSB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0Q0JQUGxhbkxvY2FsU3RvcmFnZSgpXG4gICAgaWYgKHRoaXMuY2JwRmluYWxPYmogJiYgdGhpcy5jYnBGaW5hbE9iaj8ubWluaXN0cnkgJiYgdGhpcy5jYnBGaW5hbE9iaj8ubWluaXN0cnk/LnNiT3JnVHlwZSkge1xuXG5cbiAgICAgIHRoaXMuZWRpdE1pbmlzdHJ5Rm9ybSgpXG4gICAgICAvLyB0aGlzLmdldE1pbmlzdHJ5RGF0YSgpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmxvZ2luKSB7XG4gICAgICAgIHRoaXMuZ2V0TWluaXN0cnlEYXRhKClcbiAgICAgIH1cbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIG1pbmlzdHJ5VHlwZTogWydtaW5pc3RyeScsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICBtaW5pc3RyeTogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICBzZWN0b3JzOiBbW11dLFxuICAgICAgICBkZXBhcnRtZW50czogWycnXSwgLy8gc2hvd24gb25seSBpZiBtaW5pc3RyeVR5cGUgPT0gJ3N0YXRlJ1xuICAgICAgICBhZGRpdGlvbmFsRGV0YWlsczogWycnXSxcbiAgICAgICAgYWRkaXRpb25hbF9kb2N1bWVudDogW11cbiAgICAgIH0pO1xuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdzZWN0b3JzJyk/LnNldFZhbHVlKFtdKTtcbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnbWluaXN0cnlUeXBlJyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodHlwZSA9PiB7XG4gICAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLnJlc2V0KHtcbiAgICAgICAgICBtaW5pc3RyeVR5cGU6IHR5cGUsIC8vIEtlZXAgdGhlIGNoYW5nZWQgdmFsdWVcbiAgICAgICAgICBtaW5pc3RyeTogbnVsbCxcbiAgICAgICAgICBzZWN0b3JzOiBbXSxcbiAgICAgICAgICBkZXBhcnRtZW50czogW10sXG4gICAgICAgICAgYWRkaXRpb25hbERldGFpbHM6ICcnLFxuICAgICAgICAgIGFkZGl0aW9uYWxfZG9jdW1lbnQ6IFtdXG4gICAgICAgIH0sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTsgLy8gYXZvaWQgcmUtZW1pdHRpbmcgbWluaXN0cnlUeXBlJ3Mgb3duIHZhbHVlQ2hhbmdlcyBhbmQgcmVjdXJzaW5nIGluZmluaXRlbHlcbiAgICAgICAgaWYgKHR5cGUgPT09ICdzdGF0ZScpIHtcbiAgICAgICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LmNsZWFyVmFsaWRhdG9ycygpO1xuICAgICAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnZGVwYXJ0bWVudHMnKT8uc2V0VmFsdWUoW10pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnZGVwYXJ0bWVudHMnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSgoc3RhdHVzOiBhbnkpID0+IHtcbiAgICAgICAgbGV0IGhhc1VwbG9hZERvY3VtZW50cyA9IGZhbHNlXG4gICAgICAgIHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIGhhc1VwbG9hZERvY3VtZW50cyA9XG4gICAgICAgICAgICB0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoJy91cGxvYWQtZG9jdW1lbnRzJyk7XG5cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghaGFzVXBsb2FkRG9jdW1lbnRzKSB7XG4gICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNoZWNrUm9sZU1hcHBpbmdGb3JtVmFsaWRhdGlvbi5uZXh0KHN0YXR1cyk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0dXMgPT09ICdWQUxJRCcpIHtcbiAgICAgICAgICB0aGlzLmRpc2FibGVVcGxvYWREb2N1bWVudCA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnRPcmlnaW5hbCA9IGZhbHNlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnQgPSB0cnVlXG4gICAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnRPcmlnaW5hbCA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICB9KTtcbiAgICB9XG5cblxuXG5cblxuXG4gIH1cblxuICBnZXRVcGxvYWRlZERvY3VtZW50cygpIHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMucm9sZU1hcHBpbmdGb3JtLnZhbHVlO1xuICAgIHRoaXMuYXBpTG9hZGluZyA9IHRydWVcbiAgICBsZXQgcmVxQm9keSA9IHtcbiAgICAgIHN0YXRlX2NlbnRlcl9pZDogZm9ybURhdGEubWluaXN0cnksXG4gICAgICBpbmNsdWRlX3N1bW1hcnk6IHRydWUsXG4gICAgICBza2lwOiAwLFxuICAgICAgbGltaXQ6IDIwMFxuICAgIH1cbiAgICBpZiAodHlwZW9mIGZvcm1EYXRhPy5kZXBhcnRtZW50cyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJlcUJvZHlbJ2RlcGFydG1lbnRfaWQnXSA9IGZvcm1EYXRhPy5kZXBhcnRtZW50c1xuICAgIH1cbiAgICB0aGlzLmFwaUxvYWRpbmcgPSB0cnVlXG5cbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0VXBsb2FkZWREb2N1bWVudHMocmVxQm9keSkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgIGlmIChyZXMgJiYgcmVzPy5pdGVtcyAmJiByZXM/Lml0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgbGV0IHdBT0NvdW50ID0gMFxuICAgICAgICB0aGlzLmFwaUxvYWRpbmcgPSBmYWxzZVxuICAgICAgICB0aGlzLmRvY3VtZW50cyA9IHJlcz8uaXRlbXNcbiAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnQgPSBmYWxzZVxuICAgICAgICB0aGlzLmRpc2FibGVVcGxvYWREb2N1bWVudE9yaWdpbmFsID0gZmFsc2VcbiAgICAgICAgdGhpcy5kb2N1bWVudHMuZm9yRWFjaCgoaXRlbSk9PntcbiAgICAgICAgICBpZihpdGVtPy5kb2N1bWVudF90eXBlID09PSAnV29yayBBbGxvY2F0aW9uIE9yZGVyJykge1xuICAgICAgICAgICAgd0FPQ291bnQgPXdBT0NvdW50KzFcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYod0FPQ291bnQgPCAxKSB7XG4gICAgICAgICAgdGhpcy53b3JrQWxsb2NhdGlvbk9yZGVyRG9jdW1lbnRNaXNzaW5nID0gdHJ1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMud29ya0FsbG9jYXRpb25PcmRlckRvY3VtZW50TWlzc2luZyA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNvbnNvbGUubG9nKCd0aGlzLmRvY3VtZW50cy0tJywgdGhpcy5kb2N1bWVudHMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRvY3VtZW50cyA9IFtdXG4gICAgICAgIHRoaXMuYXBpTG9hZGluZyA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50ID0gZmFsc2VcbiAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnRPcmlnaW5hbCA9IGZhbHNlXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jIGVkaXRNaW5pc3RyeUZvcm0oKSB7XG4gICAgaWYgKHRoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5LnNiT3JnVHlwZSA9PT0gJ21pbmlzdHJ5Jykge1xuICAgICAgdGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSA9IHRoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5LnNiT3JnVHlwZVxuICAgICAgYXdhaXQgdGhpcy5nZXRNaW5pc3RyeURhdGEoKVxuICAgICAgaWYgKHRoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5Py5zYk9yZ1R5cGUpIHtcbiAgICAgICAgdGhpcy5kZXBhcnRtZW50TWluaXN0cnlJZCA9IHRoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5Py5pZGVudGlmaWVyXG4gICAgICAgIHRoaXMubG9hZERlcGFydG1lbnRzKHRydWUpXG4gICAgICB9XG5cbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIG1pbmlzdHJ5VHlwZTogW3RoaXMuc2VsZWN0ZWRNaW5pc3RyeVR5cGUsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICBtaW5pc3RyeTogW3RoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5Py5pZGVudGlmaWVyLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgc2VjdG9yczogW1tdXSxcbiAgICAgICAgZGVwYXJ0bWVudHM6IFt0aGlzLmNicEZpbmFsT2JqPy5kZXBhcnRtZW50c10sIC8vIHNob3duIG9ubHkgaWYgbWluaXN0cnlUeXBlID09ICdzdGF0ZSdcbiAgICAgICAgYWRkaXRpb25hbERldGFpbHM6IFsnJ11cbiAgICAgIH0pO1xuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUoKHN0YXR1czogYW55KSA9PiB7XG4gICAgICAgIGxldCBoYXNVcGxvYWREb2N1bWVudHMgPSBmYWxzZVxuICAgICAgICB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBoYXNVcGxvYWREb2N1bWVudHMgPVxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCcvdXBsb2FkLWRvY3VtZW50cycpO1xuXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWhhc1VwbG9hZERvY3VtZW50cykge1xuICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jaGVja1JvbGVNYXBwaW5nRm9ybVZhbGlkYXRpb24ubmV4dChzdGF0dXMpO1xuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdHVzID09PSAnVkFMSUQnKSB7XG4gICAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnQgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50T3JpZ2luYWwgPSBmYWxzZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50ID0gdHJ1ZVxuICAgICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50T3JpZ2luYWwgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgfSk7XG5cbiAgICAgIC8vIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnc2VjdG9ycycpPy5zZXRWYWx1ZShbXSk7XG4gICAgICAvLyB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ21pbmlzdHJ5VHlwZScpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHR5cGUgPT4ge1xuICAgICAgLy8gICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5yZXNldCh7XG4gICAgICAvLyAgICAgbWluaXN0cnlUeXBlOiB0eXBlLCAvLyBLZWVwIHRoZSBjaGFuZ2VkIHZhbHVlXG4gICAgICAvLyAgICAgbWluaXN0cnk6IG51bGwsXG4gICAgICAvLyAgICAgc2VjdG9yczogW10sXG4gICAgICAvLyAgICAgZGVwYXJ0bWVudHM6IFtdLFxuICAgICAgLy8gICAgIGFkZGl0aW9uYWxEZXRhaWxzOiAnJ1xuICAgICAgLy8gICB9KTtcbiAgICAgIC8vICAgaWYgKHR5cGUgPT09ICdzdGF0ZScpIHtcbiAgICAgIC8vICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcbiAgICAgIC8vICAgfSBlbHNlIHtcbiAgICAgIC8vICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LmNsZWFyVmFsaWRhdG9ycygpO1xuICAgICAgLy8gICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnZGVwYXJ0bWVudHMnKT8uc2V0VmFsdWUoW10pO1xuICAgICAgLy8gICB9XG4gICAgICAvLyAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnZGVwYXJ0bWVudHMnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgLy8gfSk7XG5cbiAgICAgIGlmICh0aGlzLm1pbmlzdHJ5RGF0YSAmJiB0aGlzLm1pbmlzdHJ5RGF0YS5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1pbmlzdHJ5SWQgPSB0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeT8uaWRlbnRpZmllclxuICAgICAgfVxuXG4gICAgICAvL3RoaXMub25HZW5lcmF0ZVJvbGVNYXBwaW5nKClcbiAgICB9IGVsc2UgaWYgKHRoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5Py5zYk9yZ1R5cGUgPT09ICdzdGF0ZScpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNaW5pc3RyeVR5cGUgPSB0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeT8uc2JPcmdUeXBlXG4gICAgICBhd2FpdCB0aGlzLmdldE1pbmlzdHJ5RGF0YSgpXG4gICAgICB0aGlzLmRlcGFydG1lbnRNaW5pc3RyeUlkID0gdGhpcy5jYnBGaW5hbE9iaj8ubWluaXN0cnk/LmlkZW50aWZpZXJcbiAgICAgIHRoaXMubG9hZERlcGFydG1lbnRzKHRydWUpXG4gICAgICBpZiAodGhpcy5taW5pc3RyeURhdGEgJiYgdGhpcy5taW5pc3RyeURhdGEubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNaW5pc3RyeUlkID0gdGhpcy5jYnBGaW5hbE9iaj8ubWluaXN0cnk/LmlkZW50aWZpZXJcbiAgICAgIH1cbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIG1pbmlzdHJ5VHlwZTogW3RoaXMuc2VsZWN0ZWRNaW5pc3RyeVR5cGUsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICBtaW5pc3RyeTogW3RoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5Py5pZGVudGlmaWVyLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgc2VjdG9yczogW1tdXSxcbiAgICAgICAgZGVwYXJ0bWVudHM6IFt0aGlzLmNicEZpbmFsT2JqPy5kZXBhcnRtZW50c10sIC8vIHNob3duIG9ubHkgaWYgbWluaXN0cnlUeXBlID09ICdzdGF0ZSdcbiAgICAgICAgYWRkaXRpb25hbERldGFpbHM6IFt0aGlzLmNicEZpbmFsT2JqPy5hZGRpdGlvbmFsRGV0YWlsc11cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSgoc3RhdHVzOiBhbnkpID0+IHtcbiAgICAgICAgbGV0IGhhc1VwbG9hZERvY3VtZW50cyA9IGZhbHNlXG4gICAgICAgIHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIGhhc1VwbG9hZERvY3VtZW50cyA9XG4gICAgICAgICAgICB0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoJy91cGxvYWQtZG9jdW1lbnRzJyk7XG5cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghaGFzVXBsb2FkRG9jdW1lbnRzKSB7XG4gICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNoZWNrUm9sZU1hcHBpbmdGb3JtVmFsaWRhdGlvbi5uZXh0KHN0YXR1cyk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0dXMgPT09ICdWQUxJRCcpIHtcbiAgICAgICAgICB0aGlzLmRpc2FibGVVcGxvYWREb2N1bWVudCA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnRPcmlnaW5hbCA9IGZhbHNlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnQgPSB0cnVlXG4gICAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnRPcmlnaW5hbCA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICB9KTtcblxuICAgICAgLy8gdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdzZWN0b3JzJyk/LnNldFZhbHVlKFtdKTtcbiAgICAgIC8vIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnbWluaXN0cnlUeXBlJyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodHlwZSA9PiB7XG4gICAgICAvLyAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLnJlc2V0KHtcbiAgICAgIC8vICAgICBtaW5pc3RyeVR5cGU6IHR5cGUsIC8vIEtlZXAgdGhlIGNoYW5nZWQgdmFsdWVcbiAgICAgIC8vICAgICBtaW5pc3RyeTogbnVsbCxcbiAgICAgIC8vICAgICBzZWN0b3JzOiBbXSxcbiAgICAgIC8vICAgICBkZXBhcnRtZW50czogW10sXG4gICAgICAvLyAgICAgYWRkaXRpb25hbERldGFpbHM6ICcnXG4gICAgICAvLyAgIH0pO1xuICAgICAgLy8gICBpZiAodHlwZSA9PT0gJ3N0YXRlJykge1xuICAgICAgLy8gICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnZGVwYXJ0bWVudHMnKT8uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xuICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgLy8gICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnZGVwYXJ0bWVudHMnKT8uY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICAvLyAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy5zZXRWYWx1ZShbXSk7XG4gICAgICAvLyAgIH1cbiAgICAgIC8vICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAvLyB9KTtcbiAgICAgIGNvbnNvbGUubG9nKCd0aGlzLm1pbmlzdHJ5RGF0YScsIHRoaXMubWluaXN0cnlEYXRhKVxuICAgICAgaWYgKHRoaXMubWluaXN0cnlEYXRhICYmIHRoaXMubWluaXN0cnlEYXRhLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkTWluaXN0cnlJZCA9IHRoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5Py5pZGVudGlmaWVyXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMub3JpZ2luYWxGb3JtVmFsdWVzID0gdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0UmF3VmFsdWUoKTtcbiAgICB0aGlzLmdldFVwbG9hZGVkRG9jdW1lbnRzKClcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIHRoaXMubG9naW4gPSB0aGlzLmxvZ2luU3RhdHVzRmxhZ1xuXG4gIH1cblxuICBnZXRDaGFuZ2VkRmllbGRzKG9yaWdpbmFsOiBhbnksIGN1cnJlbnQ6IGFueSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjaGFuZ2VkS2V5czogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAoY29uc3Qga2V5IGluIG9yaWdpbmFsKSB7XG4gICAgICBpZiAoIW9yaWdpbmFsLmhhc093blByb3BlcnR5KGtleSkpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCBvcmlnaW5hbFZhbHVlID0gb3JpZ2luYWxba2V5XTtcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGN1cnJlbnRba2V5XTtcblxuICAgICAgLy8gRm9yIGFycmF5cyBhbmQgb2JqZWN0cywgdXNlIEpTT04uc3RyaW5naWZ5IChvciBsb2Rhc2ggaXNFcXVhbCBmb3IgZGVlcCBjb21wYXJpc29uKVxuICAgICAgY29uc3QgaXNFcXVhbCA9XG4gICAgICAgIHR5cGVvZiBvcmlnaW5hbFZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkob3JpZ2luYWxWYWx1ZSkgPT09IEpTT04uc3RyaW5naWZ5KGN1cnJlbnRWYWx1ZSlcbiAgICAgICAgICA6IG9yaWdpbmFsVmFsdWUgPT09IGN1cnJlbnRWYWx1ZTtcblxuICAgICAgaWYgKCFpc0VxdWFsKSB7XG4gICAgICAgIGNoYW5nZWRLZXlzLnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2hhbmdlZEtleXM7XG4gIH1cblxuICBvbkdlbmVyYXRlUm9sZU1hcHBpbmcoKTogYW55IHtcblxuICAgIGNvbnN0IGN1cnJlbnRGb3JtVmFsdWVzID0gdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0UmF3VmFsdWUoKTtcbiAgICBjb25zdCBmb3JtRGF0YTogYW55ID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ21pbmlzdHJ5VHlwZScsIGN1cnJlbnRGb3JtVmFsdWVzLm1pbmlzdHJ5VHlwZSk7XG4gICAgZm9ybURhdGEuYXBwZW5kKCdtaW5pc3RyeScsIGN1cnJlbnRGb3JtVmFsdWVzLm1pbmlzdHJ5KTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ3NlY3RvcnMnLCBKU09OLnN0cmluZ2lmeShjdXJyZW50Rm9ybVZhbHVlcy5zZWN0b3JzKSk7XG4gICAgZm9ybURhdGEuYXBwZW5kKCdkZXBhcnRtZW50cycsIEpTT04uc3RyaW5naWZ5KGN1cnJlbnRGb3JtVmFsdWVzLmRlcGFydG1lbnRzKSk7XG4gICAgZm9ybURhdGEuYXBwZW5kKCdhZGRpdGlvbmFsRGV0YWlscycsIGN1cnJlbnRGb3JtVmFsdWVzLmFkZGl0aW9uYWxEZXRhaWxzIHx8ICcnKTtcbiAgICBjb25zdCBmaWxlOiBGaWxlID0gdGhpcy51cGxvYWRlZEZpbGUgfHwgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdhZGRpdGlvbmFsX2RvY3VtZW50Jyk/LnZhbHVlO1xuICAgIGNvbnNvbGUubG9nKCdmaWxlJywgZmlsZSlcbiAgICBpZiAoZmlsZSkge1xuICAgICAgZm9ybURhdGEuYXBwZW5kKCdhZGRpdGlvbmFsX2RvY3VtZW50JywgZmlsZSk7XG4gICAgfVxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ2RlcGFydG1lbnRzJ10gPSBjdXJyZW50Rm9ybVZhbHVlcz8uZGVwYXJ0bWVudHNcbiAgICBjb25zdCBkZXBhcnRtZW50TmFtZSA9IHRoaXMuZGVwYXJ0bWVudERhdGEuZmluZCh1ID0+IHUuaWRlbnRpZmllciA9PT0gY3VycmVudEZvcm1WYWx1ZXMuZGVwYXJ0bWVudHMpO1xuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ2RlcGFydG1lbnRfbmFtZSddID0gZGVwYXJ0bWVudE5hbWU/Lm9yZ05hbWVcbiAgICBjb25zdCBzZWxlY3RlZE1pbmlzdHJ5ID0gdGhpcy5taW5pc3RyeURhdGEuZmluZChpdGVtID0+XG4gICAgICBpdGVtLmlkZW50aWZpZXIgPT09IGN1cnJlbnRGb3JtVmFsdWVzLm1pbmlzdHJ5XG4gICAgKTtcblxuICAgIHRoaXMuc2VsZWN0ZWRNaW5pc3RyeU9iaiA9IHNlbGVjdGVkTWluaXN0cnk7XG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsnbWluaXN0cnknXSA9IHNlbGVjdGVkTWluaXN0cnlcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2JwUGxhbkZpbmFsT2JqJywgSlNPTi5zdHJpbmdpZnkodGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iaikpXG4gICAgY29uc29sZS5sb2coJ3RoaXMucm9sZU1hcHBpbmdGb3JtJywgdGhpcy5yb2xlTWFwcGluZ0Zvcm0pXG4gICAgY29uc29sZS5sb2coJ2Zvcm1EYXRhLS0nLCBmb3JtRGF0YSlcbiAgICBmb3IgKGNvbnN0IHBhaXIgb2YgZm9ybURhdGEuZW50cmllcygpKSB7XG4gICAgICBjb25zb2xlLmxvZyhgJHtwYWlyWzBdfTpgLCBwYWlyWzFdKTtcbiAgICB9XG5cblxuICAgIGNvbnN0IGNoYW5nZWRGaWVsZHMgPSB0aGlzLmdldENoYW5nZWRGaWVsZHModGhpcy5vcmlnaW5hbEZvcm1WYWx1ZXMsIGN1cnJlbnRGb3JtVmFsdWVzKTtcblxuICAgIGlmIChjaGFuZ2VkRmllbGRzLmxlbmd0aCA+IDAgfHwgKGZpbGUgJiYgZmlsZS5zaXplID4gMCkpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdjaGFuZ2VkRmllbGRzJywgY2hhbmdlZEZpZWxkcylcbiAgICAgIGNvbnNvbGUubG9nKCdDaGFuZ2VkIGZpZWxkczonLCBjaGFuZ2VkRmllbGRzKTtcbiAgICAgIGlmIChjaGFuZ2VkRmllbGRzLmluY2x1ZGVzKCdhZGRpdGlvbmFsRGV0YWlscycpICYmIHRoaXMucm9sZU1hcHBpbmdGb3JtLnZhbHVlLmFkZGl0aW9uYWxEZXRhaWxzPy50cmltKCkgfHwgKGZpbGUgJiYgZmlsZS5zaXplID4gMCkpIHtcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihEZWxldGVSb2xlTWFwcGluZ1BvcHVwQ29tcG9uZW50LCB7XG4gICAgICAgICAgd2lkdGg6ICc0MDBweCcsXG4gICAgICAgICAgZGF0YToge2RvY3VtZW50czogdGhpcy5kb2N1bWVudHN9LFxuICAgICAgICAgIHBhbmVsQ2xhc3M6ICd2aWV3LWNicC1wbGFuLXBvcHVwJyxcbiAgICAgICAgICBtaW5IZWlnaHQ6ICczMDBweCcsICAgICAgICAgIC8vIFNldCBtaW5pbXVtIGhlaWdodFxuICAgICAgICAgIG1heEhlaWdodDogJzgwdmgnLCAgICAgICAgICAgLy8gUHJldmVudCBpdCBmcm9tIGdvaW5nIGJleW9uZCB2aWV3cG9ydFxuICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSAvLyBPcHRpb25hbDogcHJldmVudCBjbG9zaW5nIHdpdGggb3V0c2lkZSBjbGlja1xuICAgICAgICB9KTtcblxuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSAnc2F2ZWQnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQ2hhbmdlcyBzYXZlZCEnKTtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWVcbiAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5kZWxldGVSb2xlTWFwcGluZ0J5U3RhdGVBbmREZXBhcnRtZW50KHRoaXMucm9sZU1hcHBpbmdGb3JtLnZhbHVlLm1pbmlzdHJ5LCB0aGlzLnJvbGVNYXBwaW5nRm9ybS52YWx1ZS5kZXBhcnRtZW50cykuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFN1Y2Nlc3MgaGFuZGxpbmdcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnU3VjY2VzczonLCByZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5maXJzdEFwaVJlc3BvbnNlID0gW11cbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlRmluYWxSb2xlTWFwcGluZygpXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcnN0QXBpUmVzcG9uc2UgPSBbXVxuICAgICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihlcnJvcj8uZXJyb3I/LmRldGFpbCwgJ1gnLCB7XG4gICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5nZW5lcmF0ZUZpbmFsUm9sZU1hcHBpbmcoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUZpbmFsUm9sZU1hcHBpbmcoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmdlbmVyYXRlRmluYWxSb2xlTWFwcGluZygpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVGaW5hbFJvbGVNYXBwaW5nKClcbiAgICAgIGNvbnNvbGUubG9nKCdObyBjaGFuZ2VzIGRldGVjdGVkLicpO1xuICAgIH1cblxuICB9XG5cblxuICBnZXRNaW5pc3RyeURhdGEoKSB7XG4gICAgdGhpcy5hcGlMb2FkaW5nID0gdHJ1ZVxuICAgIGNvbnN0IHJlcXVlc3RlZFR5cGUgPSB0aGlzLnNlbGVjdGVkTWluaXN0cnlUeXBlXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0TWluaXN0cnlEYXRhKHJlcXVlc3RlZFR5cGUpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdkYXRhLS0nLCBkYXRhKVxuICAgICAgICB0aGlzLmFwaUxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAvLyBJZ25vcmUgc3RhbGUgcmVzcG9uc2VzIGZyb20gYSB0eXBlIHRoYXQgd2FzIGNoYW5nZWQgYWdhaW4gYmVmb3JlIHRoaXMgb25lIHJldHVybmVkXG4gICAgICAgIGlmIChyZXF1ZXN0ZWRUeXBlICE9PSB0aGlzLnNlbGVjdGVkTWluaXN0cnlUeXBlKSB7XG4gICAgICAgICAgcmVzb2x2ZSgpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5taW5pc3RyeUZ1bGxEYXRhID0gZGF0YVxuICAgICAgICB0aGlzLm1pbmlzdHJ5RGF0YSA9IFtdXG4gICAgICAgIGlmIChyZXF1ZXN0ZWRUeXBlID09PSAnbWluaXN0cnknKSB7XG4gICAgICAgICAgZGF0YS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbT8uc2JPcmdUeXBlID09PSAnbWluaXN0cnknKSB7XG4gICAgICAgICAgICAgIHRoaXMubWluaXN0cnlEYXRhLnB1c2goaXRlbSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2UgaWYgKHJlcXVlc3RlZFR5cGUgPT09ICdzdGF0ZScpIHtcbiAgICAgICAgICBkYXRhLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtPy5zYk9yZ1R5cGUgPT09ICdzdGF0ZScpIHtcbiAgICAgICAgICAgICAgdGhpcy5taW5pc3RyeURhdGEucHVzaChpdGVtKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdldFVzZXJQcm9maWxlRGF0YShyZXF1ZXN0ZWRUeXBlLCByZXNvbHZlKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgb25NaW5pc3RyeVR5cGVDaGFuZ2UoZXZlbnQpIHtcbiAgICBjb25zb2xlLmxvZygnZXZlbnQnLCBldmVudClcblxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ21pbmlzdHJ5VHlwZSddID0gZXZlbnQudmFsdWVcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydyb2xlX21hcHBpbmdfZ2VuZXJhdGlvbiddID0gW11cbiAgICB0aGlzLnNoYXJlZFNlcnZpY2Uucm9sZU1hcHBpbmdHZW5lcmF0aW9uRGF0YSA9IFtdXG4gICAgdGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSA9IGV2ZW50LnZhbHVlXG4gICAgdGhpcy5taW5pc3RyeURhdGEgPSBbXVxuXG4gICAgaWYgKHRoaXMubG9naW4pIHtcbiAgICAgIGF3YWl0IHRoaXMuZ2V0TWluaXN0cnlEYXRhKClcbiAgICB9XG5cbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2JwUGxhbkZpbmFsT2JqJywgSlNPTi5zdHJpbmdpZnkodGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iaikpXG4gICAgaWYgKGV2ZW50Py52YWx1ZSA9PT0gJ3N0YXRlJykge1xuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdtaW5pc3RyeScpPy5zZXRWYWx1ZShudWxsKTtcbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnc2VjdG9ycycpPy5zZXRWYWx1ZShbXSk7XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LnNldFZhbHVlKFtdKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50Py52YWx1ZSA9PT0gJ21pbmlzdHJ5Jykge1xuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdtaW5pc3RyeScpPy5zZXRWYWx1ZShudWxsKTtcbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnc2VjdG9ycycpPy5zZXRWYWx1ZShbXSk7XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LnNldFZhbHVlKFtdKTtcbiAgICB9XG5cbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydtaW5pc3RyeSddID0gJydcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydkZXBhcnRtZW50X25hbWUnXSA9ICcnXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsnZGVwYXJ0bWVudHMnXSA9ICcnXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NicFBsYW5GaW5hbE9iaicsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmopKVxuICAgIC8vIHRoaXMucm9sZU1hcHBpbmdGb3JtLnJlc2V0KClcbiAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmo/Lm1pbmlzdHJ5KSB7XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5zZXRFcnJvcnMoeyBpbnZhbGlkOiB0cnVlIH0pO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgLy8gIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50ID0gdHJ1ZVxuICAgICAgICAvLyAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50T3JpZ2luYWwgPSB0cnVlXG4gICAgICB9LCA1MDAwKVxuICAgIH1cbiAgfVxuXG4gIG9uTWluaXN0cnlDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHNlbGVjdGVkTWluaXN0cnlJZCA9IGV2ZW50LnZhbHVlO1xuICAgIGNvbnNvbGUubG9nKCdTZWxlY3RlZCBNaW5pc3RyeSBJRDonLCBzZWxlY3RlZE1pbmlzdHJ5SWQpO1xuICAgIHRoaXMuZGVwYXJ0bWVudERhdGEgPSBbXVxuICAgIC8vIFlvdSBjYW4gYWNjZXNzIHRoZSBzZWxlY3RlZCBvYmplY3QgaWYgbmVlZGVkXG4gICAgY29uc3Qgc2VsZWN0ZWRNaW5pc3RyeSA9IHRoaXMubWluaXN0cnlEYXRhLmZpbmQoaXRlbSA9PiBpdGVtLmlkZW50aWZpZXIgPT09IHNlbGVjdGVkTWluaXN0cnlJZCk7XG4gICAgdGhpcy5zZWxlY3RlZE1pbmlzdHJ5T2JqID0gc2VsZWN0ZWRNaW5pc3RyeVxuICAgIGNvbnNvbGUubG9nKCdTZWxlY3RlZCBNaW5pc3RyeTonLCBzZWxlY3RlZE1pbmlzdHJ5KTsgYGBcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydtaW5pc3RyeSddID0gc2VsZWN0ZWRNaW5pc3RyeVxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ3JvbGVfbWFwcGluZ19nZW5lcmF0aW9uJ10gPSBbXVxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5yb2xlTWFwcGluZ0dlbmVyYXRpb25EYXRhID0gW11cbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2JwUGxhbkZpbmFsT2JqJywgSlNPTi5zdHJpbmdpZnkodGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iaikpXG4gICAgaWYgKHNlbGVjdGVkTWluaXN0cnlJZCAmJiAodGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSA9PT0gJ3N0YXRlJyB8fCB0aGlzLnNlbGVjdGVkTWluaXN0cnlUeXBlID09PSAnbWluaXN0cnknKSkge1xuICAgICAgdGhpcy5kZXBhcnRtZW50TWluaXN0cnlJZCA9IHNlbGVjdGVkTWluaXN0cnlJZFxuICAgICAgdGhpcy5kZXBhcnRtZW50U2VhcmNoUXVlcnkgPSAnJ1xuICAgICAgdGhpcy5maWx0ZXJlZERlcGFydG1lbnRMaXN0ID0gW11cbiAgICAgIHRoaXMubG9hZERlcGFydG1lbnRzKHRydWUpXG4gICAgfVxuXG4gICAgdGhpcy5nZXRVcGxvYWRlZERvY3VtZW50cygpXG4gIH1cblxuICBzZWFyY2hEYXRhKCkge1xuXG4gIH1cblxuICBhcHBseUZpbHRlcigpIHtcblxuICB9XG5cbiAgZG93bmxvYWRQREYoKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMucGRmQ29udGVudC5uYXRpdmVFbGVtZW50O1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIG1hcmdpbjogMC41LFxuICAgICAgZmlsZW5hbWU6ICdDQlBfUGxhbi5wZGYnLFxuICAgICAgaW1hZ2U6IHsgdHlwZTogJ2pwZWcnLCBxdWFsaXR5OiAwLjk4IH0sXG4gICAgICBodG1sMmNhbnZhczoge1xuICAgICAgICBzY2FsZTogMixcbiAgICAgICAgdXNlQ09SUzogdHJ1ZSwgIC8vIEltcG9ydGFudCBmb3IgZXh0ZXJuYWwgaW1hZ2VzL2ljb25zXG4gICAgICB9LFxuICAgICAganNQREY6IHtcbiAgICAgICAgdW5pdDogJ2luJyxcbiAgICAgICAgZm9ybWF0OiAnYTQnLFxuICAgICAgICBvcmllbnRhdGlvbjogJ3BvcnRyYWl0J1xuICAgICAgfVxuICAgIH07XG5cbiAgICBodG1sMnBkZigpLmZyb20oZWxlbWVudCkuc2V0KG9wdGlvbnMpLnNhdmUoKTtcblxuICB9XG5cbiAgb25GaWxlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBmaWxlczogRmlsZUxpc3QgPSBldmVudC50YXJnZXQuZmlsZXM7XG4gICAgY29uc3QgbWF4RmlsZXMgPSAzO1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2FkZGl0aW9uYWxfZG9jdW1lbnQnKTtcblxuICAgIC8vIEFsd2F5cyBjbGVhciBjb250cm9sIGZpcnN0IChwcmV2ZW50cyBvbGQgdmFsaWQgdmFsdWUpXG4gICAgY29udHJvbD8ucmVzZXQoKTtcbiAgICBjb250cm9sPy5zZXRFcnJvcnMobnVsbCk7XG4gICAgdGhpcy51cGxvYWRlZEZpbGUgPSBbXTtcbiAgICB0aGlzLnVwbG9hZEVycm9yID0gbnVsbDtcblxuICAgIGlmICghZmlsZXMgfHwgZmlsZXMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICAvLyBMaW1pdCBjaGVja1xuICAgIGlmIChmaWxlcy5sZW5ndGggPiBtYXhGaWxlcykge1xuICAgICAgdGhpcy51cGxvYWRFcnJvciA9IGBZb3UgY2FuIHVwbG9hZCBhIG1heGltdW0gb2YgJHttYXhGaWxlc30gZmlsZXNgO1xuICAgICAgY29udHJvbD8uc2V0RXJyb3JzKHsgbWF4RmlsZXM6IHRydWUgfSk7XG4gICAgICBjb250cm9sPy5tYXJrQXNEaXJ0eSgpO1xuICAgICAgY29udHJvbD8ubWFya0FzVG91Y2hlZCgpO1xuICAgICAgY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbGlkRmlsZXM6IEZpbGVbXSA9IFtdO1xuICAgIGNvbnN0IGludmFsaWRGaWxlczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBtYXhCeXRlcyA9IHRoaXMubWF4RmlsZVNpemVNQiAqIDEwMjQgKiAxMDI0O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZmlsZSA9IGZpbGVzW2ldO1xuXG4gICAgICAvLyBTaXplIGNoZWNrXG4gICAgICBpZiAoZmlsZS5zaXplID4gbWF4Qnl0ZXMpIHtcbiAgICAgICAgaW52YWxpZEZpbGVzLnB1c2goYCR7ZmlsZS5uYW1lfSAoZXhjZWVkcyAke3RoaXMubWF4RmlsZVNpemVNQn1NQilgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFR5cGUgY2hlY2tcbiAgICAgIGlmICghdGhpcy5hbGxvd2VkVHlwZXMuaW5jbHVkZXMoZmlsZS50eXBlKSkge1xuICAgICAgICBpbnZhbGlkRmlsZXMucHVzaChgJHtmaWxlLm5hbWV9IChpbnZhbGlkIHR5cGUpYCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YWxpZEZpbGVzLnB1c2goZmlsZSk7XG4gICAgfVxuXG4gICAgLy8g4p2MIE5PIHZhbGlkIGZpbGVzIOKGkiBmb3JtIE1VU1QgQkUgaW52YWxpZFxuICAgIGlmICh2YWxpZEZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy51cGxvYWRFcnJvciA9IGBJbnZhbGlkIGZpbGUocyk6ICR7aW52YWxpZEZpbGVzLmpvaW4oJywgJyl9YDtcblxuICAgICAgY29udHJvbD8uc2V0VmFsdWUobnVsbCk7XG4gICAgICBjb250cm9sPy5zZXRFcnJvcnMoeyBpbnZhbGlkRmlsZXM6IHRydWUgfSk7XG4gICAgICBjb250cm9sPy5tYXJrQXNEaXJ0eSgpO1xuICAgICAgY29udHJvbD8ubWFya0FzVG91Y2hlZCgpO1xuICAgICAgY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IG9ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5zZXRFcnJvcnMoeyBpbnZhbGlkOiB0cnVlIH0pO1xuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgIH0sIDUwMDApXG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyDinJQgQXQgbGVhc3QgT05FIHZhbGlkIGZpbGUg4oaSIGZvcm0gc2hvdWxkIGJlIFZBTElEXG4gICAgdGhpcy51cGxvYWRlZEZpbGUgPSB2YWxpZEZpbGVzO1xuXG4gICAgaWYgKGludmFsaWRGaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnVwbG9hZEVycm9yID0gYFNvbWUgZmlsZXMgd2VyZSBza2lwcGVkOiAke2ludmFsaWRGaWxlcy5qb2luKCcsICcpfWA7XG4gICAgfVxuXG4gICAgY29udHJvbD8uc2V0VmFsdWUodmFsaWRGaWxlcyk7XG4gICAgY29udHJvbD8uc2V0RXJyb3JzKG51bGwpO1xuICAgIGNvbnRyb2w/Lm1hcmtBc0RpcnR5KCk7XG4gICAgY29udHJvbD8ubWFya0FzVG91Y2hlZCgpO1xuICAgIGNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiB0cnVlIH0pO1xuICB9XG5cblxuXG5cblxuXG4gIGxvZ2luU3RhdHVzKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICB0aGlzLmxvZ2luID0gdHJ1ZVxuICAgICAgdGhpcy5sb2dpblN1Y2Nlc3MuZW1pdCh0cnVlKVxuICAgICAgdGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSA9ICdtaW5pc3RyeSdcblxuICAgICAgdGhpcy5nZXRNaW5pc3RyeURhdGEoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZ2luID0gZmFsc2VcbiAgICB9XG4gIH1cblxuICBnZW5lcmF0ZUZpbmFsUm9sZU1hcHBpbmcoKSB7XG4gICAgdGhpcy5hcGlMb2FkaW5nID0gdHJ1ZTtcblxuICAgIGlmICghdGhpcy5yb2xlTWFwcGluZ0Zvcm0udmFsaWQpIHtcbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50Rm9ybVZhbHVlcyA9IHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldFJhd1ZhbHVlKCk7XG4gICAgbGV0IGZvcm1VcGxvYWREYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICAvLyBNaW5pc3RyeSBzZWxlY3Rpb25cbiAgICBjb25zdCBzZWxlY3RlZE1pbmlzdHJ5ID0gdGhpcy5taW5pc3RyeURhdGEuZmluZChpdGVtID0+XG4gICAgICBpdGVtLmlkZW50aWZpZXIgPT09IGN1cnJlbnRGb3JtVmFsdWVzLm1pbmlzdHJ5XG4gICAgKTtcblxuICAgIHRoaXMuc2VsZWN0ZWRNaW5pc3RyeU9iaiA9IHNlbGVjdGVkTWluaXN0cnk7XG5cbiAgICAvLyBBcHBlbmQgYmFzZSBmaWVsZHNcbiAgICBmb3JtVXBsb2FkRGF0YS5hcHBlbmQoJ3N0YXRlX2NlbnRlcl9pZCcsIGN1cnJlbnRGb3JtVmFsdWVzLm1pbmlzdHJ5IHx8ICcnKTtcbiAgICBmb3JtVXBsb2FkRGF0YS5hcHBlbmQoJ3N0YXRlX2NlbnRlcl9uYW1lJywgc2VsZWN0ZWRNaW5pc3RyeT8ub3JnTmFtZSB8fCAnJyk7XG5cbiAgICBpZiAoY3VycmVudEZvcm1WYWx1ZXMuZGVwYXJ0bWVudHMpIHtcbiAgICAgIGZvcm1VcGxvYWREYXRhLmFwcGVuZCgnZGVwYXJ0bWVudF9pZCcsIGN1cnJlbnRGb3JtVmFsdWVzLmRlcGFydG1lbnRzKTtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudEZvcm1WYWx1ZXMuYWRkaXRpb25hbERldGFpbHMpIHtcbiAgICAgIGZvcm1VcGxvYWREYXRhLmFwcGVuZCgnaW5zdHJ1Y3Rpb24nLCBjdXJyZW50Rm9ybVZhbHVlcy5hZGRpdGlvbmFsRGV0YWlscyk7XG4gICAgfVxuXG4gICAgLy8gR2V0IHVwbG9hZGVkIGZpbGUocylcbiAgICBjb25zdCBmaWxlczogRmlsZSB8IEZpbGVbXSA9XG4gICAgICB0aGlzLnVwbG9hZGVkRmlsZSB8fCB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2FkZGl0aW9uYWxfZG9jdW1lbnQnKT8udmFsdWU7XG5cbiAgICBjb25zb2xlLmxvZygnRmlsZXMgc2VsZWN0ZWQ6JywgZmlsZXMpO1xuXG4gICAgLy8gQXBwZW5kIHNpbmdsZSBvciBtdWx0aXBsZSBmaWxlc1xuICAgIGlmIChmaWxlcykge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsZXMpKSB7XG4gICAgICAgIGZpbGVzLmZvckVhY2goKGZpbGU6IEZpbGUpID0+IHtcbiAgICAgICAgICBmb3JtVXBsb2FkRGF0YS5hcHBlbmQoJ2FkZGl0aW9uYWxfZG9jdW1lbnQnLCBmaWxlLCBmaWxlLm5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvcm1VcGxvYWREYXRhLmFwcGVuZCgnYWRkaXRpb25hbF9kb2N1bWVudCcsIGZpbGVzLCBmaWxlcy5uYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEZWJ1ZzogcHJpbnQgRm9ybURhdGFcbiAgICBjb25zb2xlLmxvZyhcIkZvcm1EYXRhIERlYnVnOlwiKTtcbiAgICBmb3JtVXBsb2FkRGF0YS5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAke2tleX06IEZJTEUgLT4gJHt2YWx1ZS5uYW1lfSAoJHt2YWx1ZS5zaXplfSBieXRlcylgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAke2tleX06ICR7dmFsdWV9YCk7XG4gICAgICB9XG4gICAgfSk7XG5cblxuICAgIC8vIEJ1aWxkIHJlcXVlc3QgYm9keSBmb3IgcG9sbGluZyBBUElcbiAgICBsZXQgcmVxOiBhbnkgPSB7XG4gICAgICBzdGF0ZV9jZW50ZXJfaWQ6IGN1cnJlbnRGb3JtVmFsdWVzLm1pbmlzdHJ5LFxuICAgICAgaW5zdHJ1Y3Rpb246IGN1cnJlbnRGb3JtVmFsdWVzLmFkZGl0aW9uYWxEZXRhaWxzLFxuICAgICAgc3RhdGVfY2VudGVyX25hbWU6IHNlbGVjdGVkTWluaXN0cnk/Lm9yZ05hbWVcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRNaW5pc3RyeVR5cGUgPT09ICdzdGF0ZScgfHwgY3VycmVudEZvcm1WYWx1ZXMuZGVwYXJ0bWVudHMpIHtcbiAgICAgIGNvbnN0IGRlcGFydG1lbnROYW1lID0gdGhpcy5kZXBhcnRtZW50RGF0YS5maW5kKFxuICAgICAgICBkID0+IGQuaWRlbnRpZmllciA9PT0gY3VycmVudEZvcm1WYWx1ZXMuZGVwYXJ0bWVudHNcbiAgICAgICk7XG5cbiAgICAgIHJlcS5kZXBhcnRtZW50X2lkID0gY3VycmVudEZvcm1WYWx1ZXMuZGVwYXJ0bWVudHMgfHwgJyc7XG4gICAgICByZXEuZGVwYXJ0bWVudF9uYW1lID0gZGVwYXJ0bWVudE5hbWU/Lm9yZ05hbWUgfHwgJyc7XG4gICAgfVxuXG5cblxuICAgIC8vIFBvbGxpbmcgQVBJXG4gICAgY29uY2F0KFxuICAgICAgb2YobnVsbCksICAgICAgICAgICAgICAvLyDwn5SlIGltbWVkaWF0ZSBmaXJzdCBlbWlzc2lvblxuICAgICAgaW50ZXJ2YWwoNTAwMCkgICAgICAgICAvLyDij7Egc3Vic2VxdWVudCBwb2xsaW5nIGV2ZXJ5IDVzXG4gICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuc2hhcmVkU2VydmljZS5nZW5lcmF0ZVJvbGVNYXBwaW5nKHJlcSwgZmlsZXMpKSxcbiAgICAgICAgdGFwKGRhdGEgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5maXJzdEFwaVJlc3BvbnNlKSB7XG4gICAgICAgICAgICB0aGlzLmZpcnN0QXBpUmVzcG9uc2UgPSBkYXRhOyAvLyDwn5GIIHN0b3JlIGZpcnN0IHJlc3BvbnNlXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRmlyc3QgQVBJIHJlc3BvbnNlOicsIHRoaXMuZmlyc3RBcGlSZXNwb25zZSk7XG4gICAgICAgICAgICBpZihkYXRhICYmIGRhdGE/LnN0YXR1cyA9PT0gJ0ZBSUxFRCcpIHtcbiAgICAgICAgICAgICAgIHRoaXMuYXBpTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTsgICAvLyDwn5uRIHN0b3AgcG9sbGluZ1xuICAgICAgICAgICAgICAgIHRoaXMucmVnZW5lcmF0ZVJvbGVNYXBwaW5nQWZ0ZXJGYWlsZWRBbmREZWxldGUoKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHRha2VXaGlsZShcbiAgKGRhdGE6IGFueSkgPT5cbiAgICBkYXRhPy5zdGF0dXMgIT09ICdDT01QTEVURUQnICYmXG4gICAgZGF0YT8uc3RhdHVzICE9PSAnRkFJTEVEJyxcbiAgdHJ1ZSAvLyBlbWl0IHRoZSBmaW5hbCBDT01QTEVURUQvRkFJTEVEIHJlc3BvbnNlXG4pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygncm9sZSBtYXBwaW5nIGRhdGEtLScsIGRhdGEpXG4gICAgICAgIGlmICh0aGlzLmZpcnN0QXBpUmVzcG9uc2U/LmlzX2V4aXN0aW5nKSB7XG4gICAgICAgICAgXG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgdGhpcy5zaG93V29ya0FsbG9jYXRpb25PcmRlckRvY3VtZW50TWlzc2luZyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5hcGlMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7ICAgLy8g8J+bkSBzdG9wIHBvbGxpbmdcbiAgICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihEZWxldGVSb2xlTWFwcGluZ1BvcHVwQ29tcG9uZW50LCB7XG4gICAgICAgICAgICB3aWR0aDogJzQwMHB4JyxcbiAgICAgICAgICAgIGRhdGE6IHtkb2N1bWVudHM6IHRoaXMuZG9jdW1lbnRzfSxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6ICd2aWV3LWNicC1wbGFuLXBvcHVwJyxcbiAgICAgICAgICAgIG1pbkhlaWdodDogJzMwMHB4JywgICAgICAgICAgLy8gU2V0IG1pbmltdW0gaGVpZ2h0XG4gICAgICAgICAgICBtYXhIZWlnaHQ6ICc4MHZoJywgICAgICAgICAgIC8vIFByZXZlbnQgaXQgZnJvbSBnb2luZyBiZXlvbmQgdmlld3BvcnRcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSAvLyBPcHRpb25hbDogcHJldmVudCBjbG9zaW5nIHdpdGggb3V0c2lkZSBjbGlja1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSAnc2F2ZWQnKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDaGFuZ2VzIHNhdmVkIScpO1xuXG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWVcbiAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmRlbGV0ZVJvbGVNYXBwaW5nQnlTdGF0ZUFuZERlcGFydG1lbnQodGhpcy5yb2xlTWFwcGluZ0Zvcm0udmFsdWUubWluaXN0cnksIHRoaXMucm9sZU1hcHBpbmdGb3JtLnZhbHVlLmRlcGFydG1lbnRzKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIFN1Y2Nlc3MgaGFuZGxpbmdcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTdWNjZXNzOicsIHJlcyk7XG4gICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgdGhpcy5maXJzdEFwaVJlc3BvbnNlID0gW11cbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVGaW5hbFJvbGVNYXBwaW5nKClcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihlcnJvcj8uZXJyb3I/LmRldGFpbCwgJ1gnLCB7XG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgdGhpcy5maXJzdEFwaVJlc3BvbnNlID0gW11cbiAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAvLyB0aGlzLmdlbmVyYXRlRmluYWxSb2xlTWFwcGluZygpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09PSAnYnV0dG9uJykge1xuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgICAvLyB0aGlzLmdlbmVyYXRlRmluYWxSb2xlTWFwcGluZygpXG4gICAgICAgICAgICAgIC8vIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLyddKTtcbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudFVybCA9IHRoaXMucm91dGVyLnVybDtcblxuICAgICAgICAgICAgICAvLyB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvJywgeyBza2lwTG9jYXRpb25DaGFuZ2U6IHRydWUgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIC8vICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChjdXJyZW50VXJsKTtcbiAgICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ3JvbGVfbWFwcGluZ19nZW5lcmF0aW9uJ10gPVxuICAgICAgICAgICAgICAgIGRhdGE/LnJvbGVfbWFwcGluZ3M7XG4gICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5yb2xlTWFwcGluZ0dlbmVyYXRpb25EYXRhID0gZGF0YT8ucm9sZV9tYXBwaW5ncztcbiAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICAgICAgICAgICAgJ2NicFBsYW5GaW5hbE9iaicsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iailcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3NSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKTtcbiAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvYWkvbGlzdCddLCB7XG4gICAgICAgICAgICAgICAgb25TYW1lVXJsTmF2aWdhdGlvbjogJ3JlbG9hZCdcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIC8vIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKVxuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy53b3JrQWxsb2NhdGlvbk9yZGVyRG9jdW1lbnRNaXNzaW5nKSB7XG4gICAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICB0aGlzLmFwaUxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuc2hvd1dvcmtBbGxvY2F0aW9uT3JkZXJEb2N1bWVudE1pc3NpbmcgPSB0cnVlXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGE/LnN0YXR1cyA9PT0gJ0NPTVBMRVRFRCcpIHtcbiAgICAgICAgICB0aGlzLnNob3dXb3JrQWxsb2NhdGlvbk9yZGVyRG9jdW1lbnRNaXNzaW5nID0gZmFsc2VcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmFwaUxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ3JvbGVfbWFwcGluZ19nZW5lcmF0aW9uJ10gPVxuICAgICAgICAgICAgZGF0YT8ucm9sZV9tYXBwaW5ncztcbiAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uucm9sZU1hcHBpbmdHZW5lcmF0aW9uRGF0YSA9IGRhdGE/LnJvbGVfbWFwcGluZ3M7XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICAgICAgICAnY2JwUGxhbkZpbmFsT2JqJyxcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmopXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHRoaXMuc3VjY2Vzc1JvbGVNYXBwaW5nLmVtaXQodGhpcy5yb2xlTWFwcGluZ0Zvcm0pO1xuXG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdDQlAgUGxhbiBnZW5lcmF0ZWQgc3VjY2Vzc2Z1bGx5IScsICdYJywge1xuICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLXN1Y2Nlc3MnXVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvYWkvbGlzdCddKTtcbiAgICAgICAgfSBlbHNlIGlmKGRhdGEgJiYgZGF0YT8uc3RhdHVzID09PSAnRkFJTEVEJykge1xuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgICAgdGhpcy5hcGlMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7ICAgLy8g8J+bkSBzdG9wIHBvbGxpbmdcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dSb2xlTWFwcGluZ0ZhaWxlZFBvcHVwKClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZVByb2Nlc3NpbmdTdGFnZSgpIHtcbiAgICBjb25zdCBjaHVua0NvdW50ID0gdGhpcy5jaHVua3MubGVuZ3RoO1xuICAgIGxldCBzdGFnZUluZGV4ID0gMDtcblxuICAgIC8vIE11Y2ggc2xvd2VyIHN0YWdlIHByb2dyZXNzaW9uIC0gc3RhZ2VzIHN0YXkgbXVjaCBsb25nZXJcbiAgICBpZiAoY2h1bmtDb3VudCA8PSA4KSB7XG4gICAgICBzdGFnZUluZGV4ID0gMDsgLy8gSW5pdGlhbGl6aW5nIC0gc3RheXMgZm9yIGZpcnN0IDggY2h1bmtzXG4gICAgfSBlbHNlIGlmIChjaHVua0NvdW50IDw9IDIwKSB7XG4gICAgICBzdGFnZUluZGV4ID0gMTsgLy8gQW5hbHl6aW5nIGNvbXBldGVuY3kgcmVxdWlyZW1lbnRzIC0gMTIgY2h1bmtzXG4gICAgfSBlbHNlIGlmIChjaHVua0NvdW50IDw9IDM1KSB7XG4gICAgICBzdGFnZUluZGV4ID0gMjsgLy8gUHJvY2Vzc2luZyB3b3JrIG9yZGVyIC0gMTUgY2h1bmtzXG4gICAgfSBlbHNlIGlmIChjaHVua0NvdW50IDw9IDU1KSB7XG4gICAgICBzdGFnZUluZGV4ID0gMzsgLy8gR2VuZXJhdGluZyByb2xlIG1hcHBpbmdzIC0gMjAgY2h1bmtzXG4gICAgfSBlbHNlIGlmIChjaHVua0NvdW50IDw9IDc1KSB7XG4gICAgICBzdGFnZUluZGV4ID0gNDsgLy8gQ29tcHV0aW5nIGZpbmFsIHJlY29tbWVuZGF0aW9ucyAtIDIwIGNodW5rc1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFnZUluZGV4ID0gNTsgLy8gRmluYWxpemluZyBDQlAgUGxhbiAtIDc1KyBjaHVua3NcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSB0aGlzLnByb2Nlc3NpbmdTdGFnZXNbc3RhZ2VJbmRleF07XG4gIH1cblxuICBnZXRQcm9ncmVzc1BlcmNlbnRhZ2UoKTogbnVtYmVyIHtcbiAgICBjb25zdCBjaHVua0NvdW50ID0gdGhpcy5jaHVua3MubGVuZ3RoO1xuICAgIGlmIChjaHVua0NvdW50ID09PSAwKSByZXR1cm4gMDtcblxuICAgIC8vIE11Y2ggc2xvd2VyIGFuZCBzbW9vdGhlciBwcm9ncmVzcyBjYWxjdWxhdGlvblxuICAgIGxldCBwZXJjZW50YWdlID0gMDtcblxuICAgIGlmIChjaHVua0NvdW50IDw9IDE1KSB7XG4gICAgICAvLyBGaXJzdCAxNSBjaHVua3MgPSAwLTI1JSAodmVyeSBzbG93IHN0YXJ0KVxuICAgICAgcGVyY2VudGFnZSA9IChjaHVua0NvdW50IC8gMTUpICogMjU7XG4gICAgfSBlbHNlIGlmIChjaHVua0NvdW50IDw9IDM1KSB7XG4gICAgICAvLyBOZXh0IDIwIGNodW5rcyA9IDI1LTUwJSAoc2xvdyBlYXJseSBwcm9ncmVzcylcbiAgICAgIHBlcmNlbnRhZ2UgPSAyNSArICgoY2h1bmtDb3VudCAtIDE1KSAvIDIwKSAqIDI1O1xuICAgIH0gZWxzZSBpZiAoY2h1bmtDb3VudCA8PSA2MCkge1xuICAgICAgLy8gTmV4dCAyNSBjaHVua3MgPSA1MC03NSUgKHN0ZWFkeSBtaWRkbGUgcHJvZ3Jlc3MpXG4gICAgICBwZXJjZW50YWdlID0gNTAgKyAoKGNodW5rQ291bnQgLSAzNSkgLyAyNSkgKiAyNTtcbiAgICB9IGVsc2UgaWYgKGNodW5rQ291bnQgPD0gMTAwKSB7XG4gICAgICAvLyBOZXh0IDQwIGNodW5rcyA9IDc1LTkwJSAoc2xvd2VyIGZpbmFsIGFwcHJvYWNoKVxuICAgICAgcGVyY2VudGFnZSA9IDc1ICsgKChjaHVua0NvdW50IC0gNjApIC8gNDApICogMTU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEJleW9uZCAxMDAgY2h1bmtzID0gOTAtOTUlICh2ZXJ5IHNsb3cgZmluYWwgcHJvZ3Jlc3Npb24pXG4gICAgICBwZXJjZW50YWdlID0gOTAgKyBNYXRoLm1pbigoKGNodW5rQ291bnQgLSAxMDApIC8gNTApICogNSwgNSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIE1hdGgucm91bmQocGVyY2VudGFnZSk7XG4gIH1cblxuICBvblN0cmVhbUVuZCgpIHtcbiAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnQ29tcGxldGluZyBDQlAgUGxhbiBnZW5lcmF0aW9uLi4uJztcblxuICAgIC8vIFNob3cgMTAwJSBjb21wbGV0aW9uIGJyaWVmbHkgYmVmb3JlIGZpbmlzaGluZ1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5mdWxsSnNvbiA9IHRoaXMuY2h1bmtzLmpvaW4oJycpO1xuICAgICAgY29uc3QgY2xlYW5lZCA9IHRoaXMuZnVsbEpzb24ucmVwbGFjZSgvXmBgYGpzb25cXG4vLCAnJykucmVwbGFjZSgvYGBgJC8sICcnKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMucGFyc2VkRGF0YSA9IEpTT04ucGFyc2UoY2xlYW5lZCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdQYXJzZWQgZGF0YTonLCB0aGlzLnBhcnNlZERhdGEpO1xuXG4gICAgICAgIC8vIEhhbmRsZSBzdWNjZXNzZnVsIGNvbXBsZXRpb25cbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ3JvbGVfbWFwcGluZ19nZW5lcmF0aW9uJ10gPSB0aGlzLnBhcnNlZERhdGE7XG4gICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5yb2xlTWFwcGluZ0dlbmVyYXRpb25EYXRhID0gdGhpcy5wYXJzZWREYXRhO1xuXG4gICAgICAgIHRoaXMuc3VjY2Vzc1JvbGVNYXBwaW5nLmVtaXQodGhpcy5yb2xlTWFwcGluZ0Zvcm0pO1xuXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignQ0JQIFBsYW4gZ2VuZXJhdGVkIHN1Y2Nlc3NmdWxseSEnLCAnWCcsIHtcbiAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLXN1Y2Nlc3MnXVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignSlNPTiBwYXJzZSBlcnJvcjonLCBlKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignRmFpbGVkIHRvIGdlbmVyYXRlIENCUCBQbGFuLiBQbGVhc2UgdHJ5IGFnYWluLicsICdYJywge1xuICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LCA1MDApO1xuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBnZXQgcHJvZ3Jlc3MgcGVyY2VudGFnZSBpbmNsdWRpbmcgY29tcGxldGlvbiBzdGF0ZVxuICBnZXREaXNwbGF5UHJvZ3Jlc3NQZXJjZW50YWdlKCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuY3VycmVudFByb2Nlc3NpbmdTdGFnZSA9PT0gJ0NvbXBsZXRpbmcgQ0JQIFBsYW4gZ2VuZXJhdGlvbi4uLicpIHtcbiAgICAgIHJldHVybiAxMDA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFByb2dyZXNzUGVyY2VudGFnZSgpO1xuICB9XG5cbiBcbiAgcmVtb3ZlRmlsZShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnVwbG9hZGVkRmlsZSB8fCB0aGlzLnVwbG9hZGVkRmlsZS5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIC8vIFJlbW92ZSBvbmUgZmlsZSBhdCB0aGUgZ2l2ZW4gaW5kZXhcbiAgICB0aGlzLnVwbG9hZGVkRmlsZS5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgLy8gVXBkYXRlIGZvcm0gY29udHJvbCB2YWx1ZVxuICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnYWRkaXRpb25hbF9kb2N1bWVudCcpPy5zZXRWYWx1ZSh0aGlzLnVwbG9hZGVkRmlsZSk7XG4gICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdhZGRpdGlvbmFsX2RvY3VtZW50Jyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcblxuICAgIC8vIENsZWFyIGVycm9ycyBpZiBubyBmaWxlcyBsZWZ0XG4gICAgaWYgKHRoaXMudXBsb2FkZWRGaWxlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy51cGxvYWRFcnJvciA9ICcnO1xuICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBsb2FkRG9jJykgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgIGlmIChpbnB1dCkgaW5wdXQudmFsdWUgPSAnJztcbiAgICB9XG4gIH1cblxuXG4gIGdldFVzZXJQcm9maWxlRGF0YShyZXF1ZXN0ZWRUeXBlPzogc3RyaW5nLCBkb25lPzogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMuc2hhcmVkU2VydmljZS5nZXRVc2VyUHJvZmlsZSgpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ2RhdGEtLScsIGRhdGEpXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndXNlclByb2ZpbGUnLCBKU09OLnN0cmluZ2lmeShkYXRhKSlcbiAgICAgIHRoaXMubG9naW5Vc2VyT3JnSWRzID0gZGF0YT8ub3JnYW5pemF0aW9uX2lkc1xuICAgICAgLy8gSWdub3JlIHN0YWxlIHJlc3BvbnNlcyBmcm9tIGEgdHlwZSB0aGF0IHdhcyBjaGFuZ2VkIGFnYWluIGJlZm9yZSB0aGlzIG9uZSByZXR1cm5lZFxuICAgICAgaWYgKHJlcXVlc3RlZFR5cGUgJiYgcmVxdWVzdGVkVHlwZSAhPT0gdGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSkge1xuICAgICAgICBkb25lPy4oKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGxldCBmaWx0ZXJlZE1pbmlzdHJ5RGF0YSA9IFtdXG4gICAgICB0aGlzLm1pbmlzdHJ5RnVsbERhdGEubWFwKChpdGVtKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmxvZ2luVXNlck9yZ0lkcy5pbmRleE9mKGl0ZW0/LmlkZW50aWZpZXIpID4gLTEgJiYgaXRlbT8uc2JPcmdUeXBlID09PSAocmVxdWVzdGVkVHlwZSB8fCB0aGlzLnNlbGVjdGVkTWluaXN0cnlUeXBlKSkge1xuICAgICAgICAgIGZpbHRlcmVkTWluaXN0cnlEYXRhLnB1c2goaXRlbSlcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgdGhpcy5taW5pc3RyeURhdGEgPSBmaWx0ZXJlZE1pbmlzdHJ5RGF0YVxuICAgICAgdGhpcy5vcmlnaW5hbE1pbmlzdHJ5RGF0YSA9IGZpbHRlcmVkTWluaXN0cnlEYXRhXG4gICAgICB0aGlzLmZpbHRlcmVkTGlzdCA9IGZpbHRlcmVkTWluaXN0cnlEYXRhO1xuICAgICAgZG9uZT8uKClcbiAgICB9KVxuICB9XG5cbiAgb25PcGVuZWQob3BlbmVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5wYW5lbE9wZW4gPSBvcGVuZWQ7XG4gIH1cblxuICBvbk9wZW5lZERlcGFydG1lbnQob3BlbmVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5kZXBhcnRtZW50UGFuZWxPcGVuID0gb3BlbmVkXG4gICAgaWYgKG9wZW5lZCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmRlcGFydG1lbnRTZWxlY3QgJiYgdGhpcy5kZXBhcnRtZW50U2VsZWN0LnBhbmVsICYmIHRoaXMuZGVwYXJ0bWVudFNlbGVjdC5wYW5lbC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy5kZXBhcnRtZW50U2VsZWN0LnBhbmVsLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vbkRlcGFydG1lbnRTY3JvbGwpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmICh0aGlzLmRlcGFydG1lbnRTZWFyY2hRdWVyeSkge1xuICAgICAgLy8gcGFuZWwgY2xvc2VkIHdpdGggYW4gYWN0aXZlIHNlYXJjaDogcmVzZXQgc28gdGhlIGxpc3QgbWF0Y2hlcyB0aGUgY2xlYXJlZCBzZWFyY2ggYm94IG9uIHJlb3BlblxuICAgICAgdGhpcy5kZXBhcnRtZW50U2VhcmNoU3ViamVjdC5uZXh0KCcnKVxuICAgIH1cbiAgfVxuXG4gIG9uRGVwYXJ0bWVudFNjcm9sbCA9IChldmVudDogYW55KSA9PiB7XG4gICAgY29uc3QgcGFuZWwgPSBldmVudC50YXJnZXRcbiAgICBpZiAocGFuZWwuc2Nyb2xsVG9wICsgcGFuZWwuY2xpZW50SGVpZ2h0ID49IHBhbmVsLnNjcm9sbEhlaWdodCAtIDYwKSB7XG4gICAgICB0aGlzLmxvYWREZXBhcnRtZW50cygpXG4gICAgfVxuICB9XG5cbiAgbG9hZERlcGFydG1lbnRzKHJlc2V0ID0gZmFsc2UpIHtcbiAgICBpZiAoIXRoaXMuZGVwYXJ0bWVudE1pbmlzdHJ5SWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoIXJlc2V0ICYmICh0aGlzLmRlcGFydG1lbnRMb2FkaW5nIHx8ICF0aGlzLmRlcGFydG1lbnRIYXNNb3JlKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChyZXNldCkge1xuICAgICAgdGhpcy5kZXBhcnRtZW50T2Zmc2V0ID0gMFxuICAgICAgdGhpcy5kZXBhcnRtZW50SGFzTW9yZSA9IHRydWVcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdElkID0gKyt0aGlzLmRlcGFydG1lbnRSZXF1ZXN0SWRcbiAgICB0aGlzLmRlcGFydG1lbnRMb2FkaW5nID0gdHJ1ZVxuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBsaW1pdDogdGhpcy5kZXBhcnRtZW50UGFnZVNpemUsXG4gICAgICBvZmZzZXQ6IHRoaXMuZGVwYXJ0bWVudE9mZnNldCxcbiAgICAgIHF1ZXJ5OiB0aGlzLmRlcGFydG1lbnRTZWFyY2hRdWVyeVxuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSA9PT0gJ21pbmlzdHJ5J1xuICAgICAgPyB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0Q2VudGVyQmFzZWREZXBhcnRtZW50KHRoaXMuZGVwYXJ0bWVudE1pbmlzdHJ5SWQsIG9wdGlvbnMpXG4gICAgICA6IHRoaXMuc2hhcmVkU2VydmljZS5nZXREZXBhcnRtZW50TGlzdCh0aGlzLmRlcGFydG1lbnRNaW5pc3RyeUlkLCBvcHRpb25zKVxuICAgIHJlcXVlc3Quc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgaWYgKHJlcXVlc3RJZCAhPT0gdGhpcy5kZXBhcnRtZW50UmVxdWVzdElkKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZXBhcnRtZW50TG9hZGluZyA9IGZhbHNlXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gQXJyYXkuaXNBcnJheShyZXMpID8gcmVzIDogKHJlcz8uaXRlbXMgfHwgcmVzPy5kYXRhIHx8IFtdKVxuICAgICAgICB0aGlzLmRlcGFydG1lbnRIYXNNb3JlID0gaXRlbXMubGVuZ3RoID09PSB0aGlzLmRlcGFydG1lbnRQYWdlU2l6ZVxuICAgICAgICB0aGlzLmRlcGFydG1lbnRPZmZzZXQgKz0gaXRlbXMubGVuZ3RoXG4gICAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMuZGVwYXJ0bWVudERhdGEuc29tZShkID0+IGQ/LmlkZW50aWZpZXIgPT09IGl0ZW0/LmlkZW50aWZpZXIpKSB7XG4gICAgICAgICAgICB0aGlzLmRlcGFydG1lbnREYXRhLnB1c2goaXRlbSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuZmlsdGVyZWREZXBhcnRtZW50TGlzdCA9IHJlc2V0ID8gaXRlbXMgOiBbLi4udGhpcy5maWx0ZXJlZERlcGFydG1lbnRMaXN0LCAuLi5pdGVtc11cbiAgICAgICAgdGhpcy5lbnN1cmVTZWxlY3RlZERlcGFydG1lbnRPcHRpb24oKVxuICAgICAgICBpZiAocmVzZXQgJiYgIWl0ZW1zLmxlbmd0aCAmJiAhdGhpcy5kZXBhcnRtZW50U2VhcmNoUXVlcnkgJiYgdGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSA9PT0gJ21pbmlzdHJ5Jykge1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignTm8gRGVwYXJ0bWVudCBGb3VuZCBmb3IgU2VsZWN0ZWQgTWluaXN0cnknLCAnWCcsIHtcbiAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsnZGVwYXJ0bWVudF9uYW1lJ10gPSAnJ1xuICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ2RlcGFydG1lbnRzJ10gPSAnJ1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYnBQbGFuRmluYWxPYmonLCBKU09OLnN0cmluZ2lmeSh0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqKSlcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIGlmIChyZXF1ZXN0SWQgIT09IHRoaXMuZGVwYXJ0bWVudFJlcXVlc3RJZCkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVwYXJ0bWVudExvYWRpbmcgPSBmYWxzZVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvLyBtYXQtc2VsZWN0IG9ubHkgZGlzcGxheXMgYSBzZWxlY3Rpb24gd2hpbGUgYSBtYXQtb3B0aW9uIHdpdGggdGhhdCB2YWx1ZSBpc1xuICAvLyByZW5kZXJlZDsgd2hlbiB0aGUgY3VycmVudCBzZWFyY2gvcGFnZSBmcm9tIHRoZSBzZXJ2ZXIgZG9lcyBub3QgaW5jbHVkZSB0aGVcbiAgLy8gc2VsZWN0ZWQgZGVwYXJ0bWVudCwgaXQgaXMgcmVuZGVyZWQgYXMgYSBoaWRkZW4gb3B0aW9uIGluc3RlYWQgb2YgaW4gdGhlIGxpc3RcbiAgZW5zdXJlU2VsZWN0ZWREZXBhcnRtZW50T3B0aW9uKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkSWQgPSB0aGlzLnJvbGVNYXBwaW5nRm9ybT8uZ2V0KCdkZXBhcnRtZW50cycpPy52YWx1ZVxuICAgIGlmICghc2VsZWN0ZWRJZCB8fCBBcnJheS5pc0FycmF5KHNlbGVjdGVkSWQpXG4gICAgICB8fCB0aGlzLmZpbHRlcmVkRGVwYXJ0bWVudExpc3Quc29tZShkID0+IGQ/LmlkZW50aWZpZXIgPT09IHNlbGVjdGVkSWQpKSB7XG4gICAgICB0aGlzLnBpbm5lZERlcGFydG1lbnRPcHRpb25zID0gW11cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuZGVwYXJ0bWVudERhdGEuZmluZChkID0+IGQ/LmlkZW50aWZpZXIgPT09IHNlbGVjdGVkSWQpXG4gICAgICB8fCAodGhpcy5zZWxlY3RlZERlcGFydG1lbnRPYmo/LmlkZW50aWZpZXIgPT09IHNlbGVjdGVkSWQgPyB0aGlzLnNlbGVjdGVkRGVwYXJ0bWVudE9iaiA6IG51bGwpXG4gICAgICB8fCAodGhpcy5jYnBGaW5hbE9iaj8uZGVwYXJ0bWVudF9uYW1lID8geyBpZGVudGlmaWVyOiBzZWxlY3RlZElkLCBvcmdOYW1lOiB0aGlzLmNicEZpbmFsT2JqLmRlcGFydG1lbnRfbmFtZSB9IDogbnVsbClcbiAgICB0aGlzLnBpbm5lZERlcGFydG1lbnRPcHRpb25zID0gc2VsZWN0ZWQgPyBbc2VsZWN0ZWRdIDogW11cbiAgfVxuXG4gIGZpbHRlckRhdGEoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQudGFyZ2V0ICYmIGV2ZW50LnRhcmdldC52YWx1ZSkge1xuICAgICAgY29uc3QgcyA9IGV2ZW50LnRhcmdldC52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICB0aGlzLmZpbHRlcmVkTGlzdCA9IHRoaXMubWluaXN0cnlEYXRhLmZpbHRlcih4ID0+XG4gICAgICAgIHgub3JnTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHMpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlcmVkTGlzdCA9IHRoaXMubWluaXN0cnlEYXRhXG4gICAgfVxuXG4gIH1cblxuICBmaWx0ZXJEZXBhcnRtZW50RGF0YShldmVudCkge1xuICAgIGNvbnN0IHZhbHVlID0gZXZlbnQgJiYgZXZlbnQudGFyZ2V0ICYmIGV2ZW50LnRhcmdldC52YWx1ZSA/IGV2ZW50LnRhcmdldC52YWx1ZSA6ICcnXG4gICAgdGhpcy5kZXBhcnRtZW50U2VhcmNoU3ViamVjdC5uZXh0KHZhbHVlLnRyaW0oKSlcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc2VsZWN0ZWRNaW5pc3RyeUlkID0gJydcbiAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5yZXNldCgpXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KClcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKClcbiAgfVxuXG4gIG9uRGVwYXJ0bWVudENoYW5nZSgpIHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMucm9sZU1hcHBpbmdGb3JtLnZhbHVlO1xuXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsnZGVwYXJ0bWVudHMnXSA9IGZvcm1EYXRhLmRlcGFydG1lbnRzID8gZm9ybURhdGEuZGVwYXJ0bWVudHMgOiAnJ1xuICAgIHRoaXMuY2JwRmluYWxPYmogPSB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0Q0JQUGxhbkxvY2FsU3RvcmFnZSgpXG4gICAgaWYgKHRoaXMuY2JwRmluYWxPYmogJiYgdGhpcy5jYnBGaW5hbE9iaj8ubWluaXN0cnkgJiYgdGhpcy5jYnBGaW5hbE9iaj8ubWluaXN0cnk/LnNiT3JnVHlwZSkge1xuICAgICAgdGhpcy5jYnBGaW5hbE9ialsnZGVwYXJ0bWVudHMnXSA9IGZvcm1EYXRhLmRlcGFydG1lbnRzID8gZm9ybURhdGEuZGVwYXJ0bWVudHMgOiAnJ1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdGVkTWluaXN0cnkgPSB0aGlzLm1pbmlzdHJ5RGF0YS5maW5kKGl0ZW0gPT4gaXRlbS5pZGVudGlmaWVyID09PSBmb3JtRGF0YS5taW5pc3RyeSk7XG5cblxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ21pbmlzdHJ5J10gPSBzZWxlY3RlZE1pbmlzdHJ5XG5cbiAgICBjb25zdCBkZXBhcnRtZW50TmFtZSA9IHRoaXMuZGVwYXJ0bWVudERhdGEuZmluZCh1ID0+IHUuaWRlbnRpZmllciA9PT0gZm9ybURhdGEuZGVwYXJ0bWVudHMpO1xuICAgIGlmIChkZXBhcnRtZW50TmFtZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZERlcGFydG1lbnRPYmogPSBkZXBhcnRtZW50TmFtZVxuICAgIH1cbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydkZXBhcnRtZW50X25hbWUnXSA9IGRlcGFydG1lbnROYW1lPy5vcmdOYW1lXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NicFBsYW5GaW5hbE9iaicsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmopKVxuICAgIHRoaXMuZ2V0VXBsb2FkZWREb2N1bWVudHMoKVxuICB9XG5cbiAgIGdvVG9VcGxvYWREb2N1bWVudCgpIHtcbiAgIFxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2FpL3VwbG9hZC1kb2N1bWVudHMnXSk7XG4gICAgXG4gIH1cblxuICBzaG93Um9sZU1hcHBpbmdGYWlsZWRQb3B1cCgpIHtcbiAgICBjb25zb2xlLmxvZygncm9sZSBtYXBwaW5nIGZhaWxlZCwgdHJ5IHRvIHJlZ2VuZXJhdGUgcm9sZSBtYXBwaW5nPycpXG4gICAvLyBhbGVydCgncm9sZSBtYXBwaW5nIGZhaWxlZCwgdHJ5IHRvIHJlZ2VuZXJhdGUgcm9sZSBtYXBwaW5nPycpXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihEZWxldGVSb2xlTWFwcGluZ1BvcHVwQ29tcG9uZW50LCB7XG4gICAgICAgICAgd2lkdGg6ICc0MDBweCcsXG4gICAgICAgICAgZGF0YToge2RvY3VtZW50czogdGhpcy5kb2N1bWVudHMsIGZyb206ICdyb2xlTWFwcGluZ0ZhaWxlZCcsfSxcbiAgICAgICAgICBwYW5lbENsYXNzOiAndmlldy1jYnAtcGxhbi1wb3B1cCcsICAgICAgICAgIFxuICAgICAgICAgIG1pbkhlaWdodDogJzMwMHB4JywgICAgICAgICAgLy8gU2V0IG1pbmltdW0gaGVpZ2h0XG4gICAgICAgICAgbWF4SGVpZ2h0OiAnODB2aCcsICAgICAgICAgICAvLyBQcmV2ZW50IGl0IGZyb20gZ29pbmcgYmV5b25kIHZpZXdwb3J0XG4gICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlIC8vIE9wdGlvbmFsOiBwcmV2ZW50IGNsb3Npbmcgd2l0aCBvdXRzaWRlIGNsaWNrXG4gICAgICAgIH0pO1xuICAgIFxuICAgICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gJ3NhdmVkJykge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQ2hhbmdlcyBzYXZlZCEnKTtcbiAgICAgICAgICAgICAgdGhpcy5yZWdlbmVyYXRlUm9sZU1hcHBpbmdBZnRlckZhaWxlZEFuZERlbGV0ZSgpXG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgfVxuXG4gIHJlZ2VuZXJhdGVSb2xlTWFwcGluZ0FmdGVyRmFpbGVkQW5kRGVsZXRlKCkge1xuICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZGVsZXRlUm9sZU1hcHBpbmdCeVN0YXRlQW5kRGVwYXJ0bWVudCh0aGlzLnJvbGVNYXBwaW5nRm9ybS52YWx1ZS5taW5pc3RyeSwgdGhpcy5yb2xlTWFwcGluZ0Zvcm0udmFsdWUuZGVwYXJ0bWVudHMpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gU3VjY2VzcyBoYW5kbGluZ1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1N1Y2Nlc3M6JywgcmVzKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICB0aGlzLmZpcnN0QXBpUmVzcG9uc2UgPSBbXVxuICAgICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUZpbmFsUm9sZU1hcHBpbmcoKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKGVycm9yPy5lcnJvcj8uZGV0YWlsLCAnWCcsIHtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLmZpcnN0QXBpUmVzcG9uc2UgPSBbXVxuICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZ2VuZXJhdGVGaW5hbFJvbGVNYXBwaW5nKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICB9XG5cblxuXG59XG5cblxuXG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgPCEtLSA8aW5wdXQgY2xhc3M9XCJidG4tYWN0aXZlXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiRG93bmxvYWQgYXMgUERGXCIgKGNsaWNrKT1cImRvd25sb2FkUERGKClcIiAvPiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibG9nby1jb250YWluZXJcIiAqbmdJZj1cImxvZ2luXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uLW1lZGl1bVwiPjxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2FpLWxvYWRlci5naWZcIj48L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGgyIGNsYXNzPVwiaGlnaGxpZ2h0LWFpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+aUdPVCBBSSBEcml2ZW4gQ0JQPC9zcGFuPlxuICAgICAgICAgICAgPC9oMj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICA8cD5CdWlsZCBZb3VyIENhcGFjaXR5IFdpdGggQ3VzdG9taXplZCBSb2xlIE1hcHBpbmc8L3A+XG4gICAgICAgIDwvZGl2PiAtLT5cbiAgICA8L2Rpdj5cbiAgICA8bWF0LWNhcmQgKm5nSWY9XCJsb2dpbiAmJiByb2xlTWFwcGluZ0Zvcm1cIiBjbGFzcz1cIm10LTJcIiBbZm9ybUdyb3VwXT1cInJvbGVNYXBwaW5nRm9ybVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGVwYXRtZW50LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPCEtLSAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlclwiPi0tPlxuICAgICAgICAgICAgPCEtLSAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj4tLT5cbiAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgICAgICAgIDxwPkNob29zZSBZb3VyIERlcGFydG1lbnQ8L3A+LS0+XG4gICAgICAgICAgICA8IS0tICAgICAgICAgICAgICAgIDwvZGl2Pi0tPlxuICAgICAgICAgICAgPCEtLSAgICAgICAgICAgIDwvZGl2Pi0tPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmFkaW8tZ3JvdXAgbXQtNFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tZ3JvdXAgY2xhc3M9XCJyYWRpby1idG4tZ3JvdXBcIiBmb3JtQ29udHJvbE5hbWU9XCJtaW5pc3RyeVR5cGVcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTWluaXN0cnlUeXBlXCIgKGNoYW5nZSk9XCJvbk1pbmlzdHJ5VHlwZUNoYW5nZSgkZXZlbnQpXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBMZWZ0IHJhZGlvIGJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gdmFsdWU9XCJtaW5pc3RyeVwiIGNsYXNzPVwicmFkaW8tYnRuIGxlZnQtcmFkaW9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmFkaW8tbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxtYXQtaWNvbiBjbGFzcz1cInJhZGlvLWljb25cIiBbbmdDbGFzc109XCJzZWxlY3RlZE1pbmlzdHJ5VHlwZSA9PT0gJ2NlbnRlcic/ICdjaGVja2VkLWxhYmVsJzonJ1wiPmRvbWFpbjwvbWF0LWljb24+ICAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJzZWxlY3RlZE1pbmlzdHJ5VHlwZSA9PT0gJ21pbmlzdHJ5Jz8gJ2NoZWNrZWQtbGFiZWwnOicnXCI+Q2VudHJlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBSaWdodCByYWRpbyBidXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIHZhbHVlPVwic3RhdGVcIiBjbGFzcz1cInJhZGlvLWJ0biByaWdodC1yYWRpb1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyYWRpby1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1pY29uIGNsYXNzPVwicmFkaW8taWNvblwiIFtuZ0NsYXNzXT1cInNlbGVjdGVkTWluaXN0cnlUeXBlID09PSAnc3RhdGUnPyAnY2hlY2tlZC1sYWJlbCc6JydcIj5sb2NhdGlvbl9vbjwvbWF0LWljb24+ICAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJzZWxlY3RlZE1pbmlzdHJ5VHlwZSA9PT0gJ3N0YXRlJz8gJ2NoZWNrZWQtbGFiZWwnOicnXCI+U3RhdGU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cblxuICAgICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzZWxlY3RlZE1pbmlzdHJ5VHlwZSA9PT0gJ21pbmlzdHJ5J1wiPk1pbmlzdHJ5PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNlbGVjdGVkTWluaXN0cnlUeXBlID09PSAnc3RhdGUnXCI+U3RhdGU8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiBzZWFyY2gtYm94LXdpdGgtc2VsZWN0XCI+XG5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJmaWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZDogd2hpdGU7IGJvcmRlci1yYWRpdXM6IDI1cHg7IHBhZGRpbmc6IDAgMTJweDsgYm9yZGVyOiAxcHggc29saWQgI2NjYzt3aWR0aDogMTAwJTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IHBhbmVsQ2xhc3M9XCJzZWxlY3Qtd2l0aC1zZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJzZWxlY3RlZE1pbmlzdHJ5VHlwZSA9PT0gJ21pbmlzdHJ5JyA/ICdTZWxlY3QgTWluaXN0cnkvIERlcGFydG1lbnQnOidTZWxlY3QgU3RhdGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uTWluaXN0cnlDaGFuZ2UoJGV2ZW50KVwiIGZvcm1Db250cm9sTmFtZT1cIm1pbmlzdHJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDI1cHg7IGJhY2tncm91bmQ6IHdoaXRlOyB3aWR0aDoxMDAlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3BlbmVkQ2hhbmdlKT1cIm9uT3BlbmVkKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLXdyYXBwZXJcIiAqbmdJZj1cInBhbmVsT3BlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiIChpbnB1dCk9XCJmaWx0ZXJEYXRhKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIiAoa2V5ZG93bi5zcGFjZSk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBbc2VsZWN0ZWRdPVwic2VsZWN0ZWRNaW5pc3RyeUlkID09PSBpdGVtPy5pZGVudGlmaWVyXCIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIml0ZW0/LmlkZW50aWZpZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJlZExpc3RcIj57e2l0ZW0/Lm9yZ05hbWV9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIiAqbmdJZj1cImRlcGFydG1lbnREYXRhPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbFwiPkRlcGFydG1lbnQ8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwiZmlsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6IHdoaXRlOyBib3JkZXItcmFkaXVzOiAyNXB4OyBwYWRkaW5nOiAwIDEycHg7Ym9yZGVyOiAxcHggc29saWQgI2NjYztcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICNkZXBhcnRtZW50U2VsZWN0IHBhbmVsQ2xhc3M9XCJzZWxlY3Qtd2l0aC1zZWFyY2hcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBEZXBhcnRtZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkZXBhcnRtZW50c1wiIHN0eWxlPVwiYm9yZGVyLXJhZGl1czogMjVweDsgYmFja2dyb3VuZDogd2hpdGU7XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uRGVwYXJ0bWVudENoYW5nZSgpXCIgKG9wZW5lZENoYW5nZSk9XCJvbk9wZW5lZERlcGFydG1lbnQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtd3JhcHBlclwiICpuZ0lmPVwiZGVwYXJ0bWVudFBhbmVsT3BlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiIChpbnB1dCk9XCJmaWx0ZXJEZXBhcnRtZW50RGF0YSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoLWlucHV0XCIgKGtleWRvd24uc3BhY2UpPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJpdGVtPy5pZGVudGlmaWVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlsdGVyZWREZXBhcnRtZW50TGlzdFwiPnt7aXRlbT8ub3JnTmFtZX19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gc2VsZWN0ZWQgZGVwYXJ0bWVudCBub3QgcHJlc2VudCBpbiB0aGUgY3VycmVudCBzZWFyY2gvcGFnZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlcHQgcmVuZGVyZWQgKGhpZGRlbikgc28gbWF0LXNlbGVjdCBkb2VzIG5vdCBjbGVhciB0aGUgc2VsZWN0aW9uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJpdGVtPy5pZGVudGlmaWVyXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcGlubmVkRGVwYXJ0bWVudE9wdGlvbnNcIj57e2l0ZW0/Lm9yZ05hbWV9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBkaXNhYmxlZCAqbmdJZj1cImRlcGFydG1lbnRMb2FkaW5nXCI+TG9hZGluZy4uLjwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBkaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFkZXBhcnRtZW50TG9hZGluZyAmJiAhZmlsdGVyZWREZXBhcnRtZW50TGlzdD8ubGVuZ3RoXCI+Tm8gZGVwYXJ0bWVudCBmb3VuZDwvbWF0LW9wdGlvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsXCI+U2VjdG9yPC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJmaWxsXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiB3aGl0ZTsgYm9yZGVyLXJhZGl1czogMjVweDsgcGFkZGluZzogMCAxMnB4O1wiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBwbGFjZWhvbGRlcj1cIlNlbGVjdCBTZWN0b3JcIiBtdWx0aXBsZSBmb3JtQ29udHJvbE5hbWU9XCJzZWN0b3JzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiYm9yZGVyLXJhZGl1czogMjVweDsgYmFja2dyb3VuZDogd2hpdGU7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiaXRlbT8udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHNlY3RvckRhdGFcIj57e2l0ZW0/LnZhbHVlfX08L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICA8IS0tICpuZ0lmPVwicm9sZU1hcHBpbmdGb3JtLmdldCgnbWluaXN0cnlUeXBlJyk/LnZhbHVlID09PSAnc3RhdGUnXCIgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNCBhZGRpdGlvbmFsLWRldGFpbHNcIj5cbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgcm93cz1cIjVcIiBwbGFjZWhvbGRlcj1cIkFkZGl0aW9uYWwgZGV0YWlsc1wiIGZvcm1Db250cm9sTmFtZT1cImFkZGl0aW9uYWxEZXRhaWxzXCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cblxuICAgICAgICAgICAgICAgIDxidXR0b24gW25nQ2xhc3NdPVwiZGlzYWJsZVVwbG9hZERvY3VtZW50ID8gJ2J0bi1hY3RpdmUtcHJpbWFyeS1kaXNhYmxlJzonYnRuLWFjdGl2ZS1wcmltYXJ5J1wiIGNsYXNzPVwiXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVVcGxvYWREb2N1bWVudFwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJnb1RvVXBsb2FkRG9jdW1lbnQoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+dXBsb2FkPC9tYXQtaWNvbj4gTWFuYWdlIERvY3VtZW50c1xuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tICpuZ0lmPVwicm9sZU1hcHBpbmdGb3JtLmdldCgnbWluaXN0cnlUeXBlJyk/LnZhbHVlID09PSAnc3RhdGUnXCIgLS0+XG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJtdC00IHNlY3Rpb25cIiA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPlVwbG9hZCBEb2N1bWVudCAoUERGKTwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZS11cGxvYWQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwidXBsb2FkRG9jXCIgY2xhc3M9XCJmaWxlLXVwbG9hZC1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWxlLXVwbG9hZC1pY29uXCI+8J+Tjjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXVwbG9hZGVkRmlsZSB8fCB1cGxvYWRlZEZpbGUubGVuZ3RoID09PSAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIENob29zZSB1cCB0byAzIGZpbGVzIChQREYvVFhUKVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInVwbG9hZGVkRmlsZT8ubGVuZ3RoID4gMFwiIGNsYXNzPVwiZmlsZS1saXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZpbGUgb2YgdXBsb2FkZWRGaWxlOyBsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJmaWxlLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmaWxlLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlbW92ZS1maWxlLWljb25cIiAoY2xpY2spPVwicmVtb3ZlRmlsZShpKTskZXZlbnQucHJldmVudERlZmF1bHQoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwidXBsb2FkRG9jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uRmlsZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlblxuICAgICAgICAgICAgICAgICAgICAgIC8+ICAgICAgICAgICAgICAgICAgICAgIFxuXG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImZpbGUtdXBsb2FkLWhpbnRcIj5NYXggZmlsZSBzaXplOiB7e21heEZpbGVTaXplTUJ9fU1CPC9zbWFsbD5cblxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJ1cGxvYWREb2NcIiBtdWx0aXBsZSB0eXBlPVwiZmlsZVwiIChjaGFuZ2UpPVwib25GaWxlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0PVwiLnBkZiwuZG9jLC5kb2N4LC54bHMsLnhsc3gsLnR4dFwiIGNsYXNzPVwiZmlsZS11cGxvYWQtaW5wdXRcIiAvPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ1cGxvYWRFcnJvclwiIGNsYXNzPVwiZXJyb3JcIj57eyB1cGxvYWRFcnJvciB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgPCEtLSAqbmdJZj1cInJvbGVNYXBwaW5nRm9ybS5nZXQoJ21pbmlzdHJ5VHlwZScpPy52YWx1ZSA9PT0gJ3N0YXRlJ1wiIC0tPlxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwibXQtMiBzZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpc2NsYWltZXItdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICA8cD5EaXNjbGFpbWVyOiBQbGVhc2UgZG8gbm90IHVwbG9hZCBhbnkgY29uZmlkZW50aWFsIGRvY3VtZW50cy4gPC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTJcIiAqbmdJZj1cImRvY3VtZW50cz8ubGVuZ3RoIDwgMSAmJiAhKHJvbGVNYXBwaW5nRm9ybT8uaW52YWxpZCkgIHx8IHNob3dXb3JrQWxsb2NhdGlvbk9yZGVyRG9jdW1lbnRNaXNzaW5nXCI+XG4gICAgICAgICAgICAgICAgPHA+PHNwYW4gc3R5bGU9XCJmb250LXNpemU6IC44NzVyZW07Zm9udC13ZWlnaHQ6IGJvbGQ7XCI+Tm90ZTogPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVycm9yXCI+UGxlYXNlIHVwbG9hZCB0aGUgV29yayBBbGxvY2F0aW9uIE9yZGVyIGRvY3VtZW50IHRvIGdlbmVyYXRlIHRoZSBDYXBhY2l0eSBCdWlsZGluZyBQbGFuIChDQlApPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIm10LTJcIiAqbmdJZj1cImRvY3VtZW50cz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwid29ya0FsbG9jYXRpb25PcmRlckRvY3VtZW50TWlzc2luZ1wiPjxzcGFuIHN0eWxlPVwiZm9udC1zaXplOiAuODc1cmVtO2ZvbnQtd2VpZ2h0OiBib2xkO1wiPk5vdGU6XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvclwiPlBsZWFzZSB1cGxvYWQgdGhlIFdvcmsgQWxsb2NhdGlvbiBPcmRlciBkb2N1bWVudCB0byBnZW5lcmF0ZSB0aGUgQ2FwYWNpdHlcbiAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkaW5nIFBsYW4gKENCUCk8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJvbGVNYXBwaW5nRm9ybT8uaW52YWxpZCB8fCAocm9sZU1hcHBpbmdGb3JtLmdldCgnbWluaXN0cnlUeXBlJyk/LnZhbHVlID09PSAnc3RhdGUnICYmICFyb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy52YWx1ZSkgfHwgbG9hZGluZyB8fCBkb2N1bWVudHM/Lmxlbmd0aCA8IDEgXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwicm9sZU1hcHBpbmdGb3JtPy5pbnZhbGlkIHx8IChyb2xlTWFwcGluZ0Zvcm0uZ2V0KCdtaW5pc3RyeVR5cGUnKT8udmFsdWUgPT09ICdzdGF0ZScgJiYgIXJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LnZhbHVlKSB8fCBsb2FkaW5nIHx8IGRvY3VtZW50cz8ubGVuZ3RoIDwgMSA/ICdidG4tZGlzYWJsZSc6J2J0bi1hY3RpdmUnXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFt2YWx1ZV09XCJsb2FkaW5nID8gJ0dlbmVyYXRpbmcgQ0JQLi4uJyA6ICdHZW5lcmF0ZSBDQlAnXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uR2VuZXJhdGVSb2xlTWFwcGluZygpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L21hdC1jYXJkPlxuXG48L2Rpdj5cbjwhLS0gPGRpdiAqbmdJZj1cIiFsb2dpblwiPlxuICAgICAgICA8YXBwLWxvZ2luIChzdWNjZXNzKT1cImxvZ2luU3RhdHVzKCRldmVudClcIj48L2FwcC1sb2dpbj5cbiAgICA8L2Rpdj4gLS0+XG5cbjxkaXYgY2xhc3M9XCJvdmVybGF5LWxvYWRlclwiICpuZ0lmPVwiYXBpTG9hZGluZ1wiPlxuICAgIDxtYXQtc3Bpbm5lciBkaWFtZXRlcj1cIjUwXCI+PC9tYXQtc3Bpbm5lcj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwib3ZlcmxheS1sb2FkZXJcIiAqbmdJZj1cImxvYWRpbmdcIj5cbiAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy1jb250ZW50XCI+XG4gICAgICAgIDxtYXQtc3Bpbm5lciBkaWFtZXRlcj1cIjUwXCI+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxvYWRpbmctdGV4dCBtdC0zXCI+XG4gICAgICAgICAgICA8cCBjbGFzcz1cIm1haW4tbWVzc2FnZVwiPnt7IGN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgfHwgJ1ByZXBhcmluZyBDQlAgUGxhbiBnZW5lcmF0aW9uLi4uJyB9fTwvcD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1kZXRhaWxzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWluZGljYXRvclwiICpuZ0lmPVwiY2h1bmtzLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhci1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXJcIiBbc3R5bGUud2lkdGguJV09XCJnZXREaXNwbGF5UHJvZ3Jlc3NQZXJjZW50YWdlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwicHJvZ3Jlc3MtdGV4dFwiPnt7IGdldERpc3BsYXlQcm9ncmVzc1BlcmNlbnRhZ2UoKSB9fSUgQ29tcGxldGU8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRpbWUtZXN0aW1hdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgUmVhbC10aW1lIHN0cmVhbWluZyBpbiBwcm9ncmVzcy4gVGhpcyBtYXkgdGFrZSAyLTMgbWludXRlcy5cbiAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
1116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS1tYXBwaW5nLWdlbmVyYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvcm9sZS1tYXBwaW5nLWdlbmVyYXRpb24vcm9sZS1tYXBwaW5nLWdlbmVyYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvcm9sZS1tYXBwaW5nLWdlbmVyYXRpb24vcm9sZS1tYXBwaW5nLWdlbmVyYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFnQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBdUMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakYsT0FBTyxRQUFRLE1BQU0sYUFBYSxDQUFDO0FBQ25DLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBRW5ILE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBaUIsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVcvRSxNQUFNLE9BQU8sOEJBQThCO0lBK0Z6QyxZQUNVLFFBQXNCLEVBQ3ZCLGFBQTRCLEVBQzNCLEVBQWUsRUFD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QzdCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFBO2dCQUNwQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFBO2dCQUMxQixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQTtZQUNqQyxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFO29CQUM1QyxRQUFRLEVBQUUsSUFBSTtvQkFDZCxVQUFVLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztpQkFDL0IsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUE7Z0JBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFBO2dCQUNwQixrQ0FBa0M7WUFDcEMsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNmLENBQUM7K0dBbnRDVSw4QkFBOEI7bUdBQTlCLDhCQUE4QiwwZUNwQjNDLHkzWUF5Tk07OzRGRHJNTyw4QkFBOEI7a0JBTDFDLFNBQVM7K0JBQ0UsNkJBQTZCO2lRQUtLLFVBQVU7c0JBQXJELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFFakMsZUFBZTtzQkFBdkIsS0FBSztnQkErREksa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLDJCQUEyQjtzQkFBcEMsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQVMyQyxnQkFBZ0I7c0JBQWpFLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQgaHRtbDJwZGYgZnJvbSAnaHRtbDJwZGYuanMnO1xuaW1wb3J0IHsgRGVsZXRlUm9sZU1hcHBpbmdQb3B1cENvbXBvbmVudCB9IGZyb20gJy4uL2RlbGV0ZS1yb2xlLW1hcHBpbmctcG9wdXAvZGVsZXRlLXJvbGUtbWFwcGluZy1wb3B1cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IGludGVydmFsLCBvZiwgY29uY2F0LCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAsIHRha2VXaGlsZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgdGFrZVVudGlsLCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTWF0U2VsZWN0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTaGFyZWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbW9kdWxlcy9zaGFyZWQvc2VydmljZXMvc2hhcmVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgUm9sZU1hcHBpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbW9kdWxlcy9zaGFyZWQvc2VydmljZXMvcm9sZS1tYXBwaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbW9kdWxlcy9zaGFyZWQvc2VydmljZXMvZXZlbnQuc2VydmljZSc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtcm9sZS1tYXBwaW5nLWdlbmVyYXRpb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vcm9sZS1tYXBwaW5nLWdlbmVyYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yb2xlLW1hcHBpbmctZ2VuZXJhdGlvbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFJvbGVNYXBwaW5nR2VuZXJhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKCdwZGZDb250ZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIHBkZkNvbnRlbnQhOiBFbGVtZW50UmVmO1xuICBcbiAgQElucHV0KCkgbG9naW5TdGF0dXNGbGFnID0gZmFsc2VcbiAgdGl0bGUgPSAnc3VuYmlyZC1jYi1zdGF0aWN3ZWInO1xuICBpc01haW50ZW5hbmNlUGFnZTogYW55XG4gIHNlbGVjdGVkVmFsdWUgPSAnJ1xuICBzZWFyY2hUZXh0ID0gJydcbiAgZGF0YVNvdXJjZTogYW55XG4gIGRpc3BsYXllZENvbHVtbnM6IHN0cmluZ1tdID0gWydSZXF1ZXN0SWQnLCAndGl0bGUnLCAncmVxdWVzdG9yJywgJ3JlcXVlc3RUeXBlJyxcbiAgICAncmVxdWVzdFN0YXR1cycsICdhc3NpZ25lZScsICdyZXF1ZXN0ZWRPbicsICdpbnRlcmVzdHMnLCAnYWN0aW9uJ11cbiAgc2VsZWN0ZWRNaW5pc3RyeVR5cGU6IHN0cmluZyA9ICdtaW5pc3RyeSc7XG4gIG1pbmlzdHJ5RGF0YTogYW55ID0gW11cbiAgbWluaXN0cnlGdWxsRGF0YTogYW55ID0gW11cbiAgcm9sZU1hcHBpbmdGb3JtITogRm9ybUdyb3VwO1xuICBkaXNhYmxlQnRuID0gdHJ1ZVxuICBzZWN0b3JEYXRhID0gW1xuICAgIHtcbiAgICAgIHZhbHVlOiAnV29tZW4gYW5kIGNoaWxkIGRldmVsb3BtZW50J1xuICAgIH0sXG4gICAge1xuICAgICAgdmFsdWU6ICdSdXJhbCBkZXZlbG9wbWVudCdcbiAgICB9LFxuICAgIHtcbiAgICAgIHZhbHVlOiAnVXJiYW4gZGV2ZWxvcG1lbnQnXG4gICAgfSxcbiAgICB7XG4gICAgICB2YWx1ZTogJ0hlYWx0aGNhcmUnXG4gICAgfSxcbiAgICB7XG4gICAgICB2YWx1ZTogJ0FncmljdWx0dXJlJ1xuICAgIH0sXG4gICAge1xuICAgICAgdmFsdWU6ICdPdGhlcnMnXG4gICAgfVxuXG4gIF1cbiAgZGVwYXJ0bWVudERhdGE6IGFueVtdID0gW11cbiAgbG9hZGluZyA9IGZhbHNlXG4gIG1heEZpbGVTaXplTUIgPSAyNTtcbiAgYWxsb3dlZFR5cGVzID0gW1xuICAgICdhcHBsaWNhdGlvbi9wZGYnLFxuICAgICdhcHBsaWNhdGlvbi9tc3dvcmQnLFxuICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCcsXG4gICAgJ2FwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCcsXG4gICAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0JyxcbiAgICAndGV4dC9wbGFpbidcbiAgXTtcbiAgdXBsb2FkRXJyb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICB1cGxvYWRlZEZpbGU6IEZpbGVbXSB8IG51bGwgPSBudWxsO1xuICBsb2dpbiA9IGZhbHNlXG4gIGNicEZpbmFsT2JqOiBhbnkgPSB7fVxuICBzZWxlY3RlZE1pbmlzdHJ5SWQgPSAnJ1xuICBvcmlnaW5hbEZvcm1WYWx1ZXM6IGFueVxuICBjaHVua3M6IHN0cmluZ1tdID0gW107XG4gIGZ1bGxKc29uOiBzdHJpbmcgPSAnJztcbiAgcGFyc2VkRGF0YTogYW55O1xuICBjdXJyZW50UHJvY2Vzc2luZ1N0YWdlOiBzdHJpbmcgPSAnJztcbiAgcHJvY2Vzc2luZ1N0YWdlcyA9IFtcbiAgICAnSW5pdGlhbGl6aW5nIENCUCBQbGFuIGdlbmVyYXRpb24uLi4nLFxuICAgICdBbmFseXppbmcgZGVwYXJ0bWVudGFsIGNvbXBldGVuY3kgcmVxdWlyZW1lbnRzLi4uJyxcbiAgICAnUHJvY2Vzc2luZyB3b3JrIG9yZGVyIHNwZWNpZmljYXRpb25zIGFuZCByb2xlIGRlZmluaXRpb25zLi4uJyxcbiAgICAnR2VuZXJhdGluZyBkZXRhaWxlZCByb2xlcyAmIHJlc3Bvc2liaWxpdGllcy4uLicsXG4gICAgJ0dlbmVyYXRpbmcgZGV0YWlsZWQgY29tcGV0ZW5jaWVzLi4uJyxcbiAgICAnVmFsaWRhdGluZyByb2xlIG1hcHBpbmcgIGFuZCBmaW5hbGl6aW5nIHRoZSBDQlAgUGxhbidcbiAgXTtcbiAgQE91dHB1dCgpIHN1Y2Nlc3NSb2xlTWFwcGluZyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBPdXRwdXQoKSBhbHJlYWR5QXZhaWxhYmxlUm9sZU1hcHBpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBAT3V0cHV0KCkgbG9naW5TdWNjZXNzID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgc2VsZWN0ZWRNaW5pc3RyeU9iajogYW55ID0gJydcbiAgbG9naW5Vc2VyT3JnSWRzID0gW11cbiAgcGFuZWxPcGVuID0gZmFsc2U7XG4gIGRlcGFydG1lbnRQYW5lbE9wZW4gPSBmYWxzZVxuICBmaWx0ZXJlZExpc3QgPSBbXTtcbiAgZmlsdGVyZWREZXBhcnRtZW50TGlzdDogYW55W10gPSBbXTtcbiAgc2VsZWN0ZWREZXBhcnRtZW50T2JqOiBhbnkgPSBudWxsXG4gIHBpbm5lZERlcGFydG1lbnRPcHRpb25zOiBhbnlbXSA9IFtdXG4gIEBWaWV3Q2hpbGQoJ2RlcGFydG1lbnRTZWxlY3QnLCB7IHN0YXRpYzogZmFsc2UgfSkgZGVwYXJ0bWVudFNlbGVjdCE6IE1hdFNlbGVjdDtcbiAgZGVwYXJ0bWVudFBhZ2VTaXplID0gNTBcbiAgZGVwYXJ0bWVudE9mZnNldCA9IDBcbiAgZGVwYXJ0bWVudEhhc01vcmUgPSB0cnVlXG4gIGRlcGFydG1lbnRMb2FkaW5nID0gZmFsc2VcbiAgZGVwYXJ0bWVudFNlYXJjaFF1ZXJ5ID0gJydcbiAgZGVwYXJ0bWVudE1pbmlzdHJ5SWQgPSAnJ1xuICBwcml2YXRlIGRlcGFydG1lbnRTZWFyY2hTdWJqZWN0ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpXG4gIHByaXZhdGUgZGVwYXJ0bWVudFJlcXVlc3RJZCA9IDBcbiAgb3JpZ2luYWxNaW5pc3RyeURhdGEgPSBbXVxuICBhcGlMb2FkaW5nID0gZmFsc2VcbiAgZmlyc3RBcGlSZXNwb25zZTogYW55ID0gbnVsbFxuICBkb2N1bWVudHMgPSBbXVxuICBkaXNhYmxlVXBsb2FkRG9jdW1lbnQgPSB0cnVlXG4gIGRpc2FibGVVcGxvYWREb2N1bWVudE9yaWdpbmFsID0gdHJ1ZVxuICB3b3JrQWxsb2NhdGlvbk9yZGVyRG9jdW1lbnRNaXNzaW5nID0gZmFsc2VcbiAgc2hvd1dvcmtBbGxvY2F0aW9uT3JkZXJEb2N1bWVudE1pc3NpbmcgPSBmYWxzZVxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBldmVudFN2YzogRXZlbnRTZXJ2aWNlLFxuICAgIHB1YmxpYyBzaGFyZWRTZXJ2aWNlOiBTaGFyZWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyLFxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwdWJsaWMgcm9sZU1hcHBpbmdTZXJ2aWNlOiBSb2xlTWFwcGluZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxuICApIHtcbiAgICB0aGlzLnJvdXRlci5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkUmV1c2VSb3V0ZSA9ICgpID0+IGZhbHNlO1xuICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2U8YW55PihbXSlcbiAgICB0aGlzLmlzTWFpbnRlbmFuY2VQYWdlID0gd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJy9tYWludGVuYW5jZScpXG4gIH1cblxuICBuZ09uSW5pdCgpIHtcblxuICAgIHRoaXMuZGVwYXJ0bWVudFNlYXJjaFN1YmplY3QucGlwZShcbiAgICAgIGRlYm91bmNlVGltZSgzMDApLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxuICAgICkuc3Vic2NyaWJlKChxdWVyeTogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLmRlcGFydG1lbnRTZWFyY2hRdWVyeSA9IHF1ZXJ5XG4gICAgICB0aGlzLmxvYWREZXBhcnRtZW50cyh0cnVlKVxuICAgIH0pXG5cbiAgICB0aGlzLmxvZ2luID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmNoZWNrSWZMb2dpbigpXG5cbiAgICB0aGlzLmNicEZpbmFsT2JqID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmdldENCUFBsYW5Mb2NhbFN0b3JhZ2UoKVxuICAgIGlmICh0aGlzLmNicEZpbmFsT2JqICYmIHRoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5ICYmIHRoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5Py5zYk9yZ1R5cGUpIHtcblxuXG4gICAgICB0aGlzLmVkaXRNaW5pc3RyeUZvcm0oKVxuICAgICAgLy8gdGhpcy5nZXRNaW5pc3RyeURhdGEoKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5sb2dpbikge1xuICAgICAgICB0aGlzLmdldE1pbmlzdHJ5RGF0YSgpXG4gICAgICB9XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICBtaW5pc3RyeVR5cGU6IFsnbWluaXN0cnknLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgbWluaXN0cnk6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgc2VjdG9yczogW1tdXSxcbiAgICAgICAgZGVwYXJ0bWVudHM6IFsnJ10sIC8vIHNob3duIG9ubHkgaWYgbWluaXN0cnlUeXBlID09ICdzdGF0ZSdcbiAgICAgICAgYWRkaXRpb25hbERldGFpbHM6IFsnJ10sXG4gICAgICAgIGFkZGl0aW9uYWxfZG9jdW1lbnQ6IFtdXG4gICAgICB9KTtcbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnc2VjdG9ycycpPy5zZXRWYWx1ZShbXSk7XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ21pbmlzdHJ5VHlwZScpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHR5cGUgPT4ge1xuICAgICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5yZXNldCh7XG4gICAgICAgICAgbWluaXN0cnlUeXBlOiB0eXBlLCAvLyBLZWVwIHRoZSBjaGFuZ2VkIHZhbHVlXG4gICAgICAgICAgbWluaXN0cnk6IG51bGwsXG4gICAgICAgICAgc2VjdG9yczogW10sXG4gICAgICAgICAgZGVwYXJ0bWVudHM6IFtdLFxuICAgICAgICAgIGFkZGl0aW9uYWxEZXRhaWxzOiAnJyxcbiAgICAgICAgICBhZGRpdGlvbmFsX2RvY3VtZW50OiBbXVxuICAgICAgICB9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7IC8vIGF2b2lkIHJlLWVtaXR0aW5nIG1pbmlzdHJ5VHlwZSdzIG93biB2YWx1ZUNoYW5nZXMgYW5kIHJlY3Vyc2luZyBpbmZpbml0ZWx5XG4gICAgICAgIGlmICh0eXBlID09PSAnc3RhdGUnKSB7XG4gICAgICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LnNldFZhbHVlKFtdKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUoKHN0YXR1czogYW55KSA9PiB7XG4gICAgICAgIGxldCBoYXNVcGxvYWREb2N1bWVudHMgPSBmYWxzZVxuICAgICAgICB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBoYXNVcGxvYWREb2N1bWVudHMgPVxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCcvdXBsb2FkLWRvY3VtZW50cycpO1xuXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWhhc1VwbG9hZERvY3VtZW50cykge1xuICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jaGVja1JvbGVNYXBwaW5nRm9ybVZhbGlkYXRpb24ubmV4dChzdGF0dXMpO1xuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdHVzID09PSAnVkFMSUQnKSB7XG4gICAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnQgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50T3JpZ2luYWwgPSBmYWxzZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50ID0gdHJ1ZVxuICAgICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50T3JpZ2luYWwgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgfSk7XG4gICAgfVxuXG5cblxuXG5cblxuICB9XG5cbiAgZ2V0VXBsb2FkZWREb2N1bWVudHMoKSB7XG4gICAgY29uc3QgZm9ybURhdGEgPSB0aGlzLnJvbGVNYXBwaW5nRm9ybS52YWx1ZTtcbiAgICB0aGlzLmFwaUxvYWRpbmcgPSB0cnVlXG4gICAgbGV0IHJlcUJvZHkgPSB7XG4gICAgICBzdGF0ZV9jZW50ZXJfaWQ6IGZvcm1EYXRhLm1pbmlzdHJ5LFxuICAgICAgaW5jbHVkZV9zdW1tYXJ5OiB0cnVlLFxuICAgICAgc2tpcDogMCxcbiAgICAgIGxpbWl0OiAyMDBcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBmb3JtRGF0YT8uZGVwYXJ0bWVudHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXFCb2R5WydkZXBhcnRtZW50X2lkJ10gPSBmb3JtRGF0YT8uZGVwYXJ0bWVudHNcbiAgICB9XG4gICAgdGhpcy5hcGlMb2FkaW5nID0gdHJ1ZVxuXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldFVwbG9hZGVkRG9jdW1lbnRzKHJlcUJvZHkpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICBpZiAocmVzICYmIHJlcz8uaXRlbXMgJiYgcmVzPy5pdGVtcz8ubGVuZ3RoKSB7XG4gICAgICAgIGxldCB3QU9Db3VudCA9IDBcbiAgICAgICAgdGhpcy5hcGlMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgdGhpcy5kb2N1bWVudHMgPSByZXM/Lml0ZW1zXG4gICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50ID0gZmFsc2VcbiAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnRPcmlnaW5hbCA9IGZhbHNlXG4gICAgICAgIHRoaXMuZG9jdW1lbnRzLmZvckVhY2goKGl0ZW0pPT57XG4gICAgICAgICAgaWYoaXRlbT8uZG9jdW1lbnRfdHlwZSA9PT0gJ1dvcmsgQWxsb2NhdGlvbiBPcmRlcicpIHtcbiAgICAgICAgICAgIHdBT0NvdW50ID13QU9Db3VudCsxXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIGlmKHdBT0NvdW50IDwgMSkge1xuICAgICAgICAgIHRoaXMud29ya0FsbG9jYXRpb25PcmRlckRvY3VtZW50TWlzc2luZyA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLndvcmtBbGxvY2F0aW9uT3JkZXJEb2N1bWVudE1pc3NpbmcgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zb2xlLmxvZygndGhpcy5kb2N1bWVudHMtLScsIHRoaXMuZG9jdW1lbnRzKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kb2N1bWVudHMgPSBbXVxuICAgICAgICB0aGlzLmFwaUxvYWRpbmcgPSBmYWxzZVxuICAgICAgICB0aGlzLmRpc2FibGVVcGxvYWREb2N1bWVudCA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50T3JpZ2luYWwgPSBmYWxzZVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBhc3luYyBlZGl0TWluaXN0cnlGb3JtKCkge1xuICAgIGlmICh0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeS5zYk9yZ1R5cGUgPT09ICdtaW5pc3RyeScpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNaW5pc3RyeVR5cGUgPSB0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeS5zYk9yZ1R5cGVcbiAgICAgIGF3YWl0IHRoaXMuZ2V0TWluaXN0cnlEYXRhKClcbiAgICAgIGlmICh0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeT8uc2JPcmdUeXBlKSB7XG4gICAgICAgIHRoaXMuZGVwYXJ0bWVudE1pbmlzdHJ5SWQgPSB0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeT8uaWRlbnRpZmllclxuICAgICAgICB0aGlzLmxvYWREZXBhcnRtZW50cyh0cnVlKVxuICAgICAgfVxuXG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICBtaW5pc3RyeVR5cGU6IFt0aGlzLnNlbGVjdGVkTWluaXN0cnlUeXBlLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgbWluaXN0cnk6IFt0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeT8uaWRlbnRpZmllciwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgIHNlY3RvcnM6IFtbXV0sXG4gICAgICAgIGRlcGFydG1lbnRzOiBbdGhpcy5jYnBGaW5hbE9iaj8uZGVwYXJ0bWVudHNdLCAvLyBzaG93biBvbmx5IGlmIG1pbmlzdHJ5VHlwZSA9PSAnc3RhdGUnXG4gICAgICAgIGFkZGl0aW9uYWxEZXRhaWxzOiBbJyddXG4gICAgICB9KTtcbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKChzdGF0dXM6IGFueSkgPT4ge1xuICAgICAgICBsZXQgaGFzVXBsb2FkRG9jdW1lbnRzID0gZmFsc2VcbiAgICAgICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgaGFzVXBsb2FkRG9jdW1lbnRzID1cbiAgICAgICAgICAgIHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygnL3VwbG9hZC1kb2N1bWVudHMnKTtcblxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFoYXNVcGxvYWREb2N1bWVudHMpIHtcbiAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2hlY2tSb2xlTWFwcGluZ0Zvcm1WYWxpZGF0aW9uLm5leHQoc3RhdHVzKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ1ZBTElEJykge1xuICAgICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50ID0gZmFsc2VcbiAgICAgICAgICB0aGlzLmRpc2FibGVVcGxvYWREb2N1bWVudE9yaWdpbmFsID0gZmFsc2VcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRpc2FibGVVcGxvYWREb2N1bWVudCA9IHRydWVcbiAgICAgICAgICB0aGlzLmRpc2FibGVVcGxvYWREb2N1bWVudE9yaWdpbmFsID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgIH0pO1xuXG4gICAgICAvLyB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ3NlY3RvcnMnKT8uc2V0VmFsdWUoW10pO1xuICAgICAgLy8gdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdtaW5pc3RyeVR5cGUnKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh0eXBlID0+IHtcbiAgICAgIC8vICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0ucmVzZXQoe1xuICAgICAgLy8gICAgIG1pbmlzdHJ5VHlwZTogdHlwZSwgLy8gS2VlcCB0aGUgY2hhbmdlZCB2YWx1ZVxuICAgICAgLy8gICAgIG1pbmlzdHJ5OiBudWxsLFxuICAgICAgLy8gICAgIHNlY3RvcnM6IFtdLFxuICAgICAgLy8gICAgIGRlcGFydG1lbnRzOiBbXSxcbiAgICAgIC8vICAgICBhZGRpdGlvbmFsRGV0YWlsczogJydcbiAgICAgIC8vICAgfSk7XG4gICAgICAvLyAgIGlmICh0eXBlID09PSAnc3RhdGUnKSB7XG4gICAgICAvLyAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XG4gICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAvLyAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgIC8vICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LnNldFZhbHVlKFtdKTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgIC8vIH0pO1xuXG4gICAgICBpZiAodGhpcy5taW5pc3RyeURhdGEgJiYgdGhpcy5taW5pc3RyeURhdGEubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNaW5pc3RyeUlkID0gdGhpcy5jYnBGaW5hbE9iaj8ubWluaXN0cnk/LmlkZW50aWZpZXJcbiAgICAgIH1cblxuICAgICAgLy90aGlzLm9uR2VuZXJhdGVSb2xlTWFwcGluZygpXG4gICAgfSBlbHNlIGlmICh0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeT8uc2JPcmdUeXBlID09PSAnc3RhdGUnKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTWluaXN0cnlUeXBlID0gdGhpcy5jYnBGaW5hbE9iaj8ubWluaXN0cnk/LnNiT3JnVHlwZVxuICAgICAgYXdhaXQgdGhpcy5nZXRNaW5pc3RyeURhdGEoKVxuICAgICAgdGhpcy5kZXBhcnRtZW50TWluaXN0cnlJZCA9IHRoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5Py5pZGVudGlmaWVyXG4gICAgICB0aGlzLmxvYWREZXBhcnRtZW50cyh0cnVlKVxuICAgICAgaWYgKHRoaXMubWluaXN0cnlEYXRhICYmIHRoaXMubWluaXN0cnlEYXRhLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkTWluaXN0cnlJZCA9IHRoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5Py5pZGVudGlmaWVyXG4gICAgICB9XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICBtaW5pc3RyeVR5cGU6IFt0aGlzLnNlbGVjdGVkTWluaXN0cnlUeXBlLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgbWluaXN0cnk6IFt0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeT8uaWRlbnRpZmllciwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgIHNlY3RvcnM6IFtbXV0sXG4gICAgICAgIGRlcGFydG1lbnRzOiBbdGhpcy5jYnBGaW5hbE9iaj8uZGVwYXJ0bWVudHNdLCAvLyBzaG93biBvbmx5IGlmIG1pbmlzdHJ5VHlwZSA9PSAnc3RhdGUnXG4gICAgICAgIGFkZGl0aW9uYWxEZXRhaWxzOiBbdGhpcy5jYnBGaW5hbE9iaj8uYWRkaXRpb25hbERldGFpbHNdXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUoKHN0YXR1czogYW55KSA9PiB7XG4gICAgICAgIGxldCBoYXNVcGxvYWREb2N1bWVudHMgPSBmYWxzZVxuICAgICAgICB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBoYXNVcGxvYWREb2N1bWVudHMgPVxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCcvdXBsb2FkLWRvY3VtZW50cycpO1xuXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWhhc1VwbG9hZERvY3VtZW50cykge1xuICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jaGVja1JvbGVNYXBwaW5nRm9ybVZhbGlkYXRpb24ubmV4dChzdGF0dXMpO1xuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdHVzID09PSAnVkFMSUQnKSB7XG4gICAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnQgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50T3JpZ2luYWwgPSBmYWxzZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50ID0gdHJ1ZVxuICAgICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50T3JpZ2luYWwgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgfSk7XG5cbiAgICAgIC8vIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnc2VjdG9ycycpPy5zZXRWYWx1ZShbXSk7XG4gICAgICAvLyB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ21pbmlzdHJ5VHlwZScpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHR5cGUgPT4ge1xuICAgICAgLy8gICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5yZXNldCh7XG4gICAgICAvLyAgICAgbWluaXN0cnlUeXBlOiB0eXBlLCAvLyBLZWVwIHRoZSBjaGFuZ2VkIHZhbHVlXG4gICAgICAvLyAgICAgbWluaXN0cnk6IG51bGwsXG4gICAgICAvLyAgICAgc2VjdG9yczogW10sXG4gICAgICAvLyAgICAgZGVwYXJ0bWVudHM6IFtdLFxuICAgICAgLy8gICAgIGFkZGl0aW9uYWxEZXRhaWxzOiAnJ1xuICAgICAgLy8gICB9KTtcbiAgICAgIC8vICAgaWYgKHR5cGUgPT09ICdzdGF0ZScpIHtcbiAgICAgIC8vICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcbiAgICAgIC8vICAgfSBlbHNlIHtcbiAgICAgIC8vICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LmNsZWFyVmFsaWRhdG9ycygpO1xuICAgICAgLy8gICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnZGVwYXJ0bWVudHMnKT8uc2V0VmFsdWUoW10pO1xuICAgICAgLy8gICB9XG4gICAgICAvLyAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnZGVwYXJ0bWVudHMnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgLy8gfSk7XG4gICAgICBjb25zb2xlLmxvZygndGhpcy5taW5pc3RyeURhdGEnLCB0aGlzLm1pbmlzdHJ5RGF0YSlcbiAgICAgIGlmICh0aGlzLm1pbmlzdHJ5RGF0YSAmJiB0aGlzLm1pbmlzdHJ5RGF0YS5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1pbmlzdHJ5SWQgPSB0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeT8uaWRlbnRpZmllclxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9yaWdpbmFsRm9ybVZhbHVlcyA9IHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldFJhd1ZhbHVlKCk7XG4gICAgdGhpcy5nZXRVcGxvYWRlZERvY3VtZW50cygpXG4gIH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICB0aGlzLmxvZ2luID0gdGhpcy5sb2dpblN0YXR1c0ZsYWdcblxuICB9XG5cbiAgZ2V0Q2hhbmdlZEZpZWxkcyhvcmlnaW5hbDogYW55LCBjdXJyZW50OiBhbnkpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgY2hhbmdlZEtleXM6IHN0cmluZ1tdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvcmlnaW5hbCkge1xuICAgICAgaWYgKCFvcmlnaW5hbC5oYXNPd25Qcm9wZXJ0eShrZXkpKSBjb250aW51ZTtcblxuICAgICAgY29uc3Qgb3JpZ2luYWxWYWx1ZSA9IG9yaWdpbmFsW2tleV07XG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBjdXJyZW50W2tleV07XG5cbiAgICAgIC8vIEZvciBhcnJheXMgYW5kIG9iamVjdHMsIHVzZSBKU09OLnN0cmluZ2lmeSAob3IgbG9kYXNoIGlzRXF1YWwgZm9yIGRlZXAgY29tcGFyaXNvbilcbiAgICAgIGNvbnN0IGlzRXF1YWwgPVxuICAgICAgICB0eXBlb2Ygb3JpZ2luYWxWYWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KG9yaWdpbmFsVmFsdWUpID09PSBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpXG4gICAgICAgICAgOiBvcmlnaW5hbFZhbHVlID09PSBjdXJyZW50VmFsdWU7XG5cbiAgICAgIGlmICghaXNFcXVhbCkge1xuICAgICAgICBjaGFuZ2VkS2V5cy5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoYW5nZWRLZXlzO1xuICB9XG5cbiAgb25HZW5lcmF0ZVJvbGVNYXBwaW5nKCk6IGFueSB7XG5cbiAgICBjb25zdCBjdXJyZW50Rm9ybVZhbHVlcyA9IHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldFJhd1ZhbHVlKCk7XG4gICAgY29uc3QgZm9ybURhdGE6IGFueSA9IG5ldyBGb3JtRGF0YSgpO1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdtaW5pc3RyeVR5cGUnLCBjdXJyZW50Rm9ybVZhbHVlcy5taW5pc3RyeVR5cGUpO1xuICAgIGZvcm1EYXRhLmFwcGVuZCgnbWluaXN0cnknLCBjdXJyZW50Rm9ybVZhbHVlcy5taW5pc3RyeSk7XG4gICAgZm9ybURhdGEuYXBwZW5kKCdzZWN0b3JzJywgSlNPTi5zdHJpbmdpZnkoY3VycmVudEZvcm1WYWx1ZXMuc2VjdG9ycykpO1xuICAgIGZvcm1EYXRhLmFwcGVuZCgnZGVwYXJ0bWVudHMnLCBKU09OLnN0cmluZ2lmeShjdXJyZW50Rm9ybVZhbHVlcy5kZXBhcnRtZW50cykpO1xuICAgIGZvcm1EYXRhLmFwcGVuZCgnYWRkaXRpb25hbERldGFpbHMnLCBjdXJyZW50Rm9ybVZhbHVlcy5hZGRpdGlvbmFsRGV0YWlscyB8fCAnJyk7XG4gICAgY29uc3QgZmlsZTogRmlsZSA9IHRoaXMudXBsb2FkZWRGaWxlIHx8IHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnYWRkaXRpb25hbF9kb2N1bWVudCcpPy52YWx1ZTtcbiAgICBjb25zb2xlLmxvZygnZmlsZScsIGZpbGUpXG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnYWRkaXRpb25hbF9kb2N1bWVudCcsIGZpbGUpO1xuICAgIH1cbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydkZXBhcnRtZW50cyddID0gY3VycmVudEZvcm1WYWx1ZXM/LmRlcGFydG1lbnRzXG4gICAgY29uc3QgZGVwYXJ0bWVudE5hbWUgPSB0aGlzLmRlcGFydG1lbnREYXRhLmZpbmQodSA9PiB1LmlkZW50aWZpZXIgPT09IGN1cnJlbnRGb3JtVmFsdWVzLmRlcGFydG1lbnRzKTtcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydkZXBhcnRtZW50X25hbWUnXSA9IGRlcGFydG1lbnROYW1lPy5vcmdOYW1lXG4gICAgY29uc3Qgc2VsZWN0ZWRNaW5pc3RyeSA9IHRoaXMubWluaXN0cnlEYXRhLmZpbmQoaXRlbSA9PlxuICAgICAgaXRlbS5pZGVudGlmaWVyID09PSBjdXJyZW50Rm9ybVZhbHVlcy5taW5pc3RyeVxuICAgICk7XG5cbiAgICB0aGlzLnNlbGVjdGVkTWluaXN0cnlPYmogPSBzZWxlY3RlZE1pbmlzdHJ5O1xuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ21pbmlzdHJ5J10gPSBzZWxlY3RlZE1pbmlzdHJ5XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NicFBsYW5GaW5hbE9iaicsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmopKVxuICAgIGNvbnNvbGUubG9nKCd0aGlzLnJvbGVNYXBwaW5nRm9ybScsIHRoaXMucm9sZU1hcHBpbmdGb3JtKVxuICAgIGNvbnNvbGUubG9nKCdmb3JtRGF0YS0tJywgZm9ybURhdGEpXG4gICAgZm9yIChjb25zdCBwYWlyIG9mIGZvcm1EYXRhLmVudHJpZXMoKSkge1xuICAgICAgY29uc29sZS5sb2coYCR7cGFpclswXX06YCwgcGFpclsxXSk7XG4gICAgfVxuXG5cbiAgICBjb25zdCBjaGFuZ2VkRmllbGRzID0gdGhpcy5nZXRDaGFuZ2VkRmllbGRzKHRoaXMub3JpZ2luYWxGb3JtVmFsdWVzLCBjdXJyZW50Rm9ybVZhbHVlcyk7XG5cbiAgICBpZiAoY2hhbmdlZEZpZWxkcy5sZW5ndGggPiAwIHx8IChmaWxlICYmIGZpbGUuc2l6ZSA+IDApKSB7XG4gICAgICBjb25zb2xlLmxvZygnY2hhbmdlZEZpZWxkcycsIGNoYW5nZWRGaWVsZHMpXG4gICAgICBjb25zb2xlLmxvZygnQ2hhbmdlZCBmaWVsZHM6JywgY2hhbmdlZEZpZWxkcyk7XG4gICAgICBpZiAoY2hhbmdlZEZpZWxkcy5pbmNsdWRlcygnYWRkaXRpb25hbERldGFpbHMnKSAmJiB0aGlzLnJvbGVNYXBwaW5nRm9ybS52YWx1ZS5hZGRpdGlvbmFsRGV0YWlscz8udHJpbSgpIHx8IChmaWxlICYmIGZpbGUuc2l6ZSA+IDApKSB7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oRGVsZXRlUm9sZU1hcHBpbmdQb3B1cENvbXBvbmVudCwge1xuICAgICAgICAgIHdpZHRoOiAnNDAwcHgnLFxuICAgICAgICAgIGRhdGE6IHtkb2N1bWVudHM6IHRoaXMuZG9jdW1lbnRzfSxcbiAgICAgICAgICBwYW5lbENsYXNzOiAndmlldy1jYnAtcGxhbi1wb3B1cCcsXG4gICAgICAgICAgbWluSGVpZ2h0OiAnMzAwcHgnLCAgICAgICAgICAvLyBTZXQgbWluaW11bSBoZWlnaHRcbiAgICAgICAgICBtYXhIZWlnaHQ6ICc4MHZoJywgICAgICAgICAgIC8vIFByZXZlbnQgaXQgZnJvbSBnb2luZyBiZXlvbmQgdmlld3BvcnRcbiAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUgLy8gT3B0aW9uYWw6IHByZXZlbnQgY2xvc2luZyB3aXRoIG91dHNpZGUgY2xpY2tcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gJ3NhdmVkJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0NoYW5nZXMgc2F2ZWQhJyk7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlXG4gICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZGVsZXRlUm9sZU1hcHBpbmdCeVN0YXRlQW5kRGVwYXJ0bWVudCh0aGlzLnJvbGVNYXBwaW5nRm9ybS52YWx1ZS5taW5pc3RyeSwgdGhpcy5yb2xlTWFwcGluZ0Zvcm0udmFsdWUuZGVwYXJ0bWVudHMpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBTdWNjZXNzIGhhbmRsaW5nXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1N1Y2Nlc3M6JywgcmVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RBcGlSZXNwb25zZSA9IFtdXG4gICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUZpbmFsUm9sZU1hcHBpbmcoKVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5maXJzdEFwaVJlc3BvbnNlID0gW11cbiAgICAgICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oZXJyb3I/LmVycm9yPy5kZXRhaWwsICdYJywge1xuICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgICAgIC8vIHRoaXMuZ2VuZXJhdGVGaW5hbFJvbGVNYXBwaW5nKClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVGaW5hbFJvbGVNYXBwaW5nKClcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUZpbmFsUm9sZU1hcHBpbmcoKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdlbmVyYXRlRmluYWxSb2xlTWFwcGluZygpXG4gICAgICBjb25zb2xlLmxvZygnTm8gY2hhbmdlcyBkZXRlY3RlZC4nKTtcbiAgICB9XG5cbiAgfVxuXG5cbiAgZ2V0TWluaXN0cnlEYXRhKCkge1xuICAgIHRoaXMuYXBpTG9hZGluZyA9IHRydWVcbiAgICBjb25zdCByZXF1ZXN0ZWRUeXBlID0gdGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZVxuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldE1pbmlzdHJ5RGF0YShyZXF1ZXN0ZWRUeXBlKS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnZGF0YS0tJywgZGF0YSlcbiAgICAgICAgdGhpcy5hcGlMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgLy8gSWdub3JlIHN0YWxlIHJlc3BvbnNlcyBmcm9tIGEgdHlwZSB0aGF0IHdhcyBjaGFuZ2VkIGFnYWluIGJlZm9yZSB0aGlzIG9uZSByZXR1cm5lZFxuICAgICAgICBpZiAocmVxdWVzdGVkVHlwZSAhPT0gdGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSkge1xuICAgICAgICAgIHJlc29sdmUoKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHRoaXMubWluaXN0cnlGdWxsRGF0YSA9IGRhdGFcbiAgICAgICAgdGhpcy5taW5pc3RyeURhdGEgPSBbXVxuICAgICAgICBpZiAocmVxdWVzdGVkVHlwZSA9PT0gJ21pbmlzdHJ5Jykge1xuICAgICAgICAgIGRhdGEuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0/LnNiT3JnVHlwZSA9PT0gJ21pbmlzdHJ5Jykge1xuICAgICAgICAgICAgICB0aGlzLm1pbmlzdHJ5RGF0YS5wdXNoKGl0ZW0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIGlmIChyZXF1ZXN0ZWRUeXBlID09PSAnc3RhdGUnKSB7XG4gICAgICAgICAgZGF0YS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbT8uc2JPcmdUeXBlID09PSAnc3RhdGUnKSB7XG4gICAgICAgICAgICAgIHRoaXMubWluaXN0cnlEYXRhLnB1c2goaXRlbSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5nZXRVc2VyUHJvZmlsZURhdGEocmVxdWVzdGVkVHlwZSwgcmVzb2x2ZSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jIG9uTWluaXN0cnlUeXBlQ2hhbmdlKGV2ZW50KSB7XG4gICAgY29uc29sZS5sb2coJ2V2ZW50JywgZXZlbnQpXG5cbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydtaW5pc3RyeVR5cGUnXSA9IGV2ZW50LnZhbHVlXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsncm9sZV9tYXBwaW5nX2dlbmVyYXRpb24nXSA9IFtdXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnJvbGVNYXBwaW5nR2VuZXJhdGlvbkRhdGEgPSBbXVxuICAgIHRoaXMuc2VsZWN0ZWRNaW5pc3RyeVR5cGUgPSBldmVudC52YWx1ZVxuICAgIHRoaXMubWluaXN0cnlEYXRhID0gW11cblxuICAgIGlmICh0aGlzLmxvZ2luKSB7XG4gICAgICBhd2FpdCB0aGlzLmdldE1pbmlzdHJ5RGF0YSgpXG4gICAgfVxuXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NicFBsYW5GaW5hbE9iaicsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmopKVxuICAgIGlmIChldmVudD8udmFsdWUgPT09ICdzdGF0ZScpIHtcbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnbWluaXN0cnknKT8uc2V0VmFsdWUobnVsbCk7XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ3NlY3RvcnMnKT8uc2V0VmFsdWUoW10pO1xuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy5zZXRWYWx1ZShbXSk7XG4gICAgfSBlbHNlIGlmIChldmVudD8udmFsdWUgPT09ICdtaW5pc3RyeScpIHtcbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnbWluaXN0cnknKT8uc2V0VmFsdWUobnVsbCk7XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ3NlY3RvcnMnKT8uc2V0VmFsdWUoW10pO1xuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy5zZXRWYWx1ZShbXSk7XG4gICAgfVxuXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsnbWluaXN0cnknXSA9ICcnXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsnZGVwYXJ0bWVudF9uYW1lJ10gPSAnJ1xuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ2RlcGFydG1lbnRzJ10gPSAnJ1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYnBQbGFuRmluYWxPYmonLCBKU09OLnN0cmluZ2lmeSh0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqKSlcbiAgICAvLyB0aGlzLnJvbGVNYXBwaW5nRm9ybS5yZXNldCgpXG4gICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqPy5taW5pc3RyeSkge1xuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uc2V0RXJyb3JzKHsgaW52YWxpZDogdHJ1ZSB9KTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIC8vICB0aGlzLmRpc2FibGVVcGxvYWREb2N1bWVudCA9IHRydWVcbiAgICAgICAgLy8gICB0aGlzLmRpc2FibGVVcGxvYWREb2N1bWVudE9yaWdpbmFsID0gdHJ1ZVxuICAgICAgfSwgNTAwMClcbiAgICB9XG4gIH1cblxuICBvbk1pbmlzdHJ5Q2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBzZWxlY3RlZE1pbmlzdHJ5SWQgPSBldmVudC52YWx1ZTtcbiAgICBjb25zb2xlLmxvZygnU2VsZWN0ZWQgTWluaXN0cnkgSUQ6Jywgc2VsZWN0ZWRNaW5pc3RyeUlkKTtcbiAgICB0aGlzLmRlcGFydG1lbnREYXRhID0gW11cbiAgICAvLyBZb3UgY2FuIGFjY2VzcyB0aGUgc2VsZWN0ZWQgb2JqZWN0IGlmIG5lZWRlZFxuICAgIGNvbnN0IHNlbGVjdGVkTWluaXN0cnkgPSB0aGlzLm1pbmlzdHJ5RGF0YS5maW5kKGl0ZW0gPT4gaXRlbS5pZGVudGlmaWVyID09PSBzZWxlY3RlZE1pbmlzdHJ5SWQpO1xuICAgIHRoaXMuc2VsZWN0ZWRNaW5pc3RyeU9iaiA9IHNlbGVjdGVkTWluaXN0cnlcbiAgICBjb25zb2xlLmxvZygnU2VsZWN0ZWQgTWluaXN0cnk6Jywgc2VsZWN0ZWRNaW5pc3RyeSk7IGBgXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsnbWluaXN0cnknXSA9IHNlbGVjdGVkTWluaXN0cnlcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydyb2xlX21hcHBpbmdfZ2VuZXJhdGlvbiddID0gW11cbiAgICB0aGlzLnNoYXJlZFNlcnZpY2Uucm9sZU1hcHBpbmdHZW5lcmF0aW9uRGF0YSA9IFtdXG4gICAgLy8gU2VsZWN0aW5nIGEgZGlmZmVyZW50IG1pbmlzdHJ5L3N0YXRlIGludmFsaWRhdGVzIGFueSBwcmV2aW91c2x5IHNlbGVjdGVkIGRlcGFydG1lbnRcbiAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LnNldFZhbHVlKG51bGwpO1xuICAgIHRoaXMuc2VsZWN0ZWREZXBhcnRtZW50T2JqID0gbnVsbFxuICAgIHRoaXMucGlubmVkRGVwYXJ0bWVudE9wdGlvbnMgPSBbXVxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ2RlcGFydG1lbnRfbmFtZSddID0gJydcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydkZXBhcnRtZW50cyddID0gJydcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2JwUGxhbkZpbmFsT2JqJywgSlNPTi5zdHJpbmdpZnkodGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iaikpXG4gICAgaWYgKHNlbGVjdGVkTWluaXN0cnlJZCAmJiAodGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSA9PT0gJ3N0YXRlJyB8fCB0aGlzLnNlbGVjdGVkTWluaXN0cnlUeXBlID09PSAnbWluaXN0cnknKSkge1xuICAgICAgdGhpcy5kZXBhcnRtZW50TWluaXN0cnlJZCA9IHNlbGVjdGVkTWluaXN0cnlJZFxuICAgICAgdGhpcy5kZXBhcnRtZW50U2VhcmNoUXVlcnkgPSAnJ1xuICAgICAgdGhpcy5maWx0ZXJlZERlcGFydG1lbnRMaXN0ID0gW11cbiAgICAgIHRoaXMubG9hZERlcGFydG1lbnRzKHRydWUpXG4gICAgfVxuXG4gICAgdGhpcy5nZXRVcGxvYWRlZERvY3VtZW50cygpXG4gIH1cblxuICBzZWFyY2hEYXRhKCkge1xuXG4gIH1cblxuICBhcHBseUZpbHRlcigpIHtcblxuICB9XG5cbiAgZG93bmxvYWRQREYoKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMucGRmQ29udGVudC5uYXRpdmVFbGVtZW50O1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIG1hcmdpbjogMC41LFxuICAgICAgZmlsZW5hbWU6ICdDQlBfUGxhbi5wZGYnLFxuICAgICAgaW1hZ2U6IHsgdHlwZTogJ2pwZWcnLCBxdWFsaXR5OiAwLjk4IH0sXG4gICAgICBodG1sMmNhbnZhczoge1xuICAgICAgICBzY2FsZTogMixcbiAgICAgICAgdXNlQ09SUzogdHJ1ZSwgIC8vIEltcG9ydGFudCBmb3IgZXh0ZXJuYWwgaW1hZ2VzL2ljb25zXG4gICAgICB9LFxuICAgICAganNQREY6IHtcbiAgICAgICAgdW5pdDogJ2luJyxcbiAgICAgICAgZm9ybWF0OiAnYTQnLFxuICAgICAgICBvcmllbnRhdGlvbjogJ3BvcnRyYWl0J1xuICAgICAgfVxuICAgIH07XG5cbiAgICBodG1sMnBkZigpLmZyb20oZWxlbWVudCkuc2V0KG9wdGlvbnMpLnNhdmUoKTtcblxuICB9XG5cbiAgb25GaWxlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBmaWxlczogRmlsZUxpc3QgPSBldmVudC50YXJnZXQuZmlsZXM7XG4gICAgY29uc3QgbWF4RmlsZXMgPSAzO1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2FkZGl0aW9uYWxfZG9jdW1lbnQnKTtcblxuICAgIC8vIEFsd2F5cyBjbGVhciBjb250cm9sIGZpcnN0IChwcmV2ZW50cyBvbGQgdmFsaWQgdmFsdWUpXG4gICAgY29udHJvbD8ucmVzZXQoKTtcbiAgICBjb250cm9sPy5zZXRFcnJvcnMobnVsbCk7XG4gICAgdGhpcy51cGxvYWRlZEZpbGUgPSBbXTtcbiAgICB0aGlzLnVwbG9hZEVycm9yID0gbnVsbDtcblxuICAgIGlmICghZmlsZXMgfHwgZmlsZXMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICAvLyBMaW1pdCBjaGVja1xuICAgIGlmIChmaWxlcy5sZW5ndGggPiBtYXhGaWxlcykge1xuICAgICAgdGhpcy51cGxvYWRFcnJvciA9IGBZb3UgY2FuIHVwbG9hZCBhIG1heGltdW0gb2YgJHttYXhGaWxlc30gZmlsZXNgO1xuICAgICAgY29udHJvbD8uc2V0RXJyb3JzKHsgbWF4RmlsZXM6IHRydWUgfSk7XG4gICAgICBjb250cm9sPy5tYXJrQXNEaXJ0eSgpO1xuICAgICAgY29udHJvbD8ubWFya0FzVG91Y2hlZCgpO1xuICAgICAgY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbGlkRmlsZXM6IEZpbGVbXSA9IFtdO1xuICAgIGNvbnN0IGludmFsaWRGaWxlczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBtYXhCeXRlcyA9IHRoaXMubWF4RmlsZVNpemVNQiAqIDEwMjQgKiAxMDI0O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZmlsZSA9IGZpbGVzW2ldO1xuXG4gICAgICAvLyBTaXplIGNoZWNrXG4gICAgICBpZiAoZmlsZS5zaXplID4gbWF4Qnl0ZXMpIHtcbiAgICAgICAgaW52YWxpZEZpbGVzLnB1c2goYCR7ZmlsZS5uYW1lfSAoZXhjZWVkcyAke3RoaXMubWF4RmlsZVNpemVNQn1NQilgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFR5cGUgY2hlY2tcbiAgICAgIGlmICghdGhpcy5hbGxvd2VkVHlwZXMuaW5jbHVkZXMoZmlsZS50eXBlKSkge1xuICAgICAgICBpbnZhbGlkRmlsZXMucHVzaChgJHtmaWxlLm5hbWV9IChpbnZhbGlkIHR5cGUpYCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YWxpZEZpbGVzLnB1c2goZmlsZSk7XG4gICAgfVxuXG4gICAgLy8g4p2MIE5PIHZhbGlkIGZpbGVzIOKGkiBmb3JtIE1VU1QgQkUgaW52YWxpZFxuICAgIGlmICh2YWxpZEZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy51cGxvYWRFcnJvciA9IGBJbnZhbGlkIGZpbGUocyk6ICR7aW52YWxpZEZpbGVzLmpvaW4oJywgJyl9YDtcblxuICAgICAgY29udHJvbD8uc2V0VmFsdWUobnVsbCk7XG4gICAgICBjb250cm9sPy5zZXRFcnJvcnMoeyBpbnZhbGlkRmlsZXM6IHRydWUgfSk7XG4gICAgICBjb250cm9sPy5tYXJrQXNEaXJ0eSgpO1xuICAgICAgY29udHJvbD8ubWFya0FzVG91Y2hlZCgpO1xuICAgICAgY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IG9ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5zZXRFcnJvcnMoeyBpbnZhbGlkOiB0cnVlIH0pO1xuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgIH0sIDUwMDApXG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyDinJQgQXQgbGVhc3QgT05FIHZhbGlkIGZpbGUg4oaSIGZvcm0gc2hvdWxkIGJlIFZBTElEXG4gICAgdGhpcy51cGxvYWRlZEZpbGUgPSB2YWxpZEZpbGVzO1xuXG4gICAgaWYgKGludmFsaWRGaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnVwbG9hZEVycm9yID0gYFNvbWUgZmlsZXMgd2VyZSBza2lwcGVkOiAke2ludmFsaWRGaWxlcy5qb2luKCcsICcpfWA7XG4gICAgfVxuXG4gICAgY29udHJvbD8uc2V0VmFsdWUodmFsaWRGaWxlcyk7XG4gICAgY29udHJvbD8uc2V0RXJyb3JzKG51bGwpO1xuICAgIGNvbnRyb2w/Lm1hcmtBc0RpcnR5KCk7XG4gICAgY29udHJvbD8ubWFya0FzVG91Y2hlZCgpO1xuICAgIGNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiB0cnVlIH0pO1xuICB9XG5cblxuXG5cblxuXG4gIGxvZ2luU3RhdHVzKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICB0aGlzLmxvZ2luID0gdHJ1ZVxuICAgICAgdGhpcy5sb2dpblN1Y2Nlc3MuZW1pdCh0cnVlKVxuICAgICAgdGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSA9ICdtaW5pc3RyeSdcblxuICAgICAgdGhpcy5nZXRNaW5pc3RyeURhdGEoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZ2luID0gZmFsc2VcbiAgICB9XG4gIH1cblxuICBnZW5lcmF0ZUZpbmFsUm9sZU1hcHBpbmcoKSB7XG4gICAgdGhpcy5hcGlMb2FkaW5nID0gdHJ1ZTtcblxuICAgIGlmICghdGhpcy5yb2xlTWFwcGluZ0Zvcm0udmFsaWQpIHtcbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50Rm9ybVZhbHVlcyA9IHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldFJhd1ZhbHVlKCk7XG4gICAgbGV0IGZvcm1VcGxvYWREYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICAvLyBNaW5pc3RyeSBzZWxlY3Rpb25cbiAgICBjb25zdCBzZWxlY3RlZE1pbmlzdHJ5ID0gdGhpcy5taW5pc3RyeURhdGEuZmluZChpdGVtID0+XG4gICAgICBpdGVtLmlkZW50aWZpZXIgPT09IGN1cnJlbnRGb3JtVmFsdWVzLm1pbmlzdHJ5XG4gICAgKTtcblxuICAgIHRoaXMuc2VsZWN0ZWRNaW5pc3RyeU9iaiA9IHNlbGVjdGVkTWluaXN0cnk7XG5cbiAgICAvLyBBcHBlbmQgYmFzZSBmaWVsZHNcbiAgICBmb3JtVXBsb2FkRGF0YS5hcHBlbmQoJ3N0YXRlX2NlbnRlcl9pZCcsIGN1cnJlbnRGb3JtVmFsdWVzLm1pbmlzdHJ5IHx8ICcnKTtcbiAgICBmb3JtVXBsb2FkRGF0YS5hcHBlbmQoJ3N0YXRlX2NlbnRlcl9uYW1lJywgc2VsZWN0ZWRNaW5pc3RyeT8ub3JnTmFtZSB8fCAnJyk7XG5cbiAgICBpZiAoY3VycmVudEZvcm1WYWx1ZXMuZGVwYXJ0bWVudHMpIHtcbiAgICAgIGZvcm1VcGxvYWREYXRhLmFwcGVuZCgnZGVwYXJ0bWVudF9pZCcsIGN1cnJlbnRGb3JtVmFsdWVzLmRlcGFydG1lbnRzKTtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudEZvcm1WYWx1ZXMuYWRkaXRpb25hbERldGFpbHMpIHtcbiAgICAgIGZvcm1VcGxvYWREYXRhLmFwcGVuZCgnaW5zdHJ1Y3Rpb24nLCBjdXJyZW50Rm9ybVZhbHVlcy5hZGRpdGlvbmFsRGV0YWlscyk7XG4gICAgfVxuXG4gICAgLy8gR2V0IHVwbG9hZGVkIGZpbGUocylcbiAgICBjb25zdCBmaWxlczogRmlsZSB8IEZpbGVbXSA9XG4gICAgICB0aGlzLnVwbG9hZGVkRmlsZSB8fCB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2FkZGl0aW9uYWxfZG9jdW1lbnQnKT8udmFsdWU7XG5cbiAgICBjb25zb2xlLmxvZygnRmlsZXMgc2VsZWN0ZWQ6JywgZmlsZXMpO1xuXG4gICAgLy8gQXBwZW5kIHNpbmdsZSBvciBtdWx0aXBsZSBmaWxlc1xuICAgIGlmIChmaWxlcykge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsZXMpKSB7XG4gICAgICAgIGZpbGVzLmZvckVhY2goKGZpbGU6IEZpbGUpID0+IHtcbiAgICAgICAgICBmb3JtVXBsb2FkRGF0YS5hcHBlbmQoJ2FkZGl0aW9uYWxfZG9jdW1lbnQnLCBmaWxlLCBmaWxlLm5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvcm1VcGxvYWREYXRhLmFwcGVuZCgnYWRkaXRpb25hbF9kb2N1bWVudCcsIGZpbGVzLCBmaWxlcy5uYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEZWJ1ZzogcHJpbnQgRm9ybURhdGFcbiAgICBjb25zb2xlLmxvZyhcIkZvcm1EYXRhIERlYnVnOlwiKTtcbiAgICBmb3JtVXBsb2FkRGF0YS5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAke2tleX06IEZJTEUgLT4gJHt2YWx1ZS5uYW1lfSAoJHt2YWx1ZS5zaXplfSBieXRlcylgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAke2tleX06ICR7dmFsdWV9YCk7XG4gICAgICB9XG4gICAgfSk7XG5cblxuICAgIC8vIEJ1aWxkIHJlcXVlc3QgYm9keSBmb3IgcG9sbGluZyBBUElcbiAgICBsZXQgcmVxOiBhbnkgPSB7XG4gICAgICBzdGF0ZV9jZW50ZXJfaWQ6IGN1cnJlbnRGb3JtVmFsdWVzLm1pbmlzdHJ5LFxuICAgICAgaW5zdHJ1Y3Rpb246IGN1cnJlbnRGb3JtVmFsdWVzLmFkZGl0aW9uYWxEZXRhaWxzLFxuICAgICAgc3RhdGVfY2VudGVyX25hbWU6IHNlbGVjdGVkTWluaXN0cnk/Lm9yZ05hbWVcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRNaW5pc3RyeVR5cGUgPT09ICdzdGF0ZScgfHwgY3VycmVudEZvcm1WYWx1ZXMuZGVwYXJ0bWVudHMpIHtcbiAgICAgIGNvbnN0IGRlcGFydG1lbnROYW1lID0gdGhpcy5kZXBhcnRtZW50RGF0YS5maW5kKFxuICAgICAgICBkID0+IGQuaWRlbnRpZmllciA9PT0gY3VycmVudEZvcm1WYWx1ZXMuZGVwYXJ0bWVudHNcbiAgICAgICk7XG5cbiAgICAgIHJlcS5kZXBhcnRtZW50X2lkID0gY3VycmVudEZvcm1WYWx1ZXMuZGVwYXJ0bWVudHMgfHwgJyc7XG4gICAgICByZXEuZGVwYXJ0bWVudF9uYW1lID0gZGVwYXJ0bWVudE5hbWU/Lm9yZ05hbWUgfHwgJyc7XG4gICAgfVxuXG5cblxuICAgIC8vIFBvbGxpbmcgQVBJXG4gICAgY29uY2F0KFxuICAgICAgb2YobnVsbCksICAgICAgICAgICAgICAvLyDwn5SlIGltbWVkaWF0ZSBmaXJzdCBlbWlzc2lvblxuICAgICAgaW50ZXJ2YWwoNTAwMCkgICAgICAgICAvLyDij7Egc3Vic2VxdWVudCBwb2xsaW5nIGV2ZXJ5IDVzXG4gICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuc2hhcmVkU2VydmljZS5nZW5lcmF0ZVJvbGVNYXBwaW5nKHJlcSwgZmlsZXMpKSxcbiAgICAgICAgdGFwKGRhdGEgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5maXJzdEFwaVJlc3BvbnNlKSB7XG4gICAgICAgICAgICB0aGlzLmZpcnN0QXBpUmVzcG9uc2UgPSBkYXRhOyAvLyDwn5GIIHN0b3JlIGZpcnN0IHJlc3BvbnNlXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRmlyc3QgQVBJIHJlc3BvbnNlOicsIHRoaXMuZmlyc3RBcGlSZXNwb25zZSk7XG4gICAgICAgICAgICBpZihkYXRhICYmIGRhdGE/LnN0YXR1cyA9PT0gJ0ZBSUxFRCcpIHtcbiAgICAgICAgICAgICAgIHRoaXMuYXBpTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTsgICAvLyDwn5uRIHN0b3AgcG9sbGluZ1xuICAgICAgICAgICAgICAgIHRoaXMucmVnZW5lcmF0ZVJvbGVNYXBwaW5nQWZ0ZXJGYWlsZWRBbmREZWxldGUoKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHRha2VXaGlsZShcbiAgKGRhdGE6IGFueSkgPT5cbiAgICBkYXRhPy5zdGF0dXMgIT09ICdDT01QTEVURUQnICYmXG4gICAgZGF0YT8uc3RhdHVzICE9PSAnRkFJTEVEJyxcbiAgdHJ1ZSAvLyBlbWl0IHRoZSBmaW5hbCBDT01QTEVURUQvRkFJTEVEIHJlc3BvbnNlXG4pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygncm9sZSBtYXBwaW5nIGRhdGEtLScsIGRhdGEpXG4gICAgICAgIGlmICh0aGlzLmZpcnN0QXBpUmVzcG9uc2U/LmlzX2V4aXN0aW5nKSB7XG4gICAgICAgICAgXG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgdGhpcy5zaG93V29ya0FsbG9jYXRpb25PcmRlckRvY3VtZW50TWlzc2luZyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5hcGlMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7ICAgLy8g8J+bkSBzdG9wIHBvbGxpbmdcbiAgICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihEZWxldGVSb2xlTWFwcGluZ1BvcHVwQ29tcG9uZW50LCB7XG4gICAgICAgICAgICB3aWR0aDogJzQwMHB4JyxcbiAgICAgICAgICAgIGRhdGE6IHtkb2N1bWVudHM6IHRoaXMuZG9jdW1lbnRzfSxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6ICd2aWV3LWNicC1wbGFuLXBvcHVwJyxcbiAgICAgICAgICAgIG1pbkhlaWdodDogJzMwMHB4JywgICAgICAgICAgLy8gU2V0IG1pbmltdW0gaGVpZ2h0XG4gICAgICAgICAgICBtYXhIZWlnaHQ6ICc4MHZoJywgICAgICAgICAgIC8vIFByZXZlbnQgaXQgZnJvbSBnb2luZyBiZXlvbmQgdmlld3BvcnRcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSAvLyBPcHRpb25hbDogcHJldmVudCBjbG9zaW5nIHdpdGggb3V0c2lkZSBjbGlja1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSAnc2F2ZWQnKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDaGFuZ2VzIHNhdmVkIScpO1xuXG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWVcbiAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmRlbGV0ZVJvbGVNYXBwaW5nQnlTdGF0ZUFuZERlcGFydG1lbnQodGhpcy5yb2xlTWFwcGluZ0Zvcm0udmFsdWUubWluaXN0cnksIHRoaXMucm9sZU1hcHBpbmdGb3JtLnZhbHVlLmRlcGFydG1lbnRzKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIFN1Y2Nlc3MgaGFuZGxpbmdcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTdWNjZXNzOicsIHJlcyk7XG4gICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgdGhpcy5maXJzdEFwaVJlc3BvbnNlID0gW11cbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVGaW5hbFJvbGVNYXBwaW5nKClcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihlcnJvcj8uZXJyb3I/LmRldGFpbCwgJ1gnLCB7XG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgdGhpcy5maXJzdEFwaVJlc3BvbnNlID0gW11cbiAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAvLyB0aGlzLmdlbmVyYXRlRmluYWxSb2xlTWFwcGluZygpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09PSAnYnV0dG9uJykge1xuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgICAvLyB0aGlzLmdlbmVyYXRlRmluYWxSb2xlTWFwcGluZygpXG4gICAgICAgICAgICAgIC8vIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLyddKTtcbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudFVybCA9IHRoaXMucm91dGVyLnVybDtcblxuICAgICAgICAgICAgICAvLyB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvJywgeyBza2lwTG9jYXRpb25DaGFuZ2U6IHRydWUgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIC8vICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChjdXJyZW50VXJsKTtcbiAgICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ3JvbGVfbWFwcGluZ19nZW5lcmF0aW9uJ10gPVxuICAgICAgICAgICAgICAgIGRhdGE/LnJvbGVfbWFwcGluZ3M7XG4gICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5yb2xlTWFwcGluZ0dlbmVyYXRpb25EYXRhID0gZGF0YT8ucm9sZV9tYXBwaW5ncztcbiAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICAgICAgICAgICAgJ2NicFBsYW5GaW5hbE9iaicsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iailcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3NSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKTtcbiAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvYWkvbGlzdCddLCB7XG4gICAgICAgICAgICAgICAgb25TYW1lVXJsTmF2aWdhdGlvbjogJ3JlbG9hZCdcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIC8vIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKVxuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy53b3JrQWxsb2NhdGlvbk9yZGVyRG9jdW1lbnRNaXNzaW5nKSB7XG4gICAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICB0aGlzLmFwaUxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuc2hvd1dvcmtBbGxvY2F0aW9uT3JkZXJEb2N1bWVudE1pc3NpbmcgPSB0cnVlXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGE/LnN0YXR1cyA9PT0gJ0NPTVBMRVRFRCcpIHtcbiAgICAgICAgICB0aGlzLnNob3dXb3JrQWxsb2NhdGlvbk9yZGVyRG9jdW1lbnRNaXNzaW5nID0gZmFsc2VcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmFwaUxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ3JvbGVfbWFwcGluZ19nZW5lcmF0aW9uJ10gPVxuICAgICAgICAgICAgZGF0YT8ucm9sZV9tYXBwaW5ncztcbiAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uucm9sZU1hcHBpbmdHZW5lcmF0aW9uRGF0YSA9IGRhdGE/LnJvbGVfbWFwcGluZ3M7XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICAgICAgICAnY2JwUGxhbkZpbmFsT2JqJyxcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmopXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHRoaXMuc3VjY2Vzc1JvbGVNYXBwaW5nLmVtaXQodGhpcy5yb2xlTWFwcGluZ0Zvcm0pO1xuXG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdDQlAgUGxhbiBnZW5lcmF0ZWQgc3VjY2Vzc2Z1bGx5IScsICdYJywge1xuICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLXN1Y2Nlc3MnXVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvYWkvbGlzdCddKTtcbiAgICAgICAgfSBlbHNlIGlmKGRhdGEgJiYgZGF0YT8uc3RhdHVzID09PSAnRkFJTEVEJykge1xuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgICAgdGhpcy5hcGlMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7ICAgLy8g8J+bkSBzdG9wIHBvbGxpbmdcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dSb2xlTWFwcGluZ0ZhaWxlZFBvcHVwKClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZVByb2Nlc3NpbmdTdGFnZSgpIHtcbiAgICBjb25zdCBjaHVua0NvdW50ID0gdGhpcy5jaHVua3MubGVuZ3RoO1xuICAgIGxldCBzdGFnZUluZGV4ID0gMDtcblxuICAgIC8vIE11Y2ggc2xvd2VyIHN0YWdlIHByb2dyZXNzaW9uIC0gc3RhZ2VzIHN0YXkgbXVjaCBsb25nZXJcbiAgICBpZiAoY2h1bmtDb3VudCA8PSA4KSB7XG4gICAgICBzdGFnZUluZGV4ID0gMDsgLy8gSW5pdGlhbGl6aW5nIC0gc3RheXMgZm9yIGZpcnN0IDggY2h1bmtzXG4gICAgfSBlbHNlIGlmIChjaHVua0NvdW50IDw9IDIwKSB7XG4gICAgICBzdGFnZUluZGV4ID0gMTsgLy8gQW5hbHl6aW5nIGNvbXBldGVuY3kgcmVxdWlyZW1lbnRzIC0gMTIgY2h1bmtzXG4gICAgfSBlbHNlIGlmIChjaHVua0NvdW50IDw9IDM1KSB7XG4gICAgICBzdGFnZUluZGV4ID0gMjsgLy8gUHJvY2Vzc2luZyB3b3JrIG9yZGVyIC0gMTUgY2h1bmtzXG4gICAgfSBlbHNlIGlmIChjaHVua0NvdW50IDw9IDU1KSB7XG4gICAgICBzdGFnZUluZGV4ID0gMzsgLy8gR2VuZXJhdGluZyByb2xlIG1hcHBpbmdzIC0gMjAgY2h1bmtzXG4gICAgfSBlbHNlIGlmIChjaHVua0NvdW50IDw9IDc1KSB7XG4gICAgICBzdGFnZUluZGV4ID0gNDsgLy8gQ29tcHV0aW5nIGZpbmFsIHJlY29tbWVuZGF0aW9ucyAtIDIwIGNodW5rc1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFnZUluZGV4ID0gNTsgLy8gRmluYWxpemluZyBDQlAgUGxhbiAtIDc1KyBjaHVua3NcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSB0aGlzLnByb2Nlc3NpbmdTdGFnZXNbc3RhZ2VJbmRleF07XG4gIH1cblxuICBnZXRQcm9ncmVzc1BlcmNlbnRhZ2UoKTogbnVtYmVyIHtcbiAgICBjb25zdCBjaHVua0NvdW50ID0gdGhpcy5jaHVua3MubGVuZ3RoO1xuICAgIGlmIChjaHVua0NvdW50ID09PSAwKSByZXR1cm4gMDtcblxuICAgIC8vIE11Y2ggc2xvd2VyIGFuZCBzbW9vdGhlciBwcm9ncmVzcyBjYWxjdWxhdGlvblxuICAgIGxldCBwZXJjZW50YWdlID0gMDtcblxuICAgIGlmIChjaHVua0NvdW50IDw9IDE1KSB7XG4gICAgICAvLyBGaXJzdCAxNSBjaHVua3MgPSAwLTI1JSAodmVyeSBzbG93IHN0YXJ0KVxuICAgICAgcGVyY2VudGFnZSA9IChjaHVua0NvdW50IC8gMTUpICogMjU7XG4gICAgfSBlbHNlIGlmIChjaHVua0NvdW50IDw9IDM1KSB7XG4gICAgICAvLyBOZXh0IDIwIGNodW5rcyA9IDI1LTUwJSAoc2xvdyBlYXJseSBwcm9ncmVzcylcbiAgICAgIHBlcmNlbnRhZ2UgPSAyNSArICgoY2h1bmtDb3VudCAtIDE1KSAvIDIwKSAqIDI1O1xuICAgIH0gZWxzZSBpZiAoY2h1bmtDb3VudCA8PSA2MCkge1xuICAgICAgLy8gTmV4dCAyNSBjaHVua3MgPSA1MC03NSUgKHN0ZWFkeSBtaWRkbGUgcHJvZ3Jlc3MpXG4gICAgICBwZXJjZW50YWdlID0gNTAgKyAoKGNodW5rQ291bnQgLSAzNSkgLyAyNSkgKiAyNTtcbiAgICB9IGVsc2UgaWYgKGNodW5rQ291bnQgPD0gMTAwKSB7XG4gICAgICAvLyBOZXh0IDQwIGNodW5rcyA9IDc1LTkwJSAoc2xvd2VyIGZpbmFsIGFwcHJvYWNoKVxuICAgICAgcGVyY2VudGFnZSA9IDc1ICsgKChjaHVua0NvdW50IC0gNjApIC8gNDApICogMTU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEJleW9uZCAxMDAgY2h1bmtzID0gOTAtOTUlICh2ZXJ5IHNsb3cgZmluYWwgcHJvZ3Jlc3Npb24pXG4gICAgICBwZXJjZW50YWdlID0gOTAgKyBNYXRoLm1pbigoKGNodW5rQ291bnQgLSAxMDApIC8gNTApICogNSwgNSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIE1hdGgucm91bmQocGVyY2VudGFnZSk7XG4gIH1cblxuICBvblN0cmVhbUVuZCgpIHtcbiAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnQ29tcGxldGluZyBDQlAgUGxhbiBnZW5lcmF0aW9uLi4uJztcblxuICAgIC8vIFNob3cgMTAwJSBjb21wbGV0aW9uIGJyaWVmbHkgYmVmb3JlIGZpbmlzaGluZ1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5mdWxsSnNvbiA9IHRoaXMuY2h1bmtzLmpvaW4oJycpO1xuICAgICAgY29uc3QgY2xlYW5lZCA9IHRoaXMuZnVsbEpzb24ucmVwbGFjZSgvXmBgYGpzb25cXG4vLCAnJykucmVwbGFjZSgvYGBgJC8sICcnKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMucGFyc2VkRGF0YSA9IEpTT04ucGFyc2UoY2xlYW5lZCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdQYXJzZWQgZGF0YTonLCB0aGlzLnBhcnNlZERhdGEpO1xuXG4gICAgICAgIC8vIEhhbmRsZSBzdWNjZXNzZnVsIGNvbXBsZXRpb25cbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ3JvbGVfbWFwcGluZ19nZW5lcmF0aW9uJ10gPSB0aGlzLnBhcnNlZERhdGE7XG4gICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5yb2xlTWFwcGluZ0dlbmVyYXRpb25EYXRhID0gdGhpcy5wYXJzZWREYXRhO1xuXG4gICAgICAgIHRoaXMuc3VjY2Vzc1JvbGVNYXBwaW5nLmVtaXQodGhpcy5yb2xlTWFwcGluZ0Zvcm0pO1xuXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignQ0JQIFBsYW4gZ2VuZXJhdGVkIHN1Y2Nlc3NmdWxseSEnLCAnWCcsIHtcbiAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLXN1Y2Nlc3MnXVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignSlNPTiBwYXJzZSBlcnJvcjonLCBlKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignRmFpbGVkIHRvIGdlbmVyYXRlIENCUCBQbGFuLiBQbGVhc2UgdHJ5IGFnYWluLicsICdYJywge1xuICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LCA1MDApO1xuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBnZXQgcHJvZ3Jlc3MgcGVyY2VudGFnZSBpbmNsdWRpbmcgY29tcGxldGlvbiBzdGF0ZVxuICBnZXREaXNwbGF5UHJvZ3Jlc3NQZXJjZW50YWdlKCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuY3VycmVudFByb2Nlc3NpbmdTdGFnZSA9PT0gJ0NvbXBsZXRpbmcgQ0JQIFBsYW4gZ2VuZXJhdGlvbi4uLicpIHtcbiAgICAgIHJldHVybiAxMDA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFByb2dyZXNzUGVyY2VudGFnZSgpO1xuICB9XG5cbiBcbiAgcmVtb3ZlRmlsZShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnVwbG9hZGVkRmlsZSB8fCB0aGlzLnVwbG9hZGVkRmlsZS5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIC8vIFJlbW92ZSBvbmUgZmlsZSBhdCB0aGUgZ2l2ZW4gaW5kZXhcbiAgICB0aGlzLnVwbG9hZGVkRmlsZS5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgLy8gVXBkYXRlIGZvcm0gY29udHJvbCB2YWx1ZVxuICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnYWRkaXRpb25hbF9kb2N1bWVudCcpPy5zZXRWYWx1ZSh0aGlzLnVwbG9hZGVkRmlsZSk7XG4gICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdhZGRpdGlvbmFsX2RvY3VtZW50Jyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcblxuICAgIC8vIENsZWFyIGVycm9ycyBpZiBubyBmaWxlcyBsZWZ0XG4gICAgaWYgKHRoaXMudXBsb2FkZWRGaWxlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy51cGxvYWRFcnJvciA9ICcnO1xuICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBsb2FkRG9jJykgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgIGlmIChpbnB1dCkgaW5wdXQudmFsdWUgPSAnJztcbiAgICB9XG4gIH1cblxuXG4gIGdldFVzZXJQcm9maWxlRGF0YShyZXF1ZXN0ZWRUeXBlPzogc3RyaW5nLCBkb25lPzogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMuc2hhcmVkU2VydmljZS5nZXRVc2VyUHJvZmlsZSgpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ2RhdGEtLScsIGRhdGEpXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndXNlclByb2ZpbGUnLCBKU09OLnN0cmluZ2lmeShkYXRhKSlcbiAgICAgIHRoaXMubG9naW5Vc2VyT3JnSWRzID0gZGF0YT8ub3JnYW5pemF0aW9uX2lkc1xuICAgICAgLy8gSWdub3JlIHN0YWxlIHJlc3BvbnNlcyBmcm9tIGEgdHlwZSB0aGF0IHdhcyBjaGFuZ2VkIGFnYWluIGJlZm9yZSB0aGlzIG9uZSByZXR1cm5lZFxuICAgICAgaWYgKHJlcXVlc3RlZFR5cGUgJiYgcmVxdWVzdGVkVHlwZSAhPT0gdGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSkge1xuICAgICAgICBkb25lPy4oKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGxldCBmaWx0ZXJlZE1pbmlzdHJ5RGF0YSA9IFtdXG4gICAgICB0aGlzLm1pbmlzdHJ5RnVsbERhdGEubWFwKChpdGVtKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmxvZ2luVXNlck9yZ0lkcy5pbmRleE9mKGl0ZW0/LmlkZW50aWZpZXIpID4gLTEgJiYgaXRlbT8uc2JPcmdUeXBlID09PSAocmVxdWVzdGVkVHlwZSB8fCB0aGlzLnNlbGVjdGVkTWluaXN0cnlUeXBlKSkge1xuICAgICAgICAgIGZpbHRlcmVkTWluaXN0cnlEYXRhLnB1c2goaXRlbSlcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgdGhpcy5taW5pc3RyeURhdGEgPSBmaWx0ZXJlZE1pbmlzdHJ5RGF0YVxuICAgICAgdGhpcy5vcmlnaW5hbE1pbmlzdHJ5RGF0YSA9IGZpbHRlcmVkTWluaXN0cnlEYXRhXG4gICAgICB0aGlzLmZpbHRlcmVkTGlzdCA9IGZpbHRlcmVkTWluaXN0cnlEYXRhO1xuICAgICAgZG9uZT8uKClcbiAgICB9KVxuICB9XG5cbiAgb25PcGVuZWQob3BlbmVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5wYW5lbE9wZW4gPSBvcGVuZWQ7XG4gIH1cblxuICBvbk9wZW5lZERlcGFydG1lbnQob3BlbmVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5kZXBhcnRtZW50UGFuZWxPcGVuID0gb3BlbmVkXG4gICAgaWYgKG9wZW5lZCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmRlcGFydG1lbnRTZWxlY3QgJiYgdGhpcy5kZXBhcnRtZW50U2VsZWN0LnBhbmVsICYmIHRoaXMuZGVwYXJ0bWVudFNlbGVjdC5wYW5lbC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy5kZXBhcnRtZW50U2VsZWN0LnBhbmVsLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vbkRlcGFydG1lbnRTY3JvbGwpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmICh0aGlzLmRlcGFydG1lbnRTZWFyY2hRdWVyeSkge1xuICAgICAgLy8gcGFuZWwgY2xvc2VkIHdpdGggYW4gYWN0aXZlIHNlYXJjaDogcmVzZXQgc28gdGhlIGxpc3QgbWF0Y2hlcyB0aGUgY2xlYXJlZCBzZWFyY2ggYm94IG9uIHJlb3BlblxuICAgICAgdGhpcy5kZXBhcnRtZW50U2VhcmNoU3ViamVjdC5uZXh0KCcnKVxuICAgIH1cbiAgfVxuXG4gIG9uRGVwYXJ0bWVudFNjcm9sbCA9IChldmVudDogYW55KSA9PiB7XG4gICAgY29uc3QgcGFuZWwgPSBldmVudC50YXJnZXRcbiAgICBpZiAocGFuZWwuc2Nyb2xsVG9wICsgcGFuZWwuY2xpZW50SGVpZ2h0ID49IHBhbmVsLnNjcm9sbEhlaWdodCAtIDYwKSB7XG4gICAgICB0aGlzLmxvYWREZXBhcnRtZW50cygpXG4gICAgfVxuICB9XG5cbiAgbG9hZERlcGFydG1lbnRzKHJlc2V0ID0gZmFsc2UpIHtcbiAgICBpZiAoIXRoaXMuZGVwYXJ0bWVudE1pbmlzdHJ5SWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoIXJlc2V0ICYmICh0aGlzLmRlcGFydG1lbnRMb2FkaW5nIHx8ICF0aGlzLmRlcGFydG1lbnRIYXNNb3JlKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChyZXNldCkge1xuICAgICAgdGhpcy5kZXBhcnRtZW50T2Zmc2V0ID0gMFxuICAgICAgdGhpcy5kZXBhcnRtZW50SGFzTW9yZSA9IHRydWVcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdElkID0gKyt0aGlzLmRlcGFydG1lbnRSZXF1ZXN0SWRcbiAgICB0aGlzLmRlcGFydG1lbnRMb2FkaW5nID0gdHJ1ZVxuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBsaW1pdDogdGhpcy5kZXBhcnRtZW50UGFnZVNpemUsXG4gICAgICBvZmZzZXQ6IHRoaXMuZGVwYXJ0bWVudE9mZnNldCxcbiAgICAgIHF1ZXJ5OiB0aGlzLmRlcGFydG1lbnRTZWFyY2hRdWVyeVxuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSA9PT0gJ21pbmlzdHJ5J1xuICAgICAgPyB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0Q2VudGVyQmFzZWREZXBhcnRtZW50KHRoaXMuZGVwYXJ0bWVudE1pbmlzdHJ5SWQsIG9wdGlvbnMpXG4gICAgICA6IHRoaXMuc2hhcmVkU2VydmljZS5nZXREZXBhcnRtZW50TGlzdCh0aGlzLmRlcGFydG1lbnRNaW5pc3RyeUlkLCBvcHRpb25zKVxuICAgIHJlcXVlc3Quc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgaWYgKHJlcXVlc3RJZCAhPT0gdGhpcy5kZXBhcnRtZW50UmVxdWVzdElkKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZXBhcnRtZW50TG9hZGluZyA9IGZhbHNlXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gQXJyYXkuaXNBcnJheShyZXMpID8gcmVzIDogKHJlcz8uaXRlbXMgfHwgcmVzPy5kYXRhIHx8IFtdKVxuICAgICAgICB0aGlzLmRlcGFydG1lbnRIYXNNb3JlID0gaXRlbXMubGVuZ3RoID09PSB0aGlzLmRlcGFydG1lbnRQYWdlU2l6ZVxuICAgICAgICB0aGlzLmRlcGFydG1lbnRPZmZzZXQgKz0gaXRlbXMubGVuZ3RoXG4gICAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMuZGVwYXJ0bWVudERhdGEuc29tZShkID0+IGQ/LmlkZW50aWZpZXIgPT09IGl0ZW0/LmlkZW50aWZpZXIpKSB7XG4gICAgICAgICAgICB0aGlzLmRlcGFydG1lbnREYXRhLnB1c2goaXRlbSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuZmlsdGVyZWREZXBhcnRtZW50TGlzdCA9IHJlc2V0ID8gaXRlbXMgOiBbLi4udGhpcy5maWx0ZXJlZERlcGFydG1lbnRMaXN0LCAuLi5pdGVtc11cbiAgICAgICAgdGhpcy5lbnN1cmVTZWxlY3RlZERlcGFydG1lbnRPcHRpb24oKVxuICAgICAgICBpZiAocmVzZXQgJiYgIWl0ZW1zLmxlbmd0aCAmJiAhdGhpcy5kZXBhcnRtZW50U2VhcmNoUXVlcnkgJiYgdGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSA9PT0gJ21pbmlzdHJ5Jykge1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignTm8gRGVwYXJ0bWVudCBGb3VuZCBmb3IgU2VsZWN0ZWQgTWluaXN0cnknLCAnWCcsIHtcbiAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsnZGVwYXJ0bWVudF9uYW1lJ10gPSAnJ1xuICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ2RlcGFydG1lbnRzJ10gPSAnJ1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYnBQbGFuRmluYWxPYmonLCBKU09OLnN0cmluZ2lmeSh0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqKSlcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIGlmIChyZXF1ZXN0SWQgIT09IHRoaXMuZGVwYXJ0bWVudFJlcXVlc3RJZCkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVwYXJ0bWVudExvYWRpbmcgPSBmYWxzZVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvLyBtYXQtc2VsZWN0IG9ubHkgZGlzcGxheXMgYSBzZWxlY3Rpb24gd2hpbGUgYSBtYXQtb3B0aW9uIHdpdGggdGhhdCB2YWx1ZSBpc1xuICAvLyByZW5kZXJlZDsgd2hlbiB0aGUgY3VycmVudCBzZWFyY2gvcGFnZSBmcm9tIHRoZSBzZXJ2ZXIgZG9lcyBub3QgaW5jbHVkZSB0aGVcbiAgLy8gc2VsZWN0ZWQgZGVwYXJ0bWVudCwgaXQgaXMgcmVuZGVyZWQgYXMgYSBoaWRkZW4gb3B0aW9uIGluc3RlYWQgb2YgaW4gdGhlIGxpc3RcbiAgZW5zdXJlU2VsZWN0ZWREZXBhcnRtZW50T3B0aW9uKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkSWQgPSB0aGlzLnJvbGVNYXBwaW5nRm9ybT8uZ2V0KCdkZXBhcnRtZW50cycpPy52YWx1ZVxuICAgIGlmICghc2VsZWN0ZWRJZCB8fCBBcnJheS5pc0FycmF5KHNlbGVjdGVkSWQpXG4gICAgICB8fCB0aGlzLmZpbHRlcmVkRGVwYXJ0bWVudExpc3Quc29tZShkID0+IGQ/LmlkZW50aWZpZXIgPT09IHNlbGVjdGVkSWQpKSB7XG4gICAgICB0aGlzLnBpbm5lZERlcGFydG1lbnRPcHRpb25zID0gW11cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuZGVwYXJ0bWVudERhdGEuZmluZChkID0+IGQ/LmlkZW50aWZpZXIgPT09IHNlbGVjdGVkSWQpXG4gICAgICB8fCAodGhpcy5zZWxlY3RlZERlcGFydG1lbnRPYmo/LmlkZW50aWZpZXIgPT09IHNlbGVjdGVkSWQgPyB0aGlzLnNlbGVjdGVkRGVwYXJ0bWVudE9iaiA6IG51bGwpXG4gICAgICB8fCAodGhpcy5jYnBGaW5hbE9iaj8uZGVwYXJ0bWVudF9uYW1lID8geyBpZGVudGlmaWVyOiBzZWxlY3RlZElkLCBvcmdOYW1lOiB0aGlzLmNicEZpbmFsT2JqLmRlcGFydG1lbnRfbmFtZSB9IDogbnVsbClcbiAgICB0aGlzLnBpbm5lZERlcGFydG1lbnRPcHRpb25zID0gc2VsZWN0ZWQgPyBbc2VsZWN0ZWRdIDogW11cbiAgfVxuXG4gIGZpbHRlckRhdGEoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQudGFyZ2V0ICYmIGV2ZW50LnRhcmdldC52YWx1ZSkge1xuICAgICAgY29uc3QgcyA9IGV2ZW50LnRhcmdldC52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICB0aGlzLmZpbHRlcmVkTGlzdCA9IHRoaXMubWluaXN0cnlEYXRhLmZpbHRlcih4ID0+XG4gICAgICAgIHgub3JnTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHMpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlcmVkTGlzdCA9IHRoaXMubWluaXN0cnlEYXRhXG4gICAgfVxuXG4gIH1cblxuICBmaWx0ZXJEZXBhcnRtZW50RGF0YShldmVudCkge1xuICAgIGNvbnN0IHZhbHVlID0gZXZlbnQgJiYgZXZlbnQudGFyZ2V0ICYmIGV2ZW50LnRhcmdldC52YWx1ZSA/IGV2ZW50LnRhcmdldC52YWx1ZSA6ICcnXG4gICAgdGhpcy5kZXBhcnRtZW50U2VhcmNoU3ViamVjdC5uZXh0KHZhbHVlLnRyaW0oKSlcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc2VsZWN0ZWRNaW5pc3RyeUlkID0gJydcbiAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5yZXNldCgpXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KClcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKClcbiAgfVxuXG4gIG9uRGVwYXJ0bWVudENoYW5nZSgpIHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMucm9sZU1hcHBpbmdGb3JtLnZhbHVlO1xuXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsnZGVwYXJ0bWVudHMnXSA9IGZvcm1EYXRhLmRlcGFydG1lbnRzID8gZm9ybURhdGEuZGVwYXJ0bWVudHMgOiAnJ1xuICAgIHRoaXMuY2JwRmluYWxPYmogPSB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0Q0JQUGxhbkxvY2FsU3RvcmFnZSgpXG4gICAgaWYgKHRoaXMuY2JwRmluYWxPYmogJiYgdGhpcy5jYnBGaW5hbE9iaj8ubWluaXN0cnkgJiYgdGhpcy5jYnBGaW5hbE9iaj8ubWluaXN0cnk/LnNiT3JnVHlwZSkge1xuICAgICAgdGhpcy5jYnBGaW5hbE9ialsnZGVwYXJ0bWVudHMnXSA9IGZvcm1EYXRhLmRlcGFydG1lbnRzID8gZm9ybURhdGEuZGVwYXJ0bWVudHMgOiAnJ1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdGVkTWluaXN0cnkgPSB0aGlzLm1pbmlzdHJ5RGF0YS5maW5kKGl0ZW0gPT4gaXRlbS5pZGVudGlmaWVyID09PSBmb3JtRGF0YS5taW5pc3RyeSk7XG5cblxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ21pbmlzdHJ5J10gPSBzZWxlY3RlZE1pbmlzdHJ5XG5cbiAgICBjb25zdCBkZXBhcnRtZW50TmFtZSA9IHRoaXMuZGVwYXJ0bWVudERhdGEuZmluZCh1ID0+IHUuaWRlbnRpZmllciA9PT0gZm9ybURhdGEuZGVwYXJ0bWVudHMpO1xuICAgIGlmIChkZXBhcnRtZW50TmFtZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZERlcGFydG1lbnRPYmogPSBkZXBhcnRtZW50TmFtZVxuICAgIH1cbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydkZXBhcnRtZW50X25hbWUnXSA9IGRlcGFydG1lbnROYW1lPy5vcmdOYW1lXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NicFBsYW5GaW5hbE9iaicsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmopKVxuICAgIHRoaXMuZ2V0VXBsb2FkZWREb2N1bWVudHMoKVxuICB9XG5cbiAgIGdvVG9VcGxvYWREb2N1bWVudCgpIHtcbiAgIFxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2FpL3VwbG9hZC1kb2N1bWVudHMnXSk7XG4gICAgXG4gIH1cblxuICBzaG93Um9sZU1hcHBpbmdGYWlsZWRQb3B1cCgpIHtcbiAgICBjb25zb2xlLmxvZygncm9sZSBtYXBwaW5nIGZhaWxlZCwgdHJ5IHRvIHJlZ2VuZXJhdGUgcm9sZSBtYXBwaW5nPycpXG4gICAvLyBhbGVydCgncm9sZSBtYXBwaW5nIGZhaWxlZCwgdHJ5IHRvIHJlZ2VuZXJhdGUgcm9sZSBtYXBwaW5nPycpXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihEZWxldGVSb2xlTWFwcGluZ1BvcHVwQ29tcG9uZW50LCB7XG4gICAgICAgICAgd2lkdGg6ICc0MDBweCcsXG4gICAgICAgICAgZGF0YToge2RvY3VtZW50czogdGhpcy5kb2N1bWVudHMsIGZyb206ICdyb2xlTWFwcGluZ0ZhaWxlZCcsfSxcbiAgICAgICAgICBwYW5lbENsYXNzOiAndmlldy1jYnAtcGxhbi1wb3B1cCcsICAgICAgICAgIFxuICAgICAgICAgIG1pbkhlaWdodDogJzMwMHB4JywgICAgICAgICAgLy8gU2V0IG1pbmltdW0gaGVpZ2h0XG4gICAgICAgICAgbWF4SGVpZ2h0OiAnODB2aCcsICAgICAgICAgICAvLyBQcmV2ZW50IGl0IGZyb20gZ29pbmcgYmV5b25kIHZpZXdwb3J0XG4gICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlIC8vIE9wdGlvbmFsOiBwcmV2ZW50IGNsb3Npbmcgd2l0aCBvdXRzaWRlIGNsaWNrXG4gICAgICAgIH0pO1xuICAgIFxuICAgICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gJ3NhdmVkJykge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQ2hhbmdlcyBzYXZlZCEnKTtcbiAgICAgICAgICAgICAgdGhpcy5yZWdlbmVyYXRlUm9sZU1hcHBpbmdBZnRlckZhaWxlZEFuZERlbGV0ZSgpXG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgfVxuXG4gIHJlZ2VuZXJhdGVSb2xlTWFwcGluZ0FmdGVyRmFpbGVkQW5kRGVsZXRlKCkge1xuICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZGVsZXRlUm9sZU1hcHBpbmdCeVN0YXRlQW5kRGVwYXJ0bWVudCh0aGlzLnJvbGVNYXBwaW5nRm9ybS52YWx1ZS5taW5pc3RyeSwgdGhpcy5yb2xlTWFwcGluZ0Zvcm0udmFsdWUuZGVwYXJ0bWVudHMpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gU3VjY2VzcyBoYW5kbGluZ1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1N1Y2Nlc3M6JywgcmVzKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICB0aGlzLmZpcnN0QXBpUmVzcG9uc2UgPSBbXVxuICAgICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUZpbmFsUm9sZU1hcHBpbmcoKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKGVycm9yPy5lcnJvcj8uZGV0YWlsLCAnWCcsIHtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLmZpcnN0QXBpUmVzcG9uc2UgPSBbXVxuICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZ2VuZXJhdGVGaW5hbFJvbGVNYXBwaW5nKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICB9XG5cblxuXG59XG5cblxuXG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgPCEtLSA8aW5wdXQgY2xhc3M9XCJidG4tYWN0aXZlXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiRG93bmxvYWQgYXMgUERGXCIgKGNsaWNrKT1cImRvd25sb2FkUERGKClcIiAvPiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibG9nby1jb250YWluZXJcIiAqbmdJZj1cImxvZ2luXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uLW1lZGl1bVwiPjxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2FpLWxvYWRlci5naWZcIj48L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGgyIGNsYXNzPVwiaGlnaGxpZ2h0LWFpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+aUdPVCBBSSBEcml2ZW4gQ0JQPC9zcGFuPlxuICAgICAgICAgICAgPC9oMj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICA8cD5CdWlsZCBZb3VyIENhcGFjaXR5IFdpdGggQ3VzdG9taXplZCBSb2xlIE1hcHBpbmc8L3A+XG4gICAgICAgIDwvZGl2PiAtLT5cbiAgICA8L2Rpdj5cbiAgICA8bWF0LWNhcmQgKm5nSWY9XCJsb2dpbiAmJiByb2xlTWFwcGluZ0Zvcm1cIiBjbGFzcz1cIm10LTJcIiBbZm9ybUdyb3VwXT1cInJvbGVNYXBwaW5nRm9ybVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGVwYXRtZW50LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPCEtLSAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlclwiPi0tPlxuICAgICAgICAgICAgPCEtLSAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj4tLT5cbiAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgICAgICAgIDxwPkNob29zZSBZb3VyIERlcGFydG1lbnQ8L3A+LS0+XG4gICAgICAgICAgICA8IS0tICAgICAgICAgICAgICAgIDwvZGl2Pi0tPlxuICAgICAgICAgICAgPCEtLSAgICAgICAgICAgIDwvZGl2Pi0tPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmFkaW8tZ3JvdXAgbXQtNFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tZ3JvdXAgY2xhc3M9XCJyYWRpby1idG4tZ3JvdXBcIiBmb3JtQ29udHJvbE5hbWU9XCJtaW5pc3RyeVR5cGVcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTWluaXN0cnlUeXBlXCIgKGNoYW5nZSk9XCJvbk1pbmlzdHJ5VHlwZUNoYW5nZSgkZXZlbnQpXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBMZWZ0IHJhZGlvIGJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gdmFsdWU9XCJtaW5pc3RyeVwiIGNsYXNzPVwicmFkaW8tYnRuIGxlZnQtcmFkaW9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmFkaW8tbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxtYXQtaWNvbiBjbGFzcz1cInJhZGlvLWljb25cIiBbbmdDbGFzc109XCJzZWxlY3RlZE1pbmlzdHJ5VHlwZSA9PT0gJ2NlbnRlcic/ICdjaGVja2VkLWxhYmVsJzonJ1wiPmRvbWFpbjwvbWF0LWljb24+ICAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJzZWxlY3RlZE1pbmlzdHJ5VHlwZSA9PT0gJ21pbmlzdHJ5Jz8gJ2NoZWNrZWQtbGFiZWwnOicnXCI+Q2VudHJlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBSaWdodCByYWRpbyBidXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIHZhbHVlPVwic3RhdGVcIiBjbGFzcz1cInJhZGlvLWJ0biByaWdodC1yYWRpb1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyYWRpby1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1pY29uIGNsYXNzPVwicmFkaW8taWNvblwiIFtuZ0NsYXNzXT1cInNlbGVjdGVkTWluaXN0cnlUeXBlID09PSAnc3RhdGUnPyAnY2hlY2tlZC1sYWJlbCc6JydcIj5sb2NhdGlvbl9vbjwvbWF0LWljb24+ICAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJzZWxlY3RlZE1pbmlzdHJ5VHlwZSA9PT0gJ3N0YXRlJz8gJ2NoZWNrZWQtbGFiZWwnOicnXCI+U3RhdGU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cblxuICAgICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzZWxlY3RlZE1pbmlzdHJ5VHlwZSA9PT0gJ21pbmlzdHJ5J1wiPk1pbmlzdHJ5PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNlbGVjdGVkTWluaXN0cnlUeXBlID09PSAnc3RhdGUnXCI+U3RhdGU8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiBzZWFyY2gtYm94LXdpdGgtc2VsZWN0XCI+XG5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJmaWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZDogd2hpdGU7IGJvcmRlci1yYWRpdXM6IDI1cHg7IHBhZGRpbmc6IDAgMTJweDsgYm9yZGVyOiAxcHggc29saWQgI2NjYzt3aWR0aDogMTAwJTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IHBhbmVsQ2xhc3M9XCJzZWxlY3Qtd2l0aC1zZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJzZWxlY3RlZE1pbmlzdHJ5VHlwZSA9PT0gJ21pbmlzdHJ5JyA/ICdTZWxlY3QgTWluaXN0cnkvIERlcGFydG1lbnQnOidTZWxlY3QgU3RhdGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uTWluaXN0cnlDaGFuZ2UoJGV2ZW50KVwiIGZvcm1Db250cm9sTmFtZT1cIm1pbmlzdHJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDI1cHg7IGJhY2tncm91bmQ6IHdoaXRlOyB3aWR0aDoxMDAlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3BlbmVkQ2hhbmdlKT1cIm9uT3BlbmVkKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLXdyYXBwZXJcIiAqbmdJZj1cInBhbmVsT3BlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiIChpbnB1dCk9XCJmaWx0ZXJEYXRhKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIiAoa2V5ZG93bi5zcGFjZSk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBbc2VsZWN0ZWRdPVwic2VsZWN0ZWRNaW5pc3RyeUlkID09PSBpdGVtPy5pZGVudGlmaWVyXCIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIml0ZW0/LmlkZW50aWZpZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJlZExpc3RcIj57e2l0ZW0/Lm9yZ05hbWV9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIiAqbmdJZj1cImRlcGFydG1lbnREYXRhPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbFwiPkRlcGFydG1lbnQ8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwiZmlsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6IHdoaXRlOyBib3JkZXItcmFkaXVzOiAyNXB4OyBwYWRkaW5nOiAwIDEycHg7Ym9yZGVyOiAxcHggc29saWQgI2NjYztcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICNkZXBhcnRtZW50U2VsZWN0IHBhbmVsQ2xhc3M9XCJzZWxlY3Qtd2l0aC1zZWFyY2hcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBEZXBhcnRtZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkZXBhcnRtZW50c1wiIHN0eWxlPVwiYm9yZGVyLXJhZGl1czogMjVweDsgYmFja2dyb3VuZDogd2hpdGU7XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uRGVwYXJ0bWVudENoYW5nZSgpXCIgKG9wZW5lZENoYW5nZSk9XCJvbk9wZW5lZERlcGFydG1lbnQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtd3JhcHBlclwiICpuZ0lmPVwiZGVwYXJ0bWVudFBhbmVsT3BlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiIChpbnB1dCk9XCJmaWx0ZXJEZXBhcnRtZW50RGF0YSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoLWlucHV0XCIgKGtleWRvd24uc3BhY2UpPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJpdGVtPy5pZGVudGlmaWVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlsdGVyZWREZXBhcnRtZW50TGlzdFwiPnt7aXRlbT8ub3JnTmFtZX19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gc2VsZWN0ZWQgZGVwYXJ0bWVudCBub3QgcHJlc2VudCBpbiB0aGUgY3VycmVudCBzZWFyY2gvcGFnZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlcHQgcmVuZGVyZWQgKGhpZGRlbikgc28gbWF0LXNlbGVjdCBkb2VzIG5vdCBjbGVhciB0aGUgc2VsZWN0aW9uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJpdGVtPy5pZGVudGlmaWVyXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcGlubmVkRGVwYXJ0bWVudE9wdGlvbnNcIj57e2l0ZW0/Lm9yZ05hbWV9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBkaXNhYmxlZCAqbmdJZj1cImRlcGFydG1lbnRMb2FkaW5nXCI+TG9hZGluZy4uLjwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBkaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFkZXBhcnRtZW50TG9hZGluZyAmJiAhZmlsdGVyZWREZXBhcnRtZW50TGlzdD8ubGVuZ3RoXCI+Tm8gZGVwYXJ0bWVudCBmb3VuZDwvbWF0LW9wdGlvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsXCI+U2VjdG9yPC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJmaWxsXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiB3aGl0ZTsgYm9yZGVyLXJhZGl1czogMjVweDsgcGFkZGluZzogMCAxMnB4O1wiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBwbGFjZWhvbGRlcj1cIlNlbGVjdCBTZWN0b3JcIiBtdWx0aXBsZSBmb3JtQ29udHJvbE5hbWU9XCJzZWN0b3JzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiYm9yZGVyLXJhZGl1czogMjVweDsgYmFja2dyb3VuZDogd2hpdGU7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiaXRlbT8udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHNlY3RvckRhdGFcIj57e2l0ZW0/LnZhbHVlfX08L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICA8IS0tICpuZ0lmPVwicm9sZU1hcHBpbmdGb3JtLmdldCgnbWluaXN0cnlUeXBlJyk/LnZhbHVlID09PSAnc3RhdGUnXCIgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNCBhZGRpdGlvbmFsLWRldGFpbHNcIj5cbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgcm93cz1cIjVcIiBwbGFjZWhvbGRlcj1cIkFkZGl0aW9uYWwgZGV0YWlsc1wiIGZvcm1Db250cm9sTmFtZT1cImFkZGl0aW9uYWxEZXRhaWxzXCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cblxuICAgICAgICAgICAgICAgIDxidXR0b24gW25nQ2xhc3NdPVwiZGlzYWJsZVVwbG9hZERvY3VtZW50ID8gJ2J0bi1hY3RpdmUtcHJpbWFyeS1kaXNhYmxlJzonYnRuLWFjdGl2ZS1wcmltYXJ5J1wiIGNsYXNzPVwiXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVVcGxvYWREb2N1bWVudFwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJnb1RvVXBsb2FkRG9jdW1lbnQoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+dXBsb2FkPC9tYXQtaWNvbj4gTWFuYWdlIERvY3VtZW50c1xuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tICpuZ0lmPVwicm9sZU1hcHBpbmdGb3JtLmdldCgnbWluaXN0cnlUeXBlJyk/LnZhbHVlID09PSAnc3RhdGUnXCIgLS0+XG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJtdC00IHNlY3Rpb25cIiA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPlVwbG9hZCBEb2N1bWVudCAoUERGKTwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZS11cGxvYWQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwidXBsb2FkRG9jXCIgY2xhc3M9XCJmaWxlLXVwbG9hZC1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWxlLXVwbG9hZC1pY29uXCI+8J+Tjjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXVwbG9hZGVkRmlsZSB8fCB1cGxvYWRlZEZpbGUubGVuZ3RoID09PSAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIENob29zZSB1cCB0byAzIGZpbGVzIChQREYvVFhUKVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInVwbG9hZGVkRmlsZT8ubGVuZ3RoID4gMFwiIGNsYXNzPVwiZmlsZS1saXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZpbGUgb2YgdXBsb2FkZWRGaWxlOyBsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJmaWxlLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmaWxlLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlbW92ZS1maWxlLWljb25cIiAoY2xpY2spPVwicmVtb3ZlRmlsZShpKTskZXZlbnQucHJldmVudERlZmF1bHQoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwidXBsb2FkRG9jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uRmlsZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlblxuICAgICAgICAgICAgICAgICAgICAgIC8+ICAgICAgICAgICAgICAgICAgICAgIFxuXG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImZpbGUtdXBsb2FkLWhpbnRcIj5NYXggZmlsZSBzaXplOiB7e21heEZpbGVTaXplTUJ9fU1CPC9zbWFsbD5cblxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJ1cGxvYWREb2NcIiBtdWx0aXBsZSB0eXBlPVwiZmlsZVwiIChjaGFuZ2UpPVwib25GaWxlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0PVwiLnBkZiwuZG9jLC5kb2N4LC54bHMsLnhsc3gsLnR4dFwiIGNsYXNzPVwiZmlsZS11cGxvYWQtaW5wdXRcIiAvPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ1cGxvYWRFcnJvclwiIGNsYXNzPVwiZXJyb3JcIj57eyB1cGxvYWRFcnJvciB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgPCEtLSAqbmdJZj1cInJvbGVNYXBwaW5nRm9ybS5nZXQoJ21pbmlzdHJ5VHlwZScpPy52YWx1ZSA9PT0gJ3N0YXRlJ1wiIC0tPlxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwibXQtMiBzZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpc2NsYWltZXItdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICA8cD5EaXNjbGFpbWVyOiBQbGVhc2UgZG8gbm90IHVwbG9hZCBhbnkgY29uZmlkZW50aWFsIGRvY3VtZW50cy4gPC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTJcIiAqbmdJZj1cImRvY3VtZW50cz8ubGVuZ3RoIDwgMSAmJiAhKHJvbGVNYXBwaW5nRm9ybT8uaW52YWxpZCkgIHx8IHNob3dXb3JrQWxsb2NhdGlvbk9yZGVyRG9jdW1lbnRNaXNzaW5nXCI+XG4gICAgICAgICAgICAgICAgPHA+PHNwYW4gc3R5bGU9XCJmb250LXNpemU6IC44NzVyZW07Zm9udC13ZWlnaHQ6IGJvbGQ7XCI+Tm90ZTogPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVycm9yXCI+UGxlYXNlIHVwbG9hZCB0aGUgV29yayBBbGxvY2F0aW9uIE9yZGVyIGRvY3VtZW50IHRvIGdlbmVyYXRlIHRoZSBDYXBhY2l0eSBCdWlsZGluZyBQbGFuIChDQlApPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIm10LTJcIiAqbmdJZj1cImRvY3VtZW50cz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwid29ya0FsbG9jYXRpb25PcmRlckRvY3VtZW50TWlzc2luZ1wiPjxzcGFuIHN0eWxlPVwiZm9udC1zaXplOiAuODc1cmVtO2ZvbnQtd2VpZ2h0OiBib2xkO1wiPk5vdGU6XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvclwiPlBsZWFzZSB1cGxvYWQgdGhlIFdvcmsgQWxsb2NhdGlvbiBPcmRlciBkb2N1bWVudCB0byBnZW5lcmF0ZSB0aGUgQ2FwYWNpdHlcbiAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkaW5nIFBsYW4gKENCUCk8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJvbGVNYXBwaW5nRm9ybT8uaW52YWxpZCB8fCAocm9sZU1hcHBpbmdGb3JtLmdldCgnbWluaXN0cnlUeXBlJyk/LnZhbHVlID09PSAnc3RhdGUnICYmICFyb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy52YWx1ZSkgfHwgbG9hZGluZyB8fCBkb2N1bWVudHM/Lmxlbmd0aCA8IDEgXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwicm9sZU1hcHBpbmdGb3JtPy5pbnZhbGlkIHx8IChyb2xlTWFwcGluZ0Zvcm0uZ2V0KCdtaW5pc3RyeVR5cGUnKT8udmFsdWUgPT09ICdzdGF0ZScgJiYgIXJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LnZhbHVlKSB8fCBsb2FkaW5nIHx8IGRvY3VtZW50cz8ubGVuZ3RoIDwgMSA/ICdidG4tZGlzYWJsZSc6J2J0bi1hY3RpdmUnXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFt2YWx1ZV09XCJsb2FkaW5nID8gJ0dlbmVyYXRpbmcgQ0JQLi4uJyA6ICdHZW5lcmF0ZSBDQlAnXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uR2VuZXJhdGVSb2xlTWFwcGluZygpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L21hdC1jYXJkPlxuXG48L2Rpdj5cbjwhLS0gPGRpdiAqbmdJZj1cIiFsb2dpblwiPlxuICAgICAgICA8YXBwLWxvZ2luIChzdWNjZXNzKT1cImxvZ2luU3RhdHVzKCRldmVudClcIj48L2FwcC1sb2dpbj5cbiAgICA8L2Rpdj4gLS0+XG5cbjxkaXYgY2xhc3M9XCJvdmVybGF5LWxvYWRlclwiICpuZ0lmPVwiYXBpTG9hZGluZ1wiPlxuICAgIDxtYXQtc3Bpbm5lciBkaWFtZXRlcj1cIjUwXCI+PC9tYXQtc3Bpbm5lcj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwib3ZlcmxheS1sb2FkZXJcIiAqbmdJZj1cImxvYWRpbmdcIj5cbiAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy1jb250ZW50XCI+XG4gICAgICAgIDxtYXQtc3Bpbm5lciBkaWFtZXRlcj1cIjUwXCI+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxvYWRpbmctdGV4dCBtdC0zXCI+XG4gICAgICAgICAgICA8cCBjbGFzcz1cIm1haW4tbWVzc2FnZVwiPnt7IGN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgfHwgJ1ByZXBhcmluZyBDQlAgUGxhbiBnZW5lcmF0aW9uLi4uJyB9fTwvcD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1kZXRhaWxzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWluZGljYXRvclwiICpuZ0lmPVwiY2h1bmtzLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhci1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXJcIiBbc3R5bGUud2lkdGguJV09XCJnZXREaXNwbGF5UHJvZ3Jlc3NQZXJjZW50YWdlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwicHJvZ3Jlc3MtdGV4dFwiPnt7IGdldERpc3BsYXlQcm9ncmVzc1BlcmNlbnRhZ2UoKSB9fSUgQ29tcGxldGU8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRpbWUtZXN0aW1hdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgUmVhbC10aW1lIHN0cmVhbWluZyBpbiBwcm9ncmVzcy4gVGhpcyBtYXkgdGFrZSAyLTMgbWludXRlcy5cbiAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19