@sumaris-net/ngx-components 18.6.19-alpha4 → 18.6.19-alpha5
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.
|
@@ -611,6 +611,9 @@ export class MatAutocompleteField {
|
|
|
611
611
|
//if (this.debug) console.debug(this.logPrefix + ' Cancelling focus event');
|
|
612
612
|
return false;
|
|
613
613
|
}
|
|
614
|
+
// Already focused
|
|
615
|
+
if (this._focused)
|
|
616
|
+
return false;
|
|
614
617
|
this._focused = true;
|
|
615
618
|
// DEBUG
|
|
616
619
|
//if (this.debug) console.debug(this.logPrefix + ' Select input content');
|
|
@@ -1234,4 +1237,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
1234
1237
|
}], items: [{
|
|
1235
1238
|
type: Input
|
|
1236
1239
|
}] } });
|
|
1237
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuYXV0b2NvbXBsZXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlL21hdGVyaWFsLmF1dG9jb21wbGV0ZS50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2F1dG9jb21wbGV0ZS9tYXRlcmlhbC5hdXRvY29tcGxldGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLFVBQVUsRUFFVixLQUFLLEVBQ0wsZUFBZSxFQUdmLFFBQVEsRUFDUixNQUFNLEVBRU4sbUJBQW1CLEVBQ25CLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQTRDLGlCQUFpQixFQUFzQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3SCxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEcsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0ksT0FBTyxFQUNMLHNCQUFzQixFQUN0QixtQkFBbUIsRUFDbkIsYUFBYSxFQUNiLEtBQUssRUFDTCxZQUFZLEVBQ1osUUFBUSxFQUNSLGVBQWUsRUFDZixjQUFjLEVBQ2QsZUFBZSxFQUNmLGNBQWMsRUFDZCxRQUFRLEdBQ1QsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsVUFBVSxFQUFnQixrQkFBa0IsRUFBRSxnQkFBZ0IsRUFB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bUI7Z0JBQ0osVUFBVTtzQkFBaEMsTUFBTTt1QkFBQyxhQUFhO2dCQUVNLGVBQWU7c0JBQXpDLE1BQU07dUJBQUMsaUJBQWlCO2dCQUVELFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDSyxZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ0UsWUFBWTtzQkFBdEMsU0FBUzt1QkFBQyxjQUFjO2dCQUNHLFlBQVk7c0JBQXZDLFNBQVM7dUJBQUMsZUFBZTtnQkFDUyxtQkFBbUI7c0JBQXJELFNBQVM7dUJBQUMsc0JBQXNCO2dCQW1CcEIsTUFBTTtzQkFBbEIsS0FBSztnQkFZc0MsUUFBUTtzQkFBbkQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFTekIsUUFBUTtzQkFBcEIsS0FBSztnQkFTTyxLQUFLO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBudW1iZXJBdHRyaWJ1dGUsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBSZW5kZXJlcjIsXG4gIFJlbmRlcmVyU3R5bGVGbGFnczIsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUdyb3VwRGlyZWN0aXZlLCBOR19WQUxVRV9BQ0NFU1NPUiwgVW50eXBlZEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBpc09ic2VydmFibGUsIG1lcmdlLCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgbWVyZ2VNYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCwgdGhyb3R0bGVUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRmV0Y2hNb3JlRm4sIExvYWRSZXN1bHQsIFN1Z2dlc3RGbiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7XG4gIGNoYW5nZUNhc2VUb1VuZGVyc2NvcmUsXG4gIGZpbmRQYXJlbnRXaXRoQ2xhc3MsXG4gIGlzQmxhbmtTdHJpbmcsXG4gIGlzTmlsLFxuICBpc05pbE9yQmxhbmssXG4gIGlzTm90TmlsLFxuICBpc05vdE5pbEJvb2xlYW4sXG4gIGlzTm90TmlsT2JqZWN0LFxuICBpc05vdE5pbE9yQmxhbmssXG4gIGlzTm90TmlsU3RyaW5nLFxuICB0b051bWJlcixcbn0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7IGZvY3VzSW5wdXQsIElucHV0RWxlbWVudCwgc2VsZWN0SW5wdXRDb250ZW50LCBzZWxlY3RJbnB1dFJhbmdlIH0gZnJvbSAnLi4vLi4vaW5wdXRzJztcbmltcG9ydCB7IGZpcnN0Tm90TmlsUHJvbWlzZSB9IGZyb20gJy4uLy4uL29ic2VydmFibGVzJztcbmltcG9ydCB7IEFwcEZsb2F0TGFiZWxUeXBlLCBEaXNwbGF5Rm4sIEVxdWFsc0ZuIH0gZnJvbSAnLi4vLi4vZm9ybS9maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRBcHBlYXJhbmNlLCBTdWJzY3JpcHRTaXppbmcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdFNlbGVjdCwgTWF0U2VsZWN0Q2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZSwgTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCwgTWF0QXV0b2NvbXBsZXRlVHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XG5pbXBvcnQgeyBmcm9tU2Nyb2xsRW5kRXZlbnQgfSBmcm9tICcuLi8uLi9ldmVudHMnO1xuaW1wb3J0IHsgSW9uU2VhcmNoYmFyLCBNb2RhbENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBpc01vYmlsZSB9IGZyb20gJy4uLy4uL3BsYXRmb3Jtcyc7XG5pbXBvcnQgeyBzdWdnZXN0RnJvbUFycmF5IH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgU2VhcmNoYmFyQ2hhbmdlRXZlbnREZXRhaWwgfSBmcm9tICdAaW9uaWMvY29yZS9kaXN0L3R5cGVzL2NvbXBvbmVudHMvc2VhcmNoYmFyL3NlYXJjaGJhci1pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlRmllbGRVdGlscyB9IGZyb20gJy4vbWF0ZXJpYWwuYXV0b2NvbXBsZXRlLnV0aWxzJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZUZpZWxkQ29uZmlnIH0gZnJvbSAnLi9tYXRlcmlhbC5hdXRvY29tcGxldGUuY29uZmlnJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHsgREVGQVVMVF9KT0lOX1BST1BFUlRJRVNfU0VQQVJBVE9SIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFJlZ0V4cFV0aWxzIH0gZnJvbSAnLi4vLi4vcmVnZXhwcyc7XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcbmV4cG9ydCBpbnRlcmZhY2UgTWF0QXV0b2NvbXBsZXRlRmllbGRTZWxlY3RDaGFuZ2Uge1xuICBzb3VyY2U6IE1hdFNlbGVjdCB8IE1hdEF1dG9jb21wbGV0ZTtcbiAgdmFsdWU6IGFueTtcbn1cblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbWF0LWF1dG9jb21wbGV0ZS1maWVsZCcsXG4gIHN0eWxlVXJsczogWycuL21hdGVyaWFsLmF1dG9jb21wbGV0ZS5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXRlcmlhbC5hdXRvY29tcGxldGUuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNYXRBdXRvY29tcGxldGVGaWVsZCksXG4gICAgfSxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE1hdEF1dG9jb21wbGV0ZUZpZWxkIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIElucHV0RWxlbWVudCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBwcml2YXRlIF9vbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBfb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xuXG4gIHByaXZhdGUgX29uRmV0Y2hNb3JlQ2FsbGJhY2s6IEZldGNoTW9yZUZuPExvYWRSZXN1bHQ8YW55Pj47XG4gIHByaXZhdGUgX2ltcGxpY2l0VmFsdWU6IGFueTtcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIF9pdGVtc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIF9vcGVuZWRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBfJGZpbHRlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih1bmRlZmluZWQpO1xuICBwcml2YXRlIF9pdGVtQ291bnQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfcmVsb2FkJCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcblxuICBwcm90ZWN0ZWQgX3JlYWRvbmx5ID0gZmFsc2U7XG4gIHByb3RlY3RlZCBfdGFiaW5kZXg6IG51bWJlcjtcbiAgcHJvdGVjdGVkIF8kaW5wdXRJdGVtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBfJGZpbHRlcmVkSXRlbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgX3NlbGVjdGVkSXRlbTogYW55O1xuICBwcm90ZWN0ZWQgX2Rpc3BsYXlWYWx1ZSA9ICcnO1xuICBwcm90ZWN0ZWQgX21vcmVJdGVtc0NvdW50OiBudW1iZXI7XG4gIHByb3RlY3RlZCBfZmV0Y2hNb3JlJCA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG4gIHByb3RlY3RlZCBfZGVmYXVsdFBhbmVsV2lkdGg6IHN0cmluZyA9IG51bGw7XG4gIHByb3RlY3RlZCBfZm9jdXNlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGVxdWFsczogRXF1YWxzRm47XG4gIEBJbnB1dCgpIGxvZ1ByZWZpeCA9ICdbbWF0LWF1dG9jb21wbGV0ZV0gJztcbiAgQElucHV0KCkgZm9ybUNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbDtcbiAgQElucHV0KCkgZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmcgPSBudWxsO1xuICBASW5wdXQoKSBmbG9hdExhYmVsOiBBcHBGbG9hdExhYmVsVHlwZSA9ICdhdXRvJztcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZyA9IG51bGw7XG4gIEBJbnB1dCgpIGFwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2U7XG4gIEBJbnB1dCgpIHN1YnNjcmlwdFNpemluZzogU3Vic2NyaXB0U2l6aW5nO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBASW5wdXQoKSBzdWdnZXN0Rm46IFN1Z2dlc3RGbjxhbnksIGFueT47XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSByZXF1aXJlZCA9IGZhbHNlO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaGlkZVJlcXVpcmVkTWFya2VyID0gZmFsc2U7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBtb2JpbGU6IGJvb2xlYW47XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBjbGVhcmFibGUgPSBmYWxzZTtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgZGVib3VuY2VUaW1lOiBudW1iZXIgPSBudWxsO1xuICBASW5wdXQoKSBkaXNwbGF5U2VwYXJhdG9yOiBzdHJpbmcgfCBudWxsO1xuICBASW5wdXQoKSBkaXNwbGF5V2l0aDogRGlzcGxheUZuIHwgbnVsbDtcbiAgQElucHV0KCkgZGlzcGxheUF0dHJpYnV0ZXM6IHN0cmluZ1tdO1xuICBASW5wdXQoKSBkaXNwbGF5Q29sdW1uU2l6ZXM6IChudW1iZXIgfCAnYXV0bycgfCB1bmRlZmluZWQpW107XG4gIEBJbnB1dCgpIGRpc3BsYXlDb2x1bW5OYW1lczogc3RyaW5nW107XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBoaWdobGlnaHRBY2NlbnQ6IGJvb2xlYW47XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93QWxsT25Gb2N1czogYm9vbGVhbjtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNob3dQYW5lbE9uRm9jdXM6IGJvb2xlYW47XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSByZWxvYWRJdGVtc09uRm9jdXM6IGJvb2xlYW47XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBjbGVhckludmFsaWRWYWx1ZU9uQmx1cjogYm9vbGVhbjtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGF1dG9mb2N1cyA9IGZhbHNlO1xuICBASW5wdXQoKSBjb25maWc6IE1hdEF1dG9jb21wbGV0ZUZpZWxkQ29uZmlnO1xuICBASW5wdXQoKSBpMThuUHJlZml4ID0gJ1JFRkVSRU5USUFMLic7XG4gIEBJbnB1dCgpIG5vUmVzdWx0TWVzc2FnZSA9ICdDT01NT04uTk9fUkVTVUxUJztcbiAgQElucHV0KCkgcGFuZWxDbGFzczogc3RyaW5nO1xuICBASW5wdXQoKSBwYW5lbFdpZHRoOiBzdHJpbmc7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBkaXNhYmxlUmlwcGxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1hdEF1dG9jb21wbGV0ZVBvc2l0aW9uOiAnYXV0bycgfCAnYWJvdmUnIHwgJ2JlbG93JztcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIG11bHRpcGxlOiBib29sZWFuO1xuICBASW5wdXQoKSBmZXRjaE1vcmVUaHJlc2hvbGQgPSAnMTUlJztcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgc3VnZ2VzdExlbmd0aFRocmVzaG9sZDogbnVtYmVyID0gbnVsbDtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNob3dMb2FkaW5nU3Bpbm5lciA9IHRydWU7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBkZWJ1ZyA9IGZhbHNlO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd1NlYXJjaEJhciA9IHRydWU7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzdGlja3lTZWFyY2hCYXIgPSBmYWxzZTtcbiAgQElucHV0KCkgYXBwbHlJbXBsaWNpdFZhbHVlOiBib29sZWFuIHwgKCh2YWx1ZTogYW55KSA9PiBib29sZWFuKTtcbiAgQElucHV0KCkgZHJvcEJ1dHRvblRpdGxlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNsZWFyQnV0dG9uVGl0bGU6IHN0cmluZztcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHRyaW1TZWFyY2hUZXh0OiBib29sZWFuO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc3BsaXRTZWFyY2hUZXh0OiBib29sZWFuO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2VsZWN0SW5wdXRDb250ZW50T25Gb2N1czogYm9vbGVhbjtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgc2VsZWN0SW5wdXRDb250ZW50T25Gb2N1c0RlbGF5OiBudW1iZXI7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBwcmV2aWV3SW1wbGljaXRWYWx1ZTogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHBhbmVsQ2xhc3MgaW5zdGVhZFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdjbGFzcycgfSkgc2V0IGNsYXNzTGlzdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5wYW5lbENsYXNzID0gdmFsdWU7XG4gIH1cblxuICBnZXQgY2xhc3NMaXN0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucGFuZWxDbGFzcztcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCdjbGljaycpIGNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCdibHVyJykgYmx1cnJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG4gIEBPdXRwdXQoJ2ZvY3VzJykgZm9jdXNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcbiAgQE91dHB1dCgpIGRyb3BCdXR0b25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KHRydWUpO1xuICBAT3V0cHV0KCdrZXlkb3duLmVzY2FwZScpIGtleWRvd25Fc2NhcGUgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuICBAT3V0cHV0KCdrZXlkb3duLmJhY2tzcGFjZScpIGtleWRvd25CYWNrc3BhY2UgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuICBAT3V0cHV0KCdrZXl1cC5lbnRlcicpIGtleXVwRW50ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuXG4gIEBPdXRwdXQoJ3NlbGVjdGlvbkNoYW5nZScpIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TWF0QXV0b2NvbXBsZXRlRmllbGRTZWxlY3RDaGFuZ2U+KCk7XG5cbiAgQFZpZXdDaGlsZCgnbWF0U2VsZWN0JykgbWF0U2VsZWN0OiBNYXRTZWxlY3Q7XG4gIEBWaWV3Q2hpbGQoJ2lvblNlYXJjaGJhcicpIGlvblNlYXJjaGJhcjogSW9uU2VhcmNoYmFyO1xuICBAVmlld0NoaWxkKCdtYXRJbnB1dFRleHQnKSBtYXRJbnB1dFRleHQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoTWF0QXV0b2NvbXBsZXRlKSBhdXRvY29tcGxldGU6IE1hdEF1dG9jb21wbGV0ZTtcbiAgQFZpZXdDaGlsZChNYXRBdXRvY29tcGxldGVUcmlnZ2VyKSBhdXRvY29tcGxldGVUcmlnZ2VyOiBNYXRBdXRvY29tcGxldGVUcmlnZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJvdGVjdGVkIGVsOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByb3RlY3RlZCBtb2RhbENvbnRyb2xsZXI6IE1vZGFsQ29udHJvbGxlcixcbiAgICBwcm90ZWN0ZWQgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGZvcm1Hcm91cERpcjogRm9ybUdyb3VwRGlyZWN0aXZlXG4gICkge31cblxuICBnZXQgaXRlbUNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1Db3VudDtcbiAgfVxuXG4gIGdldCBjYW5GZXRjaE1vcmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2sgJiYgdGhpcy5fbW9yZUl0ZW1zQ291bnQgPiAwO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGZpbHRlcih2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLl8kZmlsdGVyLnZhbHVlKSB7XG4gICAgICAvLyBERUJVR1xuICAgICAgLy9jb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgXCIgU2V0dGluZyBmaWx0ZXI6XCIsIHZhbHVlKTtcbiAgICAgIHRoaXMuXyRmaWx0ZXIubmV4dCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGZpbHRlcigpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl8kZmlsdGVyLnZhbHVlO1xuICB9XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNldCByZWFkb25seSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3JlYWRvbmx5ID0gdmFsdWU7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldCByZWFkb25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZG9ubHk7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgdGFiaW5kZXgodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3RhYmluZGV4ID0gdmFsdWU7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldCB0YWJpbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl90YWJpbmRleDtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBpdGVtcyh2YWx1ZTogT2JzZXJ2YWJsZTxhbnlbXT4gfCBhbnlbXSkge1xuICAgIC8vIFJlbW92ZSBwcmV2aW91cyBzdWJzY3JpcHRpb24gb24gaXRlbXMsIChpZiBleGl0cylcbiAgICBpZiAodGhpcy5faXRlbXNTdWJzY3JpcHRpb24pIHtcbiAgICAgIGNvbnNvbGUud2Fybih0aGlzLmxvZ1ByZWZpeCArICcgSXRlbXMgcmVjZWl2ZWQgdHdpY2UgIScpO1xuICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLnJlbW92ZSh0aGlzLl9pdGVtc1N1YnNjcmlwdGlvbik7XG4gICAgICB0aGlzLl9pdGVtc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGlmIChpc09ic2VydmFibGUodmFsdWUpKSB7XG4gICAgICB0aGlzLl9pdGVtc1N1YnNjcmlwdGlvbiA9IHZhbHVlLnN1YnNjcmliZSgodikgPT4gdGhpcy5fJGlucHV0SXRlbXMubmV4dCh2KSk7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKHRoaXMuX2l0ZW1zU3Vic2NyaXB0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLl8kaW5wdXRJdGVtcy52YWx1ZSkge1xuICAgICAgICB0aGlzLl8kaW5wdXRJdGVtcy5uZXh0KHZhbHVlIGFzIGFueVtdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgaXRlbXMoKTogT2JzZXJ2YWJsZTxhbnlbXT4gfCBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuXyRpbnB1dEl0ZW1zO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XG4gIH1cblxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRvbmx5IHx8IHRoaXMuZm9ybUNvbnRyb2wuZGlzYWJsZWQ7XG4gIH1cblxuICBnZXQgZW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuX3JlYWRvbmx5ICYmIHRoaXMuZm9ybUNvbnRyb2wuZW5hYmxlZDtcbiAgfVxuXG4gIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc05pbCh0aGlzLl8kZmlsdGVyZWRJdGVtcy52YWx1ZSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmZvcm1Db250cm9sID1cbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wgPz8gKHRoaXMuZm9ybUNvbnRyb2xOYW1lICYmIHRoaXMuZm9ybUdyb3VwRGlyICYmICh0aGlzLmZvcm1Hcm91cERpci5mb3JtLmdldCh0aGlzLmZvcm1Db250cm9sTmFtZSkgYXMgVW50eXBlZEZvcm1Db250cm9sKSk7XG4gICAgaWYgKCF0aGlzLmZvcm1Db250cm9sKSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIG1hbmRhdG9yeSBhdHRyaWJ1dGUgJ2Zvcm1Db250cm9sJyBvciAnZm9ybUNvbnRyb2xOYW1lJyBpbiA8bWF0LWF1dG9jb21wbGV0ZS1maWVsZD4uXCIpO1xuXG4gICAgLy8gQ29uZmlndXJhdGlvbiBmcm9tIGNvbmZpZyBvYmplY3RcbiAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgIHRoaXMuc3VnZ2VzdEZuID0gdGhpcy5zdWdnZXN0Rm4gPz8gdGhpcy5jb25maWcuc3VnZ2VzdEZuO1xuICAgICAgaWYgKCF0aGlzLnN1Z2dlc3RGbiAmJiB0aGlzLmNvbmZpZy5pdGVtcykge1xuICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5jb25maWcuaXRlbXM7XG4gICAgICB9XG4gICAgICB0aGlzLmZpbHRlciA9IHRoaXMuZmlsdGVyID8/IHRoaXMuY29uZmlnLmZpbHRlcjtcbiAgICAgIHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMgPSB0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzID8/IHRoaXMuY29uZmlnLmF0dHJpYnV0ZXM7XG4gICAgICB0aGlzLmRpc3BsYXlDb2x1bW5TaXplcyA9IHRoaXMuZGlzcGxheUNvbHVtblNpemVzID8/IHRoaXMuY29uZmlnLmNvbHVtblNpemVzO1xuICAgICAgdGhpcy5kaXNwbGF5Q29sdW1uTmFtZXMgPSB0aGlzLmRpc3BsYXlDb2x1bW5OYW1lcyA/PyB0aGlzLmNvbmZpZy5jb2x1bW5OYW1lcztcbiAgICAgIHRoaXMuZGlzcGxheVNlcGFyYXRvciA9IHRoaXMuZGlzcGxheVNlcGFyYXRvciA/PyB0aGlzLmNvbmZpZy5kaXNwbGF5V2l0aFNlcGFyYXRvcjtcbiAgICAgIHRoaXMuZGlzcGxheVdpdGggPSB0aGlzLmRpc3BsYXlXaXRoID8/IHRoaXMuY29uZmlnLmRpc3BsYXlXaXRoO1xuICAgICAgdGhpcy5zcGxpdFNlYXJjaFRleHQgPSB0aGlzLnNwbGl0U2VhcmNoVGV4dCA/PyB0aGlzLmNvbmZpZy5zcGxpdFNlYXJjaFRleHQ7XG4gICAgICB0aGlzLnRyaW1TZWFyY2hUZXh0ID0gdGhpcy50cmltU2VhcmNoVGV4dCA/PyB0aGlzLmNvbmZpZy50cmltU2VhcmNoVGV4dDtcbiAgICAgIHRoaXMuZXF1YWxzID0gdGhpcy5lcXVhbHMgPz8gdGhpcy5jb25maWcuZXF1YWxzO1xuICAgICAgdGhpcy5tdWx0aXBsZSA9IHRoaXMubXVsdGlwbGUgPz8gdGhpcy5jb25maWcubXVsdGlwbGU7XG4gICAgICB0aGlzLm1vYmlsZSA9IHRoaXMubW9iaWxlID8/IHRoaXMuY29uZmlnLm1vYmlsZTtcbiAgICAgIHRoaXMuc3VnZ2VzdExlbmd0aFRocmVzaG9sZCA9IHRoaXMuc3VnZ2VzdExlbmd0aFRocmVzaG9sZCA/PyB0aGlzLmNvbmZpZy5zdWdnZXN0TGVuZ3RoVGhyZXNob2xkO1xuICAgICAgdGhpcy5zaG93QWxsT25Gb2N1cyA9IHRoaXMuc2hvd0FsbE9uRm9jdXMgPz8gdGhpcy5jb25maWcuc2hvd0FsbE9uRm9jdXM7XG4gICAgICB0aGlzLnNob3dQYW5lbE9uRm9jdXMgPSB0aGlzLnNob3dQYW5lbE9uRm9jdXMgPz8gdGhpcy5jb25maWcuc2hvd1BhbmVsT25Gb2N1cztcbiAgICAgIHRoaXMucmVsb2FkSXRlbXNPbkZvY3VzID0gdGhpcy5yZWxvYWRJdGVtc09uRm9jdXMgPz8gdGhpcy5jb25maWcucmVsb2FkSXRlbXNPbkZvY3VzO1xuICAgICAgdGhpcy5wYW5lbENsYXNzID0gdGhpcy5wYW5lbENsYXNzID8/IHRoaXMuY29uZmlnLnBhbmVsQ2xhc3MgPz8gdGhpcy5jb25maWcuY2xhc3M7XG4gICAgICB0aGlzLnBhbmVsV2lkdGggPSB0aGlzLnBhbmVsV2lkdGggPz8gdGhpcy5jb25maWcucGFuZWxXaWR0aDtcbiAgICAgIHRoaXMuZGVib3VuY2VUaW1lID0gdGhpcy5kZWJvdW5jZVRpbWUgPz8gdGhpcy5jb25maWcuZGVib3VuY2VUaW1lO1xuICAgICAgdGhpcy5oaWdobGlnaHRBY2NlbnQgPSB0aGlzLmhpZ2hsaWdodEFjY2VudCA/PyB0aGlzLmNvbmZpZy5oaWdobGlnaHRBY2NlbnQ7XG4gICAgICB0aGlzLmFwcGx5SW1wbGljaXRWYWx1ZSA9IHRoaXMuYXBwbHlJbXBsaWNpdFZhbHVlID8/IHRoaXMuY29uZmlnLmFwcGx5SW1wbGljaXRWYWx1ZTtcbiAgICAgIHRoaXMuc2VsZWN0SW5wdXRDb250ZW50T25Gb2N1cyA9IHRoaXMuc2VsZWN0SW5wdXRDb250ZW50T25Gb2N1cyA/PyB0aGlzLmNvbmZpZy5zZWxlY3RJbnB1dENvbnRlbnRPbkZvY3VzO1xuICAgICAgdGhpcy5zZWxlY3RJbnB1dENvbnRlbnRPbkZvY3VzRGVsYXkgPSB0aGlzLnNlbGVjdElucHV0Q29udGVudE9uRm9jdXNEZWxheSA/PyB0aGlzLmNvbmZpZy5zZWxlY3RJbnB1dENvbnRlbnRPbkZvY3VzRGVsYXk7XG4gICAgICB0aGlzLmNsZWFySW52YWxpZFZhbHVlT25CbHVyID0gdGhpcy5jbGVhckludmFsaWRWYWx1ZU9uQmx1ciA/PyB0aGlzLmNvbmZpZy5jbGVhckludmFsaWRWYWx1ZU9uQmx1cjtcbiAgICAgIHRoaXMucHJldmlld0ltcGxpY2l0VmFsdWUgPSB0aGlzLnByZXZpZXdJbXBsaWNpdFZhbHVlID8/IHRoaXMuY29uZmlnLnByZXZpZXdJbXBsaWNpdFZhbHVlO1xuICAgIH1cblxuICAgIC8vIERlZmF1bHQgdmFsdWVzXG4gICAgdGhpcy5yZXF1aXJlZCA9IGlzTm90TmlsQm9vbGVhbih0aGlzLnJlcXVpcmVkKVxuICAgICAgPyB0aGlzLnJlcXVpcmVkXG4gICAgICA6IHRoaXMuZm9ybUNvbnRyb2wudmFsaWRhdG9yID09PSBWYWxpZGF0b3JzLnJlcXVpcmVkIHx8IGlzQmxhbmtTdHJpbmcodGhpcy5yZXF1aXJlZCk7XG4gICAgdGhpcy5tdWx0aXBsZSA9IHRoaXMubXVsdGlwbGUgPz8gZmFsc2U7XG4gICAgdGhpcy5tb2JpbGUgPSB0aGlzLm1vYmlsZSA/PyBpc01vYmlsZSh3aW5kb3cpO1xuICAgIHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMgPSB0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzID8/IHRoaXMuZmlsdGVyPy5hdHRyaWJ1dGVzID8/IFsnbGFiZWwnLCAnbmFtZSddO1xuICAgIHRoaXMuZGlzcGxheVNlcGFyYXRvciA9IHRoaXMuZGlzcGxheVNlcGFyYXRvciA/PyBERUZBVUxUX0pPSU5fUFJPUEVSVElFU19TRVBBUkFUT1I7XG4gICAgdGhpcy5kaXNwbGF5V2l0aCA9IHRoaXMuZGlzcGxheVdpdGggfHwgTWF0QXV0b2NvbXBsZXRlRmllbGRVdGlscy5jcmVhdGVEaXNwbGF5Rm4odGhpcy5kaXNwbGF5QXR0cmlidXRlcywgdGhpcy5tdWx0aXBsZSwgdGhpcy5kaXNwbGF5U2VwYXJhdG9yKTtcbiAgICB0aGlzLnNwbGl0U2VhcmNoVGV4dCA9IHRoaXMuc3BsaXRTZWFyY2hUZXh0ID8/IHRydWU7XG4gICAgdGhpcy50cmltU2VhcmNoVGV4dCA9IHRoaXMudHJpbVNlYXJjaFRleHQgPz8gIXRoaXMubW9iaWxlOyAvLyBUcnVlIGJ5IGRlZmF1bHQgb24gZGVza3RvcCwgYnV0IGZhbHNlIGluIG1vYmlsZSAobm90IG5lZWQgaW4gdGhlIHNlYXJjaGJhcilcbiAgICB0aGlzLmVxdWFscyA9IHRoaXMuZXF1YWxzIHx8IE1hdEF1dG9jb21wbGV0ZUZpZWxkVXRpbHMuZGVmYXVsdEVxdWFscztcblxuICAgIHRoaXMuZGlzcGxheUNvbHVtblNpemVzID1cbiAgICAgIHRoaXMuZGlzcGxheUNvbHVtblNpemVzIHx8XG4gICAgICAvLyBpZiBvbmx5IGNvbHVtbjogYXV0byBzaXplXG4gICAgICAodGhpcy5kaXNwbGF5QXR0cmlidXRlcy5sZW5ndGggPT09IDEgJiYgW3VuZGVmaW5lZF0pIHx8XG4gICAgICAvLyBDb21wdXRlZCBjb2x1bW4gc2l6ZTpcbiAgICAgIC8vIC0gaWYgbGFiZWwgdGhlbiBjb2wgc2l6ZSA9IDJcbiAgICAgIC8vIC0gaWYgcmFua09yZGVyIHRoZW4gY29sIHNpemUgPSAxXG4gICAgICAvLyAtIGVzZSA9PiBhdXRvIHNpemVcbiAgICAgIHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMubWFwKChhdHRyKSA9PiBhdHRyICYmIChhdHRyLmVuZHNXaXRoKCdsYWJlbCcpID8gMyA6IGF0dHIuZW5kc1dpdGgoJ3JhbmtPcmRlcicpID8gMiA6IHVuZGVmaW5lZCkpO1xuICAgIHRoaXMuZGlzcGxheUNvbHVtbk5hbWVzID0gdGhpcy5kaXNwbGF5QXR0cmlidXRlcy5tYXAoXG4gICAgICAoYXR0ciwgaW5kZXgpID0+ICh0aGlzLmRpc3BsYXlDb2x1bW5OYW1lcyAmJiB0aGlzLmRpc3BsYXlDb2x1bW5OYW1lc1tpbmRleF0pIHx8IHRoaXMuaTE4blByZWZpeCArIGNoYW5nZUNhc2VUb1VuZGVyc2NvcmUoYXR0cikudG9VcHBlckNhc2UoKVxuICAgICk7XG4gICAgY29uc3QgcGFuZWxDbGFzc2VzID0gdGhpcy5wYW5lbENsYXNzPy5zcGxpdCgvXFxzKy8pO1xuICAgIHRoaXMucGFuZWxXaWR0aCA9XG4gICAgICB0aGlzLnBhbmVsV2lkdGggPz9cbiAgICAgIChwYW5lbENsYXNzZXMgJiZcbiAgICAgICAgKChwYW5lbENsYXNzZXMuaW5jbHVkZXMoJ21pbi13aWR0aC1tZWRpdW0nKSAmJiAnMzAwcHgnKSB8fFxuICAgICAgICAgIChwYW5lbENsYXNzZXMuaW5jbHVkZXMoJ21pbi13aWR0aC1sYXJnZScpICYmICc0MDBweCcpIHx8XG4gICAgICAgICAgKHBhbmVsQ2xhc3Nlcy5pbmNsdWRlcygnbWluLXdpZHRoLXhsYXJnZScpICYmICc0NTBweCcpIHx8XG4gICAgICAgICAgKHBhbmVsQ2xhc3Nlcy5pbmNsdWRlcygnbWluLXdpZHRoLTgwdncnKSAmJiAnODB2dycpIHx8XG4gICAgICAgICAgKChwYW5lbENsYXNzZXMuaW5jbHVkZXMoJ2Z1bGwtd2lkdGgnKSB8fCBwYW5lbENsYXNzZXMuaW5jbHVkZXMoJ2Z1bGwtc2l6ZScpKSAmJiAnMTAwdncnKSkpO1xuICAgIHRoaXMuc3VnZ2VzdExlbmd0aFRocmVzaG9sZCA9IHRoaXMuc3VnZ2VzdExlbmd0aFRocmVzaG9sZCA/PyAwO1xuICAgIHRoaXMuc2hvd0FsbE9uRm9jdXMgPSB0aGlzLnNob3dBbGxPbkZvY3VzID8/ICh0aGlzLm1vYmlsZSAmJiB0aGlzLnN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQgPD0gMCk7XG4gICAgdGhpcy5zaG93UGFuZWxPbkZvY3VzID0gdGhpcy5zaG93UGFuZWxPbkZvY3VzID8/IHRydWU7XG4gICAgdGhpcy5yZWxvYWRJdGVtc09uRm9jdXMgPSB0aGlzLnJlbG9hZEl0ZW1zT25Gb2N1cyA/PyBmYWxzZTtcbiAgICB0aGlzLmRlYm91bmNlVGltZSA9IHRoaXMuZGVib3VuY2VUaW1lID8/ICh0aGlzLm1vYmlsZSA/IDY1MCA6IDI1MCk7XG4gICAgdGhpcy5oaWdobGlnaHRBY2NlbnQgPSB0aGlzLmhpZ2hsaWdodEFjY2VudCA/PyBmYWxzZTtcbiAgICB0aGlzLm1hdEF1dG9jb21wbGV0ZVBvc2l0aW9uID0gdGhpcy5tYXRBdXRvY29tcGxldGVQb3NpdGlvbiA/PyAnYXV0byc7XG4gICAgdGhpcy5hcHBseUltcGxpY2l0VmFsdWUgPSB0aGlzLmFwcGx5SW1wbGljaXRWYWx1ZSA/PyAhdGhpcy5tb2JpbGU7XG4gICAgdGhpcy5zZWxlY3RJbnB1dENvbnRlbnRPbkZvY3VzID0gdGhpcy5zZWxlY3RJbnB1dENvbnRlbnRPbkZvY3VzID8/IGZhbHNlO1xuICAgIHRoaXMuc2VsZWN0SW5wdXRDb250ZW50T25Gb2N1c0RlbGF5ID0gdGhpcy5zZWxlY3RJbnB1dENvbnRlbnRPbkZvY3VzRGVsYXkgPz8gMDtcbiAgICB0aGlzLmNsZWFySW52YWxpZFZhbHVlT25CbHVyID0gdGhpcy5jbGVhckludmFsaWRWYWx1ZU9uQmx1ciA/PyBmYWxzZTtcbiAgICB0aGlzLnByZXZpZXdJbXBsaWNpdFZhbHVlID0gdGhpcy5wcmV2aWV3SW1wbGljaXRWYWx1ZSA/PyBmYWxzZTtcblxuICAgIC8vIE5vIHN1Z2dlc3RGbjogZmlsdGVyIG9uIHRoZSBnaXZlbiBpdGVtc1xuICAgIGlmICghdGhpcy5zdWdnZXN0Rm4pIHtcbiAgICAgIGNvbnN0IHN1Z2dlc3RGcm9tQXJyYXlGbjogU3VnZ2VzdEZuPGFueSwgYW55PiA9IGFzeW5jICh2YWx1ZSwgZmlsdGVyKSA9PlxuICAgICAgICAvLyBERUJVR1xuICAgICAgICAvL2lmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBDYWxsaW5nIHN1Z2dlc3RGcm9tQXJyYXkgd2l0aCB2YWx1ZT0nLCB2YWx1ZSk7XG5cbiAgICAgICAgc3VnZ2VzdEZyb21BcnJheSh0aGlzLl8kaW5wdXRJdGVtcy52YWx1ZSwgdmFsdWUsIHtcbiAgICAgICAgICBzZWFyY2hBdHRyaWJ1dGVzOiB0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzLFxuICAgICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgfSk7XG5cbiAgICAgIC8vIFdhaXQgKG9uY2UpIHRoYXQgaXRlbXMgYXJlIGxvYWRlZCwgdGhlbiBjYWxsIHN1Z2dlc3QgZnJvbSBhcnJheSBmblxuICAgICAgdGhpcy5zdWdnZXN0Rm4gPSBhc3luYyAodmFsdWUsIGZpbHRlcikgPT4ge1xuICAgICAgICBpZiAoaXNOaWwodGhpcy5fJGlucHV0SXRlbXMudmFsdWUpKSB7XG4gICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAvL2lmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgXCIgV2FpdGluZyBpdGVtcyB0byBiZSBzZXQuLi5cIik7XG5cbiAgICAgICAgICBhd2FpdCBmaXJzdE5vdE5pbFByb21pc2UodGhpcy5fJGlucHV0SXRlbXMpO1xuXG4gICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAvL2lmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgXCIgUmVjZWl2ZWQgaXRlbXM6XCIsIHRoaXMuaW5wdXRJdGVtcyQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3VnZ2VzdEZuID0gc3VnZ2VzdEZyb21BcnJheUZuO1xuICAgICAgICByZXR1cm4gdGhpcy5zdWdnZXN0Rm4odmFsdWUsIGZpbHRlcik7IC8vIExvb3BcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gU2VuZCB2YWx1ZSB0byBzdWdnZXN0IHdoZW4gOlxuICAgIC8vIC0gaXMgbmlsIGFuZCAnKicsIGFuZCBubyBtaW4gbGVuZ3RoIHRocmVzaG9sZFxuICAgIC8vIC0gaXMgbm90IG5pbCBhbmQgbm90IGEgc3RyaW5nIHR5cGUgKGUuZy4gb2JqZWN0KVxuICAgIC8vIC0gaXMgbm90IG5pbCBhbmQgaXMgYSBzdHJpbmcsIGFuZCBoYXMgZW5vdWdoIGNoYXJhY3RlclxuICAgIGNvbnN0IHRocmVzaG9sZEZpbHRlckZuID0gKHZhbHVlOiBhbnkpID0+XG4gICAgICB0aGlzLnN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQgPD0gMCB8fFxuICAgICAgKGlzTm90TmlsKHZhbHVlKSAmJiAoISh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB8fCAodmFsdWUgIT09ICcqJyAmJiB2YWx1ZS50cmltKCkubGVuZ3RoID49IHRoaXMuc3VnZ2VzdExlbmd0aFRocmVzaG9sZCkpKTtcblxuICAgIGNvbnN0IGZpbHRlcmVkSXRlbXNDaGFuZ2VzID0gbWVyZ2UoXG4gICAgICAvLyBSZWxvYWQgZXZlbnQgKG5vIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkgcGlwZSwgdG8gZm9yY2UgcmVsb2FkIGV2ZW4gaWYgc2FtZSB2YWx1ZSlcbiAgICAgIHRoaXMuX3JlbG9hZCQucGlwZShcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuZW5hYmxlZCksXG4gICAgICAgIGZpbHRlcih0aHJlc2hvbGRGaWx0ZXJGbiksXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLnNob3dMb2FkaW5nU3Bpbm5lciAmJiB0aGlzLm1hcmtBc0xvYWRpbmcoKSlcbiAgICAgICksXG5cbiAgICAgIC8vIFNlYXJjaCB0ZXh0IChubyBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpIGJlY2F1c2Ugb2YgdGhlIGRlYm91bmNlVGltZSgpIHBpcGUpXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICBmaWx0ZXIoKHZhbHVlKSA9PiB0aGlzLmVuYWJsZWQgJiYgaXNOb3ROaWxTdHJpbmcodmFsdWUpKSxcbiAgICAgICAgLy8gTWFyayBhcyBsb2FkaW5nICh0byBzaG93IGxvYWRpbmcgc3Bpbm5lcikgLSBhcyBzb29uIGFzIHBvc3NpYmxlLCBhbmQgYmVmb3JlIGRlYm91bmNlVGltZVxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5zaG93TG9hZGluZ1NwaW5uZXIgJiYgdGhpcy5tYXJrQXNMb2FkaW5nKCkpLFxuICAgICAgICAvLyBGaWx0ZXIgaWYgbm90IGVub3VnaCBjaGFyYWN0ZXJcbiAgICAgICAgZmlsdGVyKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICgodmFsdWU/Lmxlbmd0aCB8fCAwKSA8IHRoaXMuc3VnZ2VzdExlbmd0aFRocmVzaG9sZCkge1xuICAgICAgICAgICAgLy8gVXBkYXRlIGRpc3BsYXkgdmFsdWUsIHRvIGVuYWJsZSB0aGUgbWVzc2FnZSBcIm5vdCBlbm91Z2ggY2hhcmFjdGVyc1wiXG4gICAgICAgICAgICB0aGlzLl9kaXNwbGF5VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pLFxuICAgICAgICAvLyBXYWl0IGEgZGVib3VuY2UgdGltZVxuICAgICAgICBkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVRpbWUpXG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIC8vLHRhcCgodmFsdWUpID0+IHRoaXMuZGVidWcgJiYgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgU2VhcmNoIHRleHQgY2hhbmdlczonLCB2YWx1ZSkpXG4gICAgICApLFxuXG4gICAgICAvLyBPYmplY3Qgc2V0OiB1c2UgaXQgKG5vIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkgcGlwZSBuZWVkKVxuICAgICAgdGhpcy5mb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgc3RhcnRXaXRoPGFueT4odGhpcy5mb3JtQ29udHJvbC52YWx1ZSksXG4gICAgICAgIGZpbHRlcigodmFsdWUpID0+IGlzTm90TmlsT2JqZWN0KHZhbHVlKSksXG4gICAgICAgIHRhcCgodmFsdWUpID0+IHtcbiAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIFJlY2VpdmVkIGNvbnRyb2wgdmFsdWUgY2hhbmdlczonLCB2YWx1ZSk7XG5cbiAgICAgICAgICAvLyBVcGRhdGUgdGhlIGRpc3BsYXkgdmFsdWUgKGlmIG5lZWQpXG4gICAgICAgICAgY29uc3QgZGlzcGxheVZhbHVlID0gdGhpcy5kaXNwbGF5V2l0aCh2YWx1ZSkgfHwgJyc7XG4gICAgICAgICAgaWYgKHRoaXMuX2Rpc3BsYXlWYWx1ZSAhPT0gZGlzcGxheVZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9kaXNwbGF5VmFsdWUgPSBkaXNwbGF5VmFsdWU7XG5cbiAgICAgICAgICAgIC8vIEFwcGx5IHRvIHRoZSBpbnB1dFt0eXBlPXRleHRdIGZpZWxkXG4gICAgICAgICAgICB0aGlzLnNldElucHV0VGV4dFZhbHVlKHRoaXMuX2Rpc3BsYXlWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG5cbiAgICAgICAgLy8gSWYgbXVsdGlwbGU6IGRvIG5vdCByZWNvbXB1dGUgaXRlbXMgKG9ubHkgZm9yIHRoZSBmaXJzdCB0aW1lLCB3aGVuIGxvYWRpbmcpXG4gICAgICAgIC8vIHdoZW4gZm9ybUNvbnRyb2wgdmFsdWUgY2hhbmdlc1xuICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5sb2FkaW5nIHx8ICghdGhpcy5tdWx0aXBsZSAmJiAhdGhpcy5zaG93QWxsT25Gb2N1cykpXG4gICAgICApLFxuXG4gICAgICAvLyBNZXJnZSBzb21lIG9ic2VydmFibGVzLCB3aXRoIGEgY29tbW9uIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkgcGlwZVxuICAgICAgbWVyZ2UoXG4gICAgICAgIC8vIE9uIGRyb3Bkb3duIGJ1dHRvbiBjbGljayAobm8gZGVib3VuY2VUaW1lKVxuICAgICAgICB0aGlzLmRyb3BCdXR0b25DbGljay5waXBlKGZpbHRlcigoZXZlbnQpID0+ICFldmVudCB8fCAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkpLFxuICAgICAgICAvLyBGb2N1cyBvciBjbGljayA9PiBMb2FkIGFsbCAobm8gZGVib3VuY2VUaW1lKVxuICAgICAgICBtZXJnZSh0aGlzLmZvY3VzZWQsIHRoaXMuY2xpY2tlZClcbiAgICAgICAgICAvLyBBdm9pZCB0b28gbWFueSBjYWxsLCBlLmcuIHdoZW4gZm9jdXNlZCBhbmQgY2xpY2tlZFxuICAgICAgICAgIC5waXBlKHRocm90dGxlVGltZSgxMDApKSxcbiAgICAgICAgLy8gREVCVUdcbiAgICAgICAgLy8ucGlwZSh0YXAoKF8pID0+IHRoaXMuZGVidWcgJiYgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgUmVjZWl2ZWQgZm9jdXNlZCBvciBjbGlja2VkIGV2ZW50JykpKSxcbiAgICAgICAgLy8gSW5wdXQgaXRlbXMgb3IgZmlsdGVyIGNoYW5nZXNcbiAgICAgICAgbWVyZ2UodGhpcy5fJGlucHV0SXRlbXMsIHRoaXMuXyRmaWx0ZXIpLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKCgpID0+ICF0aGlzLmxvYWRpbmcpXG4gICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAvL3RhcCgoXykgPT4gdGhpcy5kZWJ1ZyAmJiBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBSZWNlaXZlZCAkaW5wdXRJdGVtcyBvciBmaWx0ZXIgZXZlbnQnKSlcbiAgICAgICAgKVxuICAgICAgKS5waXBlKFxuICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5lbmFibGVkKSxcbiAgICAgICAgbWFwKCgpID0+ICh0aGlzLnNob3dBbGxPbkZvY3VzID8gJyonIDogdGhpcy5mb3JtQ29udHJvbC52YWx1ZSkpLFxuICAgICAgICAvLyBEaXN0aW5ndWlzaCBjaGFuZ2VzXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCh2MSwgdjIpID0+XG4gICAgICAgICAgLy8gSWYgbG9hZGluZyAobm90IGxvYWRlZCB5ZXQpLCBzaW11bGF0ZSB0aGF0IHZhbHVlIGNoYW5nZWQgdG8gZm9yY2UgbG9hZFxuICAgICAgICAgIHRoaXMubG9hZGluZyA/IGZhbHNlIDogdjEgPT09IHYyIHx8IHRoaXMuZXF1YWxzKHYxLCB2MilcbiAgICAgICAgKSxcbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZXJlIGlzIGVub3VnaCBjaGFyYWN0ZXJzXG4gICAgICAgIGZpbHRlcih0aHJlc2hvbGRGaWx0ZXJGbiksXG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIHRhcCgodmFsdWUpID0+IHRoaXMuZGVidWcgJiYgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgUmVjZWl2ZWQgdXBkYXRlIGV2ZW50OiAnLCB2YWx1ZSkpXG4gICAgICApXG4gICAgKS5waXBlKFxuICAgICAgLy8gU3VnZ2VzdCB2YWx1ZXNcbiAgICAgIG1lcmdlTWFwKCh2YWx1ZSkgPT4gdGhpcy5zdWdnZXN0KHZhbHVlLCB0aGlzLmZpbHRlcikpLFxuICAgICAgLy8gREVCVUdcbiAgICAgIC8vdGFwKGl0ZW1zID0+IHRoaXMuZGVidWcgJiYgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgUmVjZWl2ZWQgZnJvbSBzdWdnZXN0OiAnLCBpdGVtcykpLFxuXG4gICAgICAvLyBTdG9yZSBpbXBsaWNpdCB2YWx1ZSAod2lsbCB1c2UgaXQgb25CbHVyIGlmIG5vdCBvdGhlciB2YWx1ZSBzZWxlY3RlZClcbiAgICAgIHRhcCgoaXRlbXMpID0+ICEodGhpcy5tb2JpbGUgfHwgdGhpcy5tdWx0aXBsZSkgJiYgdGhpcy51cGRhdGVJbXBsaWNpdFZhbHVlKGl0ZW1zKSlcbiAgICApO1xuXG4gICAgLy8gRmV0Y2ggbW9yZSBldmVudHNcbiAgICBjb25zdCBmZXRjaE1vcmVJdGVtc0NoYW5nZXMgPSB0aGlzLl9mZXRjaE1vcmUkLnBpcGUoXG4gICAgICB0YXAoKGV2ZW50KSA9PiBldmVudD8ucHJldmVudERlZmF1bHQoKSksIC8vIEF2b2lkIHRvIGNsb3NlIHRoZSBtYXQtc2VsZWN0XG4gICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5jYW5GZXRjaE1vcmUpLFxuICAgICAgbWVyZ2VNYXAoKCkgPT4gdGhpcy5mZXRjaE1vcmUoKSksXG5cbiAgICAgIC8vIERFQlVHXG4gICAgICAvL3RhcChtb3JlSXRlbXMgPT4gY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgUmVjZWl2ZWQgZnJvbSBmZXRjaCBNb3JlOiAnLCBtb3JlSXRlbXMpKSxcblxuICAgICAgLy8gQ29uY2F0IHRvIGV4aXN0aW5nIGl0ZW1zXG4gICAgICBtYXAoKG1vcmVJdGVtcykgPT4gKHRoaXMuXyRmaWx0ZXJlZEl0ZW1zLnZhbHVlIHx8IFtdKS5jb25jYXQobW9yZUl0ZW1zKSlcbiAgICApO1xuXG4gICAgLy8gVXBkYXRlIGZpbHRlcmVkIGl0ZW1zXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIG1lcmdlKFxuICAgICAgICB0aGlzLl8kaW5wdXRJdGVtcyxcblxuICAgICAgICAvLyBVcGRhdGUgaXRlbXMgZXZlbnRzXG4gICAgICAgIGZpbHRlcmVkSXRlbXNDaGFuZ2VzLFxuXG4gICAgICAgIC8vIEZldGNoIG1vcmUgZXZlbnRzXG4gICAgICAgIGZldGNoTW9yZUl0ZW1zQ2hhbmdlc1xuICAgICAgKS5zdWJzY3JpYmUoKGl0ZW1zKSA9PiB7XG4gICAgICAgIC8vIE1ha2Ugc3VyZSBjb250cm9sIHZhbHVlIGlzIGluc2lkZSAobWF0LXNlbGVjdClcbiAgICAgICAgLy8gKG90aGVyd2lzZSBjdXJyZW50IHZhbHVlIHdpbGwgdmlzdWFsbHkgZGlzYXBwZWFyKVxuICAgICAgICBpZiAoaXRlbXMpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XG4gICAgICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtID0gbnVsbDtcblxuICAgICAgICAgIC8vIElmIGZvcm0gdmFsdWUgaXMgbWlzc2luZzogYXBwZW5kIHRvIGxpc3RcbiAgICAgICAgICBpZiAoaXNOb3ROaWwodmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICBpdGVtcyA9IGl0ZW1zLmNvbmNhdCh2YWx1ZS5maWx0ZXIoKHYpID0+IGl0ZW1zLmZpbmRJbmRleCgoaXRlbSkgPT4gdGhpcy5lcXVhbHMoaXRlbSwgdikpID09PSAtMSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGl0ZW1zLmZpbmRJbmRleCgoaXRlbSkgPT4gdGhpcy5lcXVhbHMoaXRlbSwgdmFsdWUpKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAvLyBBcHBlbmQgY3VycmVudCB2YWx1ZSB0byB0aGUgbGlzdCwgaWYgbWlzc2luZyAobWF0LXNlbGVjdCBvbmx5KVxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubW9iaWxlIHx8IHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbXMgPSBpdGVtcy5jb25jYXQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEl0ZW0gPSBpdGVtc1tpbmRleF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgUmVjZWl2ZWQgbmV3IGZpbHRlcmVkIGl0ZW1zJywgaXRlbXMpO1xuXG4gICAgICAgIC8vIEVtaXQgaXRlbXNcbiAgICAgICAgdGhpcy5fJGZpbHRlcmVkSXRlbXMubmV4dChpdGVtcyk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBBcHBseWluZyBpbXBsaWNpdCB2YWx1ZSwgb24gYmx1clxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLmJsdXJyZWRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgLy8gU2tpcCBpZiBtdWx0aXBsZSAobm8gaW1wbGljaXQgdmFsdWUpIG9yIGRpc2FibGVcbiAgICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMubXVsdGlwbGUgJiYgIXRoaXMubW9iaWxlICYmIHRoaXMuZW5hYmxlZCksXG4gICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAvLyx0YXAoXyA9PiB0aGlzLmRlYnVnICYmIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIFJlY2VpdmVkIGJsdXJyZWQgZXZlbnQnKSksXG4gICAgICAgICAgbWFwKCgpID0+IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICBsZXQgaW52YWxpZGF0ZUZpbHRlcmVkSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgICBsZXQgbW92ZUNhcmV0VG9CZWdpbm5pbmcgPSBmYWxzZTtcblxuICAgICAgICAgIC8vIERFQlVHXG4gICAgICAgICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgQXBwbHlpbmcgaW1wbGljaXQgdmFsdWUgb24gYmx1cicsIHZhbHVlKTtcblxuICAgICAgICAgIC8vIFdoZW4gbGVhdmUgY29tcG9uZW50IHdpdGhvdXQgb2JqZWN0LCB1c2UgaW1wbGljaXQgdmFsdWUgaWYgOlxuICAgICAgICAgIC8vIC0gYW4gZXhwbGljaXQgdmFsdWVcbiAgICAgICAgICAvLyAtIGZpZWxkIGlzIG5vdCBlbXB0eSAodXNlciBmaWxsIHNvbWV0aGluZylcbiAgICAgICAgICAvLyAtIE9SIGZpZWxkIGVtcHR5IGJ1dCBpcyByZXF1aXJlZFxuICAgICAgICAgIGlmIChpc05vdE5pbCh0aGlzLl9pbXBsaWNpdFZhbHVlKSAmJiAoKHRoaXMucmVxdWlyZWQgJiYgaXNOaWxPckJsYW5rKHZhbHVlKSkgfHwgKGlzTm90TmlsT3JCbGFuayh2YWx1ZSkgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykpKSB7XG4gICAgICAgICAgICB0aGlzLndyaXRlVmFsdWUodGhpcy5faW1wbGljaXRWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1BlbmRpbmcoeyBlbWl0RXZlbnQ6IGZhbHNlLCBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UsIG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgICAgICAgICAgaW52YWxpZGF0ZUZpbHRlcmVkSXRlbXMgPSB0aGlzLnNob3dBbGxPbkZvY3VzIHx8IHRoaXMucmVsb2FkSXRlbXNPbkZvY3VzO1xuICAgICAgICAgICAgbW92ZUNhcmV0VG9CZWdpbm5pbmcgPSB0cnVlOyAvLyBNb3ZlIGNhcmV0IHRvIHRoZSBiZWdpbm5pbmcgKGZpeCBpc3N1ZSBJTUFHSU5FLTQ2OSlcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gTm8gdmFsdWUgYW5kIG5vIGltcGxpY2l0IHZhbHVlXG4gICAgICAgICAgZWxzZSBpZiAoaXNOaWxPckJsYW5rKHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy53cml0ZVZhbHVlKG51bGwpO1xuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNQZW5kaW5nKHsgZW1pdEV2ZW50OiBmYWxzZSwgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlLCBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gSGFzIHZhbHVlLCBidXQgbm8gaW1wbGljaXQgdmFsdWVcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIFZhbHVlIGlzIGEgdmFsaWQgb2JqZWN0XG4gICAgICAgICAgICBpZiAoaXNOb3ROaWxPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgIGludmFsaWRhdGVGaWx0ZXJlZEl0ZW1zID0gdGhpcy5zaG93QWxsT25Gb2N1cyB8fCB0aGlzLnJlbG9hZEl0ZW1zT25Gb2N1cztcbiAgICAgICAgICAgICAgbW92ZUNhcmV0VG9CZWdpbm5pbmcgPSB0cnVlOyAvLyBNb3ZlIGNhcmV0IHRvIHRoZSBiZWdpbm5pbmcgKGZpeCBpc3N1ZSBJTUFHSU5FLTQ2OSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEludmFsaWQgdmFsaWQgdmFsdWU6IGNsZWFyIHNlYXJjaCB0ZXh0XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmNsZWFySW52YWxpZFZhbHVlT25CbHVyICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgdGhpcy53cml0ZVZhbHVlKG51bGwpO1xuICAgICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1BlbmRpbmcoeyBlbWl0RXZlbnQ6IGZhbHNlLCBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSwgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICAgICAgICAgIGludmFsaWRhdGVGaWx0ZXJlZEl0ZW1zID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9pbXBsaWNpdFZhbHVlID0gbnVsbDsgLy8gcmVzZXQgdGhlIGltcGxpY2l0IHZhbHVlXG4gICAgICAgICAgdGhpcy5jbG9zZVBhbmVsKCk7IC8vIENsb3NlIHBhbmVsXG5cbiAgICAgICAgICAvLyBJbnZhbGlkYXRlIGxvYWRlZCBpdGVtc1xuICAgICAgICAgIGlmIChpbnZhbGlkYXRlRmlsdGVyZWRJdGVtcykge1xuICAgICAgICAgICAgdGhpcy5tYXJrQXNMb2FkaW5nKCk7IC8vIFNob3VsZCBmb3JjZSBuZXh0IGZvY3VzIHRvIHJlbG9hZCBpdGVtc1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE1vdmUgY2FyZXQgdG8gdGhlIGJlZ2lubmluZyAoZml4IGlzc3VlIElNQUdJTkUtNDY5KVxuICAgICAgICAgIGlmIChtb3ZlQ2FyZXRUb0JlZ2lubmluZykge1xuICAgICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIE1vdmluZyBjYXJldCB0byB0aGUgYmVnaW5uaW5nLCBvbiBibHVyJyk7XG4gICAgICAgICAgICBzZWxlY3RJbnB1dFJhbmdlKHRoaXMubWF0SW5wdXRUZXh0Py5uYXRpdmVFbGVtZW50LCAwLCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIExpc3RlbiBmb3JtIGNvbnRyb2wgc3RhdHVzIGNoYW5nZVxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnN0YXR1c0NoYW5nZXNcbiAgICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcbiAgICAgICAgLy8gVXBkYXRlIGNvbXBvbmVudCBzdGF0ZVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2hlY2tJZlRvdWNoZWQoKSlcbiAgICApO1xuXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMua2V5ZG93bkVzY2FwZS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgIC8vIEF2b2lkIGZvcm0gb3IgcGFnZSB0byBtYW5hZ2UgZXNjYXBlIGV2ZW50XG4gICAgICAgICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAvL2NvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyBcIiBDbG9zaW5nIHRoZSBwYW5lbCAoa2V5ZG93bi5lc2NhcGUpXCIpO1xuXG4gICAgICAgICAgdGhpcy5jbG9zZVBhbmVsKCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIFNlbGVjdCBpbnB1dCBjb250ZW50LCBvbiBmb2N1cyBvciBwcmVzcyBlbnRlclxuICAgIGlmICh0aGlzLnNlbGVjdElucHV0Q29udGVudE9uRm9jdXMgJiYgIXRoaXMubW9iaWxlICYmICF0aGlzLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICBtZXJnZShcbiAgICAgICAgICB0aGlzLmZvY3VzZWQucGlwZShcbiAgICAgICAgICAgIGZpbHRlcigoZXZlbnQpID0+ICFldmVudC5kZWZhdWx0UHJldmVudGVkKVxuICAgICAgICAgICAgLy90YXAoKGV2ZW50KSA9PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpKVxuICAgICAgICAgICksXG4gICAgICAgICAgdGhpcy5rZXl1cEVudGVyLnBpcGUoZmlsdGVyKCgpID0+IGlzTm90TmlsT2JqZWN0KHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpKSlcbiAgICAgICAgKVxuICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSh0aGlzLnNlbGVjdElucHV0Q29udGVudE9uRm9jdXNEZWxheSkpXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgU2VsZWN0aW5nIGlucHV0IGNvbnRlbnQgKGZvY3VzZWQpJyk7XG4gICAgICAgICAgICBzZWxlY3RJbnB1dENvbnRlbnQodGhpcy5tYXRJbnB1dFRleHQ/Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbG9hZEl0ZW1zT25Gb2N1cykge1xuICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgdGhpcy5mb2N1c2VkLnBpcGUoZmlsdGVyKChldmVudCkgPT4gIXRoaXMubG9hZGluZyAmJiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIFJlbG9hZGluZyBpdGVtcyAoZm9jdXNlZCknKTtcbiAgICAgICAgICB0aGlzLnJlbG9hZEl0ZW1zKCk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLl9maXhNYXRTZWxlY3RQb3NpdGlvbkFuZFNlYXJjaGJhcigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgaWYgKHRoaXMuX2l0ZW1zU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9pdGVtc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fb3BlbmVkU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9vcGVuZWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5fJGlucHV0SXRlbXMuY29tcGxldGUoKTtcbiAgICB0aGlzLl8kaW5wdXRJdGVtcy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuXyRmaWx0ZXJlZEl0ZW1zLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fJGZpbHRlcmVkSXRlbXMudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9yZWxvYWQkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fJGZpbHRlci5jb21wbGV0ZSgpO1xuXG4gICAgdGhpcy5kcm9wQnV0dG9uQ2xpY2suY29tcGxldGUoKTtcbiAgICB0aGlzLmNsaWNrZWQuY29tcGxldGUoKTtcbiAgICB0aGlzLmJsdXJyZWQuY29tcGxldGUoKTtcbiAgICB0aGlzLmZvY3VzZWQuY29tcGxldGUoKTtcbiAgICB0aGlzLmtleWRvd25Fc2NhcGUuY29tcGxldGUoKTtcbiAgICB0aGlzLmtleXVwRW50ZXIuY29tcGxldGUoKTtcbiAgICB0aGlzLl9mZXRjaE1vcmUkLmNvbXBsZXRlKCk7XG5cbiAgICB0aGlzLl9pbXBsaWNpdFZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZm9ybUNvbnRyb2wgPSBudWxsO1xuICAgIHRoaXMuZGlzcGxheVdpdGggPSBudWxsO1xuICAgIHRoaXMuZXF1YWxzID0gbnVsbDtcbiAgICB0aGlzLnN1Z2dlc3RGbiA9IG51bGw7XG4gICAgdGhpcy5fJGZpbHRlcmVkSXRlbXMgPSBudWxsO1xuICAgIHRoaXMuY29uZmlnID0gbnVsbDtcbiAgICB0aGlzLnBhbmVsQ2xhc3MgPSBudWxsO1xuXG4gICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayA9IG51bGw7XG4gICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2sgPSBudWxsO1xuICAgIHRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2sgPSBudWxsO1xuXG4gICAgLy8gRGVzdHJveSB0aGUgJ2F1dG9jb21wbGV0ZScgaW5zdGFuY2UsIHRvIGF2b2lkIG1lbW9yeSBsZWFrXG4gICAgdGhpcy5hdXRvY29tcGxldGU/Lm5nT25EZXN0cm95KCk7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgdG8gcmVsb2FkIGNvbnRlbnQuIFVzZWZ1bCB3aGVuIGZpbHRlciBoYXMgYmVlbiBjaGFuZ2VkIGJ1dCBub3QgZGV0ZWN0ZWRcbiAgICovXG4gIHJlbG9hZEl0ZW1zKHZhbHVlPzogYW55KSB7XG4gICAgLy8gREVCVUdcbiAgICAvL2lmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgXCIgQXNraW5nIHRvIHJlbG9hZEl0ZW1zKClcIik7XG4gICAgLy8gRm9yY2UgYSByZWZyZXNoXG4gICAgdGhpcy5fcmVsb2FkJC5uZXh0KHZhbHVlIHx8ICh0aGlzLnNob3dBbGxPbkZvY3VzICYmIHRoaXMuc3VnZ2VzdExlbmd0aFRocmVzaG9sZCA8PSAwID8gJyonIDogdGhpcy5mb3JtQ29udHJvbC52YWx1ZSkpO1xuXG4gICAgLy8gQ2xlYXIgdGhlIHNlYXJjaCBiYXIgKGlmIGhpZGRlbilcbiAgICBpZiAodGhpcy5tb2JpbGUgJiYgIXRoaXMubWF0U2VsZWN0LnBhbmVsT3BlbiAmJiB0aGlzLmlvblNlYXJjaGJhcikge1xuICAgICAgdGhpcy5pb25TZWFyY2hiYXIudmFsdWUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIC8vIERFQlVHXG4gICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgV3JpdGluZyB2YWx1ZTogJywgdmFsdWUpO1xuXG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLmZvcm1Db250cm9sLnZhbHVlKSB7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB0aGlzLl9kaXNwbGF5VmFsdWUgPSB0aGlzLmRpc3BsYXlXaXRoKHZhbHVlKTtcblxuICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh2YWx1ZSk7XG5cbiAgICAgIC8vIENoZWNrIGlmIG5lZWQgdG8gdXBkYXRlIGNvbnRyb2xzXG4gICAgICB0aGlzLmNoZWNrSWZUb3VjaGVkKCk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoaXNEaXNhYmxlZCAmJiB0aGlzLmF1dG9jb21wbGV0ZT8uaXNPcGVuKSB7XG4gICAgICB0aGlzLmNsb3NlUGFuZWwoKTtcbiAgICB9XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGZvY3VzKCkge1xuICAgIGlmICh0aGlzLm1hdFNlbGVjdCkge1xuICAgICAgdGhpcy5tYXRTZWxlY3QuZm9jdXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9jdXNJbnB1dCh0aGlzLm1hdElucHV0VGV4dCk7XG4gICAgfVxuICB9XG5cbiAgZmlsdGVySW5wdXRUZXh0Rm9jdXNFdmVudChldmVudDogRm9jdXNFdmVudCkge1xuICAgIGlmICghZXZlbnQgfHwgZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnY2FsbGluZyBmaWx0ZXJJbnB1dFRleHRGb2N1c0V2ZW50IC0gZXZlbnQuZGVmYXVsdFByZXZlbnRlZCcpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIElnbm9yZSBldmVudCBmcm9tIG1hdC1vcHRpb25cbiAgICBpZiAoZXZlbnQucmVsYXRlZFRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGV2ZW50LnJlbGF0ZWRUYXJnZXQudGFnTmFtZSA9PT0gJ01BVC1PUFRJT04nKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuXG4gICAgICAvLyBERUJVR1xuICAgICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgQ2FuY2VsbGluZyBmb2N1cyBldmVudCcpO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5fZm9jdXNlZCA9IHRydWU7XG5cbiAgICAvLyBERUJVR1xuICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIFNlbGVjdCBpbnB1dCBjb250ZW50Jyk7XG4gICAgY29uc3QgaGFzQ29udGVudCA9IGlzTm90TmlsT3JCbGFuaygoZXZlbnQudGFyZ2V0IGFzIGFueSk/LnZhbHVlKTtcblxuICAgIC8vIElmIGNvbWJvIGlzIGVtcHR5LCBvciBpZiBoYXMgY29udGVudCBidXQgc2hvdWxkIGZvcmNlIHRvIHNob3cgcGFuZWwgb24gZm9jdXNcbiAgICBpZiAoIWhhc0NvbnRlbnQgfHwgdGhpcy5zaG93UGFuZWxPbkZvY3VzIHx8IHRoaXMuc2hvd0FsbE9uRm9jdXMpIHtcbiAgICAgIC8vIERFQlVHXG4gICAgICAvL2lmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBFbWl0IGZvY3VzIGV2ZW50Jyk7XG5cbiAgICAgIC8vIE5lZWQgYSBkZWxheSB0byBwcmV2ZW50IGVhcmx5IGZvY3VzIGV2ZW50LCBqdXN0IGFmdGVyIGEgYmx1ciBldmVudCAoc2VlIHN1bWFyaXMgaXNzdWUgLSAyIHBhbmVscyBvcGVuZWQpXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9mb2N1c2VkKSByZXR1cm47IC8vIFNraXAgaWYgYmx1ciBldmVudCByZWNlaXZlZFxuXG4gICAgICAgIHRoaXMuZm9jdXNlZC5lbWl0KGV2ZW50KTtcbiAgICAgIH0sIDEwKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBmaWx0ZXJJbnB1dFRleHRCbHVyRXZlbnQoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcblxuICAgIC8vIERFQlVHXG4gICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgZmlsdGVySW5wdXRUZXh0Qmx1ckV2ZW50JywgZXZlbnQpO1xuXG4gICAgLy8gSWdub3JlIGV2ZW50IGZyb20gbWF0LW9wdGlvblxuICAgIGlmIChcbiAgICAgIChldmVudC5yZWxhdGVkVGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZXZlbnQucmVsYXRlZFRhcmdldC50YWdOYW1lID09PSAnTUFULU9QVElPTicpIHx8XG4gICAgICAvLyBPciBhdXRvY29tcGxldGUgcGFuZWwgaXMgb3BlbiBiZWNhdXNlIGV2ZW50LnJlbGF0ZWRUYXJnZXQgaXMgbnVsbCAoY2YuIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvaXNzdWVzLzI0MTgyKVxuICAgICAgdGhpcy5hdXRvY29tcGxldGU/LmlzT3BlblxuICAgICkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcblxuICAgICAgLy8gREVCVUdcbiAgICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyBcIiBDYW5jZWxsaW5nIGJsdXIgZXZlbnRcIik7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9mb2N1c2VkID0gZmFsc2U7XG5cbiAgICAvLyBOZWVkIGEgZGVsYXkgdG8gcHJldmVudCBlYXJseSBibHVyIGV2ZW50IHdpdGhvdXQgdHJpZ2dlcmluZyBmb3JtQ2hhbmdlIGV2ZW50XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fZm9jdXNlZCkgcmV0dXJuOyAvLyBTa2lwIGlmIGZvY3VzIGFnYWluXG5cbiAgICAgIHRoaXMuYmx1cnJlZC5lbWl0KGV2ZW50KTtcbiAgICB9LCAxMDApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlvblNlYXJjaEJhckNoYW5nZWQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgaWYgKCFldmVudCB8fCBldmVudC5kZWZhdWx0UHJldmVudGVkIHx8ICF0aGlzLm1hdFNlbGVjdC5wYW5lbE9wZW4pIHJldHVybjtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgLy8gR2V0IHRoZSB2YWx1ZSB0byBzZWFyY2hcbiAgICBjb25zdCB2YWx1ZSA9IChldmVudCBhcyBDdXN0b21FdmVudDxTZWFyY2hiYXJDaGFuZ2VFdmVudERldGFpbD4pPy5kZXRhaWwudmFsdWU7XG5cbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArIFwiIFJlY2VpdmVkIDxpb24tc2VhcmNoYmFyPiBjaGFuZ2VzXCIsIHZhbHVlKTtcblxuICAgIC8vIFVwZGF0ZSB0aGUgZGlzcGxheSB2YWx1ZSAoaW4gdGhlIHZpc2libGUgZm9ybSBjb250cm9sKVxuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy5fZGlzcGxheVZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gTWFyayBjb21wb25lbnQgYXMgbG9hZGluZ1xuICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuXG4gICAgLy8gUmVsb2FkIGl0ZW1zXG4gICAgdGhpcy5yZWxvYWRJdGVtcyh2YWx1ZSk7XG5cbiAgICAvLyBUT0RPIEZpbmQgYSB3YXkgdG8gYXZvaWQgbWF0LXNlbGVjdCB0byBnaXZlIGZvY3VzIHRvIGFuIG9wdGlvbiwgd2hlbiB0eXBpbmdcbiAgICAvKmlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLm1hdFNlbGVjdC5fZWxlbWVudFJlZjtcbiAgICB9Ki9cbiAgfVxuXG4gIGZpbHRlck1hdFNlbGVjdEZvY3VzRXZlbnQoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgUmVjZWl2ZWQgPG1hdC1zZWxlY3Q+IGZvY3VzIGV2ZW50JywgZXZlbnQpO1xuXG4gICAgLy8gRW1pdCBldmVudFxuICAgIHRoaXMuZm9jdXNlZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIGZpbHRlck1hdFNlbGVjdEJsdXJFdmVudChldmVudDogRm9jdXNFdmVudCkge1xuICAgIGlmICghZXZlbnQgfHwgZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuXG4gICAgLy8gREVCVUdcbiAgICAvLyBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgXCIgUmVjZWl2ZWQgPG1hdC1zZWxlY3Q+IGJsdXIgZXZlbnRcIiwgZXZlbnQpO1xuXG4gICAgaWYgKFxuICAgICAgZXZlbnQucmVsYXRlZFRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmXG4gICAgICAvLyBJZ25vcmUgZXZlbnQgZnJvbSBtYXQtb3B0aW9uXG4gICAgICAoZXZlbnQucmVsYXRlZFRhcmdldC50YWdOYW1lID09PSAnTUFULU9QVElPTicgfHxcbiAgICAgICAgKGV2ZW50LnJlbGF0ZWRUYXJnZXQudGFnTmFtZSA9PT0gJ0RJVicgJiYgZXZlbnQucmVsYXRlZFRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ21hdC1tZGMtc2VsZWN0LXBhbmVsJykpIHx8IC8vIE5ldyBNREMgdGFnIGFuZCBjbGFzcyBuYW1lIChlcXVpdmFsZW50IHRvIGV2ZW50LnJlbGF0ZWRUYXJnZXQudGFnTmFtZSA9PT0gJ01BVC1PUFRJT04nKVxuICAgICAgICAoZXZlbnQucmVsYXRlZFRhcmdldC50YWdOYW1lID09PSAnSU5QVVQnICYmIGV2ZW50LnJlbGF0ZWRUYXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdzZWFyY2hiYXItaW5wdXQnKSkpXG4gICAgKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyBcIiBDYW5jZWxsaW5nIDxtYXQtc2VsZWN0PiBibHVyIGV2ZW50XCIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9mb2N1c2VkKSB7XG4gICAgICB0aGlzLl9mb2N1c2VkID0gZmFsc2U7XG5cbiAgICAgIHRoaXMuYmx1cnJlZC5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNsZWFyVmFsdWUoZXZlbnQ/OiBFdmVudCkge1xuICAgIHRoaXMuY2xvc2VQYW5lbCgpO1xuICAgIHRoaXMud3JpdGVWYWx1ZShudWxsKTtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMuaW9uU2VhcmNoYmFyKSB7XG4gICAgICB0aGlzLmlvblNlYXJjaGJhci52YWx1ZSA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuICB9XG5cbiAgX2luaXRBdXRvY29tcGxldGVJbmZpbml0ZVNjcm9sbCh0aHJlc2hvbGQ/OiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuYXV0b2NvbXBsZXRlKSByZXR1cm47IC8vIFNraXBcblxuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBJbml0IGF1dG9jb21wbGV0ZSBzY3JvbGwgbGlzdGVuZXInKTtcblxuICAgIGlmICh0aGlzLl9vcGVuZWRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX29wZW5lZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLnJlbW92ZSh0aGlzLl9vcGVuZWRTdWJzY3JpcHRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG9wZW5lZCQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuYXV0b2NvbXBsZXRlLl9pc09wZW4gPyB0aW1lcigwKSA6IHRoaXMuYXV0b2NvbXBsZXRlLm9wZW5lZC5waXBlKGRlYm91bmNlVGltZSgyMDApKTtcbiAgICBjb25zdCBzY3JvbGxFbmQkID0gb3BlbmVkJC5waXBlKFxuICAgICAgbWFwKCgpID0+IHRoaXMuZ2V0QXV0b2NvbXBsZXRlUGFuZWwoKSksXG4gICAgICBmaWx0ZXIoaXNOb3ROaWwpLFxuICAgICAgc3dpdGNoTWFwKChwYW5lbCkgPT4gZnJvbVNjcm9sbEVuZEV2ZW50KHBhbmVsLCB0aHJlc2hvbGQpKSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLmF1dG9jb21wbGV0ZS5jbG9zZWQpXG4gICAgKTtcblxuICAgIC8vIFRyaWdnZXIgZmV0Y2ggbW9yZSwgZW5kIGVuZCBzY3JvbGwgcmVhY2hlZFxuICAgIHRoaXMuX29wZW5lZFN1YnNjcmlwdGlvbiA9IHNjcm9sbEVuZCQuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2ZldGNoTW9yZSQuZW1pdCgpKTtcblxuICAgIC8vIFJlZ2lzdGVyIHN1YnNjcmlwdGlvblxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQodGhpcy5fb3BlbmVkU3Vic2NyaXB0aW9uKTtcbiAgfVxuXG4gIF9pbml0TWF0U2VsZWN0SW5maW5pdGVTY3JvbGwodGhyZXNob2xkPzogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLm1hdFNlbGVjdCkgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgSW5pdCBtYXQtc2VsZWN0IHNjcm9sbCBsaXN0ZW5lcicpO1xuXG4gICAgaWYgKHRoaXMuX29wZW5lZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fb3BlbmVkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb24ucmVtb3ZlKHRoaXMuX29wZW5lZFN1YnNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgY29uc3Qgb3BlbmVkJDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5tYXRTZWxlY3QucGFuZWxPcGVuID8gdGltZXIoMCkgOiB0aGlzLm1hdFNlbGVjdC5fb3BlbmVkU3RyZWFtLnBpcGUoZGVib3VuY2VUaW1lKDIwMCkpO1xuICAgIGNvbnN0IHNjcm9sbEVuZCQgPSBvcGVuZWQkLnBpcGUoXG4gICAgICBtYXAoKCkgPT4gdGhpcy5nZXRNYXRTZWxlY3RQYW5lbCgpKSxcbiAgICAgIGZpbHRlcihpc05vdE5pbCksXG4gICAgICBzd2l0Y2hNYXAoKHBhbmVsKSA9PiBmcm9tU2Nyb2xsRW5kRXZlbnQocGFuZWwsIHRocmVzaG9sZCkpLFxuICAgICAgdGFrZVVudGlsKHRoaXMubWF0U2VsZWN0Ll9jbG9zZWRTdHJlYW0pXG4gICAgKTtcblxuICAgIC8vIFRyaWdnZXIgZmV0Y2ggbW9yZSwgZW5kIGVuZCBzY3JvbGwgcmVhY2hlZFxuICAgIHRoaXMuX29wZW5lZFN1YnNjcmlwdGlvbiA9IHNjcm9sbEVuZCQucGlwZShmaWx0ZXIoKCkgPT4gdGhpcy5fbW9yZUl0ZW1zQ291bnQgPiAwKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2ZldGNoTW9yZSQuZW1pdCgpKTtcblxuICAgIC8vIFJlZ2lzdGVyIHN1YnNjcmlwdGlvblxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQodGhpcy5fb3BlbmVkU3Vic2NyaXB0aW9uKTtcbiAgfVxuXG4gIGdldCBpc09wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYXV0b2NvbXBsZXRlPy5pc09wZW4gfHwgdGhpcy5tYXRTZWxlY3Q/LnBhbmVsT3BlbiB8fCBmYWxzZTtcbiAgfVxuXG4gIGNsb3NlUGFuZWwoKSB7XG4gICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlPy5pc09wZW4pIHtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlVHJpZ2dlcj8uY2xvc2VQYW5lbCgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5tYXRTZWxlY3Q/LnBhbmVsT3Blbikge1xuICAgICAgdGhpcy5tYXRTZWxlY3Q/LmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZCAtLSAqL1xuXG4gIHByb3RlY3RlZCBtYXJrQXNMb2FkaW5nKCkge1xuICAgIGlmICh0aGlzLl8kZmlsdGVyZWRJdGVtcy52YWx1ZSkge1xuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIE1hcmtpbmcgYXMgbG9hZGluZycpO1xuXG4gICAgICB0aGlzLl8kZmlsdGVyZWRJdGVtcy5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICB0aGlzLl9pdGVtQ291bnQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9pbXBsaWNpdFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fb25GZXRjaE1vcmVDYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX21vcmVJdGVtc0NvdW50ID0gMDtcbiAgICAgIHRoaXMuX3NlbGVjdGVkSXRlbSA9IG51bGw7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvblNlbGVjdGlvbkNoYW5nZShldmVudDogTWF0U2VsZWN0Q2hhbmdlKSB7XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh7IHNvdXJjZTogZXZlbnQuc291cmNlLCB2YWx1ZTogZXZlbnQudmFsdWUgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25PcHRpb25TZWxlY3RlZChldmVudDogTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCkge1xuICAgIC8vIERFQlVHXG4gICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgT3B0aW9uIHNlbGVjdGVkJywgZXZlbnQpO1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoeyBzb3VyY2U6IGV2ZW50LnNvdXJjZSwgdmFsdWU6IGV2ZW50Lm9wdGlvbi52YWx1ZSB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVTaG93UGFuZWwoZXZlbnQ6IEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMuY2xvc2VQYW5lbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRyb3BCdXR0b25DbGljay5lbWl0KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICAvKiAtLSBwcml2YXRlIG1ldGhvZCAtLSAqL1xuXG4gIHByaXZhdGUgYXN5bmMgc3VnZ2VzdCh2YWx1ZTogYW55LCBmaWx0ZXI/OiBhbnkpOiBQcm9taXNlPGFueVtdPiB7XG4gICAgLy8gU3BsaXQgc3RyaW5nIHZhbHVlLCBpZiBhbGxvdyAoLmUuZyAnQUFBIC0gSXRlbSBBQUEnID0+ICdBQUEnKVxuICAgIGlmICghdGhpcy5tb2JpbGUgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gU3BsaXQgc2VhcmNoIHRleHQgKGFuZCBrZWVwIG9ubHkgdGhlIGZpcnN0IHBhcnQpXG4gICAgICBpZiAodGhpcy5zcGxpdFNlYXJjaFRleHQgJiYgdGhpcy5kaXNwbGF5U2VwYXJhdG9yKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0U2VwYXJhdG9ySW5kZXggPSB2YWx1ZS5pbmRleE9mKHRoaXMuZGlzcGxheVNlcGFyYXRvcik7XG4gICAgICAgIGlmIChmaXJzdFNlcGFyYXRvckluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDAsIGZpcnN0U2VwYXJhdG9ySW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRyaW0gc2VhcmNoIHRleHRcbiAgICAgIGlmICh0aGlzLnRyaW1TZWFyY2hUZXh0KSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUudHJpbSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENhbGwgc3VnZ2VzdGlvbiBmdW5jdGlvblxuICAgIGxldCByZXMgPSBhd2FpdCB0aGlzLnN1Z2dlc3RGbih2YWx1ZSwgZmlsdGVyKTtcblxuICAgIC8vIERFQlVHXG4gICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgRmlsdGVyZWQgaXRlbXMgYnkgc3VnZ2VzdEZuOicsIHZhbHVlLCByZXMpO1xuXG4gICAgaWYgKCFyZXMpIHtcbiAgICAgIHRoaXMuX2l0ZW1Db3VudCA9IDA7XG4gICAgICB0aGlzLl9vbkZldGNoTW9yZUNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fbW9yZUl0ZW1zQ291bnQgPSAwO1xuICAgICAgcmVzID0gW107XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJlcykpIHtcbiAgICAgIHJlcyA9IHJlcyBhcyBhbnlbXTtcbiAgICAgIHRoaXMuX2l0ZW1Db3VudCA9IHJlcz8ubGVuZ3RoIHx8IDA7XG4gICAgICB0aGlzLl9vbkZldGNoTW9yZUNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fbW9yZUl0ZW1zQ291bnQgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7IGRhdGEsIHRvdGFsLCBmZXRjaE1vcmUgfSA9IHJlcyBhcyBMb2FkUmVzdWx0PGFueT47XG4gICAgICB0aGlzLl9pdGVtQ291bnQgPSB0b051bWJlcih0b3RhbCwgKGRhdGEgJiYgZGF0YS5sZW5ndGgpIHx8IDApO1xuICAgICAgdGhpcy5fb25GZXRjaE1vcmVDYWxsYmFjayA9IGZldGNoTW9yZTtcbiAgICAgIHRoaXMuX21vcmVJdGVtc0NvdW50ID0gKGZldGNoTW9yZSAmJiB0aGlzLl9pdGVtQ291bnQgLSBkYXRhLmxlbmd0aCkgfHwgMDtcbiAgICAgIHJlcyA9IGRhdGE7XG4gICAgfVxuXG4gICAgLy8gREVCVUdcbiAgICAvL2lmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBGaWx0ZXJlZCBpdGVtcyBieSBzdWdnZXN0Rm46JywgdmFsdWUsIHJlcyk7XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaE1vcmUoKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIGlmICghdGhpcy5fb25GZXRjaE1vcmVDYWxsYmFjaykgcmV0dXJuIFtdO1xuXG4gICAgLy8gU2F2ZSB0aGVuIHJlbW92ZSBmZXRjaCBmdW5jdGlvbiAodG8gYXZvaWQgbXVsdGktY2FsbClcbiAgICBjb25zdCBmZXRjaE1vcmVGbiA9IHRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2s7XG4gICAgdGhpcy5fb25GZXRjaE1vcmVDYWxsYmFjayA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHsgZGF0YSwgdG90YWwsIGZldGNoTW9yZSB9ID0gYXdhaXQgZmV0Y2hNb3JlRm4oKTtcbiAgICB0aGlzLl9pdGVtQ291bnQgPSB0b3RhbCB8fCB0aGlzLl9pdGVtQ291bnQ7XG4gICAgdGhpcy5fb25GZXRjaE1vcmVDYWxsYmFjayA9IGZldGNoTW9yZTtcbiAgICB0aGlzLl9tb3JlSXRlbXNDb3VudCA9IE1hdGgubWF4KDAsIHRoaXMuX21vcmVJdGVtc0NvdW50IC0gZGF0YS5sZW5ndGgpOyAvLyBCb3JuZSBtaW4gPSAwXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUltcGxpY2l0VmFsdWUoaXRlbXM6IGFueVtdKSB7XG4gICAgLy8gU3RvcmUgaW1wbGljaXQgdmFsdWUgKHdpbGwgdXNlIGl0IG9uQmx1ciBpZiBub3Qgb3RoZXIgdmFsdWUgc2VsZWN0ZWQpXG4gICAgaWYgKCF0aGlzLm11bHRpcGxlICYmIGl0ZW1zPy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGltcGxpY2l0VmFsdWUgPSBpdGVtc1swXTtcbiAgICAgIGNvbnN0IGFwcGx5SW1wbGljaXRWYWx1ZSA9IHR5cGVvZiB0aGlzLmFwcGx5SW1wbGljaXRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMuYXBwbHlJbXBsaWNpdFZhbHVlKGltcGxpY2l0VmFsdWUpIDogdGhpcy5hcHBseUltcGxpY2l0VmFsdWU7XG4gICAgICBpZiAoYXBwbHlJbXBsaWNpdFZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2ltcGxpY2l0VmFsdWUgPSBpbXBsaWNpdFZhbHVlO1xuXG4gICAgICAgIC8vIFByZXZpZXcgdGhlIGltcGxpY2l0IGluIHRoZSBpbnB1dCB0ZXh0IChhbmQgc2VsZWN0IHRoZSBhZGRlZCBwYXJ0KVxuICAgICAgICBpZiAodGhpcy5wcmV2aWV3SW1wbGljaXRWYWx1ZSAmJiB0aGlzLm1hdElucHV0VGV4dD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSB0aGlzLm1hdElucHV0VGV4dC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuXG4gICAgICAgICAgLy8gQ29tcGxldGUgdGhlIHNlYXJjaCB0ZXh0LCB3aXRoIHRoZSBmdWxsIGltcGxpY2l0IHZhbHVlIGFwcGxpZWRcbiAgICAgICAgICBpZiAoIVJlZ0V4cFV0aWxzLmhhc1dpbGRjYXJkQ2hhcmFjdGVyKHNlYXJjaFRleHQpKSB7XG4gICAgICAgICAgICBjb25zdCBkaXNwbGF5VmFsdWUgPSB0aGlzLmRpc3BsYXlXaXRoKGltcGxpY2l0VmFsdWUpO1xuICAgICAgICAgICAgaWYgKGRpc3BsYXlWYWx1ZS50b1VwcGVyQ2FzZSgpLnN0YXJ0c1dpdGgoc2VhcmNoVGV4dC50b1VwcGVyQ2FzZSgpKSkge1xuICAgICAgICAgICAgICAvLyBTZWxlY3QgdGhlIGFkZGl0aW9uYWwgdGV4dCB0byBtYXRjaCB0aGUgaW1wbGljaXQgdmFsdWVcbiAgICAgICAgICAgICAgdGhpcy5zZXRJbnB1dFRleHRWYWx1ZShkaXNwbGF5VmFsdWUsIHNlYXJjaFRleHQubGVuZ3RoLCBkaXNwbGF5VmFsdWUubGVuZ3RoLCAnYmFja3dhcmQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBDb250aW51ZSA6IHJlc3RlIGltcGxpY2l0IHZhbHVlXG4gICAgfVxuXG4gICAgdGhpcy5faW1wbGljaXRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tJZlRvdWNoZWQoKSB7XG4gICAgaWYgKHRoaXMuZm9ybUNvbnRyb2wudG91Y2hlZCkge1xuICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRBdXRvY29tcGxldGVQYW5lbCgpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgZWxlID0gdGhpcy5hdXRvY29tcGxldGU/Lm9wdGlvbnMubGFzdD8uX2dldEhvc3RFbGVtZW50KCkucGFyZW50RWxlbWVudDtcbiAgICBpZiAoIWVsZSkge1xuICAgICAgLy8gREVCVUdcbiAgICAgIGNvbnNvbGUud2Fybih0aGlzLmxvZ1ByZWZpeCArICcgVW5hYmxlIHRvIGZpbmQgdGhlIGF1dG9jb21wbGV0ZSBkaXYuLi4nKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWF0U2VsZWN0UGFuZWwoKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IGVsZSA9IHRoaXMubWF0U2VsZWN0Lm9wdGlvbnMubGFzdD8uX2dldEhvc3RFbGVtZW50KCkucGFyZW50RWxlbWVudDtcbiAgICBpZiAoIWVsZSkge1xuICAgICAgLy8gREVCVUdcbiAgICAgIGNvbnNvbGUud2Fybih0aGlzLmxvZ1ByZWZpeCArICcgVW5hYmxlIHRvIGZpbmQgdGhlIG1hdC1zZWxlY3QgY29udGFpbmVyLi4uJyk7XG4gICAgfVxuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwcml2YXRlIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZml4TWF0U2VsZWN0UG9zaXRpb25BbmRTZWFyY2hiYXIoKSB7XG4gICAgaWYgKCF0aGlzLm1hdFNlbGVjdCkgcmV0dXJuO1xuXG4gICAgLy8gSGlkZSB0aGUgcGFuZWwgKHdpbGwgYmUgc2hvdyB3aGVuIHJlYWR5KVxuICAgIHRoaXMubWF0U2VsZWN0LnBhbmVsQ2xhc3MgPSAnaGlkZGVuJztcblxuICAgIGxldCBzZWFyY2hCYXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5tYXRTZWxlY3Qub3BlbmVkQ2hhbmdlLnN1YnNjcmliZShhc3luYyAob3BlbikgPT4ge1xuICAgICAgICBpZiAob3Blbikge1xuICAgICAgICAgIGNvbnN0IHBhbmVsRWxlbWVudCA9IHRoaXMubWF0U2VsZWN0LnBhbmVsLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgY29uc3Qgb3ZlcmxheVBhbmUgPSBmaW5kUGFyZW50V2l0aENsYXNzKHBhbmVsRWxlbWVudCwgJ2Nkay1vdmVybGF5LXBhbmUnKTtcblxuICAgICAgICAgIC8vIEZpeCBwYW5lbCBwb3NpdGlvbiwgd2hlbiBvdmVybGF5IGhhcyBhbiB0cmFuc2Zvcm1YIChhZGRlZCB3aGVuIGtleWJvYXJkIGlzIHNob3duKVxuICAgICAgICAgIHRoaXMuX2ZpeE1hdFNlbGVjdFBhbmVsUG9zaXRpb24ob3ZlcmxheVBhbmUpO1xuXG4gICAgICAgICAgLy8gRml4IG92ZXJsYXksIGZvciBzZWFyY2hiYXJcbiAgICAgICAgICBpZiAodGhpcy5zaG93U2VhcmNoQmFyKSB7XG4gICAgICAgICAgICBzZWFyY2hCYXJTdWJzY3JpcHRpb24gPSBhd2FpdCB0aGlzLl9maXhTZWFyY2hiYXJPdmVybGF5KHBhbmVsRWxlbWVudCwgb3ZlcmxheVBhbmUpO1xuICAgICAgICAgICAgaWYgKHNlYXJjaEJhclN1YnNjcmlwdGlvbikgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChzZWFyY2hCYXJTdWJzY3JpcHRpb24pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFNob3cgdGhlIHBhbmVsXG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhwYW5lbEVsZW1lbnQsICdoaWRkZW4nKTtcbiAgICAgICAgICB0aGlzLm1hdFNlbGVjdC5wYW5lbENsYXNzID0gdGhpcy5wYW5lbENsYXNzO1xuICAgICAgICB9XG4gICAgICAgIC8vIE9OIGNsb3NlXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIC8vIFVuc3Vic2NyaWJlIHNlYXJjaCBiYXIgd29ya2Fyb3VuZFxuICAgICAgICAgIGlmIChzZWFyY2hCYXJTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHNlYXJjaEJhclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLnJlbW92ZShzZWFyY2hCYXJTdWJzY3JpcHRpb24pO1xuICAgICAgICAgICAgc2VhcmNoQmFyU3Vic2NyaXB0aW9uID0gbnVsbDtcblxuICAgICAgICAgICAgLy8gSGlkZSBwYW5lbCBhZ2FpblxuICAgICAgICAgICAgdGhpcy5tYXRTZWxlY3QucGFuZWxDbGFzcyA9ICdoaWRkZW4nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfZml4TWF0U2VsZWN0UGFuZWxQb3NpdGlvbihvdmVybGF5UGFuZTogSFRNTEVsZW1lbnQpIHtcbiAgICBpZiAoIW92ZXJsYXlQYW5lKSByZXR1cm47XG5cbiAgICAvLyBSZW1vdmUgdGhlIHVud2FudGVkIGRlZmF1bHQgdHJhbnNsYXRlWFxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICBvdmVybGF5UGFuZSxcbiAgICAgICd0cmFuc2Zvcm0nLFxuICAgICAgb3ZlcmxheVBhbmUuc3R5bGUudHJhbnNmb3JtXG4gICAgICAgIC5zcGxpdCgnICcpXG4gICAgICAgIC5maWx0ZXIoKHByb3ApID0+ICFwcm9wLm1hdGNoKC9edHJhbnNsYXRlWC8pKVxuICAgICAgICAuam9pbignICcpXG4gICAgKTtcblxuICAgIC8vIEZpeCBwYW5lbCB3aWR0aCB0byBmaWVsZCB3aWR0aCAoaXQgd2FzIG5vdCBmb3JjZWQgYnkgQElucHV0IHBhbmVsV2lkdGgpXG4gICAgaWYgKCF0aGlzLnBhbmVsV2lkdGgpIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMubG9nUHJlZml4fSBGaXhpbmcgc2VsZWN0IHBhbmVsIHdpZHRoIHRvIHRoZSBmaWVsZCBzaXplYCk7XG4gICAgICBjb25zdCB3aWR0aCA9IGAke3RoaXMuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCAtIDF9cHhgO1xuICAgICAgaWYgKHRoaXMuX2RlZmF1bHRQYW5lbFdpZHRoICE9PSB3aWR0aCkge1xuICAgICAgICB0aGlzLl9kZWZhdWx0UGFuZWxXaWR0aCA9IHdpZHRoO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKG92ZXJsYXlQYW5lLCAnd2lkdGgnLCB3aWR0aCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRml4IHBhbmVsJ3MgbGVmdCwgdG8gYXZvaWQgb3ZlcmZsb3cgb24gdGhlIHJpZ2h0XG4gICAgY29uc3QgbGVmdCA9IG92ZXJsYXlQYW5lLnN0eWxlLmxlZnQ7XG4gICAgaWYgKGlzTm90TmlsT3JCbGFuayhsZWZ0KSAmJiAhbGVmdC5pbmNsdWRlcygnY2FsYygnKSAmJiBsZWZ0LmVuZHNXaXRoKCdweCcpKSB7XG4gICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLmxvZ1ByZWZpeH0gRml4aW5nIHNlbGVjdCBwYW5lbCBsZWZ0LCB0byBhdm9pZCBvdmVyZmxvdyBvbiB0aGUgcmlnaHRgKTtcbiAgICAgIGNvbnN0IHdpZHRoID0gYCR7b3ZlcmxheVBhbmUuY2xpZW50V2lkdGh9cHhgO1xuICAgICAgY29uc3QgZml4TGVmdCA9IGBjYWxjKC0ke3dpZHRofSArIG1pbigke2xlZnR9ICsgJHt3aWR0aH0sIC0zMnB4ICsgMTAwdncpKWA7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKG92ZXJsYXlQYW5lLCAnbGVmdCcsIGZpeExlZnQsIFJlbmRlcmVyU3R5bGVGbGFnczIuSW1wb3J0YW50KTtcbiAgICB9XG5cbiAgICAvLyBGaXggcGFuZWwncyB0b3AsIHRvIGF2b2lkIG92ZXJmbG93IG9uIHRoZSBib3R0b21cbiAgICBjb25zdCB0b3AgPSBvdmVybGF5UGFuZS5zdHlsZS50b3A7XG4gICAgaWYgKGlzTm90TmlsT3JCbGFuayh0b3ApICYmICF0b3AuaW5jbHVkZXMoJ2NhbGMoJykgJiYgdG9wLmVuZHNXaXRoKCdweCcpKSB7XG4gICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLmxvZ1ByZWZpeH0gRml4aW5nIHNlbGVjdCBwYW5lbCB0b3AsIHRvIGF2b2lkIG92ZXJmbG93IG9uIHRoZSBib3R0b21gKTtcbiAgICAgIGNvbnN0IGhlaWdodCA9IGAke292ZXJsYXlQYW5lLmNsaWVudEhlaWdodCB8fCAyNzV9cHhgO1xuICAgICAgY29uc3QgZml4VG9wID0gYGNhbGMoLSR7aGVpZ2h0fSArIG1pbigke3RvcH0gKyAke2hlaWdodH0sIC0zMnB4ICsgMTAwdmgpKWA7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKG92ZXJsYXlQYW5lLCAndG9wJywgZml4VG9wLCBSZW5kZXJlclN0eWxlRmxhZ3MyLkltcG9ydGFudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhY2sgOiBpZiB3ZSBhcmUgaW4gYSBJb25Nb2RhbCwgaXQncyBuZWNlc3NhcnkgdG8gbW92ZSB0aGUgQ2RrT3ZlcmxheSBjb250YWluZXJcbiAgICogICAgIGluIHRoZSBJb25Nb2RhbCB0byBtaWdodCBrZWVwIGZvY3VzIGluIElvblNlYXJjaGJhci5cbiAgICpcbiAgICogQHBhcmFtIHBhbmVsRWxlbWVudFxuICAgKiBAcGFyYW0gb3ZlcmxheVBhbmVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgX2ZpeFNlYXJjaGJhck92ZXJsYXkocGFuZWxFbGVtZW50OiBIVE1MRWxlbWVudCwgb3ZlcmxheVBhbmU6IEhUTUxFbGVtZW50KTogUHJvbWlzZTxTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAoIXRoaXMubWF0U2VsZWN0IHx8ICF0aGlzLmlvblNlYXJjaGJhcikgcmV0dXJuO1xuXG4gICAgY29uc3QgbW9kYWxFbGVtZW50ID0gYXdhaXQgdGhpcy5tb2RhbENvbnRyb2xsZXIuZ2V0VG9wKCk7XG4gICAgaWYgKCFtb2RhbEVsZW1lbnQpIHJldHVybjsgLy8gTm8gbW9kYWw6IHNraXBcblxuICAgIC8vIEdldCB0aGUgQ0RLIG92ZXJsYXkgY29udGFpbmVyXG4gICAgY29uc3Qgb3ZlcmxheUNvbnRhaW5lciA9IGZpbmRQYXJlbnRXaXRoQ2xhc3MocGFuZWxFbGVtZW50LCAnY2RrLW92ZXJsYXktY29udGFpbmVyJyk7XG4gICAgaWYgKCFvdmVybGF5Q29udGFpbmVyKSByZXR1cm47XG4gICAgY29uc3Qgb3JpZ2luYWxQYXJlbnQgPSBvdmVybGF5Q29udGFpbmVyLnBhcmVudEVsZW1lbnQ7XG5cbiAgICAvLyBERUJVR1xuICAgIC8vaWYgKHRoaXMuZGVidWcpXG4gICAgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLmxvZ1ByZWZpeH1Nb3ZpbmcgdGhlIFwiY2RrLW92ZXJsYXlcIiBjb250YWluZXIgZnJvbSB0aGUgXCIke29yaWdpbmFsUGFyZW50Py50YWdOYW1lIHx8ICdib2R5J31cIiB0byB0aGUgXCJpb24tbW9kYWxcIiBjb250YWluZXJgKTtcblxuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQobW9kYWxFbGVtZW50LCBvdmVybGF5Q29udGFpbmVyKTtcblxuICAgIGNvbnN0IF9kb2N1bWVudCA9IHRoaXMuaW5qZWN0b3IuZ2V0KERPQ1VNRU5UKTtcbiAgICBjb25zdCBzaGlmdExlZnQgPSAoX2RvY3VtZW50LmRlZmF1bHRWaWV3LmlubmVyV2lkdGggLSBtb2RhbEVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpIC8gMjtcbiAgICBjb25zdCBzaGlmdFRvcCA9IChfZG9jdW1lbnQuZGVmYXVsdFZpZXcuaW5uZXJIZWlnaHQgLSBtb2RhbEVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KSAvIDI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKG92ZXJsYXlQYW5lLCAnbWFyZ2luLXRvcCcsIGAtJHtzaGlmdFRvcH1weGApO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUob3ZlcmxheVBhbmUsICdtYXJnaW4tbGVmdCcsIGAtJHtzaGlmdExlZnR9cHhgKTtcblxuICAgIC8vIFJldHVybiB0aGUgcmV2ZXJzZSBmdW5jdGlvbiwgdG8gcmVwbGFjZSB0aGUgY29udGFpbmVyIGluIGJvZHlcbiAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbigoKSA9PiB7XG4gICAgICAvLyBERUJVR1xuICAgICAgLy9pZiAodGhpcy5kZWJ1ZylcbiAgICAgIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5sb2dQcmVmaXh9IG1vdmluZyB0aGUgXCJjZGstb3ZlcmxheVwiIGNvbnRhaW5lciBmcm9tIHRoZSBcImlvbi1tb2RhbFwiIHRvIHRoZSBcImJvZHlcIiBjb250YWluZXJgKTtcblxuICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChvcmlnaW5hbFBhcmVudCAvKnRoaXMuZG9jdW1lbnQuYm9keSovLCBvdmVybGF5Q29udGFpbmVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SW5wdXRUZXh0VmFsdWUodmFsdWU6IHN0cmluZywgc2VsZWN0aW9uU3RhcnRJbmRleD86IG51bWJlciwgc2VsZWN0aW9uRW5kSW5kZXg/OiBudW1iZXIsIGRpcmVjdGlvbj86ICdiYWNrd2FyZCcgfCAnZm9yd2FyZCcpIHtcbiAgICAvLyBBcHBseSB0byB0aGUgaW5wdXRbdHlwZT10ZXh0XSBmaWVsZFxuICAgIGlmICh0aGlzLm1hdElucHV0VGV4dD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5tYXRJbnB1dFRleHQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHZhbHVlID8/ICcnO1xuICAgICAgaWYgKGlzTm90TmlsKHNlbGVjdGlvblN0YXJ0SW5kZXgpKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHNlbGVjdElucHV0UmFuZ2UodGhpcy5tYXRJbnB1dFRleHQubmF0aXZlRWxlbWVudCwgc2VsZWN0aW9uU3RhcnRJbmRleCwgc2VsZWN0aW9uRW5kSW5kZXgsIGRpcmVjdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvbkJhY2tzcGFjZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50Py50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcblxuICAgIC8vIElmIHByZXZpZXcgZW5hYmxlZCwgcmVtb3ZlIHNlbGVjdGlvbiB3aGVuIHByZXNzIGJhY2tzcGFjZSAoYnkgZGVmYXVsdCBvbmx5IHRoZSBzZWxlY3Rpb24gd2lsbCBiZSBkZWxldGVkKVxuICAgIGlmICh0aGlzLnByZXZpZXdJbXBsaWNpdFZhbHVlICYmIGlucHV0KSB7XG4gICAgICBjb25zdCBzZWxlY3Rpb25TdGFydCA9IGlucHV0LnNlbGVjdGlvblN0YXJ0O1xuICAgICAgY29uc3Qgc2VsZWN0aW9uRW5kID0gaW5wdXQuc2VsZWN0aW9uRW5kO1xuICAgICAgbGV0IHZhbHVlID0gaW5wdXQudmFsdWU7XG5cbiAgICAgIC8vIE1ha2Ugc3VyZSB0byByZW1vdmUgdGhlIGxhc3QgdHlwZWQgY2hhcmFjdGVyIChieSBkZWZhdWx0IG9ubHkgdGhlIHNlbGVjdGlvbiB3aWxsIGJlIGRlbGV0ZWQpXG4gICAgICBpZiAodGhpcy5faW1wbGljaXRWYWx1ZSAmJiBzZWxlY3Rpb25TdGFydCA+IDAgJiYgc2VsZWN0aW9uU3RhcnQgPCBzZWxlY3Rpb25FbmQgJiYgdmFsdWUubGVuZ3RoID09PSBzZWxlY3Rpb25FbmQpIHtcbiAgICAgICAgLy8gREVCVUdcbiAgICAgICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLmxvZ1ByZWZpeH0gQmFja3NwYWNlIHByZXNzZWQsIGFkZGl0aW9uYWwgdGV4dCBmcm9tIHRoZSBpbXBsaWNpdCB2YWx1ZWApO1xuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgLy8gRGVmaW5lIHRoZSBuZXcgdmFsdWUgYnkgcmVtb3ZpbmcgdGhlIHRleHQgaW4gdGhlIGFkanVzdGVkIHJhbmdlXG4gICAgICAgIGNvbnN0IG5ld0NhcmV0UG9zaXRpb24gPSBzZWxlY3Rpb25TdGFydCAtIDE7XG4gICAgICAgIHZhbHVlID0gbmV3Q2FyZXRQb3NpdGlvbiA+IDAgPyB2YWx1ZS5zbGljZSgwLCBuZXdDYXJldFBvc2l0aW9uKSA6ICcnO1xuXG4gICAgICAgIC8vIGNsZWFuIGltcGxpY2l0IHZhbHVlXG4gICAgICAgIHRoaXMuX2ltcGxpY2l0VmFsdWUgPSBudWxsO1xuXG4gICAgICAgIC8vIEFwcGx5IHRoZSBuZXcgdmFsdWUgYW5kIHVwZGF0ZSB0aGUgc2VsZWN0aW9uXG4gICAgICAgIHRoaXMuc2V0SW5wdXRUZXh0VmFsdWUodmFsdWUsIG5ld0NhcmV0UG9zaXRpb24sIHNlbGVjdGlvbkVuZCk7XG5cbiAgICAgICAgLy8gTWFyayBjb21wb25lbnQgYXMgbG9hZGluZ1xuICAgICAgICB0aGlzLm1hcmtBc0xvYWRpbmcoKTtcblxuICAgICAgICAvLyBSZWxvYWQgaXRlbXNcbiAgICAgICAgdGhpcy5yZWxvYWRJdGVtcyh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRW1pdFxuICAgIHRoaXMua2V5ZG93bkJhY2tzcGFjZS5lbWl0KGV2ZW50KTtcbiAgfVxufVxuIiwiPGlvbi1ncmlkIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmcgZmllbGQtY29udGFpbmVyXCI+XG4gIDxpb24tcm93PlxuICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgIDwhLS0gcmVhZG9ubHkgLS0+XG4gICAgICBAaWYgKF9yZWFkb25seSkge1xuICAgICAgICA8bWF0LWZvcm0tZmllbGRcbiAgICAgICAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsIHwgYXNGbG9hdExhYmVsVHlwZVwiXG4gICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgICAgICAgW3N1YnNjcmlwdFNpemluZ109XCJzdWJzY3JpcHRTaXppbmdcIlxuICAgICAgICAgIFt0aXRsZV09XCJfZGlzcGxheVZhbHVlXCJcbiAgICAgICAgICBjbGFzcz1cIm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgbWF0UHJlZml4PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdFByZWZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgQGlmIChmbG9hdExhYmVsICE9PSAnbmV2ZXInICYmICEhcGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgcGxhY2Vob2xkZXIgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICB9XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGhpZGRlbiB0eXBlPVwidGV4dFwiIHJlYWRvbmx5PVwidHJ1ZVwiIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiIC8+XG4gICAgICAgICAgPGlvbi10ZXh0Pnt7IHZhbHVlIHwgdG9TdHJpbmc6IGRpc3BsYXlXaXRoIH19PC9pb24tdGV4dD5cbiAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRTdWZmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gaGludHMgLS0+XG4gICAgICAgICAgQGlmICghZm9ybUNvbnRyb2wuaW52YWxpZCkge1xuICAgICAgICAgICAgPG1hdC1oaW50PlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWF0SGludFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L21hdC1oaW50PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8bWF0LWZvcm0tZmllbGRcbiAgICAgICAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsIHwgYXNGbG9hdExhYmVsVHlwZVwiXG4gICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgICAgICAgW3N1YnNjcmlwdFNpemluZ109XCJzdWJzY3JpcHRTaXppbmdcIlxuICAgICAgICAgIFt0aXRsZV09XCJfZGlzcGxheVZhbHVlXCJcbiAgICAgICAgICBbaGlkZVJlcXVpcmVkTWFya2VyXT1cImhpZGVSZXF1aXJlZE1hcmtlclwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IG1hdFByZWZpeD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRQcmVmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIEBpZiAoKGxhYmVsIHx8IHBsYWNlaG9sZGVyKSAmJiBmbG9hdExhYmVsICE9PSAnbmV2ZXInKSB7XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IGxhYmVsIHx8IHBsYWNlaG9sZGVyIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgfVxuICAgICAgICAgIDwhLS0gTW9iaWxlIG9yIE11bHRpcGxlICh1c2UgPG1hdC1zZWxlY3Q+KSAtLT5cbiAgICAgICAgICBAaWYgKG1vYmlsZSB8fCBtdWx0aXBsZSkge1xuICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgI21hdFNlbGVjdFxuICAgICAgICAgICAgICBoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yXG4gICAgICAgICAgICAgIGRpc2FibGVPcHRpb25DZW50ZXJpbmdcbiAgICAgICAgICAgICAgW2Rpc2FibGVSaXBwbGVdPVwiZGlzYWJsZVJpcHBsZVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAgIFt0YWJpbmRleF09XCJfdGFiaW5kZXhcIlxuICAgICAgICAgICAgICBbcGFuZWxDbGFzc109XCJwYW5lbENsYXNzXCJcbiAgICAgICAgICAgICAgW3BhbmVsV2lkdGhdPVwicGFuZWxXaWR0aCB8fCBfZGVmYXVsdFBhbmVsV2lkdGhcIlxuICAgICAgICAgICAgICAoZm9jdXMpPVwiZmlsdGVyTWF0U2VsZWN0Rm9jdXNFdmVudCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGJsdXIpPVwiZmlsdGVyTWF0U2VsZWN0Qmx1ckV2ZW50KCRldmVudClcIlxuICAgICAgICAgICAgICAoa2V5ZG93bi5lc2NhcGUpPVwia2V5ZG93bkVzY2FwZS5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwia2V5dXBFbnRlci5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICBbY29tcGFyZVdpdGhdPVwiZXF1YWxzXCJcbiAgICAgICAgICAgICAgW211bHRpcGxlXT1cIm11bHRpcGxlXCJcbiAgICAgICAgICAgICAgW3R5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWxdPVwiZGVib3VuY2VUaW1lICogMTBcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgICAgICBbY2xhc3MubWF0LW1kYy1zZWxlY3QtYXJyb3ctaGlkZGVuXT1cIiFtb2JpbGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyPnt7IHZhbHVlIHwgdG9TdHJpbmc6IGRpc3BsYXlXaXRoIH19PC9tYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgIDwhLS0gU2VhcmNoIGJhciAtLT5cbiAgICAgICAgICAgICAgQGlmIChzaG93U2VhcmNoQmFyKSB7XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRncm91cCBjbGFzcz1cIm1hdC1zZWxlY3Qtc2VhcmNoYmFyXCIgW2NsYXNzLm1hdC1zZWxlY3Qtc2VhcmNoYmFyLXN0aWNreV09XCJzdGlja3lTZWFyY2hCYXJcIj5cbiAgICAgICAgICAgICAgICAgIDwhLS0gRklYTUUgb24gaU9TIGRldmljZXMsIHdoZW4gYW5pbWF0ZWQ9XCJ0cnVlXCIsIHRoZW4gdGhlIHNlYXJjaCBpY29uIG92ZXJsYXAgdGhlIHBsYWNlaG9sZGVyIC0tPlxuICAgICAgICAgICAgICAgICAgPGlvbi1zZWFyY2hiYXJcbiAgICAgICAgICAgICAgICAgICAgI2lvblNlYXJjaGJhclxuICAgICAgICAgICAgICAgICAgICBpbnB1dG1vZGU9XCJzZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICBhbmltYXRlZD1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgc2hvd0NsZWFyQnV0dG9uPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtkZWJvdW5jZV09XCJkZWJvdW5jZVRpbWVcIlxuICAgICAgICAgICAgICAgICAgICAoaW9uQ2xlYXIpPVwibWFya0FzTG9hZGluZygpXCJcbiAgICAgICAgICAgICAgICAgICAgKGlvbklucHV0KT1cImlvblNlYXJjaEJhckNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInQ09NTU9OLkJUTl9TRUFSQ0gnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgID48L2lvbi1zZWFyY2hiYXI+XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0Z3JvdXA+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPCEtLSBIZWFkZXJzIC0tPlxuICAgICAgICAgICAgICA8aW9uLXJvd1xuICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0LXNlbGVjdC1oZWFkZXIgY29sdW1uIGlvbi1uby1wYWRkaW5nXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MubXVsdGlwbGVdPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5tYXQtc2VsZWN0LXNlYXJjaGJhci1zdGlja3ldPVwic2hvd1NlYXJjaEJhciAmJiBzdGlja3lTZWFyY2hCYXJcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQGZvciAoYXR0ciBvZiBkaXNwbGF5QXR0cmlidXRlczsgdHJhY2sgYXR0cjsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgIDxpb24tY29sIFtzaXplXT1cImRpc3BsYXlDb2x1bW5TaXplc1tpXVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIFtpbm5lckhUTUxdPVwiZGlzcGxheUNvbHVtbk5hbWVzW2ldIHwgdHJhbnNsYXRlXCI+PC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2lvbi1yb3c+XG5cbiAgICAgICAgICAgICAgPCEtLSBOb25lIG9wdGlvbiAtLT5cbiAgICAgICAgICAgICAgQGlmICghcmVxdWlyZWQgJiYgIW11bHRpcGxlICYmICFjbGVhcmFibGUpIHtcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgICAgICAgICAgICA8aW9uLXJvdyBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsPjxpIHRyYW5zbGF0ZT5DT01NT04uRU1QVFlfT1BUSU9OPC9pPjwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBpZiAoXyRmaWx0ZXJlZEl0ZW1zIHwgcHVzaDogJ3VzZXJCbG9ja2luZyc7IGFzIGl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgPCEtLSBObyBpdGVtIG9wdGlvbiAtLT5cbiAgICAgICAgICAgICAgICBAaWYgKGl0ZW1zIHwgaXNFbXB0eUFycmF5KSB7XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cImlvbi1wYWRkaW5nIHRleHQtaXRhbGljXCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGk+e3sgbm9SZXN1bHRNZXNzYWdlIHwgdHJhbnNsYXRlIH19PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIDwhLS0gT3B0aW9ucyAtLT5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbXM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiaXRlbVwiIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW9uLXJvdyBbY2xhc3NMaXN0XT1cIml0ZW0uY2xhc3NMaXN0IHx8ICcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChwYXRoIG9mIGRpc3BsYXlBdHRyaWJ1dGVzOyB0cmFjayBwYXRoOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWNvbCBbc2l6ZV09XCJkaXNwbGF5Q29sdW1uU2l6ZXNbaV1cIiBjbGFzcz1cImlvbi1hbGlnbi1zZWxmLWNlbnRlciBpb24tdGV4dC13cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHJvcGVydHlHZXQ6IHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhpZ2hsaWdodDogeyBzZWFyY2g6IGlvblNlYXJjaGJhcj8udmFsdWUsIHdpdGhBY2NlbnQ6IGhpZ2hsaWdodEFjY2VudCB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8IS0tIE1vcmUgaXRlbSAtLT5cbiAgICAgICAgICAgICAgICBAaWYgKF9tb3JlSXRlbXNDb3VudCkge1xuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKG5nSW5pdCk9XCJfaW5pdE1hdFNlbGVjdEluZmluaXRlU2Nyb2xsKClcIiBjbGFzcz1cImlvbi1wYWRkaW5nXCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tc2tlbGV0b24tdGV4dCBbYW5pbWF0ZWRdPVwidHJ1ZVwiIHN0eWxlPVwid2lkdGg6IDEwMCVcIj48L2lvbi1za2VsZXRvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBAZWxzZSBpZiAoKF9kaXNwbGF5VmFsdWUgfCBzdHJMZW5ndGgpIDwgc3VnZ2VzdExlbmd0aFRocmVzaG9sZCkge1xuICAgICAgICAgICAgICAgIDwhLS0gbmVlZCBtb3JlIGNoYXJhY3RlciAtLT5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cImlvbi1wYWRkaW5nIHRleHQtaXRhbGljXCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICB7eyAnSU5GTy5QTEVBU0VfVFlQRV9NT1JFX0NIQVJBQ1RFUlMnIHwgdHJhbnNsYXRlOiB7IG1pbkxlbmd0aDogc3VnZ2VzdExlbmd0aFRocmVzaG9sZCB9IH19XG4gICAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDwhLS0gbG9hZGluZyBzcGlubmVyIC0tPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwiaW9uLXBhZGRpbmdcIiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICAgIDxpb24tc2tlbGV0b24tdGV4dCBbYW5pbWF0ZWRdPVwidHJ1ZVwiIHN0eWxlPVwid2lkdGg6IDEwMCVcIj48L2lvbi1za2VsZXRvbi10ZXh0PlxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8IS0tIGZvb3RlciAtLT5cbiAgICAgICAgICAgICAgQGlmIChpdGVtQ291bnQ7IGFzIGNvdW50KSB7XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gY2xhc3M9XCJtYXQtb3B0aW9uLWZvb3RlciBtYXQtYXV0b2NvbXBsZXRlLWZvb3RlciBpb24tbm8tcGFkZGluZ1wiIGRpc2FibGVkPlxuICAgICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNsYXNzPVwiaW9uLWZsb2F0LWVuZCBpb24tcGFkZGluZy1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGk+e3sgJ0NPTU1PTi5SRVNVTFRfQ09VTlQnIHwgdHJhbnNsYXRlOiB7IGNvdW50OiBjb3VudCB9IH19PC9pPlxuICAgICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDwhLS0gZGVza3RvcCAodXNlIG1hdC1hdXRvY29tcGxldGUpIC0tPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICNtYXRJbnB1dFRleHRcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZVwiXG4gICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVQb3NpdGlvbl09XCJtYXRBdXRvY29tcGxldGVQb3NpdGlvblwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCIobGFiZWwgfHwgZmxvYXRMYWJlbCA9PT0gJ25ldmVyJykgJiYgcGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBbYXBwQXV0b2ZvY3VzXT1cImF1dG9mb2N1c1wiXG4gICAgICAgICAgICAgIFt0YWJpbmRleF09XCJfdGFiaW5kZXhcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tlZC5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAoZm9jdXMpPVwiZmlsdGVySW5wdXRUZXh0Rm9jdXNFdmVudCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGJsdXIpPVwiZmlsdGVySW5wdXRUZXh0Qmx1ckV2ZW50KCRldmVudClcIlxuICAgICAgICAgICAgICAoa2V5ZG93bi5lc2NhcGUpPVwia2V5ZG93bkVzY2FwZS5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAoa2V5ZG93bi5iYWNrc3BhY2UpPVwib25CYWNrc3BhY2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJrZXl1cEVudGVyLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChrZXl1cC5hcnJvd0Rvd24pPVwiIWF1dG9jb21wbGV0ZS5zaG93UGFuZWwgJiYgZHJvcEJ1dHRvbkNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPCEtLSBhdXRvY29tcGxldGUgLS0+XG4gICAgICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZVxuICAgICAgICAgICAgICAjYXV0b2NvbXBsZXRlPVwibWF0QXV0b2NvbXBsZXRlXCJcbiAgICAgICAgICAgICAgW2F1dG9BY3RpdmVGaXJzdE9wdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2hpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3JdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtkaXNwbGF5V2l0aF09XCJkaXNwbGF5V2l0aFwiXG4gICAgICAgICAgICAgIFtjbGFzc109XCJwYW5lbENsYXNzXCJcbiAgICAgICAgICAgICAgW3BhbmVsV2lkdGhdPVwicGFuZWxXaWR0aFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlUmlwcGxlXT1cImRpc2FibGVSaXBwbGVcIlxuICAgICAgICAgICAgICAob3B0aW9uU2VsZWN0ZWQpPVwib25PcHRpb25TZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPCEtLSBIZWFkZXJzIC0tPlxuICAgICAgICAgICAgICA8aW9uLXJvdyBjbGFzcz1cIm1hdC1hdXRvY29tcGxldGUtaGVhZGVyIGNvbHVtbiBpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGF0dHIgb2YgZGlzcGxheUF0dHJpYnV0ZXM7IHRyYWNrIGF0dHI7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICA8aW9uLWNvbCBbc2l6ZV09XCJkaXNwbGF5Q29sdW1uU2l6ZXNbaV1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBbaW5uZXJIVE1MXT1cImRpc3BsYXlDb2x1bW5OYW1lc1tpXSB8IHRyYW5zbGF0ZVwiPjwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9pb24tcm93PlxuICAgICAgICAgICAgICBAaWYgKF8kZmlsdGVyZWRJdGVtcyB8IHB1c2g6ICd1c2VyQmxvY2tpbmcnOyBhcyBpdGVtcykge1xuICAgICAgICAgICAgICAgIDwhLS0gTm8gaXRlbSBvcHRpb24gLS0+XG4gICAgICAgICAgICAgICAgQGlmIChpdGVtcyB8IGlzRW1wdHlBcnJheSkge1xuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gY2xhc3M9XCJpb24tcGFkZGluZyB0ZXh0LWl0YWxpY1wiIGRpc2FibGVkPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxpPnt7IG5vUmVzdWx0TWVzc2FnZSB8IHRyYW5zbGF0ZSB9fTwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICA8IS0tIE9wdGlvbnMgLS0+XG4gICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGl0ZW1zOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkXT1cIml0ZW0gPT09IF9zZWxlY3RlZEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGlvbi1yb3cgW2NsYXNzTGlzdF09XCJpdGVtLmNsYXNzTGlzdCB8fCAnJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAocGF0aCBvZiBkaXNwbGF5QXR0cmlidXRlczsgdHJhY2sgcGF0aDsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1jb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCJkaXNwbGF5Q29sdW1uU2l6ZXNbaV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJ0ZXh0LmlubmVyVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpb24tYWxpZ24tc2VsZi1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHByb3BlcnR5R2V0OiBwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhpZ2hsaWdodFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaDogbWF0SW5wdXRUZXh0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aEFjY2VudDogaGlnaGxpZ2h0QWNjZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8IS0tIE1vcmUgaXRlbSAtLT5cbiAgICAgICAgICAgICAgICBAaWYgKF9tb3JlSXRlbXNDb3VudCkge1xuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKG5nSW5pdCk9XCJfaW5pdEF1dG9jb21wbGV0ZUluZmluaXRlU2Nyb2xsKClcIiBjbGFzcz1cImlvbi1wYWRkaW5nXCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tc2tlbGV0b24tdGV4dCBbYW5pbWF0ZWRdPVwidHJ1ZVwiIHN0eWxlPVwid2lkdGg6IDEwMCVcIj48L2lvbi1za2VsZXRvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBAZWxzZSBpZiAoKF9kaXNwbGF5VmFsdWUgfCBzdHJMZW5ndGgpIDwgc3VnZ2VzdExlbmd0aFRocmVzaG9sZCkge1xuICAgICAgICAgICAgICAgIDwhLS0gTmVlZCBtb3JlIGNoYXJhY3RlcnMgLS0+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gY2xhc3M9XCJpb24tcGFkZGluZyB0ZXh0LWl0YWxpY1wiIGRpc2FibGVkPlxuICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAge3sgJ0lORk8uUExFQVNFX1RZUEVfTU9SRV9DSEFSQUNURVJTJyB8IHRyYW5zbGF0ZTogeyBtaW5MZW5ndGg6IHN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQgfSB9fVxuICAgICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8IS0tIExvYWRpbmcgc3Bpbm5lciAtLT5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cImlvbi1wYWRkaW5nXCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgICA8aW9uLXNrZWxldG9uLXRleHQgW2FuaW1hdGVkXT1cInRydWVcIiBzdHlsZT1cIndpZHRoOiAxMDAlXCI+PC9pb24tc2tlbGV0b24tdGV4dD5cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICA8IS0tIGZvb3RlciAtLT5cbiAgICAgICAgICAgICAgQGlmIChpdGVtQ291bnQ7IGFzIGNvdW50KSB7XG4gICAgICAgICAgICAgICAgPGlvbi1yb3cgY2xhc3M9XCJtYXQtYXV0b2NvbXBsZXRlLWZvb3RlciBpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjbGFzcz1cImlvbi1mbG9hdC1lbmQgaW9uLXBhZGRpbmctZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGk+e3sgJ0NPTU1PTi5SRVNVTFRfQ09VTlQnIHwgdHJhbnNsYXRlOiB7IGNvdW50OiBjb3VudCB9IH19PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8IS0tXG4gICAgICAgICAgTk9URSA6XG4gICAgICAgICAgLSBcInNlbGVjdElucHV0Q29udGVudCgkZXZlbnQpIHx8IG9uRm9jdXMuZW1pdCgkZXZlbnQpXCIgOiBjYWxsIG9uRm9jdXMgb25seSB3aGVuIHRvIHRoZSBpbnB1dCBpcyBlbXB0eSAobm90aGluZyB0byBzZWxlY3QpXG4gICAgICAgICAgLS0+XG4gICAgICAgICAgPGRpdiBtYXRTdWZmaXg+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWF0U3VmZml4VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBAaWYgKGZvcm1Db250cm9sLmhhc0Vycm9yKCdyZXF1aXJlZCcpKSB7XG4gICAgICAgICAgICA8bWF0LWVycm9yIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9SRVFVSVJFRDwvbWF0LWVycm9yPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGZvcm1Db250cm9sLmhhc0Vycm9yKCdlbnRpdHknKSkge1xuICAgICAgICAgICAgPG1hdC1lcnJvciB0cmFuc2xhdGU+RVJST1IuRklFTERfSU5WQUxJRDwvbWF0LWVycm9yPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWF0RXJyb3JUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwhLS0gSGludHMgLS0+XG4gICAgICAgICAgQGlmICghZm9ybUNvbnRyb2wuaW52YWxpZCkge1xuICAgICAgICAgICAgPG1hdC1oaW50PlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWF0SGludFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L21hdC1oaW50PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIH1cbiAgICA8L2lvbi1jb2w+XG4gICAgPGlvbi1jb2wgc2l6ZT1cImF1dG9cIiBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0QWZ0ZXJdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvaW9uLWNvbD5cbiAgPC9pb24tcm93PlxuPC9pb24tZ3JpZD5cblxuPG5nLXRlbXBsYXRlICNtYXRQcmVmaXhUZW1wbGF0ZT5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdFByZWZpeF1cIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21hdFN1ZmZpeFRlbXBsYXRlPlxuICBAaWYgKCFtb2JpbGUpIHtcbiAgICA8YnV0dG9uXG4gICAgICBtYXRTdWZmaXhcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJ0b2dnbGVTaG93UGFuZWwoJGV2ZW50KVwiXG4gICAgICBbaGlkZGVuXT1cImRpc2FibGVkXCJcbiAgICAgIFt0aXRsZV09XCJkcm9wQnV0dG9uVGl0bGUgfHwgJycgfCB0cmFuc2xhdGVcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj57eyBtb2JpbGUgPyAnYXJyb3dfZHJvcF9kb3duJyA6ICdrZXlib2FyZF9hcnJvd19kb3duJyB9fTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIH1cbiAgQGlmIChjbGVhcmFibGUpIHtcbiAgICA8YnV0dG9uXG4gICAgICBtYXRTdWZmaXhcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJjbGVhclZhbHVlKCRldmVudClcIlxuICAgICAgW2hpZGRlbl09XCJkaXNhYmxlZCB8fCAhZm9ybUNvbnRyb2wudmFsdWVcIlxuICAgICAgW3RpdGxlXT1cImNsZWFyQnV0dG9uVGl0bGUgfHwgJycgfCB0cmFuc2xhdGVcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIH1cblxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0U3VmZml4XVwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbWF0RXJyb3JUZW1wbGF0ZT5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwibWF0LWVycm9yLFttYXRFcnJvcl1cIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21hdEhpbnRUZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC1oaW50LXdyYXBwZXJcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJtYXQtaGludDpub3QoW2FsaWduPSdlbmQnXSksW21hdEhpbnRdXCI+PC9uZy1jb250ZW50PlxuICAgIDxkaXYgY2xhc3M9XCJtYXQtbWRjLWZvcm0tZmllbGQtaGludC1zcGFjZXJcIj48L2Rpdj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJtYXQtaGludFthbGlnbj0nZW5kJ11cIj48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
1240
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuYXV0b2NvbXBsZXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlL21hdGVyaWFsLmF1dG9jb21wbGV0ZS50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2F1dG9jb21wbGV0ZS9tYXRlcmlhbC5hdXRvY29tcGxldGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLFVBQVUsRUFFVixLQUFLLEVBQ0wsZUFBZSxFQUdmLFFBQVEsRUFDUixNQUFNLEVBRU4sbUJBQW1CLEVBQ25CLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQTRDLGlCQUFpQixFQUFzQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3SCxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEcsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0ksT0FBTyxFQUNMLHNCQUFzQixFQUN0QixtQkFBbUIsRUFDbkIsYUFBYSxFQUNiLEtBQUssRUFDTCxZQUFZLEVBQ1osUUFBUSxFQUNSLGVBQWUsRUFDZixjQUFjLEVBQ2QsZUFBZSxFQUNmLGNBQWMsRUFDZCxRQUFRLEdBQ1QsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsVUFBVSxFQUFnQixrQkFBa0IsRUFBRSxnQkFBZ0IsRUFB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QkFBdEMsTUFBTTt1QkFBQyxnQkFBZ0I7Z0JBQ0ssZ0JBQWdCO3NCQUE1QyxNQUFNO3VCQUFDLG1CQUFtQjtnQkFDSixVQUFVO3NCQUFoQyxNQUFNO3VCQUFDLGFBQWE7Z0JBRU0sZUFBZTtzQkFBekMsTUFBTTt1QkFBQyxpQkFBaUI7Z0JBRUQsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQUNLLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYztnQkFDRSxZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ0csWUFBWTtzQkFBdkMsU0FBUzt1QkFBQyxlQUFlO2dCQUNTLG1CQUFtQjtzQkFBckQsU0FBUzt1QkFBQyxzQkFBc0I7Z0JBbUJwQixNQUFNO3NCQUFsQixLQUFLO2dCQVlzQyxRQUFRO3NCQUFuRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQVN6QixRQUFRO3NCQUFwQixLQUFLO2dCQVNPLEtBQUs7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBib29sZWFuQXR0cmlidXRlLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIG51bWJlckF0dHJpYnV0ZSxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFJlbmRlcmVyMixcbiAgUmVuZGVyZXJTdHlsZUZsYWdzMixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtR3JvdXBEaXJlY3RpdmUsIE5HX1ZBTFVFX0FDQ0VTU09SLCBVbnR5cGVkRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGlzT2JzZXJ2YWJsZSwgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBtZXJnZU1hcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwLCB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBGZXRjaE1vcmVGbiwgTG9hZFJlc3VsdCwgU3VnZ2VzdEZuIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHtcbiAgY2hhbmdlQ2FzZVRvVW5kZXJzY29yZSxcbiAgZmluZFBhcmVudFdpdGhDbGFzcyxcbiAgaXNCbGFua1N0cmluZyxcbiAgaXNOaWwsXG4gIGlzTmlsT3JCbGFuayxcbiAgaXNOb3ROaWwsXG4gIGlzTm90TmlsQm9vbGVhbixcbiAgaXNOb3ROaWxPYmplY3QsXG4gIGlzTm90TmlsT3JCbGFuayxcbiAgaXNOb3ROaWxTdHJpbmcsXG4gIHRvTnVtYmVyLFxufSBmcm9tICcuLi8uLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgZm9jdXNJbnB1dCwgSW5wdXRFbGVtZW50LCBzZWxlY3RJbnB1dENvbnRlbnQsIHNlbGVjdElucHV0UmFuZ2UgfSBmcm9tICcuLi8uLi9pbnB1dHMnO1xuaW1wb3J0IHsgZmlyc3ROb3ROaWxQcm9taXNlIH0gZnJvbSAnLi4vLi4vb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHsgQXBwRmxvYXRMYWJlbFR5cGUsIERpc3BsYXlGbiwgRXF1YWxzRm4gfSBmcm9tICcuLi8uLi9mb3JtL2ZpZWxkLm1vZGVsJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UsIFN1YnNjcmlwdFNpemluZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0U2VsZWN0LCBNYXRTZWxlY3RDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlLCBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50LCBNYXRBdXRvY29tcGxldGVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7IGZyb21TY3JvbGxFbmRFdmVudCB9IGZyb20gJy4uLy4uL2V2ZW50cyc7XG5pbXBvcnQgeyBJb25TZWFyY2hiYXIsIE1vZGFsQ29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IGlzTW9iaWxlIH0gZnJvbSAnLi4vLi4vcGxhdGZvcm1zJztcbmltcG9ydCB7IHN1Z2dlc3RGcm9tQXJyYXkgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBTZWFyY2hiYXJDaGFuZ2VFdmVudERldGFpbCB9IGZyb20gJ0Bpb25pYy9jb3JlL2Rpc3QvdHlwZXMvY29tcG9uZW50cy9zZWFyY2hiYXIvc2VhcmNoYmFyLWludGVyZmFjZSc7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVGaWVsZFV0aWxzIH0gZnJvbSAnLi9tYXRlcmlhbC5hdXRvY29tcGxldGUudXRpbHMnO1xuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlRmllbGRDb25maWcgfSBmcm9tICcuL21hdGVyaWFsLmF1dG9jb21wbGV0ZS5jb25maWcnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBERUZBVUxUX0pPSU5fUFJPUEVSVElFU19TRVBBUkFUT1IgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUmVnRXhwVXRpbHMgfSBmcm9tICcuLi8uLi9yZWdleHBzJztcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuZXhwb3J0IGludGVyZmFjZSBNYXRBdXRvY29tcGxldGVGaWVsZFNlbGVjdENoYW5nZSB7XG4gIHNvdXJjZTogTWF0U2VsZWN0IHwgTWF0QXV0b2NvbXBsZXRlO1xuICB2YWx1ZTogYW55O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdtYXQtYXV0b2NvbXBsZXRlLWZpZWxkJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWF0ZXJpYWwuYXV0b2NvbXBsZXRlLnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICcuL21hdGVyaWFsLmF1dG9jb21wbGV0ZS5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE1hdEF1dG9jb21wbGV0ZUZpZWxkKSxcbiAgICB9LFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTWF0QXV0b2NvbXBsZXRlRmllbGQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgSW5wdXRFbGVtZW50LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIHByaXZhdGUgX29uQ2hhbmdlQ2FsbGJhY2s6IChfOiBhbnkpID0+IHZvaWQgPSBub29wO1xuICBwcml2YXRlIF9vblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IG5vb3A7XG5cbiAgcHJpdmF0ZSBfb25GZXRjaE1vcmVDYWxsYmFjazogRmV0Y2hNb3JlRm48TG9hZFJlc3VsdDxhbnk+PjtcbiAgcHJpdmF0ZSBfaW1wbGljaXRWYWx1ZTogYW55O1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgX2l0ZW1zU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgX29wZW5lZFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIF8kZmlsdGVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgX2l0ZW1Db3VudDogbnVtYmVyO1xuICBwcml2YXRlIF9yZWxvYWQkID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG4gIHByb3RlY3RlZCBfcmVhZG9ubHkgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIF90YWJpbmRleDogbnVtYmVyO1xuICBwcm90ZWN0ZWQgXyRpbnB1dEl0ZW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIF8kZmlsdGVyZWRJdGVtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBfc2VsZWN0ZWRJdGVtOiBhbnk7XG4gIHByb3RlY3RlZCBfZGlzcGxheVZhbHVlID0gJyc7XG4gIHByb3RlY3RlZCBfbW9yZUl0ZW1zQ291bnQ6IG51bWJlcjtcbiAgcHJvdGVjdGVkIF9mZXRjaE1vcmUkID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbiAgcHJvdGVjdGVkIF9kZWZhdWx0UGFuZWxXaWR0aDogc3RyaW5nID0gbnVsbDtcbiAgcHJvdGVjdGVkIF9mb2N1c2VkID0gZmFsc2U7XG5cbiAgQElucHV0KCkgZXF1YWxzOiBFcXVhbHNGbjtcbiAgQElucHV0KCkgbG9nUHJlZml4ID0gJ1ttYXQtYXV0b2NvbXBsZXRlXSAnO1xuICBASW5wdXQoKSBmb3JtQ29udHJvbDogVW50eXBlZEZvcm1Db250cm9sO1xuICBASW5wdXQoKSBmb3JtQ29udHJvbE5hbWU6IHN0cmluZyA9IG51bGw7XG4gIEBJbnB1dCgpIGZsb2F0TGFiZWw6IEFwcEZsb2F0TGFiZWxUeXBlID0gJ2F1dG8nO1xuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nID0gbnVsbDtcbiAgQElucHV0KCkgYXBwZWFyYW5jZTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZTtcbiAgQElucHV0KCkgc3Vic2NyaXB0U2l6aW5nOiBTdWJzY3JpcHRTaXppbmc7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHN1Z2dlc3RGbjogU3VnZ2VzdEZuPGFueSwgYW55PjtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHJlcXVpcmVkID0gZmFsc2U7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBoaWRlUmVxdWlyZWRNYXJrZXIgPSBmYWxzZTtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIG1vYmlsZTogYm9vbGVhbjtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNsZWFyYWJsZSA9IGZhbHNlO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBkZWJvdW5jZVRpbWU6IG51bWJlciA9IG51bGw7XG4gIEBJbnB1dCgpIGRpc3BsYXlTZXBhcmF0b3I6IHN0cmluZyB8IG51bGw7XG4gIEBJbnB1dCgpIGRpc3BsYXlXaXRoOiBEaXNwbGF5Rm4gfCBudWxsO1xuICBASW5wdXQoKSBkaXNwbGF5QXR0cmlidXRlczogc3RyaW5nW107XG4gIEBJbnB1dCgpIGRpc3BsYXlDb2x1bW5TaXplczogKG51bWJlciB8ICdhdXRvJyB8IHVuZGVmaW5lZClbXTtcbiAgQElucHV0KCkgZGlzcGxheUNvbHVtbk5hbWVzOiBzdHJpbmdbXTtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGhpZ2hsaWdodEFjY2VudDogYm9vbGVhbjtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNob3dBbGxPbkZvY3VzOiBib29sZWFuO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd1BhbmVsT25Gb2N1czogYm9vbGVhbjtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHJlbG9hZEl0ZW1zT25Gb2N1czogYm9vbGVhbjtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNsZWFySW52YWxpZFZhbHVlT25CbHVyOiBib29sZWFuO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgYXV0b2ZvY3VzID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvbmZpZzogTWF0QXV0b2NvbXBsZXRlRmllbGRDb25maWc7XG4gIEBJbnB1dCgpIGkxOG5QcmVmaXggPSAnUkVGRVJFTlRJQUwuJztcbiAgQElucHV0KCkgbm9SZXN1bHRNZXNzYWdlID0gJ0NPTU1PTi5OT19SRVNVTFQnO1xuICBASW5wdXQoKSBwYW5lbENsYXNzOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHBhbmVsV2lkdGg6IHN0cmluZztcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGRpc2FibGVSaXBwbGUgPSBmYWxzZTtcbiAgQElucHV0KCkgbWF0QXV0b2NvbXBsZXRlUG9zaXRpb246ICdhdXRvJyB8ICdhYm92ZScgfCAnYmVsb3cnO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgbXVsdGlwbGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGZldGNoTW9yZVRocmVzaG9sZCA9ICcxNSUnO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBzdWdnZXN0TGVuZ3RoVGhyZXNob2xkOiBudW1iZXIgPSBudWxsO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd0xvYWRpbmdTcGlubmVyID0gdHJ1ZTtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGRlYnVnID0gZmFsc2U7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93U2VhcmNoQmFyID0gdHJ1ZTtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHN0aWNreVNlYXJjaEJhciA9IGZhbHNlO1xuICBASW5wdXQoKSBhcHBseUltcGxpY2l0VmFsdWU6IGJvb2xlYW4gfCAoKHZhbHVlOiBhbnkpID0+IGJvb2xlYW4pO1xuICBASW5wdXQoKSBkcm9wQnV0dG9uVGl0bGU6IHN0cmluZztcbiAgQElucHV0KCkgY2xlYXJCdXR0b25UaXRsZTogc3RyaW5nO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgdHJpbVNlYXJjaFRleHQ6IGJvb2xlYW47XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzcGxpdFNlYXJjaFRleHQ6IGJvb2xlYW47XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzZWxlY3RJbnB1dENvbnRlbnRPbkZvY3VzOiBib29sZWFuO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBzZWxlY3RJbnB1dENvbnRlbnRPbkZvY3VzRGVsYXk6IG51bWJlcjtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHByZXZpZXdJbXBsaWNpdFZhbHVlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgcGFuZWxDbGFzcyBpbnN0ZWFkXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ2NsYXNzJyB9KSBzZXQgY2xhc3NMaXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnBhbmVsQ2xhc3MgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBjbGFzc0xpc3QoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wYW5lbENsYXNzO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG4gIEBPdXRwdXQoJ2NsaWNrJykgY2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG4gIEBPdXRwdXQoJ2JsdXInKSBibHVycmVkID0gbmV3IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PigpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcbiAgQE91dHB1dCgnZm9jdXMnKSBmb2N1c2VkID0gbmV3IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PigpO1xuICBAT3V0cHV0KCkgZHJvcEJ1dHRvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4odHJ1ZSk7XG4gIEBPdXRwdXQoJ2tleWRvd24uZXNjYXBlJykga2V5ZG93bkVzY2FwZSA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG4gIEBPdXRwdXQoJ2tleWRvd24uYmFja3NwYWNlJykga2V5ZG93bkJhY2tzcGFjZSA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG4gIEBPdXRwdXQoJ2tleXVwLmVudGVyJykga2V5dXBFbnRlciA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG5cbiAgQE91dHB1dCgnc2VsZWN0aW9uQ2hhbmdlJykgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxNYXRBdXRvY29tcGxldGVGaWVsZFNlbGVjdENoYW5nZT4oKTtcblxuICBAVmlld0NoaWxkKCdtYXRTZWxlY3QnKSBtYXRTZWxlY3Q6IE1hdFNlbGVjdDtcbiAgQFZpZXdDaGlsZCgnaW9uU2VhcmNoYmFyJykgaW9uU2VhcmNoYmFyOiBJb25TZWFyY2hiYXI7XG4gIEBWaWV3Q2hpbGQoJ21hdElucHV0VGV4dCcpIG1hdElucHV0VGV4dDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZChNYXRBdXRvY29tcGxldGUpIGF1dG9jb21wbGV0ZTogTWF0QXV0b2NvbXBsZXRlO1xuICBAVmlld0NoaWxkKE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIpIGF1dG9jb21wbGV0ZVRyaWdnZXI6IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcm90ZWN0ZWQgZWw6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJvdGVjdGVkIG1vZGFsQ29udHJvbGxlcjogTW9kYWxDb250cm9sbGVyLFxuICAgIHByb3RlY3RlZCByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZm9ybUdyb3VwRGlyOiBGb3JtR3JvdXBEaXJlY3RpdmVcbiAgKSB7fVxuXG4gIGdldCBpdGVtQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbUNvdW50O1xuICB9XG5cbiAgZ2V0IGNhbkZldGNoTW9yZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fb25GZXRjaE1vcmVDYWxsYmFjayAmJiB0aGlzLl9tb3JlSXRlbXNDb3VudCA+IDA7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZmlsdGVyKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodmFsdWUgIT09IHRoaXMuXyRmaWx0ZXIudmFsdWUpIHtcbiAgICAgIC8vIERFQlVHXG4gICAgICAvL2NvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyBcIiBTZXR0aW5nIGZpbHRlcjpcIiwgdmFsdWUpO1xuICAgICAgdGhpcy5fJGZpbHRlci5uZXh0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgZmlsdGVyKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuXyRmaWx0ZXIudmFsdWU7XG4gIH1cblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2V0IHJlYWRvbmx5KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fcmVhZG9ubHkgPSB2YWx1ZTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0IHJlYWRvbmx5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkb25seTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCB0YWJpbmRleCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fdGFiaW5kZXggPSB2YWx1ZTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0IHRhYmluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmluZGV4O1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGl0ZW1zKHZhbHVlOiBPYnNlcnZhYmxlPGFueVtdPiB8IGFueVtdKSB7XG4gICAgLy8gUmVtb3ZlIHByZXZpb3VzIHN1YnNjcmlwdGlvbiBvbiBpdGVtcywgKGlmIGV4aXRzKVxuICAgIGlmICh0aGlzLl9pdGVtc1N1YnNjcmlwdGlvbikge1xuICAgICAgY29uc29sZS53YXJuKHRoaXMubG9nUHJlZml4ICsgJyBJdGVtcyByZWNlaXZlZCB0d2ljZSAhJyk7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb24ucmVtb3ZlKHRoaXMuX2l0ZW1zU3Vic2NyaXB0aW9uKTtcbiAgICAgIHRoaXMuX2l0ZW1zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgaWYgKGlzT2JzZXJ2YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuX2l0ZW1zU3Vic2NyaXB0aW9uID0gdmFsdWUuc3Vic2NyaWJlKCh2KSA9PiB0aGlzLl8kaW5wdXRJdGVtcy5uZXh0KHYpKTtcbiAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQodGhpcy5faXRlbXNTdWJzY3JpcHRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodmFsdWUgIT09IHRoaXMuXyRpbnB1dEl0ZW1zLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuXyRpbnB1dEl0ZW1zLm5leHQodmFsdWUgYXMgYW55W10pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBpdGVtcygpOiBPYnNlcnZhYmxlPGFueVtdPiB8IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fJGlucHV0SXRlbXM7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQ29udHJvbC52YWx1ZTtcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZG9ubHkgfHwgdGhpcy5mb3JtQ29udHJvbC5kaXNhYmxlZDtcbiAgfVxuXG4gIGdldCBlbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5fcmVhZG9ubHkgJiYgdGhpcy5mb3JtQ29udHJvbC5lbmFibGVkO1xuICB9XG5cbiAgZ2V0IGxvYWRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzTmlsKHRoaXMuXyRmaWx0ZXJlZEl0ZW1zLnZhbHVlKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZm9ybUNvbnRyb2wgPVxuICAgICAgdGhpcy5mb3JtQ29udHJvbCA/PyAodGhpcy5mb3JtQ29udHJvbE5hbWUgJiYgdGhpcy5mb3JtR3JvdXBEaXIgJiYgKHRoaXMuZm9ybUdyb3VwRGlyLmZvcm0uZ2V0KHRoaXMuZm9ybUNvbnRyb2xOYW1lKSBhcyBVbnR5cGVkRm9ybUNvbnRyb2wpKTtcbiAgICBpZiAoIXRoaXMuZm9ybUNvbnRyb2wpIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgbWFuZGF0b3J5IGF0dHJpYnV0ZSAnZm9ybUNvbnRyb2wnIG9yICdmb3JtQ29udHJvbE5hbWUnIGluIDxtYXQtYXV0b2NvbXBsZXRlLWZpZWxkPi5cIik7XG5cbiAgICAvLyBDb25maWd1cmF0aW9uIGZyb20gY29uZmlnIG9iamVjdFxuICAgIGlmICh0aGlzLmNvbmZpZykge1xuICAgICAgdGhpcy5zdWdnZXN0Rm4gPSB0aGlzLnN1Z2dlc3RGbiA/PyB0aGlzLmNvbmZpZy5zdWdnZXN0Rm47XG4gICAgICBpZiAoIXRoaXMuc3VnZ2VzdEZuICYmIHRoaXMuY29uZmlnLml0ZW1zKSB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLmNvbmZpZy5pdGVtcztcbiAgICAgIH1cbiAgICAgIHRoaXMuZmlsdGVyID0gdGhpcy5maWx0ZXIgPz8gdGhpcy5jb25maWcuZmlsdGVyO1xuICAgICAgdGhpcy5kaXNwbGF5QXR0cmlidXRlcyA9IHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMgPz8gdGhpcy5jb25maWcuYXR0cmlidXRlcztcbiAgICAgIHRoaXMuZGlzcGxheUNvbHVtblNpemVzID0gdGhpcy5kaXNwbGF5Q29sdW1uU2l6ZXMgPz8gdGhpcy5jb25maWcuY29sdW1uU2l6ZXM7XG4gICAgICB0aGlzLmRpc3BsYXlDb2x1bW5OYW1lcyA9IHRoaXMuZGlzcGxheUNvbHVtbk5hbWVzID8/IHRoaXMuY29uZmlnLmNvbHVtbk5hbWVzO1xuICAgICAgdGhpcy5kaXNwbGF5U2VwYXJhdG9yID0gdGhpcy5kaXNwbGF5U2VwYXJhdG9yID8/IHRoaXMuY29uZmlnLmRpc3BsYXlXaXRoU2VwYXJhdG9yO1xuICAgICAgdGhpcy5kaXNwbGF5V2l0aCA9IHRoaXMuZGlzcGxheVdpdGggPz8gdGhpcy5jb25maWcuZGlzcGxheVdpdGg7XG4gICAgICB0aGlzLnNwbGl0U2VhcmNoVGV4dCA9IHRoaXMuc3BsaXRTZWFyY2hUZXh0ID8/IHRoaXMuY29uZmlnLnNwbGl0U2VhcmNoVGV4dDtcbiAgICAgIHRoaXMudHJpbVNlYXJjaFRleHQgPSB0aGlzLnRyaW1TZWFyY2hUZXh0ID8/IHRoaXMuY29uZmlnLnRyaW1TZWFyY2hUZXh0O1xuICAgICAgdGhpcy5lcXVhbHMgPSB0aGlzLmVxdWFscyA/PyB0aGlzLmNvbmZpZy5lcXVhbHM7XG4gICAgICB0aGlzLm11bHRpcGxlID0gdGhpcy5tdWx0aXBsZSA/PyB0aGlzLmNvbmZpZy5tdWx0aXBsZTtcbiAgICAgIHRoaXMubW9iaWxlID0gdGhpcy5tb2JpbGUgPz8gdGhpcy5jb25maWcubW9iaWxlO1xuICAgICAgdGhpcy5zdWdnZXN0TGVuZ3RoVGhyZXNob2xkID0gdGhpcy5zdWdnZXN0TGVuZ3RoVGhyZXNob2xkID8/IHRoaXMuY29uZmlnLnN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQ7XG4gICAgICB0aGlzLnNob3dBbGxPbkZvY3VzID0gdGhpcy5zaG93QWxsT25Gb2N1cyA/PyB0aGlzLmNvbmZpZy5zaG93QWxsT25Gb2N1cztcbiAgICAgIHRoaXMuc2hvd1BhbmVsT25Gb2N1cyA9IHRoaXMuc2hvd1BhbmVsT25Gb2N1cyA/PyB0aGlzLmNvbmZpZy5zaG93UGFuZWxPbkZvY3VzO1xuICAgICAgdGhpcy5yZWxvYWRJdGVtc09uRm9jdXMgPSB0aGlzLnJlbG9hZEl0ZW1zT25Gb2N1cyA/PyB0aGlzLmNvbmZpZy5yZWxvYWRJdGVtc09uRm9jdXM7XG4gICAgICB0aGlzLnBhbmVsQ2xhc3MgPSB0aGlzLnBhbmVsQ2xhc3MgPz8gdGhpcy5jb25maWcucGFuZWxDbGFzcyA/PyB0aGlzLmNvbmZpZy5jbGFzcztcbiAgICAgIHRoaXMucGFuZWxXaWR0aCA9IHRoaXMucGFuZWxXaWR0aCA/PyB0aGlzLmNvbmZpZy5wYW5lbFdpZHRoO1xuICAgICAgdGhpcy5kZWJvdW5jZVRpbWUgPSB0aGlzLmRlYm91bmNlVGltZSA/PyB0aGlzLmNvbmZpZy5kZWJvdW5jZVRpbWU7XG4gICAgICB0aGlzLmhpZ2hsaWdodEFjY2VudCA9IHRoaXMuaGlnaGxpZ2h0QWNjZW50ID8/IHRoaXMuY29uZmlnLmhpZ2hsaWdodEFjY2VudDtcbiAgICAgIHRoaXMuYXBwbHlJbXBsaWNpdFZhbHVlID0gdGhpcy5hcHBseUltcGxpY2l0VmFsdWUgPz8gdGhpcy5jb25maWcuYXBwbHlJbXBsaWNpdFZhbHVlO1xuICAgICAgdGhpcy5zZWxlY3RJbnB1dENvbnRlbnRPbkZvY3VzID0gdGhpcy5zZWxlY3RJbnB1dENvbnRlbnRPbkZvY3VzID8/IHRoaXMuY29uZmlnLnNlbGVjdElucHV0Q29udGVudE9uRm9jdXM7XG4gICAgICB0aGlzLnNlbGVjdElucHV0Q29udGVudE9uRm9jdXNEZWxheSA9IHRoaXMuc2VsZWN0SW5wdXRDb250ZW50T25Gb2N1c0RlbGF5ID8/IHRoaXMuY29uZmlnLnNlbGVjdElucHV0Q29udGVudE9uRm9jdXNEZWxheTtcbiAgICAgIHRoaXMuY2xlYXJJbnZhbGlkVmFsdWVPbkJsdXIgPSB0aGlzLmNsZWFySW52YWxpZFZhbHVlT25CbHVyID8/IHRoaXMuY29uZmlnLmNsZWFySW52YWxpZFZhbHVlT25CbHVyO1xuICAgICAgdGhpcy5wcmV2aWV3SW1wbGljaXRWYWx1ZSA9IHRoaXMucHJldmlld0ltcGxpY2l0VmFsdWUgPz8gdGhpcy5jb25maWcucHJldmlld0ltcGxpY2l0VmFsdWU7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCB2YWx1ZXNcbiAgICB0aGlzLnJlcXVpcmVkID0gaXNOb3ROaWxCb29sZWFuKHRoaXMucmVxdWlyZWQpXG4gICAgICA/IHRoaXMucmVxdWlyZWRcbiAgICAgIDogdGhpcy5mb3JtQ29udHJvbC52YWxpZGF0b3IgPT09IFZhbGlkYXRvcnMucmVxdWlyZWQgfHwgaXNCbGFua1N0cmluZyh0aGlzLnJlcXVpcmVkKTtcbiAgICB0aGlzLm11bHRpcGxlID0gdGhpcy5tdWx0aXBsZSA/PyBmYWxzZTtcbiAgICB0aGlzLm1vYmlsZSA9IHRoaXMubW9iaWxlID8/IGlzTW9iaWxlKHdpbmRvdyk7XG4gICAgdGhpcy5kaXNwbGF5QXR0cmlidXRlcyA9IHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMgPz8gdGhpcy5maWx0ZXI/LmF0dHJpYnV0ZXMgPz8gWydsYWJlbCcsICduYW1lJ107XG4gICAgdGhpcy5kaXNwbGF5U2VwYXJhdG9yID0gdGhpcy5kaXNwbGF5U2VwYXJhdG9yID8/IERFRkFVTFRfSk9JTl9QUk9QRVJUSUVTX1NFUEFSQVRPUjtcbiAgICB0aGlzLmRpc3BsYXlXaXRoID0gdGhpcy5kaXNwbGF5V2l0aCB8fCBNYXRBdXRvY29tcGxldGVGaWVsZFV0aWxzLmNyZWF0ZURpc3BsYXlGbih0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzLCB0aGlzLm11bHRpcGxlLCB0aGlzLmRpc3BsYXlTZXBhcmF0b3IpO1xuICAgIHRoaXMuc3BsaXRTZWFyY2hUZXh0ID0gdGhpcy5zcGxpdFNlYXJjaFRleHQgPz8gdHJ1ZTtcbiAgICB0aGlzLnRyaW1TZWFyY2hUZXh0ID0gdGhpcy50cmltU2VhcmNoVGV4dCA/PyAhdGhpcy5tb2JpbGU7IC8vIFRydWUgYnkgZGVmYXVsdCBvbiBkZXNrdG9wLCBidXQgZmFsc2UgaW4gbW9iaWxlIChub3QgbmVlZCBpbiB0aGUgc2VhcmNoYmFyKVxuICAgIHRoaXMuZXF1YWxzID0gdGhpcy5lcXVhbHMgfHwgTWF0QXV0b2NvbXBsZXRlRmllbGRVdGlscy5kZWZhdWx0RXF1YWxzO1xuXG4gICAgdGhpcy5kaXNwbGF5Q29sdW1uU2l6ZXMgPVxuICAgICAgdGhpcy5kaXNwbGF5Q29sdW1uU2l6ZXMgfHxcbiAgICAgIC8vIGlmIG9ubHkgY29sdW1uOiBhdXRvIHNpemVcbiAgICAgICh0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzLmxlbmd0aCA9PT0gMSAmJiBbdW5kZWZpbmVkXSkgfHxcbiAgICAgIC8vIENvbXB1dGVkIGNvbHVtbiBzaXplOlxuICAgICAgLy8gLSBpZiBsYWJlbCB0aGVuIGNvbCBzaXplID0gMlxuICAgICAgLy8gLSBpZiByYW5rT3JkZXIgdGhlbiBjb2wgc2l6ZSA9IDFcbiAgICAgIC8vIC0gZXNlID0+IGF1dG8gc2l6ZVxuICAgICAgdGhpcy5kaXNwbGF5QXR0cmlidXRlcy5tYXAoKGF0dHIpID0+IGF0dHIgJiYgKGF0dHIuZW5kc1dpdGgoJ2xhYmVsJykgPyAzIDogYXR0ci5lbmRzV2l0aCgncmFua09yZGVyJykgPyAyIDogdW5kZWZpbmVkKSk7XG4gICAgdGhpcy5kaXNwbGF5Q29sdW1uTmFtZXMgPSB0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzLm1hcChcbiAgICAgIChhdHRyLCBpbmRleCkgPT4gKHRoaXMuZGlzcGxheUNvbHVtbk5hbWVzICYmIHRoaXMuZGlzcGxheUNvbHVtbk5hbWVzW2luZGV4XSkgfHwgdGhpcy5pMThuUHJlZml4ICsgY2hhbmdlQ2FzZVRvVW5kZXJzY29yZShhdHRyKS50b1VwcGVyQ2FzZSgpXG4gICAgKTtcbiAgICBjb25zdCBwYW5lbENsYXNzZXMgPSB0aGlzLnBhbmVsQ2xhc3M/LnNwbGl0KC9cXHMrLyk7XG4gICAgdGhpcy5wYW5lbFdpZHRoID1cbiAgICAgIHRoaXMucGFuZWxXaWR0aCA/P1xuICAgICAgKHBhbmVsQ2xhc3NlcyAmJlxuICAgICAgICAoKHBhbmVsQ2xhc3Nlcy5pbmNsdWRlcygnbWluLXdpZHRoLW1lZGl1bScpICYmICczMDBweCcpIHx8XG4gICAgICAgICAgKHBhbmVsQ2xhc3Nlcy5pbmNsdWRlcygnbWluLXdpZHRoLWxhcmdlJykgJiYgJzQwMHB4JykgfHxcbiAgICAgICAgICAocGFuZWxDbGFzc2VzLmluY2x1ZGVzKCdtaW4td2lkdGgteGxhcmdlJykgJiYgJzQ1MHB4JykgfHxcbiAgICAgICAgICAocGFuZWxDbGFzc2VzLmluY2x1ZGVzKCdtaW4td2lkdGgtODB2dycpICYmICc4MHZ3JykgfHxcbiAgICAgICAgICAoKHBhbmVsQ2xhc3Nlcy5pbmNsdWRlcygnZnVsbC13aWR0aCcpIHx8IHBhbmVsQ2xhc3Nlcy5pbmNsdWRlcygnZnVsbC1zaXplJykpICYmICcxMDB2dycpKSk7XG4gICAgdGhpcy5zdWdnZXN0TGVuZ3RoVGhyZXNob2xkID0gdGhpcy5zdWdnZXN0TGVuZ3RoVGhyZXNob2xkID8/IDA7XG4gICAgdGhpcy5zaG93QWxsT25Gb2N1cyA9IHRoaXMuc2hvd0FsbE9uRm9jdXMgPz8gKHRoaXMubW9iaWxlICYmIHRoaXMuc3VnZ2VzdExlbmd0aFRocmVzaG9sZCA8PSAwKTtcbiAgICB0aGlzLnNob3dQYW5lbE9uRm9jdXMgPSB0aGlzLnNob3dQYW5lbE9uRm9jdXMgPz8gdHJ1ZTtcbiAgICB0aGlzLnJlbG9hZEl0ZW1zT25Gb2N1cyA9IHRoaXMucmVsb2FkSXRlbXNPbkZvY3VzID8/IGZhbHNlO1xuICAgIHRoaXMuZGVib3VuY2VUaW1lID0gdGhpcy5kZWJvdW5jZVRpbWUgPz8gKHRoaXMubW9iaWxlID8gNjUwIDogMjUwKTtcbiAgICB0aGlzLmhpZ2hsaWdodEFjY2VudCA9IHRoaXMuaGlnaGxpZ2h0QWNjZW50ID8/IGZhbHNlO1xuICAgIHRoaXMubWF0QXV0b2NvbXBsZXRlUG9zaXRpb24gPSB0aGlzLm1hdEF1dG9jb21wbGV0ZVBvc2l0aW9uID8/ICdhdXRvJztcbiAgICB0aGlzLmFwcGx5SW1wbGljaXRWYWx1ZSA9IHRoaXMuYXBwbHlJbXBsaWNpdFZhbHVlID8/ICF0aGlzLm1vYmlsZTtcbiAgICB0aGlzLnNlbGVjdElucHV0Q29udGVudE9uRm9jdXMgPSB0aGlzLnNlbGVjdElucHV0Q29udGVudE9uRm9jdXMgPz8gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3RJbnB1dENvbnRlbnRPbkZvY3VzRGVsYXkgPSB0aGlzLnNlbGVjdElucHV0Q29udGVudE9uRm9jdXNEZWxheSA/PyAwO1xuICAgIHRoaXMuY2xlYXJJbnZhbGlkVmFsdWVPbkJsdXIgPSB0aGlzLmNsZWFySW52YWxpZFZhbHVlT25CbHVyID8/IGZhbHNlO1xuICAgIHRoaXMucHJldmlld0ltcGxpY2l0VmFsdWUgPSB0aGlzLnByZXZpZXdJbXBsaWNpdFZhbHVlID8/IGZhbHNlO1xuXG4gICAgLy8gTm8gc3VnZ2VzdEZuOiBmaWx0ZXIgb24gdGhlIGdpdmVuIGl0ZW1zXG4gICAgaWYgKCF0aGlzLnN1Z2dlc3RGbikge1xuICAgICAgY29uc3Qgc3VnZ2VzdEZyb21BcnJheUZuOiBTdWdnZXN0Rm48YW55LCBhbnk+ID0gYXN5bmMgKHZhbHVlLCBmaWx0ZXIpID0+XG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIENhbGxpbmcgc3VnZ2VzdEZyb21BcnJheSB3aXRoIHZhbHVlPScsIHZhbHVlKTtcblxuICAgICAgICBzdWdnZXN0RnJvbUFycmF5KHRoaXMuXyRpbnB1dEl0ZW1zLnZhbHVlLCB2YWx1ZSwge1xuICAgICAgICAgIHNlYXJjaEF0dHJpYnV0ZXM6IHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMsXG4gICAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICB9KTtcblxuICAgICAgLy8gV2FpdCAob25jZSkgdGhhdCBpdGVtcyBhcmUgbG9hZGVkLCB0aGVuIGNhbGwgc3VnZ2VzdCBmcm9tIGFycmF5IGZuXG4gICAgICB0aGlzLnN1Z2dlc3RGbiA9IGFzeW5jICh2YWx1ZSwgZmlsdGVyKSA9PiB7XG4gICAgICAgIGlmIChpc05pbCh0aGlzLl8kaW5wdXRJdGVtcy52YWx1ZSkpIHtcbiAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyBcIiBXYWl0aW5nIGl0ZW1zIHRvIGJlIHNldC4uLlwiKTtcblxuICAgICAgICAgIGF3YWl0IGZpcnN0Tm90TmlsUHJvbWlzZSh0aGlzLl8kaW5wdXRJdGVtcyk7XG5cbiAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyBcIiBSZWNlaXZlZCBpdGVtczpcIiwgdGhpcy5pbnB1dEl0ZW1zJC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdWdnZXN0Rm4gPSBzdWdnZXN0RnJvbUFycmF5Rm47XG4gICAgICAgIHJldHVybiB0aGlzLnN1Z2dlc3RGbih2YWx1ZSwgZmlsdGVyKTsgLy8gTG9vcFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBTZW5kIHZhbHVlIHRvIHN1Z2dlc3Qgd2hlbiA6XG4gICAgLy8gLSBpcyBuaWwgYW5kICcqJywgYW5kIG5vIG1pbiBsZW5ndGggdGhyZXNob2xkXG4gICAgLy8gLSBpcyBub3QgbmlsIGFuZCBub3QgYSBzdHJpbmcgdHlwZSAoZS5nLiBvYmplY3QpXG4gICAgLy8gLSBpcyBub3QgbmlsIGFuZCBpcyBhIHN0cmluZywgYW5kIGhhcyBlbm91Z2ggY2hhcmFjdGVyXG4gICAgY29uc3QgdGhyZXNob2xkRmlsdGVyRm4gPSAodmFsdWU6IGFueSkgPT5cbiAgICAgIHRoaXMuc3VnZ2VzdExlbmd0aFRocmVzaG9sZCA8PSAwIHx8XG4gICAgICAoaXNOb3ROaWwodmFsdWUpICYmICghKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHx8ICh2YWx1ZSAhPT0gJyonICYmIHZhbHVlLnRyaW0oKS5sZW5ndGggPj0gdGhpcy5zdWdnZXN0TGVuZ3RoVGhyZXNob2xkKSkpO1xuXG4gICAgY29uc3QgZmlsdGVyZWRJdGVtc0NoYW5nZXMgPSBtZXJnZShcbiAgICAgIC8vIFJlbG9hZCBldmVudCAobm8gZGlzdGluY3RVbnRpbENoYW5nZWQoKSBwaXBlLCB0byBmb3JjZSByZWxvYWQgZXZlbiBpZiBzYW1lIHZhbHVlKVxuICAgICAgdGhpcy5fcmVsb2FkJC5waXBlKFxuICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5lbmFibGVkKSxcbiAgICAgICAgZmlsdGVyKHRocmVzaG9sZEZpbHRlckZuKSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuc2hvd0xvYWRpbmdTcGlubmVyICYmIHRoaXMubWFya0FzTG9hZGluZygpKVxuICAgICAgKSxcblxuICAgICAgLy8gU2VhcmNoIHRleHQgKG5vIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkgYmVjYXVzZSBvZiB0aGUgZGVib3VuY2VUaW1lKCkgcGlwZSlcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgIGZpbHRlcigodmFsdWUpID0+IHRoaXMuZW5hYmxlZCAmJiBpc05vdE5pbFN0cmluZyh2YWx1ZSkpLFxuICAgICAgICAvLyBNYXJrIGFzIGxvYWRpbmcgKHRvIHNob3cgbG9hZGluZyBzcGlubmVyKSAtIGFzIHNvb24gYXMgcG9zc2libGUsIGFuZCBiZWZvcmUgZGVib3VuY2VUaW1lXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLnNob3dMb2FkaW5nU3Bpbm5lciAmJiB0aGlzLm1hcmtBc0xvYWRpbmcoKSksXG4gICAgICAgIC8vIEZpbHRlciBpZiBub3QgZW5vdWdoIGNoYXJhY3RlclxuICAgICAgICBmaWx0ZXIoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKCh2YWx1ZT8ubGVuZ3RoIHx8IDApIDwgdGhpcy5zdWdnZXN0TGVuZ3RoVGhyZXNob2xkKSB7XG4gICAgICAgICAgICAvLyBVcGRhdGUgZGlzcGxheSB2YWx1ZSwgdG8gZW5hYmxlIHRoZSBtZXNzYWdlIFwibm90IGVub3VnaCBjaGFyYWN0ZXJzXCJcbiAgICAgICAgICAgIHRoaXMuX2Rpc3BsYXlWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSksXG4gICAgICAgIC8vIFdhaXQgYSBkZWJvdW5jZSB0aW1lXG4gICAgICAgIGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZSlcbiAgICAgICAgLy8gREVCVUdcbiAgICAgICAgLy8sdGFwKCh2YWx1ZSkgPT4gdGhpcy5kZWJ1ZyAmJiBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBTZWFyY2ggdGV4dCBjaGFuZ2VzOicsIHZhbHVlKSlcbiAgICAgICksXG5cbiAgICAgIC8vIE9iamVjdCBzZXQ6IHVzZSBpdCAobm8gZGlzdGluY3RVbnRpbENoYW5nZWQoKSBwaXBlIG5lZWQpXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICBzdGFydFdpdGg8YW55Pih0aGlzLmZvcm1Db250cm9sLnZhbHVlKSxcbiAgICAgICAgZmlsdGVyKCh2YWx1ZSkgPT4gaXNOb3ROaWxPYmplY3QodmFsdWUpKSxcbiAgICAgICAgdGFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIC8vIERFQlVHXG4gICAgICAgICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgUmVjZWl2ZWQgY29udHJvbCB2YWx1ZSBjaGFuZ2VzOicsIHZhbHVlKTtcblxuICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgZGlzcGxheSB2YWx1ZSAoaWYgbmVlZClcbiAgICAgICAgICBjb25zdCBkaXNwbGF5VmFsdWUgPSB0aGlzLmRpc3BsYXlXaXRoKHZhbHVlKSB8fCAnJztcbiAgICAgICAgICBpZiAodGhpcy5fZGlzcGxheVZhbHVlICE9PSBkaXNwbGF5VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2Rpc3BsYXlWYWx1ZSA9IGRpc3BsYXlWYWx1ZTtcblxuICAgICAgICAgICAgLy8gQXBwbHkgdG8gdGhlIGlucHV0W3R5cGU9dGV4dF0gZmllbGRcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXRUZXh0VmFsdWUodGhpcy5fZGlzcGxheVZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcblxuICAgICAgICAvLyBJZiBtdWx0aXBsZTogZG8gbm90IHJlY29tcHV0ZSBpdGVtcyAob25seSBmb3IgdGhlIGZpcnN0IHRpbWUsIHdoZW4gbG9hZGluZylcbiAgICAgICAgLy8gd2hlbiBmb3JtQ29udHJvbCB2YWx1ZSBjaGFuZ2VzXG4gICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmxvYWRpbmcgfHwgKCF0aGlzLm11bHRpcGxlICYmICF0aGlzLnNob3dBbGxPbkZvY3VzKSlcbiAgICAgICksXG5cbiAgICAgIC8vIE1lcmdlIHNvbWUgb2JzZXJ2YWJsZXMsIHdpdGggYSBjb21tb24gZGlzdGluY3RVbnRpbENoYW5nZWQoKSBwaXBlXG4gICAgICBtZXJnZShcbiAgICAgICAgLy8gT24gZHJvcGRvd24gYnV0dG9uIGNsaWNrIChubyBkZWJvdW5jZVRpbWUpXG4gICAgICAgIHRoaXMuZHJvcEJ1dHRvbkNsaWNrLnBpcGUoZmlsdGVyKChldmVudCkgPT4gIWV2ZW50IHx8ICFldmVudC5kZWZhdWx0UHJldmVudGVkKSksXG4gICAgICAgIC8vIEZvY3VzIG9yIGNsaWNrID0+IExvYWQgYWxsIChubyBkZWJvdW5jZVRpbWUpXG4gICAgICAgIG1lcmdlKHRoaXMuZm9jdXNlZCwgdGhpcy5jbGlja2VkKVxuICAgICAgICAgIC8vIEF2b2lkIHRvbyBtYW55IGNhbGwsIGUuZy4gd2hlbiBmb2N1c2VkIGFuZCBjbGlja2VkXG4gICAgICAgICAgLnBpcGUodGhyb3R0bGVUaW1lKDEwMCkpLFxuICAgICAgICAvLyBERUJVR1xuICAgICAgICAvLy5waXBlKHRhcCgoXykgPT4gdGhpcy5kZWJ1ZyAmJiBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBSZWNlaXZlZCBmb2N1c2VkIG9yIGNsaWNrZWQgZXZlbnQnKSkpLFxuICAgICAgICAvLyBJbnB1dCBpdGVtcyBvciBmaWx0ZXIgY2hhbmdlc1xuICAgICAgICBtZXJnZSh0aGlzLl8kaW5wdXRJdGVtcywgdGhpcy5fJGZpbHRlcikucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMubG9hZGluZylcbiAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgIC8vdGFwKChfKSA9PiB0aGlzLmRlYnVnICYmIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIFJlY2VpdmVkICRpbnB1dEl0ZW1zIG9yIGZpbHRlciBldmVudCcpKVxuICAgICAgICApXG4gICAgICApLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmVuYWJsZWQpLFxuICAgICAgICBtYXAoKCkgPT4gKHRoaXMuc2hvd0FsbE9uRm9jdXMgPyAnKicgOiB0aGlzLmZvcm1Db250cm9sLnZhbHVlKSksXG4gICAgICAgIC8vIERpc3Rpbmd1aXNoIGNoYW5nZXNcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHYxLCB2MikgPT5cbiAgICAgICAgICAvLyBJZiBsb2FkaW5nIChub3QgbG9hZGVkIHlldCksIHNpbXVsYXRlIHRoYXQgdmFsdWUgY2hhbmdlZCB0byBmb3JjZSBsb2FkXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID8gZmFsc2UgOiB2MSA9PT0gdjIgfHwgdGhpcy5lcXVhbHModjEsIHYyKVxuICAgICAgICApLFxuICAgICAgICAvLyBNYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIGNoYXJhY3RlcnNcbiAgICAgICAgZmlsdGVyKHRocmVzaG9sZEZpbHRlckZuKSxcbiAgICAgICAgLy8gREVCVUdcbiAgICAgICAgdGFwKCh2YWx1ZSkgPT4gdGhpcy5kZWJ1ZyAmJiBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBSZWNlaXZlZCB1cGRhdGUgZXZlbnQ6ICcsIHZhbHVlKSlcbiAgICAgIClcbiAgICApLnBpcGUoXG4gICAgICAvLyBTdWdnZXN0IHZhbHVlc1xuICAgICAgbWVyZ2VNYXAoKHZhbHVlKSA9PiB0aGlzLnN1Z2dlc3QodmFsdWUsIHRoaXMuZmlsdGVyKSksXG4gICAgICAvLyBERUJVR1xuICAgICAgLy90YXAoaXRlbXMgPT4gdGhpcy5kZWJ1ZyAmJiBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBSZWNlaXZlZCBmcm9tIHN1Z2dlc3Q6ICcsIGl0ZW1zKSksXG5cbiAgICAgIC8vIFN0b3JlIGltcGxpY2l0IHZhbHVlICh3aWxsIHVzZSBpdCBvbkJsdXIgaWYgbm90IG90aGVyIHZhbHVlIHNlbGVjdGVkKVxuICAgICAgdGFwKChpdGVtcykgPT4gISh0aGlzLm1vYmlsZSB8fCB0aGlzLm11bHRpcGxlKSAmJiB0aGlzLnVwZGF0ZUltcGxpY2l0VmFsdWUoaXRlbXMpKVxuICAgICk7XG5cbiAgICAvLyBGZXRjaCBtb3JlIGV2ZW50c1xuICAgIGNvbnN0IGZldGNoTW9yZUl0ZW1zQ2hhbmdlcyA9IHRoaXMuX2ZldGNoTW9yZSQucGlwZShcbiAgICAgIHRhcCgoZXZlbnQpID0+IGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpKSwgLy8gQXZvaWQgdG8gY2xvc2UgdGhlIG1hdC1zZWxlY3RcbiAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmNhbkZldGNoTW9yZSksXG4gICAgICBtZXJnZU1hcCgoKSA9PiB0aGlzLmZldGNoTW9yZSgpKSxcblxuICAgICAgLy8gREVCVUdcbiAgICAgIC8vdGFwKG1vcmVJdGVtcyA9PiBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBSZWNlaXZlZCBmcm9tIGZldGNoIE1vcmU6ICcsIG1vcmVJdGVtcykpLFxuXG4gICAgICAvLyBDb25jYXQgdG8gZXhpc3RpbmcgaXRlbXNcbiAgICAgIG1hcCgobW9yZUl0ZW1zKSA9PiAodGhpcy5fJGZpbHRlcmVkSXRlbXMudmFsdWUgfHwgW10pLmNvbmNhdChtb3JlSXRlbXMpKVxuICAgICk7XG5cbiAgICAvLyBVcGRhdGUgZmlsdGVyZWQgaXRlbXNcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgbWVyZ2UoXG4gICAgICAgIHRoaXMuXyRpbnB1dEl0ZW1zLFxuXG4gICAgICAgIC8vIFVwZGF0ZSBpdGVtcyBldmVudHNcbiAgICAgICAgZmlsdGVyZWRJdGVtc0NoYW5nZXMsXG5cbiAgICAgICAgLy8gRmV0Y2ggbW9yZSBldmVudHNcbiAgICAgICAgZmV0Y2hNb3JlSXRlbXNDaGFuZ2VzXG4gICAgICApLnN1YnNjcmliZSgoaXRlbXMpID0+IHtcbiAgICAgICAgLy8gTWFrZSBzdXJlIGNvbnRyb2wgdmFsdWUgaXMgaW5zaWRlIChtYXQtc2VsZWN0KVxuICAgICAgICAvLyAob3RoZXJ3aXNlIGN1cnJlbnQgdmFsdWUgd2lsbCB2aXN1YWxseSBkaXNhcHBlYXIpXG4gICAgICAgIGlmIChpdGVtcykge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZTtcbiAgICAgICAgICB0aGlzLl9zZWxlY3RlZEl0ZW0gPSBudWxsO1xuXG4gICAgICAgICAgLy8gSWYgZm9ybSB2YWx1ZSBpcyBtaXNzaW5nOiBhcHBlbmQgdG8gbGlzdFxuICAgICAgICAgIGlmIChpc05vdE5pbCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm11bHRpcGxlICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgIGl0ZW1zID0gaXRlbXMuY29uY2F0KHZhbHVlLmZpbHRlcigodikgPT4gaXRlbXMuZmluZEluZGV4KChpdGVtKSA9PiB0aGlzLmVxdWFscyhpdGVtLCB2KSkgPT09IC0xKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gaXRlbXMuZmluZEluZGV4KChpdGVtKSA9PiB0aGlzLmVxdWFscyhpdGVtLCB2YWx1ZSkpO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgIC8vIEFwcGVuZCBjdXJyZW50IHZhbHVlIHRvIHRoZSBsaXN0LCBpZiBtaXNzaW5nIChtYXQtc2VsZWN0IG9ubHkpXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5tb2JpbGUgfHwgdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtcyA9IGl0ZW1zLmNvbmNhdCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkSXRlbSA9IGl0ZW1zW2luZGV4XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvL2lmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBSZWNlaXZlZCBuZXcgZmlsdGVyZWQgaXRlbXMnLCBpdGVtcyk7XG5cbiAgICAgICAgLy8gRW1pdCBpdGVtc1xuICAgICAgICB0aGlzLl8kZmlsdGVyZWRJdGVtcy5uZXh0KGl0ZW1zKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIEFwcGx5aW5nIGltcGxpY2l0IHZhbHVlLCBvbiBibHVyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMuYmx1cnJlZFxuICAgICAgICAucGlwZShcbiAgICAgICAgICAvLyBTa2lwIGlmIG11bHRpcGxlIChubyBpbXBsaWNpdCB2YWx1ZSkgb3IgZGlzYWJsZVxuICAgICAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy5tdWx0aXBsZSAmJiAhdGhpcy5tb2JpbGUgJiYgdGhpcy5lbmFibGVkKSxcbiAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgIC8vLHRhcChfID0+IHRoaXMuZGVidWcgJiYgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgUmVjZWl2ZWQgYmx1cnJlZCBldmVudCcpKSxcbiAgICAgICAgICBtYXAoKCkgPT4gdGhpcy5mb3JtQ29udHJvbC52YWx1ZSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGxldCBpbnZhbGlkYXRlRmlsdGVyZWRJdGVtcyA9IGZhbHNlO1xuICAgICAgICAgIGxldCBtb3ZlQ2FyZXRUb0JlZ2lubmluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAvL2lmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBBcHBseWluZyBpbXBsaWNpdCB2YWx1ZSBvbiBibHVyJywgdmFsdWUpO1xuXG4gICAgICAgICAgLy8gV2hlbiBsZWF2ZSBjb21wb25lbnQgd2l0aG91dCBvYmplY3QsIHVzZSBpbXBsaWNpdCB2YWx1ZSBpZiA6XG4gICAgICAgICAgLy8gLSBhbiBleHBsaWNpdCB2YWx1ZVxuICAgICAgICAgIC8vIC0gZmllbGQgaXMgbm90IGVtcHR5ICh1c2VyIGZpbGwgc29tZXRoaW5nKVxuICAgICAgICAgIC8vIC0gT1IgZmllbGQgZW1wdHkgYnV0IGlzIHJlcXVpcmVkXG4gICAgICAgICAgaWYgKGlzTm90TmlsKHRoaXMuX2ltcGxpY2l0VmFsdWUpICYmICgodGhpcy5yZXF1aXJlZCAmJiBpc05pbE9yQmxhbmsodmFsdWUpKSB8fCAoaXNOb3ROaWxPckJsYW5rKHZhbHVlKSAmJiB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSkpIHtcbiAgICAgICAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLl9pbXBsaWNpdFZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzUGVuZGluZyh7IGVtaXRFdmVudDogZmFsc2UsIG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSwgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICAgICAgICBpbnZhbGlkYXRlRmlsdGVyZWRJdGVtcyA9IHRoaXMuc2hvd0FsbE9uRm9jdXMgfHwgdGhpcy5yZWxvYWRJdGVtc09uRm9jdXM7XG4gICAgICAgICAgICBtb3ZlQ2FyZXRUb0JlZ2lubmluZyA9IHRydWU7IC8vIE1vdmUgY2FyZXQgdG8gdGhlIGJlZ2lubmluZyAoZml4IGlzc3VlIElNQUdJTkUtNDY5KVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBObyB2YWx1ZSBhbmQgbm8gaW1wbGljaXQgdmFsdWVcbiAgICAgICAgICBlbHNlIGlmIChpc05pbE9yQmxhbmsodmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLndyaXRlVmFsdWUobnVsbCk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1BlbmRpbmcoeyBlbWl0RXZlbnQ6IGZhbHNlLCBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UsIG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBIYXMgdmFsdWUsIGJ1dCBubyBpbXBsaWNpdCB2YWx1ZVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gVmFsdWUgaXMgYSB2YWxpZCBvYmplY3RcbiAgICAgICAgICAgIGlmIChpc05vdE5pbE9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgaW52YWxpZGF0ZUZpbHRlcmVkSXRlbXMgPSB0aGlzLnNob3dBbGxPbkZvY3VzIHx8IHRoaXMucmVsb2FkSXRlbXNPbkZvY3VzO1xuICAgICAgICAgICAgICBtb3ZlQ2FyZXRUb0JlZ2lubmluZyA9IHRydWU7IC8vIE1vdmUgY2FyZXQgdG8gdGhlIGJlZ2lubmluZyAoZml4IGlzc3VlIElNQUdJTkUtNDY5KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSW52YWxpZCB2YWxpZCB2YWx1ZTogY2xlYXIgc2VhcmNoIHRleHRcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuY2xlYXJJbnZhbGlkVmFsdWVPbkJsdXIgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICB0aGlzLndyaXRlVmFsdWUobnVsbCk7XG4gICAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzUGVuZGluZyh7IGVtaXRFdmVudDogZmFsc2UsIG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlLCBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgaW52YWxpZGF0ZUZpbHRlcmVkSXRlbXMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2ltcGxpY2l0VmFsdWUgPSBudWxsOyAvLyByZXNldCB0aGUgaW1wbGljaXQgdmFsdWVcbiAgICAgICAgICB0aGlzLmNsb3NlUGFuZWwoKTsgLy8gQ2xvc2UgcGFuZWxcblxuICAgICAgICAgIC8vIEludmFsaWRhdGUgbG9hZGVkIGl0ZW1zXG4gICAgICAgICAgaWYgKGludmFsaWRhdGVGaWx0ZXJlZEl0ZW1zKSB7XG4gICAgICAgICAgICB0aGlzLm1hcmtBc0xvYWRpbmcoKTsgLy8gU2hvdWxkIGZvcmNlIG5leHQgZm9jdXMgdG8gcmVsb2FkIGl0ZW1zXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gTW92ZSBjYXJldCB0byB0aGUgYmVnaW5uaW5nIChmaXggaXNzdWUgSU1BR0lORS00NjkpXG4gICAgICAgICAgaWYgKG1vdmVDYXJldFRvQmVnaW5uaW5nKSB7XG4gICAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgTW92aW5nIGNhcmV0IHRvIHRoZSBiZWdpbm5pbmcsIG9uIGJsdXInKTtcbiAgICAgICAgICAgIHNlbGVjdElucHV0UmFuZ2UodGhpcy5tYXRJbnB1dFRleHQ/Lm5hdGl2ZUVsZW1lbnQsIDAsIDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gTGlzdGVuIGZvcm0gY29udHJvbCBzdGF0dXMgY2hhbmdlXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc3RhdHVzQ2hhbmdlc1xuICAgICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgICAgICAvLyBVcGRhdGUgY29tcG9uZW50IHN0YXRlXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jaGVja0lmVG91Y2hlZCgpKVxuICAgICk7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5rZXlkb3duRXNjYXBlLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgLy8gQXZvaWQgZm9ybSBvciBwYWdlIHRvIG1hbmFnZSBlc2NhcGUgZXZlbnRcbiAgICAgICAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgIC8vY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArIFwiIENsb3NpbmcgdGhlIHBhbmVsIChrZXlkb3duLmVzY2FwZSlcIik7XG5cbiAgICAgICAgICB0aGlzLmNsb3NlUGFuZWwoKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gU2VsZWN0IGlucHV0IGNvbnRlbnQsIG9uIGZvY3VzIG9yIHByZXNzIGVudGVyXG4gICAgaWYgKHRoaXMuc2VsZWN0SW5wdXRDb250ZW50T25Gb2N1cyAmJiAhdGhpcy5tb2JpbGUgJiYgIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgIG1lcmdlKFxuICAgICAgICAgIHRoaXMuZm9jdXNlZC5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKChldmVudCkgPT4gIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpXG4gICAgICAgICAgICAvL3RhcCgoZXZlbnQpID0+IGV2ZW50LnByZXZlbnREZWZhdWx0KCkpXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0aGlzLmtleXVwRW50ZXIucGlwZShmaWx0ZXIoKCkgPT4gaXNOb3ROaWxPYmplY3QodGhpcy5mb3JtQ29udHJvbC52YWx1ZSkpKVxuICAgICAgICApXG4gICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuc2VsZWN0SW5wdXRDb250ZW50T25Gb2N1c0RlbGF5KSlcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBTZWxlY3RpbmcgaW5wdXQgY29udGVudCAoZm9jdXNlZCknKTtcbiAgICAgICAgICAgIHNlbGVjdElucHV0Q29udGVudCh0aGlzLm1hdElucHV0VGV4dD8ubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVsb2FkSXRlbXNPbkZvY3VzKSB7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICB0aGlzLmZvY3VzZWQucGlwZShmaWx0ZXIoKGV2ZW50KSA9PiAhdGhpcy5sb2FkaW5nICYmICFldmVudC5kZWZhdWx0UHJldmVudGVkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgUmVsb2FkaW5nIGl0ZW1zIChmb2N1c2VkKScpO1xuICAgICAgICAgIHRoaXMucmVsb2FkSXRlbXMoKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuX2ZpeE1hdFNlbGVjdFBvc2l0aW9uQW5kU2VhcmNoYmFyKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICBpZiAodGhpcy5faXRlbXNTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX2l0ZW1zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9vcGVuZWRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX29wZW5lZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLl8kaW5wdXRJdGVtcy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuXyRpbnB1dEl0ZW1zLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fJGZpbHRlcmVkSXRlbXMuY29tcGxldGUoKTtcbiAgICB0aGlzLl8kZmlsdGVyZWRJdGVtcy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX3JlbG9hZCQuY29tcGxldGUoKTtcbiAgICB0aGlzLl8kZmlsdGVyLmNvbXBsZXRlKCk7XG5cbiAgICB0aGlzLmRyb3BCdXR0b25DbGljay5jb21wbGV0ZSgpO1xuICAgIHRoaXMuY2xpY2tlZC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuYmx1cnJlZC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuZm9jdXNlZC5jb21wbGV0ZSgpO1xuICAgIHRoaXMua2V5ZG93bkVzY2FwZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMua2V5dXBFbnRlci5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX2ZldGNoTW9yZSQuY29tcGxldGUoKTtcblxuICAgIHRoaXMuX2ltcGxpY2l0VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5mb3JtQ29udHJvbCA9IG51bGw7XG4gICAgdGhpcy5kaXNwbGF5V2l0aCA9IG51bGw7XG4gICAgdGhpcy5lcXVhbHMgPSBudWxsO1xuICAgIHRoaXMuc3VnZ2VzdEZuID0gbnVsbDtcbiAgICB0aGlzLl8kZmlsdGVyZWRJdGVtcyA9IG51bGw7XG4gICAgdGhpcy5jb25maWcgPSBudWxsO1xuICAgIHRoaXMucGFuZWxDbGFzcyA9IG51bGw7XG5cbiAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gbnVsbDtcbiAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjayA9IG51bGw7XG4gICAgdGhpcy5fb25GZXRjaE1vcmVDYWxsYmFjayA9IG51bGw7XG5cbiAgICAvLyBEZXN0cm95IHRoZSAnYXV0b2NvbXBsZXRlJyBpbnN0YW5jZSwgdG8gYXZvaWQgbWVtb3J5IGxlYWtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZT8ubmdPbkRlc3Ryb3koKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyB0byByZWxvYWQgY29udGVudC4gVXNlZnVsIHdoZW4gZmlsdGVyIGhhcyBiZWVuIGNoYW5nZWQgYnV0IG5vdCBkZXRlY3RlZFxuICAgKi9cbiAgcmVsb2FkSXRlbXModmFsdWU/OiBhbnkpIHtcbiAgICAvLyBERUJVR1xuICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyBcIiBBc2tpbmcgdG8gcmVsb2FkSXRlbXMoKVwiKTtcbiAgICAvLyBGb3JjZSBhIHJlZnJlc2hcbiAgICB0aGlzLl9yZWxvYWQkLm5leHQodmFsdWUgfHwgKHRoaXMuc2hvd0FsbE9uRm9jdXMgJiYgdGhpcy5zdWdnZXN0TGVuZ3RoVGhyZXNob2xkIDw9IDAgPyAnKicgOiB0aGlzLmZvcm1Db250cm9sLnZhbHVlKSk7XG5cbiAgICAvLyBDbGVhciB0aGUgc2VhcmNoIGJhciAoaWYgaGlkZGVuKVxuICAgIGlmICh0aGlzLm1vYmlsZSAmJiAhdGhpcy5tYXRTZWxlY3QucGFuZWxPcGVuICYmIHRoaXMuaW9uU2VhcmNoYmFyKSB7XG4gICAgICB0aGlzLmlvblNlYXJjaGJhci52YWx1ZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgLy8gREVCVUdcbiAgICAvL2lmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBXcml0aW5nIHZhbHVlOiAnLCB2YWx1ZSk7XG5cbiAgICBpZiAodmFsdWUgIT09IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpIHtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIHRoaXMuX2Rpc3BsYXlWYWx1ZSA9IHRoaXMuZGlzcGxheVdpdGgodmFsdWUpO1xuXG4gICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKHZhbHVlKTtcblxuICAgICAgLy8gQ2hlY2sgaWYgbmVlZCB0byB1cGRhdGUgY29udHJvbHNcbiAgICAgIHRoaXMuY2hlY2tJZlRvdWNoZWQoKTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChpc0Rpc2FibGVkICYmIHRoaXMuYXV0b2NvbXBsZXRlPy5pc09wZW4pIHtcbiAgICAgIHRoaXMuY2xvc2VQYW5lbCgpO1xuICAgIH1cbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZm9jdXMoKSB7XG4gICAgaWYgKHRoaXMubWF0U2VsZWN0KSB7XG4gICAgICB0aGlzLm1hdFNlbGVjdC5mb2N1cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb2N1c0lucHV0KHRoaXMubWF0SW5wdXRUZXh0KTtcbiAgICB9XG4gIH1cblxuICBmaWx0ZXJJbnB1dFRleHRGb2N1c0V2ZW50KGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgaWYgKCFldmVudCB8fCBldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICdjYWxsaW5nIGZpbHRlcklucHV0VGV4dEZvY3VzRXZlbnQgLSBldmVudC5kZWZhdWx0UHJldmVudGVkJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWdub3JlIGV2ZW50IGZyb20gbWF0LW9wdGlvblxuICAgIGlmIChldmVudC5yZWxhdGVkVGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZXZlbnQucmVsYXRlZFRhcmdldC50YWdOYW1lID09PSAnTUFULU9QVElPTicpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG5cbiAgICAgIC8vIERFQlVHXG4gICAgICAvL2lmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBDYW5jZWxsaW5nIGZvY3VzIGV2ZW50Jyk7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBBbHJlYWR5IGZvY3VzZWRcbiAgICBpZiAodGhpcy5fZm9jdXNlZCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgdGhpcy5fZm9jdXNlZCA9IHRydWU7XG5cbiAgICAvLyBERUJVR1xuICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIFNlbGVjdCBpbnB1dCBjb250ZW50Jyk7XG4gICAgY29uc3QgaGFzQ29udGVudCA9IGlzTm90TmlsT3JCbGFuaygoZXZlbnQudGFyZ2V0IGFzIGFueSk/LnZhbHVlKTtcblxuICAgIC8vIElmIGNvbWJvIGlzIGVtcHR5LCBvciBpZiBoYXMgY29udGVudCBidXQgc2hvdWxkIGZvcmNlIHRvIHNob3cgcGFuZWwgb24gZm9jdXNcbiAgICBpZiAoIWhhc0NvbnRlbnQgfHwgdGhpcy5zaG93UGFuZWxPbkZvY3VzIHx8IHRoaXMuc2hvd0FsbE9uRm9jdXMpIHtcbiAgICAgIC8vIERFQlVHXG4gICAgICAvL2lmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBFbWl0IGZvY3VzIGV2ZW50Jyk7XG5cbiAgICAgIC8vIE5lZWQgYSBkZWxheSB0byBwcmV2ZW50IGVhcmx5IGZvY3VzIGV2ZW50LCBqdXN0IGFmdGVyIGEgYmx1ciBldmVudCAoc2VlIHN1bWFyaXMgaXNzdWUgLSAyIHBhbmVscyBvcGVuZWQpXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9mb2N1c2VkKSByZXR1cm47IC8vIFNraXAgaWYgYmx1ciBldmVudCByZWNlaXZlZFxuXG4gICAgICAgIHRoaXMuZm9jdXNlZC5lbWl0KGV2ZW50KTtcbiAgICAgIH0sIDEwKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBmaWx0ZXJJbnB1dFRleHRCbHVyRXZlbnQoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcblxuICAgIC8vIERFQlVHXG4gICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgZmlsdGVySW5wdXRUZXh0Qmx1ckV2ZW50JywgZXZlbnQpO1xuXG4gICAgLy8gSWdub3JlIGV2ZW50IGZyb20gbWF0LW9wdGlvblxuICAgIGlmIChcbiAgICAgIChldmVudC5yZWxhdGVkVGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZXZlbnQucmVsYXRlZFRhcmdldC50YWdOYW1lID09PSAnTUFULU9QVElPTicpIHx8XG4gICAgICAvLyBPciBhdXRvY29tcGxldGUgcGFuZWwgaXMgb3BlbiBiZWNhdXNlIGV2ZW50LnJlbGF0ZWRUYXJnZXQgaXMgbnVsbCAoY2YuIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvaXNzdWVzLzI0MTgyKVxuICAgICAgdGhpcy5hdXRvY29tcGxldGU/LmlzT3BlblxuICAgICkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcblxuICAgICAgLy8gREVCVUdcbiAgICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyBcIiBDYW5jZWxsaW5nIGJsdXIgZXZlbnRcIik7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9mb2N1c2VkID0gZmFsc2U7XG5cbiAgICAvLyBOZWVkIGEgZGVsYXkgdG8gcHJldmVudCBlYXJseSBibHVyIGV2ZW50IHdpdGhvdXQgdHJpZ2dlcmluZyBmb3JtQ2hhbmdlIGV2ZW50XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fZm9jdXNlZCkgcmV0dXJuOyAvLyBTa2lwIGlmIGZvY3VzIGFnYWluXG5cbiAgICAgIHRoaXMuYmx1cnJlZC5lbWl0KGV2ZW50KTtcbiAgICB9LCAxMDApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlvblNlYXJjaEJhckNoYW5nZWQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgaWYgKCFldmVudCB8fCBldmVudC5kZWZhdWx0UHJldmVudGVkIHx8ICF0aGlzLm1hdFNlbGVjdC5wYW5lbE9wZW4pIHJldHVybjtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgLy8gR2V0IHRoZSB2YWx1ZSB0byBzZWFyY2hcbiAgICBjb25zdCB2YWx1ZSA9IChldmVudCBhcyBDdXN0b21FdmVudDxTZWFyY2hiYXJDaGFuZ2VFdmVudERldGFpbD4pPy5kZXRhaWwudmFsdWU7XG5cbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArIFwiIFJlY2VpdmVkIDxpb24tc2VhcmNoYmFyPiBjaGFuZ2VzXCIsIHZhbHVlKTtcblxuICAgIC8vIFVwZGF0ZSB0aGUgZGlzcGxheSB2YWx1ZSAoaW4gdGhlIHZpc2libGUgZm9ybSBjb250cm9sKVxuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy5fZGlzcGxheVZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gTWFyayBjb21wb25lbnQgYXMgbG9hZGluZ1xuICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuXG4gICAgLy8gUmVsb2FkIGl0ZW1zXG4gICAgdGhpcy5yZWxvYWRJdGVtcyh2YWx1ZSk7XG5cbiAgICAvLyBUT0RPIEZpbmQgYSB3YXkgdG8gYXZvaWQgbWF0LXNlbGVjdCB0byBnaXZlIGZvY3VzIHRvIGFuIG9wdGlvbiwgd2hlbiB0eXBpbmdcbiAgICAvKmlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLm1hdFNlbGVjdC5fZWxlbWVudFJlZjtcbiAgICB9Ki9cbiAgfVxuXG4gIGZpbHRlck1hdFNlbGVjdEZvY3VzRXZlbnQoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgUmVjZWl2ZWQgPG1hdC1zZWxlY3Q+IGZvY3VzIGV2ZW50JywgZXZlbnQpO1xuXG4gICAgLy8gRW1pdCBldmVudFxuICAgIHRoaXMuZm9jdXNlZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIGZpbHRlck1hdFNlbGVjdEJsdXJFdmVudChldmVudDogRm9jdXNFdmVudCkge1xuICAgIGlmICghZXZlbnQgfHwgZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuXG4gICAgLy8gREVCVUdcbiAgICAvLyBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgXCIgUmVjZWl2ZWQgPG1hdC1zZWxlY3Q+IGJsdXIgZXZlbnRcIiwgZXZlbnQpO1xuXG4gICAgaWYgKFxuICAgICAgZXZlbnQucmVsYXRlZFRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmXG4gICAgICAvLyBJZ25vcmUgZXZlbnQgZnJvbSBtYXQtb3B0aW9uXG4gICAgICAoZXZlbnQucmVsYXRlZFRhcmdldC50YWdOYW1lID09PSAnTUFULU9QVElPTicgfHxcbiAgICAgICAgKGV2ZW50LnJlbGF0ZWRUYXJnZXQudGFnTmFtZSA9PT0gJ0RJVicgJiYgZXZlbnQucmVsYXRlZFRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ21hdC1tZGMtc2VsZWN0LXBhbmVsJykpIHx8IC8vIE5ldyBNREMgdGFnIGFuZCBjbGFzcyBuYW1lIChlcXVpdmFsZW50IHRvIGV2ZW50LnJlbGF0ZWRUYXJnZXQudGFnTmFtZSA9PT0gJ01BVC1PUFRJT04nKVxuICAgICAgICAoZXZlbnQucmVsYXRlZFRhcmdldC50YWdOYW1lID09PSAnSU5QVVQnICYmIGV2ZW50LnJlbGF0ZWRUYXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdzZWFyY2hiYXItaW5wdXQnKSkpXG4gICAgKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyBcIiBDYW5jZWxsaW5nIDxtYXQtc2VsZWN0PiBibHVyIGV2ZW50XCIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9mb2N1c2VkKSB7XG4gICAgICB0aGlzLl9mb2N1c2VkID0gZmFsc2U7XG5cbiAgICAgIHRoaXMuYmx1cnJlZC5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNsZWFyVmFsdWUoZXZlbnQ/OiBFdmVudCkge1xuICAgIHRoaXMuY2xvc2VQYW5lbCgpO1xuICAgIHRoaXMud3JpdGVWYWx1ZShudWxsKTtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMuaW9uU2VhcmNoYmFyKSB7XG4gICAgICB0aGlzLmlvblNlYXJjaGJhci52YWx1ZSA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuICB9XG5cbiAgX2luaXRBdXRvY29tcGxldGVJbmZpbml0ZVNjcm9sbCh0aHJlc2hvbGQ/OiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuYXV0b2NvbXBsZXRlKSByZXR1cm47IC8vIFNraXBcblxuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBJbml0IGF1dG9jb21wbGV0ZSBzY3JvbGwgbGlzdGVuZXInKTtcblxuICAgIGlmICh0aGlzLl9vcGVuZWRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX29wZW5lZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLnJlbW92ZSh0aGlzLl9vcGVuZWRTdWJzY3JpcHRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG9wZW5lZCQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuYXV0b2NvbXBsZXRlLl9pc09wZW4gPyB0aW1lcigwKSA6IHRoaXMuYXV0b2NvbXBsZXRlLm9wZW5lZC5waXBlKGRlYm91bmNlVGltZSgyMDApKTtcbiAgICBjb25zdCBzY3JvbGxFbmQkID0gb3BlbmVkJC5waXBlKFxuICAgICAgbWFwKCgpID0+IHRoaXMuZ2V0QXV0b2NvbXBsZXRlUGFuZWwoKSksXG4gICAgICBmaWx0ZXIoaXNOb3ROaWwpLFxuICAgICAgc3dpdGNoTWFwKChwYW5lbCkgPT4gZnJvbVNjcm9sbEVuZEV2ZW50KHBhbmVsLCB0aHJlc2hvbGQpKSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLmF1dG9jb21wbGV0ZS5jbG9zZWQpXG4gICAgKTtcblxuICAgIC8vIFRyaWdnZXIgZmV0Y2ggbW9yZSwgZW5kIGVuZCBzY3JvbGwgcmVhY2hlZFxuICAgIHRoaXMuX29wZW5lZFN1YnNjcmlwdGlvbiA9IHNjcm9sbEVuZCQuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2ZldGNoTW9yZSQuZW1pdCgpKTtcblxuICAgIC8vIFJlZ2lzdGVyIHN1YnNjcmlwdGlvblxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQodGhpcy5fb3BlbmVkU3Vic2NyaXB0aW9uKTtcbiAgfVxuXG4gIF9pbml0TWF0U2VsZWN0SW5maW5pdGVTY3JvbGwodGhyZXNob2xkPzogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLm1hdFNlbGVjdCkgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgSW5pdCBtYXQtc2VsZWN0IHNjcm9sbCBsaXN0ZW5lcicpO1xuXG4gICAgaWYgKHRoaXMuX29wZW5lZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fb3BlbmVkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb24ucmVtb3ZlKHRoaXMuX29wZW5lZFN1YnNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgY29uc3Qgb3BlbmVkJDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5tYXRTZWxlY3QucGFuZWxPcGVuID8gdGltZXIoMCkgOiB0aGlzLm1hdFNlbGVjdC5fb3BlbmVkU3RyZWFtLnBpcGUoZGVib3VuY2VUaW1lKDIwMCkpO1xuICAgIGNvbnN0IHNjcm9sbEVuZCQgPSBvcGVuZWQkLnBpcGUoXG4gICAgICBtYXAoKCkgPT4gdGhpcy5nZXRNYXRTZWxlY3RQYW5lbCgpKSxcbiAgICAgIGZpbHRlcihpc05vdE5pbCksXG4gICAgICBzd2l0Y2hNYXAoKHBhbmVsKSA9PiBmcm9tU2Nyb2xsRW5kRXZlbnQocGFuZWwsIHRocmVzaG9sZCkpLFxuICAgICAgdGFrZVVudGlsKHRoaXMubWF0U2VsZWN0Ll9jbG9zZWRTdHJlYW0pXG4gICAgKTtcblxuICAgIC8vIFRyaWdnZXIgZmV0Y2ggbW9yZSwgZW5kIGVuZCBzY3JvbGwgcmVhY2hlZFxuICAgIHRoaXMuX29wZW5lZFN1YnNjcmlwdGlvbiA9IHNjcm9sbEVuZCQucGlwZShmaWx0ZXIoKCkgPT4gdGhpcy5fbW9yZUl0ZW1zQ291bnQgPiAwKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2ZldGNoTW9yZSQuZW1pdCgpKTtcblxuICAgIC8vIFJlZ2lzdGVyIHN1YnNjcmlwdGlvblxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQodGhpcy5fb3BlbmVkU3Vic2NyaXB0aW9uKTtcbiAgfVxuXG4gIGdldCBpc09wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYXV0b2NvbXBsZXRlPy5pc09wZW4gfHwgdGhpcy5tYXRTZWxlY3Q/LnBhbmVsT3BlbiB8fCBmYWxzZTtcbiAgfVxuXG4gIGNsb3NlUGFuZWwoKSB7XG4gICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlPy5pc09wZW4pIHtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlVHJpZ2dlcj8uY2xvc2VQYW5lbCgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5tYXRTZWxlY3Q/LnBhbmVsT3Blbikge1xuICAgICAgdGhpcy5tYXRTZWxlY3Q/LmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZCAtLSAqL1xuXG4gIHByb3RlY3RlZCBtYXJrQXNMb2FkaW5nKCkge1xuICAgIGlmICh0aGlzLl8kZmlsdGVyZWRJdGVtcy52YWx1ZSkge1xuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIE1hcmtpbmcgYXMgbG9hZGluZycpO1xuXG4gICAgICB0aGlzLl8kZmlsdGVyZWRJdGVtcy5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICB0aGlzLl9pdGVtQ291bnQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9pbXBsaWNpdFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fb25GZXRjaE1vcmVDYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX21vcmVJdGVtc0NvdW50ID0gMDtcbiAgICAgIHRoaXMuX3NlbGVjdGVkSXRlbSA9IG51bGw7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvblNlbGVjdGlvbkNoYW5nZShldmVudDogTWF0U2VsZWN0Q2hhbmdlKSB7XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh7IHNvdXJjZTogZXZlbnQuc291cmNlLCB2YWx1ZTogZXZlbnQudmFsdWUgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25PcHRpb25TZWxlY3RlZChldmVudDogTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCkge1xuICAgIC8vIERFQlVHXG4gICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgT3B0aW9uIHNlbGVjdGVkJywgZXZlbnQpO1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoeyBzb3VyY2U6IGV2ZW50LnNvdXJjZSwgdmFsdWU6IGV2ZW50Lm9wdGlvbi52YWx1ZSB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVTaG93UGFuZWwoZXZlbnQ6IEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMuY2xvc2VQYW5lbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRyb3BCdXR0b25DbGljay5lbWl0KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICAvKiAtLSBwcml2YXRlIG1ldGhvZCAtLSAqL1xuXG4gIHByaXZhdGUgYXN5bmMgc3VnZ2VzdCh2YWx1ZTogYW55LCBmaWx0ZXI/OiBhbnkpOiBQcm9taXNlPGFueVtdPiB7XG4gICAgLy8gU3BsaXQgc3RyaW5nIHZhbHVlLCBpZiBhbGxvdyAoLmUuZyAnQUFBIC0gSXRlbSBBQUEnID0+ICdBQUEnKVxuICAgIGlmICghdGhpcy5tb2JpbGUgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gU3BsaXQgc2VhcmNoIHRleHQgKGFuZCBrZWVwIG9ubHkgdGhlIGZpcnN0IHBhcnQpXG4gICAgICBpZiAodGhpcy5zcGxpdFNlYXJjaFRleHQgJiYgdGhpcy5kaXNwbGF5U2VwYXJhdG9yKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0U2VwYXJhdG9ySW5kZXggPSB2YWx1ZS5pbmRleE9mKHRoaXMuZGlzcGxheVNlcGFyYXRvcik7XG4gICAgICAgIGlmIChmaXJzdFNlcGFyYXRvckluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDAsIGZpcnN0U2VwYXJhdG9ySW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRyaW0gc2VhcmNoIHRleHRcbiAgICAgIGlmICh0aGlzLnRyaW1TZWFyY2hUZXh0KSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUudHJpbSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENhbGwgc3VnZ2VzdGlvbiBmdW5jdGlvblxuICAgIGxldCByZXMgPSBhd2FpdCB0aGlzLnN1Z2dlc3RGbih2YWx1ZSwgZmlsdGVyKTtcblxuICAgIC8vIERFQlVHXG4gICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgRmlsdGVyZWQgaXRlbXMgYnkgc3VnZ2VzdEZuOicsIHZhbHVlLCByZXMpO1xuXG4gICAgaWYgKCFyZXMpIHtcbiAgICAgIHRoaXMuX2l0ZW1Db3VudCA9IDA7XG4gICAgICB0aGlzLl9vbkZldGNoTW9yZUNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fbW9yZUl0ZW1zQ291bnQgPSAwO1xuICAgICAgcmVzID0gW107XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJlcykpIHtcbiAgICAgIHJlcyA9IHJlcyBhcyBhbnlbXTtcbiAgICAgIHRoaXMuX2l0ZW1Db3VudCA9IHJlcz8ubGVuZ3RoIHx8IDA7XG4gICAgICB0aGlzLl9vbkZldGNoTW9yZUNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fbW9yZUl0ZW1zQ291bnQgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7IGRhdGEsIHRvdGFsLCBmZXRjaE1vcmUgfSA9IHJlcyBhcyBMb2FkUmVzdWx0PGFueT47XG4gICAgICB0aGlzLl9pdGVtQ291bnQgPSB0b051bWJlcih0b3RhbCwgKGRhdGEgJiYgZGF0YS5sZW5ndGgpIHx8IDApO1xuICAgICAgdGhpcy5fb25GZXRjaE1vcmVDYWxsYmFjayA9IGZldGNoTW9yZTtcbiAgICAgIHRoaXMuX21vcmVJdGVtc0NvdW50ID0gKGZldGNoTW9yZSAmJiB0aGlzLl9pdGVtQ291bnQgLSBkYXRhLmxlbmd0aCkgfHwgMDtcbiAgICAgIHJlcyA9IGRhdGE7XG4gICAgfVxuXG4gICAgLy8gREVCVUdcbiAgICAvL2lmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBGaWx0ZXJlZCBpdGVtcyBieSBzdWdnZXN0Rm46JywgdmFsdWUsIHJlcyk7XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaE1vcmUoKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIGlmICghdGhpcy5fb25GZXRjaE1vcmVDYWxsYmFjaykgcmV0dXJuIFtdO1xuXG4gICAgLy8gU2F2ZSB0aGVuIHJlbW92ZSBmZXRjaCBmdW5jdGlvbiAodG8gYXZvaWQgbXVsdGktY2FsbClcbiAgICBjb25zdCBmZXRjaE1vcmVGbiA9IHRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2s7XG4gICAgdGhpcy5fb25GZXRjaE1vcmVDYWxsYmFjayA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHsgZGF0YSwgdG90YWwsIGZldGNoTW9yZSB9ID0gYXdhaXQgZmV0Y2hNb3JlRm4oKTtcbiAgICB0aGlzLl9pdGVtQ291bnQgPSB0b3RhbCB8fCB0aGlzLl9pdGVtQ291bnQ7XG4gICAgdGhpcy5fb25GZXRjaE1vcmVDYWxsYmFjayA9IGZldGNoTW9yZTtcbiAgICB0aGlzLl9tb3JlSXRlbXNDb3VudCA9IE1hdGgubWF4KDAsIHRoaXMuX21vcmVJdGVtc0NvdW50IC0gZGF0YS5sZW5ndGgpOyAvLyBCb3JuZSBtaW4gPSAwXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUltcGxpY2l0VmFsdWUoaXRlbXM6IGFueVtdKSB7XG4gICAgLy8gU3RvcmUgaW1wbGljaXQgdmFsdWUgKHdpbGwgdXNlIGl0IG9uQmx1ciBpZiBub3Qgb3RoZXIgdmFsdWUgc2VsZWN0ZWQpXG4gICAgaWYgKCF0aGlzLm11bHRpcGxlICYmIGl0ZW1zPy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGltcGxpY2l0VmFsdWUgPSBpdGVtc1swXTtcbiAgICAgIGNvbnN0IGFwcGx5SW1wbGljaXRWYWx1ZSA9IHR5cGVvZiB0aGlzLmFwcGx5SW1wbGljaXRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMuYXBwbHlJbXBsaWNpdFZhbHVlKGltcGxpY2l0VmFsdWUpIDogdGhpcy5hcHBseUltcGxpY2l0VmFsdWU7XG4gICAgICBpZiAoYXBwbHlJbXBsaWNpdFZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2ltcGxpY2l0VmFsdWUgPSBpbXBsaWNpdFZhbHVlO1xuXG4gICAgICAgIC8vIFByZXZpZXcgdGhlIGltcGxpY2l0IGluIHRoZSBpbnB1dCB0ZXh0IChhbmQgc2VsZWN0IHRoZSBhZGRlZCBwYXJ0KVxuICAgICAgICBpZiAodGhpcy5wcmV2aWV3SW1wbGljaXRWYWx1ZSAmJiB0aGlzLm1hdElucHV0VGV4dD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSB0aGlzLm1hdElucHV0VGV4dC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuXG4gICAgICAgICAgLy8gQ29tcGxldGUgdGhlIHNlYXJjaCB0ZXh0LCB3aXRoIHRoZSBmdWxsIGltcGxpY2l0IHZhbHVlIGFwcGxpZWRcbiAgICAgICAgICBpZiAoIVJlZ0V4cFV0aWxzLmhhc1dpbGRjYXJkQ2hhcmFjdGVyKHNlYXJjaFRleHQpKSB7XG4gICAgICAgICAgICBjb25zdCBkaXNwbGF5VmFsdWUgPSB0aGlzLmRpc3BsYXlXaXRoKGltcGxpY2l0VmFsdWUpO1xuICAgICAgICAgICAgaWYgKGRpc3BsYXlWYWx1ZS50b1VwcGVyQ2FzZSgpLnN0YXJ0c1dpdGgoc2VhcmNoVGV4dC50b1VwcGVyQ2FzZSgpKSkge1xuICAgICAgICAgICAgICAvLyBTZWxlY3QgdGhlIGFkZGl0aW9uYWwgdGV4dCB0byBtYXRjaCB0aGUgaW1wbGljaXQgdmFsdWVcbiAgICAgICAgICAgICAgdGhpcy5zZXRJbnB1dFRleHRWYWx1ZShkaXNwbGF5VmFsdWUsIHNlYXJjaFRleHQubGVuZ3RoLCBkaXNwbGF5VmFsdWUubGVuZ3RoLCAnYmFja3dhcmQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBDb250aW51ZSA6IHJlc3RlIGltcGxpY2l0IHZhbHVlXG4gICAgfVxuXG4gICAgdGhpcy5faW1wbGljaXRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tJZlRvdWNoZWQoKSB7XG4gICAgaWYgKHRoaXMuZm9ybUNvbnRyb2wudG91Y2hlZCkge1xuICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRBdXRvY29tcGxldGVQYW5lbCgpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgZWxlID0gdGhpcy5hdXRvY29tcGxldGU/Lm9wdGlvbnMubGFzdD8uX2dldEhvc3RFbGVtZW50KCkucGFyZW50RWxlbWVudDtcbiAgICBpZiAoIWVsZSkge1xuICAgICAgLy8gREVCVUdcbiAgICAgIGNvbnNvbGUud2Fybih0aGlzLmxvZ1ByZWZpeCArICcgVW5hYmxlIHRvIGZpbmQgdGhlIGF1dG9jb21wbGV0ZSBkaXYuLi4nKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWF0U2VsZWN0UGFuZWwoKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IGVsZSA9IHRoaXMubWF0U2VsZWN0Lm9wdGlvbnMubGFzdD8uX2dldEhvc3RFbGVtZW50KCkucGFyZW50RWxlbWVudDtcbiAgICBpZiAoIWVsZSkge1xuICAgICAgLy8gREVCVUdcbiAgICAgIGNvbnNvbGUud2Fybih0aGlzLmxvZ1ByZWZpeCArICcgVW5hYmxlIHRvIGZpbmQgdGhlIG1hdC1zZWxlY3QgY29udGFpbmVyLi4uJyk7XG4gICAgfVxuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwcml2YXRlIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZml4TWF0U2VsZWN0UG9zaXRpb25BbmRTZWFyY2hiYXIoKSB7XG4gICAgaWYgKCF0aGlzLm1hdFNlbGVjdCkgcmV0dXJuO1xuXG4gICAgLy8gSGlkZSB0aGUgcGFuZWwgKHdpbGwgYmUgc2hvdyB3aGVuIHJlYWR5KVxuICAgIHRoaXMubWF0U2VsZWN0LnBhbmVsQ2xhc3MgPSAnaGlkZGVuJztcblxuICAgIGxldCBzZWFyY2hCYXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5tYXRTZWxlY3Qub3BlbmVkQ2hhbmdlLnN1YnNjcmliZShhc3luYyAob3BlbikgPT4ge1xuICAgICAgICBpZiAob3Blbikge1xuICAgICAgICAgIGNvbnN0IHBhbmVsRWxlbWVudCA9IHRoaXMubWF0U2VsZWN0LnBhbmVsLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgY29uc3Qgb3ZlcmxheVBhbmUgPSBmaW5kUGFyZW50V2l0aENsYXNzKHBhbmVsRWxlbWVudCwgJ2Nkay1vdmVybGF5LXBhbmUnKTtcblxuICAgICAgICAgIC8vIEZpeCBwYW5lbCBwb3NpdGlvbiwgd2hlbiBvdmVybGF5IGhhcyBhbiB0cmFuc2Zvcm1YIChhZGRlZCB3aGVuIGtleWJvYXJkIGlzIHNob3duKVxuICAgICAgICAgIHRoaXMuX2ZpeE1hdFNlbGVjdFBhbmVsUG9zaXRpb24ob3ZlcmxheVBhbmUpO1xuXG4gICAgICAgICAgLy8gRml4IG92ZXJsYXksIGZvciBzZWFyY2hiYXJcbiAgICAgICAgICBpZiAodGhpcy5zaG93U2VhcmNoQmFyKSB7XG4gICAgICAgICAgICBzZWFyY2hCYXJTdWJzY3JpcHRpb24gPSBhd2FpdCB0aGlzLl9maXhTZWFyY2hiYXJPdmVybGF5KHBhbmVsRWxlbWVudCwgb3ZlcmxheVBhbmUpO1xuICAgICAgICAgICAgaWYgKHNlYXJjaEJhclN1YnNjcmlwdGlvbikgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChzZWFyY2hCYXJTdWJzY3JpcHRpb24pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFNob3cgdGhlIHBhbmVsXG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhwYW5lbEVsZW1lbnQsICdoaWRkZW4nKTtcbiAgICAgICAgICB0aGlzLm1hdFNlbGVjdC5wYW5lbENsYXNzID0gdGhpcy5wYW5lbENsYXNzO1xuICAgICAgICB9XG4gICAgICAgIC8vIE9OIGNsb3NlXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIC8vIFVuc3Vic2NyaWJlIHNlYXJjaCBiYXIgd29ya2Fyb3VuZFxuICAgICAgICAgIGlmIChzZWFyY2hCYXJTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHNlYXJjaEJhclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLnJlbW92ZShzZWFyY2hCYXJTdWJzY3JpcHRpb24pO1xuICAgICAgICAgICAgc2VhcmNoQmFyU3Vic2NyaXB0aW9uID0gbnVsbDtcblxuICAgICAgICAgICAgLy8gSGlkZSBwYW5lbCBhZ2FpblxuICAgICAgICAgICAgdGhpcy5tYXRTZWxlY3QucGFuZWxDbGFzcyA9ICdoaWRkZW4nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfZml4TWF0U2VsZWN0UGFuZWxQb3NpdGlvbihvdmVybGF5UGFuZTogSFRNTEVsZW1lbnQpIHtcbiAgICBpZiAoIW92ZXJsYXlQYW5lKSByZXR1cm47XG5cbiAgICAvLyBSZW1vdmUgdGhlIHVud2FudGVkIGRlZmF1bHQgdHJhbnNsYXRlWFxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICBvdmVybGF5UGFuZSxcbiAgICAgICd0cmFuc2Zvcm0nLFxuICAgICAgb3ZlcmxheVBhbmUuc3R5bGUudHJhbnNmb3JtXG4gICAgICAgIC5zcGxpdCgnICcpXG4gICAgICAgIC5maWx0ZXIoKHByb3ApID0+ICFwcm9wLm1hdGNoKC9edHJhbnNsYXRlWC8pKVxuICAgICAgICAuam9pbignICcpXG4gICAgKTtcblxuICAgIC8vIEZpeCBwYW5lbCB3aWR0aCB0byBmaWVsZCB3aWR0aCAoaXQgd2FzIG5vdCBmb3JjZWQgYnkgQElucHV0IHBhbmVsV2lkdGgpXG4gICAgaWYgKCF0aGlzLnBhbmVsV2lkdGgpIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMubG9nUHJlZml4fSBGaXhpbmcgc2VsZWN0IHBhbmVsIHdpZHRoIHRvIHRoZSBmaWVsZCBzaXplYCk7XG4gICAgICBjb25zdCB3aWR0aCA9IGAke3RoaXMuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCAtIDF9cHhgO1xuICAgICAgaWYgKHRoaXMuX2RlZmF1bHRQYW5lbFdpZHRoICE9PSB3aWR0aCkge1xuICAgICAgICB0aGlzLl9kZWZhdWx0UGFuZWxXaWR0aCA9IHdpZHRoO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKG92ZXJsYXlQYW5lLCAnd2lkdGgnLCB3aWR0aCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRml4IHBhbmVsJ3MgbGVmdCwgdG8gYXZvaWQgb3ZlcmZsb3cgb24gdGhlIHJpZ2h0XG4gICAgY29uc3QgbGVmdCA9IG92ZXJsYXlQYW5lLnN0eWxlLmxlZnQ7XG4gICAgaWYgKGlzTm90TmlsT3JCbGFuayhsZWZ0KSAmJiAhbGVmdC5pbmNsdWRlcygnY2FsYygnKSAmJiBsZWZ0LmVuZHNXaXRoKCdweCcpKSB7XG4gICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLmxvZ1ByZWZpeH0gRml4aW5nIHNlbGVjdCBwYW5lbCBsZWZ0LCB0byBhdm9pZCBvdmVyZmxvdyBvbiB0aGUgcmlnaHRgKTtcbiAgICAgIGNvbnN0IHdpZHRoID0gYCR7b3ZlcmxheVBhbmUuY2xpZW50V2lkdGh9cHhgO1xuICAgICAgY29uc3QgZml4TGVmdCA9IGBjYWxjKC0ke3dpZHRofSArIG1pbigke2xlZnR9ICsgJHt3aWR0aH0sIC0zMnB4ICsgMTAwdncpKWA7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKG92ZXJsYXlQYW5lLCAnbGVmdCcsIGZpeExlZnQsIFJlbmRlcmVyU3R5bGVGbGFnczIuSW1wb3J0YW50KTtcbiAgICB9XG5cbiAgICAvLyBGaXggcGFuZWwncyB0b3AsIHRvIGF2b2lkIG92ZXJmbG93IG9uIHRoZSBib3R0b21cbiAgICBjb25zdCB0b3AgPSBvdmVybGF5UGFuZS5zdHlsZS50b3A7XG4gICAgaWYgKGlzTm90TmlsT3JCbGFuayh0b3ApICYmICF0b3AuaW5jbHVkZXMoJ2NhbGMoJykgJiYgdG9wLmVuZHNXaXRoKCdweCcpKSB7XG4gICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLmxvZ1ByZWZpeH0gRml4aW5nIHNlbGVjdCBwYW5lbCB0b3AsIHRvIGF2b2lkIG92ZXJmbG93IG9uIHRoZSBib3R0b21gKTtcbiAgICAgIGNvbnN0IGhlaWdodCA9IGAke292ZXJsYXlQYW5lLmNsaWVudEhlaWdodCB8fCAyNzV9cHhgO1xuICAgICAgY29uc3QgZml4VG9wID0gYGNhbGMoLSR7aGVpZ2h0fSArIG1pbigke3RvcH0gKyAke2hlaWdodH0sIC0zMnB4ICsgMTAwdmgpKWA7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKG92ZXJsYXlQYW5lLCAndG9wJywgZml4VG9wLCBSZW5kZXJlclN0eWxlRmxhZ3MyLkltcG9ydGFudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhY2sgOiBpZiB3ZSBhcmUgaW4gYSBJb25Nb2RhbCwgaXQncyBuZWNlc3NhcnkgdG8gbW92ZSB0aGUgQ2RrT3ZlcmxheSBjb250YWluZXJcbiAgICogICAgIGluIHRoZSBJb25Nb2RhbCB0byBtaWdodCBrZWVwIGZvY3VzIGluIElvblNlYXJjaGJhci5cbiAgICpcbiAgICogQHBhcmFtIHBhbmVsRWxlbWVudFxuICAgKiBAcGFyYW0gb3ZlcmxheVBhbmVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgX2ZpeFNlYXJjaGJhck92ZXJsYXkocGFuZWxFbGVtZW50OiBIVE1MRWxlbWVudCwgb3ZlcmxheVBhbmU6IEhUTUxFbGVtZW50KTogUHJvbWlzZTxTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAoIXRoaXMubWF0U2VsZWN0IHx8ICF0aGlzLmlvblNlYXJjaGJhcikgcmV0dXJuO1xuXG4gICAgY29uc3QgbW9kYWxFbGVtZW50ID0gYXdhaXQgdGhpcy5tb2RhbENvbnRyb2xsZXIuZ2V0VG9wKCk7XG4gICAgaWYgKCFtb2RhbEVsZW1lbnQpIHJldHVybjsgLy8gTm8gbW9kYWw6IHNraXBcblxuICAgIC8vIEdldCB0aGUgQ0RLIG92ZXJsYXkgY29udGFpbmVyXG4gICAgY29uc3Qgb3ZlcmxheUNvbnRhaW5lciA9IGZpbmRQYXJlbnRXaXRoQ2xhc3MocGFuZWxFbGVtZW50LCAnY2RrLW92ZXJsYXktY29udGFpbmVyJyk7XG4gICAgaWYgKCFvdmVybGF5Q29udGFpbmVyKSByZXR1cm47XG4gICAgY29uc3Qgb3JpZ2luYWxQYXJlbnQgPSBvdmVybGF5Q29udGFpbmVyLnBhcmVudEVsZW1lbnQ7XG5cbiAgICAvLyBERUJVR1xuICAgIC8vaWYgKHRoaXMuZGVidWcpXG4gICAgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLmxvZ1ByZWZpeH1Nb3ZpbmcgdGhlIFwiY2RrLW92ZXJsYXlcIiBjb250YWluZXIgZnJvbSB0aGUgXCIke29yaWdpbmFsUGFyZW50Py50YWdOYW1lIHx8ICdib2R5J31cIiB0byB0aGUgXCJpb24tbW9kYWxcIiBjb250YWluZXJgKTtcblxuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQobW9kYWxFbGVtZW50LCBvdmVybGF5Q29udGFpbmVyKTtcblxuICAgIGNvbnN0IF9kb2N1bWVudCA9IHRoaXMuaW5qZWN0b3IuZ2V0KERPQ1VNRU5UKTtcbiAgICBjb25zdCBzaGlmdExlZnQgPSAoX2RvY3VtZW50LmRlZmF1bHRWaWV3LmlubmVyV2lkdGggLSBtb2RhbEVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpIC8gMjtcbiAgICBjb25zdCBzaGlmdFRvcCA9IChfZG9jdW1lbnQuZGVmYXVsdFZpZXcuaW5uZXJIZWlnaHQgLSBtb2RhbEVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KSAvIDI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKG92ZXJsYXlQYW5lLCAnbWFyZ2luLXRvcCcsIGAtJHtzaGlmdFRvcH1weGApO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUob3ZlcmxheVBhbmUsICdtYXJnaW4tbGVmdCcsIGAtJHtzaGlmdExlZnR9cHhgKTtcblxuICAgIC8vIFJldHVybiB0aGUgcmV2ZXJzZSBmdW5jdGlvbiwgdG8gcmVwbGFjZSB0aGUgY29udGFpbmVyIGluIGJvZHlcbiAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbigoKSA9PiB7XG4gICAgICAvLyBERUJVR1xuICAgICAgLy9pZiAodGhpcy5kZWJ1ZylcbiAgICAgIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5sb2dQcmVmaXh9IG1vdmluZyB0aGUgXCJjZGstb3ZlcmxheVwiIGNvbnRhaW5lciBmcm9tIHRoZSBcImlvbi1tb2RhbFwiIHRvIHRoZSBcImJvZHlcIiBjb250YWluZXJgKTtcblxuICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChvcmlnaW5hbFBhcmVudCAvKnRoaXMuZG9jdW1lbnQuYm9keSovLCBvdmVybGF5Q29udGFpbmVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SW5wdXRUZXh0VmFsdWUodmFsdWU6IHN0cmluZywgc2VsZWN0aW9uU3RhcnRJbmRleD86IG51bWJlciwgc2VsZWN0aW9uRW5kSW5kZXg/OiBudW1iZXIsIGRpcmVjdGlvbj86ICdiYWNrd2FyZCcgfCAnZm9yd2FyZCcpIHtcbiAgICAvLyBBcHBseSB0byB0aGUgaW5wdXRbdHlwZT10ZXh0XSBmaWVsZFxuICAgIGlmICh0aGlzLm1hdElucHV0VGV4dD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5tYXRJbnB1dFRleHQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHZhbHVlID8/ICcnO1xuICAgICAgaWYgKGlzTm90TmlsKHNlbGVjdGlvblN0YXJ0SW5kZXgpKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHNlbGVjdElucHV0UmFuZ2UodGhpcy5tYXRJbnB1dFRleHQubmF0aXZlRWxlbWVudCwgc2VsZWN0aW9uU3RhcnRJbmRleCwgc2VsZWN0aW9uRW5kSW5kZXgsIGRpcmVjdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvbkJhY2tzcGFjZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50Py50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcblxuICAgIC8vIElmIHByZXZpZXcgZW5hYmxlZCwgcmVtb3ZlIHNlbGVjdGlvbiB3aGVuIHByZXNzIGJhY2tzcGFjZSAoYnkgZGVmYXVsdCBvbmx5IHRoZSBzZWxlY3Rpb24gd2lsbCBiZSBkZWxldGVkKVxuICAgIGlmICh0aGlzLnByZXZpZXdJbXBsaWNpdFZhbHVlICYmIGlucHV0KSB7XG4gICAgICBjb25zdCBzZWxlY3Rpb25TdGFydCA9IGlucHV0LnNlbGVjdGlvblN0YXJ0O1xuICAgICAgY29uc3Qgc2VsZWN0aW9uRW5kID0gaW5wdXQuc2VsZWN0aW9uRW5kO1xuICAgICAgbGV0IHZhbHVlID0gaW5wdXQudmFsdWU7XG5cbiAgICAgIC8vIE1ha2Ugc3VyZSB0byByZW1vdmUgdGhlIGxhc3QgdHlwZWQgY2hhcmFjdGVyIChieSBkZWZhdWx0IG9ubHkgdGhlIHNlbGVjdGlvbiB3aWxsIGJlIGRlbGV0ZWQpXG4gICAgICBpZiAodGhpcy5faW1wbGljaXRWYWx1ZSAmJiBzZWxlY3Rpb25TdGFydCA+IDAgJiYgc2VsZWN0aW9uU3RhcnQgPCBzZWxlY3Rpb25FbmQgJiYgdmFsdWUubGVuZ3RoID09PSBzZWxlY3Rpb25FbmQpIHtcbiAgICAgICAgLy8gREVCVUdcbiAgICAgICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLmxvZ1ByZWZpeH0gQmFja3NwYWNlIHByZXNzZWQsIGFkZGl0aW9uYWwgdGV4dCBmcm9tIHRoZSBpbXBsaWNpdCB2YWx1ZWApO1xuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgLy8gRGVmaW5lIHRoZSBuZXcgdmFsdWUgYnkgcmVtb3ZpbmcgdGhlIHRleHQgaW4gdGhlIGFkanVzdGVkIHJhbmdlXG4gICAgICAgIGNvbnN0IG5ld0NhcmV0UG9zaXRpb24gPSBzZWxlY3Rpb25TdGFydCAtIDE7XG4gICAgICAgIHZhbHVlID0gbmV3Q2FyZXRQb3NpdGlvbiA+IDAgPyB2YWx1ZS5zbGljZSgwLCBuZXdDYXJldFBvc2l0aW9uKSA6ICcnO1xuXG4gICAgICAgIC8vIGNsZWFuIGltcGxpY2l0IHZhbHVlXG4gICAgICAgIHRoaXMuX2ltcGxpY2l0VmFsdWUgPSBudWxsO1xuXG4gICAgICAgIC8vIEFwcGx5IHRoZSBuZXcgdmFsdWUgYW5kIHVwZGF0ZSB0aGUgc2VsZWN0aW9uXG4gICAgICAgIHRoaXMuc2V0SW5wdXRUZXh0VmFsdWUodmFsdWUsIG5ld0NhcmV0UG9zaXRpb24sIHNlbGVjdGlvbkVuZCk7XG5cbiAgICAgICAgLy8gTWFyayBjb21wb25lbnQgYXMgbG9hZGluZ1xuICAgICAgICB0aGlzLm1hcmtBc0xvYWRpbmcoKTtcblxuICAgICAgICAvLyBSZWxvYWQgaXRlbXNcbiAgICAgICAgdGhpcy5yZWxvYWRJdGVtcyh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRW1pdFxuICAgIHRoaXMua2V5ZG93bkJhY2tzcGFjZS5lbWl0KGV2ZW50KTtcbiAgfVxufVxuIiwiPGlvbi1ncmlkIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmcgZmllbGQtY29udGFpbmVyXCI+XG4gIDxpb24tcm93PlxuICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgIDwhLS0gcmVhZG9ubHkgLS0+XG4gICAgICBAaWYgKF9yZWFkb25seSkge1xuICAgICAgICA8bWF0LWZvcm0tZmllbGRcbiAgICAgICAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsIHwgYXNGbG9hdExhYmVsVHlwZVwiXG4gICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgICAgICAgW3N1YnNjcmlwdFNpemluZ109XCJzdWJzY3JpcHRTaXppbmdcIlxuICAgICAgICAgIFt0aXRsZV09XCJfZGlzcGxheVZhbHVlXCJcbiAgICAgICAgICBjbGFzcz1cIm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgbWF0UHJlZml4PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdFByZWZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgQGlmIChmbG9hdExhYmVsICE9PSAnbmV2ZXInICYmICEhcGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgcGxhY2Vob2xkZXIgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICB9XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGhpZGRlbiB0eXBlPVwidGV4dFwiIHJlYWRvbmx5PVwidHJ1ZVwiIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiIC8+XG4gICAgICAgICAgPGlvbi10ZXh0Pnt7IHZhbHVlIHwgdG9TdHJpbmc6IGRpc3BsYXlXaXRoIH19PC9pb24tdGV4dD5cbiAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRTdWZmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gaGludHMgLS0+XG4gICAgICAgICAgQGlmICghZm9ybUNvbnRyb2wuaW52YWxpZCkge1xuICAgICAgICAgICAgPG1hdC1oaW50PlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWF0SGludFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L21hdC1oaW50PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8bWF0LWZvcm0tZmllbGRcbiAgICAgICAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsIHwgYXNGbG9hdExhYmVsVHlwZVwiXG4gICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgICAgICAgW3N1YnNjcmlwdFNpemluZ109XCJzdWJzY3JpcHRTaXppbmdcIlxuICAgICAgICAgIFt0aXRsZV09XCJfZGlzcGxheVZhbHVlXCJcbiAgICAgICAgICBbaGlkZVJlcXVpcmVkTWFya2VyXT1cImhpZGVSZXF1aXJlZE1hcmtlclwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IG1hdFByZWZpeD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRQcmVmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIEBpZiAoKGxhYmVsIHx8IHBsYWNlaG9sZGVyKSAmJiBmbG9hdExhYmVsICE9PSAnbmV2ZXInKSB7XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IGxhYmVsIHx8IHBsYWNlaG9sZGVyIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgfVxuICAgICAgICAgIDwhLS0gTW9iaWxlIG9yIE11bHRpcGxlICh1c2UgPG1hdC1zZWxlY3Q+KSAtLT5cbiAgICAgICAgICBAaWYgKG1vYmlsZSB8fCBtdWx0aXBsZSkge1xuICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgI21hdFNlbGVjdFxuICAgICAgICAgICAgICBoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yXG4gICAgICAgICAgICAgIGRpc2FibGVPcHRpb25DZW50ZXJpbmdcbiAgICAgICAgICAgICAgW2Rpc2FibGVSaXBwbGVdPVwiZGlzYWJsZVJpcHBsZVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAgIFt0YWJpbmRleF09XCJfdGFiaW5kZXhcIlxuICAgICAgICAgICAgICBbcGFuZWxDbGFzc109XCJwYW5lbENsYXNzXCJcbiAgICAgICAgICAgICAgW3BhbmVsV2lkdGhdPVwicGFuZWxXaWR0aCB8fCBfZGVmYXVsdFBhbmVsV2lkdGhcIlxuICAgICAgICAgICAgICAoZm9jdXMpPVwiZmlsdGVyTWF0U2VsZWN0Rm9jdXNFdmVudCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGJsdXIpPVwiZmlsdGVyTWF0U2VsZWN0Qmx1ckV2ZW50KCRldmVudClcIlxuICAgICAgICAgICAgICAoa2V5ZG93bi5lc2NhcGUpPVwia2V5ZG93bkVzY2FwZS5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwia2V5dXBFbnRlci5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICBbY29tcGFyZVdpdGhdPVwiZXF1YWxzXCJcbiAgICAgICAgICAgICAgW211bHRpcGxlXT1cIm11bHRpcGxlXCJcbiAgICAgICAgICAgICAgW3R5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWxdPVwiZGVib3VuY2VUaW1lICogMTBcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgICAgICBbY2xhc3MubWF0LW1kYy1zZWxlY3QtYXJyb3ctaGlkZGVuXT1cIiFtb2JpbGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyPnt7IHZhbHVlIHwgdG9TdHJpbmc6IGRpc3BsYXlXaXRoIH19PC9tYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgIDwhLS0gU2VhcmNoIGJhciAtLT5cbiAgICAgICAgICAgICAgQGlmIChzaG93U2VhcmNoQmFyKSB7XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRncm91cCBjbGFzcz1cIm1hdC1zZWxlY3Qtc2VhcmNoYmFyXCIgW2NsYXNzLm1hdC1zZWxlY3Qtc2VhcmNoYmFyLXN0aWNreV09XCJzdGlja3lTZWFyY2hCYXJcIj5cbiAgICAgICAgICAgICAgICAgIDwhLS0gRklYTUUgb24gaU9TIGRldmljZXMsIHdoZW4gYW5pbWF0ZWQ9XCJ0cnVlXCIsIHRoZW4gdGhlIHNlYXJjaCBpY29uIG92ZXJsYXAgdGhlIHBsYWNlaG9sZGVyIC0tPlxuICAgICAgICAgICAgICAgICAgPGlvbi1zZWFyY2hiYXJcbiAgICAgICAgICAgICAgICAgICAgI2lvblNlYXJjaGJhclxuICAgICAgICAgICAgICAgICAgICBpbnB1dG1vZGU9XCJzZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICBhbmltYXRlZD1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgc2hvd0NsZWFyQnV0dG9uPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtkZWJvdW5jZV09XCJkZWJvdW5jZVRpbWVcIlxuICAgICAgICAgICAgICAgICAgICAoaW9uQ2xlYXIpPVwibWFya0FzTG9hZGluZygpXCJcbiAgICAgICAgICAgICAgICAgICAgKGlvbklucHV0KT1cImlvblNlYXJjaEJhckNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInQ09NTU9OLkJUTl9TRUFSQ0gnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgID48L2lvbi1zZWFyY2hiYXI+XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0Z3JvdXA+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPCEtLSBIZWFkZXJzIC0tPlxuICAgICAgICAgICAgICA8aW9uLXJvd1xuICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0LXNlbGVjdC1oZWFkZXIgY29sdW1uIGlvbi1uby1wYWRkaW5nXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MubXVsdGlwbGVdPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5tYXQtc2VsZWN0LXNlYXJjaGJhci1zdGlja3ldPVwic2hvd1NlYXJjaEJhciAmJiBzdGlja3lTZWFyY2hCYXJcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQGZvciAoYXR0ciBvZiBkaXNwbGF5QXR0cmlidXRlczsgdHJhY2sgYXR0cjsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgIDxpb24tY29sIFtzaXplXT1cImRpc3BsYXlDb2x1bW5TaXplc1tpXVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIFtpbm5lckhUTUxdPVwiZGlzcGxheUNvbHVtbk5hbWVzW2ldIHwgdHJhbnNsYXRlXCI+PC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2lvbi1yb3c+XG5cbiAgICAgICAgICAgICAgPCEtLSBOb25lIG9wdGlvbiAtLT5cbiAgICAgICAgICAgICAgQGlmICghcmVxdWlyZWQgJiYgIW11bHRpcGxlICYmICFjbGVhcmFibGUpIHtcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgICAgICAgICAgICA8aW9uLXJvdyBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsPjxpIHRyYW5zbGF0ZT5DT01NT04uRU1QVFlfT1BUSU9OPC9pPjwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBpZiAoXyRmaWx0ZXJlZEl0ZW1zIHwgcHVzaDogJ3VzZXJCbG9ja2luZyc7IGFzIGl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgPCEtLSBObyBpdGVtIG9wdGlvbiAtLT5cbiAgICAgICAgICAgICAgICBAaWYgKGl0ZW1zIHwgaXNFbXB0eUFycmF5KSB7XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cImlvbi1wYWRkaW5nIHRleHQtaXRhbGljXCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGk+e3sgbm9SZXN1bHRNZXNzYWdlIHwgdHJhbnNsYXRlIH19PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIDwhLS0gT3B0aW9ucyAtLT5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbXM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiaXRlbVwiIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW9uLXJvdyBbY2xhc3NMaXN0XT1cIml0ZW0uY2xhc3NMaXN0IHx8ICcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChwYXRoIG9mIGRpc3BsYXlBdHRyaWJ1dGVzOyB0cmFjayBwYXRoOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWNvbCBbc2l6ZV09XCJkaXNwbGF5Q29sdW1uU2l6ZXNbaV1cIiBjbGFzcz1cImlvbi1hbGlnbi1zZWxmLWNlbnRlciBpb24tdGV4dC13cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHJvcGVydHlHZXQ6IHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhpZ2hsaWdodDogeyBzZWFyY2g6IGlvblNlYXJjaGJhcj8udmFsdWUsIHdpdGhBY2NlbnQ6IGhpZ2hsaWdodEFjY2VudCB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8IS0tIE1vcmUgaXRlbSAtLT5cbiAgICAgICAgICAgICAgICBAaWYgKF9tb3JlSXRlbXNDb3VudCkge1xuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKG5nSW5pdCk9XCJfaW5pdE1hdFNlbGVjdEluZmluaXRlU2Nyb2xsKClcIiBjbGFzcz1cImlvbi1wYWRkaW5nXCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tc2tlbGV0b24tdGV4dCBbYW5pbWF0ZWRdPVwidHJ1ZVwiIHN0eWxlPVwid2lkdGg6IDEwMCVcIj48L2lvbi1za2VsZXRvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBAZWxzZSBpZiAoKF9kaXNwbGF5VmFsdWUgfCBzdHJMZW5ndGgpIDwgc3VnZ2VzdExlbmd0aFRocmVzaG9sZCkge1xuICAgICAgICAgICAgICAgIDwhLS0gbmVlZCBtb3JlIGNoYXJhY3RlciAtLT5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cImlvbi1wYWRkaW5nIHRleHQtaXRhbGljXCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICB7eyAnSU5GTy5QTEVBU0VfVFlQRV9NT1JFX0NIQVJBQ1RFUlMnIHwgdHJhbnNsYXRlOiB7IG1pbkxlbmd0aDogc3VnZ2VzdExlbmd0aFRocmVzaG9sZCB9IH19XG4gICAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDwhLS0gbG9hZGluZyBzcGlubmVyIC0tPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwiaW9uLXBhZGRpbmdcIiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICAgIDxpb24tc2tlbGV0b24tdGV4dCBbYW5pbWF0ZWRdPVwidHJ1ZVwiIHN0eWxlPVwid2lkdGg6IDEwMCVcIj48L2lvbi1za2VsZXRvbi10ZXh0PlxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8IS0tIGZvb3RlciAtLT5cbiAgICAgICAgICAgICAgQGlmIChpdGVtQ291bnQ7IGFzIGNvdW50KSB7XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gY2xhc3M9XCJtYXQtb3B0aW9uLWZvb3RlciBtYXQtYXV0b2NvbXBsZXRlLWZvb3RlciBpb24tbm8tcGFkZGluZ1wiIGRpc2FibGVkPlxuICAgICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNsYXNzPVwiaW9uLWZsb2F0LWVuZCBpb24tcGFkZGluZy1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGk+e3sgJ0NPTU1PTi5SRVNVTFRfQ09VTlQnIHwgdHJhbnNsYXRlOiB7IGNvdW50OiBjb3VudCB9IH19PC9pPlxuICAgICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDwhLS0gZGVza3RvcCAodXNlIG1hdC1hdXRvY29tcGxldGUpIC0tPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICNtYXRJbnB1dFRleHRcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZVwiXG4gICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVQb3NpdGlvbl09XCJtYXRBdXRvY29tcGxldGVQb3NpdGlvblwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCIobGFiZWwgfHwgZmxvYXRMYWJlbCA9PT0gJ25ldmVyJykgJiYgcGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBbYXBwQXV0b2ZvY3VzXT1cImF1dG9mb2N1c1wiXG4gICAgICAgICAgICAgIFt0YWJpbmRleF09XCJfdGFiaW5kZXhcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tlZC5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAoZm9jdXMpPVwiZmlsdGVySW5wdXRUZXh0Rm9jdXNFdmVudCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGJsdXIpPVwiZmlsdGVySW5wdXRUZXh0Qmx1ckV2ZW50KCRldmVudClcIlxuICAgICAgICAgICAgICAoa2V5ZG93bi5lc2NhcGUpPVwia2V5ZG93bkVzY2FwZS5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAoa2V5ZG93bi5iYWNrc3BhY2UpPVwib25CYWNrc3BhY2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJrZXl1cEVudGVyLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChrZXl1cC5hcnJvd0Rvd24pPVwiIWF1dG9jb21wbGV0ZS5zaG93UGFuZWwgJiYgZHJvcEJ1dHRvbkNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPCEtLSBhdXRvY29tcGxldGUgLS0+XG4gICAgICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZVxuICAgICAgICAgICAgICAjYXV0b2NvbXBsZXRlPVwibWF0QXV0b2NvbXBsZXRlXCJcbiAgICAgICAgICAgICAgW2F1dG9BY3RpdmVGaXJzdE9wdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2hpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3JdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtkaXNwbGF5V2l0aF09XCJkaXNwbGF5V2l0aFwiXG4gICAgICAgICAgICAgIFtjbGFzc109XCJwYW5lbENsYXNzXCJcbiAgICAgICAgICAgICAgW3BhbmVsV2lkdGhdPVwicGFuZWxXaWR0aFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlUmlwcGxlXT1cImRpc2FibGVSaXBwbGVcIlxuICAgICAgICAgICAgICAob3B0aW9uU2VsZWN0ZWQpPVwib25PcHRpb25TZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPCEtLSBIZWFkZXJzIC0tPlxuICAgICAgICAgICAgICA8aW9uLXJvdyBjbGFzcz1cIm1hdC1hdXRvY29tcGxldGUtaGVhZGVyIGNvbHVtbiBpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGF0dHIgb2YgZGlzcGxheUF0dHJpYnV0ZXM7IHRyYWNrIGF0dHI7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICA8aW9uLWNvbCBbc2l6ZV09XCJkaXNwbGF5Q29sdW1uU2l6ZXNbaV1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBbaW5uZXJIVE1MXT1cImRpc3BsYXlDb2x1bW5OYW1lc1tpXSB8IHRyYW5zbGF0ZVwiPjwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9pb24tcm93PlxuICAgICAgICAgICAgICBAaWYgKF8kZmlsdGVyZWRJdGVtcyB8IHB1c2g6ICd1c2VyQmxvY2tpbmcnOyBhcyBpdGVtcykge1xuICAgICAgICAgICAgICAgIDwhLS0gTm8gaXRlbSBvcHRpb24gLS0+XG4gICAgICAgICAgICAgICAgQGlmIChpdGVtcyB8IGlzRW1wdHlBcnJheSkge1xuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gY2xhc3M9XCJpb24tcGFkZGluZyB0ZXh0LWl0YWxpY1wiIGRpc2FibGVkPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxpPnt7IG5vUmVzdWx0TWVzc2FnZSB8IHRyYW5zbGF0ZSB9fTwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICA8IS0tIE9wdGlvbnMgLS0+XG4gICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGl0ZW1zOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkXT1cIml0ZW0gPT09IF9zZWxlY3RlZEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGlvbi1yb3cgW2NsYXNzTGlzdF09XCJpdGVtLmNsYXNzTGlzdCB8fCAnJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAocGF0aCBvZiBkaXNwbGF5QXR0cmlidXRlczsgdHJhY2sgcGF0aDsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1jb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCJkaXNwbGF5Q29sdW1uU2l6ZXNbaV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJ0ZXh0LmlubmVyVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpb24tYWxpZ24tc2VsZi1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHByb3BlcnR5R2V0OiBwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhpZ2hsaWdodFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaDogbWF0SW5wdXRUZXh0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aEFjY2VudDogaGlnaGxpZ2h0QWNjZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8IS0tIE1vcmUgaXRlbSAtLT5cbiAgICAgICAgICAgICAgICBAaWYgKF9tb3JlSXRlbXNDb3VudCkge1xuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKG5nSW5pdCk9XCJfaW5pdEF1dG9jb21wbGV0ZUluZmluaXRlU2Nyb2xsKClcIiBjbGFzcz1cImlvbi1wYWRkaW5nXCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tc2tlbGV0b24tdGV4dCBbYW5pbWF0ZWRdPVwidHJ1ZVwiIHN0eWxlPVwid2lkdGg6IDEwMCVcIj48L2lvbi1za2VsZXRvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBAZWxzZSBpZiAoKF9kaXNwbGF5VmFsdWUgfCBzdHJMZW5ndGgpIDwgc3VnZ2VzdExlbmd0aFRocmVzaG9sZCkge1xuICAgICAgICAgICAgICAgIDwhLS0gTmVlZCBtb3JlIGNoYXJhY3RlcnMgLS0+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gY2xhc3M9XCJpb24tcGFkZGluZyB0ZXh0LWl0YWxpY1wiIGRpc2FibGVkPlxuICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAge3sgJ0lORk8uUExFQVNFX1RZUEVfTU9SRV9DSEFSQUNURVJTJyB8IHRyYW5zbGF0ZTogeyBtaW5MZW5ndGg6IHN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQgfSB9fVxuICAgICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8IS0tIExvYWRpbmcgc3Bpbm5lciAtLT5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cImlvbi1wYWRkaW5nXCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgICA8aW9uLXNrZWxldG9uLXRleHQgW2FuaW1hdGVkXT1cInRydWVcIiBzdHlsZT1cIndpZHRoOiAxMDAlXCI+PC9pb24tc2tlbGV0b24tdGV4dD5cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICA8IS0tIGZvb3RlciAtLT5cbiAgICAgICAgICAgICAgQGlmIChpdGVtQ291bnQ7IGFzIGNvdW50KSB7XG4gICAgICAgICAgICAgICAgPGlvbi1yb3cgY2xhc3M9XCJtYXQtYXV0b2NvbXBsZXRlLWZvb3RlciBpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjbGFzcz1cImlvbi1mbG9hdC1lbmQgaW9uLXBhZGRpbmctZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGk+e3sgJ0NPTU1PTi5SRVNVTFRfQ09VTlQnIHwgdHJhbnNsYXRlOiB7IGNvdW50OiBjb3VudCB9IH19PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8IS0tXG4gICAgICAgICAgTk9URSA6XG4gICAgICAgICAgLSBcInNlbGVjdElucHV0Q29udGVudCgkZXZlbnQpIHx8IG9uRm9jdXMuZW1pdCgkZXZlbnQpXCIgOiBjYWxsIG9uRm9jdXMgb25seSB3aGVuIHRvIHRoZSBpbnB1dCBpcyBlbXB0eSAobm90aGluZyB0byBzZWxlY3QpXG4gICAgICAgICAgLS0+XG4gICAgICAgICAgPGRpdiBtYXRTdWZmaXg+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWF0U3VmZml4VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBAaWYgKGZvcm1Db250cm9sLmhhc0Vycm9yKCdyZXF1aXJlZCcpKSB7XG4gICAgICAgICAgICA8bWF0LWVycm9yIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9SRVFVSVJFRDwvbWF0LWVycm9yPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGZvcm1Db250cm9sLmhhc0Vycm9yKCdlbnRpdHknKSkge1xuICAgICAgICAgICAgPG1hdC1lcnJvciB0cmFuc2xhdGU+RVJST1IuRklFTERfSU5WQUxJRDwvbWF0LWVycm9yPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWF0RXJyb3JUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwhLS0gSGludHMgLS0+XG4gICAgICAgICAgQGlmICghZm9ybUNvbnRyb2wuaW52YWxpZCkge1xuICAgICAgICAgICAgPG1hdC1oaW50PlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWF0SGludFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L21hdC1oaW50PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIH1cbiAgICA8L2lvbi1jb2w+XG4gICAgPGlvbi1jb2wgc2l6ZT1cImF1dG9cIiBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0QWZ0ZXJdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvaW9uLWNvbD5cbiAgPC9pb24tcm93PlxuPC9pb24tZ3JpZD5cblxuPG5nLXRlbXBsYXRlICNtYXRQcmVmaXhUZW1wbGF0ZT5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdFByZWZpeF1cIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21hdFN1ZmZpeFRlbXBsYXRlPlxuICBAaWYgKCFtb2JpbGUpIHtcbiAgICA8YnV0dG9uXG4gICAgICBtYXRTdWZmaXhcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJ0b2dnbGVTaG93UGFuZWwoJGV2ZW50KVwiXG4gICAgICBbaGlkZGVuXT1cImRpc2FibGVkXCJcbiAgICAgIFt0aXRsZV09XCJkcm9wQnV0dG9uVGl0bGUgfHwgJycgfCB0cmFuc2xhdGVcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj57eyBtb2JpbGUgPyAnYXJyb3dfZHJvcF9kb3duJyA6ICdrZXlib2FyZF9hcnJvd19kb3duJyB9fTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIH1cbiAgQGlmIChjbGVhcmFibGUpIHtcbiAgICA8YnV0dG9uXG4gICAgICBtYXRTdWZmaXhcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJjbGVhclZhbHVlKCRldmVudClcIlxuICAgICAgW2hpZGRlbl09XCJkaXNhYmxlZCB8fCAhZm9ybUNvbnRyb2wudmFsdWVcIlxuICAgICAgW3RpdGxlXT1cImNsZWFyQnV0dG9uVGl0bGUgfHwgJycgfCB0cmFuc2xhdGVcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIH1cblxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0U3VmZml4XVwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbWF0RXJyb3JUZW1wbGF0ZT5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwibWF0LWVycm9yLFttYXRFcnJvcl1cIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21hdEhpbnRUZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC1oaW50LXdyYXBwZXJcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJtYXQtaGludDpub3QoW2FsaWduPSdlbmQnXSksW21hdEhpbnRdXCI+PC9uZy1jb250ZW50PlxuICAgIDxkaXYgY2xhc3M9XCJtYXQtbWRjLWZvcm0tZmllbGQtaGludC1zcGFjZXJcIj48L2Rpdj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJtYXQtaGludFthbGlnbj0nZW5kJ11cIj48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|