kwikid-forms 0.5.15 → 0.5.16

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.
@@ -183,7 +183,6 @@ export class KwikIDFormViewComponent {
183
183
  PREVIOUS_FORM_DATA: this.previousFormData,
184
184
  ALL_FORMS_DATA: this.allFormsData
185
185
  }, this.takeAction.bind(this));
186
- console.log("Running Validations:", validations);
187
186
  (() => __awaiter(this, void 0, void 0, function* () {
188
187
  yield validations.validate(field.validation);
189
188
  }))();
@@ -1857,4 +1856,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
1857
1856
  }], onClickFormFieldButton: [{
1858
1857
  type: Output
1859
1858
  }], ngOnInit: [], ngAfterViewInit: [], ngOnChanges: [], initFormConfig: [], setFormFieldsFromFormConfig: [], setFormFieldGroupsFromFormConfig: [], setFormDataFromAllFormsData: [], handleConnectedElementFieldGroupActions: [], handleConnectedElementFieldGroup: [], handleConnectedElementFieldActions: [], handleConnectedElementFields: [], handleConnectedElements: [], handleRemovedFile: [], handleGetKeyValueFile: [], updateFiles: [], uploadFile: [], handleOnClickFormFieldButton: [], handleGetKeyValue: [], handleOnClickResetFormFields: [], handleFieldApiCall: [], handleApiCall: [], executeApiCall: [], isValidRequestHeadersAndBody: [], handleOnClickApiCall: [], handleOnClickGoBack: [], handleOnClickViewForms: [], handleOnClickSaveForm: [], toggleErrorNotification: [], fieldHide: [], fieldGroupHide: [], fieldShow: [], fieldGroupShow: [], fieldDisable: [], fieldGroupDisable: [], fieldEnable: [], fieldGroupEnable: [], fieldReset: [], fieldErrorShow: [], fieldErrorHide: [], fieldMessageShow: [], fieldMessageHide: [], setValue: [], setFieldDefaultValue: [], setDropdownOptions: [], apiCall: [], fieldApiCall: [], fieldMultipleApiCalls: [], fieldMultipleApiCallsEnd: [], taskApiCall: [], taskMultipleApiCalls: [], taskMultipleApiCallsEnd: [], dialogShow: [], dialogHide: [], redirectToUrl: [], patchFieldControlValue: [], setFieldControlValue: [], patchFormGroup: [], isFieldValid: [], isFieldEnabled: [], getFormGroupRawValues: [], showPreview: [], showErrorPreview: [], showPopupForm: [], alertShow: [], takeActionOnFieldGroup: [], takeAction: [] } });
1860
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2t3aWtpZC1mb3Jtcy9zcmMvbGliL3JlbmRlcmVyL2Zvcm0tdmlldy9mb3JtLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvZm9ybS12aWV3L2Zvcm0tdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBR04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRSxPQUFPLEVBQ0wsZUFBZSxFQUVmLGdCQUFnQixFQUNoQixlQUFlLEVBQ2hCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxVQUFVLEVBQ1YsSUFBSSxFQUNKLE1BQU0sRUFHTixVQUFVLEVBQ1Ysb0JBQW9CLEVBQ3BCLGlCQUFpQixFQUNqQixzQkFBc0IsRUFDdEIsYUFBYSxFQUNiLFlBQVksRUFDWixlQUFlLEVBQ2YsTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGFBQWEsRUFDYixvQkFBb0IsRUFDckIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxF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b250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgVHVpUHJldmlld0RpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiQHRhaWdhLXVpL2FkZG9uLXByZXZpZXdcIjtcbmltcG9ydCB7XG4gIFR1aUFsZXJ0U2VydmljZSxcbiAgVHVpRGlhbG9nQ29udGV4dCxcbiAgVHVpRGlhbG9nU2VydmljZSxcbiAgVHVpTm90aWZpY2F0aW9uXG59IGZyb20gXCJAdGFpZ2EtdWkvY29yZVwiO1xuaW1wb3J0IHsgVHVpUHVzaFNlcnZpY2UgfSBmcm9tIFwiQHRhaWdhLXVpL2tpdFwiO1xuaW1wb3J0IHtcbiAgQWN0aW9uLFxuICBDb25kaXRpb24sXG4gIEVTb3VyY2VLZXksXG4gIFJ1bGUsXG4gIFNvdXJjZSxcbiAgVEFjdGlvbixcbiAgVFZhbGlkYXRpb24sXG4gIFZhbGlkYXRpb24sXG4gIGNoZWNrT2JqZWN0S2V5RXhpc3RzLFxuICBnZXRPYmplY3REZWVwQ29weSxcbiAgZ2V0T2JqZWN0VmFsdWVGcm9tUGF0aCxcbiAgaXNFbXB0eVN0cmluZyxcbiAgaXNFbXB0eVZhbHVlLFxuICBpc05vdEVtcHR5VmFsdWUsXG4gIGlzTnVsbCxcbiAgaXNVbmRlZmluZWQsXG4gIGxvZ01ldGhvZCxcbiAgbWVyZ2VPYmplY3RzLFxuICByZXBsYWNlU3RyaW5nLFxuICBzZXRWYWx1ZVRvT2JqZWN0UGF0aFxufSBmcm9tIFwia3dpa2lkLXRvb2xraXRcIjtcbmltcG9ydCB7IEt3aWtVSUxvYWRlclNlcnZpY2UgfSBmcm9tIFwia3dpa3VpXCI7XG5pbXBvcnQgeyBwYWlyd2lzZSB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSBcInV1aWRcIjtcbmltcG9ydCB7IENvbnZlcnRlciB9IGZyb20gXCIuLi9jb25maWctY29udmVydGVyL2NvbmZpZy1jb252ZXJ0ZXJcIjtcbmltcG9ydCB7IEVGb3Jtc0xpc3RTdGF0dXMgfSBmcm9tIFwiLi4vZm9ybXMtbGlzdC9mb3Jtcy1saXN0LmRlZmluaXRpb25zXCI7XG5pbXBvcnQgeyBFQWN0aW9uS2V5IH0gZnJvbSBcIi4vZGVmaW5pdGlvbnMvZm9ybS12aWV3LmFjdGlvbnMuZGVmaW5pdGlvblwiO1xuaW1wb3J0IHtcbiAgRUFwaVJlcXVlc3RVcmxUeXBlLFxuICBFQXBpU3RhdHVzVHlwZSxcbiAgVEFwaSxcbiAgVEFwaUVuZHBvaW50XG59IGZyb20gXCIuL2RlZmluaXRpb25zL2Zvcm0tdmlldy5hcGlzLmRlZmluaXRpb25cIjtcbmltcG9ydCB7XG4gIEVNZXNzYWdlVHlwZSxcbiAgVEZvcm1WaWV3R29CYWNrTW9kZSxcbiAgVE1lc3NhZ2Vcbn0gZnJvbSBcIi4vZGVmaW5pdGlvbnMvZm9ybS12aWV3LmNvbW1vbnMuZGVmaW5pdGlvblwiO1xuaW1wb3J0IHtcbiAgRUZpZWxkVHlwZSxcbiAgVEZpZWxkQXBpQ2FsbCxcbiAgVEZpZWxkVGl0bGVcbn0gZnJvbSBcIi4vZGVmaW5pdGlvbnMvZm9ybS12aWV3LmZpZWxkcy5kZWZpbml0aW9uXCI7XG5pbXBvcnQgeyBLd2lrSURGb3JtVmlld1NlcnZpY2UgfSBmcm9tIFwiLi9mb3JtLXZpZXcuc2VydmljZVwiO1xuaW1wb3J0IHsgQXBpcyB9IGZyb20gXCIuL2hlbHBlcnMvZm9ybS12aWV3LmFwaXMuaGVscGVyXCI7XG5pbXBvcnQge1xuICBhcHBlbmRGb3JtRmllbGRNZXNzYWdlLFxuICBjb252ZXJ0Rm9ybUZpZWxkRW1wdHlWYWx1ZVRvS3dpa1VJRm9ybWF0LFxuICBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb0t3aWtVSUZvcm1hdCxcbiAgY29udmVydEZvcm1GaWVsZFZhbHVlVG9TdGFuZGFyZEZvcm1hdCxcbiAgZmlsdGVyRHVwbGljYXRlc0ZpbGVzLFxuICBnZXRGb3JtRmllbGRCeUtleSxcbiAgZ2V0Rm9ybUZpZWxkSW5kZXhCeUtleSxcbiAgaGlnaGxpZ2h0Rm9ybUZpZWxkRXJyb3IsXG4gIHJlbW92ZUZvcm1GaWVsZE1lc3NhZ2UsXG4gIHNob3dGb3JtRmllbGRFcnJvclxufSBmcm9tIFwiLi9oZWxwZXJzL2Zvcm0tdmlldy5maWVsZHMuaGVscGVyXCI7XG5pbXBvcnQgeyBGb3JtVmFsaWRhdGlvbiB9IGZyb20gXCIuL2hlbHBlcnMvZm9ybS12aWV3LmZvcm0tdmFsaWRhdGlvbnMuaGVscGVyXCI7XG5pbXBvcnQgeyBUYXNrcyB9IGZyb20gXCIuL2hlbHBlcnMvZm9ybS12aWV3LnRhc2tzLmhlbHBlclwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwia3dpa2lkLWZvcm0tdmlld1wiLFxuICB0ZW1wbGF0ZVVybDogXCIuL2Zvcm0tdmlldy5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vZm9ybS12aWV3LmNvbXBvbmVudC5zY3NzXCIsIFwiLi4vc2hhcmVkLnNjc3NcIl0sXG4gIHByb3ZpZGVyczogW0t3aWtJREZvcm1WaWV3U2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgS3dpa0lERm9ybVZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBAVmlld0NoaWxkKFwicHJldmlld1wiKVxuICByZWFkb25seSBwcmV2aWV3OiBUZW1wbGF0ZVJlZjxUdWlEaWFsb2dDb250ZXh0PHZvaWQ+PjtcblxuICBAVmlld0NoaWxkKFwiZGlhbG9nXCIpXG4gIHJlYWRvbmx5IGRpYWxvZzogVGVtcGxhdGVSZWY8VHVpRGlhbG9nQ29udGV4dDx2b2lkPj47XG5cbiAgQElucHV0KClcbiAgZm9ybUNvbmZpZzogYW55O1xuXG4gIEBJbnB1dCgpXG4gIGZvcm1EYXRhOiBhbnk7XG5cbiAgQElucHV0KClcbiAgaXNNb2JpbGVWaWV3OiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgYWxsRm9ybXNEYXRhOiBhbnk7XG5cbiAgQElucHV0KClcbiAgdXNlckNvbmZpZzogYW55O1xuXG4gIEBJbnB1dCgpXG4gIGFwaUNhbGxSZXNwb25zZTogYW55O1xuXG4gIEBJbnB1dCgpXG4gIGJ1dHRvbkNsaWNrUmVzcG9uc2U6IGFueTtcblxuICBASW5wdXQoKVxuICBwb3B1cEZvcm1DYWxsYmFjazogYW55ID0gdW5kZWZpbmVkO1xuXG4gIEBPdXRwdXQoKVxuICBvbkNsaWNrR29CYWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkNsaWNrVmlld0Zvcm1zOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKVxuICBnZXRVbnNhdmVkRGF0YVN0YXRlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkNsaWNrU2F2ZUZvcm06IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uQ2xpY2tBcGlDYWxsOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkFjdGlvblNob3dQb3B1cEZvcm06IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uQ2xpY2tGb3JtRmllbGRCdXR0b246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgZmllbGRHcm91cHM6IGFueSA9IHt9O1xuICBmb3JtRmllbGRzOiBhbnlbXSA9IFtdO1xuICBwcmV2aW91c0Zvcm1EYXRhOiBhbnkgPSB7fTtcblxuICBwcmV2aWV3UHJvcGVydGllczogYW55ID0ge1xuICAgIGh0bWw6IHtcbiAgICAgIGJlZm9yZTogXCJcIixcbiAgICAgIGJlZm9yZVN0eWxlczogXCJcIixcbiAgICAgIGFmdGVyOiBcIlwiLFxuICAgICAgYWZ0ZXJTdHlsZXM6IFwiXCJcbiAgICB9LFxuICAgIGlmcmFtZToge1xuICAgICAgc3JjOiBcIlwiLFxuICAgICAgdGl0bGU6IFwiXCJcbiAgICB9LFxuICAgIHR5cGU6IFwiZGlhbG9nXCIsXG4gICAgc2l6ZTogXCJhdXRvXCIsXG4gICAgcG9wdXBGb3JtS2V5OiBcIlwiLFxuICAgIHRpdGxlOiBcIlwiLFxuICAgIHVuYXZhaWxhYmxlOiBmYWxzZVxuICB9O1xuXG4gIGxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xuICBhcGlMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIGJhY2tCdXR0b24gPSB7XG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIHNob3dMb2FkZXI6IGZhbHNlXG4gIH07XG4gIHZpZXdGb3Jtc0J1dHRvbiA9IHtcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgc2hvd0xvYWRlcjogZmFsc2VcbiAgfTtcbiAgc2F2ZUZvcm1CdXR0b24gPSB7XG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIHNob3dMb2FkZXI6IGZhbHNlXG4gIH07XG5cbiAgZmlsZXM6IGFueSA9IHt9O1xuXG4gIHN0b3BUYXNrRXhlY3V0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHdhaXRpbmdGb3JDaGFuZ2VzOiBib29sZWFuID0gZmFsc2U7XG4gIHBvcHVwRm9ybUNvbmZpZzogYW55ID0gdW5kZWZpbmVkO1xuICBwb3B1cEZvcm1EYXRhOiBhbnkgPSB7fTtcbiAgdGFza0RhdGE6IGFueSA9IHt9O1xuXG4gIHByZXZpZXdEaWFsb2dSZWY6IGFueTtcblxuICBmb3JtR3JvdXA6IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZm9ybVZpZXdTZXJ2aWNlOiBLd2lrSURGb3JtVmlld1NlcnZpY2UsXG4gICAgQEluamVjdChUdWlQdXNoU2VydmljZSlcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcHVzaDogVHVpUHVzaFNlcnZpY2UsXG4gICAgQEluamVjdChUdWlBbGVydFNlcnZpY2UpXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGFsZXJ0U2VydmljZTogVHVpQWxlcnRTZXJ2aWNlLFxuICAgIEBJbmplY3QoVHVpUHJldmlld0RpYWxvZ1NlcnZpY2UpXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcmV2aWV3RGlhbG9nU2VydmljZTogVHVpUHJldmlld0RpYWxvZ1NlcnZpY2UsXG4gICAgQEluamVjdChUdWlEaWFsb2dTZXJ2aWNlKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nU2VydmljZTogVHVpRGlhbG9nU2VydmljZSxcbiAgICBwdWJsaWMgbG9hZGVyU2VydmljZTogS3dpa1VJTG9hZGVyU2VydmljZVxuICApIHt9XG5cbiAgQGxvZ01ldGhvZFxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5pbml0Rm9ybUNvbmZpZyh0aGlzLmZvcm1Db25maWcpO1xuXG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pKCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHt9XG5cbiAgQGxvZ01ldGhvZFxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgdmVyaWZ5Q2hhbmdlID0gKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gY2hlY2tPYmplY3RLZXlFeGlzdHMoY2hhbmdlcywga2V5KSAmJiAhY2hhbmdlc1trZXldLmZpcnN0Q2hhbmdlO1xuICAgIH07XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImZvcm1EYXRhXCIpKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGNoYW5nZXMuZm9ybURhdGEuY3VycmVudFZhbHVlLCBcImRhdGFcIikgJiZcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoY2hhbmdlcy5mb3JtRGF0YS5jdXJyZW50VmFsdWUsIFwiZXh0ZW5kZWREYXRhXCIpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHtcbiAgICAgICAgICAuLi50aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIC4uLmNoYW5nZXMuZm9ybURhdGEuY3VycmVudFZhbHVlW1wiZGF0YVwiXVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHtcbiAgICAgICAgICAuLi50aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIC4uLmNoYW5nZXMuZm9ybURhdGEuY3VycmVudFZhbHVlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJwb3B1cEZvcm1DYWxsYmFja1wiKSkge1xuICAgICAgaWYgKGlzTm90RW1wdHlWYWx1ZShjaGFuZ2VzLnBvcHVwRm9ybUNhbGxiYWNrLmN1cnJlbnRWYWx1ZSkpIHtcbiAgICAgICAgY29uc3QgcG9wdXBGb3JtRGF0YSA9XG4gICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoXG4gICAgICAgICAgICBjaGFuZ2VzLnBvcHVwRm9ybUNhbGxiYWNrLmN1cnJlbnRWYWx1ZS5wb3B1cEZvcm1EYXRhLFxuICAgICAgICAgICAgXCJkYXRhXCJcbiAgICAgICAgICApICYmXG4gICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoXG4gICAgICAgICAgICBjaGFuZ2VzLnBvcHVwRm9ybUNhbGxiYWNrLmN1cnJlbnRWYWx1ZS5wb3B1cEZvcm1EYXRhLFxuICAgICAgICAgICAgXCJleHRlbmRlZERhdGFcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgID8gY2hhbmdlcy5wb3B1cEZvcm1DYWxsYmFjay5jdXJyZW50VmFsdWUucG9wdXBGb3JtRGF0YVtcImRhdGFcIl1cbiAgICAgICAgICAgIDogY2hhbmdlcy5wb3B1cEZvcm1DYWxsYmFjay5jdXJyZW50VmFsdWUucG9wdXBGb3JtRGF0YTtcblxuICAgICAgICBjb25zdCBwb3B1cEZvcm1Db25maWcgPVxuICAgICAgICAgIGNoYW5nZXMucG9wdXBGb3JtQ2FsbGJhY2suY3VycmVudFZhbHVlLnBvcHVwRm9ybUNvbmZpZztcblxuICAgICAgICB0aGlzLnBvcHVwRm9ybURhdGEgPSBtZXJnZU9iamVjdHModGhpcy5wb3B1cEZvcm1EYXRhLCB7XG4gICAgICAgICAgW3BvcHVwRm9ybUNvbmZpZy5rZXldOiBwb3B1cEZvcm1EYXRhXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZm9ybURhdGEgPSBtZXJnZU9iamVjdHModGhpcy5mb3JtRGF0YSwgdGhpcy5wb3B1cEZvcm1EYXRhKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoXG4gICAgICAgICAgICBjaGFuZ2VzLnBvcHVwRm9ybUNhbGxiYWNrLmN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgIFwic3RvcFRhc2tFeGVjdXRpb25cIlxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5zdG9wVGFza0V4ZWN1dGlvbiA9XG4gICAgICAgICAgICBjaGFuZ2VzLnBvcHVwRm9ybUNhbGxiYWNrLmN1cnJlbnRWYWx1ZS5zdG9wVGFza0V4ZWN1dGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN0b3BUYXNrRXhlY3V0aW9uID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy53YWl0aW5nRm9yQ2hhbmdlcyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiaXNNb2JpbGVWaWV3XCIpKSB7XG4gICAgICB0aGlzLmlzTW9iaWxlVmlldyA9IGNoYW5nZXMuaXNNb2JpbGVWaWV3LmN1cnJlbnRWYWx1ZTtcbiAgICB9XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImFwaUNhbGxSZXNwb25zZVwiKSkge1xuICAgICAgdGhpcy5hcGlDYWxsUmVzcG9uc2UgPSBjaGFuZ2VzLmFwaUNhbGxSZXNwb25zZS5jdXJyZW50VmFsdWU7XG5cbiAgICAgIGxldCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5KTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSB0aGlzLmFwaUNhbGxSZXNwb25zZT8ucmVzcG9uc2U7XG5cbiAgICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuRklMRTpcbiAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRGaWxlID0gZ2V0T2JqZWN0RGVlcENvcHkoe1xuICAgICAgICAgICAgICBpZDogdXVpZHY0KCksXG4gICAgICAgICAgICAgIC4uLnJlc3BvbnNlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVGaWxlcyh1cGRhdGVkRmlsZSwgXCJOT1JNQUxcIiwgdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlZEZpbGUgPSBnZXRPYmplY3REZWVwQ29weSh7XG4gICAgICAgICAgICAgIGlkOiB1dWlkdjQoKSxcbiAgICAgICAgICAgICAgLi4udGhpcy5hcGlDYWxsUmVzcG9uc2U/LnBheWxvYWQ/Lm1ldGFkYXRhXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVGaWxlcyh1cGRhdGVkRmlsZSwgXCJFUlJPUlwiLCB0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImJ1dHRvbkNsaWNrUmVzcG9uc2VcIikpIHtcbiAgICAgIHRoaXMuYnV0dG9uQ2xpY2tSZXNwb25zZSA9IGNoYW5nZXMuYnV0dG9uQ2xpY2tSZXNwb25zZS5jdXJyZW50VmFsdWU7XG5cbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UsIFwia2V5XCIpKSB7XG4gICAgICAgIGxldCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KFxuICAgICAgICAgIHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICB0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2U/LmtleVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UsIFwiZGVmYXVsdFwiKSkge1xuICAgICAgICAgIGZpZWxkLmRlZmF1bHQgPSBnZXRPYmplY3REZWVwQ29weSh0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UuZGVmYXVsdCk7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuYnV0dG9uQ2xpY2tSZXNwb25zZVtcImRlZmF1bHRcIl07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMuYnV0dG9uQ2xpY2tSZXNwb25zZSwgXCJtZXNzYWdlc1wiKSkge1xuICAgICAgICAgIGZpZWxkLm1lc3NhZ2VzID0gZ2V0T2JqZWN0RGVlcENvcHkodGhpcy5idXR0b25DbGlja1Jlc3BvbnNlLm1lc3NhZ2VzKTtcbiAgICAgICAgICBkZWxldGUgdGhpcy5idXR0b25DbGlja1Jlc3BvbnNlW1wibWVzc2FnZXNcIl07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMuYnV0dG9uQ2xpY2tSZXNwb25zZSwgXCJ2YWxpZGF0aW9uXCIpKSB7XG4gICAgICAgICAgZmllbGQudmFsaWRhdGlvbiA9IGdldE9iamVjdERlZXBDb3B5KFxuICAgICAgICAgICAgdGhpcy5idXR0b25DbGlja1Jlc3BvbnNlLnZhbGlkYXRpb25cbiAgICAgICAgICApO1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2VbXCJ2YWxpZGF0aW9uXCJdO1xuICAgICAgICB9XG5cbiAgICAgICAgZmllbGQgPSBnZXRPYmplY3REZWVwQ29weShcbiAgICAgICAgICBtZXJnZU9iamVjdHMoZmllbGQsIHRoaXMuYnV0dG9uQ2xpY2tSZXNwb25zZSlcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwidmFsaWRhdGlvblwiKSkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLnZhbGlkYXRpb24sIFwidHJpZ2dlcnNcIikgJiZcbiAgICAgICAgICAgIGZpZWxkLnZhbGlkYXRpb24udHJpZ2dlcnMuaW5jbHVkZXMoXCJPTl9SRVNQT05TRVwiKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGlvbnMgPSBuZXcgVmFsaWRhdGlvbihcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJSdW5uaW5nIFZhbGlkYXRpb25zOlwiLCB2YWxpZGF0aW9ucyk7XG5cbiAgICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIGF3YWl0IHZhbGlkYXRpb25zLnZhbGlkYXRlKGZpZWxkLnZhbGlkYXRpb24pO1xuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImFsbEZvcm1zRGF0YVwiKSkge1xuICAgICAgdGhpcy5hbGxGb3Jtc0RhdGEgPSBjaGFuZ2VzLmFsbEZvcm1zRGF0YS5jdXJyZW50VmFsdWU7XG4gICAgfVxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJmb3JtQ29uZmlnXCIpKSB7XG4gICAgICB0aGlzLmZvcm1Db25maWcgPSBjaGFuZ2VzLmZvcm1Db25maWcuY3VycmVudFZhbHVlO1xuXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmluaXRGb3JtQ29uZmlnKHRoaXMuZm9ybUNvbmZpZyk7XG4gICAgICB9KSgpO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaW5pdEZvcm1Db25maWcoZm9ybUNvbmZpZzogYW55KSB7XG4gICAgZm9ybUNvbmZpZyA9IG5ldyBDb252ZXJ0ZXIoKS5jb252ZXJ0Rm9ybUNvbmZpZyhmb3JtQ29uZmlnKTtcblxuICAgIGZvcm1Db25maWcgPSBuZXcgQ29udmVydGVyKCkudXBkYXRlRm9ybUNvbmZpZ1Byb3BlcnRpZXMoZm9ybUNvbmZpZyk7XG5cbiAgICB0aGlzLnNldEZvcm1GaWVsZHNGcm9tRm9ybUNvbmZpZyhmb3JtQ29uZmlnKTtcblxuICAgIHRoaXMuc2V0Rm9ybUZpZWxkR3JvdXBzRnJvbUZvcm1Db25maWcoZm9ybUNvbmZpZyk7XG5cbiAgICB0aGlzLnNldEZvcm1EYXRhRnJvbUFsbEZvcm1zRGF0YSgpO1xuXG4gICAgLyoqXG4gICAgICogUFJFIEZvcm0gVGFza3NcbiAgICAgKiAxLiBBUEkgQ2FsbHMuXG4gICAgICogMi4gQWx0ZXIgRGF0YSBTdHJ1Y3R1cmUuXG4gICAgICogMy4gQWx0ZXIgRm9ybSBDb25maWcuXG4gICAgICovXG4gICAgaWYgKFxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5mb3JtQ29uZmlnLCBcInRhc2tzXCIpICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLmZvcm1Db25maWcudGFza3MsIFwicHJlXCIpXG4gICAgKSB7XG4gICAgICBmb3IgKGxldCBwcmVUYXNrIG9mIHRoaXMuZm9ybUNvbmZpZy50YXNrcy5wcmUpIHtcbiAgICAgICAgY29uc3QgdGFzayA9IG5ldyBUYXNrcyhcbiAgICAgICAgICBwcmVUYXNrLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIEZPUk1fQ09ORklHOiB0aGlzLmZvcm1Db25maWcsXG4gICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zdG9wVGFza0V4ZWN1dGlvbiA9IGZhbHNlO1xuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMocHJlVGFzaywgXCJ3YWl0XCIpKSB7XG4gICAgICAgICAgdGhpcy53YWl0aW5nRm9yQ2hhbmdlcyA9IHByZVRhc2sud2FpdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLndhaXRpbmdGb3JDaGFuZ2VzID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0YXNrLmV4ZWN1dGUoKTtcblxuICAgICAgICAvLyBXYWl0IGZvciBuZ09uQ2hhbmdlcyB0byBiZSBjYWxsZWQgYmVmb3JlIGNvbnRpbnVpbmcgdG8gdGhlIG5leHQgdGFza1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMud2FpdGluZ0ZvckNoYW5nZXMpIHtcbiAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIDEwKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuc3RvcFRhc2tFeGVjdXRpb24pIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmZvcm1EYXRhID0gbWVyZ2VPYmplY3RzKHRoaXMuZm9ybURhdGEsIHRoaXMucG9wdXBGb3JtRGF0YSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RvcFRhc2tFeGVjdXRpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmZvcm1Hcm91cCA9IGF3YWl0IHRoaXMuZm9ybVZpZXdTZXJ2aWNlLmNyZWF0ZUZvcm1Hcm91cChcbiAgICAgIHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgIHRoaXMuZm9ybURhdGEsXG4gICAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgKTtcblxuICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZm9ybUZpZWxkcykge1xuICAgICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhID0ge1xuICAgICAgICAgIC4uLnRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICBbZmllbGQua2V5XTogY29udmVydEZvcm1GaWVsZFZhbHVlVG9TdGFuZGFyZEZvcm1hdChcbiAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZVxuICAgICAgICAgIClcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmZvcm1EYXRhID0ge1xuICAgICAgICAgIC4uLnRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgW2ZpZWxkLmtleV06IGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvU3RhbmRhcmRGb3JtYXQoXG4gICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVcbiAgICAgICAgICApXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IEVGaWVsZFR5cGUuRklMRSkge1xuICAgICAgICAgIHRoaXMuZmlsZXNbZmllbGQua2V5XSA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgIC5waXBlKHBhaXJ3aXNlKCkpXG4gICAgICAgICAgLnN1YnNjcmliZSgoW3ByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZV0pID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNGb3JtRGF0YSA9IHtcbiAgICAgICAgICAgICAgLi4udGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgICBbZmllbGQua2V5XTogY29udmVydEZvcm1GaWVsZFZhbHVlVG9TdGFuZGFyZEZvcm1hdChcbiAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICBwcmV2aW91c1ZhbHVlXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuZm9ybURhdGEgPSB7XG4gICAgICAgICAgICAgIC4uLnRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICAgIFtmaWVsZC5rZXldOiBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb1N0YW5kYXJkRm9ybWF0KFxuICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gRUZpZWxkVHlwZS5GSUxFKSB7XG4gICAgICAgICAgICAgIHRoaXMuZmlsZXNbZmllbGQua2V5XSA9IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmZvcm1GaWVsZHMpIHtcbiAgICAgIGlmIChmaWVsZC5pc0Zvcm1FbGVtZW50KSB7XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJ2YWxpZGF0aW9uXCIpKSB7XG4gICAgICAgICAgaWYgKGZpZWxkLnZhbGlkYXRpb24udHJpZ2dlcnMuaW5jbHVkZXMoXCJPTl9JTklUXCIpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0aW9ucyA9IG5ldyBWYWxpZGF0aW9uKFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBhd2FpdCB2YWxpZGF0aW9ucy52YWxpZGF0ZShmaWVsZC52YWxpZGF0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwiY29ubmVjdGVkRWxlbWVudHNcIikpIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRzKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcIk9OX0lOSVRcIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgc2V0Rm9ybUZpZWxkc0Zyb21Gb3JtQ29uZmlnKGZvcm1Db25maWc6IGFueSkge1xuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtQ29uZmlnLCBcImZpZWxkc1wiKSkge1xuICAgICAgdGhpcy5mb3JtRmllbGRzID0gZm9ybUNvbmZpZy5maWVsZHM7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm1Db25maWcsIFwibXVsdGlGb3JtXCIpICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmb3JtQ29uZmlnLm11bHRpRm9ybSwgXCJmaWVsZHNcIilcbiAgICApIHtcbiAgICAgIHRoaXMuZm9ybUZpZWxkcyA9IGZvcm1Db25maWcubXVsdGlGb3JtLmZpZWxkcztcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHNldEZvcm1GaWVsZEdyb3Vwc0Zyb21Gb3JtQ29uZmlnKGZvcm1Db25maWc6IGFueSkge1xuICAgIHRoaXMuZmllbGRHcm91cHMgPSBmb3JtQ29uZmlnLmZpZWxkR3JvdXBzO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBzZXRGb3JtRGF0YUZyb21BbGxGb3Jtc0RhdGEoKSB7XG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMuYWxsRm9ybXNEYXRhLCB0aGlzLmZvcm1Db25maWcua2V5KSkge1xuICAgICAgY29uc3QgZm9ybURhdGEgPSB0aGlzLmFsbEZvcm1zRGF0YVt0aGlzLmZvcm1Db25maWcua2V5XTtcblxuICAgICAgaWYgKFxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmb3JtRGF0YSwgXCJkYXRhXCIpICYmXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm1EYXRhLCBcImV4dGVuZGVkRGF0YVwiKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZm9ybURhdGEgPSB7XG4gICAgICAgICAgLi4udGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAuLi5mb3JtRGF0YVtcImRhdGFcIl1cbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZm9ybURhdGEgPSB7XG4gICAgICAgICAgLi4udGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAuLi5mb3JtRGF0YVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvcm1EYXRhID0ge307XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRHcm91cEFjdGlvbnMoXG4gICAgY2hpbGRGaWVsZEdyb3VwQ29uZmlnOiBhbnksXG4gICAgcGFyZW50RmllbGQ6IGFueVxuICApIHtcbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoY2hpbGRGaWVsZEdyb3VwQ29uZmlnLCBcInJ1bGVzXCIpKSB7XG4gICAgICBjb25zdCBydWxlc01hcHBpbmcgPSBuZXcgUnVsZShjaGlsZEZpZWxkR3JvdXBDb25maWcucnVsZXMsIHtcbiAgICAgICAgRklFTERfQ09ORklHOiBwYXJlbnRGaWVsZCxcbiAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcbiAgICAgIH0pLm1hcHBpbmcoKTtcblxuICAgICAgZm9yIChsZXQgYWN0aW9uIG9mIGNoaWxkRmllbGRHcm91cENvbmZpZy5hY3Rpb25zKSB7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvblN1Y2Nlc3MgPSBuZXcgQ29uZGl0aW9uKFxuICAgICAgICAgIGFjdGlvbi5jb25kaXRpb24sXG4gICAgICAgICAgcnVsZXNNYXBwaW5nXG4gICAgICAgICkuZXZhbHVhdGUoKTtcblxuICAgICAgICBpZiAoY29uZGl0aW9uU3VjY2Vzcykge1xuICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSBuZXcgQWN0aW9uKFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgcnVsZXNNYXBwaW5nLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBGSUVMRF9DT05GSUc6IHBhcmVudEZpZWxkLFxuICAgICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMudGFrZUFjdGlvbk9uRmllbGRHcm91cC5iaW5kKHRoaXMpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGF3YWl0IGFjdGlvbnMuZXhlY3V0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRHcm91cChcbiAgICBjdXJyZW50RmllbGQ6IGFueSxcbiAgICBjb25uZWN0ZWRGaWVsZEdyb3VwQ29uZmlnOiBhbnksXG4gICAgZXZlbnRUeXBlOiBzdHJpbmdcbiAgKSB7XG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWcsIFwidHJpZ2dlcnNcIikpIHtcbiAgICAgIGlmIChjb25uZWN0ZWRGaWVsZEdyb3VwQ29uZmlnLnRyaWdnZXJzLmluY2x1ZGVzKGV2ZW50VHlwZSkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRHcm91cEFjdGlvbnMoXG4gICAgICAgICAgY29ubmVjdGVkRmllbGRHcm91cENvbmZpZyxcbiAgICAgICAgICBjdXJyZW50RmllbGRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEFjdGlvbnMoXG4gICAgY29ubmVjdGVkRmllbGRDb25maWc6IGFueSxcbiAgICBjb25uZWN0ZWRGaWVsZDogYW55XG4gICkge1xuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhjb25uZWN0ZWRGaWVsZENvbmZpZywgXCJydWxlc1wiKSkge1xuICAgICAgY29uc3QgcnVsZXNNYXBwaW5nID0gbmV3IFJ1bGUoY29ubmVjdGVkRmllbGRDb25maWcucnVsZXMsIHtcbiAgICAgICAgRklFTERfQ09ORklHOiBjb25uZWN0ZWRGaWVsZCxcbiAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcbiAgICAgIH0pLm1hcHBpbmcoKTtcblxuICAgICAgZm9yIChsZXQgYWN0aW9uIG9mIGNvbm5lY3RlZEZpZWxkQ29uZmlnLmFjdGlvbnMpIHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9uU3VjY2VzcyA9IG5ldyBDb25kaXRpb24oXG4gICAgICAgICAgYWN0aW9uLmNvbmRpdGlvbixcbiAgICAgICAgICBydWxlc01hcHBpbmdcbiAgICAgICAgKS5ldmFsdWF0ZSgpO1xuXG4gICAgICAgIGlmIChjb25kaXRpb25TdWNjZXNzKSB7XG4gICAgICAgICAgY29uc3QgYWN0aW9ucyA9IG5ldyBBY3Rpb24oXG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBydWxlc01hcHBpbmcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogY29ubmVjdGVkRmllbGQsXG4gICAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgYXdhaXQgYWN0aW9ucy5leGVjdXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29ubmVjdGVkRmllbGQ7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZHMoXG4gICAgY3VycmVudEZpZWxkOiBhbnksXG4gICAgY29ubmVjdGVkRmllbGRDb25maWc6IGFueSxcbiAgICBldmVudFR5cGU6IHN0cmluZyxcbiAgICBuZXN0ZWQ6IHN0cmluZ1xuICApIHtcbiAgICBsZXQgY29ubmVjdGVkRmllbGQgPSBnZXRGb3JtRmllbGRCeUtleShcbiAgICAgIHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgIGNvbm5lY3RlZEZpZWxkQ29uZmlnW1wia2V5XCJdXG4gICAgKTtcblxuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhjb25uZWN0ZWRGaWVsZENvbmZpZywgXCJ0cmlnZ2Vyc1wiKSkge1xuICAgICAgaWYgKGNvbm5lY3RlZEZpZWxkQ29uZmlnLnRyaWdnZXJzLmluY2x1ZGVzKGV2ZW50VHlwZSkpIHtcbiAgICAgICAgY29ubmVjdGVkRmllbGQgPSBhd2FpdCB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEFjdGlvbnMoXG4gICAgICAgICAgY29ubmVjdGVkRmllbGRDb25maWcsXG4gICAgICAgICAgY29ubmVjdGVkRmllbGRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGNvbm5lY3RlZEZpZWxkQ29uZmlnLCBcImhhbmRsZU5lc3RlZEZpZWxkc1wiKSkge1xuICAgICAgaWYgKGNvbm5lY3RlZEZpZWxkQ29uZmlnLmhhbmRsZU5lc3RlZEZpZWxkcykge1xuICAgICAgICB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRzKFxuICAgICAgICAgIHsga2V5OiBjb25uZWN0ZWRGaWVsZENvbmZpZy5rZXkgfSxcbiAgICAgICAgICBldmVudFR5cGVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRGaWVsZDtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaGFuZGxlQ29ubmVjdGVkRWxlbWVudHMoZTogYW55LCBldmVudFR5cGU6IHN0cmluZykge1xuICAgIGxldCBjdXJyZW50RmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGUua2V5KTtcblxuICAgIGlmIChjdXJyZW50RmllbGQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGN1cnJlbnRGaWVsZCwgXCJjb25uZWN0ZWRFbGVtZW50c1wiKSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoXG4gICAgICAgICAgICBjdXJyZW50RmllbGQuY29ubmVjdGVkRWxlbWVudHMsXG4gICAgICAgICAgICBcImNvbm5lY3RlZEZpZWxkR3JvdXBzXCJcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIGxldCBjb25uZWN0ZWRGaWVsZEdyb3VwcyA9XG4gICAgICAgICAgICBjdXJyZW50RmllbGQuY29ubmVjdGVkRWxlbWVudHMuY29ubmVjdGVkRmllbGRHcm91cHM7XG4gICAgICAgICAgZm9yIChsZXQgY29ubmVjdGVkRmllbGRHcm91cENvbmZpZyBvZiBjb25uZWN0ZWRGaWVsZEdyb3Vwcykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRHcm91cChcbiAgICAgICAgICAgICAgY3VycmVudEZpZWxkLFxuICAgICAgICAgICAgICBjb25uZWN0ZWRGaWVsZEdyb3VwQ29uZmlnLFxuICAgICAgICAgICAgICBldmVudFR5cGVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhcbiAgICAgICAgICAgIGN1cnJlbnRGaWVsZC5jb25uZWN0ZWRFbGVtZW50cyxcbiAgICAgICAgICAgIFwiY29ubmVjdGVkRmllbGRzXCJcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIGxldCBjb25uZWN0ZWRGaWVsZHMgPSBjdXJyZW50RmllbGQuY29ubmVjdGVkRWxlbWVudHMuY29ubmVjdGVkRmllbGRzO1xuICAgICAgICAgIGZvciAobGV0IGNvbm5lY3RlZEZpZWxkQ29uZmlnIG9mIGNvbm5lY3RlZEZpZWxkcykge1xuICAgICAgICAgICAgY3VycmVudEZpZWxkID0gYXdhaXQgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRzKFxuICAgICAgICAgICAgICBjdXJyZW50RmllbGQsXG4gICAgICAgICAgICAgIGNvbm5lY3RlZEZpZWxkQ29uZmlnLFxuICAgICAgICAgICAgICBldmVudFR5cGUsXG4gICAgICAgICAgICAgIGV2ZW50VHlwZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRmllbGQgZm9yIHRoZSBnaXZlbiBrZXkgWycke2Uua2V5fSddIGlzIG5vdCBmb3VuZCB3aXRoIGV2ZW50VHlwZTogJyR7ZXZlbnRUeXBlfScuYFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGhhbmRsZVJlbW92ZWRGaWxlKGU6IGFueSkge1xuICAgIHRoaXMuc2hvd0FwaUxvYWRlcigpO1xuXG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwW1wiY29udHJvbHNcIl1bZS5rZXldLmVuYWJsZWQpIHtcbiAgICAgIHRoaXMuZmlsZXNbZS5rZXldID0gZS5maWxlcztcblxuICAgICAgdGhpcy5mb3JtRGF0YVtlLmtleV0gPSBmaWx0ZXJEdXBsaWNhdGVzRmlsZXModGhpcy5maWxlc1tlLmtleV0pO1xuXG4gICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKFxuICAgICAgICB7XG4gICAgICAgICAgW2Uua2V5XTogdGhpcy5mb3JtRGF0YVtlLmtleV1cbiAgICAgICAgfSxcbiAgICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZUdldEtleVZhbHVlRmlsZShlOiBhbnkpIHtcbiAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBlLmtleSk7XG5cbiAgICBsZXQgdmFsdWVzID0gQXJyYXkuaXNBcnJheShlLnZhbHVlKSA/IGUudmFsdWUgOiBbZS52YWx1ZV07XG5cbiAgICBpZiAoXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJwcm9wZXJ0aWVzXCIpICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZC5wcm9wZXJ0aWVzLCBcInVwbG9hZEZpbGVUb1NlcnZlclwiKSAmJlxuICAgICAgZmllbGQucHJvcGVydGllcy51cGxvYWRGaWxlVG9TZXJ2ZXJcbiAgICApIHtcbiAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudXBsb2FkRmlsZShlLmtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbGVzKHZhbHVlLCBcIkxPQURJTkdcIiwgZS5rZXkpO1xuXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRGaWxlID0gZ2V0T2JqZWN0RGVlcENvcHkoXG4gICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICBpZDogdXVpZHY0KCksXG4gICAgICAgICAgICAgICAgbmFtZTogdmFsdWUubmFtZSxcbiAgICAgICAgICAgICAgICB0eXBlOiB2YWx1ZS50eXBlLFxuICAgICAgICAgICAgICAgIHNpemU6IHZhbHVlLnNpemUsXG4gICAgICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB2YWx1ZS5sYXN0TW9kaWZpZWQsXG4gICAgICAgICAgICAgICAgd2Via2l0UmVsYXRpdmVQYXRoOiB2YWx1ZS53ZWJraXRSZWxhdGl2ZVBhdGhcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCAzMDApOyAvLyAxMDAwIG1zID0gMSBzZWNcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMudXBkYXRlRmlsZXModXBkYXRlZEZpbGUsIFwiTk9STUFMXCIsIGUua2V5KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gdXBkYXRlIHRoZSBmaWxlcyBhcnJheSB3aXRoIHRoZSBuZXcgZmlsZSBhbmQgaXQncyBzdGF0ZSBhbmQgcmVzcG9uc2UgZnJvbSB0aGUgYXBpIG9mIHVwbG9hZGluZyB0aGUgZmlsZS5cbiAgICovXG4gIEBsb2dNZXRob2RcbiAgdXBkYXRlRmlsZXMoZmlsZTogYW55LCBzdGF0ZTogc3RyaW5nLCBrZXk6IHN0cmluZykge1xuICAgIGNvbnN0IGZpbGVXaXRoU3RhdGUgPSBtZXJnZU9iamVjdHMoZmlsZSBhcyBhbnksIHsgc3RhdGU6IHN0YXRlIH0pO1xuXG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGtleSk7XG5cbiAgICBpZiAoZmllbGQucHJvcGVydGllcz8ubXVsdGlwbGUpIHtcbiAgICAgIC8vIElmIGZpZWxkLnByb3BlcnRpZXM/Lm11bHRpcGxlIGlzIHRydWUsIGl0IG1lYW5zIG11bHRpcGxlIGZpbGVzIGFyZSBhbGxvd2VkIGZvciB0aGlzIGZpZWxkLlxuICAgICAgLy8gVXBkYXRlIHRoZSBleGlzdGluZyBmaWxlcyBhcnJheSBmb3IgdGhlIHNwZWNpZmljIGtleSB3aXRoIHRoZSBuZXcgZmlsZS5cbiAgICAgIGNvbnN0IHVwZGF0ZWRGaWxlcyA9IFtcbiAgICAgICAgLi4udGhpcy5maWxlc1trZXldLmZpbHRlcihcbiAgICAgICAgICAoZikgPT4gZi5uYW1lICE9PSBmaWxlV2l0aFN0YXRlLm5hbWUgfHwgZi5zaXplICE9PSBmaWxlV2l0aFN0YXRlLnNpemVcbiAgICAgICAgKSxcbiAgICAgICAgZmlsZVdpdGhTdGF0ZVxuICAgICAgXTtcblxuICAgICAgLy8gQXBwbHkgdGhlIGZpbHRlckR1cGxpY2F0ZXNGaWxlcyBmdW5jdGlvbiB0byBlbnN1cmUgdW5pcXVlbmVzcyBpbiB0aGUgdXBkYXRlZEZpbGVzIGFycmF5LlxuICAgICAgdGhpcy5maWxlc1trZXldID0gZmlsdGVyRHVwbGljYXRlc0ZpbGVzKHVwZGF0ZWRGaWxlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIGZpZWxkLnByb3BlcnRpZXM/Lm11bHRpcGxlIGlzIGZhbHNlLCBvbmx5IG9uZSBmaWxlIGlzIGFsbG93ZWQgZm9yIHRoaXMgZmllbGQuXG4gICAgICAvLyBSZXBsYWNlIHRoZSBleGlzdGluZyBmaWxlcyBhcnJheSBmb3IgdGhlIHNwZWNpZmljIGtleSB3aXRoIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG5ldyBmaWxlLlxuICAgICAgdGhpcy5maWxlc1trZXldID0gW2ZpbGVXaXRoU3RhdGVdO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgZm9ybURhdGEgYW5kIGZvcm1Hcm91cCBjb250cm9scyBmb3IgdGhlIHNwZWNpZmljIGtleSB3aXRoIHRoZSBub3JtYWxGaWxlcyBhcnJheS5cbiAgICBjb25zdCBub3JtYWxGaWxlcyA9IHRoaXMuZmlsZXNba2V5XS5maWx0ZXIoKGZpbGUpID0+IHtcbiAgICAgIHJldHVybiBmaWxlLnN0YXRlID09PSBcIk5PUk1BTFwiO1xuICAgIH0pO1xuXG4gICAgdGhpcy5mb3JtRGF0YVtrZXldID0gbm9ybWFsRmlsZXM7XG4gICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNba2V5XS5wYXRjaFZhbHVlKG5vcm1hbEZpbGVzLCB7XG4gICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgb25seVNlbGY6IGZhbHNlXG4gICAgfSk7XG4gICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShcbiAgICAgIHtcbiAgICAgICAgW2tleV06IG5vcm1hbEZpbGVzXG4gICAgICB9LFxuICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSBhcGkgdXBsb2FkIG1vY2tpbmcgbWV0aG9kLiBTZXQncyB0byBsb2FkaW5nIGF0IGZpcnN0IGF0IHBvaW50IHdoZW4gQVBJIGlzIGNhbGxlZCBhbmQgdGhlbiBjaGFuZ2VzIHRoZSBzdGF0dXMgdG8gcmFuZG9tIHN0YXR1cyBhZnRlciAyIHNlY29uZHMgb2YgZGVsYXkgc2hvd2luZyBhIG1vY2tlZCByZXNwb25zZSBmcm9tIEFQSS5cbiAgICovXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgdXBsb2FkRmlsZShrZXk6IHN0cmluZywgZmlsZTogYW55KSB7XG4gICAgdGhpcy51cGRhdGVGaWxlcyhmaWxlLCBcIkxPQURJTkdcIiwga2V5KTtcblxuICAgIC8vIEFjdHVhbCBBUEkgQ2FsbFxuICAgIHRyeSB7XG4gICAgICB0aGlzLm9uQ2xpY2tBcGlDYWxsLmVtaXQoe1xuICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgIGZpbGU6IGZpbGUsXG4gICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIG5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgICAgIHR5cGU6IGZpbGUudHlwZSxcbiAgICAgICAgICAgIHNpemU6IGZpbGUuc2l6ZSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDogZmlsZS5sYXN0TW9kaWZpZWQsXG4gICAgICAgICAgICB3ZWJraXRSZWxhdGl2ZVBhdGg6IGZpbGUud2Via2l0UmVsYXRpdmVQYXRoXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMudXBkYXRlRmlsZXMoZmlsZSwgXCJFUlJPUlwiLCBrZXkpO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja0Zvcm1GaWVsZEJ1dHRvbihmaWVsZDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNsaWNrRm9ybUZpZWxkQnV0dG9uLmVtaXQoe1xuICAgICAgY29uZmlnOiBmaWVsZCxcbiAgICAgIGRhdGE6IG1lcmdlT2JqZWN0cyh0aGlzLmZvcm1EYXRhLCB0aGlzLnBvcHVwRm9ybURhdGEsIHRoaXMudGFza0RhdGEpXG4gICAgfSk7XG4gIH1cblxuICAvLyBET00gRXZlbnQgSGFuZGxlcnNcbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVHZXRLZXlWYWx1ZShlOiBhbnkpIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKFxuICAgICAge1xuICAgICAgICBbZS5rZXldOiBlLnZhbHVlXG4gICAgICB9LFxuICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICApO1xuXG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGUua2V5KTtcbiAgICB0aGlzLmZvcm1EYXRhW2Uua2V5XSA9IGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvU3RhbmRhcmRGb3JtYXQoXG4gICAgICBmaWVsZCxcbiAgICAgIGUudmFsdWVcbiAgICApO1xuXG4gICAgdGhpcy5nZXRVbnNhdmVkRGF0YVN0YXRlLmVtaXQodHJ1ZSk7XG5cbiAgICBpZiAoXG4gICAgICBmaWVsZC5pc0Zvcm1FbGVtZW50ICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJ2YWxpZGF0aW9uXCIpICYmXG4gICAgICBmaWVsZC52YWxpZGF0aW9uLnRyaWdnZXJzLmluY2x1ZGVzKFwiT05fQ0hBTkdFXCIpXG4gICAgKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9ucyA9IG5ldyBWYWxpZGF0aW9uKFxuICAgICAgICB7XG4gICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhXG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICApO1xuXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB2YWxpZGF0aW9ucy52YWxpZGF0ZShmaWVsZC52YWxpZGF0aW9uKTtcbiAgICAgIH0pKCk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgZmllbGQuaXNGb3JtRWxlbWVudCAmJlxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwiY29ubmVjdGVkRWxlbWVudHNcIilcbiAgICApIHtcbiAgICAgIHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudHMoXG4gICAgICAgIHtcbiAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZVxuICAgICAgICB9LFxuICAgICAgICBcIk9OX0NIQU5HRVwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaGFuZGxlT25DbGlja1Jlc2V0Rm9ybUZpZWxkcyhlOiBhbnksIGZpZWxkOiBURmllbGRUaXRsZSkge1xuICAgIGNvbnN0IHJlc2V0Rm9ybUZpZWxkcyA9IGFzeW5jICgpID0+IHtcbiAgICAgIGZvciAobGV0IGYgb2YgZmllbGQucmVzZXQuZmllbGRzKSB7XG4gICAgICAgIGZvciAobGV0IGFjdGlvbiBvZiBmLmFjdGlvbnMpIHtcbiAgICAgICAgICBjb25zdCByZXNldEZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkoXG4gICAgICAgICAgICB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICBhY3Rpb24ucHJvcHMuZmllbGRLZXlcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSBuZXcgQWN0aW9uKFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogcmVzZXRGaWVsZCxcbiAgICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgICAgICk7XG4gICAgICAgICAgYXdhaXQgYWN0aW9ucy5leGVjdXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgQllQQVNTX1JFU0VUX0NPTkZJUk0gPSBmaWVsZD8ucHJvcGVydGllcz8uYnlwYXNzUmVzZXRDb25maXJtYXRpb247XG5cbiAgICBpZiAoIUJZUEFTU19SRVNFVF9DT05GSVJNKSB7XG4gICAgICBjb25zdCBDT05GSVJNX1JFU0VUID0gd2luZG93LmNvbmZpcm0oXG4gICAgICAgIFwiVGhpcyBhY3Rpb24gd2lsbCByZXNldCBhbGwgdGhlIGZpZWxkcy4gRG8geW91IHN0aWxsIHdhbnQgdG8gY29udGludWU/XCJcbiAgICAgICk7XG5cbiAgICAgIGlmIChDT05GSVJNX1JFU0VUKSB7XG4gICAgICAgIHJlc2V0Rm9ybUZpZWxkcygpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXNldEZvcm1GaWVsZHMoKTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZUZpZWxkQXBpQ2FsbChmaWVsZDogVEZpZWxkQXBpQ2FsbCwgYXBpOiBhbnkpIHtcbiAgICBhcGkgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBcGlDYWxsKGFwaSwge1xuICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgIEFQSV9DT05GSUc6IGFwaSxcbiAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuaXNWYWxpZFJlcXVlc3RIZWFkZXJzQW5kQm9keShhcGkpKSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQuYXBpLCBcInJlcXVlc3RcIikpIHtcbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHtcbiAgICAgICAgICAuLi50aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIFtmaWVsZC5rZXldOiBhcGkucmVzcG9uc2UudmFsdWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFtmaWVsZC5rZXldOiBhcGkucmVzcG9uc2UudmFsdWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFwaXMgPSBuZXcgQXBpcyhcbiAgICAgICAge1xuICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgQVBJX0NPTkZJRzogYXBpLFxuICAgICAgICAgIEFQSV9SRVNQT05TRTogYXBpLnJlc3BvbnNlLFxuICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICk7XG5cbiAgICAgIGFwaSA9IGF3YWl0IGFwaXMudmFsaWRhdGVSZXNwb25zZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZmllbGRbXCJhcGlcIl1bXCJzdGF0dXNcIl1bXCJ2YWx1ZVwiXSA9IEVBcGlTdGF0dXNUeXBlLkZBSUxFRDtcbiAgICAgICAgZmllbGRbXCJzaG93TG9hZGVyXCJdID0gZmFsc2U7XG4gICAgICB9LCA1MDApO1xuICAgIH1cblxuICAgIHJldHVybiB7IGZpZWxkOiBmaWVsZCwgYXBpOiBhcGkgfTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaGFuZGxlQXBpQ2FsbChhcGk6IGFueSkge1xuICAgIGFwaSA9IGF3YWl0IHRoaXMuZXhlY3V0ZUFwaUNhbGwoYXBpLCB7XG4gICAgICBGT1JNX0NPTkZJRzogdGhpcy5mb3JtQ29uZmlnLFxuICAgICAgQVBJX0NPTkZJRzogYXBpLFxuICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhXG4gICAgfSk7XG5cbiAgICBjb25zdCBhcGlzID0gbmV3IEFwaXMoXG4gICAgICB7XG4gICAgICAgIEZPUk1fQ09ORklHOiB0aGlzLmZvcm1Db25maWcsXG4gICAgICAgIEFQSV9DT05GSUc6IGFwaSxcbiAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcbiAgICAgIH0sXG4gICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICk7XG5cbiAgICBpZiAodGhpcy5pc1ZhbGlkUmVxdWVzdEhlYWRlcnNBbmRCb2R5KGFwaSkpIHtcbiAgICAgIGFwaSA9IGF3YWl0IGFwaXMudmFsaWRhdGVSZXNwb25zZSgpO1xuICAgIH1cblxuICAgIHJldHVybiB7IGFwaTogYXBpIH07XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGV4ZWN1dGVBcGlDYWxsKGFwaTogYW55LCBvYmplY3Q6IGFueSkge1xuICAgIGNvbnN0IGFwaXMgPSBuZXcgQXBpcyhvYmplY3QsIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpKTtcblxuICAgIGFwaSA9IGF3YWl0IGFwaXMuc2V0VXJsKCk7XG4gICAgYXBpID0gYXdhaXQgYXBpcy5zZXRSZXF1ZXN0SGVhZGVycygpO1xuICAgIGFwaSA9IGF3YWl0IGFwaXMudmFsaWRhdGVSZXF1ZXN0SGVhZGVycygpO1xuICAgIGFwaSA9IGF3YWl0IGFwaXMuc2V0UmVxdWVzdEJvZHkoKTtcbiAgICBhcGkgPSBhd2FpdCBhcGlzLnZhbGlkYXRlUmVxdWVzdEJvZHkoKTtcblxuICAgIGxldCBhcGlDYWxsUmVzcG9uc2U6IGFueSA9IHt9O1xuICAgIGxldCBhcGlDYWxsUmVzcG9uc2VTdGF0dXNDb2RlO1xuXG4gICAgaWYgKHRoaXMuaXNWYWxpZFJlcXVlc3RIZWFkZXJzQW5kQm9keShhcGkpKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGFwaS5yZXF1ZXN0LnVybC5oYXNPd25Qcm9wZXJ0eShcInR5cGVcIikgJiZcbiAgICAgICAgYXBpLnJlcXVlc3QudXJsLnR5cGUgPT09IEVBcGlSZXF1ZXN0VXJsVHlwZS5NT0NLXG4gICAgICApIHtcbiAgICAgICAgYXBpQ2FsbFJlc3BvbnNlID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoYXBpLnJlcXVlc3QudXJsLnByb3BzLm1vY2tlZERhdGEpO1xuICAgICAgICAgIH0sIDEwMDApOyAvLyAxMDAwIG1zID0gMSBzZWNcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB1cmw6IHN0cmluZyA9IGFwaS5yZXF1ZXN0LnVybC52YWx1ZTtcbiAgICAgICAgY29uc3QgbWV0aG9kOiBzdHJpbmcgPSBhcGkucmVxdWVzdD8ubWV0aG9kID8/IFwiUE9TVFwiO1xuICAgICAgICBjb25zdCBoZWFkZXJzOiBhbnkgPSB7XG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgLi4uKGFwaS5yZXF1ZXN0Py5oZWFkZXJzPy52YWx1ZSB8fCB7fSlcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYm9keTogYW55ID0gYXBpLnJlcXVlc3Q/LmJvZHk/LnZhbHVlID8/IG51bGw7XG5cbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJHRVRcIikge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZTogYW55ID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICAgICAgICBoZWFkZXJzOiB7IC4uLmhlYWRlcnMgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhcGlDYWxsUmVzcG9uc2UgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgICAgICBhcGlDYWxsUmVzcG9uc2VTdGF0dXNDb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgYXBpQ2FsbFJlc3BvbnNlID0ge307XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZTogYW55ID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICAgICAgICBoZWFkZXJzOiB7IC4uLmhlYWRlcnMgfSxcbiAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpQ2FsbFJlc3BvbnNlID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICAgICAgYXBpQ2FsbFJlc3BvbnNlU3RhdHVzQ29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGFwaUNhbGxSZXNwb25zZSA9IHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhcGkucmVzcG9uc2UgPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgYXBpLnJlc3BvbnNlLFxuICAgICAgICBcInZhbHVlXCIsXG4gICAgICAgIGFwaUNhbGxSZXNwb25zZVxuICAgICAgKTtcblxuICAgICAgYXBpLnJlc3BvbnNlID0gc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICAgIGFwaS5yZXNwb25zZSxcbiAgICAgICAgXCJzdGF0dXNcIixcbiAgICAgICAgYXBpQ2FsbFJlc3BvbnNlU3RhdHVzQ29kZVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXBpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBpc1ZhbGlkUmVxdWVzdEhlYWRlcnNBbmRCb2R5KGFwaSkge1xuICAgIHJldHVybiAoXG4gICAgICAoXG4gICAgICAgIGFwaS5yZXF1ZXN0LmJvZHkudmFsaWRhdGlvbiBhcyBUVmFsaWRhdGlvbiAmIHtcbiAgICAgICAgICBpc192YWxpZDogYm9vbGVhbjtcbiAgICAgICAgfVxuICAgICAgKS5pc192YWxpZCAmJlxuICAgICAgKFxuICAgICAgICBhcGkucmVxdWVzdC5oZWFkZXJzLnZhbGlkYXRpb24gYXMgVFZhbGlkYXRpb24gJiB7XG4gICAgICAgICAgaXNfdmFsaWQ6IGJvb2xlYW47XG4gICAgICAgIH1cbiAgICAgICkuaXNfdmFsaWRcbiAgICApO1xuICB9XG5cbiAgc2hvd0FwaUxvYWRlcigpIHtcbiAgICB0aGlzLmxvYWRlclNlcnZpY2Uuc2hvdyh7XG4gICAgICBmdWxsc2NyZWVuOiB0cnVlLFxuICAgICAgbG9hZGVyVGV4dDogXCJQbGVhc2Ugd2FpdFwiXG4gICAgfSk7XG4gICAgdGhpcy52aWV3Rm9ybXNCdXR0b25bXCJkaXNhYmxlZFwiXSA9IHRydWU7XG4gICAgdGhpcy52aWV3Rm9ybXNCdXR0b25bXCJzaG93TG9hZGVyXCJdID0gdHJ1ZTtcbiAgICB0aGlzLnNhdmVGb3JtQnV0dG9uW1wiZGlzYWJsZWRcIl0gPSB0cnVlO1xuICAgIHRoaXMuc2F2ZUZvcm1CdXR0b25bXCJzaG93TG9hZGVyXCJdID0gdHJ1ZTtcbiAgfVxuXG4gIGhpZGVBcGlMb2FkZXIoKSB7XG4gICAgdGhpcy5sb2FkZXJTZXJ2aWNlLmhpZGUoKTtcbiAgICB0aGlzLnZpZXdGb3Jtc0J1dHRvbltcImRpc2FibGVkXCJdID0gZmFsc2U7XG4gICAgdGhpcy52aWV3Rm9ybXNCdXR0b25bXCJzaG93TG9hZGVyXCJdID0gZmFsc2U7XG4gICAgdGhpcy5zYXZlRm9ybUJ1dHRvbltcImRpc2FibGVkXCJdID0gZmFsc2U7XG4gICAgdGhpcy5zYXZlRm9ybUJ1dHRvbltcInNob3dMb2FkZXJcIl0gPSBmYWxzZTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaGFuZGxlT25DbGlja0FwaUNhbGwoZTogYW55KSB7XG4gICAgbGV0IGZpZWxkOiBURmllbGRBcGlDYWxsID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBlLmtleSk7XG5cbiAgICBpZiAoZmllbGQudHlwZSA9PT0gRUZpZWxkVHlwZS5BUEkpIHtcbiAgICAgIC8vIHNldCBidXR0b24gc3RhdHVzIHRvIGxvYWRpbmdcbiAgICAgIGZpZWxkW1wiYXBpXCJdW1wic3RhdHVzXCJdW1widmFsdWVcIl0gPSBFQXBpU3RhdHVzVHlwZS5MT0FESU5HO1xuICAgICAgZmllbGRbXCJzaG93TG9hZGVyXCJdID0gdHJ1ZTtcblxuICAgICAgdGhpcy5zaG93QXBpTG9hZGVyKCk7XG5cbiAgICAgIC8vIERldGVybWluZSBBUEkgQ2FsbCB0aW1lXG5cbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZC5hcGksIFwicmVxdWVzdFwiKSkge1xuICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUZpZWxkQXBpQ2FsbChmaWVsZCwgZmllbGQuYXBpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGFwaXMgPSBuZXcgQXBpcyhcbiAgICAgICAgICB7XG4gICAgICAgICAgICBGSUVMRF9DT05GSUc6IGZpZWxkLFxuICAgICAgICAgICAgQVBJX0NPTkZJRzoge30sXG4gICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICAgICk7XG5cbiAgICAgICAgYXdhaXQgYXBpcy5jYWxsTmV4dEFwaShmaWVsZC5hcGkuZW50cnlwb2ludCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gb3B0aW1pemUgdGhlIERPTSB1cGRhdGUgYnkgQW5ndWxhciBmb3IgdXNpbmcgKm5nRm9yIG9uIGxhcmdlIG5vLiBvZiBpdGVtcy5cbiAgICogQHBhcmFtIGluZGV4IG51bWJlclxuICAgKiBAcGFyYW0gaXRlbSBmaWVsZENvbmZpZ1xuICAgKiBAcmV0dXJucyBzdHJpbmdcbiAgICovXG4gIGdldFVuaXF1ZUlkZW50aWZpZXIoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gaXRlbS5rZXk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGhhbmRsZU9uQ2xpY2tHb0JhY2soZTogYW55LCBtb2RlOiBURm9ybVZpZXdHb0JhY2tNb2RlKSB7XG4gICAgaWYgKHRoaXMuZm9ybUNvbmZpZy5zdGF0dXMgPT09IEVGb3Jtc0xpc3RTdGF0dXMuQ09NUExFVEVEKSB7XG4gICAgICB0aGlzLm9uQ2xpY2tHb0JhY2suZW1pdCh7XG4gICAgICAgIGNsaWNrZWQ6IHRydWUsXG4gICAgICAgIG1vZGU6IG1vZGVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmZvcm1Db25maWcucHJvcGVydGllcy5oZWFkZXIuYmFja0J1dHRvbi5ieXBhc3NDb25maXJtYXRpb24gfHxcbiAgICAgIHdpbmRvdy5jb25maXJtKFwiWW91ciBkYXRhIHdpbGwgYmUgbG9zdCBpZiB5b3UgbGVhdmUgdGhpcyBwYWdlISBDb250aW51ZT9cIilcbiAgICApIHtcbiAgICAgIHRoaXMub25DbGlja0dvQmFjay5lbWl0KHtcbiAgICAgICAgY2xpY2tlZDogdHJ1ZSxcbiAgICAgICAgbW9kZTogbW9kZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkNsaWNrVmlld0Zvcm1zKGU6IGFueSkge1xuICAgIGlmICh0aGlzLmZvcm1Db25maWcuc3RhdHVzID09PSBFRm9ybXNMaXN0U3RhdHVzLkNPTVBMRVRFRCkge1xuICAgICAgdGhpcy5vbkNsaWNrVmlld0Zvcm1zLmVtaXQoe1xuICAgICAgICBjbGlja2VkOiB0cnVlXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5mb3JtQ29uZmlnLnByb3BlcnRpZXMuZm9vdGVyLnZpZXdGb3Jtc0J1dHRvbi5ieXBhc3NDb25maXJtYXRpb24gfHxcbiAgICAgIHdpbmRvdy5jb25maXJtKFwiWW91ciBkYXRhIHdpbGwgYmUgbG9zdCBpZiB5b3UgbGVhdmUgdGhpcyBwYWdlISBDb250aW51ZT9cIilcbiAgICApIHtcbiAgICAgIHRoaXMub25DbGlja1ZpZXdGb3Jtcy5lbWl0KHtcbiAgICAgICAgY2xpY2tlZDogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVPbkNsaWNrU2F2ZUZvcm0oZTogYW55KSB7XG4gICAgbGV0IGZvcm1EYXRhID0gdGhpcy5mb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcblxuICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZm9ybUZpZWxkcykge1xuICAgICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGZpZWxkLmhpZGRlbikge1xuICAgICAgICAgIGRlbGV0ZSBmb3JtRGF0YVtmaWVsZC5rZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvcm1EYXRhW2ZpZWxkLmtleV0gPSBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb1N0YW5kYXJkRm9ybWF0KFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICBmb3JtRGF0YVtmaWVsZC5rZXldXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRyb2xzID0gbmV3IEZvcm1WYWxpZGF0aW9uKCkuZ2V0Rm9ybUZpZWxkc0ludmFsaWRDb250cm9scyhcbiAgICAgIHRoaXMuZm9ybUdyb3VwXG4gICAgKTtcblxuICAgIGxldCBmaXJzdEZpZWxkV2l0aEVycm9yOiBzdHJpbmcgPSBcIlwiO1xuXG4gICAgZm9yIChsZXQgY29udHJvbCBvZiBjb250cm9scykge1xuICAgICAgaWYgKGNvbnRyb2wuaW52YWxpZCAmJiBpc0VtcHR5VmFsdWUoZmlyc3RGaWVsZFdpdGhFcnJvcikpIHtcbiAgICAgICAgZmlyc3RGaWVsZFdpdGhFcnJvciA9IGNvbnRyb2wua2V5O1xuICAgICAgfVxuICAgICAgdGhpcy5mb3JtRmllbGRzID0gc2hvd0Zvcm1GaWVsZEVycm9yKFxuICAgICAgICB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRyb2wua2V5XS5lcnJvcnMsXG4gICAgICAgIGNvbnRyb2wua2V5LFxuICAgICAgICBjb250cm9sLmludmFsaWRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGlzTm90RW1wdHlWYWx1ZShmaXJzdEZpZWxkV2l0aEVycm9yKSkge1xuICAgICAgdGhpcy50b2dnbGVFcnJvck5vdGlmaWNhdGlvbih0cnVlKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKGZhbHNlKTtcbiAgICAgIH0sIDMwMDApO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5mb3JtRmllbGRzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGZpZWxkLmlzRm9ybUVsZW1lbnQgJiZcbiAgICAgICAgIWZpZWxkLmhpZGRlbiAmJlxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJ2YWxpZGF0aW9uXCIpICYmXG4gICAgICAgIGZpZWxkLnZhbGlkYXRpb24udHJpZ2dlcnMuaW5jbHVkZXMoXCJPTl9TQVZFXCIpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbnMgPSBuZXcgVmFsaWRhdGlvbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBGSUVMRF9DT05GSUc6IGZpZWxkLFxuICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgICApO1xuXG4gICAgICAgIGF3YWl0IHZhbGlkYXRpb25zLnZhbGlkYXRlKGZpZWxkLnZhbGlkYXRpb24pO1xuXG4gICAgICAgIGlmICghZmllbGQudmFsaWRhdGlvbi5pc192YWxpZCkge1xuICAgICAgICAgIHRoaXMudG9nZ2xlRXJyb3JOb3RpZmljYXRpb24odHJ1ZSk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKGZhbHNlKTtcbiAgICAgICAgICB9LCAzMDAwKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGV4dGVuZGVkRm9ybURhdGEgPSB0aGlzLmZvcm1GaWVsZHMucmVkdWNlKChyZXN1bHQsIGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQgJiYgIWZpZWxkLmhpZGRlbikge1xuICAgICAgICBjb25zdCBmaWVsZERhdGEgPSB7XG4gICAgICAgICAgW2ZpZWxkLmtleV06IHtcbiAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgICAgbGFiZWw6IGZpZWxkLmxhYmVsLFxuICAgICAgICAgICAgdmFsdWU6IGlzRW1wdHlWYWx1ZShmb3JtRGF0YVtmaWVsZC5rZXldKSA/IFwiXCIgOiBmb3JtRGF0YVtmaWVsZC5rZXldLFxuICAgICAgICAgICAgdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmVzdWx0W2ZpZWxkLmtleV0gPSBmaWVsZERhdGFbZmllbGQua2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwge30pO1xuXG4gICAgT2JqZWN0LmtleXMoZm9ybURhdGEpLm1hcCgoa2V5KSA9PiB7XG4gICAgICBpZiAoaXNFbXB0eVZhbHVlKGZvcm1EYXRhW2tleV0pKSB7XG4gICAgICAgIGZvcm1EYXRhW2tleV0gPSBcIlwiO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUE9TVCBUYXNrc1xuICAgICAqIDEuIEFQSSBDYWxscy5cbiAgICAgKiAyLiBBbHRlciBEYXRhIFN0cnVjdHVyZS5cbiAgICAgKiAzLiBUcmlnZ2VyIGFuIEludGVybmFsIFBvcHVwIEZvcm0uXG4gICAgICogNC4gVVJMIFJlZGlyZWN0aW9uIG9yIG5ldyBvcGVuaW5nIG9mIFVSTCBpbiBleHRlcm5hbCB0YWIuXG4gICAgICovXG4gICAgaWYgKFxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5mb3JtQ29uZmlnLCBcInRhc2tzXCIpICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLmZvcm1Db25maWcudGFza3MsIFwicG9zdFwiKVxuICAgICkge1xuICAgICAgZm9yIChsZXQgcG9zdFRhc2sgb2YgdGhpcy5mb3JtQ29uZmlnLnRhc2tzLnBvc3QpIHtcbiAgICAgICAgY29uc3QgdGFzayA9IG5ldyBUYXNrcyhcbiAgICAgICAgICBwb3N0VGFzayxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBGT1JNX0NPTkZJRzogdGhpcy5mb3JtQ29uZmlnLFxuICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc3RvcFRhc2tFeGVjdXRpb24gPSBmYWxzZTtcbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKHBvc3RUYXNrLCBcIndhaXRcIikpIHtcbiAgICAgICAgICB0aGlzLndhaXRpbmdGb3JDaGFuZ2VzID0gcG9zdFRhc2sud2FpdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLndhaXRpbmdGb3JDaGFuZ2VzID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0YXNrLmV4ZWN1dGUoKTtcblxuICAgICAgICAvLyBXYWl0IGZvciBuZ09uQ2hhbmdlcyB0byBiZSBjYWxsZWQgYmVmb3JlIGNvbnRpbnVpbmcgdG8gdGhlIG5leHQgdGFza1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMud2FpdGluZ0ZvckNoYW5nZXMpIHtcbiAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIDEwKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuc3RvcFRhc2tFeGVjdXRpb24pIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zdG9wVGFza0V4ZWN1dGlvbiB8fCB0aGlzLndhaXRpbmdGb3JDaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMuc3RvcFRhc2tFeGVjdXRpb24gPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm9uQ2xpY2tTYXZlRm9ybS5lbWl0KHtcbiAgICAgICAgZm9ybUNvbmZpZzogdGhpcy5mb3JtQ29uZmlnLFxuICAgICAgICBkYXRhOiBtZXJnZU9iamVjdHMoXG4gICAgICAgICAgdGhpcy5hbGxGb3Jtc0RhdGFbdGhpcy5mb3JtQ29uZmlnLmtleV0sXG4gICAgICAgICAgZm9ybURhdGEsXG4gICAgICAgICAgdGhpcy5wb3B1cEZvcm1EYXRhLFxuICAgICAgICAgIHRoaXMudGFza0RhdGFcbiAgICAgICAgKSxcbiAgICAgICAgZXh0ZW5kZWREYXRhOiBleHRlbmRlZEZvcm1EYXRhXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5nZXRVbnNhdmVkRGF0YVN0YXRlLmVtaXQoZmFsc2UpO1xuICAgICAgdGhpcy5vbkNsaWNrU2F2ZUZvcm0uZW1pdCh7XG4gICAgICAgIGZvcm1Db25maWc6IHRoaXMuZm9ybUNvbmZpZyxcbiAgICAgICAgZGF0YTogbWVyZ2VPYmplY3RzKGZvcm1EYXRhLCB0aGlzLnBvcHVwRm9ybURhdGEsIHRoaXMudGFza0RhdGEpLFxuICAgICAgICBleHRlbmRlZERhdGE6IGV4dGVuZGVkRm9ybURhdGFcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHNob3dFcnJvck5vdGlmaWNhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBAbG9nTWV0aG9kXG4gIHRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKHNob3c6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnNob3dFcnJvck5vdGlmaWNhdGlvbiA9IHNob3c7XG4gIH1cblxuICAvLyBDb21wb25lbnQgSGVscGVyc1xuICBAbG9nTWV0aG9kXG4gIGZpZWxkSGlkZShmaWVsZEtleTogc3RyaW5nKSB7XG4gICAgbGV0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgbGV0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdW1wiaGlkZGVuXCJdID0gdHJ1ZTtcbiAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkR3JvdXBIaWRlKGZpZWxkR3JvdXA6IHN0cmluZykge1xuICAgIGZvciAobGV0IGZpZWxkS2V5IG9mIHRoaXMuZmllbGRHcm91cHNbZmllbGRHcm91cF0pIHtcbiAgICAgIHRoaXMuZmllbGRIaWRlKGZpZWxkS2V5KTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkU2hvdyhmaWVsZEtleTogc3RyaW5nKSB7XG4gICAgbGV0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgbGV0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdW1wiaGlkZGVuXCJdID0gZmFsc2U7XG4gICAgdGhpcy5mb3JtR3JvdXAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZEdyb3VwU2hvdyhmaWVsZEdyb3VwOiBzdHJpbmcpIHtcbiAgICBmb3IgKGxldCBmaWVsZEtleSBvZiB0aGlzLmZpZWxkR3JvdXBzW2ZpZWxkR3JvdXBdKSB7XG4gICAgICB0aGlzLmZpZWxkU2hvdyhmaWVsZEtleSk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZERpc2FibGUoZmllbGRLZXk6IHN0cmluZykge1xuICAgIGxldCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuICAgIGxldCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcbiAgICB9KTtcblxuICAgIGlmIChmaWVsZC5pc0Zvcm1FbGVtZW50KSB7XG4gICAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF1bXCJkaXNhYmxlZFwiXSA9IHRydWU7XG5cbiAgICAgIGlmIChpc05vdEVtcHR5VmFsdWUodGhpcy5mb3JtR3JvdXAuY29udHJvbHMpKSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0uZGlzYWJsZSh7XG4gICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09IEVGaWVsZFR5cGUuQlVUVE9OKSB7XG4gICAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF1bXCJkaXNhYmxlZFwiXSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZEdyb3VwRGlzYWJsZShmaWVsZEdyb3VwOiBzdHJpbmcpIHtcbiAgICBmb3IgKGxldCBmaWVsZEtleSBvZiB0aGlzLmZpZWxkR3JvdXBzW2ZpZWxkR3JvdXBdKSB7XG4gICAgICB0aGlzLmZpZWxkRGlzYWJsZShmaWVsZEtleSk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZEVuYWJsZShmaWVsZEtleTogc3RyaW5nKSB7XG4gICAgbGV0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgbGV0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XVtcImRpc2FibGVkXCJdID0gZmFsc2U7XG5cbiAgICAgIGlmIChpc05vdEVtcHR5VmFsdWUodGhpcy5mb3JtR3JvdXAuY29udHJvbHMpKSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0uZW5hYmxlKHtcbiAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5mb3JtR3JvdXAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gRUZpZWxkVHlwZS5CVVRUT04pIHtcbiAgICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XVtcImRpc2FibGVkXCJdID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZEdyb3VwRW5hYmxlKGZpZWxkR3JvdXA6IHN0cmluZykge1xuICAgIGZvciAobGV0IGZpZWxkS2V5IG9mIHRoaXMuZmllbGRHcm91cHNbZmllbGRHcm91cF0pIHtcbiAgICAgIHRoaXMuZmllbGRFbmFibGUoZmllbGRLZXkpO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmllbGRSZXNldChmaWVsZEtleTogc3RyaW5nKSB7XG4gICAgLy8gRmluZCB0aGUgZmllbGQgYW5kIGl0cyBpbmRleCBpbiB0aGUgZm9ybUZpZWxkcyBhcnJheVxuICAgIGxldCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuICAgIGxldCBmaWVsZEluZGV4ID0gZ2V0Rm9ybUZpZWxkSW5kZXhCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcblxuICAgIC8vIFJlc2V0IHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgaW4gdGhlIGZvcm1Hcm91cFxuICAgIGNvbnN0IHJlc2V0VmFsdWUgPSBjb252ZXJ0Rm9ybUZpZWxkRW1wdHlWYWx1ZVRvS3dpa1VJRm9ybWF0KGZpZWxkKTtcblxuICAgIHRoaXMuZm9ybURhdGFbZmllbGRLZXldID0gcmVzZXRWYWx1ZTtcblxuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0ucmVzZXQocmVzZXRWYWx1ZSwge1xuICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgIG9ubHlTZWxmOiB0cnVlXG4gICAgfSk7XG5cbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKFxuICAgICAge1xuICAgICAgICBbZmllbGQua2V5XTogcmVzZXRWYWx1ZVxuICAgICAgfSxcbiAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XG4gICAgKTtcblxuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XG4gICAgICBlbWl0RXZlbnQ6IHRydWVcbiAgICB9KTtcblxuICAgIC8vIFJlc2V0IHRoZSBtZXNzYWdlcyBhbmQgZXJyb3JzIGZvciB0aGUgZmllbGRcbiAgICBmaWVsZCA9IHJlbW92ZUZvcm1GaWVsZE1lc3NhZ2UoZmllbGQsIHtcbiAgICAgIHR5cGU6IEVNZXNzYWdlVHlwZS5XQVJOSU5HLFxuICAgICAgbWVzc2FnZTogXCJcIlxuICAgIH0pO1xuICAgIGZpZWxkID0gcmVtb3ZlRm9ybUZpZWxkTWVzc2FnZShmaWVsZCwge1xuICAgICAgdHlwZTogRU1lc3NhZ2VUeXBlLlNVQ0NFU1MsXG4gICAgICBtZXNzYWdlOiBcIlwiXG4gICAgfSk7XG4gICAgdGhpcy5maWVsZEVycm9ySGlkZShmaWVsZEtleSwge1xuICAgICAgdHlwZTogRU1lc3NhZ2VUeXBlLkVSUk9SLFxuICAgICAgbWVzc2FnZTogXCJcIlxuICAgIH0pO1xuXG4gICAgLy8gUmVzZXQgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBpbiB0aGUgZm9ybUZpZWxkcyBhcnJheVxuICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgY2FzZSBFRmllbGRUeXBlLkFQSTpcbiAgICAgICAgY29uc3QgZmllbGRBcGlDYWxsID0gZmllbGQgYXMgVEZpZWxkQXBpQ2FsbDtcbiAgICAgICAgZmllbGRBcGlDYWxsLmFwaS5zdGF0dXMudmFsdWUgPSBFQXBpU3RhdHVzVHlwZS5ERUZBVUxUO1xuICAgICAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0gPSBmaWVsZEFwaUNhbGw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgZmllbGQuZm9jdXMgPSBmYWxzZTtcbiAgICAgICAgZmllbGQuaW52YWxpZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0gPSBmaWVsZDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZEVycm9yU2hvdyhmaWVsZEtleTogc3RyaW5nLCBtZXNzYWdlOiBUTWVzc2FnZSkge1xuICAgIGxldCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuICAgIGxldCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcbiAgICB9KTtcblxuICAgIGZpZWxkID0gaGlnaGxpZ2h0Rm9ybUZpZWxkRXJyb3IoZmllbGQsIHRydWUpO1xuICAgIGZpZWxkID0gYXBwZW5kRm9ybUZpZWxkTWVzc2FnZShmaWVsZCwgbWVzc2FnZSk7XG5cbiAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0gPSBmaWVsZDtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmllbGRFcnJvckhpZGUoZmllbGRLZXk6IHN0cmluZywgbWVzc2FnZTogVE1lc3NhZ2UpIHtcbiAgICBsZXQgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICBsZXQgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XG4gICAgfSk7XG5cbiAgICBmaWVsZCA9IGhpZ2hsaWdodEZvcm1GaWVsZEVycm9yKGZpZWxkLCBmYWxzZSk7XG4gICAgZmllbGQgPSByZW1vdmVGb3JtRmllbGRNZXNzYWdlKGZpZWxkLCBtZXNzYWdlKTtcblxuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZE1lc3NhZ2VTaG93KGZpZWxkS2V5OiBzdHJpbmcsIG1lc3NhZ2U6IFRNZXNzYWdlKSB7XG4gICAgbGV0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgbGV0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgZmllbGQgPSBhcHBlbmRGb3JtRmllbGRNZXNzYWdlKGZpZWxkLCBtZXNzYWdlKTtcblxuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZE1lc3NhZ2VIaWRlKGZpZWxkS2V5OiBzdHJpbmcsIG1lc3NhZ2U6IFRNZXNzYWdlKSB7XG4gICAgbGV0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgbGV0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgZmllbGQgPSByZW1vdmVGb3JtRmllbGRNZXNzYWdlKGZpZWxkLCBtZXNzYWdlKTtcblxuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBzZXRWYWx1ZShhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc291cmNlID0gbmV3IFNvdXJjZShvYmplY3QpO1xuXG4gICAgY29uc3Qgc291cmNlVmFsdWUgPSBhd2FpdCBzb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKFxuICAgICAgYWN0aW9uLnByb3BzLnZhbHVlLnNvdXJjZVxuICAgICk7XG4gICAgc291cmNlLnNldFZhbHVlVG9Tb3VyY2UoYWN0aW9uLnByb3BzLnZhbHVlLmRlc3RpbmF0aW9uLCBzb3VyY2VWYWx1ZSk7XG5cbiAgICBvYmplY3QuRklFTERfQ09ORklHID0gc291cmNlLm9iamVjdC5GSUVMRF9DT05GSUc7XG5cbiAgICB0aGlzLmZvcm1EYXRhID0gc291cmNlLm9iamVjdC5GT1JNX0RBVEE7XG4gICAgdGhpcy5wYXRjaEZvcm1Hcm91cCh0aGlzLmZvcm1EYXRhKTtcbiAgICB0aGlzLmFsbEZvcm1zRGF0YSA9IHNvdXJjZS5vYmplY3QuQUxMX0ZPUk1TX0RBVEE7XG4gICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhID0gc291cmNlLm9iamVjdC5QUkVWSU9VU19GT1JNX0RBVEE7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHNldEZpZWxkRGVmYXVsdFZhbHVlKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICBjb25zdCBzb3VyY2VWYWx1ZSA9IGF3YWl0IHNvdXJjZS5nZXRWYWx1ZUZyb21Tb3VyY2UoXG4gICAgICBhY3Rpb24ucHJvcHMudmFsdWUuc291cmNlXG4gICAgKTtcblxuICAgIHNvdXJjZS5zZXRWYWx1ZVRvU291cmNlKFxuICAgICAge1xuICAgICAgICBrZXk6IEVTb3VyY2VLZXkuT0JKRUNULFxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIG9iamVjdDoge1xuICAgICAgICAgICAga2V5OiBcIkZJRUxEX0NPTkZJR1wiLFxuICAgICAgICAgICAgcGF0aDogXCJkZWZhdWx0LnZhbHVlLnZhbHVlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzb3VyY2VWYWx1ZVxuICAgICk7XG4gICAgc291cmNlLnNldFZhbHVlVG9Tb3VyY2UoXG4gICAgICB7XG4gICAgICAgIGtleTogRVNvdXJjZUtleS5PQkpFQ1QsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgICBrZXk6IFwiRk9STV9EQVRBXCIsXG4gICAgICAgICAgICBwYXRoOiBTdHJpbmcoYWN0aW9uLnByb3BzLmZpZWxkS2V5KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNvdXJjZVZhbHVlXG4gICAgKTtcblxuICAgIG9iamVjdC5GSUVMRF9DT05GSUcgPSBzb3VyY2Uub2JqZWN0LkZJRUxEX0NPTkZJRztcbiAgICB0aGlzLmZvcm1EYXRhID0gc291cmNlLm9iamVjdC5GT1JNX0RBVEE7XG4gICAgdGhpcy5wYXRjaEZvcm1Hcm91cCh0aGlzLmZvcm1EYXRhKTtcbiAgICB0aGlzLmFsbEZvcm1zRGF0YSA9IHNvdXJjZS5vYmplY3QuQUxMX0ZPUk1TX0RBVEE7XG4gICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhID0gc291cmNlLm9iamVjdC5QUkVWSU9VU19GT1JNX0RBVEE7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHNldERyb3Bkb3duT3B0aW9ucyhhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc291cmNlID0gbmV3IFNvdXJjZShvYmplY3QpO1xuXG4gICAgbGV0IHNvdXJjZVZhbHVlID0gYXdhaXQgc291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShcbiAgICAgIGFjdGlvbi5wcm9wcy52YWx1ZS5zb3VyY2VcbiAgICApO1xuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3Rpb24ucHJvcHMsIFwib3B0aW9uc1wiKSkge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcy5vcHRpb25zLCBcImFwcGVuZFRvUGF0aFwiKSkge1xuICAgICAgICBsZXQgYXBwZW5kVG9QYXRoID0gYXdhaXQgc291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShcbiAgICAgICAgICBhY3Rpb24ucHJvcHMub3B0aW9ucy5hcHBlbmRUb1BhdGguc291cmNlXG4gICAgICAgICk7XG4gICAgICAgIGlmIChpc05vdEVtcHR5VmFsdWUoYXBwZW5kVG9QYXRoKSkge1xuICAgICAgICAgIGNvbnN0IGFwcGVuZFRvUGF0aFN0ciA9IHJlcGxhY2VTdHJpbmcoXG4gICAgICAgICAgICBhcHBlbmRUb1BhdGgubWF0Y2goXG4gICAgICAgICAgICAgIGAke2FjdGlvbi5wcm9wcy5vcHRpb25zLmFwcGVuZFRvUGF0aC5maWx0ZXJTb3VyY2VWYWx1ZX1gXG4gICAgICAgICAgICApWzBdLFxuICAgICAgICAgICAgXCJbXmEtekEtWjAtOV9dXCIsXG4gICAgICAgICAgICBcIl9cIlxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBvcHRpb25zUGF0aCA9IGAke2FjdGlvbi5wcm9wcy5vcHRpb25zLnBhdGh9JHthcHBlbmRUb1BhdGhTdHJ9YDtcbiAgICAgICAgICBzb3VyY2VWYWx1ZSA9IGdldE9iamVjdFZhbHVlRnJvbVBhdGgoc291cmNlVmFsdWUsIG9wdGlvbnNQYXRoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc291cmNlVmFsdWUgPSBnZXRPYmplY3RWYWx1ZUZyb21QYXRoKFxuICAgICAgICAgIHNvdXJjZVZhbHVlLFxuICAgICAgICAgIGFjdGlvbi5wcm9wcy5vcHRpb25zLnBhdGhcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc291cmNlLnNldFZhbHVlVG9Tb3VyY2UoYWN0aW9uLnByb3BzLnZhbHVlLmRlc3RpbmF0aW9uLCBzb3VyY2VWYWx1ZSk7XG5cbiAgICBvYmplY3QuRklFTERfQ09ORklHID0gc291cmNlLm9iamVjdC5GSUVMRF9DT05GSUc7XG4gICAgdGhpcy5mb3JtRGF0YSA9IHNvdXJjZS5vYmplY3QuRk9STV9EQVRBO1xuICAgIHRoaXMuYWxsRm9ybXNEYXRhID0gc291cmNlLm9iamVjdC5BTExfRk9STVNfREFUQTtcbiAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEgPSBzb3VyY2Uub2JqZWN0LlBSRVZJT1VTX0ZPUk1fREFUQTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgYXBpQ2FsbChhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTxUQXBpPiB7XG4gICAgbGV0IGFwaUNvbmZpZyA9IHRoaXMuZm9ybUNvbmZpZy5hcGlzW2FjdGlvbi5wcm9wcy5mb3JtQXBpS2V5XTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5oYW5kbGVBcGlDYWxsKGFwaUNvbmZpZyk7XG5cbiAgICBhcGlDb25maWcgPSByZXNwb25zZS5hcGk7XG5cbiAgICB0aGlzLmZvcm1Db25maWcgPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgIHRoaXMuZm9ybUNvbmZpZyxcbiAgICAgIGBhcGlzLiR7YWN0aW9uLnByb3BzLmZvcm1BcGlLZXl9YCxcbiAgICAgIGFwaUNvbmZpZ1xuICAgICk7XG5cbiAgICB0aGlzLmZvcm1EYXRhID0gbWVyZ2VPYmplY3RzKHRoaXMuZm9ybURhdGEsIHtcbiAgICAgIFthY3Rpb24ucHJvcHMuZm9ybUFwaUtleV06IGFwaUNvbmZpZy5yZXNwb25zZS52YWx1ZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFwaUNvbmZpZztcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgZmllbGRBcGlDYWxsKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgIGNvbnN0IGFwaUNvbmZpZyA9IGF3YWl0IHRoaXMuYXBpQ2FsbChhY3Rpb24sIG9iamVjdCk7XG5cbiAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgZmllbGRNdWx0aXBsZUFwaUNhbGxzKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBlbnRyeXBvaW50QXBpS2V5ID0gYWN0aW9uLnByb3BzLmFwaUtleTtcbiAgICBsZXQgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGFjdGlvbi5wcm9wcy5maWVsZEtleSk7XG4gICAgY29uc3QgZW5kcG9pbnRzID0gZmllbGQuYXBpLmVuZHBvaW50cztcbiAgICBjb25zdCBuZXh0QXBpSW5kZXggPSBlbmRwb2ludHMuZmluZEluZGV4KFxuICAgICAgKGFwaTogVEFwaUVuZHBvaW50KSA9PiBhcGkuYXBpS2V5ID09IGVudHJ5cG9pbnRBcGlLZXlcbiAgICApO1xuICAgIGNvbnN0IGFwaUNvbmZpZyA9IGVuZHBvaW50c1tuZXh0QXBpSW5kZXhdO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmhhbmRsZUZpZWxkQXBpQ2FsbChmaWVsZCwgYXBpQ29uZmlnKTtcblxuICAgIGZpZWxkID0gcmVzcG9uc2UuZmllbGQ7XG4gICAgZmllbGQuYXBpLmVuZHBvaW50c1tuZXh0QXBpSW5kZXhdID0gcmVzcG9uc2UuYXBpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBmaWVsZE11bHRpcGxlQXBpQ2FsbHNFbmQoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBhY3Rpb24ucHJvcHMuZmllbGRLZXkpO1xuICAgIGxldCBtdWx0aXBsZUFwaUNhbGxSZXNwb25zZXMgPSB7fTtcbiAgICBmaWVsZC5hcGkuZW5kcG9pbnRzLm1hcCgoYXBpOiBUQXBpRW5kcG9pbnQpID0+IHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhcGkucmVzcG9uc2UsIFwidmFsdWVcIikpXG4gICAgICAgIG11bHRpcGxlQXBpQ2FsbFJlc3BvbnNlcyA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgICAgIG11bHRpcGxlQXBpQ2FsbFJlc3BvbnNlcyxcbiAgICAgICAgICBgJHthcGkuYXBpS2V5fWAsXG4gICAgICAgICAgYXBpLnJlc3BvbnNlLnZhbHVlXG4gICAgICAgICk7XG4gICAgfSk7XG4gICAgdGhpcy5mb3JtRGF0YSA9IHtcbiAgICAgIC4uLnRoaXMuZm9ybURhdGEsXG4gICAgICBbZmllbGQua2V5XTogbXVsdGlwbGVBcGlDYWxsUmVzcG9uc2VzXG4gICAgfTtcbiAgICB0aGlzLnBhdGNoRm9ybUdyb3VwKHRoaXMuZm9ybURhdGEpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyB0YXNrQXBpQ2FsbChhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zaG93QXBpTG9hZGVyKCk7XG5cbiAgICBjb25zdCBhcGlDb25maWcgPSBhd2FpdCB0aGlzLmFwaUNhbGwoYWN0aW9uLCBvYmplY3QpO1xuXG4gICAgdGhpcy50YXNrRGF0YSA9IG1lcmdlT2JqZWN0cyh0aGlzLnRhc2tEYXRhLCB7XG4gICAgICBbYWN0aW9uLnByb3BzLmZvcm1BcGlLZXldOiBhcGlDb25maWcucmVzcG9uc2UudmFsdWVcbiAgICB9KTtcblxuICAgIHRoaXMud2FpdGluZ0ZvckNoYW5nZXMgPSBmYWxzZTtcblxuICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyB0YXNrTXVsdGlwbGVBcGlDYWxscyhhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zaG93QXBpTG9hZGVyKCk7XG5cbiAgICBsZXQgbXVsdGlwbGVBcGlDb25maWcgPSB0aGlzLmZvcm1Db25maWcuYXBpc1thY3Rpb24ucHJvcHMuZm9ybUFwaUtleV07XG5cbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aW9uLnByb3BzLCBcImFwaUtleVwiKSkge1xuICAgICAgY29uc3QgZW50cnlwb2ludEFwaUtleSA9IGFjdGlvbi5wcm9wcy5hcGlLZXk7XG4gICAgICBjb25zdCBlbmRwb2ludHMgPSBtdWx0aXBsZUFwaUNvbmZpZy5lbmRwb2ludHM7XG4gICAgICBjb25zdCBuZXh0QXBpSW5kZXggPSBlbmRwb2ludHMuZmluZEluZGV4KFxuICAgICAgICAoYXBpOiBUQXBpRW5kcG9pbnQpID0+IGFwaS5hcGlLZXkgPT0gZW50cnlwb2ludEFwaUtleVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFwaUNvbmZpZyA9IGVuZHBvaW50c1tuZXh0QXBpSW5kZXhdO1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaGFuZGxlQXBpQ2FsbChhcGlDb25maWcpO1xuXG4gICAgICBtdWx0aXBsZUFwaUNvbmZpZy5lbmRwb2ludHNbbmV4dEFwaUluZGV4XSA9IHJlc3BvbnNlLmFwaTtcblxuICAgICAgdGhpcy5mb3JtQ29uZmlnID0gc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICAgIHRoaXMuZm9ybUNvbmZpZyxcbiAgICAgICAgYGFwaXMuJHthY3Rpb24ucHJvcHMuZm9ybUFwaUtleX1gLFxuICAgICAgICBtdWx0aXBsZUFwaUNvbmZpZ1xuICAgICAgKTtcblxuICAgICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGFwaXMgPSBuZXcgQXBpcyhcbiAgICAgICAge1xuICAgICAgICAgIEZPUk1fQ09ORklHOiB0aGlzLmZvcm1Db25maWcsXG4gICAgICAgICAgQVBJX0NPTkZJRzogbXVsdGlwbGVBcGlDb25maWcsXG4gICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YVxuICAgICAgICB9LFxuICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgKTtcblxuICAgICAgYXdhaXQgYXBpcy5jYWxsTmV4dEFwaShtdWx0aXBsZUFwaUNvbmZpZy5lbnRyeXBvaW50KTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHRhc2tNdWx0aXBsZUFwaUNhbGxzRW5kKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBtdWx0aXBsZUFwaUNvbmZpZyA9IHRoaXMuZm9ybUNvbmZpZy5hcGlzW2FjdGlvbi5wcm9wcy5mb3JtQXBpS2V5XTtcblxuICAgIGxldCBtdWx0aXBsZUFwaUNhbGxSZXNwb25zZXMgPSB7fTtcbiAgICBtdWx0aXBsZUFwaUNvbmZpZy5lbmRwb2ludHMubWFwKChhcGk6IFRBcGlFbmRwb2ludCkgPT4ge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFwaS5yZXNwb25zZSwgXCJ2YWx1ZVwiKSlcbiAgICAgICAgbXVsdGlwbGVBcGlDYWxsUmVzcG9uc2VzID0gc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICAgICAgbXVsdGlwbGVBcGlDYWxsUmVzcG9uc2VzLFxuICAgICAgICAgIGAke2FwaS5hcGlLZXl9YCxcbiAgICAgICAgICBhcGkucmVzcG9uc2UudmFsdWVcbiAgICAgICAgKTtcbiAgICB9KTtcbiAgICB0aGlzLnRhc2tEYXRhID0ge1xuICAgICAgLi4udGhpcy50YXNrRGF0YSxcbiAgICAgIFthY3Rpb24ucHJvcHMuZm9ybUFwaUtleV06IG11bHRpcGxlQXBpQ2FsbFJlc3BvbnNlc1xuICAgIH07XG5cbiAgICB0aGlzLndhaXRpbmdGb3JDaGFuZ2VzID0gZmFsc2U7XG5cbiAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgfVxuXG4gIGRpYWxvZ1JlZjogYW55ID0gdW5kZWZpbmVkO1xuICBAbG9nTWV0aG9kXG4gIGRpYWxvZ1Nob3cob3B0aW9uczogYW55KSB7XG4gICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2VcbiAgICAgIC5vcGVuKG9wdGlvbnM/Lmh0bWwsIHtcbiAgICAgICAgY2xvc2VhYmxlOiB0cnVlLFxuICAgICAgICBkaXNtaXNzaWJsZTogdHJ1ZSxcbiAgICAgICAgbGFiZWw6IG9wdGlvbnM/LmxhYmVsLFxuICAgICAgICBzaXplOiBvcHRpb25zPy5zaXplID8/IFwic1wiLFxuICAgICAgICBkYXRhOiB7IGJ1dHRvbjogb3B0aW9ucz8uYnV0dG9uIH1cbiAgICAgIH0pXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHt9XG4gICAgICB9KTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZGlhbG9nSGlkZSgpIHtcbiAgICBpZiAodGhpcy5kaWFsb2dSZWYpIHtcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmNvbXBsZXRlKCk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICByZWRpcmVjdFRvVXJsKGFjdGlvbjogVEFjdGlvbikge1xuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3Rpb24ucHJvcHMsIFwidXJsXCIpKSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aW9uLnByb3BzLnVybCwgXCJ1cmxcIikpIHtcbiAgICAgICAgbGV0IHRpbWVvdXQgPSAyMDAwO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aW9uLnByb3BzLnVybCwgXCJ0aW1lb3V0XCIpICYmXG4gICAgICAgICAgdHlwZW9mIGFjdGlvbi5wcm9wcy51cmwudGltZW91dCA9PSBcIm51bWJlclwiXG4gICAgICAgICkge1xuICAgICAgICAgIHRpbWVvdXQgPSBhY3Rpb24ucHJvcHMudXJsLnRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcy51cmwsIFwidGFyZ2V0XCIpKSB7XG4gICAgICAgICAgICB3aW5kb3cub3BlbihhY3Rpb24ucHJvcHMudXJsLnVybCwgYWN0aW9uLnByb3BzLnVybC50YXJnZXQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZShhY3Rpb24ucHJvcHMudXJsLnVybCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCB0aW1lb3V0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHBhdGNoRmllbGRDb250cm9sVmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1trZXldLnBhdGNoVmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgc2V0RmllbGRDb250cm9sVmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1trZXldLnNldFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHBhdGNoRm9ybUdyb3VwKGZvcm1EYXRhOiBhbnkpIHtcbiAgICBpZiAoaXNVbmRlZmluZWQodGhpcy5mb3JtR3JvdXApIHx8IGlzVW5kZWZpbmVkKGZvcm1EYXRhKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBmb3JtR3JvdXAgb3IgZm9ybURhdGEgaXMgJ3VuZGVmaW5lZCcuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBmb3JtRGF0YUluS3dpa1VJRm9ybWF0ID0ge307XG4gICAgICBmb3IgKGxldCBmaWVsZEtleSBpbiBmb3JtRGF0YSkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZpZWxkKSAmJiAhaXNOdWxsKGZpZWxkKSkge1xuICAgICAgICAgIGZvcm1EYXRhSW5Ld2lrVUlGb3JtYXRbZmllbGRLZXldID1cbiAgICAgICAgICAgIGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvS3dpa1VJRm9ybWF0KGZpZWxkLCBmb3JtRGF0YVtmaWVsZEtleV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKGZvcm1EYXRhSW5Ld2lrVUlGb3JtYXQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGlzRmllbGRWYWxpZChmaWVsZEtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkS2V5XS52YWxpZDtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaXNGaWVsZEVuYWJsZWQoZmllbGRLZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZEtleV0uZW5hYmxlZDtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZ2V0Rm9ybUdyb3VwUmF3VmFsdWVzKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBzaG93UHJldmlldyhwcmV2aWV3UHJvcGVydGllczogYW55KTogdm9pZCB7XG4gICAgdGhpcy5wcmV2aWV3UHJvcGVydGllcyA9IG1lcmdlT2JqZWN0cyhcbiAgICAgIHRoaXMucHJldmlld1Byb3BlcnRpZXMsXG4gICAgICBwcmV2aWV3UHJvcGVydGllc1xuICAgICk7XG5cbiAgICBpZiAoXG4gICAgICBpc0VtcHR5VmFsdWUodGhpcy5wcmV2aWV3UHJvcGVydGllcy5pZnJhbWUuc3JjKSAmJlxuICAgICAgaXNFbXB0eVZhbHVlKHRoaXMucHJldmlld1Byb3BlcnRpZXMuaHRtbC5iZWZvcmUpICYmXG4gICAgICBpc0VtcHR5VmFsdWUodGhpcy5wcmV2aWV3UHJvcGVydGllcy5odG1sLmFmdGVyKVxuICAgICkge1xuICAgICAgdGhpcy5wcmV2aWV3UHJvcGVydGllcy51bmF2YWlsYWJsZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJldmlld1Byb3BlcnRpZXMudW5hdmFpbGFibGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNldFByZXZpZXdQcm9wZXJ0aWVzID0gKCkgPT4ge1xuICAgICAgdGhpcy5wcmV2aWV3UHJvcGVydGllcyA9IHtcbiAgICAgICAgaHRtbDoge1xuICAgICAgICAgIGJlZm9yZTogXCJcIixcbiAgICAgICAgICBiZWZvcmVTdHlsZXM6IFwiXCIsXG4gICAgICAgICAgYWZ0ZXI6IFwiXCIsXG4gICAgICAgICAgYWZ0ZXJTdHlsZXM6IFwiXCJcbiAgICAgICAgfSxcbiAgICAgICAgaWZyYW1lOiB7XG4gICAgICAgICAgc3JjOiBcIlwiLFxuICAgICAgICAgIHRpdGxlOiBcIlwiXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IFwiZGlhbG9nXCIsXG4gICAgICAgIHBvcHVwRm9ybUtleTogXCJcIixcbiAgICAgICAgdGl0bGU6IFwiXCIsXG4gICAgICAgIHNpemU6IFwiYXV0b1wiLFxuICAgICAgICB1bmF2YWlsYWJsZTogZmFsc2VcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHNob3dEaWFsb2cgPSAoKSA9PiB7XG4gICAgICB0aGlzLnByZXZpZXdEaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2VcbiAgICAgICAgLm9wZW4odGhpcy5kaWFsb2csIHtcbiAgICAgICAgICBjbG9zZWFibGU6IHRydWUsXG4gICAgICAgICAgZGlzbWlzc2libGU6IHRydWUsXG4gICAgICAgICAgc2l6ZTogdGhpcy5wcmV2aWV3UHJvcGVydGllcz8uc2l6ZSB8fCBcImF1dG9cIixcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcmV2aWV3RGlhbG9nUmVmLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgcmVzZXRQcmV2aWV3UHJvcGVydGllcygpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICAgIHJlc2V0UHJldmlld1Byb3BlcnRpZXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBzaG93UHJldmlldyA9ICgpID0+IHtcbiAgICAgIHRoaXMucHJldmlld0RpYWxvZ1JlZiA9IHRoaXMucHJldmlld0RpYWxvZ1NlcnZpY2VcbiAgICAgICAgLm9wZW4odGhpcy5wcmV2aWV3IHx8IFwiXCIpXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgICAgICByZXNldFByZXZpZXdQcm9wZXJ0aWVzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgc3dpdGNoICh0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLnR5cGUpIHtcbiAgICAgIGNhc2UgXCJkaWFsb2dcIjpcbiAgICAgICAgc2hvd0RpYWxvZygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJwb3B1cFwiOlxuICAgICAgICBzaG93UHJldmlldygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHNob3dEaWFsb2coKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBzaG93RXJyb3JQcmV2aWV3KHByZXZpZXdQcm9wZXJ0aWVzOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dQcmV2aWV3KHtcbiAgICAgIGh0bWw6IHtcbiAgICAgICAgYWZ0ZXI6IGA8ZGl2IHN0eWxlPVxcXCJwYWRkaW5nLWJvdHRvbTowLjI1cmVtO3BhZGRpbmctdG9wOiAwLjI1cmVtO3Bvc2l0aW9uOiBhYnNvbHV0ZTttYXJnaW4tdG9wOiBjYWxjKDUwdmgpO2ZvbnQtc2l6ZTogMS40cmVtO2JhY2tncm91bmQ6IHdoaXRlO3BhZGRpbmc6IDJyZW07Ym9yZGVyLXJhZGl1czogMXJlbTtib3gtc2hhZG93OiAwcHggMHB4IDEwcHggLTNweCBibGFjaztvdmVyZmxvdzogYXV0bztoZWlnaHQ6IGZpdC1jb250ZW50O21heC1oZWlnaHQ6IDkwdmg7IHdpZHRoOiA3MHZ3OyBtYXJnaW4tbGVmdDogY2FsYygxNXZ3KTsgbGluZS1oZWlnaHQ6IDJyZW07XFxcIj5FcnJvcjogJHtwcmV2aWV3UHJvcGVydGllcy5tZXNzYWdlLm1lc3NhZ2V9PC9kaXY+YFxuICAgICAgfSxcbiAgICAgIHR5cGU6IFwicG9wdXBcIlxuICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBzaG93UG9wdXBGb3JtKFxuICAgIHBvcHVwRm9ybUtleTogc3RyaW5nLFxuICAgIHBvcHVwVHlwZTogXCJESUFMT0dcIiB8IFwiUE9QVVBcIiA9IFwiRElBTE9HXCJcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgcG9wdXBGb3JtQ29uZmlnID0gdGhpcy5mb3JtQ29uZmlnLnBvcHVwRm9ybXNbcG9wdXBGb3JtS2V5XTtcblxuICAgIHRoaXMub25BY3Rpb25TaG93UG9wdXBGb3JtLmVtaXQoe1xuICAgICAgYWN0aXZlRm9ybURhdGE6IG1lcmdlT2JqZWN0cyh0aGlzLmZvcm1EYXRhLCB0aGlzLnRhc2tEYXRhKSxcbiAgICAgIHBvcHVwRm9ybUNvbmZpZzogcG9wdXBGb3JtQ29uZmlnLFxuICAgICAgcG9wdXBUeXBlOiBwb3B1cFR5cGVcbiAgICB9KTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYWxlcnRTaG93KHR5cGU6IFR1aU5vdGlmaWNhdGlvbiwgbWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5hbGVydFNlcnZpY2VcbiAgICAgIC5vcGVuKGAke21lc3NhZ2V9YCwge1xuICAgICAgICBzdGF0dXM6XG4gICAgICAgICAgdHlwZSA9PT0gXCJlcnJvclwiXG4gICAgICAgICAgICA/IFR1aU5vdGlmaWNhdGlvbi5FcnJvclxuICAgICAgICAgICAgOiB0eXBlID09PSBcIndhcm5pbmdcIlxuICAgICAgICAgICAgPyBUdWlOb3RpZmljYXRpb24uV2FybmluZ1xuICAgICAgICAgICAgOiB0eXBlID09PSBcInN1Y2Nlc3NcIlxuICAgICAgICAgICAgPyBUdWlOb3RpZmljYXRpb24uU3VjY2Vzc1xuICAgICAgICAgICAgOiBUdWlOb3RpZmljYXRpb24uSW5mb1xuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBjb21wbGV0ZSgpIHt9XG4gICAgICB9KTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgdGFrZUFjdGlvbk9uRmllbGRHcm91cChhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KSB7XG4gICAgc3dpdGNoIChhY3Rpb24ua2V5KSB7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfR1JPVVBfSElERTpcbiAgICAgICAgdGhpcy5maWVsZEdyb3VwSGlkZShhY3Rpb24ucHJvcHMuZ3JvdXBLZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9HUk9VUF9TSE9XOlxuICAgICAgICB0aGlzLmZpZWxkR3JvdXBTaG93KGFjdGlvbi5wcm9wcy5ncm91cEtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0dST1VQX0VOQUJMRTpcbiAgICAgICAgdGhpcy5maWVsZEdyb3VwRW5hYmxlKGFjdGlvbi5wcm9wcy5ncm91cEtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0dST1VQX0RJU0FCTEU6XG4gICAgICAgIHRoaXMuZmllbGRHcm91cERpc2FibGUoYWN0aW9uLnByb3BzLmdyb3VwS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHRha2VBY3Rpb24oYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSkge1xuICAgIHN3aXRjaCAoYWN0aW9uLmtleSkge1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0hJREU6XG4gICAgICAgIHRoaXMuZmllbGRIaWRlKGFjdGlvbi5wcm9wcy5maWVsZEtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX1NIT1c6XG4gICAgICAgIHRoaXMuZmllbGRTaG93KGFjdGlvbi5wcm9wcy5maWVsZEtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0RJU0FCTEU6XG4gICAgICAgIHRoaXMuZmllbGREaXNhYmxlKGFjdGlvbi5wcm9wcy5maWVsZEtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0VOQUJMRTpcbiAgICAgICAgdGhpcy5maWVsZEVuYWJsZShhY3Rpb24ucHJvcHMuZmllbGRLZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9SRVNFVDpcbiAgICAgICAgdGhpcy5maWVsZFJlc2V0KGFjdGlvbi5wcm9wcy5maWVsZEtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0VSUk9SX1NIT1c6XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3Rpb24ucHJvcHMubWVzc2FnZSwgXCJzb3VyY2VcIikpIHtcbiAgICAgICAgICBjb25zdCBmaWVsZEVycm9yU2hvd19Tb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICAgICAgICBsZXQgZmllbGRFcnJvclNob3dTb3VyY2VWYWx1ZSA9XG4gICAgICAgICAgICBhd2FpdCBmaWVsZEVycm9yU2hvd19Tb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKFxuICAgICAgICAgICAgICBhY3Rpb24ucHJvcHMubWVzc2FnZS5zb3VyY2VcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgZmllbGRFcnJvclNob3dTb3VyY2VWYWx1ZSA9PSBcInN0cmluZ1wiIHx8XG4gICAgICAgICAgICB0eXBlb2YgZmllbGRFcnJvclNob3dTb3VyY2VWYWx1ZSA9PSBcIm51bWJlclwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmaWVsZEVycm9yU2hvd1NvdXJjZVZhbHVlID0gU3RyaW5nKGZpZWxkRXJyb3JTaG93U291cmNlVmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWVsZEVycm9yU2hvd1NvdXJjZVZhbHVlID0gXCJcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhY3Rpb24gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIFwicHJvcHMubWVzc2FnZS5tZXNzYWdlXCIsXG4gICAgICAgICAgICBmaWVsZEVycm9yU2hvd1NvdXJjZVZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpZWxkRXJyb3JTaG93KGFjdGlvbi5wcm9wcy5maWVsZEtleSwgYWN0aW9uLnByb3BzLm1lc3NhZ2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9FUlJPUl9ISURFOlxuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aW9uLnByb3BzLm1lc3NhZ2UsIFwic291cmNlXCIpKSB7XG4gICAgICAgICAgY29uc3QgZmllbGRFcnJvckhpZGVfU291cmNlID0gbmV3IFNvdXJjZShvYmplY3QpO1xuXG4gICAgICAgICAgbGV0IGZpZWxkRXJyb3JIaWRlU291cmNlVmFsdWUgPVxuICAgICAgICAgICAgYXdhaXQgZmllbGRFcnJvckhpZGVfU291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShcbiAgICAgICAgICAgICAgYWN0aW9uLnByb3BzLm1lc3NhZ2Uuc291cmNlXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGZpZWxkRXJyb3JIaWRlU291cmNlVmFsdWUgPT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICAgICAgdHlwZW9mIGZpZWxkRXJyb3JIaWRlU291cmNlVmFsdWUgPT0gXCJudW1iZXJcIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZmllbGRFcnJvckhpZGVTb3VyY2VWYWx1ZSA9IFN0cmluZyhmaWVsZEVycm9ySGlkZVNvdXJjZVZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmllbGRFcnJvckhpZGVTb3VyY2VWYWx1ZSA9IFwiXCI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYWN0aW9uID0gc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBcInByb3BzLm1lc3NhZ2UubWVzc2FnZVwiLFxuICAgICAgICAgICAgZmllbGRFcnJvckhpZGVTb3VyY2VWYWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWVsZEVycm9ySGlkZShhY3Rpb24ucHJvcHMuZmllbGRLZXksIGFjdGlvbi5wcm9wcy5tZXNzYWdlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfTUVTU0FHRV9TSE9XOlxuICAgICAgICB0aGlzLmZpZWxkTWVzc2FnZVNob3coYWN0aW9uLnByb3BzLmZpZWxkS2V5LCBhY3Rpb24ucHJvcHMubWVzc2FnZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX01FU1NBR0VTX0hJREU6XG4gICAgICAgIHRoaXMuZmllbGRNZXNzYWdlSGlkZShhY3Rpb24ucHJvcHMuZmllbGRLZXksIGFjdGlvbi5wcm9wcy5tZXNzYWdlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuU0VUX1ZBTFVFOlxuICAgICAgICBhd2FpdCB0aGlzLnNldFZhbHVlKGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuU0VUX0ZJRUxEX0RFRkFVTFRfVkFMVUU6XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0RmllbGREZWZhdWx0VmFsdWUoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5TRVRfRFJPUERPV05fT1BUSU9OUzpcbiAgICAgICAgYXdhaXQgdGhpcy5zZXREcm9wZG93bk9wdGlvbnMoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5IQU5ETEVfQ09OTkVDVEVEX0VMRU1FTlRTOlxuICAgICAgICB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRzKFxuICAgICAgICAgIHsga2V5OiBhY3Rpb24ucHJvcHMuZmllbGRLZXkgfSxcbiAgICAgICAgICBcIk9OX0FDVElPTlwiXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkFQSV9DQUxMOlxuICAgICAgICBhd2FpdCB0aGlzLmZpZWxkQXBpQ2FsbChhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkFQSV9DQUxMX01VTFRJUExFOlxuICAgICAgICBhd2FpdCB0aGlzLmZpZWxkTXVsdGlwbGVBcGlDYWxscyhhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkFQSV9DQUxMX01VTFRJUExFX0VORDpcbiAgICAgICAgYXdhaXQgdGhpcy5maWVsZE11bHRpcGxlQXBpQ2FsbHNFbmQoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5UQVNLX0FQSV9DQUxMOlxuICAgICAgICBhd2FpdCB0aGlzLnRhc2tBcGlDYWxsKGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuVEFTS19BUElfQ0FMTF9NVUxUSVBMRTpcbiAgICAgICAgYXdhaXQgdGhpcy50YXNrTXVsdGlwbGVBcGlDYWxscyhhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlRBU0tfQVBJX0NBTExfTVVMVElQTEVfRU5EOlxuICAgICAgICBhd2FpdCB0aGlzLnRhc2tNdWx0aXBsZUFwaUNhbGxzRW5kKGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuUkVESVJFQ1RfVE9fVVJMOlxuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aW9uLnByb3BzLnVybCwgXCJzb3VyY2VcIikpIHtcbiAgICAgICAgICBjb25zdCByZWRpcmVjdFRvVXJsX1NvdXJjZSA9IG5ldyBTb3VyY2Uob2JqZWN0KTtcblxuICAgICAgICAgIGxldCByZWRpcmVjdFRvVXJsU291cmNlVmFsdWUgPVxuICAgICAgICAgICAgYXdhaXQgcmVkaXJlY3RUb1VybF9Tb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKFxuICAgICAgICAgICAgICBhY3Rpb24ucHJvcHMudXJsLnNvdXJjZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChpc0VtcHR5U3RyaW5nKHJlZGlyZWN0VG9VcmxTb3VyY2VWYWx1ZSkpIHtcbiAgICAgICAgICAgIHJlZGlyZWN0VG9VcmxTb3VyY2VWYWx1ZSA9IFwiXCI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYWN0aW9uID0gc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBcInByb3BzLnVybC51cmxcIixcbiAgICAgICAgICAgIHJlZGlyZWN0VG9VcmxTb3VyY2VWYWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZWRpcmVjdFRvVXJsKGFjdGlvbik7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuUFJFVklFV19ESUFMT0dfU0hPVzpcbiAgICAgICAgdGhpcy5zaG93UHJldmlldyhhY3Rpb24ucHJvcHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5QUkVWSUVXX0VSUk9SX1NIT1c6XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3Rpb24ucHJvcHMubWVzc2FnZSwgXCJzb3VyY2VcIikpIHtcbiAgICAgICAgICBjb25zdCBwcmV2aWV3RXJyb3JTaG93X1NvdXJjZSA9IG5ldyBTb3VyY2Uob2JqZWN0KTtcblxuICAgICAgICAgIGxldCBwcmV2aWV3RXJyb3JTaG93U291cmNlVmFsdWUgPVxuICAgICAgICAgICAgYXdhaXQgcHJldmlld0Vycm9yU2hvd19Tb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKFxuICAgICAgICAgICAgICBhY3Rpb24ucHJvcHMubWVzc2FnZS5zb3VyY2VcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgcHJldmlld0Vycm9yU2hvd1NvdXJjZVZhbHVlID09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgICAgIHR5cGVvZiBwcmV2aWV3RXJyb3JTaG93U291cmNlVmFsdWUgPT0gXCJudW1iZXJcIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcHJldmlld0Vycm9yU2hvd1NvdXJjZVZhbHVlID0gU3RyaW5nKHByZXZpZXdFcnJvclNob3dTb3VyY2VWYWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByZXZpZXdFcnJvclNob3dTb3VyY2VWYWx1ZSA9IFwiXCI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYWN0aW9uID0gc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBcInByb3BzLm1lc3NhZ2UubWVzc2FnZVwiLFxuICAgICAgICAgICAgcHJldmlld0Vycm9yU2hvd1NvdXJjZVZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNob3dFcnJvclByZXZpZXcoYWN0aW9uLnByb3BzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuUE9QVVBfRk9STV9TSE9XOlxuICAgICAgICB0aGlzLnNob3dQb3B1cEZvcm0oXG4gICAgICAgICAgYWN0aW9uLnByb3BzLnBvcHVwRm9ybUtleSxcbiAgICAgICAgICBhY3Rpb24ucHJvcHM/LnBvcHVwVHlwZSA/PyBcIkRJQUxPR1wiXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNUT1BfV0FJVElORzpcbiAgICAgICAgdGhpcy53YWl0aW5nRm9yQ2hhbmdlcyA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5OT1RJRklDQVRJT05fRVJST1JfU0hPVzpcbiAgICAgICAgdGhpcy50b2dnbGVFcnJvck5vdGlmaWNhdGlvbih0cnVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuTk9USUZJQ0FUSU9OX0VSUk9SX0hJREU6XG4gICAgICAgIHRoaXMudG9nZ2xlRXJyb3JOb3RpZmljYXRpb24oZmFsc2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5SRVNVTUVfVEFTS19FWEVDVVRJT046XG4gICAgICAgIHRoaXMuc3RvcFRhc2tFeGVjdXRpb24gPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuU1RPUF9UQVNLX0VYRUNVVElPTjpcbiAgICAgICAgdGhpcy5zdG9wVGFza0V4ZWN1dGlvbiA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkRJQUxPR19TSE9XOlxuICAgICAgICB0aGlzLmRpYWxvZ1Nob3coe1xuICAgICAgICAgIGh0bWw6IGFjdGlvbi5wcm9wcz8uaHRtbCxcbiAgICAgICAgICBsYWJlbDogYWN0aW9uLnByb3BzPy5sYWJlbCxcbiAgICAgICAgICBzaXplOiBhY3Rpb24ucHJvcHM/LnNpemUsXG4gICAgICAgICAgYnV0dG9uOiBhY3Rpb24ucHJvcHM/LmJ1dHRvblxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRElBTE9HX0hJREU6XG4gICAgICAgIHRoaXMuZGlhbG9nSGlkZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5TQVZFX0ZPUk06XG4gICAgICAgIHRoaXMuaGFuZGxlT25DbGlja1NhdmVGb3JtKHVuZGVmaW5lZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkFMRVJUX1NIT1c6XG4gICAgICAgIHRoaXMuYWxlcnRTaG93KGFjdGlvbi5wcm9wcy50eXBlLCBhY3Rpb24ucHJvcHMubWVzc2FnZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwia3dpa2lkLWZvcm0tY29udGFpbmVyXCJcbiAgKm5nSWY9XCIhbG9hZGluZ1wiXG4+XG4gIDxkaXZcbiAgICBpZD1cInVmLWZvcm0tZmllbGRzLWhlYWRlci1jb250YWluZXJcIlxuICAgICpuZ0lmPVwiXG4gICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXI/LnRpdGxlPy5oaWRkZW4gfHxcbiAgICAgICFmb3JtQ29uZmlnLnByb3BlcnRpZXM/LmhlYWRlcj8uc3RlcHM/LmhpZGRlbiB8fFxuICAgICAgIWZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyPy5iYWNrQnV0dG9uPy5oaWRkZW5cbiAgICBcIlxuICA+XG4gICAgPGltZ1xuICAgICAgaWQ9XCJ1Zi1oZWFkZXItbG9nb1wiXG4gICAgICAqbmdJZj1cIiFmb3JtQ29uZmlnLnByb3BlcnRpZXM/LmhlYWRlcj8ubG9nbz8uaGlkZGVuICYmIGlzTW9iaWxlVmlld1wiXG4gICAgICBbc3JjXT1cImZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyPy5sb2dvPy5zcmNcIlxuICAgICAgW2FsdF09XCJmb3JtQ29uZmlnLnByb3BlcnRpZXM/LmhlYWRlcj8ubG9nbz8uYWx0XCJcbiAgICAvPlxuICAgIDxkaXYgaWQ9XCJ1Zi1mb3JtLWZpZWxkcy1oZWFkZXItbWFpblwiPlxuICAgICAgPGRpdiBpZD1cInVmLWZvcm0tZmllbGRzLWhlYWRlci1sZWZ0XCI+XG4gICAgICAgIDxrd2lrdWktYnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICFmb3JtQ29uZmlnLnByb3BlcnRpZXM/LmhlYWRlci5iYWNrQnV0dG9uLmhpZGRlbiAmJiBpc01vYmlsZVZpZXdcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJiYWNrQnV0dG9uLmRpc2FibGVkXCJcbiAgICAgICAgICBbc2hvd0xvYWRlcl09XCJiYWNrQnV0dG9uLnNob3dMb2FkZXJcIlxuICAgICAgICAgIGFwcGVhcmFuY2U9XCJtb25vXCJcbiAgICAgICAgICBpY29uPVwidHVpSWNvbkFycm93TGVmdFwiXG4gICAgICAgICAgc2hhcGU9XCJyb3VuZGVkXCJcbiAgICAgICAgICAob25DbGljayk9XCJcbiAgICAgICAgICAgIGhhbmRsZU9uQ2xpY2tHb0JhY2soXG4gICAgICAgICAgICAgICRldmVudCxcbiAgICAgICAgICAgICAgZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXIuYmFja0J1dHRvbi5tb2RlXG4gICAgICAgICAgICApXG4gICAgICAgICAgXCJcbiAgICAgICAgPjwva3dpa3VpLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBpZD1cInVmLWZvcm0tZmllbGRzLWhlYWRlci1yaWdodFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgaWQ9XCJ1Zi1mb3JtLWZpZWxkcy10aXRsZVwiXG4gICAgICAgICAgKm5nSWY9XCIhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXIudGl0bGUuaGlkZGVuXCJcbiAgICAgICAgICA+e3sgZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXIudGl0bGUubGFiZWwgfX08L2RpdlxuICAgICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBpZD1cInVmLWZvcm0tZmllbGRzLXN0ZXBzXCJcbiAgICAgICAgICAqbmdJZj1cIiFmb3JtQ29uZmlnLnByb3BlcnRpZXM/LmhlYWRlci5zdGVwcy5oaWRkZW5cIlxuICAgICAgICAgID5TdGVwIHt7IGZvcm1Db25maWcuc2VxdWVuY2VObyB9fSBvZlxuICAgICAgICAgIHt7IGZvcm1Db25maWcuZm9ybXNMaXN0TGVuZ3RoIH19PC9kaXZcbiAgICAgICAgPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGhyXG4gICAgICAqbmdJZj1cIlxuICAgICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXIudGl0bGUuaGlkZGVuIHx8XG4gICAgICAgICFmb3JtQ29uZmlnLnByb3BlcnRpZXM/LmhlYWRlci5zdGVwcy5oaWRkZW4gfHxcbiAgICAgICAgIWZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyLmJhY2tCdXR0b24uaGlkZGVuXG4gICAgICBcIlxuICAgIC8+XG4gIDwvZGl2PlxuICA8Zm9ybVxuICAgIGNsYXNzPVwia3dpa2lkLWZvcm0gc2hvd1wiXG4gICAgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nRm9yPVwiXG4gICAgICAgIGxldCBmaWVsZCBvZiBmb3JtRmllbGRzO1xuICAgICAgICBsZXQgaSA9IGluZGV4O1xuICAgICAgICB0cmFja0J5OiBnZXRVbmlxdWVJZGVudGlmaWVyXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImZpZWxkLnR5cGVcIj5cbiAgICAgICAgPCEtLSBIVE1MIENvbnRlbnQgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidodG1sJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBbaW5uZXJIdG1sXT1cImZpZWxkLmh0bWwgfCBrd2lrdWlTYWZlSHRtbFwiPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBGb3JtIFRpdGxlIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGl0bGUnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJ0aXRsZVwiXG4gICAgICAgICAgICBbY2xhc3MuaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIHt7IGZpZWxkLmxhYmVsIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxrd2lrdWktYnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiZmllbGQ/LnJlc2V0XCJcbiAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cIndoaXRlYmxvY2tcIlxuICAgICAgICAgICAgICBzaXplPVwic1wiXG4gICAgICAgICAgICAgIGxhYmVsPVwiUmVzZXRcIlxuICAgICAgICAgICAgICAob25DbGljayk9XCJoYW5kbGVPbkNsaWNrUmVzZXRGb3JtRmllbGRzKCRldmVudCwgZmllbGQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIEJ1dHRvbiAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2J1dHRvbidcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktYnV0dG9uXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQ/LmtleVwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbc2hvd0xvYWRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ubG9hZGluZyA/PyBmYWxzZVwiXG4gICAgICAgICAgICAgIFtzdHlsZXNdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnN0eWxlc1wiXG4gICAgICAgICAgICAgIFtjbGFzc109XCJmaWVsZD8ucHJvcGVydGllcz8uY2xhc3NcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmFwcGVhcmFuY2UgPz8gJ3ByaW1hcnknXCJcbiAgICAgICAgICAgICAgW2ljb25dPVwiZmllbGQ/LnByb3BlcnRpZXM/Lmljb25cIlxuICAgICAgICAgICAgICBbaWNvblJpZ2h0XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5pY29uUmlnaHRcIlxuICAgICAgICAgICAgICBbc2hhcGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNoYXBlXCJcbiAgICAgICAgICAgICAgW3NpemVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNpemVcIlxuICAgICAgICAgICAgICAob25DbGljayk9XCJoYW5kbGVPbkNsaWNrRm9ybUZpZWxkQnV0dG9uKGZpZWxkKVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktYnV0dG9uPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gSW5wdXQgVGV4dCAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RleHQnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0XG4gICAgICAgICAgICAgIFtjYXNlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jYXNlXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbdHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dD5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIFRleHRhcmVhIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGV4dGFyZWEnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLXRleHRhcmVhXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS10ZXh0YXJlYT5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIENoZWNrYm94IC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2hlY2tib3gnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWNoZWNrYm94XG4gICAgICAgICAgICAgIFtjb250ZW50QWxpZ25dPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRlbnRBbGlnbiA/PyAnbGVmdCdcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFtzaXplXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zaXplID8/ICdsJ1wiXG4gICAgICAgICAgICAgIFt2YXJpYW50XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy52YXJpYW50ID8/ICdibG9jaydcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1jaGVja2JveD5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIElucHV0IE51bWJlciAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtbnVtYmVyXG4gICAgICAgICAgICAgIFtkZWNpbWFsXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5kZWNpbWFsXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbbWF4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5tYXhcIlxuICAgICAgICAgICAgICBbbWluXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5taW5cIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3Bvc3RmaXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBvc3RmaXggPz8gJydcIlxuICAgICAgICAgICAgICBbcHJlY2lzaW9uXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wcmVjaXNpb25cIlxuICAgICAgICAgICAgICBbcHJlZml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wcmVmaXggPz8gJydcIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LW51bWJlcj5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIElucHV0IERhdGUgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1kYXRlXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW21pbl09XCJmaWVsZD8ucHJvcGVydGllcz8ubWluXCJcbiAgICAgICAgICAgICAgW21pbkNhbGN1bGF0ZWRGcm9tVG9kYXldPVwiXG4gICAgICAgICAgICAgICAgZmllbGQ/LnByb3BlcnRpZXM/Lm1pbkNhbGN1bGF0ZWRGcm9tVG9kYXlcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW21heF09XCJmaWVsZD8ucHJvcGVydGllcz8ubWF4XCJcbiAgICAgICAgICAgICAgW21heENhbGN1bGF0ZWRGcm9tVG9kYXldPVwiXG4gICAgICAgICAgICAgICAgZmllbGQ/LnByb3BlcnRpZXM/Lm1heENhbGN1bGF0ZWRGcm9tVG9kYXlcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtZGF0ZT5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIElucHV0IFBob25lIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIncGhvbmUnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LXBob25lXG4gICAgICAgICAgICAgIFtjb3VudHJ5Q29kZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY291bnRyeUNvZGVcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgIFtwaG9uZU1hc2tBZnRlckNvdW50cnlDb2RlXT1cIlxuICAgICAgICAgICAgICAgIGZpZWxkPy5wcm9wZXJ0aWVzPy5waG9uZU1hc2tBZnRlckNvdW50cnlDb2RlXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtyZW1vdmVDb3VudHJ5Q29kZUZyb21WYWx1ZV09XCJcbiAgICAgICAgICAgICAgICBmaWVsZD8ucHJvcGVydGllcz8ucmVtb3ZlQ291bnRyeUNvZGVGcm9tVmFsdWVcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtcGhvbmU+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBJbnB1dCBSYWRpbyAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3JhZGlvJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIFt0dWlMYWJlbF09XCJsYWJlbFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJtaW4taGVpZ2h0OiBhdXRvOyBwYWRkaW5nOiAwcHggMC41cmVtXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1yYWRpb1xuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgICBbaXRlbXNdPVwiZmllbGQ/Lm9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICAgIFtvcmllbnRhdGlvbl09XCJmaWVsZD8ucHJvcGVydGllcz8ub3JpZW50YXRpb25cIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgICBbc2l6ZV09XCJmaWVsZD8ucHJvcGVydGllcz8uc2l6ZVwiXG4gICAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LXJhZGlvPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGFiZWxUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICBjbGFzcz1cInR1aS1zcGFjZV9ib3R0b20tMlwiXG4gICAgICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Yj5cbiAgICAgICAgICAgICAgICAgIHt7IGZpZWxkLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpZWxkLnZhbGlkYXRvcnM/LnJlcXVpcmVkXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2I+XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBEcm9wZG93biAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3NlbGVjdCdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtc2VsZWN0XG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZmllbGQub3B0aW9uc1wiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBbc2VhcmNoYWJsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uc2VhcmNoYWJsZVwiXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtc2VsZWN0PlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gSW5wdXQgU2xpZGVyIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc2xpZGVyJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1zbGlkZXJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbbWF4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5tYXhcIlxuICAgICAgICAgICAgICBbbWluXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5taW5cIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbcXVhbnR1bV09XCJmaWVsZD8ucHJvcGVydGllcz8ucXVhbnR1bVwiXG4gICAgICAgICAgICAgIFtzaXplXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zaXplXCJcbiAgICAgICAgICAgICAgW3N0ZXBzXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zdGVwc1wiXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LXNsaWRlcj5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIEFQSSBDYWxsIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYXBpJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1idXR0b24tYXBpLWNhbGxcbiAgICAgICAgICAgICAgW2FwaVN0YXR1c109XCJmaWVsZD8uYXBpPy5zdGF0dXM/LnZhbHVlXCJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cImZpZWxkPy5jbGFzc1wiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5hcGk/LnN0YXR1cz8ubGFiZWxzW2ZpZWxkPy5hcGk/LnN0YXR1cz8udmFsdWVdXCJcbiAgICAgICAgICAgICAgW3Nob3dMb2FkZXJdPVwiZmllbGQ/LmRpc2FibGVkID09PSAnbG9hZGluZydcIlxuICAgICAgICAgICAgICBzdHlsZXM9XCJ3aWR0aDogZml0LWNvbnRlbnRcIlxuICAgICAgICAgICAgICAob25DbGljayk9XCJoYW5kbGVPbkNsaWNrQXBpQ2FsbCgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1idXR0b24tYXBpLWNhbGw+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBNb2JpbGUgT1RQIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInb3RwJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1vdHBcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbc2l6ZV09XCJmaWVsZD8ucHJvcGVydGllcz8uc2l6ZVwiXG4gICAgICAgICAgICAgIFttb2RlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5tb2RlXCJcbiAgICAgICAgICAgICAgW290cExlbmd0aF09XCJmaWVsZD8ucHJvcGVydGllcz8ub3RwTGVuZ3RoXCJcbiAgICAgICAgICAgICAgW21hc2tdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm1hc2tcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1vdHA+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBBYWRoYWFyIE51bWJlciAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2FhZGhhYXItbnVtYmVyJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1hYWRoYWFyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW21hc2tdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm1hc2tcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1hYWRoYWFyPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gUHJldmlldyBJbWFnZSAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2ltYWdlJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1pbWFnZVxuICAgICAgICAgICAgICBbYWx0VGV4dF09XCJmaWVsZD8ucHJvcGVydGllcz8uYWx0VGV4dFwiXG4gICAgICAgICAgICAgIFtodG1sXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5odG1sXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpbWFnZVNyY109XCJmaWVsZD8uZGVmYXVsdD8udmFsdWU/LnZhbHVlID8/ICcnXCJcbiAgICAgICAgICAgICAgW2ltYWdlVHlwZV09XCJmaWVsZD8ucHJvcGVydGllcz8uaW1hZ2VUeXBlXCJcbiAgICAgICAgICAgICAgW2xvYWRpbmdUeXBlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5sb2FkaW5nVHlwZVwiXG4gICAgICAgICAgICAgIFtzdHlsZXNdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnN0eWxlc1wiXG4gICAgICAgICAgICAgIFtjbGFzc109XCJmaWVsZD8ucHJvcGVydGllcz8uY2xhc3NcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWltYWdlPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gRmlsZSBVcGxvYWQgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidmaWxlJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIFt0dWlMYWJlbF09XCJsYWJlbFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJtaW4taGVpZ2h0OiBhdXRvXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1maWxlc1xuICAgICAgICAgICAgICAgIFtpZF09XCJmaWVsZD8ua2V5XCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgICBbc3R5bGVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zdHlsZXNcIlxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJmaWVsZD8ucHJvcGVydGllcz8uY2xhc3NcIlxuICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJmaWVsZD8ucHJvcGVydGllcz8ubXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgIFthY2NlcHRdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmFjY2VwdFwiXG4gICAgICAgICAgICAgICAgW2ZpbGVzXT1cImZpbGVzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICAgIFtzZXRGaWxlVHlwZXNUb0Zvcm1dPVwiWydOT1JNQUwnXVwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5sYWJlbFwiXG4gICAgICAgICAgICAgICAgW2xpbmtdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmxpbmtcIlxuICAgICAgICAgICAgICAgIFttYXhGaWxlU2l6ZV09XCJmaWVsZD8ucHJvcGVydGllcz8ubWF4RmlsZVNpemVcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgICAoZ2V0UmVtb3ZlZEZpbGUpPVwiaGFuZGxlUmVtb3ZlZEZpbGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlRmlsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LWZpbGVzPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGFiZWxUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IDBweCAwLjI1cmVtOyBtYXJnaW4tYm90dG9tOiAwLjI1cmVtXCJcbiAgICAgICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxiPlxuICAgICAgICAgICAgICAgICAge3sgZmllbGQubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmllbGQudmFsaWRhdG9ycz8ucmVxdWlyZWRcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYj5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZm9ybT5cbiAgPGRpdiBjbGFzcz1cImt3aWtpZC1mb3JtLWJ1dHRvbnNcIj5cbiAgICA8a3dpa3VpLWJ1dHRvblxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgIWZvcm1Db25maWcucHJvcGVydGllcy5mb290ZXIudmlld0Zvcm1zQnV0dG9uLmhpZGRlbiAmJiBpc01vYmlsZVZpZXdcbiAgICAgIFwiXG4gICAgICBbZGlzYWJsZWRdPVwidmlld0Zvcm1zQnV0dG9uLmRpc2FibGVkXCJcbiAgICAgIGxhYmVsPVwie3sgZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLmZvb3Rlci52aWV3Rm9ybXNCdXR0b24ubGFiZWwgfX1cIlxuICAgICAgW3Nob3dMb2FkZXJdPVwidmlld0Zvcm1zQnV0dG9uLnNob3dMb2FkZXJcIlxuICAgICAgYXBwZWFyYW5jZT1cInNlY29uZGFyeVwiXG4gICAgICBzdHlsZXM9XCJ3aWR0aDogMTAwJVwiXG4gICAgICAob25DbGljayk9XCJoYW5kbGVPbkNsaWNrVmlld0Zvcm1zKCRldmVudClcIlxuICAgID48L2t3aWt1aS1idXR0b24+XG4gICAgPGt3aWt1aS1idXR0b25cbiAgICAgICpuZ0lmPVwiIWZvcm1Db25maWcucHJvcGVydGllcy5mb290ZXIuc2F2ZUJ1dHRvbi5oaWRkZW5cIlxuICAgICAgW2Rpc2FibGVkXT1cInNhdmVGb3JtQnV0dG9uLmRpc2FibGVkXCJcbiAgICAgIGxhYmVsPVwie3sgZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLmZvb3Rlci5zYXZlQnV0dG9uLmxhYmVsIH19XCJcbiAgICAgIFtzaG93TG9hZGVyXT1cInNhdmVGb3JtQnV0dG9uLnNob3dMb2FkZXJcIlxuICAgICAgc3R5bGVzPVwid2lkdGg6IDEwMCVcIlxuICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlT25DbGlja1NhdmVGb3JtKCRldmVudClcIlxuICAgID48L2t3aWt1aS1idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2XG4gIGNsYXNzPVwia3dpa2lkLWZvcm0tY29udGFpbmVyLWxvYWRpbmdcIlxuICAqbmdJZj1cImxvYWRpbmdcIlxuPlxuICA8ZGl2XG4gICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgW10uY29uc3RydWN0b3IoNyk7IGxldCBpID0gaW5kZXhcIlxuICAgIGNsYXNzPVwibGFyZ2Utd3JhcHBlciB0dWktc2tlbGV0b24gdHVpLXNrZWxldG9uX3JvdW5kZWRcIlxuICA+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxrd2lrdWktbG9hZGVyPjwva3dpa3VpLWxvYWRlcj5cblxuPHR1aS1wdXNoXG4gIGlkPVwiZmllbGQtZXJyb3Itbm90aWZpY2F0aW9uXCJcbiAgKnR1aVB1c2g9XCJzaG93RXJyb3JOb3RpZmljYXRpb25cIlxuICBoZWFkaW5nPVwiTWlzc2luZy9JbmNvcnJlY3QgRmllbGRzIVwiXG4gIHR5cGU9XCJFcnJvclwiXG4gIChjbG9zZSk9XCJ0b2dnbGVFcnJvck5vdGlmaWNhdGlvbihmYWxzZSlcIlxuPlxuICA8dHVpLXN2Z1xuICAgIHNyYz1cInR1aUljb25YQ2lyY2xlXCJcbiAgICBzdHlsZT1cImNvbG9yOiAjZmZmICFpbXBvcnRhbnRcIlxuICA+XG4gIDwvdHVpLXN2Zz5cbjwvdHVpLXB1c2g+XG5cbjxuZy10ZW1wbGF0ZVxuICAjcHJldmlld1xuICBsZXQtcHJldmlld1xuPlxuICA8dHVpLXByZXZpZXdcbiAgICBbcm90YXRhYmxlXT1cImZhbHNlXCJcbiAgICBbem9vbWFibGVdPVwiZmFsc2VcIlxuICAgIGNsYXNzPVwicHJldmlldy1jb250YWluZXJcIlxuICA+XG4gICAgPHR1aS1wcmV2aWV3LXRpdGxlICpuZ0lmPVwicHJldmlld1Byb3BlcnRpZXMudGl0bGUgIT09ICcnXCI+e3tcbiAgICAgIHByZXZpZXdQcm9wZXJ0aWVzLnRpdGxlXG4gICAgfX08L3R1aS1wcmV2aWV3LXRpdGxlPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFwcmV2aWV3UHJvcGVydGllcy51bmF2YWlsYWJsZVwiPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cInByZXZpZXdQcm9wZXJ0aWVzPy5odG1sPy5iZWZvcmUgIT09ICcnXCJcbiAgICAgICAgY2xhc3M9XCJwcmV2aWV3LWh0bWwgcHJldmlldy1odG1sLWJlZm9yZVwiXG4gICAgICAgIFtzdHlsZV09XCJwcmV2aWV3UHJvcGVydGllcz8uaHRtbD8uYmVmb3JlU3R5bGVzXCJcbiAgICAgICAgW2lubmVySHRtbF09XCJwcmV2aWV3UHJvcGVydGllcy5odG1sLmJlZm9yZSB8IGt3aWt1aVNhZmVIdG1sXCJcbiAgICAgID48L2Rpdj5cblxuICAgICAgPCEtLSBDb250ZW50IHdpdGhpbiB0aGUgaWZyYW1lIC0tPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInByZXZpZXctaWZyYW1lLWNvbnRlbnRcIlxuICAgICAgICBbc3R5bGVdPVwicHJldmlld1Byb3BlcnRpZXM/LmlmcmFtZT8uY29udGFpbmVyU3R5bGVzXCJcbiAgICAgICAgKm5nSWY9XCJwcmV2aWV3UHJvcGVydGllcy5pZnJhbWUuc3JjICE9PSAnJ1wiXG4gICAgICA+XG4gICAgICAgIDwhLS0gWW91ciBIVE1MIGNvbnRlbnQgaGVyZSAtLT5cbiAgICAgICAgPGlmcmFtZVxuICAgICAgICAgIFtzcmNdPVwicHJldmlld1Byb3BlcnRpZXMuaWZyYW1lLnNyYyB8IGt3aWt1aVNhZmVVcmxcIlxuICAgICAgICAgIGZyYW1lYm9yZGVyPVwiMFwiXG4gICAgICAgICAgYWxsb3c9XCJhY2NlbGVyb21ldGVyOyBhdXRvcGxheTsgZW5jcnlwdGVkLW1lZGlhOyBneXJvc2NvcGU7IHBpY3R1cmUtaW4tcGljdHVyZVwiXG4gICAgICAgICAgYWxsb3dmdWxsc2NyZWVuXG4gICAgICAgICAgW3RpdGxlXT1cInByZXZpZXdQcm9wZXJ0aWVzLmlmcmFtZS50aXRsZVwiXG4gICAgICAgICAgY2xhc3M9XCJwcmV2aWV3LWlmcmFtZVwiXG4gICAgICAgICAgc2Nyb2xsaW5nPVwiYXV0b1wiXG4gICAgICAgID48L2lmcmFtZT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwicHJldmlld1Byb3BlcnRpZXM/Lmh0bWw/LmFmdGVyICE9PSAnJ1wiXG4gICAgICAgIGNsYXNzPVwicHJldmlldy1odG1sIHByZXZpZXctaHRtbC1hZnRlclwiXG4gICAgICAgIFtzdHlsZV09XCJwcmV2aWV3UHJvcGVydGllcz8uaHRtbD8uYWZ0ZXJTdHlsZXNcIlxuICAgICAgICBbaW5uZXJIdG1sXT1cInByZXZpZXdQcm9wZXJ0aWVzLmh0bWwuYWZ0ZXIgfCBrd2lrdWlTYWZlSHRtbFwiXG4gICAgICA+PC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJldmlld1Byb3BlcnRpZXMudW5hdmFpbGFibGVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LXVuYXZhaWxhYmxlXCI+XG4gICAgICAgIDx0dWktc3ZnXG4gICAgICAgICAgc3JjPVwidHVpSWNvbkZpbGVMYXJnZVwiXG4gICAgICAgICAgY2xhc3M9XCJ0LWljb25cIlxuICAgICAgICA+PC90dWktc3ZnPlxuICAgICAgICA8ZGl2PlByZXZpZXcgdW5hdmFpbGFibGU8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPGJ1dHRvblxuICAgICAgdHVpSWNvbkJ1dHRvblxuICAgICAgdHVpUHJldmlld0FjdGlvblxuICAgICAgaWNvbj1cInR1aUljb25DbG9zZUxhcmdlXCJcbiAgICAgIHRpdGxlPVwiQ2xvc2VcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwicHJldmlldy5jb21wbGV0ZSgpXCJcbiAgICA+PC9idXR0b24+XG4gIDwvdHVpLXByZXZpZXc+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI2RpYWxvZ1xuICBsZXQtZGlhbG9nXG4+XG4gIDxkaXYgY2xhc3M9XCJwcmV2aWV3LWNvbnRhaW5lclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcHJldmlld1Byb3BlcnRpZXMudW5hdmFpbGFibGVcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJwcmV2aWV3UHJvcGVydGllcz8uaHRtbD8uYmVmb3JlICE9PSAnJ1wiXG4gICAgICAgIGNsYXNzPVwicHJldmlldy1odG1sIHByZXZpZXctaHRtbC1iZWZvcmVcIlxuICAgICAgICBbc3R5bGVdPVwicHJldmlld1Byb3BlcnRpZXM/Lmh0bWw/LmJlZm9yZVN0eWxlc1wiXG4gICAgICAgIFtpbm5lckh0bWxdPVwicHJldmlld1Byb3BlcnRpZXMuaHRtbC5iZWZvcmUgfCBrd2lrdWlTYWZlSHRtbFwiXG4gICAgICA+PC9kaXY+XG5cbiAgICAgIDwhLS0gQ29udGVudCB3aXRoaW4gdGhlIGlmcmFtZSAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJwcmV2aWV3LWlmcmFtZS1jb250ZW50XCJcbiAgICAgICAgW3N0eWxlXT1cInByZXZpZXdQcm9wZXJ0aWVzPy5pZnJhbWU/LmNvbnRhaW5lclN0eWxlc1wiXG4gICAgICAgICpuZ0lmPVwicHJldmlld1Byb3BlcnRpZXMuaWZyYW1lLnNyYyAhPT0gJydcIlxuICAgICAgPlxuICAgICAgICA8IS0tIFlvdXIgSFRNTCBjb250ZW50IGhlcmUgLS0+XG4gICAgICAgIDxpZnJhbWVcbiAgICAgICAgICBbc3JjXT1cInByZXZpZXdQcm9wZXJ0aWVzLmlmcmFtZS5zcmMgfCBrd2lrdWlTYWZlVXJsXCJcbiAgICAgICAgICBmcmFtZWJvcmRlcj1cIjBcIlxuICAgICAgICAgIGFsbG93PVwiYWNjZWxlcm9tZXRlcjsgYXV0b3BsYXk7IGVuY3J5cHRlZC1tZWRpYTsgZ3lyb3Njb3BlOyBwaWN0dXJlLWluLXBpY3R1cmVcIlxuICAgICAgICAgIGFsbG93ZnVsbHNjcmVlblxuICAgICAgICAgIFt0aXRsZV09XCJwcmV2aWV3UHJvcGVydGllcy5pZnJhbWUudGl0bGVcIlxuICAgICAgICAgIGNsYXNzPVwicHJldmlldy1pZnJhbWVcIlxuICAgICAgICAgIHNjcm9sbGluZz1cImF1dG9cIlxuICAgICAgICA+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cInByZXZpZXdQcm9wZXJ0aWVzPy5odG1sPy5hZnRlciAhPT0gJydcIlxuICAgICAgICBjbGFzcz1cInByZXZpZXctaHRtbCBwcmV2aWV3LWh0bWwtYWZ0ZXJcIlxuICAgICAgICBbc3R5bGVdPVwicHJldmlld1Byb3BlcnRpZXM/Lmh0bWw/LmFmdGVyU3R5bGVzXCJcbiAgICAgICAgW2lubmVySHRtbF09XCJwcmV2aWV3UHJvcGVydGllcy5odG1sLmFmdGVyIHwga3dpa3VpU2FmZUh0bWxcIlxuICAgICAgPjwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInByZXZpZXdQcm9wZXJ0aWVzLnVuYXZhaWxhYmxlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy11bmF2YWlsYWJsZVwiPlxuICAgICAgICA8dHVpLXN2Z1xuICAgICAgICAgIHNyYz1cInR1aUljb25GaWxlTGFyZ2VcIlxuICAgICAgICAgIGNsYXNzPVwidC1pY29uXCJcbiAgICAgICAgPjwvdHVpLXN2Zz5cbiAgICAgICAgPGRpdj5QcmV2aWV3IHVuYXZhaWxhYmxlPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
1859
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2t3aWtpZC1mb3Jtcy9zcmMvbGliL3JlbmRlcmVyL2Zvcm0tdmlldy9mb3JtLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvZm9ybS12aWV3L2Zvcm0tdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBR04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRSxPQUFPLEVBQ0wsZUFBZSxFQUVmLGdCQUFnQixFQUNoQixlQUFlLEVBQ2hCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxVQUFVLEVBQ1YsSUFBSSxFQUNKLE1BQU0sRUFHTixVQUFVLEVBQ1Ysb0JBQW9CLEVBQ3BCLGlCQUFpQixFQUNqQixzQkFBc0IsRUFDdEIsYUFBYSxFQUNiLFlBQVksRUFDWixlQUFlLEVBQ2YsTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGFBQWEsRUFDYixvQkFBb0IsRUFDckIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxF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UmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgVHVpUHJldmlld0RpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiQHRhaWdhLXVpL2FkZG9uLXByZXZpZXdcIjtcbmltcG9ydCB7XG4gIFR1aUFsZXJ0U2VydmljZSxcbiAgVHVpRGlhbG9nQ29udGV4dCxcbiAgVHVpRGlhbG9nU2VydmljZSxcbiAgVHVpTm90aWZpY2F0aW9uXG59IGZyb20gXCJAdGFpZ2EtdWkvY29yZVwiO1xuaW1wb3J0IHsgVHVpUHVzaFNlcnZpY2UgfSBmcm9tIFwiQHRhaWdhLXVpL2tpdFwiO1xuaW1wb3J0IHtcbiAgQWN0aW9uLFxuICBDb25kaXRpb24sXG4gIEVTb3VyY2VLZXksXG4gIFJ1bGUsXG4gIFNvdXJjZSxcbiAgVEFjdGlvbixcbiAgVFZhbGlkYXRpb24sXG4gIFZhbGlkYXRpb24sXG4gIGNoZWNrT2JqZWN0S2V5RXhpc3RzLFxuICBnZXRPYmplY3REZWVwQ29weSxcbiAgZ2V0T2JqZWN0VmFsdWVGcm9tUGF0aCxcbiAgaXNFbXB0eVN0cmluZyxcbiAgaXNFbXB0eVZhbHVlLFxuICBpc05vdEVtcHR5VmFsdWUsXG4gIGlzTnVsbCxcbiAgaXNVbmRlZmluZWQsXG4gIGxvZ01ldGhvZCxcbiAgbWVyZ2VPYmplY3RzLFxuICByZXBsYWNlU3RyaW5nLFxuICBzZXRWYWx1ZVRvT2JqZWN0UGF0aFxufSBmcm9tIFwia3dpa2lkLXRvb2xraXRcIjtcbmltcG9ydCB7IEt3aWtVSUxvYWRlclNlcnZpY2UgfSBmcm9tIFwia3dpa3VpXCI7XG5pbXBvcnQgeyBwYWlyd2lzZSB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSBcInV1aWRcIjtcbmltcG9ydCB7IENvbnZlcnRlciB9IGZyb20gXCIuLi9jb25maWctY29udmVydGVyL2NvbmZpZy1jb252ZXJ0ZXJcIjtcbmltcG9ydCB7IEVGb3Jtc0xpc3RTdGF0dXMgfSBmcm9tIFwiLi4vZm9ybXMtbGlzdC9mb3Jtcy1saXN0LmRlZmluaXRpb25zXCI7XG5pbXBvcnQgeyBFQWN0aW9uS2V5IH0gZnJvbSBcIi4vZGVmaW5pdGlvbnMvZm9ybS12aWV3LmFjdGlvbnMuZGVmaW5pdGlvblwiO1xuaW1wb3J0IHtcbiAgRUFwaVJlcXVlc3RVcmxUeXBlLFxuICBFQXBpU3RhdHVzVHlwZSxcbiAgVEFwaSxcbiAgVEFwaUVuZHBvaW50XG59IGZyb20gXCIuL2RlZmluaXRpb25zL2Zvcm0tdmlldy5hcGlzLmRlZmluaXRpb25cIjtcbmltcG9ydCB7XG4gIEVNZXNzYWdlVHlwZSxcbiAgVEZvcm1WaWV3R29CYWNrTW9kZSxcbiAgVE1lc3NhZ2Vcbn0gZnJvbSBcIi4vZGVmaW5pdGlvbnMvZm9ybS12aWV3LmNvbW1vbnMuZGVmaW5pdGlvblwiO1xuaW1wb3J0IHtcbiAgRUZpZWxkVHlwZSxcbiAgVEZpZWxkQXBpQ2FsbCxcbiAgVEZpZWxkVGl0bGVcbn0gZnJvbSBcIi4vZGVmaW5pdGlvbnMvZm9ybS12aWV3LmZpZWxkcy5kZWZpbml0aW9uXCI7XG5pbXBvcnQgeyBLd2lrSURGb3JtVmlld1NlcnZpY2UgfSBmcm9tIFwiLi9mb3JtLXZpZXcuc2VydmljZVwiO1xuaW1wb3J0IHsgQXBpcyB9IGZyb20gXCIuL2hlbHBlcnMvZm9ybS12aWV3LmFwaXMuaGVscGVyXCI7XG5pbXBvcnQge1xuICBhcHBlbmRGb3JtRmllbGRNZXNzYWdlLFxuICBjb252ZXJ0Rm9ybUZpZWxkRW1wdHlWYWx1ZVRvS3dpa1VJRm9ybWF0LFxuICBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb0t3aWtVSUZvcm1hdCxcbiAgY29udmVydEZvcm1GaWVsZFZhbHVlVG9TdGFuZGFyZEZvcm1hdCxcbiAgZmlsdGVyRHVwbGljYXRlc0ZpbGVzLFxuICBnZXRGb3JtRmllbGRCeUtleSxcbiAgZ2V0Rm9ybUZpZWxkSW5kZXhCeUtleSxcbiAgaGlnaGxpZ2h0Rm9ybUZpZWxkRXJyb3IsXG4gIHJlbW92ZUZvcm1GaWVsZE1lc3NhZ2UsXG4gIHNob3dGb3JtRmllbGRFcnJvclxufSBmcm9tIFwiLi9oZWxwZXJzL2Zvcm0tdmlldy5maWVsZHMuaGVscGVyXCI7XG5pbXBvcnQgeyBGb3JtVmFsaWRhdGlvbiB9IGZyb20gXCIuL2hlbHBlcnMvZm9ybS12aWV3LmZvcm0tdmFsaWRhdGlvbnMuaGVscGVyXCI7XG5pbXBvcnQgeyBUYXNrcyB9IGZyb20gXCIuL2hlbHBlcnMvZm9ybS12aWV3LnRhc2tzLmhlbHBlclwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwia3dpa2lkLWZvcm0tdmlld1wiLFxuICB0ZW1wbGF0ZVVybDogXCIuL2Zvcm0tdmlldy5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vZm9ybS12aWV3LmNvbXBvbmVudC5zY3NzXCIsIFwiLi4vc2hhcmVkLnNjc3NcIl0sXG4gIHByb3ZpZGVyczogW0t3aWtJREZvcm1WaWV3U2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgS3dpa0lERm9ybVZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBAVmlld0NoaWxkKFwicHJldmlld1wiKVxuICByZWFkb25seSBwcmV2aWV3OiBUZW1wbGF0ZVJlZjxUdWlEaWFsb2dDb250ZXh0PHZvaWQ+PjtcblxuICBAVmlld0NoaWxkKFwiZGlhbG9nXCIpXG4gIHJlYWRvbmx5IGRpYWxvZzogVGVtcGxhdGVSZWY8VHVpRGlhbG9nQ29udGV4dDx2b2lkPj47XG5cbiAgQElucHV0KClcbiAgZm9ybUNvbmZpZzogYW55O1xuXG4gIEBJbnB1dCgpXG4gIGZvcm1EYXRhOiBhbnk7XG5cbiAgQElucHV0KClcbiAgaXNNb2JpbGVWaWV3OiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgYWxsRm9ybXNEYXRhOiBhbnk7XG5cbiAgQElucHV0KClcbiAgdXNlckNvbmZpZzogYW55O1xuXG4gIEBJbnB1dCgpXG4gIGFwaUNhbGxSZXNwb25zZTogYW55O1xuXG4gIEBJbnB1dCgpXG4gIGJ1dHRvbkNsaWNrUmVzcG9uc2U6IGFueTtcblxuICBASW5wdXQoKVxuICBwb3B1cEZvcm1DYWxsYmFjazogYW55ID0gdW5kZWZpbmVkO1xuXG4gIEBPdXRwdXQoKVxuICBvbkNsaWNrR29CYWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkNsaWNrVmlld0Zvcm1zOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKVxuICBnZXRVbnNhdmVkRGF0YVN0YXRlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkNsaWNrU2F2ZUZvcm06IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uQ2xpY2tBcGlDYWxsOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkFjdGlvblNob3dQb3B1cEZvcm06IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uQ2xpY2tGb3JtRmllbGRCdXR0b246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgZmllbGRHcm91cHM6IGFueSA9IHt9O1xuICBmb3JtRmllbGRzOiBhbnlbXSA9IFtdO1xuICBwcmV2aW91c0Zvcm1EYXRhOiBhbnkgPSB7fTtcblxuICBwcmV2aWV3UHJvcGVydGllczogYW55ID0ge1xuICAgIGh0bWw6IHtcbiAgICAgIGJlZm9yZTogXCJcIixcbiAgICAgIGJlZm9yZVN0eWxlczogXCJcIixcbiAgICAgIGFmdGVyOiBcIlwiLFxuICAgICAgYWZ0ZXJTdHlsZXM6IFwiXCJcbiAgICB9LFxuICAgIGlmcmFtZToge1xuICAgICAgc3JjOiBcIlwiLFxuICAgICAgdGl0bGU6IFwiXCJcbiAgICB9LFxuICAgIHR5cGU6IFwiZGlhbG9nXCIsXG4gICAgc2l6ZTogXCJhdXRvXCIsXG4gICAgcG9wdXBGb3JtS2V5OiBcIlwiLFxuICAgIHRpdGxlOiBcIlwiLFxuICAgIHVuYXZhaWxhYmxlOiBmYWxzZVxuICB9O1xuXG4gIGxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xuICBhcGlMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIGJhY2tCdXR0b24gPSB7XG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIHNob3dMb2FkZXI6IGZhbHNlXG4gIH07XG4gIHZpZXdGb3Jtc0J1dHRvbiA9IHtcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgc2hvd0xvYWRlcjogZmFsc2VcbiAgfTtcbiAgc2F2ZUZvcm1CdXR0b24gPSB7XG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIHNob3dMb2FkZXI6IGZhbHNlXG4gIH07XG5cbiAgZmlsZXM6IGFueSA9IHt9O1xuXG4gIHN0b3BUYXNrRXhlY3V0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHdhaXRpbmdGb3JDaGFuZ2VzOiBib29sZWFuID0gZmFsc2U7XG4gIHBvcHVwRm9ybUNvbmZpZzogYW55ID0gdW5kZWZpbmVkO1xuICBwb3B1cEZvcm1EYXRhOiBhbnkgPSB7fTtcbiAgdGFza0RhdGE6IGFueSA9IHt9O1xuXG4gIHByZXZpZXdEaWFsb2dSZWY6IGFueTtcblxuICBmb3JtR3JvdXA6IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZm9ybVZpZXdTZXJ2aWNlOiBLd2lrSURGb3JtVmlld1NlcnZpY2UsXG4gICAgQEluamVjdChUdWlQdXNoU2VydmljZSlcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcHVzaDogVHVpUHVzaFNlcnZpY2UsXG4gICAgQEluamVjdChUdWlBbGVydFNlcnZpY2UpXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGFsZXJ0U2VydmljZTogVHVpQWxlcnRTZXJ2aWNlLFxuICAgIEBJbmplY3QoVHVpUHJldmlld0RpYWxvZ1NlcnZpY2UpXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcmV2aWV3RGlhbG9nU2VydmljZTogVHVpUHJldmlld0RpYWxvZ1NlcnZpY2UsXG4gICAgQEluamVjdChUdWlEaWFsb2dTZXJ2aWNlKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nU2VydmljZTogVHVpRGlhbG9nU2VydmljZSxcbiAgICBwdWJsaWMgbG9hZGVyU2VydmljZTogS3dpa1VJTG9hZGVyU2VydmljZVxuICApIHt9XG5cbiAgQGxvZ01ldGhvZFxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5pbml0Rm9ybUNvbmZpZyh0aGlzLmZvcm1Db25maWcpO1xuXG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pKCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHt9XG5cbiAgQGxvZ01ldGhvZFxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgdmVyaWZ5Q2hhbmdlID0gKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gY2hlY2tPYmplY3RLZXlFeGlzdHMoY2hhbmdlcywga2V5KSAmJiAhY2hhbmdlc1trZXldLmZpcnN0Q2hhbmdlO1xuICAgIH07XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImZvcm1EYXRhXCIpKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGNoYW5nZXMuZm9ybURhdGEuY3VycmVudFZhbHVlLCBcImRhdGFcIikgJiZcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoY2hhbmdlcy5mb3JtRGF0YS5jdXJyZW50VmFsdWUsIFwiZXh0ZW5kZWREYXRhXCIpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHtcbiAgICAgICAgICAuLi50aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIC4uLmNoYW5nZXMuZm9ybURhdGEuY3VycmVudFZhbHVlW1wiZGF0YVwiXVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHtcbiAgICAgICAgICAuLi50aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIC4uLmNoYW5nZXMuZm9ybURhdGEuY3VycmVudFZhbHVlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJwb3B1cEZvcm1DYWxsYmFja1wiKSkge1xuICAgICAgaWYgKGlzTm90RW1wdHlWYWx1ZShjaGFuZ2VzLnBvcHVwRm9ybUNhbGxiYWNrLmN1cnJlbnRWYWx1ZSkpIHtcbiAgICAgICAgY29uc3QgcG9wdXBGb3JtRGF0YSA9XG4gICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoXG4gICAgICAgICAgICBjaGFuZ2VzLnBvcHVwRm9ybUNhbGxiYWNrLmN1cnJlbnRWYWx1ZS5wb3B1cEZvcm1EYXRhLFxuICAgICAgICAgICAgXCJkYXRhXCJcbiAgICAgICAgICApICYmXG4gICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoXG4gICAgICAgICAgICBjaGFuZ2VzLnBvcHVwRm9ybUNhbGxiYWNrLmN1cnJlbnRWYWx1ZS5wb3B1cEZvcm1EYXRhLFxuICAgICAgICAgICAgXCJleHRlbmRlZERhdGFcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgID8gY2hhbmdlcy5wb3B1cEZvcm1DYWxsYmFjay5jdXJyZW50VmFsdWUucG9wdXBGb3JtRGF0YVtcImRhdGFcIl1cbiAgICAgICAgICAgIDogY2hhbmdlcy5wb3B1cEZvcm1DYWxsYmFjay5jdXJyZW50VmFsdWUucG9wdXBGb3JtRGF0YTtcblxuICAgICAgICBjb25zdCBwb3B1cEZvcm1Db25maWcgPVxuICAgICAgICAgIGNoYW5nZXMucG9wdXBGb3JtQ2FsbGJhY2suY3VycmVudFZhbHVlLnBvcHVwRm9ybUNvbmZpZztcblxuICAgICAgICB0aGlzLnBvcHVwRm9ybURhdGEgPSBtZXJnZU9iamVjdHModGhpcy5wb3B1cEZvcm1EYXRhLCB7XG4gICAgICAgICAgW3BvcHVwRm9ybUNvbmZpZy5rZXldOiBwb3B1cEZvcm1EYXRhXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZm9ybURhdGEgPSBtZXJnZU9iamVjdHModGhpcy5mb3JtRGF0YSwgdGhpcy5wb3B1cEZvcm1EYXRhKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoXG4gICAgICAgICAgICBjaGFuZ2VzLnBvcHVwRm9ybUNhbGxiYWNrLmN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgIFwic3RvcFRhc2tFeGVjdXRpb25cIlxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5zdG9wVGFza0V4ZWN1dGlvbiA9XG4gICAgICAgICAgICBjaGFuZ2VzLnBvcHVwRm9ybUNhbGxiYWNrLmN1cnJlbnRWYWx1ZS5zdG9wVGFza0V4ZWN1dGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN0b3BUYXNrRXhlY3V0aW9uID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy53YWl0aW5nRm9yQ2hhbmdlcyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiaXNNb2JpbGVWaWV3XCIpKSB7XG4gICAgICB0aGlzLmlzTW9iaWxlVmlldyA9IGNoYW5nZXMuaXNNb2JpbGVWaWV3LmN1cnJlbnRWYWx1ZTtcbiAgICB9XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImFwaUNhbGxSZXNwb25zZVwiKSkge1xuICAgICAgdGhpcy5hcGlDYWxsUmVzcG9uc2UgPSBjaGFuZ2VzLmFwaUNhbGxSZXNwb25zZS5jdXJyZW50VmFsdWU7XG5cbiAgICAgIGxldCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5KTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSB0aGlzLmFwaUNhbGxSZXNwb25zZT8ucmVzcG9uc2U7XG5cbiAgICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuRklMRTpcbiAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRGaWxlID0gZ2V0T2JqZWN0RGVlcENvcHkoe1xuICAgICAgICAgICAgICBpZDogdXVpZHY0KCksXG4gICAgICAgICAgICAgIC4uLnJlc3BvbnNlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVGaWxlcyh1cGRhdGVkRmlsZSwgXCJOT1JNQUxcIiwgdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlZEZpbGUgPSBnZXRPYmplY3REZWVwQ29weSh7XG4gICAgICAgICAgICAgIGlkOiB1dWlkdjQoKSxcbiAgICAgICAgICAgICAgLi4udGhpcy5hcGlDYWxsUmVzcG9uc2U/LnBheWxvYWQ/Lm1ldGFkYXRhXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVGaWxlcyh1cGRhdGVkRmlsZSwgXCJFUlJPUlwiLCB0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImJ1dHRvbkNsaWNrUmVzcG9uc2VcIikpIHtcbiAgICAgIHRoaXMuYnV0dG9uQ2xpY2tSZXNwb25zZSA9IGNoYW5nZXMuYnV0dG9uQ2xpY2tSZXNwb25zZS5jdXJyZW50VmFsdWU7XG5cbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UsIFwia2V5XCIpKSB7XG4gICAgICAgIGxldCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KFxuICAgICAgICAgIHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICB0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2U/LmtleVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UsIFwiZGVmYXVsdFwiKSkge1xuICAgICAgICAgIGZpZWxkLmRlZmF1bHQgPSBnZXRPYmplY3REZWVwQ29weSh0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UuZGVmYXVsdCk7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuYnV0dG9uQ2xpY2tSZXNwb25zZVtcImRlZmF1bHRcIl07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMuYnV0dG9uQ2xpY2tSZXNwb25zZSwgXCJtZXNzYWdlc1wiKSkge1xuICAgICAgICAgIGZpZWxkLm1lc3NhZ2VzID0gZ2V0T2JqZWN0RGVlcENvcHkodGhpcy5idXR0b25DbGlja1Jlc3BvbnNlLm1lc3NhZ2VzKTtcbiAgICAgICAgICBkZWxldGUgdGhpcy5idXR0b25DbGlja1Jlc3BvbnNlW1wibWVzc2FnZXNcIl07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMuYnV0dG9uQ2xpY2tSZXNwb25zZSwgXCJ2YWxpZGF0aW9uXCIpKSB7XG4gICAgICAgICAgZmllbGQudmFsaWRhdGlvbiA9IGdldE9iamVjdERlZXBDb3B5KFxuICAgICAgICAgICAgdGhpcy5idXR0b25DbGlja1Jlc3BvbnNlLnZhbGlkYXRpb25cbiAgICAgICAgICApO1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2VbXCJ2YWxpZGF0aW9uXCJdO1xuICAgICAgICB9XG5cbiAgICAgICAgZmllbGQgPSBnZXRPYmplY3REZWVwQ29weShcbiAgICAgICAgICBtZXJnZU9iamVjdHMoZmllbGQsIHRoaXMuYnV0dG9uQ2xpY2tSZXNwb25zZSlcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwidmFsaWRhdGlvblwiKSkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLnZhbGlkYXRpb24sIFwidHJpZ2dlcnNcIikgJiZcbiAgICAgICAgICAgIGZpZWxkLnZhbGlkYXRpb24udHJpZ2dlcnMuaW5jbHVkZXMoXCJPTl9SRVNQT05TRVwiKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGlvbnMgPSBuZXcgVmFsaWRhdGlvbihcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgYXdhaXQgdmFsaWRhdGlvbnMudmFsaWRhdGUoZmllbGQudmFsaWRhdGlvbik7XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiYWxsRm9ybXNEYXRhXCIpKSB7XG4gICAgICB0aGlzLmFsbEZvcm1zRGF0YSA9IGNoYW5nZXMuYWxsRm9ybXNEYXRhLmN1cnJlbnRWYWx1ZTtcbiAgICB9XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImZvcm1Db25maWdcIikpIHtcbiAgICAgIHRoaXMuZm9ybUNvbmZpZyA9IGNoYW5nZXMuZm9ybUNvbmZpZy5jdXJyZW50VmFsdWU7XG5cbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdEZvcm1Db25maWcodGhpcy5mb3JtQ29uZmlnKTtcbiAgICAgIH0pKCk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBpbml0Rm9ybUNvbmZpZyhmb3JtQ29uZmlnOiBhbnkpIHtcbiAgICBmb3JtQ29uZmlnID0gbmV3IENvbnZlcnRlcigpLmNvbnZlcnRGb3JtQ29uZmlnKGZvcm1Db25maWcpO1xuXG4gICAgZm9ybUNvbmZpZyA9IG5ldyBDb252ZXJ0ZXIoKS51cGRhdGVGb3JtQ29uZmlnUHJvcGVydGllcyhmb3JtQ29uZmlnKTtcblxuICAgIHRoaXMuc2V0Rm9ybUZpZWxkc0Zyb21Gb3JtQ29uZmlnKGZvcm1Db25maWcpO1xuXG4gICAgdGhpcy5zZXRGb3JtRmllbGRHcm91cHNGcm9tRm9ybUNvbmZpZyhmb3JtQ29uZmlnKTtcblxuICAgIHRoaXMuc2V0Rm9ybURhdGFGcm9tQWxsRm9ybXNEYXRhKCk7XG5cbiAgICAvKipcbiAgICAgKiBQUkUgRm9ybSBUYXNrc1xuICAgICAqIDEuIEFQSSBDYWxscy5cbiAgICAgKiAyLiBBbHRlciBEYXRhIFN0cnVjdHVyZS5cbiAgICAgKiAzLiBBbHRlciBGb3JtIENvbmZpZy5cbiAgICAgKi9cbiAgICBpZiAoXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLmZvcm1Db25maWcsIFwidGFza3NcIikgJiZcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMuZm9ybUNvbmZpZy50YXNrcywgXCJwcmVcIilcbiAgICApIHtcbiAgICAgIGZvciAobGV0IHByZVRhc2sgb2YgdGhpcy5mb3JtQ29uZmlnLnRhc2tzLnByZSkge1xuICAgICAgICBjb25zdCB0YXNrID0gbmV3IFRhc2tzKFxuICAgICAgICAgIHByZVRhc2ssXG4gICAgICAgICAge1xuICAgICAgICAgICAgRk9STV9DT05GSUc6IHRoaXMuZm9ybUNvbmZpZyxcbiAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnN0b3BUYXNrRXhlY3V0aW9uID0gZmFsc2U7XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhwcmVUYXNrLCBcIndhaXRcIikpIHtcbiAgICAgICAgICB0aGlzLndhaXRpbmdGb3JDaGFuZ2VzID0gcHJlVGFzay53YWl0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMud2FpdGluZ0ZvckNoYW5nZXMgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRhc2suZXhlY3V0ZSgpO1xuXG4gICAgICAgIC8vIFdhaXQgZm9yIG5nT25DaGFuZ2VzIHRvIGJlIGNhbGxlZCBiZWZvcmUgY29udGludWluZyB0byB0aGUgbmV4dCB0YXNrXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgY29uc3QgaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy53YWl0aW5nRm9yQ2hhbmdlcykge1xuICAgICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgMTApO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5zdG9wVGFza0V4ZWN1dGlvbikge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZm9ybURhdGEgPSBtZXJnZU9iamVjdHModGhpcy5mb3JtRGF0YSwgdGhpcy5wb3B1cEZvcm1EYXRhKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdG9wVGFza0V4ZWN1dGlvbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuZm9ybUdyb3VwID0gYXdhaXQgdGhpcy5mb3JtVmlld1NlcnZpY2UuY3JlYXRlRm9ybUdyb3VwKFxuICAgICAgdGhpcy5mb3JtRmllbGRzLFxuICAgICAgdGhpcy5mb3JtRGF0YSxcbiAgICAgIHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgIHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICApO1xuXG4gICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5mb3JtRmllbGRzKSB7XG4gICAgICBpZiAoZmllbGQuaXNGb3JtRWxlbWVudCkge1xuICAgICAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEgPSB7XG4gICAgICAgICAgLi4udGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgIFtmaWVsZC5rZXldOiBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb1N0YW5kYXJkRm9ybWF0KFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlXG4gICAgICAgICAgKVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZm9ybURhdGEgPSB7XG4gICAgICAgICAgLi4udGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICBbZmllbGQua2V5XTogY29udmVydEZvcm1GaWVsZFZhbHVlVG9TdGFuZGFyZEZvcm1hdChcbiAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZVxuICAgICAgICAgIClcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gRUZpZWxkVHlwZS5GSUxFKSB7XG4gICAgICAgICAgdGhpcy5maWxlc1tmaWVsZC5rZXldID0gdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVDaGFuZ2VzXG4gICAgICAgICAgLnBpcGUocGFpcndpc2UoKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKChbcHJldmlvdXNWYWx1ZSwgY3VycmVudFZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhID0ge1xuICAgICAgICAgICAgICAuLi50aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICAgIFtmaWVsZC5rZXldOiBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb1N0YW5kYXJkRm9ybWF0KFxuICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgIHByZXZpb3VzVmFsdWVcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHtcbiAgICAgICAgICAgICAgLi4udGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgICAgW2ZpZWxkLmtleV06IGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvU3RhbmRhcmRGb3JtYXQoXG4gICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSBFRmllbGRUeXBlLkZJTEUpIHtcbiAgICAgICAgICAgICAgdGhpcy5maWxlc1tmaWVsZC5rZXldID0gY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZm9ybUZpZWxkcykge1xuICAgICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInZhbGlkYXRpb25cIikpIHtcbiAgICAgICAgICBpZiAoZmllbGQudmFsaWRhdGlvbi50cmlnZ2Vycy5pbmNsdWRlcyhcIk9OX0lOSVRcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0gbmV3IFZhbGlkYXRpb24oXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBGSUVMRF9DT05GSUc6IGZpZWxkLFxuICAgICAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGF3YWl0IHZhbGlkYXRpb25zLnZhbGlkYXRlKGZpZWxkLnZhbGlkYXRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJjb25uZWN0ZWRFbGVtZW50c1wiKSkge1xuICAgICAgICAgIHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudHMoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiT05fSU5JVFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBzZXRGb3JtRmllbGRzRnJvbUZvcm1Db25maWcoZm9ybUNvbmZpZzogYW55KSB7XG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm1Db25maWcsIFwiZmllbGRzXCIpKSB7XG4gICAgICB0aGlzLmZvcm1GaWVsZHMgPSBmb3JtQ29uZmlnLmZpZWxkcztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybUNvbmZpZywgXCJtdWx0aUZvcm1cIikgJiZcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm1Db25maWcubXVsdGlGb3JtLCBcImZpZWxkc1wiKVxuICAgICkge1xuICAgICAgdGhpcy5mb3JtRmllbGRzID0gZm9ybUNvbmZpZy5tdWx0aUZvcm0uZmllbGRzO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgc2V0Rm9ybUZpZWxkR3JvdXBzRnJvbUZvcm1Db25maWcoZm9ybUNvbmZpZzogYW55KSB7XG4gICAgdGhpcy5maWVsZEdyb3VwcyA9IGZvcm1Db25maWcuZmllbGRHcm91cHM7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHNldEZvcm1EYXRhRnJvbUFsbEZvcm1zRGF0YSgpIHtcbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5hbGxGb3Jtc0RhdGEsIHRoaXMuZm9ybUNvbmZpZy5rZXkpKSB7XG4gICAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuYWxsRm9ybXNEYXRhW3RoaXMuZm9ybUNvbmZpZy5rZXldO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm1EYXRhLCBcImRhdGFcIikgJiZcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybURhdGEsIFwiZXh0ZW5kZWREYXRhXCIpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHtcbiAgICAgICAgICAuLi50aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIC4uLmZvcm1EYXRhW1wiZGF0YVwiXVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHtcbiAgICAgICAgICAuLi50aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIC4uLmZvcm1EYXRhXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybURhdGEgPSB7fTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEdyb3VwQWN0aW9ucyhcbiAgICBjaGlsZEZpZWxkR3JvdXBDb25maWc6IGFueSxcbiAgICBwYXJlbnRGaWVsZDogYW55XG4gICkge1xuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhjaGlsZEZpZWxkR3JvdXBDb25maWcsIFwicnVsZXNcIikpIHtcbiAgICAgIGNvbnN0IHJ1bGVzTWFwcGluZyA9IG5ldyBSdWxlKGNoaWxkRmllbGRHcm91cENvbmZpZy5ydWxlcywge1xuICAgICAgICBGSUVMRF9DT05GSUc6IHBhcmVudEZpZWxkLFxuICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YVxuICAgICAgfSkubWFwcGluZygpO1xuXG4gICAgICBmb3IgKGxldCBhY3Rpb24gb2YgY2hpbGRGaWVsZEdyb3VwQ29uZmlnLmFjdGlvbnMpIHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9uU3VjY2VzcyA9IG5ldyBDb25kaXRpb24oXG4gICAgICAgICAgYWN0aW9uLmNvbmRpdGlvbixcbiAgICAgICAgICBydWxlc01hcHBpbmdcbiAgICAgICAgKS5ldmFsdWF0ZSgpO1xuXG4gICAgICAgIGlmIChjb25kaXRpb25TdWNjZXNzKSB7XG4gICAgICAgICAgY29uc3QgYWN0aW9ucyA9IG5ldyBBY3Rpb24oXG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBydWxlc01hcHBpbmcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogcGFyZW50RmllbGQsXG4gICAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy50YWtlQWN0aW9uT25GaWVsZEdyb3VwLmJpbmQodGhpcylcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgYXdhaXQgYWN0aW9ucy5leGVjdXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEdyb3VwKFxuICAgIGN1cnJlbnRGaWVsZDogYW55LFxuICAgIGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWc6IGFueSxcbiAgICBldmVudFR5cGU6IHN0cmluZ1xuICApIHtcbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoY29ubmVjdGVkRmllbGRHcm91cENvbmZpZywgXCJ0cmlnZ2Vyc1wiKSkge1xuICAgICAgaWYgKGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWcudHJpZ2dlcnMuaW5jbHVkZXMoZXZlbnRUeXBlKSkge1xuICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEdyb3VwQWN0aW9ucyhcbiAgICAgICAgICBjb25uZWN0ZWRGaWVsZEdyb3VwQ29uZmlnLFxuICAgICAgICAgIGN1cnJlbnRGaWVsZFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkQWN0aW9ucyhcbiAgICBjb25uZWN0ZWRGaWVsZENvbmZpZzogYW55LFxuICAgIGNvbm5lY3RlZEZpZWxkOiBhbnlcbiAgKSB7XG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGNvbm5lY3RlZEZpZWxkQ29uZmlnLCBcInJ1bGVzXCIpKSB7XG4gICAgICBjb25zdCBydWxlc01hcHBpbmcgPSBuZXcgUnVsZShjb25uZWN0ZWRGaWVsZENvbmZpZy5ydWxlcywge1xuICAgICAgICBGSUVMRF9DT05GSUc6IGNvbm5lY3RlZEZpZWxkLFxuICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YVxuICAgICAgfSkubWFwcGluZygpO1xuXG4gICAgICBmb3IgKGxldCBhY3Rpb24gb2YgY29ubmVjdGVkRmllbGRDb25maWcuYWN0aW9ucykge1xuICAgICAgICBjb25zdCBjb25kaXRpb25TdWNjZXNzID0gbmV3IENvbmRpdGlvbihcbiAgICAgICAgICBhY3Rpb24uY29uZGl0aW9uLFxuICAgICAgICAgIHJ1bGVzTWFwcGluZ1xuICAgICAgICApLmV2YWx1YXRlKCk7XG5cbiAgICAgICAgaWYgKGNvbmRpdGlvblN1Y2Nlc3MpIHtcbiAgICAgICAgICBjb25zdCBhY3Rpb25zID0gbmV3IEFjdGlvbihcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIHJ1bGVzTWFwcGluZyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgICAgRklFTERfQ09ORklHOiBjb25uZWN0ZWRGaWVsZCxcbiAgICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBhd2FpdCBhY3Rpb25zLmV4ZWN1dGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb25uZWN0ZWRGaWVsZDtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkcyhcbiAgICBjdXJyZW50RmllbGQ6IGFueSxcbiAgICBjb25uZWN0ZWRGaWVsZENvbmZpZzogYW55LFxuICAgIGV2ZW50VHlwZTogc3RyaW5nLFxuICAgIG5lc3RlZDogc3RyaW5nXG4gICkge1xuICAgIGxldCBjb25uZWN0ZWRGaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KFxuICAgICAgdGhpcy5mb3JtRmllbGRzLFxuICAgICAgY29ubmVjdGVkRmllbGRDb25maWdbXCJrZXlcIl1cbiAgICApO1xuXG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGNvbm5lY3RlZEZpZWxkQ29uZmlnLCBcInRyaWdnZXJzXCIpKSB7XG4gICAgICBpZiAoY29ubmVjdGVkRmllbGRDb25maWcudHJpZ2dlcnMuaW5jbHVkZXMoZXZlbnRUeXBlKSkge1xuICAgICAgICBjb25uZWN0ZWRGaWVsZCA9IGF3YWl0IHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkQWN0aW9ucyhcbiAgICAgICAgICBjb25uZWN0ZWRGaWVsZENvbmZpZyxcbiAgICAgICAgICBjb25uZWN0ZWRGaWVsZFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoY29ubmVjdGVkRmllbGRDb25maWcsIFwiaGFuZGxlTmVzdGVkRmllbGRzXCIpKSB7XG4gICAgICBpZiAoY29ubmVjdGVkRmllbGRDb25maWcuaGFuZGxlTmVzdGVkRmllbGRzKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudHMoXG4gICAgICAgICAgeyBrZXk6IGNvbm5lY3RlZEZpZWxkQ29uZmlnLmtleSB9LFxuICAgICAgICAgIGV2ZW50VHlwZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3VycmVudEZpZWxkO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVDb25uZWN0ZWRFbGVtZW50cyhlOiBhbnksIGV2ZW50VHlwZTogc3RyaW5nKSB7XG4gICAgbGV0IGN1cnJlbnRGaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZS5rZXkpO1xuXG4gICAgaWYgKGN1cnJlbnRGaWVsZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoY3VycmVudEZpZWxkLCBcImNvbm5lY3RlZEVsZW1lbnRzXCIpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhcbiAgICAgICAgICAgIGN1cnJlbnRGaWVsZC5jb25uZWN0ZWRFbGVtZW50cyxcbiAgICAgICAgICAgIFwiY29ubmVjdGVkRmllbGRHcm91cHNcIlxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgbGV0IGNvbm5lY3RlZEZpZWxkR3JvdXBzID1cbiAgICAgICAgICAgIGN1cnJlbnRGaWVsZC5jb25uZWN0ZWRFbGVtZW50cy5jb25uZWN0ZWRGaWVsZEdyb3VwcztcbiAgICAgICAgICBmb3IgKGxldCBjb25uZWN0ZWRGaWVsZEdyb3VwQ29uZmlnIG9mIGNvbm5lY3RlZEZpZWxkR3JvdXBzKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEdyb3VwKFxuICAgICAgICAgICAgICBjdXJyZW50RmllbGQsXG4gICAgICAgICAgICAgIGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWcsXG4gICAgICAgICAgICAgIGV2ZW50VHlwZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKFxuICAgICAgICAgICAgY3VycmVudEZpZWxkLmNvbm5lY3RlZEVsZW1lbnRzLFxuICAgICAgICAgICAgXCJjb25uZWN0ZWRGaWVsZHNcIlxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgbGV0IGNvbm5lY3RlZEZpZWxkcyA9IGN1cnJlbnRGaWVsZC5jb25uZWN0ZWRFbGVtZW50cy5jb25uZWN0ZWRGaWVsZHM7XG4gICAgICAgICAgZm9yIChsZXQgY29ubmVjdGVkRmllbGRDb25maWcgb2YgY29ubmVjdGVkRmllbGRzKSB7XG4gICAgICAgICAgICBjdXJyZW50RmllbGQgPSBhd2FpdCB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZHMoXG4gICAgICAgICAgICAgIGN1cnJlbnRGaWVsZCxcbiAgICAgICAgICAgICAgY29ubmVjdGVkRmllbGRDb25maWcsXG4gICAgICAgICAgICAgIGV2ZW50VHlwZSxcbiAgICAgICAgICAgICAgZXZlbnRUeXBlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBGaWVsZCBmb3IgdGhlIGdpdmVuIGtleSBbJyR7ZS5rZXl9J10gaXMgbm90IGZvdW5kIHdpdGggZXZlbnRUeXBlOiAnJHtldmVudFR5cGV9Jy5gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlUmVtb3ZlZEZpbGUoZTogYW55KSB7XG4gICAgdGhpcy5zaG93QXBpTG9hZGVyKCk7XG5cbiAgICBpZiAodGhpcy5mb3JtR3JvdXBbXCJjb250cm9sc1wiXVtlLmtleV0uZW5hYmxlZCkge1xuICAgICAgdGhpcy5maWxlc1tlLmtleV0gPSBlLmZpbGVzO1xuXG4gICAgICB0aGlzLmZvcm1EYXRhW2Uua2V5XSA9IGZpbHRlckR1cGxpY2F0ZXNGaWxlcyh0aGlzLmZpbGVzW2Uua2V5XSk7XG5cbiAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoXG4gICAgICAgIHtcbiAgICAgICAgICBbZS5rZXldOiB0aGlzLmZvcm1EYXRhW2Uua2V5XVxuICAgICAgICB9LFxuICAgICAgICB7IGVtaXRFdmVudDogZmFsc2UgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaGFuZGxlR2V0S2V5VmFsdWVGaWxlKGU6IGFueSkge1xuICAgIHRoaXMuc2hvd0FwaUxvYWRlcigpO1xuXG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGUua2V5KTtcblxuICAgIGxldCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KGUudmFsdWUpID8gZS52YWx1ZSA6IFtlLnZhbHVlXTtcblxuICAgIGlmIChcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInByb3BlcnRpZXNcIikgJiZcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLnByb3BlcnRpZXMsIFwidXBsb2FkRmlsZVRvU2VydmVyXCIpICYmXG4gICAgICBmaWVsZC5wcm9wZXJ0aWVzLnVwbG9hZEZpbGVUb1NlcnZlclxuICAgICkge1xuICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgYXdhaXQgdGhpcy51cGxvYWRGaWxlKGUua2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRmlsZXModmFsdWUsIFwiTE9BRElOR1wiLCBlLmtleSk7XG5cbiAgICAgICAgY29uc3QgdXBkYXRlZEZpbGUgPSBnZXRPYmplY3REZWVwQ29weShcbiAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgIGlkOiB1dWlkdjQoKSxcbiAgICAgICAgICAgICAgICBuYW1lOiB2YWx1ZS5uYW1lLFxuICAgICAgICAgICAgICAgIHR5cGU6IHZhbHVlLnR5cGUsXG4gICAgICAgICAgICAgICAgc2l6ZTogdmFsdWUuc2l6ZSxcbiAgICAgICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHZhbHVlLmxhc3RNb2RpZmllZCxcbiAgICAgICAgICAgICAgICB3ZWJraXRSZWxhdGl2ZVBhdGg6IHZhbHVlLndlYmtpdFJlbGF0aXZlUGF0aFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIDMwMCk7IC8vIDEwMDAgbXMgPSAxIHNlY1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVGaWxlcyh1cGRhdGVkRmlsZSwgXCJOT1JNQUxcIiwgZS5rZXkpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byB1cGRhdGUgdGhlIGZpbGVzIGFycmF5IHdpdGggdGhlIG5ldyBmaWxlIGFuZCBpdCdzIHN0YXRlIGFuZCByZXNwb25zZSBmcm9tIHRoZSBhcGkgb2YgdXBsb2FkaW5nIHRoZSBmaWxlLlxuICAgKi9cbiAgQGxvZ01ldGhvZFxuICB1cGRhdGVGaWxlcyhmaWxlOiBhbnksIHN0YXRlOiBzdHJpbmcsIGtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgZmlsZVdpdGhTdGF0ZSA9IG1lcmdlT2JqZWN0cyhmaWxlIGFzIGFueSwgeyBzdGF0ZTogc3RhdGUgfSk7XG5cbiAgICBjb25zdCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywga2V5KTtcblxuICAgIGlmIChmaWVsZC5wcm9wZXJ0aWVzPy5tdWx0aXBsZSkge1xuICAgICAgLy8gSWYgZmllbGQucHJvcGVydGllcz8ubXVsdGlwbGUgaXMgdHJ1ZSwgaXQgbWVhbnMgbXVsdGlwbGUgZmlsZXMgYXJlIGFsbG93ZWQgZm9yIHRoaXMgZmllbGQuXG4gICAgICAvLyBVcGRhdGUgdGhlIGV4aXN0aW5nIGZpbGVzIGFycmF5IGZvciB0aGUgc3BlY2lmaWMga2V5IHdpdGggdGhlIG5ldyBmaWxlLlxuICAgICAgY29uc3QgdXBkYXRlZEZpbGVzID0gW1xuICAgICAgICAuLi50aGlzLmZpbGVzW2tleV0uZmlsdGVyKFxuICAgICAgICAgIChmKSA9PiBmLm5hbWUgIT09IGZpbGVXaXRoU3RhdGUubmFtZSB8fCBmLnNpemUgIT09IGZpbGVXaXRoU3RhdGUuc2l6ZVxuICAgICAgICApLFxuICAgICAgICBmaWxlV2l0aFN0YXRlXG4gICAgICBdO1xuXG4gICAgICAvLyBBcHBseSB0aGUgZmlsdGVyRHVwbGljYXRlc0ZpbGVzIGZ1bmN0aW9uIHRvIGVuc3VyZSB1bmlxdWVuZXNzIGluIHRoZSB1cGRhdGVkRmlsZXMgYXJyYXkuXG4gICAgICB0aGlzLmZpbGVzW2tleV0gPSBmaWx0ZXJEdXBsaWNhdGVzRmlsZXModXBkYXRlZEZpbGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgZmllbGQucHJvcGVydGllcz8ubXVsdGlwbGUgaXMgZmFsc2UsIG9ubHkgb25lIGZpbGUgaXMgYWxsb3dlZCBmb3IgdGhpcyBmaWVsZC5cbiAgICAgIC8vIFJlcGxhY2UgdGhlIGV4aXN0aW5nIGZpbGVzIGFycmF5IGZvciB0aGUgc3BlY2lmaWMga2V5IHdpdGggYW4gYXJyYXkgY29udGFpbmluZyB0aGUgbmV3IGZpbGUuXG4gICAgICB0aGlzLmZpbGVzW2tleV0gPSBbZmlsZVdpdGhTdGF0ZV07XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHRoZSBmb3JtRGF0YSBhbmQgZm9ybUdyb3VwIGNvbnRyb2xzIGZvciB0aGUgc3BlY2lmaWMga2V5IHdpdGggdGhlIG5vcm1hbEZpbGVzIGFycmF5LlxuICAgIGNvbnN0IG5vcm1hbEZpbGVzID0gdGhpcy5maWxlc1trZXldLmZpbHRlcigoZmlsZSkgPT4ge1xuICAgICAgcmV0dXJuIGZpbGUuc3RhdGUgPT09IFwiTk9STUFMXCI7XG4gICAgfSk7XG5cbiAgICB0aGlzLmZvcm1EYXRhW2tleV0gPSBub3JtYWxGaWxlcztcbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1trZXldLnBhdGNoVmFsdWUobm9ybWFsRmlsZXMsIHtcbiAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICBvbmx5U2VsZjogZmFsc2VcbiAgICB9KTtcbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKFxuICAgICAge1xuICAgICAgICBba2V5XTogbm9ybWFsRmlsZXNcbiAgICAgIH0sXG4gICAgICB7IGVtaXRFdmVudDogZmFsc2UgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBhIGFwaSB1cGxvYWQgbW9ja2luZyBtZXRob2QuIFNldCdzIHRvIGxvYWRpbmcgYXQgZmlyc3QgYXQgcG9pbnQgd2hlbiBBUEkgaXMgY2FsbGVkIGFuZCB0aGVuIGNoYW5nZXMgdGhlIHN0YXR1cyB0byByYW5kb20gc3RhdHVzIGFmdGVyIDIgc2Vjb25kcyBvZiBkZWxheSBzaG93aW5nIGEgbW9ja2VkIHJlc3BvbnNlIGZyb20gQVBJLlxuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBhc3luYyB1cGxvYWRGaWxlKGtleTogc3RyaW5nLCBmaWxlOiBhbnkpIHtcbiAgICB0aGlzLnVwZGF0ZUZpbGVzKGZpbGUsIFwiTE9BRElOR1wiLCBrZXkpO1xuXG4gICAgLy8gQWN0dWFsIEFQSSBDYWxsXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMub25DbGlja0FwaUNhbGwuZW1pdCh7XG4gICAgICAgIGtleToga2V5LFxuICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgZmlsZTogZmlsZSxcbiAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgbmFtZTogZmlsZS5uYW1lLFxuICAgICAgICAgICAgdHlwZTogZmlsZS50eXBlLFxuICAgICAgICAgICAgc2l6ZTogZmlsZS5zaXplLFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiBmaWxlLmxhc3RNb2RpZmllZCxcbiAgICAgICAgICAgIHdlYmtpdFJlbGF0aXZlUGF0aDogZmlsZS53ZWJraXRSZWxhdGl2ZVBhdGhcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy51cGRhdGVGaWxlcyhmaWxlLCBcIkVSUk9SXCIsIGtleSk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkNsaWNrRm9ybUZpZWxkQnV0dG9uKGZpZWxkOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2xpY2tGb3JtRmllbGRCdXR0b24uZW1pdCh7XG4gICAgICBjb25maWc6IGZpZWxkLFxuICAgICAgZGF0YTogbWVyZ2VPYmplY3RzKHRoaXMuZm9ybURhdGEsIHRoaXMucG9wdXBGb3JtRGF0YSwgdGhpcy50YXNrRGF0YSlcbiAgICB9KTtcbiAgfVxuXG4gIC8vIERPTSBFdmVudCBIYW5kbGVyc1xuICBAbG9nTWV0aG9kXG4gIGhhbmRsZUdldEtleVZhbHVlKGU6IGFueSkge1xuICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoXG4gICAgICB7XG4gICAgICAgIFtlLmtleV06IGUudmFsdWVcbiAgICAgIH0sXG4gICAgICB7IGVtaXRFdmVudDogZmFsc2UgfVxuICAgICk7XG5cbiAgICBjb25zdCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZS5rZXkpO1xuICAgIHRoaXMuZm9ybURhdGFbZS5rZXldID0gY29udmVydEZvcm1GaWVsZFZhbHVlVG9TdGFuZGFyZEZvcm1hdChcbiAgICAgIGZpZWxkLFxuICAgICAgZS52YWx1ZVxuICAgICk7XG5cbiAgICB0aGlzLmdldFVuc2F2ZWREYXRhU3RhdGUuZW1pdCh0cnVlKTtcblxuICAgIGlmIChcbiAgICAgIGZpZWxkLmlzRm9ybUVsZW1lbnQgJiZcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInZhbGlkYXRpb25cIikgJiZcbiAgICAgIGZpZWxkLnZhbGlkYXRpb24udHJpZ2dlcnMuaW5jbHVkZXMoXCJPTl9DSEFOR0VcIilcbiAgICApIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0gbmV3IFZhbGlkYXRpb24oXG4gICAgICAgIHtcbiAgICAgICAgICBGSUVMRF9DT05GSUc6IGZpZWxkLFxuICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICk7XG5cbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHZhbGlkYXRpb25zLnZhbGlkYXRlKGZpZWxkLnZhbGlkYXRpb24pO1xuICAgICAgfSkoKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBmaWVsZC5pc0Zvcm1FbGVtZW50ICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJjb25uZWN0ZWRFbGVtZW50c1wiKVxuICAgICkge1xuICAgICAgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50cyhcbiAgICAgICAge1xuICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiT05fQ0hBTkdFXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVPbkNsaWNrUmVzZXRGb3JtRmllbGRzKGU6IGFueSwgZmllbGQ6IFRGaWVsZFRpdGxlKSB7XG4gICAgY29uc3QgcmVzZXRGb3JtRmllbGRzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgZm9yIChsZXQgZiBvZiBmaWVsZC5yZXNldC5maWVsZHMpIHtcbiAgICAgICAgZm9yIChsZXQgYWN0aW9uIG9mIGYuYWN0aW9ucykge1xuICAgICAgICAgIGNvbnN0IHJlc2V0RmllbGQgPSBnZXRGb3JtRmllbGRCeUtleShcbiAgICAgICAgICAgIHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgIGFjdGlvbi5wcm9wcy5maWVsZEtleVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgYWN0aW9ucyA9IG5ldyBBY3Rpb24oXG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgRklFTERfQ09ORklHOiByZXNldEZpZWxkLFxuICAgICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhd2FpdCBhY3Rpb25zLmV4ZWN1dGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBCWVBBU1NfUkVTRVRfQ09ORklSTSA9IGZpZWxkPy5wcm9wZXJ0aWVzPy5ieXBhc3NSZXNldENvbmZpcm1hdGlvbjtcblxuICAgIGlmICghQllQQVNTX1JFU0VUX0NPTkZJUk0pIHtcbiAgICAgIGNvbnN0IENPTkZJUk1fUkVTRVQgPSB3aW5kb3cuY29uZmlybShcbiAgICAgICAgXCJUaGlzIGFjdGlvbiB3aWxsIHJlc2V0IGFsbCB0aGUgZmllbGRzLiBEbyB5b3Ugc3RpbGwgd2FudCB0byBjb250aW51ZT9cIlxuICAgICAgKTtcblxuICAgICAgaWYgKENPTkZJUk1fUkVTRVQpIHtcbiAgICAgICAgcmVzZXRGb3JtRmllbGRzKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc2V0Rm9ybUZpZWxkcygpO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaGFuZGxlRmllbGRBcGlDYWxsKGZpZWxkOiBURmllbGRBcGlDYWxsLCBhcGk6IGFueSkge1xuICAgIGFwaSA9IGF3YWl0IHRoaXMuZXhlY3V0ZUFwaUNhbGwoYXBpLCB7XG4gICAgICBGSUVMRF9DT05GSUc6IGZpZWxkLFxuICAgICAgQVBJX0NPTkZJRzogYXBpLFxuICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5pc1ZhbGlkUmVxdWVzdEhlYWRlcnNBbmRCb2R5KGFwaSkpIHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZC5hcGksIFwicmVxdWVzdFwiKSkge1xuICAgICAgICB0aGlzLmZvcm1EYXRhID0ge1xuICAgICAgICAgIC4uLnRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgW2ZpZWxkLmtleV06IGFwaS5yZXNwb25zZS52YWx1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgW2ZpZWxkLmtleV06IGFwaS5yZXNwb25zZS52YWx1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXBpcyA9IG5ldyBBcGlzKFxuICAgICAgICB7XG4gICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICBBUElfQ09ORklHOiBhcGksXG4gICAgICAgICAgQVBJX1JFU1BPTlNFOiBhcGkucmVzcG9uc2UsXG4gICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YVxuICAgICAgICB9LFxuICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgKTtcblxuICAgICAgYXBpID0gYXdhaXQgYXBpcy52YWxpZGF0ZVJlc3BvbnNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBmaWVsZFtcImFwaVwiXVtcInN0YXR1c1wiXVtcInZhbHVlXCJdID0gRUFwaVN0YXR1c1R5cGUuRkFJTEVEO1xuICAgICAgICBmaWVsZFtcInNob3dMb2FkZXJcIl0gPSBmYWxzZTtcbiAgICAgIH0sIDUwMCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgZmllbGQ6IGZpZWxkLCBhcGk6IGFwaSB9O1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVBcGlDYWxsKGFwaTogYW55KSB7XG4gICAgYXBpID0gYXdhaXQgdGhpcy5leGVjdXRlQXBpQ2FsbChhcGksIHtcbiAgICAgIEZPUk1fQ09ORklHOiB0aGlzLmZvcm1Db25maWcsXG4gICAgICBBUElfQ09ORklHOiBhcGksXG4gICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcbiAgICB9KTtcblxuICAgIGNvbnN0IGFwaXMgPSBuZXcgQXBpcyhcbiAgICAgIHtcbiAgICAgICAgRk9STV9DT05GSUc6IHRoaXMuZm9ybUNvbmZpZyxcbiAgICAgICAgQVBJX0NPTkZJRzogYXBpLFxuICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YVxuICAgICAgfSxcbiAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgKTtcblxuICAgIGlmICh0aGlzLmlzVmFsaWRSZXF1ZXN0SGVhZGVyc0FuZEJvZHkoYXBpKSkge1xuICAgICAgYXBpID0gYXdhaXQgYXBpcy52YWxpZGF0ZVJlc3BvbnNlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgYXBpOiBhcGkgfTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgZXhlY3V0ZUFwaUNhbGwoYXBpOiBhbnksIG9iamVjdDogYW55KSB7XG4gICAgY29uc3QgYXBpcyA9IG5ldyBBcGlzKG9iamVjdCwgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcykpO1xuXG4gICAgYXBpID0gYXdhaXQgYXBpcy5zZXRVcmwoKTtcbiAgICBhcGkgPSBhd2FpdCBhcGlzLnNldFJlcXVlc3RIZWFkZXJzKCk7XG4gICAgYXBpID0gYXdhaXQgYXBpcy52YWxpZGF0ZVJlcXVlc3RIZWFkZXJzKCk7XG4gICAgYXBpID0gYXdhaXQgYXBpcy5zZXRSZXF1ZXN0Qm9keSgpO1xuICAgIGFwaSA9IGF3YWl0IGFwaXMudmFsaWRhdGVSZXF1ZXN0Qm9keSgpO1xuXG4gICAgbGV0IGFwaUNhbGxSZXNwb25zZTogYW55ID0ge307XG4gICAgbGV0IGFwaUNhbGxSZXNwb25zZVN0YXR1c0NvZGU7XG5cbiAgICBpZiAodGhpcy5pc1ZhbGlkUmVxdWVzdEhlYWRlcnNBbmRCb2R5KGFwaSkpIHtcbiAgICAgIGlmIChcbiAgICAgICAgYXBpLnJlcXVlc3QudXJsLmhhc093blByb3BlcnR5KFwidHlwZVwiKSAmJlxuICAgICAgICBhcGkucmVxdWVzdC51cmwudHlwZSA9PT0gRUFwaVJlcXVlc3RVcmxUeXBlLk1PQ0tcbiAgICAgICkge1xuICAgICAgICBhcGlDYWxsUmVzcG9uc2UgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShhcGkucmVxdWVzdC51cmwucHJvcHMubW9ja2VkRGF0YSk7XG4gICAgICAgICAgfSwgMTAwMCk7IC8vIDEwMDAgbXMgPSAxIHNlY1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHVybDogc3RyaW5nID0gYXBpLnJlcXVlc3QudXJsLnZhbHVlO1xuICAgICAgICBjb25zdCBtZXRob2Q6IHN0cmluZyA9IGFwaS5yZXF1ZXN0Py5tZXRob2QgPz8gXCJQT1NUXCI7XG4gICAgICAgIGNvbnN0IGhlYWRlcnM6IGFueSA9IHtcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAuLi4oYXBpLnJlcXVlc3Q/LmhlYWRlcnM/LnZhbHVlIHx8IHt9KVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBib2R5OiBhbnkgPSBhcGkucmVxdWVzdD8uYm9keT8udmFsdWUgPz8gbnVsbDtcblxuICAgICAgICBpZiAobWV0aG9kID09PSBcIkdFVFwiKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlOiBhbnkgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgICAgICAgIGhlYWRlcnM6IHsgLi4uaGVhZGVycyB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFwaUNhbGxSZXNwb25zZSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgICAgIGFwaUNhbGxSZXNwb25zZVN0YXR1c0NvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBhcGlDYWxsUmVzcG9uc2UgPSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlOiBhbnkgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgICAgICAgIGhlYWRlcnM6IHsgLi4uaGVhZGVycyB9LFxuICAgICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhcGlDYWxsUmVzcG9uc2UgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgICAgICBhcGlDYWxsUmVzcG9uc2VTdGF0dXNDb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgYXBpQ2FsbFJlc3BvbnNlID0ge307XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGFwaS5yZXNwb25zZSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgICBhcGkucmVzcG9uc2UsXG4gICAgICAgIFwidmFsdWVcIixcbiAgICAgICAgYXBpQ2FsbFJlc3BvbnNlXG4gICAgICApO1xuXG4gICAgICBhcGkucmVzcG9uc2UgPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgYXBpLnJlc3BvbnNlLFxuICAgICAgICBcInN0YXR1c1wiLFxuICAgICAgICBhcGlDYWxsUmVzcG9uc2VTdGF0dXNDb2RlXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBhcGk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGlzVmFsaWRSZXF1ZXN0SGVhZGVyc0FuZEJvZHkoYXBpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIChcbiAgICAgICAgYXBpLnJlcXVlc3QuYm9keS52YWxpZGF0aW9uIGFzIFRWYWxpZGF0aW9uICYge1xuICAgICAgICAgIGlzX3ZhbGlkOiBib29sZWFuO1xuICAgICAgICB9XG4gICAgICApLmlzX3ZhbGlkICYmXG4gICAgICAoXG4gICAgICAgIGFwaS5yZXF1ZXN0LmhlYWRlcnMudmFsaWRhdGlvbiBhcyBUVmFsaWRhdGlvbiAmIHtcbiAgICAgICAgICBpc192YWxpZDogYm9vbGVhbjtcbiAgICAgICAgfVxuICAgICAgKS5pc192YWxpZFxuICAgICk7XG4gIH1cblxuICBzaG93QXBpTG9hZGVyKCkge1xuICAgIHRoaXMubG9hZGVyU2VydmljZS5zaG93KHtcbiAgICAgIGZ1bGxzY3JlZW46IHRydWUsXG4gICAgICBsb2FkZXJUZXh0OiBcIlBsZWFzZSB3YWl0XCJcbiAgICB9KTtcbiAgICB0aGlzLnZpZXdGb3Jtc0J1dHRvbltcImRpc2FibGVkXCJdID0gdHJ1ZTtcbiAgICB0aGlzLnZpZXdGb3Jtc0J1dHRvbltcInNob3dMb2FkZXJcIl0gPSB0cnVlO1xuICAgIHRoaXMuc2F2ZUZvcm1CdXR0b25bXCJkaXNhYmxlZFwiXSA9IHRydWU7XG4gICAgdGhpcy5zYXZlRm9ybUJ1dHRvbltcInNob3dMb2FkZXJcIl0gPSB0cnVlO1xuICB9XG5cbiAgaGlkZUFwaUxvYWRlcigpIHtcbiAgICB0aGlzLmxvYWRlclNlcnZpY2UuaGlkZSgpO1xuICAgIHRoaXMudmlld0Zvcm1zQnV0dG9uW1wiZGlzYWJsZWRcIl0gPSBmYWxzZTtcbiAgICB0aGlzLnZpZXdGb3Jtc0J1dHRvbltcInNob3dMb2FkZXJcIl0gPSBmYWxzZTtcbiAgICB0aGlzLnNhdmVGb3JtQnV0dG9uW1wiZGlzYWJsZWRcIl0gPSBmYWxzZTtcbiAgICB0aGlzLnNhdmVGb3JtQnV0dG9uW1wic2hvd0xvYWRlclwiXSA9IGZhbHNlO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVPbkNsaWNrQXBpQ2FsbChlOiBhbnkpIHtcbiAgICBsZXQgZmllbGQ6IFRGaWVsZEFwaUNhbGwgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGUua2V5KTtcblxuICAgIGlmIChmaWVsZC50eXBlID09PSBFRmllbGRUeXBlLkFQSSkge1xuICAgICAgLy8gc2V0IGJ1dHRvbiBzdGF0dXMgdG8gbG9hZGluZ1xuICAgICAgZmllbGRbXCJhcGlcIl1bXCJzdGF0dXNcIl1bXCJ2YWx1ZVwiXSA9IEVBcGlTdGF0dXNUeXBlLkxPQURJTkc7XG4gICAgICBmaWVsZFtcInNob3dMb2FkZXJcIl0gPSB0cnVlO1xuXG4gICAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgICAgLy8gRGV0ZXJtaW5lIEFQSSBDYWxsIHRpbWVcblxuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLmFwaSwgXCJyZXF1ZXN0XCIpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRmllbGRBcGlDYWxsKGZpZWxkLCBmaWVsZC5hcGkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYXBpcyA9IG5ldyBBcGlzKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgICBBUElfQ09ORklHOiB7fSxcbiAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgKTtcblxuICAgICAgICBhd2FpdCBhcGlzLmNhbGxOZXh0QXBpKGZpZWxkLmFwaS5lbnRyeXBvaW50KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byBvcHRpbWl6ZSB0aGUgRE9NIHVwZGF0ZSBieSBBbmd1bGFyIGZvciB1c2luZyAqbmdGb3Igb24gbGFyZ2Ugbm8uIG9mIGl0ZW1zLlxuICAgKiBAcGFyYW0gaW5kZXggbnVtYmVyXG4gICAqIEBwYXJhbSBpdGVtIGZpZWxkQ29uZmlnXG4gICAqIEByZXR1cm5zIHN0cmluZ1xuICAgKi9cbiAgZ2V0VW5pcXVlSWRlbnRpZmllcihpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBpdGVtLmtleTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja0dvQmFjayhlOiBhbnksIG1vZGU6IFRGb3JtVmlld0dvQmFja01vZGUpIHtcbiAgICBpZiAodGhpcy5mb3JtQ29uZmlnLnN0YXR1cyA9PT0gRUZvcm1zTGlzdFN0YXR1cy5DT01QTEVURUQpIHtcbiAgICAgIHRoaXMub25DbGlja0dvQmFjay5lbWl0KHtcbiAgICAgICAgY2xpY2tlZDogdHJ1ZSxcbiAgICAgICAgbW9kZTogbW9kZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLmhlYWRlci5iYWNrQnV0dG9uLmJ5cGFzc0NvbmZpcm1hdGlvbiB8fFxuICAgICAgd2luZG93LmNvbmZpcm0oXCJZb3VyIGRhdGEgd2lsbCBiZSBsb3N0IGlmIHlvdSBsZWF2ZSB0aGlzIHBhZ2UhIENvbnRpbnVlP1wiKVxuICAgICkge1xuICAgICAgdGhpcy5vbkNsaWNrR29CYWNrLmVtaXQoe1xuICAgICAgICBjbGlja2VkOiB0cnVlLFxuICAgICAgICBtb2RlOiBtb2RlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGhhbmRsZU9uQ2xpY2tWaWV3Rm9ybXMoZTogYW55KSB7XG4gICAgaWYgKHRoaXMuZm9ybUNvbmZpZy5zdGF0dXMgPT09IEVGb3Jtc0xpc3RTdGF0dXMuQ09NUExFVEVEKSB7XG4gICAgICB0aGlzLm9uQ2xpY2tWaWV3Rm9ybXMuZW1pdCh7XG4gICAgICAgIGNsaWNrZWQ6IHRydWVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmZvcm1Db25maWcucHJvcGVydGllcy5mb290ZXIudmlld0Zvcm1zQnV0dG9uLmJ5cGFzc0NvbmZpcm1hdGlvbiB8fFxuICAgICAgd2luZG93LmNvbmZpcm0oXCJZb3VyIGRhdGEgd2lsbCBiZSBsb3N0IGlmIHlvdSBsZWF2ZSB0aGlzIHBhZ2UhIENvbnRpbnVlP1wiKVxuICAgICkge1xuICAgICAgdGhpcy5vbkNsaWNrVmlld0Zvcm1zLmVtaXQoe1xuICAgICAgICBjbGlja2VkOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZU9uQ2xpY2tTYXZlRm9ybShlOiBhbnkpIHtcbiAgICBsZXQgZm9ybURhdGEgPSB0aGlzLmZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xuXG4gICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5mb3JtRmllbGRzKSB7XG4gICAgICBpZiAoZmllbGQuaXNGb3JtRWxlbWVudCkge1xuICAgICAgICBpZiAoZmllbGQuaGlkZGVuKSB7XG4gICAgICAgICAgZGVsZXRlIGZvcm1EYXRhW2ZpZWxkLmtleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9ybURhdGFbZmllbGQua2V5XSA9IGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvU3RhbmRhcmRGb3JtYXQoXG4gICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgIGZvcm1EYXRhW2ZpZWxkLmtleV1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY29udHJvbHMgPSBuZXcgRm9ybVZhbGlkYXRpb24oKS5nZXRGb3JtRmllbGRzSW52YWxpZENvbnRyb2xzKFxuICAgICAgdGhpcy5mb3JtR3JvdXBcbiAgICApO1xuXG4gICAgbGV0IGZpcnN0RmllbGRXaXRoRXJyb3I6IHN0cmluZyA9IFwiXCI7XG5cbiAgICBmb3IgKGxldCBjb250cm9sIG9mIGNvbnRyb2xzKSB7XG4gICAgICBpZiAoY29udHJvbC5pbnZhbGlkICYmIGlzRW1wdHlWYWx1ZShmaXJzdEZpZWxkV2l0aEVycm9yKSkge1xuICAgICAgICBmaXJzdEZpZWxkV2l0aEVycm9yID0gY29udHJvbC5rZXk7XG4gICAgICB9XG4gICAgICB0aGlzLmZvcm1GaWVsZHMgPSBzaG93Rm9ybUZpZWxkRXJyb3IoXG4gICAgICAgIHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29udHJvbC5rZXldLmVycm9ycyxcbiAgICAgICAgY29udHJvbC5rZXksXG4gICAgICAgIGNvbnRyb2wuaW52YWxpZFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoaXNOb3RFbXB0eVZhbHVlKGZpcnN0RmllbGRXaXRoRXJyb3IpKSB7XG4gICAgICB0aGlzLnRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKHRydWUpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudG9nZ2xlRXJyb3JOb3RpZmljYXRpb24oZmFsc2UpO1xuICAgICAgfSwgMzAwMCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmZvcm1GaWVsZHMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgZmllbGQuaXNGb3JtRWxlbWVudCAmJlxuICAgICAgICAhZmllbGQuaGlkZGVuICYmXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInZhbGlkYXRpb25cIikgJiZcbiAgICAgICAgZmllbGQudmFsaWRhdGlvbi50cmlnZ2Vycy5pbmNsdWRlcyhcIk9OX1NBVkVcIilcbiAgICAgICkge1xuICAgICAgICBjb25zdCB2YWxpZGF0aW9ucyA9IG5ldyBWYWxpZGF0aW9uKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICAgICk7XG5cbiAgICAgICAgYXdhaXQgdmFsaWRhdGlvbnMudmFsaWRhdGUoZmllbGQudmFsaWRhdGlvbik7XG5cbiAgICAgICAgaWYgKCFmaWVsZC52YWxpZGF0aW9uLmlzX3ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy50b2dnbGVFcnJvck5vdGlmaWNhdGlvbih0cnVlKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlRXJyb3JOb3RpZmljYXRpb24oZmFsc2UpO1xuICAgICAgICAgIH0sIDMwMDApO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZXh0ZW5kZWRGb3JtRGF0YSA9IHRoaXMuZm9ybUZpZWxkcy5yZWR1Y2UoKHJlc3VsdCwgZmllbGQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoZmllbGQuaXNGb3JtRWxlbWVudCAmJiAhZmllbGQuaGlkZGVuKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkRGF0YSA9IHtcbiAgICAgICAgICBbZmllbGQua2V5XToge1xuICAgICAgICAgICAga2V5OiBmaWVsZC5rZXksXG4gICAgICAgICAgICBsYWJlbDogZmllbGQubGFiZWwsXG4gICAgICAgICAgICB2YWx1ZTogaXNFbXB0eVZhbHVlKGZvcm1EYXRhW2ZpZWxkLmtleV0pID8gXCJcIiA6IGZvcm1EYXRhW2ZpZWxkLmtleV0sXG4gICAgICAgICAgICB0eXBlOiBmaWVsZC50eXBlLFxuICAgICAgICAgICAgaW5kZXg6IGluZGV4XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXN1bHRbZmllbGQua2V5XSA9IGZpZWxkRGF0YVtmaWVsZC5rZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7fSk7XG5cbiAgICBPYmplY3Qua2V5cyhmb3JtRGF0YSkubWFwKChrZXkpID0+IHtcbiAgICAgIGlmIChpc0VtcHR5VmFsdWUoZm9ybURhdGFba2V5XSkpIHtcbiAgICAgICAgZm9ybURhdGFba2V5XSA9IFwiXCI7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBQT1NUIFRhc2tzXG4gICAgICogMS4gQVBJIENhbGxzLlxuICAgICAqIDIuIEFsdGVyIERhdGEgU3RydWN0dXJlLlxuICAgICAqIDMuIFRyaWdnZXIgYW4gSW50ZXJuYWwgUG9wdXAgRm9ybS5cbiAgICAgKiA0LiBVUkwgUmVkaXJlY3Rpb24gb3IgbmV3IG9wZW5pbmcgb2YgVVJMIGluIGV4dGVybmFsIHRhYi5cbiAgICAgKi9cbiAgICBpZiAoXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLmZvcm1Db25maWcsIFwidGFza3NcIikgJiZcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMuZm9ybUNvbmZpZy50YXNrcywgXCJwb3N0XCIpXG4gICAgKSB7XG4gICAgICBmb3IgKGxldCBwb3N0VGFzayBvZiB0aGlzLmZvcm1Db25maWcudGFza3MucG9zdCkge1xuICAgICAgICBjb25zdCB0YXNrID0gbmV3IFRhc2tzKFxuICAgICAgICAgIHBvc3RUYXNrLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIEZPUk1fQ09ORklHOiB0aGlzLmZvcm1Db25maWcsXG4gICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zdG9wVGFza0V4ZWN1dGlvbiA9IGZhbHNlO1xuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMocG9zdFRhc2ssIFwid2FpdFwiKSkge1xuICAgICAgICAgIHRoaXMud2FpdGluZ0ZvckNoYW5nZXMgPSBwb3N0VGFzay53YWl0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMud2FpdGluZ0ZvckNoYW5nZXMgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRhc2suZXhlY3V0ZSgpO1xuXG4gICAgICAgIC8vIFdhaXQgZm9yIG5nT25DaGFuZ2VzIHRvIGJlIGNhbGxlZCBiZWZvcmUgY29udGludWluZyB0byB0aGUgbmV4dCB0YXNrXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgY29uc3QgaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy53YWl0aW5nRm9yQ2hhbmdlcykge1xuICAgICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgMTApO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5zdG9wVGFza0V4ZWN1dGlvbikge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnN0b3BUYXNrRXhlY3V0aW9uIHx8IHRoaXMud2FpdGluZ0ZvckNoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5zdG9wVGFza0V4ZWN1dGlvbiA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMub25DbGlja1NhdmVGb3JtLmVtaXQoe1xuICAgICAgICBmb3JtQ29uZmlnOiB0aGlzLmZvcm1Db25maWcsXG4gICAgICAgIGRhdGE6IG1lcmdlT2JqZWN0cyhcbiAgICAgICAgICB0aGlzLmFsbEZvcm1zRGF0YVt0aGlzLmZvcm1Db25maWcua2V5XSxcbiAgICAgICAgICBmb3JtRGF0YSxcbiAgICAgICAgICB0aGlzLnBvcHVwRm9ybURhdGEsXG4gICAgICAgICAgdGhpcy50YXNrRGF0YVxuICAgICAgICApLFxuICAgICAgICBleHRlbmRlZERhdGE6IGV4dGVuZGVkRm9ybURhdGFcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdldFVuc2F2ZWREYXRhU3RhdGUuZW1pdChmYWxzZSk7XG4gICAgICB0aGlzLm9uQ2xpY2tTYXZlRm9ybS5lbWl0KHtcbiAgICAgICAgZm9ybUNvbmZpZzogdGhpcy5mb3JtQ29uZmlnLFxuICAgICAgICBkYXRhOiBtZXJnZU9iamVjdHMoZm9ybURhdGEsIHRoaXMucG9wdXBGb3JtRGF0YSwgdGhpcy50YXNrRGF0YSksXG4gICAgICAgIGV4dGVuZGVkRGF0YTogZXh0ZW5kZWRGb3JtRGF0YVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2hvd0Vycm9yTm90aWZpY2F0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIEBsb2dNZXRob2RcbiAgdG9nZ2xlRXJyb3JOb3RpZmljYXRpb24oc2hvdzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2hvd0Vycm9yTm90aWZpY2F0aW9uID0gc2hvdztcbiAgfVxuXG4gIC8vIENvbXBvbmVudCBIZWxwZXJzXG4gIEBsb2dNZXRob2RcbiAgZmllbGRIaWRlKGZpZWxkS2V5OiBzdHJpbmcpIHtcbiAgICBsZXQgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICBsZXQgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF1bXCJoaWRkZW5cIl0gPSB0cnVlO1xuICAgIHRoaXMuZm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmllbGRHcm91cEhpZGUoZmllbGRHcm91cDogc3RyaW5nKSB7XG4gICAgZm9yIChsZXQgZmllbGRLZXkgb2YgdGhpcy5maWVsZEdyb3Vwc1tmaWVsZEdyb3VwXSkge1xuICAgICAgdGhpcy5maWVsZEhpZGUoZmllbGRLZXkpO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmllbGRTaG93KGZpZWxkS2V5OiBzdHJpbmcpIHtcbiAgICBsZXQgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICBsZXQgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF1bXCJoaWRkZW5cIl0gPSBmYWxzZTtcbiAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkR3JvdXBTaG93KGZpZWxkR3JvdXA6IHN0cmluZykge1xuICAgIGZvciAobGV0IGZpZWxkS2V5IG9mIHRoaXMuZmllbGRHcm91cHNbZmllbGRHcm91cF0pIHtcbiAgICAgIHRoaXMuZmllbGRTaG93KGZpZWxkS2V5KTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkRGlzYWJsZShmaWVsZEtleTogc3RyaW5nKSB7XG4gICAgbGV0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgbGV0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XVtcImRpc2FibGVkXCJdID0gdHJ1ZTtcblxuICAgICAgaWYgKGlzTm90RW1wdHlWYWx1ZSh0aGlzLmZvcm1Hcm91cC5jb250cm9scykpIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS5kaXNhYmxlKHtcbiAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5mb3JtR3JvdXAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gRUZpZWxkVHlwZS5CVVRUT04pIHtcbiAgICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XVtcImRpc2FibGVkXCJdID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkR3JvdXBEaXNhYmxlKGZpZWxkR3JvdXA6IHN0cmluZykge1xuICAgIGZvciAobGV0IGZpZWxkS2V5IG9mIHRoaXMuZmllbGRHcm91cHNbZmllbGRHcm91cF0pIHtcbiAgICAgIHRoaXMuZmllbGREaXNhYmxlKGZpZWxkS2V5KTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkRW5hYmxlKGZpZWxkS2V5OiBzdHJpbmcpIHtcbiAgICBsZXQgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICBsZXQgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XG4gICAgfSk7XG5cbiAgICBpZiAoZmllbGQuaXNGb3JtRWxlbWVudCkge1xuICAgICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdW1wiZGlzYWJsZWRcIl0gPSBmYWxzZTtcblxuICAgICAgaWYgKGlzTm90RW1wdHlWYWx1ZSh0aGlzLmZvcm1Hcm91cC5jb250cm9scykpIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS5lbmFibGUoe1xuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSBFRmllbGRUeXBlLkJVVFRPTikge1xuICAgICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdW1wiZGlzYWJsZWRcIl0gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkR3JvdXBFbmFibGUoZmllbGRHcm91cDogc3RyaW5nKSB7XG4gICAgZm9yIChsZXQgZmllbGRLZXkgb2YgdGhpcy5maWVsZEdyb3Vwc1tmaWVsZEdyb3VwXSkge1xuICAgICAgdGhpcy5maWVsZEVuYWJsZShmaWVsZEtleSk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZFJlc2V0KGZpZWxkS2V5OiBzdHJpbmcpIHtcbiAgICAvLyBGaW5kIHRoZSBmaWVsZCBhbmQgaXRzIGluZGV4IGluIHRoZSBmb3JtRmllbGRzIGFycmF5XG4gICAgbGV0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgbGV0IGZpZWxkSW5kZXggPSBnZXRGb3JtRmllbGRJbmRleEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuXG4gICAgLy8gUmVzZXQgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBpbiB0aGUgZm9ybUdyb3VwXG4gICAgY29uc3QgcmVzZXRWYWx1ZSA9IGNvbnZlcnRGb3JtRmllbGRFbXB0eVZhbHVlVG9Ld2lrVUlGb3JtYXQoZmllbGQpO1xuXG4gICAgdGhpcy5mb3JtRGF0YVtmaWVsZEtleV0gPSByZXNldFZhbHVlO1xuXG4gICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS5yZXNldChyZXNldFZhbHVlLCB7XG4gICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgb25seVNlbGY6IHRydWVcbiAgICB9KTtcblxuICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoXG4gICAgICB7XG4gICAgICAgIFtmaWVsZC5rZXldOiByZXNldFZhbHVlXG4gICAgICB9LFxuICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICApO1xuXG4gICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtcbiAgICAgIGVtaXRFdmVudDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgLy8gUmVzZXQgdGhlIG1lc3NhZ2VzIGFuZCBlcnJvcnMgZm9yIHRoZSBmaWVsZFxuICAgIGZpZWxkID0gcmVtb3ZlRm9ybUZpZWxkTWVzc2FnZShmaWVsZCwge1xuICAgICAgdHlwZTogRU1lc3NhZ2VUeXBlLldBUk5JTkcsXG4gICAgICBtZXNzYWdlOiBcIlwiXG4gICAgfSk7XG4gICAgZmllbGQgPSByZW1vdmVGb3JtRmllbGRNZXNzYWdlKGZpZWxkLCB7XG4gICAgICB0eXBlOiBFTWVzc2FnZVR5cGUuU1VDQ0VTUyxcbiAgICAgIG1lc3NhZ2U6IFwiXCJcbiAgICB9KTtcbiAgICB0aGlzLmZpZWxkRXJyb3JIaWRlKGZpZWxkS2V5LCB7XG4gICAgICB0eXBlOiBFTWVzc2FnZVR5cGUuRVJST1IsXG4gICAgICBtZXNzYWdlOiBcIlwiXG4gICAgfSk7XG5cbiAgICAvLyBSZXNldCB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIGluIHRoZSBmb3JtRmllbGRzIGFycmF5XG4gICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICBjYXNlIEVGaWVsZFR5cGUuQVBJOlxuICAgICAgICBjb25zdCBmaWVsZEFwaUNhbGwgPSBmaWVsZCBhcyBURmllbGRBcGlDYWxsO1xuICAgICAgICBmaWVsZEFwaUNhbGwuYXBpLnN0YXR1cy52YWx1ZSA9IEVBcGlTdGF0dXNUeXBlLkRFRkFVTFQ7XG4gICAgICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkQXBpQ2FsbDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBmaWVsZC5mb2N1cyA9IGZhbHNlO1xuICAgICAgICBmaWVsZC5pbnZhbGlkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkRXJyb3JTaG93KGZpZWxkS2V5OiBzdHJpbmcsIG1lc3NhZ2U6IFRNZXNzYWdlKSB7XG4gICAgbGV0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgbGV0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgZmllbGQgPSBoaWdobGlnaHRGb3JtRmllbGRFcnJvcihmaWVsZCwgdHJ1ZSk7XG4gICAgZmllbGQgPSBhcHBlbmRGb3JtRmllbGRNZXNzYWdlKGZpZWxkLCBtZXNzYWdlKTtcblxuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZEVycm9ySGlkZShmaWVsZEtleTogc3RyaW5nLCBtZXNzYWdlOiBUTWVzc2FnZSkge1xuICAgIGxldCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuICAgIGxldCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcbiAgICB9KTtcblxuICAgIGZpZWxkID0gaGlnaGxpZ2h0Rm9ybUZpZWxkRXJyb3IoZmllbGQsIGZhbHNlKTtcbiAgICBmaWVsZCA9IHJlbW92ZUZvcm1GaWVsZE1lc3NhZ2UoZmllbGQsIG1lc3NhZ2UpO1xuXG4gICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGQ7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkTWVzc2FnZVNob3coZmllbGRLZXk6IHN0cmluZywgbWVzc2FnZTogVE1lc3NhZ2UpIHtcbiAgICBsZXQgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICBsZXQgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XG4gICAgfSk7XG5cbiAgICBmaWVsZCA9IGFwcGVuZEZvcm1GaWVsZE1lc3NhZ2UoZmllbGQsIG1lc3NhZ2UpO1xuXG4gICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGQ7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkTWVzc2FnZUhpZGUoZmllbGRLZXk6IHN0cmluZywgbWVzc2FnZTogVE1lc3NhZ2UpIHtcbiAgICBsZXQgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICBsZXQgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XG4gICAgfSk7XG5cbiAgICBmaWVsZCA9IHJlbW92ZUZvcm1GaWVsZE1lc3NhZ2UoZmllbGQsIG1lc3NhZ2UpO1xuXG4gICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGQ7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHNldFZhbHVlKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICBjb25zdCBzb3VyY2VWYWx1ZSA9IGF3YWl0IHNvdXJjZS5nZXRWYWx1ZUZyb21Tb3VyY2UoXG4gICAgICBhY3Rpb24ucHJvcHMudmFsdWUuc291cmNlXG4gICAgKTtcbiAgICBzb3VyY2Uuc2V0VmFsdWVUb1NvdXJjZShhY3Rpb24ucHJvcHMudmFsdWUuZGVzdGluYXRpb24sIHNvdXJjZVZhbHVlKTtcblxuICAgIG9iamVjdC5GSUVMRF9DT05GSUcgPSBzb3VyY2Uub2JqZWN0LkZJRUxEX0NPTkZJRztcblxuICAgIHRoaXMuZm9ybURhdGEgPSBzb3VyY2Uub2JqZWN0LkZPUk1fREFUQTtcbiAgICB0aGlzLnBhdGNoRm9ybUdyb3VwKHRoaXMuZm9ybURhdGEpO1xuICAgIHRoaXMuYWxsRm9ybXNEYXRhID0gc291cmNlLm9iamVjdC5BTExfRk9STVNfREFUQTtcbiAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEgPSBzb3VyY2Uub2JqZWN0LlBSRVZJT1VTX0ZPUk1fREFUQTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgc2V0RmllbGREZWZhdWx0VmFsdWUoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IG5ldyBTb3VyY2Uob2JqZWN0KTtcblxuICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gYXdhaXQgc291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShcbiAgICAgIGFjdGlvbi5wcm9wcy52YWx1ZS5zb3VyY2VcbiAgICApO1xuXG4gICAgc291cmNlLnNldFZhbHVlVG9Tb3VyY2UoXG4gICAgICB7XG4gICAgICAgIGtleTogRVNvdXJjZUtleS5PQkpFQ1QsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgICBrZXk6IFwiRklFTERfQ09ORklHXCIsXG4gICAgICAgICAgICBwYXRoOiBcImRlZmF1bHQudmFsdWUudmFsdWVcIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNvdXJjZVZhbHVlXG4gICAgKTtcbiAgICBzb3VyY2Uuc2V0VmFsdWVUb1NvdXJjZShcbiAgICAgIHtcbiAgICAgICAga2V5OiBFU291cmNlS2V5Lk9CSkVDVCxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICAgIGtleTogXCJGT1JNX0RBVEFcIixcbiAgICAgICAgICAgIHBhdGg6IFN0cmluZyhhY3Rpb24ucHJvcHMuZmllbGRLZXkpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc291cmNlVmFsdWVcbiAgICApO1xuXG4gICAgb2JqZWN0LkZJRUxEX0NPTkZJRyA9IHNvdXJjZS5vYmplY3QuRklFTERfQ09ORklHO1xuICAgIHRoaXMuZm9ybURhdGEgPSBzb3VyY2Uub2JqZWN0LkZPUk1fREFUQTtcbiAgICB0aGlzLnBhdGNoRm9ybUdyb3VwKHRoaXMuZm9ybURhdGEpO1xuICAgIHRoaXMuYWxsRm9ybXNEYXRhID0gc291cmNlLm9iamVjdC5BTExfRk9STVNfREFUQTtcbiAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEgPSBzb3VyY2Uub2JqZWN0LlBSRVZJT1VTX0ZPUk1fREFUQTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgc2V0RHJvcGRvd25PcHRpb25zKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICBsZXQgc291cmNlVmFsdWUgPSBhd2FpdCBzb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKFxuICAgICAgYWN0aW9uLnByb3BzLnZhbHVlLnNvdXJjZVxuICAgICk7XG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcywgXCJvcHRpb25zXCIpKSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aW9uLnByb3BzLm9wdGlvbnMsIFwiYXBwZW5kVG9QYXRoXCIpKSB7XG4gICAgICAgIGxldCBhcHBlbmRUb1BhdGggPSBhd2FpdCBzb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKFxuICAgICAgICAgIGFjdGlvbi5wcm9wcy5vcHRpb25zLmFwcGVuZFRvUGF0aC5zb3VyY2VcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGlzTm90RW1wdHlWYWx1ZShhcHBlbmRUb1BhdGgpKSB7XG4gICAgICAgICAgY29uc3QgYXBwZW5kVG9QYXRoU3RyID0gcmVwbGFjZVN0cmluZyhcbiAgICAgICAgICAgIGFwcGVuZFRvUGF0aC5tYXRjaChcbiAgICAgICAgICAgICAgYCR7YWN0aW9uLnByb3BzLm9wdGlvbnMuYXBwZW5kVG9QYXRoLmZpbHRlclNvdXJjZVZhbHVlfWBcbiAgICAgICAgICAgIClbMF0sXG4gICAgICAgICAgICBcIlteYS16QS1aMC05X11cIixcbiAgICAgICAgICAgIFwiX1wiXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IG9wdGlvbnNQYXRoID0gYCR7YWN0aW9uLnByb3BzLm9wdGlvbnMucGF0aH0ke2FwcGVuZFRvUGF0aFN0cn1gO1xuICAgICAgICAgIHNvdXJjZVZhbHVlID0gZ2V0T2JqZWN0VmFsdWVGcm9tUGF0aChzb3VyY2VWYWx1ZSwgb3B0aW9uc1BhdGgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb3VyY2VWYWx1ZSA9IGdldE9iamVjdFZhbHVlRnJvbVBhdGgoXG4gICAgICAgICAgc291cmNlVmFsdWUsXG4gICAgICAgICAgYWN0aW9uLnByb3BzLm9wdGlvbnMucGF0aFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3VyY2Uuc2V0VmFsdWVUb1NvdXJjZShhY3Rpb24ucHJvcHMudmFsdWUuZGVzdGluYXRpb24sIHNvdXJjZVZhbHVlKTtcblxuICAgIG9iamVjdC5GSUVMRF9DT05GSUcgPSBzb3VyY2Uub2JqZWN0LkZJRUxEX0NPTkZJRztcbiAgICB0aGlzLmZvcm1EYXRhID0gc291cmNlLm9iamVjdC5GT1JNX0RBVEE7XG4gICAgdGhpcy5hbGxGb3Jtc0RhdGEgPSBzb3VyY2Uub2JqZWN0LkFMTF9GT1JNU19EQVRBO1xuICAgIHRoaXMucHJldmlvdXNGb3JtRGF0YSA9IHNvdXJjZS5vYmplY3QuUFJFVklPVVNfRk9STV9EQVRBO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBhcGlDYWxsKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPFRBcGk+IHtcbiAgICBsZXQgYXBpQ29uZmlnID0gdGhpcy5mb3JtQ29uZmlnLmFwaXNbYWN0aW9uLnByb3BzLmZvcm1BcGlLZXldO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmhhbmRsZUFwaUNhbGwoYXBpQ29uZmlnKTtcblxuICAgIGFwaUNvbmZpZyA9IHJlc3BvbnNlLmFwaTtcblxuICAgIHRoaXMuZm9ybUNvbmZpZyA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgdGhpcy5mb3JtQ29uZmlnLFxuICAgICAgYGFwaXMuJHthY3Rpb24ucHJvcHMuZm9ybUFwaUtleX1gLFxuICAgICAgYXBpQ29uZmlnXG4gICAgKTtcblxuICAgIHRoaXMuZm9ybURhdGEgPSBtZXJnZU9iamVjdHModGhpcy5mb3JtRGF0YSwge1xuICAgICAgW2FjdGlvbi5wcm9wcy5mb3JtQXBpS2V5XTogYXBpQ29uZmlnLnJlc3BvbnNlLnZhbHVlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXBpQ29uZmlnO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBmaWVsZEFwaUNhbGwoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc2hvd0FwaUxvYWRlcigpO1xuXG4gICAgY29uc3QgYXBpQ29uZmlnID0gYXdhaXQgdGhpcy5hcGlDYWxsKGFjdGlvbiwgb2JqZWN0KTtcblxuICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBmaWVsZE11bHRpcGxlQXBpQ2FsbHMoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGVudHJ5cG9pbnRBcGlLZXkgPSBhY3Rpb24ucHJvcHMuYXBpS2V5O1xuICAgIGxldCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcbiAgICBjb25zdCBlbmRwb2ludHMgPSBmaWVsZC5hcGkuZW5kcG9pbnRzO1xuICAgIGNvbnN0IG5leHRBcGlJbmRleCA9IGVuZHBvaW50cy5maW5kSW5kZXgoXG4gICAgICAoYXBpOiBUQXBpRW5kcG9pbnQpID0+IGFwaS5hcGlLZXkgPT0gZW50cnlwb2ludEFwaUtleVxuICAgICk7XG4gICAgY29uc3QgYXBpQ29uZmlnID0gZW5kcG9pbnRzW25leHRBcGlJbmRleF07XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaGFuZGxlRmllbGRBcGlDYWxsKGZpZWxkLCBhcGlDb25maWcpO1xuXG4gICAgZmllbGQgPSByZXNwb25zZS5maWVsZDtcbiAgICBmaWVsZC5hcGkuZW5kcG9pbnRzW25leHRBcGlJbmRleF0gPSByZXNwb25zZS5hcGk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGZpZWxkTXVsdGlwbGVBcGlDYWxsc0VuZChhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGFjdGlvbi5wcm9wcy5maWVsZEtleSk7XG4gICAgbGV0IG11bHRpcGxlQXBpQ2FsbFJlc3BvbnNlcyA9IHt9O1xuICAgIGZpZWxkLmFwaS5lbmRwb2ludHMubWFwKChhcGk6IFRBcGlFbmRwb2ludCkgPT4ge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFwaS5yZXNwb25zZSwgXCJ2YWx1ZVwiKSlcbiAgICAgICAgbXVsdGlwbGVBcGlDYWxsUmVzcG9uc2VzID0gc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICAgICAgbXVsdGlwbGVBcGlDYWxsUmVzcG9uc2VzLFxuICAgICAgICAgIGAke2FwaS5hcGlLZXl9YCxcbiAgICAgICAgICBhcGkucmVzcG9uc2UudmFsdWVcbiAgICAgICAgKTtcbiAgICB9KTtcbiAgICB0aGlzLmZvcm1EYXRhID0ge1xuICAgICAgLi4udGhpcy5mb3JtRGF0YSxcbiAgICAgIFtmaWVsZC5rZXldOiBtdWx0aXBsZUFwaUNhbGxSZXNwb25zZXNcbiAgICB9O1xuICAgIHRoaXMucGF0Y2hGb3JtR3JvdXAodGhpcy5mb3JtRGF0YSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHRhc2tBcGlDYWxsKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgIGNvbnN0IGFwaUNvbmZpZyA9IGF3YWl0IHRoaXMuYXBpQ2FsbChhY3Rpb24sIG9iamVjdCk7XG5cbiAgICB0aGlzLnRhc2tEYXRhID0gbWVyZ2VPYmplY3RzKHRoaXMudGFza0RhdGEsIHtcbiAgICAgIFthY3Rpb24ucHJvcHMuZm9ybUFwaUtleV06IGFwaUNvbmZpZy5yZXNwb25zZS52YWx1ZVxuICAgIH0pO1xuXG4gICAgdGhpcy53YWl0aW5nRm9yQ2hhbmdlcyA9IGZhbHNlO1xuXG4gICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHRhc2tNdWx0aXBsZUFwaUNhbGxzKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgIGxldCBtdWx0aXBsZUFwaUNvbmZpZyA9IHRoaXMuZm9ybUNvbmZpZy5hcGlzW2FjdGlvbi5wcm9wcy5mb3JtQXBpS2V5XTtcblxuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3Rpb24ucHJvcHMsIFwiYXBpS2V5XCIpKSB7XG4gICAgICBjb25zdCBlbnRyeXBvaW50QXBpS2V5ID0gYWN0aW9uLnByb3BzLmFwaUtleTtcbiAgICAgIGNvbnN0IGVuZHBvaW50cyA9IG11bHRpcGxlQXBpQ29uZmlnLmVuZHBvaW50cztcbiAgICAgIGNvbnN0IG5leHRBcGlJbmRleCA9IGVuZHBvaW50cy5maW5kSW5kZXgoXG4gICAgICAgIChhcGk6IFRBcGlFbmRwb2ludCkgPT4gYXBpLmFwaUtleSA9PSBlbnRyeXBvaW50QXBpS2V5XG4gICAgICApO1xuICAgICAgY29uc3QgYXBpQ29uZmlnID0gZW5kcG9pbnRzW25leHRBcGlJbmRleF07XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5oYW5kbGVBcGlDYWxsKGFwaUNvbmZpZyk7XG5cbiAgICAgIG11bHRpcGxlQXBpQ29uZmlnLmVuZHBvaW50c1tuZXh0QXBpSW5kZXhdID0gcmVzcG9uc2UuYXBpO1xuXG4gICAgICB0aGlzLmZvcm1Db25maWcgPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgdGhpcy5mb3JtQ29uZmlnLFxuICAgICAgICBgYXBpcy4ke2FjdGlvbi5wcm9wcy5mb3JtQXBpS2V5fWAsXG4gICAgICAgIG11bHRpcGxlQXBpQ29uZmlnXG4gICAgICApO1xuXG4gICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYXBpcyA9IG5ldyBBcGlzKFxuICAgICAgICB7XG4gICAgICAgICAgRk9STV9DT05GSUc6IHRoaXMuZm9ybUNvbmZpZyxcbiAgICAgICAgICBBUElfQ09ORklHOiBtdWx0aXBsZUFwaUNvbmZpZyxcbiAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhXG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICApO1xuXG4gICAgICBhd2FpdCBhcGlzLmNhbGxOZXh0QXBpKG11bHRpcGxlQXBpQ29uZmlnLmVudHJ5cG9pbnQpO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgdGFza011bHRpcGxlQXBpQ2FsbHNFbmQoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG11bHRpcGxlQXBpQ29uZmlnID0gdGhpcy5mb3JtQ29uZmlnLmFwaXNbYWN0aW9uLnByb3BzLmZvcm1BcGlLZXldO1xuXG4gICAgbGV0IG11bHRpcGxlQXBpQ2FsbFJlc3BvbnNlcyA9IHt9O1xuICAgIG11bHRpcGxlQXBpQ29uZmlnLmVuZHBvaW50cy5tYXAoKGFwaTogVEFwaUVuZHBvaW50KSA9PiB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYXBpLnJlc3BvbnNlLCBcInZhbHVlXCIpKVxuICAgICAgICBtdWx0aXBsZUFwaUNhbGxSZXNwb25zZXMgPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgICBtdWx0aXBsZUFwaUNhbGxSZXNwb25zZXMsXG4gICAgICAgICAgYCR7YXBpLmFwaUtleX1gLFxuICAgICAgICAgIGFwaS5yZXNwb25zZS52YWx1ZVxuICAgICAgICApO1xuICAgIH0pO1xuICAgIHRoaXMudGFza0RhdGEgPSB7XG4gICAgICAuLi50aGlzLnRhc2tEYXRhLFxuICAgICAgW2FjdGlvbi5wcm9wcy5mb3JtQXBpS2V5XTogbXVsdGlwbGVBcGlDYWxsUmVzcG9uc2VzXG4gICAgfTtcblxuICAgIHRoaXMud2FpdGluZ0ZvckNoYW5nZXMgPSBmYWxzZTtcblxuICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICB9XG5cbiAgZGlhbG9nUmVmOiBhbnkgPSB1bmRlZmluZWQ7XG4gIEBsb2dNZXRob2RcbiAgZGlhbG9nU2hvdyhvcHRpb25zOiBhbnkpIHtcbiAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZVxuICAgICAgLm9wZW4ob3B0aW9ucz8uaHRtbCwge1xuICAgICAgICBjbG9zZWFibGU6IHRydWUsXG4gICAgICAgIGRpc21pc3NpYmxlOiB0cnVlLFxuICAgICAgICBsYWJlbDogb3B0aW9ucz8ubGFiZWwsXG4gICAgICAgIHNpemU6IG9wdGlvbnM/LnNpemUgPz8gXCJzXCIsXG4gICAgICAgIGRhdGE6IHsgYnV0dG9uOiBvcHRpb25zPy5idXR0b24gfVxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge31cbiAgICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBkaWFsb2dIaWRlKCkge1xuICAgIGlmICh0aGlzLmRpYWxvZ1JlZikge1xuICAgICAgdGhpcy5kaWFsb2dSZWYuY29tcGxldGUoKTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHJlZGlyZWN0VG9VcmwoYWN0aW9uOiBUQWN0aW9uKSB7XG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcywgXCJ1cmxcIikpIHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3Rpb24ucHJvcHMudXJsLCBcInVybFwiKSkge1xuICAgICAgICBsZXQgdGltZW91dCA9IDIwMDA7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhhY3Rpb24ucHJvcHMudXJsLCBcInRpbWVvdXRcIikgJiZcbiAgICAgICAgICB0eXBlb2YgYWN0aW9uLnByb3BzLnVybC50aW1lb3V0ID09IFwibnVtYmVyXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGltZW91dCA9IGFjdGlvbi5wcm9wcy51cmwudGltZW91dDtcbiAgICAgICAgfVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aW9uLnByb3BzLnVybCwgXCJ0YXJnZXRcIikpIHtcbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKGFjdGlvbi5wcm9wcy51cmwudXJsLCBhY3Rpb24ucHJvcHMudXJsLnRhcmdldCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKGFjdGlvbi5wcm9wcy51cmwudXJsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHRpbWVvdXQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgcGF0Y2hGaWVsZENvbnRyb2xWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2tleV0ucGF0Y2hWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBzZXRGaWVsZENvbnRyb2xWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2tleV0uc2V0VmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgcGF0Y2hGb3JtR3JvdXAoZm9ybURhdGE6IGFueSkge1xuICAgIGlmIChpc1VuZGVmaW5lZCh0aGlzLmZvcm1Hcm91cCkgfHwgaXNVbmRlZmluZWQoZm9ybURhdGEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGZvcm1Hcm91cCBvciBmb3JtRGF0YSBpcyAndW5kZWZpbmVkJy5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGZvcm1EYXRhSW5Ld2lrVUlGb3JtYXQgPSB7fTtcbiAgICAgIGZvciAobGV0IGZpZWxkS2V5IGluIGZvcm1EYXRhKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZmllbGQpICYmICFpc051bGwoZmllbGQpKSB7XG4gICAgICAgICAgZm9ybURhdGFJbkt3aWtVSUZvcm1hdFtmaWVsZEtleV0gPVxuICAgICAgICAgICAgY29udmVydEZvcm1GaWVsZFZhbHVlVG9Ld2lrVUlGb3JtYXQoZmllbGQsIGZvcm1EYXRhW2ZpZWxkS2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoZm9ybURhdGFJbkt3aWtVSUZvcm1hdCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaXNGaWVsZFZhbGlkKGZpZWxkS2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGRLZXldLnZhbGlkO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBpc0ZpZWxkRW5hYmxlZChmaWVsZEtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkS2V5XS5lbmFibGVkO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBnZXRGb3JtR3JvdXBSYXdWYWx1ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHNob3dQcmV2aWV3KHByZXZpZXdQcm9wZXJ0aWVzOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnByZXZpZXdQcm9wZXJ0aWVzID0gbWVyZ2VPYmplY3RzKFxuICAgICAgdGhpcy5wcmV2aWV3UHJvcGVydGllcyxcbiAgICAgIHByZXZpZXdQcm9wZXJ0aWVzXG4gICAgKTtcblxuICAgIGlmIChcbiAgICAgIGlzRW1wdHlWYWx1ZSh0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLmlmcmFtZS5zcmMpICYmXG4gICAgICBpc0VtcHR5VmFsdWUodGhpcy5wcmV2aWV3UHJvcGVydGllcy5odG1sLmJlZm9yZSkgJiZcbiAgICAgIGlzRW1wdHlWYWx1ZSh0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLmh0bWwuYWZ0ZXIpXG4gICAgKSB7XG4gICAgICB0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLnVuYXZhaWxhYmxlID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcmV2aWV3UHJvcGVydGllcy51bmF2YWlsYWJsZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc2V0UHJldmlld1Byb3BlcnRpZXMgPSAoKSA9PiB7XG4gICAgICB0aGlzLnByZXZpZXdQcm9wZXJ0aWVzID0ge1xuICAgICAgICBodG1sOiB7XG4gICAgICAgICAgYmVmb3JlOiBcIlwiLFxuICAgICAgICAgIGJlZm9yZVN0eWxlczogXCJcIixcbiAgICAgICAgICBhZnRlcjogXCJcIixcbiAgICAgICAgICBhZnRlclN0eWxlczogXCJcIlxuICAgICAgICB9LFxuICAgICAgICBpZnJhbWU6IHtcbiAgICAgICAgICBzcmM6IFwiXCIsXG4gICAgICAgICAgdGl0bGU6IFwiXCJcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogXCJkaWFsb2dcIixcbiAgICAgICAgcG9wdXBGb3JtS2V5OiBcIlwiLFxuICAgICAgICB0aXRsZTogXCJcIixcbiAgICAgICAgc2l6ZTogXCJhdXRvXCIsXG4gICAgICAgIHVuYXZhaWxhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2hvd0RpYWxvZyA9ICgpID0+IHtcbiAgICAgIHRoaXMucHJldmlld0RpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZVxuICAgICAgICAub3Blbih0aGlzLmRpYWxvZywge1xuICAgICAgICAgIGNsb3NlYWJsZTogdHJ1ZSxcbiAgICAgICAgICBkaXNtaXNzaWJsZTogdHJ1ZSxcbiAgICAgICAgICBzaXplOiB0aGlzLnByZXZpZXdQcm9wZXJ0aWVzPy5zaXplIHx8IFwiYXV0b1wiLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnByZXZpZXdEaWFsb2dSZWYuY29tcGxldGUoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICByZXNldFByZXZpZXdQcm9wZXJ0aWVzKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICAgICAgcmVzZXRQcmV2aWV3UHJvcGVydGllcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNob3dQcmV2aWV3ID0gKCkgPT4ge1xuICAgICAgdGhpcy5wcmV2aWV3RGlhbG9nUmVmID0gdGhpcy5wcmV2aWV3RGlhbG9nU2VydmljZVxuICAgICAgICAub3Blbih0aGlzLnByZXZpZXcgfHwgXCJcIilcbiAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICAgIHJlc2V0UHJldmlld1Byb3BlcnRpZXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBzd2l0Y2ggKHRoaXMucHJldmlld1Byb3BlcnRpZXMudHlwZSkge1xuICAgICAgY2FzZSBcImRpYWxvZ1wiOlxuICAgICAgICBzaG93RGlhbG9nKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInBvcHVwXCI6XG4gICAgICAgIHNob3dQcmV2aWV3KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgc2hvd0RpYWxvZygpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHNob3dFcnJvclByZXZpZXcocHJldmlld1Byb3BlcnRpZXM6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2hvd1ByZXZpZXcoe1xuICAgICAgaHRtbDoge1xuICAgICAgICBhZnRlcjogYDxkaXYgc3R5bGU9XFxcInBhZGRpbmctYm90dG9tOjAuMjVyZW07cGFkZGluZy10b3A6IDAuMjVyZW07cG9zaXRpb246IGFic29sdXRlO21hcmdpbi10b3A6IGNhbGMoNTB2aCk7Zm9udC1zaXplOiAxLjRyZW07YmFja2dyb3VuZDogd2hpdGU7cGFkZGluZzogMnJlbTtib3JkZXItcmFkaXVzOiAxcmVtO2JveC1zaGFkb3c6IDBweCAwcHggMTBweCAtM3B4IGJsYWNrO292ZXJmbG93OiBhdXRvO2hlaWdodDogZml0LWNvbnRlbnQ7bWF4LWhlaWdodDogOTB2aDsgd2lkdGg6IDcwdnc7IG1hcmdpbi1sZWZ0OiBjYWxjKDE1dncpOyBsaW5lLWhlaWdodDogMnJlbTtcXFwiPkVycm9yOiAke3ByZXZpZXdQcm9wZXJ0aWVzLm1lc3NhZ2UubWVzc2FnZX08L2Rpdj5gXG4gICAgICB9LFxuICAgICAgdHlwZTogXCJwb3B1cFwiXG4gICAgfSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHNob3dQb3B1cEZvcm0oXG4gICAgcG9wdXBGb3JtS2V5OiBzdHJpbmcsXG4gICAgcG9wdXBUeXBlOiBcIkRJQUxPR1wiIHwgXCJQT1BVUFwiID0gXCJESUFMT0dcIlxuICApOiB2b2lkIHtcbiAgICBjb25zdCBwb3B1cEZvcm1Db25maWcgPSB0aGlzLmZvcm1Db25maWcucG9wdXBGb3Jtc1twb3B1cEZvcm1LZXldO1xuXG4gICAgdGhpcy5vbkFjdGlvblNob3dQb3B1cEZvcm0uZW1pdCh7XG4gICAgICBhY3RpdmVGb3JtRGF0YTogbWVyZ2VPYmplY3RzKHRoaXMuZm9ybURhdGEsIHRoaXMudGFza0RhdGEpLFxuICAgICAgcG9wdXBGb3JtQ29uZmlnOiBwb3B1cEZvcm1Db25maWcsXG4gICAgICBwb3B1cFR5cGU6IHBvcHVwVHlwZVxuICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhbGVydFNob3codHlwZTogVHVpTm90aWZpY2F0aW9uLCBtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmFsZXJ0U2VydmljZVxuICAgICAgLm9wZW4oYCR7bWVzc2FnZX1gLCB7XG4gICAgICAgIHN0YXR1czpcbiAgICAgICAgICB0eXBlID09PSBcImVycm9yXCJcbiAgICAgICAgICAgID8gVHVpTm90aWZpY2F0aW9uLkVycm9yXG4gICAgICAgICAgICA6IHR5cGUgPT09IFwid2FybmluZ1wiXG4gICAgICAgICAgICA/IFR1aU5vdGlmaWNhdGlvbi5XYXJuaW5nXG4gICAgICAgICAgICA6IHR5cGUgPT09IFwic3VjY2Vzc1wiXG4gICAgICAgICAgICA/IFR1aU5vdGlmaWNhdGlvbi5TdWNjZXNzXG4gICAgICAgICAgICA6IFR1aU5vdGlmaWNhdGlvbi5JbmZvXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIGNvbXBsZXRlKCkge31cbiAgICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyB0YWtlQWN0aW9uT25GaWVsZEdyb3VwKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpIHtcbiAgICBzd2l0Y2ggKGFjdGlvbi5rZXkpIHtcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9HUk9VUF9ISURFOlxuICAgICAgICB0aGlzLmZpZWxkR3JvdXBIaWRlKGFjdGlvbi5wcm9wcy5ncm91cEtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0dST1VQX1NIT1c6XG4gICAgICAgIHRoaXMuZmllbGRHcm91cFNob3coYWN0aW9uLnByb3BzLmdyb3VwS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfR1JPVVBfRU5BQkxFOlxuICAgICAgICB0aGlzLmZpZWxkR3JvdXBFbmFibGUoYWN0aW9uLnByb3BzLmdyb3VwS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfR1JPVVBfRElTQUJMRTpcbiAgICAgICAgdGhpcy5maWVsZEdyb3VwRGlzYWJsZShhY3Rpb24ucHJvcHMuZ3JvdXBLZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgdGFrZUFjdGlvbihhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KSB7XG4gICAgc3dpdGNoIChhY3Rpb24ua2V5KSB7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfSElERTpcbiAgICAgICAgdGhpcy5maWVsZEhpZGUoYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfU0hPVzpcbiAgICAgICAgdGhpcy5maWVsZFNob3coYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfRElTQUJMRTpcbiAgICAgICAgdGhpcy5maWVsZERpc2FibGUoYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfRU5BQkxFOlxuICAgICAgICB0aGlzLmZpZWxkRW5hYmxlKGFjdGlvbi5wcm9wcy5maWVsZEtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX1JFU0VUOlxuICAgICAgICB0aGlzLmZpZWxkUmVzZXQoYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfRVJST1JfU0hPVzpcbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcy5tZXNzYWdlLCBcInNvdXJjZVwiKSkge1xuICAgICAgICAgIGNvbnN0IGZpZWxkRXJyb3JTaG93X1NvdXJjZSA9IG5ldyBTb3VyY2Uob2JqZWN0KTtcblxuICAgICAgICAgIGxldCBmaWVsZEVycm9yU2hvd1NvdXJjZVZhbHVlID1cbiAgICAgICAgICAgIGF3YWl0IGZpZWxkRXJyb3JTaG93X1NvdXJjZS5nZXRWYWx1ZUZyb21Tb3VyY2UoXG4gICAgICAgICAgICAgIGFjdGlvbi5wcm9wcy5tZXNzYWdlLnNvdXJjZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBmaWVsZEVycm9yU2hvd1NvdXJjZVZhbHVlID09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgICAgIHR5cGVvZiBmaWVsZEVycm9yU2hvd1NvdXJjZVZhbHVlID09IFwibnVtYmVyXCJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGZpZWxkRXJyb3JTaG93U291cmNlVmFsdWUgPSBTdHJpbmcoZmllbGRFcnJvclNob3dTb3VyY2VWYWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpZWxkRXJyb3JTaG93U291cmNlVmFsdWUgPSBcIlwiO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFjdGlvbiA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgXCJwcm9wcy5tZXNzYWdlLm1lc3NhZ2VcIixcbiAgICAgICAgICAgIGZpZWxkRXJyb3JTaG93U291cmNlVmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmllbGRFcnJvclNob3coYWN0aW9uLnByb3BzLmZpZWxkS2V5LCBhY3Rpb24ucHJvcHMubWVzc2FnZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0VSUk9SX0hJREU6XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3Rpb24ucHJvcHMubWVzc2FnZSwgXCJzb3VyY2VcIikpIHtcbiAgICAgICAgICBjb25zdCBmaWVsZEVycm9ySGlkZV9Tb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICAgICAgICBsZXQgZmllbGRFcnJvckhpZGVTb3VyY2VWYWx1ZSA9XG4gICAgICAgICAgICBhd2FpdCBmaWVsZEVycm9ySGlkZV9Tb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKFxuICAgICAgICAgICAgICBhY3Rpb24ucHJvcHMubWVzc2FnZS5zb3VyY2VcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgZmllbGRFcnJvckhpZGVTb3VyY2VWYWx1ZSA9PSBcInN0cmluZ1wiIHx8XG4gICAgICAgICAgICB0eXBlb2YgZmllbGRFcnJvckhpZGVTb3VyY2VWYWx1ZSA9PSBcIm51bWJlclwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmaWVsZEVycm9ySGlkZVNvdXJjZVZhbHVlID0gU3RyaW5nKGZpZWxkRXJyb3JIaWRlU291cmNlVmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWVsZEVycm9ySGlkZVNvdXJjZVZhbHVlID0gXCJcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhY3Rpb24gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIFwicHJvcHMubWVzc2FnZS5tZXNzYWdlXCIsXG4gICAgICAgICAgICBmaWVsZEVycm9ySGlkZVNvdXJjZVZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpZWxkRXJyb3JIaWRlKGFjdGlvbi5wcm9wcy5maWVsZEtleSwgYWN0aW9uLnByb3BzLm1lc3NhZ2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9NRVNTQUdFX1NIT1c6XG4gICAgICAgIHRoaXMuZmllbGRNZXNzYWdlU2hvdyhhY3Rpb24ucHJvcHMuZmllbGRLZXksIGFjdGlvbi5wcm9wcy5tZXNzYWdlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfTUVTU0FHRVNfSElERTpcbiAgICAgICAgdGhpcy5maWVsZE1lc3NhZ2VIaWRlKGFjdGlvbi5wcm9wcy5maWVsZEtleSwgYWN0aW9uLnByb3BzLm1lc3NhZ2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5TRVRfVkFMVUU6XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0VmFsdWUoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5TRVRfRklFTERfREVGQVVMVF9WQUxVRTpcbiAgICAgICAgYXdhaXQgdGhpcy5zZXRGaWVsZERlZmF1bHRWYWx1ZShhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNFVF9EUk9QRE9XTl9PUFRJT05TOlxuICAgICAgICBhd2FpdCB0aGlzLnNldERyb3Bkb3duT3B0aW9ucyhhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkhBTkRMRV9DT05ORUNURURfRUxFTUVOVFM6XG4gICAgICAgIHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudHMoXG4gICAgICAgICAgeyBrZXk6IGFjdGlvbi5wcm9wcy5maWVsZEtleSB9LFxuICAgICAgICAgIFwiT05fQUNUSU9OXCJcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuQVBJX0NBTEw6XG4gICAgICAgIGF3YWl0IHRoaXMuZmllbGRBcGlDYWxsKGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuQVBJX0NBTExfTVVMVElQTEU6XG4gICAgICAgIGF3YWl0IHRoaXMuZmllbGRNdWx0aXBsZUFwaUNhbGxzKGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuQVBJX0NBTExfTVVMVElQTEVfRU5EOlxuICAgICAgICBhd2FpdCB0aGlzLmZpZWxkTXVsdGlwbGVBcGlDYWxsc0VuZChhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlRBU0tfQVBJX0NBTEw6XG4gICAgICAgIGF3YWl0IHRoaXMudGFza0FwaUNhbGwoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5UQVNLX0FQSV9DQUxMX01VTFRJUExFOlxuICAgICAgICBhd2FpdCB0aGlzLnRhc2tNdWx0aXBsZUFwaUNhbGxzKGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuVEFTS19BUElfQ0FMTF9NVUxUSVBMRV9FTkQ6XG4gICAgICAgIGF3YWl0IHRoaXMudGFza011bHRpcGxlQXBpQ2FsbHNFbmQoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5SRURJUkVDVF9UT19VUkw6XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3Rpb24ucHJvcHMudXJsLCBcInNvdXJjZVwiKSkge1xuICAgICAgICAgIGNvbnN0IHJlZGlyZWN0VG9VcmxfU291cmNlID0gbmV3IFNvdXJjZShvYmplY3QpO1xuXG4gICAgICAgICAgbGV0IHJlZGlyZWN0VG9VcmxTb3VyY2VWYWx1ZSA9XG4gICAgICAgICAgICBhd2FpdCByZWRpcmVjdFRvVXJsX1NvdXJjZS5nZXRWYWx1ZUZyb21Tb3VyY2UoXG4gICAgICAgICAgICAgIGFjdGlvbi5wcm9wcy51cmwuc291cmNlXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKGlzRW1wdHlTdHJpbmcocmVkaXJlY3RUb1VybFNvdXJjZVZhbHVlKSkge1xuICAgICAgICAgICAgcmVkaXJlY3RUb1VybFNvdXJjZVZhbHVlID0gXCJcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhY3Rpb24gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIFwicHJvcHMudXJsLnVybFwiLFxuICAgICAgICAgICAgcmVkaXJlY3RUb1VybFNvdXJjZVZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlZGlyZWN0VG9VcmwoYWN0aW9uKTtcbiAgICAgIGNhc2UgRUFjdGlvbktleS5QUkVWSUVXX0RJQUxPR19TSE9XOlxuICAgICAgICB0aGlzLnNob3dQcmV2aWV3KGFjdGlvbi5wcm9wcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlBSRVZJRVdfRVJST1JfU0hPVzpcbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcy5tZXNzYWdlLCBcInNvdXJjZVwiKSkge1xuICAgICAgICAgIGNvbnN0IHByZXZpZXdFcnJvclNob3dfU291cmNlID0gbmV3IFNvdXJjZShvYmplY3QpO1xuXG4gICAgICAgICAgbGV0IHByZXZpZXdFcnJvclNob3dTb3VyY2VWYWx1ZSA9XG4gICAgICAgICAgICBhd2FpdCBwcmV2aWV3RXJyb3JTaG93X1NvdXJjZS5nZXRWYWx1ZUZyb21Tb3VyY2UoXG4gICAgICAgICAgICAgIGFjdGlvbi5wcm9wcy5tZXNzYWdlLnNvdXJjZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBwcmV2aWV3RXJyb3JTaG93U291cmNlVmFsdWUgPT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICAgICAgdHlwZW9mIHByZXZpZXdFcnJvclNob3dTb3VyY2VWYWx1ZSA9PSBcIm51bWJlclwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwcmV2aWV3RXJyb3JTaG93U291cmNlVmFsdWUgPSBTdHJpbmcocHJldmlld0Vycm9yU2hvd1NvdXJjZVZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJldmlld0Vycm9yU2hvd1NvdXJjZVZhbHVlID0gXCJcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhY3Rpb24gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIFwicHJvcHMubWVzc2FnZS5tZXNzYWdlXCIsXG4gICAgICAgICAgICBwcmV2aWV3RXJyb3JTaG93U291cmNlVmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2hvd0Vycm9yUHJldmlldyhhY3Rpb24ucHJvcHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5QT1BVUF9GT1JNX1NIT1c6XG4gICAgICAgIHRoaXMuc2hvd1BvcHVwRm9ybShcbiAgICAgICAgICBhY3Rpb24ucHJvcHMucG9wdXBGb3JtS2V5LFxuICAgICAgICAgIGFjdGlvbi5wcm9wcz8ucG9wdXBUeXBlID8/IFwiRElBTE9HXCJcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuU1RPUF9XQUlUSU5HOlxuICAgICAgICB0aGlzLndhaXRpbmdGb3JDaGFuZ2VzID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5Lk5PVElGSUNBVElPTl9FUlJPUl9TSE9XOlxuICAgICAgICB0aGlzLnRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKHRydWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5OT1RJRklDQVRJT05fRVJST1JfSElERTpcbiAgICAgICAgdGhpcy50b2dnbGVFcnJvck5vdGlmaWNhdGlvbihmYWxzZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlJFU1VNRV9UQVNLX0VYRUNVVElPTjpcbiAgICAgICAgdGhpcy5zdG9wVGFza0V4ZWN1dGlvbiA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5TVE9QX1RBU0tfRVhFQ1VUSU9OOlxuICAgICAgICB0aGlzLnN0b3BUYXNrRXhlY3V0aW9uID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRElBTE9HX1NIT1c6XG4gICAgICAgIHRoaXMuZGlhbG9nU2hvdyh7XG4gICAgICAgICAgaHRtbDogYWN0aW9uLnByb3BzPy5odG1sLFxuICAgICAgICAgIGxhYmVsOiBhY3Rpb24ucHJvcHM/LmxhYmVsLFxuICAgICAgICAgIHNpemU6IGFjdGlvbi5wcm9wcz8uc2l6ZSxcbiAgICAgICAgICBidXR0b246IGFjdGlvbi5wcm9wcz8uYnV0dG9uXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5ESUFMT0dfSElERTpcbiAgICAgICAgdGhpcy5kaWFsb2dIaWRlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNBVkVfRk9STTpcbiAgICAgICAgdGhpcy5oYW5kbGVPbkNsaWNrU2F2ZUZvcm0odW5kZWZpbmVkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuQUxFUlRfU0hPVzpcbiAgICAgICAgdGhpcy5hbGVydFNob3coYWN0aW9uLnByb3BzLnR5cGUsIGFjdGlvbi5wcm9wcy5tZXNzYWdlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJrd2lraWQtZm9ybS1jb250YWluZXJcIlxuICAqbmdJZj1cIiFsb2FkaW5nXCJcbj5cbiAgPGRpdlxuICAgIGlkPVwidWYtZm9ybS1maWVsZHMtaGVhZGVyLWNvbnRhaW5lclwiXG4gICAgKm5nSWY9XCJcbiAgICAgICFmb3JtQ29uZmlnLnByb3BlcnRpZXM/LmhlYWRlcj8udGl0bGU/LmhpZGRlbiB8fFxuICAgICAgIWZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyPy5zdGVwcz8uaGlkZGVuIHx8XG4gICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXI/LmJhY2tCdXR0b24/LmhpZGRlblxuICAgIFwiXG4gID5cbiAgICA8aW1nXG4gICAgICBpZD1cInVmLWhlYWRlci1sb2dvXCJcbiAgICAgICpuZ0lmPVwiIWZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyPy5sb2dvPy5oaWRkZW4gJiYgaXNNb2JpbGVWaWV3XCJcbiAgICAgIFtzcmNdPVwiZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXI/LmxvZ28/LnNyY1wiXG4gICAgICBbYWx0XT1cImZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyPy5sb2dvPy5hbHRcIlxuICAgIC8+XG4gICAgPGRpdiBpZD1cInVmLWZvcm0tZmllbGRzLWhlYWRlci1tYWluXCI+XG4gICAgICA8ZGl2IGlkPVwidWYtZm9ybS1maWVsZHMtaGVhZGVyLWxlZnRcIj5cbiAgICAgICAgPGt3aWt1aS1idXR0b25cbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgIWZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyLmJhY2tCdXR0b24uaGlkZGVuICYmIGlzTW9iaWxlVmlld1xuICAgICAgICAgIFwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImJhY2tCdXR0b24uZGlzYWJsZWRcIlxuICAgICAgICAgIFtzaG93TG9hZGVyXT1cImJhY2tCdXR0b24uc2hvd0xvYWRlclwiXG4gICAgICAgICAgYXBwZWFyYW5jZT1cIm1vbm9cIlxuICAgICAgICAgIGljb249XCJ0dWlJY29uQXJyb3dMZWZ0XCJcbiAgICAgICAgICBzaGFwZT1cInJvdW5kZWRcIlxuICAgICAgICAgIChvbkNsaWNrKT1cIlxuICAgICAgICAgICAgaGFuZGxlT25DbGlja0dvQmFjayhcbiAgICAgICAgICAgICAgJGV2ZW50LFxuICAgICAgICAgICAgICBmb3JtQ29uZmlnLnByb3BlcnRpZXM/LmhlYWRlci5iYWNrQnV0dG9uLm1vZGVcbiAgICAgICAgICAgIClcbiAgICAgICAgICBcIlxuICAgICAgICA+PC9rd2lrdWktYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGlkPVwidWYtZm9ybS1maWVsZHMtaGVhZGVyLXJpZ2h0XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBpZD1cInVmLWZvcm0tZmllbGRzLXRpdGxlXCJcbiAgICAgICAgICAqbmdJZj1cIiFmb3JtQ29uZmlnLnByb3BlcnRpZXM/LmhlYWRlci50aXRsZS5oaWRkZW5cIlxuICAgICAgICAgID57eyBmb3JtQ29uZmlnLnByb3BlcnRpZXM/LmhlYWRlci50aXRsZS5sYWJlbCB9fTwvZGl2XG4gICAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGlkPVwidWYtZm9ybS1maWVsZHMtc3RlcHNcIlxuICAgICAgICAgICpuZ0lmPVwiIWZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyLnN0ZXBzLmhpZGRlblwiXG4gICAgICAgICAgPlN0ZXAge3sgZm9ybUNvbmZpZy5zZXF1ZW5jZU5vIH19IG9mXG4gICAgICAgICAge3sgZm9ybUNvbmZpZy5mb3Jtc0xpc3RMZW5ndGggfX08L2RpdlxuICAgICAgICA+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8aHJcbiAgICAgICpuZ0lmPVwiXG4gICAgICAgICFmb3JtQ29uZmlnLnByb3BlcnRpZXM/LmhlYWRlci50aXRsZS5oaWRkZW4gfHxcbiAgICAgICAgIWZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyLnN0ZXBzLmhpZGRlbiB8fFxuICAgICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXIuYmFja0J1dHRvbi5oaWRkZW5cbiAgICAgIFwiXG4gICAgLz5cbiAgPC9kaXY+XG4gIDxmb3JtXG4gICAgY2xhc3M9XCJrd2lraWQtZm9ybSBzaG93XCJcbiAgICBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiXG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdGb3I9XCJcbiAgICAgICAgbGV0IGZpZWxkIG9mIGZvcm1GaWVsZHM7XG4gICAgICAgIGxldCBpID0gaW5kZXg7XG4gICAgICAgIHRyYWNrQnk6IGdldFVuaXF1ZUlkZW50aWZpZXJcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZmllbGQudHlwZVwiPlxuICAgICAgICA8IS0tIEhUTUwgQ29udGVudCAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2h0bWwnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IFtpbm5lckh0bWxdPVwiZmllbGQuaHRtbCB8IGt3aWt1aVNhZmVIdG1sXCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIEZvcm0gVGl0bGUgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0aXRsZSdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInRpdGxlXCJcbiAgICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAge3sgZmllbGQubGFiZWwgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGt3aWt1aS1idXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZD8ucmVzZXRcIlxuICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwid2hpdGVibG9ja1wiXG4gICAgICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICAgICAgbGFiZWw9XCJSZXNldFwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cImhhbmRsZU9uQ2xpY2tSZXNldEZvcm1GaWVsZHMoJGV2ZW50LCBmaWVsZClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWJ1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gQnV0dG9uIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYnV0dG9uJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1idXR0b25cbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZD8ua2V5XCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgIFtzaG93TG9hZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5sb2FkaW5nID8/IGZhbHNlXCJcbiAgICAgICAgICAgICAgW3N0eWxlc109XCJmaWVsZD8ucHJvcGVydGllcz8uc3R5bGVzXCJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jbGFzc1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJmaWVsZD8ucHJvcGVydGllcz8uYXBwZWFyYW5jZSA/PyAncHJpbWFyeSdcIlxuICAgICAgICAgICAgICBbaWNvbl09XCJmaWVsZD8ucHJvcGVydGllcz8uaWNvblwiXG4gICAgICAgICAgICAgIFtpY29uUmlnaHRdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lmljb25SaWdodFwiXG4gICAgICAgICAgICAgIFtzaGFwZV09XCJmaWVsZD8ucHJvcGVydGllcz8uc2hhcGVcIlxuICAgICAgICAgICAgICBbc2l6ZV09XCJmaWVsZD8ucHJvcGVydGllcz8uc2l6ZVwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cImhhbmRsZU9uQ2xpY2tGb3JtRmllbGRCdXR0b24oZmllbGQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1idXR0b24+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBJbnB1dCBUZXh0IC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGV4dCdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXRcbiAgICAgICAgICAgICAgW2Nhc2VdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNhc2VcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFt0eXBlXT1cIid0ZXh0J1wiXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0PlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gVGV4dGFyZWEgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0YXJlYSdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktdGV4dGFyZWFcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLXRleHRhcmVhPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gQ2hlY2tib3ggLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjaGVja2JveCdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktY2hlY2tib3hcbiAgICAgICAgICAgICAgW2NvbnRlbnRBbGlnbl09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGVudEFsaWduID8/ICdsZWZ0J1wiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgW3NpemVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNpemUgPz8gJ2wnXCJcbiAgICAgICAgICAgICAgW3ZhcmlhbnRdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnZhcmlhbnQgPz8gJ2Jsb2NrJ1wiXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWNoZWNrYm94PlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gSW5wdXQgTnVtYmVyIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1udW1iZXJcbiAgICAgICAgICAgICAgW2RlY2ltYWxdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmRlY2ltYWxcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgIFttYXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm1heFwiXG4gICAgICAgICAgICAgIFttaW5dPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm1pblwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBbcG9zdGZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucG9zdGZpeCA/PyAnJ1wiXG4gICAgICAgICAgICAgIFtwcmVjaXNpb25dPVwiZmllbGQ/LnByb3BlcnRpZXM/LnByZWNpc2lvblwiXG4gICAgICAgICAgICAgIFtwcmVmaXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnByZWZpeCA/PyAnJ1wiXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtbnVtYmVyPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gSW5wdXQgRGF0ZSAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGUnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LWRhdGVcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbbWluXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5taW5cIlxuICAgICAgICAgICAgICBbbWluQ2FsY3VsYXRlZEZyb21Ub2RheV09XCJcbiAgICAgICAgICAgICAgICBmaWVsZD8ucHJvcGVydGllcz8ubWluQ2FsY3VsYXRlZEZyb21Ub2RheVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbbWF4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5tYXhcIlxuICAgICAgICAgICAgICBbbWF4Q2FsY3VsYXRlZEZyb21Ub2RheV09XCJcbiAgICAgICAgICAgICAgICBmaWVsZD8ucHJvcGVydGllcz8ubWF4Q2FsY3VsYXRlZEZyb21Ub2RheVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1kYXRlPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gSW5wdXQgUGhvbmUgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidwaG9uZSdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtcGhvbmVcbiAgICAgICAgICAgICAgW2NvdW50cnlDb2RlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb3VudHJ5Q29kZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW3Bob25lTWFza0FmdGVyQ291bnRyeUNvZGVdPVwiXG4gICAgICAgICAgICAgICAgZmllbGQ/LnByb3BlcnRpZXM/LnBob25lTWFza0FmdGVyQ291bnRyeUNvZGVcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW3JlbW92ZUNvdW50cnlDb2RlRnJvbVZhbHVlXT1cIlxuICAgICAgICAgICAgICAgIGZpZWxkPy5wcm9wZXJ0aWVzPy5yZW1vdmVDb3VudHJ5Q29kZUZyb21WYWx1ZVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1waG9uZT5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIElucHV0IFJhZGlvIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIncmFkaW8nXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgW3R1aUxhYmVsXT1cImxhYmVsVGVtcGxhdGVcIlxuICAgICAgICAgICAgICBzdHlsZT1cIm1pbi1oZWlnaHQ6IGF1dG87IHBhZGRpbmc6IDBweCAwLjVyZW1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8a3dpa3VpLWlucHV0LXJhZGlvXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJmaWVsZD8ub3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgICAgW29yaWVudGF0aW9uXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5vcmllbnRhdGlvblwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICAgIFtzaXplXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zaXplXCJcbiAgICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtcmFkaW8+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsYWJlbFRlbXBsYXRlPlxuICAgICAgICAgICAgICA8cFxuICAgICAgICAgICAgICAgIGNsYXNzPVwidHVpLXNwYWNlX2JvdHRvbS0yXCJcbiAgICAgICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxiPlxuICAgICAgICAgICAgICAgICAge3sgZmllbGQubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmllbGQudmFsaWRhdG9ycz8ucmVxdWlyZWRcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYj5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIERyb3Bkb3duIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc2VsZWN0J1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1zZWxlY3RcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJmaWVsZC5vcHRpb25zXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtzZWFyY2hhYmxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zZWFyY2hhYmxlXCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1zZWxlY3Q+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBJbnB1dCBTbGlkZXIgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzbGlkZXInXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LXNsaWRlclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgIFttYXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm1heFwiXG4gICAgICAgICAgICAgIFttaW5dPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm1pblwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFtxdWFudHVtXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5xdWFudHVtXCJcbiAgICAgICAgICAgICAgW3NpemVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNpemVcIlxuICAgICAgICAgICAgICBbc3RlcHNdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnN0ZXBzXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtc2xpZGVyPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gQVBJIENhbGwgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidhcGknXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWJ1dHRvbi1hcGktY2FsbFxuICAgICAgICAgICAgICBbYXBpU3RhdHVzXT1cImZpZWxkPy5hcGk/LnN0YXR1cz8udmFsdWVcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiZmllbGQ/LmNsYXNzXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmFwaT8uc3RhdHVzPy5sYWJlbHNbZmllbGQ/LmFwaT8uc3RhdHVzPy52YWx1ZV1cIlxuICAgICAgICAgICAgICBbc2hvd0xvYWRlcl09XCJmaWVsZD8uZGlzYWJsZWQgPT09ICdsb2FkaW5nJ1wiXG4gICAgICAgICAgICAgIHN0eWxlcz1cIndpZHRoOiBmaXQtY29udGVudFwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cImhhbmRsZU9uQ2xpY2tBcGlDYWxsKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWJ1dHRvbi1hcGktY2FsbD5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIE1vYmlsZSBPVFAgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidvdHAnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LW90cFxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgIFtzaXplXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zaXplXCJcbiAgICAgICAgICAgICAgW21vZGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm1vZGVcIlxuICAgICAgICAgICAgICBbb3RwTGVuZ3RoXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5vdHBMZW5ndGhcIlxuICAgICAgICAgICAgICBbbWFza109XCJmaWVsZD8ucHJvcGVydGllcz8ubWFza1wiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LW90cD5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIEFhZGhhYXIgTnVtYmVyIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYWFkaGFhci1udW1iZXInXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LWFhZGhhYXJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbbWFza109XCJmaWVsZD8ucHJvcGVydGllcz8ubWFza1wiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LWFhZGhhYXI+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBQcmV2aWV3IEltYWdlIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaW1hZ2UnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWltYWdlXG4gICAgICAgICAgICAgIFthbHRUZXh0XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5hbHRUZXh0XCJcbiAgICAgICAgICAgICAgW2h0bWxdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lmh0bWxcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ltYWdlU3JjXT1cImZpZWxkPy5kZWZhdWx0Py52YWx1ZT8udmFsdWUgPz8gJydcIlxuICAgICAgICAgICAgICBbaW1hZ2VUeXBlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5pbWFnZVR5cGVcIlxuICAgICAgICAgICAgICBbbG9hZGluZ1R5cGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmxvYWRpbmdUeXBlXCJcbiAgICAgICAgICAgICAgW3N0eWxlc109XCJmaWVsZD8ucHJvcGVydGllcz8uc3R5bGVzXCJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jbGFzc1wiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW1hZ2U+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBGaWxlIFVwbG9hZCAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2ZpbGUnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgW3R1aUxhYmVsXT1cImxhYmVsVGVtcGxhdGVcIlxuICAgICAgICAgICAgICBzdHlsZT1cIm1pbi1oZWlnaHQ6IGF1dG9cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8a3dpa3VpLWlucHV0LWZpbGVzXG4gICAgICAgICAgICAgICAgW2lkXT1cImZpZWxkPy5rZXlcIlxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICAgIFtzdHlsZXNdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnN0eWxlc1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jbGFzc1wiXG4gICAgICAgICAgICAgICAgW211bHRpcGxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5tdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgW2FjY2VwdF09XCJmaWVsZD8ucHJvcGVydGllcz8uYWNjZXB0XCJcbiAgICAgICAgICAgICAgICBbZmlsZXNdPVwiZmlsZXNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgICAgW3NldEZpbGVUeXBlc1RvRm9ybV09XCJbJ05PUk1BTCddXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmxhYmVsXCJcbiAgICAgICAgICAgICAgICBbbGlua109XCJmaWVsZD8ucHJvcGVydGllcz8ubGlua1wiXG4gICAgICAgICAgICAgICAgW21heEZpbGVTaXplXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5tYXhGaWxlU2l6ZVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAgIChnZXRSZW1vdmVkRmlsZSk9XCJoYW5kbGVSZW1vdmVkRmlsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWVGaWxlKCRldmVudClcIlxuICAgICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtZmlsZXM+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsYWJlbFRlbXBsYXRlPlxuICAgICAgICAgICAgICA8cFxuICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogMHB4IDAuMjVyZW07IG1hcmdpbi1ib3R0b206IDAuMjVyZW1cIlxuICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGI+XG4gICAgICAgICAgICAgICAgICB7eyBmaWVsZC5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmaWVsZC52YWxpZGF0b3JzPy5yZXF1aXJlZFwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9iPlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9mb3JtPlxuICA8ZGl2IGNsYXNzPVwia3dpa2lkLWZvcm0tYnV0dG9uc1wiPlxuICAgIDxrd2lrdWktYnV0dG9uXG4gICAgICAqbmdJZj1cIlxuICAgICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLmZvb3Rlci52aWV3Rm9ybXNCdXR0b24uaGlkZGVuICYmIGlzTW9iaWxlVmlld1xuICAgICAgXCJcbiAgICAgIFtkaXNhYmxlZF09XCJ2aWV3Rm9ybXNCdXR0b24uZGlzYWJsZWRcIlxuICAgICAgbGFiZWw9XCJ7eyBmb3JtQ29uZmlnLnByb3BlcnRpZXMuZm9vdGVyLnZpZXdGb3Jtc0J1dHRvbi5sYWJlbCB9fVwiXG4gICAgICBbc2hvd0xvYWRlcl09XCJ2aWV3Rm9ybXNCdXR0b24uc2hvd0xvYWRlclwiXG4gICAgICBhcHBlYXJhbmNlPVwic2Vjb25kYXJ5XCJcbiAgICAgIHN0eWxlcz1cIndpZHRoOiAxMDAlXCJcbiAgICAgIChvbkNsaWNrKT1cImhhbmRsZU9uQ2xpY2tWaWV3Rm9ybXMoJGV2ZW50KVwiXG4gICAgPjwva3dpa3VpLWJ1dHRvbj5cbiAgICA8a3dpa3VpLWJ1dHRvblxuICAgICAgKm5nSWY9XCIhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLmZvb3Rlci5zYXZlQnV0dG9uLmhpZGRlblwiXG4gICAgICBbZGlzYWJsZWRdPVwic2F2ZUZvcm1CdXR0b24uZGlzYWJsZWRcIlxuICAgICAgbGFiZWw9XCJ7eyBmb3JtQ29uZmlnLnByb3BlcnRpZXMuZm9vdGVyLnNhdmVCdXR0b24ubGFiZWwgfX1cIlxuICAgICAgW3Nob3dMb2FkZXJdPVwic2F2ZUZvcm1CdXR0b24uc2hvd0xvYWRlclwiXG4gICAgICBzdHlsZXM9XCJ3aWR0aDogMTAwJVwiXG4gICAgICAob25DbGljayk9XCJoYW5kbGVPbkNsaWNrU2F2ZUZvcm0oJGV2ZW50KVwiXG4gICAgPjwva3dpa3VpLWJ1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXZcbiAgY2xhc3M9XCJrd2lraWQtZm9ybS1jb250YWluZXItbG9hZGluZ1wiXG4gICpuZ0lmPVwibG9hZGluZ1wiXG4+XG4gIDxkaXZcbiAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBbXS5jb25zdHJ1Y3Rvcig3KTsgbGV0IGkgPSBpbmRleFwiXG4gICAgY2xhc3M9XCJsYXJnZS13cmFwcGVyIHR1aS1za2VsZXRvbiB0dWktc2tlbGV0b25fcm91bmRlZFwiXG4gID5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGt3aWt1aS1sb2FkZXI+PC9rd2lrdWktbG9hZGVyPlxuXG48dHVpLXB1c2hcbiAgaWQ9XCJmaWVsZC1lcnJvci1ub3RpZmljYXRpb25cIlxuICAqdHVpUHVzaD1cInNob3dFcnJvck5vdGlmaWNhdGlvblwiXG4gIGhlYWRpbmc9XCJNaXNzaW5nL0luY29ycmVjdCBGaWVsZHMhXCJcbiAgdHlwZT1cIkVycm9yXCJcbiAgKGNsb3NlKT1cInRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKGZhbHNlKVwiXG4+XG4gIDx0dWktc3ZnXG4gICAgc3JjPVwidHVpSWNvblhDaXJjbGVcIlxuICAgIHN0eWxlPVwiY29sb3I6ICNmZmYgIWltcG9ydGFudFwiXG4gID5cbiAgPC90dWktc3ZnPlxuPC90dWktcHVzaD5cblxuPG5nLXRlbXBsYXRlXG4gICNwcmV2aWV3XG4gIGxldC1wcmV2aWV3XG4+XG4gIDx0dWktcHJldmlld1xuICAgIFtyb3RhdGFibGVdPVwiZmFsc2VcIlxuICAgIFt6b29tYWJsZV09XCJmYWxzZVwiXG4gICAgY2xhc3M9XCJwcmV2aWV3LWNvbnRhaW5lclwiXG4gID5cbiAgICA8dHVpLXByZXZpZXctdGl0bGUgKm5nSWY9XCJwcmV2aWV3UHJvcGVydGllcy50aXRsZSAhPT0gJydcIj57e1xuICAgICAgcHJldmlld1Byb3BlcnRpZXMudGl0bGVcbiAgICB9fTwvdHVpLXByZXZpZXctdGl0bGU+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXByZXZpZXdQcm9wZXJ0aWVzLnVuYXZhaWxhYmxlXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwicHJldmlld1Byb3BlcnRpZXM/Lmh0bWw/LmJlZm9yZSAhPT0gJydcIlxuICAgICAgICBjbGFzcz1cInByZXZpZXctaHRtbCBwcmV2aWV3LWh0bWwtYmVmb3JlXCJcbiAgICAgICAgW3N0eWxlXT1cInByZXZpZXdQcm9wZXJ0aWVzPy5odG1sPy5iZWZvcmVTdHlsZXNcIlxuICAgICAgICBbaW5uZXJIdG1sXT1cInByZXZpZXdQcm9wZXJ0aWVzLmh0bWwuYmVmb3JlIHwga3dpa3VpU2FmZUh0bWxcIlxuICAgICAgPjwvZGl2PlxuXG4gICAgICA8IS0tIENvbnRlbnQgd2l0aGluIHRoZSBpZnJhbWUgLS0+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicHJldmlldy1pZnJhbWUtY29udGVudFwiXG4gICAgICAgIFtzdHlsZV09XCJwcmV2aWV3UHJvcGVydGllcz8uaWZyYW1lPy5jb250YWluZXJTdHlsZXNcIlxuICAgICAgICAqbmdJZj1cInByZXZpZXdQcm9wZXJ0aWVzLmlmcmFtZS5zcmMgIT09ICcnXCJcbiAgICAgID5cbiAgICAgICAgPCEtLSBZb3VyIEhUTUwgY29udGVudCBoZXJlIC0tPlxuICAgICAgICA8aWZyYW1lXG4gICAgICAgICAgW3NyY109XCJwcmV2aWV3UHJvcGVydGllcy5pZnJhbWUuc3JjIHwga3dpa3VpU2FmZVVybFwiXG4gICAgICAgICAgZnJhbWVib3JkZXI9XCIwXCJcbiAgICAgICAgICBhbGxvdz1cImFjY2VsZXJvbWV0ZXI7IGF1dG9wbGF5OyBlbmNyeXB0ZWQtbWVkaWE7IGd5cm9zY29wZTsgcGljdHVyZS1pbi1waWN0dXJlXCJcbiAgICAgICAgICBhbGxvd2Z1bGxzY3JlZW5cbiAgICAgICAgICBbdGl0bGVdPVwicHJldmlld1Byb3BlcnRpZXMuaWZyYW1lLnRpdGxlXCJcbiAgICAgICAgICBjbGFzcz1cInByZXZpZXctaWZyYW1lXCJcbiAgICAgICAgICBzY3JvbGxpbmc9XCJhdXRvXCJcbiAgICAgICAgPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJwcmV2aWV3UHJvcGVydGllcz8uaHRtbD8uYWZ0ZXIgIT09ICcnXCJcbiAgICAgICAgY2xhc3M9XCJwcmV2aWV3LWh0bWwgcHJldmlldy1odG1sLWFmdGVyXCJcbiAgICAgICAgW3N0eWxlXT1cInByZXZpZXdQcm9wZXJ0aWVzPy5odG1sPy5hZnRlclN0eWxlc1wiXG4gICAgICAgIFtpbm5lckh0bWxdPVwicHJldmlld1Byb3BlcnRpZXMuaHRtbC5hZnRlciB8IGt3aWt1aVNhZmVIdG1sXCJcbiAgICAgID48L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwcmV2aWV3UHJvcGVydGllcy51bmF2YWlsYWJsZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctdW5hdmFpbGFibGVcIj5cbiAgICAgICAgPHR1aS1zdmdcbiAgICAgICAgICBzcmM9XCJ0dWlJY29uRmlsZUxhcmdlXCJcbiAgICAgICAgICBjbGFzcz1cInQtaWNvblwiXG4gICAgICAgID48L3R1aS1zdmc+XG4gICAgICAgIDxkaXY+UHJldmlldyB1bmF2YWlsYWJsZTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8YnV0dG9uXG4gICAgICB0dWlJY29uQnV0dG9uXG4gICAgICB0dWlQcmV2aWV3QWN0aW9uXG4gICAgICBpY29uPVwidHVpSWNvbkNsb3NlTGFyZ2VcIlxuICAgICAgdGl0bGU9XCJDbG9zZVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJwcmV2aWV3LmNvbXBsZXRlKClcIlxuICAgID48L2J1dHRvbj5cbiAgPC90dWktcHJldmlldz5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAjZGlhbG9nXG4gIGxldC1kaWFsb2dcbj5cbiAgPGRpdiBjbGFzcz1cInByZXZpZXctY29udGFpbmVyXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFwcmV2aWV3UHJvcGVydGllcy51bmF2YWlsYWJsZVwiPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cInByZXZpZXdQcm9wZXJ0aWVzPy5odG1sPy5iZWZvcmUgIT09ICcnXCJcbiAgICAgICAgY2xhc3M9XCJwcmV2aWV3LWh0bWwgcHJldmlldy1odG1sLWJlZm9yZVwiXG4gICAgICAgIFtzdHlsZV09XCJwcmV2aWV3UHJvcGVydGllcz8uaHRtbD8uYmVmb3JlU3R5bGVzXCJcbiAgICAgICAgW2lubmVySHRtbF09XCJwcmV2aWV3UHJvcGVydGllcy5odG1sLmJlZm9yZSB8IGt3aWt1aVNhZmVIdG1sXCJcbiAgICAgID48L2Rpdj5cblxuICAgICAgPCEtLSBDb250ZW50IHdpdGhpbiB0aGUgaWZyYW1lIC0tPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInByZXZpZXctaWZyYW1lLWNvbnRlbnRcIlxuICAgICAgICBbc3R5bGVdPVwicHJldmlld1Byb3BlcnRpZXM/LmlmcmFtZT8uY29udGFpbmVyU3R5bGVzXCJcbiAgICAgICAgKm5nSWY9XCJwcmV2aWV3UHJvcGVydGllcy5pZnJhbWUuc3JjICE9PSAnJ1wiXG4gICAgICA+XG4gICAgICAgIDwhLS0gWW91ciBIVE1MIGNvbnRlbnQgaGVyZSAtLT5cbiAgICAgICAgPGlmcmFtZVxuICAgICAgICAgIFtzcmNdPVwicHJldmlld1Byb3BlcnRpZXMuaWZyYW1lLnNyYyB8IGt3aWt1aVNhZmVVcmxcIlxuICAgICAgICAgIGZyYW1lYm9yZGVyPVwiMFwiXG4gICAgICAgICAgYWxsb3c9XCJhY2NlbGVyb21ldGVyOyBhdXRvcGxheTsgZW5jcnlwdGVkLW1lZGlhOyBneXJvc2NvcGU7IHBpY3R1cmUtaW4tcGljdHVyZVwiXG4gICAgICAgICAgYWxsb3dmdWxsc2NyZWVuXG4gICAgICAgICAgW3RpdGxlXT1cInByZXZpZXdQcm9wZXJ0aWVzLmlmcmFtZS50aXRsZVwiXG4gICAgICAgICAgY2xhc3M9XCJwcmV2aWV3LWlmcmFtZVwiXG4gICAgICAgICAgc2Nyb2xsaW5nPVwiYXV0b1wiXG4gICAgICAgID48L2lmcmFtZT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwicHJldmlld1Byb3BlcnRpZXM/Lmh0bWw/LmFmdGVyICE9PSAnJ1wiXG4gICAgICAgIGNsYXNzPVwicHJldmlldy1odG1sIHByZXZpZXctaHRtbC1hZnRlclwiXG4gICAgICAgIFtzdHlsZV09XCJwcmV2aWV3UHJvcGVydGllcz8uaHRtbD8uYWZ0ZXJTdHlsZXNcIlxuICAgICAgICBbaW5uZXJIdG1sXT1cInByZXZpZXdQcm9wZXJ0aWVzLmh0bWwuYWZ0ZXIgfCBrd2lrdWlTYWZlSHRtbFwiXG4gICAgICA+PC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJldmlld1Byb3BlcnRpZXMudW5hdmFpbGFibGVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LXVuYXZhaWxhYmxlXCI+XG4gICAgICAgIDx0dWktc3ZnXG4gICAgICAgICAgc3JjPVwidHVpSWNvbkZpbGVMYXJnZVwiXG4gICAgICAgICAgY2xhc3M9XCJ0LWljb25cIlxuICAgICAgICA+PC90dWktc3ZnPlxuICAgICAgICA8ZGl2PlByZXZpZXcgdW5hdmFpbGFibGU8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=