ca-components 0.0.82 → 0.0.83
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-filters/components/ca-dispatcher-filter/ca-dispatcher-filter.component.mjs +2 -2
- package/esm2022/lib/components/ca-filters/components/ca-user-filter/ca-user-filter.component.mjs +2 -2
- package/esm2022/lib/components/ca-input/ca-input.component.mjs +10 -4
- package/esm2022/lib/components/ca-input/directives/index.mjs +2 -0
- package/esm2022/lib/components/ca-input/directives/min-max-value.directive.mjs +49 -0
- package/esm2022/lib/components/ca-input/services/ca-input-state.service.mjs +2 -3
- package/esm2022/lib/components/ca-input-dropdown/components/ca-input-dropdown-load-dispatcher/ca-input-dropdown-load-dispatcher.component.mjs +1 -1
- package/esm2022/lib/components/ca-input-dropdown/components/ca-input-dropdown-load-dispatches-ttd/ca-input-dropdown-load-dispatches-ttd.component.mjs +1 -1
- package/esm2022/lib/components/ca-input-dropdown/components/ca-input-dropdown-svgtext-dispatch-template/ca-input-dropdown-svgtext-dispatch-template.component.mjs +1 -1
- package/esm2022/lib/components/ca-input-dropdown/components/ca-input-dropdown-svgtext-template/ca-input-dropdown-svgtext-template.component.mjs +2 -2
- package/esm2022/lib/components/ca-main-table/ca-main-table.component.mjs +6 -3
- package/esm2022/lib/components/ca-period-content/ca-period-content.component.mjs +3 -3
- package/esm2022/lib/components/ca-period-content/components/ca-period-content-payment/ca-period-content-payment.component.mjs +2 -2
- package/esm2022/lib/components/ca-period-content/components/ca-period-content-user-info/ca-period-content-user-info.component.mjs +3 -3
- package/esm2022/lib/components/ca-profile-image/ca-profile-image.component.mjs +6 -3
- package/esm2022/lib/components/ca-rating-review/components/ca-rating-review-user/ca-rating-review-user.component.mjs +1 -1
- package/esm2022/lib/components/ca-todo/components/ca-todo-card.component.mjs +2 -2
- package/fesm2022/ca-components.mjs +79 -23
- package/fesm2022/ca-components.mjs.map +1 -1
- package/lib/components/ca-input/directives/index.d.ts +1 -0
- package/lib/components/ca-input/directives/min-max-value.directive.d.ts +12 -0
- package/lib/components/ca-main-table/ca-main-table.component.d.ts +2 -1
- package/lib/components/ca-profile-image/ca-profile-image.component.d.ts +2 -1
- package/package.json +1 -1
|
@@ -463,8 +463,7 @@ export class InputStateService {
|
|
|
463
463
|
decimalPart = decimalPart.slice(0, 2);
|
|
464
464
|
const currentPosition = this.input.nativeElement.selectionStart;
|
|
465
465
|
// 4. Set formatted number
|
|
466
|
-
this.superControl.control?.patchValue(
|
|
467
|
-
/* integerPart + '.' + decimalPart */ 'asd');
|
|
466
|
+
this.superControl.control?.patchValue(integerPart + '.' + decimalPart);
|
|
468
467
|
this.timeoutCleaner = setTimeout(() => {
|
|
469
468
|
if (event.keyCode === 51) {
|
|
470
469
|
this.cursorInputPosition =
|
|
@@ -2108,4 +2107,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
2108
2107
|
providedIn: 'root',
|
|
2109
2108
|
}]
|
|
2110
2109
|
}], ctorParameters: function () { return [{ type: i1.CalendarDateTimePickerService }, { type: i2.CaInputValidationService }, { type: i3.ThousandSeparatorPipe }]; } });
|
|
2111
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtaW5wdXQtc3RhdGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NhLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhLWlucHV0L3NlcnZpY2VzL2NhLWlucHV0LXN0YXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQyxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBRWIsT0FBTyxFQUNQLFNBQVMsR0FDVixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQVM1QixVQUFVO0FBQ1YsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFFL0YsUUFBUTtBQUNSLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixlQUFlLEdBQ2hCLE1BQU0sVUFBVSxDQUFDO0FBTWxCLGFBQWE7QUFDYixPQUFPLEVBQW9CLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUs1RCxZQUFZO0FBQ1osT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7OztBQUtwRCxNQUFNLE9BQU8saUJBQWlCO0lBK0g1QixZQUNVLGVBQThDLEVBQzlDLHdCQUFrRDtJQUUxRCxRQUFRO0lBQ0EscUJBQTRDO1FBSjVDLG9CQUFlLEdBQWYsZUFBZSxDQUErQjtRQUM5Qyw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBR2xELDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFuSTlDLHdCQUFtQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQzNELGtCQUFhLEdBQ2xCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVsQywwQkFBcUIsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUM3RCxvQkFBZSxHQUNwQixJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFcEMsNkJBQXdCLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDaEUsdUJBQWtCLEdBQ3ZCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV2Qyx1QkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUMxRCxpQkFBWSxHQUNqQixJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFakMsNkJBQXdCLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDaEUsdUJBQWtCLEdBQ3ZCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV2Qyw2QkFBd0IsR0FBRyxJQUFJLGVBQWUsQ0FBTyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbEUsdUJBQWtCLEdBQ3ZCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV2Qyx5QkFBb0IsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUM1RCxtQkFBYyxHQUNuQixJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFbkMsd0JBQW1CLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDM0Qsa0JBQWEsR0FDbEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBRWxDLG9CQUFlLEdBQUcsSUFBSSxPQUFPLEVBQW9CLENBQUM7UUFDbkQsY0FBUyxHQUNkLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFdEMsVUFBVTtRQUNGLHdCQUFtQixHQUFHLElBQUksT0FBTyxFQUFpQixDQUFDO1FBQ3BELGtCQUFhLEdBQ2xCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVsQywyQkFBc0IsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO1FBQ2pELHFCQUFnQixHQUNyQixJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFckMsMEJBQXFCLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQUNoRCxvQkFBZSxHQUNwQixJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFcEMsNEJBQXVCLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQUNsRCxzQkFBaUIsR0FDdEIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXRDLGlDQUE0QixHQUFHLElBQUksT0FBTyxFQUc5QyxDQUFDO1FBQ0UsMkJBQXNCLEdBR3hCLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUU5QyxxQkFBZ0IsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO1FBQzNDLGVBQVUsR0FBd0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXRFLHVCQUFrQixHQUFHLElBQUksT0FBTyxFQUFvQixDQUFDO1FBQ3RELGlCQUFZLEdBQ2pCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVsQyx1QkFBa0IsR0FBRyxhQUFhLENBQUM7WUFDeEMsSUFBSSxDQUFDLGFBQWE7WUFDbEIsSUFBSSxDQUFDLGVBQWU7WUFDcEIsSUFBSSxDQUFDLGtCQUFrQjtZQUN2QixJQUFJLENBQUMsWUFBWTtZQUNqQixJQUFJLENBQUMsa0JBQWtCO1lBQ3ZCLElBQUksQ0FBQyxrQkFBa0I7WUFDdkIsSUFBSSxDQUFDLGNBQWM7WUFDbkIsSUFBSSxDQUFDLGFBQWE7U0FDbkIsQ0FBQyxDQUFDO1FBVUgsT0FBTztRQUNBLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLG1CQUFjLEdBQVcsQ0FBQyxDQUFDLENBQUM7UUFHbkMsa0JBQWtCO1FBQ1gsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFpQmhDLG9CQUFlLEdBQVcsQ0FBQyxDQUFDLENBQUM7UUFJcEMsbUJBQW1CO1FBQ1osZ0NBQTJCLEdBQVcsQ0FBQyxDQUFDO1FBQ3hDLHdCQUFtQixHQUFXLENBQUMsQ0FBQztRQUNoQyw0QkFBdUIsR0FBVyxDQUFDLENBQUM7UUFFM0MsbUJBQW1CO1FBQ1osZ0NBQTJCLEdBQVcsQ0FBQyxDQUFDO1FBQ3hDLG1CQUFjLEdBQVcsQ0FBQyxDQUFDO1FBRTFCLGFBQVEsR0FBa0IsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQVFuRCxDQUFDO0lBRUcsZUFBZSxDQUFDLEtBQWM7UUFDbkMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU0saUJBQWlCLENBQUMsS0FBYztRQUNyQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFTSxvQkFBb0IsQ0FBQyxLQUFjO1FBQ3hDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVNLGNBQWMsQ0FBQyxLQUFjO1FBQ2xDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVNLG9CQUFvQixDQUFDLEtBQWM7UUFDeEMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRU0sb0JBQW9CLENBQUMsS0FBVztRQUNyQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxLQUFjO1FBQ3BDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVNLGVBQWUsQ0FBQyxLQUFjO1FBQ25DLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVNLGtCQUFrQixDQUFDLEtBQWlCLEVBQUUsS0FBd0I7UUFDbkUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVNLGVBQWUsQ0FBQyxZQUF1QjtRQUM1QyxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztJQUNuQyxDQUFDO0lBRU0sY0FBYyxDQUFDLE1BQWdCO1FBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO0lBQzVCLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxjQUF1QjtRQUM5QyxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztJQUN2QyxDQUFDO0lBRU0sZUFBZSxDQUFDLEtBQW9CO1FBQ3pDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVNLGtCQUFrQixDQUFDLEtBQWM7UUFDdEMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU0saUJBQWlCLENBQUMsS0FBYztRQUNyQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxLQUFjO1FBQ3ZDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVNLHdCQUF3QixDQUFDLEtBRy9CO1FBQ0MsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRU0sWUFBWSxDQUFDLEtBQWM7UUFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU0sY0FBYyxDQUFDLEtBQXVCO1FBQzNDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVNLFdBQVcsQ0FBQyxLQUF1QjtRQUN4QyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRU0sVUFBVSxDQUFDLEdBQXFCO1FBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFekIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQ0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUsseUJBQXlCLENBQUMsV0FBVztnQkFDL0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUsseUJBQXlCLENBQUMsV0FBVztnQkFDL0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJO29CQUNuQix5QkFBeUIsQ0FBQyxxQkFBcUIsRUFDakQ7Z0JBQ0EsSUFBSSxHQUFHLEVBQUU7b0JBQ1AsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO3dCQUNwQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzdCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztpQkFDVDtxQkFBTTtvQkFDTCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO29CQUNyQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztpQkFDNUI7YUFDRjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUU7b0JBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7aUJBQ3RDO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxVQUFVLENBQUMsS0FBWTtRQUM1QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLG9CQUFvQjtRQUNwQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5QixPQUFPO1NBQ1I7UUFDRCxrQkFBa0I7UUFDbEIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRTtZQUNuQyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUMzQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsZUFBZTthQUNWO1lBQ0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLDJCQUEyQixHQUFHLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsMkJBQTJCLEdBQUcsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsR0FBRyxTQUFTLENBQUM7WUFDaEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsSUFFSTtnQkFDRSx5QkFBeUIsQ0FBQyxXQUFXO2dCQUNyQyx5QkFBeUIsQ0FBQyxXQUFXO2dCQUNyQyx5QkFBeUIsQ0FBQyxxQkFBcUI7YUFFbEQsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7Z0JBRWpDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBRTdCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMvQjtJQUNILENBQUM7SUFFTSxhQUFhLENBQUMsS0FBWSxFQUFFLE9BQWlCO1FBQ2xELE1BQU0sS0FBSyxHQUFJLEtBQUssQ0FBQyxNQUEyQixDQUFDLEtBQUssQ0FBQztRQUN2RCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDO1FBRW5FLHlCQUF5QjtRQUN6QixJQUFJLE9BQU8sRUFBRTtZQUNYLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDekI7YUFBTSxJQUFJLEtBQUssRUFBRTtZQUNoQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1NBQ3hDO1FBRUQsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFFL0Isb0RBQW9EO1FBQ3BELElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRTNCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU3QixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUVqQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU8sV0FBVyxDQUFDLEtBQWE7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztZQUN4QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUN6QjthQUFNO1lBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUN2QyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztTQUM3QjtRQUVELGlDQUFpQztRQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVUsRUFBRTtZQUN2RSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FDdkUsQ0FBQyxFQUNELElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUMzQixDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRU8sdUJBQXVCO1FBQzdCLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUMzQyxRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFO1lBQ3RDLEtBQUssZUFBZSxDQUFDLFVBQVU7Z0JBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUs7b0JBQzVCLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDbkUsTUFBTTtZQUNSLEtBQUssZUFBZSxDQUFDLFNBQVM7Z0JBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2xFLE1BQU07WUFDUixLQUFLLGVBQWUsQ0FBQyxnQkFBZ0I7Z0JBQ25DLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FDeEMsc0JBQXNCLEVBQ3RCLENBQUMsTUFBYyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQ3pDLENBQUM7Z0JBRUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLG9CQUFvQixDQUFDO2dCQUN0RCxNQUFNO1lBQ1I7Z0JBQ0UsTUFBTTtTQUNUO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO1FBQ3RELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsSUFBSSxZQUFZLEVBQUU7WUFDdEQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzNDLE9BQU87YUFDUjtZQUNELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUMvQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQ25DLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQ25ELENBQUM7YUFDSDtTQUNGO0lBQ0gsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7UUFDdEQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsSUFBSSxZQUFZLEVBQUU7WUFDbkQsc0NBQXNDO1lBQ3RDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMzQyxPQUFPO2FBQ1I7WUFFRCxxQkFBcUI7WUFDckIsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM5QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQzthQUMxQjtpQkFBTTtnQkFDTCw2QkFBNkI7Z0JBQzdCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2FBQzdCO1lBRUQsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7U0FDL0I7SUFDSCxDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQztRQUN0RCw4QkFBOEI7UUFDOUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWpELElBQUksQ0FBQyx5QkFBeUI7WUFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyx3QkFBeUIsR0FBRyxDQUFDLENBQUM7UUFFakQsb0RBQW9EO1FBQ3BELElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQ3BELFlBQVk7YUFDVCxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUM7YUFDOUIsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLHdCQUF3QixDQUFDLENBQ3ZELENBQUM7UUFDRixJQUFJLFdBQVcsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFL0QsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNoQixXQUFXLEdBQUcsR0FBRyxDQUFDO1NBQ25CO1FBRUQsZ0RBQWdEO1FBQ2hELFdBQVcsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV0QyxJQUFJLFdBQVcsRUFBRTtZQUNmLDRCQUE0QjtZQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsR0FBRyxXQUFXLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQztZQUN2RSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDdEU7SUFDSCxDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQztRQUN0RCxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRTFCLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNwQywwQ0FBMEM7WUFDMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUNuQyxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUNuRCxDQUFDO1lBRUYsbUJBQW1CO1lBQ25CLElBQUksQ0FBQyx5QkFBeUI7Z0JBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsd0JBQXdCLENBQUM7WUFFNUMsWUFBWTtZQUNaLElBQUksWUFBWSxFQUFFO2dCQUNoQixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQ25DLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsd0JBQXdCLENBQUMsQ0FDakUsQ0FBQzthQUNIO1lBRUQsc0NBQXNDO1lBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FDbkMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FDbkQsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtZQUNwQyxJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUN4QyxJQUFJLENBQUMsbUJBQW1CO29CQUN0QixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ2hFLElBQUksQ0FBQyxtQkFBbUI7b0JBQ3RCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDakUsQ0FBQztZQUNKLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNQO2FBQU07WUFDTCw0RUFBNEU7WUFDNUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFDO0lBQ0gsQ0FBQztJQUVPLFVBQVUsQ0FBQyxLQUFhO1FBQzlCLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsS0FBYTtRQUNwQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUV2RCxJQUNFLFVBQVUsS0FBSyxlQUFlLENBQUMsSUFBSTtZQUNuQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQ2xFO1lBQ0EsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7U0FDekQ7UUFFRCxJQUFJLFVBQVUsS0FBSyxlQUFlLENBQUMsTUFBTSxFQUFFO1lBQ3pDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUMvQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzthQUN6RDtpQkFBTTtnQkFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDNUM7U0FDRjtRQUVELElBQUksVUFBVSxLQUFLLGVBQWUsQ0FBQyxLQUFLLEVBQUU7WUFDeEMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQy9DLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ2xEO3FCQUFNLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7aUJBQ25EO2FBQ0Y7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzVDO1NBQ0Y7UUFFRCxJQUNFLFVBQVUsS0FBSyxlQUFlLENBQUMsU0FBUztZQUN4QyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQ2hDO1lBQ0EsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUVPLGVBQWU7UUFDckIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxRCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUU7WUFDN0MsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU8seUJBQXlCO1FBQy9CLE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQztRQUU1RCxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRTtZQUM3RCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUMzRCxTQUFTLEVBQ1QsR0FBRyxDQUNKLENBQUM7WUFDRixJQUFJLGNBQWMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUU7Z0JBQ3JELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxjQUFjLENBQUM7Z0JBQ2hELElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO2FBQ25DO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sMEJBQTBCO1FBQ2hDLElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FDeEMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLENBQUMsRUFDaEMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLENBQUMsQ0FDakMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUU7WUFDdEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO1lBRXRELElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMzQyxPQUFPO2FBQ1I7WUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLEVBQUU7Z0JBQ3hDLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBRWhELElBQUksVUFBVSxFQUFFO29CQUNkLHVDQUF1QztvQkFDdkMsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDekMsdUJBQXVCO29CQUN2QixNQUFNLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUM5RCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsSUFBSSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7aUJBQ2hFO3FCQUFNO29CQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FDbkMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQ3RDLENBQUM7aUJBQ0g7YUFDRjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQ25DLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUNyQyxDQUFDO2FBQ0g7U0FDRjtJQUNILENBQUM7SUFFTSxtQkFBbUI7UUFDeEIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtZQUNuRSxJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDckMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ1I7SUFDSCxDQUFDO0lBRU0sVUFBVSxDQUFDLEtBQW9CO1FBQ3BDLHNDQUFzQztRQUN0QyxJQUNFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSztZQUMvQixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQ2pEO1lBQ0EsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFO1lBQ25DLElBQ0UsSUFBSSxDQUFDLHdCQUF3QjtpQkFDMUIsb0JBQW9CLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQztnQkFDdEQsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDN0M7Z0JBQ0EsSUFDRSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTTtvQkFDdEMsSUFBSSxDQUFDLHlCQUF5QjtvQkFDaEMsS0FBSyxDQUFDLE9BQU8sS0FBSyxFQUFFLEVBQ3BCO29CQUNBLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDdkIsT0FBTztpQkFDUjtnQkFDRCx5QkFBeUI7Z0JBQ3pCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFbEMsb0JBQW9CO2dCQUNwQixNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBRS9ELElBQUksQ0FBQyxlQUFlLEdBQUcsYUFBYSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFbkQsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsRUFBRTtvQkFDN0IsK0NBQStDO29CQUMvQyxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUN0RCxDQUFDLEVBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FDckIsQ0FBQztvQkFFRixJQUFJLENBQUMsV0FBVzt3QkFBRSxXQUFXLEdBQUcsR0FBRyxDQUFDO29CQUVwQyxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUN0RCxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FDekIsQ0FBQztvQkFFRixvQ0FBb0M7b0JBQ3BDLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQzFCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQzt3QkFDdkIsT0FBTztxQkFDUjtvQkFFRCwwQ0FBMEM7b0JBQzFDLFdBQVcsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFFdEMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDO29CQUVoRSwwQkFBMEI7b0JBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFVBQVU7b0JBQ25DLHNDQUFzQyxDQUFDLEtBQUssQ0FDN0MsQ0FBQztvQkFFRixJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7d0JBQ3BDLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxFQUFFLEVBQUU7NEJBQ3hCLElBQUksQ0FBQyxtQkFBbUI7Z0NBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQzs0QkFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQ3hDLGVBQWUsRUFDZixlQUFlLENBQ2hCLENBQUM7eUJBQ0g7NkJBQU07NEJBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQ3hDLGVBQWUsRUFDZixlQUFlLENBQ2hCLENBQUM7eUJBQ0g7b0JBQ0gsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNQO2dCQUVELE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFDRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELElBQ0U7WUFDRSxlQUFlLENBQUMsYUFBYTtZQUM3QixlQUFlLENBQUMsU0FBUztZQUN6QixlQUFlLENBQUMsU0FBUztZQUN6QixlQUFlLENBQUMsYUFBYTtZQUM3QixlQUFlLENBQUMsYUFBYTtTQUM5QixDQUFDLFFBQVEsQ0FBa0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsRUFDaEU7WUFDQSxJQUNFLElBQUksQ0FBQyx3QkFBd0I7aUJBQzFCLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUM7Z0JBQ3BELEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQzdDO2dCQUNBLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN2QyxPQUFPLElBQUksQ0FBQzthQUNiO1lBRUQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUNFO1lBQ0UsZUFBZSxDQUFDLEdBQUc7WUFDbkIsZUFBZSxDQUFDLEtBQUs7WUFDckIsZUFBZSxDQUFDLEtBQUs7WUFDckIsZUFBZSxDQUFDLGVBQWU7WUFDL0IsZUFBZSxDQUFDLFlBQVk7WUFDNUIsZUFBZSxDQUFDLFlBQVk7WUFDNUIsZUFBZSxDQUFDLEdBQUc7WUFDbkIsZUFBZSxDQUFDLFNBQVM7WUFDekIsZUFBZSxDQUFDLFlBQVk7WUFDNUIsZUFBZSxDQUFDLFlBQVk7WUFDNUIsZUFBZSxDQUFDLE1BQU07WUFDdEIsZUFBZSxDQUFDLEtBQUs7WUFDckIsZUFBZSxDQUFDLGNBQWM7WUFDOUIsZUFBZSxDQUFDLGVBQWU7WUFDL0IsZUFBZSxDQUFDLEtBQUs7WUFDckIsZUFBZSxDQUFDLEdBQUc7WUFDbkIsZUFBZSxDQUFDLFFBQVE7WUFDeEIsZUFBZSxDQUFDLGlCQUFpQjtZQUNqQyxlQUFlLENBQUMsZUFBZTtZQUMvQixlQUFlLENBQUMsWUFBWTtZQUM1QixlQUFlLENBQUMsZUFBZTtZQUMvQixlQUFlLENBQUMsTUFBTTtZQUN0QixlQUFlLENBQUMsa0JBQWtCO1lBQ2xDLGVBQWUsQ0FBQyxnQkFBZ0I7WUFDaEMsZUFBZSxDQUFDLGFBQWE7WUFDN0IsZUFBZSxDQUFDLGlCQUFpQjtZQUNqQyxlQUFlLENBQUMsb0JBQW9CO1lBQ3BDLGVBQWUsQ0FBQyxxQkFBcUI7WUFDckMsZUFBZSxDQUFDLGlCQUFpQjtZQUNqQyxlQUFlLENBQUMsVUFBVTtZQUMxQixlQUFlLENBQUMsaUJBQWlCO1lBQ2pDLGVBQWUsQ0FBQyw4QkFBOEI7WUFDOUMsZUFBZSxDQUFDLElBQUk7WUFDcEIsZUFBZSxDQUFDLE1BQU07WUFDdEIsZUFBZSxDQUFDLE9BQU87WUFDdkIsZUFBZSxDQUFDLE1BQU07WUFDdEIsZUFBZSxDQUFDLGtCQUFrQjtZQUNsQyxlQUFlLENBQUMsR0FBRztZQUNuQixlQUFlLENBQUMsY0FBYztZQUM5QixlQUFlLENBQUMsY0FBYztZQUM5QixlQUFlLENBQUMsU0FBUztZQUN6QixlQUFlLENBQUMsTUFBTTtZQUN0QixlQUFlLENBQUMsY0FBYztZQUM5QixlQUFlLENBQUMsY0FBYztZQUM5QixlQUFlLENBQUMsTUFBTTtZQUN0QixlQUFlLENBQUMsTUFBTTtZQUN0QixlQUFlLENBQUMsT0FBTztZQUN2QixlQUFlLENBQUMsU0FBUztZQUN6QixlQUFlLENBQUMsSUFBSTtZQUNwQixlQUFlLENBQUMscUJBQXFCO1lBQ3JDLGVBQWUsQ0FBQyxtQkFBbUI7WUFDbkMsZUFBZSxDQUFDLHNCQUFzQjtZQUN0QyxlQUFlLENBQUMsb0JBQW9CO1lBQ3BDLGVBQWUsQ0FBQyxxQkFBcUI7WUFDckMsZUFBZSxDQUFDLG1CQUFtQjtTQUNwQyxDQUFDLFFBQVEsQ0FBa0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsRUFDaEU7WUFDQSxlQUFlO1lBQ2YsSUFDRSxJQUFJLENBQUMsd0JBQXdCO2lCQUMxQixvQkFBb0IsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDO2dCQUMxQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFN0MsT0FBTyxJQUFJLENBQUM7WUFFZCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELElBQ0UsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUNiLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUNyRCxFQUNEO1lBQ0EsSUFDRSxJQUFJLENBQUMsd0JBQXdCO2lCQUMxQixvQkFBb0IsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO2dCQUM1QyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUM3QztnQkFDQSxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZDLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFDRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELElBQ0UsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUNyRCxFQUNEO1lBQ0EsSUFDRSxJQUFJLENBQUMsd0JBQXdCO2lCQUMxQixvQkFBb0IsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDO2dCQUM5QyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFN0MsT0FBTyxJQUFJLENBQUM7WUFFZCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELElBQ0UsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUNyRCxFQUNEO1lBQ0EsSUFBSSx3QkFBd0IsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtnQkFDdkUsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN2QyxPQUFPLElBQUksQ0FBQzthQUNiO2lCQUFNO2dCQUNMLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUNGO1FBRUQsSUFDRTtZQUNFLGVBQWUsQ0FBQyxZQUFZO1lBQzVCLGVBQWUsQ0FBQyxVQUFVO1lBQzFCLGVBQWUsQ0FBQyxZQUFZO1NBQzdCLENBQUMsUUFBUSxDQUFrQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUNoRTtZQUNBLElBQ0UsSUFBSSxDQUFDLHdCQUF3QjtpQkFDMUIsb0JBQW9CLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQztnQkFDbkQsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBRTdDLE9BQU8sSUFBSSxDQUFDO1lBRWQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUNFLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQ3JELEVBQ0Q7WUFDQSxJQUNFLElBQUksQ0FBQyx3QkFBd0I7aUJBQzFCLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUM7Z0JBQ2pELEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQzdDO2dCQUNBLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMvQixPQUFPLElBQUksQ0FBQzthQUNiO1lBQ0QsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUNFLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FDakIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQ3JELEVBQ0Q7WUFDQSxJQUNFLElBQUksQ0FBQyx3QkFBd0I7aUJBQzFCLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUM7Z0JBQ2hELEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQzdDO2dCQUNBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDL0IsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUNELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsSUFDRSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUNyRCxFQUNEO1lBQ0EsSUFDRSxJQUFJLENBQUMsd0JBQXdCO2lCQUMxQixvQkFBb0IsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDO2dCQUNoRCxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUM3QztnQkFDQSxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDL0IsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUNELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsSUFDRTtZQUNFLGVBQWUsQ0FBQyxVQUFVO1lBQzFCLGVBQWUsQ0FBQyxnQkFBZ0I7WUFDaEMsZUFBZSxDQUFDLElBQUk7U0FDckIsQ0FBQyxRQUFRLENBQWtCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQ2hFO1lBQ0EsSUFDRSxJQUFJLENBQUMsd0JBQXdCO2lCQUMxQixvQkFBb0IsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDO2dCQUNqRCxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFN0MsT0FBTyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUVqRSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELElBQ0UsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxRQUFRLENBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUNyRCxFQUNEO1lBQ0EsSUFDRSxJQUFJLENBQUMsd0JBQXdCO2lCQUMxQixvQkFBb0IsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLENBQUM7Z0JBQzFELEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQzdDO2dCQUNBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDL0IsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUNELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsSUFDRSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQ1osSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQ3JELEVBQ0Q7WUFDQSxJQUNFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2hELENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUMvQjtnQkFDQSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFFRCxJQUNFLElBQUksQ0FBQyx3QkFBd0I7aUJBQzFCLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7Z0JBQzNDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUU3QyxPQUFPLElBQUksQ0FBQztZQUVkLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsSUFDRSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxRQUFRLENBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUNyRCxFQUNEO1lBQ0EsSUFDRSxJQUFJLENBQUMsd0JBQXdCO2lCQUMxQixvQkFBb0IsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDO2dCQUNwRCxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUM3QztnQkFDQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFDRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELElBQ0UsQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUNuQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FDckQsRUFDRDtZQUNBLElBQ0UsSUFBSSxDQUFDLHdCQUF3QjtpQkFDMUIsb0JBQW9CLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQztnQkFDbEQsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDN0M7Z0JBQ0EsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN2QyxPQUFPLElBQUksQ0FBQzthQUNiO1lBQ0QsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUNFLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FDakIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQ3JELEVBQ0Q7WUFDQSxJQUFJLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFFakUsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUNFLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FDaEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQ3JELEVBQ0Q7WUFDQSxJQUNFLElBQUksQ0FBQyx3QkFBd0I7aUJBQzFCLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUM7Z0JBQy9DLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUU3QyxPQUFPLElBQUksQ0FBQztZQUVkLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsSUFDRSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUNyRCxFQUNEO1lBQ0EsSUFDRSxJQUFJLENBQUMsd0JBQXdCO2lCQUMxQixvQkFBb0IsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDO2dCQUMvQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUM3QztnQkFDQSxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRWxDLHVCQUF1QjtnQkFDdkIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztvQkFDNUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDOztvQkFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO2dCQUVwQyxrQkFBa0I7Z0JBQ2xCLElBQ0UsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBSTtvQkFDeEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBSSxFQUN4RDtvQkFDQSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztpQkFDekQ7Z0JBQ0QsT0FBTyxJQUFJLENBQUM7YUFDYjtpQkFBTTtnQkFDTCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7U0FDRjtRQUVELElBQ0U7WUFDRSxlQUFlLENBQUMsUUFBUTtZQUN4QixlQUFlLENBQUMsU0FBUztZQUN6QixlQUFlLENBQUMsUUFBUTtTQUN6QixDQUFDLFFBQVEsQ0FBa0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsRUFDaEU7WUFDQSxJQUNFLElBQUksQ0FBQyx3QkFBd0I7aUJBQzFCLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUM7Z0JBQy9DLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQzdDO2dCQUNBLElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDcEMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7d0JBQ3BDLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQ3pELElBQUksRUFDSixFQUFFLENBQ0gsQ0FBQzt3QkFDRixJQUNFLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUk7NEJBQ3BDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUksRUFDcEM7NEJBQ0EsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7NEJBQ3hELE9BQU8sS0FBSyxDQUFDO3lCQUNkO3dCQUNELE9BQU8sSUFBSSxDQUFDO3FCQUNiO29CQUVELE9BQU87Z0JBQ1QsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ1A7aUJBQU07Z0JBQ0wsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixPQUFPLEtBQUssQ0FBQzthQUNkO1NBQ0Y7UUFFRCxJQUNFLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUMxQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FDckQsRUFDRDtZQUNBLElBQ0UsSUFBSSxDQUFDLHdCQUF3QjtpQkFDMUIsb0JBQW9CLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQztnQkFDckQsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBRTdDLE9BQU8sSUFBSSxDQUFDO1lBRWQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUNFLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFFBQVEsQ0FDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQ3JELEVBQ0Q7WUFDQSxJQUNFLElBQUksQ0FBQyx3QkFBd0I7aUJBQzFCLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUM7Z0JBQ3JELEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQzdDO2dCQUNBLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMvQixPQUFPLElBQUksQ0FBQzthQUNiO1lBQ0QsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUNFLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLENBQUMsUUFBUSxDQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FDckQsRUFDRDtZQUNBLElBQ0UsSUFBSSxDQUFDLHdCQUF3QjtpQkFDMUIsb0JBQW9CLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDO2dCQUN4RCxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFN0MsT0FBTyxJQUFJLENBQUM7WUFFZCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELElBQ0UsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FDckQsRUFDRDtZQUNBLElBQ0UsSUFBSSxDQUFDLHdCQUF3QjtpQkFDMUIsb0JBQW9CLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQztnQkFDakQsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBRTdDLE9BQU8sSUFBSSxDQUFDO1lBRWQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUNFLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FDWCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FDckQsRUFDRDtZQUNBLElBQ0UsQ0FBQyxJQUFJLENBQUMsY0FBYztnQkFDcEIsSUFBSSxDQUFDLHdCQUF3QjtxQkFDMUIsb0JBQW9CLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQztvQkFDMUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDN0M7Z0JBQ0EsT0FBTyxDQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsR0FBRyxFQUFFO29CQUMzRCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUksQ0FDdEIsQ0FBQzthQUNIO2lCQUFNO2dCQUNMLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtvQkFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUNuQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FDcEMsQ0FBQztvQkFDRixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztpQkFDN0I7Z0JBRUQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixPQUFPLEtBQUssQ0FBQzthQUNkO1NBQ0Y7UUFFRCxJQUNFO1lBQ0UsZUFBZSxDQUFDLGlCQUFpQjtZQUNqQyxlQUFlLENBQUMsWUFBWTtTQUM3QixDQUFDLFFBQVEsQ0FBa0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsRUFDaEU7WUFDQSxJQUNFLElBQUksQ0FBQyx3QkFBd0I7aUJBQzFCLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDeEQsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBRTdDLE9BQU8sSUFBSSxDQUFDO2lCQUNUO2dCQUNILEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUNGO1FBRUQsSUFDRSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQ2xCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUNyRCxFQUNEO1lBQ0EsSUFDRSxJQUFJLENBQUMsd0JBQXdCO2lCQUMxQixvQkFBb0IsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDO2dCQUNqRCxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUM3QztnQkFDQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkMsT0FBTyxJQUFJLENBQUM7YUFDYjtpQkFBTTtnQkFDTCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7U0FDRjtRQUVELGNBQWM7UUFDZCxJQUNFO1lBQ0UsZUFBZSxDQUFDLFFBQVE7WUFDeEIsZUFBZSxDQUFDLFFBQVE7WUFDeEIsZUFBZSxDQUFDLFFBQVE7U0FDekIsQ0FBQyxRQUFRLENBQWtCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQ2hFO1lBQ0EsSUFDRSxJQUFJLENBQUMsd0JBQXdCO2lCQUMxQixvQkFBb0IsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDO2dCQUMvQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFN0MsT0FBTyxJQUFJLENBQUM7aUJBQ1Q7Z0JBQ0gsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixPQUFPLEtBQUssQ0FBQzthQUNkO1NBQ0Y7UUFFRCxJQUNFLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FDakIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQ3JELEVBQ0Q7WUFDQSxJQUNFLElBQUksQ0FBQyx3QkFBd0I7aUJBQzFCLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUM7Z0JBQ2hELEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQzdDO2dCQUNBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZDLE9BQU8sSUFBSSxDQUFDO2FBQ2I7aUJBQU07Z0JBQ0wsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixPQUFPLEtBQUssQ0FBQzthQUNkO1NBQ0Y7UUFFRCxJQUNFLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFFBQVEsQ0FDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQ3JELEVBQ0Q7WUFDQSxJQUNFLElBQUksQ0FBQyx3QkFBd0I7aUJBQzFCLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUM7Z0JBQ3RELEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUU3QyxPQUFPLElBQUksQ0FBQztpQkFDVDtnQkFDSCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7U0FDRjtRQUVELDhCQUE4QjtRQUM5QixJQUNFO1lBQ0UsZUFBZSxDQUFDLE1BQU07WUFDdEIsZUFBZSxDQUFDLE1BQU07WUFDdEIsZUFBZSxDQUFDLFlBQVk7U0FDN0IsQ0FBQyxRQUFRLENBQWtCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQ2hFO1lBQ0EsSUFDRSxJQUFJLENBQUMsd0JBQXdCO2lCQUMxQixvQkFBb0IsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDO2dCQUM3QyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFN0MsT0FBTyxJQUFJLENBQUM7aUJBQ1Q7Z0JBQ0gsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixPQUFPLEtBQUssQ0FBQzthQUNkO1NBQ0Y7UUFFRCxJQUNFLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FDakIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQ3JELEVBQ0Q7WUFDQSxJQUNFLElBQUksQ0FBQyx3QkFBd0I7aUJBQzFCLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUM7Z0JBQ2hELEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQzdDO2dCQUNBLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsT0FBTyxLQUFLLENBQUM7YUFDZDtpQkFBTTtnQkFDTCxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZDLE9BQU8sSUFBSSxDQUFDO2FBQ2I7U0FDRjtRQUVELElBQ0UsQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQ2pELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUNyRCxFQUNEO1lBQ0EsSUFDRSxJQUFJLENBQUMsd0JBQXdCO2lCQUMxQixvQkFBb0IsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDO2dCQUNwRCxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUM3QztnQkFDQSxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2xDLE9BQU8sSUFBSSxDQUFDO2FBQ2I7aUJBQU07Z0JBQ0wsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixPQUFPLEtBQUssQ0FBQzthQUNkO1NBQ0Y7UUFFRCxJQUNFLENBQUMsZUFBZSxDQUFDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FDckQsRUFDRDtZQUNBLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDeEM7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVPLGtCQUFrQixDQUFDLEtBQVU7UUFDbkMsSUFDRSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQy9DO1lBQ0EsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7U0FDNUI7UUFFRCxJQUNFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDakQ7WUFDQSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLDBCQUEwQixDQUFDLEtBQVU7UUFDM0MsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFpQyxDQUFDO1FBRWxFLHNCQUFzQjtRQUN0QixNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsY0FBd0IsQ0FBQztRQUU3RCx5REFBeUQ7UUFDekQsSUFDRSxjQUFjLEdBQUcsQ0FBQztZQUNsQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDbEQsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsRUFDOUM7WUFDQSxPQUFPO1NBQ1I7UUFFRCxvR0FBb0c7UUFDcEcsSUFDRSxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUc7WUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUNqRDtZQUNBLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN4QjtRQUVELG9EQUFvRDtRQUNwRCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsY0FBYyxDQUFDO0lBQ2hELENBQUM7SUFFTywwQkFBMEIsQ0FBQyxLQUFvQjtRQUNyRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtZQUN0RCxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztZQUNuQyxJQUFJLElBQUksQ0FBQywyQkFBMkIsR0FBRyxDQUFDLEVBQUU7Z0JBQ3hDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsMkJBQTJCLEdBQUcsQ0FBQyxDQUFDO1NBQ3RDO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQixDQUFDLEtBQW9CO1FBQ2hELElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFO1lBQ3RELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7Z0JBQ3JDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsT0FBTyxLQUFLLENBQUM7YUFDZDtZQUVELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDOUQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixPQUFPLEtBQUssQ0FBQzthQUNkO1lBRUQsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLElBQUksSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEVBQUU7Z0JBQzNCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFDRCxjQUFjO0lBRVAsVUFBVSxDQUFDLEtBQVksRUFBRSxJQUFZLEVBQUUsTUFBYztRQUMxRCxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXZCLFFBQVEsSUFBSSxFQUFFO1lBQ1osS0FBSyxpQkFBaUIsQ0FBQyxzQkFBc0I7Z0JBQzNDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDeEMsTUFBTTtZQUNSLEtBQUssaUJBQWlCLENBQUMsY0FBYztnQkFDbkMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNqQyxNQUFNO1lBQ1IsS0FBSyxpQkFBaUIsQ0FBQyxNQUFNO2dCQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMxQixNQUFNO1lBQ1I7Z0JBQ0UsTUFBTTtTQUNUO0lBQ0gsQ0FBQztJQUVPLDBCQUEwQixDQUFDLE1BQWM7UUFDL0MsTUFBTSxLQUFLLEdBQUcseUJBQXlCLENBQUMseUJBQXlCLENBQy9ELElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FDakMsQ0FBQztRQUVGLFFBQVEsTUFBTSxFQUFFO1lBQ2QsS0FBSyxtQkFBbUIsQ0FBQyxTQUFTO2dCQUNoQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzdCLE1BQU07WUFDUixLQUFLLG1CQUFtQixDQUFDLFNBQVM7Z0JBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDN0IsTUFBTTtZQUNSLEtBQUssbUJBQW1CLENBQUMsS0FBSztnQkFDNUIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUNwQixNQUFNO1lBQ1I7Z0JBQ0UsTUFBTTtTQUNUO1FBRUQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEtBQWE7UUFDcEMsSUFBSSxLQUFLLElBQUksS0FBSyxJQUFJLEtBQUssR0FBRyxLQUFLLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUNuQyx5QkFBeUIsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQ25FLENBQUM7U0FDSDthQUFNLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxLQUFLLEdBQUcsS0FBSyxFQUFFO1lBQzFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FDbkMseUJBQXlCLENBQUMsMEJBQTBCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUNuRSxDQUFDO1NBQ0g7YUFBTSxJQUFJLEtBQUssSUFBSSxLQUFLLElBQUksS0FBSyxHQUFHLE1BQU0sRUFBRTtZQUMzQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQ25DLHlCQUF5QixDQUFDLDBCQUEwQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FDbkUsQ0FBQztTQUNIO2FBQU0sSUFBSSxLQUFLLElBQUksS0FBSyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FDbkMseUJBQXlCLENBQUMsMEJBQTBCLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUNwRSxDQUFDO1NBQ0g7YUFBTSxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7WUFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUNuQyx5QkFBeUIsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQ2xFLENBQUM7U0FDSDtJQUNILENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxLQUFhO1FBQ3BDLElBQUksS0FBSyxHQUFHLEtBQUssSUFBSSxLQUFLLEdBQUcsS0FBSyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FDbkMseUJBQXlCLENBQUMsMEJBQTBCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUNuRSxDQUFDO1NBQ0g7YUFBTSxJQUFJLEtBQUssSUFBSSxLQUFLLElBQUksS0FBSyxHQUFHLEtBQUssRUFBRTtZQUMxQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQ25DLHlCQUF5QixDQUFDLDBCQUEwQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FDbkUsQ0FBQztTQUNIO2FBQU0sSUFBSSxLQUFLLElBQUksS0FBSyxJQUFJLEtBQUssR0FBRyxNQUFNLEVBQUU7WUFDM0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUNuQyx5QkFBeUIsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQ25FLENBQUM7U0FDSDthQUFNLElBQUksS0FBSyxJQUFJLEtBQUssRUFBRTtZQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQ25DLHlCQUF5QixDQUFDLDBCQUEwQixDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FDcEUsQ0FBQztTQUNIO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQ25DLHlCQUF5QixDQUFDLDBCQUEwQixDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FDbEUsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVPLFlBQVk7UUFDbEIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLFlBQVksRUFBRTtZQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztTQUN2RTtJQUNILENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxNQUFjO1FBQ3hDLFFBQVEsTUFBTSxFQUFFO1lBQ2QsS0FBSyxtQkFBbUIsQ0FBQyxPQUFPO2dCQUM5QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3RCLE1BQU07WUFDUixLQUFLLG1CQUFtQixDQUFDLE1BQU07Z0JBQzdCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDckIsTUFBTTtZQUNSO2dCQUNFLE1BQU07U0FDVDtRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUMxQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUNwQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTyxjQUFjO1FBQ3BCLElBQUksQ0FBQyxlQUFlLENBQUM7WUFDbkIsSUFBSSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUs7WUFDdEMsTUFBTSxFQUFFLG1CQUFtQixDQUFDLE9BQU87WUFDbkMsSUFBSSxFQUNGLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0I7Z0JBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLDBCQUEwQjtnQkFDbEQsQ0FBQyxDQUFDLE1BQU07Z0JBQ1IsQ0FBQyxDQUFDLEtBQUs7U0FDWixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sYUFBYTtRQUNuQixJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVPLFlBQVksQ0FBQyxNQUFjO1FBQ2pDLFlBQVksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUV4QyxRQUFRLE1BQU0sRUFBRTtZQUNkLEtBQUssbUJBQW1CLENBQUMsS0FBSztnQkFDNUIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN0QixNQUFNO1lBQ1IsS0FBSyxtQkFBbUIsQ0FBQyxJQUFJO2dCQUMzQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3RCLE1BQU07WUFDUjtnQkFDRSxNQUFNO1NBQ1Q7UUFFRCxJQUNFLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDO1lBQzlDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQy9DO1lBQ0EsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7U0FDekQ7YUFBTTtZQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM1QztRQUVELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFTyxjQUFjO1FBQ3BCLElBQ0UsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDaEQsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQ2pDO1lBQ0EsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FDbkMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLO1lBQy9CLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO1lBQzVDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQ1gsQ0FBQztJQUNKLENBQUM7SUFFTyxjQUFjO1FBQ3BCLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNyRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUNuQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUs7WUFDL0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7WUFDNUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDWCxDQUFDO0lBQ0osQ0FBQztJQUVNLE9BQU8sQ0FBQyxLQUFrQjtRQUMvQixpQkFBaUI7UUFDakIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRTtZQUNsQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsR0FBRyxjQUFjLENBQUMsb0JBQW9CLENBQUM7U0FDeEU7UUFFRCxhQUFhO1FBQ2IsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFO1lBQzNELFlBQVksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUNyQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QixJQUNFLENBQUMsSUFBSSxDQUFDLGNBQWMsS0FBSyxDQUFDLENBQUM7Z0JBQ3hCLEtBQUssRUFBRSxNQUFzQixFQUFFLFFBQVEsS0FBSyxPQUFPLENBQUM7Z0JBQ3RELEtBQUssRUFBRSxhQUE2QixFQUFFLFFBQVEsS0FBSyxPQUFPO2dCQUMzRCxLQUFLLEVBQUUsYUFBYSxLQUFLLElBQUksRUFDN0I7Z0JBQ0EsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUMxQjtZQUVELElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDbEI7UUFFRCxXQUFXO1FBQ1gsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRTtZQUMvQixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMvRDtRQUVELFdBQVc7UUFDWCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUU7WUFDN0QsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssaUJBQWlCLENBQUMsTUFBTSxFQUFFO2dCQUMvRCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTO29CQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDcEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztnQkFDeEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2pDO1lBRUQsSUFDRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJO2dCQUM5QixpQkFBaUIsQ0FBQyxzQkFBc0IsRUFDeEM7Z0JBQ0EsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUNwQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUN4QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDakM7U0FDRjtRQUVELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFrQjtRQUM5QixpQkFBaUI7UUFFakIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLO1lBQ2xFLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxHQUFHLGNBQWMsQ0FBQyxlQUFlLENBQUM7UUFFcEUsYUFBYTtRQUNiLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRTtZQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN4RCxPQUFPO1NBQ1I7UUFFRCxjQUFjO1FBQ2QsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLE9BQU87U0FDUjtRQUVELE9BQU87UUFDUCxJQUNFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSTtZQUNyQix5QkFBeUIsQ0FBQyx3QkFBd0I7WUFFbEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBRXRDLDRDQUE0QztRQUM1QyxJQUNFLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYztZQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLO1lBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUNuRDtZQUNBLDhCQUE4QjtZQUM5QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFckUsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FDcEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSztpQkFDN0IsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDO2lCQUM5QixLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsd0JBQXdCLENBQUMsQ0FDdkQsQ0FBQztZQUVGLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQ3RELElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUN6QixDQUFDO1lBRUYsNENBQTRDO1lBQzVDLFdBQVcsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUV0QyxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNoQixJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO2FBQ3pCO1NBQ0Y7UUFFRCxpQkFBaUI7UUFDakIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRTtZQUM3QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkI7UUFFRCxXQUFXO1FBQ1gsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRTtZQUNqRSxJQUNFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUsseUJBQXlCLENBQUMsV0FBVztnQkFDOUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUsseUJBQXlCLENBQUMsV0FBVztnQkFDL0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJO29CQUNuQix5QkFBeUIsQ0FBQyxxQkFBcUIsQ0FBQztnQkFDcEQsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFDNUI7Z0JBQ0EsSUFBSyxLQUFLLEVBQUUsTUFBc0IsRUFBRSxRQUFRLEtBQUssT0FBTyxFQUFFO29CQUN4RCxPQUFPO2lCQUNSO2dCQUNELGFBQWE7Z0JBQ2IsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRTtvQkFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO3dCQUMvQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3hCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztpQkFDVDtxQkFBTTtvQkFDTCxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUM3QjthQUNGO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2FBQzVCO1NBQ0Y7UUFDRCwyQkFBMkI7YUFDdEI7WUFDSCxJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEMsU0FBUyxFQUFFLGVBQWUsRUFBRSxDQUFDO1lBRTdCLGlCQUFpQjtZQUNqQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUTtnQkFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFFckQsV0FBVztZQUNYLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssVUFBVTtnQkFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDaEUsbUJBQW1COztnQkFDZCxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2xDO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDMUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFTLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUMxQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDN0IsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDcEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFNUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRU0sY0FBYztRQUNuQixJQUFJLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDckMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzdCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFTSxzQkFBc0IsQ0FBQyxLQUFVLEVBQUUsT0FBZSxHQUFHO1FBQzFELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUM7UUFDeEMsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUU7WUFDM0IsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztTQUNyRDtRQUNELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVNLFdBQVcsQ0FBQyxLQUFZO1FBQzdCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFeEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTO1lBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3BFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDekMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFM0IsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFFekQsSUFBSSxDQUFDLGVBQWUsQ0FBQztZQUNuQixJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSztZQUN0QyxNQUFNLEVBQUUsWUFBWTtTQUNyQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sYUFBYSxDQUNsQixPQUFtQixFQUNuQixPQUFtQixFQUNuQixTQUFxQixFQUNyQixPQUFtQjtRQUVuQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN6QixDQUFDO0lBRU0sb0JBQW9CLENBQ3pCLEVBQWMsRUFDZCxjQUEwQjtRQUUxQixJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO0lBQ3ZDLENBQUM7SUFFTSxxQkFBcUI7UUFDMUIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRTtZQUMvQixPQUFPO1NBQ1I7UUFFRCxJQUNFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLHlCQUF5QixDQUFDLFdBQVc7WUFDL0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUsseUJBQXlCLENBQUMsV0FBVztZQUMvRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyx5QkFBeUIsQ0FBQyxxQkFBcUI7WUFFekUsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFO2dCQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFO29CQUNyQixZQUFZLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7b0JBQ3JDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNuQyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDbEQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQkFDaEI7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ2xDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzVCLElBQUksU0FBUyxHQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDdEMsU0FBUyxFQUFFLGVBQWUsRUFBRSxDQUFDO2lCQUM5QjtnQkFDRCxPQUFPO2FBQ1I7UUFFSCxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFaEUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU5RCxJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLEVBQUU7WUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM1QjtJQUNILENBQUM7SUFFTSxzQkFBc0IsQ0FBQyxLQUFZO1FBQ3hDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUM7Z0JBQ25CLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLO2dCQUN0QyxNQUFNLEVBQUUsaUJBQWlCO2FBQzFCLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxJQUFJLENBQUMsZUFBZSxDQUFDO2dCQUNuQixJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSztnQkFDdEMsTUFBTSxFQUFFLHdCQUF3QjthQUNqQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFTSxtQkFBbUI7UUFDeEIsa0JBQWtCO1FBQ2xCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUU7WUFDbkMsSUFBSSxDQUFDLHlCQUF5QjtnQkFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsQ0FBQztTQUM3QztRQUVELGVBQWU7UUFDZixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsd0JBQXdCLEVBQUU7WUFDN0MsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLDZCQUE2QjtnQkFDaEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7Z0JBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbEM7UUFFRCxhQUFhO1FBQ2IsSUFDRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyx5QkFBeUIsQ0FBQyxXQUFXO1lBQy9ELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLHlCQUF5QixDQUFDLFdBQVc7WUFDL0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUsseUJBQXlCLENBQUMscUJBQXFCLEVBQ3pFO1lBQ0EsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXO2lCQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDOUIsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRTtvQkFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO29CQUM1QixJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO2lCQUNqQjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ047UUFFRCw0QkFBNEI7UUFDNUIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRTtZQUNyRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsRUFBRTtnQkFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUztvQkFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0JBQ3BFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDbEM7U0FDRjtJQUNILENBQUM7SUFFTSxTQUFTLENBQUMsS0FBb0I7UUFDbkMsSUFBSSxLQUFLO1lBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBRXZFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUU7WUFDbkMsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRS9ELElBQUksQ0FBQyxZQUFZLEdBQUcsYUFBYSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNsRDtRQUVELGtEQUFrRDtRQUNsRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLGVBQWUsQ0FBQyxLQUFLLEVBQUU7WUFDakUsSUFDRyxLQUFLLENBQUMsTUFBMkIsQ0FBQyxjQUFjLEtBQUssQ0FBQztnQkFDdkQsS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLEVBQ2pCO2dCQUNBLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUN4QjtTQUNGO1FBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLENBQUMsRUFBRTtZQUN2QixJQUFJLENBQUMsd0JBQXdCLENBQUM7Z0JBQzVCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztnQkFDdEIsSUFBSSxFQUFFLElBQUk7YUFDWCxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFTSxPQUFPLENBQUMsS0FBb0I7UUFDakMsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7U0FDN0Q7UUFDRCxzREFBc0Q7UUFDdEQsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRS9ELElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDO1lBQ3BELElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1FBRTFCLElBQ0UsS0FBSyxDQUFDLE9BQU8sSUFBSSxDQUFDO1lBQ2xCLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxFQUNoRTtZQUNBLHNDQUFzQztZQUN0QyxJQUFJLENBQUMsMkJBQTJCLEdBQUcsQ0FBQyxDQUFDO1lBRXJDLHVCQUF1QjtZQUN2QixJQUNFLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUs7Z0JBQ2hDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFDaEQ7Z0JBQ0EsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQzthQUM5QjtTQUNGO1FBRUQsSUFDRSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVU7WUFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhO1lBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLHlCQUF5QixDQUFDLE9BQU8sRUFDM0Q7WUFDQSxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssRUFBRSxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssRUFBRSxFQUFFO2dCQUNoRCxJQUFJLENBQUMsd0JBQXdCLENBQUM7b0JBQzVCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztvQkFDdEIsSUFBSSxFQUFFLElBQUk7aUJBQ1gsQ0FBQyxDQUFDO2FBQ0o7WUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssRUFBRSxFQUFFO2dCQUN4QixJQUFJLENBQUMsd0JBQXdCLENBQUM7b0JBQzVCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztvQkFDdEIsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXO2lCQUN2QixDQUFDLENBQUM7Z0JBRUgsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyx5QkFBeUIsQ0FBQyxPQUFPLEVBQUU7b0JBQy9ELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO2lCQUNqQzthQUNGO1lBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLEVBQUUsRUFBRTtnQkFDeEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2QsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsd0JBQXdCLENBQUM7b0JBQzVCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztvQkFDdEIsSUFBSSxFQUFFLElBQUk7aUJBQ1gsQ0FBQyxDQUFDO2FBQ0o7WUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssQ0FBQyxFQUFFO2dCQUN2QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztvQkFDNUIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO29CQUN0QixJQUFJLEVBQUUsSUFBSTtpQkFDWCxDQUFDLENBQUM7YUFDSjtTQUNGO0lBQ0gsQ0FBQztJQUVELGtHQUFrRztJQUUzRixpQkFBaUI7UUFDdEIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyx5QkFBeUIsQ0FBQyxXQUFXO1lBQ2pFLElBQUksQ0FBQyxvQkFBb0IsQ0FDdkIsSUFBSSxJQUFJLENBQ04sTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztnQkFDM0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FDdkQsQ0FDRixDQUFDO0lBQ04sQ0FBQztJQUVNLGdCQUFnQixDQUFDLElBQXNCO1FBQzVDLElBQUksSUFBSSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUM7UUFDakMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyx5QkFBeUIsQ0FBQyxXQUFXLEVBQUU7WUFDbkUsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNqRCxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM5QjthQUFNLElBQ0wsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUsseUJBQXlCLENBQUMscUJBQXFCLEVBQ3pFO1lBQ0EsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNqRCxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM5QjthQUFNO1lBQ0wsSUFBSTtnQkFDRixJQUFJLFlBQVksSUFBSTtvQkFDbEIsQ0FBQyxDQUFDLElBQUk7b0JBQ04sQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDM0QsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUU5QyxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3RELFVBQVUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3BDO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUN0QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFNUIsSUFBSSxJQUFJLENBQUMsT0FBTztZQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdkUsSUFBSSxJQUFJLENBQUMsT0FBTztZQUNkLElBQ0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJO2dCQUNyQix5QkFBeUIsQ0FBQyxxQkFBcUIsRUFDL0M7Z0JBQ0EsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN4RDtpQkFBTTtnQkFDTCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3REO1FBRUgsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTSxtQkFBbUI7UUFDeEIsSUFBSSxJQUFJLENBQUMsT0FBTztZQUNkLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUsseUJBQXlCLENBQUMsV0FBVyxFQUFFO2dCQUNuRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUM1QyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUM1QyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2FBQy9DO2lCQUFNLElBQ0wsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJO2dCQUNyQix5QkFBeUIsQ0FBQyxxQkFBcUIsRUFDL0M7Z0JBQ0EsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztnQkFDNUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQzthQUM3QztpQkFBTSxJQUNMLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLHlCQUF5QixDQUFDLFdBQVcsRUFDL0Q7Z0JBQ0EsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztnQkFDNUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztnQkFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQzthQUMvQztRQUVILElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTSxlQUFlLENBQUMsS0FBWTtRQUNqQyxJQUFJLEtBQUs7WUFBRSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztJQUN4QyxDQUFDO0lBRU0sV0FBVyxDQUFDLEtBQXFCO1FBQ3RDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV2QixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQVcsQ0FBQztRQUNqRSxNQUFNLFVBQVUsR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQ2hEO0lBQ0gsQ0FBQztJQUVNLFlBQVksQ0FBQyxLQUluQjtRQUNDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUzQixNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBRWxFLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRS9DLElBQUksZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRTtZQUMvRCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztZQUN4QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNsRCxZQUFZLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDckMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM3QixPQUFPO1NBQ1I7UUFFRCxZQUFZLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDckMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN0QyxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztZQUNyQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDaEM7YUFBTTtZQUNMLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO2dCQUN4QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNuRDtpQkFBTTtnQkFDTCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7YUFDaEQ7U0FDRjtJQUNILENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxPQUFhO1FBQ25DLElBQUksS0FBWSxDQUFDO1FBQ2pCLElBQUksU0FBMkIsQ0FBQztRQUVoQyxJQUFJLE1BQU0sQ0FBQyxZQUFZLElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRTtZQUMvQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2xDLEtBQUssR0FBRyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDL0IsS0FBSyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xDLFNBQVMsRUFBRSxlQUFlLEVBQUUsQ0FBQztZQUM3QixTQUFTLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzVCO0lBQ0gsQ0FBQztJQUVNLHVCQUF1QjtRQUM1QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRXpCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTSxlQUFlLENBQUMsS0FBb0IsRUFBRSxnQkFBZ0IsR0FBRyxLQUFLO1FBQ25FLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUNyQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3pCO1FBRUQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRCxNQUFNLHNCQUFzQixHQUMxQixJQUFJLENBQUMsY0FBYyxLQUFLLENBQUM7WUFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUsseUJBQXlCLENBQUMsV0FBVyxDQUFDO1FBRWxFLElBQUksZUFBZSxJQUFJLHNCQUFzQixFQUFFO1lBQzdDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDakM7YUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNoQyxJQUFJLENBQUMsZ0JBQWdCO2dCQUFFLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztpQkFDekM7Z0JBQ0gsSUFBSSxDQUFDLGdCQUFnQjtvQkFBRSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBRTlDLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxDQUFDLENBQUM7b0JBQUUsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7Z0JBRXhELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNsQztTQUNGO0lBQ0gsQ0FBQztJQUVPLGVBQWUsQ0FBQyxDQUFnQjtRQUN0QyxNQUFNLGNBQWMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMscUNBQXFDO1FBQ3hGLE9BQU8sY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVPLG1CQUFtQixDQUFDLEtBQW9CO1FBQzlDLFFBQVEsS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUNyQixLQUFLLEVBQUUsRUFBRSxhQUFhO2dCQUNwQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDekIsTUFBTTtZQUNSLEtBQUssRUFBRSxDQUFDLENBQUMsY0FBYztZQUN2QixLQUFLLENBQUMsRUFBRSxNQUFNO2dCQUNaLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDcEMsTUFBTTtZQUNSLEtBQUssRUFBRSxFQUFFLFdBQVc7Z0JBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDNUIsTUFBTTtZQUNSLEtBQUssRUFBRSxFQUFFLGFBQWE7Z0JBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDOUIsTUFBTTtZQUNSLEtBQUssQ0FBQyxDQUFDLENBQUMsWUFBWTtZQUNwQixLQUFLLEVBQUUsRUFBRSxTQUFTO2dCQUNoQixJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN2QyxNQUFNO1NBQ1Q7SUFDSCxDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLElBQUksSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEVBQUU7WUFDM0IsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDdEQ7SUFDSCxDQUFDO0lBRU8sdUJBQXVCLENBQUMsQ0FBZ0I7UUFDOUMsTUFBTSxvQkFBb0IsR0FDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUsseUJBQXlCLENBQUMscUJBQXFCLENBQUM7UUFDNUUsTUFBTSxRQUFRLEdBQUcsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTlDLElBQUksSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO1lBQ2pELElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3REO2FBQU0sSUFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7WUFDekMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZCO2FBQU0sSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssQ0FBQyxFQUFFO1lBQ3hDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1NBQzNCO0lBQ0gsQ0FBQztJQUVPLGNBQWM7UUFDcEIsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FDMUIsUUFBUSxDQUFDLGdCQUFnQixDQUFDLHFCQUFxQixDQUFDLENBQzNCLENBQUM7UUFDeEIsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FDdEMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FDOUMsQ0FBQztRQUVGLElBQUksU0FBUyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7WUFBRSxTQUFTLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ2hFO1lBQ0gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkI7UUFFRCxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FDMUIsUUFBUSxDQUFDLGdCQUFnQixDQUFDLHFCQUFxQixDQUFDLENBQzNCLENBQUM7UUFDeEIsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FDdEMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FDOUMsQ0FBQztRQUVGLElBQUksWUFBWSxLQUFLLENBQUMsQ0FBQztZQUFFLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO2FBQzVDLElBQUksWUFBWSxLQUFLLENBQUM7WUFBRSxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQzthQUNoRDtZQUNILElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDaEQ7UUFFRCxJQUFJLFlBQVksR0FBRyxDQUFDO1lBQUUsU0FBUyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUUxRCxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFTSxvQkFBb0IsQ0FBQyxDQUFnQixFQUFFLFNBQW1CO1FBQy9ELE1BQU0sWUFBWSxHQUNoQixLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWU7WUFDakUsQ0FBQyxDQUFDLFNBQVM7WUFDWCxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sWUFBWSxHQUNoQixLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWU7WUFDakUsQ0FBQyxDQUFDLFNBQVM7WUFDWCxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXJELElBQUksY0FBMkMsQ0FBQztRQUVoRCxJQUNFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLHlCQUF5QixDQUFDLHFCQUFxQixFQUN6RTtZQUNBLGNBQWM7Z0JBQ1osS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxlQUFlO29CQUNuRSxDQUFDLENBQUMsRUFBRTtvQkFDSixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3hEO1FBRUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDN0IsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyx5QkFBeUIsQ0FBQyxXQUFXLEVBQUU7WUFDbkUsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLENBQUMsRUFBRTtnQkFDN0IsSUFBSSxTQUFTLEVBQUU7b0JBQ2IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztvQkFDNUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDOUI7cUJBQU0sSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFO29CQUNyQyxJQUFJLFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7b0JBQ3RELElBQUksV0FBVyxHQUFHLEVBQUUsRUFBRTt3QkFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLENBQ3JDLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUN0QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNaLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO3dCQUN4QixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO3FCQUNwQzt5QkFBTTt3QkFDTCxJQUFJLENBQUMsb0JBQW9CLENBQ3ZCLElBQUksSUFBSSxDQUNOLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUMxQyxRQUFRLENBQ04sSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQ3ZELEdBQUcsQ0FBQyxDQUNOLENBQ0YsQ0FDRixDQUFDO3dCQUVGLElBQUksQ0FBQyxXQUFXOzRCQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7OzRCQUU1RCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsQ0FDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQ3ZELENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBRWQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7d0JBQ3hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7cUJBQ3BDO2lCQUNGO3FCQUFNO29CQUNMLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7d0JBQ2pCLElBQUksQ0FBQyxvQkFBb0IsQ0FDdkIsSUFBSSxJQUFJLENBQ04sSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQzFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUNwQixDQUNGLENBQ0YsQ0FBQztvQkFFSixNQUFNLFdBQVcsR0FBRyxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBRXRELElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUM7b0JBRW5ELElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO3dCQUM5QixJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQzt3QkFDeEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztxQkFDcEM7O3dCQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDckM7YUFDRjtpQkFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssQ0FBQyxFQUFFO2dCQUNwQyxJQUFJLFNBQVMsRUFBRTtvQkFDYixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO29CQUM1QyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDcEM7cUJBQU0sSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFO29CQUNyQyxJQUFJLFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7b0JBQ3RELElBQUksV0FBVyxHQUFHLEVBQUUsRUFBRTt3QkFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLENBQ3JDLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUN0QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNaLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO3dCQUN4QixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO3FCQUNwQzt5QkFBTTt3QkFDTCxJQUFJLENBQUMsb0JBQW9CLENBQ3ZCLElBQUksSUFBSSxDQUNOLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUN6QyxRQUFRLENBQ04sSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQ3ZELENBQ0YsQ0FDRixDQUNGLENBQUM7d0JBRUYsSUFBSSxDQUFDLFdBQVcsRUFBRTs0QkFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQzt5QkFDN0M7NkJBQU07NEJBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLENBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUN2RCxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3lCQUNiO3dCQUVELElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO3dCQUN4QixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO3FCQUNwQztpQkFDRjtxQkFBTTtvQkFDTCxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO3dCQUNqQixJQUFJLENBQUMsb0JBQW9CLENBQ3ZCLElBQUksSUFBSSxDQUNOLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDN0QsQ0FDRixDQUFDO29CQUVKLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUNsRSxDQUFDLENBQUMsQ0FDSCxDQUFDO29CQUVGLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO3dCQUM5QixJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQzt3QkFDeEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztxQkFDcEM7eUJBQU07d0JBQ0wsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUM5QjtpQkFDRjthQUNGO2lCQUFNO2dCQUNMLElBQUksU0FBUyxFQUFFO29CQUNiLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7b0JBQzlDLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO29CQUN4QixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUNwQztxQkFBTSxJQUFJLENBQUMsY0FBYyxJQUFJLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO29CQUNwRSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsQ0FDdkMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQ3RCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ1osSUFBSSxDQUFDLG9CQUFvQixDQUN2QixJQUFJLElBQUksQ0FDTixJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FDN0MsUUFBUSxDQUFDLE1BQU0sUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQ2xDLENBQ0YsQ0FDRixDQUFDO29CQUVGLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDOUI7cUJBQU07b0JBQ0wsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDekQsQ0FBQztvQkFFRixNQUFNLGFBQWEsR0FDakIsU0FBUyxHQUFHLEVBQUU7d0JBQ1osQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO3dCQUM1QixDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUMsQ0FBQztvQkFDakMsSUFBSSxDQUFDLG9CQUFvQixDQUN2QixJQUFJLElBQUksQ0FDTixJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FDL0QsQ0FDRixDQUFDO29CQUVGLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxDQUN2QyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDekQsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDWixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzlCO2FBQ0Y7U0FDRjthQUFNLElBQ0wsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUsseUJBQXlCLENBQUMscUJBQXFCLEVBQ3pFO1lBQ0EsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQ3hCLElBQUksU0FBUyxFQUFFO29CQUNiLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7b0JBQzVDLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO29CQUN4QixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzlCO3FCQUFNLElBQUksWUFBWSxFQUFFO29CQUN2QixNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7b0JBQ3hELElBQUksV0FBVyxHQUFHLEVBQUUsRUFBRTt3QkFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLENBQ3JDLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUN0QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNaLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO3dCQUN4QixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO3FCQUNwQzt5QkFBTTt3QkFDTCxJQUFJLENBQUMsb0JBQW9CLENBQ3ZCLElBQUksSUFBSSxDQUNOLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUMxQyxRQUFRLENBQ04sSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQ3ZELEdBQUcsQ0FBQyxDQUNOLENBQ0YsQ0FDRixDQUFDO3dCQUVGLElBQUksQ0FBQyxXQUFXLEVBQUU7NEJBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7eUJBQzdDOzZCQUFNOzRCQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxDQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDdkQsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt5QkFDYjt3QkFFRCxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQzt3QkFDeEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztxQkFDcEM7aUJBQ0Y7cUJBQU07b0JBQ0wsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQzt3QkFDakIsSUFBSSxDQUFDLG9CQUFvQixDQUN2QixJQUFJLElBQUksQ0FDTixJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FDMUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQ3BCLENBQ0YsQ0FDRixDQUFDO29CQUVKLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFFdEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQztvQkFFbkQsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7d0JBQzlCLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO3dCQUN4QixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO3FCQUNwQzs7d0JBQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNyQzthQUNGO2lCQUFNO2dCQUNMLElBQUksU0FBUyxFQUFFO29CQUNiLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7b0JBQzVDLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO29CQUN4QixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUNwQztxQkFBTSxJQUFJLENBQUMsWUFBWSxJQUFJLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO29CQUNoRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FDbEUsQ0FBQyxDQUFDLENBQ0gsQ0FBQztvQkFDRixJQUFJLENBQUMsb0JBQW9CLENBQ3ZCLElBQUksSUFBSSxDQUNOLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUM3QyxRQUFRLENBQUMsTUFBTSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FDbEMsQ0FDRixDQUNGLENBQUM7b0JBRUYsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUM5QjtxQkFBTTtvQkFDTCxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUN2RCxDQUFDO29CQUVGLE1BQU0sYUFBYSxHQUNqQixTQUFTLEdBQUcsRUFBRTt3QkFDWixDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7d0JBQzVCLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQyxDQUFDO29CQUNqQyxJQUFJLENBQUMsb0JBQW9CLENBQ3ZCLElBQUksSUFBSSxDQUNOLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUMvRCxDQUNGLENBQUM7b0JBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLENBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUN2RCxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNaLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDOUI7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVELG9CQUFvQixDQUFDLElBQVksRUFBRSxTQUFtQjtRQUNwRCxRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssQ0FBQztnQkFDSixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDbEQsTUFBTTtZQUNSLEtBQUssQ0FBQztnQkFDSixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDbEQsTUFBTTtZQUNSLEtBQUssQ0FBQztnQkFDSixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDcEQsTUFBTTtZQUNSO2dCQUNFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3JEO1FBRUQsSUFBSSxTQUFTO1lBQUUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7SUFDN0MsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFNBQWlCO1FBQ3hDLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxDQUFDLENBQUM7WUFBRSxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztRQUV4RCxNQUFNLElBQUksR0FBRyxTQUFTLEtBQUssSUFBSSxDQUFDO1FBQ2hDLE1BQU0sWUFBWSxHQUNoQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyx5QkFBeUIsQ0FBQyxXQUFXLENBQUM7UUFDbEUsTUFBTSxnQkFBZ0IsR0FDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUsseUJBQXlCLENBQUMscUJBQXFCLENBQUM7UUFFNUUsSUFBSSxZQUFZLElBQUksZ0JBQWdCO1lBQ2xDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7O1lBQzVDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRU8scUJBQXFCLENBQUMsSUFBYSxFQUFFLFlBQXFCO1FBQ2hFLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxDQUFDO1lBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNqRCxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssQ0FBQztZQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDOztZQUNuRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRU8scUJBQXFCLENBQUMsSUFBYTtRQUN6QyxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssQ0FBQztZQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDakQsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLENBQUM7WUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDOztZQUN4RCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxJQUFhO1FBQy9CLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsb0JBQW9CLENBQ3ZCLElBQUksSUFBSSxDQUNOLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUMxQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxHQUFHLFVBQVUsQ0FDNUQsQ0FDRixDQUNGLENBQUM7UUFFRixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FDbEQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQ25ELENBQUM7UUFDRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU8sVUFBVSxDQUFDLElBQWEsRUFBRSxZQUFxQjtRQUNyRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLG9CQUFvQixDQUN2QixJQUFJLElBQUksQ0FDTixJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDekMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxTQUFTLENBQzFELENBQ0YsQ0FDRixDQUFDO1FBRUYsTUFBTSxXQUFXLEdBQUcsWUFBWTtZQUM5QixDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhO1lBQzVCLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQztRQUMvQixXQUFXLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQ25DLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQzlDLENBQUM7UUFDRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVPLFVBQVUsQ0FBQyxJQUFhLEVBQUUsWUFBcUI7UUFDckQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxvQkFBb0IsQ0FDdkIsSUFBSSxJQUFJLENBQ04sSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQzdDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEdBQUcsU0FBUyxDQUM5RCxDQUNGLENBQ0YsQ0FBQztRQUVGLE1BQU0sV0FBVyxHQUFHLFlBQVk7WUFDOUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYTtZQUM5QixDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFDL0IsV0FBVyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSzthQUN4RCxXQUFXLEVBQUU7YUFDYixRQUFRLEVBQUU7YUFDVixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNiLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRU8sV0FBVyxDQUFDLElBQWE7UUFDL0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLElBQUksYUFBYSxHQUNmLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsVUFBVSxDQUFDO1FBRTlELElBQUksYUFBYSxLQUFLLENBQUM7WUFBRSxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQzVDLElBQUksYUFBYSxLQUFLLENBQUMsQ0FBQztZQUFFLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFFN0MsSUFBSSxDQUFDLG9CQUFvQixDQUN2QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUN0RSxDQUFDO1FBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQ2xELGFBQWEsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FDeEQsQ0FBQztRQUNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRWxELElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFNBQVM7WUFDcEMsYUFBYSxHQUFHLEVBQUUsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMzRCxDQUFDO0lBRU8sYUFBYSxDQUFDLElBQWE7UUFDakMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxvQkFBb0IsQ0FDdkIsSUFBSSxJQUFJLENBQ04sSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxVQUFVLENBQzVDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEdBQUcsWUFBWSxDQUNoRSxDQUNGLENBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUNsRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUNqRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVPLFVBQVU7UUFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsU0FBUztZQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUVoRSxNQUFNLFVBQVUsR0FDZCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzdELElBQUksQ0FBQyxvQkFBb0IsQ0FDdkIsSUFBSSxJQUFJLENBQ04sSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQzFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsVUFBVSxDQUM1RCxDQUNGLENBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFTyxRQUFRLENBQUMsS0FBYTtRQUM1QixPQUFPLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFTyxRQUFRLENBQUMsR0FBa0I7UUFDakMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBRSxNQUFNLENBQUMsS0FBdUIsQ0FBQztRQUNsRCxJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQ25ELE9BQU8sQ0FDTCxDQUFDLFFBQVEsSUFBSSxFQUFFLElBQUksUUFBUSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsSUFBSSxRQUFRLElBQUksR0FBRyxDQUFDLENBQzFFLENBQUM7SUFDSixDQUFDO0lBRU0sY0FBYztRQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUU7WUFDbkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDN0I7SUFDSCxDQUFDO0lBRU0sZUFBZTtRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUU7WUFDbkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkI7SUFDSCxDQUFDO0lBRU8sY0FBYztRQUNwQixZQUFZLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDdkMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyx5QkFBeUIsQ0FBQyxXQUFXLEVBQUU7Z0JBQ25FLElBQ0UsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsU0FBUyxDQUFDO29CQUM3QyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxTQUFTLENBQUM7b0JBQzdDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUMvQztvQkFDQSxJQUNFLElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQW9CO3dCQUNyQyxNQUFNLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQzt3QkFFN0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyw0QkFBNEI7eUJBQ2xGO3dCQUNILElBQ0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0I7NEJBQ25DLE1BQU0sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQzlEOzRCQUNBLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsNkJBQTZCO3lCQUN2Rjs2QkFBTTs0QkFDTCxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ25DLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQ3BDLENBQUM7eUJBQ0g7cUJBQ0Y7aUJBQ0Y7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztvQkFDNUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztvQkFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztvQkFDOUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUM5QjthQUNGO2lCQUFNLElBQ0wsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJO2dCQUNyQix5QkFBeUIsQ0FBQyxxQkFBcUIsRUFDL0M7Z0JBQ0EsSUFDRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUM7b0JBQzVDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUM1QztvQkFDQSxJQUNFLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCO3dCQUNuQyxNQUFNLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUM5RDt3QkFDQSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLDZCQUE2QjtxQkFDdkY7eUJBQU07d0JBQ0wsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUNuQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUNwQyxDQUFDO3FCQUNIO2lCQUNGO3FCQUFNO29CQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7b0JBQzVDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7b0JBQzVDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDOUI7YUFDRjtpQkFBTTtnQkFDTCxJQUNFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQztvQkFDNUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQzVDO29CQUNBLHlDQUF5QztvQkFDekMsNkJBQTZCO29CQUM3QixLQUFLO2lCQUNOO3FCQUFNO29CQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7b0JBQzVDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7b0JBQzVDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO29CQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQzlCO2FBQ0Y7WUFFRCxZQUFZLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDN0IsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVNLHlCQUF5QjtRQUM5QiwwQ0FBMEM7UUFDMUMsSUFBSSxLQUFLLEVBQUUsU0FBUyxDQUFDO1FBRXJCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFM0IsSUFBSSxNQUFNLENBQUMsWUFBWSxJQUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUU7WUFDL0MsU0FBUyxHQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQyxLQUFLLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBRS9CLElBQ0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJO2dCQUNyQix5QkFBeUIsQ0FBQyxxQkFBcUIsRUFDL0M7Z0JBQ0EsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDaEQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUMvQztpQkFBTTtnQkFDTCxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUM5QyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQzdDO1lBRUQsU0FBUyxFQUFFLGVBQWUsRUFBRSxDQUFDO1lBQzdCLFNBQVMsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDNUI7UUFFRCxJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDcEMsWUFBWSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3JDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1QsQ0FBQztJQUVNLHlCQUF5QjtRQUM5QixJQUNFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLHlCQUF5QixDQUFDLHFCQUFxQixFQUN6RTtZQUNBLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ25EO2FBQU07WUFDTCxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztZQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUNyRDtRQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDcEMsWUFBWSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3JDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1QsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixPQUFPLENBQ0wsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUsseUJBQXlCLENBQUMsV0FBVztZQUMvRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyx5QkFBeUIsQ0FBQyxXQUFXO1lBQy9ELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLHlCQUF5QixDQUFDLHFCQUFxQixDQUMxRSxDQUFDO0lBQ0osQ0FBQztJQUVNLFNBQVM7UUFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQzsrR0FuekZVLGlCQUFpQjttSEFBakIsaUJBQWlCLGNBRmhCLE1BQU07OzRGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRWxlbWVudFJlZiwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0LFxuICB0YWtlVW50aWwsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG4vLyBtb2RlbHNcbmltcG9ydCB7IElDYUlucHV0IH0gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB7IENvbW1hbmRzRXZlbnQgfSBmcm9tICcuLi9tb2RlbHMnO1xuXG4vLyBib290c3RyYXBcbmltcG9ydCB7IE5nYlBvcG92ZXIgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5cbi8vIGhlbHBlcnNcbmltcG9ydCB7IE1ldGhvZHNDYWxjdWxhdGlvbnNIZWxwZXIgfSBmcm9tICcuLi8uLi8uLi91dGlscy9oZWxwZXJzL21ldGhvZHMtY2FsY3VsYXRpb25zLmhlbHBlcic7XG5cbi8vIGVudW1zXG5pbXBvcnQge1xuICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLFxuICBJbnB1dENvbW1hbmRzVHlwZSxcbiAgSW5wdXRDb21tYW5kc0FjdGlvbixcbiAgSW5wdXRTdHJpbmdFbnVtLFxufSBmcm9tICcuLi9lbnVtcyc7XG5cbi8vIHNlcnZpY2VzXG5pbXBvcnQgeyBDYWxlbmRhckRhdGVUaW1lUGlja2VyU2VydmljZSB9IGZyb20gJy4uLy4uL2NhLWN1c3RvbS1kYXRldGltZS1waWNrZXJzL3NlcnZpY2VzL2NhbGVuZGFyLWRhdGV0aW1lLXBpY2tlci5zZXJ2aWNlJztcbmltcG9ydCB7IENhSW5wdXRWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4vY2EtaW5wdXQtdmFsaWRhdGlvbi5zZXJ2aWNlJztcblxuLy8gU3ZnIHJvdXRlc1xuaW1wb3J0IHsgSW5wdXRDaGFuZ2VWYWx1ZSwgSW5wdXRTdmdSb3V0ZXMgfSBmcm9tICcuLi91dGlscyc7XG5cbi8vIHBpcGVzXG5pbXBvcnQgeyBUaG91c2FuZFNlcGFyYXRvclBpcGUgfSBmcm9tICcuLi8uLi8uLi9waXBlcy90aG91c2FuZC1zZXBhcmF0b3IucGlwZSc7XG5cbi8vIGNvbnN0YW50c1xuaW1wb3J0IHsgSW5wdXRDb25zdGFudHMgfSBmcm9tICcuLi91dGlscy9jb25zdGFudHMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgSW5wdXRTdGF0ZVNlcnZpY2Uge1xuICBwcml2YXRlIGlzRm9jdXNJbnB1dFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGlzRm9jdXNJbnB1dCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPVxuICAgIHRoaXMuaXNGb2N1c0lucHV0U3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGlzVG91Y2hlZElucHV0U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgaXNUb3VjaGVkSW5wdXQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID1cbiAgICB0aGlzLmlzVG91Y2hlZElucHV0U3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGlzVmlzaWJsZUNvbW1hbmRzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgaXNWaXNpYmxlQ29tbWFuZHMkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID1cbiAgICB0aGlzLmlzVmlzaWJsZUNvbW1hbmRzU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGlzRWRpdElucHV0U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgaXNFZGl0SW5wdXQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID1cbiAgICB0aGlzLmlzRWRpdElucHV0U3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGlzRHJvcGRvd25Ub2dnbGVyU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgaXNEcm9wZG93blRvZ2dsZXIkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID1cbiAgICB0aGlzLmlzRHJvcGRvd25Ub2dnbGVyU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGRhdGVUaW1lSW5wdXREYXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0ZT4obmV3IERhdGUoKSk7XG4gIHB1YmxpYyBkYXRlVGltZUlucHV0RGF0ZSQ6IE9ic2VydmFibGU8RGF0ZT4gPVxuICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgc2hvd0RhdGVJbnB1dFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIHNob3dEYXRlSW5wdXQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID1cbiAgICB0aGlzLnNob3dEYXRlSW5wdXRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgaXNDYXBzTG9ja09uU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgaXNDYXBzTG9ja09uJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9XG4gICAgdGhpcy5pc0NhcHNMb2NrT25TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgb25DaGFuZ2VTdWJqZWN0ID0gbmV3IFN1YmplY3Q8SW5wdXRDaGFuZ2VWYWx1ZT4oKTtcbiAgcHVibGljIG9uQ2hhbmdlJDogT2JzZXJ2YWJsZTxJbnB1dENoYW5nZVZhbHVlPiA9XG4gICAgdGhpcy5vbkNoYW5nZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgLy8gT3V0cHV0c1xuICBwcml2YXRlIGNvbW1hbmRFdmVudFN1YmplY3QgPSBuZXcgU3ViamVjdDxDb21tYW5kc0V2ZW50PigpO1xuICBwdWJsaWMgY29tbWFuZEV2ZW50JDogT2JzZXJ2YWJsZTxDb21tYW5kc0V2ZW50PiA9XG4gICAgdGhpcy5jb21tYW5kRXZlbnRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgY2xlYXJJbnB1dEV2ZW50U3ViamVjdCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHB1YmxpYyBjbGVhcklucHV0RXZlbnQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID1cbiAgICB0aGlzLmNsZWFySW5wdXRFdmVudFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBpbmNvcnJlY3RJbnB1dFN1YmplY3QgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBwdWJsaWMgaW5jb3JyZWN0SW5wdXQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID1cbiAgICB0aGlzLmluY29ycmVjdElucHV0U3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIHNob3dIaWRlRHJvcGRvd25TdWJqZWN0ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHVibGljIHNob3dIaWRlRHJvcGRvd24kOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID1cbiAgICB0aGlzLnNob3dIaWRlRHJvcGRvd25TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgZHJvcERvd25LZXlOYXZpZ2F0aW9uU3ViamVjdCA9IG5ldyBTdWJqZWN0PHtcbiAgICBrZXlDb2RlOiBudW1iZXI7XG4gICAgZGF0YTogSUNhSW5wdXQgfCBudWxsO1xuICB9PigpO1xuICBwdWJsaWMgZHJvcERvd25LZXlOYXZpZ2F0aW9uJDogT2JzZXJ2YWJsZTx7XG4gICAga2V5Q29kZTogbnVtYmVyO1xuICAgIGRhdGE6IElDYUlucHV0IHwgbnVsbDtcbiAgfT4gPSB0aGlzLmRyb3BEb3duS2V5TmF2aWdhdGlvblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBibHVySW5wdXRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHVibGljIGJsdXJJbnB1dCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmJsdXJJbnB1dFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBjaGFuZ2VJbnB1dFN1YmplY3QgPSBuZXcgU3ViamVjdDxJbnB1dENoYW5nZVZhbHVlPigpO1xuICBwdWJsaWMgY2hhbmdlSW5wdXQkOiBPYnNlcnZhYmxlPElucHV0Q2hhbmdlVmFsdWU+ID1cbiAgICB0aGlzLmNoYW5nZUlucHV0U3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwdWJsaWMgY29tYmluZWRWYXJpYWJsZXMkID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5pc0ZvY3VzSW5wdXQkLFxuICAgIHRoaXMuaXNUb3VjaGVkSW5wdXQkLFxuICAgIHRoaXMuaXNWaXNpYmxlQ29tbWFuZHMkLFxuICAgIHRoaXMuaXNFZGl0SW5wdXQkLFxuICAgIHRoaXMuaXNEcm9wZG93blRvZ2dsZXIkLFxuICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUkLFxuICAgIHRoaXMuc2hvd0RhdGVJbnB1dCQsXG4gICAgdGhpcy5pc0NhcHNMb2NrT24kLFxuICBdKTtcblxuICBwcml2YXRlIGNkUmVmITogQ2hhbmdlRGV0ZWN0b3JSZWY7XG5cbiAgcHJpdmF0ZSBpbnB1dENvbmZpZyE6IElDYUlucHV0O1xuICBwcml2YXRlIGluY29ycmVjdFZhbHVlITogYm9vbGVhbjtcblxuICBwcml2YXRlIGlucHV0ITogRWxlbWVudFJlZjtcbiAgcHJpdmF0ZSBzdXBlckNvbnRyb2whOiBOZ0NvbnRyb2w7XG5cbiAgLy8gRGF0ZVxuICBwdWJsaWMgbmV3SW5wdXRDaGFuZ2VkOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBzZWxlY3Rpb25JbnB1dDogbnVtYmVyID0gLTE7XG4gIHByaXZhdGUgcHJldmVudEJsdXIhOiBib29sZWFuO1xuXG4gIC8vIElucHV0IFNlbGVjdGlvblxuICBwdWJsaWMgaW5wdXRTZWxlY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgc3Bhbk9uZSE6IEVsZW1lbnRSZWY7XG4gIHB1YmxpYyBzcGFuVHdvITogRWxlbWVudFJlZjtcbiAgcHVibGljIHNwYW5UaHJlZSE6IEVsZW1lbnRSZWY7XG4gIHB1YmxpYyBob2xkZXIxITogRWxlbWVudFJlZjtcbiAgcHVibGljIHQyITogTmdiUG9wb3ZlcjtcbiAgcHVibGljIG5nYk1haW5Qb3BvdmVyITogTmdiUG9wb3ZlcjtcblxuICBwcml2YXRlIGlucHV0Q29tbWFuZHNUaW1lb3V0ITogTm9kZUpTLlRpbWVvdXQgfCBudW1iZXI7XG4gIHByaXZhdGUgZm9jdXNCbHVyITogTm9kZUpTLlRpbWVvdXQgfCBudW1iZXI7XG4gIHByaXZhdGUgdGltZW91dENsZWFuZXIhOiBOb2RlSlMuVGltZW91dCB8IG51bWJlcjtcbiAgcHJpdmF0ZSBkYXRlVGltZU1haW5UaW1lciE6IE5vZGVKUy5UaW1lb3V0IHwgbnVtYmVyO1xuICBwcml2YXRlIHBhc3N3b3JkVGltZW91dCE6IE5vZGVKUy5UaW1lb3V0IHwgbnVtYmVyO1xuXG4gIC8vIFByaWNlIFNlcGFyYXRvclxuICBwdWJsaWMgY3Vyc29ySW5wdXRQb3NpdGlvbiE6IG51bWJlcjtcbiAgcHVibGljIGhhc0RlY2ltYWxJbmRleDogbnVtYmVyID0gLTE7XG4gIHB1YmxpYyBvcmlnaW5QcmljZVNlcGFyYXRvckxpbWl0ITogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBwdWJsaWMgaXNEb3REZWxldGVkITogYm9vbGVhbjtcblxuICAvLyBOdW1iZXIgb2Ygc3BhY2VzXG4gIHB1YmxpYyBudW1iZXJPZkNvbnNlY3V0aXZlbHlTcGFjZXM6IG51bWJlciA9IDA7XG4gIHB1YmxpYyBvbmVTcGFjZU9ubHlDb3VudGVyOiBudW1iZXIgPSAwO1xuICBwdWJsaWMgbGFzdEN1cnNvclNwYWNlUG9zaXRpb246IG51bWJlciA9IDA7XG5cbiAgLy8gTnVtYmVyIG9mIHBvaW50c1xuICBwdWJsaWMgbnVtYmVyT2ZDb25zZWN1dGl2ZWx5UG9pbnRzOiBudW1iZXIgPSAwO1xuICBwdWJsaWMgbnVtYmVyT2ZQb2ludHM6IG51bWJlciA9IDA7XG5cbiAgcHJpdmF0ZSBkZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjYWxlbmRhclNlcnZpY2U6IENhbGVuZGFyRGF0ZVRpbWVQaWNrZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlOiBDYUlucHV0VmFsaWRhdGlvblNlcnZpY2UsXG5cbiAgICAvLyBQaXBlc1xuICAgIHByaXZhdGUgdGhvdXNhbmRTZXBhcmF0b3JQaXBlOiBUaG91c2FuZFNlcGFyYXRvclBpcGVcbiAgKSB7fVxuXG4gIHB1YmxpYyBzZXRJc0ZvY3VzSW5wdXQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmlzRm9jdXNJbnB1dFN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0SXNUb3VjaGVkSW5wdXQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmlzVG91Y2hlZElucHV0U3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRJc1Zpc2libGVDb21tYW5kcyh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaXNWaXNpYmxlQ29tbWFuZHNTdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNldElzRWRpdElucHV0KHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pc0VkaXRJbnB1dFN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0SXNEcm9wZG93blRvZ2dsZXIodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmlzRHJvcGRvd25Ub2dnbGVyU3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXREYXRlVGltZUlucHV0RGF0ZSh2YWx1ZTogRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNldFNob3dEYXRlSW5wdXQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnNob3dEYXRlSW5wdXRTdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNldElzQ2Fwc0xvY2tPbih2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaXNDYXBzTG9ja09uU3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRJbnB1dEVsZW1lbnRSZWYoaW5wdXQ6IEVsZW1lbnRSZWYsIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZik6IHZvaWQge1xuICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICB0aGlzLmNkUmVmID0gY2RSZWY7XG4gIH1cblxuICBwdWJsaWMgc2V0U3VwZXJDb250cm9sKHN1cGVyQ29udHJvbDogTmdDb250cm9sKTogdm9pZCB7XG4gICAgdGhpcy5zdXBlckNvbnRyb2wgPSBzdXBlckNvbnRyb2w7XG4gIH1cblxuICBwdWJsaWMgc2V0SW5wdXRDb25maWcoY29uZmlnOiBJQ2FJbnB1dCk6IHZvaWQge1xuICAgIHRoaXMuaW5wdXRDb25maWcgPSBjb25maWc7XG4gIH1cblxuICBwdWJsaWMgc2V0SW5jb3JyZWN0VmFsdWUoaW5jb3JyZWN0VmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmluY29ycmVjdFZhbHVlID0gaW5jb3JyZWN0VmFsdWU7XG4gIH1cblxuICBwdWJsaWMgc2V0Q29tbWFuZEV2ZW50KHZhbHVlOiBDb21tYW5kc0V2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5jb21tYW5kRXZlbnRTdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNldENsZWFySW5wdXRFdmVudCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50U3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRJbmNvcnJlY3RJbnB1dCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaW5jb3JyZWN0SW5wdXRTdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNldFNob3dIaWRlRHJvcGRvd24odmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnNob3dIaWRlRHJvcGRvd25TdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNldERyb3BEb3duS2V5TmF2aWdhdGlvbih2YWx1ZToge1xuICAgIGtleUNvZGU6IG51bWJlcjtcbiAgICBkYXRhOiBJQ2FJbnB1dCB8IG51bGw7XG4gIH0pOiB2b2lkIHtcbiAgICB0aGlzLmRyb3BEb3duS2V5TmF2aWdhdGlvblN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0Qmx1cklucHV0KHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5ibHVySW5wdXRTdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNldENoYW5nZUlucHV0KHZhbHVlOiBJbnB1dENoYW5nZVZhbHVlKTogdm9pZCB7XG4gICAgdGhpcy5jaGFuZ2VJbnB1dFN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0T25DaGFuZ2UodmFsdWU6IElucHV0Q2hhbmdlVmFsdWUpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlU3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKG9iajogSW5wdXRDaGFuZ2VWYWx1ZSk6IHZvaWQge1xuICAgIHRoaXMuc2V0Q2hhbmdlSW5wdXQob2JqKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVIgfHxcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLlRJTUVfUElDS0VSIHx8XG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT1cbiAgICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICAgKSB7XG4gICAgICAgIGlmIChvYmopIHtcbiAgICAgICAgICB0aGlzLnRpbWVvdXRDbGVhbmVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldFRpbWVEYXRlSW5wdXQob2JqKTtcbiAgICAgICAgICB9LCAzMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IG9iajtcbiAgICAgICAgICB0aGlzLnJlc2V0RGF0ZVRpbWVJbnB1dHMoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCF0aGlzLmlucHV0Q29uZmlnLnByaWNlU2VwYXJhdG9yKSB7XG4gICAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gb2JqO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJJbnB1dChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIC8vIENsZWFyIHdob2xlIGlucHV0XG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcucmVtb3ZlSW5wdXQpIHtcbiAgICAgIHRoaXMuc2V0Q2xlYXJJbnB1dEV2ZW50KHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBJbmNvcnJlY3QgSW5wdXRcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5pbmNvcnJlY3RJbnB1dCkge1xuICAgICAgdGhpcy5pbmNvcnJlY3RWYWx1ZSA9ICF0aGlzLmluY29ycmVjdFZhbHVlO1xuICAgICAgdGhpcy5zZXRJbmNvcnJlY3RJbnB1dCh0aGlzLmluY29ycmVjdFZhbHVlKTtcbiAgICB9XG4gICAgLy8gTmF0aXZlIGNsZWFyXG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBudWxsO1xuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8uc2V0VmFsdWUobnVsbCk7XG4gICAgICB0aGlzLm51bWJlck9mQ29uc2VjdXRpdmVseVNwYWNlcyA9IDA7XG4gICAgICB0aGlzLm51bWJlck9mQ29uc2VjdXRpdmVseVBvaW50cyA9IDA7XG4gICAgICB0aGlzLm51bWJlck9mUG9pbnRzID0gMDtcbiAgICAgIHRoaXMub25lU3BhY2VPbmx5Q291bnRlciA9IDA7XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLmRyb3Bkb3duSW1hZ2VJbnB1dCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuc2V0SXNUb3VjaGVkSW5wdXQodHJ1ZSk7XG4gICAgICB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG4gICAgICBpZiAoXG4gICAgICAgIChcbiAgICAgICAgICBbXG4gICAgICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSLFxuICAgICAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5USU1FX1BJQ0tFUixcbiAgICAgICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJELFxuICAgICAgICAgIF0gYXMgc3RyaW5nW11cbiAgICAgICAgKS5pbmNsdWRlcyh0aGlzLmlucHV0Q29uZmlnLm5hbWUpXG4gICAgICApXG4gICAgICAgIHRoaXMucmVzZXREYXRlVGltZUlucHV0cygpO1xuXG4gICAgICB0aGlzLnNldENsZWFySW5wdXRFdmVudCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdHJhbnNmb3JtVGV4dChldmVudDogRXZlbnQsIGlzUGFzdGU/OiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgIHRoaXMuY3Vyc29ySW5wdXRQb3NpdGlvbiA9IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydDtcblxuICAgIC8vIEhhbmRsZSBwYXN0ZSBvcGVyYXRpb25cbiAgICBpZiAoaXNQYXN0ZSkge1xuICAgICAgdGhpcy5oYW5kbGVQYXN0ZSh2YWx1ZSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgdGhpcy5hcHBseVRleHRUcmFuc2Zvcm1hdGlvbigpO1xuXG4gICAgLy8gQXBwbHkgdGhvdXNhbmQgYW5kIHByaWNlIHNlcGFyYXRvcnMgaWYgY29uZmlndXJlZFxuICAgIHRoaXMuYXBwbHlUaG91c2FuZFNlcGFyYXRvcigpO1xuICAgIHRoaXMuYXBwbHlQcmljZVNlcGFyYXRvcigpO1xuXG4gICAgdGhpcy5jdXN0b21WYWxpZGF0aW9uKHZhbHVlKTtcblxuICAgIHRoaXMuc2FuaXRpemVDb25zZWN1dGl2ZVNwYWNlcygpO1xuXG4gICAgdGhpcy5yZW1vdmVMZWFkaW5nWmVybygpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVQYXN0ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlucHV0U2VsZWN0aW9uKSB7XG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgKz0gdmFsdWU7XG4gICAgICB0aGlzLmxpbWl0SW5wdXRMZW5ndGgoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLmlucHV0U2VsZWN0aW9uID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gRGVsZXRlIHNwYWNlcyBvbiBiZWdpbiBhbmQgZW5kXG4gICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlLnRyaW0oKTtcbiAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGxpbWl0SW5wdXRMZW5ndGgoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZS5sZW5ndGggPiB0aGlzLmlucHV0Q29uZmlnLm1heExlbmd0aCEpIHtcbiAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZS5zdWJzdHJpbmcoXG4gICAgICAgIDAsXG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcubWF4TGVuZ3RoXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlUZXh0VHJhbnNmb3JtYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50O1xuICAgIHN3aXRjaCAodGhpcy5pbnB1dENvbmZpZy50ZXh0VHJhbnNmb3JtKSB7XG4gICAgICBjYXNlIElucHV0U3RyaW5nRW51bS5DQVBJVEFMSVpFOlxuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPVxuICAgICAgICAgIHZhbHVlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdmFsdWUuc3Vic3RyaW5nKDEpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBJbnB1dFN0cmluZ0VudW0uVVBQRVJDQVNFOlxuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2YWx1ZS50b0xvY2FsZVVwcGVyQ2FzZSgnZW4tVVMnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIElucHV0U3RyaW5nRW51bS5DQVBJVEFMSVpFRF9DQVNFOlxuICAgICAgICBjb25zdCBjYXBpdGFsaXplZENhc2VXb3JkcyA9IHZhbHVlLnJlcGxhY2UoXG4gICAgICAgICAgLyheXFx3ezF9KXwoXFxzK1xcd3sxfSkvZyxcbiAgICAgICAgICAobGV0dGVyOiBzdHJpbmcpID0+IGxldHRlci50b1VwcGVyQ2FzZSgpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gY2FwaXRhbGl6ZWRDYXNlV29yZHM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUodGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlUaG91c2FuZFNlcGFyYXRvcigpOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sVmFsdWUgPSB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZTtcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy50aG91c2FuZFNlcGFyYXRvciAmJiBjb250cm9sVmFsdWUpIHtcbiAgICAgIGlmICh0aGlzLmlzQWxsWmVyb3MoY29udHJvbFZhbHVlKSkge1xuICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKCcwJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZS50b1N0cmluZygpKSB7XG4gICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgICAgdGhpcy50aG91c2FuZFNlcGFyYXRvclBpcGUudHJhbnNmb3JtKGNvbnRyb2xWYWx1ZSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5UHJpY2VTZXBhcmF0b3IoKTogdm9pZCB7XG4gICAgY29uc3QgY29udHJvbFZhbHVlID0gdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWU7XG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcucHJpY2VTZXBhcmF0b3IgJiYgY29udHJvbFZhbHVlKSB7XG4gICAgICAvLyAwLiBEb24ndCBhbGxvdyAwIGFzIGZpcnN0IGNoYXJhY3RlclxuICAgICAgaWYgKHRoaXMuaXNBbGxaZXJvcyhjb250cm9sVmFsdWUpKSB7XG4gICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoJzAnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiB1c2VyIHNldCBkb3RcbiAgICAgIGlmIChjb250cm9sVmFsdWUuaW5jbHVkZXMoJy4nKSkge1xuICAgICAgICB0aGlzLmZvcm1hdFdpdGhEZWNpbWFsKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyA1LiBJZiB1c2VyIGRvZXNuJ3Qgc2V0IGRvdFxuICAgICAgICB0aGlzLmZvcm1hdFdpdGhvdXREZWNpbWFsKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0SW5wdXRDdXJzb3JQb3NpdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0V2l0aERlY2ltYWwoKTogdm9pZCB7XG4gICAgY29uc3QgY29udHJvbFZhbHVlID0gdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWU7XG4gICAgLy8gNC4xLiBDaGVjayBmb3IgRG90IHBvc2l0aW9uXG4gICAgdGhpcy5oYXNEZWNpbWFsSW5kZXggPSBjb250cm9sVmFsdWUuaW5kZXhPZignLicpO1xuXG4gICAgdGhpcy5vcmlnaW5QcmljZVNlcGFyYXRvckxpbWl0ID1cbiAgICAgIHRoaXMuaW5wdXRDb25maWcucHJpY2VTZXBhcmF0b3JMaW1pdGF0aW9uISArIDM7XG5cbiAgICAvLyA0LjIuIERpdmlkZSBudW1iZXIgaW50byBkZWNpbWFsIGFuZCBpbnRlZ2VyIHBhcnRzXG4gICAgbGV0IGludGVnZXJQYXJ0ID0gdGhpcy50aG91c2FuZFNlcGFyYXRvclBpcGUudHJhbnNmb3JtKFxuICAgICAgY29udHJvbFZhbHVlXG4gICAgICAgIC5zbGljZSgwLCB0aGlzLmhhc0RlY2ltYWxJbmRleClcbiAgICAgICAgLnNsaWNlKDAsIHRoaXMuaW5wdXRDb25maWcucHJpY2VTZXBhcmF0b3JMaW1pdGF0aW9uKVxuICAgICk7XG4gICAgbGV0IGRlY2ltYWxQYXJ0ID0gY29udHJvbFZhbHVlLnNsaWNlKHRoaXMuaGFzRGVjaW1hbEluZGV4ICsgMSk7XG5cbiAgICBpZiAoIWludGVnZXJQYXJ0KSB7XG4gICAgICBpbnRlZ2VyUGFydCA9ICcwJztcbiAgICB9XG5cbiAgICAvLyA0LjQuIEdldCBvbmx5IHR3byBudW1iZXJzIG9mIHRoZSBkZWNpbWFsIHBhcnRcbiAgICBkZWNpbWFsUGFydCA9IGRlY2ltYWxQYXJ0LnNsaWNlKDAsIDIpO1xuXG4gICAgaWYgKGRlY2ltYWxQYXJ0KSB7XG4gICAgICAvLyA0LjUuIFNldCBmb3JtYXR0ZWQgbnVtYmVyXG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKGAke2ludGVnZXJQYXJ0fS4ke2RlY2ltYWxQYXJ0fWApO1xuICAgICAgdGhpcy5oYXNEZWNpbWFsSW5kZXggPSB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZS5pbmRleE9mKCcuJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRXaXRob3V0RGVjaW1hbCgpOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sVmFsdWUgPSB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZTtcbiAgICB0aGlzLmhhc0RlY2ltYWxJbmRleCA9IC0xO1xuXG4gICAgaWYgKGNvbnRyb2xWYWx1ZS5pbmRleE9mKCcuJykgPT09IC0xKSB7XG4gICAgICAvLyBUcmFuc2Zvcm0gdmFsdWUgd2l0aCB0aG91c2FuZCBzZXBhcmF0b3JcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgIHRoaXMudGhvdXNhbmRTZXBhcmF0b3JQaXBlLnRyYW5zZm9ybShjb250cm9sVmFsdWUpXG4gICAgICApO1xuXG4gICAgICAvLyBMaW1pdCB2YWxpZGF0aW9uXG4gICAgICB0aGlzLm9yaWdpblByaWNlU2VwYXJhdG9yTGltaXQgPVxuICAgICAgICB0aGlzLmlucHV0Q29uZmlnLnByaWNlU2VwYXJhdG9yTGltaXRhdGlvbjtcblxuICAgICAgLy8gQ3V0IHZhbHVlXG4gICAgICBpZiAoY29udHJvbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgICAgY29udHJvbFZhbHVlLnNsaWNlKDAsIHRoaXMuaW5wdXRDb25maWcucHJpY2VTZXBhcmF0b3JMaW1pdGF0aW9uKVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBUcmFuc2Zvcm0gdmFsdWUgYWdhaW4gYWZ0ZXIgY3V0dGluZ1xuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgdGhpcy50aG91c2FuZFNlcGFyYXRvclBpcGUudHJhbnNmb3JtKGNvbnRyb2xWYWx1ZSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRJbnB1dEN1cnNvclBvc2l0aW9uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSkge1xuICAgICAgdGhpcy50aW1lb3V0Q2xlYW5lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UoXG4gICAgICAgICAgdGhpcy5jdXJzb3JJbnB1dFBvc2l0aW9uICtcbiAgICAgICAgICAgICh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZS5pbmRleE9mKCcuJykgPT09IC0xID8gMSA6IDApLFxuICAgICAgICAgIHRoaXMuY3Vyc29ySW5wdXRQb3NpdGlvbiArXG4gICAgICAgICAgICAodGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUuaW5kZXhPZignLicpID09PSAtMSA/IDEgOiAwKVxuICAgICAgICApO1xuICAgICAgfSwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIHdlIGhhdmUgJHtufTAwMDAwIGFuZCB3ZSBkZWxldGUgTiB0aGVuIHdlIGdvdCB1bmRlZmluZWQgaW5zdGVhZCBvZiBkb3RcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoMCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc0FsbFplcm9zKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsdWUuc3BsaXQoJycpLmV2ZXJ5KChjaGFyKSA9PiBjaGFyID09PSAnMCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBjdXN0b21WYWxpZGF0aW9uKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWdOYW1lID0gdGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAoXG4gICAgICBjb25maWdOYW1lID09PSBJbnB1dFN0cmluZ0VudW0uWUVBUiAmJlxuICAgICAgcGFyc2VJbnQodmFsdWUpID4gcGFyc2VJbnQobW9tZW50KCkuYWRkKDEsICd5ZWFyJykuZm9ybWF0KCdZWVlZJykpXG4gICAgKSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMoeyBpbnZhbGlkOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIGlmIChjb25maWdOYW1lID09PSBJbnB1dFN0cmluZ0VudW0uTU9OVEhTKSB7XG4gICAgICBpZiAocGFyc2VJbnQodmFsdWUpIDwgMSB8fCBwYXJzZUludCh2YWx1ZSkgPiAxMikge1xuICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMoeyBpbnZhbGlkOiB0cnVlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKG51bGwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb25maWdOYW1lID09PSBJbnB1dFN0cmluZ0VudW0uQVhMRVMpIHtcbiAgICAgIGlmIChwYXJzZUludCh2YWx1ZSkgPCAxIHx8IHBhcnNlSW50KHZhbHVlKSA+IDE3KSB7XG4gICAgICAgIGlmIChwYXJzZUludCh2YWx1ZSkgPCAxKSB7XG4gICAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKHsgbWluOiAxIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KHZhbHVlKSA+IDE3KSB7XG4gICAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKHsgbWF4OiAxNyB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKG51bGwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGNvbmZpZ05hbWUgPT09IElucHV0U3RyaW5nRW51bS5GVUxMX05BTUUgJiZcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlXG4gICAgKSB7XG4gICAgICB0aGlzLmNhcGl0YWxpemVXb3JkcygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2FwaXRhbGl6ZVdvcmRzKCk6IHZvaWQge1xuICAgIGNvbnN0IHdvcmRzID0gdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUuc3BsaXQoJyAnKTtcbiAgICBjb25zdCBjYXBpdGFsaXplZCA9IHdvcmRzLm1hcCgod29yZDogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSkudG9Mb3dlckNhc2UoKTtcbiAgICB9KTtcbiAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBjYXBpdGFsaXplZC5qb2luKCcgJyk7XG4gIH1cblxuICBwcml2YXRlIHNhbml0aXplQ29uc2VjdXRpdmVTcGFjZXMoKTogdm9pZCB7XG4gICAgY29uc3QgY29uZmlnTmFtZXMgPSBJbnB1dENvbnN0YW50cy50ZXh0VHJhbnNmb3JtQ29uZmlnTmFtZXM7XG5cbiAgICBpZiAoY29uZmlnTmFtZXMuaW5jbHVkZXModGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICBjb25zdCBzYW5pdGl6ZWRJbnB1dCA9IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZS5yZXBsYWNlKFxuICAgICAgICAvXFxzezIsfS9nLFxuICAgICAgICAnICdcbiAgICAgICk7XG4gICAgICBpZiAoc2FuaXRpemVkSW5wdXQgIT09IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSkge1xuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBzYW5pdGl6ZWRJbnB1dDtcbiAgICAgICAgdGhpcy5zZXRDdXJzb3JGb3JTYW5pdGl6ZWRJbnB1dCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0Q3Vyc29yRm9yU2FuaXRpemVkSW5wdXQoKTogdm9pZCB7XG4gICAgdGhpcy50aW1lb3V0Q2xlYW5lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKFxuICAgICAgICB0aGlzLmxhc3RDdXJzb3JTcGFjZVBvc2l0aW9uIC0gMSxcbiAgICAgICAgdGhpcy5sYXN0Q3Vyc29yU3BhY2VQb3NpdGlvbiAtIDFcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUxlYWRpbmdaZXJvKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLnJlbW92ZUxlYWRpbmdaZXJvKSB7XG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZTtcblxuICAgICAgaWYgKCFjdXJyZW50VmFsdWUpIHtcbiAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZSgnJyk7XG4gICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyhudWxsKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5uZWdhdGl2ZUxlYWRpbmdaZXJvKSB7XG4gICAgICAgIGNvbnN0IGlzTmVnYXRpdmUgPSBjdXJyZW50VmFsdWUuc3RhcnRzV2l0aCgnLScpO1xuXG4gICAgICAgIGlmIChpc05lZ2F0aXZlKSB7XG4gICAgICAgICAgLy8gR2V0IHRoZSBwYXJ0IGFmdGVyIHRoZSBuZWdhdGl2ZSBzaWduXG4gICAgICAgICAgY29uc3QgbnVtYmVyUGFydCA9IGN1cnJlbnRWYWx1ZS5zbGljZSgxKTtcbiAgICAgICAgICAvLyBSZW1vdmUgbGVhZGluZyB6ZXJvc1xuICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkTnVtYmVyID0gbnVtYmVyUGFydC5yZXBsYWNlKC9eMCsoPz1cXGQpLywgJycpO1xuICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoYC0ke3RyYW5zZm9ybWVkTnVtYmVyfWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgICAgICBjdXJyZW50VmFsdWUucmVwbGFjZSgvXjArKD89XFxkKS8sICcnKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgICAgY3VycmVudFZhbHVlLnJlcGxhY2UoL14wKyg/ISQpLywgJycpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGF1dG9Gb2N1c0ZpcnN0SW5wdXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcuYXV0b0ZvY3VzICYmICF0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSkge1xuICAgICAgdGhpcy50aW1lb3V0Q2xlYW5lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQodHJ1ZSk7XG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcuYXV0b0ZvY3VzID0gZmFsc2U7XG4gICAgICB9LCAzMCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uS2V5cHJlc3MoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHwgdm9pZCB7XG4gICAgLy8gRGlzYWJsZSBmaXJzdCBjaGFyYWN0ZXIgdG8gYmUgc3BhY2VcbiAgICBpZiAoXG4gICAgICAhdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlICYmXG4gICAgICAvXlxccyokLy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5wcmljZVNlcGFyYXRvcikge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uUFJJQ0VfU0VQQVJBVE9SKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWU/Lmxlbmd0aCA9PT1cbiAgICAgICAgICAgIHRoaXMub3JpZ2luUHJpY2VTZXBhcmF0b3JMaW1pdCAmJlxuICAgICAgICAgIGV2ZW50LmtleUNvZGUgIT09IDQ2XG4gICAgICAgICkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vICBEaXNhYmxlIG11bHRpcGxlIGRvdHNcbiAgICAgICAgdGhpcy5kaXNhYmxlTXVsdGlwbGVQb2ludHMoZXZlbnQpO1xuXG4gICAgICAgIC8vIEZpbmQgaW5kZXggb2YgZG90XG4gICAgICAgIGNvbnN0IHZhbHVlVG9TdHJpbmcgPSBTdHJpbmcodGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUpO1xuXG4gICAgICAgIHRoaXMuaGFzRGVjaW1hbEluZGV4ID0gdmFsdWVUb1N0cmluZz8uaW5kZXhPZignLicpO1xuXG4gICAgICAgIGlmICh0aGlzLmhhc0RlY2ltYWxJbmRleCA+PSAwKSB7XG4gICAgICAgICAgLy8gMS4gRGl2aWRlIG51bWJlciBvbiBkZWNpbWFsIGFuZCBpbnRlZ2VyIHBhcnRcbiAgICAgICAgICBsZXQgaW50ZWdlclBhcnQgPSB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZS5zbGljZShcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICB0aGlzLmhhc0RlY2ltYWxJbmRleFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoIWludGVnZXJQYXJ0KSBpbnRlZ2VyUGFydCA9ICcwJztcblxuICAgICAgICAgIGxldCBkZWNpbWFsUGFydCA9IHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlLnNsaWNlKFxuICAgICAgICAgICAgdGhpcy5oYXNEZWNpbWFsSW5kZXggKyAxXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIDIuIERpc2FibGUgbW9yZSB0aGFuIHR3byBkZWNpbWFsc1xuICAgICAgICAgIGlmIChkZWNpbWFsUGFydC5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDMuIEdldCBvbmx5IHR3byBudW1iZXJzIG9mIGRlY2ltYWwgcGFydFxuICAgICAgICAgIGRlY2ltYWxQYXJ0ID0gZGVjaW1hbFBhcnQuc2xpY2UoMCwgMik7XG5cbiAgICAgICAgICBjb25zdCBjdXJyZW50UG9zaXRpb24gPSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7XG5cbiAgICAgICAgICAvLyA0LiBTZXQgZm9ybWF0dGVkIG51bWJlclxuICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgICAgICAvKiAgaW50ZWdlclBhcnQgKyAnLicgKyBkZWNpbWFsUGFydCAqLyAnYXNkJ1xuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLnRpbWVvdXRDbGVhbmVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gNTEpIHtcbiAgICAgICAgICAgICAgdGhpcy5jdXJzb3JJbnB1dFBvc2l0aW9uID1cbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICAgICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShcbiAgICAgICAgICAgICAgICBjdXJyZW50UG9zaXRpb24sXG4gICAgICAgICAgICAgICAgY3VycmVudFBvc2l0aW9uXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UoXG4gICAgICAgICAgICAgICAgY3VycmVudFBvc2l0aW9uLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRQb3NpdGlvblxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkJVU0lORVNTX05BTUUsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5TSE9QX05BTUUsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5GVUVMX1NUT1AsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5QUk9EVUNFUl9OQU1FLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uVEVSTUlOQUxfTkFNRSxcbiAgICAgIF0uaW5jbHVkZXMoPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKSlcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLkJVU0lORVNTX05BTUUpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZU11bHRpcGxlUG9pbnRzKGV2ZW50KTtcbiAgICAgICAgdGhpcy5kaXNhYmxlQ29uc2VjdXRpdmVseVNwYWNlcyhldmVudCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkVJTixcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLk1DX0ZGLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uUEhPTkUsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5QSE9ORV9FWFRFTlNJT04sXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5BQ0NPVU5UX0JBTkssXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5ST1VUSU5HX0JBTkssXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5TU04sXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5GVUVMX0NBUkQsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5FTVBUWV9XRUlHSFQsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5DUkVESVRfTElNSVQsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5QT19CT1gsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5QUklDRSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlRSQUlMRVJfVk9MVU1FLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uUkVQQUlSX09ET01FVEVSLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uVVNET1QsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5JUlAsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5TVEFSVElORyxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkNVU1RPTUVSX1BBWV9URVJNLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uQ1VTVE9NRVJfQ1JFRElULFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uREVGQVVMVF9CQVNFLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uRUFDSF9PQ0NVUlJFTkNFLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uREFNQUdFLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uUEVSU09OQUxfQURWRVJfSU5KLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uTUVESUNBTF9FWFBFTlNFUyxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkJPRElMWV9JTkpVUlksXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5HRU5FUkFMX0FHR1JFR0FURSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlBST0RVQ1RTX0NPTVBfT1BfQUdHLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uQ09NQklORURfU0lOR0xFX0xJTUlULFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uU0lOR0xFX0NPTlZFWUFOQ0UsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5ERURVQ1RBQkxFLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uQ09NUFJFSF9DT0xMSVNJT04sXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5UUkFJTEVSX1ZBTFVFX0lOU1VSQU5DRV9QT0xJQ1ksXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5SRU5ULFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uU0FMQVJZLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uTUlMRUFHRSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLk1PTlRIUyxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkVNUFRZX1dFSUdIVF9TUEFDRSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlFUWSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlBVUkNIQVNFX1BSSUNFLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uRlVFTF9UQU5LX1NJWkUsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5ERVZJQ0VfTk8sXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5XRUlHSFQsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5GVUVMX1BFUl9NSUxFUyxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkZVRUxfUFJJQ0VfTUFQLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uQU1PVU5ULFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uQk9MX05PLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uU0VBTF9OTyxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlBJQ0tVUF9OTyxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkNPREUsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5NVUxUSV9GUk9NX0ZJUlNUX0ZST00sXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5NVUxUSV9GUk9NX0ZJUlNUX1RPLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uTVVMVElfRk9STV9TRUNPTkRfRlJPTSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLk1VTFRJX0ZPUk1fU0VDT05EX1RPLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uTVVMVElfRk9STV9USElSRF9GUk9NLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uTVVMVElfRk9STV9USElSRF9UTyxcbiAgICAgIF0uaW5jbHVkZXMoPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKSlcbiAgICApIHtcbiAgICAgIC8vIE9ubHkgbnVtYmVyc1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uUVRZKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0lucHV0U3RyaW5nRW51bS5FTUFJTF0uaW5jbHVkZXMoXG4gICAgICAgIDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLkVNQUlMKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLmRpc2FibGVDb25zZWN1dGl2ZWx5UG9pbnRzKGV2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtJbnB1dFN0cmluZ0VudW0uSU5WT0lDRV0uaW5jbHVkZXMoXG4gICAgICAgIDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLklOVk9JQ0UpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbSW5wdXRTdHJpbmdFbnVtLkFERFJFU1NdLmluY2x1ZGVzKFxuICAgICAgICA8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpZiAoL15bQS1aYS16MC05XFxzLiYvLF8tXSokLz8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSkpIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlQ29uc2VjdXRpdmVseVNwYWNlcyhldmVudCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkFERFJFU1NfVU5JVCxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkRFUEFSVE1FTlQsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5WRUhJQ0xFX1VOSVQsXG4gICAgICBdLmluY2x1ZGVzKDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5BRERSRVNTX1VOSVQpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbSW5wdXRTdHJpbmdFbnVtLkZJUlNUX05BTUVdLmluY2x1ZGVzKFxuICAgICAgICA8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5GSVJTVF9OQU1FKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLmRpc2FibGVNdWx0aXBsZVBvaW50cyhldmVudCk7XG4gICAgICAgIHRoaXMuZW5hYmxlT25lU3BhY2VPbmx5KGV2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtJbnB1dFN0cmluZ0VudW0uTEFTVF9OQU1FXS5pbmNsdWRlcyhcbiAgICAgICAgPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uTEFTVF9OQU1FKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLmVuYWJsZU9uZVNwYWNlT25seShldmVudCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbSW5wdXRTdHJpbmdFbnVtLkJBTktfTkFNRV0uaW5jbHVkZXMoXG4gICAgICAgIDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLkJBTktfTkFNRSlcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlTXVsdGlwbGVQb2ludHMoZXZlbnQpO1xuICAgICAgICB0aGlzLmVuYWJsZU9uZVNwYWNlT25seShldmVudCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5WSU5fTlVNQkVSLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uSU5TVVJBTkNFX1BPTElDWSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLklGVEEsXG4gICAgICBdLmluY2x1ZGVzKDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5WSU5fTlVNQkVSKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgIClcbiAgICAgICAgcmV0dXJuICEvXltJaU9RXSokLz8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSk7XG5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0lucHV0U3RyaW5nRW51bS5UUlVDS19UUkFJTEVSX01PREVMXS5pbmNsdWRlcyhcbiAgICAgICAgPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uVFJVQ0tfVFJBSUxFUl9NT0RFTClcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5lbmFibGVPbmVTcGFjZU9ubHkoZXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0lucHV0U3RyaW5nRW51bS5ZRUFSXS5pbmNsdWRlcyhcbiAgICAgICAgPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICAvXjAqJC8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSkgJiZcbiAgICAgICAgIXRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uWUVBUilcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtJbnB1dFN0cmluZ0VudW0uTElDRU5TRV9QTEFURV0uaW5jbHVkZXMoXG4gICAgICAgIDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLkxJQ0VOU0VfUExBVEUpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZW5hYmxlT25lU3BhY2VPbmx5KGV2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtJbnB1dFN0cmluZ0VudW0uREVTQ1JJUFRJT05dLmluY2x1ZGVzKFxuICAgICAgICA8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5ERVNDUklQVElPTilcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlQ29uc2VjdXRpdmVseVNwYWNlcyhldmVudCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbSW5wdXRTdHJpbmdFbnVtLkFMTE9XX0FMTF0uaW5jbHVkZXMoXG4gICAgICAgIDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmICgvLiovPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKSkgcmV0dXJuIHRydWU7XG5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0lucHV0U3RyaW5nRW51bS5EQkFfTkFNRV0uaW5jbHVkZXMoXG4gICAgICAgIDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLkRCQV9OQU1FKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0lucHV0U3RyaW5nRW51bS5QRVJfTUlMRV0uaW5jbHVkZXMoXG4gICAgICAgIDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLlBFUl9NSUxFKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLmRpc2FibGVNdWx0aXBsZVBvaW50cyhldmVudCk7XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIG1heCBsZW5ndGhcbiAgICAgICAgaWYgKHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlPy50b1N0cmluZygpLmluY2x1ZGVzKCcuJykpXG4gICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5tYXhMZW5ndGggPSA0O1xuICAgICAgICBlbHNlIHRoaXMuaW5wdXRDb25maWcubWF4TGVuZ3RoID0gMjtcblxuICAgICAgICAvLyBDaGVjayBmb3IgcmFuZ2VcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlID4gdGhpcy5pbnB1dENvbmZpZy5tYXghIHx8XG4gICAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUgPCB0aGlzLmlucHV0Q29uZmlnLm1pbiFcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKHsgaW52YWxpZDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5QRVJfU1RPUCxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkZMQVRfUkFURSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlBFUl9MT0FELFxuICAgICAgXS5pbmNsdWRlcyg8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uUEVSX1NUT1ApXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMudGltZW91dENsZWFuZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUpIHtcbiAgICAgICAgICAgIGxldCBwZXJTdG9wVmFsdWUgPSB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZS5yZXBsYWNlKFxuICAgICAgICAgICAgICAvLC9nLFxuICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgcGVyU3RvcFZhbHVlID4gdGhpcy5pbnB1dENvbmZpZy5tYXghIHx8XG4gICAgICAgICAgICAgIHBlclN0b3BWYWx1ZSA8IHRoaXMuaW5wdXRDb25maWcubWluIVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7IGludmFsaWQ6IHRydWUgfSk7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0lucHV0U3RyaW5nRW51bS5SRUxBVElPTlNISVAsIElucHV0U3RyaW5nRW51bS5TQ0FDXS5pbmNsdWRlcyhcbiAgICAgICAgPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uRU1FUkdFTkNZX05BTUUpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbSW5wdXRTdHJpbmdFbnVtLkVNRVJHRU5DWV9OQU1FXS5pbmNsdWRlcyhcbiAgICAgICAgPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uRU1FUkdFTkNZX05BTUUpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZUNvbnNlY3V0aXZlbHlTcGFjZXMoZXZlbnQpO1xuICAgICAgICB0aGlzLmVuYWJsZU9uZVNwYWNlT25seShldmVudCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbSW5wdXRTdHJpbmdFbnVtLkZVTExfQ09OVEFDVF9OQU1FXS5pbmNsdWRlcyhcbiAgICAgICAgPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uRlVMTF9DT05UQUNUX05BTUUpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbSW5wdXRTdHJpbmdFbnVtLkZVRUxfU1RPUkVdLmluY2x1ZGVzKFxuICAgICAgICA8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5GVUVMX1NUT1JFKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0lucHV0U3RyaW5nRW51bS5IT1NdLmluY2x1ZGVzKFxuICAgICAgICA8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgICF0aGlzLmlucHV0U2VsZWN0aW9uICYmXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5IT1MpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUgKiAxMCArIGV2ZW50LmNoYXJDb2RlIC0gNDggPD1cbiAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm1heCFcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0U2VsZWN0aW9uKSB7XG4gICAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmlucHV0U2VsZWN0aW9uID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW1xuICAgICAgICBJbnB1dFN0cmluZ0VudW0uRlVMTF9QQVJLSU5HX1NMT1QsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5QQVJLSU5HX1NMT1QsXG4gICAgICBdLmluY2x1ZGVzKDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5GVUxMX1BBUktJTkdfU0xPVClcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbSW5wdXRTdHJpbmdFbnVtLkNETF9OVU1CRVJdLmluY2x1ZGVzKFxuICAgICAgICA8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5DRExfTlVNQkVSKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLmVuYWJsZU9uZVNwYWNlT25seShldmVudCk7XG4gICAgICAgIHRoaXMuZGlzYWJsZUNvbnNlY3V0aXZlbHlTcGFjZXMoZXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBbGwgU2ltYm9sc1xuICAgIGlmIChcbiAgICAgIFtcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlVTRVJOQU1FLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uTklDS05BTUUsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5QQVNTV09SRCxcbiAgICAgIF0uaW5jbHVkZXMoPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKSlcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLlVTRVJOQU1FKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBlbHNlIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtJbnB1dFN0cmluZ0VudW0uRlVMTF9OQU1FXS5pbmNsdWRlcyhcbiAgICAgICAgPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uRlVMTF9OQU1FKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLmVuYWJsZU9uZVNwYWNlT25seShldmVudCk7XG4gICAgICAgIHRoaXMuZGlzYWJsZU11bHRpcGxlUG9pbnRzKGV2ZW50KTtcbiAgICAgICAgdGhpcy5kaXNhYmxlQ29uc2VjdXRpdmVseVNwYWNlcyhldmVudCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtJbnB1dFN0cmluZ0VudW0uVE9MTF9WQUxJREFUSU9OXS5pbmNsdWRlcyhcbiAgICAgICAgPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uVE9MTF9WQUxJREFUSU9OKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBlbHNlIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEp1c3QgY2hhcmFjdGVycyBhbmQgbnVtYmVyc1xuICAgIGlmIChcbiAgICAgIFtcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlBSRUZJWCxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlNVRkZJWCxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlBBUktJTkdfTkFNRSxcbiAgICAgIF0uaW5jbHVkZXMoPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKSlcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLlBSRUZJWClcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbSW5wdXRTdHJpbmdFbnVtLkZVTExfTkFNRV0uaW5jbHVkZXMoXG4gICAgICAgIDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLkZVTExfTkFNRSlcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlQ29uc2VjdXRpdmVseVNwYWNlcyhldmVudCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtJbnB1dFN0cmluZ0VudW0uSU5TVVJFUl9OQU1FLCBJbnB1dFN0cmluZ0VudW0uT0ZGSUNFX05BTUVdLmluY2x1ZGVzKFxuICAgICAgICA8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5QUk9EVUNFUl9OQU1FKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLmRpc2FibGVNdWx0aXBsZVBvaW50cyhldmVudCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtJbnB1dFN0cmluZ0VudW0uSU5QVVRfRFJPUERPV05fTEFCRUxdLmluY2x1ZGVzKFxuICAgICAgICA8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICB0aGlzLmRpc2FibGVDb25zZWN1dGl2ZWx5U3BhY2VzKGV2ZW50KTtcbiAgICAgIHRoaXMuZGlzYWJsZUNvbnNlY3V0aXZlbHlQb2ludHMoZXZlbnQpO1xuICAgIH1cblxuICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZS50cmltKCk7XG4gIH1cblxuICBwcml2YXRlIGVuYWJsZU9uZVNwYWNlT25seShldmVudDogYW55KSB7XG4gICAgaWYgKFxuICAgICAgL15cXHMqJC8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSkgfHxcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlPy5pbmNsdWRlcygnICcpXG4gICAgKSB7XG4gICAgICB0aGlzLm9uZVNwYWNlT25seUNvdW50ZXIrKztcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLm9uZVNwYWNlT25seUNvdW50ZXIgPiAxICYmXG4gICAgICAvXlxccyokLy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzYWJsZUNvbnNlY3V0aXZlbHlTcGFjZXMoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGlucHV0RWxlbWVudCA9IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuXG4gICAgLy8gR2V0IGN1cnNvciBwb3NpdGlvblxuICAgIGNvbnN0IGN1cnNvclBvc2l0aW9uID0gaW5wdXRFbGVtZW50LnNlbGVjdGlvblN0YXJ0IGFzIG51bWJlcjtcblxuICAgIC8vIElmIHRoZSBjdXJzb3IgaXMgaW4gdGhlIG1pZGRsZSBvZiBhIHdvcmQsIGFsbG93IHNwYWNlc1xuICAgIGlmIChcbiAgICAgIGN1cnNvclBvc2l0aW9uID4gMCAmJlxuICAgICAgIS9cXHMvLnRlc3QoaW5wdXRFbGVtZW50LnZhbHVlW2N1cnNvclBvc2l0aW9uIC0gMV0pICYmXG4gICAgICAhL1xccy8udGVzdChpbnB1dEVsZW1lbnQudmFsdWVbY3Vyc29yUG9zaXRpb25dKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSB1c2VyIGlzIHR5cGluZyBhIHNwYWNlIGFuZCB0aGUgcHJldmlvdXMgY2hhcmFjdGVyIGlzIGEgc3BhY2UsIHByZXZlbnQgdGhlIGRlZmF1bHQgYmVoYXZpb3JcbiAgICBpZiAoXG4gICAgICBldmVudC5rZXkgPT09ICcgJyAmJlxuICAgICAgL1xccy8udGVzdChpbnB1dEVsZW1lbnQudmFsdWVbY3Vyc29yUG9zaXRpb24gLSAxXSlcbiAgICApIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgLy8gU2F2ZSB0aGUgY3Vyc29yIHBvc2l0aW9uIGZvciB0aGUgbmV4dCBpbnB1dCBldmVudFxuICAgIHRoaXMubGFzdEN1cnNvclNwYWNlUG9zaXRpb24gPSBjdXJzb3JQb3NpdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgZGlzYWJsZUNvbnNlY3V0aXZlbHlQb2ludHMoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHwgYm9vbGVhbiB7XG4gICAgaWYgKC9eWy5dKiQvLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpKSB7XG4gICAgICB0aGlzLm51bWJlck9mQ29uc2VjdXRpdmVseVBvaW50cysrO1xuICAgICAgaWYgKHRoaXMubnVtYmVyT2ZDb25zZWN1dGl2ZWx5UG9pbnRzID4gMSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubnVtYmVyT2ZDb25zZWN1dGl2ZWx5UG9pbnRzID0gMDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRpc2FibGVNdWx0aXBsZVBvaW50cyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQgfCBib29sZWFuIHtcbiAgICBpZiAoL15bLl0qJC8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSkpIHtcbiAgICAgIGlmICghdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJy4nKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubnVtYmVyT2ZQb2ludHMrKztcbiAgICAgIGlmICh0aGlzLm51bWJlck9mUG9pbnRzID4gMSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubnVtYmVyT2ZQb2ludHMgPSAwO1xuICAgIH1cbiAgfVxuICAvLyAtLS0tLS0tIGVuZFxuXG4gIHB1YmxpYyBvbkNvbW1hbmRzKGV2ZW50OiBFdmVudCwgdHlwZTogc3RyaW5nLCBhY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgSW5wdXRDb21tYW5kc1R5cGUuUE1fSU5DUkVNRU5UX0RFQ1JFTUVOVDpcbiAgICAgICAgdGhpcy5oYW5kbGVQbUluY3JlbWVudERlY3JlbWVudChhY3Rpb24pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgSW5wdXRDb21tYW5kc1R5cGUuQ09ORklSTV9DQU5DRUw6XG4gICAgICAgIHRoaXMuaGFuZGxlQ29uZmlybUNhbmNlbChhY3Rpb24pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgSW5wdXRDb21tYW5kc1R5cGUuTU9OVEhTOlxuICAgICAgICB0aGlzLmhhbmRsZU1vbnRocyhhY3Rpb24pO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUG1JbmNyZW1lbnREZWNyZW1lbnQoYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZSA9IE1ldGhvZHNDYWxjdWxhdGlvbnNIZWxwZXIuY29udmVydFRob3VzYW5TZXBJbk51bWJlcihcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlXG4gICAgKTtcblxuICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICBjYXNlIElucHV0Q29tbWFuZHNBY3Rpb24uREVDUkVNRU5UOlxuICAgICAgICB0aGlzLmRlY3JlbWVudFBtVmFsdWUodmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgSW5wdXRDb21tYW5kc0FjdGlvbi5JTkNSRU1FTlQ6XG4gICAgICAgIHRoaXMuaW5jcmVtZW50UG1WYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBJbnB1dENvbW1hbmRzQWN0aW9uLlJFU0VUOlxuICAgICAgICB0aGlzLnJlc2V0UG1WYWx1ZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMuc2V0SW5wdXRDdXJzb3JBdFRoZUVuZCh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWNyZW1lbnRQbVZhbHVlKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUgPj0gMTAwMDAgJiYgdmFsdWUgPCAyMDAwMCkge1xuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgTWV0aG9kc0NhbGN1bGF0aW9uc0hlbHBlci5jb252ZXJ0TnVtYmVySW5UaG91c2FuZFNlcCh2YWx1ZSAtIDEwMDApXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gMjAwMDEgJiYgdmFsdWUgPCA1MDAwMCkge1xuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgTWV0aG9kc0NhbGN1bGF0aW9uc0hlbHBlci5jb252ZXJ0TnVtYmVySW5UaG91c2FuZFNlcCh2YWx1ZSAtIDMwMDApXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gNTAwMDEgJiYgdmFsdWUgPCAxMDAwMDApIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgIE1ldGhvZHNDYWxjdWxhdGlvbnNIZWxwZXIuY29udmVydE51bWJlckluVGhvdXNhbmRTZXAodmFsdWUgLSA1MDAwKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID49IDEwMDAwKSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICBNZXRob2RzQ2FsY3VsYXRpb25zSGVscGVyLmNvbnZlcnROdW1iZXJJblRob3VzYW5kU2VwKHZhbHVlIC0gMTAwMDApXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gMTAwMCkge1xuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgTWV0aG9kc0NhbGN1bGF0aW9uc0hlbHBlci5jb252ZXJ0TnVtYmVySW5UaG91c2FuZFNlcCh2YWx1ZSAtIDUwMClcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbmNyZW1lbnRQbVZhbHVlKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUgPiAxMDAwMCAmJiB2YWx1ZSA8IDIwMDAwKSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICBNZXRob2RzQ2FsY3VsYXRpb25zSGVscGVyLmNvbnZlcnROdW1iZXJJblRob3VzYW5kU2VwKHZhbHVlICsgMTAwMClcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAyMDAwMSAmJiB2YWx1ZSA8IDUwMDAwKSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICBNZXRob2RzQ2FsY3VsYXRpb25zSGVscGVyLmNvbnZlcnROdW1iZXJJblRob3VzYW5kU2VwKHZhbHVlICsgMzAwMClcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA+PSA1MDAwMSAmJiB2YWx1ZSA8IDEwMDAwMCkge1xuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgTWV0aG9kc0NhbGN1bGF0aW9uc0hlbHBlci5jb252ZXJ0TnVtYmVySW5UaG91c2FuZFNlcCh2YWx1ZSArIDUwMDApXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gMTAwMDApIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgIE1ldGhvZHNDYWxjdWxhdGlvbnNIZWxwZXIuY29udmVydE51bWJlckluVGhvdXNhbmRTZXAodmFsdWUgKyAxMDAwMClcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgIE1ldGhvZHNDYWxjdWxhdGlvbnNIZWxwZXIuY29udmVydE51bWJlckluVGhvdXNhbmRTZXAodmFsdWUgKyA1MDApXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRQbVZhbHVlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnPy5kZWZhdWx0VmFsdWUpIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUodGhpcy5pbnB1dENvbmZpZz8uZGVmYXVsdFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNvbmZpcm1DYW5jZWwoYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgY2FzZSBJbnB1dENvbW1hbmRzQWN0aW9uLkNPTkZJUk06XG4gICAgICAgIHRoaXMuY29uZmlybUNvbW1hbmQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIElucHV0Q29tbWFuZHNBY3Rpb24uQ0FOQ0VMOlxuICAgICAgICB0aGlzLmNhbmNlbENvbW1hbmQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMobnVsbCk7XG4gICAgdGhpcy5pbnB1dENvbmZpZy5kcm9wZG93bkxhYmVsTmV3ID0gZmFsc2U7XG4gICAgdGhpcy5pbnB1dENvbmZpZy5jb21tYW5kcyEuYWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5pbnB1dENvbmZpZy5ibGFja0lucHV0ID0gZmFsc2U7XG4gICAgdGhpcy5zZXRJc0VkaXRJbnB1dChmYWxzZSk7XG4gICAgdGhpcy5zZXRJc1Zpc2libGVDb21tYW5kcyhmYWxzZSk7XG4gICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25maXJtQ29tbWFuZCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldENvbW1hbmRFdmVudCh7XG4gICAgICBkYXRhOiB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSxcbiAgICAgIGFjdGlvbjogSW5wdXRDb21tYW5kc0FjdGlvbi5DT05GSVJNLFxuICAgICAgbW9kZTpcbiAgICAgICAgIXRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbE5ldyAmJlxuICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgIT09ICdJbnB1dCBEcm9wZG93biBCYW5rIE5hbWUnXG4gICAgICAgICAgPyAnZWRpdCdcbiAgICAgICAgICA6ICduZXcnLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5jZWxDb21tYW5kKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0Q29tbWFuZEV2ZW50KHsgYWN0aW9uOiBJbnB1dENvbW1hbmRzQWN0aW9uLkNBTkNFTCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlTW9udGhzKGFjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuaW5wdXRDb21tYW5kc1RpbWVvdXQpO1xuXG4gICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgIGNhc2UgSW5wdXRDb21tYW5kc0FjdGlvbi5NSU5VUzpcbiAgICAgICAgdGhpcy5kZWNyZW1lbnRNb250aCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgSW5wdXRDb21tYW5kc0FjdGlvbi5QTFVTOlxuICAgICAgICB0aGlzLmluY3JlbWVudE1vbnRoKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcGFyc2VJbnQodGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUpIDwgMSB8fFxuICAgICAgcGFyc2VJbnQodGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUpID4gMTJcbiAgICApIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7IGludmFsaWQ6IHRydWUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyhudWxsKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldElucHV0Q3Vyc29yQXRUaGVFbmQodGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgZGVjcmVtZW50TW9udGgoKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgcGFyc2VJbnQodGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUpID09PSAxIHx8XG4gICAgICAhdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWVcbiAgICApIHtcbiAgICAgIHRoaXMuYmx1ck9uQ29tbWFuZHMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgKHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlXG4gICAgICAgID8gcGFyc2VJbnQodGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUpXG4gICAgICAgIDogMCkgLSAxXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5jcmVtZW50TW9udGgoKTogdm9pZCB7XG4gICAgaWYgKHBhcnNlSW50KHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKSA9PT0gMTIpIHtcbiAgICAgIHRoaXMuYmx1ck9uQ29tbWFuZHMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgKHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlXG4gICAgICAgID8gcGFyc2VJbnQodGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUpXG4gICAgICAgIDogMCkgKyAxXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkZvY3VzKGV2ZW50PzogRm9jdXNFdmVudCkge1xuICAgIC8vIERyb3BEb3duIExhYmVsXG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbCkge1xuICAgICAgdGhpcy5pbnB1dENvbmZpZy5wbGFjZWhvbGRlckljb24gPSBJbnB1dFN2Z1JvdXRlcy5keW5hbWljRm9jdXNMYWJlbFN2ZztcbiAgICB9XG5cbiAgICAvLyBEYXRlcGlja2VyXG4gICAgaWYgKHRoaXMuaXNEYXRlVGltZVBpY2tlcigpICYmICF0aGlzLmlucHV0Q29uZmlnLmlzRGlzYWJsZWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRhdGVUaW1lTWFpblRpbWVyKTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmZvY3VzQmx1cik7XG4gICAgICB0aGlzLnNldFNob3dEYXRlSW5wdXQodHJ1ZSk7XG4gICAgICBpZiAoXG4gICAgICAgICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAtMSAmJlxuICAgICAgICAgIChldmVudD8udGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8ubm9kZU5hbWUgPT09ICdJTlBVVCcpIHx8XG4gICAgICAgIChldmVudD8ucmVsYXRlZFRhcmdldCBhcyBIVE1MRWxlbWVudCk/Lm5vZGVOYW1lID09PSAnSU5QVVQnIHx8XG4gICAgICAgIGV2ZW50Py5yZWxhdGVkVGFyZ2V0ID09PSBudWxsXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5wcmV2ZW50Qmx1ciA9IHRydWU7XG4gICAgICAgIHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcbiAgICAgIH1cblxuICAgICAgdGhpcy50Mi50b2dnbGUoKTtcbiAgICB9XG5cbiAgICAvLyBEcm9wZG93blxuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmlzRHJvcGRvd24pIHtcbiAgICAgIHRoaXMuc2V0SXNEcm9wZG93blRvZ2dsZXIodHJ1ZSk7XG4gICAgICB0aGlzLnNldFNob3dIaWRlRHJvcGRvd24odGhpcy5pc0Ryb3Bkb3duVG9nZ2xlclN1YmplY3QudmFsdWUpO1xuICAgIH1cblxuICAgIC8vIENvbW1hbmRzXG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcuY29tbWFuZHMgJiYgIXRoaXMuaW5wdXRDb25maWcuaXNEaXNhYmxlZCkge1xuICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcuY29tbWFuZHMudHlwZSA9PT0gSW5wdXRDb21tYW5kc1R5cGUuTU9OVEhTKSB7XG4gICAgICAgIGlmICghdGhpcy5pbnB1dENvbmZpZy5ibHVlSW5wdXQpIHRoaXMuaW5wdXRDb25maWcuYmxhY2tJbnB1dCA9IHRydWU7XG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcuY29tbWFuZHMuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXRJc1Zpc2libGVDb21tYW5kcyh0cnVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzLnR5cGUgPT09XG4gICAgICAgIElucHV0Q29tbWFuZHNUeXBlLlBNX0lOQ1JFTUVOVF9ERUNSRU1FTlRcbiAgICAgICkge1xuICAgICAgICB0aGlzLmlucHV0Q29uZmlnLmJsYWNrSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5jb21tYW5kcy5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB0aGlzLnNldElzVmlzaWJsZUNvbW1hbmRzKHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KHRydWUpO1xuICB9XG5cbiAgcHVibGljIG9uQmx1cihldmVudD86IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBEcm9wRG93biBMYWJlbFxuXG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbCAmJiAhdGhpcy5pc0VkaXRJbnB1dFN1YmplY3QudmFsdWUpXG4gICAgICB0aGlzLmlucHV0Q29uZmlnLnBsYWNlaG9sZGVySWNvbiA9IElucHV0U3ZnUm91dGVzLmR5bmFtaWNMYWJlbFN2ZztcblxuICAgIC8vIEVkaXQgSW5wdXRcbiAgICBpZiAodGhpcy5pc0VkaXRJbnB1dFN1YmplY3QudmFsdWUpIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7IGludmFsaWQ6IHRydWUgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRGF0ZXBpY2tlcjtcbiAgICBpZiAodGhpcy5wcmV2ZW50Qmx1cikge1xuICAgICAgdGhpcy5wcmV2ZW50Qmx1ciA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEJhbmtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09XG4gICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLklOUFVUX0RST1BET1dOX0JBTktfTkFNRVxuICAgIClcbiAgICAgIHRoaXMuaW5wdXRDb25maWcuYmxhY2tJbnB1dCA9IGZhbHNlO1xuXG4gICAgLy8gUHJpY2UgU2VwYXJhdG9yIC0gcmVtb3ZlIGRvdCBvbiBmb2N1cyBvdXRcbiAgICBpZiAoXG4gICAgICB0aGlzLmlucHV0Q29uZmlnLnByaWNlU2VwYXJhdG9yICYmXG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSAmJlxuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWU/LmluZGV4T2YoJy4nKSA+PSAwXG4gICAgKSB7XG4gICAgICAvLyA0LjEuIENoZWNrIGZvciBEb3QgcG9zaXRpb25cbiAgICAgIHRoaXMuaGFzRGVjaW1hbEluZGV4ID0gdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUuaW5kZXhPZignLicpO1xuXG4gICAgICBsZXQgaW50ZWdlclBhcnQgPSB0aGlzLnRob3VzYW5kU2VwYXJhdG9yUGlwZS50cmFuc2Zvcm0oXG4gICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlXG4gICAgICAgICAgLnNsaWNlKDAsIHRoaXMuaGFzRGVjaW1hbEluZGV4KVxuICAgICAgICAgIC5zbGljZSgwLCB0aGlzLmlucHV0Q29uZmlnLnByaWNlU2VwYXJhdG9yTGltaXRhdGlvbilcbiAgICAgICk7XG5cbiAgICAgIGxldCBkZWNpbWFsUGFydCA9IHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlLnNsaWNlKFxuICAgICAgICB0aGlzLmhhc0RlY2ltYWxJbmRleCArIDFcbiAgICAgICk7XG5cbiAgICAgIC8vIDQuNC4gR2V0IG9ubHkgdHdvIG51bWJlcnMgb2YgZGVjaW1hbCBwYXJ0XG4gICAgICBkZWNpbWFsUGFydCA9IGRlY2ltYWxQYXJ0LnNsaWNlKDAsIDIpO1xuXG4gICAgICBpZiAoIWRlY2ltYWxQYXJ0KSB7XG4gICAgICAgIHRoaXMuaGFzRGVjaW1hbEluZGV4ID0gLTE7XG4gICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoaW50ZWdlclBhcnQpO1xuICAgICAgICB0aGlzLm51bWJlck9mUG9pbnRzID0gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJbnB1dCBDb21tYW5kc1xuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzKSB7XG4gICAgICB0aGlzLmJsdXJPbkNvbW1hbmRzKCk7XG4gICAgfVxuXG4gICAgLy8gRHJvcGRvd25cbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5pc0Ryb3Bkb3duIHx8IHRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbCkge1xuICAgICAgaWYgKFxuICAgICAgICAodGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSIHx8XG4gICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLlRJTUVfUElDS0VSIHx8XG4gICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PVxuICAgICAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkQpICYmXG4gICAgICAgICF0aGlzLmlucHV0Q29uZmlnLmlzRGlzYWJsZWRcbiAgICAgICkge1xuICAgICAgICBpZiAoKGV2ZW50Py50YXJnZXQgYXMgSFRNTEVsZW1lbnQpPy5ub2RlTmFtZSA9PT0gJ0lOUFVUJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBEYXRlcGlja2VyXG4gICAgICAgIGlmICh0aGlzLmlzRGF0ZVRpbWVQaWNrZXIoKSkge1xuICAgICAgICAgIHRoaXMuZm9jdXNCbHVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJsdXJPbkRhdGVUaW1lKCk7XG4gICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYmx1ck9uRHJvcERvd25BcnJvdygpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBOb3JtYWwsIHdpdGhvdXQgZHJvcGRvd25cbiAgICBlbHNlIHtcbiAgICAgIGxldCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICBzZWxlY3Rpb24/LnJlbW92ZUFsbFJhbmdlcygpO1xuXG4gICAgICAvLyBJbnB1dCBDb21tYW5kc1xuICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcuY29tbWFuZHMpIHRoaXMuYmx1ck9uQ29tbWFuZHMoKTtcblxuICAgICAgLy8gUGFzc3dvcmRcbiAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLnR5cGUgPT09ICdwYXNzd29yZCcpIHRoaXMuYmx1ck9uUGFzc3dvcmQoKTtcbiAgICAgIC8vIE5vcm1hbCBmb2N1cyBvdXRcbiAgICAgIGVsc2UgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0Qmx1cklucHV0KHRydWUpO1xuICAgIHRoaXMuc2V0SXNUb3VjaGVkSW5wdXQodHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIGJsdXJPbkNvbW1hbmRzKCk6IHZvaWQge1xuICAgIHRoaXMuaW5wdXRDb21tYW5kc1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaW5wdXRDb25maWcuY29tbWFuZHMhLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXRJc1Zpc2libGVDb21tYW5kcyhmYWxzZSk7XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLmJsYWNrSW5wdXQgPSBmYWxzZTtcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDIwMCk7XG4gIH1cblxuICBwcml2YXRlIGJsdXJPbkRyb3BEb3duQXJyb3coKTogdm9pZCB7XG4gICAgdGhpcy50aW1lb3V0Q2xlYW5lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zZXRJc0Ryb3Bkb3duVG9nZ2xlcihmYWxzZSk7XG4gICAgICB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG5cbiAgICAgIHRoaXMuc2V0SXNEcm9wZG93blRvZ2dsZXIoZmFsc2UpO1xuICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgICAgdGhpcy5zZXRTaG93SGlkZURyb3Bkb3duKHRoaXMuaXNEcm9wZG93blRvZ2dsZXJTdWJqZWN0LnZhbHVlKTtcbiAgICB9LCAxNTApO1xuICB9XG5cbiAgcHVibGljIGJsdXJPblBhc3N3b3JkKCkge1xuICAgIHRoaXMucGFzc3dvcmRUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMTUwKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRJbnB1dEN1cnNvckF0VGhlRW5kKGlucHV0OiBhbnksIHRpbWU6IG51bWJlciA9IDEyMCk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGlvbkVuZCA9IGlucHV0LnNlbGVjdGlvbkVuZDtcbiAgICBpZiAoaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2UpIHtcbiAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKHNlbGVjdGlvbkVuZCwgc2VsZWN0aW9uRW5kKTtcbiAgICB9XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpbnB1dC5mb2N1cygpO1xuICAgIH0sIHRpbWUpO1xuICB9XG5cbiAgcHVibGljIG9uRWRpdElucHV0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICB0aGlzLnNldElzRWRpdElucHV0KHRydWUpO1xuICAgIHRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbE5ldyA9IGZhbHNlO1xuICAgIGlmICghdGhpcy5pbnB1dENvbmZpZy5ibHVlSW5wdXQpIHRoaXMuaW5wdXRDb25maWcuYmxhY2tJbnB1dCA9IHRydWU7XG4gICAgdGhpcy5pbnB1dENvbmZpZy5jb21tYW5kcyEuYWN0aXZlID0gdHJ1ZTtcbiAgICB0aGlzLnNldElzVmlzaWJsZUNvbW1hbmRzKHRydWUpO1xuICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KHRydWUpO1xuXG4gICAgdGhpcy5zZXRJbnB1dEN1cnNvckF0VGhlRW5kKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCk7XG4gICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKHsgcmVxdWlyZWQ6IHRydWUgfSk7XG5cbiAgICB0aGlzLnNldENvbW1hbmRFdmVudCh7XG4gICAgICBkYXRhOiB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSxcbiAgICAgIGFjdGlvbjogJ0VkaXQgSW5wdXQnLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNldFZpZXdDaGlsZHMoXG4gICAgc3Bhbk9uZTogRWxlbWVudFJlZixcbiAgICBzcGFuVHdvOiBFbGVtZW50UmVmLFxuICAgIHNwYW5UaHJlZTogRWxlbWVudFJlZixcbiAgICBob2xkZXIxOiBFbGVtZW50UmVmXG4gICk6IHZvaWQge1xuICAgIHRoaXMuc3Bhbk9uZSA9IHNwYW5PbmU7XG4gICAgdGhpcy5zcGFuVHdvID0gc3BhblR3bztcbiAgICB0aGlzLnNwYW5UaHJlZSA9IHNwYW5UaHJlZTtcbiAgICB0aGlzLmhvbGRlcjEgPSBob2xkZXIxO1xuICB9XG5cbiAgcHVibGljIHNldFZpZXdDaGlsZHNQb3BvdmVyKFxuICAgIHQyOiBOZ2JQb3BvdmVyLFxuICAgIG5nYk1haW5Qb3BvdmVyOiBOZ2JQb3BvdmVyXG4gICk6IHZvaWQge1xuICAgIHRoaXMudDIgPSB0MjtcbiAgICB0aGlzLm5nYk1haW5Qb3BvdmVyID0gbmdiTWFpblBvcG92ZXI7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlRHJvcGRvd25PcHRpb25zKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmlzRGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVIgfHxcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5USU1FX1BJQ0tFUiB8fFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgIClcbiAgICAgIGlmICh0aGlzLnQyKSB7XG4gICAgICAgIGlmICghdGhpcy50Mi5pc09wZW4oKSkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRhdGVUaW1lTWFpblRpbWVyKTtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0JsdXIpO1xuICAgICAgICAgIHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IC0xO1xuICAgICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgdGhpcy50Mi5vcGVuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgICAgICAgICBsZXQgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgdGhpcy5zZXRJc0Ryb3Bkb3duVG9nZ2xlcighdGhpcy5pc0Ryb3Bkb3duVG9nZ2xlclN1YmplY3QudmFsdWUpO1xuXG4gICAgdGhpcy5zZXRTaG93SGlkZURyb3Bkb3duKHRoaXMuaXNEcm9wZG93blRvZ2dsZXJTdWJqZWN0LnZhbHVlKTtcblxuICAgIGlmICh0aGlzLmlzRHJvcGRvd25Ub2dnbGVyU3ViamVjdC52YWx1ZSkge1xuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICB0aGlzLnNldElzRm9jdXNJbnB1dCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25QbGFjZWhvbGRlckljb25FdmVudChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICh0aGlzLmlzRWRpdElucHV0U3ViamVjdC52YWx1ZSkge1xuICAgICAgdGhpcy5zZXRDb21tYW5kRXZlbnQoe1xuICAgICAgICBkYXRhOiB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSxcbiAgICAgICAgYWN0aW9uOiAnVG9nZ2xlIERyb3Bkb3duJyxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldENvbW1hbmRFdmVudCh7XG4gICAgICAgIGRhdGE6IHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlLFxuICAgICAgICBhY3Rpb246ICdQbGFjZWhvbGRlciBJY29uIEV2ZW50JyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbklucHV0Q29uZmlnQ2hhbmdlKCk6IHZvaWQge1xuICAgIC8vIFByaWNlIFNlcGFyYXRvclxuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLnByaWNlU2VwYXJhdG9yKSB7XG4gICAgICB0aGlzLm9yaWdpblByaWNlU2VwYXJhdG9yTGltaXQgPVxuICAgICAgICB0aGlzLmlucHV0Q29uZmlnLnByaWNlU2VwYXJhdG9yTGltaXRhdGlvbjtcbiAgICB9XG5cbiAgICAvLyBDdXN0b20gUmFuZ2VcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5pc1VzaW5nQ3VzdG9tUGVyaW9kUmFuZ2UpIHtcbiAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmlzRGlzcGxheWluZ0N1c3RvbVBlcmlvZFJhbmdlKVxuICAgICAgICB0aGlzLnNldElzRm9jdXNJbnB1dCh0cnVlKTtcbiAgICAgIGVsc2UgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgIH1cblxuICAgIC8vIERhdGVQaWNrZXJcbiAgICBpZiAoXG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVIgfHxcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5USU1FX1BJQ0tFUiB8fFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICkge1xuICAgICAgdGhpcy5zZXRUaW1lUGlja2VyVGltZSgpO1xuICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuZGF0ZUNoYW5nZWRcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAuc3Vic2NyaWJlKChkYXRlKSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLmlucHV0Q29uZmlnLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VGltZURhdGVJbnB1dChkYXRlKTtcbiAgICAgICAgICAgIHRoaXMudDIuY2xvc2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFdoZW4gYWRkIG1vZGUgaW4gZHJvcGRvd25cbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5jb21tYW5kcz8uYWN0aXZlICYmICF0aGlzLmlucHV0Q29uZmlnLmlzRGlzYWJsZWQpIHtcbiAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzLnR5cGUgPT09ICdjb25maXJtLWNhbmNlbCcpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlucHV0Q29uZmlnLmJsdWVJbnB1dCkgdGhpcy5pbnB1dENvbmZpZy5ibGFja0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXRJc1Zpc2libGVDb21tYW5kcyh0cnVlKTtcbiAgICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQodHJ1ZSk7XG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQpIHRoaXMuc2V0SXNDYXBzTG9ja09uKGV2ZW50Py5nZXRNb2RpZmllclN0YXRlPy4oJ0NhcHNMb2NrJykpO1xuXG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcucHJpY2VTZXBhcmF0b3IpIHtcbiAgICAgIGNvbnN0IHZhbHVlVG9TdHJpbmcgPSBTdHJpbmcodGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUpO1xuXG4gICAgICB0aGlzLmlzRG90RGVsZXRlZCA9IHZhbHVlVG9TdHJpbmc/LmluY2x1ZGVzKCcuJyk7XG4gICAgfVxuXG4gICAgLy8gRGlzYWJsZSBmb3IgcGhvbmUgZmllbGQgZmlyc3QgY2hhcmFjdGVyIHRvIGJlIDBcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IElucHV0U3RyaW5nRW51bS5QSE9ORSkge1xuICAgICAgaWYgKFxuICAgICAgICAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnNlbGVjdGlvblN0YXJ0ID09PSAwICYmXG4gICAgICAgIGV2ZW50LmtleSA9PT0gJzAnXG4gICAgICApIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gOSkge1xuICAgICAgdGhpcy5zZXREcm9wRG93bktleU5hdmlnYXRpb24oe1xuICAgICAgICBrZXlDb2RlOiBldmVudC5rZXlDb2RlLFxuICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uS2V5dXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIHRoaXMuc2V0SXNDYXBzTG9ja09uKGV2ZW50Py5nZXRNb2RpZmllclN0YXRlPy4oJ0NhcHNMb2NrJykpO1xuICAgIH1cbiAgICAvLyBSZXNldCBmdW5jdGlvbiBwcm9wZXJ0eSBmb3IgZGlzYWJsaW5nIG11bHRpcGxlIGRvdHNcbiAgICBjb25zdCB2YWx1ZVRvU3RyaW5nID0gU3RyaW5nKHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKTtcblxuICAgIGlmICh0aGlzLmlzRG90RGVsZXRlZCAmJiAhdmFsdWVUb1N0cmluZz8uaW5jbHVkZXMoJy4nKSlcbiAgICAgIHRoaXMubnVtYmVyT2ZQb2ludHMgPSAwO1xuXG4gICAgaWYgKFxuICAgICAgZXZlbnQua2V5Q29kZSA9PSA4ICYmXG4gICAgICAhKHRoaXMuaW5wdXRDb25maWcuaXNEcm9wZG93biB8fCB0aGlzLmlucHV0Q29uZmlnLmRyb3Bkb3duTGFiZWwpXG4gICAgKSB7XG4gICAgICAvLyBSZXNldCBNdWx0aXBsZSBDb25zZWN1dGl2ZWx5IFNwYWNlc1xuICAgICAgdGhpcy5udW1iZXJPZkNvbnNlY3V0aXZlbHlTcGFjZXMgPSAwO1xuXG4gICAgICAvLyBSZXNldCBPbmUgU3BhY2UgT25seVxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSAmJlxuICAgICAgICAhdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWU/LmluY2x1ZGVzKCcgJylcbiAgICAgICkge1xuICAgICAgICB0aGlzLm9uZVNwYWNlT25seUNvdW50ZXIgPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRoaXMuaW5wdXRDb25maWcuaXNEcm9wZG93biB8fFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5kcm9wZG93bkxhYmVsIHx8XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uQUREUkVTU1xuICAgICkge1xuICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDQwIHx8IGV2ZW50LmtleUNvZGUgPT09IDM4KSB7XG4gICAgICAgIHRoaXMuc2V0RHJvcERvd25LZXlOYXZpZ2F0aW9uKHtcbiAgICAgICAgICBrZXlDb2RlOiBldmVudC5rZXlDb2RlLFxuICAgICAgICAgIGRhdGE6IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDEzKSB7XG4gICAgICAgIHRoaXMuc2V0RHJvcERvd25LZXlOYXZpZ2F0aW9uKHtcbiAgICAgICAgICBrZXlDb2RlOiBldmVudC5rZXlDb2RlLFxuICAgICAgICAgIGRhdGE6IHRoaXMuaW5wdXRDb25maWcsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uQUREUkVTUykge1xuICAgICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSAyNykge1xuICAgICAgICB0aGlzLnNldElzVmlzaWJsZUNvbW1hbmRzKGZhbHNlKTtcbiAgICAgICAgdGhpcy5vbkJsdXIoKTtcbiAgICAgICAgdGhpcy5ibHVyT25Ecm9wRG93bkFycm93KCk7XG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgICAgIHRoaXMuc2V0RHJvcERvd25LZXlOYXZpZ2F0aW9uKHtcbiAgICAgICAgICBrZXlDb2RlOiBldmVudC5rZXlDb2RlLFxuICAgICAgICAgIGRhdGE6IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDkpIHtcbiAgICAgICAgdGhpcy5vbkZvY3VzKCk7XG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB0aGlzLnNldERyb3BEb3duS2V5TmF2aWdhdGlvbih7XG4gICAgICAgICAga2V5Q29kZTogZXZlbnQua2V5Q29kZSxcbiAgICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERhdGUgJiBUaW1lIFBpY2tlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHB1YmxpYyBzZXRUaW1lUGlja2VyVGltZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLlRJTUVfUElDS0VSKVxuICAgICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShcbiAgICAgICAgbmV3IERhdGUoXG4gICAgICAgICAgbW9tZW50KCkuZm9ybWF0KCdNTS9ERC9ZWVlZJykgK1xuICAgICAgICAgICAgKHRoaXMuaW5wdXRDb25maWc/LmlzRnJvbURhdGUgPyAnIDEyOjE1JyA6ICcgMTI6MDAnKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIHNldFRpbWVEYXRlSW5wdXQoZGF0ZTogSW5wdXRDaGFuZ2VWYWx1ZSk6IHZvaWQge1xuICAgIGxldCB0ZXh0LCBkYXRlRm9ybWF0LCB0aW1lRm9ybWF0O1xuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVIpIHtcbiAgICAgIHRleHQgPSBtb21lbnQobmV3IERhdGUoZGF0ZSkpLmZvcm1hdCgnTU0vREQvWVknKTtcbiAgICAgIGRhdGVGb3JtYXQgPSB0ZXh0LnNwbGl0KCcvJyk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICApIHtcbiAgICAgIHRleHQgPSBtb21lbnQobmV3IERhdGUoZGF0ZSkpLmZvcm1hdCgnTU0vREQvWVknKTtcbiAgICAgIGRhdGVGb3JtYXQgPSB0ZXh0LnNwbGl0KCcvJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGUgPVxuICAgICAgICBkYXRlIGluc3RhbmNlb2YgRGF0ZVxuICAgICAgICAgID8gZGF0ZVxuICAgICAgICAgIDogbmV3IERhdGUobW9tZW50KCkuZm9ybWF0KCdNTS9ERC9ZWVlZJykgKyAnICcgKyBkYXRlKTtcbiAgICAgIHRleHQgPSBtb21lbnQobmV3IERhdGUoZGF0ZSkpLmZvcm1hdCgnSEg6bW0nKTtcblxuICAgICAgdGltZUZvcm1hdCA9IG1vbWVudChuZXcgRGF0ZShkYXRlKSkuZm9ybWF0KCdoaC9tbS9BJyk7XG4gICAgICBkYXRlRm9ybWF0ID0gdGltZUZvcm1hdC5zcGxpdCgnLycpO1xuICAgIH1cblxuICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRleHQ7XG4gICAgdGhpcy5zZXRPbkNoYW5nZSh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUpO1xuICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcblxuICAgIGlmICh0aGlzLnNwYW5PbmUpIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGRhdGVGb3JtYXRbMF07XG5cbiAgICBpZiAodGhpcy5zcGFuVHdvKVxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgIT09XG4gICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gZGF0ZUZvcm1hdFsxXTtcbiAgICAgICAgdGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSBkYXRlRm9ybWF0WzJdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gZGF0ZUZvcm1hdFsyXTtcbiAgICAgIH1cblxuICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUobmV3IERhdGUoZGF0ZSkpO1xuICAgIHRoaXMuc2V0U2hvd0RhdGVJbnB1dCh0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldERhdGVUaW1lSW5wdXRzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNwYW5PbmUpXG4gICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSKSB7XG4gICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdtbSc7XG4gICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdkZCc7XG4gICAgICAgIHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ3l5JztcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT1cbiAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICAgICkge1xuICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnbW0nO1xuICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAneXknO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLlRJTUVfUElDS0VSXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ0hIJztcbiAgICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ01NJztcbiAgICAgICAgdGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnQU0nO1xuICAgICAgfVxuXG4gICAgdGhpcy5zZXRUaW1lUGlja2VyVGltZSgpO1xuICAgIHRoaXMubmV3SW5wdXRDaGFuZ2VkID0gdHJ1ZTtcbiAgICB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG4gICAgdGhpcy5zZXRTaG93RGF0ZUlucHV0KGZhbHNlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50KSB0aGlzLmlucHV0U2VsZWN0aW9uID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBvbkRhdGVQYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgY29uc3QgcGFzdGVUZXh0ID0gZXZlbnQuY2xpcGJvYXJkRGF0YT8uZ2V0RGF0YSgndGV4dCcpIGFzIHN0cmluZztcbiAgICBjb25zdCBwYXN0ZWREYXRlID0gbmV3IERhdGUocGFzdGVUZXh0KTtcbiAgICBpZiAoIWlzTmFOKHBhc3RlZERhdGUuZ2V0VGltZSgpKSkge1xuICAgICAgdGhpcy5zZXRUaW1lRGF0ZUlucHV0KHBhc3RlZERhdGUpO1xuICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCh0aGlzLnNlbGVjdGlvbklucHV0KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0U2VsZWN0aW9uKGV2ZW50OiB7XG4gICAgcHJldmVudERlZmF1bHQ6ICgpID0+IHZvaWQ7XG4gICAgc3RvcFByb3BhZ2F0aW9uOiAoKSA9PiB2b2lkO1xuICAgIHRhcmdldDogYW55O1xuICB9KTogdm9pZCB7XG4gICAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldDtcbiAgICB0aGlzLnNldElzRm9jdXNJbnB1dCh0cnVlKTtcblxuICAgIGNvbnN0IHNlbGVjdGlvbklucHV0ID0gcGFyc2VJbnQoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JykpO1xuXG4gICAgY29uc3QgY3VycmVudFNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcblxuICAgIGlmIChjdXJyZW50U2VsZWN0aW9uICYmIGN1cnJlbnRTZWxlY3Rpb24udG9TdHJpbmcoKS5sZW5ndGggPiAxMCkge1xuICAgICAgdGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50KTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRhdGVUaW1lTWFpblRpbWVyKTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmZvY3VzQmx1cik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuZGF0ZVRpbWVNYWluVGltZXIpO1xuICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnbWFpbicpKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gc2VsZWN0aW9uSW5wdXQ7XG4gICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24oZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAtMSkge1xuICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMDtcbiAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgodGhpcy5zZWxlY3Rpb25JbnB1dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldFNwYW5TZWxlY3Rpb24oZWxlbWVudDogTm9kZSk6IHZvaWQge1xuICAgIGxldCByYW5nZTogUmFuZ2U7XG4gICAgbGV0IHNlbGVjdGlvbjogU2VsZWN0aW9uIHwgbnVsbDtcblxuICAgIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uICYmIGRvY3VtZW50LmNyZWF0ZVJhbmdlKSB7XG4gICAgICBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWxlbWVudCk7XG4gICAgICBzZWxlY3Rpb24/LnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgc2VsZWN0aW9uPy5hZGRSYW5nZShyYW5nZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNob3dEYXRlVGltZVBsYWNlaG9sZGVyKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0U2hvd0RhdGVJbnB1dCh0cnVlKTtcbiAgICB0aGlzLnNldElzRm9jdXNJbnB1dCh0cnVlKTtcbiAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gLTE7XG5cbiAgICB0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwdWJsaWMgY2hhbmdlU2VsZWN0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBub1ByZXZlbnREZWZhdWx0ID0gZmFsc2UpOiB2b2lkIHtcbiAgICBpZiAoIW5vUHJldmVudERlZmF1bHQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc05hdmlnYXRpb25LZXkgPSB0aGlzLmlzTmF2aWdhdGlvbktleShldmVudCk7XG4gICAgY29uc3QgaXNTcGVjaWFsVGltZVBpY2tlcktleSA9XG4gICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID09PSAzICYmXG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uVElNRV9QSUNLRVI7XG5cbiAgICBpZiAoaXNOYXZpZ2F0aW9uS2V5IHx8IGlzU3BlY2lhbFRpbWVQaWNrZXJLZXkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmhhbmRsZU5hdmlnYXRpb25LZXkoZXZlbnQpO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNOdW1iZXIoZXZlbnQpKSB7XG4gICAgICBpZiAoIW5vUHJldmVudERlZmF1bHQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKCFub1ByZXZlbnREZWZhdWx0KSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAtMSkgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG5cbiAgICAgICAgdGhpcy5oYW5kbGVLZXlib2FyZElucHV0cyhldmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc05hdmlnYXRpb25LZXkoZTogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG5hdmlnYXRpb25LZXlzID0gWzM3LCAzOCwgMzksIDQwLCA4LCA5LCA0Nl07IC8vIEFycm93IGtleXMsIEJhY2tzcGFjZSwgVGFiLCBEZWxldGVcbiAgICByZXR1cm4gbmF2aWdhdGlvbktleXMuaW5jbHVkZXMoZS5rZXlDb2RlKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlTmF2aWdhdGlvbktleShldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xuICAgICAgY2FzZSAzNzogLy8gTGVmdCBhcnJvd1xuICAgICAgICB0aGlzLm1vdmVTZWxlY3Rpb25MZWZ0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzOTogLy8gUmlnaHQgYXJyb3dcbiAgICAgIGNhc2UgOTogLy8gVGFiXG4gICAgICAgIHRoaXMubW92ZVNlbGVjdGlvblJpZ2h0T3JUYWIoZXZlbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzg6IC8vIFVwIGFycm93XG4gICAgICAgIHRoaXMuc2V0RGF0ZVRpbWVNb2RlbCgndXAnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDQwOiAvLyBEb3duIGFycm93XG4gICAgICAgIHRoaXMuc2V0RGF0ZVRpbWVNb2RlbCgnZG93bicpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgODogLy8gQmFja3NwYWNlXG4gICAgICBjYXNlIDQ2OiAvLyBEZWxldGVcbiAgICAgICAgdGhpcy5oYW5kbGVLZXlib2FyZElucHV0cyhldmVudCwgdHJ1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbW92ZVNlbGVjdGlvbkxlZnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPiAwKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbklucHV0IC09IDE7XG4gICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KHRoaXMuc2VsZWN0aW9uSW5wdXQsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbW92ZVNlbGVjdGlvblJpZ2h0T3JUYWIoZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlzRGF0ZXBpY2tlckJhbmtDYXJkID1cbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkQ7XG4gICAgY29uc3QgbWF4SW5kZXggPSBpc0RhdGVwaWNrZXJCYW5rQ2FyZCA/IDEgOiAyO1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPCBtYXhJbmRleCAmJiAhZS5zaGlmdEtleSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCArPSAxO1xuICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCh0aGlzLnNlbGVjdGlvbklucHV0LCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKGUua2V5Q29kZSA9PT0gOSAmJiAhZS5zaGlmdEtleSkge1xuICAgICAgdGhpcy5mb2N1c05leHRJbnB1dCgpO1xuICAgIH0gZWxzZSBpZiAoZS5zaGlmdEtleSAmJiBlLmtleUNvZGUgPT09IDkpIHtcbiAgICAgIHRoaXMuZm9jdXNQcmV2aW91c0lucHV0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c05leHRJbnB1dCgpOiB2b2lkIHtcbiAgICBjb25zdCBhbGxJbnB1dHMgPSBBcnJheS5mcm9tKFxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQuaW5wdXQtY29udHJvbCcpXG4gICAgKSBhcyBIVE1MSW5wdXRFbGVtZW50W107XG4gICAgY29uc3QgY3VycmVudEluZGV4ID0gYWxsSW5wdXRzLmZpbmRJbmRleChcbiAgICAgIChpbnB1dCkgPT4gaW5wdXQgPT09IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudFxuICAgICk7XG5cbiAgICBpZiAoYWxsSW5wdXRzW2N1cnJlbnRJbmRleCArIDFdKSBhbGxJbnB1dHNbY3VycmVudEluZGV4ICsgMV0uZm9jdXMoKTtcbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgICAgIHRoaXMuYmx1ck9uRGF0ZVRpbWUoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gLTE7XG4gIH1cblxuICBwcml2YXRlIGZvY3VzUHJldmlvdXNJbnB1dCgpOiB2b2lkIHtcbiAgICBjb25zdCBhbGxJbnB1dHMgPSBBcnJheS5mcm9tKFxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQuaW5wdXQtY29udHJvbCcpXG4gICAgKSBhcyBIVE1MSW5wdXRFbGVtZW50W107XG4gICAgY29uc3QgY3VycmVudEluZGV4ID0gYWxsSW5wdXRzLmZpbmRJbmRleChcbiAgICAgIChpbnB1dCkgPT4gaW5wdXQgPT09IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudFxuICAgICk7XG5cbiAgICBpZiAoY3VycmVudEluZGV4ID09PSAtMSkgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDM7XG4gICAgZWxzZSBpZiAoY3VycmVudEluZGV4ID09PSAwKSB0aGlzLnNlbGVjdGlvbklucHV0ID0gMDtcbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgLT0gMTtcbiAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgodGhpcy5zZWxlY3Rpb25JbnB1dCk7XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRJbmRleCA+IDApIGFsbElucHV0c1tjdXJyZW50SW5kZXggLSAxXS5mb2N1cygpO1xuXG4gICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IC0xO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUtleWJvYXJkSW5wdXRzKGU6IEtleWJvYXJkRXZlbnQsIGlzUmVzdGFydD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBzcGFuT25lVmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCA9XG4gICAgICBpc05hTih0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpIHx8IHRoaXMubmV3SW5wdXRDaGFuZ2VkXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogcGFyc2VJbnQodGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKTtcbiAgICBjb25zdCBzcGFuVHdvVmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCA9XG4gICAgICBpc05hTih0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpIHx8IHRoaXMubmV3SW5wdXRDaGFuZ2VkXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogcGFyc2VJbnQodGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKTtcblxuICAgIGxldCBzcGFuVGhyZWVWYWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lICE9PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICkge1xuICAgICAgc3BhblRocmVlVmFsdWUgPVxuICAgICAgICBpc05hTih0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCkgfHwgdGhpcy5uZXdJbnB1dENoYW5nZWRcbiAgICAgICAgICA/ICcnXG4gICAgICAgICAgOiBwYXJzZUludCh0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCk7XG4gICAgfVxuXG4gICAgdGhpcy5uZXdJbnB1dENoYW5nZWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gMCkge1xuICAgICAgICBpZiAoaXNSZXN0YXJ0KSB7XG4gICAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMDtcbiAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDApO1xuICAgICAgICB9IGVsc2UgaWYgKHNwYW5PbmVWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGV0IGZpbmFsX3ZhbHVlID0gcGFyc2VJbnQoYCR7c3Bhbk9uZVZhbHVlfSR7ZS5rZXl9YCk7XG4gICAgICAgICAgaWYgKGZpbmFsX3ZhbHVlID4gMTIpIHtcbiAgICAgICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgJzAnICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICApLnNsaWNlKC0yKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxLCB0cnVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShcbiAgICAgICAgICAgICAgbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuc2V0TW9udGgoXG4gICAgICAgICAgICAgICAgICBwYXJzZUludChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICAgICApIC0gMVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKCFmaW5hbF92YWx1ZSkgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICApLnNsaWNlKC0yKTtcblxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDE7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAocGFyc2VJbnQoZS5rZXkpKVxuICAgICAgICAgICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShcbiAgICAgICAgICAgICAgbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuc2V0TW9udGgoXG4gICAgICAgICAgICAgICAgICBwYXJzZUludChlLmtleSkgLSAxXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgZmluYWxfdmFsdWUgPSAoJzAnICsgcGFyc2VJbnQoZS5rZXkpKS5zbGljZSgtMik7XG5cbiAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSBmaW5hbF92YWx1ZTtcblxuICAgICAgICAgIGlmIChwYXJzZUludChgMSR7ZS5rZXl9YCkgPiAxMikge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDE7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEsIHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDEpIHtcbiAgICAgICAgaWYgKGlzUmVzdGFydCkge1xuICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdkZCc7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgwLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChzcGFuVHdvVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGxldCBmaW5hbF92YWx1ZSA9IHBhcnNlSW50KGAke3NwYW5Ud29WYWx1ZX0ke2Uua2V5fWApO1xuICAgICAgICAgIGlmIChmaW5hbF92YWx1ZSA+IDMxKSB7XG4gICAgICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICAgICcwJyArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMjtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMiwgdHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICAgICAgICAgIG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldERhdGUoXG4gICAgICAgICAgICAgICAgICBwYXJzZUludChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoIWZpbmFsX3ZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdkZCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMjtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMiwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChwYXJzZUludChlLmtleSkpXG4gICAgICAgICAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgICAgICAgICBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXREYXRlKHBhcnNlSW50KGUua2V5KSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICgnMCcgKyBwYXJzZUludChlLmtleSkpLnNsaWNlKFxuICAgICAgICAgICAgLTJcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHBhcnNlSW50KGAxJHtlLmtleX1gKSA+IDMxKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMjtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMiwgdHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNSZXN0YXJ0KSB7XG4gICAgICAgICAgdGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAneXknO1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXNwYW5UaHJlZVZhbHVlIHx8IHNwYW5UaHJlZVZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgdGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICAnMCcgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICApLnNsaWNlKC0yKTtcbiAgICAgICAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgICAgICAgbmV3IERhdGUoXG4gICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldEZ1bGxZZWFyKFxuICAgICAgICAgICAgICAgIHBhcnNlSW50KGAyMDAke3BhcnNlSW50KGUua2V5KX1gKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZmluYWxZZWFyID0gcGFyc2VJbnQoXG4gICAgICAgICAgICB0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBmaW5hbFNob3dZZWFyID1cbiAgICAgICAgICAgIGZpbmFsWWVhciA+IDMxXG4gICAgICAgICAgICAgID8gcGFyc2VJbnQoYDE5JHtmaW5hbFllYXJ9YClcbiAgICAgICAgICAgICAgOiBwYXJzZUludChgMjAke2ZpbmFsWWVhcn1gKTtcbiAgICAgICAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgICAgICAgbmV3IERhdGUoXG4gICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldEZ1bGxZZWFyKGZpbmFsU2hvd1llYXIpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgdGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICApLnNsaWNlKC0yKTtcbiAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICApIHtcbiAgICAgIGlmICghdGhpcy5zZWxlY3Rpb25JbnB1dCkge1xuICAgICAgICBpZiAoaXNSZXN0YXJ0KSB7XG4gICAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMDtcbiAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDApO1xuICAgICAgICB9IGVsc2UgaWYgKHNwYW5PbmVWYWx1ZSkge1xuICAgICAgICAgIGNvbnN0IGZpbmFsX3ZhbHVlID0gcGFyc2VJbnQoYCR7c3Bhbk9uZVZhbHVlfSR7ZS5rZXl9YCk7XG4gICAgICAgICAgaWYgKGZpbmFsX3ZhbHVlID4gMTIpIHtcbiAgICAgICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgJzAnICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICApLnNsaWNlKC0yKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxLCB0cnVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShcbiAgICAgICAgICAgICAgbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuc2V0TW9udGgoXG4gICAgICAgICAgICAgICAgICBwYXJzZUludChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICAgICApIC0gMVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKCFmaW5hbF92YWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnbW0nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICApLnNsaWNlKC0yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDE7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAocGFyc2VJbnQoZS5rZXkpKVxuICAgICAgICAgICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShcbiAgICAgICAgICAgICAgbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuc2V0TW9udGgoXG4gICAgICAgICAgICAgICAgICBwYXJzZUludChlLmtleSkgLSAxXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgZmluYWxfdmFsdWUgPSAoJzAnICsgcGFyc2VJbnQoZS5rZXkpKS5zbGljZSgtMik7XG5cbiAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSBmaW5hbF92YWx1ZTtcblxuICAgICAgICAgIGlmIChwYXJzZUludChgMSR7ZS5rZXl9YCkgPiAxMikge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDE7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEsIHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNSZXN0YXJ0KSB7XG4gICAgICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ3l5JztcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMjtcbiAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDIsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKCFzcGFuVHdvVmFsdWUgfHwgc3BhblR3b1ZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKCcwJyArIHBhcnNlSW50KGUua2V5KSkuc2xpY2UoXG4gICAgICAgICAgICAtMlxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShcbiAgICAgICAgICAgIG5ldyBEYXRlKFxuICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXRGdWxsWWVhcihcbiAgICAgICAgICAgICAgICBwYXJzZUludChgMjAwJHtwYXJzZUludChlLmtleSl9YClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGZpbmFsWWVhciA9IHBhcnNlSW50KFxuICAgICAgICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IGZpbmFsU2hvd1llYXIgPVxuICAgICAgICAgICAgZmluYWxZZWFyID4gMzFcbiAgICAgICAgICAgICAgPyBwYXJzZUludChgMTkke2ZpbmFsWWVhcn1gKVxuICAgICAgICAgICAgICA6IHBhcnNlSW50KGAyMCR7ZmluYWxZZWFyfWApO1xuICAgICAgICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICAgICAgICBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuc2V0RnVsbFllYXIoZmluYWxTaG93WWVhcilcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNlbGVjdFNwYW5CeVRhYkluZGV4KGluZHg6IG51bWJlciwgY2hhbmdlVGFiPzogYm9vbGVhbik6IHZvaWQge1xuICAgIHN3aXRjaCAoaW5keCkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VUYWIpIHRoaXMubmV3SW5wdXRDaGFuZ2VkID0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RGF0ZVRpbWVNb2RlbChkaXJlY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAtMSkgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG5cbiAgICBjb25zdCBpc1VwID0gZGlyZWN0aW9uID09PSAndXAnO1xuICAgIGNvbnN0IGlzRGF0ZVBpY2tlciA9XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVI7XG4gICAgY29uc3QgaXNCYW5rQ2FyZFBpY2tlciA9XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEO1xuXG4gICAgaWYgKGlzRGF0ZVBpY2tlciB8fCBpc0JhbmtDYXJkUGlja2VyKVxuICAgICAgdGhpcy5oYW5kbGVEYXRlUGlja2VySW5wdXQoaXNVcCwgaXNEYXRlUGlja2VyKTtcbiAgICBlbHNlIHRoaXMuaGFuZGxlVGltZVBpY2tlcklucHV0KGlzVXApO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVEYXRlUGlja2VySW5wdXQoaXNVcDogYm9vbGVhbiwgaXNEYXRlUGlja2VyOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDApIHRoaXMudXBkYXRlTW9udGgoaXNVcCk7XG4gICAgZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gMSkgdGhpcy51cGRhdGVEYXRlKGlzVXAsIGlzRGF0ZVBpY2tlcik7XG4gICAgZWxzZSB0aGlzLnVwZGF0ZVllYXIoaXNVcCwgaXNEYXRlUGlja2VyKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlVGltZVBpY2tlcklucHV0KGlzVXA6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gMCkgdGhpcy51cGRhdGVIb3Vycyhpc1VwKTtcbiAgICBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAxKSB0aGlzLnVwZGF0ZU1pbnV0ZXMoaXNVcCk7XG4gICAgZWxzZSB0aGlzLnRvZ2dsZUFNUE0oKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTW9udGgoaXNVcDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IG1vbnRoRGVsdGEgPSBpc1VwID8gMSA6IC0xO1xuICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICBuZXcgRGF0ZShcbiAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuc2V0TW9udGgoXG4gICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuZ2V0TW9udGgoKSArIG1vbnRoRGVsdGFcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLnBhZFZhbHVlKFxuICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuZ2V0TW9udGgoKSArIDFcbiAgICApO1xuICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZURhdGUoaXNVcDogYm9vbGVhbiwgaXNEYXRlUGlja2VyOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZURlbHRhID0gaXNVcCA/IDEgOiAtMTtcbiAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgbmV3IERhdGUoXG4gICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldERhdGUoXG4gICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuZ2V0RGF0ZSgpICsgZGF0ZURlbHRhXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3Qgc3BhbkVsZW1lbnQgPSBpc0RhdGVQaWNrZXJcbiAgICAgID8gdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnRcbiAgICAgIDogdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQ7XG4gICAgc3BhbkVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5wYWRWYWx1ZShcbiAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLmdldERhdGUoKVxuICAgICk7XG4gICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHNwYW5FbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlWWVhcihpc1VwOiBib29sZWFuLCBpc0RhdGVQaWNrZXI6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCB5ZWFyRGVsdGEgPSBpc1VwID8gMSA6IC0xO1xuICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICBuZXcgRGF0ZShcbiAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuc2V0RnVsbFllYXIoXG4gICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuZ2V0RnVsbFllYXIoKSArIHllYXJEZWx0YVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IHNwYW5FbGVtZW50ID0gaXNEYXRlUGlja2VyXG4gICAgICA/IHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnRcbiAgICAgIDogdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQ7XG4gICAgc3BhbkVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWVcbiAgICAgIC5nZXRGdWxsWWVhcigpXG4gICAgICAudG9TdHJpbmcoKVxuICAgICAgLnNsaWNlKC0yKTtcbiAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24oc3BhbkVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVIb3Vycyhpc1VwOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgaG91cnNEZWx0YSA9IGlzVXAgPyAxIDogLTE7XG4gICAgbGV0IHNlbGVjdGVkSG91cnMgPVxuICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuZ2V0SG91cnMoKSArIGhvdXJzRGVsdGE7XG5cbiAgICBpZiAoc2VsZWN0ZWRIb3VycyA9PT0gMCkgc2VsZWN0ZWRIb3VycyA9IDI0O1xuICAgIGlmIChzZWxlY3RlZEhvdXJzID09PSAtMSkgc2VsZWN0ZWRIb3VycyA9IDIzO1xuXG4gICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShcbiAgICAgIG5ldyBEYXRlKHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldEhvdXJzKHNlbGVjdGVkSG91cnMpKVxuICAgICk7XG5cbiAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLnBhZFZhbHVlKFxuICAgICAgc2VsZWN0ZWRIb3VycyA+IDEyID8gc2VsZWN0ZWRIb3VycyAtIDEyIDogc2VsZWN0ZWRIb3Vyc1xuICAgICk7XG4gICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50KTtcblxuICAgIHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID1cbiAgICAgIHNlbGVjdGVkSG91cnMgPiAxMSAmJiBzZWxlY3RlZEhvdXJzIDwgMjQgPyAnUE0nIDogJ0FNJztcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTWludXRlcyhpc1VwOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgbWludXRlc0RlbHRhID0gaXNVcCA/IDEgOiAtMTtcbiAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgbmV3IERhdGUoXG4gICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldE1pbnV0ZXMoXG4gICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuZ2V0TWludXRlcygpICsgbWludXRlc0RlbHRhXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5wYWRWYWx1ZShcbiAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLmdldE1pbnV0ZXMoKVxuICAgICk7XG4gICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgdG9nZ2xlQU1QTSgpOiB2b2lkIHtcbiAgICB0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9XG4gICAgICB0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9PT0gJ0FNJyA/ICdQTScgOiAnQU0nO1xuXG4gICAgY29uc3QgaG91cnNUb0FkZCA9XG4gICAgICB0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9PT0gJ0FNJyA/IC0xMiA6IDEyO1xuICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICBuZXcgRGF0ZShcbiAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuc2V0SG91cnMoXG4gICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuZ2V0SG91cnMoKSArIGhvdXJzVG9BZGRcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIHBhZFZhbHVlKHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiAoJzAnICsgdmFsdWUpLnNsaWNlKC0yKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNOdW1iZXIoZXZ0OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgZXZ0ID0gZXZ0ID8gZXZ0IDogKHdpbmRvdy5ldmVudCBhcyBLZXlib2FyZEV2ZW50KTtcbiAgICBsZXQgY2hhckNvZGUgPSBldnQud2hpY2ggPyBldnQud2hpY2ggOiBldnQua2V5Q29kZTtcbiAgICByZXR1cm4gKFxuICAgICAgKGNoYXJDb2RlID49IDQ4ICYmIGNoYXJDb2RlIDw9IDU3KSB8fCAoY2hhckNvZGUgPj0gOTYgJiYgY2hhckNvZGUgPD0gMTA1KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgb25Qb3BvdmVyU2hvd24oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlucHV0Q29uZmlnLmRyb3Bkb3duTGFiZWwpIHtcbiAgICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KHRydWUpO1xuICAgICAgdGhpcy5zZXRTaG93RGF0ZUlucHV0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvblBvcG92ZXJIaWRkZW4oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlucHV0Q29uZmlnLmRyb3Bkb3duTGFiZWwpIHtcbiAgICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgICAgIHRoaXMuYmx1ck9uRGF0ZVRpbWUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJsdXJPbkRhdGVUaW1lKCk6IHZvaWQge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmRhdGVUaW1lTWFpblRpbWVyKTtcbiAgICB0aGlzLmRhdGVUaW1lTWFpblRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhaXNOYU4odGhpcy5zcGFuT25lPy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCkgJiZcbiAgICAgICAgICAhaXNOYU4odGhpcy5zcGFuVHdvPy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCkgJiZcbiAgICAgICAgICAhaXNOYU4odGhpcy5zcGFuVGhyZWU/Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLmlzRnV0dXJlRGF0ZURpc2FibGVkICYmXG4gICAgICAgICAgICBtb21lbnQodGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUpLmlzQWZ0ZXIobW9tZW50KCkpXG4gICAgICAgICAgKVxuICAgICAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKHsgaW52YWxpZDogdHJ1ZSB9KTsgLy8gZG9uJ3QgYWNjZXB0IGZ1dHVyZSBkYXRlc1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLmV4cGlyZWREYXRlSW52YWxpZCAmJlxuICAgICAgICAgICAgICBtb21lbnQodGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUpLmlzQmVmb3JlKG1vbWVudCgpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7IGludmFsaWQ6IHRydWUgfSk7IC8vIGRvbid0IGFjY2VwdCBleHBpcmVkIGRhdGVzXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5kYXRlQ2hhbmdlZC5uZXh0KFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdtbSc7XG4gICAgICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ2RkJztcbiAgICAgICAgICB0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICd5eSc7XG4gICAgICAgICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShuZXcgRGF0ZSgpKTtcbiAgICAgICAgICB0aGlzLnNldFNob3dEYXRlSW5wdXQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09XG4gICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgICApIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFpc05hTih0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpICYmXG4gICAgICAgICAgIWlzTmFOKHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5leHBpcmVkRGF0ZUludmFsaWQgJiZcbiAgICAgICAgICAgIG1vbWVudCh0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZSkuaXNCZWZvcmUobW9tZW50KCkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMoeyBpbnZhbGlkOiB0cnVlIH0pOyAvLyBkb24ndCBhY2NlcHQgZXhwaXJlZCBkYXRlc1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5kYXRlQ2hhbmdlZC5uZXh0KFxuICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAneXknO1xuICAgICAgICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUobmV3IERhdGUoKSk7XG4gICAgICAgICAgdGhpcy5zZXRTaG93RGF0ZUlucHV0KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFpc05hTih0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpICYmXG4gICAgICAgICAgIWlzTmFOKHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTClcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gdGhpcy5jYWxlbmRhclNlcnZpY2UuZGF0ZUNoYW5nZWQubmV4dChcbiAgICAgICAgICAvLyAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVxuICAgICAgICAgIC8vICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ0hIJztcbiAgICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnTU0nO1xuICAgICAgICAgIHRoaXMuc2V0VGltZVBpY2tlclRpbWUoKTtcbiAgICAgICAgICB0aGlzLnNldFNob3dEYXRlSW5wdXQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRhdGVUaW1lTWFpblRpbWVyKTtcbiAgICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcbiAgICAgIHRoaXMubmV3SW5wdXRDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDEwMCk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0TGFzdE9uZUZvclNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICAvLyBjbGVhclRpbWVvdXQodGhpcy53aG9sZUlucHV0U2VsZWN0aW9uKTtcbiAgICBsZXQgcmFuZ2UsIHNlbGVjdGlvbjtcblxuICAgIHRoaXMuc2V0U2hvd0RhdGVJbnB1dCh0cnVlKTtcbiAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gLTE7XG4gICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQodHJ1ZSk7XG5cbiAgICBpZiAod2luZG93LmdldFNlbGVjdGlvbiAmJiBkb2N1bWVudC5jcmVhdGVSYW5nZSkge1xuICAgICAgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSAhPT1cbiAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICAgICkge1xuICAgICAgICByYW5nZS5zZXRTdGFydCh0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50LCAxKTtcbiAgICAgICAgcmFuZ2Uuc2V0RW5kKHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQsIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmFuZ2Uuc2V0U3RhcnQodGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQsIDEpO1xuICAgICAgICByYW5nZS5zZXRFbmQodGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQsIDEpO1xuICAgICAgfVxuXG4gICAgICBzZWxlY3Rpb24/LnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgc2VsZWN0aW9uPy5hZGRSYW5nZShyYW5nZSk7XG4gICAgfVxuXG4gICAgdGhpcy50aW1lb3V0Q2xlYW5lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGF0ZVRpbWVNYWluVGltZXIpO1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZm9jdXNCbHVyKTtcbiAgICB9LCA5MCk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0TGFzdE9uZUFmdGVyTW91c2VVcCgpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMjtcbiAgICAgIHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFNob3dEYXRlSW5wdXQodHJ1ZSk7XG4gICAgdGhpcy50aW1lb3V0Q2xlYW5lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGF0ZVRpbWVNYWluVGltZXIpO1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZm9jdXNCbHVyKTtcbiAgICB9LCA5MCk7XG4gIH1cblxuICBwcml2YXRlIGlzRGF0ZVRpbWVQaWNrZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUiB8fFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLlRJTUVfUElDS0VSIHx8XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkRlc3RvcnkoKSB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG59XG4iXX0=
|
|
2110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtaW5wdXQtc3RhdGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NhLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhLWlucHV0L3NlcnZpY2VzL2NhLWlucHV0LXN0YXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQyxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBRWIsT0FBTyxFQUNQLFNBQVMsR0FDVixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQVM1QixVQUFVO0FBQ1YsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFFL0YsUUFBUTtBQUNSLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixlQUFlLEdBQ2hCLE1BQU0sVUFBVSxDQUFDO0FBTWxCLGFBQWE7QUFDYixPQUFPLEVBQW9CLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUs1RCxZQUFZO0FBQ1osT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7OztBQUtwRCxNQUFNLE9BQU8saUJBQWlCO0lBK0g1QixZQUNVLGVBQThDLEVBQzlDLHdCQUFrRDtJQUUxRCxRQUFRO0lBQ0EscUJBQTRDO1FBSjVDLG9CQUFlLEdBQWYsZUFBZSxDQUErQjtRQUM5Qyw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBR2xELDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFuSTlDLHdCQUFtQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQzNELGtCQUFhLEdBQ2xCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVsQywwQkFBcUIsR0FBRyxJQUFJ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LElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLHlCQUF5QixDQUFDLFdBQVc7WUFDL0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUsseUJBQXlCLENBQUMsV0FBVztZQUMvRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyx5QkFBeUIsQ0FBQyxxQkFBcUIsQ0FDMUUsQ0FBQztJQUNKLENBQUM7SUFFTSxTQUFTO1FBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7K0dBbnpGVSxpQkFBaUI7bUhBQWpCLGlCQUFpQixjQUZoQixNQUFNOzs0RkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIEVsZW1lbnRSZWYsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgT2JzZXJ2YWJsZSxcbiAgU3ViamVjdCxcbiAgdGFrZVVudGlsLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcblxuLy8gbW9kZWxzXG5pbXBvcnQgeyBJQ2FJbnB1dCB9IGZyb20gJy4uL2NvbmZpZyc7XG5pbXBvcnQgeyBDb21tYW5kc0V2ZW50IH0gZnJvbSAnLi4vbW9kZWxzJztcblxuLy8gYm9vdHN0cmFwXG5pbXBvcnQgeyBOZ2JQb3BvdmVyIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuXG4vLyBoZWxwZXJzXG5pbXBvcnQgeyBNZXRob2RzQ2FsY3VsYXRpb25zSGVscGVyIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvaGVscGVycy9tZXRob2RzLWNhbGN1bGF0aW9ucy5oZWxwZXInO1xuXG4vLyBlbnVtc1xuaW1wb3J0IHtcbiAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bSxcbiAgSW5wdXRDb21tYW5kc1R5cGUsXG4gIElucHV0Q29tbWFuZHNBY3Rpb24sXG4gIElucHV0U3RyaW5nRW51bSxcbn0gZnJvbSAnLi4vZW51bXMnO1xuXG4vLyBzZXJ2aWNlc1xuaW1wb3J0IHsgQ2FsZW5kYXJEYXRlVGltZVBpY2tlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9jYS1jdXN0b20tZGF0ZXRpbWUtcGlja2Vycy9zZXJ2aWNlcy9jYWxlbmRhci1kYXRldGltZS1waWNrZXIuc2VydmljZSc7XG5pbXBvcnQgeyBDYUlucHV0VmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuL2NhLWlucHV0LXZhbGlkYXRpb24uc2VydmljZSc7XG5cbi8vIFN2ZyByb3V0ZXNcbmltcG9ydCB7IElucHV0Q2hhbmdlVmFsdWUsIElucHV0U3ZnUm91dGVzIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vLyBwaXBlc1xuaW1wb3J0IHsgVGhvdXNhbmRTZXBhcmF0b3JQaXBlIH0gZnJvbSAnLi4vLi4vLi4vcGlwZXMvdGhvdXNhbmQtc2VwYXJhdG9yLnBpcGUnO1xuXG4vLyBjb25zdGFudHNcbmltcG9ydCB7IElucHV0Q29uc3RhbnRzIH0gZnJvbSAnLi4vdXRpbHMvY29uc3RhbnRzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIElucHV0U3RhdGVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBpc0ZvY3VzSW5wdXRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBpc0ZvY3VzSW5wdXQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID1cbiAgICB0aGlzLmlzRm9jdXNJbnB1dFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBpc1RvdWNoZWRJbnB1dFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGlzVG91Y2hlZElucHV0JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9XG4gICAgdGhpcy5pc1RvdWNoZWRJbnB1dFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBpc1Zpc2libGVDb21tYW5kc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGlzVmlzaWJsZUNvbW1hbmRzJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9XG4gICAgdGhpcy5pc1Zpc2libGVDb21tYW5kc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBpc0VkaXRJbnB1dFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGlzRWRpdElucHV0JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9XG4gICAgdGhpcy5pc0VkaXRJbnB1dFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBpc0Ryb3Bkb3duVG9nZ2xlclN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGlzRHJvcGRvd25Ub2dnbGVyJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9XG4gICAgdGhpcy5pc0Ryb3Bkb3duVG9nZ2xlclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBkYXRlVGltZUlucHV0RGF0ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGU+KG5ldyBEYXRlKCkpO1xuICBwdWJsaWMgZGF0ZVRpbWVJbnB1dERhdGUkOiBPYnNlcnZhYmxlPERhdGU+ID1cbiAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIHNob3dEYXRlSW5wdXRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBzaG93RGF0ZUlucHV0JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9XG4gICAgdGhpcy5zaG93RGF0ZUlucHV0U3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGlzQ2Fwc0xvY2tPblN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGlzQ2Fwc0xvY2tPbiQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPVxuICAgIHRoaXMuaXNDYXBzTG9ja09uU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIG9uQ2hhbmdlU3ViamVjdCA9IG5ldyBTdWJqZWN0PElucHV0Q2hhbmdlVmFsdWU+KCk7XG4gIHB1YmxpYyBvbkNoYW5nZSQ6IE9ic2VydmFibGU8SW5wdXRDaGFuZ2VWYWx1ZT4gPVxuICAgIHRoaXMub25DaGFuZ2VTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIC8vIE91dHB1dHNcbiAgcHJpdmF0ZSBjb21tYW5kRXZlbnRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8Q29tbWFuZHNFdmVudD4oKTtcbiAgcHVibGljIGNvbW1hbmRFdmVudCQ6IE9ic2VydmFibGU8Q29tbWFuZHNFdmVudD4gPVxuICAgIHRoaXMuY29tbWFuZEV2ZW50U3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGNsZWFySW5wdXRFdmVudFN1YmplY3QgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBwdWJsaWMgY2xlYXJJbnB1dEV2ZW50JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9XG4gICAgdGhpcy5jbGVhcklucHV0RXZlbnRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgaW5jb3JyZWN0SW5wdXRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHVibGljIGluY29ycmVjdElucHV0JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9XG4gICAgdGhpcy5pbmNvcnJlY3RJbnB1dFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBzaG93SGlkZURyb3Bkb3duU3ViamVjdCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHB1YmxpYyBzaG93SGlkZURyb3Bkb3duJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9XG4gICAgdGhpcy5zaG93SGlkZURyb3Bkb3duU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGRyb3BEb3duS2V5TmF2aWdhdGlvblN1YmplY3QgPSBuZXcgU3ViamVjdDx7XG4gICAga2V5Q29kZTogbnVtYmVyO1xuICAgIGRhdGE6IElDYUlucHV0IHwgbnVsbDtcbiAgfT4oKTtcbiAgcHVibGljIGRyb3BEb3duS2V5TmF2aWdhdGlvbiQ6IE9ic2VydmFibGU8e1xuICAgIGtleUNvZGU6IG51bWJlcjtcbiAgICBkYXRhOiBJQ2FJbnB1dCB8IG51bGw7XG4gIH0+ID0gdGhpcy5kcm9wRG93bktleU5hdmlnYXRpb25TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgYmx1cklucHV0U3ViamVjdCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHB1YmxpYyBibHVySW5wdXQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5ibHVySW5wdXRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgY2hhbmdlSW5wdXRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8SW5wdXRDaGFuZ2VWYWx1ZT4oKTtcbiAgcHVibGljIGNoYW5nZUlucHV0JDogT2JzZXJ2YWJsZTxJbnB1dENoYW5nZVZhbHVlPiA9XG4gICAgdGhpcy5jaGFuZ2VJbnB1dFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHVibGljIGNvbWJpbmVkVmFyaWFibGVzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuaXNGb2N1c0lucHV0JCxcbiAgICB0aGlzLmlzVG91Y2hlZElucHV0JCxcbiAgICB0aGlzLmlzVmlzaWJsZUNvbW1hbmRzJCxcbiAgICB0aGlzLmlzRWRpdElucHV0JCxcbiAgICB0aGlzLmlzRHJvcGRvd25Ub2dnbGVyJCxcbiAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlJCxcbiAgICB0aGlzLnNob3dEYXRlSW5wdXQkLFxuICAgIHRoaXMuaXNDYXBzTG9ja09uJCxcbiAgXSk7XG5cbiAgcHJpdmF0ZSBjZFJlZiE6IENoYW5nZURldGVjdG9yUmVmO1xuXG4gIHByaXZhdGUgaW5wdXRDb25maWchOiBJQ2FJbnB1dDtcbiAgcHJpdmF0ZSBpbmNvcnJlY3RWYWx1ZSE6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSBpbnB1dCE6IEVsZW1lbnRSZWY7XG4gIHByaXZhdGUgc3VwZXJDb250cm9sITogTmdDb250cm9sO1xuXG4gIC8vIERhdGVcbiAgcHVibGljIG5ld0lucHV0Q2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgc2VsZWN0aW9uSW5wdXQ6IG51bWJlciA9IC0xO1xuICBwcml2YXRlIHByZXZlbnRCbHVyITogYm9vbGVhbjtcblxuICAvLyBJbnB1dCBTZWxlY3Rpb25cbiAgcHVibGljIGlucHV0U2VsZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHVibGljIHNwYW5PbmUhOiBFbGVtZW50UmVmO1xuICBwdWJsaWMgc3BhblR3byE6IEVsZW1lbnRSZWY7XG4gIHB1YmxpYyBzcGFuVGhyZWUhOiBFbGVtZW50UmVmO1xuICBwdWJsaWMgaG9sZGVyMSE6IEVsZW1lbnRSZWY7XG4gIHB1YmxpYyB0MiE6IE5nYlBvcG92ZXI7XG4gIHB1YmxpYyBuZ2JNYWluUG9wb3ZlciE6IE5nYlBvcG92ZXI7XG5cbiAgcHJpdmF0ZSBpbnB1dENvbW1hbmRzVGltZW91dCE6IE5vZGVKUy5UaW1lb3V0IHwgbnVtYmVyO1xuICBwcml2YXRlIGZvY3VzQmx1ciE6IE5vZGVKUy5UaW1lb3V0IHwgbnVtYmVyO1xuICBwcml2YXRlIHRpbWVvdXRDbGVhbmVyITogTm9kZUpTLlRpbWVvdXQgfCBudW1iZXI7XG4gIHByaXZhdGUgZGF0ZVRpbWVNYWluVGltZXIhOiBOb2RlSlMuVGltZW91dCB8IG51bWJlcjtcbiAgcHJpdmF0ZSBwYXNzd29yZFRpbWVvdXQhOiBOb2RlSlMuVGltZW91dCB8IG51bWJlcjtcblxuICAvLyBQcmljZSBTZXBhcmF0b3JcbiAgcHVibGljIGN1cnNvcklucHV0UG9zaXRpb24hOiBudW1iZXI7XG4gIHB1YmxpYyBoYXNEZWNpbWFsSW5kZXg6IG51bWJlciA9IC0xO1xuICBwdWJsaWMgb3JpZ2luUHJpY2VTZXBhcmF0b3JMaW1pdCE6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgcHVibGljIGlzRG90RGVsZXRlZCE6IGJvb2xlYW47XG5cbiAgLy8gTnVtYmVyIG9mIHNwYWNlc1xuICBwdWJsaWMgbnVtYmVyT2ZDb25zZWN1dGl2ZWx5U3BhY2VzOiBudW1iZXIgPSAwO1xuICBwdWJsaWMgb25lU3BhY2VPbmx5Q291bnRlcjogbnVtYmVyID0gMDtcbiAgcHVibGljIGxhc3RDdXJzb3JTcGFjZVBvc2l0aW9uOiBudW1iZXIgPSAwO1xuXG4gIC8vIE51bWJlciBvZiBwb2ludHNcbiAgcHVibGljIG51bWJlck9mQ29uc2VjdXRpdmVseVBvaW50czogbnVtYmVyID0gMDtcbiAgcHVibGljIG51bWJlck9mUG9pbnRzOiBudW1iZXIgPSAwO1xuXG4gIHByaXZhdGUgZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlOiBDYWxlbmRhckRhdGVUaW1lUGlja2VyU2VydmljZSxcbiAgICBwcml2YXRlIGNhSW5wdXRWYWxpZGF0aW9uU2VydmljZTogQ2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlLFxuXG4gICAgLy8gUGlwZXNcbiAgICBwcml2YXRlIHRob3VzYW5kU2VwYXJhdG9yUGlwZTogVGhvdXNhbmRTZXBhcmF0b3JQaXBlXG4gICkge31cblxuICBwdWJsaWMgc2V0SXNGb2N1c0lucHV0KHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pc0ZvY3VzSW5wdXRTdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNldElzVG91Y2hlZElucHV0KHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pc1RvdWNoZWRJbnB1dFN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0SXNWaXNpYmxlQ29tbWFuZHModmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmlzVmlzaWJsZUNvbW1hbmRzU3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRJc0VkaXRJbnB1dCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaXNFZGl0SW5wdXRTdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNldElzRHJvcGRvd25Ub2dnbGVyKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pc0Ryb3Bkb3duVG9nZ2xlclN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0RGF0ZVRpbWVJbnB1dERhdGUodmFsdWU6IERhdGUpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTaG93RGF0ZUlucHV0KHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zaG93RGF0ZUlucHV0U3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRJc0NhcHNMb2NrT24odmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmlzQ2Fwc0xvY2tPblN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0SW5wdXRFbGVtZW50UmVmKGlucHV0OiBFbGVtZW50UmVmLCBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpOiB2b2lkIHtcbiAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgdGhpcy5jZFJlZiA9IGNkUmVmO1xuICB9XG5cbiAgcHVibGljIHNldFN1cGVyQ29udHJvbChzdXBlckNvbnRyb2w6IE5nQ29udHJvbCk6IHZvaWQge1xuICAgIHRoaXMuc3VwZXJDb250cm9sID0gc3VwZXJDb250cm9sO1xuICB9XG5cbiAgcHVibGljIHNldElucHV0Q29uZmlnKGNvbmZpZzogSUNhSW5wdXQpOiB2b2lkIHtcbiAgICB0aGlzLmlucHV0Q29uZmlnID0gY29uZmlnO1xuICB9XG5cbiAgcHVibGljIHNldEluY29ycmVjdFZhbHVlKGluY29ycmVjdFZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pbmNvcnJlY3RWYWx1ZSA9IGluY29ycmVjdFZhbHVlO1xuICB9XG5cbiAgcHVibGljIHNldENvbW1hbmRFdmVudCh2YWx1ZTogQ29tbWFuZHNFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuY29tbWFuZEV2ZW50U3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDbGVhcklucHV0RXZlbnQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFySW5wdXRFdmVudFN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0SW5jb3JyZWN0SW5wdXQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmluY29ycmVjdElucHV0U3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTaG93SGlkZURyb3Bkb3duKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zaG93SGlkZURyb3Bkb3duU3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXREcm9wRG93bktleU5hdmlnYXRpb24odmFsdWU6IHtcbiAgICBrZXlDb2RlOiBudW1iZXI7XG4gICAgZGF0YTogSUNhSW5wdXQgfCBudWxsO1xuICB9KTogdm9pZCB7XG4gICAgdGhpcy5kcm9wRG93bktleU5hdmlnYXRpb25TdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNldEJsdXJJbnB1dCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuYmx1cklucHV0U3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDaGFuZ2VJbnB1dCh2YWx1ZTogSW5wdXRDaGFuZ2VWYWx1ZSk6IHZvaWQge1xuICAgIHRoaXMuY2hhbmdlSW5wdXRTdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNldE9uQ2hhbmdlKHZhbHVlOiBJbnB1dENoYW5nZVZhbHVlKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZVN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgd3JpdGVWYWx1ZShvYmo6IElucHV0Q2hhbmdlVmFsdWUpOiB2b2lkIHtcbiAgICB0aGlzLnNldENoYW5nZUlucHV0KG9iaik7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSIHx8XG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5USU1FX1BJQ0tFUiB8fFxuICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09XG4gICAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICAgICkge1xuICAgICAgICBpZiAob2JqKSB7XG4gICAgICAgICAgdGhpcy50aW1lb3V0Q2xlYW5lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRUaW1lRGF0ZUlucHV0KG9iaik7XG4gICAgICAgICAgfSwgMzAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBvYmo7XG4gICAgICAgICAgdGhpcy5yZXNldERhdGVUaW1lSW5wdXRzKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghdGhpcy5pbnB1dENvbmZpZy5wcmljZVNlcGFyYXRvcikge1xuICAgICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IG9iajtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGNsZWFySW5wdXQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAvLyBDbGVhciB3aG9sZSBpbnB1dFxuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLnJlbW92ZUlucHV0KSB7XG4gICAgICB0aGlzLnNldENsZWFySW5wdXRFdmVudCh0cnVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gSW5jb3JyZWN0IElucHV0XG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcuaW5jb3JyZWN0SW5wdXQpIHtcbiAgICAgIHRoaXMuaW5jb3JyZWN0VmFsdWUgPSAhdGhpcy5pbmNvcnJlY3RWYWx1ZTtcbiAgICAgIHRoaXMuc2V0SW5jb3JyZWN0SW5wdXQodGhpcy5pbmNvcnJlY3RWYWx1ZSk7XG4gICAgfVxuICAgIC8vIE5hdGl2ZSBjbGVhclxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gbnVsbDtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldFZhbHVlKG51bGwpO1xuICAgICAgdGhpcy5udW1iZXJPZkNvbnNlY3V0aXZlbHlTcGFjZXMgPSAwO1xuICAgICAgdGhpcy5udW1iZXJPZkNvbnNlY3V0aXZlbHlQb2ludHMgPSAwO1xuICAgICAgdGhpcy5udW1iZXJPZlBvaW50cyA9IDA7XG4gICAgICB0aGlzLm9uZVNwYWNlT25seUNvdW50ZXIgPSAwO1xuICAgICAgdGhpcy5pbnB1dENvbmZpZy5kcm9wZG93bkltYWdlSW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnNldElzVG91Y2hlZElucHV0KHRydWUpO1xuICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgICAgaWYgKFxuICAgICAgICAoXG4gICAgICAgICAgW1xuICAgICAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUixcbiAgICAgICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uVElNRV9QSUNLRVIsXG4gICAgICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRCxcbiAgICAgICAgICBdIGFzIHN0cmluZ1tdXG4gICAgICAgICkuaW5jbHVkZXModGhpcy5pbnB1dENvbmZpZy5uYW1lKVxuICAgICAgKVxuICAgICAgICB0aGlzLnJlc2V0RGF0ZVRpbWVJbnB1dHMoKTtcblxuICAgICAgdGhpcy5zZXRDbGVhcklucHV0RXZlbnQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHRyYW5zZm9ybVRleHQoZXZlbnQ6IEV2ZW50LCBpc1Bhc3RlPzogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgICB0aGlzLmN1cnNvcklucHV0UG9zaXRpb24gPSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7XG5cbiAgICAvLyBIYW5kbGUgcGFzdGUgb3BlcmF0aW9uXG4gICAgaWYgKGlzUGFzdGUpIHtcbiAgICAgIHRoaXMuaGFuZGxlUGFzdGUodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMuYXBwbHlUZXh0VHJhbnNmb3JtYXRpb24oKTtcblxuICAgIC8vIEFwcGx5IHRob3VzYW5kIGFuZCBwcmljZSBzZXBhcmF0b3JzIGlmIGNvbmZpZ3VyZWRcbiAgICB0aGlzLmFwcGx5VGhvdXNhbmRTZXBhcmF0b3IoKTtcbiAgICB0aGlzLmFwcGx5UHJpY2VTZXBhcmF0b3IoKTtcblxuICAgIHRoaXMuY3VzdG9tVmFsaWRhdGlvbih2YWx1ZSk7XG5cbiAgICB0aGlzLnNhbml0aXplQ29uc2VjdXRpdmVTcGFjZXMoKTtcblxuICAgIHRoaXMucmVtb3ZlTGVhZGluZ1plcm8oKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUGFzdGUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pbnB1dFNlbGVjdGlvbikge1xuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlICs9IHZhbHVlO1xuICAgICAgdGhpcy5saW1pdElucHV0TGVuZ3RoKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5pbnB1dFNlbGVjdGlvbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIERlbGV0ZSBzcGFjZXMgb24gYmVnaW4gYW5kIGVuZFxuICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZS50cmltKCk7XG4gICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZSh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBsaW1pdElucHV0TGVuZ3RoKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoID4gdGhpcy5pbnB1dENvbmZpZy5tYXhMZW5ndGghKSB7XG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUuc3Vic3RyaW5nKFxuICAgICAgICAwLFxuICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm1heExlbmd0aFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5VGV4dFRyYW5zZm9ybWF0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudDtcbiAgICBzd2l0Y2ggKHRoaXMuaW5wdXRDb25maWcudGV4dFRyYW5zZm9ybSkge1xuICAgICAgY2FzZSBJbnB1dFN0cmluZ0VudW0uQ0FQSVRBTElaRTpcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID1cbiAgICAgICAgICB2YWx1ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHZhbHVlLnN1YnN0cmluZygxKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgSW5wdXRTdHJpbmdFbnVtLlVQUEVSQ0FTRTpcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdmFsdWUudG9Mb2NhbGVVcHBlckNhc2UoJ2VuLVVTJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBJbnB1dFN0cmluZ0VudW0uQ0FQSVRBTElaRURfQ0FTRTpcbiAgICAgICAgY29uc3QgY2FwaXRhbGl6ZWRDYXNlV29yZHMgPSB2YWx1ZS5yZXBsYWNlKFxuICAgICAgICAgIC8oXlxcd3sxfSl8KFxccytcXHd7MX0pL2csXG4gICAgICAgICAgKGxldHRlcjogc3RyaW5nKSA9PiBsZXR0ZXIudG9VcHBlckNhc2UoKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IGNhcGl0YWxpemVkQ2FzZVdvcmRzO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5VGhvdXNhbmRTZXBhcmF0b3IoKTogdm9pZCB7XG4gICAgY29uc3QgY29udHJvbFZhbHVlID0gdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWU7XG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcudGhvdXNhbmRTZXBhcmF0b3IgJiYgY29udHJvbFZhbHVlKSB7XG4gICAgICBpZiAodGhpcy5pc0FsbFplcm9zKGNvbnRyb2xWYWx1ZSkpIHtcbiAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZSgnMCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUudG9TdHJpbmcoKSkge1xuICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICAgIHRoaXMudGhvdXNhbmRTZXBhcmF0b3JQaXBlLnRyYW5zZm9ybShjb250cm9sVmFsdWUpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVByaWNlU2VwYXJhdG9yKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRyb2xWYWx1ZSA9IHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlO1xuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLnByaWNlU2VwYXJhdG9yICYmIGNvbnRyb2xWYWx1ZSkge1xuICAgICAgLy8gMC4gRG9uJ3QgYWxsb3cgMCBhcyBmaXJzdCBjaGFyYWN0ZXJcbiAgICAgIGlmICh0aGlzLmlzQWxsWmVyb3MoY29udHJvbFZhbHVlKSkge1xuICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKCcwJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gNC4gSWYgdXNlciBzZXQgZG90XG4gICAgICBpZiAoY29udHJvbFZhbHVlLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgICAgdGhpcy5mb3JtYXRXaXRoRGVjaW1hbCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gNS4gSWYgdXNlciBkb2Vzbid0IHNldCBkb3RcbiAgICAgICAgdGhpcy5mb3JtYXRXaXRob3V0RGVjaW1hbCgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldElucHV0Q3Vyc29yUG9zaXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFdpdGhEZWNpbWFsKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRyb2xWYWx1ZSA9IHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlO1xuICAgIC8vIDQuMS4gQ2hlY2sgZm9yIERvdCBwb3NpdGlvblxuICAgIHRoaXMuaGFzRGVjaW1hbEluZGV4ID0gY29udHJvbFZhbHVlLmluZGV4T2YoJy4nKTtcblxuICAgIHRoaXMub3JpZ2luUHJpY2VTZXBhcmF0b3JMaW1pdCA9XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLnByaWNlU2VwYXJhdG9yTGltaXRhdGlvbiEgKyAzO1xuXG4gICAgLy8gNC4yLiBEaXZpZGUgbnVtYmVyIGludG8gZGVjaW1hbCBhbmQgaW50ZWdlciBwYXJ0c1xuICAgIGxldCBpbnRlZ2VyUGFydCA9IHRoaXMudGhvdXNhbmRTZXBhcmF0b3JQaXBlLnRyYW5zZm9ybShcbiAgICAgIGNvbnRyb2xWYWx1ZVxuICAgICAgICAuc2xpY2UoMCwgdGhpcy5oYXNEZWNpbWFsSW5kZXgpXG4gICAgICAgIC5zbGljZSgwLCB0aGlzLmlucHV0Q29uZmlnLnByaWNlU2VwYXJhdG9yTGltaXRhdGlvbilcbiAgICApO1xuICAgIGxldCBkZWNpbWFsUGFydCA9IGNvbnRyb2xWYWx1ZS5zbGljZSh0aGlzLmhhc0RlY2ltYWxJbmRleCArIDEpO1xuXG4gICAgaWYgKCFpbnRlZ2VyUGFydCkge1xuICAgICAgaW50ZWdlclBhcnQgPSAnMCc7XG4gICAgfVxuXG4gICAgLy8gNC40LiBHZXQgb25seSB0d28gbnVtYmVycyBvZiB0aGUgZGVjaW1hbCBwYXJ0XG4gICAgZGVjaW1hbFBhcnQgPSBkZWNpbWFsUGFydC5zbGljZSgwLCAyKTtcblxuICAgIGlmIChkZWNpbWFsUGFydCkge1xuICAgICAgLy8gNC41LiBTZXQgZm9ybWF0dGVkIG51bWJlclxuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShgJHtpbnRlZ2VyUGFydH0uJHtkZWNpbWFsUGFydH1gKTtcbiAgICAgIHRoaXMuaGFzRGVjaW1hbEluZGV4ID0gdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUuaW5kZXhPZignLicpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0V2l0aG91dERlY2ltYWwoKTogdm9pZCB7XG4gICAgY29uc3QgY29udHJvbFZhbHVlID0gdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWU7XG4gICAgdGhpcy5oYXNEZWNpbWFsSW5kZXggPSAtMTtcblxuICAgIGlmIChjb250cm9sVmFsdWUuaW5kZXhPZignLicpID09PSAtMSkge1xuICAgICAgLy8gVHJhbnNmb3JtIHZhbHVlIHdpdGggdGhvdXNhbmQgc2VwYXJhdG9yXG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICB0aGlzLnRob3VzYW5kU2VwYXJhdG9yUGlwZS50cmFuc2Zvcm0oY29udHJvbFZhbHVlKVxuICAgICAgKTtcblxuICAgICAgLy8gTGltaXQgdmFsaWRhdGlvblxuICAgICAgdGhpcy5vcmlnaW5QcmljZVNlcGFyYXRvckxpbWl0ID1cbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5wcmljZVNlcGFyYXRvckxpbWl0YXRpb247XG5cbiAgICAgIC8vIEN1dCB2YWx1ZVxuICAgICAgaWYgKGNvbnRyb2xWYWx1ZSkge1xuICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICAgIGNvbnRyb2xWYWx1ZS5zbGljZSgwLCB0aGlzLmlucHV0Q29uZmlnLnByaWNlU2VwYXJhdG9yTGltaXRhdGlvbilcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gVHJhbnNmb3JtIHZhbHVlIGFnYWluIGFmdGVyIGN1dHRpbmdcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgIHRoaXMudGhvdXNhbmRTZXBhcmF0b3JQaXBlLnRyYW5zZm9ybShjb250cm9sVmFsdWUpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0SW5wdXRDdXJzb3JQb3NpdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUpIHtcbiAgICAgIHRoaXMudGltZW91dENsZWFuZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKFxuICAgICAgICAgIHRoaXMuY3Vyc29ySW5wdXRQb3NpdGlvbiArXG4gICAgICAgICAgICAodGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUuaW5kZXhPZignLicpID09PSAtMSA/IDEgOiAwKSxcbiAgICAgICAgICB0aGlzLmN1cnNvcklucHV0UG9zaXRpb24gK1xuICAgICAgICAgICAgKHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlLmluZGV4T2YoJy4nKSA9PT0gLTEgPyAxIDogMClcbiAgICAgICAgKTtcbiAgICAgIH0sIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiB3ZSBoYXZlICR7bn0wMDAwMCBhbmQgd2UgZGVsZXRlIE4gdGhlbiB3ZSBnb3QgdW5kZWZpbmVkIGluc3RlYWQgb2YgZG90XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNBbGxaZXJvcyh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZhbHVlLnNwbGl0KCcnKS5ldmVyeSgoY2hhcikgPT4gY2hhciA9PT0gJzAnKTtcbiAgfVxuXG4gIHByaXZhdGUgY3VzdG9tVmFsaWRhdGlvbih2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY29uZmlnTmFtZSA9IHRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKFxuICAgICAgY29uZmlnTmFtZSA9PT0gSW5wdXRTdHJpbmdFbnVtLllFQVIgJiZcbiAgICAgIHBhcnNlSW50KHZhbHVlKSA+IHBhcnNlSW50KG1vbWVudCgpLmFkZCgxLCAneWVhcicpLmZvcm1hdCgnWVlZWScpKVxuICAgICkge1xuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKHsgaW52YWxpZDogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnTmFtZSA9PT0gSW5wdXRTdHJpbmdFbnVtLk1PTlRIUykge1xuICAgICAgaWYgKHBhcnNlSW50KHZhbHVlKSA8IDEgfHwgcGFyc2VJbnQodmFsdWUpID4gMTIpIHtcbiAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKHsgaW52YWxpZDogdHJ1ZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyhudWxsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29uZmlnTmFtZSA9PT0gSW5wdXRTdHJpbmdFbnVtLkFYTEVTKSB7XG4gICAgICBpZiAocGFyc2VJbnQodmFsdWUpIDwgMSB8fCBwYXJzZUludCh2YWx1ZSkgPiAxNykge1xuICAgICAgICBpZiAocGFyc2VJbnQodmFsdWUpIDwgMSkge1xuICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7IG1pbjogMSB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChwYXJzZUludCh2YWx1ZSkgPiAxNykge1xuICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7IG1heDogMTcgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyhudWxsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBjb25maWdOYW1lID09PSBJbnB1dFN0cmluZ0VudW0uRlVMTF9OQU1FICYmXG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZVxuICAgICkge1xuICAgICAgdGhpcy5jYXBpdGFsaXplV29yZHMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNhcGl0YWxpemVXb3JkcygpOiB2b2lkIHtcbiAgICBjb25zdCB3b3JkcyA9IHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlLnNwbGl0KCcgJyk7XG4gICAgY29uc3QgY2FwaXRhbGl6ZWQgPSB3b3Jkcy5tYXAoKHdvcmQ6IHN0cmluZykgPT4ge1xuICAgICAgcmV0dXJuIHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCk7XG4gICAgfSk7XG4gICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gY2FwaXRhbGl6ZWQuam9pbignICcpO1xuICB9XG5cbiAgcHJpdmF0ZSBzYW5pdGl6ZUNvbnNlY3V0aXZlU3BhY2VzKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbmZpZ05hbWVzID0gSW5wdXRDb25zdGFudHMudGV4dFRyYW5zZm9ybUNvbmZpZ05hbWVzO1xuXG4gICAgaWYgKGNvbmZpZ05hbWVzLmluY2x1ZGVzKHRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgY29uc3Qgc2FuaXRpemVkSW5wdXQgPSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUucmVwbGFjZShcbiAgICAgICAgL1xcc3syLH0vZyxcbiAgICAgICAgJyAnXG4gICAgICApO1xuICAgICAgaWYgKHNhbml0aXplZElucHV0ICE9PSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUpIHtcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gc2FuaXRpemVkSW5wdXQ7XG4gICAgICAgIHRoaXMuc2V0Q3Vyc29yRm9yU2FuaXRpemVkSW5wdXQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEN1cnNvckZvclNhbml0aXplZElucHV0KCk6IHZvaWQge1xuICAgIHRoaXMudGltZW91dENsZWFuZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShcbiAgICAgICAgdGhpcy5sYXN0Q3Vyc29yU3BhY2VQb3NpdGlvbiAtIDEsXG4gICAgICAgIHRoaXMubGFzdEN1cnNvclNwYWNlUG9zaXRpb24gLSAxXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVMZWFkaW5nWmVybygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5yZW1vdmVMZWFkaW5nWmVybykge1xuICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWU7XG5cbiAgICAgIGlmICghY3VycmVudFZhbHVlKSB7XG4gICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoJycpO1xuICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMobnVsbCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcubmVnYXRpdmVMZWFkaW5nWmVybykge1xuICAgICAgICBjb25zdCBpc05lZ2F0aXZlID0gY3VycmVudFZhbHVlLnN0YXJ0c1dpdGgoJy0nKTtcblxuICAgICAgICBpZiAoaXNOZWdhdGl2ZSkge1xuICAgICAgICAgIC8vIEdldCB0aGUgcGFydCBhZnRlciB0aGUgbmVnYXRpdmUgc2lnblxuICAgICAgICAgIGNvbnN0IG51bWJlclBhcnQgPSBjdXJyZW50VmFsdWUuc2xpY2UoMSk7XG4gICAgICAgICAgLy8gUmVtb3ZlIGxlYWRpbmcgemVyb3NcbiAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZE51bWJlciA9IG51bWJlclBhcnQucmVwbGFjZSgvXjArKD89XFxkKS8sICcnKTtcbiAgICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKGAtJHt0cmFuc2Zvcm1lZE51bWJlcn1gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICAgICAgY3VycmVudFZhbHVlLnJlcGxhY2UoL14wKyg/PVxcZCkvLCAnJylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICAgIGN1cnJlbnRWYWx1ZS5yZXBsYWNlKC9eMCsoPyEkKS8sICcnKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhdXRvRm9jdXNGaXJzdElucHV0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmF1dG9Gb2N1cyAmJiAhdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUpIHtcbiAgICAgIHRoaXMudGltZW91dENsZWFuZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KHRydWUpO1xuICAgICAgICB0aGlzLmlucHV0Q29uZmlnLmF1dG9Gb2N1cyA9IGZhbHNlO1xuICAgICAgfSwgMzApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbktleXByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB8IHZvaWQge1xuICAgIC8vIERpc2FibGUgZmlyc3QgY2hhcmFjdGVyIHRvIGJlIHNwYWNlXG4gICAgaWYgKFxuICAgICAgIXRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSAmJlxuICAgICAgL15cXHMqJC8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICApIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcucHJpY2VTZXBhcmF0b3IpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLlBSSUNFX1NFUEFSQVRPUilcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlPy5sZW5ndGggPT09XG4gICAgICAgICAgICB0aGlzLm9yaWdpblByaWNlU2VwYXJhdG9yTGltaXQgJiZcbiAgICAgICAgICBldmVudC5rZXlDb2RlICE9PSA0NlxuICAgICAgICApIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyAgRGlzYWJsZSBtdWx0aXBsZSBkb3RzXG4gICAgICAgIHRoaXMuZGlzYWJsZU11bHRpcGxlUG9pbnRzKGV2ZW50KTtcblxuICAgICAgICAvLyBGaW5kIGluZGV4IG9mIGRvdFxuICAgICAgICBjb25zdCB2YWx1ZVRvU3RyaW5nID0gU3RyaW5nKHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKTtcblxuICAgICAgICB0aGlzLmhhc0RlY2ltYWxJbmRleCA9IHZhbHVlVG9TdHJpbmc/LmluZGV4T2YoJy4nKTtcblxuICAgICAgICBpZiAodGhpcy5oYXNEZWNpbWFsSW5kZXggPj0gMCkge1xuICAgICAgICAgIC8vIDEuIERpdmlkZSBudW1iZXIgb24gZGVjaW1hbCBhbmQgaW50ZWdlciBwYXJ0XG4gICAgICAgICAgbGV0IGludGVnZXJQYXJ0ID0gdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUuc2xpY2UoXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgdGhpcy5oYXNEZWNpbWFsSW5kZXhcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKCFpbnRlZ2VyUGFydCkgaW50ZWdlclBhcnQgPSAnMCc7XG5cbiAgICAgICAgICBsZXQgZGVjaW1hbFBhcnQgPSB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZS5zbGljZShcbiAgICAgICAgICAgIHRoaXMuaGFzRGVjaW1hbEluZGV4ICsgMVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICAvLyAyLiBEaXNhYmxlIG1vcmUgdGhhbiB0d28gZGVjaW1hbHNcbiAgICAgICAgICBpZiAoZGVjaW1hbFBhcnQubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyAzLiBHZXQgb25seSB0d28gbnVtYmVycyBvZiBkZWNpbWFsIHBhcnRcbiAgICAgICAgICBkZWNpbWFsUGFydCA9IGRlY2ltYWxQYXJ0LnNsaWNlKDAsIDIpO1xuXG4gICAgICAgICAgY29uc3QgY3VycmVudFBvc2l0aW9uID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0O1xuXG4gICAgICAgICAgLy8gNC4gU2V0IGZvcm1hdHRlZCBudW1iZXJcbiAgICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICAgICAgIGludGVnZXJQYXJ0ICsgJy4nICsgZGVjaW1hbFBhcnQgXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHRoaXMudGltZW91dENsZWFuZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSA1MSkge1xuICAgICAgICAgICAgICB0aGlzLmN1cnNvcklucHV0UG9zaXRpb24gPVxuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydDtcbiAgICAgICAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKFxuICAgICAgICAgICAgICAgIGN1cnJlbnRQb3NpdGlvbixcbiAgICAgICAgICAgICAgICBjdXJyZW50UG9zaXRpb25cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShcbiAgICAgICAgICAgICAgICBjdXJyZW50UG9zaXRpb24sXG4gICAgICAgICAgICAgICAgY3VycmVudFBvc2l0aW9uXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW1xuICAgICAgICBJbnB1dFN0cmluZ0VudW0uQlVTSU5FU1NfTkFNRSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlNIT1BfTkFNRSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkZVRUxfU1RPUCxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlBST0RVQ0VSX05BTUUsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5URVJNSU5BTF9OQU1FLFxuICAgICAgXS5pbmNsdWRlcyg8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uQlVTSU5FU1NfTkFNRSlcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlTXVsdGlwbGVQb2ludHMoZXZlbnQpO1xuICAgICAgICB0aGlzLmRpc2FibGVDb25zZWN1dGl2ZWx5U3BhY2VzKGV2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW1xuICAgICAgICBJbnB1dFN0cmluZ0VudW0uRUlOLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uTUNfRkYsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5QSE9ORSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlBIT05FX0VYVEVOU0lPTixcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkFDQ09VTlRfQkFOSyxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlJPVVRJTkdfQkFOSyxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlNTTixcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkZVRUxfQ0FSRCxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkVNUFRZX1dFSUdIVCxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkNSRURJVF9MSU1JVCxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlBPX0JPWCxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlBSSUNFLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uVFJBSUxFUl9WT0xVTUUsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5SRVBBSVJfT0RPTUVURVIsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5VU0RPVCxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLklSUCxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlNUQVJUSU5HLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uQ1VTVE9NRVJfUEFZX1RFUk0sXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5DVVNUT01FUl9DUkVESVQsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5ERUZBVUxUX0JBU0UsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5FQUNIX09DQ1VSUkVOQ0UsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5EQU1BR0UsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5QRVJTT05BTF9BRFZFUl9JTkosXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5NRURJQ0FMX0VYUEVOU0VTLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uQk9ESUxZX0lOSlVSWSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkdFTkVSQUxfQUdHUkVHQVRFLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uUFJPRFVDVFNfQ09NUF9PUF9BR0csXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5DT01CSU5FRF9TSU5HTEVfTElNSVQsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5TSU5HTEVfQ09OVkVZQU5DRSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkRFRFVDVEFCTEUsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5DT01QUkVIX0NPTExJU0lPTixcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlRSQUlMRVJfVkFMVUVfSU5TVVJBTkNFX1BPTElDWSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlJFTlQsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5TQUxBUlksXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5NSUxFQUdFLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uTU9OVEhTLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uRU1QVFlfV0VJR0hUX1NQQUNFLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uUVRZLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uUFVSQ0hBU0VfUFJJQ0UsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5GVUVMX1RBTktfU0laRSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkRFVklDRV9OTyxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLldFSUdIVCxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkZVRUxfUEVSX01JTEVTLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uRlVFTF9QUklDRV9NQVAsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5BTU9VTlQsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5CT0xfTk8sXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5TRUFMX05PLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uUElDS1VQX05PLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uQ09ERSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLk1VTFRJX0ZST01fRklSU1RfRlJPTSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLk1VTFRJX0ZST01fRklSU1RfVE8sXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5NVUxUSV9GT1JNX1NFQ09ORF9GUk9NLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uTVVMVElfRk9STV9TRUNPTkRfVE8sXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5NVUxUSV9GT1JNX1RISVJEX0ZST00sXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5NVUxUSV9GT1JNX1RISVJEX1RPLFxuICAgICAgXS5pbmNsdWRlcyg8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpKVxuICAgICkge1xuICAgICAgLy8gT25seSBudW1iZXJzXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5RVFkpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbSW5wdXRTdHJpbmdFbnVtLkVNQUlMXS5pbmNsdWRlcyhcbiAgICAgICAgPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uRU1BSUwpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZUNvbnNlY3V0aXZlbHlQb2ludHMoZXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0lucHV0U3RyaW5nRW51bS5JTlZPSUNFXS5pbmNsdWRlcyhcbiAgICAgICAgPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uSU5WT0lDRSlcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtJbnB1dFN0cmluZ0VudW0uQUREUkVTU10uaW5jbHVkZXMoXG4gICAgICAgIDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmICgvXltBLVphLXowLTlcXHMuJi8sXy1dKiQvPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKSkge1xuICAgICAgICB0aGlzLmRpc2FibGVDb25zZWN1dGl2ZWx5U3BhY2VzKGV2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW1xuICAgICAgICBJbnB1dFN0cmluZ0VudW0uQUREUkVTU19VTklULFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uREVQQVJUTUVOVCxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlZFSElDTEVfVU5JVCxcbiAgICAgIF0uaW5jbHVkZXMoPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKSlcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLkFERFJFU1NfVU5JVClcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtJbnB1dFN0cmluZ0VudW0uRklSU1RfTkFNRV0uaW5jbHVkZXMoXG4gICAgICAgIDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLkZJUlNUX05BTUUpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZU11bHRpcGxlUG9pbnRzKGV2ZW50KTtcbiAgICAgICAgdGhpcy5lbmFibGVPbmVTcGFjZU9ubHkoZXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0lucHV0U3RyaW5nRW51bS5MQVNUX05BTUVdLmluY2x1ZGVzKFxuICAgICAgICA8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5MQVNUX05BTUUpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZW5hYmxlT25lU3BhY2VPbmx5KGV2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtJbnB1dFN0cmluZ0VudW0uQkFOS19OQU1FXS5pbmNsdWRlcyhcbiAgICAgICAgPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uQkFOS19OQU1FKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLmRpc2FibGVNdWx0aXBsZVBvaW50cyhldmVudCk7XG4gICAgICAgIHRoaXMuZW5hYmxlT25lU3BhY2VPbmx5KGV2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlZJTl9OVU1CRVIsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5JTlNVUkFOQ0VfUE9MSUNZLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uSUZUQSxcbiAgICAgIF0uaW5jbHVkZXMoPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKSlcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLlZJTl9OVU1CRVIpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKVxuICAgICAgICByZXR1cm4gIS9eW0lpT1FdKiQvPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKTtcblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbSW5wdXRTdHJpbmdFbnVtLlRSVUNLX1RSQUlMRVJfTU9ERUxdLmluY2x1ZGVzKFxuICAgICAgICA8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5UUlVDS19UUkFJTEVSX01PREVMKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLmVuYWJsZU9uZVNwYWNlT25seShldmVudCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbSW5wdXRTdHJpbmdFbnVtLllFQVJdLmluY2x1ZGVzKFxuICAgICAgICA8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIC9eMCokLy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKSAmJlxuICAgICAgICAhdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlXG4gICAgICApIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5ZRUFSKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0lucHV0U3RyaW5nRW51bS5MSUNFTlNFX1BMQVRFXS5pbmNsdWRlcyhcbiAgICAgICAgPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uTElDRU5TRV9QTEFURSlcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5lbmFibGVPbmVTcGFjZU9ubHkoZXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0lucHV0U3RyaW5nRW51bS5ERVNDUklQVElPTl0uaW5jbHVkZXMoXG4gICAgICAgIDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLkRFU0NSSVBUSU9OKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLmRpc2FibGVDb25zZWN1dGl2ZWx5U3BhY2VzKGV2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtJbnB1dFN0cmluZ0VudW0uQUxMT1dfQUxMXS5pbmNsdWRlcyhcbiAgICAgICAgPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKC8uKi8/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbSW5wdXRTdHJpbmdFbnVtLkRCQV9OQU1FXS5pbmNsdWRlcyhcbiAgICAgICAgPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uREJBX05BTUUpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbSW5wdXRTdHJpbmdFbnVtLlBFUl9NSUxFXS5pbmNsdWRlcyhcbiAgICAgICAgPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uUEVSX01JTEUpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZU11bHRpcGxlUG9pbnRzKGV2ZW50KTtcblxuICAgICAgICAvLyBDaGVjayBmb3IgbWF4IGxlbmd0aFxuICAgICAgICBpZiAodGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJy4nKSlcbiAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm1heExlbmd0aCA9IDQ7XG4gICAgICAgIGVsc2UgdGhpcy5pbnB1dENvbmZpZy5tYXhMZW5ndGggPSAyO1xuXG4gICAgICAgIC8vIENoZWNrIGZvciByYW5nZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUgPiB0aGlzLmlucHV0Q29uZmlnLm1heCEgfHxcbiAgICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSA8IHRoaXMuaW5wdXRDb25maWcubWluIVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMoeyBpbnZhbGlkOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlBFUl9TVE9QLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uRkxBVF9SQVRFLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uUEVSX0xPQUQsXG4gICAgICBdLmluY2x1ZGVzKDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5QRVJfU1RPUClcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy50aW1lb3V0Q2xlYW5lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSkge1xuICAgICAgICAgICAgbGV0IHBlclN0b3BWYWx1ZSA9IHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlLnJlcGxhY2UoXG4gICAgICAgICAgICAgIC8sL2csXG4gICAgICAgICAgICAgICcnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBwZXJTdG9wVmFsdWUgPiB0aGlzLmlucHV0Q29uZmlnLm1heCEgfHxcbiAgICAgICAgICAgICAgcGVyU3RvcFZhbHVlIDwgdGhpcy5pbnB1dENvbmZpZy5taW4hXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKHsgaW52YWxpZDogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbSW5wdXRTdHJpbmdFbnVtLlJFTEFUSU9OU0hJUCwgSW5wdXRTdHJpbmdFbnVtLlNDQUNdLmluY2x1ZGVzKFxuICAgICAgICA8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5FTUVSR0VOQ1lfTkFNRSlcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtJbnB1dFN0cmluZ0VudW0uRU1FUkdFTkNZX05BTUVdLmluY2x1ZGVzKFxuICAgICAgICA8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5FTUVSR0VOQ1lfTkFNRSlcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlQ29uc2VjdXRpdmVseVNwYWNlcyhldmVudCk7XG4gICAgICAgIHRoaXMuZW5hYmxlT25lU3BhY2VPbmx5KGV2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtJbnB1dFN0cmluZ0VudW0uRlVMTF9DT05UQUNUX05BTUVdLmluY2x1ZGVzKFxuICAgICAgICA8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5GVUxMX0NPTlRBQ1RfTkFNRSlcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtJbnB1dFN0cmluZ0VudW0uRlVFTF9TVE9SRV0uaW5jbHVkZXMoXG4gICAgICAgIDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLkZVRUxfU1RPUkUpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbSW5wdXRTdHJpbmdFbnVtLkhPU10uaW5jbHVkZXMoXG4gICAgICAgIDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMuaW5wdXRTZWxlY3Rpb24gJiZcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLkhPUylcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSAqIDEwICsgZXZlbnQuY2hhckNvZGUgLSA0OCA8PVxuICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcubWF4IVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRTZWxlY3Rpb24pIHtcbiAgICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSlcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuaW5wdXRTZWxlY3Rpb24gPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5GVUxMX1BBUktJTkdfU0xPVCxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlBBUktJTkdfU0xPVCxcbiAgICAgIF0uaW5jbHVkZXMoPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKSlcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLkZVTExfUEFSS0lOR19TTE9UKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBlbHNlIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtJbnB1dFN0cmluZ0VudW0uQ0RMX05VTUJFUl0uaW5jbHVkZXMoXG4gICAgICAgIDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLkNETF9OVU1CRVIpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZW5hYmxlT25lU3BhY2VPbmx5KGV2ZW50KTtcbiAgICAgICAgdGhpcy5kaXNhYmxlQ29uc2VjdXRpdmVseVNwYWNlcyhldmVudCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFsbCBTaW1ib2xzXG4gICAgaWYgKFxuICAgICAgW1xuICAgICAgICBJbnB1dFN0cmluZ0VudW0uVVNFUk5BTUUsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5OSUNLTkFNRSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlBBU1NXT1JELFxuICAgICAgXS5pbmNsdWRlcyg8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uVVNFUk5BTUUpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0lucHV0U3RyaW5nRW51bS5GVUxMX05BTUVdLmluY2x1ZGVzKFxuICAgICAgICA8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5GVUxMX05BTUUpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZW5hYmxlT25lU3BhY2VPbmx5KGV2ZW50KTtcbiAgICAgICAgdGhpcy5kaXNhYmxlTXVsdGlwbGVQb2ludHMoZXZlbnQpO1xuICAgICAgICB0aGlzLmRpc2FibGVDb25zZWN1dGl2ZWx5U3BhY2VzKGV2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0lucHV0U3RyaW5nRW51bS5UT0xMX1ZBTElEQVRJT05dLmluY2x1ZGVzKFxuICAgICAgICA8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5UT0xMX1ZBTElEQVRJT04pXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSnVzdCBjaGFyYWN0ZXJzIGFuZCBudW1iZXJzXG4gICAgaWYgKFxuICAgICAgW1xuICAgICAgICBJbnB1dFN0cmluZ0VudW0uUFJFRklYLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uU1VGRklYLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uUEFSS0lOR19OQU1FLFxuICAgICAgXS5pbmNsdWRlcyg8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uUFJFRklYKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBlbHNlIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtJbnB1dFN0cmluZ0VudW0uRlVMTF9OQU1FXS5pbmNsdWRlcyhcbiAgICAgICAgPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uRlVMTF9OQU1FKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgICkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRpc2FibGVDb25zZWN1dGl2ZWx5U3BhY2VzKGV2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0lucHV0U3RyaW5nRW51bS5JTlNVUkVSX05BTUUsIElucHV0U3RyaW5nRW51bS5PRkZJQ0VfTkFNRV0uaW5jbHVkZXMoXG4gICAgICAgIDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLlBST0RVQ0VSX05BTUUpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZU11bHRpcGxlUG9pbnRzKGV2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0lucHV0U3RyaW5nRW51bS5JTlBVVF9EUk9QRE9XTl9MQUJFTF0uaW5jbHVkZXMoXG4gICAgICAgIDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHRoaXMuZGlzYWJsZUNvbnNlY3V0aXZlbHlTcGFjZXMoZXZlbnQpO1xuICAgICAgdGhpcy5kaXNhYmxlQ29uc2VjdXRpdmVseVBvaW50cyhldmVudCk7XG4gICAgfVxuXG4gICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlLnRyaW0oKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5hYmxlT25lU3BhY2VPbmx5KGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICAvXlxccyokLy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKSB8fFxuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWU/LmluY2x1ZGVzKCcgJylcbiAgICApIHtcbiAgICAgIHRoaXMub25lU3BhY2VPbmx5Q291bnRlcisrO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRoaXMub25lU3BhY2VPbmx5Q291bnRlciA+IDEgJiZcbiAgICAgIC9eXFxzKiQvLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNhYmxlQ29uc2VjdXRpdmVseVNwYWNlcyhldmVudDogYW55KSB7XG4gICAgY29uc3QgaW5wdXRFbGVtZW50ID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG5cbiAgICAvLyBHZXQgY3Vyc29yIHBvc2l0aW9uXG4gICAgY29uc3QgY3Vyc29yUG9zaXRpb24gPSBpbnB1dEVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgYXMgbnVtYmVyO1xuXG4gICAgLy8gSWYgdGhlIGN1cnNvciBpcyBpbiB0aGUgbWlkZGxlIG9mIGEgd29yZCwgYWxsb3cgc3BhY2VzXG4gICAgaWYgKFxuICAgICAgY3Vyc29yUG9zaXRpb24gPiAwICYmXG4gICAgICAhL1xccy8udGVzdChpbnB1dEVsZW1lbnQudmFsdWVbY3Vyc29yUG9zaXRpb24gLSAxXSkgJiZcbiAgICAgICEvXFxzLy50ZXN0KGlucHV0RWxlbWVudC52YWx1ZVtjdXJzb3JQb3NpdGlvbl0pXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIHVzZXIgaXMgdHlwaW5nIGEgc3BhY2UgYW5kIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgaXMgYSBzcGFjZSwgcHJldmVudCB0aGUgZGVmYXVsdCBiZWhhdmlvclxuICAgIGlmIChcbiAgICAgIGV2ZW50LmtleSA9PT0gJyAnICYmXG4gICAgICAvXFxzLy50ZXN0KGlucHV0RWxlbWVudC52YWx1ZVtjdXJzb3JQb3NpdGlvbiAtIDFdKVxuICAgICkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICAvLyBTYXZlIHRoZSBjdXJzb3IgcG9zaXRpb24gZm9yIHRoZSBuZXh0IGlucHV0IGV2ZW50XG4gICAgdGhpcy5sYXN0Q3Vyc29yU3BhY2VQb3NpdGlvbiA9IGN1cnNvclBvc2l0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNhYmxlQ29uc2VjdXRpdmVseVBvaW50cyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQgfCBib29sZWFuIHtcbiAgICBpZiAoL15bLl0qJC8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSkpIHtcbiAgICAgIHRoaXMubnVtYmVyT2ZDb25zZWN1dGl2ZWx5UG9pbnRzKys7XG4gICAgICBpZiAodGhpcy5udW1iZXJPZkNvbnNlY3V0aXZlbHlQb2ludHMgPiAxKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5udW1iZXJPZkNvbnNlY3V0aXZlbHlQb2ludHMgPSAwO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGlzYWJsZU11bHRpcGxlUG9pbnRzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB8IGJvb2xlYW4ge1xuICAgIGlmICgvXlsuXSokLy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKSkge1xuICAgICAgaWYgKCF0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZT8udG9TdHJpbmcoKS5pbmNsdWRlcygnLicpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5udW1iZXJPZlBvaW50cysrO1xuICAgICAgaWYgKHRoaXMubnVtYmVyT2ZQb2ludHMgPiAxKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5udW1iZXJPZlBvaW50cyA9IDA7XG4gICAgfVxuICB9XG4gIC8vIC0tLS0tLS0gZW5kXG5cbiAgcHVibGljIG9uQ29tbWFuZHMoZXZlbnQ6IEV2ZW50LCB0eXBlOiBzdHJpbmcsIGFjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBJbnB1dENvbW1hbmRzVHlwZS5QTV9JTkNSRU1FTlRfREVDUkVNRU5UOlxuICAgICAgICB0aGlzLmhhbmRsZVBtSW5jcmVtZW50RGVjcmVtZW50KGFjdGlvbik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBJbnB1dENvbW1hbmRzVHlwZS5DT05GSVJNX0NBTkNFTDpcbiAgICAgICAgdGhpcy5oYW5kbGVDb25maXJtQ2FuY2VsKGFjdGlvbik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBJbnB1dENvbW1hbmRzVHlwZS5NT05USFM6XG4gICAgICAgIHRoaXMuaGFuZGxlTW9udGhzKGFjdGlvbik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVQbUluY3JlbWVudERlY3JlbWVudChhY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlID0gTWV0aG9kc0NhbGN1bGF0aW9uc0hlbHBlci5jb252ZXJ0VGhvdXNhblNlcEluTnVtYmVyKFxuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWVcbiAgICApO1xuXG4gICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgIGNhc2UgSW5wdXRDb21tYW5kc0FjdGlvbi5ERUNSRU1FTlQ6XG4gICAgICAgIHRoaXMuZGVjcmVtZW50UG1WYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBJbnB1dENvbW1hbmRzQWN0aW9uLklOQ1JFTUVOVDpcbiAgICAgICAgdGhpcy5pbmNyZW1lbnRQbVZhbHVlKHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIElucHV0Q29tbWFuZHNBY3Rpb24uUkVTRVQ6XG4gICAgICAgIHRoaXMucmVzZXRQbVZhbHVlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRJbnB1dEN1cnNvckF0VGhlRW5kKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIGRlY3JlbWVudFBtVmFsdWUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh2YWx1ZSA+PSAxMDAwMCAmJiB2YWx1ZSA8IDIwMDAwKSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICBNZXRob2RzQ2FsY3VsYXRpb25zSGVscGVyLmNvbnZlcnROdW1iZXJJblRob3VzYW5kU2VwKHZhbHVlIC0gMTAwMClcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAyMDAwMSAmJiB2YWx1ZSA8IDUwMDAwKSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICBNZXRob2RzQ2FsY3VsYXRpb25zSGVscGVyLmNvbnZlcnROdW1iZXJJblRob3VzYW5kU2VwKHZhbHVlIC0gMzAwMClcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA+PSA1MDAwMSAmJiB2YWx1ZSA8IDEwMDAwMCkge1xuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgTWV0aG9kc0NhbGN1bGF0aW9uc0hlbHBlci5jb252ZXJ0TnVtYmVySW5UaG91c2FuZFNlcCh2YWx1ZSAtIDUwMDApXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gMTAwMDApIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgIE1ldGhvZHNDYWxjdWxhdGlvbnNIZWxwZXIuY29udmVydE51bWJlckluVGhvdXNhbmRTZXAodmFsdWUgLSAxMDAwMClcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAxMDAwKSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICBNZXRob2RzQ2FsY3VsYXRpb25zSGVscGVyLmNvbnZlcnROdW1iZXJJblRob3VzYW5kU2VwKHZhbHVlIC0gNTAwKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluY3JlbWVudFBtVmFsdWUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh2YWx1ZSA+IDEwMDAwICYmIHZhbHVlIDwgMjAwMDApIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgIE1ldGhvZHNDYWxjdWxhdGlvbnNIZWxwZXIuY29udmVydE51bWJlckluVGhvdXNhbmRTZXAodmFsdWUgKyAxMDAwKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID49IDIwMDAxICYmIHZhbHVlIDwgNTAwMDApIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgIE1ldGhvZHNDYWxjdWxhdGlvbnNIZWxwZXIuY29udmVydE51bWJlckluVGhvdXNhbmRTZXAodmFsdWUgKyAzMDAwKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID49IDUwMDAxICYmIHZhbHVlIDwgMTAwMDAwKSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICBNZXRob2RzQ2FsY3VsYXRpb25zSGVscGVyLmNvbnZlcnROdW1iZXJJblRob3VzYW5kU2VwKHZhbHVlICsgNTAwMClcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAxMDAwMCkge1xuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgTWV0aG9kc0NhbGN1bGF0aW9uc0hlbHBlci5jb252ZXJ0TnVtYmVySW5UaG91c2FuZFNlcCh2YWx1ZSArIDEwMDAwKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgTWV0aG9kc0NhbGN1bGF0aW9uc0hlbHBlci5jb252ZXJ0TnVtYmVySW5UaG91c2FuZFNlcCh2YWx1ZSArIDUwMClcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNldFBtVmFsdWUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWc/LmRlZmF1bHRWYWx1ZSkge1xuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZSh0aGlzLmlucHV0Q29uZmlnPy5kZWZhdWx0VmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQ29uZmlybUNhbmNlbChhY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICBjYXNlIElucHV0Q29tbWFuZHNBY3Rpb24uQ09ORklSTTpcbiAgICAgICAgdGhpcy5jb25maXJtQ29tbWFuZCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgSW5wdXRDb21tYW5kc0FjdGlvbi5DQU5DRUw6XG4gICAgICAgIHRoaXMuY2FuY2VsQ29tbWFuZCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyhudWxsKTtcbiAgICB0aGlzLmlucHV0Q29uZmlnLmRyb3Bkb3duTGFiZWxOZXcgPSBmYWxzZTtcbiAgICB0aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzIS5hY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLmlucHV0Q29uZmlnLmJsYWNrSW5wdXQgPSBmYWxzZTtcbiAgICB0aGlzLnNldElzRWRpdElucHV0KGZhbHNlKTtcbiAgICB0aGlzLnNldElzVmlzaWJsZUNvbW1hbmRzKGZhbHNlKTtcbiAgICB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIGNvbmZpcm1Db21tYW5kKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0Q29tbWFuZEV2ZW50KHtcbiAgICAgIGRhdGE6IHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlLFxuICAgICAgYWN0aW9uOiBJbnB1dENvbW1hbmRzQWN0aW9uLkNPTkZJUk0sXG4gICAgICBtb2RlOlxuICAgICAgICAhdGhpcy5pbnB1dENvbmZpZy5kcm9wZG93bkxhYmVsTmV3ICYmXG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSAhPT0gJ0lucHV0IERyb3Bkb3duIEJhbmsgTmFtZSdcbiAgICAgICAgICA/ICdlZGl0J1xuICAgICAgICAgIDogJ25ldycsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNhbmNlbENvbW1hbmQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRDb21tYW5kRXZlbnQoeyBhY3Rpb246IElucHV0Q29tbWFuZHNBY3Rpb24uQ0FOQ0VMIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVNb250aHMoYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5pbnB1dENvbW1hbmRzVGltZW91dCk7XG5cbiAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgY2FzZSBJbnB1dENvbW1hbmRzQWN0aW9uLk1JTlVTOlxuICAgICAgICB0aGlzLmRlY3JlbWVudE1vbnRoKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBJbnB1dENvbW1hbmRzQWN0aW9uLlBMVVM6XG4gICAgICAgIHRoaXMuaW5jcmVtZW50TW9udGgoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBwYXJzZUludCh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSkgPCAxIHx8XG4gICAgICBwYXJzZUludCh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSkgPiAxMlxuICAgICkge1xuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKHsgaW52YWxpZDogdHJ1ZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKG51bGwpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0SW5wdXRDdXJzb3JBdFRoZUVuZCh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWNyZW1lbnRNb250aCgpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICBwYXJzZUludCh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSkgPT09IDEgfHxcbiAgICAgICF0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZVxuICAgICkge1xuICAgICAgdGhpcy5ibHVyT25Db21tYW5kcygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAodGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWVcbiAgICAgICAgPyBwYXJzZUludCh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSlcbiAgICAgICAgOiAwKSAtIDFcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpbmNyZW1lbnRNb250aCgpOiB2b2lkIHtcbiAgICBpZiAocGFyc2VJbnQodGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUpID09PSAxMikge1xuICAgICAgdGhpcy5ibHVyT25Db21tYW5kcygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAodGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWVcbiAgICAgICAgPyBwYXJzZUludCh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSlcbiAgICAgICAgOiAwKSArIDFcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG9uRm9jdXMoZXZlbnQ/OiBGb2N1c0V2ZW50KSB7XG4gICAgLy8gRHJvcERvd24gTGFiZWxcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5kcm9wZG93bkxhYmVsKSB7XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLnBsYWNlaG9sZGVySWNvbiA9IElucHV0U3ZnUm91dGVzLmR5bmFtaWNGb2N1c0xhYmVsU3ZnO1xuICAgIH1cblxuICAgIC8vIERhdGVwaWNrZXJcbiAgICBpZiAodGhpcy5pc0RhdGVUaW1lUGlja2VyKCkgJiYgIXRoaXMuaW5wdXRDb25maWcuaXNEaXNhYmxlZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGF0ZVRpbWVNYWluVGltZXIpO1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZm9jdXNCbHVyKTtcbiAgICAgIHRoaXMuc2V0U2hvd0RhdGVJbnB1dCh0cnVlKTtcbiAgICAgIGlmIChcbiAgICAgICAgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IC0xICYmXG4gICAgICAgICAgKGV2ZW50Py50YXJnZXQgYXMgSFRNTEVsZW1lbnQpPy5ub2RlTmFtZSA9PT0gJ0lOUFVUJykgfHxcbiAgICAgICAgKGV2ZW50Py5yZWxhdGVkVGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8ubm9kZU5hbWUgPT09ICdJTlBVVCcgfHxcbiAgICAgICAgZXZlbnQ/LnJlbGF0ZWRUYXJnZXQgPT09IG51bGxcbiAgICAgICkge1xuICAgICAgICB0aGlzLnByZXZlbnRCbHVyID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IC0xO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnQyLnRvZ2dsZSgpO1xuICAgIH1cblxuICAgIC8vIERyb3Bkb3duXG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcuaXNEcm9wZG93bikge1xuICAgICAgdGhpcy5zZXRJc0Ryb3Bkb3duVG9nZ2xlcih0cnVlKTtcbiAgICAgIHRoaXMuc2V0U2hvd0hpZGVEcm9wZG93bih0aGlzLmlzRHJvcGRvd25Ub2dnbGVyU3ViamVjdC52YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gQ29tbWFuZHNcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5jb21tYW5kcyAmJiAhdGhpcy5pbnB1dENvbmZpZy5pc0Rpc2FibGVkKSB7XG4gICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5jb21tYW5kcy50eXBlID09PSBJbnB1dENvbW1hbmRzVHlwZS5NT05USFMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlucHV0Q29uZmlnLmJsdWVJbnB1dCkgdGhpcy5pbnB1dENvbmZpZy5ibGFja0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5jb21tYW5kcy5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB0aGlzLnNldElzVmlzaWJsZUNvbW1hbmRzKHRydWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcuY29tbWFuZHMudHlwZSA9PT1cbiAgICAgICAgSW5wdXRDb21tYW5kc1R5cGUuUE1fSU5DUkVNRU5UX0RFQ1JFTUVOVFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcuYmxhY2tJbnB1dCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0SXNWaXNpYmxlQ29tbWFuZHModHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQodHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgb25CbHVyKGV2ZW50PzogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgIC8vIERyb3BEb3duIExhYmVsXG5cbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5kcm9wZG93bkxhYmVsICYmICF0aGlzLmlzRWRpdElucHV0U3ViamVjdC52YWx1ZSlcbiAgICAgIHRoaXMuaW5wdXRDb25maWcucGxhY2Vob2xkZXJJY29uID0gSW5wdXRTdmdSb3V0ZXMuZHluYW1pY0xhYmVsU3ZnO1xuXG4gICAgLy8gRWRpdCBJbnB1dFxuICAgIGlmICh0aGlzLmlzRWRpdElucHV0U3ViamVjdC52YWx1ZSkge1xuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKHsgaW52YWxpZDogdHJ1ZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEYXRlcGlja2VyO1xuICAgIGlmICh0aGlzLnByZXZlbnRCbHVyKSB7XG4gICAgICB0aGlzLnByZXZlbnRCbHVyID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQmFua1xuICAgIGlmIChcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT1cbiAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uSU5QVVRfRFJPUERPV05fQkFOS19OQU1FXG4gICAgKVxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5ibGFja0lucHV0ID0gZmFsc2U7XG5cbiAgICAvLyBQcmljZSBTZXBhcmF0b3IgLSByZW1vdmUgZG90IG9uIGZvY3VzIG91dFxuICAgIGlmIChcbiAgICAgIHRoaXMuaW5wdXRDb25maWcucHJpY2VTZXBhcmF0b3IgJiZcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlICYmXG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZT8uaW5kZXhPZignLicpID49IDBcbiAgICApIHtcbiAgICAgIC8vIDQuMS4gQ2hlY2sgZm9yIERvdCBwb3NpdGlvblxuICAgICAgdGhpcy5oYXNEZWNpbWFsSW5kZXggPSB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZS5pbmRleE9mKCcuJyk7XG5cbiAgICAgIGxldCBpbnRlZ2VyUGFydCA9IHRoaXMudGhvdXNhbmRTZXBhcmF0b3JQaXBlLnRyYW5zZm9ybShcbiAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWVcbiAgICAgICAgICAuc2xpY2UoMCwgdGhpcy5oYXNEZWNpbWFsSW5kZXgpXG4gICAgICAgICAgLnNsaWNlKDAsIHRoaXMuaW5wdXRDb25maWcucHJpY2VTZXBhcmF0b3JMaW1pdGF0aW9uKVxuICAgICAgKTtcblxuICAgICAgbGV0IGRlY2ltYWxQYXJ0ID0gdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUuc2xpY2UoXG4gICAgICAgIHRoaXMuaGFzRGVjaW1hbEluZGV4ICsgMVxuICAgICAgKTtcblxuICAgICAgLy8gNC40LiBHZXQgb25seSB0d28gbnVtYmVycyBvZiBkZWNpbWFsIHBhcnRcbiAgICAgIGRlY2ltYWxQYXJ0ID0gZGVjaW1hbFBhcnQuc2xpY2UoMCwgMik7XG5cbiAgICAgIGlmICghZGVjaW1hbFBhcnQpIHtcbiAgICAgICAgdGhpcy5oYXNEZWNpbWFsSW5kZXggPSAtMTtcbiAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShpbnRlZ2VyUGFydCk7XG4gICAgICAgIHRoaXMubnVtYmVyT2ZQb2ludHMgPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElucHV0IENvbW1hbmRzXG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcuY29tbWFuZHMpIHtcbiAgICAgIHRoaXMuYmx1ck9uQ29tbWFuZHMoKTtcbiAgICB9XG5cbiAgICAvLyBEcm9wZG93blxuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmlzRHJvcGRvd24gfHwgdGhpcy5pbnB1dENvbmZpZy5kcm9wZG93bkxhYmVsKSB7XG4gICAgICBpZiAoXG4gICAgICAgICh0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVIgfHxcbiAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uVElNRV9QSUNLRVIgfHxcbiAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09XG4gICAgICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRCkgJiZcbiAgICAgICAgIXRoaXMuaW5wdXRDb25maWcuaXNEaXNhYmxlZFxuICAgICAgKSB7XG4gICAgICAgIGlmICgoZXZlbnQ/LnRhcmdldCBhcyBIVE1MRWxlbWVudCk/Lm5vZGVOYW1lID09PSAnSU5QVVQnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIERhdGVwaWNrZXJcbiAgICAgICAgaWYgKHRoaXMuaXNEYXRlVGltZVBpY2tlcigpKSB7XG4gICAgICAgICAgdGhpcy5mb2N1c0JsdXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmx1ck9uRGF0ZVRpbWUoKTtcbiAgICAgICAgICB9LCAxMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ibHVyT25Ecm9wRG93bkFycm93KCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIE5vcm1hbCwgd2l0aG91dCBkcm9wZG93blxuICAgIGVsc2Uge1xuICAgICAgbGV0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7XG5cbiAgICAgIC8vIElucHV0IENvbW1hbmRzXG4gICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5jb21tYW5kcykgdGhpcy5ibHVyT25Db21tYW5kcygpO1xuXG4gICAgICAvLyBQYXNzd29yZFxuICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcudHlwZSA9PT0gJ3Bhc3N3b3JkJykgdGhpcy5ibHVyT25QYXNzd29yZCgpO1xuICAgICAgLy8gTm9ybWFsIGZvY3VzIG91dFxuICAgICAgZWxzZSB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRCbHVySW5wdXQodHJ1ZSk7XG4gICAgdGhpcy5zZXRJc1RvdWNoZWRJbnB1dCh0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgYmx1ck9uQ29tbWFuZHMoKTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dENvbW1hbmRzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5pbnB1dENvbmZpZy5jb21tYW5kcyEuYWN0aXZlID0gZmFsc2U7XG4gICAgICB0aGlzLnNldElzVmlzaWJsZUNvbW1hbmRzKGZhbHNlKTtcbiAgICAgIHRoaXMuaW5wdXRDb25maWcuYmxhY2tJbnB1dCA9IGZhbHNlO1xuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMjAwKTtcbiAgfVxuXG4gIHByaXZhdGUgYmx1ck9uRHJvcERvd25BcnJvdygpOiB2b2lkIHtcbiAgICB0aGlzLnRpbWVvdXRDbGVhbmVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNldElzRHJvcGRvd25Ub2dnbGVyKGZhbHNlKTtcbiAgICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcblxuICAgICAgdGhpcy5zZXRJc0Ryb3Bkb3duVG9nZ2xlcihmYWxzZSk7XG4gICAgICB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG4gICAgICB0aGlzLnNldFNob3dIaWRlRHJvcGRvd24odGhpcy5pc0Ryb3Bkb3duVG9nZ2xlclN1YmplY3QudmFsdWUpO1xuICAgIH0sIDE1MCk7XG4gIH1cblxuICBwdWJsaWMgYmx1ck9uUGFzc3dvcmQoKSB7XG4gICAgdGhpcy5wYXNzd29yZFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAxNTApO1xuICB9XG5cbiAgcHVibGljIHNldElucHV0Q3Vyc29yQXRUaGVFbmQoaW5wdXQ6IGFueSwgdGltZTogbnVtYmVyID0gMTIwKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0aW9uRW5kID0gaW5wdXQuc2VsZWN0aW9uRW5kO1xuICAgIGlmIChpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZSkge1xuICAgICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uRW5kLCBzZWxlY3Rpb25FbmQpO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgfSwgdGltZSk7XG4gIH1cblxuICBwdWJsaWMgb25FZGl0SW5wdXQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIHRoaXMuc2V0SXNFZGl0SW5wdXQodHJ1ZSk7XG4gICAgdGhpcy5pbnB1dENvbmZpZy5kcm9wZG93bkxhYmVsTmV3ID0gZmFsc2U7XG4gICAgaWYgKCF0aGlzLmlucHV0Q29uZmlnLmJsdWVJbnB1dCkgdGhpcy5pbnB1dENvbmZpZy5ibGFja0lucHV0ID0gdHJ1ZTtcbiAgICB0aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzIS5hY3RpdmUgPSB0cnVlO1xuICAgIHRoaXMuc2V0SXNWaXNpYmxlQ29tbWFuZHModHJ1ZSk7XG4gICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQodHJ1ZSk7XG5cbiAgICB0aGlzLnNldElucHV0Q3Vyc29yQXRUaGVFbmQodGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMoeyByZXF1aXJlZDogdHJ1ZSB9KTtcblxuICAgIHRoaXMuc2V0Q29tbWFuZEV2ZW50KHtcbiAgICAgIGRhdGE6IHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlLFxuICAgICAgYWN0aW9uOiAnRWRpdCBJbnB1dCcsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2V0Vmlld0NoaWxkcyhcbiAgICBzcGFuT25lOiBFbGVtZW50UmVmLFxuICAgIHNwYW5Ud286IEVsZW1lbnRSZWYsXG4gICAgc3BhblRocmVlOiBFbGVtZW50UmVmLFxuICAgIGhvbGRlcjE6IEVsZW1lbnRSZWZcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5zcGFuT25lID0gc3Bhbk9uZTtcbiAgICB0aGlzLnNwYW5Ud28gPSBzcGFuVHdvO1xuICAgIHRoaXMuc3BhblRocmVlID0gc3BhblRocmVlO1xuICAgIHRoaXMuaG9sZGVyMSA9IGhvbGRlcjE7XG4gIH1cblxuICBwdWJsaWMgc2V0Vmlld0NoaWxkc1BvcG92ZXIoXG4gICAgdDI6IE5nYlBvcG92ZXIsXG4gICAgbmdiTWFpblBvcG92ZXI6IE5nYlBvcG92ZXJcbiAgKTogdm9pZCB7XG4gICAgdGhpcy50MiA9IHQyO1xuICAgIHRoaXMubmdiTWFpblBvcG92ZXIgPSBuZ2JNYWluUG9wb3ZlcjtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVEcm9wZG93bk9wdGlvbnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcuaXNEaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUiB8fFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLlRJTUVfUElDS0VSIHx8XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgKVxuICAgICAgaWYgKHRoaXMudDIpIHtcbiAgICAgICAgaWYgKCF0aGlzLnQyLmlzT3BlbigpKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGF0ZVRpbWVNYWluVGltZXIpO1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmZvY3VzQmx1cik7XG4gICAgICAgICAgdGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gLTE7XG4gICAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICB0aGlzLnQyLm9wZW4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgICAgICAgIGxldCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgc2VsZWN0aW9uPy5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICB0aGlzLnNldElzRHJvcGRvd25Ub2dnbGVyKCF0aGlzLmlzRHJvcGRvd25Ub2dnbGVyU3ViamVjdC52YWx1ZSk7XG5cbiAgICB0aGlzLnNldFNob3dIaWRlRHJvcGRvd24odGhpcy5pc0Ryb3Bkb3duVG9nZ2xlclN1YmplY3QudmFsdWUpO1xuXG4gICAgaWYgKHRoaXMuaXNEcm9wZG93blRvZ2dsZXJTdWJqZWN0LnZhbHVlKSB7XG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvblBsYWNlaG9sZGVySWNvbkV2ZW50KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMuaXNFZGl0SW5wdXRTdWJqZWN0LnZhbHVlKSB7XG4gICAgICB0aGlzLnNldENvbW1hbmRFdmVudCh7XG4gICAgICAgIGRhdGE6IHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlLFxuICAgICAgICBhY3Rpb246ICdUb2dnbGUgRHJvcGRvd24nLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0Q29tbWFuZEV2ZW50KHtcbiAgICAgICAgZGF0YTogdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUsXG4gICAgICAgIGFjdGlvbjogJ1BsYWNlaG9sZGVyIEljb24gRXZlbnQnLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uSW5wdXRDb25maWdDaGFuZ2UoKTogdm9pZCB7XG4gICAgLy8gUHJpY2UgU2VwYXJhdG9yXG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcucHJpY2VTZXBhcmF0b3IpIHtcbiAgICAgIHRoaXMub3JpZ2luUHJpY2VTZXBhcmF0b3JMaW1pdCA9XG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcucHJpY2VTZXBhcmF0b3JMaW1pdGF0aW9uO1xuICAgIH1cblxuICAgIC8vIEN1c3RvbSBSYW5nZVxuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmlzVXNpbmdDdXN0b21QZXJpb2RSYW5nZSkge1xuICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcuaXNEaXNwbGF5aW5nQ3VzdG9tUGVyaW9kUmFuZ2UpXG4gICAgICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KHRydWUpO1xuICAgICAgZWxzZSB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG4gICAgfVxuXG4gICAgLy8gRGF0ZVBpY2tlclxuICAgIGlmIChcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUiB8fFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLlRJTUVfUElDS0VSIHx8XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgKSB7XG4gICAgICB0aGlzLnNldFRpbWVQaWNrZXJUaW1lKCk7XG4gICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5kYXRlQ2hhbmdlZFxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKGRhdGUpID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMuaW5wdXRDb25maWcuaXNEaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5zZXRUaW1lRGF0ZUlucHV0KGRhdGUpO1xuICAgICAgICAgICAgdGhpcy50Mi5jbG9zZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gV2hlbiBhZGQgbW9kZSBpbiBkcm9wZG93blxuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzPy5hY3RpdmUgJiYgIXRoaXMuaW5wdXRDb25maWcuaXNEaXNhYmxlZCkge1xuICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcuY29tbWFuZHMudHlwZSA9PT0gJ2NvbmZpcm0tY2FuY2VsJykge1xuICAgICAgICBpZiAoIXRoaXMuaW5wdXRDb25maWcuYmx1ZUlucHV0KSB0aGlzLmlucHV0Q29uZmlnLmJsYWNrSW5wdXQgPSB0cnVlO1xuICAgICAgICB0aGlzLnNldElzVmlzaWJsZUNvbW1hbmRzKHRydWUpO1xuICAgICAgICB0aGlzLnNldElzRm9jdXNJbnB1dCh0cnVlKTtcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChldmVudCkgdGhpcy5zZXRJc0NhcHNMb2NrT24oZXZlbnQ/LmdldE1vZGlmaWVyU3RhdGU/LignQ2Fwc0xvY2snKSk7XG5cbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5wcmljZVNlcGFyYXRvcikge1xuICAgICAgY29uc3QgdmFsdWVUb1N0cmluZyA9IFN0cmluZyh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSk7XG5cbiAgICAgIHRoaXMuaXNEb3REZWxldGVkID0gdmFsdWVUb1N0cmluZz8uaW5jbHVkZXMoJy4nKTtcbiAgICB9XG5cbiAgICAvLyBEaXNhYmxlIGZvciBwaG9uZSBmaWVsZCBmaXJzdCBjaGFyYWN0ZXIgdG8gYmUgMFxuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gSW5wdXRTdHJpbmdFbnVtLlBIT05FKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuc2VsZWN0aW9uU3RhcnQgPT09IDAgJiZcbiAgICAgICAgZXZlbnQua2V5ID09PSAnMCdcbiAgICAgICkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChldmVudC5rZXlDb2RlID09PSA5KSB7XG4gICAgICB0aGlzLnNldERyb3BEb3duS2V5TmF2aWdhdGlvbih7XG4gICAgICAgIGtleUNvZGU6IGV2ZW50LmtleUNvZGUsXG4gICAgICAgIGRhdGE6IG51bGwsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25LZXl1cChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy5zZXRJc0NhcHNMb2NrT24oZXZlbnQ/LmdldE1vZGlmaWVyU3RhdGU/LignQ2Fwc0xvY2snKSk7XG4gICAgfVxuICAgIC8vIFJlc2V0IGZ1bmN0aW9uIHByb3BlcnR5IGZvciBkaXNhYmxpbmcgbXVsdGlwbGUgZG90c1xuICAgIGNvbnN0IHZhbHVlVG9TdHJpbmcgPSBTdHJpbmcodGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUpO1xuXG4gICAgaWYgKHRoaXMuaXNEb3REZWxldGVkICYmICF2YWx1ZVRvU3RyaW5nPy5pbmNsdWRlcygnLicpKVxuICAgICAgdGhpcy5udW1iZXJPZlBvaW50cyA9IDA7XG5cbiAgICBpZiAoXG4gICAgICBldmVudC5rZXlDb2RlID09IDggJiZcbiAgICAgICEodGhpcy5pbnB1dENvbmZpZy5pc0Ryb3Bkb3duIHx8IHRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbClcbiAgICApIHtcbiAgICAgIC8vIFJlc2V0IE11bHRpcGxlIENvbnNlY3V0aXZlbHkgU3BhY2VzXG4gICAgICB0aGlzLm51bWJlck9mQ29uc2VjdXRpdmVseVNwYWNlcyA9IDA7XG5cbiAgICAgIC8vIFJlc2V0IE9uZSBTcGFjZSBPbmx5XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlICYmXG4gICAgICAgICF0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZT8uaW5jbHVkZXMoJyAnKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMub25lU3BhY2VPbmx5Q291bnRlciA9IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5pc0Ryb3Bkb3duIHx8XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLmRyb3Bkb3duTGFiZWwgfHxcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5BRERSRVNTXG4gICAgKSB7XG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gNDAgfHwgZXZlbnQua2V5Q29kZSA9PT0gMzgpIHtcbiAgICAgICAgdGhpcy5zZXREcm9wRG93bktleU5hdmlnYXRpb24oe1xuICAgICAgICAgIGtleUNvZGU6IGV2ZW50LmtleUNvZGUsXG4gICAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgdGhpcy5zZXREcm9wRG93bktleU5hdmlnYXRpb24oe1xuICAgICAgICAgIGtleUNvZGU6IGV2ZW50LmtleUNvZGUsXG4gICAgICAgICAgZGF0YTogdGhpcy5pbnB1dENvbmZpZyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5BRERSRVNTKSB7XG4gICAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgIHRoaXMuc2V0SXNWaXNpYmxlQ29tbWFuZHMoZmFsc2UpO1xuICAgICAgICB0aGlzLm9uQmx1cigpO1xuICAgICAgICB0aGlzLmJsdXJPbkRyb3BEb3duQXJyb3coKTtcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgICAgdGhpcy5zZXREcm9wRG93bktleU5hdmlnYXRpb24oe1xuICAgICAgICAgIGtleUNvZGU6IGV2ZW50LmtleUNvZGUsXG4gICAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gOSkge1xuICAgICAgICB0aGlzLm9uRm9jdXMoKTtcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIHRoaXMuc2V0RHJvcERvd25LZXlOYXZpZ2F0aW9uKHtcbiAgICAgICAgICBrZXlDb2RlOiBldmVudC5rZXlDb2RlLFxuICAgICAgICAgIGRhdGE6IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGF0ZSAmIFRpbWUgUGlja2VyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHVibGljIHNldFRpbWVQaWNrZXJUaW1lKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uVElNRV9QSUNLRVIpXG4gICAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgICBuZXcgRGF0ZShcbiAgICAgICAgICBtb21lbnQoKS5mb3JtYXQoJ01NL0REL1lZWVknKSArXG4gICAgICAgICAgICAodGhpcy5pbnB1dENvbmZpZz8uaXNGcm9tRGF0ZSA/ICcgMTI6MTUnIDogJyAxMjowMCcpXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgc2V0VGltZURhdGVJbnB1dChkYXRlOiBJbnB1dENoYW5nZVZhbHVlKTogdm9pZCB7XG4gICAgbGV0IHRleHQsIGRhdGVGb3JtYXQsIHRpbWVGb3JtYXQ7XG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUikge1xuICAgICAgdGV4dCA9IG1vbWVudChuZXcgRGF0ZShkYXRlKSkuZm9ybWF0KCdNTS9ERC9ZWScpO1xuICAgICAgZGF0ZUZvcm1hdCA9IHRleHQuc3BsaXQoJy8nKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICkge1xuICAgICAgdGV4dCA9IG1vbWVudChuZXcgRGF0ZShkYXRlKSkuZm9ybWF0KCdNTS9ERC9ZWScpO1xuICAgICAgZGF0ZUZvcm1hdCA9IHRleHQuc3BsaXQoJy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0ZSA9XG4gICAgICAgIGRhdGUgaW5zdGFuY2VvZiBEYXRlXG4gICAgICAgICAgPyBkYXRlXG4gICAgICAgICAgOiBuZXcgRGF0ZShtb21lbnQoKS5mb3JtYXQoJ01NL0REL1lZWVknKSArICcgJyArIGRhdGUpO1xuICAgICAgdGV4dCA9IG1vbWVudChuZXcgRGF0ZShkYXRlKSkuZm9ybWF0KCdISDptbScpO1xuXG4gICAgICB0aW1lRm9ybWF0ID0gbW9tZW50KG5ldyBEYXRlKGRhdGUpKS5mb3JtYXQoJ2hoL21tL0EnKTtcbiAgICAgIGRhdGVGb3JtYXQgPSB0aW1lRm9ybWF0LnNwbGl0KCcvJyk7XG4gICAgfVxuXG4gICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGV4dDtcbiAgICB0aGlzLnNldE9uQ2hhbmdlKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSk7XG4gICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuXG4gICAgaWYgKHRoaXMuc3Bhbk9uZSkgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gZGF0ZUZvcm1hdFswXTtcblxuICAgIGlmICh0aGlzLnNwYW5Ud28pXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSAhPT1cbiAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICAgICkge1xuICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSBkYXRlRm9ybWF0WzFdO1xuICAgICAgICB0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGRhdGVGb3JtYXRbMl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSBkYXRlRm9ybWF0WzJdO1xuICAgICAgfVxuXG4gICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShuZXcgRGF0ZShkYXRlKSk7XG4gICAgdGhpcy5zZXRTaG93RGF0ZUlucHV0KHRydWUpO1xuICB9XG5cbiAgcHVibGljIHJlc2V0RGF0ZVRpbWVJbnB1dHMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3Bhbk9uZSlcbiAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVIpIHtcbiAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ2RkJztcbiAgICAgICAgdGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAneXknO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PVxuICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdtbSc7XG4gICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICd5eSc7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uVElNRV9QSUNLRVJcbiAgICAgICkge1xuICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnSEgnO1xuICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnTU0nO1xuICAgICAgICB0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdBTSc7XG4gICAgICB9XG5cbiAgICB0aGlzLnNldFRpbWVQaWNrZXJUaW1lKCk7XG4gICAgdGhpcy5uZXdJbnB1dENoYW5nZWQgPSB0cnVlO1xuICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgICB0aGlzLnNldFNob3dEYXRlSW5wdXQoZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdGlvbkNoYW5nZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQpIHRoaXMuaW5wdXRTZWxlY3Rpb24gPSB0cnVlO1xuICB9XG5cbiAgcHVibGljIG9uRGF0ZVBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCBwYXN0ZVRleHQgPSBldmVudC5jbGlwYm9hcmREYXRhPy5nZXREYXRhKCd0ZXh0JykgYXMgc3RyaW5nO1xuICAgIGNvbnN0IHBhc3RlZERhdGUgPSBuZXcgRGF0ZShwYXN0ZVRleHQpO1xuICAgIGlmICghaXNOYU4ocGFzdGVkRGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgICB0aGlzLnNldFRpbWVEYXRlSW5wdXQocGFzdGVkRGF0ZSk7XG4gICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KHRoaXMuc2VsZWN0aW9uSW5wdXQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRTZWxlY3Rpb24oZXZlbnQ6IHtcbiAgICBwcmV2ZW50RGVmYXVsdDogKCkgPT4gdm9pZDtcbiAgICBzdG9wUHJvcGFnYXRpb246ICgpID0+IHZvaWQ7XG4gICAgdGFyZ2V0OiBhbnk7XG4gIH0pOiB2b2lkIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xuICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KHRydWUpO1xuXG4gICAgY29uc3Qgc2VsZWN0aW9uSW5wdXQgPSBwYXJzZUludChlbGVtZW50LmdldEF0dHJpYnV0ZSgndGFiaW5kZXgnKSk7XG5cbiAgICBjb25zdCBjdXJyZW50U2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuXG4gICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24gJiYgY3VycmVudFNlbGVjdGlvbi50b1N0cmluZygpLmxlbmd0aCA+IDEwKSB7XG4gICAgICB0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGF0ZVRpbWVNYWluVGltZXIpO1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZm9jdXNCbHVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdtYWluJykpIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSBzZWxlY3Rpb25JbnB1dDtcbiAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbihlbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IC0xKSB7XG4gICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCh0aGlzLnNlbGVjdGlvbklucHV0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0U3BhblNlbGVjdGlvbihlbGVtZW50OiBOb2RlKTogdm9pZCB7XG4gICAgbGV0IHJhbmdlOiBSYW5nZTtcbiAgICBsZXQgc2VsZWN0aW9uOiBTZWxlY3Rpb24gfCBudWxsO1xuXG4gICAgaWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24gJiYgZG9jdW1lbnQuY3JlYXRlUmFuZ2UpIHtcbiAgICAgIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlbGVtZW50KTtcbiAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICBzZWxlY3Rpb24/LmFkZFJhbmdlKHJhbmdlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2hvd0RhdGVUaW1lUGxhY2Vob2xkZXIoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRTaG93RGF0ZUlucHV0KHRydWUpO1xuICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KHRydWUpO1xuICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcblxuICAgIHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBjaGFuZ2VTZWxlY3Rpb24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIG5vUHJldmVudERlZmF1bHQgPSBmYWxzZSk6IHZvaWQge1xuICAgIGlmICghbm9QcmV2ZW50RGVmYXVsdCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIGNvbnN0IGlzTmF2aWdhdGlvbktleSA9IHRoaXMuaXNOYXZpZ2F0aW9uS2V5KGV2ZW50KTtcbiAgICBjb25zdCBpc1NwZWNpYWxUaW1lUGlja2VyS2V5ID1cbiAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDMgJiZcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5USU1FX1BJQ0tFUjtcblxuICAgIGlmIChpc05hdmlnYXRpb25LZXkgfHwgaXNTcGVjaWFsVGltZVBpY2tlcktleSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuaGFuZGxlTmF2aWdhdGlvbktleShldmVudCk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5pc051bWJlcihldmVudCkpIHtcbiAgICAgIGlmICghbm9QcmV2ZW50RGVmYXVsdCkgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoIW5vUHJldmVudERlZmF1bHQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IC0xKSB0aGlzLnNlbGVjdGlvbklucHV0ID0gMDtcblxuICAgICAgICB0aGlzLmhhbmRsZUtleWJvYXJkSW5wdXRzKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzTmF2aWdhdGlvbktleShlOiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgY29uc3QgbmF2aWdhdGlvbktleXMgPSBbMzcsIDM4LCAzOSwgNDAsIDgsIDksIDQ2XTsgLy8gQXJyb3cga2V5cywgQmFja3NwYWNlLCBUYWIsIERlbGV0ZVxuICAgIHJldHVybiBuYXZpZ2F0aW9uS2V5cy5pbmNsdWRlcyhlLmtleUNvZGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVOYXZpZ2F0aW9uS2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICBjYXNlIDM3OiAvLyBMZWZ0IGFycm93XG4gICAgICAgIHRoaXMubW92ZVNlbGVjdGlvbkxlZnQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM5OiAvLyBSaWdodCBhcnJvd1xuICAgICAgY2FzZSA5OiAvLyBUYWJcbiAgICAgICAgdGhpcy5tb3ZlU2VsZWN0aW9uUmlnaHRPclRhYihldmVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzODogLy8gVXAgYXJyb3dcbiAgICAgICAgdGhpcy5zZXREYXRlVGltZU1vZGVsKCd1cCcpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNDA6IC8vIERvd24gYXJyb3dcbiAgICAgICAgdGhpcy5zZXREYXRlVGltZU1vZGVsKCdkb3duJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA4OiAvLyBCYWNrc3BhY2VcbiAgICAgIGNhc2UgNDY6IC8vIERlbGV0ZVxuICAgICAgICB0aGlzLmhhbmRsZUtleWJvYXJkSW5wdXRzKGV2ZW50LCB0cnVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlU2VsZWN0aW9uTGVmdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA+IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgLT0gMTtcbiAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgodGhpcy5zZWxlY3Rpb25JbnB1dCwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlU2VsZWN0aW9uUmlnaHRPclRhYihlOiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaXNEYXRlcGlja2VyQmFua0NhcmQgPVxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRDtcbiAgICBjb25zdCBtYXhJbmRleCA9IGlzRGF0ZXBpY2tlckJhbmtDYXJkID8gMSA6IDI7XG5cbiAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA8IG1heEluZGV4ICYmICFlLnNoaWZ0S2V5KSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbklucHV0ICs9IDE7XG4gICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KHRoaXMuc2VsZWN0aW9uSW5wdXQsIHRydWUpO1xuICAgIH0gZWxzZSBpZiAoZS5rZXlDb2RlID09PSA5ICYmICFlLnNoaWZ0S2V5KSB7XG4gICAgICB0aGlzLmZvY3VzTmV4dElucHV0KCk7XG4gICAgfSBlbHNlIGlmIChlLnNoaWZ0S2V5ICYmIGUua2V5Q29kZSA9PT0gOSkge1xuICAgICAgdGhpcy5mb2N1c1ByZXZpb3VzSW5wdXQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvY3VzTmV4dElucHV0KCk6IHZvaWQge1xuICAgIGNvbnN0IGFsbElucHV0cyA9IEFycmF5LmZyb20oXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dC5pbnB1dC1jb250cm9sJylcbiAgICApIGFzIEhUTUxJbnB1dEVsZW1lbnRbXTtcbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSBhbGxJbnB1dHMuZmluZEluZGV4KFxuICAgICAgKGlucHV0KSA9PiBpbnB1dCA9PT0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50XG4gICAgKTtcblxuICAgIGlmIChhbGxJbnB1dHNbY3VycmVudEluZGV4ICsgMV0pIGFsbElucHV0c1tjdXJyZW50SW5kZXggKyAxXS5mb2N1cygpO1xuICAgIGVsc2Uge1xuICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgICAgdGhpcy5ibHVyT25EYXRlVGltZSgpO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNQcmV2aW91c0lucHV0KCk6IHZvaWQge1xuICAgIGNvbnN0IGFsbElucHV0cyA9IEFycmF5LmZyb20oXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dC5pbnB1dC1jb250cm9sJylcbiAgICApIGFzIEhUTUxJbnB1dEVsZW1lbnRbXTtcbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSBhbGxJbnB1dHMuZmluZEluZGV4KFxuICAgICAgKGlucHV0KSA9PiBpbnB1dCA9PT0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50XG4gICAgKTtcblxuICAgIGlmIChjdXJyZW50SW5kZXggPT09IC0xKSB0aGlzLnNlbGVjdGlvbklucHV0ID0gMztcbiAgICBlbHNlIGlmIChjdXJyZW50SW5kZXggPT09IDApIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuICAgIGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCAtPSAxO1xuICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCh0aGlzLnNlbGVjdGlvbklucHV0KTtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudEluZGV4ID4gMCkgYWxsSW5wdXRzW2N1cnJlbnRJbmRleCAtIDFdLmZvY3VzKCk7XG5cbiAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gLTE7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlS2V5Ym9hcmRJbnB1dHMoZTogS2V5Ym9hcmRFdmVudCwgaXNSZXN0YXJ0PzogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHNwYW5PbmVWYWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkID1cbiAgICAgIGlzTmFOKHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCkgfHwgdGhpcy5uZXdJbnB1dENoYW5nZWRcbiAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgOiBwYXJzZUludCh0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpO1xuICAgIGNvbnN0IHNwYW5Ud29WYWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkID1cbiAgICAgIGlzTmFOKHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCkgfHwgdGhpcy5uZXdJbnB1dENoYW5nZWRcbiAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgOiBwYXJzZUludCh0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpO1xuXG4gICAgbGV0IHNwYW5UaHJlZVZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgIT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgKSB7XG4gICAgICBzcGFuVGhyZWVWYWx1ZSA9XG4gICAgICAgIGlzTmFOKHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKSB8fCB0aGlzLm5ld0lucHV0Q2hhbmdlZFxuICAgICAgICAgID8gJydcbiAgICAgICAgICA6IHBhcnNlSW50KHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKTtcbiAgICB9XG5cbiAgICB0aGlzLm5ld0lucHV0Q2hhbmdlZCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVIpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAwKSB7XG4gICAgICAgIGlmIChpc1Jlc3RhcnQpIHtcbiAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnbW0nO1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3Bhbk9uZVZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBsZXQgZmluYWxfdmFsdWUgPSBwYXJzZUludChgJHtzcGFuT25lVmFsdWV9JHtlLmtleX1gKTtcbiAgICAgICAgICBpZiAoZmluYWxfdmFsdWUgPiAxMikge1xuICAgICAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgICAnMCcgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDE7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEsIHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgICAgICAgICBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXRNb250aChcbiAgICAgICAgICAgICAgICAgIHBhcnNlSW50KFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgICAgICkgLSAxXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoIWZpbmFsX3ZhbHVlKSB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnbW0nO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICkuc2xpY2UoLTIpO1xuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChwYXJzZUludChlLmtleSkpXG4gICAgICAgICAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgICAgICAgICBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXRNb250aChcbiAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGUua2V5KSAtIDFcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBmaW5hbF92YWx1ZSA9ICgnMCcgKyBwYXJzZUludChlLmtleSkpLnNsaWNlKC0yKTtcblxuICAgICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGZpbmFsX3ZhbHVlO1xuXG4gICAgICAgICAgaWYgKHBhcnNlSW50KGAxJHtlLmtleX1gKSA+IDEyKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSwgdHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gMSkge1xuICAgICAgICBpZiAoaXNSZXN0YXJ0KSB7XG4gICAgICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ2RkJztcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMDtcbiAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDAsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHNwYW5Ud29WYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGV0IGZpbmFsX3ZhbHVlID0gcGFyc2VJbnQoYCR7c3BhblR3b1ZhbHVlfSR7ZS5rZXl9YCk7XG4gICAgICAgICAgaWYgKGZpbmFsX3ZhbHVlID4gMzEpIHtcbiAgICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgJzAnICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICApLnNsaWNlKC0yKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAyO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgyLCB0cnVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShcbiAgICAgICAgICAgICAgbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuc2V0RGF0ZShcbiAgICAgICAgICAgICAgICAgIHBhcnNlSW50KFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICghZmluYWxfdmFsdWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ2RkJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAyO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgyLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHBhcnNlSW50KGUua2V5KSlcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICAgICAgICAgIG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldERhdGUocGFyc2VJbnQoZS5rZXkpKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKCcwJyArIHBhcnNlSW50KGUua2V5KSkuc2xpY2UoXG4gICAgICAgICAgICAtMlxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAocGFyc2VJbnQoYDEke2Uua2V5fWApID4gMzEpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAyO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgyLCB0cnVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc1Jlc3RhcnQpIHtcbiAgICAgICAgICB0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICd5eSc7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDE7XG4gICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmICghc3BhblRocmVlVmFsdWUgfHwgc3BhblRocmVlVmFsdWUudG9TdHJpbmcoKS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICB0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICcwJyArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICAgICAgICBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuc2V0RnVsbFllYXIoXG4gICAgICAgICAgICAgICAgcGFyc2VJbnQoYDIwMCR7cGFyc2VJbnQoZS5rZXkpfWApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBmaW5hbFllYXIgPSBwYXJzZUludChcbiAgICAgICAgICAgIHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IGZpbmFsU2hvd1llYXIgPVxuICAgICAgICAgICAgZmluYWxZZWFyID4gMzFcbiAgICAgICAgICAgICAgPyBwYXJzZUludChgMTkke2ZpbmFsWWVhcn1gKVxuICAgICAgICAgICAgICA6IHBhcnNlSW50KGAyMCR7ZmluYWxZZWFyfWApO1xuICAgICAgICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICAgICAgICBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuc2V0RnVsbFllYXIoZmluYWxTaG93WWVhcilcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICB0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICkge1xuICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbklucHV0KSB7XG4gICAgICAgIGlmIChpc1Jlc3RhcnQpIHtcbiAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnbW0nO1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3Bhbk9uZVZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgZmluYWxfdmFsdWUgPSBwYXJzZUludChgJHtzcGFuT25lVmFsdWV9JHtlLmtleX1gKTtcbiAgICAgICAgICBpZiAoZmluYWxfdmFsdWUgPiAxMikge1xuICAgICAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgICAnMCcgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDE7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEsIHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgICAgICAgICBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXRNb250aChcbiAgICAgICAgICAgICAgICAgIHBhcnNlSW50KFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgICAgICkgLSAxXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoIWZpbmFsX3ZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdtbSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChwYXJzZUludChlLmtleSkpXG4gICAgICAgICAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgICAgICAgICBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXRNb250aChcbiAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGUua2V5KSAtIDFcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBmaW5hbF92YWx1ZSA9ICgnMCcgKyBwYXJzZUludChlLmtleSkpLnNsaWNlKC0yKTtcblxuICAgICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGZpbmFsX3ZhbHVlO1xuXG4gICAgICAgICAgaWYgKHBhcnNlSW50KGAxJHtlLmtleX1gKSA+IDEyKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSwgdHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc1Jlc3RhcnQpIHtcbiAgICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAneXknO1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAyO1xuICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMiwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXNwYW5Ud29WYWx1ZSB8fCBzcGFuVHdvVmFsdWUudG9TdHJpbmcoKS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoJzAnICsgcGFyc2VJbnQoZS5rZXkpKS5zbGljZShcbiAgICAgICAgICAgIC0yXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgICAgICAgbmV3IERhdGUoXG4gICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldEZ1bGxZZWFyKFxuICAgICAgICAgICAgICAgIHBhcnNlSW50KGAyMDAke3BhcnNlSW50KGUua2V5KX1gKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZmluYWxZZWFyID0gcGFyc2VJbnQoXG4gICAgICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgZmluYWxTaG93WWVhciA9XG4gICAgICAgICAgICBmaW5hbFllYXIgPiAzMVxuICAgICAgICAgICAgICA/IHBhcnNlSW50KGAxOSR7ZmluYWxZZWFyfWApXG4gICAgICAgICAgICAgIDogcGFyc2VJbnQoYDIwJHtmaW5hbFllYXJ9YCk7XG4gICAgICAgICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShcbiAgICAgICAgICAgIG5ldyBEYXRlKFxuICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXRGdWxsWWVhcihmaW5hbFNob3dZZWFyKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICApLnNsaWNlKC0yKTtcbiAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0U3BhbkJ5VGFiSW5kZXgoaW5keDogbnVtYmVyLCBjaGFuZ2VUYWI/OiBib29sZWFuKTogdm9pZCB7XG4gICAgc3dpdGNoIChpbmR4KSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZVRhYikgdGhpcy5uZXdJbnB1dENoYW5nZWQgPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREYXRlVGltZU1vZGVsKGRpcmVjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IC0xKSB0aGlzLnNlbGVjdGlvbklucHV0ID0gMDtcblxuICAgIGNvbnN0IGlzVXAgPSBkaXJlY3Rpb24gPT09ICd1cCc7XG4gICAgY29uc3QgaXNEYXRlUGlja2VyID1cbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUjtcbiAgICBjb25zdCBpc0JhbmtDYXJkUGlja2VyID1cbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkQ7XG5cbiAgICBpZiAoaXNEYXRlUGlja2VyIHx8IGlzQmFua0NhcmRQaWNrZXIpXG4gICAgICB0aGlzLmhhbmRsZURhdGVQaWNrZXJJbnB1dChpc1VwLCBpc0RhdGVQaWNrZXIpO1xuICAgIGVsc2UgdGhpcy5oYW5kbGVUaW1lUGlja2VySW5wdXQoaXNVcCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZURhdGVQaWNrZXJJbnB1dChpc1VwOiBib29sZWFuLCBpc0RhdGVQaWNrZXI6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gMCkgdGhpcy51cGRhdGVNb250aChpc1VwKTtcbiAgICBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAxKSB0aGlzLnVwZGF0ZURhdGUoaXNVcCwgaXNEYXRlUGlja2VyKTtcbiAgICBlbHNlIHRoaXMudXBkYXRlWWVhcihpc1VwLCBpc0RhdGVQaWNrZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVUaW1lUGlja2VySW5wdXQoaXNVcDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAwKSB0aGlzLnVwZGF0ZUhvdXJzKGlzVXApO1xuICAgIGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDEpIHRoaXMudXBkYXRlTWludXRlcyhpc1VwKTtcbiAgICBlbHNlIHRoaXMudG9nZ2xlQU1QTSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNb250aChpc1VwOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgbW9udGhEZWx0YSA9IGlzVXAgPyAxIDogLTE7XG4gICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShcbiAgICAgIG5ldyBEYXRlKFxuICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXRNb250aChcbiAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5nZXRNb250aCgpICsgbW9udGhEZWx0YVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IHRoaXMucGFkVmFsdWUoXG4gICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5nZXRNb250aCgpICsgMVxuICAgICk7XG4gICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRGF0ZShpc1VwOiBib29sZWFuLCBpc0RhdGVQaWNrZXI6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBkYXRlRGVsdGEgPSBpc1VwID8gMSA6IC0xO1xuICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICBuZXcgRGF0ZShcbiAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuc2V0RGF0ZShcbiAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5nZXREYXRlKCkgKyBkYXRlRGVsdGFcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG5cbiAgICBjb25zdCBzcGFuRWxlbWVudCA9IGlzRGF0ZVBpY2tlclxuICAgICAgPyB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudFxuICAgICAgOiB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudDtcbiAgICBzcGFuRWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLnBhZFZhbHVlKFxuICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuZ2V0RGF0ZSgpXG4gICAgKTtcbiAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24oc3BhbkVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVZZWFyKGlzVXA6IGJvb2xlYW4sIGlzRGF0ZVBpY2tlcjogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHllYXJEZWx0YSA9IGlzVXAgPyAxIDogLTE7XG4gICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShcbiAgICAgIG5ldyBEYXRlKFxuICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXRGdWxsWWVhcihcbiAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5nZXRGdWxsWWVhcigpICsgeWVhckRlbHRhXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3Qgc3BhbkVsZW1lbnQgPSBpc0RhdGVQaWNrZXJcbiAgICAgID8gdGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudFxuICAgICAgOiB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudDtcbiAgICBzcGFuRWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZVxuICAgICAgLmdldEZ1bGxZZWFyKClcbiAgICAgIC50b1N0cmluZygpXG4gICAgICAuc2xpY2UoLTIpO1xuICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbihzcGFuRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUhvdXJzKGlzVXA6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBob3Vyc0RlbHRhID0gaXNVcCA/IDEgOiAtMTtcbiAgICBsZXQgc2VsZWN0ZWRIb3VycyA9XG4gICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5nZXRIb3VycygpICsgaG91cnNEZWx0YTtcblxuICAgIGlmIChzZWxlY3RlZEhvdXJzID09PSAwKSBzZWxlY3RlZEhvdXJzID0gMjQ7XG4gICAgaWYgKHNlbGVjdGVkSG91cnMgPT09IC0xKSBzZWxlY3RlZEhvdXJzID0gMjM7XG5cbiAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgbmV3IERhdGUodGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuc2V0SG91cnMoc2VsZWN0ZWRIb3VycykpXG4gICAgKTtcblxuICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IHRoaXMucGFkVmFsdWUoXG4gICAgICBzZWxlY3RlZEhvdXJzID4gMTIgPyBzZWxlY3RlZEhvdXJzIC0gMTIgOiBzZWxlY3RlZEhvdXJzXG4gICAgKTtcbiAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgdGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPVxuICAgICAgc2VsZWN0ZWRIb3VycyA+IDExICYmIHNlbGVjdGVkSG91cnMgPCAyNCA/ICdQTScgOiAnQU0nO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNaW51dGVzKGlzVXA6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBtaW51dGVzRGVsdGEgPSBpc1VwID8gMSA6IC0xO1xuICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICBuZXcgRGF0ZShcbiAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuc2V0TWludXRlcyhcbiAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5nZXRNaW51dGVzKCkgKyBtaW51dGVzRGVsdGFcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLnBhZFZhbHVlKFxuICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuZ2V0TWludXRlcygpXG4gICAgKTtcbiAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b2dnbGVBTVBNKCk6IHZvaWQge1xuICAgIHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID1cbiAgICAgIHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID09PSAnQU0nID8gJ1BNJyA6ICdBTSc7XG5cbiAgICBjb25zdCBob3Vyc1RvQWRkID1cbiAgICAgIHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID09PSAnQU0nID8gLTEyIDogMTI7XG4gICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShcbiAgICAgIG5ldyBEYXRlKFxuICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXRIb3VycyhcbiAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5nZXRIb3VycygpICsgaG91cnNUb0FkZFxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgcGFkVmFsdWUodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuICgnMCcgKyB2YWx1ZSkuc2xpY2UoLTIpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc051bWJlcihldnQ6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgICBldnQgPSBldnQgPyBldnQgOiAod2luZG93LmV2ZW50IGFzIEtleWJvYXJkRXZlbnQpO1xuICAgIGxldCBjaGFyQ29kZSA9IGV2dC53aGljaCA/IGV2dC53aGljaCA6IGV2dC5rZXlDb2RlO1xuICAgIHJldHVybiAoXG4gICAgICAoY2hhckNvZGUgPj0gNDggJiYgY2hhckNvZGUgPD0gNTcpIHx8IChjaGFyQ29kZSA+PSA5NiAmJiBjaGFyQ29kZSA8PSAxMDUpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBvblBvcG92ZXJTaG93bigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbCkge1xuICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQodHJ1ZSk7XG4gICAgICB0aGlzLnNldFNob3dEYXRlSW5wdXQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uUG9wb3ZlckhpZGRlbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbCkge1xuICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgICAgdGhpcy5ibHVyT25EYXRlVGltZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYmx1ck9uRGF0ZVRpbWUoKTogdm9pZCB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuZGF0ZVRpbWVNYWluVGltZXIpO1xuICAgIHRoaXMuZGF0ZVRpbWVNYWluVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVIpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFpc05hTih0aGlzLnNwYW5PbmU/Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKSAmJlxuICAgICAgICAgICFpc05hTih0aGlzLnNwYW5Ud28/Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKSAmJlxuICAgICAgICAgICFpc05hTih0aGlzLnNwYW5UaHJlZT8ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcuaXNGdXR1cmVEYXRlRGlzYWJsZWQgJiZcbiAgICAgICAgICAgIG1vbWVudCh0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZSkuaXNBZnRlcihtb21lbnQoKSlcbiAgICAgICAgICApXG4gICAgICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMoeyBpbnZhbGlkOiB0cnVlIH0pOyAvLyBkb24ndCBhY2NlcHQgZnV0dXJlIGRhdGVzXG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcuZXhwaXJlZERhdGVJbnZhbGlkICYmXG4gICAgICAgICAgICAgIG1vbWVudCh0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZSkuaXNCZWZvcmUobW9tZW50KCkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKHsgaW52YWxpZDogdHJ1ZSB9KTsgLy8gZG9uJ3QgYWNjZXB0IGV4cGlyZWQgZGF0ZXNcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmRhdGVDaGFuZ2VkLm5leHQoXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnZGQnO1xuICAgICAgICAgIHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ3l5JztcbiAgICAgICAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKG5ldyBEYXRlKCkpO1xuICAgICAgICAgIHRoaXMuc2V0U2hvd0RhdGVJbnB1dChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT1cbiAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICAgICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWlzTmFOKHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCkgJiZcbiAgICAgICAgICAhaXNOYU4odGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLmV4cGlyZWREYXRlSW52YWxpZCAmJlxuICAgICAgICAgICAgbW9tZW50KHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlKS5pc0JlZm9yZShtb21lbnQoKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7IGludmFsaWQ6IHRydWUgfSk7IC8vIGRvbid0IGFjY2VwdCBleHBpcmVkIGRhdGVzXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmRhdGVDaGFuZ2VkLm5leHQoXG4gICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnbW0nO1xuICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICd5eSc7XG4gICAgICAgICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShuZXcgRGF0ZSgpKTtcbiAgICAgICAgICB0aGlzLnNldFNob3dEYXRlSW5wdXQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWlzTmFOKHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCkgJiZcbiAgICAgICAgICAhaXNOYU4odGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyB0aGlzLmNhbGVuZGFyU2VydmljZS5kYXRlQ2hhbmdlZC5uZXh0KFxuICAgICAgICAgIC8vICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlXG4gICAgICAgICAgLy8gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnSEgnO1xuICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdNTSc7XG4gICAgICAgICAgdGhpcy5zZXRUaW1lUGlja2VyVGltZSgpO1xuICAgICAgICAgIHRoaXMuc2V0U2hvd0RhdGVJbnB1dChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGF0ZVRpbWVNYWluVGltZXIpO1xuICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IC0xO1xuICAgICAgdGhpcy5uZXdJbnB1dENoYW5nZWQgPSB0cnVlO1xuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RMYXN0T25lRm9yU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIC8vIGNsZWFyVGltZW91dCh0aGlzLndob2xlSW5wdXRTZWxlY3Rpb24pO1xuICAgIGxldCByYW5nZSwgc2VsZWN0aW9uO1xuXG4gICAgdGhpcy5zZXRTaG93RGF0ZUlucHV0KHRydWUpO1xuICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcbiAgICB0aGlzLnNldElzRm9jdXNJbnB1dCh0cnVlKTtcblxuICAgIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uICYmIGRvY3VtZW50LmNyZWF0ZVJhbmdlKSB7XG4gICAgICBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lICE9PVxuICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICAgKSB7XG4gICAgICAgIHJhbmdlLnNldFN0YXJ0KHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQsIDEpO1xuICAgICAgICByYW5nZS5zZXRFbmQodGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudCwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByYW5nZS5zZXRTdGFydCh0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudCwgMSk7XG4gICAgICAgIHJhbmdlLnNldEVuZCh0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudCwgMSk7XG4gICAgICB9XG5cbiAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICBzZWxlY3Rpb24/LmFkZFJhbmdlKHJhbmdlKTtcbiAgICB9XG5cbiAgICB0aGlzLnRpbWVvdXRDbGVhbmVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0JsdXIpO1xuICAgIH0sIDkwKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RMYXN0T25lQWZ0ZXJNb3VzZVVwKCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICApIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAyO1xuICAgICAgdGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U2hvd0RhdGVJbnB1dCh0cnVlKTtcbiAgICB0aGlzLnRpbWVvdXRDbGVhbmVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0JsdXIpO1xuICAgIH0sIDkwKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNEYXRlVGltZVBpY2tlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSIHx8XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uVElNRV9QSUNLRVIgfHxcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG9uRGVzdG9yeSgpIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==
|