@energycap/components 0.41.1-ECAP-26841-date-input-features.20250108-1012 → 0.41.1-ECAP-26841-date-input-features.20250108-1149

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.
@@ -90,6 +90,7 @@ export class DateInputComponent extends FormControlBase {
90
90
  this.calendarSelection = this.formModel.value;
91
91
  this.updateCalendars(this.calendarSelection);
92
92
  this.updateSteppers(this.calendarSelection);
93
+ console.log(this.calendarSelection);
93
94
  }
94
95
  /** Focuses the input whenever the calendar is shift-tabbed out of. */
95
96
  onCalendarFocusOutStart() {
@@ -375,6 +376,7 @@ export class DateInputComponent extends FormControlBase {
375
376
  updateSteppers(value) {
376
377
  // Disable the steppers if we either don't have a selection or only have one date in the selection.
377
378
  if (!value ||
379
+ (DateInput.isSelectionSingleDate(value) && this.selectionMode !== 'day') ||
378
380
  (DateInput.isSelectionRange(value) && (!value.start || !value.end))) {
379
381
  this.disableSteppers = true;
380
382
  }
@@ -460,4 +462,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
460
462
  type: ViewChild,
461
463
  args: ['overlay']
462
464
  }] } });
463
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvY29udHJvbHMvZGF0ZS1pbnB1dC9kYXRlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9kYXRlLWlucHV0L2RhdGUtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBYyxXQUFXLEVBQUUsS0FBSyxFQUFvQyxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkgsT0FBTyxFQUFFLFdBQVcsRUFBcUIsU0FBUyxFQUFvQixNQUFNLGdCQUFnQixDQUFDO0FBQzdGLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBSzdELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRL0MsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGVBQWU7SUFxRXJELFlBQ1ksd0JBQWtELEVBQ2xELGVBQWdDLEVBQ2xDLHFCQUE0QyxFQUM1QyxFQUFjLEVBQ2QsY0FBdUIsRUFDdkIsbUJBQWtEO1FBRTFELEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxlQUFlLENBQUMsQ0FBQztRQVB2Qyw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBQ2xELG9CQUFlLEdBQWYsZUFBZSxD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ZGtDb25uZWN0ZWRPdmVybGF5LCBPdmVybGF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUNvbnRyb2xTdGF0dXMsIEZvcm1Hcm91cCwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBsYXN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgS2V5Ym9hcmROYXZDb250YWluZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9wdWJsaWMtYXBpJztcclxuaW1wb3J0IHsgRGF0ZVRpbWVIZWxwZXIgfSBmcm9tICcuLi8uLi9jb3JlL2RhdGUtdGltZS1oZWxwZXInO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3ZhbGlkYXRpb24tbWVzc2FnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwSGVscGVyIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm0tZ3JvdXAuaGVscGVyJztcclxuaW1wb3J0IHsgVXNlclByZWZlcmVuY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3VzZXItcHJlZmVyZW5jZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2FsZW5kYXIgfSBmcm9tICcuLi9jYWxlbmRhci9jYWxlbmRhci50eXBlcyc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sQmFzZSB9IGZyb20gJy4uL2Zvcm0tY29udHJvbC1iYXNlJztcclxuaW1wb3J0IHsgRGF0ZUlucHV0U2VsZWN0aW9uU3RyYXRlZ3lCYXNlIH0gZnJvbSAnLi9kYXRlLWlucHV0LXNlbGVjdGlvbi1zdHJhdGVnaWVzL2RhdGUtaW5wdXQtc2VsZWN0aW9uLXN0cmF0ZWd5LWJhc2UnO1xyXG5pbXBvcnQgeyBEYXRlSW5wdXQgfSBmcm9tICcuL2RhdGUtaW5wdXQudHlwZXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdlYy1kYXRlLWlucHV0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZGF0ZS1pbnB1dC5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW0RhdGVJbnB1dC5TZWxlY3Rpb25TdHJhdGVnaWVzXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0ZUlucHV0Q29tcG9uZW50IGV4dGVuZHMgRm9ybUNvbnRyb2xCYXNlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxyXG4gIEBJbnB1dCgpIHB1YmxpYyBpZDogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8qKiBUaGUgZm9ybSBjb250cm9sIHByb3ZpZGVkIGJ5IHRoZSBob3N0aW5nIGZvcm0uICovXHJcbiAgQElucHV0KCkgcHVibGljIGZvcm1Nb2RlbDogRGF0ZUlucHV0LkZvcm1Nb2RlbCA9IG5ldyBGb3JtQ29udHJvbChudWxsKTtcclxuXHJcbiAgQElucHV0KCkgcHVibGljIG1pbkRhdGU6IERhdGUgPSBEYXRlVGltZUhlbHBlci5taW5EYXRlUGlja2VyRGF0ZTtcclxuICBASW5wdXQoKSBwdWJsaWMgbWF4RGF0ZTogRGF0ZSA9IERhdGVUaW1lSGVscGVyLm1heERhdGVQaWNrZXJEYXRlO1xyXG5cclxuICAvKiogVGhlIGluaXRpYWwgc2VsZWN0aW9uIG1vZGUgZm9yIHRoZSBjYWxlbmRhci4gRGVmYXVsdHMgdG8gZGF5IGlmIG5vdCBwcm92aWRlZCAqL1xyXG4gIEBJbnB1dCgpIHNlbGVjdGlvbk1vZGU6IERhdGVJbnB1dC5TZWxlY3Rpb25Nb2RlID0gJ2RheSc7XHJcblxyXG4gIC8qKiBUaGUgYXZhaWxhYmxlIHNlbGVjdGlvbiBtb2RlcyBmb3IgdGhlIGNhbGVuZGFyLiBEZWZhdWx0cyB0byBvbmx5IHRoZSBpbml0aWFsIHNlbGVjdGlvbiBtb2RlIGlmIG5vdCBwcm92aWRlZC4gICovXHJcbiAgQElucHV0KCkgc2VsZWN0aW9uTW9kZU9wdGlvbnM6IERhdGVJbnB1dC5TZWxlY3Rpb25Nb2RlW10gPSBbJ2RheSddO1xyXG5cclxuICAvKiogXHJcbiAgICogV2hlbiBhIGRhdGUgaXMgcHJvdmlkZWQsIGVuYWJsZXMgdGhlICdxdWljayBzZWxlY3QnIGJ1dHRvbi5cclxuICAgKiBDbGlja2luZyB0aGUgYnV0dG9uIHdpbGwgc2hpZnQgdGhlIHNlbGVjdGVkIGRhdGUgcmFuZ2UgdG8gdGhlIHByb3ZpZGVkIGRhdGUuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcXVpY2tTZWxlY3REYXRlPzogRGF0ZTtcclxuXHJcbiAgLyoqIEVuYWJsZXMgdGhlIG5leHQvcHJldmlvdXMgc2VsZWN0aW9uIGJ1dHRvbnMuICovXHJcbiAgQElucHV0KCkgZW5hYmxlU3RlcHBlcnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqIFRoZSBmb3JtIGdyb3VwIGZvciB0aGUgaW50ZXJuYWwgdGV4dGJveGVzLiBUZXh0Ym94MiBpcyBvbmx5IHVzZWQgZm9yIHJhbmdlcy4gKi9cclxuICBwdWJsaWMgdGV4dGJveEdyb3VwOiBEYXRlSW5wdXQuVGV4dGJveEdyb3VwID0gbmV3IEZvcm1Hcm91cCh7XHJcbiAgICB0ZXh0Ym94OiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCksXHJcbiAgICB0ZXh0Ym94MjogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwpXHJcbiAgfSk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBjdXJyZW50IGNhbGVuZGFyIHNlbGVjdGlvbi5cclxuICAgKiBVcGRhdGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIGEgY2FsZW5kYXIgaXRlbSBvciB3aGVuIHRoZSBkYXRlIGVudGVyZWQgaW50byB0aGUgdGV4dGJveCBpcyBwYXJzZWQuXHJcbiAgICovXHJcbiAgcHVibGljIGNhbGVuZGFyU2VsZWN0aW9uOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8qKiBDb250cm9scyB3aGV0aGVyIHRoZSBjYWxlbmRhciBvdmVybGF5IGlzIG9wZW4gb3Igbm90LiAqL1xyXG4gIHB1YmxpYyBpc0NhbGVuZGFyT3BlbiA9IGZhbHNlO1xyXG5cclxuICAvKiogUGxhY2Vob2xkZXIgZm9yIHRoZSB0ZXh0Ym94LiBVcGRhdGVkIHRvIHJlZmxlY3QgdGhlIHVzZXIncyBkYXRlIGRpc3BsYXkgcHJlZmVyZW5jZS4gKi9cclxuICBwdWJsaWMgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICdNTS9ERC9ZWVlZJztcclxuXHJcbiAgLyoqIE92ZXJsYXkgc2Nyb2xsIHN0cmF0ZWd5IGZvciB0aGUgY2FsZW5kYXIgb3ZlcmxheS4gQ2xvc2VzIHRoZSBjYWxlbmRhciBvbiBzY3JvbGwuICovXHJcbiAgcHVibGljIG92ZXJsYXlTY3JvbGxTdHJhdGVneSA9IHRoaXMub3ZlcmxheVNlcnZpY2Uuc2Nyb2xsU3RyYXRlZ2llcy5jbG9zZSgpO1xyXG5cclxuICBwdWJsaWMgcHJpbWFyeUNhbGVuZGFyVmlldzogQ2FsZW5kYXIuVmlldyA9IHsgbW9kZTogJ2RheScsIGRhdGU6IG5ldyBEYXRlKCkgfTtcclxuICBwdWJsaWMgc2Vjb25kYXJ5Q2FsZW5kYXJWaWV3OiBDYWxlbmRhci5WaWV3ID0geyBtb2RlOiAnZGF5JywgZGF0ZTogbmV3IERhdGUoKSB9O1xyXG5cclxuICBwdWJsaWMgcHJpbWFyeUNhbGVuZGFyTWF4RGF0ZTogRGF0ZSA9IERhdGVUaW1lSGVscGVyLm1heERhdGVQaWNrZXJEYXRlO1xyXG4gIHB1YmxpYyBzZWNvbmRhcnlDYWxlbmRhck1pbkRhdGU6IERhdGUgPSBEYXRlVGltZUhlbHBlci5taW5EYXRlUGlja2VyRGF0ZTtcclxuXHJcbiAgcHVibGljIGRpc2FibGVTdGVwcGVyczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwdWJsaWMgc2VsZWN0aW9uU3RyYXRlZ3khOiBEYXRlSW5wdXRTZWxlY3Rpb25TdHJhdGVneUJhc2U7XHJcblxyXG4gIC8qKiBcclxuICAgKiBEYXRlIHBhcnNpbmcgZm9ybWF0cyBmb3IgdXNlci1lbnRlcmVkIGRhdGVzLiBEZWZhdWx0cyB0byBtb250aC1maXJzdCBmb3JtYXRzLCBidXQgaXMgdXBkYXRlZCBpbiBvbkluaXRcclxuICAgKiB0byB1c2UgdGhlIHVzZXIncyBwcmVmZXJyZWQgZGF0ZSBmb3JtYXQuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwYXJzZUZvcm1hdHM6IHN0cmluZ1tdID0gRGF0ZVRpbWVIZWxwZXIuZ2V0TW9tZW50UGFyc2VGb3JtYXRzKCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyJykgY2FsZW5kYXI/OiBLZXlib2FyZE5hdkNvbnRhaW5lckRpcmVjdGl2ZTtcclxuICBAVmlld0NoaWxkKCdjb250cm9scycpIGNvbnRyb2xzPzogS2V5Ym9hcmROYXZDb250YWluZXJEaXJlY3RpdmU7XHJcblxyXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIG92ZXJsYXkgZGlyZWN0aXZlIChzZWUgdGVtcGxhdGUpLiBVc2VkIHRvIHVwZGF0ZSB0aGUgb3ZlcmxheSBwb3NpdGlvbiBvbiB2YWxpZGF0aW9uIGNoYW5nZXMuICovXHJcbiAgQFZpZXdDaGlsZCgnb3ZlcmxheScpIG92ZXJsYXk/OiBDZGtDb25uZWN0ZWRPdmVybGF5O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCB2YWxpZGF0aW9uTWVzc2FnZVNlcnZpY2U6IFZhbGlkYXRpb25NZXNzYWdlU2VydmljZSxcclxuICAgIHByb3RlY3RlZCBmb3JtR3JvdXBIZWxwZXI6IEZvcm1Hcm91cEhlbHBlcixcclxuICAgIHByaXZhdGUgdXNlclByZWZlcmVuY2VTZXJ2aWNlOiBVc2VyUHJlZmVyZW5jZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSBvdmVybGF5U2VydmljZTogT3ZlcmxheSxcclxuICAgIHByaXZhdGUgc2VsZWN0aW9uU3RyYXRlZ2llczogRGF0ZUlucHV0LlNlbGVjdGlvblN0cmF0ZWdpZXNcclxuICApIHtcclxuICAgIHN1cGVyKHZhbGlkYXRpb25NZXNzYWdlU2VydmljZSwgZm9ybUdyb3VwSGVscGVyKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzLnNlbGVjdGlvbk1vZGUgJiYgIWNoYW5nZXMuc2VsZWN0aW9uTW9kZS5pc0ZpcnN0Q2hhbmdlKCkpIHtcclxuICAgICAgdGhpcy5vblNlbGVjdGlvbk1vZGVDaGFuZ2UodGhpcy5zZWxlY3Rpb25Nb2RlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgLy8gU2V0dXBcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICB0aGlzLnNldERhdGVGb3JtYXRzKCk7XHJcbiAgICB0aGlzLnNldFNlbGVjdGlvbk1vZGUodGhpcy5zZWxlY3Rpb25Nb2RlKTtcclxuXHJcbiAgICAvLyBTdWJzY3JpcHRpb25zXHJcbiAgICB0aGlzLm9uRm9ybU1vZGVsU3RhdHVzQ2hhbmdlcygpO1xyXG4gICAgdGhpcy5vbkZvcm1Nb2RlbFZhbHVlQ2hhbmdlcygpO1xyXG4gICAgdGhpcy5vblRleHRib3hWYWx1ZUNoYW5nZXMoKTtcclxuXHJcbiAgICAvLyBTeW5jIHRoZSBpbml0aWFsIGRpc2FibGVkIHN0YXR1cyBhbmQgdmFsdWUgb2YgdGhlIHRleHRib3hcclxuICAgIHRoaXMuc3luY1RleHRib3hDb250cm9sRGlzYWJsZWRTdGF0dXModGhpcy5mb3JtTW9kZWwuc3RhdHVzKTtcclxuICAgIGNvbnN0IGluaXRpYWxEaXNwbGF5VmFsdWUgPSB0aGlzLnNlbGVjdGlvblN0cmF0ZWd5LmZvcm1hdFNlbGVjdGlvbih0aGlzLmZvcm1Nb2RlbC52YWx1ZSk7XHJcbiAgICB0aGlzLnRleHRib3hHcm91cC5wYXRjaFZhbHVlKGluaXRpYWxEaXNwbGF5VmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuXHJcbiAgICAvLyBVcGRhdGUgdGhlIGNhbGVuZGFyIHNlbGVjdGlvbiBhbmQgdmlldyBiYXNlZCBvbiB0aGUgaW5pdGlhbCBmb3JtIG1vZGVsIHZhbHVlXHJcbiAgICB0aGlzLmNhbGVuZGFyU2VsZWN0aW9uID0gdGhpcy5mb3JtTW9kZWwudmFsdWU7XHJcbiAgICB0aGlzLnVwZGF0ZUNhbGVuZGFycyh0aGlzLmNhbGVuZGFyU2VsZWN0aW9uKTtcclxuICAgIHRoaXMudXBkYXRlU3RlcHBlcnModGhpcy5jYWxlbmRhclNlbGVjdGlvbik7XHJcbiAgfVxyXG5cclxuICAvKiogRm9jdXNlcyB0aGUgaW5wdXQgd2hlbmV2ZXIgdGhlIGNhbGVuZGFyIGlzIHNoaWZ0LXRhYmJlZCBvdXQgb2YuICovXHJcbiAgcHVibGljIG9uQ2FsZW5kYXJGb2N1c091dFN0YXJ0KCkge1xyXG4gICAgdGhpcy5mb2N1c0lucHV0KCk7XHJcbiAgfVxyXG5cclxuICAvKiogQ2xvc2VzIHRoZSBjYWxlbmRhciBhbmQgZm9jdXNlcyB0aGUgaW5wdXQgd2hlbmV2ZXIgdGhlIGNhbGVuZGFyIGlzIHRhYmJlZCBvdXQgb2YuICovXHJcbiAgcHVibGljIG9uQ2FsZW5kYXJGb2N1c091dEVuZCgpIHtcclxuICAgIHRoaXMuaXNDYWxlbmRhck9wZW4gPSBmYWxzZTtcclxuICAgIHRoaXMuZm9jdXNJbnB1dCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqIENsb3NlcyB0aGUgY2FsZW5kYXIgaWYgdGhlIHVzZXIgY2xpY2tzIG91dHNpZGUgb2YgdGhlIGNhbGVuZGFyIGFuZCBkYXRlIGlucHV0LiAqL1xyXG4gIHB1YmxpYyBvbk92ZXJsYXlPdXRzaWRlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIC8vIERvIG5vdCBjbG9zZSB0aGUgY2FsZW5kYXIgaWYgdGhlIGNsaWNrIHdhcyB3aXRoaW4gdGhlIGRhdGUgaW5wdXQgb3IgYWN0aW9uIGJ1dHRvblxyXG4gICAgY29uc3QgcmVjdCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGNvbnN0IGNsaWNrZWRPdXRzaWRlQ29udHJvbCA9IGV2ZW50LmNsaWVudFkgPCByZWN0LnRvcCB8fFxyXG4gICAgICBldmVudC5jbGllbnRZID4gcmVjdC5ib3R0b20gfHxcclxuICAgICAgZXZlbnQuY2xpZW50WCA8IHJlY3QubGVmdCB8fFxyXG4gICAgICBldmVudC5jbGllbnRYID4gcmVjdC5yaWdodDtcclxuICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgdXNlciBoaXQgZW50ZXIgb24gdGhlIGFjdGlvbiBidXR0b24gaW5zdGVhZCBvZiBjbGlja2luZyB3aXRoIHRoZSBtb3VzZS5cclxuICAgIC8vIEluIHRoaXMgY2FzZSB0aGUgXCJjbGlja1wiIGV2ZW50IHdpbGwgYmUgb3V0c2lkZSBvZiB0aGUgY29tcG9uZW50IGJlY2F1c2UgdGhlIGNsaWVudHggYW5kIHkgYXJlIDAsXHJcbiAgICAvLyBidXQgd2UgZG9uJ3Qgd2FudCB0byBjbG9zZSBpbiB0aGlzIGNhc2UgYmVjYXVzZSBidXR0b24gY2xpY2tzIHRyaWdnZXIgY2FsZW5kYXIgb3Blbi9jbG9zZSBzZXBhcmF0ZWx5LlxyXG4gICAgY29uc3QgdGFyZ2V0SWQgPSAoPEhUTUxFbGVtZW50PmV2ZW50LnRhcmdldCkuaWQ7XHJcbiAgICBjb25zdCBpc0FjdGlvbkNsaWNrID0gdGFyZ2V0SWQgPT09IGAke3RoaXMuaWR9X2FjdGlvbmAgfHwgdGFyZ2V0SWQgPT09IGAke3RoaXMuaWR9X2NvbnRyb2wyX2FjdGlvbmA7XHJcblxyXG4gICAgaWYgKCFpc0FjdGlvbkNsaWNrICYmIGNsaWNrZWRPdXRzaWRlQ29udHJvbCkge1xyXG4gICAgICB0aGlzLmlzQ2FsZW5kYXJPcGVuID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogSWYgdGhlIHVzZXIgdGFicyBvdXQgb2YgdGhlIGZvcm0gY29udHJvbCdzIGFjdGlvbiBidXR0b24gYW5kIHRoZSBjYWxlbmRhciBpcyBvcGVuLCBmb2N1cyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgY2FsZW5kYXIgb3ZlcmxheSAqL1xyXG4gIHB1YmxpYyBvbkNvbnRyb2xzRm9jdXNPdXRFbmQoKSB7XHJcbiAgICBpZiAodGhpcy5pc0NhbGVuZGFyT3Blbikge1xyXG4gICAgICB0aGlzLmNhbGVuZGFyPy5mb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uVGV4dGJveEJsdXIoKSB7XHJcbiAgICAvLyBXZSB3YW50IHRvIHByZXZlbnQgdGhlIGZpeGVkIGRhdGUgcmFuZ2UgbW9kZXMgZnJvbSByZS1hdXRvY29tcGxldGluZyB0aGUgZmlyc3QgdGV4dGJveCB3aGVuIGl0IGlzIGV4cGxpY2l0bHkgY2xlYXJlZC5cclxuICAgIGNvbnN0IHByZXZpb3VzVmFsdWUgPSBEYXRlSW5wdXQuaXNTZWxlY3Rpb25SYW5nZSh0aGlzLmZvcm1Nb2RlbC52YWx1ZSkgPyB0aGlzLmZvcm1Nb2RlbC52YWx1ZS5zdGFydCA6IHRoaXMuZm9ybU1vZGVsLnZhbHVlO1xyXG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy50ZXh0Ym94R3JvdXAudmFsdWUudGV4dGJveDtcclxuICAgIGNvbnN0IGNsZWFyZWQgPSAhIXByZXZpb3VzVmFsdWUgJiYgIWN1cnJlbnRWYWx1ZTtcclxuICAgIGNvbnN0IG9wdGlvbnM6IERhdGVJbnB1dC5QYXJzaW5nT3B0aW9ucyA9IHsgcHJldmVudEF1dG9Db21wbGV0ZTogY2xlYXJlZCB9O1xyXG5cclxuICAgIC8vIFBhcnNlIHRoZSB0ZXh0Ym94IHZhbHVlcyBpbnRvIGEgc2VsZWN0aW9uIGFuZCB1cGRhdGUgdGhlIGZvcm0gbW9kZWxcclxuICAgIGNvbnN0IHBhcnNlZFNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uU3RyYXRlZ3kucGFyc2VUZXh0Ym94VmFsdWVzKHRoaXMudGV4dGJveEdyb3VwLnZhbHVlLCB0aGlzLnBhcnNlRm9ybWF0cywgb3B0aW9ucyk7XHJcbiAgICB0aGlzLnVwZGF0ZUZvcm1Nb2RlbChwYXJzZWRTZWxlY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uVGV4dGJveDJCbHVyKCkge1xyXG4gICAgLy8gV2Ugd2FudCB0byBwcmV2ZW50IHRoZSBmaXhlZCBkYXRlIHJhbmdlIG1vZGVzIGZyb20gcmUtYXV0b2NvbXBsZXRpbmcgdGhlIHNlY29uZCB0ZXh0Ym94IHdoZW4gaXQgaXMgZXhwbGljaXRseSBjbGVhcmVkLlxyXG4gICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IERhdGVJbnB1dC5pc1NlbGVjdGlvblJhbmdlKHRoaXMuZm9ybU1vZGVsLnZhbHVlKSA/IHRoaXMuZm9ybU1vZGVsLnZhbHVlLmVuZCA6IG51bGw7XHJcbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLnRleHRib3hHcm91cC52YWx1ZS50ZXh0Ym94MjtcclxuICAgIGNvbnN0IGNsZWFyZWQgPSAhIXByZXZpb3VzVmFsdWUgJiYgIWN1cnJlbnRWYWx1ZTtcclxuICAgIGNvbnN0IG9wdGlvbnM6IERhdGVJbnB1dC5QYXJzaW5nT3B0aW9ucyA9IHsgcGFyc2VGcm9tRW5kOiB0cnVlLCBwcmV2ZW50QXV0b0NvbXBsZXRlOiBjbGVhcmVkIH07XHJcblxyXG4gICAgLy8gUGFyc2UgdGhlIHRleHRib3ggdmFsdWVzIGludG8gYSBzZWxlY3Rpb24gYW5kIHVwZGF0ZSB0aGUgZm9ybSBtb2RlbCxcclxuICAgIC8vIEZvciB0aGUgc2Vjb25kIGJveCB3ZSdyZSBrZXlpbmcgdGhlIHBhcnNlIGZyb20gdGhlIGVuZCBkYXRlIGluIHRoZSBzZWxlY3Rpb24uXHJcbiAgICBjb25zdCBwYXJzZWRTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvblN0cmF0ZWd5LnBhcnNlVGV4dGJveFZhbHVlcyh0aGlzLnRleHRib3hHcm91cC52YWx1ZSwgdGhpcy5wYXJzZUZvcm1hdHMsIG9wdGlvbnMpO1xyXG4gICAgdGhpcy51cGRhdGVGb3JtTW9kZWwocGFyc2VkU2VsZWN0aW9uKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblNlbGVjdGlvbk1vZGVDaGFuZ2UobW9kZTogRGF0ZUlucHV0LlNlbGVjdGlvbk1vZGUpIHtcclxuICAgIHRoaXMuc2V0U2VsZWN0aW9uTW9kZShtb2RlKTtcclxuICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uU3RyYXRlZ3kuZ2V0TmV3U2VsZWN0aW9uRnJvbUV4aXN0aW5nKHRoaXMuY2FsZW5kYXJTZWxlY3Rpb24pO1xyXG4gICAgdGhpcy51cGRhdGVGb3JtTW9kZWwobmV3U2VsZWN0aW9uKTtcclxuXHJcbiAgICAvLyBPbiBzZWxlY3Rpb24gbW9kZSBjaGFuZ2UsIHdlIHdhbnQgdG8gZm9yY2UgdGhlIGNhbGVuZGFycyB0byBzaG93IHRoZSByaWdodCB2aWV3IG1vZGUgZm9yIHRoZSBuZXcgc2VsZWN0aW9uLlxyXG4gICAgLy8gVGhpcyBwcmV2ZW50cyB0aGUgdXNlciBmcm9tIHNlZWluZyBhIHZpZXcgbW9kZSB0aGF0IGRvZXNuJ3QgbWFrZSBzZW5zZSBmb3IgdGhlIG5ldyBzZWxlY3Rpb24sXHJcbiAgICAvLyBMaWtlIHdoZW4gc3dpY2hpbmcgZnJvbSB5ZWFyIG1vZGUgdG8gbGFzdCA3IGRheXMgbW9kZS5cclxuICAgIHRoaXMucHJpbWFyeUNhbGVuZGFyVmlldyA9IHsgbW9kZTogdGhpcy5zZWxlY3Rpb25TdHJhdGVneS5zZWxlY3Rpb25WaWV3TW9kZSwgZGF0ZTogdGhpcy5wcmltYXJ5Q2FsZW5kYXJWaWV3LmRhdGUgfTtcclxuICAgIHRoaXMuc2Vjb25kYXJ5Q2FsZW5kYXJWaWV3ID0geyBtb2RlOiB0aGlzLnNlbGVjdGlvblN0cmF0ZWd5LnNlbGVjdGlvblZpZXdNb2RlLCBkYXRlOiB0aGlzLnNlY29uZGFyeUNhbGVuZGFyVmlldy5kYXRlIH07XHJcbiAgICB0aGlzLnVwZGF0ZUNhbGVuZGFyTWluTWF4RGF0ZXMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNhbGVuZGFyRGF0ZVNlbGVjdGVkKGRhdGU6IERhdGUpIHtcclxuICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uU3RyYXRlZ3kuZ2V0U2VsZWN0aW9uRnJvbURhdGUoZGF0ZSwgdGhpcy5jYWxlbmRhclNlbGVjdGlvbik7XHJcbiAgICBjb25zdCBkaXNwbGF5VmFsdWUgPSB0aGlzLnNlbGVjdGlvblN0cmF0ZWd5LmZvcm1hdFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pO1xyXG4gICAgLy8gRG9uJ3QgZW1pdCBldmVudHMgd2hlbiBwYXRjaGluZyB2YWx1ZXMgaGVyZS4gV2UgZG9uJ3Qgd2FudCB0byB0cmlnZ2VyIHRoZSBjYWxlbmRhciB1cGRhdGVzIHNpbmNlIHRoZSBjYWxlbmRhciBpcyBhbHJlYWR5XHJcbiAgICAvLyBzaG93aW5nIHRoZSBzZWxlY3RlZCBkYXRlLiBXZSBhbHNvIGRvbid0IHdhbnQgdG8gdHJpZ2dlciB0aGUgdGV4dGJveCBwYXJzaW5nIGxvZ2ljIHNpbmNlIHRoZSBkYXRlIHdhcyBzZWxlY3RlZCBmcm9tIHRoZSBjYWxlbmRhci5cclxuICAgIHRoaXMudGV4dGJveEdyb3VwLnBhdGNoVmFsdWUoZGlzcGxheVZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB0aGlzLmZvcm1Nb2RlbC5wYXRjaFZhbHVlKG5ld1NlbGVjdGlvbiwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgdGhpcy5jYWxlbmRhclNlbGVjdGlvbiA9IG5ld1NlbGVjdGlvbjtcclxuICAgIHRoaXMudXBkYXRlU3RlcHBlcnMobmV3U2VsZWN0aW9uKTtcclxuXHJcbiAgICAvLyBDbG9zZSB0aGUgY2FsZW5kYXIgaWYgdGhlIHNlbGVjdGlvbiBtb2RlIGlzIG5vdCBhIHJhbmdlIG1vZGUgd2hlcmUgZWl0aGVyIHRoZSBzdGFydCBvciB0aGUgZW5kIGRhdGUgY2FuIGJlIGNoYW5nZWQuXHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0aW9uU3RyYXRlZ3kuc2hvd1NlY29uZGFyeVRleHRib3gpIHtcclxuICAgICAgdGhpcy5pc0NhbGVuZGFyT3BlbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmZvY3VzSW5wdXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblByaW1hcnlDYWxlbmRhclZpZXdDaGFuZ2UodmlldzogQ2FsZW5kYXIuVmlldykge1xyXG4gICAgdGhpcy5wcmltYXJ5Q2FsZW5kYXJWaWV3ID0gdmlldztcclxuICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJNaW5NYXhEYXRlcygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uU2Vjb25kYXJ5Q2FsZW5kYXJWaWV3Q2hhbmdlKHZpZXc6IENhbGVuZGFyLlZpZXcpIHtcclxuICAgIHRoaXMuc2Vjb25kYXJ5Q2FsZW5kYXJWaWV3ID0gdmlldztcclxuICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJNaW5NYXhEYXRlcygpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFNoaWZ0cyB0aGUgY2FsZW5kYXIgdmlld3MgdG8gZGlzcGxheSB0b2RheS4gRG9lcyBub3QgdXBkYXRlIHRoZSBjYWxlbmRhciBzZWxlY3Rpb24uICovXHJcbiAgcHVibGljIGdvVG9Ub2RheSgpIHtcclxuICAgIC8vIElmIGJvdGggY2FsZW5kYXJzIGFyZSB2aXNpYmxlLCBzaG93IHRvZGF5IGluIHRoZSBzZWNvbmRhcnkgY2FsZW5kYXIgYW5kIHRoZSBtb250aCBiZWZvcmUgaW4gdGhlIHByaW1hcnkgY2FsZW5kYXIuXHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25TdHJhdGVneS5zaG93U2Vjb25kYXJ5Q2FsZW5kYXIpIHtcclxuICAgICAgdGhpcy5wcmltYXJ5Q2FsZW5kYXJWaWV3ID0geyBtb2RlOiAnZGF5JywgZGF0ZTogbW9tZW50KCkuc3VidHJhY3QoMSwgJ21vbnRoJykudG9EYXRlKCkgfTtcclxuICAgICAgdGhpcy5zZWNvbmRhcnlDYWxlbmRhclZpZXcgPSB7IG1vZGU6ICdkYXknLCBkYXRlOiBuZXcgRGF0ZSgpIH07XHJcbiAgICAgIC8vIElmIHdlJ3JlIGluIGEgc2luZ2xlIGRhdGUgbW9kZSwgc2hvdyB0b2RheSBpbiB0aGUgcHJpbWFyeSBjYWxlbmRhci5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucHJpbWFyeUNhbGVuZGFyVmlldyA9IHsgbW9kZTogJ2RheScsIGRhdGU6IG5ldyBEYXRlKCkgfTtcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJNaW5NYXhEYXRlcygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdvVG9RdWlja1NlbGVjdERhdGUoKSB7XHJcbiAgICBpZiAodGhpcy5xdWlja1NlbGVjdERhdGUpIHtcclxuICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb25TdHJhdGVneS5nZXRTZWxlY3Rpb25Gb3JRdWlja1NlbGVjdERhdGUodGhpcy5xdWlja1NlbGVjdERhdGUsIHRoaXMuY2FsZW5kYXJTZWxlY3Rpb24pO1xyXG4gICAgICB0aGlzLnVwZGF0ZUZvcm1Nb2RlbChuZXdTZWxlY3Rpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG5leHRTZWxlY3Rpb24oKSB7XHJcbiAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvblN0cmF0ZWd5LmdldE5leHRTZWxlY3Rpb24odGhpcy5jYWxlbmRhclNlbGVjdGlvbik7XHJcbiAgICB0aGlzLnVwZGF0ZUZvcm1Nb2RlbChuZXdTZWxlY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHByZXZpb3VzU2VsZWN0aW9uKCkge1xyXG4gICAgY29uc3QgbmV3U2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb25TdHJhdGVneS5nZXRQcmV2aW91c1NlbGVjdGlvbih0aGlzLmNhbGVuZGFyU2VsZWN0aW9uKTtcclxuICAgIHRoaXMudXBkYXRlRm9ybU1vZGVsKG5ld1NlbGVjdGlvbik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUZvcm1Nb2RlbCh2YWx1ZTogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwpIHtcclxuICAgIHRoaXMuZm9ybU1vZGVsLnBhdGNoVmFsdWUodmFsdWUpO1xyXG5cclxuICAgIC8vIFZhbGlkYXRlIHRoZSB0ZXh0Ym94ZXMgYW5kIHN5bmMgdGhlIGZvcm0gZXJyb3JzXHJcbiAgICAvLyBXZSBkbyB0aGlzIGFmdGVyIHBhdGNoaW5nIHRoZSBmb3JtIG1vZGVsIGJlY2F1c2UgdGhlIGZvcm0gbW9kZWwgcGF0Y2ggd2lsbCB0cmlnZ2VyXHJcbiAgICAvLyB0aGUgZGF0ZSBmb3JtYXR0aW5nIGxvZ2ljIGFuZCBvdmVyd3JpdGUgYW55IGVycm9ycyBvbiB0aGUgY29udHJvbHMgZnJvbSBiZWZvcmUuXHJcbiAgICB0aGlzLnZhbGlkYXRlVGV4dGJveGVzKCk7XHJcbiAgICB0aGlzLnN5bmNGb3JtRXJyb3JzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uRm9ybU1vZGVsU3RhdHVzQ2hhbmdlcygpIHtcclxuICAgIC8vIEtlZXAgdGhlIHRleHRib3hDb250cm9sIGRpc2FibGVkIHN0YXR1cyBpbiBzeW5jIHdpdGggdGhlIGZvcm1Nb2RlbFxyXG4gICAgdGhpcy5mb3JtTW9kZWwuc3RhdHVzQ2hhbmdlcy5waXBlKFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5jb21wb25lbnREZXN0cm95ZWQpXHJcbiAgICApLnN1YnNjcmliZShzdGF0dXMgPT4ge1xyXG4gICAgICB0aGlzLnN5bmNUZXh0Ym94Q29udHJvbERpc2FibGVkU3RhdHVzKHN0YXR1cyk7XHJcblxyXG4gICAgICBpZiAodGhpcy5pc0NhbGVuZGFyT3Blbikge1xyXG4gICAgICAgIC8vIEFzIHZhbGlkYXRpb24gbWVzc2FnZXMgYXBwZWFyL2Rpc2FwcGVhciwgdGhlIGRhdGUgaW5wdXQgbWF5IGhhdmUgc2hpZnRlZCB1cCBvciBkb3duIG9uIHRoZSBwYWdlLlxyXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgb3ZlcmxheSBwb3NpdGlvbiB0byBlbnN1cmUgaXQncyBzdGlsbCBhbGlnbmVkIHdpdGggdGhlIHRleHRib3ggYW5kIG5vdCBibG9ja2luZyBpdC5cclxuICAgICAgICAvLyBTZXR0aW1lb3V0IGlzIG5lZWRlZCB0byBlbnN1cmUgdGhlIG92ZXJsYXkgaXMgYmVpbmcgdXBkYXRlZCBhZnRlciB0aGUgbWVzc2FnZSBpcyByZW5kZXJlZC5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMub3ZlcmxheT8ub3ZlcmxheVJlZj8udXBkYXRlUG9zaXRpb24oKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uRm9ybU1vZGVsVmFsdWVDaGFuZ2VzKCkge1xyXG4gICAgLy8gVXBkYXRlIHRoZSBjYWxlbmRhciBzZWxlY3Rpb24gdGV4dGJveCB2YWx1ZSB3aXRoIGEgZm9ybWF0dGVkIGRhdGUgd2hlbiB0aGUgZm9ybSBtb2RlbCBjaGFuZ2VzLlxyXG4gICAgLy8gVGhpcyBpcyB0cmlnZ2VyZWQgYnkgdGhlIHVzZXIgc2VsZWN0aW5nIGEgZGF0ZSBmcm9tIHRoZSBjYWxlbmRhciBvciB3aGVuIHRoZSB0ZXh0Ym94IGlzIGJsdXJyZWQuXHJcbiAgICB0aGlzLmZvcm1Nb2RlbC52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuY29tcG9uZW50RGVzdHJveWVkKVxyXG4gICAgKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICBjb25zdCBkaXNwbGF5VmFsdWUgPSB0aGlzLnNlbGVjdGlvblN0cmF0ZWd5LmZvcm1hdFNlbGVjdGlvbih2YWx1ZSk7XHJcbiAgICAgIC8vIERvbid0IGVtaXQgYW4gZXZlbnQgd2hlbiBzZXR0aW5nIHRoZSB0ZXh0Ym94IHZhbHVlIHRvIGF2b2lkIGNpcmN1bGFyIHVwZGF0ZXMgYmV0d2VlbiB0aGUgdGV4dGJveCBhbmQgZm9ybSBtb2RlbC5cclxuICAgICAgdGhpcy50ZXh0Ym94R3JvdXAucGF0Y2hWYWx1ZShkaXNwbGF5VmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgdGhpcy51cGRhdGVDYWxlbmRhcnModmFsdWUpO1xyXG4gICAgICB0aGlzLnVwZGF0ZVN0ZXBwZXJzKHZhbHVlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblRleHRib3hWYWx1ZUNoYW5nZXMoKSB7XHJcbiAgICAvLyBVcGRhdGUgdGhlIGNhbGVuZGFyIHNlbGVjdGlvbiB3aGVuIHRoZSB0ZXh0Ym94IHZhbHVlIGNoYW5nZXMgdG8gdXBkYXRlIHRoZSBjYWxlbmRhci5cclxuICAgIC8vIFdlIGRvbid0IHBhdGNoIHRoZSBmb3JtTW9kZWwgaGVyZSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gdHJpZ2dlciB0aGVcclxuICAgIC8vIGRhdGUgZm9ybWF0dGluZyBsb2dpYyBhbmQgb3ZlcndyaXRlIHRoZSB1c2VyJ3MgaW5wdXQuXHJcbiAgICAvLyBXZSdsbCBkbyB0aGF0IHdoZW4gdGhlIHVzZXIgYmx1cnMgb3V0IG9mIHRoZSB0ZXh0Ym94LiBTZWUgb25UZXh0Ym94Qmx1cigpXHJcbiAgICB0aGlzLnRleHRib3hHcm91cC5jb250cm9scy50ZXh0Ym94LnZhbHVlQ2hhbmdlcy5waXBlKFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFrZVVudGlsKHRoaXMuY29tcG9uZW50RGVzdHJveWVkKVxyXG4gICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICBjb25zdCBvcHRpb25zOiBEYXRlSW5wdXQuUGFyc2luZ09wdGlvbnMgPSB7IHNoaWZ0VG9DdXJyZW50WWVhcklmQmVsb3c6IHRoaXMubWluRGF0ZSB9O1xyXG4gICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvblN0cmF0ZWd5LnBhcnNlVGV4dGJveFZhbHVlcyh0aGlzLnRleHRib3hHcm91cC52YWx1ZSwgdGhpcy5wYXJzZUZvcm1hdHMsIG9wdGlvbnMpO1xyXG5cclxuICAgICAgLy8gQ2FsZW5kYXIgc2VsZWN0aW9uIHdpbGwgYmUgbnVsbCBpZiB0aGUgZGF0ZXMgYXJlIGludmFsaWQuIERvbid0IHVwZGF0ZSB0aGUgY2FsZW5kYXJzIGluIHRoaXMgY2FzZS5cclxuICAgICAgaWYgKG5ld1NlbGVjdGlvbikge1xyXG4gICAgICAgIHRoaXMuY2FsZW5kYXJTZWxlY3Rpb24gPSBuZXdTZWxlY3Rpb247XHJcbiAgICAgICAgdGhpcy51cGRhdGVQcmltYXJ5Q2FsZW5kYXIodGhpcy5jYWxlbmRhclNlbGVjdGlvbiwgdGhpcy5zZWxlY3Rpb25TdHJhdGVneS5zaG93U2Vjb25kYXJ5Q2FsZW5kYXIpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJNaW5NYXhEYXRlcygpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBUaGUgc2Vjb25kIHRleHRib3ggaXMgb25seSB1c2VkIGluIGxhc3Q3RGF5cywgbGFzdDI4RGF5cywgYW5kIHJhbmdlIG1vZGVzLlxyXG4gICAgdGhpcy50ZXh0Ym94R3JvdXAuY29udHJvbHMudGV4dGJveDIudmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgIGRlYm91bmNlVGltZSgzMDApLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5jb21wb25lbnREZXN0cm95ZWQpXHJcbiAgICApLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IG9wdGlvbnM6IERhdGVJbnB1dC5QYXJzaW5nT3B0aW9ucyA9IHsgc2hpZnRUb0N1cnJlbnRZZWFySWZCZWxvdzogdGhpcy5taW5EYXRlLCBwYXJzZUZyb21FbmQ6IHRydWUgfTtcclxuICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb25TdHJhdGVneS5wYXJzZVRleHRib3hWYWx1ZXModGhpcy50ZXh0Ym94R3JvdXAudmFsdWUsIHRoaXMucGFyc2VGb3JtYXRzLCBvcHRpb25zKTtcclxuXHJcbiAgICAgIC8vIENhbGVuZGFyIHNlbGVjdGlvbiB3aWxsIGJlIG51bGwgaWYgdGhlIGRhdGVzIGFyZSBpbnZhbGlkLiBEb24ndCB1cGRhdGUgdGhlIGNhbGVuZGFycyBpbiB0aGlzIGNhc2UuXHJcbiAgICAgIGlmIChuZXdTZWxlY3Rpb24pIHtcclxuICAgICAgICB0aGlzLmNhbGVuZGFyU2VsZWN0aW9uID0gbmV3U2VsZWN0aW9uO1xyXG4gICAgICAgIC8vIFRoZSBzZWNvbmRhcnkgY2FsZW5kYXIgaXMgb25seSBzaG93biBpbiByYW5nZSBtb2RlLiBVcGRhdGUgdGhlIHByaW1hcnkgY2FsZW5kYXIgaWYgd2UncmUgbm90IGluIHJhbmdlIG1vZGUuXHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uU3RyYXRlZ3kuc2hvd1NlY29uZGFyeUNhbGVuZGFyKSB7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZVNlY29uZGFyeUNhbGVuZGFyKHRoaXMuY2FsZW5kYXJTZWxlY3Rpb24sIHRydWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZVByaW1hcnlDYWxlbmRhcih0aGlzLmNhbGVuZGFyU2VsZWN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGVDYWxlbmRhck1pbk1heERhdGVzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzeW5jVGV4dGJveENvbnRyb2xEaXNhYmxlZFN0YXR1cyhzdGF0dXM6IEZvcm1Db250cm9sU3RhdHVzKSB7XHJcbiAgICAvLyBUaGUgdGV4dGJveCBzaG91bGQgb25seSBiZSBkaXNhYmxlZCBpZiB0aGUgZm9ybSBtb2RlbCBpcyBkaXNhYmxlZC5cclxuICAgIC8vIEFsbCBvdGhlciBzdGF0dXNlcyBhcmUgY29uc2lkZXJlZCBlbmFibGVkLlxyXG4gICAgaWYgKHN0YXR1cyA9PT0gJ0RJU0FCTEVEJyAmJiB0aGlzLnRleHRib3hHcm91cC5lbmFibGVkKSB7XHJcbiAgICAgIHRoaXMudGV4dGJveEdyb3VwLmRpc2FibGUoKTtcclxuICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAnRElTQUJMRUQnICYmIHRoaXMudGV4dGJveEdyb3VwLmRpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMudGV4dGJveEdyb3VwLmVuYWJsZSgpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgc3luY0Zvcm1FcnJvcnMoKSB7XHJcbiAgICAvLyBTdGFydCB3aXRoIHRoZSBleGlzdGluZyBmb3JtIG1vZGVsIGVycm9yc1xyXG4gICAgbGV0IGVycm9ycyA9IHRoaXMuZm9ybU1vZGVsLmVycm9ycztcclxuXHJcbiAgICAvLyBBZGQgdGhlIGVycm9ycyBmcm9tIHRoZSB0ZXh0Ym94ZXMgaWYgdGhleSBleGlzdFxyXG4gICAgaWYgKHRoaXMudGV4dGJveEdyb3VwLmNvbnRyb2xzLnRleHRib3guZXJyb3JzKSB7XHJcbiAgICAgIGVycm9ycyA9IHsgLi4uZXJyb3JzLCAuLi50aGlzLnRleHRib3hHcm91cC5jb250cm9scy50ZXh0Ym94LmVycm9ycyB9O1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudGV4dGJveEdyb3VwLmNvbnRyb2xzLnRleHRib3gyLmVycm9ycykge1xyXG4gICAgICBlcnJvcnMgPSB7IC4uLmVycm9ycywgLi4udGhpcy50ZXh0Ym94R3JvdXAuY29udHJvbHMudGV4dGJveDIuZXJyb3JzIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXBkYXRlIHRoZSBmb3JtIG1vZGVsJ3MgZXJyb3JzIHdpdGggdGhlIGNvbWJpbmVkIGVycm9yc1xyXG4gICAgdGhpcy5mb3JtTW9kZWwuc2V0RXJyb3JzKGVycm9ycyk7XHJcblxyXG4gICAgLy8gVXBkYXRlIHRoZSBmb3JtIG1vZGVsJ3MgdG91Y2hlZCBhbmQgZGlydHkgc3RhdHVzIGJhc2VkIG9uIHRoZSB0ZXh0Ym94J3Mgc3RhdHVzLlxyXG4gICAgLy8gU2luY2UgdGhlIHVzZXIgaW50ZXJhY3RzIHdpdGggYSBjb250cm9sIHRoYXQgaXMgaW50ZXJuYWwgdG8gdGhpcyBjb21wb25lbnQsIHRoZVxyXG4gICAgLy8gZm9ybSBtb2RlbCdzIHN0YXR1cyB3b24ndCBiZSB1cGRhdGVkIGF1dG9tYXRpY2FsbHkuXHJcbiAgICBpZiAodGhpcy50ZXh0Ym94R3JvdXAudG91Y2hlZCAmJiAhdGhpcy5mb3JtTW9kZWwudG91Y2hlZCkge1xyXG4gICAgICB0aGlzLmZvcm1Nb2RlbC5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50ZXh0Ym94R3JvdXAuZGlydHkgJiYgIXRoaXMuZm9ybU1vZGVsLmRpcnR5KSB7XHJcbiAgICAgIHRoaXMuZm9ybU1vZGVsLm1hcmtBc0RpcnR5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogXHJcbiAgICogVXBkYXRlcyB0aGUgZGF0ZSBwYXJzaW5nIGZvcm1hdHMgYW5kIHBsYWNlaG9sZGVyIGJhc2VkIG9uIHRoZSB1c2VyJ3MgZGlzcGxheSBwcmVmZXJlbmNlLlxyXG4gICAqIE5PVEU6IFRoaXMgaXMgYXN5bmMgYmVjYXVzZSB3ZSdyZSByZXRyaWV2aW5nIHRoZSB1c2VyJ3MgcHJlZmVyZW5jZXMuIFdlJ3JlIG5vdCBhd2FpdGluZyB0aGUgcmVzdWx0XHJcbiAgICogYmVjYXVzZSB0aGUgb25seSBsb2dpYyB0aGF0IGRlcGVuZHMgb24gdGhpcyBpcyB0aGUgdGV4dCBib3ggZGF0ZSBwYXJzaW5nIGxvZ2ljIGFuZCBwbGFjZWhvbGRlci5cclxuICAgKiBPdXIgZm9ybXMgc2hvdWxkIGFsd2F5cyBiZSBiZWhpbmQgYSBwZW5kaW5nIG92ZXJsYXksIHNvIHRoZSB1c2VyIHdvbid0IGJlIGFibGUgdG8gaW50ZXJhY3Qgd2l0aCB0aGVcclxuICAgKiBmb3JtIHVudGlsIHRoZSB1c2VyIGlzIGxvYWRlZCBhbnl3YXkuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBzZXREYXRlRm9ybWF0cygpIHtcclxuICAgIGNvbnN0IHsgcHJlZmVyZW5jZSB9ID0gYXdhaXQgbGFzdFZhbHVlRnJvbSh0aGlzLnVzZXJQcmVmZXJlbmNlU2VydmljZS5nZXRQcmVmZXJlbmNlcygpKTtcclxuICAgIGNvbnN0IGRhdGVGb3JtYXQgPSBwcmVmZXJlbmNlPy5kYXRlRm9ybWF0O1xyXG4gICAgdGhpcy5wbGFjZWhvbGRlciA9IGRhdGVGb3JtYXQgPz8gdGhpcy5wbGFjZWhvbGRlcjtcclxuICAgIHRoaXMucGFyc2VGb3JtYXRzID0gRGF0ZVRpbWVIZWxwZXIuZ2V0TW9tZW50UGFyc2VGb3JtYXRzKGRhdGVGb3JtYXQpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEZvY3VzZXMgdGhlIGRhdGUgaW5wdXQuICovXHJcbiAgcHJpdmF0ZSBmb2N1c0lucHV0KCkge1xyXG4gICAgdGhpcy5jb250cm9scz8uZm9jdXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U2VsZWN0aW9uTW9kZShtb2RlOiBEYXRlSW5wdXQuU2VsZWN0aW9uTW9kZSkge1xyXG4gICAgdGhpcy5zZWxlY3Rpb25Nb2RlID0gbW9kZTtcclxuICAgIHRoaXMuc2VsZWN0aW9uU3RyYXRlZ3kgPSB0aGlzLnNlbGVjdGlvblN0cmF0ZWdpZXNbbW9kZV07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBtYXggZGF0ZSBmb3IgdGhlIHByaW1hcnkgY2FsZW5kYXIgYW5kIHRoZSBtaW4gZGF0ZSBmb3IgdGhlIHNlY29uZGFyeSBjYWxlbmRhciBiYXNlZFxyXG4gICAqIG9uIHRoZSBjdXJyZW50IHZpZXdzIGluIGVhY2guIFRoaXMgcHJldmVudHMgdGhlIHVzZXIgZnJvbSBtb3ZpbmcgdGhlIGNhbGVuZGFycyBvdXQgb2Ygb3JkZXIuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSB1cGRhdGVDYWxlbmRhck1pbk1heERhdGVzKCkge1xyXG4gICAgLy8gT25seSB1cGRhdGUgdGhlIG1pbi9tYXggZGF0ZXMgd2hlbiB0aGUgdmlldyBtb2RlIGlzICdkYXknLlxyXG4gICAgLy8gV2hlbiBhIGNhbGVuZGFyIGlzIGluIGEgbW9udGggb3IgeWVhciB2aWV3IG1vZGUsIHRoZSB2aWV3IGRhdGVzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHllYXIuXHJcbiAgICAvLyBUaGlzIHdvdWxkIGNhdXNlIHRoZSBkYXRlcyBpbiB0aGUgb3RoZXIgY2FsZW5kYXIgdG8gYmUgdW5zZWxlY3RhYmxlIGlmIHdlIHdlcmUgdG9cclxuICAgIC8vIHVwZGF0ZSB0aGUgbWluL21heCBkYXRlcyBpbiB0aGVzZSBjYXNlcy5cclxuICAgIGlmICh0aGlzLnByaW1hcnlDYWxlbmRhclZpZXc/Lm1vZGUgPT09ICdkYXknKSB7XHJcbiAgICAgIHRoaXMuc2Vjb25kYXJ5Q2FsZW5kYXJNaW5EYXRlID0gbW9tZW50KHRoaXMucHJpbWFyeUNhbGVuZGFyVmlldz8uZGF0ZSkuYWRkKDEsICdtb250aCcpLnN0YXJ0T2YoJ21vbnRoJykudG9EYXRlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zZWNvbmRhcnlDYWxlbmRhclZpZXc/Lm1vZGUgPT09ICdkYXknKSB7XHJcbiAgICAgIHRoaXMucHJpbWFyeUNhbGVuZGFyTWF4RGF0ZSA9IG1vbWVudCh0aGlzLnNlY29uZGFyeUNhbGVuZGFyVmlldz8uZGF0ZSkuc3VidHJhY3QoMSwgJ21vbnRoJykuZW5kT2YoJ21vbnRoJykudG9EYXRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUNhbGVuZGFycyhzZWxlY3Rpb246IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsKSB7XHJcbiAgICB0aGlzLmNhbGVuZGFyU2VsZWN0aW9uID0gc2VsZWN0aW9uO1xyXG4gICAgdGhpcy51cGRhdGVQcmltYXJ5Q2FsZW5kYXIoc2VsZWN0aW9uKTtcclxuICAgIC8vIE9ubHkgc2hpZnQgdGhlIHByaW1hcnkgY2FsZW5kYXIgaWYgd2UncmUgc2hvd2luZyB0aGUgc2Vjb25kYXJ5IGNhbGVuZGFyXHJcbiAgICB0aGlzLnVwZGF0ZVNlY29uZGFyeUNhbGVuZGFyKHNlbGVjdGlvbiwgdGhpcy5zZWxlY3Rpb25TdHJhdGVneS5zaG93U2Vjb25kYXJ5Q2FsZW5kYXIpO1xyXG5cclxuICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJNaW5NYXhEYXRlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVQcmltYXJ5Q2FsZW5kYXIoc2VsZWN0aW9uOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCwgc2hpZnRTZWNvbmRhcnk6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgdGhpcy5wcmltYXJ5Q2FsZW5kYXJWaWV3ID0gdGhpcy5zZWxlY3Rpb25TdHJhdGVneS5nZXRQcmltYXJ5Q2FsZW5kYXJWaWV3KHNlbGVjdGlvbiwgdGhpcy5taW5EYXRlLCB0aGlzLm1heERhdGUsIHRoaXMucHJpbWFyeUNhbGVuZGFyVmlldyk7XHJcblxyXG4gICAgLy8gV2hlbiBlbnRlcmluZyBhIGRhdGUgaW50byB0aGUgZmlyc3QgdGV4dGJveCwgd2UgcmVhbGx5IG9ubHkgd2FudCB0byB1cGRhdGUgdGhlIHByaW1hcnkgY2FsZW5kYXIuXHJcbiAgICAvLyBIb3dldmVyLCBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIG5ldyBkYXRlIGlzIGFmdGVyIHRoZSBzZWNvbmRhcnkgY2FsZW5kYXIncyBkYXRlLiBJbiB0aGlzIGNhc2UsXHJcbiAgICAvLyBXZSB3YW50IHRvIHNoaWZ0IHRoZSBzZWNvbmRhcnkgY2FsZW5kYXIgc28gdGhlIGNhbGVuZGFycyBzdGF5IGluIG9yZGVyLlxyXG4gICAgaWYgKHNoaWZ0U2Vjb25kYXJ5ICYmIHRoaXMuc2Vjb25kYXJ5Q2FsZW5kYXJWaWV3KSB7XHJcbiAgICAgIGlmIChtb21lbnQodGhpcy5wcmltYXJ5Q2FsZW5kYXJWaWV3LmRhdGUpLmlzU2FtZU9yQWZ0ZXIodGhpcy5zZWNvbmRhcnlDYWxlbmRhclZpZXcuZGF0ZSwgJ21vbnRoJykpIHtcclxuICAgICAgICBsZXQgbmV3U2Vjb25kYXJ5RGF0ZSA9IG1vbWVudCh0aGlzLnByaW1hcnlDYWxlbmRhclZpZXcuZGF0ZSkuYWRkKDEsICdtb250aCcpLnRvRGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuc2Vjb25kYXJ5Q2FsZW5kYXJWaWV3ID0geyBtb2RlOiB0aGlzLnNlbGVjdGlvblN0cmF0ZWd5LnNlbGVjdGlvblZpZXdNb2RlLCBkYXRlOiBuZXdTZWNvbmRhcnlEYXRlIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlU2Vjb25kYXJ5Q2FsZW5kYXIoc2VsZWN0aW9uOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCwgc2hpZnRQcmltYXJ5OiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIHRoaXMuc2Vjb25kYXJ5Q2FsZW5kYXJWaWV3ID0gdGhpcy5zZWxlY3Rpb25TdHJhdGVneS5nZXRTZWNvbmRhcnlDYWxlbmRhclZpZXcoc2VsZWN0aW9uLCB0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZSwgdGhpcy5zZWNvbmRhcnlDYWxlbmRhclZpZXcpO1xyXG5cclxuICAgIC8vIFdoZW4gZW50ZXJpbmcgYSBkYXRlIGludG8gdGhlIHNlY29uZCB0ZXh0Ym94LCB3ZSByZWFsbHkgb25seSB3YW50IHRvIHVwZGF0ZSB0aGUgc2Vjb25kYXJ5IGNhbGVuZGFyLlxyXG4gICAgLy8gSG93ZXZlciwgaXQncyBwb3NzaWJsZSB0aGF0IHRoZSBuZXcgZGF0ZSBpcyBiZWZvcmUgdGhlIHByaW1hcnkgY2FsZW5kYXIncyBkYXRlLiBJbiB0aGlzIGNhc2UsXHJcbiAgICAvLyBXZSB3YW50IHRvIHNoaWZ0IHRoZSBwcmltYXJ5IGNhbGVuZGFyIHNvIHRoZSBjYWxlbmRhcnMgc3RheSBpbiBvcmRlci5cclxuICAgIGlmIChzaGlmdFByaW1hcnkgJiYgdGhpcy5wcmltYXJ5Q2FsZW5kYXJWaWV3KSB7XHJcbiAgICAgIGlmIChtb21lbnQodGhpcy5wcmltYXJ5Q2FsZW5kYXJWaWV3LmRhdGUpLmlzU2FtZU9yQWZ0ZXIodGhpcy5zZWNvbmRhcnlDYWxlbmRhclZpZXcuZGF0ZSwgJ21vbnRoJykpIHtcclxuICAgICAgICBsZXQgbmV3UHJpbWFyeURhdGUgPSBtb21lbnQodGhpcy5zZWNvbmRhcnlDYWxlbmRhclZpZXcuZGF0ZSkuc3VidHJhY3QoMSwgJ21vbnRoJykudG9EYXRlKCk7XHJcbiAgICAgICAgdGhpcy5wcmltYXJ5Q2FsZW5kYXJWaWV3ID0geyBtb2RlOiB0aGlzLnNlbGVjdGlvblN0cmF0ZWd5LnNlbGVjdGlvblZpZXdNb2RlLCBkYXRlOiBuZXdQcmltYXJ5RGF0ZSB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVN0ZXBwZXJzKHZhbHVlOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCkge1xyXG4gICAgLy8gRGlzYWJsZSB0aGUgc3RlcHBlcnMgaWYgd2UgZWl0aGVyIGRvbid0IGhhdmUgYSBzZWxlY3Rpb24gb3Igb25seSBoYXZlIG9uZSBkYXRlIGluIHRoZSBzZWxlY3Rpb24uXHJcbiAgICBpZiAoXHJcbiAgICAgICF2YWx1ZSB8fFxyXG4gICAgICAoRGF0ZUlucHV0LmlzU2VsZWN0aW9uUmFuZ2UodmFsdWUpICYmICghdmFsdWUuc3RhcnQgfHwgIXZhbHVlLmVuZCkpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5kaXNhYmxlU3RlcHBlcnMgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kaXNhYmxlU3RlcHBlcnMgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmFsaWRhdGVUZXh0Ym94ZXMoKSB7XHJcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy50ZXh0Ym94R3JvdXAuY29udHJvbHMudGV4dGJveDtcclxuICAgIGNvbnN0IGNvbnRyb2wyID0gdGhpcy50ZXh0Ym94R3JvdXAuY29udHJvbHMudGV4dGJveDI7XHJcblxyXG4gICAgLy8gVGhlIGZpcnN0IHRleHRib3ggc2hvdWxkIG9ubHkgaGF2ZSB0aGUgcmVxdWlyZWQgZXJyb3IgaWYgaXQncyBlbXB0eSBhbmQgdGhlIGRhdGUgaW5wdXQgaXMgcmVxdWlyZWQsXHJcbiAgICAvLyBvciBpZiB0aGUgZGF0ZSBpbnB1dCBpcyBub3QgcmVxdWlyZWQgYW5kIHRoZSBzZWNvbmQgY29udHJvbCBpcyB2aXNpYmxlIGFuZCBoYXMgYSB2YWx1ZSAobWVhbmluZyBhIHBhcnRpYWwgcmFuZ2UpXHJcbiAgICBpZiAoXHJcbiAgICAgICFjb250cm9sLnZhbHVlICYmXHJcbiAgICAgICh0aGlzLnJlcXVpcmVkIHx8IChjb250cm9sMi52YWx1ZSAmJiB0aGlzLnNlbGVjdGlvblN0cmF0ZWd5LnNob3dTZWNvbmRhcnlUZXh0Ym94KSlcclxuICAgICkge1xyXG4gICAgICBjb250cm9sLnNldEVycm9ycyh7IHJlcXVpcmVkOiB0cnVlIH0pO1xyXG4gICAgfVxyXG4gICAgLy8gVGhlIHNhbWUgaWRlYSBhcHBsaWVzIHRvIHRoZSBzZWNvbmQgdGV4dGJveCwgYnV0IG9ubHkgaWYgaXQncyB2aXNpYmxlXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uU3RyYXRlZ3kuc2hvd1NlY29uZGFyeVRleHRib3ggJiZcclxuICAgICAgIWNvbnRyb2wyLnZhbHVlICYmXHJcbiAgICAgICh0aGlzLnJlcXVpcmVkIHx8IGNvbnRyb2wudmFsdWUpXHJcbiAgICApIHtcclxuICAgICAgY29udHJvbDIuc2V0RXJyb3JzKHsgcmVxdWlyZWQ6IHRydWUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbnRyb2wudmFsdWUpIHtcclxuICAgICAgY29uc3QgZXJyb3JzID0gdGhpcy52YWxpZGF0ZURhdGVTdHJpbmcoY29udHJvbC52YWx1ZSk7XHJcbiAgICAgIGlmIChlcnJvcnMpIHtcclxuICAgICAgICBjb250cm9sLnNldEVycm9ycyhlcnJvcnMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbnRyb2wyLnZhbHVlICYmIHRoaXMuc2VsZWN0aW9uU3RyYXRlZ3kuc2hvd1NlY29uZGFyeVRleHRib3gpIHtcclxuICAgICAgY29uc3QgZXJyb3JzID0gdGhpcy52YWxpZGF0ZURhdGVTdHJpbmcoY29udHJvbDIudmFsdWUpO1xyXG4gICAgICBpZiAoZXJyb3JzKSB7XHJcbiAgICAgICAgY29udHJvbDIuc2V0RXJyb3JzKGVycm9ycyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmFsaWRhdGVEYXRlU3RyaW5nKGRhdGU6IHN0cmluZyk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5zZWxlY3Rpb25TdHJhdGVneS5wYXJzZVN0cmluZyhkYXRlLCB0aGlzLnBhcnNlRm9ybWF0cyk7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgLy8gV2UncmUgdXNpbmcgdGhlIHZpZXcgbW9kZSBhcyB0aGUgZ3JhbnVsYXJpdHkuIFdlIGRvbid0IHdhbnQgdG8gaW52YWxpZGF0ZVxyXG4gICAgICAvLyB0aGUgZGF0ZSBpbiB0aGUgY2FzZSB3aGVyZSB5b3UgaGF2ZSBhIG1vbnRoL3F1YXJ0ZXIveWVhciBzZWxlY3RlZCBhbmQgdGhlIG1pblxyXG4gICAgICAvLyBvciBtYXggZGF0ZSBpcyBzb21ld2hlcmUgd2l0aGluIHRoYXQgbW9udGgvcXVhcnRlci95ZWFyLlxyXG4gICAgICBpZiAobW9tZW50KHZhbHVlKS5pc0JlZm9yZSh0aGlzLm1pbkRhdGUsIHRoaXMuc2VsZWN0aW9uU3RyYXRlZ3kuc2VsZWN0aW9uVmlld01vZGUpKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgbWluRGF0ZTogeyBtaW5WYWx1ZTogdGhpcy5taW5EYXRlIH0gfTtcclxuICAgICAgfSBlbHNlIGlmIChtb21lbnQodmFsdWUpLmlzQWZ0ZXIodGhpcy5tYXhEYXRlLCB0aGlzLnNlbGVjdGlvblN0cmF0ZWd5LnNlbGVjdGlvblZpZXdNb2RlKSkge1xyXG4gICAgICAgIHJldHVybiB7IG1heERhdGU6IHsgbWF4VmFsdWU6IHRoaXMubWF4RGF0ZSB9IH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcbn1cclxuIiwiPGxhYmVsICpuZ0lmPVwibGFiZWxcIj5cclxuICA8c3Bhbj57e2xhYmVsIHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgPHNwYW4gKm5nSWY9XCJ2YWxpZGF0aW9uRXJyb3JzLmxlbmd0aCA+IDAgJiYgZm9ybU1vZGVsLnRvdWNoZWQgJiYgZm9ybU1vZGVsLmludmFsaWRcIj4mbmJzcDt7e3ZhbGlkYXRpb25FcnJvcnN9fTwvc3Bhbj5cclxuICA8ZWMtaGVscC1wb3BvdmVyIGlkPVwie3tpZH19X2hlbHBQb3BvdmVyXCJcclxuICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGVscFBvcG92ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWlubGluZS1ibG9jayBteS1uMyBteC1uMVwiXHJcbiAgICAgICAgICAgICAgICAgICB0ZXh0PVwie3toZWxwUG9wb3ZlciB8IHRyYW5zbGF0ZX19XCJcclxuICAgICAgICAgICAgICAgICAgIGNvbnRlbnRQb3NpdGlvbj1cInt7aGVscFBvcG92ZXJQb3NpdGlvbn19XCI+XHJcbiAgPC9lYy1oZWxwLXBvcG92ZXI+XHJcbjwvbGFiZWw+XHJcblxyXG48ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXHJcbiAgICAgW2VjS2V5Ym9hcmROYXZDb250YWluZXJdPVwiaXNDYWxlbmRhck9wZW5cIlxyXG4gICAgICNjb250cm9scz1cImVjS2V5Ym9hcmROYXZDb250YWluZXJcIlxyXG4gICAgIChmb2N1c091dEVuZCk9XCJvbkNvbnRyb2xzRm9jdXNPdXRFbmQoKVwiPlxyXG4gIDxlYy1mb3JtLWNvbnRyb2wgaWQ9XCJ7e2lkfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcclxuICAgICAgICAgICAgICAgICAgIFthdXRvZm9jdXNdPVwiYXV0b2ZvY3VzXCJcclxuICAgICAgICAgICAgICAgICAgIFtwZW5kaW5nXT1cInBlbmRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcclxuICAgICAgICAgICAgICAgICAgIChhY3Rpb25DbGlja2VkKT1cImlzQ2FsZW5kYXJPcGVuID0gIWlzQ2FsZW5kYXJPcGVuXCJcclxuICAgICAgICAgICAgICAgICAgIFtzaG93Q2xlYXJdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgYWN0aW9uSWNvbj1cImljb24tZGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICBjZGtPdmVybGF5T3JpZ2luXHJcbiAgICAgICAgICAgICAgICAgICAjb3ZlcmxheU9yaWdpbj1cImNka092ZXJsYXlPcmlnaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4LWdyb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDJyZW07XCI+XHJcbiAgICA8aW5wdXQgaWQ9XCJ7e2lkfX1faW5wdXRcIlxyXG4gICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7cGxhY2Vob2xkZXJ9fVwiXHJcbiAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cInRleHRib3hHcm91cC5nZXQoJ3RleHRib3gnKVwiXHJcbiAgICAgICAgICAgKGJsdXIpPVwib25UZXh0Ym94Qmx1cigpXCI+XHJcbiAgPC9lYy1mb3JtLWNvbnRyb2w+XHJcblxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3Rpb25TdHJhdGVneS5zaG93U2Vjb25kYXJ5VGV4dGJveFwiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJmbGV4LXNocmluayBteC0xXCI+Jm5kYXNoOzwvc3Bhbj5cclxuICAgIDxlYy1mb3JtLWNvbnRyb2wgaWQ9XCJ7e2lkfX1fY29udHJvbDJcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbYXV0b2ZvY3VzXT1cImF1dG9mb2N1c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtwZW5kaW5nXT1cInBlbmRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAoYWN0aW9uQ2xpY2tlZCk9XCJpc0NhbGVuZGFyT3BlbiA9ICFpc0NhbGVuZGFyT3BlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtzaG93Q2xlYXJdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICBhY3Rpb25JY29uPVwiaWNvbi1kYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4LWdyb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImhlaWdodDogMnJlbTtcIj5cclxuICAgICAgPGlucHV0IGlkPVwie3tpZH19X2lucHV0MlwiXHJcbiAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7cGxhY2Vob2xkZXJ9fVwiXHJcbiAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwidGV4dGJveEdyb3VwLmdldCgndGV4dGJveDInKVwiXHJcbiAgICAgICAgICAgICAoYmx1cik9XCJvblRleHRib3gyQmx1cigpXCI+XHJcbiAgICA8L2VjLWZvcm0tY29udHJvbD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPGRpdiAqbmdJZj1cImVuYWJsZVN0ZXBwZXJzXCJcclxuICAgICAgIGNsYXNzPVwiY29udHJvbC1ncm91cCBtbC0yXCI+XHJcbiAgICA8ZWMtYnV0dG9uIGlkPVwie3tpZH19X3ByZXZpb3VzU2VsZWN0aW9uXCJcclxuICAgICAgICAgICAgICAgdHlwZT1cInNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgIGljb249XCJpY29uLWFuZ2xlLWRvd24gcm90YXRlLTkwXCJcclxuICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwicHJldmlvdXNTZWxlY3Rpb24oKVwiXHJcbiAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0NhbGVuZGFyT3BlbiB8fCBkaXNhYmxlU3RlcHBlcnMgfHwgZm9ybU1vZGVsPy5kaXNhYmxlZFwiPlxyXG4gICAgPC9lYy1idXR0b24+XHJcbiAgICA8ZWMtYnV0dG9uIGlkPVwie3tpZH19X25leHRTZWxlY3Rpb25cIlxyXG4gICAgICAgICAgICAgICB0eXBlPVwic2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgICAgaWNvbj1cImljb24tYW5nbGUtZG93biByb3RhdGUtMjcwXCJcclxuICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwibmV4dFNlbGVjdGlvbigpXCJcclxuICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzQ2FsZW5kYXJPcGVuIHx8IGRpc2FibGVTdGVwcGVycyB8fCBmb3JtTW9kZWw/LmRpc2FibGVkXCI+XHJcbiAgICA8L2VjLWJ1dHRvbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGVjLWJ1dHRvbiAqbmdJZj1cInF1aWNrU2VsZWN0RGF0ZVwiXHJcbiAgICAgICAgICAgICBpZD1cInt7aWR9fV9xdWlja1NlbGVjdFwiXHJcbiAgICAgICAgICAgICBpY29uPVwiaWNvbi1kYXlcIlxyXG4gICAgICAgICAgICAgdHlwZT1cInNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICB0aXRsZT1cInt7J0RhdGVJbnB1dF9MYXRlc3REYXRhQXZhaWxhYmxlVGl0bGUnIHwgdHJhbnNsYXRlfX1cIlxyXG4gICAgICAgICAgICAgKGNsaWNrZWQpPVwiZ29Ub1F1aWNrU2VsZWN0RGF0ZSgpXCJcclxuICAgICAgICAgICAgIGNsYXNzPVwibWwtMlwiPlxyXG4gIDwvZWMtYnV0dG9uPlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSBjZGtDb25uZWN0ZWRPdmVybGF5XHJcbiAgICAgICAgICAgICAjb3ZlcmxheT1cImNka0Nvbm5lY3RlZE92ZXJsYXlcIlxyXG4gICAgICAgICAgICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW5dPVwib3ZlcmxheU9yaWdpblwiXHJcbiAgICAgICAgICAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW5dPVwiaXNDYWxlbmRhck9wZW5cIlxyXG4gICAgICAgICAgICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlTY3JvbGxTdHJhdGVneV09XCJvdmVybGF5U2Nyb2xsU3RyYXRlZ3lcIlxyXG4gICAgICAgICAgICAgY2RrQ29ubmVjdGVkT3ZlcmxheVBhbmVsQ2xhc3M9XCJteS0xXCJcclxuICAgICAgICAgICAgIChvdmVybGF5T3V0c2lkZUNsaWNrKT1cIm9uT3ZlcmxheU91dHNpZGVDbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgICAgIChkZXRhY2gpPVwiaXNDYWxlbmRhck9wZW4gPSBmYWxzZVwiPlxyXG4gIDxhcnRpY2xlIGlkPVwie3tpZH19X2RhdGVQaWNrZXJcIlxyXG4gICAgICAgICAgIGNsYXNzPVwiY2FyZCBkLWZsZXhcIlxyXG4gICAgICAgICAgIFtlY0tleWJvYXJkTmF2Q29udGFpbmVyXT1cImlzQ2FsZW5kYXJPcGVuXCJcclxuICAgICAgICAgICAjY2FsZW5kYXI9XCJlY0tleWJvYXJkTmF2Q29udGFpbmVyXCJcclxuICAgICAgICAgICAoZm9jdXNPdXRTdGFydCk9XCJvbkNhbGVuZGFyRm9jdXNPdXRTdGFydCgpXCJcclxuICAgICAgICAgICAoZm9jdXNPdXRFbmQpPVwib25DYWxlbmRhckZvY3VzT3V0RW5kKClcIj5cclxuICAgIDx1bCAqbmdJZj1cInNlbGVjdGlvbk1vZGVPcHRpb25zLmxlbmd0aCA+IDFcIlxyXG4gICAgICAgIGNsYXNzPVwic2VsZWN0aW9uLW1vZGUtbWVudSBib3JkZXItcmlnaHQgcC0xXCI+XHJcbiAgICAgIDxsaSAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHNlbGVjdGlvbk1vZGVPcHRpb25zXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBpZD1cInt7aWR9fV9zZWxlY3Rpb25Nb2RlX3t7b3B0aW9ufX1cIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWJvZHktMVwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuaXMtc2VsZWN0ZWRdPVwib3B0aW9uID09PSBzZWxlY3Rpb25Nb2RlXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblNlbGVjdGlvbk1vZGVDaGFuZ2Uob3B0aW9uKVwiPlxyXG4gICAgICAgICAge3snRGF0ZUlucHV0U2VsZWN0aW9uTW9kZV8nICsgb3B0aW9uIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9saT5cclxuICAgIDwvdWw+XHJcblxyXG4gICAgPGRpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgIDxlYy1jYWxlbmRhciBpZD1cInt7aWR9fV9jYWxlbmRhclwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFt2aWV3XT1cInByaW1hcnlDYWxlbmRhclZpZXdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAodmlld0NoYW5nZSk9XCJvblByaW1hcnlDYWxlbmRhclZpZXdDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3Rpb25Nb2RlXT1cInNlbGVjdGlvbk1vZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbc2VsZWN0aW9uXT1cImNhbGVuZGFyU2VsZWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgKGRhdGVTZWxlY3RlZCk9XCJvbkNhbGVuZGFyRGF0ZVNlbGVjdGVkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbbWluRGF0ZV09XCJtaW5EYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgW21heERhdGVdPVwic2VsZWN0aW9uU3RyYXRlZ3kuc2hvd1NlY29uZGFyeUNhbGVuZGFyID8gcHJpbWFyeUNhbGVuZGFyTWF4RGF0ZSA6IG1heERhdGVcIj5cclxuICAgICAgICA8L2VjLWNhbGVuZGFyPlxyXG5cclxuICAgICAgICA8ZWMtY2FsZW5kYXIgKm5nSWY9XCJzZWxlY3Rpb25TdHJhdGVneS5zaG93U2Vjb25kYXJ5Q2FsZW5kYXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICBpZD1cInt7aWR9fV9zZWNvbmRhcnlDYWxlbmRhclwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFt2aWV3XT1cInNlY29uZGFyeUNhbGVuZGFyVmlld1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICh2aWV3Q2hhbmdlKT1cIm9uU2Vjb25kYXJ5Q2FsZW5kYXJWaWV3Q2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbc2VsZWN0aW9uTW9kZV09XCJzZWxlY3Rpb25Nb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGlvbl09XCJjYWxlbmRhclNlbGVjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgIChkYXRlU2VsZWN0ZWQpPVwib25DYWxlbmRhckRhdGVTZWxlY3RlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgW21pbkRhdGVdPVwic2Vjb25kYXJ5Q2FsZW5kYXJNaW5EYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgW21heERhdGVdPVwibWF4RGF0ZVwiPlxyXG4gICAgICAgIDwvZWMtY2FsZW5kYXI+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGZvb3RlciAqbmdJZj1cInNlbGVjdGlvblN0cmF0ZWd5LnNlbGVjdGlvblZpZXdNb2RlID09PSAnZGF5J1wiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJweC0yIG15LTIgZC1mbGV4XCI+XHJcbiAgICAgICAgPGJ1dHRvbiBpZD1cInt7aWR9fV90b2RheV9idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgZWNMaW5rQnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1sLWF1dG8gZC1pbmxpbmUtYmxvY2tcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9Ub2RheSgpXCJcclxuICAgICAgICAgICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAxLjc1cmVtO1wiPlxyXG4gICAgICAgICAge3snVG9kYXknIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9mb290ZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2FydGljbGU+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
465
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvY29udHJvbHMvZGF0ZS1pbnB1dC9kYXRlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9kYXRlLWlucHV0L2RhdGUtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBYyxXQUFXLEVBQUUsS0FBSyxFQUFvQyxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkgsT0FBTyxFQUFFLFdBQVcsRUFBcUIsU0FBUyxFQUFvQixNQUFNLGdCQUFnQixDQUFDO0FBQzdGLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBSzdELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRL0MsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGVBQWU7SUFxRXJELFlBQ1ksd0JBQWtELEVBQ2xELGVBQWdDLEVBQ2xDLHFCQUE0QyxFQUM1QyxFQUFjLEVBQ2QsY0FBdUIsRUFDdkIsbUJBQWtEO1FBRTFELEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxlQUFlLENBQUMsQ0FBQztRQVB2Qyw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBQ2xELG9CQUFlLEdBQWYsZUFBZSxD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dUNpQixRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVU7Z0JBQ0UsUUFBUTtzQkFBOUIsU0FBUzt1QkFBQyxVQUFVO2dCQUdDLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka0Nvbm5lY3RlZE92ZXJsYXksIE92ZXJsYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtQ29udHJvbFN0YXR1cywgRm9ybUdyb3VwLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IGxhc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBLZXlib2FyZE5hdkNvbnRhaW5lckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL3B1YmxpYy1hcGknO1xyXG5pbXBvcnQgeyBEYXRlVGltZUhlbHBlciB9IGZyb20gJy4uLy4uL2NvcmUvZGF0ZS10aW1lLWhlbHBlcic7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25NZXNzYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvdmFsaWRhdGlvbi1tZXNzYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXBIZWxwZXIgfSBmcm9tICcuLi8uLi9zaGFyZWQvZm9ybS1ncm91cC5oZWxwZXInO1xyXG5pbXBvcnQgeyBVc2VyUHJlZmVyZW5jZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvdXNlci1wcmVmZXJlbmNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDYWxlbmRhciB9IGZyb20gJy4uL2NhbGVuZGFyL2NhbGVuZGFyLnR5cGVzJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2xCYXNlIH0gZnJvbSAnLi4vZm9ybS1jb250cm9sLWJhc2UnO1xyXG5pbXBvcnQgeyBEYXRlSW5wdXRTZWxlY3Rpb25TdHJhdGVneUJhc2UgfSBmcm9tICcuL2RhdGUtaW5wdXQtc2VsZWN0aW9uLXN0cmF0ZWdpZXMvZGF0ZS1pbnB1dC1zZWxlY3Rpb24tc3RyYXRlZ3ktYmFzZSc7XHJcbmltcG9ydCB7IERhdGVJbnB1dCB9IGZyb20gJy4vZGF0ZS1pbnB1dC50eXBlcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2VjLWRhdGUtaW5wdXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlLWlucHV0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kYXRlLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbRGF0ZUlucHV0LlNlbGVjdGlvblN0cmF0ZWdpZXNdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRlSW5wdXRDb21wb25lbnQgZXh0ZW5kcyBGb3JtQ29udHJvbEJhc2UgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXHJcbiAgQElucHV0KCkgcHVibGljIGlkOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqIFRoZSBmb3JtIGNvbnRyb2wgcHJvdmlkZWQgYnkgdGhlIGhvc3RpbmcgZm9ybS4gKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZm9ybU1vZGVsOiBEYXRlSW5wdXQuRm9ybU1vZGVsID0gbmV3IEZvcm1Db250cm9sKG51bGwpO1xyXG5cclxuICBASW5wdXQoKSBwdWJsaWMgbWluRGF0ZTogRGF0ZSA9IERhdGVUaW1lSGVscGVyLm1pbkRhdGVQaWNrZXJEYXRlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBtYXhEYXRlOiBEYXRlID0gRGF0ZVRpbWVIZWxwZXIubWF4RGF0ZVBpY2tlckRhdGU7XHJcblxyXG4gIC8qKiBUaGUgaW5pdGlhbCBzZWxlY3Rpb24gbW9kZSBmb3IgdGhlIGNhbGVuZGFyLiBEZWZhdWx0cyB0byBkYXkgaWYgbm90IHByb3ZpZGVkICovXHJcbiAgQElucHV0KCkgc2VsZWN0aW9uTW9kZTogRGF0ZUlucHV0LlNlbGVjdGlvbk1vZGUgPSAnZGF5JztcclxuXHJcbiAgLyoqIFRoZSBhdmFpbGFibGUgc2VsZWN0aW9uIG1vZGVzIGZvciB0aGUgY2FsZW5kYXIuIERlZmF1bHRzIHRvIG9ubHkgdGhlIGluaXRpYWwgc2VsZWN0aW9uIG1vZGUgaWYgbm90IHByb3ZpZGVkLiAgKi9cclxuICBASW5wdXQoKSBzZWxlY3Rpb25Nb2RlT3B0aW9uczogRGF0ZUlucHV0LlNlbGVjdGlvbk1vZGVbXSA9IFsnZGF5J107XHJcblxyXG4gIC8qKiBcclxuICAgKiBXaGVuIGEgZGF0ZSBpcyBwcm92aWRlZCwgZW5hYmxlcyB0aGUgJ3F1aWNrIHNlbGVjdCcgYnV0dG9uLlxyXG4gICAqIENsaWNraW5nIHRoZSBidXR0b24gd2lsbCBzaGlmdCB0aGUgc2VsZWN0ZWQgZGF0ZSByYW5nZSB0byB0aGUgcHJvdmlkZWQgZGF0ZS5cclxuICAgKi9cclxuICBASW5wdXQoKSBxdWlja1NlbGVjdERhdGU/OiBEYXRlO1xyXG5cclxuICAvKiogRW5hYmxlcyB0aGUgbmV4dC9wcmV2aW91cyBzZWxlY3Rpb24gYnV0dG9ucy4gKi9cclxuICBASW5wdXQoKSBlbmFibGVTdGVwcGVyczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKiogVGhlIGZvcm0gZ3JvdXAgZm9yIHRoZSBpbnRlcm5hbCB0ZXh0Ym94ZXMuIFRleHRib3gyIGlzIG9ubHkgdXNlZCBmb3IgcmFuZ2VzLiAqL1xyXG4gIHB1YmxpYyB0ZXh0Ym94R3JvdXA6IERhdGVJbnB1dC5UZXh0Ym94R3JvdXAgPSBuZXcgRm9ybUdyb3VwKHtcclxuICAgIHRleHRib3g6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsKSxcclxuICAgIHRleHRib3gyOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbClcclxuICB9KTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGN1cnJlbnQgY2FsZW5kYXIgc2VsZWN0aW9uLlxyXG4gICAqIFVwZGF0ZWQgd2hlbiB0aGUgdXNlciBjbGlja3Mgb24gYSBjYWxlbmRhciBpdGVtIG9yIHdoZW4gdGhlIGRhdGUgZW50ZXJlZCBpbnRvIHRoZSB0ZXh0Ym94IGlzIHBhcnNlZC5cclxuICAgKi9cclxuICBwdWJsaWMgY2FsZW5kYXJTZWxlY3Rpb246IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgLyoqIENvbnRyb2xzIHdoZXRoZXIgdGhlIGNhbGVuZGFyIG92ZXJsYXkgaXMgb3BlbiBvciBub3QuICovXHJcbiAgcHVibGljIGlzQ2FsZW5kYXJPcGVuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBQbGFjZWhvbGRlciBmb3IgdGhlIHRleHRib3guIFVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgdXNlcidzIGRhdGUgZGlzcGxheSBwcmVmZXJlbmNlLiAqL1xyXG4gIHB1YmxpYyBwbGFjZWhvbGRlcjogc3RyaW5nID0gJ01NL0REL1lZWVknO1xyXG5cclxuICAvKiogT3ZlcmxheSBzY3JvbGwgc3RyYXRlZ3kgZm9yIHRoZSBjYWxlbmRhciBvdmVybGF5LiBDbG9zZXMgdGhlIGNhbGVuZGFyIG9uIHNjcm9sbC4gKi9cclxuICBwdWJsaWMgb3ZlcmxheVNjcm9sbFN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5U2VydmljZS5zY3JvbGxTdHJhdGVnaWVzLmNsb3NlKCk7XHJcblxyXG4gIHB1YmxpYyBwcmltYXJ5Q2FsZW5kYXJWaWV3OiBDYWxlbmRhci5WaWV3ID0geyBtb2RlOiAnZGF5JywgZGF0ZTogbmV3IERhdGUoKSB9O1xyXG4gIHB1YmxpYyBzZWNvbmRhcnlDYWxlbmRhclZpZXc6IENhbGVuZGFyLlZpZXcgPSB7IG1vZGU6ICdkYXknLCBkYXRlOiBuZXcgRGF0ZSgpIH07XHJcblxyXG4gIHB1YmxpYyBwcmltYXJ5Q2FsZW5kYXJNYXhEYXRlOiBEYXRlID0gRGF0ZVRpbWVIZWxwZXIubWF4RGF0ZVBpY2tlckRhdGU7XHJcbiAgcHVibGljIHNlY29uZGFyeUNhbGVuZGFyTWluRGF0ZTogRGF0ZSA9IERhdGVUaW1lSGVscGVyLm1pbkRhdGVQaWNrZXJEYXRlO1xyXG5cclxuICBwdWJsaWMgZGlzYWJsZVN0ZXBwZXJzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHB1YmxpYyBzZWxlY3Rpb25TdHJhdGVneSE6IERhdGVJbnB1dFNlbGVjdGlvblN0cmF0ZWd5QmFzZTtcclxuXHJcbiAgLyoqIFxyXG4gICAqIERhdGUgcGFyc2luZyBmb3JtYXRzIGZvciB1c2VyLWVudGVyZWQgZGF0ZXMuIERlZmF1bHRzIHRvIG1vbnRoLWZpcnN0IGZvcm1hdHMsIGJ1dCBpcyB1cGRhdGVkIGluIG9uSW5pdFxyXG4gICAqIHRvIHVzZSB0aGUgdXNlcidzIHByZWZlcnJlZCBkYXRlIGZvcm1hdC5cclxuICAgKi9cclxuICBwcml2YXRlIHBhcnNlRm9ybWF0czogc3RyaW5nW10gPSBEYXRlVGltZUhlbHBlci5nZXRNb21lbnRQYXJzZUZvcm1hdHMoKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnY2FsZW5kYXInKSBjYWxlbmRhcj86IEtleWJvYXJkTmF2Q29udGFpbmVyRGlyZWN0aXZlO1xyXG4gIEBWaWV3Q2hpbGQoJ2NvbnRyb2xzJykgY29udHJvbHM/OiBLZXlib2FyZE5hdkNvbnRhaW5lckRpcmVjdGl2ZTtcclxuXHJcbiAgLyoqIFJlZmVyZW5jZSB0byB0aGUgb3ZlcmxheSBkaXJlY3RpdmUgKHNlZSB0ZW1wbGF0ZSkuIFVzZWQgdG8gdXBkYXRlIHRoZSBvdmVybGF5IHBvc2l0aW9uIG9uIHZhbGlkYXRpb24gY2hhbmdlcy4gKi9cclxuICBAVmlld0NoaWxkKCdvdmVybGF5Jykgb3ZlcmxheT86IENka0Nvbm5lY3RlZE92ZXJsYXk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJvdGVjdGVkIHZhbGlkYXRpb25NZXNzYWdlU2VydmljZTogVmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJvdGVjdGVkIGZvcm1Hcm91cEhlbHBlcjogRm9ybUdyb3VwSGVscGVyLFxyXG4gICAgcHJpdmF0ZSB1c2VyUHJlZmVyZW5jZVNlcnZpY2U6IFVzZXJQcmVmZXJlbmNlU2VydmljZSxcclxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIG92ZXJsYXlTZXJ2aWNlOiBPdmVybGF5LFxyXG4gICAgcHJpdmF0ZSBzZWxlY3Rpb25TdHJhdGVnaWVzOiBEYXRlSW5wdXQuU2VsZWN0aW9uU3RyYXRlZ2llc1xyXG4gICkge1xyXG4gICAgc3VwZXIodmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlLCBmb3JtR3JvdXBIZWxwZXIpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKGNoYW5nZXMuc2VsZWN0aW9uTW9kZSAmJiAhY2hhbmdlcy5zZWxlY3Rpb25Nb2RlLmlzRmlyc3RDaGFuZ2UoKSkge1xyXG4gICAgICB0aGlzLm9uU2VsZWN0aW9uTW9kZUNoYW5nZSh0aGlzLnNlbGVjdGlvbk1vZGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICAvLyBTZXR1cFxyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgIHRoaXMuc2V0RGF0ZUZvcm1hdHMoKTtcclxuICAgIHRoaXMuc2V0U2VsZWN0aW9uTW9kZSh0aGlzLnNlbGVjdGlvbk1vZGUpO1xyXG5cclxuICAgIC8vIFN1YnNjcmlwdGlvbnNcclxuICAgIHRoaXMub25Gb3JtTW9kZWxTdGF0dXNDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLm9uRm9ybU1vZGVsVmFsdWVDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLm9uVGV4dGJveFZhbHVlQ2hhbmdlcygpO1xyXG5cclxuICAgIC8vIFN5bmMgdGhlIGluaXRpYWwgZGlzYWJsZWQgc3RhdHVzIGFuZCB2YWx1ZSBvZiB0aGUgdGV4dGJveFxyXG4gICAgdGhpcy5zeW5jVGV4dGJveENvbnRyb2xEaXNhYmxlZFN0YXR1cyh0aGlzLmZvcm1Nb2RlbC5zdGF0dXMpO1xyXG4gICAgY29uc3QgaW5pdGlhbERpc3BsYXlWYWx1ZSA9IHRoaXMuc2VsZWN0aW9uU3RyYXRlZ3kuZm9ybWF0U2VsZWN0aW9uKHRoaXMuZm9ybU1vZGVsLnZhbHVlKTtcclxuICAgIHRoaXMudGV4dGJveEdyb3VwLnBhdGNoVmFsdWUoaW5pdGlhbERpc3BsYXlWYWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG5cclxuICAgIC8vIFVwZGF0ZSB0aGUgY2FsZW5kYXIgc2VsZWN0aW9uIGFuZCB2aWV3IGJhc2VkIG9uIHRoZSBpbml0aWFsIGZvcm0gbW9kZWwgdmFsdWVcclxuICAgIHRoaXMuY2FsZW5kYXJTZWxlY3Rpb24gPSB0aGlzLmZvcm1Nb2RlbC52YWx1ZTtcclxuICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJzKHRoaXMuY2FsZW5kYXJTZWxlY3Rpb24pO1xyXG4gICAgdGhpcy51cGRhdGVTdGVwcGVycyh0aGlzLmNhbGVuZGFyU2VsZWN0aW9uKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMuY2FsZW5kYXJTZWxlY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgLyoqIEZvY3VzZXMgdGhlIGlucHV0IHdoZW5ldmVyIHRoZSBjYWxlbmRhciBpcyBzaGlmdC10YWJiZWQgb3V0IG9mLiAqL1xyXG4gIHB1YmxpYyBvbkNhbGVuZGFyRm9jdXNPdXRTdGFydCgpIHtcclxuICAgIHRoaXMuZm9jdXNJbnB1dCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqIENsb3NlcyB0aGUgY2FsZW5kYXIgYW5kIGZvY3VzZXMgdGhlIGlucHV0IHdoZW5ldmVyIHRoZSBjYWxlbmRhciBpcyB0YWJiZWQgb3V0IG9mLiAqL1xyXG4gIHB1YmxpYyBvbkNhbGVuZGFyRm9jdXNPdXRFbmQoKSB7XHJcbiAgICB0aGlzLmlzQ2FsZW5kYXJPcGVuID0gZmFsc2U7XHJcbiAgICB0aGlzLmZvY3VzSW5wdXQoKTtcclxuICB9XHJcblxyXG4gIC8qKiBDbG9zZXMgdGhlIGNhbGVuZGFyIGlmIHRoZSB1c2VyIGNsaWNrcyBvdXRzaWRlIG9mIHRoZSBjYWxlbmRhciBhbmQgZGF0ZSBpbnB1dC4gKi9cclxuICBwdWJsaWMgb25PdmVybGF5T3V0c2lkZUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICAvLyBEbyBub3QgY2xvc2UgdGhlIGNhbGVuZGFyIGlmIHRoZSBjbGljayB3YXMgd2l0aGluIHRoZSBkYXRlIGlucHV0IG9yIGFjdGlvbiBidXR0b25cclxuICAgIGNvbnN0IHJlY3QgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICBjb25zdCBjbGlja2VkT3V0c2lkZUNvbnRyb2wgPSBldmVudC5jbGllbnRZIDwgcmVjdC50b3AgfHxcclxuICAgICAgZXZlbnQuY2xpZW50WSA+IHJlY3QuYm90dG9tIHx8XHJcbiAgICAgIGV2ZW50LmNsaWVudFggPCByZWN0LmxlZnQgfHxcclxuICAgICAgZXZlbnQuY2xpZW50WCA+IHJlY3QucmlnaHQ7XHJcbiAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHVzZXIgaGl0IGVudGVyIG9uIHRoZSBhY3Rpb24gYnV0dG9uIGluc3RlYWQgb2YgY2xpY2tpbmcgd2l0aCB0aGUgbW91c2UuXHJcbiAgICAvLyBJbiB0aGlzIGNhc2UgdGhlIFwiY2xpY2tcIiBldmVudCB3aWxsIGJlIG91dHNpZGUgb2YgdGhlIGNvbXBvbmVudCBiZWNhdXNlIHRoZSBjbGllbnR4IGFuZCB5IGFyZSAwLFxyXG4gICAgLy8gYnV0IHdlIGRvbid0IHdhbnQgdG8gY2xvc2UgaW4gdGhpcyBjYXNlIGJlY2F1c2UgYnV0dG9uIGNsaWNrcyB0cmlnZ2VyIGNhbGVuZGFyIG9wZW4vY2xvc2Ugc2VwYXJhdGVseS5cclxuICAgIGNvbnN0IHRhcmdldElkID0gKDxIVE1MRWxlbWVudD5ldmVudC50YXJnZXQpLmlkO1xyXG4gICAgY29uc3QgaXNBY3Rpb25DbGljayA9IHRhcmdldElkID09PSBgJHt0aGlzLmlkfV9hY3Rpb25gIHx8IHRhcmdldElkID09PSBgJHt0aGlzLmlkfV9jb250cm9sMl9hY3Rpb25gO1xyXG5cclxuICAgIGlmICghaXNBY3Rpb25DbGljayAmJiBjbGlja2VkT3V0c2lkZUNvbnRyb2wpIHtcclxuICAgICAgdGhpcy5pc0NhbGVuZGFyT3BlbiA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIElmIHRoZSB1c2VyIHRhYnMgb3V0IG9mIHRoZSBmb3JtIGNvbnRyb2wncyBhY3Rpb24gYnV0dG9uIGFuZCB0aGUgY2FsZW5kYXIgaXMgb3BlbiwgZm9jdXMgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGNhbGVuZGFyIG92ZXJsYXkgKi9cclxuICBwdWJsaWMgb25Db250cm9sc0ZvY3VzT3V0RW5kKCkge1xyXG4gICAgaWYgKHRoaXMuaXNDYWxlbmRhck9wZW4pIHtcclxuICAgICAgdGhpcy5jYWxlbmRhcj8uZm9jdXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblRleHRib3hCbHVyKCkge1xyXG4gICAgLy8gV2Ugd2FudCB0byBwcmV2ZW50IHRoZSBmaXhlZCBkYXRlIHJhbmdlIG1vZGVzIGZyb20gcmUtYXV0b2NvbXBsZXRpbmcgdGhlIGZpcnN0IHRleHRib3ggd2hlbiBpdCBpcyBleHBsaWNpdGx5IGNsZWFyZWQuXHJcbiAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gRGF0ZUlucHV0LmlzU2VsZWN0aW9uUmFuZ2UodGhpcy5mb3JtTW9kZWwudmFsdWUpID8gdGhpcy5mb3JtTW9kZWwudmFsdWUuc3RhcnQgOiB0aGlzLmZvcm1Nb2RlbC52YWx1ZTtcclxuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMudGV4dGJveEdyb3VwLnZhbHVlLnRleHRib3g7XHJcbiAgICBjb25zdCBjbGVhcmVkID0gISFwcmV2aW91c1ZhbHVlICYmICFjdXJyZW50VmFsdWU7XHJcbiAgICBjb25zdCBvcHRpb25zOiBEYXRlSW5wdXQuUGFyc2luZ09wdGlvbnMgPSB7IHByZXZlbnRBdXRvQ29tcGxldGU6IGNsZWFyZWQgfTtcclxuXHJcbiAgICAvLyBQYXJzZSB0aGUgdGV4dGJveCB2YWx1ZXMgaW50byBhIHNlbGVjdGlvbiBhbmQgdXBkYXRlIHRoZSBmb3JtIG1vZGVsXHJcbiAgICBjb25zdCBwYXJzZWRTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvblN0cmF0ZWd5LnBhcnNlVGV4dGJveFZhbHVlcyh0aGlzLnRleHRib3hHcm91cC52YWx1ZSwgdGhpcy5wYXJzZUZvcm1hdHMsIG9wdGlvbnMpO1xyXG4gICAgdGhpcy51cGRhdGVGb3JtTW9kZWwocGFyc2VkU2VsZWN0aW9uKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblRleHRib3gyQmx1cigpIHtcclxuICAgIC8vIFdlIHdhbnQgdG8gcHJldmVudCB0aGUgZml4ZWQgZGF0ZSByYW5nZSBtb2RlcyBmcm9tIHJlLWF1dG9jb21wbGV0aW5nIHRoZSBzZWNvbmQgdGV4dGJveCB3aGVuIGl0IGlzIGV4cGxpY2l0bHkgY2xlYXJlZC5cclxuICAgIGNvbnN0IHByZXZpb3VzVmFsdWUgPSBEYXRlSW5wdXQuaXNTZWxlY3Rpb25SYW5nZSh0aGlzLmZvcm1Nb2RlbC52YWx1ZSkgPyB0aGlzLmZvcm1Nb2RlbC52YWx1ZS5lbmQgOiBudWxsO1xyXG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy50ZXh0Ym94R3JvdXAudmFsdWUudGV4dGJveDI7XHJcbiAgICBjb25zdCBjbGVhcmVkID0gISFwcmV2aW91c1ZhbHVlICYmICFjdXJyZW50VmFsdWU7XHJcbiAgICBjb25zdCBvcHRpb25zOiBEYXRlSW5wdXQuUGFyc2luZ09wdGlvbnMgPSB7IHBhcnNlRnJvbUVuZDogdHJ1ZSwgcHJldmVudEF1dG9Db21wbGV0ZTogY2xlYXJlZCB9O1xyXG5cclxuICAgIC8vIFBhcnNlIHRoZSB0ZXh0Ym94IHZhbHVlcyBpbnRvIGEgc2VsZWN0aW9uIGFuZCB1cGRhdGUgdGhlIGZvcm0gbW9kZWwsXHJcbiAgICAvLyBGb3IgdGhlIHNlY29uZCBib3ggd2UncmUga2V5aW5nIHRoZSBwYXJzZSBmcm9tIHRoZSBlbmQgZGF0ZSBpbiB0aGUgc2VsZWN0aW9uLlxyXG4gICAgY29uc3QgcGFyc2VkU2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb25TdHJhdGVneS5wYXJzZVRleHRib3hWYWx1ZXModGhpcy50ZXh0Ym94R3JvdXAudmFsdWUsIHRoaXMucGFyc2VGb3JtYXRzLCBvcHRpb25zKTtcclxuICAgIHRoaXMudXBkYXRlRm9ybU1vZGVsKHBhcnNlZFNlbGVjdGlvbik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25TZWxlY3Rpb25Nb2RlQ2hhbmdlKG1vZGU6IERhdGVJbnB1dC5TZWxlY3Rpb25Nb2RlKSB7XHJcbiAgICB0aGlzLnNldFNlbGVjdGlvbk1vZGUobW9kZSk7XHJcbiAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvblN0cmF0ZWd5LmdldE5ld1NlbGVjdGlvbkZyb21FeGlzdGluZyh0aGlzLmNhbGVuZGFyU2VsZWN0aW9uKTtcclxuICAgIHRoaXMudXBkYXRlRm9ybU1vZGVsKG5ld1NlbGVjdGlvbik7XHJcblxyXG4gICAgLy8gT24gc2VsZWN0aW9uIG1vZGUgY2hhbmdlLCB3ZSB3YW50IHRvIGZvcmNlIHRoZSBjYWxlbmRhcnMgdG8gc2hvdyB0aGUgcmlnaHQgdmlldyBtb2RlIGZvciB0aGUgbmV3IHNlbGVjdGlvbi5cclxuICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIHVzZXIgZnJvbSBzZWVpbmcgYSB2aWV3IG1vZGUgdGhhdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgZm9yIHRoZSBuZXcgc2VsZWN0aW9uLFxyXG4gICAgLy8gTGlrZSB3aGVuIHN3aWNoaW5nIGZyb20geWVhciBtb2RlIHRvIGxhc3QgNyBkYXlzIG1vZGUuXHJcbiAgICB0aGlzLnByaW1hcnlDYWxlbmRhclZpZXcgPSB7IG1vZGU6IHRoaXMuc2VsZWN0aW9uU3RyYXRlZ3kuc2VsZWN0aW9uVmlld01vZGUsIGRhdGU6IHRoaXMucHJpbWFyeUNhbGVuZGFyVmlldy5kYXRlIH07XHJcbiAgICB0aGlzLnNlY29uZGFyeUNhbGVuZGFyVmlldyA9IHsgbW9kZTogdGhpcy5zZWxlY3Rpb25TdHJhdGVneS5zZWxlY3Rpb25WaWV3TW9kZSwgZGF0ZTogdGhpcy5zZWNvbmRhcnlDYWxlbmRhclZpZXcuZGF0ZSB9O1xyXG4gICAgdGhpcy51cGRhdGVDYWxlbmRhck1pbk1heERhdGVzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DYWxlbmRhckRhdGVTZWxlY3RlZChkYXRlOiBEYXRlKSB7XHJcbiAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvblN0cmF0ZWd5LmdldFNlbGVjdGlvbkZyb21EYXRlKGRhdGUsIHRoaXMuY2FsZW5kYXJTZWxlY3Rpb24pO1xyXG4gICAgY29uc3QgZGlzcGxheVZhbHVlID0gdGhpcy5zZWxlY3Rpb25TdHJhdGVneS5mb3JtYXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTtcclxuICAgIC8vIERvbid0IGVtaXQgZXZlbnRzIHdoZW4gcGF0Y2hpbmcgdmFsdWVzIGhlcmUuIFdlIGRvbid0IHdhbnQgdG8gdHJpZ2dlciB0aGUgY2FsZW5kYXIgdXBkYXRlcyBzaW5jZSB0aGUgY2FsZW5kYXIgaXMgYWxyZWFkeVxyXG4gICAgLy8gc2hvd2luZyB0aGUgc2VsZWN0ZWQgZGF0ZS4gV2UgYWxzbyBkb24ndCB3YW50IHRvIHRyaWdnZXIgdGhlIHRleHRib3ggcGFyc2luZyBsb2dpYyBzaW5jZSB0aGUgZGF0ZSB3YXMgc2VsZWN0ZWQgZnJvbSB0aGUgY2FsZW5kYXIuXHJcbiAgICB0aGlzLnRleHRib3hHcm91cC5wYXRjaFZhbHVlKGRpc3BsYXlWYWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgdGhpcy5mb3JtTW9kZWwucGF0Y2hWYWx1ZShuZXdTZWxlY3Rpb24sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIHRoaXMuY2FsZW5kYXJTZWxlY3Rpb24gPSBuZXdTZWxlY3Rpb247XHJcbiAgICB0aGlzLnVwZGF0ZVN0ZXBwZXJzKG5ld1NlbGVjdGlvbik7XHJcblxyXG4gICAgLy8gQ2xvc2UgdGhlIGNhbGVuZGFyIGlmIHRoZSBzZWxlY3Rpb24gbW9kZSBpcyBub3QgYSByYW5nZSBtb2RlIHdoZXJlIGVpdGhlciB0aGUgc3RhcnQgb3IgdGhlIGVuZCBkYXRlIGNhbiBiZSBjaGFuZ2VkLlxyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGlvblN0cmF0ZWd5LnNob3dTZWNvbmRhcnlUZXh0Ym94KSB7XHJcbiAgICAgIHRoaXMuaXNDYWxlbmRhck9wZW4gPSBmYWxzZTtcclxuICAgICAgdGhpcy5mb2N1c0lucHV0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25QcmltYXJ5Q2FsZW5kYXJWaWV3Q2hhbmdlKHZpZXc6IENhbGVuZGFyLlZpZXcpIHtcclxuICAgIHRoaXMucHJpbWFyeUNhbGVuZGFyVmlldyA9IHZpZXc7XHJcbiAgICB0aGlzLnVwZGF0ZUNhbGVuZGFyTWluTWF4RGF0ZXMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblNlY29uZGFyeUNhbGVuZGFyVmlld0NoYW5nZSh2aWV3OiBDYWxlbmRhci5WaWV3KSB7XHJcbiAgICB0aGlzLnNlY29uZGFyeUNhbGVuZGFyVmlldyA9IHZpZXc7XHJcbiAgICB0aGlzLnVwZGF0ZUNhbGVuZGFyTWluTWF4RGF0ZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKiBTaGlmdHMgdGhlIGNhbGVuZGFyIHZpZXdzIHRvIGRpc3BsYXkgdG9kYXkuIERvZXMgbm90IHVwZGF0ZSB0aGUgY2FsZW5kYXIgc2VsZWN0aW9uLiAqL1xyXG4gIHB1YmxpYyBnb1RvVG9kYXkoKSB7XHJcbiAgICAvLyBJZiBib3RoIGNhbGVuZGFycyBhcmUgdmlzaWJsZSwgc2hvdyB0b2RheSBpbiB0aGUgc2Vjb25kYXJ5IGNhbGVuZGFyIGFuZCB0aGUgbW9udGggYmVmb3JlIGluIHRoZSBwcmltYXJ5IGNhbGVuZGFyLlxyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uU3RyYXRlZ3kuc2hvd1NlY29uZGFyeUNhbGVuZGFyKSB7XHJcbiAgICAgIHRoaXMucHJpbWFyeUNhbGVuZGFyVmlldyA9IHsgbW9kZTogJ2RheScsIGRhdGU6IG1vbWVudCgpLnN1YnRyYWN0KDEsICdtb250aCcpLnRvRGF0ZSgpIH07XHJcbiAgICAgIHRoaXMuc2Vjb25kYXJ5Q2FsZW5kYXJWaWV3ID0geyBtb2RlOiAnZGF5JywgZGF0ZTogbmV3IERhdGUoKSB9O1xyXG4gICAgICAvLyBJZiB3ZSdyZSBpbiBhIHNpbmdsZSBkYXRlIG1vZGUsIHNob3cgdG9kYXkgaW4gdGhlIHByaW1hcnkgY2FsZW5kYXIuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnByaW1hcnlDYWxlbmRhclZpZXcgPSB7IG1vZGU6ICdkYXknLCBkYXRlOiBuZXcgRGF0ZSgpIH07XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZUNhbGVuZGFyTWluTWF4RGF0ZXMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnb1RvUXVpY2tTZWxlY3REYXRlKCkge1xyXG4gICAgaWYgKHRoaXMucXVpY2tTZWxlY3REYXRlKSB7XHJcbiAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uU3RyYXRlZ3kuZ2V0U2VsZWN0aW9uRm9yUXVpY2tTZWxlY3REYXRlKHRoaXMucXVpY2tTZWxlY3REYXRlLCB0aGlzLmNhbGVuZGFyU2VsZWN0aW9uKTtcclxuICAgICAgdGhpcy51cGRhdGVGb3JtTW9kZWwobmV3U2VsZWN0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZXh0U2VsZWN0aW9uKCkge1xyXG4gICAgY29uc3QgbmV3U2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb25TdHJhdGVneS5nZXROZXh0U2VsZWN0aW9uKHRoaXMuY2FsZW5kYXJTZWxlY3Rpb24pO1xyXG4gICAgdGhpcy51cGRhdGVGb3JtTW9kZWwobmV3U2VsZWN0aW9uKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwcmV2aW91c1NlbGVjdGlvbigpIHtcclxuICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uU3RyYXRlZ3kuZ2V0UHJldmlvdXNTZWxlY3Rpb24odGhpcy5jYWxlbmRhclNlbGVjdGlvbik7XHJcbiAgICB0aGlzLnVwZGF0ZUZvcm1Nb2RlbChuZXdTZWxlY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVGb3JtTW9kZWwodmFsdWU6IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsKSB7XHJcbiAgICB0aGlzLmZvcm1Nb2RlbC5wYXRjaFZhbHVlKHZhbHVlKTtcclxuXHJcbiAgICAvLyBWYWxpZGF0ZSB0aGUgdGV4dGJveGVzIGFuZCBzeW5jIHRoZSBmb3JtIGVycm9yc1xyXG4gICAgLy8gV2UgZG8gdGhpcyBhZnRlciBwYXRjaGluZyB0aGUgZm9ybSBtb2RlbCBiZWNhdXNlIHRoZSBmb3JtIG1vZGVsIHBhdGNoIHdpbGwgdHJpZ2dlclxyXG4gICAgLy8gdGhlIGRhdGUgZm9ybWF0dGluZyBsb2dpYyBhbmQgb3ZlcndyaXRlIGFueSBlcnJvcnMgb24gdGhlIGNvbnRyb2xzIGZyb20gYmVmb3JlLlxyXG4gICAgdGhpcy52YWxpZGF0ZVRleHRib3hlcygpO1xyXG4gICAgdGhpcy5zeW5jRm9ybUVycm9ycygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkZvcm1Nb2RlbFN0YXR1c0NoYW5nZXMoKSB7XHJcbiAgICAvLyBLZWVwIHRoZSB0ZXh0Ym94Q29udHJvbCBkaXNhYmxlZCBzdGF0dXMgaW4gc3luYyB3aXRoIHRoZSBmb3JtTW9kZWxcclxuICAgIHRoaXMuZm9ybU1vZGVsLnN0YXR1c0NoYW5nZXMucGlwZShcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFrZVVudGlsKHRoaXMuY29tcG9uZW50RGVzdHJveWVkKVxyXG4gICAgKS5zdWJzY3JpYmUoc3RhdHVzID0+IHtcclxuICAgICAgdGhpcy5zeW5jVGV4dGJveENvbnRyb2xEaXNhYmxlZFN0YXR1cyhzdGF0dXMpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNDYWxlbmRhck9wZW4pIHtcclxuICAgICAgICAvLyBBcyB2YWxpZGF0aW9uIG1lc3NhZ2VzIGFwcGVhci9kaXNhcHBlYXIsIHRoZSBkYXRlIGlucHV0IG1heSBoYXZlIHNoaWZ0ZWQgdXAgb3IgZG93biBvbiB0aGUgcGFnZS5cclxuICAgICAgICAvLyBVcGRhdGUgdGhlIG92ZXJsYXkgcG9zaXRpb24gdG8gZW5zdXJlIGl0J3Mgc3RpbGwgYWxpZ25lZCB3aXRoIHRoZSB0ZXh0Ym94IGFuZCBub3QgYmxvY2tpbmcgaXQuXHJcbiAgICAgICAgLy8gU2V0dGltZW91dCBpcyBuZWVkZWQgdG8gZW5zdXJlIHRoZSBvdmVybGF5IGlzIGJlaW5nIHVwZGF0ZWQgYWZ0ZXIgdGhlIG1lc3NhZ2UgaXMgcmVuZGVyZWQuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm92ZXJsYXk/Lm92ZXJsYXlSZWY/LnVwZGF0ZVBvc2l0aW9uKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkZvcm1Nb2RlbFZhbHVlQ2hhbmdlcygpIHtcclxuICAgIC8vIFVwZGF0ZSB0aGUgY2FsZW5kYXIgc2VsZWN0aW9uIHRleHRib3ggdmFsdWUgd2l0aCBhIGZvcm1hdHRlZCBkYXRlIHdoZW4gdGhlIGZvcm0gbW9kZWwgY2hhbmdlcy5cclxuICAgIC8vIFRoaXMgaXMgdHJpZ2dlcmVkIGJ5IHRoZSB1c2VyIHNlbGVjdGluZyBhIGRhdGUgZnJvbSB0aGUgY2FsZW5kYXIgb3Igd2hlbiB0aGUgdGV4dGJveCBpcyBibHVycmVkLlxyXG4gICAgdGhpcy5mb3JtTW9kZWwudmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLmNvbXBvbmVudERlc3Ryb3llZClcclxuICAgICkuc3Vic2NyaWJlKHZhbHVlID0+IHtcclxuICAgICAgY29uc3QgZGlzcGxheVZhbHVlID0gdGhpcy5zZWxlY3Rpb25TdHJhdGVneS5mb3JtYXRTZWxlY3Rpb24odmFsdWUpO1xyXG4gICAgICAvLyBEb24ndCBlbWl0IGFuIGV2ZW50IHdoZW4gc2V0dGluZyB0aGUgdGV4dGJveCB2YWx1ZSB0byBhdm9pZCBjaXJjdWxhciB1cGRhdGVzIGJldHdlZW4gdGhlIHRleHRib3ggYW5kIGZvcm0gbW9kZWwuXHJcbiAgICAgIHRoaXMudGV4dGJveEdyb3VwLnBhdGNoVmFsdWUoZGlzcGxheVZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJzKHZhbHVlKTtcclxuICAgICAgdGhpcy51cGRhdGVTdGVwcGVycyh2YWx1ZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25UZXh0Ym94VmFsdWVDaGFuZ2VzKCkge1xyXG4gICAgLy8gVXBkYXRlIHRoZSBjYWxlbmRhciBzZWxlY3Rpb24gd2hlbiB0aGUgdGV4dGJveCB2YWx1ZSBjaGFuZ2VzIHRvIHVwZGF0ZSB0aGUgY2FsZW5kYXIuXHJcbiAgICAvLyBXZSBkb24ndCBwYXRjaCB0aGUgZm9ybU1vZGVsIGhlcmUgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHRyaWdnZXIgdGhlXHJcbiAgICAvLyBkYXRlIGZvcm1hdHRpbmcgbG9naWMgYW5kIG92ZXJ3cml0ZSB0aGUgdXNlcidzIGlucHV0LlxyXG4gICAgLy8gV2UnbGwgZG8gdGhhdCB3aGVuIHRoZSB1c2VyIGJsdXJzIG91dCBvZiB0aGUgdGV4dGJveC4gU2VlIG9uVGV4dGJveEJsdXIoKVxyXG4gICAgdGhpcy50ZXh0Ym94R3JvdXAuY29udHJvbHMudGV4dGJveC52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgZGVib3VuY2VUaW1lKDMwMCksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLmNvbXBvbmVudERlc3Ryb3llZClcclxuICAgICkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgY29uc3Qgb3B0aW9uczogRGF0ZUlucHV0LlBhcnNpbmdPcHRpb25zID0geyBzaGlmdFRvQ3VycmVudFllYXJJZkJlbG93OiB0aGlzLm1pbkRhdGUgfTtcclxuICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb25TdHJhdGVneS5wYXJzZVRleHRib3hWYWx1ZXModGhpcy50ZXh0Ym94R3JvdXAudmFsdWUsIHRoaXMucGFyc2VGb3JtYXRzLCBvcHRpb25zKTtcclxuXHJcbiAgICAgIC8vIENhbGVuZGFyIHNlbGVjdGlvbiB3aWxsIGJlIG51bGwgaWYgdGhlIGRhdGVzIGFyZSBpbnZhbGlkLiBEb24ndCB1cGRhdGUgdGhlIGNhbGVuZGFycyBpbiB0aGlzIGNhc2UuXHJcbiAgICAgIGlmIChuZXdTZWxlY3Rpb24pIHtcclxuICAgICAgICB0aGlzLmNhbGVuZGFyU2VsZWN0aW9uID0gbmV3U2VsZWN0aW9uO1xyXG4gICAgICAgIHRoaXMudXBkYXRlUHJpbWFyeUNhbGVuZGFyKHRoaXMuY2FsZW5kYXJTZWxlY3Rpb24sIHRoaXMuc2VsZWN0aW9uU3RyYXRlZ3kuc2hvd1NlY29uZGFyeUNhbGVuZGFyKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNhbGVuZGFyTWluTWF4RGF0ZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gVGhlIHNlY29uZCB0ZXh0Ym94IGlzIG9ubHkgdXNlZCBpbiBsYXN0N0RheXMsIGxhc3QyOERheXMsIGFuZCByYW5nZSBtb2Rlcy5cclxuICAgIHRoaXMudGV4dGJveEdyb3VwLmNvbnRyb2xzLnRleHRib3gyLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFrZVVudGlsKHRoaXMuY29tcG9uZW50RGVzdHJveWVkKVxyXG4gICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICBjb25zdCBvcHRpb25zOiBEYXRlSW5wdXQuUGFyc2luZ09wdGlvbnMgPSB7IHNoaWZ0VG9DdXJyZW50WWVhcklmQmVsb3c6IHRoaXMubWluRGF0ZSwgcGFyc2VGcm9tRW5kOiB0cnVlIH07XHJcbiAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uU3RyYXRlZ3kucGFyc2VUZXh0Ym94VmFsdWVzKHRoaXMudGV4dGJveEdyb3VwLnZhbHVlLCB0aGlzLnBhcnNlRm9ybWF0cywgb3B0aW9ucyk7XHJcblxyXG4gICAgICAvLyBDYWxlbmRhciBzZWxlY3Rpb24gd2lsbCBiZSBudWxsIGlmIHRoZSBkYXRlcyBhcmUgaW52YWxpZC4gRG9uJ3QgdXBkYXRlIHRoZSBjYWxlbmRhcnMgaW4gdGhpcyBjYXNlLlxyXG4gICAgICBpZiAobmV3U2VsZWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5jYWxlbmRhclNlbGVjdGlvbiA9IG5ld1NlbGVjdGlvbjtcclxuICAgICAgICAvLyBUaGUgc2Vjb25kYXJ5IGNhbGVuZGFyIGlzIG9ubHkgc2hvd24gaW4gcmFuZ2UgbW9kZS4gVXBkYXRlIHRoZSBwcmltYXJ5IGNhbGVuZGFyIGlmIHdlJ3JlIG5vdCBpbiByYW5nZSBtb2RlLlxyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblN0cmF0ZWd5LnNob3dTZWNvbmRhcnlDYWxlbmRhcikge1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVTZWNvbmRhcnlDYWxlbmRhcih0aGlzLmNhbGVuZGFyU2VsZWN0aW9uLCB0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVQcmltYXJ5Q2FsZW5kYXIodGhpcy5jYWxlbmRhclNlbGVjdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJNaW5NYXhEYXRlcygpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3luY1RleHRib3hDb250cm9sRGlzYWJsZWRTdGF0dXMoc3RhdHVzOiBGb3JtQ29udHJvbFN0YXR1cykge1xyXG4gICAgLy8gVGhlIHRleHRib3ggc2hvdWxkIG9ubHkgYmUgZGlzYWJsZWQgaWYgdGhlIGZvcm0gbW9kZWwgaXMgZGlzYWJsZWQuXHJcbiAgICAvLyBBbGwgb3RoZXIgc3RhdHVzZXMgYXJlIGNvbnNpZGVyZWQgZW5hYmxlZC5cclxuICAgIGlmIChzdGF0dXMgPT09ICdESVNBQkxFRCcgJiYgdGhpcy50ZXh0Ym94R3JvdXAuZW5hYmxlZCkge1xyXG4gICAgICB0aGlzLnRleHRib3hHcm91cC5kaXNhYmxlKCk7XHJcbiAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gJ0RJU0FCTEVEJyAmJiB0aGlzLnRleHRib3hHcm91cC5kaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLnRleHRib3hHcm91cC5lbmFibGUoKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBwcml2YXRlIHN5bmNGb3JtRXJyb3JzKCkge1xyXG4gICAgLy8gU3RhcnQgd2l0aCB0aGUgZXhpc3RpbmcgZm9ybSBtb2RlbCBlcnJvcnNcclxuICAgIGxldCBlcnJvcnMgPSB0aGlzLmZvcm1Nb2RlbC5lcnJvcnM7XHJcblxyXG4gICAgLy8gQWRkIHRoZSBlcnJvcnMgZnJvbSB0aGUgdGV4dGJveGVzIGlmIHRoZXkgZXhpc3RcclxuICAgIGlmICh0aGlzLnRleHRib3hHcm91cC5jb250cm9scy50ZXh0Ym94LmVycm9ycykge1xyXG4gICAgICBlcnJvcnMgPSB7IC4uLmVycm9ycywgLi4udGhpcy50ZXh0Ym94R3JvdXAuY29udHJvbHMudGV4dGJveC5lcnJvcnMgfTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnRleHRib3hHcm91cC5jb250cm9scy50ZXh0Ym94Mi5lcnJvcnMpIHtcclxuICAgICAgZXJyb3JzID0geyAuLi5lcnJvcnMsIC4uLnRoaXMudGV4dGJveEdyb3VwLmNvbnRyb2xzLnRleHRib3gyLmVycm9ycyB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSB0aGUgZm9ybSBtb2RlbCdzIGVycm9ycyB3aXRoIHRoZSBjb21iaW5lZCBlcnJvcnNcclxuICAgIHRoaXMuZm9ybU1vZGVsLnNldEVycm9ycyhlcnJvcnMpO1xyXG5cclxuICAgIC8vIFVwZGF0ZSB0aGUgZm9ybSBtb2RlbCdzIHRvdWNoZWQgYW5kIGRpcnR5IHN0YXR1cyBiYXNlZCBvbiB0aGUgdGV4dGJveCdzIHN0YXR1cy5cclxuICAgIC8vIFNpbmNlIHRoZSB1c2VyIGludGVyYWN0cyB3aXRoIGEgY29udHJvbCB0aGF0IGlzIGludGVybmFsIHRvIHRoaXMgY29tcG9uZW50LCB0aGVcclxuICAgIC8vIGZvcm0gbW9kZWwncyBzdGF0dXMgd29uJ3QgYmUgdXBkYXRlZCBhdXRvbWF0aWNhbGx5LlxyXG4gICAgaWYgKHRoaXMudGV4dGJveEdyb3VwLnRvdWNoZWQgJiYgIXRoaXMuZm9ybU1vZGVsLnRvdWNoZWQpIHtcclxuICAgICAgdGhpcy5mb3JtTW9kZWwubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudGV4dGJveEdyb3VwLmRpcnR5ICYmICF0aGlzLmZvcm1Nb2RlbC5kaXJ0eSkge1xyXG4gICAgICB0aGlzLmZvcm1Nb2RlbC5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIFxyXG4gICAqIFVwZGF0ZXMgdGhlIGRhdGUgcGFyc2luZyBmb3JtYXRzIGFuZCBwbGFjZWhvbGRlciBiYXNlZCBvbiB0aGUgdXNlcidzIGRpc3BsYXkgcHJlZmVyZW5jZS5cclxuICAgKiBOT1RFOiBUaGlzIGlzIGFzeW5jIGJlY2F1c2Ugd2UncmUgcmV0cmlldmluZyB0aGUgdXNlcidzIHByZWZlcmVuY2VzLiBXZSdyZSBub3QgYXdhaXRpbmcgdGhlIHJlc3VsdFxyXG4gICAqIGJlY2F1c2UgdGhlIG9ubHkgbG9naWMgdGhhdCBkZXBlbmRzIG9uIHRoaXMgaXMgdGhlIHRleHQgYm94IGRhdGUgcGFyc2luZyBsb2dpYyBhbmQgcGxhY2Vob2xkZXIuXHJcbiAgICogT3VyIGZvcm1zIHNob3VsZCBhbHdheXMgYmUgYmVoaW5kIGEgcGVuZGluZyBvdmVybGF5LCBzbyB0aGUgdXNlciB3b24ndCBiZSBhYmxlIHRvIGludGVyYWN0IHdpdGggdGhlXHJcbiAgICogZm9ybSB1bnRpbCB0aGUgdXNlciBpcyBsb2FkZWQgYW55d2F5LlxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgc2V0RGF0ZUZvcm1hdHMoKSB7XHJcbiAgICBjb25zdCB7IHByZWZlcmVuY2UgfSA9IGF3YWl0IGxhc3RWYWx1ZUZyb20odGhpcy51c2VyUHJlZmVyZW5jZVNlcnZpY2UuZ2V0UHJlZmVyZW5jZXMoKSk7XHJcbiAgICBjb25zdCBkYXRlRm9ybWF0ID0gcHJlZmVyZW5jZT8uZGF0ZUZvcm1hdDtcclxuICAgIHRoaXMucGxhY2Vob2xkZXIgPSBkYXRlRm9ybWF0ID8/IHRoaXMucGxhY2Vob2xkZXI7XHJcbiAgICB0aGlzLnBhcnNlRm9ybWF0cyA9IERhdGVUaW1lSGVscGVyLmdldE1vbWVudFBhcnNlRm9ybWF0cyhkYXRlRm9ybWF0KTtcclxuICB9XHJcblxyXG4gIC8qKiBGb2N1c2VzIHRoZSBkYXRlIGlucHV0LiAqL1xyXG4gIHByaXZhdGUgZm9jdXNJbnB1dCgpIHtcclxuICAgIHRoaXMuY29udHJvbHM/LmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFNlbGVjdGlvbk1vZGUobW9kZTogRGF0ZUlucHV0LlNlbGVjdGlvbk1vZGUpIHtcclxuICAgIHRoaXMuc2VsZWN0aW9uTW9kZSA9IG1vZGU7XHJcbiAgICB0aGlzLnNlbGVjdGlvblN0cmF0ZWd5ID0gdGhpcy5zZWxlY3Rpb25TdHJhdGVnaWVzW21vZGVdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgbWF4IGRhdGUgZm9yIHRoZSBwcmltYXJ5IGNhbGVuZGFyIGFuZCB0aGUgbWluIGRhdGUgZm9yIHRoZSBzZWNvbmRhcnkgY2FsZW5kYXIgYmFzZWRcclxuICAgKiBvbiB0aGUgY3VycmVudCB2aWV3cyBpbiBlYWNoLiBUaGlzIHByZXZlbnRzIHRoZSB1c2VyIGZyb20gbW92aW5nIHRoZSBjYWxlbmRhcnMgb3V0IG9mIG9yZGVyLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgdXBkYXRlQ2FsZW5kYXJNaW5NYXhEYXRlcygpIHtcclxuICAgIC8vIE9ubHkgdXBkYXRlIHRoZSBtaW4vbWF4IGRhdGVzIHdoZW4gdGhlIHZpZXcgbW9kZSBpcyAnZGF5Jy5cclxuICAgIC8vIFdoZW4gYSBjYWxlbmRhciBpcyBpbiBhIG1vbnRoIG9yIHllYXIgdmlldyBtb2RlLCB0aGUgdmlldyBkYXRlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB5ZWFyLlxyXG4gICAgLy8gVGhpcyB3b3VsZCBjYXVzZSB0aGUgZGF0ZXMgaW4gdGhlIG90aGVyIGNhbGVuZGFyIHRvIGJlIHVuc2VsZWN0YWJsZSBpZiB3ZSB3ZXJlIHRvXHJcbiAgICAvLyB1cGRhdGUgdGhlIG1pbi9tYXggZGF0ZXMgaW4gdGhlc2UgY2FzZXMuXHJcbiAgICBpZiAodGhpcy5wcmltYXJ5Q2FsZW5kYXJWaWV3Py5tb2RlID09PSAnZGF5Jykge1xyXG4gICAgICB0aGlzLnNlY29uZGFyeUNhbGVuZGFyTWluRGF0ZSA9IG1vbWVudCh0aGlzLnByaW1hcnlDYWxlbmRhclZpZXc/LmRhdGUpLmFkZCgxLCAnbW9udGgnKS5zdGFydE9mKCdtb250aCcpLnRvRGF0ZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2Vjb25kYXJ5Q2FsZW5kYXJWaWV3Py5tb2RlID09PSAnZGF5Jykge1xyXG4gICAgICB0aGlzLnByaW1hcnlDYWxlbmRhck1heERhdGUgPSBtb21lbnQodGhpcy5zZWNvbmRhcnlDYWxlbmRhclZpZXc/LmRhdGUpLnN1YnRyYWN0KDEsICdtb250aCcpLmVuZE9mKCdtb250aCcpLnRvRGF0ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVDYWxlbmRhcnMoc2VsZWN0aW9uOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCkge1xyXG4gICAgdGhpcy5jYWxlbmRhclNlbGVjdGlvbiA9IHNlbGVjdGlvbjtcclxuICAgIHRoaXMudXBkYXRlUHJpbWFyeUNhbGVuZGFyKHNlbGVjdGlvbik7XHJcbiAgICAvLyBPbmx5IHNoaWZ0IHRoZSBwcmltYXJ5IGNhbGVuZGFyIGlmIHdlJ3JlIHNob3dpbmcgdGhlIHNlY29uZGFyeSBjYWxlbmRhclxyXG4gICAgdGhpcy51cGRhdGVTZWNvbmRhcnlDYWxlbmRhcihzZWxlY3Rpb24sIHRoaXMuc2VsZWN0aW9uU3RyYXRlZ3kuc2hvd1NlY29uZGFyeUNhbGVuZGFyKTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZUNhbGVuZGFyTWluTWF4RGF0ZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUHJpbWFyeUNhbGVuZGFyKHNlbGVjdGlvbjogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwsIHNoaWZ0U2Vjb25kYXJ5OiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIHRoaXMucHJpbWFyeUNhbGVuZGFyVmlldyA9IHRoaXMuc2VsZWN0aW9uU3RyYXRlZ3kuZ2V0UHJpbWFyeUNhbGVuZGFyVmlldyhzZWxlY3Rpb24sIHRoaXMubWluRGF0ZSwgdGhpcy5tYXhEYXRlLCB0aGlzLnByaW1hcnlDYWxlbmRhclZpZXcpO1xyXG5cclxuICAgIC8vIFdoZW4gZW50ZXJpbmcgYSBkYXRlIGludG8gdGhlIGZpcnN0IHRleHRib3gsIHdlIHJlYWxseSBvbmx5IHdhbnQgdG8gdXBkYXRlIHRoZSBwcmltYXJ5IGNhbGVuZGFyLlxyXG4gICAgLy8gSG93ZXZlciwgaXQncyBwb3NzaWJsZSB0aGF0IHRoZSBuZXcgZGF0ZSBpcyBhZnRlciB0aGUgc2Vjb25kYXJ5IGNhbGVuZGFyJ3MgZGF0ZS4gSW4gdGhpcyBjYXNlLFxyXG4gICAgLy8gV2Ugd2FudCB0byBzaGlmdCB0aGUgc2Vjb25kYXJ5IGNhbGVuZGFyIHNvIHRoZSBjYWxlbmRhcnMgc3RheSBpbiBvcmRlci5cclxuICAgIGlmIChzaGlmdFNlY29uZGFyeSAmJiB0aGlzLnNlY29uZGFyeUNhbGVuZGFyVmlldykge1xyXG4gICAgICBpZiAobW9tZW50KHRoaXMucHJpbWFyeUNhbGVuZGFyVmlldy5kYXRlKS5pc1NhbWVPckFmdGVyKHRoaXMuc2Vjb25kYXJ5Q2FsZW5kYXJWaWV3LmRhdGUsICdtb250aCcpKSB7XHJcbiAgICAgICAgbGV0IG5ld1NlY29uZGFyeURhdGUgPSBtb21lbnQodGhpcy5wcmltYXJ5Q2FsZW5kYXJWaWV3LmRhdGUpLmFkZCgxLCAnbW9udGgnKS50b0RhdGUoKTtcclxuICAgICAgICB0aGlzLnNlY29uZGFyeUNhbGVuZGFyVmlldyA9IHsgbW9kZTogdGhpcy5zZWxlY3Rpb25TdHJhdGVneS5zZWxlY3Rpb25WaWV3TW9kZSwgZGF0ZTogbmV3U2Vjb25kYXJ5RGF0ZSB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVNlY29uZGFyeUNhbGVuZGFyKHNlbGVjdGlvbjogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwsIHNoaWZ0UHJpbWFyeTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnNlY29uZGFyeUNhbGVuZGFyVmlldyA9IHRoaXMuc2VsZWN0aW9uU3RyYXRlZ3kuZ2V0U2Vjb25kYXJ5Q2FsZW5kYXJWaWV3KHNlbGVjdGlvbiwgdGhpcy5taW5EYXRlLCB0aGlzLm1heERhdGUsIHRoaXMuc2Vjb25kYXJ5Q2FsZW5kYXJWaWV3KTtcclxuXHJcbiAgICAvLyBXaGVuIGVudGVyaW5nIGEgZGF0ZSBpbnRvIHRoZSBzZWNvbmQgdGV4dGJveCwgd2UgcmVhbGx5IG9ubHkgd2FudCB0byB1cGRhdGUgdGhlIHNlY29uZGFyeSBjYWxlbmRhci5cclxuICAgIC8vIEhvd2V2ZXIsIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgbmV3IGRhdGUgaXMgYmVmb3JlIHRoZSBwcmltYXJ5IGNhbGVuZGFyJ3MgZGF0ZS4gSW4gdGhpcyBjYXNlLFxyXG4gICAgLy8gV2Ugd2FudCB0byBzaGlmdCB0aGUgcHJpbWFyeSBjYWxlbmRhciBzbyB0aGUgY2FsZW5kYXJzIHN0YXkgaW4gb3JkZXIuXHJcbiAgICBpZiAoc2hpZnRQcmltYXJ5ICYmIHRoaXMucHJpbWFyeUNhbGVuZGFyVmlldykge1xyXG4gICAgICBpZiAobW9tZW50KHRoaXMucHJpbWFyeUNhbGVuZGFyVmlldy5kYXRlKS5pc1NhbWVPckFmdGVyKHRoaXMuc2Vjb25kYXJ5Q2FsZW5kYXJWaWV3LmRhdGUsICdtb250aCcpKSB7XHJcbiAgICAgICAgbGV0IG5ld1ByaW1hcnlEYXRlID0gbW9tZW50KHRoaXMuc2Vjb25kYXJ5Q2FsZW5kYXJWaWV3LmRhdGUpLnN1YnRyYWN0KDEsICdtb250aCcpLnRvRGF0ZSgpO1xyXG4gICAgICAgIHRoaXMucHJpbWFyeUNhbGVuZGFyVmlldyA9IHsgbW9kZTogdGhpcy5zZWxlY3Rpb25TdHJhdGVneS5zZWxlY3Rpb25WaWV3TW9kZSwgZGF0ZTogbmV3UHJpbWFyeURhdGUgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTdGVwcGVycyh2YWx1ZTogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwpIHtcclxuICAgIC8vIERpc2FibGUgdGhlIHN0ZXBwZXJzIGlmIHdlIGVpdGhlciBkb24ndCBoYXZlIGEgc2VsZWN0aW9uIG9yIG9ubHkgaGF2ZSBvbmUgZGF0ZSBpbiB0aGUgc2VsZWN0aW9uLlxyXG4gICAgaWYgKFxyXG4gICAgICAhdmFsdWUgfHxcclxuICAgICAgKERhdGVJbnB1dC5pc1NlbGVjdGlvblNpbmdsZURhdGUodmFsdWUpICYmIHRoaXMuc2VsZWN0aW9uTW9kZSAhPT0gJ2RheScpIHx8XHJcbiAgICAgIChEYXRlSW5wdXQuaXNTZWxlY3Rpb25SYW5nZSh2YWx1ZSkgJiYgKCF2YWx1ZS5zdGFydCB8fCAhdmFsdWUuZW5kKSlcclxuICAgICkge1xyXG4gICAgICB0aGlzLmRpc2FibGVTdGVwcGVycyA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRpc2FibGVTdGVwcGVycyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZVRleHRib3hlcygpIHtcclxuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLnRleHRib3hHcm91cC5jb250cm9scy50ZXh0Ym94O1xyXG4gICAgY29uc3QgY29udHJvbDIgPSB0aGlzLnRleHRib3hHcm91cC5jb250cm9scy50ZXh0Ym94MjtcclxuXHJcbiAgICAvLyBUaGUgZmlyc3QgdGV4dGJveCBzaG91bGQgb25seSBoYXZlIHRoZSByZXF1aXJlZCBlcnJvciBpZiBpdCdzIGVtcHR5IGFuZCB0aGUgZGF0ZSBpbnB1dCBpcyByZXF1aXJlZCxcclxuICAgIC8vIG9yIGlmIHRoZSBkYXRlIGlucHV0IGlzIG5vdCByZXF1aXJlZCBhbmQgdGhlIHNlY29uZCBjb250cm9sIGlzIHZpc2libGUgYW5kIGhhcyBhIHZhbHVlIChtZWFuaW5nIGEgcGFydGlhbCByYW5nZSlcclxuICAgIGlmIChcclxuICAgICAgIWNvbnRyb2wudmFsdWUgJiZcclxuICAgICAgKHRoaXMucmVxdWlyZWQgfHwgKGNvbnRyb2wyLnZhbHVlICYmIHRoaXMuc2VsZWN0aW9uU3RyYXRlZ3kuc2hvd1NlY29uZGFyeVRleHRib3gpKVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKHsgcmVxdWlyZWQ6IHRydWUgfSk7XHJcbiAgICB9XHJcbiAgICAvLyBUaGUgc2FtZSBpZGVhIGFwcGxpZXMgdG8gdGhlIHNlY29uZCB0ZXh0Ym94LCBidXQgb25seSBpZiBpdCdzIHZpc2libGVcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZWxlY3Rpb25TdHJhdGVneS5zaG93U2Vjb25kYXJ5VGV4dGJveCAmJlxyXG4gICAgICAhY29udHJvbDIudmFsdWUgJiZcclxuICAgICAgKHRoaXMucmVxdWlyZWQgfHwgY29udHJvbC52YWx1ZSlcclxuICAgICkge1xyXG4gICAgICBjb250cm9sMi5zZXRFcnJvcnMoeyByZXF1aXJlZDogdHJ1ZSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29udHJvbC52YWx1ZSkge1xyXG4gICAgICBjb25zdCBlcnJvcnMgPSB0aGlzLnZhbGlkYXRlRGF0ZVN0cmluZyhjb250cm9sLnZhbHVlKTtcclxuICAgICAgaWYgKGVycm9ycykge1xyXG4gICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKGVycm9ycyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29udHJvbDIudmFsdWUgJiYgdGhpcy5zZWxlY3Rpb25TdHJhdGVneS5zaG93U2Vjb25kYXJ5VGV4dGJveCkge1xyXG4gICAgICBjb25zdCBlcnJvcnMgPSB0aGlzLnZhbGlkYXRlRGF0ZVN0cmluZyhjb250cm9sMi52YWx1ZSk7XHJcbiAgICAgIGlmIChlcnJvcnMpIHtcclxuICAgICAgICBjb250cm9sMi5zZXRFcnJvcnMoZXJyb3JzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZURhdGVTdHJpbmcoZGF0ZTogc3RyaW5nKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnNlbGVjdGlvblN0cmF0ZWd5LnBhcnNlU3RyaW5nKGRhdGUsIHRoaXMucGFyc2VGb3JtYXRzKTtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAvLyBXZSdyZSB1c2luZyB0aGUgdmlldyBtb2RlIGFzIHRoZSBncmFudWxhcml0eS4gV2UgZG9uJ3Qgd2FudCB0byBpbnZhbGlkYXRlXHJcbiAgICAgIC8vIHRoZSBkYXRlIGluIHRoZSBjYXNlIHdoZXJlIHlvdSBoYXZlIGEgbW9udGgvcXVhcnRlci95ZWFyIHNlbGVjdGVkIGFuZCB0aGUgbWluXHJcbiAgICAgIC8vIG9yIG1heCBkYXRlIGlzIHNvbWV3aGVyZSB3aXRoaW4gdGhhdCBtb250aC9xdWFydGVyL3llYXIuXHJcbiAgICAgIGlmIChtb21lbnQodmFsdWUpLmlzQmVmb3JlKHRoaXMubWluRGF0ZSwgdGhpcy5zZWxlY3Rpb25TdHJhdGVneS5zZWxlY3Rpb25WaWV3TW9kZSkpIHtcclxuICAgICAgICByZXR1cm4geyBtaW5EYXRlOiB7IG1pblZhbHVlOiB0aGlzLm1pbkRhdGUgfSB9O1xyXG4gICAgICB9IGVsc2UgaWYgKG1vbWVudCh2YWx1ZSkuaXNBZnRlcih0aGlzLm1heERhdGUsIHRoaXMuc2VsZWN0aW9uU3RyYXRlZ3kuc2VsZWN0aW9uVmlld01vZGUpKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgbWF4RGF0ZTogeyBtYXhWYWx1ZTogdGhpcy5tYXhEYXRlIH0gfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxufVxyXG4iLCI8bGFiZWwgKm5nSWY9XCJsYWJlbFwiPlxyXG4gIDxzcGFuPnt7bGFiZWwgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cclxuICA8c3BhbiAqbmdJZj1cInZhbGlkYXRpb25FcnJvcnMubGVuZ3RoID4gMCAmJiBmb3JtTW9kZWwudG91Y2hlZCAmJiBmb3JtTW9kZWwuaW52YWxpZFwiPiZuYnNwO3t7dmFsaWRhdGlvbkVycm9yc319PC9zcGFuPlxyXG4gIDxlYy1oZWxwLXBvcG92ZXIgaWQ9XCJ7e2lkfX1faGVscFBvcG92ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWxwUG9wb3ZlclwiXHJcbiAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtaW5saW5lLWJsb2NrIG15LW4zIG14LW4xXCJcclxuICAgICAgICAgICAgICAgICAgIHRleHQ9XCJ7e2hlbHBQb3BvdmVyIHwgdHJhbnNsYXRlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgY29udGVudFBvc2l0aW9uPVwie3toZWxwUG9wb3ZlclBvc2l0aW9ufX1cIj5cclxuICA8L2VjLWhlbHAtcG9wb3Zlcj5cclxuPC9sYWJlbD5cclxuXHJcbjxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcclxuICAgICBbZWNLZXlib2FyZE5hdkNvbnRhaW5lcl09XCJpc0NhbGVuZGFyT3BlblwiXHJcbiAgICAgI2NvbnRyb2xzPVwiZWNLZXlib2FyZE5hdkNvbnRhaW5lclwiXHJcbiAgICAgKGZvY3VzT3V0RW5kKT1cIm9uQ29udHJvbHNGb2N1c091dEVuZCgpXCI+XHJcbiAgPGVjLWZvcm0tY29udHJvbCBpZD1cInt7aWR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgW2F1dG9mb2N1c109XCJhdXRvZm9jdXNcIlxyXG4gICAgICAgICAgICAgICAgICAgW3BlbmRpbmddPVwicGVuZGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxyXG4gICAgICAgICAgICAgICAgICAgKGFjdGlvbkNsaWNrZWQpPVwiaXNDYWxlbmRhck9wZW4gPSAhaXNDYWxlbmRhck9wZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgW3Nob3dDbGVhcl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICBhY3Rpb25JY29uPVwiaWNvbi1kYXRlXCJcclxuICAgICAgICAgICAgICAgICAgIGNka092ZXJsYXlPcmlnaW5cclxuICAgICAgICAgICAgICAgICAgICNvdmVybGF5T3JpZ2luPVwiY2RrT3ZlcmxheU9yaWdpblwiXHJcbiAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXgtZ3Jvd1wiXHJcbiAgICAgICAgICAgICAgICAgICBzdHlsZT1cImhlaWdodDogMnJlbTtcIj5cclxuICAgIDxpbnB1dCBpZD1cInt7aWR9fV9pbnB1dFwiXHJcbiAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3twbGFjZWhvbGRlcn19XCJcclxuICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwidGV4dGJveEdyb3VwLmdldCgndGV4dGJveCcpXCJcclxuICAgICAgICAgICAoYmx1cik9XCJvblRleHRib3hCbHVyKClcIj5cclxuICA8L2VjLWZvcm0tY29udHJvbD5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGlvblN0cmF0ZWd5LnNob3dTZWNvbmRhcnlUZXh0Ym94XCI+XHJcbiAgICA8c3BhbiBjbGFzcz1cImZsZXgtc2hyaW5rIG14LTFcIj4mbmRhc2g7PC9zcGFuPlxyXG4gICAgPGVjLWZvcm0tY29udHJvbCBpZD1cInt7aWR9fV9jb250cm9sMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFthdXRvZm9jdXNdPVwiYXV0b2ZvY3VzXCJcclxuICAgICAgICAgICAgICAgICAgICAgW3BlbmRpbmddPVwicGVuZGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIChhY3Rpb25DbGlja2VkKT1cImlzQ2FsZW5kYXJPcGVuID0gIWlzQ2FsZW5kYXJPcGVuXCJcclxuICAgICAgICAgICAgICAgICAgICAgW3Nob3dDbGVhcl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIGFjdGlvbkljb249XCJpY29uLWRhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXgtZ3Jvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAycmVtO1wiPlxyXG4gICAgICA8aW5wdXQgaWQ9XCJ7e2lkfX1faW5wdXQyXCJcclxuICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3twbGFjZWhvbGRlcn19XCJcclxuICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJ0ZXh0Ym94R3JvdXAuZ2V0KCd0ZXh0Ym94MicpXCJcclxuICAgICAgICAgICAgIChibHVyKT1cIm9uVGV4dGJveDJCbHVyKClcIj5cclxuICAgIDwvZWMtZm9ybS1jb250cm9sPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwiZW5hYmxlU3RlcHBlcnNcIlxyXG4gICAgICAgY2xhc3M9XCJjb250cm9sLWdyb3VwIG1sLTJcIj5cclxuICAgIDxlYy1idXR0b24gaWQ9XCJ7e2lkfX1fcHJldmlvdXNTZWxlY3Rpb25cIlxyXG4gICAgICAgICAgICAgICB0eXBlPVwic2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgICAgaWNvbj1cImljb24tYW5nbGUtZG93biByb3RhdGUtOTBcIlxyXG4gICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJwcmV2aW91c1NlbGVjdGlvbigpXCJcclxuICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzQ2FsZW5kYXJPcGVuIHx8IGRpc2FibGVTdGVwcGVycyB8fCBmb3JtTW9kZWw/LmRpc2FibGVkXCI+XHJcbiAgICA8L2VjLWJ1dHRvbj5cclxuICAgIDxlYy1idXR0b24gaWQ9XCJ7e2lkfX1fbmV4dFNlbGVjdGlvblwiXHJcbiAgICAgICAgICAgICAgIHR5cGU9XCJzZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICBpY29uPVwiaWNvbi1hbmdsZS1kb3duIHJvdGF0ZS0yNzBcIlxyXG4gICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJuZXh0U2VsZWN0aW9uKClcIlxyXG4gICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNDYWxlbmRhck9wZW4gfHwgZGlzYWJsZVN0ZXBwZXJzIHx8IGZvcm1Nb2RlbD8uZGlzYWJsZWRcIj5cclxuICAgIDwvZWMtYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZWMtYnV0dG9uICpuZ0lmPVwicXVpY2tTZWxlY3REYXRlXCJcclxuICAgICAgICAgICAgIGlkPVwie3tpZH19X3F1aWNrU2VsZWN0XCJcclxuICAgICAgICAgICAgIGljb249XCJpY29uLWRheVwiXHJcbiAgICAgICAgICAgICB0eXBlPVwic2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgIHRpdGxlPVwie3snRGF0ZUlucHV0X0xhdGVzdERhdGFBdmFpbGFibGVUaXRsZScgfCB0cmFuc2xhdGV9fVwiXHJcbiAgICAgICAgICAgICAoY2xpY2tlZCk9XCJnb1RvUXVpY2tTZWxlY3REYXRlKClcIlxyXG4gICAgICAgICAgICAgY2xhc3M9XCJtbC0yXCI+XHJcbiAgPC9lYy1idXR0b24+XHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlIGNka0Nvbm5lY3RlZE92ZXJsYXlcclxuICAgICAgICAgICAgICNvdmVybGF5PVwiY2RrQ29ubmVjdGVkT3ZlcmxheVwiXHJcbiAgICAgICAgICAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbl09XCJvdmVybGF5T3JpZ2luXCJcclxuICAgICAgICAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5T3Blbl09XCJpc0NhbGVuZGFyT3BlblwiXHJcbiAgICAgICAgICAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheVNjcm9sbFN0cmF0ZWd5XT1cIm92ZXJsYXlTY3JvbGxTdHJhdGVneVwiXHJcbiAgICAgICAgICAgICBjZGtDb25uZWN0ZWRPdmVybGF5UGFuZWxDbGFzcz1cIm15LTFcIlxyXG4gICAgICAgICAgICAgKG92ZXJsYXlPdXRzaWRlQ2xpY2spPVwib25PdmVybGF5T3V0c2lkZUNsaWNrKCRldmVudClcIlxyXG4gICAgICAgICAgICAgKGRldGFjaCk9XCJpc0NhbGVuZGFyT3BlbiA9IGZhbHNlXCI+XHJcbiAgPGFydGljbGUgaWQ9XCJ7e2lkfX1fZGF0ZVBpY2tlclwiXHJcbiAgICAgICAgICAgY2xhc3M9XCJjYXJkIGQtZmxleFwiXHJcbiAgICAgICAgICAgW2VjS2V5Ym9hcmROYXZDb250YWluZXJdPVwiaXNDYWxlbmRhck9wZW5cIlxyXG4gICAgICAgICAgICNjYWxlbmRhcj1cImVjS2V5Ym9hcmROYXZDb250YWluZXJcIlxyXG4gICAgICAgICAgIChmb2N1c091dFN0YXJ0KT1cIm9uQ2FsZW5kYXJGb2N1c091dFN0YXJ0KClcIlxyXG4gICAgICAgICAgIChmb2N1c091dEVuZCk9XCJvbkNhbGVuZGFyRm9jdXNPdXRFbmQoKVwiPlxyXG4gICAgPHVsICpuZ0lmPVwic2VsZWN0aW9uTW9kZU9wdGlvbnMubGVuZ3RoID4gMVwiXHJcbiAgICAgICAgY2xhc3M9XCJzZWxlY3Rpb24tbW9kZS1tZW51IGJvcmRlci1yaWdodCBwLTFcIj5cclxuICAgICAgPGxpICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygc2VsZWN0aW9uTW9kZU9wdGlvbnNcIj5cclxuICAgICAgICA8YnV0dG9uIGlkPVwie3tpZH19X3NlbGVjdGlvbk1vZGVfe3tvcHRpb259fVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtYm9keS0xXCJcclxuICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1zZWxlY3RlZF09XCJvcHRpb24gPT09IHNlbGVjdGlvbk1vZGVcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2VsZWN0aW9uTW9kZUNoYW5nZShvcHRpb24pXCI+XHJcbiAgICAgICAgICB7eydEYXRlSW5wdXRTZWxlY3Rpb25Nb2RlXycgKyBvcHRpb24gfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2xpPlxyXG4gICAgPC91bD5cclxuXHJcbiAgICA8ZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgPGVjLWNhbGVuZGFyIGlkPVwie3tpZH19X2NhbGVuZGFyXCJcclxuICAgICAgICAgICAgICAgICAgICAgW3ZpZXddPVwicHJpbWFyeUNhbGVuZGFyVmlld1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICh2aWV3Q2hhbmdlKT1cIm9uUHJpbWFyeUNhbGVuZGFyVmlld0NoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGlvbk1vZGVdPVwic2VsZWN0aW9uTW9kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3Rpb25dPVwiY2FsZW5kYXJTZWxlY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAoZGF0ZVNlbGVjdGVkKT1cIm9uQ2FsZW5kYXJEYXRlU2VsZWN0ZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFttaW5EYXRlXT1cIm1pbkRhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbbWF4RGF0ZV09XCJzZWxlY3Rpb25TdHJhdGVneS5zaG93U2Vjb25kYXJ5Q2FsZW5kYXIgPyBwcmltYXJ5Q2FsZW5kYXJNYXhEYXRlIDogbWF4RGF0ZVwiPlxyXG4gICAgICAgIDwvZWMtY2FsZW5kYXI+XHJcblxyXG4gICAgICAgIDxlYy1jYWxlbmRhciAqbmdJZj1cInNlbGVjdGlvblN0cmF0ZWd5LnNob3dTZWNvbmRhcnlDYWxlbmRhclwiXHJcbiAgICAgICAgICAgICAgICAgICAgIGlkPVwie3tpZH19X3NlY29uZGFyeUNhbGVuZGFyXCJcclxuICAgICAgICAgICAgICAgICAgICAgW3ZpZXddPVwic2Vjb25kYXJ5Q2FsZW5kYXJWaWV3XCJcclxuICAgICAgICAgICAgICAgICAgICAgKHZpZXdDaGFuZ2UpPVwib25TZWNvbmRhcnlDYWxlbmRhclZpZXdDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3Rpb25Nb2RlXT1cInNlbGVjdGlvbk1vZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbc2VsZWN0aW9uXT1cImNhbGVuZGFyU2VsZWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgKGRhdGVTZWxlY3RlZCk9XCJvbkNhbGVuZGFyRGF0ZVNlbGVjdGVkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbbWluRGF0ZV09XCJzZWNvbmRhcnlDYWxlbmRhck1pbkRhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbbWF4RGF0ZV09XCJtYXhEYXRlXCI+XHJcbiAgICAgICAgPC9lYy1jYWxlbmRhcj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8Zm9vdGVyICpuZ0lmPVwic2VsZWN0aW9uU3RyYXRlZ3kuc2VsZWN0aW9uVmlld01vZGUgPT09ICdkYXknXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cInB4LTIgbXktMiBkLWZsZXhcIj5cclxuICAgICAgICA8YnV0dG9uIGlkPVwie3tpZH19X3RvZGF5X2J1dHRvblwiXHJcbiAgICAgICAgICAgICAgICBlY0xpbmtCdXR0b25cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWwtYXV0byBkLWlubGluZS1ibG9ja1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ29Ub1RvZGF5KClcIlxyXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDEuNzVyZW07XCI+XHJcbiAgICAgICAgICB7eydUb2RheScgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Zvb3Rlcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvYXJ0aWNsZT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
@@ -5054,6 +5054,7 @@ class DateInputComponent extends FormControlBase {
5054
5054
  this.calendarSelection = this.formModel.value;
5055
5055
  this.updateCalendars(this.calendarSelection);
5056
5056
  this.updateSteppers(this.calendarSelection);
5057
+ console.log(this.calendarSelection);
5057
5058
  }
5058
5059
  /** Focuses the input whenever the calendar is shift-tabbed out of. */
5059
5060
  onCalendarFocusOutStart() {
@@ -5345,6 +5346,7 @@ class DateInputComponent extends FormControlBase {
5345
5346
  updateSteppers(value) {
5346
5347
  // Disable the steppers if we either don't have a selection or only have one date in the selection.
5347
5348
  if (!value ||
5349
+ (DateInput.isSelectionSingleDate(value) && this.selectionMode !== 'day') ||
5348
5350
  (DateInput.isSelectionRange(value) && (!value.start || !value.end))) {
5349
5351
  this.disableSteppers = true;
5350
5352
  }