ca-components 1.6.691 → 1.6.693

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.
@@ -50,6 +50,7 @@ export class CaInputDatetimePickerComponent {
50
50
  .pipe(takeUntil(this.destroy$))
51
51
  .subscribe((date) => {
52
52
  if (!this.inputConfig.isDisabled) {
53
+ console.log('CALENDAR SERVIE DATE CHANGE');
53
54
  this.setTimeDateInput(date);
54
55
  this.caInputComponent.caInputPlaceholderIconComponent.t2?.close();
55
56
  }
@@ -232,11 +233,12 @@ export class CaInputDatetimePickerComponent {
232
233
  this.onChange = fn;
233
234
  }
234
235
  onChange(_) {
235
- this.superControl.control?.setValue(_);
236
- this.superControl.control?.markAsTouched(); // Mark the control as touched
237
- this.superControl.control?.markAsDirty();
236
+ // this.superControl.control?.setValue(_);
237
+ // this.superControl.control?.markAsTouched(); // Mark the control as touched
238
+ // this.superControl.control?.markAsDirty();
238
239
  }
239
240
  writeValue(obj) {
241
+ console.log('WRITE VALUE');
240
242
  this.setTimeDateInput(obj, true);
241
243
  }
242
244
  registerOnTouched() { }
@@ -825,4 +827,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
825
827
  type: ViewChild,
826
828
  args: ['holder1', { static: false }]
827
829
  }] } });
828
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtaW5wdXQtZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NhLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhLWlucHV0LWRhdGV0aW1lLXBpY2tlci9jYS1pbnB1dC1kYXRldGltZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtaW5wdXQtZGF0ZXRpbWUtcGlja2VyL2NhLWlucHV0LWRhdGV0aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLElBQUksRUFDSixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVILFdBQVcsRUFFWCxtQkFBbUIsR0FDdEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsVUFBVTtBQUNWLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUkxQyxPQUFPLEVBQW9CLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXJFLE9BQU87QUFDUCxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLDRCQUE0QixHQUMvQixNQUFNLG1CQUFtQixDQUFDO0FBRTNCLGFBQWE7QUFDYixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUN0SCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxzRkFBc0YsQ0FB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LEVBQUUsS0FBSyxFQUFFO2dCQUNJLE9BQU87c0JBQS9DLFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE91dHB1dCxcbiAgICBTZWxmLFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE5nQ29udHJvbCxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG4vLyBJbXBvcnRzXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBOZ2JQb3BvdmVyIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbi8vIE1vZGVsc1xuaW1wb3J0IHsgSUNhSW5wdXQgfSBmcm9tICcuLi9jYS1pbnB1dC9jb25maWcnO1xuaW1wb3J0IHsgSW5wdXRDaGFuZ2VWYWx1ZSwgSW5wdXRTdmdSb3V0ZXMgfSBmcm9tICcuLi9jYS1pbnB1dC91dGlscyc7XG5cbi8vIFBpcGVcbmltcG9ydCB7XG4gICAgSW5wdXRDb250YWluZXJDbGFzc1BpcGUsXG4gICAgSW5wdXREYXRldGltZVBpY2tlckNsYXNzUGlwZSxcbn0gZnJvbSAnLi4vY2EtaW5wdXQvcGlwZXMnO1xuXG4vLyBDb21wb25lbnRzXG5pbXBvcnQgeyBDYUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vY2EtaW5wdXQvY2EtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IENhQ3VzdG9tRGF0ZXRpbWVQaWNrZXJzQ29tcG9uZW50IH0gZnJvbSAnLi4vY2EtY3VzdG9tLWRhdGV0aW1lLXBpY2tlcnMvY2EtY3VzdG9tLWRhdGV0aW1lLXBpY2tlcnMuY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXRQbGFjZWhvbGRlckljb25Db21wb25lbnQgfSBmcm9tICcuLi9jYS1pbnB1dC9jb21wb25lbnRzL2NhLWlucHV0LXBsYWNlaG9sZGVyLWljb24vY2EtaW5wdXQtcGxhY2Vob2xkZXItaWNvbi5jb21wb25lbnQnO1xuXG4vLyBFbnVtc1xuaW1wb3J0IHsgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bSB9IGZyb20gJy4uL2NhLWlucHV0L2VudW1zJztcblxuLy8gU2VydmljZXNcbmltcG9ydCB7IENhbGVuZGFyRGF0ZVRpbWVQaWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi4vY2EtY3VzdG9tLWRhdGV0aW1lLXBpY2tlcnMvc2VydmljZXMvY2FsZW5kYXItZGF0ZXRpbWUtcGlja2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQW5ndWxhclN2Z0ljb25Nb2R1bGUgfSBmcm9tICdhbmd1bGFyLXN2Zy1pY29uJztcbmltcG9ydCB7IEZvcm1Db250cm9sUGlwZSB9IGZyb20gJy4uL2NhLWlucHV0L3BpcGVzL2Zvcm0tY29udHJvbC5waXBlJztcbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnY2EtaW5wdXQtZGF0ZXRpbWUtcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2EtaW5wdXQtZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFtcbiAgICAgICAgJy4vY2EtaW5wdXQtZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5zY3NzJyxcbiAgICAgICAgJy4uL2NhLWlucHV0L3Njc3MvL2NhLWlucHV0LmRhdGVwaWNrZXIuc2NzcycsXG4gICAgXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgLy8gbW9kdWxlc1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBBbmd1bGFyU3ZnSWNvbk1vZHVsZSxcbiAgICAgICAgLy8gY29tcG9uZW50c1xuICAgICAgICBDYUlucHV0Q29tcG9uZW50LFxuICAgICAgICBDYUN1c3RvbURhdGV0aW1lUGlja2Vyc0NvbXBvbmVudCxcbiAgICAgICAgLy8gcGlwZXNcbiAgICAgICAgSW5wdXREYXRldGltZVBpY2tlckNsYXNzUGlwZSxcbiAgICAgICAgSW5wdXRDb250YWluZXJDbGFzc1BpcGUsXG4gICAgICAgIEZvcm1Db250cm9sUGlwZSxcbiAgICBdLFxuICAgIHByb3ZpZGVyczogW0NhbGVuZGFyRGF0ZVRpbWVQaWNrZXJTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2FJbnB1dERhdGV0aW1lUGlja2VyQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25EZXN0cm95XG57XG4gICAgQElucHV0KCkgaW5wdXRDb25maWchOiBJQ2FJbnB1dDtcbiAgICBASW5wdXQoKSBmb3JtRm9ybWF0Pzogc3RyaW5nO1xuXG4gICAgQE91dHB1dCgnY2xlYXInKSBjbGVhcklucHV0RXZlbnQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9XG4gICAgICAgIG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgICBAT3V0cHV0KCdibHVySW5wdXQnKSBibHVySW5wdXRFdmVudDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID1cbiAgICAgICAgbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgQFZpZXdDaGlsZChDYUlucHV0UGxhY2Vob2xkZXJJY29uQ29tcG9uZW50KVxuICAgIGNhSW5wdXRQbGFjZWhvbGRlckljb25Db21wb25lbnQhOiBDYUlucHV0UGxhY2Vob2xkZXJJY29uQ29tcG9uZW50O1xuXG4gICAgQFZpZXdDaGlsZCgnZGF0ZVRpbWVQb3BvdmVyJykgZGF0ZVRpbWVQb3BvdmVyITogTmdiUG9wb3ZlcjtcbiAgICBAVmlld0NoaWxkKENhSW5wdXRDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgY2FJbnB1dENvbXBvbmVudCE6IENhSW5wdXRDb21wb25lbnQ7XG5cbiAgICBwdWJsaWMgc2hvd0RhdGVJbnB1dDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBkYXRlVGltZUlucHV0RGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgcHVibGljIHNlbGVjdGlvbklucHV0OiBudW1iZXIgPSAtMTtcblxuICAgIHByaXZhdGUgZGF0ZVRpbWVNYWluVGltZXIhOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bWJlcjtcbiAgICBwcml2YXRlIGZvY3VzQmx1ciE6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVtYmVyO1xuICAgIHByaXZhdGUgdGltZW91dENsZWFuZXIhOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bWJlcjtcblxuICAgIHB1YmxpYyBpbnB1dFN2Z1JvdXRlcyA9IElucHV0U3ZnUm91dGVzO1xuXG4gICAgcHVibGljIGlzVG91Y2hlZElucHV0OiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIHByZXZlbnRCbHVyOiBib29sZWFuID0gZmFsc2U7XG4gICAgLy8gRGF0ZVxuICAgIHB1YmxpYyBuZXdJbnB1dENoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBPdXRwdXQoKSBzZWxlY3RMYXN0T25lRm9yU2VsZWN0aW9uRW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgICBAT3V0cHV0KCkgc2VsZWN0TGFzdE9uZUFmdGVyTW91c2VVcEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gICAgQE91dHB1dCgpIG9uRGF0ZVBhc3RlRW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8Q2xpcGJvYXJkRXZlbnQ+KCk7XG4gICAgQE91dHB1dCgpIG9uRm9jdXNFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PigpO1xuICAgIEBPdXRwdXQoKSBjaGFuZ2VTZWxlY3Rpb25FbW1pdGVyID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgICAgIGU6IEtleWJvYXJkRXZlbnQ7XG4gICAgICAgIG5vUHJldmVudERlZmF1bHQ6IGJvb2xlYW47XG4gICAgfT4oKTtcbiAgICBAT3V0cHV0KCkgc2V0U2VsZWN0aW9uRW1taXRlciA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgICAgICBwcmV2ZW50RGVmYXVsdDogKCkgPT4gdm9pZDtcbiAgICAgICAgc3RvcFByb3BhZ2F0aW9uOiAoKSA9PiB2b2lkO1xuICAgICAgICB0YXJnZXQ6IGFueTtcbiAgICB9PigpO1xuXG4gICAgQFZpZXdDaGlsZCgnc3BhbjEnLCB7IHN0YXRpYzogZmFsc2UgfSkgc3BhbjEhOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ3NwYW4yJywgeyBzdGF0aWM6IGZhbHNlIH0pIHNwYW4yITogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdzcGFuMycsIHsgc3RhdGljOiBmYWxzZSB9KSBzcGFuMyE6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnaG9sZGVyMScsIHsgc3RhdGljOiBmYWxzZSB9KSBob2xkZXIxITogRWxlbWVudFJlZjtcblxuICAgIHByaXZhdGUgZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBTZWxmKCkgcHVibGljIHN1cGVyQ29udHJvbDogTmdDb250cm9sLFxuICAgICAgICBwcml2YXRlIGNhbGVuZGFyU2VydmljZTogQ2FsZW5kYXJEYXRlVGltZVBpY2tlclNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldFRpbWVQaWNrZXJUaW1lKCk7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmRhdGVDaGFuZ2VkXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlucHV0Q29uZmlnLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUaW1lRGF0ZUlucHV0KGRhdGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhSW5wdXRDb21wb25lbnQuY2FJbnB1dFBsYWNlaG9sZGVySWNvbkNvbXBvbmVudC50Mj8uY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXQgZ2V0U3VwZXJDb250cm9sKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZWN0TGFzdE9uZUZvclNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgbGV0IHJhbmdlLCBzZWxlY3Rpb247XG5cbiAgICAgICAgdGhpcy5zaG93RGF0ZUlucHV0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IC0xO1xuICAgICAgICB0aGlzLmNhSW5wdXRDb21wb25lbnQuaXNGb2N1c0lucHV0ID0gdHJ1ZTtcblxuICAgICAgICBpZiAod2luZG93LmdldFNlbGVjdGlvbiAmJiBkb2N1bWVudC5jcmVhdGVSYW5nZSkge1xuICAgICAgICAgICAgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lICE9PVxuICAgICAgICAgICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByYW5nZS5zZXRTdGFydCh0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQsIDEpO1xuICAgICAgICAgICAgICAgIHJhbmdlLnNldEVuZCh0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQsIDEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByYW5nZS5zZXRTdGFydCh0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQsIDEpO1xuICAgICAgICAgICAgICAgIHJhbmdlLnNldEVuZCh0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQsIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZWxlY3Rpb24/LnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICAgICAgc2VsZWN0aW9uPy5hZGRSYW5nZShyYW5nZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRpbWVvdXRDbGVhbmVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0JsdXIpO1xuICAgICAgICB9LCA5MCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGVjdExhc3RPbmVBZnRlck1vdXNlVXAoKTogdm9pZCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT1cbiAgICAgICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDE7XG4gICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDI7XG4gICAgICAgICAgICB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zaG93RGF0ZUlucHV0ID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLnRpbWVvdXRDbGVhbmVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0JsdXIpO1xuICAgICAgICB9LCA5MCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRGF0ZVBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGNvbnN0IHBhc3RlVGV4dCA9IGV2ZW50LmNsaXBib2FyZERhdGE/LmdldERhdGEoJ3RleHQnKSBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IHBhc3RlZERhdGUgPSBuZXcgRGF0ZShwYXN0ZVRleHQpO1xuICAgICAgICBpZiAoIWlzTmFOKHBhc3RlZERhdGUuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRUaW1lRGF0ZUlucHV0KHBhc3RlZERhdGUpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCh0aGlzLnNlbGVjdGlvbklucHV0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjaGFuZ2VTZWxlY3Rpb24oXG4gICAgICAgIGV2ZW50OiBLZXlib2FyZEV2ZW50LFxuICAgICAgICBub1ByZXZlbnREZWZhdWx0ID0gZmFsc2VcbiAgICApOiB2b2lkIHtcbiAgICAgICAgaWYgKCFub1ByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc05hdmlnYXRpb25LZXkgPSB0aGlzLmlzTmF2aWdhdGlvbktleShldmVudCk7XG4gICAgICAgIGNvbnN0IGlzU3BlY2lhbFRpbWVQaWNrZXJLZXkgPVxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gMyAmJlxuICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLlRJTUVfUElDS0VSO1xuXG4gICAgICAgIGlmIChpc05hdmlnYXRpb25LZXkgfHwgaXNTcGVjaWFsVGltZVBpY2tlcktleSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlTmF2aWdhdGlvbktleShldmVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNOdW1iZXIoZXZlbnQpKSB7XG4gICAgICAgICAgICBpZiAoIW5vUHJldmVudERlZmF1bHQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIW5vUHJldmVudERlZmF1bHQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gLTEpIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlS2V5Ym9hcmRJbnB1dHMoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc051bWJlcihldnQ6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgZXZ0ID0gZXZ0ID8gZXZ0IDogKHdpbmRvdy5ldmVudCBhcyBLZXlib2FyZEV2ZW50KTtcbiAgICAgICAgbGV0IGNoYXJDb2RlID0gZXZ0LndoaWNoID8gZXZ0LndoaWNoIDogZXZ0LmtleUNvZGU7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoY2hhckNvZGUgPj0gNDggJiYgY2hhckNvZGUgPD0gNTcpIHx8XG4gICAgICAgICAgICAoY2hhckNvZGUgPj0gOTYgJiYgY2hhckNvZGUgPD0gMTA1KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNOYXZpZ2F0aW9uS2V5KGU6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgbmF2aWdhdGlvbktleXMgPSBbMzcsIDM4LCAzOSwgNDAsIDgsIDksIDQ2XTsgLy8gQXJyb3cga2V5cywgQmFja3NwYWNlLCBUYWIsIERlbGV0ZVxuICAgICAgICByZXR1cm4gbmF2aWdhdGlvbktleXMuaW5jbHVkZXMoZS5rZXlDb2RlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Gb2N1cyhldmVudD86IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkZvY3VzRW1pdHRlci5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xvc2VQb3BvdmVyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jYUlucHV0Q29tcG9uZW50LmNhSW5wdXRQbGFjZWhvbGRlckljb25Db21wb25lbnQudDIpXG4gICAgICAgICAgICB0aGlzLmNhSW5wdXRDb21wb25lbnQuY2FJbnB1dFBsYWNlaG9sZGVySWNvbkNvbXBvbmVudC50Mi5jbG9zZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b2dnbGVEcm9wZG93bk9wdGlvbnMoKSB7XG4gICAgICAgIGlmICh0aGlzLmNhSW5wdXRDb21wb25lbnQuY2FJbnB1dFBsYWNlaG9sZGVySWNvbkNvbXBvbmVudC50Mikge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICF0aGlzLmNhSW5wdXRDb21wb25lbnQuY2FJbnB1dFBsYWNlaG9sZGVySWNvbkNvbXBvbmVudC50Mi5pc09wZW4oKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGF0ZVRpbWVNYWluVGltZXIpO1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmZvY3VzQmx1cik7XG4gICAgICAgICAgICAgICAgdGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gLTE7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhSW5wdXRDb21wb25lbnQuY2FJbnB1dFBsYWNlaG9sZGVySWNvbkNvbXBvbmVudC50Mi5vcGVuKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgbGV0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24/LnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZUZvY3VzSW5wdXQoZTogRXZlbnQpIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBlIGFzIEZvY3VzRXZlbnQ7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlucHV0Q29uZmlnLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRhdGVUaW1lTWFpblRpbWVyKTtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmZvY3VzQmx1cik7XG4gICAgICAgICAgICB0aGlzLnNob3dEYXRlSW5wdXQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAtMSAmJlxuICAgICAgICAgICAgICAgICAgICAoZXZlbnQ/LnRhcmdldCBhcyBIVE1MRWxlbWVudCk/Lm5vZGVOYW1lID09PSAnSU5QVVQnKSB8fFxuICAgICAgICAgICAgICAgIChldmVudD8ucmVsYXRlZFRhcmdldCBhcyBIVE1MRWxlbWVudCk/Lm5vZGVOYW1lID09PSAnSU5QVVQnIHx8XG4gICAgICAgICAgICAgICAgZXZlbnQ/LnJlbGF0ZWRUYXJnZXQgPT09IG51bGxcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJldmVudEJsdXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gLTE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY2FJbnB1dENvbXBvbmVudC5jYUlucHV0UGxhY2Vob2xkZXJJY29uQ29tcG9uZW50LnQyLnRvZ2dsZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldFNwYW5TZWxlY3Rpb24oZWxlbWVudDogTm9kZSk6IHZvaWQge1xuICAgICAgICBsZXQgcmFuZ2U6IFJhbmdlO1xuICAgICAgICBsZXQgc2VsZWN0aW9uOiBTZWxlY3Rpb24gfCBudWxsO1xuXG4gICAgICAgIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uICYmIGRvY3VtZW50LmNyZWF0ZVJhbmdlKSB7XG4gICAgICAgICAgICBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgICAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWxlbWVudCk7XG4gICAgICAgICAgICBzZWxlY3Rpb24/LnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICAgICAgc2VsZWN0aW9uPy5hZGRSYW5nZShyYW5nZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0U2VsZWN0aW9uKGV2ZW50OiB7XG4gICAgICAgIHByZXZlbnREZWZhdWx0OiAoKSA9PiB2b2lkO1xuICAgICAgICBzdG9wUHJvcGFnYXRpb246ICgpID0+IHZvaWQ7XG4gICAgICAgIHRhcmdldDogYW55O1xuICAgIH0pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldDtcblxuICAgICAgICBjb25zdCBzZWxlY3Rpb25JbnB1dCA9IHBhcnNlSW50KGVsZW1lbnQuZ2V0QXR0cmlidXRlKCd0YWJpbmRleCcpKTtcblxuICAgICAgICBjb25zdCBjdXJyZW50U2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuXG4gICAgICAgIGlmIChjdXJyZW50U2VsZWN0aW9uICYmIGN1cnJlbnRTZWxlY3Rpb24udG9TdHJpbmcoKS5sZW5ndGggPiAxMCkge1xuICAgICAgICAgICAgdGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuICAgICAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRhdGVUaW1lTWFpblRpbWVyKTtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmZvY3VzQmx1cik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnbWFpbicpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gc2VsZWN0aW9uSW5wdXQ7XG4gICAgICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24oZWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KHRoaXMuc2VsZWN0aW9uSW5wdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2hhbmdlKF86IElucHV0Q2hhbmdlVmFsdWUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8uc2V0VmFsdWUoXyk7XG4gICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/Lm1hcmtBc1RvdWNoZWQoKTsgLy8gTWFyayB0aGUgY29udHJvbCBhcyB0b3VjaGVkXG4gICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/Lm1hcmtBc0RpcnR5KCk7XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlVmFsdWUob2JqOiBJbnB1dENoYW5nZVZhbHVlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0VGltZURhdGVJbnB1dChvYmosIHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZCgpOiB2b2lkIHt9XG5cbiAgICAvLyBCTFVSIE9OIElOUFVUXG4gICAgcHVibGljIGJsdXJPbkRhdGVUaW1lKCk6IHZvaWQge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVNYWluVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIWlzTmFOKHRoaXMuc3BhbjE/Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKSAmJlxuICAgICAgICAgICAgICAgICAgICAhaXNOYU4odGhpcy5zcGFuMj8ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpICYmXG4gICAgICAgICAgICAgICAgICAgICFpc05hTih0aGlzLnNwYW4zPy5uYXRpdmVFbGVtZW50LmlubmVySFRNTClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5pc0Z1dHVyZURhdGVEaXNhYmxlZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgbW9tZW50KHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUpLmlzQWZ0ZXIobW9tZW50KCkpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCBhY2NlcHQgZnV0dXJlIGRhdGVzXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcuZXhwaXJlZERhdGVJbnZhbGlkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9tZW50KHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUpLmlzQmVmb3JlKG1vbWVudCgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsgLy8gZG9uJ3QgYWNjZXB0IGV4cGlyZWQgZGF0ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuZGF0ZUNoYW5nZWQubmV4dChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdkZCc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAneXknO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RGF0ZUlucHV0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09XG4gICAgICAgICAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIWlzTmFOKHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpICYmXG4gICAgICAgICAgICAgICAgICAgICFpc05hTih0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLmV4cGlyZWREYXRlSW52YWxpZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgbW9tZW50KHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUpLmlzQmVmb3JlKG1vbWVudCgpKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7IGludmFsaWQ6IHRydWUgfSk7IC8vIGRvbid0IGFjY2VwdCBleHBpcmVkIGRhdGVzXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5kYXRlQ2hhbmdlZC5uZXh0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICd5eSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dEYXRlSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIWlzTmFOKHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpICYmXG4gICAgICAgICAgICAgICAgICAgICFpc05hTih0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5kYXRlQ2hhbmdlZC5uZXh0KFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnSEgnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ01NJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUaW1lUGlja2VyVGltZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dEYXRlSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRhdGVUaW1lTWFpblRpbWVyKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcbiAgICAgICAgICAgIHRoaXMubmV3SW5wdXRDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfSwgMTAwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Qb3BvdmVyU2hvd24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2hvd0RhdGVJbnB1dCA9IHRydWU7XG4gICAgICAgIHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUG9wb3ZlckhpZGRlbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ibHVyT25EYXRlVGltZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRUaW1lRGF0ZUlucHV0KGRhdGU6IElucHV0Q2hhbmdlVmFsdWUsIGhhc1ZhbHVlPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zb2xlLmxvZygnU0VUIFRJTUUgREFURSBJTlBVVCBPTiBMT0FEJyk7XG4gICAgICAgIGxldCB0ZXh0LCBkYXRlRm9ybWF0LCB0aW1lRm9ybWF0O1xuICAgICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSKSB7XG4gICAgICAgICAgICB0ZXh0ID0gbW9tZW50KG5ldyBEYXRlKGRhdGUpKS5mb3JtYXQoJ01NL0REL1lZJyk7XG4gICAgICAgICAgICBkYXRlRm9ybWF0ID0gdGV4dC5zcGxpdCgnLycpO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PVxuICAgICAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0ZXh0ID0gbW9tZW50KG5ldyBEYXRlKGRhdGUpKS5mb3JtYXQoJ01NL0REL1lZJyk7XG4gICAgICAgICAgICBkYXRlRm9ybWF0ID0gdGV4dC5zcGxpdCgnLycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0ZSA9XG4gICAgICAgICAgICAgICAgZGF0ZSBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgICAgICAgICAgICAgPyBkYXRlXG4gICAgICAgICAgICAgICAgICAgIDogbmV3IERhdGUobW9tZW50KCkuZm9ybWF0KCdNTS9ERC9ZWVlZJykgKyAnICcgKyBkYXRlKTtcbiAgICAgICAgICAgIHRleHQgPSBtb21lbnQobmV3IERhdGUoZGF0ZSkpLmZvcm1hdCgnSEg6bW0nKTtcblxuICAgICAgICAgICAgdGltZUZvcm1hdCA9IG1vbWVudChuZXcgRGF0ZShkYXRlKSkuZm9ybWF0KCdoaC9tbS9BJyk7XG4gICAgICAgICAgICBkYXRlRm9ybWF0ID0gdGltZUZvcm1hdC5zcGxpdCgnLycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZm9ybUZvcm1hdCkge1xuICAgICAgICAgICAgY29uc3QgbmV3Rm9ybUZvcm1hdCA9IG1vbWVudChuZXcgRGF0ZShkYXRlKSkuZm9ybWF0KFxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUZvcm1hdFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UobmV3Rm9ybUZvcm1hdCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWhhc1ZhbHVlKSB0aGlzLm9uQ2hhbmdlKHRleHQpO1xuICAgICAgICAvLyB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0ZXh0O1xuICAgICAgICB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuc3BhbjEpIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSBkYXRlRm9ybWF0WzBdO1xuXG4gICAgICAgIGlmICh0aGlzLnNwYW4yKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSAhPT1cbiAgICAgICAgICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGRhdGVGb3JtYXRbMV07XG4gICAgICAgICAgICAgICAgdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGRhdGVGb3JtYXRbMl07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSBkYXRlRm9ybWF0WzJdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICAgICAgdGhpcy5zaG93RGF0ZUlucHV0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlS2V5Ym9hcmRJbnB1dHMoZTogS2V5Ym9hcmRFdmVudCwgaXNSZXN0YXJ0PzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCBzcGFuT25lVmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCA9XG4gICAgICAgICAgICBpc05hTih0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKSB8fCB0aGlzLm5ld0lucHV0Q2hhbmdlZFxuICAgICAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgOiBwYXJzZUludCh0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKTtcbiAgICAgICAgY29uc3Qgc3BhbjJWYWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkID1cbiAgICAgICAgICAgIGlzTmFOKHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpIHx8IHRoaXMubmV3SW5wdXRDaGFuZ2VkXG4gICAgICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA6IHBhcnNlSW50KHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpO1xuXG4gICAgICAgIGxldCBzcGFuM1ZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lICE9PVxuICAgICAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBzcGFuM1ZhbHVlID1cbiAgICAgICAgICAgICAgICBpc05hTih0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKSB8fFxuICAgICAgICAgICAgICAgIHRoaXMubmV3SW5wdXRDaGFuZ2VkXG4gICAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgICAgOiBwYXJzZUludCh0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubmV3SW5wdXRDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzUmVzdGFydCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzcGFuT25lVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmluYWxfdmFsdWUgPSBwYXJzZUludChgJHtzcGFuT25lVmFsdWV9JHtlLmtleX1gKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmFsX3ZhbHVlID4gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzAnICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICApLnNsaWNlKC0yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldE1vbnRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUludChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIC0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmluYWxfdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdtbSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkuc2xpY2UoLTIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoZS5rZXkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0TW9udGgocGFyc2VJbnQoZS5rZXkpIC0gMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluYWxfdmFsdWUgPSAoJzAnICsgcGFyc2VJbnQoZS5rZXkpKS5zbGljZSgtMik7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGZpbmFsX3ZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludChgMSR7ZS5rZXl9YCkgPiAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNSZXN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnZGQnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgwLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNwYW4yVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmluYWxfdmFsdWUgPSBwYXJzZUludChgJHtzcGFuMlZhbHVlfSR7ZS5rZXl9YCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5hbF92YWx1ZSA+IDMxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcwJyArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5zZXREYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUludChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaW5hbF92YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnZGQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgyLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludChlLmtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5zZXREYXRlKHBhcnNlSW50KGUua2V5KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgICAgICAgICAgICcwJyArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgICApLnNsaWNlKC0yKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoYDEke2Uua2V5fWApID4gMzEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgyLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChpc1Jlc3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICd5eSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEsIHRydWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXNwYW4zVmFsdWUgfHwgc3BhbjNWYWx1ZS50b1N0cmluZygpLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgICAgICAgICAgICAgJzAnICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldEZ1bGxZZWFyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGAyMDAke3BhcnNlSW50KGUua2V5KX1gKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluYWxZZWFyID0gcGFyc2VJbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluYWxTaG93WWVhciA9XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFllYXIgPiAzMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcGFyc2VJbnQoYDE5JHtmaW5hbFllYXJ9YClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHBhcnNlSW50KGAyMCR7ZmluYWxZZWFyfWApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldEZ1bGxZZWFyKGZpbmFsU2hvd1llYXIpXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PVxuICAgICAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uSW5wdXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNSZXN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnbW0nO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgwKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNwYW5PbmVWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5hbF92YWx1ZSA9IHBhcnNlSW50KGAke3NwYW5PbmVWYWx1ZX0ke2Uua2V5fWApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmluYWxfdmFsdWUgPiAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMCcgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0TW9udGgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaW5hbF92YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnbW0nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludChlLmtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5zZXRNb250aChwYXJzZUludChlLmtleSkgLSAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5hbF92YWx1ZSA9ICgnMCcgKyBwYXJzZUludChlLmtleSkpLnNsaWNlKC0yKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gZmluYWxfdmFsdWU7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KGAxJHtlLmtleX1gKSA+IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzUmVzdGFydCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ3l5JztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDI7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3BhbjJWYWx1ZSB8fCBzcGFuMlZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICAgICAgICAgICAgICAnMCcgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0RnVsbFllYXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoYDIwMCR7cGFyc2VJbnQoZS5rZXkpfWApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5hbFllYXIgPSBwYXJzZUludChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5hbFNob3dZZWFyID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsWWVhciA+IDMxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBwYXJzZUludChgMTkke2ZpbmFsWWVhcn1gKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcGFyc2VJbnQoYDIwJHtmaW5hbFllYXJ9YCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0RnVsbFllYXIoZmluYWxTaG93WWVhcilcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgICApLnNsaWNlKC0yKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZWxlY3RTcGFuQnlUYWJJbmRleChpbmR4OiBudW1iZXIsIGNoYW5nZVRhYj86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgc3dpdGNoIChpbmR4KSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlVGFiKSB0aGlzLm5ld0lucHV0Q2hhbmdlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVOYXZpZ2F0aW9uS2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xuICAgICAgICAgICAgY2FzZSAzNzogLy8gTGVmdCBhcnJvd1xuICAgICAgICAgICAgICAgIHRoaXMubW92ZVNlbGVjdGlvbkxlZnQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzk6IC8vIFJpZ2h0IGFycm93XG4gICAgICAgICAgICBjYXNlIDk6IC8vIFRhYlxuICAgICAgICAgICAgICAgIHRoaXMubW92ZVNlbGVjdGlvblJpZ2h0T3JUYWIoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzODogLy8gVXAgYXJyb3dcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGVUaW1lTW9kZWwoJ3VwJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDQwOiAvLyBEb3duIGFycm93XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRlVGltZU1vZGVsKCdkb3duJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDg6IC8vIEJhY2tzcGFjZVxuICAgICAgICAgICAgY2FzZSA0NjogLy8gRGVsZXRlXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVLZXlib2FyZElucHV0cyhldmVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZURhdGVQaWNrZXJJbnB1dChpc1VwOiBib29sZWFuLCBpc0RhdGVQaWNrZXI6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDApIHRoaXMudXBkYXRlTW9udGgoaXNVcCk7XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDEpIHRoaXMudXBkYXRlRGF0ZShpc1VwLCBpc0RhdGVQaWNrZXIpO1xuICAgICAgICBlbHNlIHRoaXMudXBkYXRlWWVhcihpc1VwLCBpc0RhdGVQaWNrZXIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RGF0ZVRpbWVNb2RlbChkaXJlY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gLTEpIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuXG4gICAgICAgIGNvbnN0IGlzVXAgPSBkaXJlY3Rpb24gPT09ICd1cCc7XG4gICAgICAgIGNvbnN0IGlzRGF0ZVBpY2tlciA9XG4gICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVI7XG4gICAgICAgIGNvbnN0IGlzQmFua0NhcmRQaWNrZXIgPVxuICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PVxuICAgICAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkQ7XG5cbiAgICAgICAgaWYgKGlzRGF0ZVBpY2tlciB8fCBpc0JhbmtDYXJkUGlja2VyKVxuICAgICAgICAgICAgdGhpcy5oYW5kbGVEYXRlUGlja2VySW5wdXQoaXNVcCwgaXNEYXRlUGlja2VyKTtcbiAgICAgICAgZWxzZSB0aGlzLmhhbmRsZVRpbWVQaWNrZXJJbnB1dChpc1VwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1vdmVTZWxlY3Rpb25SaWdodE9yVGFiKGU6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXNEYXRlcGlja2VyQmFua0NhcmQgPVxuICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PVxuICAgICAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkQ7XG4gICAgICAgIGNvbnN0IG1heEluZGV4ID0gaXNEYXRlcGlja2VyQmFua0NhcmQgPyAxIDogMjtcblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA8IG1heEluZGV4ICYmICFlLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ICs9IDE7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KHRoaXMuc2VsZWN0aW9uSW5wdXQsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGUua2V5Q29kZSA9PT0gOSAmJiAhZS5zaGlmdEtleSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c05leHRJbnB1dCgpO1xuICAgICAgICB9IGVsc2UgaWYgKGUuc2hpZnRLZXkgJiYgZS5rZXlDb2RlID09PSA5KSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzUHJldmlvdXNJbnB1dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb2N1c1ByZXZpb3VzSW5wdXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFsbElucHV0cyA9IEFycmF5LmZyb20oXG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dC5pbnB1dC1jb250cm9sJylcbiAgICAgICAgKSBhcyBIVE1MSW5wdXRFbGVtZW50W107XG5cbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gYWxsSW5wdXRzLmZpbmRJbmRleChcbiAgICAgICAgICAgIChpbnB1dCkgPT4gaW5wdXQgPT09IHRoaXMuY2FJbnB1dENvbXBvbmVudC5pbnB1dC5uYXRpdmVFbGVtZW50XG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gLTEpIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAzO1xuICAgICAgICBlbHNlIGlmIChjdXJyZW50SW5kZXggPT09IDApIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgLT0gMTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgodGhpcy5zZWxlY3Rpb25JbnB1dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VycmVudEluZGV4ID4gMCkgYWxsSW5wdXRzW2N1cnJlbnRJbmRleCAtIDFdLmZvY3VzKCk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IC0xO1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9jdXNOZXh0SW5wdXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFsbElucHV0cyA9IEFycmF5LmZyb20oXG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dC5pbnB1dC1jb250cm9sJylcbiAgICAgICAgKSBhcyBIVE1MSW5wdXRFbGVtZW50W107XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGFsbElucHV0cy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoaW5wdXQpID0+IGlucHV0ID09PSB0aGlzLmNhSW5wdXRDb21wb25lbnQuaW5wdXQubmF0aXZlRWxlbWVudFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChhbGxJbnB1dHNbY3VycmVudEluZGV4ICsgMV0pIGFsbElucHV0c1tjdXJyZW50SW5kZXggKyAxXS5mb2N1cygpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuYmx1ck9uRGF0ZVRpbWUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0SXNGb2N1c0lucHV0KHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2FJbnB1dENvbXBvbmVudC5pc0ZvY3VzSW5wdXQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1vdmVTZWxlY3Rpb25MZWZ0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgLT0gMTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgodGhpcy5zZWxlY3Rpb25JbnB1dCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZU1vbnRoKGlzVXA6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbW9udGhEZWx0YSA9IGlzVXAgPyAxIDogLTE7XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0TW9udGgoXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5nZXRNb250aCgpICsgbW9udGhEZWx0YVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLnBhZFZhbHVlKFxuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5nZXRNb250aCgpICsgMVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZURhdGUoaXNVcDogYm9vbGVhbiwgaXNEYXRlUGlja2VyOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRhdGVEZWx0YSA9IGlzVXAgPyAxIDogLTE7XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0RGF0ZShcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLmdldERhdGUoKSArIGRhdGVEZWx0YVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHNwYW5FbGVtZW50ID0gaXNEYXRlUGlja2VyXG4gICAgICAgICAgICA/IHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudFxuICAgICAgICAgICAgOiB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHNwYW5FbGVtZW50LmlubmVySFRNTCA9IHRoaXMucGFkVmFsdWUodGhpcy5kYXRlVGltZUlucHV0RGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24oc3BhbkVsZW1lbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlWWVhcihpc1VwOiBib29sZWFuLCBpc0RhdGVQaWNrZXI6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeWVhckRlbHRhID0gaXNVcCA/IDEgOiAtMTtcbiAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5zZXRGdWxsWWVhcihcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLmdldEZ1bGxZZWFyKCkgKyB5ZWFyRGVsdGFcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBzcGFuRWxlbWVudCA9IGlzRGF0ZVBpY2tlclxuICAgICAgICAgICAgPyB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgICAgIDogdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBzcGFuRWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLmRhdGVUaW1lSW5wdXREYXRlXG4gICAgICAgICAgICAuZ2V0RnVsbFllYXIoKVxuICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgIC5zbGljZSgtMik7XG4gICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbihzcGFuRWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYWRWYWx1ZSh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICgnMCcgKyB2YWx1ZSkuc2xpY2UoLTIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlVGltZVBpY2tlcklucHV0KGlzVXA6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDApIHRoaXMudXBkYXRlSG91cnMoaXNVcCk7XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDEpIHRoaXMudXBkYXRlTWludXRlcyhpc1VwKTtcbiAgICAgICAgZWxzZSB0aGlzLnRvZ2dsZUFNUE0oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUhvdXJzKGlzVXA6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaG91cnNEZWx0YSA9IGlzVXAgPyAxIDogLTE7XG4gICAgICAgIGxldCBzZWxlY3RlZEhvdXJzID0gdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5nZXRIb3VycygpICsgaG91cnNEZWx0YTtcblxuICAgICAgICBpZiAoc2VsZWN0ZWRIb3VycyA9PT0gMCkgc2VsZWN0ZWRIb3VycyA9IDI0O1xuICAgICAgICBpZiAoc2VsZWN0ZWRIb3VycyA9PT0gLTEpIHNlbGVjdGVkSG91cnMgPSAyMztcblxuICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldEhvdXJzKHNlbGVjdGVkSG91cnMpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IHRoaXMucGFkVmFsdWUoXG4gICAgICAgICAgICBzZWxlY3RlZEhvdXJzID4gMTIgPyBzZWxlY3RlZEhvdXJzIC0gMTIgOiBzZWxlY3RlZEhvdXJzXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgIHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPVxuICAgICAgICAgICAgc2VsZWN0ZWRIb3VycyA+IDExICYmIHNlbGVjdGVkSG91cnMgPCAyNCA/ICdQTScgOiAnQU0nO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlTWludXRlcyhpc1VwOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1pbnV0ZXNEZWx0YSA9IGlzVXAgPyAxIDogLTE7XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0TWludXRlcyhcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLmdldE1pbnV0ZXMoKSArIG1pbnV0ZXNEZWx0YVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLnBhZFZhbHVlKFxuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5nZXRNaW51dGVzKClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0b2dnbGVBTVBNKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID1cbiAgICAgICAgICAgIHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPT09ICdBTScgPyAnUE0nIDogJ0FNJztcblxuICAgICAgICBjb25zdCBob3Vyc1RvQWRkID1cbiAgICAgICAgICAgIHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPT09ICdBTScgPyAtMTIgOiAxMjtcbiAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5zZXRIb3VycyhcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLmdldEhvdXJzKCkgKyBob3Vyc1RvQWRkXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFySW5wdXQoZXZlbnQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhcklucHV0RXZlbnQuZW1pdChldmVudCk7XG5cbiAgICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgICAgICB0aGlzLnJlc2V0RGF0ZVRpbWVJbnB1dHMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25CbHVySW5wdXQoZXZlbnQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ibHVySW5wdXRFdmVudC5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXREYXRlVGltZUlucHV0cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc3BhbjEpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ2RkJztcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ3l5JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PVxuICAgICAgICAgICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ3l5JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLlRJTUVfUElDS0VSXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ0hIJztcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ01NJztcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ0FNJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFRpbWVQaWNrZXJUaW1lKCk7XG4gICAgICAgIHRoaXMubmV3SW5wdXRDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgICAgICB0aGlzLnNob3dEYXRlSW5wdXQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0VGltZVBpY2tlclRpbWUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uVElNRV9QSUNLRVIpXG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgbW9tZW50KCkuZm9ybWF0KCdNTS9ERC9ZWVlZJykgK1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5pbnB1dENvbmZpZz8uaXNGcm9tRGF0ZSA/ICcgMTI6MTUnIDogJyAxMjowMCcpXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgY2xhc3M9XCJkYXRldGltZS1waWNrZXItbWFpbi1ob2xkZXIgaW5wdXQtY3VzdG9tLWdyb3VwIGRhdGV0aW1lY2xhc3NcIlxuICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICBnZXRTdXBlckNvbnRyb2xcbiAgICAgICAgICAgIHwgaW5wdXRDb250YWluZXJDbGFzc1xuICAgICAgICAgICAgICAgIDogY2FJbnB1dENvbXBvbmVudC5pc0ZvY3VzSW5wdXRcbiAgICAgICAgICAgICAgICA6IGNhSW5wdXRDb21wb25lbnQuaXNUb3VjaGVkSW5wdXRcbiAgICAgICAgICAgICAgICA6IGlucHV0Q29uZmlnXG4gICAgICAgICAgICAgICAgOiBnZXRTdXBlckNvbnRyb2w/LnZhbHVlXG4gICAgXCJcbj5cbiAgICA8ZGl2XG4gICAgICAgICNob2xkZXIxXG4gICAgICAgIGNsYXNzPVwiZGF0ZV90aW1lX2hvbGRlciBpbnB1dC1jb250cm9sXCJcbiAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzaG93RGF0ZUlucHV0XCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIChtb3VzZWRvd24pPVwic2VsZWN0TGFzdE9uZUZvclNlbGVjdGlvbigpXCJcbiAgICAgICAgKG1vdXNldXApPVwic2VsZWN0TGFzdE9uZUFmdGVyTW91c2VVcCgpXCJcbiAgICAgICAgKHBhc3RlKT1cIm9uRGF0ZVBhc3RlKCRldmVudClcIlxuICAgICAgICAoa2V5ZG93bik9XCJjaGFuZ2VTZWxlY3Rpb24oJGV2ZW50LCB0cnVlKVwiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bk9wdGlvbnMoKVwiXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICdwYWRkaW5nLWxlZnQnOiBpbnB1dENvbmZpZy5pc0ljb25IaWRkZW4gPyAnMnB4JyA6ICcyN3B4JyxcbiAgICAgICAgfVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgY2FJbnB1dENvbXBvbmVudC5pc0ZvY3VzSW5wdXRcbiAgICAgICAgICAgICAgICB8IGlucHV0RGF0ZXRpbWVQaWNrZXJDbGFzc1xuICAgICAgICAgICAgICAgICAgICA6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIDogZ2V0U3VwZXJDb250cm9sXG4gICAgICAgICAgICAgICAgICAgIDogaW5wdXRDb25maWdcbiAgICAgICAgICAgICAgICAgICAgOiBjYUlucHV0Q29tcG9uZW50LmlzVG91Y2hlZElucHV0XG4gICAgICAgICAgICAgICAgICAgIDogZ2V0U3VwZXJDb250cm9sPy52YWx1ZVxuICAgICAgICBcIlxuICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICNzcGFuMVxuICAgICAgICAgICAgY2xhc3M9XCJtYWluXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAncmVzZXQtc2VsZWN0aW9uLWNvbG9yJzogIWNhSW5wdXRDb21wb25lbnQuaXNGb2N1c0lucHV0LFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgKG1vdXNldXApPVwic2V0U2VsZWN0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgKGtleWRvd24pPVwiY2hhbmdlU2VsZWN0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgW2lubmVySFRNTF09XCJpbnB1dENvbmZpZy5uYW1lID09PSAnZGF0ZXBpY2tlcicgPyAnbW0nIDogJ0hIJ1wiXG4gICAgICAgID48L3NwYW4+XG4gICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYm9yZGVyLXBpY2tlclwiXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJpbnB1dENvbmZpZy5uYW1lID09PSAnZGF0ZXBpY2tlcicgPyAnLycgOiAnOidcIlxuICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICAjc3BhbjJcbiAgICAgICAgICAgIGNsYXNzPVwibWFpblwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgJ3Jlc2V0LXNlbGVjdGlvbi1jb2xvcic6ICFjYUlucHV0Q29tcG9uZW50LmlzRm9jdXNJbnB1dCxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCIxXCJcbiAgICAgICAgICAgIChtb3VzZXVwKT1cInNldFNlbGVjdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgIChrZXlkb3duKT1cImNoYW5nZVNlbGVjdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiaW5wdXRDb25maWcubmFtZSA9PT0gJ2RhdGVwaWNrZXInID8gJ2RkJyA6ICdNTSdcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJvcmRlci1waWNrZXJcIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiaW5wdXRDb25maWcubmFtZSA9PT0gJ2RhdGVwaWNrZXInID8gJy8nIDogJyAnXCJcbiAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICAgI3NwYW4zXG4gICAgICAgICAgICBjbGFzcz1cIm1haW5cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICdyZXNldC1zZWxlY3Rpb24tY29sb3InOiAhY2FJbnB1dENvbXBvbmVudC5pc0ZvY3VzSW5wdXQsXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIHRhYmluZGV4PVwiMlwiXG4gICAgICAgICAgICAobW91c2V1cCk9XCJzZXRTZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJjaGFuZ2VTZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICBbaW5uZXJIVE1MXT1cImlucHV0Q29uZmlnLm5hbWUgPT09ICdkYXRlcGlja2VyJyA/ICd5eScgOiAnQU0nXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8YXBwLWNhLWlucHV0XG4gICAgICAgIFtpbnB1dENvbmZpZ109XCJpbnB1dENvbmZpZ1wiXG4gICAgICAgIFtkYXRlVGltZVBvcG92ZXJdPVwiZGF0ZVRpbWVQb3BvdmVyXCJcbiAgICAgICAgKGZvY3VzSW5wdXRFdmVudCk9XCJoYW5kbGVGb2N1c0lucHV0KCRldmVudClcIlxuICAgICAgICAoaGFuZGxlVG9nZ2xlRHJvcGRvd25PcHRpb25zKT1cInRvZ2dsZURyb3Bkb3duT3B0aW9ucygpXCJcbiAgICAgICAgKGNsb3NlUG9wb3Zlcik9XCJibHVyT25EYXRlVGltZSgpXCJcbiAgICAgICAgKGJsdXJJbnB1dCk9XCJvbkJsdXJJbnB1dCgkZXZlbnQpXCJcbiAgICAgICAgKGNsZWFyKT1cImNsZWFySW5wdXQoJGV2ZW50KVwiXG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJnZXRTdXBlckNvbnRyb2whIHwgZm9ybUNvbnRyb2xcIlxuICAgID48L2FwcC1jYS1pbnB1dD5cbjwvZGl2PlxuXG48IS0tIFBvcG92ZXIgZm9yIERhdGVUaW1lIFBpY2tlcnMgLS0+XG48bmctdGVtcGxhdGUgI2RhdGVUaW1lUG9wb3ZlciBsZXQtZGF0YT1cImRhdGFcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZGF0ZXRpbWUtZHJvcGRvd24taG9sZGVyXCI+XG4gICAgICAgIDxjYS1jdXN0b20tZGF0ZXRpbWUtcGlja2Vyc1xuICAgICAgICAgICAgW2NhbGVuZGFyVHlwZV09XCJcbiAgICAgICAgICAgICAgICBpbnB1dENvbmZpZy5uYW1lID09PSAnZGF0ZXBpY2tlcicgfHxcbiAgICAgICAgICAgICAgICBpbnB1dENvbmZpZy5uYW1lID09PSAnZGF0ZXBpY2tlckJhbmtDYXJkJ1xuICAgICAgICAgICAgICAgICAgICA/ICdkYXRlJ1xuICAgICAgICAgICAgICAgICAgICA6ICd0aW1lJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtpbnB1dENvbmZpZ109XCJpbnB1dENvbmZpZ1wiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ01NL0REL1lZJ1wiXG4gICAgICAgICAgICBbZGF0ZVRpbWVdPVwiZGF0ZVRpbWVJbnB1dERhdGVcIlxuICAgICAgICAgICAgKGNsb3NlUG9wb3Zlcik9XCJjbG9zZVBvcG92ZXIoKVwiXG4gICAgICAgID48L2NhLWN1c3RvbS1kYXRldGltZS1waWNrZXJzPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
830
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtaW5wdXQtZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NhLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhLWlucHV0LWRhdGV0aW1lLXBpY2tlci9jYS1pbnB1dC1kYXRldGltZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtaW5wdXQtZGF0ZXRpbWUtcGlja2VyL2NhLWlucHV0LWRhdGV0aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLElBQUksRUFDSixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVILFdBQVcsRUFFWCxtQkFBbUIsR0FDdEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsVUFBVTtBQUNWLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUkxQyxPQUFPLEVBQW9CLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXJFLE9BQU87QUFDUCxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLDRCQUE0QixHQUMvQixNQUFNLG1CQUFtQixDQUFDO0FBRTNCLGFBQWE7QUFDYixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUN0SCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxzRkFBc0YsQ0FB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QUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE91dHB1dCxcbiAgICBTZWxmLFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE5nQ29udHJvbCxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG4vLyBJbXBvcnRzXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBOZ2JQb3BvdmVyIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbi8vIE1vZGVsc1xuaW1wb3J0IHsgSUNhSW5wdXQgfSBmcm9tICcuLi9jYS1pbnB1dC9jb25maWcnO1xuaW1wb3J0IHsgSW5wdXRDaGFuZ2VWYWx1ZSwgSW5wdXRTdmdSb3V0ZXMgfSBmcm9tICcuLi9jYS1pbnB1dC91dGlscyc7XG5cbi8vIFBpcGVcbmltcG9ydCB7XG4gICAgSW5wdXRDb250YWluZXJDbGFzc1BpcGUsXG4gICAgSW5wdXREYXRldGltZVBpY2tlckNsYXNzUGlwZSxcbn0gZnJvbSAnLi4vY2EtaW5wdXQvcGlwZXMnO1xuXG4vLyBDb21wb25lbnRzXG5pbXBvcnQgeyBDYUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vY2EtaW5wdXQvY2EtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IENhQ3VzdG9tRGF0ZXRpbWVQaWNrZXJzQ29tcG9uZW50IH0gZnJvbSAnLi4vY2EtY3VzdG9tLWRhdGV0aW1lLXBpY2tlcnMvY2EtY3VzdG9tLWRhdGV0aW1lLXBpY2tlcnMuY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXRQbGFjZWhvbGRlckljb25Db21wb25lbnQgfSBmcm9tICcuLi9jYS1pbnB1dC9jb21wb25lbnRzL2NhLWlucHV0LXBsYWNlaG9sZGVyLWljb24vY2EtaW5wdXQtcGxhY2Vob2xkZXItaWNvbi5jb21wb25lbnQnO1xuXG4vLyBFbnVtc1xuaW1wb3J0IHsgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bSB9IGZyb20gJy4uL2NhLWlucHV0L2VudW1zJztcblxuLy8gU2VydmljZXNcbmltcG9ydCB7IENhbGVuZGFyRGF0ZVRpbWVQaWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi4vY2EtY3VzdG9tLWRhdGV0aW1lLXBpY2tlcnMvc2VydmljZXMvY2FsZW5kYXItZGF0ZXRpbWUtcGlja2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQW5ndWxhclN2Z0ljb25Nb2R1bGUgfSBmcm9tICdhbmd1bGFyLXN2Zy1pY29uJztcbmltcG9ydCB7IEZvcm1Db250cm9sUGlwZSB9IGZyb20gJy4uL2NhLWlucHV0L3BpcGVzL2Zvcm0tY29udHJvbC5waXBlJztcbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnY2EtaW5wdXQtZGF0ZXRpbWUtcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2EtaW5wdXQtZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFtcbiAgICAgICAgJy4vY2EtaW5wdXQtZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5zY3NzJyxcbiAgICAgICAgJy4uL2NhLWlucHV0L3Njc3MvL2NhLWlucHV0LmRhdGVwaWNrZXIuc2NzcycsXG4gICAgXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgLy8gbW9kdWxlc1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBBbmd1bGFyU3ZnSWNvbk1vZHVsZSxcbiAgICAgICAgLy8gY29tcG9uZW50c1xuICAgICAgICBDYUlucHV0Q29tcG9uZW50LFxuICAgICAgICBDYUN1c3RvbURhdGV0aW1lUGlja2Vyc0NvbXBvbmVudCxcbiAgICAgICAgLy8gcGlwZXNcbiAgICAgICAgSW5wdXREYXRldGltZVBpY2tlckNsYXNzUGlwZSxcbiAgICAgICAgSW5wdXRDb250YWluZXJDbGFzc1BpcGUsXG4gICAgICAgIEZvcm1Db250cm9sUGlwZSxcbiAgICBdLFxuICAgIHByb3ZpZGVyczogW0NhbGVuZGFyRGF0ZVRpbWVQaWNrZXJTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2FJbnB1dERhdGV0aW1lUGlja2VyQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25EZXN0cm95XG57XG4gICAgQElucHV0KCkgaW5wdXRDb25maWchOiBJQ2FJbnB1dDtcbiAgICBASW5wdXQoKSBmb3JtRm9ybWF0Pzogc3RyaW5nO1xuXG4gICAgQE91dHB1dCgnY2xlYXInKSBjbGVhcklucHV0RXZlbnQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9XG4gICAgICAgIG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgICBAT3V0cHV0KCdibHVySW5wdXQnKSBibHVySW5wdXRFdmVudDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID1cbiAgICAgICAgbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgQFZpZXdDaGlsZChDYUlucHV0UGxhY2Vob2xkZXJJY29uQ29tcG9uZW50KVxuICAgIGNhSW5wdXRQbGFjZWhvbGRlckljb25Db21wb25lbnQhOiBDYUlucHV0UGxhY2Vob2xkZXJJY29uQ29tcG9uZW50O1xuXG4gICAgQFZpZXdDaGlsZCgnZGF0ZVRpbWVQb3BvdmVyJykgZGF0ZVRpbWVQb3BvdmVyITogTmdiUG9wb3ZlcjtcbiAgICBAVmlld0NoaWxkKENhSW5wdXRDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgY2FJbnB1dENvbXBvbmVudCE6IENhSW5wdXRDb21wb25lbnQ7XG5cbiAgICBwdWJsaWMgc2hvd0RhdGVJbnB1dDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBkYXRlVGltZUlucHV0RGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgcHVibGljIHNlbGVjdGlvbklucHV0OiBudW1iZXIgPSAtMTtcblxuICAgIHByaXZhdGUgZGF0ZVRpbWVNYWluVGltZXIhOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bWJlcjtcbiAgICBwcml2YXRlIGZvY3VzQmx1ciE6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVtYmVyO1xuICAgIHByaXZhdGUgdGltZW91dENsZWFuZXIhOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bWJlcjtcblxuICAgIHB1YmxpYyBpbnB1dFN2Z1JvdXRlcyA9IElucHV0U3ZnUm91dGVzO1xuXG4gICAgcHVibGljIGlzVG91Y2hlZElucHV0OiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIHByZXZlbnRCbHVyOiBib29sZWFuID0gZmFsc2U7XG4gICAgLy8gRGF0ZVxuICAgIHB1YmxpYyBuZXdJbnB1dENoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBPdXRwdXQoKSBzZWxlY3RMYXN0T25lRm9yU2VsZWN0aW9uRW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgICBAT3V0cHV0KCkgc2VsZWN0TGFzdE9uZUFmdGVyTW91c2VVcEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gICAgQE91dHB1dCgpIG9uRGF0ZVBhc3RlRW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8Q2xpcGJvYXJkRXZlbnQ+KCk7XG4gICAgQE91dHB1dCgpIG9uRm9jdXNFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PigpO1xuICAgIEBPdXRwdXQoKSBjaGFuZ2VTZWxlY3Rpb25FbW1pdGVyID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgICAgIGU6IEtleWJvYXJkRXZlbnQ7XG4gICAgICAgIG5vUHJldmVudERlZmF1bHQ6IGJvb2xlYW47XG4gICAgfT4oKTtcbiAgICBAT3V0cHV0KCkgc2V0U2VsZWN0aW9uRW1taXRlciA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgICAgICBwcmV2ZW50RGVmYXVsdDogKCkgPT4gdm9pZDtcbiAgICAgICAgc3RvcFByb3BhZ2F0aW9uOiAoKSA9PiB2b2lkO1xuICAgICAgICB0YXJnZXQ6IGFueTtcbiAgICB9PigpO1xuXG4gICAgQFZpZXdDaGlsZCgnc3BhbjEnLCB7IHN0YXRpYzogZmFsc2UgfSkgc3BhbjEhOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ3NwYW4yJywgeyBzdGF0aWM6IGZhbHNlIH0pIHNwYW4yITogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdzcGFuMycsIHsgc3RhdGljOiBmYWxzZSB9KSBzcGFuMyE6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnaG9sZGVyMScsIHsgc3RhdGljOiBmYWxzZSB9KSBob2xkZXIxITogRWxlbWVudFJlZjtcblxuICAgIHByaXZhdGUgZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBTZWxmKCkgcHVibGljIHN1cGVyQ29udHJvbDogTmdDb250cm9sLFxuICAgICAgICBwcml2YXRlIGNhbGVuZGFyU2VydmljZTogQ2FsZW5kYXJEYXRlVGltZVBpY2tlclNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldFRpbWVQaWNrZXJUaW1lKCk7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmRhdGVDaGFuZ2VkXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlucHV0Q29uZmlnLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0NBTEVOREFSIFNFUlZJRSBEQVRFIENIQU5HRScpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRpbWVEYXRlSW5wdXQoZGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FJbnB1dENvbXBvbmVudC5jYUlucHV0UGxhY2Vob2xkZXJJY29uQ29tcG9uZW50LnQyPy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldCBnZXRTdXBlckNvbnRyb2woKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZWxlY3RMYXN0T25lRm9yU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgICAgICBsZXQgcmFuZ2UsIHNlbGVjdGlvbjtcblxuICAgICAgICB0aGlzLnNob3dEYXRlSW5wdXQgPSB0cnVlO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gLTE7XG4gICAgICAgIHRoaXMuY2FJbnB1dENvbXBvbmVudC5pc0ZvY3VzSW5wdXQgPSB0cnVlO1xuXG4gICAgICAgIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uICYmIGRvY3VtZW50LmNyZWF0ZVJhbmdlKSB7XG4gICAgICAgICAgICBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgIT09XG4gICAgICAgICAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJhbmdlLnNldFN0YXJ0KHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudCwgMSk7XG4gICAgICAgICAgICAgICAgcmFuZ2Uuc2V0RW5kKHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudCwgMSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJhbmdlLnNldFN0YXJ0KHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudCwgMSk7XG4gICAgICAgICAgICAgICAgcmFuZ2Uuc2V0RW5kKHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudCwgMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgICAgICBzZWxlY3Rpb24/LmFkZFJhbmdlKHJhbmdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGltZW91dENsZWFuZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRhdGVUaW1lTWFpblRpbWVyKTtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmZvY3VzQmx1cik7XG4gICAgICAgIH0sIDkwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZWN0TGFzdE9uZUFmdGVyTW91c2VVcCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PVxuICAgICAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMjtcbiAgICAgICAgICAgIHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNob3dEYXRlSW5wdXQgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMudGltZW91dENsZWFuZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRhdGVUaW1lTWFpblRpbWVyKTtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmZvY3VzQmx1cik7XG4gICAgICAgIH0sIDkwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25EYXRlUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgY29uc3QgcGFzdGVUZXh0ID0gZXZlbnQuY2xpcGJvYXJkRGF0YT8uZ2V0RGF0YSgndGV4dCcpIGFzIHN0cmluZztcbiAgICAgICAgY29uc3QgcGFzdGVkRGF0ZSA9IG5ldyBEYXRlKHBhc3RlVGV4dCk7XG4gICAgICAgIGlmICghaXNOYU4ocGFzdGVkRGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFRpbWVEYXRlSW5wdXQocGFzdGVkRGF0ZSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KHRoaXMuc2VsZWN0aW9uSW5wdXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNoYW5nZVNlbGVjdGlvbihcbiAgICAgICAgZXZlbnQ6IEtleWJvYXJkRXZlbnQsXG4gICAgICAgIG5vUHJldmVudERlZmF1bHQgPSBmYWxzZVxuICAgICk6IHZvaWQge1xuICAgICAgICBpZiAoIW5vUHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzTmF2aWdhdGlvbktleSA9IHRoaXMuaXNOYXZpZ2F0aW9uS2V5KGV2ZW50KTtcbiAgICAgICAgY29uc3QgaXNTcGVjaWFsVGltZVBpY2tlcktleSA9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID09PSAzICYmXG4gICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uVElNRV9QSUNLRVI7XG5cbiAgICAgICAgaWYgKGlzTmF2aWdhdGlvbktleSB8fCBpc1NwZWNpYWxUaW1lUGlja2VyS2V5KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVOYXZpZ2F0aW9uS2V5KGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5pc051bWJlcihldmVudCkpIHtcbiAgICAgICAgICAgIGlmICghbm9QcmV2ZW50RGVmYXVsdCkgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghbm9QcmV2ZW50RGVmYXVsdCkgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAtMSkgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVLZXlib2FyZElucHV0cyhldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTnVtYmVyKGV2dDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICBldnQgPSBldnQgPyBldnQgOiAod2luZG93LmV2ZW50IGFzIEtleWJvYXJkRXZlbnQpO1xuICAgICAgICBsZXQgY2hhckNvZGUgPSBldnQud2hpY2ggPyBldnQud2hpY2ggOiBldnQua2V5Q29kZTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1NykgfHxcbiAgICAgICAgICAgIChjaGFyQ29kZSA+PSA5NiAmJiBjaGFyQ29kZSA8PSAxMDUpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc05hdmlnYXRpb25LZXkoZTogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBuYXZpZ2F0aW9uS2V5cyA9IFszNywgMzgsIDM5LCA0MCwgOCwgOSwgNDZdOyAvLyBBcnJvdyBrZXlzLCBCYWNrc3BhY2UsIFRhYiwgRGVsZXRlXG4gICAgICAgIHJldHVybiBuYXZpZ2F0aW9uS2V5cy5pbmNsdWRlcyhlLmtleUNvZGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkZvY3VzKGV2ZW50PzogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uRm9jdXNFbWl0dGVyLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbG9zZVBvcG92ZXIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNhSW5wdXRDb21wb25lbnQuY2FJbnB1dFBsYWNlaG9sZGVySWNvbkNvbXBvbmVudC50MilcbiAgICAgICAgICAgIHRoaXMuY2FJbnB1dENvbXBvbmVudC5jYUlucHV0UGxhY2Vob2xkZXJJY29uQ29tcG9uZW50LnQyLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvZ2dsZURyb3Bkb3duT3B0aW9ucygpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FJbnB1dENvbXBvbmVudC5jYUlucHV0UGxhY2Vob2xkZXJJY29uQ29tcG9uZW50LnQyKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIXRoaXMuY2FJbnB1dENvbXBvbmVudC5jYUlucHV0UGxhY2Vob2xkZXJJY29uQ29tcG9uZW50LnQyLmlzT3BlbigpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZm9jdXNCbHVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FJbnB1dENvbXBvbmVudC5jYUlucHV0UGxhY2Vob2xkZXJJY29uQ29tcG9uZW50LnQyLm9wZW4oKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgICAgICAgICAgIC8vIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlRm9jdXNJbnB1dChlOiBFdmVudCkge1xuICAgICAgICBjb25zdCBldmVudCA9IGUgYXMgRm9jdXNFdmVudDtcblxuICAgICAgICBpZiAoIXRoaXMuaW5wdXRDb25maWcuaXNEaXNhYmxlZCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGF0ZVRpbWVNYWluVGltZXIpO1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZm9jdXNCbHVyKTtcbiAgICAgICAgICAgIHRoaXMuc2hvd0RhdGVJbnB1dCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgICAgIChldmVudD8udGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8ubm9kZU5hbWUgPT09ICdJTlBVVCcpIHx8XG4gICAgICAgICAgICAgICAgKGV2ZW50Py5yZWxhdGVkVGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8ubm9kZU5hbWUgPT09ICdJTlBVVCcgfHxcbiAgICAgICAgICAgICAgICBldmVudD8ucmVsYXRlZFRhcmdldCA9PT0gbnVsbFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2ZW50Qmx1ciA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jYUlucHV0Q29tcG9uZW50LmNhSW5wdXRQbGFjZWhvbGRlckljb25Db21wb25lbnQudDIudG9nZ2xlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0U3BhblNlbGVjdGlvbihlbGVtZW50OiBOb2RlKTogdm9pZCB7XG4gICAgICAgIGxldCByYW5nZTogUmFuZ2U7XG4gICAgICAgIGxldCBzZWxlY3Rpb246IFNlbGVjdGlvbiB8IG51bGw7XG5cbiAgICAgICAgaWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24gJiYgZG9jdW1lbnQuY3JlYXRlUmFuZ2UpIHtcbiAgICAgICAgICAgIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlbGVtZW50KTtcbiAgICAgICAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgICAgICBzZWxlY3Rpb24/LmFkZFJhbmdlKHJhbmdlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRTZWxlY3Rpb24oZXZlbnQ6IHtcbiAgICAgICAgcHJldmVudERlZmF1bHQ6ICgpID0+IHZvaWQ7XG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbjogKCkgPT4gdm9pZDtcbiAgICAgICAgdGFyZ2V0OiBhbnk7XG4gICAgfSk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xuXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbklucHV0ID0gcGFyc2VJbnQoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JykpO1xuXG4gICAgICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24gJiYgY3VycmVudFNlbGVjdGlvbi50b1N0cmluZygpLmxlbmd0aCA+IDEwKSB7XG4gICAgICAgICAgICB0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGF0ZVRpbWVNYWluVGltZXIpO1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZm9jdXNCbHVyKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRhdGVUaW1lTWFpblRpbWVyKTtcbiAgICAgICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdtYWluJykpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSBzZWxlY3Rpb25JbnB1dDtcbiAgICAgICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbihlbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgodGhpcy5zZWxlY3Rpb25JbnB1dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DaGFuZ2UoXzogSW5wdXRDaGFuZ2VWYWx1ZSk6IHZvaWQge1xuICAgICAgICAvLyB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRWYWx1ZShfKTtcbiAgICAgICAgLy8gdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ubWFya0FzVG91Y2hlZCgpOyAvLyBNYXJrIHRoZSBjb250cm9sIGFzIHRvdWNoZWRcbiAgICAgICAgLy8gdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ubWFya0FzRGlydHkoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZShvYmo6IElucHV0Q2hhbmdlVmFsdWUpOiB2b2lkIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1dSSVRFIFZBTFVFJyk7XG4gICAgICAgIHRoaXMuc2V0VGltZURhdGVJbnB1dChvYmosIHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZCgpOiB2b2lkIHt9XG5cbiAgICAvLyBCTFVSIE9OIElOUFVUXG4gICAgcHVibGljIGJsdXJPbkRhdGVUaW1lKCk6IHZvaWQge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVNYWluVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIWlzTmFOKHRoaXMuc3BhbjE/Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKSAmJlxuICAgICAgICAgICAgICAgICAgICAhaXNOYU4odGhpcy5zcGFuMj8ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpICYmXG4gICAgICAgICAgICAgICAgICAgICFpc05hTih0aGlzLnNwYW4zPy5uYXRpdmVFbGVtZW50LmlubmVySFRNTClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5pc0Z1dHVyZURhdGVEaXNhYmxlZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgbW9tZW50KHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUpLmlzQWZ0ZXIobW9tZW50KCkpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCBhY2NlcHQgZnV0dXJlIGRhdGVzXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcuZXhwaXJlZERhdGVJbnZhbGlkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9tZW50KHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUpLmlzQmVmb3JlKG1vbWVudCgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsgLy8gZG9uJ3QgYWNjZXB0IGV4cGlyZWQgZGF0ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuZGF0ZUNoYW5nZWQubmV4dChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdkZCc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAneXknO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RGF0ZUlucHV0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09XG4gICAgICAgICAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIWlzTmFOKHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpICYmXG4gICAgICAgICAgICAgICAgICAgICFpc05hTih0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLmV4cGlyZWREYXRlSW52YWxpZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgbW9tZW50KHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUpLmlzQmVmb3JlKG1vbWVudCgpKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7IGludmFsaWQ6IHRydWUgfSk7IC8vIGRvbid0IGFjY2VwdCBleHBpcmVkIGRhdGVzXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5kYXRlQ2hhbmdlZC5uZXh0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICd5eSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dEYXRlSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIWlzTmFOKHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpICYmXG4gICAgICAgICAgICAgICAgICAgICFpc05hTih0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5kYXRlQ2hhbmdlZC5uZXh0KFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnSEgnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ01NJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUaW1lUGlja2VyVGltZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dEYXRlSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRhdGVUaW1lTWFpblRpbWVyKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcbiAgICAgICAgICAgIHRoaXMubmV3SW5wdXRDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfSwgMTAwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Qb3BvdmVyU2hvd24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2hvd0RhdGVJbnB1dCA9IHRydWU7XG4gICAgICAgIHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUG9wb3ZlckhpZGRlbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ibHVyT25EYXRlVGltZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRUaW1lRGF0ZUlucHV0KGRhdGU6IElucHV0Q2hhbmdlVmFsdWUsIGhhc1ZhbHVlPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zb2xlLmxvZygnU0VUIFRJTUUgREFURSBJTlBVVCBPTiBMT0FEJyk7XG4gICAgICAgIGxldCB0ZXh0LCBkYXRlRm9ybWF0LCB0aW1lRm9ybWF0O1xuICAgICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSKSB7XG4gICAgICAgICAgICB0ZXh0ID0gbW9tZW50KG5ldyBEYXRlKGRhdGUpKS5mb3JtYXQoJ01NL0REL1lZJyk7XG4gICAgICAgICAgICBkYXRlRm9ybWF0ID0gdGV4dC5zcGxpdCgnLycpO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PVxuICAgICAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0ZXh0ID0gbW9tZW50KG5ldyBEYXRlKGRhdGUpKS5mb3JtYXQoJ01NL0REL1lZJyk7XG4gICAgICAgICAgICBkYXRlRm9ybWF0ID0gdGV4dC5zcGxpdCgnLycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0ZSA9XG4gICAgICAgICAgICAgICAgZGF0ZSBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgICAgICAgICAgICAgPyBkYXRlXG4gICAgICAgICAgICAgICAgICAgIDogbmV3IERhdGUobW9tZW50KCkuZm9ybWF0KCdNTS9ERC9ZWVlZJykgKyAnICcgKyBkYXRlKTtcbiAgICAgICAgICAgIHRleHQgPSBtb21lbnQobmV3IERhdGUoZGF0ZSkpLmZvcm1hdCgnSEg6bW0nKTtcblxuICAgICAgICAgICAgdGltZUZvcm1hdCA9IG1vbWVudChuZXcgRGF0ZShkYXRlKSkuZm9ybWF0KCdoaC9tbS9BJyk7XG4gICAgICAgICAgICBkYXRlRm9ybWF0ID0gdGltZUZvcm1hdC5zcGxpdCgnLycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZm9ybUZvcm1hdCkge1xuICAgICAgICAgICAgY29uc3QgbmV3Rm9ybUZvcm1hdCA9IG1vbWVudChuZXcgRGF0ZShkYXRlKSkuZm9ybWF0KFxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUZvcm1hdFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UobmV3Rm9ybUZvcm1hdCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWhhc1ZhbHVlKSB0aGlzLm9uQ2hhbmdlKHRleHQpO1xuICAgICAgICAvLyB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0ZXh0O1xuICAgICAgICB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuc3BhbjEpIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSBkYXRlRm9ybWF0WzBdO1xuXG4gICAgICAgIGlmICh0aGlzLnNwYW4yKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSAhPT1cbiAgICAgICAgICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGRhdGVGb3JtYXRbMV07XG4gICAgICAgICAgICAgICAgdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGRhdGVGb3JtYXRbMl07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSBkYXRlRm9ybWF0WzJdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICAgICAgdGhpcy5zaG93RGF0ZUlucHV0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlS2V5Ym9hcmRJbnB1dHMoZTogS2V5Ym9hcmRFdmVudCwgaXNSZXN0YXJ0PzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCBzcGFuT25lVmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCA9XG4gICAgICAgICAgICBpc05hTih0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKSB8fCB0aGlzLm5ld0lucHV0Q2hhbmdlZFxuICAgICAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgOiBwYXJzZUludCh0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKTtcbiAgICAgICAgY29uc3Qgc3BhbjJWYWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkID1cbiAgICAgICAgICAgIGlzTmFOKHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpIHx8IHRoaXMubmV3SW5wdXRDaGFuZ2VkXG4gICAgICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA6IHBhcnNlSW50KHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpO1xuXG4gICAgICAgIGxldCBzcGFuM1ZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lICE9PVxuICAgICAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBzcGFuM1ZhbHVlID1cbiAgICAgICAgICAgICAgICBpc05hTih0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKSB8fFxuICAgICAgICAgICAgICAgIHRoaXMubmV3SW5wdXRDaGFuZ2VkXG4gICAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgICAgOiBwYXJzZUludCh0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubmV3SW5wdXRDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzUmVzdGFydCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzcGFuT25lVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmluYWxfdmFsdWUgPSBwYXJzZUludChgJHtzcGFuT25lVmFsdWV9JHtlLmtleX1gKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmFsX3ZhbHVlID4gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzAnICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICApLnNsaWNlKC0yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldE1vbnRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUludChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIC0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmluYWxfdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdtbSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkuc2xpY2UoLTIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoZS5rZXkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0TW9udGgocGFyc2VJbnQoZS5rZXkpIC0gMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluYWxfdmFsdWUgPSAoJzAnICsgcGFyc2VJbnQoZS5rZXkpKS5zbGljZSgtMik7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGZpbmFsX3ZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludChgMSR7ZS5rZXl9YCkgPiAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNSZXN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnZGQnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgwLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNwYW4yVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmluYWxfdmFsdWUgPSBwYXJzZUludChgJHtzcGFuMlZhbHVlfSR7ZS5rZXl9YCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5hbF92YWx1ZSA+IDMxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcwJyArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5zZXREYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUludChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaW5hbF92YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnZGQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgyLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludChlLmtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5zZXREYXRlKHBhcnNlSW50KGUua2V5KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgICAgICAgICAgICcwJyArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgICApLnNsaWNlKC0yKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoYDEke2Uua2V5fWApID4gMzEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgyLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChpc1Jlc3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICd5eSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEsIHRydWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXNwYW4zVmFsdWUgfHwgc3BhbjNWYWx1ZS50b1N0cmluZygpLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgICAgICAgICAgICAgJzAnICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldEZ1bGxZZWFyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGAyMDAke3BhcnNlSW50KGUua2V5KX1gKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluYWxZZWFyID0gcGFyc2VJbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluYWxTaG93WWVhciA9XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFllYXIgPiAzMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcGFyc2VJbnQoYDE5JHtmaW5hbFllYXJ9YClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHBhcnNlSW50KGAyMCR7ZmluYWxZZWFyfWApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldEZ1bGxZZWFyKGZpbmFsU2hvd1llYXIpXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PVxuICAgICAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uSW5wdXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNSZXN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnbW0nO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgwKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNwYW5PbmVWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5hbF92YWx1ZSA9IHBhcnNlSW50KGAke3NwYW5PbmVWYWx1ZX0ke2Uua2V5fWApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmluYWxfdmFsdWUgPiAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMCcgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0TW9udGgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaW5hbF92YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnbW0nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludChlLmtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5zZXRNb250aChwYXJzZUludChlLmtleSkgLSAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5hbF92YWx1ZSA9ICgnMCcgKyBwYXJzZUludChlLmtleSkpLnNsaWNlKC0yKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gZmluYWxfdmFsdWU7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KGAxJHtlLmtleX1gKSA+IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzUmVzdGFydCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ3l5JztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDI7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3BhbjJWYWx1ZSB8fCBzcGFuMlZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICAgICAgICAgICAgICAnMCcgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0RnVsbFllYXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoYDIwMCR7cGFyc2VJbnQoZS5rZXkpfWApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5hbFllYXIgPSBwYXJzZUludChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5hbFNob3dZZWFyID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsWWVhciA+IDMxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBwYXJzZUludChgMTkke2ZpbmFsWWVhcn1gKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcGFyc2VJbnQoYDIwJHtmaW5hbFllYXJ9YCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0RnVsbFllYXIoZmluYWxTaG93WWVhcilcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgICApLnNsaWNlKC0yKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZWxlY3RTcGFuQnlUYWJJbmRleChpbmR4OiBudW1iZXIsIGNoYW5nZVRhYj86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgc3dpdGNoIChpbmR4KSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlVGFiKSB0aGlzLm5ld0lucHV0Q2hhbmdlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVOYXZpZ2F0aW9uS2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xuICAgICAgICAgICAgY2FzZSAzNzogLy8gTGVmdCBhcnJvd1xuICAgICAgICAgICAgICAgIHRoaXMubW92ZVNlbGVjdGlvbkxlZnQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzk6IC8vIFJpZ2h0IGFycm93XG4gICAgICAgICAgICBjYXNlIDk6IC8vIFRhYlxuICAgICAgICAgICAgICAgIHRoaXMubW92ZVNlbGVjdGlvblJpZ2h0T3JUYWIoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzODogLy8gVXAgYXJyb3dcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGVUaW1lTW9kZWwoJ3VwJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDQwOiAvLyBEb3duIGFycm93XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRlVGltZU1vZGVsKCdkb3duJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDg6IC8vIEJhY2tzcGFjZVxuICAgICAgICAgICAgY2FzZSA0NjogLy8gRGVsZXRlXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVLZXlib2FyZElucHV0cyhldmVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZURhdGVQaWNrZXJJbnB1dChpc1VwOiBib29sZWFuLCBpc0RhdGVQaWNrZXI6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDApIHRoaXMudXBkYXRlTW9udGgoaXNVcCk7XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDEpIHRoaXMudXBkYXRlRGF0ZShpc1VwLCBpc0RhdGVQaWNrZXIpO1xuICAgICAgICBlbHNlIHRoaXMudXBkYXRlWWVhcihpc1VwLCBpc0RhdGVQaWNrZXIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RGF0ZVRpbWVNb2RlbChkaXJlY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gLTEpIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuXG4gICAgICAgIGNvbnN0IGlzVXAgPSBkaXJlY3Rpb24gPT09ICd1cCc7XG4gICAgICAgIGNvbnN0IGlzRGF0ZVBpY2tlciA9XG4gICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVI7XG4gICAgICAgIGNvbnN0IGlzQmFua0NhcmRQaWNrZXIgPVxuICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PVxuICAgICAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkQ7XG5cbiAgICAgICAgaWYgKGlzRGF0ZVBpY2tlciB8fCBpc0JhbmtDYXJkUGlja2VyKVxuICAgICAgICAgICAgdGhpcy5oYW5kbGVEYXRlUGlja2VySW5wdXQoaXNVcCwgaXNEYXRlUGlja2VyKTtcbiAgICAgICAgZWxzZSB0aGlzLmhhbmRsZVRpbWVQaWNrZXJJbnB1dChpc1VwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1vdmVTZWxlY3Rpb25SaWdodE9yVGFiKGU6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXNEYXRlcGlja2VyQmFua0NhcmQgPVxuICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PVxuICAgICAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkQ7XG4gICAgICAgIGNvbnN0IG1heEluZGV4ID0gaXNEYXRlcGlja2VyQmFua0NhcmQgPyAxIDogMjtcblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA8IG1heEluZGV4ICYmICFlLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ICs9IDE7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KHRoaXMuc2VsZWN0aW9uSW5wdXQsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGUua2V5Q29kZSA9PT0gOSAmJiAhZS5zaGlmdEtleSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c05leHRJbnB1dCgpO1xuICAgICAgICB9IGVsc2UgaWYgKGUuc2hpZnRLZXkgJiYgZS5rZXlDb2RlID09PSA5KSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzUHJldmlvdXNJbnB1dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb2N1c1ByZXZpb3VzSW5wdXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFsbElucHV0cyA9IEFycmF5LmZyb20oXG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dC5pbnB1dC1jb250cm9sJylcbiAgICAgICAgKSBhcyBIVE1MSW5wdXRFbGVtZW50W107XG5cbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gYWxsSW5wdXRzLmZpbmRJbmRleChcbiAgICAgICAgICAgIChpbnB1dCkgPT4gaW5wdXQgPT09IHRoaXMuY2FJbnB1dENvbXBvbmVudC5pbnB1dC5uYXRpdmVFbGVtZW50XG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gLTEpIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAzO1xuICAgICAgICBlbHNlIGlmIChjdXJyZW50SW5kZXggPT09IDApIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgLT0gMTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgodGhpcy5zZWxlY3Rpb25JbnB1dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VycmVudEluZGV4ID4gMCkgYWxsSW5wdXRzW2N1cnJlbnRJbmRleCAtIDFdLmZvY3VzKCk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IC0xO1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9jdXNOZXh0SW5wdXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFsbElucHV0cyA9IEFycmF5LmZyb20oXG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dC5pbnB1dC1jb250cm9sJylcbiAgICAgICAgKSBhcyBIVE1MSW5wdXRFbGVtZW50W107XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGFsbElucHV0cy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoaW5wdXQpID0+IGlucHV0ID09PSB0aGlzLmNhSW5wdXRDb21wb25lbnQuaW5wdXQubmF0aXZlRWxlbWVudFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChhbGxJbnB1dHNbY3VycmVudEluZGV4ICsgMV0pIGFsbElucHV0c1tjdXJyZW50SW5kZXggKyAxXS5mb2N1cygpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuYmx1ck9uRGF0ZVRpbWUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0SXNGb2N1c0lucHV0KHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2FJbnB1dENvbXBvbmVudC5pc0ZvY3VzSW5wdXQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1vdmVTZWxlY3Rpb25MZWZ0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgLT0gMTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgodGhpcy5zZWxlY3Rpb25JbnB1dCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZU1vbnRoKGlzVXA6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbW9udGhEZWx0YSA9IGlzVXAgPyAxIDogLTE7XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0TW9udGgoXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5nZXRNb250aCgpICsgbW9udGhEZWx0YVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLnBhZFZhbHVlKFxuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5nZXRNb250aCgpICsgMVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZURhdGUoaXNVcDogYm9vbGVhbiwgaXNEYXRlUGlja2VyOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRhdGVEZWx0YSA9IGlzVXAgPyAxIDogLTE7XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0RGF0ZShcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLmdldERhdGUoKSArIGRhdGVEZWx0YVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHNwYW5FbGVtZW50ID0gaXNEYXRlUGlja2VyXG4gICAgICAgICAgICA/IHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudFxuICAgICAgICAgICAgOiB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHNwYW5FbGVtZW50LmlubmVySFRNTCA9IHRoaXMucGFkVmFsdWUodGhpcy5kYXRlVGltZUlucHV0RGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24oc3BhbkVsZW1lbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlWWVhcihpc1VwOiBib29sZWFuLCBpc0RhdGVQaWNrZXI6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeWVhckRlbHRhID0gaXNVcCA/IDEgOiAtMTtcbiAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5zZXRGdWxsWWVhcihcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLmdldEZ1bGxZZWFyKCkgKyB5ZWFyRGVsdGFcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBzcGFuRWxlbWVudCA9IGlzRGF0ZVBpY2tlclxuICAgICAgICAgICAgPyB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgICAgIDogdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBzcGFuRWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLmRhdGVUaW1lSW5wdXREYXRlXG4gICAgICAgICAgICAuZ2V0RnVsbFllYXIoKVxuICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgIC5zbGljZSgtMik7XG4gICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbihzcGFuRWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYWRWYWx1ZSh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICgnMCcgKyB2YWx1ZSkuc2xpY2UoLTIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlVGltZVBpY2tlcklucHV0KGlzVXA6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDApIHRoaXMudXBkYXRlSG91cnMoaXNVcCk7XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDEpIHRoaXMudXBkYXRlTWludXRlcyhpc1VwKTtcbiAgICAgICAgZWxzZSB0aGlzLnRvZ2dsZUFNUE0oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUhvdXJzKGlzVXA6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaG91cnNEZWx0YSA9IGlzVXAgPyAxIDogLTE7XG4gICAgICAgIGxldCBzZWxlY3RlZEhvdXJzID0gdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5nZXRIb3VycygpICsgaG91cnNEZWx0YTtcblxuICAgICAgICBpZiAoc2VsZWN0ZWRIb3VycyA9PT0gMCkgc2VsZWN0ZWRIb3VycyA9IDI0O1xuICAgICAgICBpZiAoc2VsZWN0ZWRIb3VycyA9PT0gLTEpIHNlbGVjdGVkSG91cnMgPSAyMztcblxuICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldEhvdXJzKHNlbGVjdGVkSG91cnMpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IHRoaXMucGFkVmFsdWUoXG4gICAgICAgICAgICBzZWxlY3RlZEhvdXJzID4gMTIgPyBzZWxlY3RlZEhvdXJzIC0gMTIgOiBzZWxlY3RlZEhvdXJzXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgIHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPVxuICAgICAgICAgICAgc2VsZWN0ZWRIb3VycyA+IDExICYmIHNlbGVjdGVkSG91cnMgPCAyNCA/ICdQTScgOiAnQU0nO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlTWludXRlcyhpc1VwOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1pbnV0ZXNEZWx0YSA9IGlzVXAgPyAxIDogLTE7XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0TWludXRlcyhcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLmdldE1pbnV0ZXMoKSArIG1pbnV0ZXNEZWx0YVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLnBhZFZhbHVlKFxuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5nZXRNaW51dGVzKClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0b2dnbGVBTVBNKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID1cbiAgICAgICAgICAgIHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPT09ICdBTScgPyAnUE0nIDogJ0FNJztcblxuICAgICAgICBjb25zdCBob3Vyc1RvQWRkID1cbiAgICAgICAgICAgIHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPT09ICdBTScgPyAtMTIgOiAxMjtcbiAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5zZXRIb3VycyhcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLmdldEhvdXJzKCkgKyBob3Vyc1RvQWRkXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFySW5wdXQoZXZlbnQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhcklucHV0RXZlbnQuZW1pdChldmVudCk7XG5cbiAgICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgICAgICB0aGlzLnJlc2V0RGF0ZVRpbWVJbnB1dHMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25CbHVySW5wdXQoZXZlbnQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ibHVySW5wdXRFdmVudC5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXREYXRlVGltZUlucHV0cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc3BhbjEpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ2RkJztcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ3l5JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PVxuICAgICAgICAgICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ3l5JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLlRJTUVfUElDS0VSXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ0hIJztcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ01NJztcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ0FNJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFRpbWVQaWNrZXJUaW1lKCk7XG4gICAgICAgIHRoaXMubmV3SW5wdXRDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgICAgICB0aGlzLnNob3dEYXRlSW5wdXQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0VGltZVBpY2tlclRpbWUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uVElNRV9QSUNLRVIpXG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgbW9tZW50KCkuZm9ybWF0KCdNTS9ERC9ZWVlZJykgK1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5pbnB1dENvbmZpZz8uaXNGcm9tRGF0ZSA/ICcgMTI6MTUnIDogJyAxMjowMCcpXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgY2xhc3M9XCJkYXRldGltZS1waWNrZXItbWFpbi1ob2xkZXIgaW5wdXQtY3VzdG9tLWdyb3VwIGRhdGV0aW1lY2xhc3NcIlxuICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICBnZXRTdXBlckNvbnRyb2xcbiAgICAgICAgICAgIHwgaW5wdXRDb250YWluZXJDbGFzc1xuICAgICAgICAgICAgICAgIDogY2FJbnB1dENvbXBvbmVudC5pc0ZvY3VzSW5wdXRcbiAgICAgICAgICAgICAgICA6IGNhSW5wdXRDb21wb25lbnQuaXNUb3VjaGVkSW5wdXRcbiAgICAgICAgICAgICAgICA6IGlucHV0Q29uZmlnXG4gICAgICAgICAgICAgICAgOiBnZXRTdXBlckNvbnRyb2w/LnZhbHVlXG4gICAgXCJcbj5cbiAgICA8ZGl2XG4gICAgICAgICNob2xkZXIxXG4gICAgICAgIGNsYXNzPVwiZGF0ZV90aW1lX2hvbGRlciBpbnB1dC1jb250cm9sXCJcbiAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzaG93RGF0ZUlucHV0XCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIChtb3VzZWRvd24pPVwic2VsZWN0TGFzdE9uZUZvclNlbGVjdGlvbigpXCJcbiAgICAgICAgKG1vdXNldXApPVwic2VsZWN0TGFzdE9uZUFmdGVyTW91c2VVcCgpXCJcbiAgICAgICAgKHBhc3RlKT1cIm9uRGF0ZVBhc3RlKCRldmVudClcIlxuICAgICAgICAoa2V5ZG93bik9XCJjaGFuZ2VTZWxlY3Rpb24oJGV2ZW50LCB0cnVlKVwiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bk9wdGlvbnMoKVwiXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICdwYWRkaW5nLWxlZnQnOiBpbnB1dENvbmZpZy5pc0ljb25IaWRkZW4gPyAnMnB4JyA6ICcyN3B4JyxcbiAgICAgICAgfVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgY2FJbnB1dENvbXBvbmVudC5pc0ZvY3VzSW5wdXRcbiAgICAgICAgICAgICAgICB8IGlucHV0RGF0ZXRpbWVQaWNrZXJDbGFzc1xuICAgICAgICAgICAgICAgICAgICA6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIDogZ2V0U3VwZXJDb250cm9sXG4gICAgICAgICAgICAgICAgICAgIDogaW5wdXRDb25maWdcbiAgICAgICAgICAgICAgICAgICAgOiBjYUlucHV0Q29tcG9uZW50LmlzVG91Y2hlZElucHV0XG4gICAgICAgICAgICAgICAgICAgIDogZ2V0U3VwZXJDb250cm9sPy52YWx1ZVxuICAgICAgICBcIlxuICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICNzcGFuMVxuICAgICAgICAgICAgY2xhc3M9XCJtYWluXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAncmVzZXQtc2VsZWN0aW9uLWNvbG9yJzogIWNhSW5wdXRDb21wb25lbnQuaXNGb2N1c0lucHV0LFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgKG1vdXNldXApPVwic2V0U2VsZWN0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgKGtleWRvd24pPVwiY2hhbmdlU2VsZWN0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgW2lubmVySFRNTF09XCJpbnB1dENvbmZpZy5uYW1lID09PSAnZGF0ZXBpY2tlcicgPyAnbW0nIDogJ0hIJ1wiXG4gICAgICAgID48L3NwYW4+XG4gICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYm9yZGVyLXBpY2tlclwiXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJpbnB1dENvbmZpZy5uYW1lID09PSAnZGF0ZXBpY2tlcicgPyAnLycgOiAnOidcIlxuICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICAjc3BhbjJcbiAgICAgICAgICAgIGNsYXNzPVwibWFpblwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgJ3Jlc2V0LXNlbGVjdGlvbi1jb2xvcic6ICFjYUlucHV0Q29tcG9uZW50LmlzRm9jdXNJbnB1dCxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCIxXCJcbiAgICAgICAgICAgIChtb3VzZXVwKT1cInNldFNlbGVjdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgIChrZXlkb3duKT1cImNoYW5nZVNlbGVjdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiaW5wdXRDb25maWcubmFtZSA9PT0gJ2RhdGVwaWNrZXInID8gJ2RkJyA6ICdNTSdcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJvcmRlci1waWNrZXJcIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiaW5wdXRDb25maWcubmFtZSA9PT0gJ2RhdGVwaWNrZXInID8gJy8nIDogJyAnXCJcbiAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICAgI3NwYW4zXG4gICAgICAgICAgICBjbGFzcz1cIm1haW5cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICdyZXNldC1zZWxlY3Rpb24tY29sb3InOiAhY2FJbnB1dENvbXBvbmVudC5pc0ZvY3VzSW5wdXQsXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIHRhYmluZGV4PVwiMlwiXG4gICAgICAgICAgICAobW91c2V1cCk9XCJzZXRTZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJjaGFuZ2VTZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICBbaW5uZXJIVE1MXT1cImlucHV0Q29uZmlnLm5hbWUgPT09ICdkYXRlcGlja2VyJyA/ICd5eScgOiAnQU0nXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8YXBwLWNhLWlucHV0XG4gICAgICAgIFtpbnB1dENvbmZpZ109XCJpbnB1dENvbmZpZ1wiXG4gICAgICAgIFtkYXRlVGltZVBvcG92ZXJdPVwiZGF0ZVRpbWVQb3BvdmVyXCJcbiAgICAgICAgKGZvY3VzSW5wdXRFdmVudCk9XCJoYW5kbGVGb2N1c0lucHV0KCRldmVudClcIlxuICAgICAgICAoaGFuZGxlVG9nZ2xlRHJvcGRvd25PcHRpb25zKT1cInRvZ2dsZURyb3Bkb3duT3B0aW9ucygpXCJcbiAgICAgICAgKGNsb3NlUG9wb3Zlcik9XCJibHVyT25EYXRlVGltZSgpXCJcbiAgICAgICAgKGJsdXJJbnB1dCk9XCJvbkJsdXJJbnB1dCgkZXZlbnQpXCJcbiAgICAgICAgKGNsZWFyKT1cImNsZWFySW5wdXQoJGV2ZW50KVwiXG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJnZXRTdXBlckNvbnRyb2whIHwgZm9ybUNvbnRyb2xcIlxuICAgID48L2FwcC1jYS1pbnB1dD5cbjwvZGl2PlxuXG48IS0tIFBvcG92ZXIgZm9yIERhdGVUaW1lIFBpY2tlcnMgLS0+XG48bmctdGVtcGxhdGUgI2RhdGVUaW1lUG9wb3ZlciBsZXQtZGF0YT1cImRhdGFcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZGF0ZXRpbWUtZHJvcGRvd24taG9sZGVyXCI+XG4gICAgICAgIDxjYS1jdXN0b20tZGF0ZXRpbWUtcGlja2Vyc1xuICAgICAgICAgICAgW2NhbGVuZGFyVHlwZV09XCJcbiAgICAgICAgICAgICAgICBpbnB1dENvbmZpZy5uYW1lID09PSAnZGF0ZXBpY2tlcicgfHxcbiAgICAgICAgICAgICAgICBpbnB1dENvbmZpZy5uYW1lID09PSAnZGF0ZXBpY2tlckJhbmtDYXJkJ1xuICAgICAgICAgICAgICAgICAgICA/ICdkYXRlJ1xuICAgICAgICAgICAgICAgICAgICA6ICd0aW1lJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtpbnB1dENvbmZpZ109XCJpbnB1dENvbmZpZ1wiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ01NL0REL1lZJ1wiXG4gICAgICAgICAgICBbZGF0ZVRpbWVdPVwiZGF0ZVRpbWVJbnB1dERhdGVcIlxuICAgICAgICAgICAgKGNsb3NlUG9wb3Zlcik9XCJjbG9zZVBvcG92ZXIoKVwiXG4gICAgICAgID48L2NhLWN1c3RvbS1kYXRldGltZS1waWNrZXJzPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -15069,6 +15069,7 @@ class CaInputDatetimePickerComponent {
15069
15069
  .pipe(takeUntil(this.destroy$))
15070
15070
  .subscribe((date) => {
15071
15071
  if (!this.inputConfig.isDisabled) {
15072
+ console.log('CALENDAR SERVIE DATE CHANGE');
15072
15073
  this.setTimeDateInput(date);
15073
15074
  this.caInputComponent.caInputPlaceholderIconComponent.t2?.close();
15074
15075
  }
@@ -15251,11 +15252,12 @@ class CaInputDatetimePickerComponent {
15251
15252
  this.onChange = fn;
15252
15253
  }
15253
15254
  onChange(_) {
15254
- this.superControl.control?.setValue(_);
15255
- this.superControl.control?.markAsTouched(); // Mark the control as touched
15256
- this.superControl.control?.markAsDirty();
15255
+ // this.superControl.control?.setValue(_);
15256
+ // this.superControl.control?.markAsTouched(); // Mark the control as touched
15257
+ // this.superControl.control?.markAsDirty();
15257
15258
  }
15258
15259
  writeValue(obj) {
15260
+ console.log('WRITE VALUE');
15259
15261
  this.setTimeDateInput(obj, true);
15260
15262
  }
15261
15263
  registerOnTouched() { }