ca-components 1.8.24 → 1.8.25
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.
package/esm2022/lib/components/ca-input-datetime-picker/ca-input-datetime-picker.component.mjs
CHANGED
|
@@ -121,6 +121,7 @@ export class CaInputDatetimePickerComponent {
|
|
|
121
121
|
clearTimeout(this.focusBlur);
|
|
122
122
|
}, 90);
|
|
123
123
|
}
|
|
124
|
+
// 05/05/2025
|
|
124
125
|
onDatePaste(event) {
|
|
125
126
|
event.preventDefault();
|
|
126
127
|
const pasteText = event.clipboardData?.getData('text');
|
|
@@ -131,9 +132,10 @@ export class CaInputDatetimePickerComponent {
|
|
|
131
132
|
}
|
|
132
133
|
}
|
|
133
134
|
changeSelection(e, noPreventDefault = false) {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
135
|
+
const isCtrlV = (e.ctrlKey || e.metaKey) && e.key.toLowerCase() === 'v';
|
|
136
|
+
if (isCtrlV) {
|
|
137
|
+
// Allow paste
|
|
138
|
+
return;
|
|
137
139
|
}
|
|
138
140
|
if (e.keyCode == 37 ||
|
|
139
141
|
e.keyCode == 38 ||
|
|
@@ -946,4 +948,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
946
948
|
type: ViewChild,
|
|
947
949
|
args: ['holder1', { static: true }]
|
|
948
950
|
}] } });
|
|
949
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtaW5wdXQtZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NhLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhLWlucHV0LWRhdGV0aW1lLXBpY2tlci9jYS1pbnB1dC1kYXRldGltZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtaW5wdXQtZGF0ZXRpbWUtcGlja2VyL2NhLWlucHV0LWRhdGV0aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLElBQUksRUFDSixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVILFdBQVcsRUFDWCxXQUFXLEVBRVgsbUJBQW1CLEdBQ3RCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLFVBQVU7QUFDVixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFNUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSWhELE9BQU8sRUFBb0IsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFckUsT0FBTztBQUNQLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsNEJBQTRCLEdBQy9CLE1BQU0sbUJBQW1CLENBQUM7QUFFM0IsYUFBYTtBQUNiLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLG9FQUFvRSxDQUFDO0FBQ3RILE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHNGQUFzRixDQUFDO0FBRXZJLFFBQVE7QUFDUixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU5RCxXQUFXO0FBQ1gsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0seUVBQXlFLENBQUM7QUFDeEgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7OztBQXlCM0UsTUFBTSxPQUFPLDhCQUE4QjtJQXlEdkMsWUFDbUIsWUFBdUIsRUFDOUIsZUFBOEM7UUFEdkMsaUJBQVksR0FBWixZQUFZLENBQVc7UUFDOUIsb0JBQWUsR0FBZixlQUFlLENBQStCO1FBckR6QyxvQkFBZSxHQUM1QixJQUFJLFlBQVksRUFBVyxDQUFDO1FBQ1gsbUJBQWMsR0FDL0IsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQVN6QixxQkFBZ0IsR0FBZ0IsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdEQsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0Isc0JBQWlCLEdBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNyQyxvQkFBZSxHQUFTLElBQUksSUFBSSxFQUFFLENBQUM7UUFDbkMsbUJBQWMsR0FBVyxDQUFDLENBQUMsQ0FBQztRQU01QixtQkFBYyxHQUFHLGNBQWMsQ0FBQztRQUVoQyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUNoQyxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUNwQyxPQUFPO1FBQ0Esb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFFOUIscUNBQWdDLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUMvRCxxQ0FBZ0MsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBQy9ELHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFrQixDQUFDO1FBQ3hELG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQWMsQ0FBQztRQUNoRCwyQkFBc0IsR0FBRyxJQUFJLFlBQVksRUFHL0MsQ0FBQztRQUNLLHdCQUFtQixHQUFHLElBQUksWUFBWSxFQUk1QyxDQUFDO1FBT0csYUFBUSxHQUFrQixJQUFJLE9BQU8sRUFBUSxDQUFDO1FBTWxELElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztJQUMzQyxDQUFDO0lBSUQsUUFBUTtRQUNKLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxZQUFZO2lCQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsc0JBQXNCO2lCQUNwQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDYixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO29CQUM1QixVQUFVLENBQUMsR0FBRyxFQUFFO3dCQUNaLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7b0JBQzdDLENBQUMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUM7SUFDTCxDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3JELENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDN0IsQ0FBQztRQUVELElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVzthQUMzQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM5QixTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM1QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsK0JBQStCLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ3RFLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDZixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDO0lBQ3JDLENBQUM7SUFFTSx5QkFBeUI7UUFDNUIsSUFBSSxLQUFLLEVBQUUsU0FBUyxDQUFDO1FBRXJCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFFMUMsSUFBSSxNQUFNLENBQUMsWUFBWSxJQUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM5QyxTQUFTLEdBQUcsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2xDLEtBQUssR0FBRyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7WUFFL0IsSUFDSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7Z0JBQ3JCLHlCQUF5QixDQUFDLHFCQUFxQixFQUNqRCxDQUFDO2dCQUNDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzVDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDOUMsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzVDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDOUMsQ0FBQztZQUVELFNBQVMsRUFBRSxlQUFlLEVBQUUsQ0FBQztZQUM3QixTQUFTLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFFRCxJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDbEMsWUFBWSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3JDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVNLHlCQUF5QjtRQUM1QixJQUNJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSTtZQUNyQix5QkFBeUIsQ0FBQyxxQkFBcUIsRUFDakQsQ0FBQztZQUNDLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BELENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUVELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBRTFCLElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNsQyxZQUFZLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDckMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRU0sV0FBVyxDQUFDLEtBQXFCO1FBQ3BDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV2QixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQVcsQ0FBQztRQUNqRSxNQUFNLFVBQVUsR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbkQsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlLENBQUMsQ0FBTSxFQUFFLGdCQUFnQixHQUFHLEtBQUs7UUFDNUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDcEIsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ25CLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixDQUFDO1FBRUQsSUFDSSxDQUFDLENBQUMsT0FBTyxJQUFJLEVBQUU7WUFDZixDQUFDLENBQUMsT0FBTyxJQUFJLEVBQUU7WUFDZixDQUFDLENBQUMsT0FBTyxJQUFJLEVBQUU7WUFDZixDQUFDLENBQUMsT0FBTyxJQUFJLEVBQUU7WUFDZixDQUFDLENBQUMsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDLENBQUMsT0FBTyxJQUFJLEVBQUU7WUFDZixDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxFQUN0RSxDQUFDO1lBQ0MsQ0FBQyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQ2xCLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDM0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztvQkFDOUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3pELENBQUM7WUFDTCxDQUFDO2lCQUFNLElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDM0MsSUFDSSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssb0JBQW9CO29CQUM1QyxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQztvQkFDekIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyxvQkFBb0I7d0JBQzNDLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLENBQUM7b0JBQ2xDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFDYixDQUFDO29CQUNDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7b0JBQzlDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN6RCxDQUFDO3FCQUFNLElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ3ZDLElBQUksU0FBUyxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FDckMscUJBQXFCLENBQ1EsQ0FBQztvQkFDbEMsQ0FBQyxHQUFJLFNBQWlCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7d0JBQ3ZDLElBQ0ksSUFBSTs0QkFDSixJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFDbEQsQ0FBQzs0QkFDQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQ0FDdEIsU0FBUyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQzs0QkFDaEMsQ0FBQztpQ0FBTSxDQUFDO2dDQUNKLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzs0QkFDMUIsQ0FBQzs0QkFDRCxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDOzRCQUN6QixPQUFPO3dCQUNYLENBQUM7b0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBQ1AsQ0FBQztxQkFBTSxJQUNILENBQUMsQ0FBQyxRQUFRO29CQUNWLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQztvQkFDZCxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsRUFDMUIsQ0FBQztvQkFDQyxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDNUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7b0JBQzVCLENBQUM7b0JBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztvQkFDOUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDbkQsQ0FBQztxQkFBTSxJQUNILENBQUMsQ0FBQyxRQUFRO29CQUNWLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQztvQkFDZCxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsRUFDMUIsQ0FBQztvQkFDQyxJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ25ELENBQUMsR0FBSSxTQUFpQixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFO3dCQUN2QyxJQUNJLElBQUk7NEJBQ0osSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQ2xELENBQUM7NEJBQ0MsSUFBSSxTQUFTLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0NBQ3RCLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7NEJBQ2hDLENBQUM7NEJBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQzs0QkFDekIsT0FBTzt3QkFDWCxDQUFDO29CQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7WUFDTCxDQUFDO2lCQUFNLElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hDLENBQUM7aUJBQU0sSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLEVBQUUsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEMsQ0FBQztpQkFBTSxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdkMsQ0FBQztRQUNMLENBQUM7YUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNwQixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3BCLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLENBQUM7WUFFRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsQ0FBQztJQUNMLENBQUM7SUFFTSxrQkFBa0IsQ0FDckIsS0FBb0IsRUFDcEIsZ0JBQWdCLEdBQUcsS0FBSztRQUV4QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNwQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzVCLENBQUM7UUFFRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELE1BQU0sc0JBQXNCLEdBQ3hCLElBQUksQ0FBQyxjQUFjLEtBQUssQ0FBQztZQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyx5QkFBeUIsQ0FBQyxXQUFXLENBQUM7UUFFcEUsSUFBSSxlQUFlLElBQUksc0JBQXNCLEVBQUUsQ0FBQztZQUM1QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLENBQUM7YUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQUUsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2lCQUN6QyxDQUFDO2dCQUNGLElBQUksQ0FBQyxnQkFBZ0I7b0JBQUUsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUU5QyxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssQ0FBQyxDQUFDO29CQUFFLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO2dCQUN4RCxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckMsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRU8sUUFBUSxDQUFDLEdBQWtCO1FBQy9CLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUUsTUFBTSxDQUFDLEtBQXVCLENBQUM7UUFDbEQsSUFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUNuRCxPQUFPLENBQ0gsQ0FBQyxRQUFRLElBQUksRUFBRSxJQUFJLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDbEMsQ0FBQyxRQUFRLElBQUksRUFBRSxJQUFJLFFBQVEsSUFBSSxHQUFHLENBQUMsQ0FDdEMsQ0FBQztJQUNOLENBQUM7SUFFTyxlQUFlLENBQUMsQ0FBZ0I7UUFDcEMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLHFDQUFxQztRQUN4RixPQUFPLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTSxPQUFPLENBQUMsS0FBa0I7UUFDN0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVNLFlBQVk7UUFDZixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQywrQkFBK0IsQ0FBQyxFQUFFO1lBQ3hELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQywrQkFBK0IsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDekUsQ0FBQztJQUVNLHFCQUFxQjtRQUN4QixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQywrQkFBK0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUMzRCxJQUNJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLCtCQUErQixDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFDcEUsQ0FBQztnQkFDQyxZQUFZLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBQ3JDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLCtCQUErQixDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNwRSxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2xDLCtCQUErQjtnQkFDL0IsSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUN0QyxTQUFTLEVBQUUsZUFBZSxFQUFFLENBQUM7WUFDakMsQ0FBQztZQUNELE9BQU87UUFDWCxDQUFDO0lBQ0wsQ0FBQztJQUVNLGdCQUFnQixDQUFDLENBQVE7UUFDNUIsTUFBTSxLQUFLLEdBQUcsQ0FBZSxDQUFDO1FBRTlCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQy9CLFlBQVksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUNyQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1lBQzFCLElBQ0ksQ0FBQyxJQUFJLENBQUMsY0FBYyxLQUFLLENBQUMsQ0FBQztnQkFDdEIsS0FBSyxFQUFFLE1BQXNCLEVBQUUsUUFBUSxLQUFLLE9BQU8sQ0FBQztnQkFDeEQsS0FBSyxFQUFFLGFBQTZCLEVBQUUsUUFBUSxLQUFLLE9BQU87Z0JBQzNELEtBQUssRUFBRSxhQUFhLEtBQUssSUFBSSxFQUMvQixDQUFDO2dCQUNDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2dCQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDN0IsQ0FBQztZQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQywrQkFBK0IsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdEUsQ0FBQztJQUNMLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxPQUFhO1FBQ2pDLElBQUksS0FBWSxDQUFDO1FBQ2pCLElBQUksU0FBMkIsQ0FBQztRQUVoQyxJQUFJLE1BQU0sQ0FBQyxZQUFZLElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzlDLFNBQVMsR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMvQixLQUFLLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbEMsU0FBUyxFQUFFLGVBQWUsRUFBRSxDQUFDO1lBQzdCLFNBQVMsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsQ0FBQztJQUNMLENBQUM7SUFFTSxZQUFZLENBQUMsS0FJbkI7UUFDRyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBRTdCLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFFbEUsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFL0MsSUFBSSxnQkFBZ0IsSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDOUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDbEQsWUFBWSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3JDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDN0IsT0FBTztRQUNYLENBQUM7UUFFRCxZQUFZLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDckMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3BELENBQUM7aUJBQU0sQ0FBQztnQkFDSixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDbkQsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsRUFBTztRQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU0sUUFBUSxDQUFDLENBQW1CLElBQVMsQ0FBQztJQUV0QyxVQUFVLENBQUMsR0FBcUI7UUFDbkMsSUFBSSxHQUFHO1lBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU0saUJBQWlCLEtBQVUsQ0FBQztJQUVuQyxnQkFBZ0I7SUFDVCxjQUFjO1FBQ2pCLFlBQVksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNyQyxJQUNJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLHlCQUF5QixDQUFDLFdBQVcsRUFDakUsQ0FBQztnQkFDQyxJQUNJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLFNBQVMsQ0FBQztvQkFDM0MsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsU0FBUyxDQUFDO29CQUMzQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFDN0MsQ0FBQztvQkFDQyxJQUNJLElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQW9CO3dCQUNyQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO3dCQUVoRCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUM7NEJBQ2pDLE9BQU8sRUFBRSxJQUFJO3lCQUNoQixDQUFDLENBQUM7b0JBQ1AsNEJBQTRCO3lCQUN2QixDQUFDO3dCQUNGLElBQ0ksSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0I7NEJBQ25DLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFDbkQsQ0FBQzs0QkFDQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUM7Z0NBQ2pDLE9BQU8sRUFBRSxJQUFJOzZCQUNoQixDQUFDLENBQUMsQ0FBQyw2QkFBNkI7d0JBQ3JDLENBQUM7NkJBQU0sQ0FBQzs0QkFDSixJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ2pDLElBQUksQ0FBQyxpQkFBaUIsQ0FDekIsQ0FBQzt3QkFDTixDQUFDO29CQUNMLENBQUM7Z0JBQ0wsQ0FBQztxQkFBTSxDQUFDO29CQUNKLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7b0JBQzFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7b0JBQzFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7b0JBQzFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO29CQUNwQyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztnQkFDL0IsQ0FBQztZQUNMLENBQUM7aUJBQU0sSUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7Z0JBQ3JCLHlCQUF5QixDQUFDLHFCQUFxQixFQUNqRCxDQUFDO2dCQUNDLElBQ0ksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO29CQUMxQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFDNUMsQ0FBQztvQkFDQyxJQUNJLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCO3dCQUNuQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQ25ELENBQUM7d0JBQ0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyw2QkFBNkI7b0JBQzFGLENBQUM7eUJBQU0sQ0FBQzt3QkFDSixJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ2pDLElBQUksQ0FBQyxpQkFBaUIsQ0FDekIsQ0FBQztvQkFDTixDQUFDO2dCQUNMLENBQUM7cUJBQU0sQ0FBQztvQkFDSixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO29CQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO29CQUMxQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztvQkFDcEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7Z0JBQy9CLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osSUFDSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUM7b0JBQzFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUM1QyxDQUFDO29CQUNDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDakMsSUFBSSxDQUFDLGlCQUFpQixDQUN6QixDQUFDO2dCQUNOLENBQUM7cUJBQU0sQ0FBQztvQkFDSixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO29CQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO29CQUMxQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztvQkFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7Z0JBQy9CLENBQUM7WUFDTCxDQUFDO1lBRUQsWUFBWSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDaEMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1osQ0FBQztJQUVNLGNBQWM7UUFDakIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVNLGVBQWU7UUFDbEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxJQUFzQixFQUFFLFFBQWtCO1FBQzlELElBQUksSUFBSSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUM7UUFDakMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyx5QkFBeUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNsRSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2pELFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLENBQUM7YUFBTSxJQUNILElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSTtZQUNyQix5QkFBeUIsQ0FBQyxxQkFBcUIsRUFDakQsQ0FBQztZQUNDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDakQsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakMsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJO2dCQUNBLElBQUksWUFBWSxJQUFJO29CQUNoQixDQUFDLENBQUMsSUFBSTtvQkFDTixDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUMvRCxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRTlDLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdEQsVUFBVSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FDL0MsSUFBSSxDQUFDLFVBQVUsQ0FDbEIsQ0FBQztZQUNGLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxhQUFhLENBQUM7WUFDMUMsSUFBSSxHQUFHLGFBQWEsQ0FBQztRQUN6QixDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVE7WUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFNUIsZ0RBQWdEO1FBQ2hELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLElBQUksQ0FBQyxLQUFLO2dCQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFbkUsSUFBSSxJQUFJLENBQUMsS0FBSztnQkFDVixJQUNJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSTtvQkFDckIseUJBQXlCLENBQUMscUJBQXFCLEVBQ2pELENBQUM7b0JBQ0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbkQsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkQsQ0FBQztxQkFBTSxDQUFDO29CQUNKLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZELENBQUM7UUFDVCxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFTixJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1AsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztJQUM5QixDQUFDO0lBRU0sb0JBQW9CLENBQUMsQ0FBZ0IsRUFBRSxTQUFtQjtRQUM3RCxNQUFNLFlBQVksR0FDZCxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWU7WUFDN0QsQ0FBQyxDQUFDLFNBQVM7WUFDWCxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sVUFBVSxHQUNaLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsZUFBZTtZQUM3RCxDQUFDLENBQUMsU0FBUztZQUNYLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFdkQsSUFBSSxVQUF1QyxDQUFDO1FBRTVDLElBQ0ksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJO1lBQ3JCLHlCQUF5QixDQUFDLHFCQUFxQixFQUNqRCxDQUFDO1lBQ0MsVUFBVTtnQkFDTixLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO29CQUN6QyxJQUFJLENBQUMsZUFBZTtvQkFDaEIsQ0FBQyxDQUFDLEVBQUU7b0JBQ0osQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBRUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDN0IsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyx5QkFBeUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNsRSxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLElBQUksU0FBUyxFQUFFLENBQUM7b0JBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztvQkFDMUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDakMsQ0FBQztxQkFBTSxJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDcEMsSUFBSSxXQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO29CQUN0RCxJQUFJLFdBQVcsR0FBRyxFQUFFLEVBQUUsQ0FBQzt3QkFDbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLENBQ2pDLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUN4QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNaLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO3dCQUN4QixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUN2QyxDQUFDO3lCQUFNLENBQUM7d0JBQ0osSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksSUFBSSxDQUM3QixJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUMzQixRQUFRLENBQ0osSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUzs0QkFDOUIsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDdEIsR0FBRyxDQUFDLENBQ1IsQ0FDSixDQUFDO3dCQUVGLElBQUksQ0FBQyxXQUFXOzRCQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7OzRCQUUxQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsQ0FDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUztnQ0FDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDbEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFFaEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7d0JBQ3hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3ZDLENBQUM7Z0JBQ0wsQ0FBQztxQkFBTSxDQUFDO29CQUNKLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7d0JBQ2YsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksSUFBSSxDQUM3QixJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ3ZELENBQUM7b0JBRU4sTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUV0RCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDO29CQUVqRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO3dCQUM3QixJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQzt3QkFDeEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDdkMsQ0FBQzs7d0JBQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ25DLElBQUksU0FBUyxFQUFFLENBQUM7b0JBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztvQkFDMUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZDLENBQUM7cUJBQU0sSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQ2xDLElBQUksV0FBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztvQkFDcEQsSUFBSSxXQUFXLEdBQUcsRUFBRSxFQUFFLENBQUM7d0JBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxDQUNqQyxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDeEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDWixJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQzt3QkFDeEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDdkMsQ0FBQzt5QkFBTSxDQUFDO3dCQUNKLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLElBQUksQ0FDN0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FDMUIsUUFBUSxDQUNKLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVM7NEJBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQ3RCLENBQ0osQ0FDSixDQUFDO3dCQUVGLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzs0QkFDZixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO3dCQUM5QyxDQUFDOzZCQUFNLENBQUM7NEJBQ0osSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLENBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVM7Z0NBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQ2xCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ2hCLENBQUM7d0JBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7d0JBQ3hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3ZDLENBQUM7Z0JBQ0wsQ0FBQztxQkFBTSxDQUFDO29CQUNKLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7d0JBQ2YsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksSUFBSSxDQUM3QixJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDbEQsQ0FBQztvQkFFTixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsQ0FDakMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQ3hCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBRVosSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQzt3QkFDN0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7d0JBQ3hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3ZDLENBQUM7eUJBQU0sQ0FBQzt3QkFDSixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2pDLENBQUM7Z0JBQ0wsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLFNBQVMsRUFBRSxDQUFDO29CQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7b0JBQzFDLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO29CQUN4QixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN2QyxDQUFDO3FCQUFNLElBQUksQ0FBQyxVQUFVLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDM0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLENBQ2pDLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUN4QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNaLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLElBQUksQ0FDN0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FDOUIsUUFBUSxDQUFDLE1BQU0sUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQ3BDLENBQ0osQ0FBQztvQkFFRixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pDLENBQUM7cUJBQU0sQ0FBQztvQkFDSixNQUFNLFNBQVMsR0FBRyxRQUFRLENBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUN2RCxDQUFDO29CQUVGLE1BQU0sYUFBYSxHQUNmLFNBQVMsR0FBRyxFQUFFO3dCQUNWLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQzt3QkFDNUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLElBQUksQ0FDN0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FDcEQsQ0FBQztvQkFFRixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsQ0FDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQ3ZELENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ1osSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqQyxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7YUFBTSxJQUNILElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSTtZQUNyQix5QkFBeUIsQ0FBQyxxQkFBcUIsRUFDakQsQ0FBQztZQUNDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksU0FBUyxFQUFFLENBQUM7b0JBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztvQkFDMUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDakMsQ0FBQztxQkFBTSxJQUFJLFlBQVksRUFBRSxDQUFDO29CQUN0QixNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7b0JBQ3hELElBQUksV0FBVyxHQUFHLEVBQUUsRUFBRSxDQUFDO3dCQUNuQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsQ0FDakMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQ3hCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ1osSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7d0JBQ3hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3ZDLENBQUM7eUJBQU0sQ0FBQzt3QkFDSixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxJQUFJLENBQzdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQzNCLFFBQVEsQ0FDSixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTOzRCQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUN0QixHQUFHLENBQUMsQ0FDUixDQUNKLENBQUM7d0JBRUYsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDOzRCQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7d0JBQzlDLENBQUM7NkJBQU0sQ0FBQzs0QkFDSixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsQ0FDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUztnQ0FDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDbEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDaEIsQ0FBQzt3QkFFRCxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQzt3QkFDeEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDdkMsQ0FBQztnQkFDTCxDQUFDO3FCQUFNLENBQUM7b0JBQ0osSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQzt3QkFDZixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxJQUFJLENBQzdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDdkQsQ0FBQztvQkFFTixNQUFNLFdBQVcsR0FBRyxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBRXRELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUM7b0JBRWpELElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7d0JBQzdCLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO3dCQUN4QixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUN2QyxDQUFDOzt3QkFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osSUFBSSxTQUFTLEVBQUUsQ0FBQztvQkFDWixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO29CQUMxQyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDdkMsQ0FBQztxQkFBTSxJQUFJLENBQUMsVUFBVSxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQzNELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxDQUNqQyxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDeEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDWixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxJQUFJLENBQzdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQzlCLFFBQVEsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUNwQyxDQUNKLENBQUM7b0JBRUYsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqQyxDQUFDO3FCQUFNLENBQUM7b0JBQ0osTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDdkQsQ0FBQztvQkFFRixNQUFNLGFBQWEsR0FDZixTQUFTLEdBQUcsRUFBRTt3QkFDVixDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7d0JBQzVCLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQyxDQUFDO29CQUNyQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxJQUFJLENBQzdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQ3BELENBQUM7b0JBRUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLENBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUN2RCxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNaLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDakMsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVELG9CQUFvQixDQUFDLElBQVksRUFBRSxTQUFtQjtRQUNsRCxRQUFRLElBQUksRUFBRSxDQUFDO1lBQ1gsS0FBSyxDQUFDO2dCQUNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNoRCxNQUFNO1lBQ1YsS0FBSyxDQUFDO2dCQUNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNoRCxNQUFNO1lBQ1YsS0FBSyxDQUFDO2dCQUNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNoRCxNQUFNO1lBQ1Y7Z0JBQ0ksSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDMUQsQ0FBQztRQUVELElBQUksU0FBUztZQUFFLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO0lBQy9DLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxLQUFvQjtRQUM1QyxRQUFRLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQixLQUFLLEVBQUUsRUFBRSxhQUFhO2dCQUNsQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDekIsTUFBTTtZQUNWLEtBQUssRUFBRSxDQUFDLENBQUMsY0FBYztZQUN2QixLQUFLLENBQUMsRUFBRSxNQUFNO2dCQUNWLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDcEMsTUFBTTtZQUNWLEtBQUssRUFBRSxFQUFFLFdBQVc7Z0JBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDNUIsTUFBTTtZQUNWLEtBQUssRUFBRSxFQUFFLGFBQWE7Z0JBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDOUIsTUFBTTtZQUNWLEtBQUssQ0FBQyxDQUFDLENBQUMsWUFBWTtZQUNwQixLQUFLLEVBQUUsRUFBRSxTQUFTO2dCQUNkLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZDLE1BQU07UUFDZCxDQUFDO0lBQ0wsQ0FBQztJQUVPLHFCQUFxQixDQUFDLElBQWEsRUFBRSxZQUFxQjtRQUM5RCxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssQ0FBQztZQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDakQsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLENBQUM7WUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQzs7WUFDbkUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFNBQWlCO1FBQ3RDLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxDQUFDLENBQUM7WUFBRSxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztRQUV4RCxNQUFNLElBQUksR0FBRyxTQUFTLEtBQUssSUFBSSxDQUFDO1FBQ2hDLE1BQU0sWUFBWSxHQUNkLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLHlCQUF5QixDQUFDLFdBQVcsQ0FBQztRQUNwRSxNQUFNLGdCQUFnQixHQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7WUFDckIseUJBQXlCLENBQUMscUJBQXFCLENBQUM7UUFFcEQsSUFBSSxZQUFZLElBQUksZ0JBQWdCO1lBQ2hDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7O1lBQzlDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU8sdUJBQXVCLENBQUMsQ0FBZ0I7UUFDNUMsTUFBTSxvQkFBb0IsR0FDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJO1lBQ3JCLHlCQUF5QixDQUFDLHFCQUFxQixDQUFDO1FBQ3BELE1BQU0sUUFBUSxHQUFHLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU5QyxJQUFJLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hELElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pELENBQUM7YUFBTSxJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMxQixDQUFDO2FBQU0sSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDOUIsQ0FBQztJQUNMLENBQUM7SUFFTyxrQkFBa0I7UUFDdEIsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FDeEIsUUFBUSxDQUFDLGdCQUFnQixDQUFDLHFCQUFxQixDQUFDLENBQzdCLENBQUM7UUFFeEIsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FDcEMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNOLEtBQUssS0FBSyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FDakUsQ0FBQztRQUVGLElBQUksWUFBWSxLQUFLLENBQUMsQ0FBQztZQUFFLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO2FBQzVDLElBQUksWUFBWSxLQUFLLENBQUM7WUFBRSxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQzthQUNoRCxDQUFDO1lBQ0YsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBRUQsSUFBSSxZQUFZLEdBQUcsQ0FBQztZQUFFLFNBQVMsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFMUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRU8sY0FBYztRQUNsQixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUN4QixRQUFRLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCLENBQUMsQ0FDN0IsQ0FBQztRQUN4QixNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsU0FBUyxDQUNwQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ04sS0FBSyxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUNqRSxDQUFDO1FBRUYsSUFBSSxTQUFTLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztZQUFFLFNBQVMsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDaEUsQ0FBQztZQUNGLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzFCLENBQUM7UUFFRCxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTSxlQUFlLENBQUMsS0FBYztRQUNqQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUMvQyxDQUFDO0lBRU8saUJBQWlCO1FBQ3JCLElBQUksSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6RCxDQUFDO0lBQ0wsQ0FBQztJQUVPLFdBQVcsQ0FBQyxJQUFhO1FBQzdCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxJQUFJLENBQzdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQzNCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxVQUFVLENBQ2pELENBQ0osQ0FBQztRQUVGLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUM5QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUN4QyxDQUFDO1FBQ0YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVPLFVBQVUsQ0FBQyxJQUFhLEVBQUUsWUFBcUI7UUFDbkQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLElBQUksQ0FDN0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxHQUFHLFNBQVMsQ0FDL0MsQ0FDSixDQUFDO1FBRUYsTUFBTSxXQUFXLEdBQUcsWUFBWTtZQUM1QixDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhO1lBQzFCLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUMvQixXQUFXLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFTyxVQUFVLENBQUMsSUFBYSxFQUFFLFlBQXFCO1FBQ25ELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxJQUFJLENBQzdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQzlCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsR0FBRyxTQUFTLENBQ25ELENBQ0osQ0FBQztRQUVGLE1BQU0sV0FBVyxHQUFHLFlBQVk7WUFDNUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYTtZQUMxQixDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUM7UUFDL0IsV0FBVyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCO2FBQ3pDLFdBQVcsRUFBRTthQUNiLFFBQVEsRUFBRTthQUNWLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFTyxRQUFRLENBQUMsS0FBYTtRQUMxQixPQUFPLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxJQUFhO1FBQ3ZDLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxDQUFDO1lBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNqRCxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssQ0FBQztZQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7O1lBQ3hELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU8sV0FBVyxDQUFDLElBQWE7UUFDN0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUM7UUFFbkUsSUFBSSxhQUFhLEtBQUssQ0FBQztZQUFFLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDNUMsSUFBSSxhQUFhLEtBQUssQ0FBQyxDQUFDO1lBQUUsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUU3QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxJQUFJLENBQzdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQ2pELENBQUM7UUFFRixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FDOUMsYUFBYSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUMxRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFaEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUztZQUM5QixhQUFhLEdBQUcsRUFBRSxJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQy9ELENBQUM7SUFFTyxhQUFhLENBQUMsSUFBYTtRQUMvQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksSUFBSSxDQUM3QixJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUM3QixJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLEdBQUcsWUFBWSxDQUNyRCxDQUNKLENBQUM7UUFFRixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FDOUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxDQUN0QyxDQUFDO1FBQ0YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVPLFVBQVU7UUFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTO1lBQzlCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBRTlELE1BQU0sVUFBVSxHQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDM0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksSUFBSSxDQUM3QixJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUMzQixJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLEdBQUcsVUFBVSxDQUNqRCxDQUNKLENBQUM7UUFFRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU0sVUFBVSxDQUFDLEtBQWM7UUFDNUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFakMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFFTSxXQUFXLENBQUMsS0FBVTtRQUN6QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxhQUFhO1FBQ2IsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQzdCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMxQixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDWixDQUFDO0lBRU0sbUJBQW1CO1FBQ3RCLElBQUksSUFBSSxDQUFDLEtBQUs7WUFDVixJQUNJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLHlCQUF5QixDQUFDLFdBQVcsRUFDakUsQ0FBQztnQkFDQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQzlDLENBQUM7aUJBQU0sSUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7Z0JBQ3JCLHlCQUF5QixDQUFDLHFCQUFxQixFQUNqRCxDQUFDO2dCQUNDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDOUMsQ0FBQztpQkFBTSxJQUNILElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLHlCQUF5QixDQUFDLFdBQVcsRUFDakUsQ0FBQztnQkFDQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQzlDLENBQUM7UUFFTCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFFTSxpQkFBaUI7UUFDcEIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyx5QkFBeUIsQ0FBQyxXQUFXO1lBQy9ELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLElBQUksQ0FDN0IsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztnQkFDekIsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FDM0QsQ0FBQztJQUNWLENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdCLENBQUM7K0dBN2xDUSw4QkFBOEI7bUdBQTlCLDhCQUE4QixtZ0JBRjVCLENBQUMsNkJBQTZCLENBQUMsMkZBYS9CLCtCQUErQix3TEFJL0Isa0JBQWtCLDhiQ3RGakMsd2tIQXdHQTtnQkRoRFEsVUFBVTtnQkFDVixZQUFZLGlOQUNaLFdBQVcsc0lBQ1gsbUJBQW1CLGlOQUNuQixvQkFBb0I7Z0JBQ3BCLGFBQWE7Z0JBQ2IsZ0NBQWdDLHNLQUNoQyxrQkFBa0I7Z0JBQ2xCLFFBQVE7Z0JBQ1IsNEJBQTRCLDREQUM1Qix1QkFBdUIsdURBQ3ZCLGVBQWU7OzRGQUlWLDhCQUE4QjtrQkF4QjFDLFNBQVM7K0JBQ0ksMEJBQTBCLGNBTXhCLElBQUksV0FDUDt3QkFDTCxVQUFVO3dCQUNWLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLG9CQUFvQjt3QkFDcEIsYUFBYTt3QkFDYixnQ0FBZ0M7d0JBQ2hDLGtCQUFrQjt3QkFDbEIsUUFBUTt3QkFDUiw0QkFBNEI7d0JBQzVCLHVCQUF1Qjt3QkFDdkIsZUFBZTtxQkFDbEIsYUFDVSxDQUFDLDZCQUE2QixDQUFDOzswQkE0RHJDLElBQUk7cUZBdkRBLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFFVyxlQUFlO3NCQUEvQixNQUFNO3VCQUFDLE9BQU87Z0JBRU0sY0FBYztzQkFBbEMsTUFBTTt1QkFBQyxXQUFXO2dCQUluQiwrQkFBK0I7c0JBRDlCLFNBQVM7dUJBQUMsK0JBQStCO2dCQUdaLGVBQWU7c0JBQTVDLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUU1QixnQkFBZ0I7c0JBRGYsU0FBUzt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBcUJyQyxnQ0FBZ0M7c0JBQXpDLE1BQU07Z0JBQ0csZ0NBQWdDO3NCQUF6QyxNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFJRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBTStCLEtBQUs7c0JBQTFDLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDRSxLQUFLO3NCQUExQyxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0UsS0FBSztzQkFBMUMsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNJLE9BQU87c0JBQTlDLFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE91dHB1dCxcbiAgICBTZWxmLFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIEZvcm1Db250cm9sLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE5nQ29udHJvbCxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG4vLyBJbXBvcnRzXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBOZ2JQb3BvdmVyIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbi8vIE1vZGVsc1xuaW1wb3J0IHsgSUNhSW5wdXQgfSBmcm9tICcuLi9jYS1pbnB1dC9jb25maWcnO1xuaW1wb3J0IHsgSW5wdXRDaGFuZ2VWYWx1ZSwgSW5wdXRTdmdSb3V0ZXMgfSBmcm9tICcuLi9jYS1pbnB1dC91dGlscyc7XG5cbi8vIFBpcGVcbmltcG9ydCB7XG4gICAgSW5wdXRDb250YWluZXJDbGFzc1BpcGUsXG4gICAgSW5wdXREYXRldGltZVBpY2tlckNsYXNzUGlwZSxcbn0gZnJvbSAnLi4vY2EtaW5wdXQvcGlwZXMnO1xuXG4vLyBDb21wb25lbnRzXG5pbXBvcnQgeyBDYUN1c3RvbURhdGV0aW1lUGlja2Vyc0NvbXBvbmVudCB9IGZyb20gJy4uL2NhLWN1c3RvbS1kYXRldGltZS1waWNrZXJzL2NhLWN1c3RvbS1kYXRldGltZS1waWNrZXJzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0UGxhY2Vob2xkZXJJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vY2EtaW5wdXQvY29tcG9uZW50cy9jYS1pbnB1dC1wbGFjZWhvbGRlci1pY29uL2NhLWlucHV0LXBsYWNlaG9sZGVyLWljb24uY29tcG9uZW50JztcblxuLy8gRW51bXNcbmltcG9ydCB7IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0gfSBmcm9tICcuLi9jYS1pbnB1dC9lbnVtcyc7XG5cbi8vIFNlcnZpY2VzXG5pbXBvcnQgeyBDYWxlbmRhckRhdGVUaW1lUGlja2VyU2VydmljZSB9IGZyb20gJy4uL2NhLWN1c3RvbS1kYXRldGltZS1waWNrZXJzL3NlcnZpY2VzL2NhbGVuZGFyLWRhdGV0aW1lLXBpY2tlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFuZ3VsYXJTdmdJY29uTW9kdWxlIH0gZnJvbSAnYW5ndWxhci1zdmctaWNvbic7XG5pbXBvcnQgeyBGb3JtQ29udHJvbFBpcGUgfSBmcm9tICcuLi9jYS1pbnB1dC9waXBlcy9mb3JtLWNvbnRyb2wucGlwZSc7XG5pbXBvcnQgeyBJbnB1dFRlc3RDb21wb25lbnQgfSBmcm9tICcuLi9jYS1pbnB1dC10ZXN0L2lucHV0LXRlc3QuY29tcG9uZW50JztcbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnY2EtaW5wdXQtZGF0ZXRpbWUtcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2EtaW5wdXQtZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFtcbiAgICAgICAgJy4vY2EtaW5wdXQtZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5zY3NzJyxcbiAgICAgICAgJy4uL2NhLWlucHV0L3Njc3MvL2NhLWlucHV0LmRhdGVwaWNrZXIuc2NzcycsXG4gICAgXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgLy8gbW9kdWxlc1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBBbmd1bGFyU3ZnSWNvbk1vZHVsZSxcbiAgICAgICAgLy8gY29tcG9uZW50c1xuICAgICAgICBDYUN1c3RvbURhdGV0aW1lUGlja2Vyc0NvbXBvbmVudCxcbiAgICAgICAgSW5wdXRUZXN0Q29tcG9uZW50LFxuICAgICAgICAvLyBwaXBlc1xuICAgICAgICBJbnB1dERhdGV0aW1lUGlja2VyQ2xhc3NQaXBlLFxuICAgICAgICBJbnB1dENvbnRhaW5lckNsYXNzUGlwZSxcbiAgICAgICAgRm9ybUNvbnRyb2xQaXBlLFxuICAgIF0sXG4gICAgcHJvdmlkZXJzOiBbQ2FsZW5kYXJEYXRlVGltZVBpY2tlclNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBDYUlucHV0RGF0ZXRpbWVQaWNrZXJDb21wb25lbnRcbiAgICBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkRlc3Ryb3lcbntcbiAgICBASW5wdXQoKSBpbnB1dENvbmZpZyE6IElDYUlucHV0O1xuICAgIEBJbnB1dCgpIGZvcm1Gb3JtYXQ/OiBzdHJpbmc7XG5cbiAgICBAT3V0cHV0KCdjbGVhcicpIGNsZWFySW5wdXRFdmVudDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID1cbiAgICAgICAgbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAgIEBPdXRwdXQoJ2JsdXJJbnB1dCcpIGJsdXJJbnB1dEV2ZW50OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPVxuICAgICAgICBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICBAVmlld0NoaWxkKENhSW5wdXRQbGFjZWhvbGRlckljb25Db21wb25lbnQpXG4gICAgY2FJbnB1dFBsYWNlaG9sZGVySWNvbkNvbXBvbmVudCE6IENhSW5wdXRQbGFjZWhvbGRlckljb25Db21wb25lbnQ7XG5cbiAgICBAVmlld0NoaWxkKCdkYXRlVGltZVBvcG92ZXInKSBkYXRlVGltZVBvcG92ZXIhOiBOZ2JQb3BvdmVyO1xuICAgIEBWaWV3Q2hpbGQoSW5wdXRUZXN0Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIGNhSW5wdXRDb21wb25lbnQhOiBJbnB1dFRlc3RDb21wb25lbnQ7XG5cbiAgICBwdWJsaWMgaW5wdXRGb3JtQ29udHJvbDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2wobnVsbCk7XG5cbiAgICBwdWJsaWMgc2hvd0RhdGVJbnB1dDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBkYXRlVGltZUlucHV0RGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgcHVibGljIGRhdGVUaW1lSW50RGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgcHVibGljIHNlbGVjdGlvbklucHV0OiBudW1iZXIgPSAtMTtcblxuICAgIHByaXZhdGUgZGF0ZVRpbWVNYWluVGltZXIhOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bWJlcjtcbiAgICBwcml2YXRlIGZvY3VzQmx1ciE6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVtYmVyO1xuICAgIHByaXZhdGUgdGltZW91dENsZWFuZXIhOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bWJlcjtcblxuICAgIHB1YmxpYyBpbnB1dFN2Z1JvdXRlcyA9IElucHV0U3ZnUm91dGVzO1xuXG4gICAgcHVibGljIGlzVG91Y2hlZElucHV0OiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIHByZXZlbnRCbHVyOiBib29sZWFuID0gZmFsc2U7XG4gICAgLy8gRGF0ZVxuICAgIHB1YmxpYyBuZXdJbnB1dENoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBPdXRwdXQoKSBzZWxlY3RMYXN0T25lRm9yU2VsZWN0aW9uRW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgICBAT3V0cHV0KCkgc2VsZWN0TGFzdE9uZUFmdGVyTW91c2VVcEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gICAgQE91dHB1dCgpIG9uRGF0ZVBhc3RlRW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8Q2xpcGJvYXJkRXZlbnQ+KCk7XG4gICAgQE91dHB1dCgpIG9uRm9jdXNFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PigpO1xuICAgIEBPdXRwdXQoKSBjaGFuZ2VTZWxlY3Rpb25FbW1pdGVyID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgICAgIGU6IEtleWJvYXJkRXZlbnQ7XG4gICAgICAgIG5vUHJldmVudERlZmF1bHQ6IGJvb2xlYW47XG4gICAgfT4oKTtcbiAgICBAT3V0cHV0KCkgc2V0U2VsZWN0aW9uRW1taXRlciA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgICAgICBwcmV2ZW50RGVmYXVsdDogKCkgPT4gdm9pZDtcbiAgICAgICAgc3RvcFByb3BhZ2F0aW9uOiAoKSA9PiB2b2lkO1xuICAgICAgICB0YXJnZXQ6IGFueTtcbiAgICB9PigpO1xuXG4gICAgQFZpZXdDaGlsZCgnc3BhbjEnLCB7IHN0YXRpYzogdHJ1ZSB9KSBzcGFuMSE6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnc3BhbjInLCB7IHN0YXRpYzogdHJ1ZSB9KSBzcGFuMiE6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnc3BhbjMnLCB7IHN0YXRpYzogdHJ1ZSB9KSBzcGFuMyE6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnaG9sZGVyMScsIHsgc3RhdGljOiB0cnVlIH0pIGhvbGRlcjEhOiBFbGVtZW50UmVmO1xuXG4gICAgcHJpdmF0ZSBkZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQFNlbGYoKSBwdWJsaWMgc3VwZXJDb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgICAgIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlOiBDYWxlbmRhckRhdGVUaW1lUGlja2VyU2VydmljZVxuICAgICkge1xuICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICB9XG5cbiAgICB2YWx1ZUFmdGVyV3JpdGVWYWx1ZSE6IHN0cmluZztcblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zdXBlckNvbnRyb2w/LmNvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZSgxKSkgLy8g8J+RiCBvbmx5IGxpc3RlbiBvbmNlXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZUFmdGVyV3JpdGVWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlQWZ0ZXJXcml0ZVZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlQWZ0ZXJXcml0ZVZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFRpbWVEYXRlSW5wdXQodGhpcy52YWx1ZUFmdGVyV3JpdGVWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFRpbWVQaWNrZXJUaW1lKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5kYXRlQ2hhbmdlZFxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pbnB1dENvbmZpZy5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGltZURhdGVJbnB1dChkYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYUlucHV0Q29tcG9uZW50LmNhSW5wdXRQbGFjZWhvbGRlckljb25Db21wb25lbnQudDI/LmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0IGdldFN1cGVyQ29udHJvbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w7XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGVjdExhc3RPbmVGb3JTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIGxldCByYW5nZSwgc2VsZWN0aW9uO1xuXG4gICAgICAgIHRoaXMuc2hvd0RhdGVJbnB1dCA9IHRydWU7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcbiAgICAgICAgdGhpcy5jYUlucHV0Q29tcG9uZW50LmlzRm9jdXNJbnB1dCA9IHRydWU7XG5cbiAgICAgICAgaWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24gJiYgZG9jdW1lbnQuY3JlYXRlUmFuZ2UpIHtcbiAgICAgICAgICAgIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSAhPT1cbiAgICAgICAgICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQodGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LCAxKTtcbiAgICAgICAgICAgICAgICByYW5nZS5zZXRFbmQodGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LCAxKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQodGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LCAxKTtcbiAgICAgICAgICAgICAgICByYW5nZS5zZXRFbmQodGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LCAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2VsZWN0aW9uPy5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgICAgIHNlbGVjdGlvbj8uYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50aW1lb3V0Q2xlYW5lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGF0ZVRpbWVNYWluVGltZXIpO1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZm9jdXNCbHVyKTtcbiAgICAgICAgfSwgOTApO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZWxlY3RMYXN0T25lQWZ0ZXJNb3VzZVVwKCk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09XG4gICAgICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAyO1xuICAgICAgICAgICAgdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2hvd0RhdGVJbnB1dCA9IHRydWU7XG5cbiAgICAgICAgdGhpcy50aW1lb3V0Q2xlYW5lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGF0ZVRpbWVNYWluVGltZXIpO1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZm9jdXNCbHVyKTtcbiAgICAgICAgfSwgOTApO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkRhdGVQYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBjb25zdCBwYXN0ZVRleHQgPSBldmVudC5jbGlwYm9hcmREYXRhPy5nZXREYXRhKCd0ZXh0JykgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCBwYXN0ZWREYXRlID0gbmV3IERhdGUocGFzdGVUZXh0KTtcbiAgICAgICAgaWYgKCFpc05hTihwYXN0ZWREYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VGltZURhdGVJbnB1dChwYXN0ZWREYXRlKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgodGhpcy5zZWxlY3Rpb25JbnB1dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjaGFuZ2VTZWxlY3Rpb24oZTogYW55LCBub1ByZXZlbnREZWZhdWx0ID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFub1ByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgZS5rZXlDb2RlID09IDM3IHx8XG4gICAgICAgICAgICBlLmtleUNvZGUgPT0gMzggfHxcbiAgICAgICAgICAgIGUua2V5Q29kZSA9PSAzOSB8fFxuICAgICAgICAgICAgZS5rZXlDb2RlID09IDQwIHx8XG4gICAgICAgICAgICBlLmtleUNvZGUgPT0gOCB8fFxuICAgICAgICAgICAgZS5rZXlDb2RlID09IDkgfHxcbiAgICAgICAgICAgIGUua2V5Q29kZSA9PSA0NiB8fFxuICAgICAgICAgICAgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT0gMyAmJiB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09ICd0aW1lcGlja2VyJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICAhZS5ub1ByZXZlbnQgJiYgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PSAzNykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IHRoaXMuc2VsZWN0aW9uSW5wdXQgLSAxO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KHRoaXMuc2VsZWN0aW9uSW5wdXQsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZS5rZXlDb2RlID09IDM5IHx8IGUua2V5Q29kZSA9PSA5KSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAoKHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gJ2RhdGVwaWNrZXJCYW5rQ2FyZCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgIT0gMSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmlucHV0Q29uZmlnLm5hbWUgIT09ICdkYXRlcGlja2VyQmFua0NhcmQnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCAhPSAyKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgIWUuc2hpZnRLZXlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IHRoaXMuc2VsZWN0aW9uSW5wdXQgKyAxO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KHRoaXMuc2VsZWN0aW9uSW5wdXQsIHRydWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZS5rZXlDb2RlID09IDkgJiYgIWUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFsbElucHV0cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5wdXQuaW5wdXQtY29udHJvbCdcbiAgICAgICAgICAgICAgICAgICAgKSBhcyBOb2RlTGlzdE9mPEhUTUxJbnB1dEVsZW1lbnQ+O1xuICAgICAgICAgICAgICAgICAgICBbLi4uKGFsbElucHV0cyBhcyBhbnkpXS5tYXAoKGl0ZW0sIGluZHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FJbnB1dENvbXBvbmVudC5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbElucHV0c1tpbmR4ICsgMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsSW5wdXRzW2luZHggKyAxXS5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmx1ck9uRGF0ZVRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZS5zaGlmdEtleSAmJlxuICAgICAgICAgICAgICAgICAgICBlLmtleUNvZGUgPT0gOSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ICE9IDBcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSB0aGlzLnNlbGVjdGlvbklucHV0IC0gMTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCh0aGlzLnNlbGVjdGlvbklucHV0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICBlLnNoaWZ0S2V5ICYmXG4gICAgICAgICAgICAgICAgICAgIGUua2V5Q29kZSA9PSA5ICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPT0gMFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYWxsSW5wdXRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQnKTtcbiAgICAgICAgICAgICAgICAgICAgWy4uLihhbGxJbnB1dHMgYXMgYW55KV0ubWFwKChpdGVtLCBpbmR4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhSW5wdXRDb21wb25lbnQuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbGxJbnB1dHNbaW5keCAtIDFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbElucHV0c1tpbmR4IC0gMV0uZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChlLmtleUNvZGUgPT0gMzgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGVUaW1lTW9kZWwoJ3VwJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGUua2V5Q29kZSA9PSA0MCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0ZVRpbWVNb2RlbCgnZG93bicpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlLmtleUNvZGUgPT0gOCB8fCBlLmtleUNvZGUgPT0gNDYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUtleWJvYXJkSW5wdXRzKGUsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzTnVtYmVyKGUpKSB7XG4gICAgICAgICAgICBpZiAoIW5vUHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIW5vUHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PSAtMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUtleWJvYXJkSW5wdXRzKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNoYW5nZVNlbGVjdGlvblR3byhcbiAgICAgICAgZXZlbnQ6IEtleWJvYXJkRXZlbnQsXG4gICAgICAgIG5vUHJldmVudERlZmF1bHQgPSBmYWxzZVxuICAgICk6IHZvaWQge1xuICAgICAgICBpZiAoIW5vUHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzTmF2aWdhdGlvbktleSA9IHRoaXMuaXNOYXZpZ2F0aW9uS2V5KGV2ZW50KTtcbiAgICAgICAgY29uc3QgaXNTcGVjaWFsVGltZVBpY2tlcktleSA9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID09PSAzICYmXG4gICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uVElNRV9QSUNLRVI7XG5cbiAgICAgICAgaWYgKGlzTmF2aWdhdGlvbktleSB8fCBpc1NwZWNpYWxUaW1lUGlja2VyS2V5KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVOYXZpZ2F0aW9uS2V5KGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5pc051bWJlcihldmVudCkpIHtcbiAgICAgICAgICAgIGlmICghbm9QcmV2ZW50RGVmYXVsdCkgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghbm9QcmV2ZW50RGVmYXVsdCkgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAtMSkgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVLZXlib2FyZElucHV0cyhldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTnVtYmVyKGV2dDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICBldnQgPSBldnQgPyBldnQgOiAod2luZG93LmV2ZW50IGFzIEtleWJvYXJkRXZlbnQpO1xuICAgICAgICBsZXQgY2hhckNvZGUgPSBldnQud2hpY2ggPyBldnQud2hpY2ggOiBldnQua2V5Q29kZTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1NykgfHxcbiAgICAgICAgICAgIChjaGFyQ29kZSA+PSA5NiAmJiBjaGFyQ29kZSA8PSAxMDUpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc05hdmlnYXRpb25LZXkoZTogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBuYXZpZ2F0aW9uS2V5cyA9IFszNywgMzgsIDM5LCA0MCwgOCwgOSwgNDZdOyAvLyBBcnJvdyBrZXlzLCBCYWNrc3BhY2UsIFRhYiwgRGVsZXRlXG4gICAgICAgIHJldHVybiBuYXZpZ2F0aW9uS2V5cy5pbmNsdWRlcyhlLmtleUNvZGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkZvY3VzKGV2ZW50PzogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uRm9jdXNFbWl0dGVyLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbG9zZVBvcG92ZXIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNhSW5wdXRDb21wb25lbnQuY2FJbnB1dFBsYWNlaG9sZGVySWNvbkNvbXBvbmVudC50MilcbiAgICAgICAgICAgIHRoaXMuY2FJbnB1dENvbXBvbmVudC5jYUlucHV0UGxhY2Vob2xkZXJJY29uQ29tcG9uZW50LnQyLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvZ2dsZURyb3Bkb3duT3B0aW9ucygpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FJbnB1dENvbXBvbmVudC5jYUlucHV0UGxhY2Vob2xkZXJJY29uQ29tcG9uZW50LnQyKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIXRoaXMuY2FJbnB1dENvbXBvbmVudC5jYUlucHV0UGxhY2Vob2xkZXJJY29uQ29tcG9uZW50LnQyLmlzT3BlbigpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZm9jdXNCbHVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FJbnB1dENvbXBvbmVudC5jYUlucHV0UGxhY2Vob2xkZXJJY29uQ29tcG9uZW50LnQyLm9wZW4oKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgICAgICAgICAgIC8vIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlRm9jdXNJbnB1dChlOiBFdmVudCkge1xuICAgICAgICBjb25zdCBldmVudCA9IGUgYXMgRm9jdXNFdmVudDtcblxuICAgICAgICBpZiAoIXRoaXMuaW5wdXRDb25maWcuaXNEaXNhYmxlZCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGF0ZVRpbWVNYWluVGltZXIpO1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZm9jdXNCbHVyKTtcbiAgICAgICAgICAgIHRoaXMuc2hvd0RhdGVJbnB1dCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgICAgIChldmVudD8udGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8ubm9kZU5hbWUgPT09ICdJTlBVVCcpIHx8XG4gICAgICAgICAgICAgICAgKGV2ZW50Py5yZWxhdGVkVGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8ubm9kZU5hbWUgPT09ICdJTlBVVCcgfHxcbiAgICAgICAgICAgICAgICBldmVudD8ucmVsYXRlZFRhcmdldCA9PT0gbnVsbFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2ZW50Qmx1ciA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jYUlucHV0Q29tcG9uZW50LmNhSW5wdXRQbGFjZWhvbGRlckljb25Db21wb25lbnQudDIudG9nZ2xlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0U3BhblNlbGVjdGlvbihlbGVtZW50OiBOb2RlKTogdm9pZCB7XG4gICAgICAgIGxldCByYW5nZTogUmFuZ2U7XG4gICAgICAgIGxldCBzZWxlY3Rpb246IFNlbGVjdGlvbiB8IG51bGw7XG5cbiAgICAgICAgaWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24gJiYgZG9jdW1lbnQuY3JlYXRlUmFuZ2UpIHtcbiAgICAgICAgICAgIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlbGVtZW50KTtcbiAgICAgICAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgICAgICBzZWxlY3Rpb24/LmFkZFJhbmdlKHJhbmdlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRTZWxlY3Rpb24oZXZlbnQ6IHtcbiAgICAgICAgcHJldmVudERlZmF1bHQ6ICgpID0+IHZvaWQ7XG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbjogKCkgPT4gdm9pZDtcbiAgICAgICAgdGFyZ2V0OiBhbnk7XG4gICAgfSk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xuXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbklucHV0ID0gcGFyc2VJbnQoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JykpO1xuXG4gICAgICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24gJiYgY3VycmVudFNlbGVjdGlvbi50b1N0cmluZygpLmxlbmd0aCA+IDEwKSB7XG4gICAgICAgICAgICB0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGF0ZVRpbWVNYWluVGltZXIpO1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZm9jdXNCbHVyKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRhdGVUaW1lTWFpblRpbWVyKTtcbiAgICAgICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdtYWluJykpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSBzZWxlY3Rpb25JbnB1dDtcbiAgICAgICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbihlbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgodGhpcy5zZWxlY3Rpb25JbnB1dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DaGFuZ2UoXzogSW5wdXRDaGFuZ2VWYWx1ZSk6IHZvaWQge31cblxuICAgIHB1YmxpYyB3cml0ZVZhbHVlKG9iajogSW5wdXRDaGFuZ2VWYWx1ZSk6IHZvaWQge1xuICAgICAgICBpZiAob2JqKSB0aGlzLnNldFRpbWVEYXRlSW5wdXQob2JqLCB0cnVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoKTogdm9pZCB7fVxuXG4gICAgLy8gQkxVUiBPTiBJTlBVVFxuICAgIHB1YmxpYyBibHVyT25EYXRlVGltZSgpOiB2b2lkIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGF0ZVRpbWVNYWluVGltZXIpO1xuICAgICAgICB0aGlzLmRhdGVUaW1lTWFpblRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICFpc05hTih0aGlzLnNwYW4xPy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCkgJiZcbiAgICAgICAgICAgICAgICAgICAgIWlzTmFOKHRoaXMuc3BhbjI/Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKSAmJlxuICAgICAgICAgICAgICAgICAgICAhaXNOYU4odGhpcy5zcGFuMz8ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcuaXNGdXR1cmVEYXRlRGlzYWJsZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbWVudCh0aGlzLmRhdGVUaW1lSW5wdXREYXRlKS5pc0FmdGVyKG1vbWVudCgpKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3QgYWNjZXB0IGZ1dHVyZSBkYXRlc1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLmV4cGlyZWREYXRlSW52YWxpZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbWVudCh0aGlzLmRhdGVUaW1lSW5wdXREYXRlKS5pc0JlZm9yZShtb21lbnQoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7IC8vIGRvbid0IGFjY2VwdCBleHBpcmVkIGRhdGVzXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmRhdGVDaGFuZ2VkLm5leHQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdtbSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnZGQnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ3l5JztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0RhdGVJbnB1dCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PVxuICAgICAgICAgICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICFpc05hTih0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKSAmJlxuICAgICAgICAgICAgICAgICAgICAhaXNOYU4odGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5leHBpcmVkRGF0ZUludmFsaWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbWVudCh0aGlzLmRhdGVUaW1lSW5wdXREYXRlKS5pc0JlZm9yZShtb21lbnQoKSlcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMoeyBpbnZhbGlkOiB0cnVlIH0pOyAvLyBkb24ndCBhY2NlcHQgZXhwaXJlZCBkYXRlc1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuZGF0ZUNoYW5nZWQubmV4dChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdtbSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAneXknO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RGF0ZUlucHV0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICFpc05hTih0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKSAmJlxuICAgICAgICAgICAgICAgICAgICAhaXNOYU4odGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuZGF0ZUNoYW5nZWQubmV4dChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ0hIJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdNTSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGltZVBpY2tlclRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RGF0ZUlucHV0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gLTE7XG4gICAgICAgICAgICB0aGlzLm5ld0lucHV0Q2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH0sIDEwMCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUG9wb3ZlclNob3duKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNob3dEYXRlSW5wdXQgPSB0cnVlO1xuICAgICAgICB0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBvcG92ZXJIaWRkZW4oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYmx1ck9uRGF0ZVRpbWUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0VGltZURhdGVJbnB1dChkYXRlOiBJbnB1dENoYW5nZVZhbHVlLCBoYXNWYWx1ZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgbGV0IHRleHQsIGRhdGVGb3JtYXQsIHRpbWVGb3JtYXQ7XG4gICAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVIpIHtcbiAgICAgICAgICAgIHRleHQgPSBtb21lbnQobmV3IERhdGUoZGF0ZSkpLmZvcm1hdCgnTU0vREQvWVknKTtcbiAgICAgICAgICAgIGRhdGVGb3JtYXQgPSB0ZXh0LnNwbGl0KCcvJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09XG4gICAgICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRleHQgPSBtb21lbnQobmV3IERhdGUoZGF0ZSkpLmZvcm1hdCgnTU0vREQvWVknKTtcbiAgICAgICAgICAgIGRhdGVGb3JtYXQgPSB0ZXh0LnNwbGl0KCcvJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRlID1cbiAgICAgICAgICAgICAgICBkYXRlIGluc3RhbmNlb2YgRGF0ZVxuICAgICAgICAgICAgICAgICAgICA/IGRhdGVcbiAgICAgICAgICAgICAgICAgICAgOiBuZXcgRGF0ZShtb21lbnQoKS5mb3JtYXQoJ01NL0REL1lZWVknKSArICcgJyArIGRhdGUpO1xuICAgICAgICAgICAgdGV4dCA9IG1vbWVudChuZXcgRGF0ZShkYXRlKSkuZm9ybWF0KCdISDptbScpO1xuXG4gICAgICAgICAgICB0aW1lRm9ybWF0ID0gbW9tZW50KG5ldyBEYXRlKGRhdGUpKS5mb3JtYXQoJ2hoL21tL0EnKTtcbiAgICAgICAgICAgIGRhdGVGb3JtYXQgPSB0aW1lRm9ybWF0LnNwbGl0KCcvJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5mb3JtRm9ybWF0KSB7XG4gICAgICAgICAgICBjb25zdCBuZXdGb3JtRm9ybWF0ID0gbW9tZW50KG5ldyBEYXRlKGRhdGUpKS5mb3JtYXQoXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtRm9ybWF0XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy52YWx1ZUFmdGVyV3JpdGVWYWx1ZSA9IG5ld0Zvcm1Gb3JtYXQ7XG4gICAgICAgICAgICB0ZXh0ID0gbmV3Rm9ybUZvcm1hdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaGFzVmFsdWUpIHRoaXMub25DaGFuZ2UodGV4dCk7XG4gICAgICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcblxuICAgICAgICAvLyBIQVMgVE8gQkUgSU4gVElNRU9VVCBCRUNBVVNFIE9GIEFOR1VMQVIgU1RBQ0tcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5zcGFuMSkgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGRhdGVGb3JtYXRbMF07XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnNwYW4yKVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lICE9PVxuICAgICAgICAgICAgICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gZGF0ZUZvcm1hdFsxXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGRhdGVGb3JtYXRbMl07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGRhdGVGb3JtYXRbMl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9LCAwKTtcblxuICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKGRhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2hvd0RhdGVJbnB1dCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZUtleWJvYXJkSW5wdXRzKGU6IEtleWJvYXJkRXZlbnQsIGlzUmVzdGFydD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3Bhbk9uZVZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQgPVxuICAgICAgICAgICAgaXNOYU4odGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCkgfHwgdGhpcy5uZXdJbnB1dENoYW5nZWRcbiAgICAgICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIDogcGFyc2VJbnQodGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCk7XG4gICAgICAgIGNvbnN0IHNwYW4yVmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCA9XG4gICAgICAgICAgICBpc05hTih0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKSB8fCB0aGlzLm5ld0lucHV0Q2hhbmdlZFxuICAgICAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgOiBwYXJzZUludCh0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKTtcblxuICAgICAgICBsZXQgc3BhbjNWYWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSAhPT1cbiAgICAgICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgICAgICkge1xuICAgICAgICAgICAgc3BhbjNWYWx1ZSA9XG4gICAgICAgICAgICAgICAgaXNOYU4odGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCkgfHxcbiAgICAgICAgICAgICAgICB0aGlzLm5ld0lucHV0Q2hhbmdlZFxuICAgICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICAgIDogcGFyc2VJbnQodGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm5ld0lucHV0Q2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGlmIChpc1Jlc3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdtbSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3Bhbk9uZVZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpbmFsX3ZhbHVlID0gcGFyc2VJbnQoYCR7c3Bhbk9uZVZhbHVlfSR7ZS5rZXl9YCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5hbF92YWx1ZSA+IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcwJyArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5zZXRNb250aChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbmFsX3ZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnbW0nO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLnNsaWNlKC0yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KGUua2V5KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldE1vbnRoKHBhcnNlSW50KGUua2V5KSAtIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmFsX3ZhbHVlID0gKCcwJyArIHBhcnNlSW50KGUua2V5KSkuc2xpY2UoLTIpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSBmaW5hbF92YWx1ZTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoYDEke2Uua2V5fWApID4gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAxKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzUmVzdGFydCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ2RkJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzcGFuMlZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpbmFsX3ZhbHVlID0gcGFyc2VJbnQoYCR7c3BhbjJWYWx1ZX0ke2Uua2V5fWApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmluYWxfdmFsdWUgPiAzMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMCcgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDIsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0RGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmluYWxfdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ2RkJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoZS5rZXkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0RGF0ZShwYXJzZUludChlLmtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICAgICAgICAgICAgICAnMCcgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgICAgICAgKS5zbGljZSgtMik7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KGAxJHtlLmtleX1gKSA+IDMxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNSZXN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAneXknO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzcGFuM1ZhbHVlIHx8IHNwYW4zVmFsdWUudG9TdHJpbmcoKS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgICAgICAgICAgICcwJyArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgICApLnNsaWNlKC0yKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5zZXRGdWxsWWVhcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUludChgMjAwJHtwYXJzZUludChlLmtleSl9YClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmFsWWVhciA9IHBhcnNlSW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmFsU2hvd1llYXIgPVxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxZZWFyID4gMzFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHBhcnNlSW50KGAxOSR7ZmluYWxZZWFyfWApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBwYXJzZUludChgMjAke2ZpbmFsWWVhcn1gKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5zZXRGdWxsWWVhcihmaW5hbFNob3dZZWFyKVxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT1cbiAgICAgICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgICAgICkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbklucHV0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzUmVzdGFydCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzcGFuT25lVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluYWxfdmFsdWUgPSBwYXJzZUludChgJHtzcGFuT25lVmFsdWV9JHtlLmtleX1gKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmFsX3ZhbHVlID4gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzAnICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICApLnNsaWNlKC0yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldE1vbnRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUludChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIC0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmluYWxfdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoZS5rZXkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0TW9udGgocGFyc2VJbnQoZS5rZXkpIC0gMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluYWxfdmFsdWUgPSAoJzAnICsgcGFyc2VJbnQoZS5rZXkpKS5zbGljZSgtMik7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGZpbmFsX3ZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludChgMSR7ZS5rZXl9YCkgPiAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChpc1Jlc3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICd5eSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAyO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDIsIHRydWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXNwYW4yVmFsdWUgfHwgc3BhbjJWYWx1ZS50b1N0cmluZygpLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgICAgICAgICAgICAgJzAnICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldEZ1bGxZZWFyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGAyMDAke3BhcnNlSW50KGUua2V5KX1gKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluYWxZZWFyID0gcGFyc2VJbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluYWxTaG93WWVhciA9XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFllYXIgPiAzMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcGFyc2VJbnQoYDE5JHtmaW5hbFllYXJ9YClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHBhcnNlSW50KGAyMCR7ZmluYWxZZWFyfWApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldEZ1bGxZZWFyKGZpbmFsU2hvd1llYXIpXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VsZWN0U3BhbkJ5VGFiSW5kZXgoaW5keDogbnVtYmVyLCBjaGFuZ2VUYWI/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHN3aXRjaCAoaW5keCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZVRhYikgdGhpcy5uZXdJbnB1dENoYW5nZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlTmF2aWdhdGlvbktleShldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgMzc6IC8vIExlZnQgYXJyb3dcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmVTZWxlY3Rpb25MZWZ0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM5OiAvLyBSaWdodCBhcnJvd1xuICAgICAgICAgICAgY2FzZSA5OiAvLyBUYWJcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmVTZWxlY3Rpb25SaWdodE9yVGFiKGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzg6IC8vIFVwIGFycm93XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRlVGltZU1vZGVsKCd1cCcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA0MDogLy8gRG93biBhcnJvd1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0ZVRpbWVNb2RlbCgnZG93bicpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA4OiAvLyBCYWNrc3BhY2VcbiAgICAgICAgICAgIGNhc2UgNDY6IC8vIERlbGV0ZVxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlS2V5Ym9hcmRJbnB1dHMoZXZlbnQsIHRydWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVEYXRlUGlja2VySW5wdXQoaXNVcDogYm9vbGVhbiwgaXNEYXRlUGlja2VyOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAwKSB0aGlzLnVwZGF0ZU1vbnRoKGlzVXApO1xuICAgICAgICBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAxKSB0aGlzLnVwZGF0ZURhdGUoaXNVcCwgaXNEYXRlUGlja2VyKTtcbiAgICAgICAgZWxzZSB0aGlzLnVwZGF0ZVllYXIoaXNVcCwgaXNEYXRlUGlja2VyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldERhdGVUaW1lTW9kZWwoZGlyZWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IC0xKSB0aGlzLnNlbGVjdGlvbklucHV0ID0gMDtcblxuICAgICAgICBjb25zdCBpc1VwID0gZGlyZWN0aW9uID09PSAndXAnO1xuICAgICAgICBjb25zdCBpc0RhdGVQaWNrZXIgPVxuICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSO1xuICAgICAgICBjb25zdCBpc0JhbmtDYXJkUGlja2VyID1cbiAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT1cbiAgICAgICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEO1xuXG4gICAgICAgIGlmIChpc0RhdGVQaWNrZXIgfHwgaXNCYW5rQ2FyZFBpY2tlcilcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRGF0ZVBpY2tlcklucHV0KGlzVXAsIGlzRGF0ZVBpY2tlcik7XG4gICAgICAgIGVsc2UgdGhpcy5oYW5kbGVUaW1lUGlja2VySW5wdXQoaXNVcCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtb3ZlU2VsZWN0aW9uUmlnaHRPclRhYihlOiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlzRGF0ZXBpY2tlckJhbmtDYXJkID1cbiAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT1cbiAgICAgICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEO1xuICAgICAgICBjb25zdCBtYXhJbmRleCA9IGlzRGF0ZXBpY2tlckJhbmtDYXJkID8gMSA6IDI7XG5cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPCBtYXhJbmRleCAmJiAhZS5zaGlmdEtleSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCArPSAxO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCh0aGlzLnNlbGVjdGlvbklucHV0LCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChlLmtleUNvZGUgPT09IDkgJiYgIWUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNOZXh0SW5wdXQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChlLnNoaWZ0S2V5ICYmIGUua2V5Q29kZSA9PT0gOSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c1ByZXZpb3VzSW5wdXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZm9jdXNQcmV2aW91c0lucHV0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBhbGxJbnB1dHMgPSBBcnJheS5mcm9tKFxuICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQuaW5wdXQtY29udHJvbCcpXG4gICAgICAgICkgYXMgSFRNTElucHV0RWxlbWVudFtdO1xuXG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGFsbElucHV0cy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoaW5wdXQpID0+XG4gICAgICAgICAgICAgICAgaW5wdXQgPT09IHRoaXMuY2FJbnB1dENvbXBvbmVudC5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggPT09IC0xKSB0aGlzLnNlbGVjdGlvbklucHV0ID0gMztcbiAgICAgICAgZWxzZSBpZiAoY3VycmVudEluZGV4ID09PSAwKSB0aGlzLnNlbGVjdGlvbklucHV0ID0gMDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0IC09IDE7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KHRoaXMuc2VsZWN0aW9uSW5wdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA+IDApIGFsbElucHV0c1tjdXJyZW50SW5kZXggLSAxXS5mb2N1cygpO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvY3VzTmV4dElucHV0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBhbGxJbnB1dHMgPSBBcnJheS5mcm9tKFxuICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQuaW5wdXQtY29udHJvbCcpXG4gICAgICAgICkgYXMgSFRNTElucHV0RWxlbWVudFtdO1xuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSBhbGxJbnB1dHMuZmluZEluZGV4KFxuICAgICAgICAgICAgKGlucHV0KSA9PlxuICAgICAgICAgICAgICAgIGlucHV0ID09PSB0aGlzLmNhSW5wdXRDb21wb25lbnQuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoYWxsSW5wdXRzW2N1cnJlbnRJbmRleCArIDFdKSBhbGxJbnB1dHNbY3VycmVudEluZGV4ICsgMV0uZm9jdXMoKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmJsdXJPbkRhdGVUaW1lKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gLTE7XG4gICAgfVxuXG4gICAgcHVibGljIHNldElzRm9jdXNJbnB1dCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmNhSW5wdXRDb21wb25lbnQuaXNGb2N1c0lucHV0ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtb3ZlU2VsZWN0aW9uTGVmdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0IC09IDE7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KHRoaXMuc2VsZWN0aW9uSW5wdXQsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVNb250aChpc1VwOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1vbnRoRGVsdGEgPSBpc1VwID8gMSA6IC0xO1xuICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldE1vbnRoKFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuZ2V0TW9udGgoKSArIG1vbnRoRGVsdGFcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5wYWRWYWx1ZShcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuZ2V0TW9udGgoKSArIDFcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVEYXRlKGlzVXA6IGJvb2xlYW4sIGlzRGF0ZVBpY2tlcjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCBkYXRlRGVsdGEgPSBpc1VwID8gMSA6IC0xO1xuICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldERhdGUoXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5nZXREYXRlKCkgKyBkYXRlRGVsdGFcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBzcGFuRWxlbWVudCA9IGlzRGF0ZVBpY2tlclxuICAgICAgICAgICAgPyB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgICAgIDogdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50O1xuICAgICAgICBzcGFuRWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLnBhZFZhbHVlKHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHNwYW5FbGVtZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVllYXIoaXNVcDogYm9vbGVhbiwgaXNEYXRlUGlja2VyOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHllYXJEZWx0YSA9IGlzVXAgPyAxIDogLTE7XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0RnVsbFllYXIoXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5nZXRGdWxsWWVhcigpICsgeWVhckRlbHRhXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3Qgc3BhbkVsZW1lbnQgPSBpc0RhdGVQaWNrZXJcbiAgICAgICAgICAgID8gdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgICA6IHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudDtcbiAgICAgICAgc3BhbkVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5kYXRlVGltZUlucHV0RGF0ZVxuICAgICAgICAgICAgLmdldEZ1bGxZZWFyKClcbiAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAuc2xpY2UoLTIpO1xuICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24oc3BhbkVsZW1lbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFkVmFsdWUodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAoJzAnICsgdmFsdWUpLnNsaWNlKC0yKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVRpbWVQaWNrZXJJbnB1dChpc1VwOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAwKSB0aGlzLnVwZGF0ZUhvdXJzKGlzVXApO1xuICAgICAgICBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAxKSB0aGlzLnVwZGF0ZU1pbnV0ZXMoaXNVcCk7XG4gICAgICAgIGVsc2UgdGhpcy50b2dnbGVBTVBNKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVIb3Vycyhpc1VwOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGhvdXJzRGVsdGEgPSBpc1VwID8gMSA6IC0xO1xuICAgICAgICBsZXQgc2VsZWN0ZWRIb3VycyA9IHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuZ2V0SG91cnMoKSArIGhvdXJzRGVsdGE7XG5cbiAgICAgICAgaWYgKHNlbGVjdGVkSG91cnMgPT09IDApIHNlbGVjdGVkSG91cnMgPSAyNDtcbiAgICAgICAgaWYgKHNlbGVjdGVkSG91cnMgPT09IC0xKSBzZWxlY3RlZEhvdXJzID0gMjM7XG5cbiAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5zZXRIb3VycyhzZWxlY3RlZEhvdXJzKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLnBhZFZhbHVlKFxuICAgICAgICAgICAgc2VsZWN0ZWRIb3VycyA+IDEyID8gc2VsZWN0ZWRIb3VycyAtIDEyIDogc2VsZWN0ZWRIb3Vyc1xuICAgICAgICApO1xuICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50KTtcblxuICAgICAgICB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID1cbiAgICAgICAgICAgIHNlbGVjdGVkSG91cnMgPiAxMSAmJiBzZWxlY3RlZEhvdXJzIDwgMjQgPyAnUE0nIDogJ0FNJztcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZU1pbnV0ZXMoaXNVcDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCBtaW51dGVzRGVsdGEgPSBpc1VwID8gMSA6IC0xO1xuICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldE1pbnV0ZXMoXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5nZXRNaW51dGVzKCkgKyBtaW51dGVzRGVsdGFcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5wYWRWYWx1ZShcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuZ2V0TWludXRlcygpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdG9nZ2xlQU1QTSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9XG4gICAgICAgICAgICB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID09PSAnQU0nID8gJ1BNJyA6ICdBTSc7XG5cbiAgICAgICAgY29uc3QgaG91cnNUb0FkZCA9XG4gICAgICAgICAgICB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID09PSAnQU0nID8gLTEyIDogMTI7XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0SG91cnMoXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5nZXRIb3VycygpICsgaG91cnNUb0FkZFxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhcklucHV0KGV2ZW50OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50LmVtaXQoZXZlbnQpO1xuXG4gICAgICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5yZXNldERhdGVUaW1lSW5wdXRzKCk7XG4gICAgICAgIHRoaXMub25DaGFuZ2UoJycpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkJsdXJJbnB1dChldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuYmx1cklucHV0RXZlbnQuZW1pdChldmVudCk7XG4gICAgICAgIC8vIERhdGVwaWNrZXJcbiAgICAgICAgdGhpcy5mb2N1c0JsdXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmx1ck9uRGF0ZVRpbWUoKTtcbiAgICAgICAgfSwgMTAwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXREYXRlVGltZUlucHV0cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc3BhbjEpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ2RkJztcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ3l5JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PVxuICAgICAgICAgICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ3l5JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLlRJTUVfUElDS0VSXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ0hIJztcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ01NJztcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ0FNJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFRpbWVQaWNrZXJUaW1lKCk7XG4gICAgICAgIHRoaXMubmV3SW5wdXRDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgICAgICB0aGlzLnNob3dEYXRlSW5wdXQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0VGltZVBpY2tlclRpbWUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uVElNRV9QSUNLRVIpXG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgbW9tZW50KCkuZm9ybWF0KCdNTS9ERC9ZWVlZJykgK1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5pbnB1dENvbmZpZz8uaXNGcm9tRGF0ZSA/ICcgMTI6MTUnIDogJyAxMjowMCcpXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgY2xhc3M9XCJkYXRldGltZS1waWNrZXItbWFpbi1ob2xkZXIgaW5wdXQtY3VzdG9tLWdyb3VwIGRhdGV0aW1lY2xhc3NcIlxuICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICBnZXRTdXBlckNvbnRyb2xcbiAgICAgICAgICAgIHwgaW5wdXRDb250YWluZXJDbGFzc1xuICAgICAgICAgICAgICAgIDogY2FJbnB1dENvbXBvbmVudC5pc0ZvY3VzSW5wdXRcbiAgICAgICAgICAgICAgICA6IGNhSW5wdXRDb21wb25lbnQuaXNUb3VjaGVkSW5wdXRcbiAgICAgICAgICAgICAgICA6IGlucHV0Q29uZmlnXG4gICAgICAgICAgICAgICAgOiBnZXRTdXBlckNvbnRyb2w/LnZhbHVlXG4gICAgICAgICAgICAgICAgOiBnZXRTdXBlckNvbnRyb2w/LmRpc2FibGVkXG4gICAgXCJcbj5cbiAgICA8ZGl2XG4gICAgICAgICNob2xkZXIxXG4gICAgICAgIGNsYXNzPVwiZGF0ZV90aW1lX2hvbGRlciBpbnB1dC1jb250cm9sXCJcbiAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzaG93RGF0ZUlucHV0XCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIChtb3VzZWRvd24pPVwic2VsZWN0TGFzdE9uZUZvclNlbGVjdGlvbigpXCJcbiAgICAgICAgKG1vdXNldXApPVwic2VsZWN0TGFzdE9uZUFmdGVyTW91c2VVcCgpXCJcbiAgICAgICAgKHBhc3RlKT1cIm9uRGF0ZVBhc3RlKCRldmVudClcIlxuICAgICAgICAoa2V5ZG93bik9XCJjaGFuZ2VTZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bk9wdGlvbnMoKVwiXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICdwYWRkaW5nLWxlZnQnOiBpbnB1dENvbmZpZy5pc0ljb25IaWRkZW4gPyAnMnB4JyA6ICcyN3B4JyxcbiAgICAgICAgfVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgY2FJbnB1dENvbXBvbmVudC5pc0ZvY3VzSW5wdXRcbiAgICAgICAgICAgICAgICB8IGlucHV0RGF0ZXRpbWVQaWNrZXJDbGFzc1xuICAgICAgICAgICAgICAgICAgICA6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIDogZ2V0U3VwZXJDb250cm9sXG4gICAgICAgICAgICAgICAgICAgIDogaW5wdXRDb25maWdcbiAgICAgICAgICAgICAgICAgICAgOiBjYUlucHV0Q29tcG9uZW50LmlzVG91Y2hlZElucHV0XG4gICAgICAgICAgICAgICAgICAgIDogZ2V0U3VwZXJDb250cm9sPy5kaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgICA6IGdldFN1cGVyQ29udHJvbD8udmFsdWVcbiAgICAgICAgXCJcbiAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICAjc3BhbjFcbiAgICAgICAgICAgIGNsYXNzPVwibWFpblwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgJ3Jlc2V0LXNlbGVjdGlvbi1jb2xvcic6ICFjYUlucHV0Q29tcG9uZW50LmlzRm9jdXNJbnB1dCxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiaW5wdXRDb25maWcubmFtZSA9PT0gJ2RhdGVwaWNrZXInID8gJ21tJyA6ICdISCdcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJvcmRlci1waWNrZXJcIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiaW5wdXRDb25maWcubmFtZSA9PT0gJ2RhdGVwaWNrZXInID8gJy8nIDogJzonXCJcbiAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICAgI3NwYW4yXG4gICAgICAgICAgICBjbGFzcz1cIm1haW5cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICdyZXNldC1zZWxlY3Rpb24tY29sb3InOiAhY2FJbnB1dENvbXBvbmVudC5pc0ZvY3VzSW5wdXQsXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIHRhYmluZGV4PVwiMVwiXG4gICAgICAgICAgICBbaW5uZXJIVE1MXT1cImlucHV0Q29uZmlnLm5hbWUgPT09ICdkYXRlcGlja2VyJyA/ICdkZCcgOiAnTU0nXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJib3JkZXItcGlja2VyXCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImlucHV0Q29uZmlnLm5hbWUgPT09ICdkYXRlcGlja2VyJyA/ICcvJyA6ICcgJ1wiXG4gICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICNzcGFuM1xuICAgICAgICAgICAgY2xhc3M9XCJtYWluXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAncmVzZXQtc2VsZWN0aW9uLWNvbG9yJzogIWNhSW5wdXRDb21wb25lbnQuaXNGb2N1c0lucHV0LFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICB0YWJpbmRleD1cIjJcIlxuICAgICAgICAgICAgW2lubmVySFRNTF09XCJpbnB1dENvbmZpZy5uYW1lID09PSAnZGF0ZXBpY2tlcicgPyAneXknIDogJ0FNJ1wiXG4gICAgICAgID48L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGNhLWlucHV0LXRlc3RcbiAgICAgICAgW2lucHV0Q29uZmlnXT1cImlucHV0Q29uZmlnXCJcbiAgICAgICAgW2RhdGVUaW1lUG9wb3Zlcl09XCJkYXRlVGltZVBvcG92ZXJcIlxuICAgICAgICAoZm9jdXNJbnB1dEV2ZW50KT1cImhhbmRsZUZvY3VzSW5wdXQoJGV2ZW50KVwiXG4gICAgICAgIChoYW5kbGVUb2dnbGVEcm9wZG93bk9wdGlvbnMpPVwidG9nZ2xlRHJvcGRvd25PcHRpb25zKClcIlxuICAgICAgICAoY2xvc2VQb3BvdmVyKT1cImJsdXJPbkRhdGVUaW1lKClcIlxuICAgICAgICAoYmx1cklucHV0KT1cIm9uQmx1cklucHV0KCRldmVudClcIlxuICAgICAgICAoY2xlYXIpPVwiY2xlYXJJbnB1dCgkZXZlbnQpXCJcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cImdldFN1cGVyQ29udHJvbCEgfCBmb3JtQ29udHJvbFwiXG4gICAgPjwvY2EtaW5wdXQtdGVzdD5cbjwvZGl2PlxuPCEtLSBQb3BvdmVyIGZvciBEYXRlVGltZSBQaWNrZXJzIC0tPlxuPG5nLXRlbXBsYXRlICNkYXRlVGltZVBvcG92ZXIgbGV0LWRhdGE9XCJkYXRhXCI+XG4gICAgPGRpdiBjbGFzcz1cImRhdGV0aW1lLWRyb3Bkb3duLWhvbGRlclwiPlxuICAgICAgICA8Y2EtY3VzdG9tLWRhdGV0aW1lLXBpY2tlcnNcbiAgICAgICAgICAgIFtjYWxlbmRhclR5cGVdPVwiXG4gICAgICAgICAgICAgICAgaW5wdXRDb25maWcubmFtZSA9PT0gJ2RhdGVwaWNrZXInIHx8XG4gICAgICAgICAgICAgICAgaW5wdXRDb25maWcubmFtZSA9PT0gJ2RhdGVwaWNrZXJCYW5rQ2FyZCdcbiAgICAgICAgICAgICAgICAgICAgPyAnZGF0ZSdcbiAgICAgICAgICAgICAgICAgICAgOiAndGltZSdcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbaW5wdXRDb25maWddPVwiaW5wdXRDb25maWdcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidNTS9ERC9ZWSdcIlxuICAgICAgICAgICAgW2RhdGVUaW1lXT1cImRhdGVUaW1lSW5wdXREYXRlXCJcbiAgICAgICAgICAgIChjbG9zZVBvcG92ZXIpPVwiY2xvc2VQb3BvdmVyKClcIlxuICAgICAgICA+PC9jYS1jdXN0b20tZGF0ZXRpbWUtcGlja2Vycz5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
951
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtaW5wdXQtZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NhLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhLWlucHV0LWRhdGV0aW1lLXBpY2tlci9jYS1pbnB1dC1kYXRldGltZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtaW5wdXQtZGF0ZXRpbWUtcGlja2VyL2NhLWlucHV0LWRhdGV0aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUVULFlBQVksRUFFWixLQUFLLEVBRUwsTUFBTSxFQUNOLElBQUksRUFDSixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVILFdBQVcsRUFDWCxXQUFXLEVBRVgsbUJBQW1CLEdBQ3RCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLFVBQVU7QUFDVixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFNUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSWhELE9BQU8sRUFBb0IsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFckUsT0FBTztBQUNQLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsNEJBQTRCLEdBQy9CLE1BQU0sbUJBQW1CLENBQUM7QUFFM0IsYUFBYTtBQUNiLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLG9FQUFvRSxDQUFDO0FBQ3RILE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHNGQUFzRixDQUFDO0FBRXZJLFFBQVE7QUFDUixPQUFPLEVB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QkFJbkIsK0JBQStCO3NCQUQ5QixTQUFTO3VCQUFDLCtCQUErQjtnQkFHWixlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFFNUIsZ0JBQWdCO3NCQURmLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQXFCckMsZ0NBQWdDO3NCQUF6QyxNQUFNO2dCQUNHLGdDQUFnQztzQkFBekMsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBSUcsbUJBQW1CO3NCQUE1QixNQUFNO2dCQU0rQixLQUFLO3NCQUExQyxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0UsS0FBSztzQkFBMUMsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNFLEtBQUs7c0JBQTFDLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDSSxPQUFPO3NCQUE5QyxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3V0cHV0LFxuICAgIFNlbGYsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgRm9ybUNvbnRyb2wsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTmdDb250cm9sLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbi8vIEltcG9ydHNcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IE5nYlBvcG92ZXIgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcblxuLy8gTW9kZWxzXG5pbXBvcnQgeyBJQ2FJbnB1dCB9IGZyb20gJy4uL2NhLWlucHV0L2NvbmZpZyc7XG5pbXBvcnQgeyBJbnB1dENoYW5nZVZhbHVlLCBJbnB1dFN2Z1JvdXRlcyB9IGZyb20gJy4uL2NhLWlucHV0L3V0aWxzJztcblxuLy8gUGlwZVxuaW1wb3J0IHtcbiAgICBJbnB1dENvbnRhaW5lckNsYXNzUGlwZSxcbiAgICBJbnB1dERhdGV0aW1lUGlja2VyQ2xhc3NQaXBlLFxufSBmcm9tICcuLi9jYS1pbnB1dC9waXBlcyc7XG5cbi8vIENvbXBvbmVudHNcbmltcG9ydCB7IENhQ3VzdG9tRGF0ZXRpbWVQaWNrZXJzQ29tcG9uZW50IH0gZnJvbSAnLi4vY2EtY3VzdG9tLWRhdGV0aW1lLXBpY2tlcnMvY2EtY3VzdG9tLWRhdGV0aW1lLXBpY2tlcnMuY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXRQbGFjZWhvbGRlckljb25Db21wb25lbnQgfSBmcm9tICcuLi9jYS1pbnB1dC9jb21wb25lbnRzL2NhLWlucHV0LXBsYWNlaG9sZGVyLWljb24vY2EtaW5wdXQtcGxhY2Vob2xkZXItaWNvbi5jb21wb25lbnQnO1xuXG4vLyBFbnVtc1xuaW1wb3J0IHsgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bSB9IGZyb20gJy4uL2NhLWlucHV0L2VudW1zJztcblxuLy8gU2VydmljZXNcbmltcG9ydCB7IENhbGVuZGFyRGF0ZVRpbWVQaWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi4vY2EtY3VzdG9tLWRhdGV0aW1lLXBpY2tlcnMvc2VydmljZXMvY2FsZW5kYXItZGF0ZXRpbWUtcGlja2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQW5ndWxhclN2Z0ljb25Nb2R1bGUgfSBmcm9tICdhbmd1bGFyLXN2Zy1pY29uJztcbmltcG9ydCB7IEZvcm1Db250cm9sUGlwZSB9IGZyb20gJy4uL2NhLWlucHV0L3BpcGVzL2Zvcm0tY29udHJvbC5waXBlJztcbmltcG9ydCB7IElucHV0VGVzdENvbXBvbmVudCB9IGZyb20gJy4uL2NhLWlucHV0LXRlc3QvaW5wdXQtdGVzdC5jb21wb25lbnQnO1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdjYS1pbnB1dC1kYXRldGltZS1waWNrZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYS1pbnB1dC1kYXRldGltZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogW1xuICAgICAgICAnLi9jYS1pbnB1dC1kYXRldGltZS1waWNrZXIuY29tcG9uZW50LnNjc3MnLFxuICAgICAgICAnLi4vY2EtaW5wdXQvc2Nzcy8vY2EtaW5wdXQuZGF0ZXBpY2tlci5zY3NzJyxcbiAgICBdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICAvLyBtb2R1bGVzXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIEFuZ3VsYXJTdmdJY29uTW9kdWxlLFxuICAgICAgICAvLyBjb21wb25lbnRzXG4gICAgICAgIENhQ3VzdG9tRGF0ZXRpbWVQaWNrZXJzQ29tcG9uZW50LFxuICAgICAgICBJbnB1dFRlc3RDb21wb25lbnQsXG4gICAgICAgIC8vIHBpcGVzXG4gICAgICAgIElucHV0RGF0ZXRpbWVQaWNrZXJDbGFzc1BpcGUsXG4gICAgICAgIElucHV0Q29udGFpbmVyQ2xhc3NQaXBlLFxuICAgICAgICBGb3JtQ29udHJvbFBpcGUsXG4gICAgXSxcbiAgICBwcm92aWRlcnM6IFtDYWxlbmRhckRhdGVUaW1lUGlja2VyU2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIENhSW5wdXREYXRldGltZVBpY2tlckNvbXBvbmVudFxuICAgIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uRGVzdHJveVxue1xuICAgIEBJbnB1dCgpIGlucHV0Q29uZmlnITogSUNhSW5wdXQ7XG4gICAgQElucHV0KCkgZm9ybUZvcm1hdD86IHN0cmluZztcblxuICAgIEBPdXRwdXQoJ2NsZWFyJykgY2xlYXJJbnB1dEV2ZW50OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPVxuICAgICAgICBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gICAgQE91dHB1dCgnYmx1cklucHV0JykgYmx1cklucHV0RXZlbnQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9XG4gICAgICAgIG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIEBWaWV3Q2hpbGQoQ2FJbnB1dFBsYWNlaG9sZGVySWNvbkNvbXBvbmVudClcbiAgICBjYUlucHV0UGxhY2Vob2xkZXJJY29uQ29tcG9uZW50ITogQ2FJbnB1dFBsYWNlaG9sZGVySWNvbkNvbXBvbmVudDtcblxuICAgIEBWaWV3Q2hpbGQoJ2RhdGVUaW1lUG9wb3ZlcicpIGRhdGVUaW1lUG9wb3ZlciE6IE5nYlBvcG92ZXI7XG4gICAgQFZpZXdDaGlsZChJbnB1dFRlc3RDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgY2FJbnB1dENvbXBvbmVudCE6IElucHV0VGVzdENvbXBvbmVudDtcblxuICAgIHB1YmxpYyBpbnB1dEZvcm1Db250cm9sOiBGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbChudWxsKTtcblxuICAgIHB1YmxpYyBzaG93RGF0ZUlucHV0OiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGRhdGVUaW1lSW5wdXREYXRlOiBEYXRlID0gbmV3IERhdGUoKTtcbiAgICBwdWJsaWMgZGF0ZVRpbWVJbnREYXRlOiBEYXRlID0gbmV3IERhdGUoKTtcbiAgICBwdWJsaWMgc2VsZWN0aW9uSW5wdXQ6IG51bWJlciA9IC0xO1xuXG4gICAgcHJpdmF0ZSBkYXRlVGltZU1haW5UaW1lciE6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVtYmVyO1xuICAgIHByaXZhdGUgZm9jdXNCbHVyITogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudW1iZXI7XG4gICAgcHJpdmF0ZSB0aW1lb3V0Q2xlYW5lciE6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVtYmVyO1xuXG4gICAgcHVibGljIGlucHV0U3ZnUm91dGVzID0gSW5wdXRTdmdSb3V0ZXM7XG5cbiAgICBwdWJsaWMgaXNUb3VjaGVkSW5wdXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgcHJldmVudEJsdXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvLyBEYXRlXG4gICAgcHVibGljIG5ld0lucHV0Q2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpIHNlbGVjdExhc3RPbmVGb3JTZWxlY3Rpb25FbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAgIEBPdXRwdXQoKSBzZWxlY3RMYXN0T25lQWZ0ZXJNb3VzZVVwRW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgICBAT3V0cHV0KCkgb25EYXRlUGFzdGVFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxDbGlwYm9hcmRFdmVudD4oKTtcbiAgICBAT3V0cHV0KCkgb25Gb2N1c0VtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG4gICAgQE91dHB1dCgpIGNoYW5nZVNlbGVjdGlvbkVtbWl0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICAgICAgZTogS2V5Ym9hcmRFdmVudDtcbiAgICAgICAgbm9QcmV2ZW50RGVmYXVsdDogYm9vbGVhbjtcbiAgICB9PigpO1xuICAgIEBPdXRwdXQoKSBzZXRTZWxlY3Rpb25FbW1pdGVyID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgICAgIHByZXZlbnREZWZhdWx0OiAoKSA9PiB2b2lkO1xuICAgICAgICBzdG9wUHJvcGFnYXRpb246ICgpID0+IHZvaWQ7XG4gICAgICAgIHRhcmdldDogYW55O1xuICAgIH0+KCk7XG5cbiAgICBAVmlld0NoaWxkKCdzcGFuMScsIHsgc3RhdGljOiB0cnVlIH0pIHNwYW4xITogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdzcGFuMicsIHsgc3RhdGljOiB0cnVlIH0pIHNwYW4yITogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdzcGFuMycsIHsgc3RhdGljOiB0cnVlIH0pIHNwYW4zITogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdob2xkZXIxJywgeyBzdGF0aWM6IHRydWUgfSkgaG9sZGVyMSE6IEVsZW1lbnRSZWY7XG5cbiAgICBwcml2YXRlIGRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBAU2VsZigpIHB1YmxpYyBzdXBlckNvbnRyb2w6IE5nQ29udHJvbCxcbiAgICAgICAgcHJpdmF0ZSBjYWxlbmRhclNlcnZpY2U6IENhbGVuZGFyRGF0ZVRpbWVQaWNrZXJTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuc3VwZXJDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xuICAgIH1cblxuICAgIHZhbHVlQWZ0ZXJXcml0ZVZhbHVlITogc3RyaW5nO1xuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnN1cGVyQ29udHJvbD8uY29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlKDEpKSAvLyDwn5GIIG9ubHkgbGlzdGVuIG9uY2VcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlQWZ0ZXJXcml0ZVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWVBZnRlcldyaXRlVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWVBZnRlcldyaXRlVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VGltZURhdGVJbnB1dCh0aGlzLnZhbHVlQWZ0ZXJXcml0ZVZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VGltZVBpY2tlclRpbWUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmRhdGVDaGFuZ2VkXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlucHV0Q29uZmlnLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUaW1lRGF0ZUlucHV0KGRhdGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhSW5wdXRDb21wb25lbnQuY2FJbnB1dFBsYWNlaG9sZGVySWNvbkNvbXBvbmVudC50Mj8uY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXQgZ2V0U3VwZXJDb250cm9sKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZWN0TGFzdE9uZUZvclNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgbGV0IHJhbmdlLCBzZWxlY3Rpb247XG5cbiAgICAgICAgdGhpcy5zaG93RGF0ZUlucHV0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IC0xO1xuICAgICAgICB0aGlzLmNhSW5wdXRDb21wb25lbnQuaXNGb2N1c0lucHV0ID0gdHJ1ZTtcblxuICAgICAgICBpZiAod2luZG93LmdldFNlbGVjdGlvbiAmJiBkb2N1bWVudC5jcmVhdGVSYW5nZSkge1xuICAgICAgICAgICAgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lICE9PVxuICAgICAgICAgICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByYW5nZS5zZXRTdGFydCh0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQsIDEpO1xuICAgICAgICAgICAgICAgIHJhbmdlLnNldEVuZCh0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQsIDEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByYW5nZS5zZXRTdGFydCh0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQsIDEpO1xuICAgICAgICAgICAgICAgIHJhbmdlLnNldEVuZCh0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQsIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZWxlY3Rpb24/LnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICAgICAgc2VsZWN0aW9uPy5hZGRSYW5nZShyYW5nZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRpbWVvdXRDbGVhbmVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0JsdXIpO1xuICAgICAgICB9LCA5MCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGVjdExhc3RPbmVBZnRlck1vdXNlVXAoKTogdm9pZCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT1cbiAgICAgICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDE7XG4gICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDI7XG4gICAgICAgICAgICB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zaG93RGF0ZUlucHV0ID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLnRpbWVvdXRDbGVhbmVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0JsdXIpO1xuICAgICAgICB9LCA5MCk7XG4gICAgfVxuXG4gICAgLy8gMDUvMDUvMjAyNVxuICAgIHB1YmxpYyBvbkRhdGVQYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBjb25zdCBwYXN0ZVRleHQgPSBldmVudC5jbGlwYm9hcmREYXRhPy5nZXREYXRhKCd0ZXh0JykgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCBwYXN0ZWREYXRlID0gbmV3IERhdGUocGFzdGVUZXh0KTtcbiAgICAgICAgaWYgKCFpc05hTihwYXN0ZWREYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VGltZURhdGVJbnB1dChwYXN0ZWREYXRlKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgodGhpcy5zZWxlY3Rpb25JbnB1dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjaGFuZ2VTZWxlY3Rpb24oZTogYW55LCBub1ByZXZlbnREZWZhdWx0ID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXNDdHJsViA9IChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSAmJiBlLmtleS50b0xvd2VyQ2FzZSgpID09PSAndic7XG5cbiAgICAgICAgaWYgKGlzQ3RybFYpIHtcbiAgICAgICAgICAgIC8vIEFsbG93IHBhc3RlXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBlLmtleUNvZGUgPT0gMzcgfHxcbiAgICAgICAgICAgIGUua2V5Q29kZSA9PSAzOCB8fFxuICAgICAgICAgICAgZS5rZXlDb2RlID09IDM5IHx8XG4gICAgICAgICAgICBlLmtleUNvZGUgPT0gNDAgfHxcbiAgICAgICAgICAgIGUua2V5Q29kZSA9PSA4IHx8XG4gICAgICAgICAgICBlLmtleUNvZGUgPT0gOSB8fFxuICAgICAgICAgICAgZS5rZXlDb2RlID09IDQ2IHx8XG4gICAgICAgICAgICAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PSAzICYmIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gJ3RpbWVwaWNrZXInKVxuICAgICAgICApIHtcbiAgICAgICAgICAgICFlLm5vUHJldmVudCAmJiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09IDM3KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gdGhpcy5zZWxlY3Rpb25JbnB1dCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgodGhpcy5zZWxlY3Rpb25JbnB1dCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChlLmtleUNvZGUgPT0gMzkgfHwgZS5rZXlDb2RlID09IDkpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICgodGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSAnZGF0ZXBpY2tlckJhbmtDYXJkJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCAhPSAxKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuaW5wdXRDb25maWcubmFtZSAhPT0gJ2RhdGVwaWNrZXJCYW5rQ2FyZCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ICE9IDIpKSAmJlxuICAgICAgICAgICAgICAgICAgICAhZS5zaGlmdEtleVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gdGhpcy5zZWxlY3Rpb25JbnB1dCArIDE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgodGhpcy5zZWxlY3Rpb25JbnB1dCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlLmtleUNvZGUgPT0gOSAmJiAhZS5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYWxsSW5wdXRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICdpbnB1dC5pbnB1dC1jb250cm9sJ1xuICAgICAgICAgICAgICAgICAgICApIGFzIE5vZGVMaXN0T2Y8SFRNTElucHV0RWxlbWVudD47XG4gICAgICAgICAgICAgICAgICAgIFsuLi4oYWxsSW5wdXRzIGFzIGFueSldLm1hcCgoaXRlbSwgaW5keCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYUlucHV0Q29tcG9uZW50LmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWxsSW5wdXRzW2luZHggKyAxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxJbnB1dHNbaW5keCArIDFdLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ibHVyT25EYXRlVGltZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICBlLnNoaWZ0S2V5ICYmXG4gICAgICAgICAgICAgICAgICAgIGUua2V5Q29kZSA9PSA5ICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgIT0gMFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IHRoaXMuc2VsZWN0aW9uSW5wdXQgLSAxO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KHRoaXMuc2VsZWN0aW9uSW5wdXQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGUuc2hpZnRLZXkgJiZcbiAgICAgICAgICAgICAgICAgICAgZS5rZXlDb2RlID09IDkgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9PSAwXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBhbGxJbnB1dHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCcpO1xuICAgICAgICAgICAgICAgICAgICBbLi4uKGFsbElucHV0cyBhcyBhbnkpXS5tYXAoKGl0ZW0sIGluZHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FJbnB1dENvbXBvbmVudC5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbElucHV0c1tpbmR4IC0gMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsSW5wdXRzW2luZHggLSAxXS5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGUua2V5Q29kZSA9PSAzOCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0ZVRpbWVNb2RlbCgndXAnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZS5rZXlDb2RlID09IDQwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRlVGltZU1vZGVsKCdkb3duJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGUua2V5Q29kZSA9PSA4IHx8IGUua2V5Q29kZSA9PSA0Nikge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlS2V5Ym9hcmRJbnB1dHMoZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNOdW1iZXIoZSkpIHtcbiAgICAgICAgICAgIGlmICghbm9QcmV2ZW50RGVmYXVsdCkge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghbm9QcmV2ZW50RGVmYXVsdCkge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuaGFuZGxlS2V5Ym9hcmRJbnB1dHMoZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2hhbmdlU2VsZWN0aW9uVHdvKFxuICAgICAgICBldmVudDogS2V5Ym9hcmRFdmVudCxcbiAgICAgICAgbm9QcmV2ZW50RGVmYXVsdCA9IGZhbHNlXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGlmICghbm9QcmV2ZW50RGVmYXVsdCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNOYXZpZ2F0aW9uS2V5ID0gdGhpcy5pc05hdmlnYXRpb25LZXkoZXZlbnQpO1xuICAgICAgICBjb25zdCBpc1NwZWNpYWxUaW1lUGlja2VyS2V5ID1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDMgJiZcbiAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5USU1FX1BJQ0tFUjtcblxuICAgICAgICBpZiAoaXNOYXZpZ2F0aW9uS2V5IHx8IGlzU3BlY2lhbFRpbWVQaWNrZXJLZXkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZU5hdmlnYXRpb25LZXkoZXZlbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzTnVtYmVyKGV2ZW50KSkge1xuICAgICAgICAgICAgaWYgKCFub1ByZXZlbnREZWZhdWx0KSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCFub1ByZXZlbnREZWZhdWx0KSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IC0xKSB0aGlzLnNlbGVjdGlvbklucHV0ID0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUtleWJvYXJkSW5wdXRzKGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNOdW1iZXIoZXZ0OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGV2dCA9IGV2dCA/IGV2dCA6ICh3aW5kb3cuZXZlbnQgYXMgS2V5Ym9hcmRFdmVudCk7XG4gICAgICAgIGxldCBjaGFyQ29kZSA9IGV2dC53aGljaCA/IGV2dC53aGljaCA6IGV2dC5rZXlDb2RlO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGNoYXJDb2RlID49IDQ4ICYmIGNoYXJDb2RlIDw9IDU3KSB8fFxuICAgICAgICAgICAgKGNoYXJDb2RlID49IDk2ICYmIGNoYXJDb2RlIDw9IDEwNSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTmF2aWdhdGlvbktleShlOiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IG5hdmlnYXRpb25LZXlzID0gWzM3LCAzOCwgMzksIDQwLCA4LCA5LCA0Nl07IC8vIEFycm93IGtleXMsIEJhY2tzcGFjZSwgVGFiLCBEZWxldGVcbiAgICAgICAgcmV0dXJuIG5hdmlnYXRpb25LZXlzLmluY2x1ZGVzKGUua2V5Q29kZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRm9jdXMoZXZlbnQ/OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Gb2N1c0VtaXR0ZXIuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsb3NlUG9wb3ZlcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY2FJbnB1dENvbXBvbmVudC5jYUlucHV0UGxhY2Vob2xkZXJJY29uQ29tcG9uZW50LnQyKVxuICAgICAgICAgICAgdGhpcy5jYUlucHV0Q29tcG9uZW50LmNhSW5wdXRQbGFjZWhvbGRlckljb25Db21wb25lbnQudDIuY2xvc2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9nZ2xlRHJvcGRvd25PcHRpb25zKCkge1xuICAgICAgICBpZiAodGhpcy5jYUlucHV0Q29tcG9uZW50LmNhSW5wdXRQbGFjZWhvbGRlckljb25Db21wb25lbnQudDIpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhdGhpcy5jYUlucHV0Q29tcG9uZW50LmNhSW5wdXRQbGFjZWhvbGRlckljb25Db21wb25lbnQudDIuaXNPcGVuKClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRhdGVUaW1lTWFpblRpbWVyKTtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0JsdXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IC0xO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jYUlucHV0Q29tcG9uZW50LmNhSW5wdXRQbGFjZWhvbGRlckljb25Db21wb25lbnQudDIub3BlbigpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIGxldCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uPy5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVGb2N1c0lucHV0KGU6IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gZSBhcyBGb2N1c0V2ZW50O1xuXG4gICAgICAgIGlmICghdGhpcy5pbnB1dENvbmZpZy5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0JsdXIpO1xuICAgICAgICAgICAgdGhpcy5zaG93RGF0ZUlucHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgKGV2ZW50Py50YXJnZXQgYXMgSFRNTEVsZW1lbnQpPy5ub2RlTmFtZSA9PT0gJ0lOUFVUJykgfHxcbiAgICAgICAgICAgICAgICAoZXZlbnQ/LnJlbGF0ZWRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpPy5ub2RlTmFtZSA9PT0gJ0lOUFVUJyB8fFxuICAgICAgICAgICAgICAgIGV2ZW50Py5yZWxhdGVkVGFyZ2V0ID09PSBudWxsXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZlbnRCbHVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IC0xO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNhSW5wdXRDb21wb25lbnQuY2FJbnB1dFBsYWNlaG9sZGVySWNvbkNvbXBvbmVudC50Mi50b2dnbGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRTcGFuU2VsZWN0aW9uKGVsZW1lbnQ6IE5vZGUpOiB2b2lkIHtcbiAgICAgICAgbGV0IHJhbmdlOiBSYW5nZTtcbiAgICAgICAgbGV0IHNlbGVjdGlvbjogU2VsZWN0aW9uIHwgbnVsbDtcblxuICAgICAgICBpZiAod2luZG93LmdldFNlbGVjdGlvbiAmJiBkb2N1bWVudC5jcmVhdGVSYW5nZSkge1xuICAgICAgICAgICAgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVsZW1lbnQpO1xuICAgICAgICAgICAgc2VsZWN0aW9uPy5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgICAgIHNlbGVjdGlvbj8uYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldFNlbGVjdGlvbihldmVudDoge1xuICAgICAgICBwcmV2ZW50RGVmYXVsdDogKCkgPT4gdm9pZDtcbiAgICAgICAgc3RvcFByb3BhZ2F0aW9uOiAoKSA9PiB2b2lkO1xuICAgICAgICB0YXJnZXQ6IGFueTtcbiAgICB9KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudC50YXJnZXQ7XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uSW5wdXQgPSBwYXJzZUludChlbGVtZW50LmdldEF0dHJpYnV0ZSgndGFiaW5kZXgnKSk7XG5cbiAgICAgICAgY29uc3QgY3VycmVudFNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcblxuICAgICAgICBpZiAoY3VycmVudFNlbGVjdGlvbiAmJiBjdXJyZW50U2VsZWN0aW9uLnRvU3RyaW5nKCkubGVuZ3RoID4gMTApIHtcbiAgICAgICAgICAgIHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMDtcbiAgICAgICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0JsdXIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGF0ZVRpbWVNYWluVGltZXIpO1xuICAgICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ21haW4nKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IHNlbGVjdGlvbklucHV0O1xuICAgICAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKGVsZW1lbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCh0aGlzLnNlbGVjdGlvbklucHV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNoYW5nZShfOiBJbnB1dENoYW5nZVZhbHVlKTogdm9pZCB7fVxuXG4gICAgcHVibGljIHdyaXRlVmFsdWUob2JqOiBJbnB1dENoYW5nZVZhbHVlKTogdm9pZCB7XG4gICAgICAgIGlmIChvYmopIHRoaXMuc2V0VGltZURhdGVJbnB1dChvYmosIHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZCgpOiB2b2lkIHt9XG5cbiAgICAvLyBCTFVSIE9OIElOUFVUXG4gICAgcHVibGljIGJsdXJPbkRhdGVUaW1lKCk6IHZvaWQge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVNYWluVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIWlzTmFOKHRoaXMuc3BhbjE/Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKSAmJlxuICAgICAgICAgICAgICAgICAgICAhaXNOYU4odGhpcy5zcGFuMj8ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpICYmXG4gICAgICAgICAgICAgICAgICAgICFpc05hTih0aGlzLnNwYW4zPy5uYXRpdmVFbGVtZW50LmlubmVySFRNTClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5pc0Z1dHVyZURhdGVEaXNhYmxlZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgbW9tZW50KHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUpLmlzQWZ0ZXIobW9tZW50KCkpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCBhY2NlcHQgZnV0dXJlIGRhdGVzXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcuZXhwaXJlZERhdGVJbnZhbGlkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9tZW50KHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUpLmlzQmVmb3JlKG1vbWVudCgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsgLy8gZG9uJ3QgYWNjZXB0IGV4cGlyZWQgZGF0ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuZGF0ZUNoYW5nZWQubmV4dChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdkZCc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAneXknO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RGF0ZUlucHV0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09XG4gICAgICAgICAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIWlzTmFOKHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpICYmXG4gICAgICAgICAgICAgICAgICAgICFpc05hTih0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLmV4cGlyZWREYXRlSW52YWxpZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgbW9tZW50KHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUpLmlzQmVmb3JlKG1vbWVudCgpKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7IGludmFsaWQ6IHRydWUgfSk7IC8vIGRvbid0IGFjY2VwdCBleHBpcmVkIGRhdGVzXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5kYXRlQ2hhbmdlZC5uZXh0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICd5eSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dEYXRlSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIWlzTmFOKHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpICYmXG4gICAgICAgICAgICAgICAgICAgICFpc05hTih0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5kYXRlQ2hhbmdlZC5uZXh0KFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnSEgnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ01NJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUaW1lUGlja2VyVGltZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dEYXRlSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRhdGVUaW1lTWFpblRpbWVyKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcbiAgICAgICAgICAgIHRoaXMubmV3SW5wdXRDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfSwgMTAwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Qb3BvdmVyU2hvd24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2hvd0RhdGVJbnB1dCA9IHRydWU7XG4gICAgICAgIHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUG9wb3ZlckhpZGRlbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ibHVyT25EYXRlVGltZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRUaW1lRGF0ZUlucHV0KGRhdGU6IElucHV0Q2hhbmdlVmFsdWUsIGhhc1ZhbHVlPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBsZXQgdGV4dCwgZGF0ZUZvcm1hdCwgdGltZUZvcm1hdDtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUikge1xuICAgICAgICAgICAgdGV4dCA9IG1vbWVudChuZXcgRGF0ZShkYXRlKSkuZm9ybWF0KCdNTS9ERC9ZWScpO1xuICAgICAgICAgICAgZGF0ZUZvcm1hdCA9IHRleHQuc3BsaXQoJy8nKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT1cbiAgICAgICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGV4dCA9IG1vbWVudChuZXcgRGF0ZShkYXRlKSkuZm9ybWF0KCdNTS9ERC9ZWScpO1xuICAgICAgICAgICAgZGF0ZUZvcm1hdCA9IHRleHQuc3BsaXQoJy8nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGUgPVxuICAgICAgICAgICAgICAgIGRhdGUgaW5zdGFuY2VvZiBEYXRlXG4gICAgICAgICAgICAgICAgICAgID8gZGF0ZVxuICAgICAgICAgICAgICAgICAgICA6IG5ldyBEYXRlKG1vbWVudCgpLmZvcm1hdCgnTU0vREQvWVlZWScpICsgJyAnICsgZGF0ZSk7XG4gICAgICAgICAgICB0ZXh0ID0gbW9tZW50KG5ldyBEYXRlKGRhdGUpKS5mb3JtYXQoJ0hIOm1tJyk7XG5cbiAgICAgICAgICAgIHRpbWVGb3JtYXQgPSBtb21lbnQobmV3IERhdGUoZGF0ZSkpLmZvcm1hdCgnaGgvbW0vQScpO1xuICAgICAgICAgICAgZGF0ZUZvcm1hdCA9IHRpbWVGb3JtYXQuc3BsaXQoJy8nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmZvcm1Gb3JtYXQpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0Zvcm1Gb3JtYXQgPSBtb21lbnQobmV3IERhdGUoZGF0ZSkpLmZvcm1hdChcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Gb3JtYXRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQWZ0ZXJXcml0ZVZhbHVlID0gbmV3Rm9ybUZvcm1hdDtcbiAgICAgICAgICAgIHRleHQgPSBuZXdGb3JtRm9ybWF0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFoYXNWYWx1ZSkgdGhpcy5vbkNoYW5nZSh0ZXh0KTtcbiAgICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuXG4gICAgICAgIC8vIEhBUyBUTyBCRSBJTiBUSU1FT1VUIEJFQ0FVU0UgT0YgQU5HVUxBUiBTVEFDS1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNwYW4xKSB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gZGF0ZUZvcm1hdFswXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuc3BhbjIpXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgIT09XG4gICAgICAgICAgICAgICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSBkYXRlRm9ybWF0WzFdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gZGF0ZUZvcm1hdFsyXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gZGF0ZUZvcm1hdFsyXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH0sIDApO1xuXG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zaG93RGF0ZUlucHV0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlS2V5Ym9hcmRJbnB1dHMoZTogS2V5Ym9hcmRFdmVudCwgaXNSZXN0YXJ0PzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCBzcGFuT25lVmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCA9XG4gICAgICAgICAgICBpc05hTih0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKSB8fCB0aGlzLm5ld0lucHV0Q2hhbmdlZFxuICAgICAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgOiBwYXJzZUludCh0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKTtcbiAgICAgICAgY29uc3Qgc3BhbjJWYWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkID1cbiAgICAgICAgICAgIGlzTmFOKHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpIHx8IHRoaXMubmV3SW5wdXRDaGFuZ2VkXG4gICAgICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA6IHBhcnNlSW50KHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpO1xuXG4gICAgICAgIGxldCBzcGFuM1ZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lICE9PVxuICAgICAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBzcGFuM1ZhbHVlID1cbiAgICAgICAgICAgICAgICBpc05hTih0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKSB8fFxuICAgICAgICAgICAgICAgIHRoaXMubmV3SW5wdXRDaGFuZ2VkXG4gICAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgICAgOiBwYXJzZUludCh0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubmV3SW5wdXRDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzUmVzdGFydCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzcGFuT25lVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmluYWxfdmFsdWUgPSBwYXJzZUludChgJHtzcGFuT25lVmFsdWV9JHtlLmtleX1gKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmFsX3ZhbHVlID4gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzAnICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICApLnNsaWNlKC0yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldE1vbnRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUludChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIC0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmluYWxfdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdtbSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkuc2xpY2UoLTIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoZS5rZXkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0TW9udGgocGFyc2VJbnQoZS5rZXkpIC0gMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluYWxfdmFsdWUgPSAoJzAnICsgcGFyc2VJbnQoZS5rZXkpKS5zbGljZSgtMik7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGZpbmFsX3ZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludChgMSR7ZS5rZXl9YCkgPiAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNSZXN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnZGQnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgwLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNwYW4yVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmluYWxfdmFsdWUgPSBwYXJzZUludChgJHtzcGFuMlZhbHVlfSR7ZS5rZXl9YCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5hbF92YWx1ZSA+IDMxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcwJyArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5zZXREYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUludChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaW5hbF92YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnZGQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgyLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludChlLmtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5zZXREYXRlKHBhcnNlSW50KGUua2V5KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgICAgICAgICAgICcwJyArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgICApLnNsaWNlKC0yKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoYDEke2Uua2V5fWApID4gMzEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgyLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChpc1Jlc3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICd5eSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEsIHRydWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXNwYW4zVmFsdWUgfHwgc3BhbjNWYWx1ZS50b1N0cmluZygpLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgICAgICAgICAgICAgJzAnICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldEZ1bGxZZWFyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGAyMDAke3BhcnNlSW50KGUua2V5KX1gKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluYWxZZWFyID0gcGFyc2VJbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluYWxTaG93WWVhciA9XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFllYXIgPiAzMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcGFyc2VJbnQoYDE5JHtmaW5hbFllYXJ9YClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHBhcnNlSW50KGAyMCR7ZmluYWxZZWFyfWApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldEZ1bGxZZWFyKGZpbmFsU2hvd1llYXIpXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PVxuICAgICAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uSW5wdXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNSZXN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnbW0nO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgwKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNwYW5PbmVWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5hbF92YWx1ZSA9IHBhcnNlSW50KGAke3NwYW5PbmVWYWx1ZX0ke2Uua2V5fWApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmluYWxfdmFsdWUgPiAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMCcgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0TW9udGgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaW5hbF92YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnbW0nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludChlLmtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5zZXRNb250aChwYXJzZUludChlLmtleSkgLSAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5hbF92YWx1ZSA9ICgnMCcgKyBwYXJzZUludChlLmtleSkpLnNsaWNlKC0yKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gZmluYWxfdmFsdWU7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KGAxJHtlLmtleX1gKSA+IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzUmVzdGFydCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ3l5JztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDI7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3BhbjJWYWx1ZSB8fCBzcGFuMlZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICAgICAgICAgICAgICAnMCcgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0RnVsbFllYXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoYDIwMCR7cGFyc2VJbnQoZS5rZXkpfWApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5hbFllYXIgPSBwYXJzZUludChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5hbFNob3dZZWFyID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsWWVhciA+IDMxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBwYXJzZUludChgMTkke2ZpbmFsWWVhcn1gKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcGFyc2VJbnQoYDIwJHtmaW5hbFllYXJ9YCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0RnVsbFllYXIoZmluYWxTaG93WWVhcilcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgICApLnNsaWNlKC0yKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZWxlY3RTcGFuQnlUYWJJbmRleChpbmR4OiBudW1iZXIsIGNoYW5nZVRhYj86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgc3dpdGNoIChpbmR4KSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlVGFiKSB0aGlzLm5ld0lucHV0Q2hhbmdlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVOYXZpZ2F0aW9uS2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xuICAgICAgICAgICAgY2FzZSAzNzogLy8gTGVmdCBhcnJvd1xuICAgICAgICAgICAgICAgIHRoaXMubW92ZVNlbGVjdGlvbkxlZnQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzk6IC8vIFJpZ2h0IGFycm93XG4gICAgICAgICAgICBjYXNlIDk6IC8vIFRhYlxuICAgICAgICAgICAgICAgIHRoaXMubW92ZVNlbGVjdGlvblJpZ2h0T3JUYWIoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzODogLy8gVXAgYXJyb3dcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGVUaW1lTW9kZWwoJ3VwJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDQwOiAvLyBEb3duIGFycm93XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRlVGltZU1vZGVsKCdkb3duJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDg6IC8vIEJhY2tzcGFjZVxuICAgICAgICAgICAgY2FzZSA0NjogLy8gRGVsZXRlXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVLZXlib2FyZElucHV0cyhldmVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZURhdGVQaWNrZXJJbnB1dChpc1VwOiBib29sZWFuLCBpc0RhdGVQaWNrZXI6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDApIHRoaXMudXBkYXRlTW9udGgoaXNVcCk7XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDEpIHRoaXMudXBkYXRlRGF0ZShpc1VwLCBpc0RhdGVQaWNrZXIpO1xuICAgICAgICBlbHNlIHRoaXMudXBkYXRlWWVhcihpc1VwLCBpc0RhdGVQaWNrZXIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RGF0ZVRpbWVNb2RlbChkaXJlY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gLTEpIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuXG4gICAgICAgIGNvbnN0IGlzVXAgPSBkaXJlY3Rpb24gPT09ICd1cCc7XG4gICAgICAgIGNvbnN0IGlzRGF0ZVBpY2tlciA9XG4gICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVI7XG4gICAgICAgIGNvbnN0IGlzQmFua0NhcmRQaWNrZXIgPVxuICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PVxuICAgICAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkQ7XG5cbiAgICAgICAgaWYgKGlzRGF0ZVBpY2tlciB8fCBpc0JhbmtDYXJkUGlja2VyKVxuICAgICAgICAgICAgdGhpcy5oYW5kbGVEYXRlUGlja2VySW5wdXQoaXNVcCwgaXNEYXRlUGlja2VyKTtcbiAgICAgICAgZWxzZSB0aGlzLmhhbmRsZVRpbWVQaWNrZXJJbnB1dChpc1VwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1vdmVTZWxlY3Rpb25SaWdodE9yVGFiKGU6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXNEYXRlcGlja2VyQmFua0NhcmQgPVxuICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PVxuICAgICAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkQ7XG4gICAgICAgIGNvbnN0IG1heEluZGV4ID0gaXNEYXRlcGlja2VyQmFua0NhcmQgPyAxIDogMjtcblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA8IG1heEluZGV4ICYmICFlLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ICs9IDE7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KHRoaXMuc2VsZWN0aW9uSW5wdXQsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGUua2V5Q29kZSA9PT0gOSAmJiAhZS5zaGlmdEtleSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c05leHRJbnB1dCgpO1xuICAgICAgICB9IGVsc2UgaWYgKGUuc2hpZnRLZXkgJiYgZS5rZXlDb2RlID09PSA5KSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzUHJldmlvdXNJbnB1dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb2N1c1ByZXZpb3VzSW5wdXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFsbElucHV0cyA9IEFycmF5LmZyb20oXG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dC5pbnB1dC1jb250cm9sJylcbiAgICAgICAgKSBhcyBIVE1MSW5wdXRFbGVtZW50W107XG5cbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gYWxsSW5wdXRzLmZpbmRJbmRleChcbiAgICAgICAgICAgIChpbnB1dCkgPT5cbiAgICAgICAgICAgICAgICBpbnB1dCA9PT0gdGhpcy5jYUlucHV0Q29tcG9uZW50LmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50XG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gLTEpIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAzO1xuICAgICAgICBlbHNlIGlmIChjdXJyZW50SW5kZXggPT09IDApIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgLT0gMTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgodGhpcy5zZWxlY3Rpb25JbnB1dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VycmVudEluZGV4ID4gMCkgYWxsSW5wdXRzW2N1cnJlbnRJbmRleCAtIDFdLmZvY3VzKCk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IC0xO1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9jdXNOZXh0SW5wdXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFsbElucHV0cyA9IEFycmF5LmZyb20oXG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dC5pbnB1dC1jb250cm9sJylcbiAgICAgICAgKSBhcyBIVE1MSW5wdXRFbGVtZW50W107XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGFsbElucHV0cy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoaW5wdXQpID0+XG4gICAgICAgICAgICAgICAgaW5wdXQgPT09IHRoaXMuY2FJbnB1dENvbXBvbmVudC5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChhbGxJbnB1dHNbY3VycmVudEluZGV4ICsgMV0pIGFsbElucHV0c1tjdXJyZW50SW5kZXggKyAxXS5mb2N1cygpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuYmx1ck9uRGF0ZVRpbWUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0SXNGb2N1c0lucHV0KHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2FJbnB1dENvbXBvbmVudC5pc0ZvY3VzSW5wdXQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1vdmVTZWxlY3Rpb25MZWZ0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgLT0gMTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgodGhpcy5zZWxlY3Rpb25JbnB1dCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZU1vbnRoKGlzVXA6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbW9udGhEZWx0YSA9IGlzVXAgPyAxIDogLTE7XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0TW9udGgoXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5nZXRNb250aCgpICsgbW9udGhEZWx0YVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLnBhZFZhbHVlKFxuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5nZXRNb250aCgpICsgMVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZURhdGUoaXNVcDogYm9vbGVhbiwgaXNEYXRlUGlja2VyOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRhdGVEZWx0YSA9IGlzVXAgPyAxIDogLTE7XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0RGF0ZShcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLmdldERhdGUoKSArIGRhdGVEZWx0YVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHNwYW5FbGVtZW50ID0gaXNEYXRlUGlja2VyXG4gICAgICAgICAgICA/IHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudFxuICAgICAgICAgICAgOiB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHNwYW5FbGVtZW50LmlubmVySFRNTCA9IHRoaXMucGFkVmFsdWUodGhpcy5kYXRlVGltZUlucHV0RGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24oc3BhbkVsZW1lbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlWWVhcihpc1VwOiBib29sZWFuLCBpc0RhdGVQaWNrZXI6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeWVhckRlbHRhID0gaXNVcCA/IDEgOiAtMTtcbiAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5zZXRGdWxsWWVhcihcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLmdldEZ1bGxZZWFyKCkgKyB5ZWFyRGVsdGFcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBzcGFuRWxlbWVudCA9IGlzRGF0ZVBpY2tlclxuICAgICAgICAgICAgPyB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgICAgIDogdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBzcGFuRWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLmRhdGVUaW1lSW5wdXREYXRlXG4gICAgICAgICAgICAuZ2V0RnVsbFllYXIoKVxuICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgIC5zbGljZSgtMik7XG4gICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbihzcGFuRWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYWRWYWx1ZSh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICgnMCcgKyB2YWx1ZSkuc2xpY2UoLTIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlVGltZVBpY2tlcklucHV0KGlzVXA6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDApIHRoaXMudXBkYXRlSG91cnMoaXNVcCk7XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDEpIHRoaXMudXBkYXRlTWludXRlcyhpc1VwKTtcbiAgICAgICAgZWxzZSB0aGlzLnRvZ2dsZUFNUE0oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUhvdXJzKGlzVXA6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaG91cnNEZWx0YSA9IGlzVXAgPyAxIDogLTE7XG4gICAgICAgIGxldCBzZWxlY3RlZEhvdXJzID0gdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5nZXRIb3VycygpICsgaG91cnNEZWx0YTtcblxuICAgICAgICBpZiAoc2VsZWN0ZWRIb3VycyA9PT0gMCkgc2VsZWN0ZWRIb3VycyA9IDI0O1xuICAgICAgICBpZiAoc2VsZWN0ZWRIb3VycyA9PT0gLTEpIHNlbGVjdGVkSG91cnMgPSAyMztcblxuICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldEhvdXJzKHNlbGVjdGVkSG91cnMpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IHRoaXMucGFkVmFsdWUoXG4gICAgICAgICAgICBzZWxlY3RlZEhvdXJzID4gMTIgPyBzZWxlY3RlZEhvdXJzIC0gMTIgOiBzZWxlY3RlZEhvdXJzXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgIHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPVxuICAgICAgICAgICAgc2VsZWN0ZWRIb3VycyA+IDExICYmIHNlbGVjdGVkSG91cnMgPCAyNCA/ICdQTScgOiAnQU0nO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlTWludXRlcyhpc1VwOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1pbnV0ZXNEZWx0YSA9IGlzVXAgPyAxIDogLTE7XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0TWludXRlcyhcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLmdldE1pbnV0ZXMoKSArIG1pbnV0ZXNEZWx0YVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLnBhZFZhbHVlKFxuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5nZXRNaW51dGVzKClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0b2dnbGVBTVBNKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID1cbiAgICAgICAgICAgIHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPT09ICdBTScgPyAnUE0nIDogJ0FNJztcblxuICAgICAgICBjb25zdCBob3Vyc1RvQWRkID1cbiAgICAgICAgICAgIHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPT09ICdBTScgPyAtMTIgOiAxMjtcbiAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5zZXRIb3VycyhcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLmdldEhvdXJzKCkgKyBob3Vyc1RvQWRkXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFySW5wdXQoZXZlbnQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhcklucHV0RXZlbnQuZW1pdChldmVudCk7XG5cbiAgICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgICAgICB0aGlzLnJlc2V0RGF0ZVRpbWVJbnB1dHMoKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgnJyk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQmx1cklucHV0KGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ibHVySW5wdXRFdmVudC5lbWl0KGV2ZW50KTtcbiAgICAgICAgLy8gRGF0ZXBpY2tlclxuICAgICAgICB0aGlzLmZvY3VzQmx1ciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ibHVyT25EYXRlVGltZSgpO1xuICAgICAgICB9LCAxMDApO1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNldERhdGVUaW1lSW5wdXRzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zcGFuMSlcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnbW0nO1xuICAgICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnZGQnO1xuICAgICAgICAgICAgICAgIHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAneXknO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09XG4gICAgICAgICAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnbW0nO1xuICAgICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAneXknO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uVElNRV9QSUNLRVJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnSEgnO1xuICAgICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnTU0nO1xuICAgICAgICAgICAgICAgIHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnQU0nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0VGltZVBpY2tlclRpbWUoKTtcbiAgICAgICAgdGhpcy5uZXdJbnB1dENoYW5nZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG4gICAgICAgIHRoaXMuc2hvd0RhdGVJbnB1dCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRUaW1lUGlja2VyVGltZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5USU1FX1BJQ0tFUilcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICBtb21lbnQoKS5mb3JtYXQoJ01NL0REL1lZWVknKSArXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmlucHV0Q29uZmlnPy5pc0Zyb21EYXRlID8gJyAxMjoxNScgOiAnIDEyOjAwJylcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cbn0iLCI8ZGl2XG4gICAgY2xhc3M9XCJkYXRldGltZS1waWNrZXItbWFpbi1ob2xkZXIgaW5wdXQtY3VzdG9tLWdyb3VwIGRhdGV0aW1lY2xhc3NcIlxuICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICBnZXRTdXBlckNvbnRyb2xcbiAgICAgICAgICAgIHwgaW5wdXRDb250YWluZXJDbGFzc1xuICAgICAgICAgICAgICAgIDogY2FJbnB1dENvbXBvbmVudC5pc0ZvY3VzSW5wdXRcbiAgICAgICAgICAgICAgICA6IGNhSW5wdXRDb21wb25lbnQuaXNUb3VjaGVkSW5wdXRcbiAgICAgICAgICAgICAgICA6IGlucHV0Q29uZmlnXG4gICAgICAgICAgICAgICAgOiBnZXRTdXBlckNvbnRyb2w/LnZhbHVlXG4gICAgICAgICAgICAgICAgOiBnZXRTdXBlckNvbnRyb2w/LmRpc2FibGVkXG4gICAgXCJcbj5cbiAgICA8ZGl2XG4gICAgICAgICNob2xkZXIxXG4gICAgICAgIGNsYXNzPVwiZGF0ZV90aW1lX2hvbGRlciBpbnB1dC1jb250cm9sXCJcbiAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzaG93RGF0ZUlucHV0XCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIChtb3VzZWRvd24pPVwic2VsZWN0TGFzdE9uZUZvclNlbGVjdGlvbigpXCJcbiAgICAgICAgKG1vdXNldXApPVwic2VsZWN0TGFzdE9uZUFmdGVyTW91c2VVcCgpXCJcbiAgICAgICAgKHBhc3RlKT1cIm9uRGF0ZVBhc3RlKCRldmVudClcIlxuICAgICAgICAoa2V5ZG93bik9XCJjaGFuZ2VTZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bk9wdGlvbnMoKVwiXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICdwYWRkaW5nLWxlZnQnOiBpbnB1dENvbmZpZy5pc0ljb25IaWRkZW4gPyAnMnB4JyA6ICcyN3B4JyxcbiAgICAgICAgfVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgY2FJbnB1dENvbXBvbmVudC5pc0ZvY3VzSW5wdXRcbiAgICAgICAgICAgICAgICB8IGlucHV0RGF0ZXRpbWVQaWNrZXJDbGFzc1xuICAgICAgICAgICAgICAgICAgICA6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIDogZ2V0U3VwZXJDb250cm9sXG4gICAgICAgICAgICAgICAgICAgIDogaW5wdXRDb25maWdcbiAgICAgICAgICAgICAgICAgICAgOiBjYUlucHV0Q29tcG9uZW50LmlzVG91Y2hlZElucHV0XG4gICAgICAgICAgICAgICAgICAgIDogZ2V0U3VwZXJDb250cm9sPy5kaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgICA6IGdldFN1cGVyQ29udHJvbD8udmFsdWVcbiAgICAgICAgXCJcbiAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICAjc3BhbjFcbiAgICAgICAgICAgIGNsYXNzPVwibWFpblwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgJ3Jlc2V0LXNlbGVjdGlvbi1jb2xvcic6ICFjYUlucHV0Q29tcG9uZW50LmlzRm9jdXNJbnB1dCxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiaW5wdXRDb25maWcubmFtZSA9PT0gJ2RhdGVwaWNrZXInID8gJ21tJyA6ICdISCdcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJvcmRlci1waWNrZXJcIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiaW5wdXRDb25maWcubmFtZSA9PT0gJ2RhdGVwaWNrZXInID8gJy8nIDogJzonXCJcbiAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICAgI3NwYW4yXG4gICAgICAgICAgICBjbGFzcz1cIm1haW5cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICdyZXNldC1zZWxlY3Rpb24tY29sb3InOiAhY2FJbnB1dENvbXBvbmVudC5pc0ZvY3VzSW5wdXQsXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIHRhYmluZGV4PVwiMVwiXG4gICAgICAgICAgICBbaW5uZXJIVE1MXT1cImlucHV0Q29uZmlnLm5hbWUgPT09ICdkYXRlcGlja2VyJyA/ICdkZCcgOiAnTU0nXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJib3JkZXItcGlja2VyXCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImlucHV0Q29uZmlnLm5hbWUgPT09ICdkYXRlcGlja2VyJyA/ICcvJyA6ICcgJ1wiXG4gICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICNzcGFuM1xuICAgICAgICAgICAgY2xhc3M9XCJtYWluXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAncmVzZXQtc2VsZWN0aW9uLWNvbG9yJzogIWNhSW5wdXRDb21wb25lbnQuaXNGb2N1c0lucHV0LFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICB0YWJpbmRleD1cIjJcIlxuICAgICAgICAgICAgW2lubmVySFRNTF09XCJpbnB1dENvbmZpZy5uYW1lID09PSAnZGF0ZXBpY2tlcicgPyAneXknIDogJ0FNJ1wiXG4gICAgICAgID48L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGNhLWlucHV0LXRlc3RcbiAgICAgICAgW2lucHV0Q29uZmlnXT1cImlucHV0Q29uZmlnXCJcbiAgICAgICAgW2RhdGVUaW1lUG9wb3Zlcl09XCJkYXRlVGltZVBvcG92ZXJcIlxuICAgICAgICAoZm9jdXNJbnB1dEV2ZW50KT1cImhhbmRsZUZvY3VzSW5wdXQoJGV2ZW50KVwiXG4gICAgICAgIChoYW5kbGVUb2dnbGVEcm9wZG93bk9wdGlvbnMpPVwidG9nZ2xlRHJvcGRvd25PcHRpb25zKClcIlxuICAgICAgICAoY2xvc2VQb3BvdmVyKT1cImJsdXJPbkRhdGVUaW1lKClcIlxuICAgICAgICAoYmx1cklucHV0KT1cIm9uQmx1cklucHV0KCRldmVudClcIlxuICAgICAgICAoY2xlYXIpPVwiY2xlYXJJbnB1dCgkZXZlbnQpXCJcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cImdldFN1cGVyQ29udHJvbCEgfCBmb3JtQ29udHJvbFwiXG4gICAgPjwvY2EtaW5wdXQtdGVzdD5cbjwvZGl2PlxuPCEtLSBQb3BvdmVyIGZvciBEYXRlVGltZSBQaWNrZXJzIC0tPlxuPG5nLXRlbXBsYXRlICNkYXRlVGltZVBvcG92ZXIgbGV0LWRhdGE9XCJkYXRhXCI+XG4gICAgPGRpdiBjbGFzcz1cImRhdGV0aW1lLWRyb3Bkb3duLWhvbGRlclwiPlxuICAgICAgICA8Y2EtY3VzdG9tLWRhdGV0aW1lLXBpY2tlcnNcbiAgICAgICAgICAgIFtjYWxlbmRhclR5cGVdPVwiXG4gICAgICAgICAgICAgICAgaW5wdXRDb25maWcubmFtZSA9PT0gJ2RhdGVwaWNrZXInIHx8XG4gICAgICAgICAgICAgICAgaW5wdXRDb25maWcubmFtZSA9PT0gJ2RhdGVwaWNrZXJCYW5rQ2FyZCdcbiAgICAgICAgICAgICAgICAgICAgPyAnZGF0ZSdcbiAgICAgICAgICAgICAgICAgICAgOiAndGltZSdcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbaW5wdXRDb25maWddPVwiaW5wdXRDb25maWdcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidNTS9ERC9ZWSdcIlxuICAgICAgICAgICAgW2RhdGVUaW1lXT1cImRhdGVUaW1lSW5wdXREYXRlXCJcbiAgICAgICAgICAgIChjbG9zZVBvcG92ZXIpPVwiY2xvc2VQb3BvdmVyKClcIlxuICAgICAgICA+PC9jYS1jdXN0b20tZGF0ZXRpbWUtcGlja2Vycz5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -18288,6 +18288,7 @@ class CaInputDatetimePickerComponent {
|
|
|
18288
18288
|
clearTimeout(this.focusBlur);
|
|
18289
18289
|
}, 90);
|
|
18290
18290
|
}
|
|
18291
|
+
// 05/05/2025
|
|
18291
18292
|
onDatePaste(event) {
|
|
18292
18293
|
event.preventDefault();
|
|
18293
18294
|
const pasteText = event.clipboardData?.getData('text');
|
|
@@ -18298,9 +18299,10 @@ class CaInputDatetimePickerComponent {
|
|
|
18298
18299
|
}
|
|
18299
18300
|
}
|
|
18300
18301
|
changeSelection(e, noPreventDefault = false) {
|
|
18301
|
-
|
|
18302
|
-
|
|
18303
|
-
|
|
18302
|
+
const isCtrlV = (e.ctrlKey || e.metaKey) && e.key.toLowerCase() === 'v';
|
|
18303
|
+
if (isCtrlV) {
|
|
18304
|
+
// Allow paste
|
|
18305
|
+
return;
|
|
18304
18306
|
}
|
|
18305
18307
|
if (e.keyCode == 37 ||
|
|
18306
18308
|
e.keyCode == 38 ||
|