ngx-st-tables 18.0.27 → 18.0.28
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.
|
@@ -679,7 +679,6 @@ export class MaterialTableComponent extends StSubscribeDestroyComponent {
|
|
|
679
679
|
return (editableColumns.length > 0 && editableColumns[0].field === column.field);
|
|
680
680
|
}
|
|
681
681
|
validateRow(rowData, originalRow, singleColumn) {
|
|
682
|
-
console.log('validRow');
|
|
683
682
|
const editableColumns = singleColumn
|
|
684
683
|
? [singleColumn]
|
|
685
684
|
: this.columns.filter(col => col.allowEditColumn);
|
|
@@ -726,7 +725,6 @@ export class MaterialTableComponent extends StSubscribeDestroyComponent {
|
|
|
726
725
|
}
|
|
727
726
|
// Update validation errors
|
|
728
727
|
if (Object.keys(errors).length > 0) {
|
|
729
|
-
console.log(errors);
|
|
730
728
|
this.validationErrors[rowId] = errors;
|
|
731
729
|
}
|
|
732
730
|
else {
|
|
@@ -955,4 +953,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
955
953
|
type: ViewChildren,
|
|
956
954
|
args: [MaterialTableRowCellComponent]
|
|
957
955
|
}] } });
|
|
958
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbWF0ZXJpYWwtdGFibGUvbWF0ZXJpYWwtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbWF0ZXJpYWwtdGFibGUvbWF0ZXJpYWwtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsU0FBUyxFQUNULFlBQVksRUFFWixpQkFBaUIsRUFDakIsS0FBSyxFQUNMLE1BQU0sRUFFTixNQUFNLEVBQ04sUUFBUSxFQUNSLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBaUIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUc3RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFDTCxhQUFhLEVBQ2IsMkJBQTJCLEdBQzVCLE1BQU0sdUJBQXVCLENBQUM7QUFHL0IsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sOEZBQThGLENBQUM7QUFNbEosT0FBTyxFQUNMLE9BQU8sRUFDUCxLQUFLLEVBQ0wsS0FBSyxFQUNMLFVBQVUsRUFDVixPQUFPLEdBQ1IsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5QjVHLE1B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QUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUN6RDtnQkFDRCxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUN6QyxVQUFVLENBQ1Isd0JBQXdCLEVBQ3hCLE9BQU8sQ0FBQyxzQ0FBc0MsQ0FBQyxDQUNoRDthQUNGLENBQUM7U0FDSDs7NEZBRVUsc0JBQXNCO2tCQXZCbEMsU0FBUzsrQkFDRSx1QkFBdUIsbUJBTWhCLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksY0FDekI7d0JBQ1YsT0FBTyxDQUFDLGNBQWMsRUFBRTs0QkFDdEIsS0FBSyxDQUNILGdCQUFnQixFQUNoQixLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQ3pEOzRCQUNELEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7NEJBQ3pDLFVBQVUsQ0FDUix3QkFBd0IsRUFDeEIsT0FBTyxDQUFDLHNDQUFzQyxDQUFDLENBQ2hEO3lCQUNGLENBQUM7cUJBQ0g7OExBTXdCLFNBQVM7c0JBQWpDLFNBQVM7dUJBQUMsWUFBWTtnQkFDSCxJQUFJO3NCQUF2QixTQUFTO3VCQUFDLE9BQU87Z0JBRWxCLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyw2QkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBpbnB1dCxcclxuICBvdXRwdXQsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgc2lnbmFsLFxyXG4gIGNvbXB1dGVkLFxyXG4gIGVmZmVjdCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTWF0U29ydCwgU29ydERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IFN0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3N0LW1hdGVyaWFsLXRhYmxlLWNvbHVtbi5tb2RlbCc7XHJcbmltcG9ydCB7IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy92aWV3L3ZpZXctc3QtbWF0ZXJpYWwtdGFibGUtY29sdW1uLm1vZGVsJztcclxuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge1xyXG4gIFN0QmFzZVNlcnZpY2UsXHJcbiAgU3RTdWJzY3JpYmVEZXN0cm95Q29tcG9uZW50LFxyXG59IGZyb20gJ25neC1zdC1iYXNlLWZ1bmN0aW9ucyc7XHJcbmltcG9ydCB7IFN0U25hY2tCYXJTZXJ2aWNlIH0gZnJvbSAnbmd4LXN0LXNuYWNrLWJhcic7XHJcbmltcG9ydCB7IFN0VGFibGVzVHJhbnNsYXRpb25zU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0LXRhYmxlcy10cmFuc2xhdGlvbnMuc2VydmljZSc7XHJcbmltcG9ydCB7IE1hdGVyaWFsVGFibGVGaWx0ZXJEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL21hdGVyaWFsLXRhYmxlLWNhcHRpb24vbWF0ZXJpYWwtdGFibGUtZmlsdGVyLWRpYWxvZy9tYXRlcmlhbC10YWJsZS1maWx0ZXItZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgSUNhcHRpb25EYXRhQ2hhbmdlZCxcclxuICBTdE1hdGVyaWFsVGFibGVGaWx0ZXIsXHJcbiAgU3RNYXRlcmlhbFRhYmxlRmlsdGVyVmFsdWVUeXBlLFxyXG59IGZyb20gJy4uLy4uL21vZGVscy9tb2RlbHMnO1xyXG5pbXBvcnQge1xyXG4gIGFuaW1hdGUsXHJcbiAgc3RhdGUsXHJcbiAgc3R5bGUsXHJcbiAgdHJhbnNpdGlvbixcclxuICB0cmlnZ2VyLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBTdERpYWxvZ1NlcnZpY2UgfSBmcm9tICduZ3gtc3QtZGlhbG9nJztcclxuaW1wb3J0IHsgTWF0ZXJpYWxUYWJsZVJvd0NlbGxDb21wb25lbnQgfSBmcm9tICcuL21hdGVyaWFsLXRhYmxlLXJvdy1jZWxsL21hdGVyaWFsLXRhYmxlLXJvdy1jZWxsLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25neC1zdC1tYXRlcmlhbC10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL21hdGVyaWFsLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFtcclxuICAgICcuL21hdGVyaWFsLXRhYmxlLmNvbXBvbmVudC5zY3NzJyxcclxuICAgICcuLi8uLi8uLi8uLi9hc3NldHMvYmFzZS10YWJsZS5zY3NzJyxcclxuICBdLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcignZGV0YWlsRXhwYW5kJywgW1xyXG4gICAgICBzdGF0ZShcclxuICAgICAgICAnY29sbGFwc2VkLHZvaWQnLFxyXG4gICAgICAgIHN0eWxlKHsgaGVpZ2h0OiAnMHB4JywgbWluSGVpZ2h0OiAnMCcsIGJvcmRlcjogJ25vbmUnIH0pXHJcbiAgICAgICksXHJcbiAgICAgIHN0YXRlKCdleHBhbmRlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnKicgfSkpLFxyXG4gICAgICB0cmFuc2l0aW9uKFxyXG4gICAgICAgICdleHBhbmRlZCA8PT4gY29sbGFwc2VkJyxcclxuICAgICAgICBhbmltYXRlKCcyMjVtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSknKVxyXG4gICAgICApLFxyXG4gICAgXSksXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1hdGVyaWFsVGFibGVDb21wb25lbnRcclxuICBleHRlbmRzIFN0U3Vic2NyaWJlRGVzdHJveUNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0XHJcbntcclxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcikgcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XHJcbiAgQFZpZXdDaGlsZChNYXRTb3J0KSBzb3J0OiBNYXRTb3J0O1xyXG4gIEBWaWV3Q2hpbGRyZW4oTWF0ZXJpYWxUYWJsZVJvd0NlbGxDb21wb25lbnQpXHJcbiAgcm93Q2VsbHMhOiBRdWVyeUxpc3Q8TWF0ZXJpYWxUYWJsZVJvd0NlbGxDb21wb25lbnQ+O1xyXG5cclxuICBzaG93R2xvYmFsU2VhcmNoID0gaW5wdXQoZmFsc2UpO1xyXG5cclxuICB0YWJsZVRpdGxlID0gaW5wdXQoJycpO1xyXG5cclxuICBwYWdlU2l6ZSA9IGlucHV0PG51bWJlcj4oMTApO1xyXG5cclxuICBkYXRhTGVuZ3RoID0gaW5wdXQ8bnVtYmVyPigwKTtcclxuXHJcbiAgYWxsb3dQaWNrQ29sdW1ucyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgYWxsb3dSZW9yZGVyQ29sdW1ucyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgbG9jYWxTdG9yYWdlTmFtZSA9IGlucHV0PHN0cmluZz4oJycpO1xyXG5cclxuICBsYXp5TG9hZGluZyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgaXNMb2FkaW5nID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBpbml0Q29sdW1ucyA9IGlucHV0PFN0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsW10+KFtdKTtcclxuXHJcbiAgcm93Q2xpY2tBY3Rpb24gPSBpbnB1dDwocm93OiBhbnkpID0+IHZvaWQ+KCk7XHJcblxyXG4gIGFsbG93RWRpdFJvdyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgYWxsb3dEZWxldGVJbkVkaXRSb3cgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcclxuXHJcbiAgYWxsb3dFZGl0SW5FZGl0Um93ID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcblxyXG4gIHNob3dFZGl0QWxsUm93cyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiB0cnVlLCBmaWVsZCBjaGFuZ2VzIGFyZSBzYXZlZCBpbW1lZGlhdGVseSB3aXRob3V0IHJlcXVpcmluZyBzYXZlL2NhbmNlbCBidXR0b25zLlxyXG4gICAqIFBlcmZlY3QgZm9yIHF1YW50aXR5IGlucHV0cywgdG9nZ2xlcywgb3Igc2VsZWN0aW9uIHRhYmxlcyB3aGVyZSBpbnN0YW50IHVwZGF0ZXMgYXJlIG5lZWRlZC5cclxuICAgKi9cclxuICBhdXRvU2F2ZU9uQ2hhbmdlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBjYW5FZGl0Um93VmFsaWRhdG9yID0gaW5wdXQ8KHJvdzogYW55KSA9PiBib29sZWFuPigoKSA9PiB0cnVlKTtcclxuXHJcbiAgY2FuRGVsZXRlUm93VmFsaWRhdG9yID0gaW5wdXQ8KHJvdzogYW55KSA9PiBib29sZWFuPigoKSA9PiB0cnVlKTtcclxuXHJcbiAgYWxsb3dTZWxlY3RSb3cgPSBpbnB1dChmYWxzZSk7XHJcblxyXG4gIHNlbGVjdGlvbkZpZWxkTGFiZWwgPSBpbnB1dCgnJyk7XHJcblxyXG4gIHNlbGVjdFJvd09ubHlPbmUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsIGZvcm1hdHRlciB1c2VkIHRvIGRlcml2ZSB0aGUgZGlzcGxheSB2YWx1ZSBmb3IgYSBzZWxlY3RlZCByb3cuXHJcbiAgICpcclxuICAgKiBVc2UgdGhpcyB3aGVuIHRoZSBzaW1wbGUgZmllbGQgbmFtZSBwcm92aWRlZCBieSB7QGxpbmsgc2VsZWN0aW9uRmllbGRMYWJlbH1cclxuICAgKiBpcyBub3Qgc3VmZmljaWVudCAoZm9yIGV4YW1wbGUsIHdoZW4geW91IG5lZWQgdG8gY29uY2F0ZW5hdGUgbXVsdGlwbGUgZmllbGRzXHJcbiAgICogb3IgYXBwbHkgY3VzdG9tIGZvcm1hdHRpbmcgdG8gdGhlIGRpc3BsYXllZCB2YWx1ZSkuXHJcbiAgICpcclxuICAgKiBJZiBib3RoIHtAbGluayBzZWxlY3Rpb25GaWVsZExhYmVsfSBhbmQgYHNlbGVjdFJvd1ZhbHVlRGlzcGxheWAgYXJlIHNldCxcclxuICAgKiB0aGlzIGZ1bmN0aW9uIHRha2VzIHByZWNlZGVuY2UgYW5kIGlzIHVzZWQgdG8gY29tcHV0ZSB0aGUgdmlzaWJsZSB0ZXh0XHJcbiAgICogcmVwcmVzZW50aW5nIHRoZSBzZWxlY3RlZCByb3cuXHJcbiAgICovXHJcbiAgc2VsZWN0Um93VmFsdWVEaXNwbGF5ID0gaW5wdXQ8KHJvdzogYW55KSA9PiBzdHJpbmc+KCk7XHJcblxyXG4gIHNob3dDcmVhdGVCdXR0b24gPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGNyZWF0ZUJ1dHRvbkxhYmVsID0gaW5wdXQoJ0NyZWF0ZScpO1xyXG5cclxuICBjcmVhdGVCdXR0b25BY3Rpb24gPSBpbnB1dDwoKSA9PiB2b2lkPigoKSA9PiB7fSk7XHJcblxyXG4gIGRpc2FibGVDcmVhdGVCdXR0b24gPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGFsbG93Q3JlYXRlUm93ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBhbGxvd0V4dGVuZFJvdyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgZXh0ZW5kZWRSb3dUZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPHsgZGF0YTogYW55IH0+PigpO1xyXG5cclxuICBpbml0U2VsZWN0ZWRSb3cgPSBpbnB1dDxhbnk+KCk7XHJcblxyXG4gIGV4dHJhQ3VzdG9tRmlsdGVyID0gaW5wdXQ8VGVtcGxhdGVSZWY8YW55Pj4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ3VzdG9tIGZpbHRlciBtZXRob2QgYXBwbGllZCB0byBhbGwgcm93cyBpbiB0aGUgdGFibGUuXHJcbiAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGZvciBlYWNoIHJvdyBhbmQgc2hvdWxkIHJldHVybiB0cnVlIHRvIGluY2x1ZGUgdGhlIHJvdywgZmFsc2UgdG8gZXhjbHVkZSBpdC5cclxuICAgKiBBcHBsaWVkIGF1dG9tYXRpY2FsbHkgd2hlbmV2ZXIgdGFibGUgZGF0YSBjaGFuZ2VzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHJvdyAtIFRoZSBkYXRhIHJvdyB0byBldmFsdWF0ZVxyXG4gICAqIEByZXR1cm5zIHRydWUgdG8gaW5jbHVkZSB0aGUgcm93IGluIHRoZSB0YWJsZSwgZmFsc2UgdG8gZXhjbHVkZSBpdFxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiAvLyBPbmx5IHNob3cgYWN0aXZlIHVzZXJzXHJcbiAgICogW2luaXRGaWx0ZXJNZXRob2RdPVwiKHJvdykgPT4gcm93LmlzQWN0aXZlID09PSB0cnVlXCJcclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogLy8gU2hvdyB1c2VycyB3aXRoIHF1YW50aXR5IGdyZWF0ZXIgdGhhbiAxMFxyXG4gICAqIFtpbml0RmlsdGVyTWV0aG9kXT1cIihyb3cpID0+IHJvdy5xdWFudGl0eSA+IDEwXCJcclxuICAgKi9cclxuICBpbml0RmlsdGVyTWV0aG9kID0gaW5wdXQ8KHJvdzogYW55KSA9PiBib29sZWFuPigpO1xyXG5cclxuICAvKipcclxuICAgKiBJbW11dGFibGUgRGF0YSBQYXR0ZXJuIC0gT3B0aW1pemVkIHZlcnNpb24gd2l0aCBJRCBjbGVhbnVwXHJcbiAgICovXHJcbiAgZGF0YSA9IGlucHV0PGFueVtdPihbXSk7XHJcblxyXG4gIHNldE5ld0RhdGFXaXRob3V0UmVmcmVzaCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgbG9hZERhdGEgPSBvdXRwdXQ8U3RNYXRlcmlhbFRhYmxlTG9hZERhdGE+KCk7XHJcblxyXG4gIHNhdmVFZGl0ZWRSb3cgPSBvdXRwdXQ8eyByb3c6IGFueTsgaW5kZXg6IG51bWJlciB9PigpO1xyXG5cclxuICBzYXZlQ3JlYXRlZFJvdyA9IG91dHB1dDxhbnk+KCk7XHJcblxyXG4gIHJvd0RlbGV0ZWQgPSBvdXRwdXQ8eyByb3c6IGFueTsgaW5kZXg6IG51bWJlciB9PigpO1xyXG5cclxuICBzZWxlY3RSb3dDaGFuZ2UgPSBvdXRwdXQ8YW55W10+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXR0ZWQgd2hlbiBhIGZpZWxkIHZhbHVlIGNoYW5nZXMgYW5kIGF1dG9TYXZlT25DaGFuZ2UgaXMgZW5hYmxlZC5cclxuICAgKiBQYXJlbnQgc2hvdWxkIHVwZGF0ZSB0aGVpciBkYXRhIGltbWVkaWF0ZWx5LlxyXG4gICAqL1xyXG4gIGZpZWxkVmFsdWVDaGFuZ2VkID0gb3V0cHV0PHtcclxuICAgIHJvdzogYW55O1xyXG4gICAgZmllbGQ6IHN0cmluZztcclxuICAgIHZhbHVlOiBhbnk7XHJcbiAgICBpbmRleDogbnVtYmVyO1xyXG4gIH0+KCk7XHJcblxyXG4gIHByaXZhdGUgX2RhdGE6IGFueVtdID0gW107XHJcblxyXG4gIGluaXRMb2NhbENvbHVtbnMgPSBzaWduYWw8U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWxbXT4oW10pO1xyXG4gIGV4cGFuZGVkUm93SW5kZXggPSBzaWduYWw8bnVtYmVyIHwgbnVsbD4obnVsbCk7XHJcblxyXG4gIGNyZWF0aW5nUm93ID0gY29tcHV0ZWQoKCkgPT4gT2JqZWN0LmtleXModGhpcy5hY3RpdmVSb3dzQ3JlYXRpbmcpLmxlbmd0aCA+IDApO1xyXG5cclxuICBjb2x1bW5zOiBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWxbXSA9IFtdO1xyXG4gIHNlbGVjdGVkQ29sdW1uczogVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsW10gPSBbXTtcclxuICBzZWxlY3RlZENvbHVtbnNTdHJpbmc6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIHRhYmxlU291cmNlOiBNYXRUYWJsZURhdGFTb3VyY2U8YW55PjtcclxuXHJcbiAgaW5pdEZpbHRlcnM6IHsgW2tleTogc3RyaW5nXTogU3RNYXRlcmlhbFRhYmxlRmlsdGVyIH0gPSB7fTtcclxuICBpbml0R2xvYmFsU2VhcmNoOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgc2hvd1RhYmxlID0gdHJ1ZTtcclxuXHJcbiAgYWN0aXZlUm93c0VkaXRpbmc6IHsgW3Jvd0lkOiBzdHJpbmddOiB7IFtwcm9wOiBzdHJpbmddOiBhbnkgfSB9ID0ge307XHJcbiAgYWN0aXZlUm93c0NyZWF0aW5nOiB7IFtyb3dJZDogc3RyaW5nXTogeyBbcHJvcDogc3RyaW5nXTogYW55IH0gfSA9IHt9O1xyXG4gIHNlbGVjdGVkUm93cyA9IHNpZ25hbDxhbnlbXT4oW10pO1xyXG5cclxuICAvLyBUcmFjayB2YWxpZGF0aW9uIGVycm9yczogeyByb3dJZDogeyBmaWVsZE5hbWU6IGVycm9yTWVzc2FnZSB9IH1cclxuICB2YWxpZGF0aW9uRXJyb3JzOiB7IFtyb3dJZDogc3RyaW5nXTogeyBbZmllbGQ6IHN0cmluZ106IHN0cmluZyB9IH0gPSB7fTtcclxuXHJcbiAgcHJpdmF0ZSBsb2NhbFN0b3JhZ2VEYXRhOiBTdE1hdGVyaWFsVGFibGVMb2NhbFN0b3JhZ2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHNuYWNrYmFyOiBTdFNuYWNrQmFyU2VydmljZSxcclxuICAgIHB1YmxpYyBzdFRhYmxlVHJhbnNsYXRpb25zOiBTdFRhYmxlc1RyYW5zbGF0aW9uc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN0RGlhbG9nU2VydmljZTogU3REaWFsb2dTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG5cclxuICAgIC8vIEVmZmVjdCB0byBoYW5kbGUgZGF0YSBjaGFuZ2VzXHJcbiAgICBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICBjb25zdCBpbnB1dERhdGEgPSB0aGlzLmRhdGEoKTtcclxuICAgICAgdGhpcy5oYW5kbGVEYXRhQ2hhbmdlKGlucHV0RGF0YSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBFZmZlY3QgdG8gcmVhcHBseSBmaWx0ZXIgd2hlbiBpbml0RmlsdGVyTWV0aG9kIGNoYW5nZXNcclxuICAgIGVmZmVjdCgoKSA9PiB7XHJcbiAgICAgIC8vIFRyYWNrIHRoZSBmaWx0ZXIgbWV0aG9kIHRvIHRyaWdnZXIgZWZmZWN0IG9uIGNoYW5nZVxyXG4gICAgICB0aGlzLmluaXRGaWx0ZXJNZXRob2QoKTtcclxuICAgICAgaWYgKHRoaXMudGFibGVTb3VyY2UgJiYgIXRoaXMubGF6eUxvYWRpbmcoKSkge1xyXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgZmlsdGVyIHByZWRpY2F0ZSB0byB1c2UgdGhlIG5ldyBmaWx0ZXIgbWV0aG9kXHJcbiAgICAgICAgdGhpcy50YWJsZVNvdXJjZS5maWx0ZXJQcmVkaWNhdGUgPSB0aGlzLmNyZWF0ZUN1c3RvbUZpbHRlckZvckxvY2FsVGFibGUoKTtcclxuICAgICAgICAvLyBUcmlnZ2VyIGZpbHRlciByZWFwcGxpY2F0aW9uIGJ5IHNldHRpbmcgZmlsdGVyIHN0cmluZyBhZ2FpblxyXG4gICAgICAgIGlmICh0aGlzLnRhYmxlU291cmNlLmZpbHRlcikge1xyXG4gICAgICAgICAgY29uc3QgY3VycmVudEZpbHRlciA9IHRoaXMudGFibGVTb3VyY2UuZmlsdGVyO1xyXG4gICAgICAgICAgdGhpcy50YWJsZVNvdXJjZS5maWx0ZXIgPSAnJztcclxuICAgICAgICAgIHRoaXMudGFibGVTb3VyY2UuZmlsdGVyID0gY3VycmVudEZpbHRlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZUNvbHVtbnMoKTtcclxuICAgIHRoaXMubG9hZExvY2FsU3RvcmFnZURhdGEoKTtcclxuICAgIHRoaXMudmFsaWRhdGVBbmRVcGRhdGVGaWx0ZXJzKCk7XHJcbiAgICB0aGlzLnNldERpc3BsYXllZENvbHVtbnMoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuc2V0SW5pdFRhYmxlKCk7XHJcbiAgICB0aGlzLnNldFNvcnRQYWdlU3Vic2NyaXB0aW9uKCk7XHJcbiAgfVxyXG5cclxuICB0dXJuT25BbGxFZGl0Um93cygpIHtcclxuICAgIHRoaXMudGFibGVTb3VyY2UuZGF0YS5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgIHRoaXMuYWN0aXZlUm93c0VkaXRpbmdbcm93LmlkXSA9IHsgLi4ucm93IH07XHJcbiAgICB9KTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBjYXB0aW9uRGF0YUNoYW5nZWQoZXZlbnQ6IElDYXB0aW9uRGF0YUNoYW5nZWQpIHtcclxuICAgIGNvbnN0IGxvYWRMYXp5RGF0YSA9XHJcbiAgICAgIGV2ZW50Lmdsb2JhbFNlYXJjaCAhPT0gdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLmdsb2JhbFNlYXJjaCB8fFxyXG4gICAgICBKU09OLnN0cmluZ2lmeShldmVudC5maWx0ZXJzKSAhPT1cclxuICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmxvY2FsU3RvcmFnZURhdGEuZmlsdGVycyk7XHJcblxyXG4gICAgdGhpcy5sb2NhbFN0b3JhZ2VEYXRhID0ge1xyXG4gICAgICAuLi5ldmVudCxcclxuICAgICAgcGFnZVNpemU6IHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplLFxyXG4gICAgICBwYWdlSW5kZXg6IGxvYWRMYXp5RGF0YSA/IDAgOiB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXgsXHJcbiAgICAgIHNvcnRGaWVsZDogdGhpcy5zb3J0LmFjdGl2ZSxcclxuICAgICAgc29ydE9yZGVyOiB0aGlzLnNvcnQuZGlyZWN0aW9uLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnNldENvbHVtbnNPcmRlcigpO1xyXG4gICAgdGhpcy5zZXRDb2x1bW5zVmlzaWJsZSgpO1xyXG4gICAgdGhpcy5zZXRTZWxlY3RlZENvbHVtbnMoKTtcclxuICAgIHRoaXMudXBkYXRlRGF0YVRvTG9jYWxTdG9yYWdlKCk7XHJcblxyXG4gICAgaWYgKGxvYWRMYXp5RGF0YSkge1xyXG4gICAgICB0aGlzLmVtaXRMYXp5TG9hZGluZygpO1xyXG4gICAgICB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSAwO1xyXG4gICAgICAvL0B0cy1pZ25vcmVcclxuICAgICAgdGhpcy5wYWdpbmF0b3IuX2VtaXRQYWdlRXZlbnQoMCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHJlc2V0VGFibGVTZXR0aW5ncygpIHtcclxuICAgIHRoaXMuc2hvd1RhYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG5cclxuICAgIHRoaXMuc2V0TmV3RW1wdHlMb2NhbFN0b3JhZ2VEYXRhKCk7XHJcbiAgICB0aGlzLnVwZGF0ZURhdGFUb0xvY2FsU3RvcmFnZSgpO1xyXG4gICAgdGhpcy5lbWl0TGF6eUxvYWRpbmcoKTtcclxuICAgIHRoaXMuaW5pdEZpbHRlcnMgPSB7fTtcclxuICAgIHRoaXMuaW5pdEdsb2JhbFNlYXJjaCA9ICcnO1xyXG4gICAgdGhpcy5zb3J0LnNvcnQoeyBpZDogJycsIHN0YXJ0OiAnYXNjJywgZGlzYWJsZUNsZWFyOiBmYWxzZSB9KTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zaG93VGFibGUgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNldERpc3BsYXllZENvbHVtbnMoKTtcclxuICAgICAgdGhpcy5zZXRJbml0VGFibGUoKTtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGRzIGEgbmV3IHJvdyB0byB0aGUgbG9jYWwgdGFibGUgY29weSBvbmx5LlxyXG4gICAqIFRoZSByb3cgaXMgdHJhY2tlZCBpbiBhY3RpdmVSb3dzQ3JlYXRpbmcgdW50aWwgc2F2ZWQuXHJcbiAgICogV2hlbiBzYXZlZCwgdGhlIHBhcmVudCByZWNlaXZlcyB0aGUgZXZlbnQgdGhyb3VnaCBzYXZlTmV3Q3JlYXRlZFJvdyBvdXRwdXQuXHJcbiAgICogVGhlIHBhcmVudCBkZWNpZGVzIHdoZXRoZXIgdG8gYWNjZXB0IGFuZCBhZGQgdG8gdGhlaXIgZGF0YSBhcnJheS5cclxuICAgKi9cclxuICBhZGROZXdSb3coKSB7XHJcbiAgICAvLyBDcmVhdGUgbmV3IHJvdyB3aXRoIGdlbmVyYXRlZCBJRCBhbmQgZGVmYXVsdCB2YWx1ZXMgZm9yIGVhY2ggY29sdW1uXHJcbiAgICBjb25zdCBuZXdSb3c6IGFueSA9IHtcclxuICAgICAgaWQ6IFN0QmFzZVNlcnZpY2UuZ2VuZXJhdGVHVUlEKCksXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEluaXRpYWxpemUgZmllbGRzIHdpdGggbnVsbC9kZWZhdWx0IHZhbHVlc1xyXG4gICAgdGhpcy5jb2x1bW5zXHJcbiAgICAgIC5maWx0ZXIoY29sID0+IGNvbC5hbGxvd0VkaXRDb2x1bW4pXHJcbiAgICAgIC5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgICAgbmV3Um93W2NvbC5maWVsZF0gPSBudWxsO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAvLyBBZGQgdG8gbG9jYWwgdGFibGUgY29weSBvbmx5XHJcbiAgICB0aGlzLnRhYmxlU291cmNlLmRhdGEgPSBbLi4udGhpcy50YWJsZVNvdXJjZS5kYXRhLCBuZXdSb3ddO1xyXG4gICAgdGhpcy5hY3RpdmVSb3dzQ3JlYXRpbmdbbmV3Um93LmlkXSA9IHsgLi4ubmV3Um93IH07XHJcblxyXG4gICAgLy8gTmF2aWdhdGUgdG8gbGFzdCBwYWdlIHRvIHNob3cgdGhlIG5ldyByb3dcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnBhZ2luYXRvci5sYXN0UGFnZSgpO1xyXG4gICAgfSwgMTAwKTtcclxuXHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgZWRpdFJvdyhyb3c6IGFueSwgY29sdW1uOiBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwpIHtcclxuICAgIHRoaXMuYWN0aXZlUm93c0VkaXRpbmdbcm93LmlkXSA9IHsgLi4ucm93IH07XHJcbiAgfVxyXG5cclxuICBkZWxldGVSb3cocm93OiBhbnksIGNvbHVtbjogVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsLCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBhYnNvbHV0ZUluZGV4ID0gdGhpcy5nZXRBYnNvbHV0ZUluZGV4KGluZGV4KTtcclxuICAgIHRoaXMuc3REaWFsb2dTZXJ2aWNlXHJcbiAgICAgIC5zaG93Q29uZmlybWF0aW9uKCdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgcm93PycpXHJcbiAgICAgIC5waXBlKGZpbHRlcihTdEJhc2VTZXJ2aWNlLm5vdE51bGwpKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgdGhpcy50YWJsZVNvdXJjZS5kYXRhID0gdGhpcy50YWJsZVNvdXJjZS5kYXRhLmZpbHRlcihcclxuICAgICAgICAgIGRhdGEgPT4gZGF0YS5pZCAhPT0gcm93LmlkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnJvd0RlbGV0ZWQuZW1pdCh7IHJvdywgaW5kZXg6IGFic29sdXRlSW5kZXggfSk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGF0ZXMgYW5kIHNhdmVzIGEgcm93IChlaXRoZXIgbmV3IG9yIGVkaXRlZCkuXHJcbiAgICogRW1pdHMgdGhlIHZhbGlkYXRlZCByb3cgdG8gdGhlIHBhcmVudCB0aHJvdWdoIGVpdGhlcjpcclxuICAgKiAtIHNhdmVOZXdDcmVhdGVkUm93OiBmb3IgbmV3bHkgY3JlYXRlZCByb3dzXHJcbiAgICogLSBzYXZlTmV3Um93OiBmb3IgZWRpdGVkIGV4aXN0aW5nIHJvd3NcclxuICAgKlxyXG4gICAqIFRoZSBwYXJlbnQgaXMgcmVzcG9uc2libGUgZm9yOlxyXG4gICAqIC0gUGVyc2lzdGluZyB0aGUgY2hhbmdlIChlLmcuLCBBUEkgY2FsbClcclxuICAgKiAtIFVwZGF0aW5nIHRoZWlyIGRhdGEgYXJyYXlcclxuICAgKiAtIEhhbmRsaW5nIGVycm9ycy9yZWplY3Rpb25zXHJcbiAgICpcclxuICAgKiBUaGUgbGlicmFyeSB1cGRhdGVzIGl0cyBsb2NhbCBjb3B5IG9wdGltaXN0aWNhbGx5LlxyXG4gICAqL1xyXG4gIHNhdmVFZGl0Um93KHJvdzogYW55LCBjb2x1bW46IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbCwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgYWJzb2x1dGVJbmRleCA9IHRoaXMuZ2V0QWJzb2x1dGVJbmRleChpbmRleCk7XHJcbiAgICBjb25zdCBpc0NyZWF0aW5nVGhpc1JvdyA9ICEhdGhpcy5hY3RpdmVSb3dzQ3JlYXRpbmdbcm93LmlkXTtcclxuICAgIGNvbnN0IHJvd0RhdGEgPSBpc0NyZWF0aW5nVGhpc1Jvd1xyXG4gICAgICA/IHRoaXMuYWN0aXZlUm93c0NyZWF0aW5nW3Jvdy5pZF1cclxuICAgICAgOiB0aGlzLmFjdGl2ZVJvd3NFZGl0aW5nW3Jvdy5pZF07XHJcblxyXG4gICAgLy8gVmFsaWRhdGUgcm93XHJcbiAgICBpZiAoIXRoaXMudmFsaWRhdGVSb3cocm93RGF0YSwgcm93KSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRW1pdCB0byBwYXJlbnRcclxuICAgIGlmIChpc0NyZWF0aW5nVGhpc1Jvdykge1xyXG4gICAgICB0aGlzLnNhdmVDcmVhdGVkUm93LmVtaXQoeyAuLi5yb3dEYXRhIH0pO1xyXG4gICAgICBkZWxldGUgdGhpcy5hY3RpdmVSb3dzQ3JlYXRpbmdbcm93LmlkXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2F2ZUVkaXRlZFJvdy5lbWl0KHsgcm93OiB7IC4uLnJvd0RhdGEgfSwgaW5kZXg6IGFic29sdXRlSW5kZXggfSk7XHJcbiAgICAgIGRlbGV0ZSB0aGlzLmFjdGl2ZVJvd3NFZGl0aW5nW3Jvdy5pZF07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXBkYXRlIGxvY2FsIHRhYmxlIGNvcHlcclxuICAgIHRoaXMudXBkYXRlUm93SW5EYXRhU291cmNlKGFic29sdXRlSW5kZXgsIHJvdywgcm93RGF0YSk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsRWRpdFJvdyhyb3c6IGFueSwgY29sdW1uOiBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwpIHtcclxuICAgIC8vIENoZWNrIGlmIHRoaXMgc3BlY2lmaWMgcm93IGlzIGJlaW5nIGNyZWF0ZWRcclxuICAgIGNvbnN0IGlzQ3JlYXRpbmdUaGlzUm93ID0gISF0aGlzLmFjdGl2ZVJvd3NDcmVhdGluZ1tyb3cuaWRdO1xyXG5cclxuICAgIGlmIChpc0NyZWF0aW5nVGhpc1Jvdykge1xyXG4gICAgICAvLyBSZW1vdmUgZnJvbSBsb2NhbCB0YWJsZSBjb3B5XHJcbiAgICAgIHRoaXMudGFibGVTb3VyY2UuZGF0YSA9IHRoaXMudGFibGVTb3VyY2UuZGF0YS5maWx0ZXIoXHJcbiAgICAgICAgZGF0YSA9PiBkYXRhLmlkICE9PSByb3cuaWRcclxuICAgICAgKTtcclxuICAgICAgZGVsZXRlIHRoaXMuYWN0aXZlUm93c0NyZWF0aW5nW3Jvdy5pZF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkZWxldGUgdGhpcy5hY3RpdmVSb3dzRWRpdGluZ1tyb3cuaWRdO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENsZWFyIHZhbGlkYXRpb24gZXJyb3JzIGZvciB0aGlzIHJvd1xyXG4gICAgaWYgKHRoaXMudmFsaWRhdGlvbkVycm9yc1tyb3cuaWRdKSB7XHJcbiAgICAgIGRlbGV0ZSB0aGlzLnZhbGlkYXRpb25FcnJvcnNbcm93LmlkXTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBpbW1lZGlhdGUgZmllbGQgdmFsdWUgY2hhbmdlcyBmb3IgYXV0by1zYXZlIG1vZGUuXHJcbiAgICogSW4gYXV0by1zYXZlIG1vZGUsIG5nTW9kZWwgaXMgYm91bmQgZGlyZWN0bHkgdG8gcm93RGF0YSwgc28gd2UgZG9uJ3QgbmVlZCB0byB1cGRhdGUgaXQuXHJcbiAgICogV2Ugb25seSBlbWl0IHRvIHBhcmVudCBzbyB0aGV5IGNhbiB1cGRhdGUgdGhlaXIgZGF0YSBjb3B5LlxyXG4gICAqL1xyXG4gIG9uRmllbGRWYWx1ZUNoYW5nZWQoXHJcbiAgICByb3c6IGFueSxcclxuICAgIGNvbHVtbjogVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsLFxyXG4gICAgdmFsdWU6IGFueSxcclxuICAgIGluZGV4OiBudW1iZXJcclxuICApIHtcclxuICAgIGNvbnN0IGFic29sdXRlSW5kZXggPSB0aGlzLmdldEFic29sdXRlSW5kZXgoaW5kZXgpO1xyXG4gICAgdGhpcy50YWJsZVNvdXJjZS5kYXRhW2Fic29sdXRlSW5kZXhdW2NvbHVtbi5maWVsZF0gPSB2YWx1ZTtcclxuXHJcbiAgICAvLyBWYWxpZGF0ZSB0aGUgZmllbGQgaWYgYXV0b1NhdmVPbkNoYW5nZSBpcyBlbmFibGVkXHJcbiAgICBpZiAodGhpcy5hdXRvU2F2ZU9uQ2hhbmdlKCkpIHtcclxuICAgICAgLy8gVXNlIHZhbGlkYXRlUm93IHdpdGggc2luZ2xlIGNvbHVtbiB0byB2YWxpZGF0ZSBqdXN0IHRoaXMgZmllbGRcclxuICAgICAgdGhpcy52YWxpZGF0ZVJvdyhyb3csIHJvdywgY29sdW1uKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBFbWl0IHRvIHBhcmVudCBpbW1lZGlhdGVseVxyXG4gICAgLy8gVGhlIHJvdyBvYmplY3QgaXMgYWxyZWFkeSB1cGRhdGVkIGJ5IG5nTW9kZWwgYmluZGluZ1xyXG4gICAgdGhpcy5maWVsZFZhbHVlQ2hhbmdlZC5lbWl0KHtcclxuICAgICAgcm93OiB7IC4uLnJvdyB9LFxyXG4gICAgICBmaWVsZDogY29sdW1uLmZpZWxkLFxyXG4gICAgICB2YWx1ZTogdmFsdWUsXHJcbiAgICAgIGluZGV4OiBhYnNvbHV0ZUluZGV4LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbXBhcmVSb3dzKGE6IGFueSwgYjogYW55KTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGFJZCA9IGE/LmlkID8/IGE7XHJcbiAgICBjb25zdCBiSWQgPSBiPy5pZCA/PyBiO1xyXG4gICAgcmV0dXJuIGFJZCA9PT0gYklkID8gMCA6IDE7XHJcbiAgfVxyXG5cclxuICBpc1Jvd1NlbGVjdGVkKHJvdzogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFJvd3MoKS5zb21lKHIgPT4gdGhpcy5jb21wYXJlUm93cyhyLCByb3cpID09PSAwKTtcclxuICB9XHJcblxyXG4gIGlzQWxsU2VsZWN0ZWQoKSB7XHJcbiAgICBjb25zdCBudW1TZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRSb3dzKCkubGVuZ3RoO1xyXG4gICAgaWYgKHRoaXMudGFibGVTb3VyY2UpIHtcclxuICAgICAgY29uc3QgbnVtUm93cyA9IHRoaXMudGFibGVTb3VyY2UuZGF0YS5sZW5ndGg7XHJcbiAgICAgIHJldHVybiBudW1TZWxlY3RlZCA9PT0gbnVtUm93cztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZUFsbFJvd3MoZXZlbnQ6IGJvb2xlYW4pIHtcclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy5zZXQoWy4uLnRoaXMudGFibGVTb3VyY2UuZGF0YV0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd3Muc2V0KFtdKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdFJvd0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKCkpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlU2VsZWN0ZWRSb3cocm93OiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnVwZGF0ZShzZWxlY3RlZCA9PlxyXG4gICAgICBzZWxlY3RlZC5maWx0ZXIociA9PiB0aGlzLmNvbXBhcmVSb3dzKHIsIHJvdykgIT09IDApXHJcbiAgICApO1xyXG4gICAgdGhpcy5zZWxlY3RSb3dDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkUm93cygpKTtcclxuICB9XHJcblxyXG4gIG9uUmVtb3ZlU2VsZWN0ZWRSb3cocm93OiBhbnkpIHtcclxuICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWRSb3cocm93KTtcclxuICB9XHJcblxyXG4gIHNlbGVjdFJvd0NoYW5nZWQodmFsdWU6IGJvb2xlYW4sIHJvdzogYW55KSB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0Um93T25seU9uZSgpKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3Muc2V0KFtyb3ddKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93cy51cGRhdGUoc2VsZWN0ZWQgPT4gWy4uLnNlbGVjdGVkLCByb3ddKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd3MudXBkYXRlKHNlbGVjdGVkID0+XHJcbiAgICAgICAgc2VsZWN0ZWQuZmlsdGVyKHIgPT4gdGhpcy5jb21wYXJlUm93cyhyLCByb3cpICE9PSAwKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB0aGlzLnNlbGVjdFJvd0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKCkpO1xyXG4gIH1cclxuXHJcbiAgY2xpY2tSb3dBY3Rpb24ocm93OiBhbnksIGluZGV4OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLmFsbG93RXh0ZW5kUm93KCkpIHtcclxuICAgICAgaWYgKHRoaXMuZXhwYW5kZWRSb3dJbmRleCgpID09PSBpbmRleCkge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kZWRSb3dJbmRleC5zZXQobnVsbCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZFJvd0luZGV4LnNldChpbmRleCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5hbGxvd1NlbGVjdFJvdygpKSB7XHJcbiAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLmlzUm93U2VsZWN0ZWQocm93KTtcclxuICAgICAgdGhpcy5zZWxlY3RSb3dDaGFuZ2VkKCFpc1NlbGVjdGVkLCByb3cpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMucm93Q2xpY2tBY3Rpb24oKSkge1xyXG4gICAgICAgIHRoaXMucm93Q2xpY2tBY3Rpb24oKSEocm93KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0QWJzb2x1dGVJbmRleChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGlmICh0aGlzLmxhenlMb2FkaW5nKCkpIHtcclxuICAgICAgcmV0dXJuIGluZGV4O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMucGFnaW5hdG9yXHJcbiAgICAgICAgPyB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggKiB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSArIGluZGV4XHJcbiAgICAgICAgOiBpbmRleDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q29sdW1uc0ZpbHRlclJvd0VkaXRUeXBlcygpIHtcclxuICAgIHRoaXMuaW5pdExvY2FsQ29sdW1ucygpLmZvckVhY2goY29sdW1uID0+IHtcclxuICAgICAgaWYgKGNvbHVtbi5maWVsZCA9PT0gJ2FjdGlvbnMnICYmICFjb2x1bW4udHlwZSkge1xyXG4gICAgICAgIGNvbHVtbi50eXBlID0gJ2FjdGlvbnMnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWNvbHVtbi5maWx0ZXJUeXBlICYmIGNvbHVtbi5maWx0ZXIpIHtcclxuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICBjb2x1bW4uZmlsdGVyVHlwZSA9ICdzdHJpbmcnO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICBjb2x1bW4uZmlsdGVyVHlwZSA9ICdudW1iZXInO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdkYXRlJykge1xyXG4gICAgICAgICAgY29sdW1uLmZpbHRlclR5cGUgPSAnZGF0ZSc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2N1c3RvbS10ZW1wbGF0ZScpIHtcclxuICAgICAgICAgIGNvbHVtbi5maWx0ZXJUeXBlID0gJ2N1c3RvbSc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgICBjb2x1bW4uZmlsdGVyVHlwZSA9ICdib29sZWFuJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29sdW1uLmZpbHRlclR5cGUgPSAnc3RyaW5nJztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmFsbG93RWRpdFJvdygpICYmICFjb2x1bW4ucm93RWRpdFR5cGUpIHtcclxuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICBjb2x1bW4ucm93RWRpdFR5cGUgPSAnc3RyaW5nJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgY29sdW1uLnJvd0VkaXRUeXBlID0gJ251bWJlcic7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgICAgICBjb2x1bW4ucm93RWRpdFR5cGUgPSAnZGF0ZSc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2N1c3RvbS10ZW1wbGF0ZScpIHtcclxuICAgICAgICAgIGNvbHVtbi5yb3dFZGl0VHlwZSA9ICdjdXN0b20nO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgICAgY29sdW1uLnJvd0VkaXRUeXBlID0gJ2Jvb2xlYW4nO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb2x1bW4ucm93RWRpdFR5cGUgPSAnc3RyaW5nJztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVDdXN0b21GaWx0ZXJGb3JMb2NhbFRhYmxlKCkge1xyXG4gICAgbGV0IGZpbHRlckZ1bmN0aW9uID0gKGRhdGE6IGFueSwgZmlsdGVyOiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICAgICAgY29uc3Qgc2VhcmNoVGVybXM6IHtcclxuICAgICAgICBbY29sdW1uOiBzdHJpbmddOiBTdE1hdGVyaWFsVGFibGVGaWx0ZXI7XHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgIHN0R2xvYmFsU2VhcmNoOiBzdHJpbmc7XHJcbiAgICAgIH0gPSBKU09OLnBhcnNlKGZpbHRlcik7XHJcbiAgICAgIGNvbnN0IHNlYXJjaFRlcm1zS2V5cyA9IE9iamVjdC5rZXlzKHNlYXJjaFRlcm1zKTtcclxuICAgICAgbGV0IHNlYXJjaE9rID0gdHJ1ZTtcclxuICAgICAgbGV0IHNlYXJjaE9rR2xvYmFsID0gdHJ1ZTtcclxuXHJcbiAgICAgIHNlYXJjaFRlcm1zS2V5cy5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGtleSAhPT0gJ3N0R2xvYmFsU2VhcmNoJyAmJlxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnNTdHJpbmcuaW5jbHVkZXMoa2V5KSAmJlxyXG4gICAgICAgICAgc2VhcmNoVGVybXNba2V5XS52YWx1ZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2VhcmNoVGVybXNba2V5XS52YWx1ZSkpIHtcclxuICAgICAgICAgICAgY29uc3QgZGF0ZUZyb206IHN0cmluZyB8IG51bGwgPSAoXHJcbiAgICAgICAgICAgICAgc2VhcmNoVGVybXNba2V5XS52YWx1ZSBhcyBbc3RyaW5nIHwgbnVsbCwgc3RyaW5nIHwgbnVsbF1cclxuICAgICAgICAgICAgKVswXTtcclxuICAgICAgICAgICAgY29uc3QgZGF0ZVRvOiBzdHJpbmcgfCBudWxsID0gKFxyXG4gICAgICAgICAgICAgIHNlYXJjaFRlcm1zW2tleV0udmFsdWUgYXMgW3N0cmluZyB8IG51bGwsIHN0cmluZyB8IG51bGxdXHJcbiAgICAgICAgICAgIClbMV07XHJcblxyXG4gICAgICAgICAgICBpZiAoZGF0ZUZyb20gfHwgZGF0ZVRvKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdG1wQ29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoY29sID0+IGNvbC5maWVsZCA9PT0ga2V5KTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHRtcENvbHVtbiAmJiB0bXBDb2x1bW4udHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlRnJvbVZhbHVlID0gZGF0ZUZyb20gPyBuZXcgRGF0ZShkYXRlRnJvbSkgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZVRvVmFsdWUgPSBkYXRlVG9cclxuICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShcclxuICAgICAgICAgICAgICAgICAgICAgIG5ldyBEYXRlKGRhdGVUbykuc2V0RGF0ZShuZXcgRGF0ZShkYXRlVG8pLmdldERhdGUoKSArIDEpXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0YWJsZURhdGEgPSBuZXcgRGF0ZShkYXRhW2tleV0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChkYXRlRnJvbVZhbHVlICYmIGRhdGVUb1ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgIHNlYXJjaE9rID1cclxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hPayAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlRGF0YSA+PSBkYXRlRnJvbVZhbHVlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGFibGVEYXRhIDw9IGRhdGVUb1ZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRlRnJvbVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgIHNlYXJjaE9rID0gc2VhcmNoT2sgJiYgdGFibGVEYXRhID49IGRhdGVGcm9tVmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGVUb1ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgIHNlYXJjaE9rID0gc2VhcmNoT2sgJiYgdGFibGVEYXRhIDw9IGRhdGVUb1ZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgICAgZGF0YVtrZXldICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgICAgc2VhcmNoVGVybXNba2V5XS52YWx1ZSAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgICAgc2VhcmNoVGVybXNba2V5XS52YWx1ZSAhPT0gbnVsbFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICBzZWFyY2hPayA9XHJcbiAgICAgICAgICAgICAgICBzZWFyY2hPayAmJlxyXG4gICAgICAgICAgICAgICAgKHNlYXJjaFRlcm1zW2tleV0ubWF0Y2hNb2RlID09PSAnZXF1YWwnXHJcbiAgICAgICAgICAgICAgICAgID8gZGF0YVtrZXldID09PSBzZWFyY2hUZXJtc1trZXldLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgIDogZGF0YVtrZXldXHJcbiAgICAgICAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgICAgICAgIC5pbmRleE9mKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hUZXJtc1trZXldLnZhbHVlIS50b1N0cmluZygpLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgICAgICAgICkgIT09IC0xKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChzZWFyY2hUZXJtcy5zdEdsb2JhbFNlYXJjaCkge1xyXG4gICAgICAgIHNlYXJjaE9rR2xvYmFsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnNTdHJpbmcuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgICAgaWYgKGRhdGFbY29sXSkge1xyXG4gICAgICAgICAgICBzZWFyY2hPa0dsb2JhbCA9XHJcbiAgICAgICAgICAgICAgc2VhcmNoT2tHbG9iYWwgfHxcclxuICAgICAgICAgICAgICBkYXRhW2NvbF1cclxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgLmluZGV4T2YoXHJcbiAgICAgICAgICAgICAgICAgIHNlYXJjaFRlcm1zLnN0R2xvYmFsU2VhcmNoLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgKSAhPT0gLTE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEFwcGx5IGN1c3RvbSBmaWx0ZXIgbWV0aG9kIGlmIHByb3ZpZGVkXHJcbiAgICAgIGxldCBjdXN0b21GaWx0ZXJPayA9IHRydWU7XHJcbiAgICAgIGlmICh0aGlzLmluaXRGaWx0ZXJNZXRob2QoKSkge1xyXG4gICAgICAgIGN1c3RvbUZpbHRlck9rID0gdGhpcy5pbml0RmlsdGVyTWV0aG9kKCkhKGRhdGEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gc2VhcmNoT2sgJiYgc2VhcmNoT2tHbG9iYWwgJiYgY3VzdG9tRmlsdGVyT2s7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGZpbHRlckZ1bmN0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlbWl0TGF6eUxvYWRpbmcoKSB7XHJcbiAgICBpZiAodGhpcy5sYXp5TG9hZGluZygpKSB7XHJcbiAgICAgIGNvbnN0IGxvYWREYXRhUmVxdWVzdDogU3RNYXRlcmlhbFRhYmxlTG9hZERhdGEgPSB7XHJcbiAgICAgICAgZmlyc3Q6IHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCAqIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplLFxyXG4gICAgICAgIHJvd3M6IHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplLFxyXG4gICAgICAgIGdsb2JhbEZpbHRlckNvbHVtbnM6IHRoaXMuc2VsZWN0ZWRDb2x1bW5zU3RyaW5nLFxyXG4gICAgICAgIGdsb2JhbEZpbHRlcjogdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLmdsb2JhbFNlYXJjaCxcclxuICAgICAgICBzb3J0RmllbGQ6IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5zb3J0RmllbGQsXHJcbiAgICAgICAgc29ydE9yZGVyOiB0aGlzLmxvY2FsU3RvcmFnZURhdGEuc29ydE9yZGVyLFxyXG4gICAgICAgIGZpbHRlcnM6IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5maWx0ZXJzLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5sb2FkRGF0YS5lbWl0KGxvYWREYXRhUmVxdWVzdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRhYmxlU291cmNlLmZpbHRlciA9IEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAuLi50aGlzLmxvY2FsU3RvcmFnZURhdGEuZmlsdGVycyxcclxuICAgICAgICBzdEdsb2JhbFNlYXJjaDogdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLmdsb2JhbFNlYXJjaCxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZURhdGFUb0xvY2FsU3RvcmFnZSgpIHtcclxuICAgIGlmICh0aGlzLmxvY2FsU3RvcmFnZU5hbWUoKSkge1xyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcclxuICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZU5hbWUoKSEsXHJcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5sb2NhbFN0b3JhZ2VEYXRhKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRJbml0VGFibGUoKSB7XHJcbiAgICB0aGlzLnRhYmxlU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSh0aGlzLl9kYXRhKTtcclxuXHJcbiAgICB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSA9IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5wYWdlU2l6ZTtcclxuICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5wYWdlSW5kZXg7XHJcblxyXG4gICAgaWYgKHRoaXMubG9jYWxTdG9yYWdlRGF0YS5zb3J0RmllbGQgJiYgdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLnNvcnRPcmRlcikge1xyXG4gICAgICBjb25zdCBkaXNhYmxlQ2xlYXIgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zb3J0LnNvcnQoeyBpZDogJycsIHN0YXJ0OiAnYXNjJywgZGlzYWJsZUNsZWFyIH0pO1xyXG4gICAgICB0aGlzLnNvcnQuc29ydCh7XHJcbiAgICAgICAgaWQ6IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5zb3J0RmllbGQsXHJcbiAgICAgICAgc3RhcnQ6IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5zb3J0T3JkZXIsXHJcbiAgICAgICAgZGlzYWJsZUNsZWFyLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMubGF6eUxvYWRpbmcoKSEpIHtcclxuICAgICAgdGhpcy50YWJsZVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcclxuICAgICAgdGhpcy50YWJsZVNvdXJjZS5zb3J0ID0gdGhpcy5zb3J0O1xyXG4gICAgICB0aGlzLnRhYmxlU291cmNlLmZpbHRlclByZWRpY2F0ZSA9IHRoaXMuY3JlYXRlQ3VzdG9tRmlsdGVyRm9yTG9jYWxUYWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZW1pdExhenlMb2FkaW5nKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFNvcnRQYWdlU3Vic2NyaXB0aW9uKCkge1xyXG4gICAgdGhpcy5zb3J0LnNvcnRDaGFuZ2VcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubmdEZXN0cm95ZWQkKSxcclxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChcclxuICAgICAgICAgIChwcmV2LCBjdXJyKSA9PiBKU09OLnN0cmluZ2lmeShwcmV2KSA9PT0gSlNPTi5zdHJpbmdpZnkoY3VycilcclxuICAgICAgICApXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgIHRoaXMubG9jYWxTdG9yYWdlRGF0YSA9IHtcclxuICAgICAgICAgIC4uLnRoaXMubG9jYWxTdG9yYWdlRGF0YSxcclxuICAgICAgICAgIHNvcnRGaWVsZDogcmVzLmFjdGl2ZSxcclxuICAgICAgICAgIHNvcnRPcmRlcjogcmVzLmRpcmVjdGlvbixcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMudXBkYXRlRGF0YVRvTG9jYWxTdG9yYWdlKCk7XHJcbiAgICAgICAgdGhpcy5lbWl0TGF6eUxvYWRpbmcoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5wYWdpbmF0b3IucGFnZVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5uZ0Rlc3Ryb3llZCQpLFxyXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKFxyXG4gICAgICAgICAgKHByZXYsIGN1cnIpID0+IEpTT04uc3RyaW5naWZ5KHByZXYpID09PSBKU09OLnN0cmluZ2lmeShjdXJyKVxyXG4gICAgICAgIClcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VEYXRhID0ge1xyXG4gICAgICAgICAgLi4udGhpcy5sb2NhbFN0b3JhZ2VEYXRhLFxyXG4gICAgICAgICAgcGFnZUluZGV4OiB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXgsXHJcbiAgICAgICAgICBwYWdlU2l6ZTogdGhpcy5wYWdpbmF0b3IucGFnZVNpemUsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXRhVG9Mb2NhbFN0b3JhZ2UoKTtcclxuICAgICAgICB0aGlzLmVtaXRMYXp5TG9hZGluZygpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RGlzcGxheWVkQ29sdW1ucygpIHtcclxuICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuaW5pdExvY2FsQ29sdW1ucygpLm1hcChjb2wgPT4ge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIC4uLmNvbCxcclxuICAgICAgICB0eXBlOiBjb2wudHlwZSA/IGNvbC50eXBlIDogJ3N0cmluZycsXHJcbiAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICBleHBhbmRlZDogdHJ1ZSxcclxuICAgICAgICBpc0VkaXRpbmc6IGZhbHNlLFxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZXRDb2x1bW5zT3JkZXIoKTtcclxuICAgIHRoaXMuc2V0Q29sdW1uc1Zpc2libGUoKTtcclxuICAgIHRoaXMuc2V0U2VsZWN0ZWRDb2x1bW5zKCk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRDb2x1bW5zT3JkZXIoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NhbFN0b3JhZ2VEYXRhPy5jb2x1bW5zT3JkZXIpIHtcclxuICAgICAgdGhpcy5jb2x1bW5zID0gW1xyXG4gICAgICAgIC4uLnRoaXMubG9jYWxTdG9yYWdlRGF0YS5jb2x1bW5zT3JkZXJcclxuICAgICAgICAgIC5maWx0ZXIoY29sdW1uID0+IHRoaXMuY29sdW1ucy5maW5kKGNvbCA9PiBjb2wuZmllbGQgPT09IGNvbHVtbikpXHJcbiAgICAgICAgICAubWFwKGNvbHVtbiA9PiB0aGlzLmNvbHVtbnMuZmluZChjb2wgPT4gY29sLmZpZWxkID09PSBjb2x1bW4pISksXHJcbiAgICAgICAgLi4udGhpcy5jb2x1bW5zLmZpbHRlcihcclxuICAgICAgICAgIGNvbHVtbiA9PiAhdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLmNvbHVtbnNPcmRlci5pbmNsdWRlcyhjb2x1bW4uZmllbGQpXHJcbiAgICAgICAgKSxcclxuICAgICAgXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q29sdW1uc1Zpc2libGUoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NhbFN0b3JhZ2VEYXRhPy5zZWxlY3RlZENvbHVtbnMpIHtcclxuICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChjb2wgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi5jb2wsXHJcbiAgICAgICAgICB2aXNpYmxlOlxyXG4gICAgICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZURhdGEuc2VsZWN0ZWRDb2x1bW5zLmluY2x1ZGVzKGNvbC5maWVsZCkgfHxcclxuICAgICAgICAgICAgIXRoaXMubG9jYWxTdG9yYWdlRGF0YS5jb2x1bW5zT3JkZXIuaW5jbHVkZXMoY29sLmZpZWxkKSxcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U2VsZWN0ZWRDb2x1bW5zKCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbCA9PiB7XHJcbiAgICAgIHJldHVybiBjb2wudmlzaWJsZTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnNTdHJpbmcgPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5tYXAoY29sID0+IGNvbC5maWVsZCk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkTG9jYWxTdG9yYWdlRGF0YSgpIHtcclxuICAgIGlmICh0aGlzLmxvY2FsU3RvcmFnZU5hbWUoKSkge1xyXG4gICAgICBjb25zdCBsb2NhbFN0b3JhZ2VEYXRhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5sb2NhbFN0b3JhZ2VOYW1lKCkhKTtcclxuXHJcbiAgICAgIGlmIChsb2NhbFN0b3JhZ2VEYXRhKSB7XHJcbiAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VEYXRhID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2VEYXRhKTtcclxuICAgICAgICAvLyBjb25zdCBmaWx0ZXJzID0gdGhpcy52YWxpZE9sZEZpbHRlcnNUb05ld0Zvcm1hdChcclxuICAgICAgICAvLyAgIHRoaXMubG9jYWxTdG9yYWdlRGF0YS5maWx0ZXJzXHJcbiAgICAgICAgLy8gKTtcclxuICAgICAgICAvLyB0aGlzLmxvY2FsU3RvcmFnZURhdGEuZmlsdGVycyA9IGZpbHRlcnM7XHJcbiAgICAgICAgdGhpcy5pbml0RmlsdGVycyA9IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5maWx0ZXJzO1xyXG5cclxuICAgICAgICB0aGlzLmluaXRHbG9iYWxTZWFyY2ggPSB0aGlzLmxvY2FsU3RvcmFnZURhdGEuZ2xvYmFsU2VhcmNoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2V0TmV3RW1wdHlMb2NhbFN0b3JhZ2VEYXRhKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0TmV3RW1wdHlMb2NhbFN0b3JhZ2VEYXRhKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbGlkT2xkRmlsdGVyc1RvTmV3Rm9ybWF0KG9sZEZpbHRlcnM6IHtcclxuICAgIFtrZXk6IHN0cmluZ106IFN0TWF0ZXJpYWxUYWJsZUZpbHRlciB8IHN0cmluZztcclxuICB9KTogeyBba2V5OiBzdHJpbmddOiBTdE1hdGVyaWFsVGFibGVGaWx0ZXIgfSB7XHJcbiAgICBjb25zdCBuZXdGaWx0ZXJzOiB7IFtrZXk6IHN0cmluZ106IFN0TWF0ZXJpYWxUYWJsZUZpbHRlciB9ID0ge307XHJcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2xkRmlsdGVycyk7XHJcblxyXG4gICAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBuZXdGaWx0ZXJzO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xyXG4gICAgICBpZiAodHlwZW9mIG9sZEZpbHRlcnNba2V5XSA9PT0gJ29iamVjdCcgJiYgb2xkRmlsdGVyc1trZXldICE9PSBudWxsKSB7XHJcbiAgICAgICAgbmV3RmlsdGVyc1trZXldID0gb2xkRmlsdGVyc1trZXldIGFzIFN0TWF0ZXJpYWxUYWJsZUZpbHRlcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXdGaWx0ZXJzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXROZXdFbXB0eUxvY2FsU3RvcmFnZURhdGEoKSB7XHJcbiAgICB0aGlzLmxvY2FsU3RvcmFnZURhdGEgPSB7XHJcbiAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplKCksXHJcbiAgICAgIHBhZ2VJbmRleDogMCxcclxuICAgICAgc2VsZWN0ZWRDb2x1bW5zOiB0aGlzLmluaXRMb2NhbENvbHVtbnMoKS5tYXAoY29sID0+IGNvbC5maWVsZCksXHJcbiAgICAgIGdsb2JhbFNlYXJjaDogJycsXHJcbiAgICAgIGNvbHVtbnNPcmRlcjogdGhpcy5pbml0TG9jYWxDb2x1bW5zKCkubWFwKGNvbCA9PiBjb2wuZmllbGQpLFxyXG4gICAgICBmaWx0ZXJzOiB7fSxcclxuICAgICAgc29ydEZpZWxkOiAnJyxcclxuICAgICAgc29ydE9yZGVyOiAnYXNjJyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBpc0ZpcnN0RWRpdGFibGVDb2x1bW4oY29sdW1uOiBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwpOiBib29sZWFuIHtcclxuICAgIC8vIEdldCBhbGwgZWRpdGFibGUgY29sdW1ucyBpbiBvcmRlclxyXG4gICAgY29uc3QgZWRpdGFibGVDb2x1bW5zID0gdGhpcy5zZWxlY3RlZENvbHVtbnMuZmlsdGVyKFxyXG4gICAgICBjb2wgPT4gY29sLmFsbG93RWRpdENvbHVtbiAmJiBjb2wudmlzaWJsZVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCBlZGl0YWJsZSBjb2x1bW5cclxuICAgIHJldHVybiAoXHJcbiAgICAgIGVkaXRhYmxlQ29sdW1ucy5sZW5ndGggPiAwICYmIGVkaXRhYmxlQ29sdW1uc1swXS5maWVsZCA9PT0gY29sdW1uLmZpZWxkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZVJvdyhcclxuICAgIHJvd0RhdGE6IGFueSxcclxuICAgIG9yaWdpbmFsUm93OiBhbnksXHJcbiAgICBzaW5nbGVDb2x1bW4/OiBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWxcclxuICApOiBib29sZWFuIHtcclxuICAgIGNvbnNvbGUubG9nKCd2YWxpZFJvdycpO1xyXG4gICAgY29uc3QgZWRpdGFibGVDb2x1bW5zID0gc2luZ2xlQ29sdW1uXHJcbiAgICAgID8gW3NpbmdsZUNvbHVtbl1cclxuICAgICAgOiB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wuYWxsb3dFZGl0Q29sdW1uKTtcclxuICAgIGNvbnN0IHJvd0lkID0gb3JpZ2luYWxSb3cuaWQ7XHJcblxyXG4gICAgLy8gRm9yIHNpbmdsZSBmaWVsZCB2YWxpZGF0aW9uLCBwcmVzZXJ2ZSBleGlzdGluZyBlcnJvcnMgZm9yIG90aGVyIGZpZWxkc1xyXG4gICAgbGV0IGVycm9yczogeyBbZmllbGQ6IHN0cmluZ106IHN0cmluZyB9ID0gc2luZ2xlQ29sdW1uXHJcbiAgICAgID8geyAuLi50aGlzLnZhbGlkYXRpb25FcnJvcnNbcm93SWRdIH1cclxuICAgICAgOiB7fTtcclxuXHJcbiAgICAvLyBDbGVhciBhbGwgZXJyb3JzIGlmIHZhbGlkYXRpbmcgZW50aXJlIHJvd1xyXG4gICAgaWYgKCFzaW5nbGVDb2x1bW4gJiYgdGhpcy52YWxpZGF0aW9uRXJyb3JzW3Jvd0lkXSkge1xyXG4gICAgICBlcnJvcnMgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaGFzRXJyb3JzID0gZmFsc2U7XHJcbiAgICBsZXQgZmlyc3RFcnJvck1lc3NhZ2UgPSAnJztcclxuXHJcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBlZGl0YWJsZUNvbHVtbnMpIHtcclxuICAgICAgbGV0IGZpZWxkSGFzRXJyb3IgPSBmYWxzZTtcclxuICAgICAgbGV0IGVycm9yTWVzc2FnZSA9ICcnO1xyXG5cclxuICAgICAgaWYgKGNvbC5jdXN0b21FZGl0Um93VmFsaWRhdG9yKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29sLmN1c3RvbUVkaXRSb3dWYWxpZGF0b3IoXHJcbiAgICAgICAgICByb3dEYXRhW2NvbC5maWVsZF0sXHJcbiAgICAgICAgICBvcmlnaW5hbFJvd1tjb2wuZmllbGRdLFxyXG4gICAgICAgICAgb3JpZ2luYWxSb3dcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICghcmVzdWx0LmlzVmFsaWQpIHtcclxuICAgICAgICAgIGVycm9yc1tjb2wuZmllbGRdID0gcmVzdWx0LmVycm9yTWVzc2FnZTtcclxuICAgICAgICAgIGZpZWxkSGFzRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTtcclxuICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHJlc3VsdC5lcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWZpZWxkSGFzRXJyb3IgJiYgY29sLmVkaXRDb2x1bW5SZXF1aXJlZCkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gcm93RGF0YVtjb2wuZmllbGRdO1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAnJykge1xyXG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gYCR7Y29sLmhlYWRlcn0gaXMgcmVxdWlyZWRgO1xyXG4gICAgICAgICAgZXJyb3JzW2NvbC5maWVsZF0gPSBlcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgICBmaWVsZEhhc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDbGVhciBlcnJvciBmb3IgdGhpcyBmaWVsZCBpZiB2YWxpZGF0aW9uIHBhc3NlZFxyXG4gICAgICBpZiAoIWZpZWxkSGFzRXJyb3IgJiYgc2luZ2xlQ29sdW1uKSB7XHJcbiAgICAgICAgZGVsZXRlIGVycm9yc1tjb2wuZmllbGRdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDYXB0dXJlIGZpcnN0IGVycm9yIGZvciBzbmFja2JhciAob25seSB3aGVuIHZhbGlkYXRpbmcgZW50aXJlIHJvdylcclxuICAgICAgaWYgKCFzaW5nbGVDb2x1bW4gJiYgZmllbGRIYXNFcnJvciAmJiAhZmlyc3RFcnJvck1lc3NhZ2UpIHtcclxuICAgICAgICBmaXJzdEVycm9yTWVzc2FnZSA9IGVycm9yTWVzc2FnZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSB2YWxpZGF0aW9uIGVycm9yc1xyXG4gICAgaWYgKE9iamVjdC5rZXlzKGVycm9ycykubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zb2xlLmxvZyhlcnJvcnMpO1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnNbcm93SWRdID0gZXJyb3JzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGVsZXRlIHRoaXMudmFsaWRhdGlvbkVycm9yc1tyb3dJZF07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2hvdyBzbmFja2JhciBvbmx5IHdoZW4gdmFsaWRhdGluZyBlbnRpcmUgcm93IChvbiBzYXZlKVxyXG4gICAgaWYgKCFzaW5nbGVDb2x1bW4gJiYgaGFzRXJyb3JzICYmIGZpcnN0RXJyb3JNZXNzYWdlKSB7XHJcbiAgICAgIHRoaXMuc25hY2tiYXIuZXJyb3IoZmlyc3RFcnJvck1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICByZXR1cm4gIWhhc0Vycm9ycztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUm93SW5EYXRhU291cmNlKGluZGV4OiBudW1iZXIsIHJvdzogYW55LCByb3dEYXRhOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgdGhpcy50YWJsZVNvdXJjZS5kYXRhLmxlbmd0aCkge1xyXG4gICAgICBjb25zdCB1cGRhdGVkUm93ID0geyAuLi5yb3cgfTtcclxuICAgICAgdGhpcy5jb2x1bW5zXHJcbiAgICAgICAgLmZpbHRlcihjb2wgPT4gY29sLmFsbG93RWRpdENvbHVtbilcclxuICAgICAgICAuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgICAgdXBkYXRlZFJvd1tjb2wuZmllbGRdID0gcm93RGF0YVtjb2wuZmllbGRdO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy50YWJsZVNvdXJjZS5kYXRhW2luZGV4XSA9IHVwZGF0ZWRSb3c7XHJcbiAgICAgIHRoaXMudGFibGVTb3VyY2UuZGF0YSA9IFsuLi50aGlzLnRhYmxlU291cmNlLmRhdGFdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0aWFsaXplQ29sdW1ucygpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5pdExvY2FsQ29sdW1ucy5zZXQoWy4uLnRoaXMuaW5pdENvbHVtbnMoKV0pO1xyXG5cclxuICAgIC8vIEFkZCBzcGVjaWFsIGNvbHVtbnNcclxuICAgIHRoaXMuYWRkU2VsZWN0Q29sdW1uSWZOZWVkZWQoKTtcclxuICAgIHRoaXMuYWRkRWRpdENvbHVtbklmTmVlZGVkKCk7XHJcbiAgICB0aGlzLmFkZEV4dGVuZENvbHVtbklmTmVlZGVkKCk7XHJcblxyXG4gICAgdGhpcy5zZXRDb2x1bW5zRmlsdGVyUm93RWRpdFR5cGVzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZFNlbGVjdENvbHVtbklmTmVlZGVkKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmFsbG93U2VsZWN0Um93KCkpIHtcclxuICAgICAgdGhpcy5yZW1vdmVDb2x1bW5CeVR5cGUoJ2FjdGlvbnMtcm93LXNlbGVjdGluZycpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0TG9jYWxDb2x1bW5zKCkudW5zaGlmdCh7XHJcbiAgICAgIGZpZWxkOiAnYWN0aW9ucy1yb3ctc2VsZWN0aW5nJyxcclxuICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgdHlwZTogJ2FjdGlvbnMtcm93LXNlbGVjdGluZycsXHJcbiAgICAgIHNvcnQ6IGZhbHNlLFxyXG4gICAgICBmaWx0ZXI6IGZhbHNlLFxyXG4gICAgICB3aWR0aDogJzYwcHgnLFxyXG4gICAgICBzZWxlY3RDb2x1bW5MYWJlbDpcclxuICAgICAgICB0aGlzLnN0VGFibGVUcmFuc2xhdGlvbnMuZ2V0VHJhbnNsYXRpb25zKCkoKS5yb3dTZWxlY3RDb2x1bW5MYWJlbCxcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLmluaXRTZWxlY3RlZFJvdygpKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnNldChbLi4udGhpcy5pbml0U2VsZWN0ZWRSb3coKV0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRFZGl0Q29sdW1uSWZOZWVkZWQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYWxsb3dFZGl0Um93KCkgfHwgdGhpcy5hdXRvU2F2ZU9uQ2hhbmdlKCkpIHtcclxuICAgICAgdGhpcy5yZW1vdmVDb2x1bW5CeVR5cGUoJ2FjdGlvbnMtcm93LWVkaXRpbmcnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVkaXRpbmdDb2x1bW46IFN0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsID0ge1xyXG4gICAgICBmaWVsZDogJ2FjdGlvbnMtcm93LWVkaXRpbmcnLFxyXG4gICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICB0eXBlOiAnYWN0aW9ucy1yb3ctZWRpdGluZycsXHJcbiAgICAgIHNvcnQ6IGZhbHNlLFxyXG4gICAgICBmaWx0ZXI6IGZhbHNlLFxyXG4gICAgICB3aWR0aDogJzExMHB4JyxcclxuICAgICAgc2VsZWN0Q29sdW1uTGFiZWw6XHJcbiAgICAgICAgdGhpcy5zdFRhYmxlVHJhbnNsYXRpb25zLmdldFRyYW5zbGF0aW9ucygpKCkucm93QWN0aW9uc0NvbHVtbkxhYmVsLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmluaXRMb2NhbENvbHVtbnMudXBkYXRlKGNvbHVtbnMgPT4ge1xyXG4gICAgICBjb25zdCBsYXN0Q29sdW1uID0gY29sdW1uc1tjb2x1bW5zLmxlbmd0aCAtIDFdO1xyXG4gICAgICBpZiAobGFzdENvbHVtbj8udHlwZSAhPT0gJ2FjdGlvbnMnKSB7XHJcbiAgICAgICAgcmV0dXJuIFsuLi5jb2x1bW5zLCBlZGl0aW5nQ29sdW1uXTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBuZXdDb2x1bW5zID0gWy4uLmNvbHVtbnNdO1xyXG4gICAgICBuZXdDb2x1bW5zLnNwbGljZShuZXdDb2x1bW5zLmxlbmd0aCAtIDEsIDAsIGVkaXRpbmdDb2x1bW4pO1xyXG4gICAgICByZXR1cm4gbmV3Q29sdW1ucztcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRFeHRlbmRDb2x1bW5JZk5lZWRlZCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5hbGxvd0V4dGVuZFJvdygpKSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlQ29sdW1uQnlUeXBlKCdhY3Rpb25zLXJvdy1leHRlbmRpbmcnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdExvY2FsQ29sdW1ucygpLnVuc2hpZnQoe1xyXG4gICAgICBmaWVsZDogJ2FjdGlvbnMtcm93LWV4dGVuZGluZycsXHJcbiAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgIHR5cGU6ICdhY3Rpb25zLXJvdy1leHRlbmRpbmcnLFxyXG4gICAgICBzb3J0OiBmYWxzZSxcclxuICAgICAgZmlsdGVyOiBmYWxzZSxcclxuICAgICAgd2lkdGg6ICc2MHB4JyxcclxuICAgICAgc2VsZWN0Q29sdW1uTGFiZWw6XHJcbiAgICAgICAgdGhpcy5zdFRhYmxlVHJhbnNsYXRpb25zLmdldFRyYW5zbGF0aW9ucygpKCkucm93RXh0ZW5kQ29sdW1uTGFiZWwsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlQ29sdW1uQnlUeXBlKHR5cGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0TG9jYWxDb2x1bW5zLnVwZGF0ZShjb2x1bW5zID0+XHJcbiAgICAgIGNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZmllbGQgIT09IHR5cGUpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZUFuZFVwZGF0ZUZpbHRlcnMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBmaWx0ZXJLZXlzID0gT2JqZWN0LmtleXModGhpcy5pbml0RmlsdGVycyk7XHJcbiAgICBpZiAoZmlsdGVyS2V5cy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBuZXdGaWx0ZXJzOiB7IFtrZXk6IHN0cmluZ106IFN0TWF0ZXJpYWxUYWJsZUZpbHRlciB9ID0ge307XHJcblxyXG4gICAgZm9yIChjb25zdCBrZXkgb2YgZmlsdGVyS2V5cykge1xyXG4gICAgICBjb25zdCBjb2wgPSB0aGlzLmluaXRMb2NhbENvbHVtbnMoKS5maW5kKGNvbHVtbiA9PiBjb2x1bW4uZmllbGQgPT09IGtleSk7XHJcbiAgICAgIGlmICghY29sKSBjb250aW51ZTtcclxuXHJcbiAgICAgIG5ld0ZpbHRlcnNba2V5XSA9IHtcclxuICAgICAgICB2YWx1ZTogdGhpcy5nZXREZWZhdWx0RmlsdGVyVmFsdWUoY29sLCB0aGlzLmluaXRGaWx0ZXJzW2tleV0pLFxyXG4gICAgICAgIG1hdGNoTW9kZTogTWF0ZXJpYWxUYWJsZUZpbHRlckRpYWxvZ0NvbXBvbmVudC5nZXRCYXNlTWF0Y2hNb2RlQnlUeXBlKFxyXG4gICAgICAgICAgY29sLmZpbHRlclR5cGUhXHJcbiAgICAgICAgKSxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoSlNPTi5zdHJpbmdpZnkobmV3RmlsdGVycykgIT09IEpTT04uc3RyaW5naWZ5KHRoaXMuaW5pdEZpbHRlcnMpKSB7XHJcbiAgICAgIHRoaXMuaW5pdEZpbHRlcnMgPSBuZXdGaWx0ZXJzO1xyXG4gICAgICB0aGlzLmxvY2FsU3RvcmFnZURhdGEuZmlsdGVycyA9IG5ld0ZpbHRlcnM7XHJcbiAgICAgIHRoaXMudXBkYXRlRGF0YVRvTG9jYWxTdG9yYWdlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldERlZmF1bHRGaWx0ZXJWYWx1ZShcclxuICAgIGNvbDogU3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwsXHJcbiAgICBmaWx0ZXI6IFN0TWF0ZXJpYWxUYWJsZUZpbHRlclxyXG4gICk6IFN0TWF0ZXJpYWxUYWJsZUZpbHRlclZhbHVlVHlwZSB7XHJcbiAgICBpZiAoZmlsdGVyLm1hdGNoTW9kZSA9PT0gJ2VxdWFsJykge1xyXG4gICAgICByZXR1cm4gZmlsdGVyLnZhbHVlIHx8IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZpbHRlci5tYXRjaE1vZGUgPT09ICdiZXR3ZWVuJykge1xyXG4gICAgICByZXR1cm4gZmlsdGVyLnZhbHVlICYmIEFycmF5LmlzQXJyYXkoZmlsdGVyLnZhbHVlKVxyXG4gICAgICAgID8gZmlsdGVyLnZhbHVlXHJcbiAgICAgICAgOiBbbnVsbCwgbnVsbF07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpbHRlci52YWx1ZSB8fCAnJztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgZGF0YSBjaGFuZ2VzIGZyb20gdGhlIGlucHV0IHNpZ25hbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgaGFuZGxlRGF0YUNoYW5nZShkYXRhOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgaWYgKCFkYXRhIHx8ICFBcnJheS5pc0FycmF5KGRhdGEpKSB7XHJcbiAgICAgIHRoaXMuX2RhdGEgPSBbXTtcclxuICAgICAgaWYgKHRoaXMudGFibGVTb3VyY2UpIHtcclxuICAgICAgICB0aGlzLnRhYmxlU291cmNlLmRhdGEgPSBbXTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBkYXRhLmxlbmd0aCA+IDAgJiZcclxuICAgICAgdGhpcy5fZGF0YS5sZW5ndGggPT09IGRhdGEubGVuZ3RoICYmXHJcbiAgICAgIHRoaXMuc2V0TmV3RGF0YVdpdGhvdXRSZWZyZXNoKClcclxuICAgICkge1xyXG4gICAgICBjb25zdCBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMoZGF0YVswXSkuZmlsdGVyKGtleSA9PiBrZXkgIT09ICdpZCcpO1xyXG5cclxuICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIG9iamVjdHMgaW4gcGxhY2UgdG8gcHJlc2VydmUgcmVmZXJlbmNlcyBhbmQgYXZvaWQgbG9zaW5nIGZvY3VzXHJcbiAgICAgIHRoaXMudGFibGVTb3VyY2UuZGF0YS5mb3JFYWNoKChleGlzdGluZ1JvdywgaW5kZXgpID0+IHtcclxuICAgICAgICBvYmplY3RLZXlzLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgIGV4aXN0aW5nUm93W2tleV0gPSBkYXRhW2luZGV4XVtrZXldO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIEZvcmNlIHRhYmxlIHRvIGRldGVjdCBjaGFuZ2VzIHdpdGhvdXQgcmVjcmVhdGluZyByb3dzXHJcbiAgICAgIHRoaXMudGFibGVTb3VyY2UuX3VwZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbigpO1xyXG5cclxuICAgICAgLy8gVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIG9uIGFsbCBjaGlsZCByb3cgY2VsbCBjb21wb25lbnRzXHJcbiAgICAgIGlmICh0aGlzLnJvd0NlbGxzKSB7XHJcbiAgICAgICAgdGhpcy5yb3dDZWxscy5mb3JFYWNoKGNlbGwgPT4ge1xyXG4gICAgICAgICAgY2VsbC50cmlnZ2VyQ2hhbmdlRGV0ZWN0aW9uKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gQ2hlY2sgaWYgZGF0YSBpcyBhY3R1YWxseSBkaWZmZXJlbnQgKGV4Y2x1ZGluZyBJRHMgd2UgbWlnaHQgaGF2ZSBhZGRlZClcclxuICAgICAgLy8gVGhpcyBwcmV2ZW50cyB1bm5lY2Vzc2FyeSB1cGRhdGVzIHdoZW4gcGFyZW50IHNlbmRzIHRoZSBzYW1lIGRhdGFcclxuICAgICAgaWYgKHRoaXMuX2RhdGEubGVuZ3RoID09PSBkYXRhLmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGRhdGFXaXRob3V0SWRzID0gZGF0YS5tYXAocm93ID0+IHtcclxuICAgICAgICAgIGNvbnN0IHRtcCA9IHsgLi4ucm93IH07XHJcbiAgICAgICAgICBkZWxldGUgdG1wLmlkO1xyXG4gICAgICAgICAgcmV0dXJuIHRtcDtcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjdXJyZW50RGF0YVdpdGhvdXRJZHMgPSB0aGlzLl9kYXRhLm1hcChyb3cgPT4ge1xyXG4gICAgICAgICAgY29uc3QgdG1wID0geyAuLi5yb3cgfTtcclxuICAgICAgICAgIGRlbGV0ZSB0bXAuaWQ7XHJcbiAgICAgICAgICByZXR1cm4gdG1wO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShkYXRhV2l0aG91dElkcykgPT09XHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShjdXJyZW50RGF0YVdpdGhvdXRJZHMpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDcmVhdGUgc2hhbGxvdyBjb3B5IHRvIGF2b2lkIG11dGF0aW5nIHBhcmVudCBkYXRhXHJcbiAgICAgIGxldCBjbG9uZWREYXRhID0gZGF0YS5tYXAocm93ID0+ICh7IC4uLnJvdyB9KSk7XHJcblxyXG4gICAgICAvLyBBZGQgSURzIGlmIG5lZWRlZCAob25seSBvbiB0aGUgY29weSwgb25seSBpZiByb3cgZG9lc24ndCBoYXZlIGFuIGlkKVxyXG4gICAgICBpZiAodGhpcy5hbGxvd0VkaXRSb3coKSB8fCB0aGlzLmFsbG93U2VsZWN0Um93KCkpIHtcclxuICAgICAgICBjbG9uZWREYXRhID0gY2xvbmVkRGF0YS5tYXAocm93ID0+IHtcclxuICAgICAgICAgIC8vIE9ubHkgYWRkIGlkIGlmIGl0IGRvZXNuJ3QgZXhpc3QgLSBkb24ndCBvdmVyd3JpdGUgZXhpc3RpbmcgSURzXHJcbiAgICAgICAgICBpZiAoIXJvdy5pZCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIC4uLnJvdyxcclxuICAgICAgICAgICAgICBpZDogU3RCYXNlU2VydmljZS5nZW5lcmF0ZUdVSUQoKSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByb3c7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuX2RhdGEgPSBjbG9uZWREYXRhO1xyXG5cclxuICAgICAgaWYgKHRoaXMudGFibGVTb3VyY2UpIHtcclxuICAgICAgICB0aGlzLnRhYmxlU291cmNlLmRhdGEgPSBjbG9uZWREYXRhO1xyXG4gICAgICAgIGlmICghdGhpcy5sYXp5TG9hZGluZygpICYmIHRoaXMubG9jYWxTdG9yYWdlRGF0YSkge1xyXG4gICAgICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLnBhZ2VJbmRleDtcclxuICAgICAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICAgICAgdGhpcy5wYWdpbmF0b3IuX2VtaXRQYWdlRXZlbnQodGhpcy5sb2NhbFN0b3JhZ2VEYXRhLnBhZ2VJbmRleCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFN0TWF0ZXJpYWxUYWJsZUxvYWREYXRhIHtcclxuICBmaXJzdDogbnVtYmVyO1xyXG4gIHJvd3M6IG51bWJlcjtcclxuICBnbG9iYWxGaWx0ZXI6IHN0cmluZztcclxuICBnbG9iYWxGaWx0ZXJDb2x1bW5zOiBzdHJpbmdbXTtcclxuICBzb3J0RmllbGQ6IHN0cmluZztcclxuICBzb3J0T3JkZXI6IFNvcnREaXJlY3Rpb247XHJcbiAgZmlsdGVyczogeyBba2V5OiBzdHJpbmddOiBTdE1hdGVyaWFsVGFibGVGaWx0ZXIgfTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTdE1hdGVyaWFsVGFibGVMb2NhbFN0b3JhZ2UgZXh0ZW5kcyBJQ2FwdGlvbkRhdGFDaGFuZ2VkIHtcclxuICBwYWdlU2l6ZTogbnVtYmVyO1xyXG4gIHBhZ2VJbmRleDogbnVtYmVyO1xyXG4gIHNvcnRGaWVsZDogc3RyaW5nO1xyXG4gIHNvcnRPcmRlcjogU29ydERpcmVjdGlvbjtcclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwic3QtbWF0ZXJpYWwtdGFibGVcIj5cclxuICBAaWYgKGlzTG9hZGluZygpKSB7XHJcbiAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy1zcGlubmVyXCI+XHJcbiAgICAgIDxtYXQtc3Bpbm5lciBjb2xvcj1cImFjY2VudFwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICA8L2Rpdj5cclxuICB9XHJcblxyXG4gIEBpZiAoc2hvd1RhYmxlKSB7XHJcbiAgICA8c3QtbWF0ZXJpYWwtdGFibGUtY2FwdGlvblxyXG4gICAgICBbdGFibGVUaXRsZV09XCJ0YWJsZVRpdGxlKClcIlxyXG4gICAgICBbYWxsb3dQaWNrQ29sdW1uc109XCJhbGxvd1BpY2tDb2x1bW5zKClcIlxyXG4gICAgICBbc2hvd0dsb2JhbFNlYXJjaF09XCJzaG93R2xvYmFsU2VhcmNoKClcIlxyXG4gICAgICBbYWxsb3dSZW9yZGVyQ29sdW1uc109XCJhbGxvd1Jlb3JkZXJDb2x1bW5zKClcIlxyXG4gICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcclxuICAgICAgW2luaXRGaWx0ZXJzXT1cImluaXRGaWx0ZXJzXCJcclxuICAgICAgW2luaXRHbG9iYWxTZWFyY2hdPVwiaW5pdEdsb2JhbFNlYXJjaFwiXHJcbiAgICAgIFtzaG93Q3JlYXRlQnV0dG9uXT1cInNob3dDcmVhdGVCdXR0b24oKVwiXHJcbiAgICAgIFtjcmVhdGVCdXR0b25MYWJlbF09XCJjcmVhdGVCdXR0b25MYWJlbCgpXCJcclxuICAgICAgW2NyZWF0ZUJ1dHRvbkFjdGlvbl09XCJjcmVhdGVCdXR0b25BY3Rpb24oKVwiXHJcbiAgICAgIFthbGxvd0NyZWF0ZVJvd109XCJhbGxvd0NyZWF0ZVJvdygpXCJcclxuICAgICAgW2Rpc2FibGVDcmVhdGVCdXR0b25dPVwiZGlzYWJsZUNyZWF0ZUJ1dHRvbigpXCJcclxuICAgICAgW2V4dHJhQ3VzdG9tRmlsdGVyXT1cImV4dHJhQ3VzdG9tRmlsdGVyKClcIlxyXG4gICAgICBbY3JlYXRpbmdSb3ddPVwiY3JlYXRpbmdSb3coKVwiXHJcbiAgICAgIChjYXB0aW9uRGF0YUNoYW5nZWQpPVwiY2FwdGlvbkRhdGFDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgICAocmVzZXRUYWJsZVNldHRpbmdzKT1cInJlc2V0VGFibGVTZXR0aW5ncygpXCJcclxuICAgICAgKGFkZE5ld1Jvdyk9XCJhZGROZXdSb3coKVwiXHJcbiAgICA+PC9zdC1tYXRlcmlhbC10YWJsZS1jYXB0aW9uPlxyXG4gIH1cclxuXHJcbiAgPHRhYmxlXHJcbiAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICduby1ob3Zlcic6ICFyb3dDbGlja0FjdGlvbigpLFxyXG4gICAgICAnaXMtZXhwZW5kZWQtdGFibGUnOiBhbGxvd0V4dGVuZFJvdygpXHJcbiAgICB9XCJcclxuICAgIG1hdC10YWJsZVxyXG4gICAgW2RhdGFTb3VyY2VdPVwidGFibGVTb3VyY2VcIlxyXG4gICAgbWF0U29ydFxyXG4gICAgW211bHRpVGVtcGxhdGVEYXRhUm93c109XCJhbGxvd0V4dGVuZFJvdygpXCJcclxuICA+XHJcbiAgICBAZm9yIChjb2x1bW4gb2Ygc2VsZWN0ZWRDb2x1bW5zOyB0cmFjayBjb2x1bW4pIHtcclxuICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5maWVsZFwiPlxyXG4gICAgICAgIDx0aFxyXG4gICAgICAgICAgbWF0LWhlYWRlci1jZWxsXHJcbiAgICAgICAgICAqbWF0SGVhZGVyQ2VsbERlZlxyXG4gICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbHVtbi53aWR0aFwiXHJcbiAgICAgICAgICBtYXQtc29ydC1oZWFkZXJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhY29sdW1uLnNvcnRcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIEBpZiAoY29sdW1uLnR5cGUgPT09ICdhY3Rpb25zLXJvdy1zZWxlY3RpbmcnICYmICFzZWxlY3RSb3dPbmx5T25lKCkpIHtcclxuICAgICAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVBbGxSb3dzKCRldmVudC5jaGVja2VkKVwiXHJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0ZWRSb3dzKCkubGVuZ3RoID4gMCAmJiBpc0FsbFNlbGVjdGVkKClcIlxyXG4gICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cInNlbGVjdGVkUm93cygpLmxlbmd0aCA+IDAgJiYgIWlzQWxsU2VsZWN0ZWQoKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICB9IEBlbHNlIGlmIChcclxuICAgICAgICAgICAgY29sdW1uLnR5cGUgPT09ICdhY3Rpb25zLXJvdy1lZGl0aW5nJyAmJiBzaG93RWRpdEFsbFJvd3MoKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cganVzdGlmeS1jb250ZW50LWVuZCBlZGl0LWFsbC1yb3dzLWJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInR1cm5PbkFsbEVkaXRSb3dzKClcIlxyXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkVkaXQgYWxsIHJvd3NcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5lZGl0X2Fycm93X2Rvd248L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICB7eyBjb2x1bW4uaGVhZGVyIH19XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC90aD5cclxuICAgICAgICA8dGRcclxuICAgICAgICAgIG1hdC1jZWxsXHJcbiAgICAgICAgICAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50OyBsZXQgaSA9IGluZGV4OyBsZXQgaiA9IGRhdGFJbmRleFwiXHJcbiAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiY29sdW1uLndpZHRoXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8c3QtbWF0ZXJpYWwtdGFibGUtcm93LWNlbGxcclxuICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxyXG4gICAgICAgICAgICBbcm93RGF0YV09XCJlbGVtZW50XCJcclxuICAgICAgICAgICAgW3Jvd0luZGV4XT1cImdldEFic29sdXRlSW5kZXgoYWxsb3dFeHRlbmRSb3coKSA/IGogOiBpKVwiXHJcbiAgICAgICAgICAgIFtyb3dEYXRhQ29weV09XCJcclxuICAgICAgICAgICAgICBhY3RpdmVSb3dzRWRpdGluZ1tlbGVtZW50LmlkXSB8fCBhY3RpdmVSb3dzQ3JlYXRpbmdbZWxlbWVudC5pZF1cclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgW3Jvd0VkaXRpbmddPVwiXHJcbiAgICAgICAgICAgICAgISFhY3RpdmVSb3dzRWRpdGluZ1tlbGVtZW50LmlkXSB8fFxyXG4gICAgICAgICAgICAgICEhYWN0aXZlUm93c0NyZWF0aW5nW2VsZW1lbnQuaWRdXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIFtyb3dJc1NlbGVjdGVkXT1cImlzUm93U2VsZWN0ZWQoZWxlbWVudClcIlxyXG4gICAgICAgICAgICBbcm93SXNFeHBhbmRlZF09XCJleHBhbmRlZFJvd0luZGV4KCkgPT09IChhbGxvd0V4dGVuZFJvdygpID8gaiA6IGkpXCJcclxuICAgICAgICAgICAgW2NhbkVkaXRSb3dWYWxpZGF0b3JdPVwiY2FuRWRpdFJvd1ZhbGlkYXRvcigpXCJcclxuICAgICAgICAgICAgW2NhbkRlbGV0ZVJvd1ZhbGlkYXRvcl09XCJjYW5EZWxldGVSb3dWYWxpZGF0b3IoKVwiXHJcbiAgICAgICAgICAgIFtzZWxlY3RSb3dPbmx5T25lXT1cInNlbGVjdFJvd09ubHlPbmUoKVwiXHJcbiAgICAgICAgICAgIFtpc0ZpcnN0RWRpdGFibGVDb2x1bW5dPVwiaXNGaXJzdEVkaXRhYmxlQ29sdW1uKGNvbHVtbilcIlxyXG4gICAgICAgICAgICBbYXV0b1NhdmVPbkNoYW5nZV09XCJhdXRvU2F2ZU9uQ2hhbmdlKClcIlxyXG4gICAgICAgICAgICBbYWxsb3dFZGl0SW5FZGl0Um93XT1cImFsbG93RWRpdEluRWRpdFJvdygpXCJcclxuICAgICAgICAgICAgW2FsbG93RGVsZXRlSW5FZGl0Um93XT1cImFsbG93RGVsZXRlSW5FZGl0Um93KClcIlxyXG4gICAgICAgICAgICBbZmllbGRFcnJvcl09XCJ2YWxpZGF0aW9uRXJyb3JzW2VsZW1lbnQuaWRdPy5bY29sdW1uLmZpZWxkXVwiXHJcbiAgICAgICAgICAgIChlZGl0Um93RW1pdHRlcik9XCJlZGl0Um93KGVsZW1lbnQsIGNvbHVtbilcIlxyXG4gICAgICAgICAgICAoZGVsZXRlUm93RW1pdHRlcik9XCJcclxuICAgICAgICAgICAgICBkZWxldGVSb3coZWxlbWVudCwgY29sdW1uLCBhbGxvd0V4dGVuZFJvdygpID8gaiA6IGkpXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIChzYXZlRWRpdFJvd0VtaXR0ZXIpPVwiXHJcbiAgICAgICAgICAgICAgc2F2ZUVkaXRSb3coZWxlbWVudCwgY29sdW1uLCBhbGxvd0V4dGVuZFJvdygpID8gaiA6IGkpXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIChjYW5jZWxFZGl0Um93RW1pdHRlcik9XCJjYW5jZWxFZGl0Um93KGVsZW1lbnQsIGNvbHVtbilcIlxyXG4gICAgICAgICAgICAoc2VsZWN0Um93Q2hhbmdlKT1cInNlbGVjdFJvd0NoYW5nZWQoJGV2ZW50LCBlbGVtZW50KVwiXHJcbiAgICAgICAgICAgIChmaWVsZFZhbHVlQ2hhbmdlZCk9XCJcclxuICAgICAgICAgICAgICBvbkZpZWxkVmFsdWVDaGFuZ2VkKFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudCxcclxuICAgICAgICAgICAgICAgIGNvbHVtbixcclxuICAgICAgICAgICAgICAgICRldmVudC52YWx1ZSxcclxuICAgICAgICAgICAgICAgIGFsbG93RXh0ZW5kUm93KCkgPyBqIDogaVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgID48L3N0LW1hdGVyaWFsLXRhYmxlLXJvdy1jZWxsPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgfVxyXG5cclxuICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZXhwYW5kZWREZXRhaWxcIj5cclxuICAgICAgPHRkXHJcbiAgICAgICAgbWF0LWNlbGxcclxuICAgICAgICAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50OyBsZXQgaSA9IGRhdGFJbmRleFwiXHJcbiAgICAgICAgW2F0dHIuY29sc3Bhbl09XCJzZWxlY3RlZENvbHVtbnNTdHJpbmcubGVuZ3RoXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiZXhwYW5kZWQtZWxlbWVudC1kZXRhaWwtd3JhcHBlclwiXHJcbiAgICAgICAgICBbQGRldGFpbEV4cGFuZF09XCJleHBhbmRlZFJvd0luZGV4KCkgPT09IGkgPyAnZXhwYW5kZWQnIDogJ2NvbGxhcHNlZCdcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJleHBhbmRlZC1lbGVtZW50LWRldGFpbFwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZXh0ZW5kZWRSb3dUZW1wbGF0ZSgpIVwiXHJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZGF0YTogZWxlbWVudCB9XCJcclxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvdGQ+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cInNlbGVjdGVkQ29sdW1uc1N0cmluZ1wiPjwvdHI+XHJcbiAgICA8dHJcclxuICAgICAgbWF0LXJvd1xyXG4gICAgICAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogc2VsZWN0ZWRDb2x1bW5zU3RyaW5nOyBsZXQgaSA9IGRhdGFJbmRleFwiXHJcbiAgICAgIFtjbGFzcy5leHBhbmRlZC1leHBhbmRlZC1yb3ddPVwiZXhwYW5kZWRSb3dJbmRleCgpID09PSBpXCJcclxuICAgICAgKGNsaWNrKT1cImNsaWNrUm93QWN0aW9uKHJvdywgaSlcIlxyXG4gICAgPjwvdHI+XHJcbiAgICBAaWYgKGFsbG93RXh0ZW5kUm93KCkpIHtcclxuICAgICAgPHRyXHJcbiAgICAgICAgbWF0LXJvd1xyXG4gICAgICAgICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBbJ2V4cGFuZGVkRGV0YWlsJ11cIlxyXG4gICAgICAgIGNsYXNzPVwiZXh0ZW5kZWQtZGV0YWlsLXJvd1wiXHJcbiAgICAgID48L3RyPlxyXG4gICAgfVxyXG4gIDwvdGFibGU+XHJcbiAgPG1hdC1wYWdpbmF0b3JcclxuICAgIFtzaG93Rmlyc3RMYXN0QnV0dG9uc109XCJ0cnVlXCJcclxuICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwiWzUsIDEwLCAxNSwgMjAsIDI1XVwiXHJcbiAgICBbbGVuZ3RoXT1cImRhdGFMZW5ndGgoKVwiXHJcbiAgPjwvbWF0LXBhZ2luYXRvcj5cclxuICA8c3QtbWF0ZXJpYWwtdGFibGUtc2VsZWN0ZWQtcm93c1xyXG4gICAgW2FsbG93U2VsZWN0Um93XT1cImFsbG93U2VsZWN0Um93KClcIlxyXG4gICAgW3NlbGVjdFJvd09ubHlPbmVdPVwic2VsZWN0Um93T25seU9uZSgpXCJcclxuICAgIFtzZWxlY3RlZFJvd3NdPVwic2VsZWN0ZWRSb3dzKClcIlxyXG4gICAgW3NlbGVjdGlvbkZpZWxkTGFiZWxdPVwic2VsZWN0aW9uRmllbGRMYWJlbCgpXCJcclxuICAgIFtzZWxlY3RSb3dWYWx1ZURpc3BsYXldPVwic2VsZWN0Um93VmFsdWVEaXNwbGF5KClcIlxyXG4gICAgKHJlbW92ZVNlbGVjdGVkUm93KT1cIm9uUmVtb3ZlU2VsZWN0ZWRSb3coJGV2ZW50KVwiXHJcbiAgPjwvc3QtbWF0ZXJpYWwtdGFibGUtc2VsZWN0ZWQtcm93cz5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
956
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbWF0ZXJpYWwtdGFibGUvbWF0ZXJpYWwtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbWF0ZXJpYWwtdGFibGUvbWF0ZXJpYWwtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsU0FBUyxFQUNULFlBQVksRUFFWixpQkFBaUIsRUFDakIsS0FBSyxFQUNMLE1BQU0sRUFFTixNQUFNLEVBQ04sUUFBUSxFQUNSLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBaUIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUc3RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFDTCxhQUFhLEVBQ2IsMkJBQTJCLEdBQzVCLE1BQU0sdUJBQXVCLENBQUM7QUFHL0IsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sOEZBQThGLENBQUM7QUFNbEosT0FBTyxFQUNMLE9BQU8sRUFDUCxLQUFLLEVBQ0wsS0FBSyxFQUNMLFVBQVUsRUFDVixPQUFPLEdBQ1IsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5QjVHLE1B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QUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQ3pDLFVBQVUsQ0FDUix3QkFBd0IsRUFDeEIsT0FBTyxDQUFDLHNDQUFzQyxDQUFDLENBQ2hEO2FBQ0YsQ0FBQztTQUNIOzs0RkFFVSxzQkFBc0I7a0JBdkJsQyxTQUFTOytCQUNFLHVCQUF1QixtQkFNaEIsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxjQUN6Qjt3QkFDVixPQUFPLENBQUMsY0FBYyxFQUFFOzRCQUN0QixLQUFLLENBQ0gsZ0JBQWdCLEVBQ2hCLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FDekQ7NEJBQ0QsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQzs0QkFDekMsVUFBVSxDQUNSLHdCQUF3QixFQUN4QixPQUFPLENBQUMsc0NBQXNDLENBQUMsQ0FDaEQ7eUJBQ0YsQ0FBQztxQkFDSDs4TEFNd0IsU0FBUztzQkFBakMsU0FBUzt1QkFBQyxZQUFZO2dCQUNILElBQUk7c0JBQXZCLFNBQVM7dUJBQUMsT0FBTztnQkFFbEIsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q2hpbGRyZW4sXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIGlucHV0LFxyXG4gIG91dHB1dCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBzaWduYWwsXHJcbiAgY29tcHV0ZWQsXHJcbiAgZWZmZWN0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNYXRTb3J0LCBTb3J0RGlyZWN0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XHJcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcclxuaW1wb3J0IHsgU3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvc3QtbWF0ZXJpYWwtdGFibGUtY29sdW1uLm1vZGVsJztcclxuaW1wb3J0IHsgVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3ZpZXcvdmlldy1zdC1tYXRlcmlhbC10YWJsZS1jb2x1bW4ubW9kZWwnO1xyXG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7XHJcbiAgU3RCYXNlU2VydmljZSxcclxuICBTdFN1YnNjcmliZURlc3Ryb3lDb21wb25lbnQsXHJcbn0gZnJvbSAnbmd4LXN0LWJhc2UtZnVuY3Rpb25zJztcclxuaW1wb3J0IHsgU3RTbmFja0JhclNlcnZpY2UgfSBmcm9tICduZ3gtc3Qtc25hY2stYmFyJztcclxuaW1wb3J0IHsgU3RUYWJsZXNUcmFuc2xhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3QtdGFibGVzLXRyYW5zbGF0aW9ucy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWF0ZXJpYWxUYWJsZUZpbHRlckRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vbWF0ZXJpYWwtdGFibGUtY2FwdGlvbi9tYXRlcmlhbC10YWJsZS1maWx0ZXItZGlhbG9nL21hdGVyaWFsLXRhYmxlLWZpbHRlci1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuICBJQ2FwdGlvbkRhdGFDaGFuZ2VkLFxyXG4gIFN0TWF0ZXJpYWxUYWJsZUZpbHRlcixcclxuICBTdE1hdGVyaWFsVGFibGVGaWx0ZXJWYWx1ZVR5cGUsXHJcbn0gZnJvbSAnLi4vLi4vbW9kZWxzL21vZGVscyc7XHJcbmltcG9ydCB7XHJcbiAgYW5pbWF0ZSxcclxuICBzdGF0ZSxcclxuICBzdHlsZSxcclxuICB0cmFuc2l0aW9uLFxyXG4gIHRyaWdnZXIsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IFN0RGlhbG9nU2VydmljZSB9IGZyb20gJ25neC1zdC1kaWFsb2cnO1xyXG5pbXBvcnQgeyBNYXRlcmlhbFRhYmxlUm93Q2VsbENvbXBvbmVudCB9IGZyb20gJy4vbWF0ZXJpYWwtdGFibGUtcm93LWNlbGwvbWF0ZXJpYWwtdGFibGUtcm93LWNlbGwuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmd4LXN0LW1hdGVyaWFsLXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbWF0ZXJpYWwtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogW1xyXG4gICAgJy4vbWF0ZXJpYWwtdGFibGUuY29tcG9uZW50LnNjc3MnLFxyXG4gICAgJy4uLy4uLy4uLy4uL2Fzc2V0cy9iYXNlLXRhYmxlLnNjc3MnLFxyXG4gIF0sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBhbmltYXRpb25zOiBbXHJcbiAgICB0cmlnZ2VyKCdkZXRhaWxFeHBhbmQnLCBbXHJcbiAgICAgIHN0YXRlKFxyXG4gICAgICAgICdjb2xsYXBzZWQsdm9pZCcsXHJcbiAgICAgICAgc3R5bGUoeyBoZWlnaHQ6ICcwcHgnLCBtaW5IZWlnaHQ6ICcwJywgYm9yZGVyOiAnbm9uZScgfSlcclxuICAgICAgKSxcclxuICAgICAgc3RhdGUoJ2V4cGFuZGVkJywgc3R5bGUoeyBoZWlnaHQ6ICcqJyB9KSksXHJcbiAgICAgIHRyYW5zaXRpb24oXHJcbiAgICAgICAgJ2V4cGFuZGVkIDw9PiBjb2xsYXBzZWQnLFxyXG4gICAgICAgIGFuaW1hdGUoJzIyNW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKScpXHJcbiAgICAgICksXHJcbiAgICBdKSxcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWF0ZXJpYWxUYWJsZUNvbXBvbmVudFxyXG4gIGV4dGVuZHMgU3RTdWJzY3JpYmVEZXN0cm95Q29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXRcclxue1xyXG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yKSBwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcclxuICBAVmlld0NoaWxkKE1hdFNvcnQpIHNvcnQ6IE1hdFNvcnQ7XHJcbiAgQFZpZXdDaGlsZHJlbihNYXRlcmlhbFRhYmxlUm93Q2VsbENvbXBvbmVudClcclxuICByb3dDZWxscyE6IFF1ZXJ5TGlzdDxNYXRlcmlhbFRhYmxlUm93Q2VsbENvbXBvbmVudD47XHJcblxyXG4gIHNob3dHbG9iYWxTZWFyY2ggPSBpbnB1dChmYWxzZSk7XHJcblxyXG4gIHRhYmxlVGl0bGUgPSBpbnB1dCgnJyk7XHJcblxyXG4gIHBhZ2VTaXplID0gaW5wdXQ8bnVtYmVyPigxMCk7XHJcblxyXG4gIGRhdGFMZW5ndGggPSBpbnB1dDxudW1iZXI+KDApO1xyXG5cclxuICBhbGxvd1BpY2tDb2x1bW5zID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBhbGxvd1Jlb3JkZXJDb2x1bW5zID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBsb2NhbFN0b3JhZ2VOYW1lID0gaW5wdXQ8c3RyaW5nPignJyk7XHJcblxyXG4gIGxhenlMb2FkaW5nID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBpc0xvYWRpbmcgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGluaXRDb2x1bW5zID0gaW5wdXQ8U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWxbXT4oW10pO1xyXG5cclxuICByb3dDbGlja0FjdGlvbiA9IGlucHV0PChyb3c6IGFueSkgPT4gdm9pZD4oKTtcclxuXHJcbiAgYWxsb3dFZGl0Um93ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBhbGxvd0RlbGV0ZUluRWRpdFJvdyA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xyXG5cclxuICBhbGxvd0VkaXRJbkVkaXRSb3cgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcclxuXHJcbiAgc2hvd0VkaXRBbGxSb3dzID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICAvKipcclxuICAgKiBXaGVuIHRydWUsIGZpZWxkIGNoYW5nZXMgYXJlIHNhdmVkIGltbWVkaWF0ZWx5IHdpdGhvdXQgcmVxdWlyaW5nIHNhdmUvY2FuY2VsIGJ1dHRvbnMuXHJcbiAgICogUGVyZmVjdCBmb3IgcXVhbnRpdHkgaW5wdXRzLCB0b2dnbGVzLCBvciBzZWxlY3Rpb24gdGFibGVzIHdoZXJlIGluc3RhbnQgdXBkYXRlcyBhcmUgbmVlZGVkLlxyXG4gICAqL1xyXG4gIGF1dG9TYXZlT25DaGFuZ2UgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGNhbkVkaXRSb3dWYWxpZGF0b3IgPSBpbnB1dDwocm93OiBhbnkpID0+IGJvb2xlYW4+KCgpID0+IHRydWUpO1xyXG5cclxuICBjYW5EZWxldGVSb3dWYWxpZGF0b3IgPSBpbnB1dDwocm93OiBhbnkpID0+IGJvb2xlYW4+KCgpID0+IHRydWUpO1xyXG5cclxuICBhbGxvd1NlbGVjdFJvdyA9IGlucHV0KGZhbHNlKTtcclxuXHJcbiAgc2VsZWN0aW9uRmllbGRMYWJlbCA9IGlucHV0KCcnKTtcclxuXHJcbiAgc2VsZWN0Um93T25seU9uZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgZm9ybWF0dGVyIHVzZWQgdG8gZGVyaXZlIHRoZSBkaXNwbGF5IHZhbHVlIGZvciBhIHNlbGVjdGVkIHJvdy5cclxuICAgKlxyXG4gICAqIFVzZSB0aGlzIHdoZW4gdGhlIHNpbXBsZSBmaWVsZCBuYW1lIHByb3ZpZGVkIGJ5IHtAbGluayBzZWxlY3Rpb25GaWVsZExhYmVsfVxyXG4gICAqIGlzIG5vdCBzdWZmaWNpZW50IChmb3IgZXhhbXBsZSwgd2hlbiB5b3UgbmVlZCB0byBjb25jYXRlbmF0ZSBtdWx0aXBsZSBmaWVsZHNcclxuICAgKiBvciBhcHBseSBjdXN0b20gZm9ybWF0dGluZyB0byB0aGUgZGlzcGxheWVkIHZhbHVlKS5cclxuICAgKlxyXG4gICAqIElmIGJvdGgge0BsaW5rIHNlbGVjdGlvbkZpZWxkTGFiZWx9IGFuZCBgc2VsZWN0Um93VmFsdWVEaXNwbGF5YCBhcmUgc2V0LFxyXG4gICAqIHRoaXMgZnVuY3Rpb24gdGFrZXMgcHJlY2VkZW5jZSBhbmQgaXMgdXNlZCB0byBjb21wdXRlIHRoZSB2aXNpYmxlIHRleHRcclxuICAgKiByZXByZXNlbnRpbmcgdGhlIHNlbGVjdGVkIHJvdy5cclxuICAgKi9cclxuICBzZWxlY3RSb3dWYWx1ZURpc3BsYXkgPSBpbnB1dDwocm93OiBhbnkpID0+IHN0cmluZz4oKTtcclxuXHJcbiAgc2hvd0NyZWF0ZUJ1dHRvbiA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgY3JlYXRlQnV0dG9uTGFiZWwgPSBpbnB1dCgnQ3JlYXRlJyk7XHJcblxyXG4gIGNyZWF0ZUJ1dHRvbkFjdGlvbiA9IGlucHV0PCgpID0+IHZvaWQ+KCgpID0+IHt9KTtcclxuXHJcbiAgZGlzYWJsZUNyZWF0ZUJ1dHRvbiA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgYWxsb3dDcmVhdGVSb3cgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGFsbG93RXh0ZW5kUm93ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBleHRlbmRlZFJvd1RlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8eyBkYXRhOiBhbnkgfT4+KCk7XHJcblxyXG4gIGluaXRTZWxlY3RlZFJvdyA9IGlucHV0PGFueT4oKTtcclxuXHJcbiAgZXh0cmFDdXN0b21GaWx0ZXIgPSBpbnB1dDxUZW1wbGF0ZVJlZjxhbnk+PigpO1xyXG5cclxuICAvKipcclxuICAgKiBDdXN0b20gZmlsdGVyIG1ldGhvZCBhcHBsaWVkIHRvIGFsbCByb3dzIGluIHRoZSB0YWJsZS5cclxuICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZm9yIGVhY2ggcm93IGFuZCBzaG91bGQgcmV0dXJuIHRydWUgdG8gaW5jbHVkZSB0aGUgcm93LCBmYWxzZSB0byBleGNsdWRlIGl0LlxyXG4gICAqIEFwcGxpZWQgYXV0b21hdGljYWxseSB3aGVuZXZlciB0YWJsZSBkYXRhIGNoYW5nZXMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gcm93IC0gVGhlIGRhdGEgcm93IHRvIGV2YWx1YXRlXHJcbiAgICogQHJldHVybnMgdHJ1ZSB0byBpbmNsdWRlIHRoZSByb3cgaW4gdGhlIHRhYmxlLCBmYWxzZSB0byBleGNsdWRlIGl0XHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIC8vIE9ubHkgc2hvdyBhY3RpdmUgdXNlcnNcclxuICAgKiBbaW5pdEZpbHRlck1ldGhvZF09XCIocm93KSA9PiByb3cuaXNBY3RpdmUgPT09IHRydWVcIlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiAvLyBTaG93IHVzZXJzIHdpdGggcXVhbnRpdHkgZ3JlYXRlciB0aGFuIDEwXHJcbiAgICogW2luaXRGaWx0ZXJNZXRob2RdPVwiKHJvdykgPT4gcm93LnF1YW50aXR5ID4gMTBcIlxyXG4gICAqL1xyXG4gIGluaXRGaWx0ZXJNZXRob2QgPSBpbnB1dDwocm93OiBhbnkpID0+IGJvb2xlYW4+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEltbXV0YWJsZSBEYXRhIFBhdHRlcm4gLSBPcHRpbWl6ZWQgdmVyc2lvbiB3aXRoIElEIGNsZWFudXBcclxuICAgKi9cclxuICBkYXRhID0gaW5wdXQ8YW55W10+KFtdKTtcclxuXHJcbiAgc2V0TmV3RGF0YVdpdGhvdXRSZWZyZXNoID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBsb2FkRGF0YSA9IG91dHB1dDxTdE1hdGVyaWFsVGFibGVMb2FkRGF0YT4oKTtcclxuXHJcbiAgc2F2ZUVkaXRlZFJvdyA9IG91dHB1dDx7IHJvdzogYW55OyBpbmRleDogbnVtYmVyIH0+KCk7XHJcblxyXG4gIHNhdmVDcmVhdGVkUm93ID0gb3V0cHV0PGFueT4oKTtcclxuXHJcbiAgcm93RGVsZXRlZCA9IG91dHB1dDx7IHJvdzogYW55OyBpbmRleDogbnVtYmVyIH0+KCk7XHJcblxyXG4gIHNlbGVjdFJvd0NoYW5nZSA9IG91dHB1dDxhbnlbXT4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdHRlZCB3aGVuIGEgZmllbGQgdmFsdWUgY2hhbmdlcyBhbmQgYXV0b1NhdmVPbkNoYW5nZSBpcyBlbmFibGVkLlxyXG4gICAqIFBhcmVudCBzaG91bGQgdXBkYXRlIHRoZWlyIGRhdGEgaW1tZWRpYXRlbHkuXHJcbiAgICovXHJcbiAgZmllbGRWYWx1ZUNoYW5nZWQgPSBvdXRwdXQ8e1xyXG4gICAgcm93OiBhbnk7XHJcbiAgICBmaWVsZDogc3RyaW5nO1xyXG4gICAgdmFsdWU6IGFueTtcclxuICAgIGluZGV4OiBudW1iZXI7XHJcbiAgfT4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfZGF0YTogYW55W10gPSBbXTtcclxuXHJcbiAgaW5pdExvY2FsQ29sdW1ucyA9IHNpZ25hbDxTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbFtdPihbXSk7XHJcbiAgZXhwYW5kZWRSb3dJbmRleCA9IHNpZ25hbDxudW1iZXIgfCBudWxsPihudWxsKTtcclxuXHJcbiAgY3JlYXRpbmdSb3cgPSBjb21wdXRlZCgoKSA9PiBPYmplY3Qua2V5cyh0aGlzLmFjdGl2ZVJvd3NDcmVhdGluZykubGVuZ3RoID4gMCk7XHJcblxyXG4gIGNvbHVtbnM6IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbFtdID0gW107XHJcbiAgc2VsZWN0ZWRDb2x1bW5zOiBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWxbXSA9IFtdO1xyXG4gIHNlbGVjdGVkQ29sdW1uc1N0cmluZzogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgdGFibGVTb3VyY2U6IE1hdFRhYmxlRGF0YVNvdXJjZTxhbnk+O1xyXG5cclxuICBpbml0RmlsdGVyczogeyBba2V5OiBzdHJpbmddOiBTdE1hdGVyaWFsVGFibGVGaWx0ZXIgfSA9IHt9O1xyXG4gIGluaXRHbG9iYWxTZWFyY2g6IHN0cmluZyA9ICcnO1xyXG5cclxuICBzaG93VGFibGUgPSB0cnVlO1xyXG5cclxuICBhY3RpdmVSb3dzRWRpdGluZzogeyBbcm93SWQ6IHN0cmluZ106IHsgW3Byb3A6IHN0cmluZ106IGFueSB9IH0gPSB7fTtcclxuICBhY3RpdmVSb3dzQ3JlYXRpbmc6IHsgW3Jvd0lkOiBzdHJpbmddOiB7IFtwcm9wOiBzdHJpbmddOiBhbnkgfSB9ID0ge307XHJcbiAgc2VsZWN0ZWRSb3dzID0gc2lnbmFsPGFueVtdPihbXSk7XHJcblxyXG4gIC8vIFRyYWNrIHZhbGlkYXRpb24gZXJyb3JzOiB7IHJvd0lkOiB7IGZpZWxkTmFtZTogZXJyb3JNZXNzYWdlIH0gfVxyXG4gIHZhbGlkYXRpb25FcnJvcnM6IHsgW3Jvd0lkOiBzdHJpbmddOiB7IFtmaWVsZDogc3RyaW5nXTogc3RyaW5nIH0gfSA9IHt9O1xyXG5cclxuICBwcml2YXRlIGxvY2FsU3RvcmFnZURhdGE6IFN0TWF0ZXJpYWxUYWJsZUxvY2FsU3RvcmFnZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgc25hY2tiYXI6IFN0U25hY2tCYXJTZXJ2aWNlLFxyXG4gICAgcHVibGljIHN0VGFibGVUcmFuc2xhdGlvbnM6IFN0VGFibGVzVHJhbnNsYXRpb25zU2VydmljZSxcclxuICAgIHByaXZhdGUgc3REaWFsb2dTZXJ2aWNlOiBTdERpYWxvZ1NlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcblxyXG4gICAgLy8gRWZmZWN0IHRvIGhhbmRsZSBkYXRhIGNoYW5nZXNcclxuICAgIGVmZmVjdCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGlucHV0RGF0YSA9IHRoaXMuZGF0YSgpO1xyXG4gICAgICB0aGlzLmhhbmRsZURhdGFDaGFuZ2UoaW5wdXREYXRhKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIEVmZmVjdCB0byByZWFwcGx5IGZpbHRlciB3aGVuIGluaXRGaWx0ZXJNZXRob2QgY2hhbmdlc1xyXG4gICAgZWZmZWN0KCgpID0+IHtcclxuICAgICAgLy8gVHJhY2sgdGhlIGZpbHRlciBtZXRob2QgdG8gdHJpZ2dlciBlZmZlY3Qgb24gY2hhbmdlXHJcbiAgICAgIHRoaXMuaW5pdEZpbHRlck1ldGhvZCgpO1xyXG4gICAgICBpZiAodGhpcy50YWJsZVNvdXJjZSAmJiAhdGhpcy5sYXp5TG9hZGluZygpKSB7XHJcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBmaWx0ZXIgcHJlZGljYXRlIHRvIHVzZSB0aGUgbmV3IGZpbHRlciBtZXRob2RcclxuICAgICAgICB0aGlzLnRhYmxlU291cmNlLmZpbHRlclByZWRpY2F0ZSA9IHRoaXMuY3JlYXRlQ3VzdG9tRmlsdGVyRm9yTG9jYWxUYWJsZSgpO1xyXG4gICAgICAgIC8vIFRyaWdnZXIgZmlsdGVyIHJlYXBwbGljYXRpb24gYnkgc2V0dGluZyBmaWx0ZXIgc3RyaW5nIGFnYWluXHJcbiAgICAgICAgaWYgKHRoaXMudGFibGVTb3VyY2UuZmlsdGVyKSB7XHJcbiAgICAgICAgICBjb25zdCBjdXJyZW50RmlsdGVyID0gdGhpcy50YWJsZVNvdXJjZS5maWx0ZXI7XHJcbiAgICAgICAgICB0aGlzLnRhYmxlU291cmNlLmZpbHRlciA9ICcnO1xyXG4gICAgICAgICAgdGhpcy50YWJsZVNvdXJjZS5maWx0ZXIgPSBjdXJyZW50RmlsdGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0aWFsaXplQ29sdW1ucygpO1xyXG4gICAgdGhpcy5sb2FkTG9jYWxTdG9yYWdlRGF0YSgpO1xyXG4gICAgdGhpcy52YWxpZGF0ZUFuZFVwZGF0ZUZpbHRlcnMoKTtcclxuICAgIHRoaXMuc2V0RGlzcGxheWVkQ29sdW1ucygpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5zZXRJbml0VGFibGUoKTtcclxuICAgIHRoaXMuc2V0U29ydFBhZ2VTdWJzY3JpcHRpb24oKTtcclxuICB9XHJcblxyXG4gIHR1cm5PbkFsbEVkaXRSb3dzKCkge1xyXG4gICAgdGhpcy50YWJsZVNvdXJjZS5kYXRhLmZvckVhY2gocm93ID0+IHtcclxuICAgICAgdGhpcy5hY3RpdmVSb3dzRWRpdGluZ1tyb3cuaWRdID0geyAuLi5yb3cgfTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIGNhcHRpb25EYXRhQ2hhbmdlZChldmVudDogSUNhcHRpb25EYXRhQ2hhbmdlZCkge1xyXG4gICAgY29uc3QgbG9hZExhenlEYXRhID1cclxuICAgICAgZXZlbnQuZ2xvYmFsU2VhcmNoICE9PSB0aGlzLmxvY2FsU3RvcmFnZURhdGEuZ2xvYmFsU2VhcmNoIHx8XHJcbiAgICAgIEpTT04uc3RyaW5naWZ5KGV2ZW50LmZpbHRlcnMpICE9PVxyXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMubG9jYWxTdG9yYWdlRGF0YS5maWx0ZXJzKTtcclxuXHJcbiAgICB0aGlzLmxvY2FsU3RvcmFnZURhdGEgPSB7XHJcbiAgICAgIC4uLmV2ZW50LFxyXG4gICAgICBwYWdlU2l6ZTogdGhpcy5wYWdpbmF0b3IucGFnZVNpemUsXHJcbiAgICAgIHBhZ2VJbmRleDogbG9hZExhenlEYXRhID8gMCA6IHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCxcclxuICAgICAgc29ydEZpZWxkOiB0aGlzLnNvcnQuYWN0aXZlLFxyXG4gICAgICBzb3J0T3JkZXI6IHRoaXMuc29ydC5kaXJlY3Rpb24sXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuc2V0Q29sdW1uc09yZGVyKCk7XHJcbiAgICB0aGlzLnNldENvbHVtbnNWaXNpYmxlKCk7XHJcbiAgICB0aGlzLnNldFNlbGVjdGVkQ29sdW1ucygpO1xyXG4gICAgdGhpcy51cGRhdGVEYXRhVG9Mb2NhbFN0b3JhZ2UoKTtcclxuXHJcbiAgICBpZiAobG9hZExhenlEYXRhKSB7XHJcbiAgICAgIHRoaXMuZW1pdExhenlMb2FkaW5nKCk7XHJcbiAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IDA7XHJcbiAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICB0aGlzLnBhZ2luYXRvci5fZW1pdFBhZ2VFdmVudCgwKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRUYWJsZVNldHRpbmdzKCkge1xyXG4gICAgdGhpcy5zaG93VGFibGUgPSBmYWxzZTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcblxyXG4gICAgdGhpcy5zZXROZXdFbXB0eUxvY2FsU3RvcmFnZURhdGEoKTtcclxuICAgIHRoaXMudXBkYXRlRGF0YVRvTG9jYWxTdG9yYWdlKCk7XHJcbiAgICB0aGlzLmVtaXRMYXp5TG9hZGluZygpO1xyXG4gICAgdGhpcy5pbml0RmlsdGVycyA9IHt9O1xyXG4gICAgdGhpcy5pbml0R2xvYmFsU2VhcmNoID0gJyc7XHJcbiAgICB0aGlzLnNvcnQuc29ydCh7IGlkOiAnJywgc3RhcnQ6ICdhc2MnLCBkaXNhYmxlQ2xlYXI6IGZhbHNlIH0pO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNob3dUYWJsZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2V0RGlzcGxheWVkQ29sdW1ucygpO1xyXG4gICAgICB0aGlzLnNldEluaXRUYWJsZSgpO1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSwgMTAwKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgYSBuZXcgcm93IHRvIHRoZSBsb2NhbCB0YWJsZSBjb3B5IG9ubHkuXHJcbiAgICogVGhlIHJvdyBpcyB0cmFja2VkIGluIGFjdGl2ZVJvd3NDcmVhdGluZyB1bnRpbCBzYXZlZC5cclxuICAgKiBXaGVuIHNhdmVkLCB0aGUgcGFyZW50IHJlY2VpdmVzIHRoZSBldmVudCB0aHJvdWdoIHNhdmVOZXdDcmVhdGVkUm93IG91dHB1dC5cclxuICAgKiBUaGUgcGFyZW50IGRlY2lkZXMgd2hldGhlciB0byBhY2NlcHQgYW5kIGFkZCB0byB0aGVpciBkYXRhIGFycmF5LlxyXG4gICAqL1xyXG4gIGFkZE5ld1JvdygpIHtcclxuICAgIC8vIENyZWF0ZSBuZXcgcm93IHdpdGggZ2VuZXJhdGVkIElEIGFuZCBkZWZhdWx0IHZhbHVlcyBmb3IgZWFjaCBjb2x1bW5cclxuICAgIGNvbnN0IG5ld1JvdzogYW55ID0ge1xyXG4gICAgICBpZDogU3RCYXNlU2VydmljZS5nZW5lcmF0ZUdVSUQoKSxcclxuICAgIH07XHJcblxyXG4gICAgLy8gSW5pdGlhbGl6ZSBmaWVsZHMgd2l0aCBudWxsL2RlZmF1bHQgdmFsdWVzXHJcbiAgICB0aGlzLmNvbHVtbnNcclxuICAgICAgLmZpbHRlcihjb2wgPT4gY29sLmFsbG93RWRpdENvbHVtbilcclxuICAgICAgLmZvckVhY2goY29sID0+IHtcclxuICAgICAgICBuZXdSb3dbY29sLmZpZWxkXSA9IG51bGw7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIEFkZCB0byBsb2NhbCB0YWJsZSBjb3B5IG9ubHlcclxuICAgIHRoaXMudGFibGVTb3VyY2UuZGF0YSA9IFsuLi50aGlzLnRhYmxlU291cmNlLmRhdGEsIG5ld1Jvd107XHJcbiAgICB0aGlzLmFjdGl2ZVJvd3NDcmVhdGluZ1tuZXdSb3cuaWRdID0geyAuLi5uZXdSb3cgfTtcclxuXHJcbiAgICAvLyBOYXZpZ2F0ZSB0byBsYXN0IHBhZ2UgdG8gc2hvdyB0aGUgbmV3IHJvd1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucGFnaW5hdG9yLmxhc3RQYWdlKCk7XHJcbiAgICB9LCAxMDApO1xyXG5cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBlZGl0Um93KHJvdzogYW55LCBjb2x1bW46IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbCkge1xyXG4gICAgdGhpcy5hY3RpdmVSb3dzRWRpdGluZ1tyb3cuaWRdID0geyAuLi5yb3cgfTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVJvdyhyb3c6IGFueSwgY29sdW1uOiBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwsIGluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGFic29sdXRlSW5kZXggPSB0aGlzLmdldEFic29sdXRlSW5kZXgoaW5kZXgpO1xyXG4gICAgdGhpcy5zdERpYWxvZ1NlcnZpY2VcclxuICAgICAgLnNob3dDb25maXJtYXRpb24oJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyByb3c/JylcclxuICAgICAgLnBpcGUoZmlsdGVyKFN0QmFzZVNlcnZpY2Uubm90TnVsbCkpXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICB0aGlzLnRhYmxlU291cmNlLmRhdGEgPSB0aGlzLnRhYmxlU291cmNlLmRhdGEuZmlsdGVyKFxyXG4gICAgICAgICAgZGF0YSA9PiBkYXRhLmlkICE9PSByb3cuaWRcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMucm93RGVsZXRlZC5lbWl0KHsgcm93LCBpbmRleDogYWJzb2x1dGVJbmRleCB9KTtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRlcyBhbmQgc2F2ZXMgYSByb3cgKGVpdGhlciBuZXcgb3IgZWRpdGVkKS5cclxuICAgKiBFbWl0cyB0aGUgdmFsaWRhdGVkIHJvdyB0byB0aGUgcGFyZW50IHRocm91Z2ggZWl0aGVyOlxyXG4gICAqIC0gc2F2ZU5ld0NyZWF0ZWRSb3c6IGZvciBuZXdseSBjcmVhdGVkIHJvd3NcclxuICAgKiAtIHNhdmVOZXdSb3c6IGZvciBlZGl0ZWQgZXhpc3Rpbmcgcm93c1xyXG4gICAqXHJcbiAgICogVGhlIHBhcmVudCBpcyByZXNwb25zaWJsZSBmb3I6XHJcbiAgICogLSBQZXJzaXN0aW5nIHRoZSBjaGFuZ2UgKGUuZy4sIEFQSSBjYWxsKVxyXG4gICAqIC0gVXBkYXRpbmcgdGhlaXIgZGF0YSBhcnJheVxyXG4gICAqIC0gSGFuZGxpbmcgZXJyb3JzL3JlamVjdGlvbnNcclxuICAgKlxyXG4gICAqIFRoZSBsaWJyYXJ5IHVwZGF0ZXMgaXRzIGxvY2FsIGNvcHkgb3B0aW1pc3RpY2FsbHkuXHJcbiAgICovXHJcbiAgc2F2ZUVkaXRSb3cocm93OiBhbnksIGNvbHVtbjogVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsLCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBhYnNvbHV0ZUluZGV4ID0gdGhpcy5nZXRBYnNvbHV0ZUluZGV4KGluZGV4KTtcclxuICAgIGNvbnN0IGlzQ3JlYXRpbmdUaGlzUm93ID0gISF0aGlzLmFjdGl2ZVJvd3NDcmVhdGluZ1tyb3cuaWRdO1xyXG4gICAgY29uc3Qgcm93RGF0YSA9IGlzQ3JlYXRpbmdUaGlzUm93XHJcbiAgICAgID8gdGhpcy5hY3RpdmVSb3dzQ3JlYXRpbmdbcm93LmlkXVxyXG4gICAgICA6IHRoaXMuYWN0aXZlUm93c0VkaXRpbmdbcm93LmlkXTtcclxuXHJcbiAgICAvLyBWYWxpZGF0ZSByb3dcclxuICAgIGlmICghdGhpcy52YWxpZGF0ZVJvdyhyb3dEYXRhLCByb3cpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBFbWl0IHRvIHBhcmVudFxyXG4gICAgaWYgKGlzQ3JlYXRpbmdUaGlzUm93KSB7XHJcbiAgICAgIHRoaXMuc2F2ZUNyZWF0ZWRSb3cuZW1pdCh7IC4uLnJvd0RhdGEgfSk7XHJcbiAgICAgIGRlbGV0ZSB0aGlzLmFjdGl2ZVJvd3NDcmVhdGluZ1tyb3cuaWRdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zYXZlRWRpdGVkUm93LmVtaXQoeyByb3c6IHsgLi4ucm93RGF0YSB9LCBpbmRleDogYWJzb2x1dGVJbmRleCB9KTtcclxuICAgICAgZGVsZXRlIHRoaXMuYWN0aXZlUm93c0VkaXRpbmdbcm93LmlkXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBVcGRhdGUgbG9jYWwgdGFibGUgY29weVxyXG4gICAgdGhpcy51cGRhdGVSb3dJbkRhdGFTb3VyY2UoYWJzb2x1dGVJbmRleCwgcm93LCByb3dEYXRhKTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBjYW5jZWxFZGl0Um93KHJvdzogYW55LCBjb2x1bW46IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbCkge1xyXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBzcGVjaWZpYyByb3cgaXMgYmVpbmcgY3JlYXRlZFxyXG4gICAgY29uc3QgaXNDcmVhdGluZ1RoaXNSb3cgPSAhIXRoaXMuYWN0aXZlUm93c0NyZWF0aW5nW3Jvdy5pZF07XHJcblxyXG4gICAgaWYgKGlzQ3JlYXRpbmdUaGlzUm93KSB7XHJcbiAgICAgIC8vIFJlbW92ZSBmcm9tIGxvY2FsIHRhYmxlIGNvcHlcclxuICAgICAgdGhpcy50YWJsZVNvdXJjZS5kYXRhID0gdGhpcy50YWJsZVNvdXJjZS5kYXRhLmZpbHRlcihcclxuICAgICAgICBkYXRhID0+IGRhdGEuaWQgIT09IHJvdy5pZFxyXG4gICAgICApO1xyXG4gICAgICBkZWxldGUgdGhpcy5hY3RpdmVSb3dzQ3JlYXRpbmdbcm93LmlkXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRlbGV0ZSB0aGlzLmFjdGl2ZVJvd3NFZGl0aW5nW3Jvdy5pZF07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2xlYXIgdmFsaWRhdGlvbiBlcnJvcnMgZm9yIHRoaXMgcm93XHJcbiAgICBpZiAodGhpcy52YWxpZGF0aW9uRXJyb3JzW3Jvdy5pZF0pIHtcclxuICAgICAgZGVsZXRlIHRoaXMudmFsaWRhdGlvbkVycm9yc1tyb3cuaWRdO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIGltbWVkaWF0ZSBmaWVsZCB2YWx1ZSBjaGFuZ2VzIGZvciBhdXRvLXNhdmUgbW9kZS5cclxuICAgKiBJbiBhdXRvLXNhdmUgbW9kZSwgbmdNb2RlbCBpcyBib3VuZCBkaXJlY3RseSB0byByb3dEYXRhLCBzbyB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSBpdC5cclxuICAgKiBXZSBvbmx5IGVtaXQgdG8gcGFyZW50IHNvIHRoZXkgY2FuIHVwZGF0ZSB0aGVpciBkYXRhIGNvcHkuXHJcbiAgICovXHJcbiAgb25GaWVsZFZhbHVlQ2hhbmdlZChcclxuICAgIHJvdzogYW55LFxyXG4gICAgY29sdW1uOiBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwsXHJcbiAgICB2YWx1ZTogYW55LFxyXG4gICAgaW5kZXg6IG51bWJlclxyXG4gICkge1xyXG4gICAgY29uc3QgYWJzb2x1dGVJbmRleCA9IHRoaXMuZ2V0QWJzb2x1dGVJbmRleChpbmRleCk7XHJcbiAgICB0aGlzLnRhYmxlU291cmNlLmRhdGFbYWJzb2x1dGVJbmRleF1bY29sdW1uLmZpZWxkXSA9IHZhbHVlO1xyXG5cclxuICAgIC8vIFZhbGlkYXRlIHRoZSBmaWVsZCBpZiBhdXRvU2F2ZU9uQ2hhbmdlIGlzIGVuYWJsZWRcclxuICAgIGlmICh0aGlzLmF1dG9TYXZlT25DaGFuZ2UoKSkge1xyXG4gICAgICAvLyBVc2UgdmFsaWRhdGVSb3cgd2l0aCBzaW5nbGUgY29sdW1uIHRvIHZhbGlkYXRlIGp1c3QgdGhpcyBmaWVsZFxyXG4gICAgICB0aGlzLnZhbGlkYXRlUm93KHJvdywgcm93LCBjb2x1bW4pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEVtaXQgdG8gcGFyZW50IGltbWVkaWF0ZWx5XHJcbiAgICAvLyBUaGUgcm93IG9iamVjdCBpcyBhbHJlYWR5IHVwZGF0ZWQgYnkgbmdNb2RlbCBiaW5kaW5nXHJcbiAgICB0aGlzLmZpZWxkVmFsdWVDaGFuZ2VkLmVtaXQoe1xyXG4gICAgICByb3c6IHsgLi4ucm93IH0sXHJcbiAgICAgIGZpZWxkOiBjb2x1bW4uZmllbGQsXHJcbiAgICAgIHZhbHVlOiB2YWx1ZSxcclxuICAgICAgaW5kZXg6IGFic29sdXRlSW5kZXgsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29tcGFyZVJvd3MoYTogYW55LCBiOiBhbnkpOiBudW1iZXIge1xyXG4gICAgY29uc3QgYUlkID0gYT8uaWQgPz8gYTtcclxuICAgIGNvbnN0IGJJZCA9IGI/LmlkID8/IGI7XHJcbiAgICByZXR1cm4gYUlkID09PSBiSWQgPyAwIDogMTtcclxuICB9XHJcblxyXG4gIGlzUm93U2VsZWN0ZWQocm93OiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUm93cygpLnNvbWUociA9PiB0aGlzLmNvbXBhcmVSb3dzKHIsIHJvdykgPT09IDApO1xyXG4gIH1cclxuXHJcbiAgaXNBbGxTZWxlY3RlZCgpIHtcclxuICAgIGNvbnN0IG51bVNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZFJvd3MoKS5sZW5ndGg7XHJcbiAgICBpZiAodGhpcy50YWJsZVNvdXJjZSkge1xyXG4gICAgICBjb25zdCBudW1Sb3dzID0gdGhpcy50YWJsZVNvdXJjZS5kYXRhLmxlbmd0aDtcclxuICAgICAgcmV0dXJuIG51bVNlbGVjdGVkID09PSBudW1Sb3dzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlQWxsUm93cyhldmVudDogYm9vbGVhbikge1xyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnNldChbLi4udGhpcy50YWJsZVNvdXJjZS5kYXRhXSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy5zZXQoW10pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VsZWN0Um93Q2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MoKSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVTZWxlY3RlZFJvdyhyb3c6IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFJvd3MudXBkYXRlKHNlbGVjdGVkID0+XHJcbiAgICAgIHNlbGVjdGVkLmZpbHRlcihyID0+IHRoaXMuY29tcGFyZVJvd3Mociwgcm93KSAhPT0gMClcclxuICAgICk7XHJcbiAgICB0aGlzLnNlbGVjdFJvd0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKCkpO1xyXG4gIH1cclxuXHJcbiAgb25SZW1vdmVTZWxlY3RlZFJvdyhyb3c6IGFueSkge1xyXG4gICAgdGhpcy5yZW1vdmVTZWxlY3RlZFJvdyhyb3cpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0Um93Q2hhbmdlZCh2YWx1ZTogYm9vbGVhbiwgcm93OiBhbnkpIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RSb3dPbmx5T25lKCkpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93cy5zZXQoW3Jvd10pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnVwZGF0ZShzZWxlY3RlZCA9PiBbLi4uc2VsZWN0ZWQsIHJvd10pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy51cGRhdGUoc2VsZWN0ZWQgPT5cclxuICAgICAgICBzZWxlY3RlZC5maWx0ZXIociA9PiB0aGlzLmNvbXBhcmVSb3dzKHIsIHJvdykgIT09IDApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIHRoaXMuc2VsZWN0Um93Q2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MoKSk7XHJcbiAgfVxyXG5cclxuICBjbGlja1Jvd0FjdGlvbihyb3c6IGFueSwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuYWxsb3dFeHRlbmRSb3coKSkge1xyXG4gICAgICBpZiAodGhpcy5leHBhbmRlZFJvd0luZGV4KCkgPT09IGluZGV4KSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZFJvd0luZGV4LnNldChudWxsKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkUm93SW5kZXguc2V0KGluZGV4KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmFsbG93U2VsZWN0Um93KCkpIHtcclxuICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuaXNSb3dTZWxlY3RlZChyb3cpO1xyXG4gICAgICB0aGlzLnNlbGVjdFJvd0NoYW5nZWQoIWlzU2VsZWN0ZWQsIHJvdyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5yb3dDbGlja0FjdGlvbigpKSB7XHJcbiAgICAgICAgdGhpcy5yb3dDbGlja0FjdGlvbigpIShyb3cpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRBYnNvbHV0ZUluZGV4KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMubGF6eUxvYWRpbmcoKSkge1xyXG4gICAgICByZXR1cm4gaW5kZXg7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5wYWdpbmF0b3JcclxuICAgICAgICA/IHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCAqIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplICsgaW5kZXhcclxuICAgICAgICA6IGluZGV4O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRDb2x1bW5zRmlsdGVyUm93RWRpdFR5cGVzKCkge1xyXG4gICAgdGhpcy5pbml0TG9jYWxDb2x1bW5zKCkuZm9yRWFjaChjb2x1bW4gPT4ge1xyXG4gICAgICBpZiAoY29sdW1uLmZpZWxkID09PSAnYWN0aW9ucycgJiYgIWNvbHVtbi50eXBlKSB7XHJcbiAgICAgICAgY29sdW1uLnR5cGUgPSAnYWN0aW9ucyc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghY29sdW1uLmZpbHRlclR5cGUgJiYgY29sdW1uLmZpbHRlcikge1xyXG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIGNvbHVtbi5maWx0ZXJUeXBlID0gJ3N0cmluZyc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgIGNvbHVtbi5maWx0ZXJUeXBlID0gJ251bWJlcic7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgICAgICBjb2x1bW4uZmlsdGVyVHlwZSA9ICdkYXRlJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnY3VzdG9tLXRlbXBsYXRlJykge1xyXG4gICAgICAgICAgY29sdW1uLmZpbHRlclR5cGUgPSAnY3VzdG9tJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICAgIGNvbHVtbi5maWx0ZXJUeXBlID0gJ2Jvb2xlYW4nO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb2x1bW4uZmlsdGVyVHlwZSA9ICdzdHJpbmcnO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuYWxsb3dFZGl0Um93KCkgJiYgIWNvbHVtbi5yb3dFZGl0VHlwZSkge1xyXG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIGNvbHVtbi5yb3dFZGl0VHlwZSA9ICdzdHJpbmcnO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICBjb2x1bW4ucm93RWRpdFR5cGUgPSAnbnVtYmVyJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgICAgIGNvbHVtbi5yb3dFZGl0VHlwZSA9ICdkYXRlJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnY3VzdG9tLXRlbXBsYXRlJykge1xyXG4gICAgICAgICAgY29sdW1uLnJvd0VkaXRUeXBlID0gJ2N1c3RvbSc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgICBjb2x1bW4ucm93RWRpdFR5cGUgPSAnYm9vbGVhbic7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbHVtbi5yb3dFZGl0VHlwZSA9ICdzdHJpbmcnO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUN1c3RvbUZpbHRlckZvckxvY2FsVGFibGUoKSB7XHJcbiAgICBsZXQgZmlsdGVyRnVuY3Rpb24gPSAoZGF0YTogYW55LCBmaWx0ZXI6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICBjb25zdCBzZWFyY2hUZXJtczoge1xyXG4gICAgICAgIFtjb2x1bW46IHN0cmluZ106IFN0TWF0ZXJpYWxUYWJsZUZpbHRlcjtcclxuICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgc3RHbG9iYWxTZWFyY2g6IHN0cmluZztcclxuICAgICAgfSA9IEpTT04ucGFyc2UoZmlsdGVyKTtcclxuICAgICAgY29uc3Qgc2VhcmNoVGVybXNLZXlzID0gT2JqZWN0LmtleXMoc2VhcmNoVGVybXMpO1xyXG4gICAgICBsZXQgc2VhcmNoT2sgPSB0cnVlO1xyXG4gICAgICBsZXQgc2VhcmNoT2tHbG9iYWwgPSB0cnVlO1xyXG5cclxuICAgICAgc2VhcmNoVGVybXNLZXlzLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAga2V5ICE9PSAnc3RHbG9iYWxTZWFyY2gnICYmXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uc1N0cmluZy5pbmNsdWRlcyhrZXkpICYmXHJcbiAgICAgICAgICBzZWFyY2hUZXJtc1trZXldLnZhbHVlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzZWFyY2hUZXJtc1trZXldLnZhbHVlKSkge1xyXG4gICAgICAgICAgICBjb25zdCBkYXRlRnJvbTogc3RyaW5nIHwgbnVsbCA9IChcclxuICAgICAgICAgICAgICBzZWFyY2hUZXJtc1trZXldLnZhbHVlIGFzIFtzdHJpbmcgfCBudWxsLCBzdHJpbmcgfCBudWxsXVxyXG4gICAgICAgICAgICApWzBdO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRlVG86IHN0cmluZyB8IG51bGwgPSAoXHJcbiAgICAgICAgICAgICAgc2VhcmNoVGVybXNba2V5XS52YWx1ZSBhcyBbc3RyaW5nIHwgbnVsbCwgc3RyaW5nIHwgbnVsbF1cclxuICAgICAgICAgICAgKVsxXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChkYXRlRnJvbSB8fCBkYXRlVG8pIHtcclxuICAgICAgICAgICAgICBjb25zdCB0bXBDb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZChjb2wgPT4gY29sLmZpZWxkID09PSBrZXkpO1xyXG5cclxuICAgICAgICAgICAgICBpZiAodG1wQ29sdW1uICYmIHRtcENvbHVtbi50eXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVGcm9tVmFsdWUgPSBkYXRlRnJvbSA/IG5ldyBEYXRlKGRhdGVGcm9tKSA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlVG9WYWx1ZSA9IGRhdGVUb1xyXG4gICAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgbmV3IERhdGUoZGF0ZVRvKS5zZXREYXRlKG5ldyBEYXRlKGRhdGVUbykuZ2V0RGF0ZSgpICsgMSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlRGF0YSA9IG5ldyBEYXRlKGRhdGFba2V5XSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGVGcm9tVmFsdWUgJiYgZGF0ZVRvVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgc2VhcmNoT2sgPVxyXG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaE9rICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGFibGVEYXRhID49IGRhdGVGcm9tVmFsdWUgJiZcclxuICAgICAgICAgICAgICAgICAgICB0YWJsZURhdGEgPD0gZGF0ZVRvVmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGVGcm9tVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgc2VhcmNoT2sgPSBzZWFyY2hPayAmJiB0YWJsZURhdGEgPj0gZGF0ZUZyb21WYWx1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0ZVRvVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgc2VhcmNoT2sgPSBzZWFyY2hPayAmJiB0YWJsZURhdGEgPD0gZGF0ZVRvVmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgZGF0YVtrZXldICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgICBkYXRhW2tleV0gIT09IG51bGwgJiZcclxuICAgICAgICAgICAgICBzZWFyY2hUZXJtc1trZXldLnZhbHVlICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgICBzZWFyY2hUZXJtc1trZXldLnZhbHVlICE9PSBudWxsXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHNlYXJjaE9rID1cclxuICAgICAgICAgICAgICAgIHNlYXJjaE9rICYmXHJcbiAgICAgICAgICAgICAgICAoc2VhcmNoVGVybXNba2V5XS5tYXRjaE1vZGUgPT09ICdlcXVhbCdcclxuICAgICAgICAgICAgICAgICAgPyBkYXRhW2tleV0gPT09IHNlYXJjaFRlcm1zW2tleV0udmFsdWVcclxuICAgICAgICAgICAgICAgICAgOiBkYXRhW2tleV1cclxuICAgICAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgLmluZGV4T2YoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFRlcm1zW2tleV0udmFsdWUhLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgKSAhPT0gLTEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgaWYgKHNlYXJjaFRlcm1zLnN0R2xvYmFsU2VhcmNoKSB7XHJcbiAgICAgICAgc2VhcmNoT2tHbG9iYWwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uc1N0cmluZy5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgICAgICBpZiAoZGF0YVtjb2xdKSB7XHJcbiAgICAgICAgICAgIHNlYXJjaE9rR2xvYmFsID1cclxuICAgICAgICAgICAgICBzZWFyY2hPa0dsb2JhbCB8fFxyXG4gICAgICAgICAgICAgIGRhdGFbY29sXVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICAuaW5kZXhPZihcclxuICAgICAgICAgICAgICAgICAgc2VhcmNoVGVybXMuc3RHbG9iYWxTZWFyY2gudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICApICE9PSAtMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQXBwbHkgY3VzdG9tIGZpbHRlciBtZXRob2QgaWYgcHJvdmlkZWRcclxuICAgICAgbGV0IGN1c3RvbUZpbHRlck9rID0gdHJ1ZTtcclxuICAgICAgaWYgKHRoaXMuaW5pdEZpbHRlck1ldGhvZCgpKSB7XHJcbiAgICAgICAgY3VzdG9tRmlsdGVyT2sgPSB0aGlzLmluaXRGaWx0ZXJNZXRob2QoKSEoZGF0YSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBzZWFyY2hPayAmJiBzZWFyY2hPa0dsb2JhbCAmJiBjdXN0b21GaWx0ZXJPaztcclxuICAgIH07XHJcbiAgICByZXR1cm4gZmlsdGVyRnVuY3Rpb247XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGVtaXRMYXp5TG9hZGluZygpIHtcclxuICAgIGlmICh0aGlzLmxhenlMb2FkaW5nKCkpIHtcclxuICAgICAgY29uc3QgbG9hZERhdGFSZXF1ZXN0OiBTdE1hdGVyaWFsVGFibGVMb2FkRGF0YSA9IHtcclxuICAgICAgICBmaXJzdDogdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ICogdGhpcy5wYWdpbmF0b3IucGFnZVNpemUsXHJcbiAgICAgICAgcm93czogdGhpcy5wYWdpbmF0b3IucGFnZVNpemUsXHJcbiAgICAgICAgZ2xvYmFsRmlsdGVyQ29sdW1uczogdGhpcy5zZWxlY3RlZENvbHVtbnNTdHJpbmcsXHJcbiAgICAgICAgZ2xvYmFsRmlsdGVyOiB0aGlzLmxvY2FsU3RvcmFnZURhdGEuZ2xvYmFsU2VhcmNoLFxyXG4gICAgICAgIHNvcnRGaWVsZDogdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLnNvcnRGaWVsZCxcclxuICAgICAgICBzb3J0T3JkZXI6IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5zb3J0T3JkZXIsXHJcbiAgICAgICAgZmlsdGVyczogdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLmZpbHRlcnMsXHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLmxvYWREYXRhLmVtaXQobG9hZERhdGFSZXF1ZXN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudGFibGVTb3VyY2UuZmlsdGVyID0gSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgIC4uLnRoaXMubG9jYWxTdG9yYWdlRGF0YS5maWx0ZXJzLFxyXG4gICAgICAgIHN0R2xvYmFsU2VhcmNoOiB0aGlzLmxvY2FsU3RvcmFnZURhdGEuZ2xvYmFsU2VhcmNoLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRGF0YVRvTG9jYWxTdG9yYWdlKCkge1xyXG4gICAgaWYgKHRoaXMubG9jYWxTdG9yYWdlTmFtZSgpKSB7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgIHRoaXMubG9jYWxTdG9yYWdlTmFtZSgpISxcclxuICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmxvY2FsU3RvcmFnZURhdGEpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEluaXRUYWJsZSgpIHtcclxuICAgIHRoaXMudGFibGVTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKHRoaXMuX2RhdGEpO1xyXG5cclxuICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplID0gdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLnBhZ2VTaXplO1xyXG4gICAgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLnBhZ2VJbmRleDtcclxuXHJcbiAgICBpZiAodGhpcy5sb2NhbFN0b3JhZ2VEYXRhLnNvcnRGaWVsZCAmJiB0aGlzLmxvY2FsU3RvcmFnZURhdGEuc29ydE9yZGVyKSB7XHJcbiAgICAgIGNvbnN0IGRpc2FibGVDbGVhciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNvcnQuc29ydCh7IGlkOiAnJywgc3RhcnQ6ICdhc2MnLCBkaXNhYmxlQ2xlYXIgfSk7XHJcbiAgICAgIHRoaXMuc29ydC5zb3J0KHtcclxuICAgICAgICBpZDogdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLnNvcnRGaWVsZCxcclxuICAgICAgICBzdGFydDogdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLnNvcnRPcmRlcixcclxuICAgICAgICBkaXNhYmxlQ2xlYXIsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5sYXp5TG9hZGluZygpISkge1xyXG4gICAgICB0aGlzLnRhYmxlU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xyXG4gICAgICB0aGlzLnRhYmxlU291cmNlLnNvcnQgPSB0aGlzLnNvcnQ7XHJcbiAgICAgIHRoaXMudGFibGVTb3VyY2UuZmlsdGVyUHJlZGljYXRlID0gdGhpcy5jcmVhdGVDdXN0b21GaWx0ZXJGb3JMb2NhbFRhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lbWl0TGF6eUxvYWRpbmcoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U29ydFBhZ2VTdWJzY3JpcHRpb24oKSB7XHJcbiAgICB0aGlzLnNvcnQuc29ydENoYW5nZVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5uZ0Rlc3Ryb3llZCQpLFxyXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKFxyXG4gICAgICAgICAgKHByZXYsIGN1cnIpID0+IEpTT04uc3RyaW5naWZ5KHByZXYpID09PSBKU09OLnN0cmluZ2lmeShjdXJyKVxyXG4gICAgICAgIClcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VEYXRhID0ge1xyXG4gICAgICAgICAgLi4udGhpcy5sb2NhbFN0b3JhZ2VEYXRhLFxyXG4gICAgICAgICAgc29ydEZpZWxkOiByZXMuYWN0aXZlLFxyXG4gICAgICAgICAgc29ydE9yZGVyOiByZXMuZGlyZWN0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXRhVG9Mb2NhbFN0b3JhZ2UoKTtcclxuICAgICAgICB0aGlzLmVtaXRMYXp5TG9hZGluZygpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnBhZ2luYXRvci5wYWdlXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLm5nRGVzdHJveWVkJCksXHJcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoXHJcbiAgICAgICAgICAocHJldiwgY3VycikgPT4gSlNPTi5zdHJpbmdpZnkocHJldikgPT09IEpTT04uc3RyaW5naWZ5KGN1cnIpXHJcbiAgICAgICAgKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZURhdGEgPSB7XHJcbiAgICAgICAgICAuLi50aGlzLmxvY2FsU3RvcmFnZURhdGEsXHJcbiAgICAgICAgICBwYWdlSW5kZXg6IHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCxcclxuICAgICAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZURhdGFUb0xvY2FsU3RvcmFnZSgpO1xyXG4gICAgICAgIHRoaXMuZW1pdExhenlMb2FkaW5nKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXREaXNwbGF5ZWRDb2x1bW5zKCkge1xyXG4gICAgdGhpcy5jb2x1bW5zID0gdGhpcy5pbml0TG9jYWxDb2x1bW5zKCkubWFwKGNvbCA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4uY29sLFxyXG4gICAgICAgIHR5cGU6IGNvbC50eXBlID8gY29sLnR5cGUgOiAnc3RyaW5nJyxcclxuICAgICAgICB2aXNpYmxlOiB0cnVlLFxyXG4gICAgICAgIGV4cGFuZGVkOiB0cnVlLFxyXG4gICAgICAgIGlzRWRpdGluZzogZmFsc2UsXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNldENvbHVtbnNPcmRlcigpO1xyXG4gICAgdGhpcy5zZXRDb2x1bW5zVmlzaWJsZSgpO1xyXG4gICAgdGhpcy5zZXRTZWxlY3RlZENvbHVtbnMoKTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENvbHVtbnNPcmRlcigpIHtcclxuICAgIGlmICh0aGlzLmxvY2FsU3RvcmFnZURhdGE/LmNvbHVtbnNPcmRlcikge1xyXG4gICAgICB0aGlzLmNvbHVtbnMgPSBbXHJcbiAgICAgICAgLi4udGhpcy5sb2NhbFN0b3JhZ2VEYXRhLmNvbHVtbnNPcmRlclxyXG4gICAgICAgICAgLmZpbHRlcihjb2x1bW4gPT4gdGhpcy5jb2x1bW5zLmZpbmQoY29sID0+IGNvbC5maWVsZCA9PT0gY29sdW1uKSlcclxuICAgICAgICAgIC5tYXAoY29sdW1uID0+IHRoaXMuY29sdW1ucy5maW5kKGNvbCA9PiBjb2wuZmllbGQgPT09IGNvbHVtbikhKSxcclxuICAgICAgICAuLi50aGlzLmNvbHVtbnMuZmlsdGVyKFxyXG4gICAgICAgICAgY29sdW1uID0+ICF0aGlzLmxvY2FsU3RvcmFnZURhdGEuY29sdW1uc09yZGVyLmluY2x1ZGVzKGNvbHVtbi5maWVsZClcclxuICAgICAgICApLFxyXG4gICAgICBdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRDb2x1bW5zVmlzaWJsZSgpIHtcclxuICAgIGlmICh0aGlzLmxvY2FsU3RvcmFnZURhdGE/LnNlbGVjdGVkQ29sdW1ucykge1xyXG4gICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKGNvbCA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLmNvbCxcclxuICAgICAgICAgIHZpc2libGU6XHJcbiAgICAgICAgICAgIHRoaXMubG9jYWxTdG9yYWdlRGF0YS5zZWxlY3RlZENvbHVtbnMuaW5jbHVkZXMoY29sLmZpZWxkKSB8fFxyXG4gICAgICAgICAgICAhdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLmNvbHVtbnNPcmRlci5pbmNsdWRlcyhjb2wuZmllbGQpLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRTZWxlY3RlZENvbHVtbnMoKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sID0+IHtcclxuICAgICAgcmV0dXJuIGNvbC52aXNpYmxlO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1uc1N0cmluZyA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLm1hcChjb2wgPT4gY29sLmZpZWxkKTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRMb2NhbFN0b3JhZ2VEYXRhKCkge1xyXG4gICAgaWYgKHRoaXMubG9jYWxTdG9yYWdlTmFtZSgpKSB7XHJcbiAgICAgIGNvbnN0IGxvY2FsU3RvcmFnZURhdGEgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmxvY2FsU3RvcmFnZU5hbWUoKSEpO1xyXG5cclxuICAgICAgaWYgKGxvY2FsU3RvcmFnZURhdGEpIHtcclxuICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZURhdGEgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZURhdGEpO1xyXG4gICAgICAgIC8vIGNvbnN0IGZpbHRlcnMgPSB0aGlzLnZhbGlkT2xkRmlsdGVyc1RvTmV3Rm9ybWF0KFxyXG4gICAgICAgIC8vICAgdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLmZpbHRlcnNcclxuICAgICAgICAvLyApO1xyXG4gICAgICAgIC8vIHRoaXMubG9jYWxTdG9yYWdlRGF0YS5maWx0ZXJzID0gZmlsdGVycztcclxuICAgICAgICB0aGlzLmluaXRGaWx0ZXJzID0gdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLmZpbHRlcnM7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdEdsb2JhbFNlYXJjaCA9IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5nbG9iYWxTZWFyY2g7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZXROZXdFbXB0eUxvY2FsU3RvcmFnZURhdGEoKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXROZXdFbXB0eUxvY2FsU3RvcmFnZURhdGEoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmFsaWRPbGRGaWx0ZXJzVG9OZXdGb3JtYXQob2xkRmlsdGVyczoge1xyXG4gICAgW2tleTogc3RyaW5nXTogU3RNYXRlcmlhbFRhYmxlRmlsdGVyIHwgc3RyaW5nO1xyXG4gIH0pOiB7IFtrZXk6IHN0cmluZ106IFN0TWF0ZXJpYWxUYWJsZUZpbHRlciB9IHtcclxuICAgIGNvbnN0IG5ld0ZpbHRlcnM6IHsgW2tleTogc3RyaW5nXTogU3RNYXRlcmlhbFRhYmxlRmlsdGVyIH0gPSB7fTtcclxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvbGRGaWx0ZXJzKTtcclxuXHJcbiAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIG5ld0ZpbHRlcnM7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XHJcbiAgICAgIGlmICh0eXBlb2Ygb2xkRmlsdGVyc1trZXldID09PSAnb2JqZWN0JyAmJiBvbGRGaWx0ZXJzW2tleV0gIT09IG51bGwpIHtcclxuICAgICAgICBuZXdGaWx0ZXJzW2tleV0gPSBvbGRGaWx0ZXJzW2tleV0gYXMgU3RNYXRlcmlhbFRhYmxlRmlsdGVyO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ld0ZpbHRlcnM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldE5ld0VtcHR5TG9jYWxTdG9yYWdlRGF0YSgpIHtcclxuICAgIHRoaXMubG9jYWxTdG9yYWdlRGF0YSA9IHtcclxuICAgICAgcGFnZVNpemU6IHRoaXMucGFnZVNpemUoKSxcclxuICAgICAgcGFnZUluZGV4OiAwLFxyXG4gICAgICBzZWxlY3RlZENvbHVtbnM6IHRoaXMuaW5pdExvY2FsQ29sdW1ucygpLm1hcChjb2wgPT4gY29sLmZpZWxkKSxcclxuICAgICAgZ2xvYmFsU2VhcmNoOiAnJyxcclxuICAgICAgY29sdW1uc09yZGVyOiB0aGlzLmluaXRMb2NhbENvbHVtbnMoKS5tYXAoY29sID0+IGNvbC5maWVsZCksXHJcbiAgICAgIGZpbHRlcnM6IHt9LFxyXG4gICAgICBzb3J0RmllbGQ6ICcnLFxyXG4gICAgICBzb3J0T3JkZXI6ICdhc2MnLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGlzRmlyc3RFZGl0YWJsZUNvbHVtbihjb2x1bW46IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbCk6IGJvb2xlYW4ge1xyXG4gICAgLy8gR2V0IGFsbCBlZGl0YWJsZSBjb2x1bW5zIGluIG9yZGVyXHJcbiAgICBjb25zdCBlZGl0YWJsZUNvbHVtbnMgPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5maWx0ZXIoXHJcbiAgICAgIGNvbCA9PiBjb2wuYWxsb3dFZGl0Q29sdW1uICYmIGNvbC52aXNpYmxlXHJcbiAgICApO1xyXG5cclxuICAgIC8vIFJldHVybiB0cnVlIGlmIHRoaXMgaXMgdGhlIGZpcnN0IGVkaXRhYmxlIGNvbHVtblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgZWRpdGFibGVDb2x1bW5zLmxlbmd0aCA+IDAgJiYgZWRpdGFibGVDb2x1bW5zWzBdLmZpZWxkID09PSBjb2x1bW4uZmllbGRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbGlkYXRlUm93KFxyXG4gICAgcm93RGF0YTogYW55LFxyXG4gICAgb3JpZ2luYWxSb3c6IGFueSxcclxuICAgIHNpbmdsZUNvbHVtbj86IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbFxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgZWRpdGFibGVDb2x1bW5zID0gc2luZ2xlQ29sdW1uXHJcbiAgICAgID8gW3NpbmdsZUNvbHVtbl1cclxuICAgICAgOiB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wuYWxsb3dFZGl0Q29sdW1uKTtcclxuICAgIGNvbnN0IHJvd0lkID0gb3JpZ2luYWxSb3cuaWQ7XHJcblxyXG4gICAgLy8gRm9yIHNpbmdsZSBmaWVsZCB2YWxpZGF0aW9uLCBwcmVzZXJ2ZSBleGlzdGluZyBlcnJvcnMgZm9yIG90aGVyIGZpZWxkc1xyXG4gICAgbGV0IGVycm9yczogeyBbZmllbGQ6IHN0cmluZ106IHN0cmluZyB9ID0gc2luZ2xlQ29sdW1uXHJcbiAgICAgID8geyAuLi50aGlzLnZhbGlkYXRpb25FcnJvcnNbcm93SWRdIH1cclxuICAgICAgOiB7fTtcclxuXHJcbiAgICAvLyBDbGVhciBhbGwgZXJyb3JzIGlmIHZhbGlkYXRpbmcgZW50aXJlIHJvd1xyXG4gICAgaWYgKCFzaW5nbGVDb2x1bW4gJiYgdGhpcy52YWxpZGF0aW9uRXJyb3JzW3Jvd0lkXSkge1xyXG4gICAgICBlcnJvcnMgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaGFzRXJyb3JzID0gZmFsc2U7XHJcbiAgICBsZXQgZmlyc3RFcnJvck1lc3NhZ2UgPSAnJztcclxuXHJcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBlZGl0YWJsZUNvbHVtbnMpIHtcclxuICAgICAgbGV0IGZpZWxkSGFzRXJyb3IgPSBmYWxzZTtcclxuICAgICAgbGV0IGVycm9yTWVzc2FnZSA9ICcnO1xyXG5cclxuICAgICAgaWYgKGNvbC5jdXN0b21FZGl0Um93VmFsaWRhdG9yKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29sLmN1c3RvbUVkaXRSb3dWYWxpZGF0b3IoXHJcbiAgICAgICAgICByb3dEYXRhW2NvbC5maWVsZF0sXHJcbiAgICAgICAgICBvcmlnaW5hbFJvd1tjb2wuZmllbGRdLFxyXG4gICAgICAgICAgb3JpZ2luYWxSb3dcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICghcmVzdWx0LmlzVmFsaWQpIHtcclxuICAgICAgICAgIGVycm9yc1tjb2wuZmllbGRdID0gcmVzdWx0LmVycm9yTWVzc2FnZTtcclxuICAgICAgICAgIGZpZWxkSGFzRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTtcclxuICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHJlc3VsdC5lcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWZpZWxkSGFzRXJyb3IgJiYgY29sLmVkaXRDb2x1bW5SZXF1aXJlZCkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gcm93RGF0YVtjb2wuZmllbGRdO1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAnJykge1xyXG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gYCR7Y29sLmhlYWRlcn0gaXMgcmVxdWlyZWRgO1xyXG4gICAgICAgICAgZXJyb3JzW2NvbC5maWVsZF0gPSBlcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgICBmaWVsZEhhc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDbGVhciBlcnJvciBmb3IgdGhpcyBmaWVsZCBpZiB2YWxpZGF0aW9uIHBhc3NlZFxyXG4gICAgICBpZiAoIWZpZWxkSGFzRXJyb3IgJiYgc2luZ2xlQ29sdW1uKSB7XHJcbiAgICAgICAgZGVsZXRlIGVycm9yc1tjb2wuZmllbGRdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDYXB0dXJlIGZpcnN0IGVycm9yIGZvciBzbmFja2JhciAob25seSB3aGVuIHZhbGlkYXRpbmcgZW50aXJlIHJvdylcclxuICAgICAgaWYgKCFzaW5nbGVDb2x1bW4gJiYgZmllbGRIYXNFcnJvciAmJiAhZmlyc3RFcnJvck1lc3NhZ2UpIHtcclxuICAgICAgICBmaXJzdEVycm9yTWVzc2FnZSA9IGVycm9yTWVzc2FnZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSB2YWxpZGF0aW9uIGVycm9yc1xyXG4gICAgaWYgKE9iamVjdC5rZXlzKGVycm9ycykubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnNbcm93SWRdID0gZXJyb3JzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGVsZXRlIHRoaXMudmFsaWRhdGlvbkVycm9yc1tyb3dJZF07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2hvdyBzbmFja2JhciBvbmx5IHdoZW4gdmFsaWRhdGluZyBlbnRpcmUgcm93IChvbiBzYXZlKVxyXG4gICAgaWYgKCFzaW5nbGVDb2x1bW4gJiYgaGFzRXJyb3JzICYmIGZpcnN0RXJyb3JNZXNzYWdlKSB7XHJcbiAgICAgIHRoaXMuc25hY2tiYXIuZXJyb3IoZmlyc3RFcnJvck1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICByZXR1cm4gIWhhc0Vycm9ycztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUm93SW5EYXRhU291cmNlKGluZGV4OiBudW1iZXIsIHJvdzogYW55LCByb3dEYXRhOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgdGhpcy50YWJsZVNvdXJjZS5kYXRhLmxlbmd0aCkge1xyXG4gICAgICBjb25zdCB1cGRhdGVkUm93ID0geyAuLi5yb3cgfTtcclxuICAgICAgdGhpcy5jb2x1bW5zXHJcbiAgICAgICAgLmZpbHRlcihjb2wgPT4gY29sLmFsbG93RWRpdENvbHVtbilcclxuICAgICAgICAuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgICAgdXBkYXRlZFJvd1tjb2wuZmllbGRdID0gcm93RGF0YVtjb2wuZmllbGRdO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy50YWJsZVNvdXJjZS5kYXRhW2luZGV4XSA9IHVwZGF0ZWRSb3c7XHJcbiAgICAgIHRoaXMudGFibGVTb3VyY2UuZGF0YSA9IFsuLi50aGlzLnRhYmxlU291cmNlLmRhdGFdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0aWFsaXplQ29sdW1ucygpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5pdExvY2FsQ29sdW1ucy5zZXQoWy4uLnRoaXMuaW5pdENvbHVtbnMoKV0pO1xyXG5cclxuICAgIC8vIEFkZCBzcGVjaWFsIGNvbHVtbnNcclxuICAgIHRoaXMuYWRkU2VsZWN0Q29sdW1uSWZOZWVkZWQoKTtcclxuICAgIHRoaXMuYWRkRWRpdENvbHVtbklmTmVlZGVkKCk7XHJcbiAgICB0aGlzLmFkZEV4dGVuZENvbHVtbklmTmVlZGVkKCk7XHJcblxyXG4gICAgdGhpcy5zZXRDb2x1bW5zRmlsdGVyUm93RWRpdFR5cGVzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZFNlbGVjdENvbHVtbklmTmVlZGVkKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmFsbG93U2VsZWN0Um93KCkpIHtcclxuICAgICAgdGhpcy5yZW1vdmVDb2x1bW5CeVR5cGUoJ2FjdGlvbnMtcm93LXNlbGVjdGluZycpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0TG9jYWxDb2x1bW5zKCkudW5zaGlmdCh7XHJcbiAgICAgIGZpZWxkOiAnYWN0aW9ucy1yb3ctc2VsZWN0aW5nJyxcclxuICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgdHlwZTogJ2FjdGlvbnMtcm93LXNlbGVjdGluZycsXHJcbiAgICAgIHNvcnQ6IGZhbHNlLFxyXG4gICAgICBmaWx0ZXI6IGZhbHNlLFxyXG4gICAgICB3aWR0aDogJzYwcHgnLFxyXG4gICAgICBzZWxlY3RDb2x1bW5MYWJlbDpcclxuICAgICAgICB0aGlzLnN0VGFibGVUcmFuc2xhdGlvbnMuZ2V0VHJhbnNsYXRpb25zKCkoKS5yb3dTZWxlY3RDb2x1bW5MYWJlbCxcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLmluaXRTZWxlY3RlZFJvdygpKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnNldChbLi4udGhpcy5pbml0U2VsZWN0ZWRSb3coKV0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRFZGl0Q29sdW1uSWZOZWVkZWQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYWxsb3dFZGl0Um93KCkgfHwgdGhpcy5hdXRvU2F2ZU9uQ2hhbmdlKCkpIHtcclxuICAgICAgdGhpcy5yZW1vdmVDb2x1bW5CeVR5cGUoJ2FjdGlvbnMtcm93LWVkaXRpbmcnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVkaXRpbmdDb2x1bW46IFN0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsID0ge1xyXG4gICAgICBmaWVsZDogJ2FjdGlvbnMtcm93LWVkaXRpbmcnLFxyXG4gICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICB0eXBlOiAnYWN0aW9ucy1yb3ctZWRpdGluZycsXHJcbiAgICAgIHNvcnQ6IGZhbHNlLFxyXG4gICAgICBmaWx0ZXI6IGZhbHNlLFxyXG4gICAgICB3aWR0aDogJzExMHB4JyxcclxuICAgICAgc2VsZWN0Q29sdW1uTGFiZWw6XHJcbiAgICAgICAgdGhpcy5zdFRhYmxlVHJhbnNsYXRpb25zLmdldFRyYW5zbGF0aW9ucygpKCkucm93QWN0aW9uc0NvbHVtbkxhYmVsLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmluaXRMb2NhbENvbHVtbnMudXBkYXRlKGNvbHVtbnMgPT4ge1xyXG4gICAgICBjb25zdCBsYXN0Q29sdW1uID0gY29sdW1uc1tjb2x1bW5zLmxlbmd0aCAtIDFdO1xyXG4gICAgICBpZiAobGFzdENvbHVtbj8udHlwZSAhPT0gJ2FjdGlvbnMnKSB7XHJcbiAgICAgICAgcmV0dXJuIFsuLi5jb2x1bW5zLCBlZGl0aW5nQ29sdW1uXTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBuZXdDb2x1bW5zID0gWy4uLmNvbHVtbnNdO1xyXG4gICAgICBuZXdDb2x1bW5zLnNwbGljZShuZXdDb2x1bW5zLmxlbmd0aCAtIDEsIDAsIGVkaXRpbmdDb2x1bW4pO1xyXG4gICAgICByZXR1cm4gbmV3Q29sdW1ucztcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRFeHRlbmRDb2x1bW5JZk5lZWRlZCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5hbGxvd0V4dGVuZFJvdygpKSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlQ29sdW1uQnlUeXBlKCdhY3Rpb25zLXJvdy1leHRlbmRpbmcnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdExvY2FsQ29sdW1ucygpLnVuc2hpZnQoe1xyXG4gICAgICBmaWVsZDogJ2FjdGlvbnMtcm93LWV4dGVuZGluZycsXHJcbiAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgIHR5cGU6ICdhY3Rpb25zLXJvdy1leHRlbmRpbmcnLFxyXG4gICAgICBzb3J0OiBmYWxzZSxcclxuICAgICAgZmlsdGVyOiBmYWxzZSxcclxuICAgICAgd2lkdGg6ICc2MHB4JyxcclxuICAgICAgc2VsZWN0Q29sdW1uTGFiZWw6XHJcbiAgICAgICAgdGhpcy5zdFRhYmxlVHJhbnNsYXRpb25zLmdldFRyYW5zbGF0aW9ucygpKCkucm93RXh0ZW5kQ29sdW1uTGFiZWwsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlQ29sdW1uQnlUeXBlKHR5cGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0TG9jYWxDb2x1bW5zLnVwZGF0ZShjb2x1bW5zID0+XHJcbiAgICAgIGNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZmllbGQgIT09IHR5cGUpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZUFuZFVwZGF0ZUZpbHRlcnMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBmaWx0ZXJLZXlzID0gT2JqZWN0LmtleXModGhpcy5pbml0RmlsdGVycyk7XHJcbiAgICBpZiAoZmlsdGVyS2V5cy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBuZXdGaWx0ZXJzOiB7IFtrZXk6IHN0cmluZ106IFN0TWF0ZXJpYWxUYWJsZUZpbHRlciB9ID0ge307XHJcblxyXG4gICAgZm9yIChjb25zdCBrZXkgb2YgZmlsdGVyS2V5cykge1xyXG4gICAgICBjb25zdCBjb2wgPSB0aGlzLmluaXRMb2NhbENvbHVtbnMoKS5maW5kKGNvbHVtbiA9PiBjb2x1bW4uZmllbGQgPT09IGtleSk7XHJcbiAgICAgIGlmICghY29sKSBjb250aW51ZTtcclxuXHJcbiAgICAgIG5ld0ZpbHRlcnNba2V5XSA9IHtcclxuICAgICAgICB2YWx1ZTogdGhpcy5nZXREZWZhdWx0RmlsdGVyVmFsdWUoY29sLCB0aGlzLmluaXRGaWx0ZXJzW2tleV0pLFxyXG4gICAgICAgIG1hdGNoTW9kZTogTWF0ZXJpYWxUYWJsZUZpbHRlckRpYWxvZ0NvbXBvbmVudC5nZXRCYXNlTWF0Y2hNb2RlQnlUeXBlKFxyXG4gICAgICAgICAgY29sLmZpbHRlclR5cGUhXHJcbiAgICAgICAgKSxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoSlNPTi5zdHJpbmdpZnkobmV3RmlsdGVycykgIT09IEpTT04uc3RyaW5naWZ5KHRoaXMuaW5pdEZpbHRlcnMpKSB7XHJcbiAgICAgIHRoaXMuaW5pdEZpbHRlcnMgPSBuZXdGaWx0ZXJzO1xyXG4gICAgICB0aGlzLmxvY2FsU3RvcmFnZURhdGEuZmlsdGVycyA9IG5ld0ZpbHRlcnM7XHJcbiAgICAgIHRoaXMudXBkYXRlRGF0YVRvTG9jYWxTdG9yYWdlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldERlZmF1bHRGaWx0ZXJWYWx1ZShcclxuICAgIGNvbDogU3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwsXHJcbiAgICBmaWx0ZXI6IFN0TWF0ZXJpYWxUYWJsZUZpbHRlclxyXG4gICk6IFN0TWF0ZXJpYWxUYWJsZUZpbHRlclZhbHVlVHlwZSB7XHJcbiAgICBpZiAoZmlsdGVyLm1hdGNoTW9kZSA9PT0gJ2VxdWFsJykge1xyXG4gICAgICByZXR1cm4gZmlsdGVyLnZhbHVlIHx8IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZpbHRlci5tYXRjaE1vZGUgPT09ICdiZXR3ZWVuJykge1xyXG4gICAgICByZXR1cm4gZmlsdGVyLnZhbHVlICYmIEFycmF5LmlzQXJyYXkoZmlsdGVyLnZhbHVlKVxyXG4gICAgICAgID8gZmlsdGVyLnZhbHVlXHJcbiAgICAgICAgOiBbbnVsbCwgbnVsbF07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpbHRlci52YWx1ZSB8fCAnJztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgZGF0YSBjaGFuZ2VzIGZyb20gdGhlIGlucHV0IHNpZ25hbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgaGFuZGxlRGF0YUNoYW5nZShkYXRhOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgaWYgKCFkYXRhIHx8ICFBcnJheS5pc0FycmF5KGRhdGEpKSB7XHJcbiAgICAgIHRoaXMuX2RhdGEgPSBbXTtcclxuICAgICAgaWYgKHRoaXMudGFibGVTb3VyY2UpIHtcclxuICAgICAgICB0aGlzLnRhYmxlU291cmNlLmRhdGEgPSBbXTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBkYXRhLmxlbmd0aCA+IDAgJiZcclxuICAgICAgdGhpcy5fZGF0YS5sZW5ndGggPT09IGRhdGEubGVuZ3RoICYmXHJcbiAgICAgIHRoaXMuc2V0TmV3RGF0YVdpdGhvdXRSZWZyZXNoKClcclxuICAgICkge1xyXG4gICAgICBjb25zdCBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMoZGF0YVswXSkuZmlsdGVyKGtleSA9PiBrZXkgIT09ICdpZCcpO1xyXG5cclxuICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIG9iamVjdHMgaW4gcGxhY2UgdG8gcHJlc2VydmUgcmVmZXJlbmNlcyBhbmQgYXZvaWQgbG9zaW5nIGZvY3VzXHJcbiAgICAgIHRoaXMudGFibGVTb3VyY2UuZGF0YS5mb3JFYWNoKChleGlzdGluZ1JvdywgaW5kZXgpID0+IHtcclxuICAgICAgICBvYmplY3RLZXlzLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgIGV4aXN0aW5nUm93W2tleV0gPSBkYXRhW2luZGV4XVtrZXldO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIEZvcmNlIHRhYmxlIHRvIGRldGVjdCBjaGFuZ2VzIHdpdGhvdXQgcmVjcmVhdGluZyByb3dzXHJcbiAgICAgIHRoaXMudGFibGVTb3VyY2UuX3VwZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbigpO1xyXG5cclxuICAgICAgLy8gVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIG9uIGFsbCBjaGlsZCByb3cgY2VsbCBjb21wb25lbnRzXHJcbiAgICAgIGlmICh0aGlzLnJvd0NlbGxzKSB7XHJcbiAgICAgICAgdGhpcy5yb3dDZWxscy5mb3JFYWNoKGNlbGwgPT4ge1xyXG4gICAgICAgICAgY2VsbC50cmlnZ2VyQ2hhbmdlRGV0ZWN0aW9uKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gQ2hlY2sgaWYgZGF0YSBpcyBhY3R1YWxseSBkaWZmZXJlbnQgKGV4Y2x1ZGluZyBJRHMgd2UgbWlnaHQgaGF2ZSBhZGRlZClcclxuICAgICAgLy8gVGhpcyBwcmV2ZW50cyB1bm5lY2Vzc2FyeSB1cGRhdGVzIHdoZW4gcGFyZW50IHNlbmRzIHRoZSBzYW1lIGRhdGFcclxuICAgICAgaWYgKHRoaXMuX2RhdGEubGVuZ3RoID09PSBkYXRhLmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGRhdGFXaXRob3V0SWRzID0gZGF0YS5tYXAocm93ID0+IHtcclxuICAgICAgICAgIGNvbnN0IHRtcCA9IHsgLi4ucm93IH07XHJcbiAgICAgICAgICBkZWxldGUgdG1wLmlkO1xyXG4gICAgICAgICAgcmV0dXJuIHRtcDtcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjdXJyZW50RGF0YVdpdGhvdXRJZHMgPSB0aGlzLl9kYXRhLm1hcChyb3cgPT4ge1xyXG4gICAgICAgICAgY29uc3QgdG1wID0geyAuLi5yb3cgfTtcclxuICAgICAgICAgIGRlbGV0ZSB0bXAuaWQ7XHJcbiAgICAgICAgICByZXR1cm4gdG1wO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShkYXRhV2l0aG91dElkcykgPT09XHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShjdXJyZW50RGF0YVdpdGhvdXRJZHMpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDcmVhdGUgc2hhbGxvdyBjb3B5IHRvIGF2b2lkIG11dGF0aW5nIHBhcmVudCBkYXRhXHJcbiAgICAgIGxldCBjbG9uZWREYXRhID0gZGF0YS5tYXAocm93ID0+ICh7IC4uLnJvdyB9KSk7XHJcblxyXG4gICAgICAvLyBBZGQgSURzIGlmIG5lZWRlZCAob25seSBvbiB0aGUgY29weSwgb25seSBpZiByb3cgZG9lc24ndCBoYXZlIGFuIGlkKVxyXG4gICAgICBpZiAodGhpcy5hbGxvd0VkaXRSb3coKSB8fCB0aGlzLmFsbG93U2VsZWN0Um93KCkpIHtcclxuICAgICAgICBjbG9uZWREYXRhID0gY2xvbmVkRGF0YS5tYXAocm93ID0+IHtcclxuICAgICAgICAgIC8vIE9ubHkgYWRkIGlkIGlmIGl0IGRvZXNuJ3QgZXhpc3QgLSBkb24ndCBvdmVyd3JpdGUgZXhpc3RpbmcgSURzXHJcbiAgICAgICAgICBpZiAoIXJvdy5pZCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIC4uLnJvdyxcclxuICAgICAgICAgICAgICBpZDogU3RCYXNlU2VydmljZS5nZW5lcmF0ZUdVSUQoKSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByb3c7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuX2RhdGEgPSBjbG9uZWREYXRhO1xyXG5cclxuICAgICAgaWYgKHRoaXMudGFibGVTb3VyY2UpIHtcclxuICAgICAgICB0aGlzLnRhYmxlU291cmNlLmRhdGEgPSBjbG9uZWREYXRhO1xyXG4gICAgICAgIGlmICghdGhpcy5sYXp5TG9hZGluZygpICYmIHRoaXMubG9jYWxTdG9yYWdlRGF0YSkge1xyXG4gICAgICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLnBhZ2VJbmRleDtcclxuICAgICAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICAgICAgdGhpcy5wYWdpbmF0b3IuX2VtaXRQYWdlRXZlbnQodGhpcy5sb2NhbFN0b3JhZ2VEYXRhLnBhZ2VJbmRleCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFN0TWF0ZXJpYWxUYWJsZUxvYWREYXRhIHtcclxuICBmaXJzdDogbnVtYmVyO1xyXG4gIHJvd3M6IG51bWJlcjtcclxuICBnbG9iYWxGaWx0ZXI6IHN0cmluZztcclxuICBnbG9iYWxGaWx0ZXJDb2x1bW5zOiBzdHJpbmdbXTtcclxuICBzb3J0RmllbGQ6IHN0cmluZztcclxuICBzb3J0T3JkZXI6IFNvcnREaXJlY3Rpb247XHJcbiAgZmlsdGVyczogeyBba2V5OiBzdHJpbmddOiBTdE1hdGVyaWFsVGFibGVGaWx0ZXIgfTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTdE1hdGVyaWFsVGFibGVMb2NhbFN0b3JhZ2UgZXh0ZW5kcyBJQ2FwdGlvbkRhdGFDaGFuZ2VkIHtcclxuICBwYWdlU2l6ZTogbnVtYmVyO1xyXG4gIHBhZ2VJbmRleDogbnVtYmVyO1xyXG4gIHNvcnRGaWVsZDogc3RyaW5nO1xyXG4gIHNvcnRPcmRlcjogU29ydERpcmVjdGlvbjtcclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwic3QtbWF0ZXJpYWwtdGFibGVcIj5cclxuICBAaWYgKGlzTG9hZGluZygpKSB7XHJcbiAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy1zcGlubmVyXCI+XHJcbiAgICAgIDxtYXQtc3Bpbm5lciBjb2xvcj1cImFjY2VudFwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICA8L2Rpdj5cclxuICB9XHJcblxyXG4gIEBpZiAoc2hvd1RhYmxlKSB7XHJcbiAgICA8c3QtbWF0ZXJpYWwtdGFibGUtY2FwdGlvblxyXG4gICAgICBbdGFibGVUaXRsZV09XCJ0YWJsZVRpdGxlKClcIlxyXG4gICAgICBbYWxsb3dQaWNrQ29sdW1uc109XCJhbGxvd1BpY2tDb2x1bW5zKClcIlxyXG4gICAgICBbc2hvd0dsb2JhbFNlYXJjaF09XCJzaG93R2xvYmFsU2VhcmNoKClcIlxyXG4gICAgICBbYWxsb3dSZW9yZGVyQ29sdW1uc109XCJhbGxvd1Jlb3JkZXJDb2x1bW5zKClcIlxyXG4gICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcclxuICAgICAgW2luaXRGaWx0ZXJzXT1cImluaXRGaWx0ZXJzXCJcclxuICAgICAgW2luaXRHbG9iYWxTZWFyY2hdPVwiaW5pdEdsb2JhbFNlYXJjaFwiXHJcbiAgICAgIFtzaG93Q3JlYXRlQnV0dG9uXT1cInNob3dDcmVhdGVCdXR0b24oKVwiXHJcbiAgICAgIFtjcmVhdGVCdXR0b25MYWJlbF09XCJjcmVhdGVCdXR0b25MYWJlbCgpXCJcclxuICAgICAgW2NyZWF0ZUJ1dHRvbkFjdGlvbl09XCJjcmVhdGVCdXR0b25BY3Rpb24oKVwiXHJcbiAgICAgIFthbGxvd0NyZWF0ZVJvd109XCJhbGxvd0NyZWF0ZVJvdygpXCJcclxuICAgICAgW2Rpc2FibGVDcmVhdGVCdXR0b25dPVwiZGlzYWJsZUNyZWF0ZUJ1dHRvbigpXCJcclxuICAgICAgW2V4dHJhQ3VzdG9tRmlsdGVyXT1cImV4dHJhQ3VzdG9tRmlsdGVyKClcIlxyXG4gICAgICBbY3JlYXRpbmdSb3ddPVwiY3JlYXRpbmdSb3coKVwiXHJcbiAgICAgIChjYXB0aW9uRGF0YUNoYW5nZWQpPVwiY2FwdGlvbkRhdGFDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgICAocmVzZXRUYWJsZVNldHRpbmdzKT1cInJlc2V0VGFibGVTZXR0aW5ncygpXCJcclxuICAgICAgKGFkZE5ld1Jvdyk9XCJhZGROZXdSb3coKVwiXHJcbiAgICA+PC9zdC1tYXRlcmlhbC10YWJsZS1jYXB0aW9uPlxyXG4gIH1cclxuXHJcbiAgPHRhYmxlXHJcbiAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICduby1ob3Zlcic6ICFyb3dDbGlja0FjdGlvbigpLFxyXG4gICAgICAnaXMtZXhwZW5kZWQtdGFibGUnOiBhbGxvd0V4dGVuZFJvdygpXHJcbiAgICB9XCJcclxuICAgIG1hdC10YWJsZVxyXG4gICAgW2RhdGFTb3VyY2VdPVwidGFibGVTb3VyY2VcIlxyXG4gICAgbWF0U29ydFxyXG4gICAgW211bHRpVGVtcGxhdGVEYXRhUm93c109XCJhbGxvd0V4dGVuZFJvdygpXCJcclxuICA+XHJcbiAgICBAZm9yIChjb2x1bW4gb2Ygc2VsZWN0ZWRDb2x1bW5zOyB0cmFjayBjb2x1bW4pIHtcclxuICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5maWVsZFwiPlxyXG4gICAgICAgIDx0aFxyXG4gICAgICAgICAgbWF0LWhlYWRlci1jZWxsXHJcbiAgICAgICAgICAqbWF0SGVhZGVyQ2VsbERlZlxyXG4gICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbHVtbi53aWR0aFwiXHJcbiAgICAgICAgICBtYXQtc29ydC1oZWFkZXJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhY29sdW1uLnNvcnRcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIEBpZiAoY29sdW1uLnR5cGUgPT09ICdhY3Rpb25zLXJvdy1zZWxlY3RpbmcnICYmICFzZWxlY3RSb3dPbmx5T25lKCkpIHtcclxuICAgICAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVBbGxSb3dzKCRldmVudC5jaGVja2VkKVwiXHJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0ZWRSb3dzKCkubGVuZ3RoID4gMCAmJiBpc0FsbFNlbGVjdGVkKClcIlxyXG4gICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cInNlbGVjdGVkUm93cygpLmxlbmd0aCA+IDAgJiYgIWlzQWxsU2VsZWN0ZWQoKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICB9IEBlbHNlIGlmIChcclxuICAgICAgICAgICAgY29sdW1uLnR5cGUgPT09ICdhY3Rpb25zLXJvdy1lZGl0aW5nJyAmJiBzaG93RWRpdEFsbFJvd3MoKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cganVzdGlmeS1jb250ZW50LWVuZCBlZGl0LWFsbC1yb3dzLWJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInR1cm5PbkFsbEVkaXRSb3dzKClcIlxyXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkVkaXQgYWxsIHJvd3NcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5lZGl0X2Fycm93X2Rvd248L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICB7eyBjb2x1bW4uaGVhZGVyIH19XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC90aD5cclxuICAgICAgICA8dGRcclxuICAgICAgICAgIG1hdC1jZWxsXHJcbiAgICAgICAgICAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50OyBsZXQgaSA9IGluZGV4OyBsZXQgaiA9IGRhdGFJbmRleFwiXHJcbiAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiY29sdW1uLndpZHRoXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8c3QtbWF0ZXJpYWwtdGFibGUtcm93LWNlbGxcclxuICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxyXG4gICAgICAgICAgICBbcm93RGF0YV09XCJlbGVtZW50XCJcclxuICAgICAgICAgICAgW3Jvd0luZGV4XT1cImdldEFic29sdXRlSW5kZXgoYWxsb3dFeHRlbmRSb3coKSA/IGogOiBpKVwiXHJcbiAgICAgICAgICAgIFtyb3dEYXRhQ29weV09XCJcclxuICAgICAgICAgICAgICBhY3RpdmVSb3dzRWRpdGluZ1tlbGVtZW50LmlkXSB8fCBhY3RpdmVSb3dzQ3JlYXRpbmdbZWxlbWVudC5pZF1cclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgW3Jvd0VkaXRpbmddPVwiXHJcbiAgICAgICAgICAgICAgISFhY3RpdmVSb3dzRWRpdGluZ1tlbGVtZW50LmlkXSB8fFxyXG4gICAgICAgICAgICAgICEhYWN0aXZlUm93c0NyZWF0aW5nW2VsZW1lbnQuaWRdXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIFtyb3dJc1NlbGVjdGVkXT1cImlzUm93U2VsZWN0ZWQoZWxlbWVudClcIlxyXG4gICAgICAgICAgICBbcm93SXNFeHBhbmRlZF09XCJleHBhbmRlZFJvd0luZGV4KCkgPT09IChhbGxvd0V4dGVuZFJvdygpID8gaiA6IGkpXCJcclxuICAgICAgICAgICAgW2NhbkVkaXRSb3dWYWxpZGF0b3JdPVwiY2FuRWRpdFJvd1ZhbGlkYXRvcigpXCJcclxuICAgICAgICAgICAgW2NhbkRlbGV0ZVJvd1ZhbGlkYXRvcl09XCJjYW5EZWxldGVSb3dWYWxpZGF0b3IoKVwiXHJcbiAgICAgICAgICAgIFtzZWxlY3RSb3dPbmx5T25lXT1cInNlbGVjdFJvd09ubHlPbmUoKVwiXHJcbiAgICAgICAgICAgIFtpc0ZpcnN0RWRpdGFibGVDb2x1bW5dPVwiaXNGaXJzdEVkaXRhYmxlQ29sdW1uKGNvbHVtbilcIlxyXG4gICAgICAgICAgICBbYXV0b1NhdmVPbkNoYW5nZV09XCJhdXRvU2F2ZU9uQ2hhbmdlKClcIlxyXG4gICAgICAgICAgICBbYWxsb3dFZGl0SW5FZGl0Um93XT1cImFsbG93RWRpdEluRWRpdFJvdygpXCJcclxuICAgICAgICAgICAgW2FsbG93RGVsZXRlSW5FZGl0Um93XT1cImFsbG93RGVsZXRlSW5FZGl0Um93KClcIlxyXG4gICAgICAgICAgICBbZmllbGRFcnJvcl09XCJ2YWxpZGF0aW9uRXJyb3JzW2VsZW1lbnQuaWRdPy5bY29sdW1uLmZpZWxkXVwiXHJcbiAgICAgICAgICAgIChlZGl0Um93RW1pdHRlcik9XCJlZGl0Um93KGVsZW1lbnQsIGNvbHVtbilcIlxyXG4gICAgICAgICAgICAoZGVsZXRlUm93RW1pdHRlcik9XCJcclxuICAgICAgICAgICAgICBkZWxldGVSb3coZWxlbWVudCwgY29sdW1uLCBhbGxvd0V4dGVuZFJvdygpID8gaiA6IGkpXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIChzYXZlRWRpdFJvd0VtaXR0ZXIpPVwiXHJcbiAgICAgICAgICAgICAgc2F2ZUVkaXRSb3coZWxlbWVudCwgY29sdW1uLCBhbGxvd0V4dGVuZFJvdygpID8gaiA6IGkpXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIChjYW5jZWxFZGl0Um93RW1pdHRlcik9XCJjYW5jZWxFZGl0Um93KGVsZW1lbnQsIGNvbHVtbilcIlxyXG4gICAgICAgICAgICAoc2VsZWN0Um93Q2hhbmdlKT1cInNlbGVjdFJvd0NoYW5nZWQoJGV2ZW50LCBlbGVtZW50KVwiXHJcbiAgICAgICAgICAgIChmaWVsZFZhbHVlQ2hhbmdlZCk9XCJcclxuICAgICAgICAgICAgICBvbkZpZWxkVmFsdWVDaGFuZ2VkKFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudCxcclxuICAgICAgICAgICAgICAgIGNvbHVtbixcclxuICAgICAgICAgICAgICAgICRldmVudC52YWx1ZSxcclxuICAgICAgICAgICAgICAgIGFsbG93RXh0ZW5kUm93KCkgPyBqIDogaVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgID48L3N0LW1hdGVyaWFsLXRhYmxlLXJvdy1jZWxsPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgfVxyXG5cclxuICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZXhwYW5kZWREZXRhaWxcIj5cclxuICAgICAgPHRkXHJcbiAgICAgICAgbWF0LWNlbGxcclxuICAgICAgICAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50OyBsZXQgaSA9IGRhdGFJbmRleFwiXHJcbiAgICAgICAgW2F0dHIuY29sc3Bhbl09XCJzZWxlY3RlZENvbHVtbnNTdHJpbmcubGVuZ3RoXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiZXhwYW5kZWQtZWxlbWVudC1kZXRhaWwtd3JhcHBlclwiXHJcbiAgICAgICAgICBbQGRldGFpbEV4cGFuZF09XCJleHBhbmRlZFJvd0luZGV4KCkgPT09IGkgPyAnZXhwYW5kZWQnIDogJ2NvbGxhcHNlZCdcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJleHBhbmRlZC1lbGVtZW50LWRldGFpbFwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZXh0ZW5kZWRSb3dUZW1wbGF0ZSgpIVwiXHJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZGF0YTogZWxlbWVudCB9XCJcclxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvdGQ+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cInNlbGVjdGVkQ29sdW1uc1N0cmluZ1wiPjwvdHI+XHJcbiAgICA8dHJcclxuICAgICAgbWF0LXJvd1xyXG4gICAgICAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogc2VsZWN0ZWRDb2x1bW5zU3RyaW5nOyBsZXQgaSA9IGRhdGFJbmRleFwiXHJcbiAgICAgIFtjbGFzcy5leHBhbmRlZC1leHBhbmRlZC1yb3ddPVwiZXhwYW5kZWRSb3dJbmRleCgpID09PSBpXCJcclxuICAgICAgKGNsaWNrKT1cImNsaWNrUm93QWN0aW9uKHJvdywgaSlcIlxyXG4gICAgPjwvdHI+XHJcbiAgICBAaWYgKGFsbG93RXh0ZW5kUm93KCkpIHtcclxuICAgICAgPHRyXHJcbiAgICAgICAgbWF0LXJvd1xyXG4gICAgICAgICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBbJ2V4cGFuZGVkRGV0YWlsJ11cIlxyXG4gICAgICAgIGNsYXNzPVwiZXh0ZW5kZWQtZGV0YWlsLXJvd1wiXHJcbiAgICAgID48L3RyPlxyXG4gICAgfVxyXG4gIDwvdGFibGU+XHJcbiAgPG1hdC1wYWdpbmF0b3JcclxuICAgIFtzaG93Rmlyc3RMYXN0QnV0dG9uc109XCJ0cnVlXCJcclxuICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwiWzUsIDEwLCAxNSwgMjAsIDI1XVwiXHJcbiAgICBbbGVuZ3RoXT1cImRhdGFMZW5ndGgoKVwiXHJcbiAgPjwvbWF0LXBhZ2luYXRvcj5cclxuICA8c3QtbWF0ZXJpYWwtdGFibGUtc2VsZWN0ZWQtcm93c1xyXG4gICAgW2FsbG93U2VsZWN0Um93XT1cImFsbG93U2VsZWN0Um93KClcIlxyXG4gICAgW3NlbGVjdFJvd09ubHlPbmVdPVwic2VsZWN0Um93T25seU9uZSgpXCJcclxuICAgIFtzZWxlY3RlZFJvd3NdPVwic2VsZWN0ZWRSb3dzKClcIlxyXG4gICAgW3NlbGVjdGlvbkZpZWxkTGFiZWxdPVwic2VsZWN0aW9uRmllbGRMYWJlbCgpXCJcclxuICAgIFtzZWxlY3RSb3dWYWx1ZURpc3BsYXldPVwic2VsZWN0Um93VmFsdWVEaXNwbGF5KClcIlxyXG4gICAgKHJlbW92ZVNlbGVjdGVkUm93KT1cIm9uUmVtb3ZlU2VsZWN0ZWRSb3coJGV2ZW50KVwiXHJcbiAgPjwvc3QtbWF0ZXJpYWwtdGFibGUtc2VsZWN0ZWQtcm93cz5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
@@ -1626,7 +1626,6 @@ class MaterialTableComponent extends StSubscribeDestroyComponent {
|
|
|
1626
1626
|
return (editableColumns.length > 0 && editableColumns[0].field === column.field);
|
|
1627
1627
|
}
|
|
1628
1628
|
validateRow(rowData, originalRow, singleColumn) {
|
|
1629
|
-
console.log('validRow');
|
|
1630
1629
|
const editableColumns = singleColumn
|
|
1631
1630
|
? [singleColumn]
|
|
1632
1631
|
: this.columns.filter(col => col.allowEditColumn);
|
|
@@ -1673,7 +1672,6 @@ class MaterialTableComponent extends StSubscribeDestroyComponent {
|
|
|
1673
1672
|
}
|
|
1674
1673
|
// Update validation errors
|
|
1675
1674
|
if (Object.keys(errors).length > 0) {
|
|
1676
|
-
console.log(errors);
|
|
1677
1675
|
this.validationErrors[rowId] = errors;
|
|
1678
1676
|
}
|
|
1679
1677
|
else {
|