@worktile/gantt 16.0.3 → 16.1.0-next.1

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.
@@ -57,6 +57,7 @@ export class GanttUpper {
57
57
  this.viewType = GanttViewType.month;
58
58
  this.showTodayLine = true;
59
59
  this.showToolbar = false;
60
+ this.restrictToBounds = true;
60
61
  this.toolbarOptions = {
61
62
  viewTypes: [GanttViewType.day, GanttViewType.month, GanttViewType.year]
62
63
  };
@@ -312,7 +313,7 @@ export class GanttUpper {
312
313
  this.changeView(this.viewType);
313
314
  }
314
315
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: GanttUpper, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: GANTT_GLOBAL_CONFIG }], target: i0.ɵɵFactoryTarget.Directive }); }
315
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.0", type: GanttUpper, inputs: { originItems: ["items", "originItems"], originGroups: ["groups", "originGroups"], originBaselineItems: ["baselineItems", "originBaselineItems"], viewType: "viewType", start: "start", end: "end", showTodayLine: "showTodayLine", draggable: "draggable", styles: "styles", showToolbar: "showToolbar", toolbarOptions: "toolbarOptions", viewOptions: "viewOptions", linkOptions: "linkOptions", disabledLoadOnScroll: "disabledLoadOnScroll", selectable: "selectable", multiple: "multiple" }, outputs: { loadOnScroll: "loadOnScroll", dragStarted: "dragStarted", dragMoved: "dragMoved", dragEnded: "dragEnded", barClick: "barClick", viewChange: "viewChange", expandChange: "expandChange" }, host: { properties: { "class.gantt": "this.ganttClass" } }, queries: [{ propertyName: "barTemplate", first: true, predicate: ["bar"], descendants: true, static: true }, { propertyName: "rangeTemplate", first: true, predicate: ["range"], descendants: true, static: true }, { propertyName: "itemTemplate", first: true, predicate: ["item"], descendants: true, static: true }, { propertyName: "baselineTemplate", first: true, predicate: ["baseline"], descendants: true, static: true }, { propertyName: "groupTemplate", first: true, predicate: ["group"], descendants: true, static: true }, { propertyName: "groupHeaderTemplate", first: true, predicate: ["groupHeader"], descendants: true, static: true }, { propertyName: "toolbarTemplate", first: true, predicate: ["toolbar"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0 }); }
316
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.0", type: GanttUpper, inputs: { originItems: ["items", "originItems"], originGroups: ["groups", "originGroups"], originBaselineItems: ["baselineItems", "originBaselineItems"], viewType: "viewType", start: "start", end: "end", showTodayLine: "showTodayLine", draggable: "draggable", styles: "styles", showToolbar: "showToolbar", restrictToBounds: "restrictToBounds", toolbarOptions: "toolbarOptions", viewOptions: "viewOptions", linkOptions: "linkOptions", disabledLoadOnScroll: "disabledLoadOnScroll", selectable: "selectable", multiple: "multiple" }, outputs: { loadOnScroll: "loadOnScroll", dragStarted: "dragStarted", dragMoved: "dragMoved", dragEnded: "dragEnded", barClick: "barClick", viewChange: "viewChange", expandChange: "expandChange" }, host: { properties: { "class.gantt": "this.ganttClass" } }, queries: [{ propertyName: "barTemplate", first: true, predicate: ["bar"], descendants: true, static: true }, { propertyName: "rangeTemplate", first: true, predicate: ["range"], descendants: true, static: true }, { propertyName: "itemTemplate", first: true, predicate: ["item"], descendants: true, static: true }, { propertyName: "baselineTemplate", first: true, predicate: ["baseline"], descendants: true, static: true }, { propertyName: "groupTemplate", first: true, predicate: ["group"], descendants: true, static: true }, { propertyName: "groupHeaderTemplate", first: true, predicate: ["groupHeader"], descendants: true, static: true }, { propertyName: "toolbarTemplate", first: true, predicate: ["toolbar"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0 }); }
316
317
  }
317
318
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: GanttUpper, decorators: [{
318
319
  type: Directive
@@ -342,6 +343,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImpor
342
343
  type: Input
343
344
  }], showToolbar: [{
344
345
  type: Input
346
+ }], restrictToBounds: [{
347
+ type: Input
345
348
  }], toolbarOptions: [{
346
349
  type: Input
347
350
  }], viewOptions: [{
@@ -394,4 +397,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImpor
394
397
  args: ['class.gantt']
395
398
  }] } });
396
399
  export const GANTT_UPPER_TOKEN = new InjectionToken('GANTT_UPPER_TOKEN');
397
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQtdXBwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9nYW50dC9zcmMvZ2FudHQtdXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILEtBQUssRUFFTCxNQUFNLEVBQ04sWUFBWSxFQUNaLFlBQVksRUFFWixXQUFXLEVBSVgsY0FBYyxFQUNkLFNBQVMsRUFDVCxNQUFNLEVBSVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUdILGFBQWEsRUFHYixrQkFBa0IsRUFDbEIsaUJBQWlCLEVBSXBCLE1BQU0sU0FBUyxDQUFDO0FBRWpCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFlLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVELE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQWMsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFbkcsT0FBTyxFQUFFLG1CQUFtQixFQUFxQixhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBcUIseUJBQXlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFJaEYsTUFBTSxPQUFnQixVQUFVO0lBOEI1QixJQUFhLFdBQVcsQ0FBQyxPQUF5QjtRQUM5QyxJQUFJLENBQUMsWUFBWSxH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QUVJLGFBQWE7c0JBQXJELFlBQVk7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFQyxZQUFZO3NCQUFuRCxZQUFZO3VCQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRU0sZ0JBQWdCO3NCQUEzRCxZQUFZO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRUQsYUFBYTtzQkFBckQsWUFBWTt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUVRLG1CQUFtQjtzQkFBakUsWUFBWTt1QkFBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUVGLGVBQWU7c0JBQXpELFlBQVk7dUJBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkEwQ2IsVUFBVTtzQkFBckMsV0FBVzt1QkFBQyxhQUFhOztBQThROUIsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxjQUFjLENBQWEsbUJBQW1CLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgSW5wdXQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBOZ1pvbmUsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBJbmplY3Rpb25Ub2tlbixcbiAgICBEaXJlY3RpdmUsXG4gICAgSW5qZWN0LFxuICAgIE9uSW5pdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25DaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZnJvbSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsLCB0YWtlLCBza2lwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgICBHYW50dEl0ZW0sXG4gICAgR2FudHRHcm91cCxcbiAgICBHYW50dFZpZXdUeXBlLFxuICAgIEdhbnR0TG9hZE9uU2Nyb2xsRXZlbnQsXG4gICAgR2FudHREcmFnRXZlbnQsXG4gICAgR2FudHRHcm91cEludGVybmFsLFxuICAgIEdhbnR0SXRlbUludGVybmFsLFxuICAgIEdhbnR0QmFyQ2xpY2tFdmVudCxcbiAgICBHYW50dExpbmtEcmFnRXZlbnQsXG4gICAgR2FudHRUb29sYmFyT3B0aW9uc1xufSBmcm9tICcuL2NsYXNzJztcbmltcG9ydCB7IEdhbnR0VmlldywgR2FudHRWaWV3T3B0aW9ucyB9IGZyb20gJy4vdmlld3Mvdmlldyc7XG5pbXBvcnQgeyBjcmVhdGVWaWV3RmFjdG9yeSB9IGZyb20gJy4vdmlld3MvZmFjdG9yeSc7XG5pbXBvcnQgeyBHYW50dERhdGUgfSBmcm9tICcuL3V0aWxzL2RhdGUnO1xuaW1wb3J0IHsgR2FudHRTdHlsZXMsIGRlZmF1bHRTdHlsZXMgfSBmcm9tICcuL2dhbnR0LnN0eWxlcyc7XG5pbXBvcnQgeyB1bmlxQnksIGZsYXR0ZW4sIHJlY3Vyc2l2ZUl0ZW1zLCBnZXRGbGF0SXRlbXMsIERpY3Rpb25hcnksIGtleUJ5IH0gZnJvbSAnLi91dGlscy9oZWxwZXJzJztcbmltcG9ydCB7IEdhbnR0RHJhZ0NvbnRhaW5lciB9IGZyb20gJy4vZ2FudHQtZHJhZy1jb250YWluZXInO1xuaW1wb3J0IHsgR0FOVFRfR0xPQkFMX0NPTkZJRywgR2FudHRHbG9iYWxDb25maWcsIGRlZmF1bHRDb25maWcgfSBmcm9tICcuL2dhbnR0LmNvbmZpZyc7XG5pbXBvcnQgeyBHYW50dExpbmtPcHRpb25zIH0gZnJvbSAnLi9jbGFzcy9saW5rJztcbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IEdhbnR0QmFzZWxpbmVJdGVtLCBHYW50dEJhc2VsaW5lSXRlbUludGVybmFsIH0gZnJvbSAnLi9jbGFzcy9iYXNlbGluZSc7XG5pbXBvcnQgeyBOZ3hHYW50dFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS9nYW50dC10YWJsZS5jb21wb25lbnQnO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBHYW50dFVwcGVyIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1pbnB1dC1yZW5hbWVcbiAgICBASW5wdXQoJ2l0ZW1zJykgb3JpZ2luSXRlbXM6IEdhbnR0SXRlbVtdID0gW107XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0LXJlbmFtZVxuICAgIEBJbnB1dCgnZ3JvdXBzJykgb3JpZ2luR3JvdXBzOiBHYW50dEdyb3VwW10gPSBbXTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taW5wdXQtcmVuYW1lXG4gICAgQElucHV0KCdiYXNlbGluZUl0ZW1zJykgb3JpZ2luQmFzZWxpbmVJdGVtczogR2FudHRCYXNlbGluZUl0ZW1bXSA9IFtdO1xuXG4gICAgQElucHV0KCkgdmlld1R5cGU6IEdhbnR0Vmlld1R5cGUgPSBHYW50dFZpZXdUeXBlLm1vbnRoO1xuXG4gICAgQElucHV0KCkgc3RhcnQ6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpIGVuZDogbnVtYmVyO1xuXG4gICAgQElucHV0KCkgc2hvd1RvZGF5TGluZSA9IHRydWU7XG5cbiAgICBASW5wdXQoKSBkcmFnZ2FibGU6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSBzdHlsZXM6IEdhbnR0U3R5bGVzO1xuXG4gICAgQElucHV0KCkgc2hvd1Rvb2xiYXIgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHRvb2xiYXJPcHRpb25zOiBHYW50dFRvb2xiYXJPcHRpb25zID0ge1xuICAgICAgICB2aWV3VHlwZXM6IFtHYW50dFZpZXdUeXBlLmRheSwgR2FudHRWaWV3VHlwZS5tb250aCwgR2FudHRWaWV3VHlwZS55ZWFyXVxuICAgIH07XG5cbiAgICBASW5wdXQoKSB2aWV3T3B0aW9uczogR2FudHRWaWV3T3B0aW9ucyA9IHt9O1xuXG4gICAgQElucHV0KCkgc2V0IGxpbmtPcHRpb25zKG9wdGlvbnM6IEdhbnR0TGlua09wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5fbGlua09wdGlvbnMgPSBvcHRpb25zO1xuICAgIH1cblxuICAgIGdldCBsaW5rT3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRDb25maWcubGlua09wdGlvbnMsIHRoaXMuY29uZmlnLmxpbmtPcHRpb25zLCB0aGlzLl9saW5rT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgZGlzYWJsZWRMb2FkT25TY3JvbGw6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBzZWxlY3RhYmxlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0YWJsZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgICAgIGlmICh0aGlzLl9zZWxlY3RhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsID0gdGhpcy5pbml0U2VsZWN0aW9uTW9kZWwoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWw/LmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgc2VsZWN0YWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGFibGU7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBzZXQgbXVsdGlwbGUodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9tdWx0aXBsZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwgPSB0aGlzLmluaXRTZWxlY3Rpb25Nb2RlbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IG11bHRpcGxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbXVsdGlwbGU7XG4gICAgfVxuXG4gICAgQE91dHB1dCgpIGxvYWRPblNjcm9sbCA9IG5ldyBFdmVudEVtaXR0ZXI8R2FudHRMb2FkT25TY3JvbGxFdmVudD4oKTtcblxuICAgIEBPdXRwdXQoKSBkcmFnU3RhcnRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8R2FudHREcmFnRXZlbnQ+KCk7XG5cbiAgICBAT3V0cHV0KCkgZHJhZ01vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxHYW50dERyYWdFdmVudD4oKTtcblxuICAgIEBPdXRwdXQoKSBkcmFnRW5kZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbnR0RHJhZ0V2ZW50PigpO1xuXG4gICAgQE91dHB1dCgpIGJhckNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHYW50dEJhckNsaWNrRXZlbnQ+KCk7XG5cbiAgICBAT3V0cHV0KCkgdmlld0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8R2FudHRWaWV3PigpO1xuXG4gICAgQE91dHB1dCgpIGV4cGFuZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8R2FudHRJdGVtSW50ZXJuYWwgfCBHYW50dEdyb3VwSW50ZXJuYWw+KCk7XG5cbiAgICBAQ29udGVudENoaWxkKCdiYXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBiYXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBDb250ZW50Q2hpbGQoJ3JhbmdlJywgeyBzdGF0aWM6IHRydWUgfSkgcmFuZ2VUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBDb250ZW50Q2hpbGQoJ2l0ZW0nLCB7IHN0YXRpYzogdHJ1ZSB9KSBpdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAQ29udGVudENoaWxkKCdiYXNlbGluZScsIHsgc3RhdGljOiB0cnVlIH0pIGJhc2VsaW5lVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAQ29udGVudENoaWxkKCdncm91cCcsIHsgc3RhdGljOiB0cnVlIH0pIGdyb3VwVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAQ29udGVudENoaWxkKCdncm91cEhlYWRlcicsIHsgc3RhdGljOiB0cnVlIH0pIGdyb3VwSGVhZGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAQ29udGVudENoaWxkKCd0b29sYmFyJywgeyBzdGF0aWM6IHRydWUgfSkgdG9vbGJhclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgcHVibGljIGxpbmthYmxlOiBib29sZWFuO1xuXG4gICAgcHVibGljIGNvbXB1dGVBbGxSZWZzID0gdHJ1ZTtcblxuICAgIHB1YmxpYyBsaW5rRHJhZ0VuZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxHYW50dExpbmtEcmFnRXZlbnQ+KCk7XG5cbiAgICBwdWJsaWMgdmlldzogR2FudHRWaWV3O1xuXG4gICAgcHVibGljIGl0ZW1zOiBHYW50dEl0ZW1JbnRlcm5hbFtdID0gW107XG5cbiAgICBwdWJsaWMgZ3JvdXBzOiBHYW50dEdyb3VwSW50ZXJuYWxbXSA9IFtdO1xuXG4gICAgcHVibGljIGJhc2VsaW5lSXRlbXM6IEdhbnR0QmFzZWxpbmVJdGVtSW50ZXJuYWxbXSA9IFtdO1xuXG4gICAgcHVibGljIGJhc2VsaW5lSXRlbXNNYXA6IERpY3Rpb25hcnk8R2FudHRCYXNlbGluZUl0ZW1JbnRlcm5hbD4gPSB7fTtcblxuICAgIC8vIHB1YmxpYyB2aWV3Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxHYW50dFZpZXc+KCk7XG5cbiAgICBwdWJsaWMgZ2V0IGVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmlyc3RDaGFuZ2UgPSB0cnVlO1xuXG4gICAgcHVibGljIGRyYWdDb250YWluZXI6IEdhbnR0RHJhZ0NvbnRhaW5lcjtcblxuICAgIHB1YmxpYyB1bnN1YnNjcmliZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgcHVibGljIHNlbGVjdGlvbk1vZGVsOiBTZWxlY3Rpb25Nb2RlbDxzdHJpbmc+O1xuXG4gICAgcHVibGljIHRhYmxlPzogTmd4R2FudHRUYWJsZUNvbXBvbmVudDtcblxuICAgIHByaXZhdGUgZ3JvdXBzTWFwOiB7IFtrZXk6IHN0cmluZ106IEdhbnR0R3JvdXBJbnRlcm5hbCB9O1xuXG4gICAgcHJpdmF0ZSBfc2VsZWN0YWJsZSA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfbXVsdGlwbGUgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX2xpbmtPcHRpb25zOiBHYW50dExpbmtPcHRpb25zO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5nYW50dCcpIGdhbnR0Q2xhc3MgPSB0cnVlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcHJvdGVjdGVkIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByb3RlY3RlZCBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgQEluamVjdChHQU5UVF9HTE9CQUxfQ09ORklHKSBwdWJsaWMgY29uZmlnOiBHYW50dEdsb2JhbENvbmZpZ1xuICAgICkge31cblxuICAgIHByaXZhdGUgY3JlYXRlVmlldygpIHtcbiAgICAgICAgY29uc3Qgdmlld0RhdGUgPSB0aGlzLmdldFZpZXdEYXRlKCk7XG4gICAgICAgIHRoaXMudmlldyA9IGNyZWF0ZVZpZXdGYWN0b3J5KHRoaXMudmlld1R5cGUsIHZpZXdEYXRlLnN0YXJ0LCB2aWV3RGF0ZS5lbmQsIHRoaXMudmlld09wdGlvbnMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBHcm91cHMoKSB7XG4gICAgICAgIGNvbnN0IGNvbGxhcHNlZElkcyA9IHRoaXMuZ3JvdXBzLmZpbHRlcigoZ3JvdXApID0+IGdyb3VwLmV4cGFuZGVkID09PSBmYWxzZSkubWFwKChncm91cCkgPT4gZ3JvdXAuaWQpO1xuICAgICAgICB0aGlzLmdyb3Vwc01hcCA9IHt9O1xuICAgICAgICB0aGlzLmdyb3VwcyA9IFtdO1xuICAgICAgICB0aGlzLm9yaWdpbkdyb3Vwcy5mb3JFYWNoKChvcmlnaW4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gbmV3IEdhbnR0R3JvdXBJbnRlcm5hbChvcmlnaW4pO1xuICAgICAgICAgICAgZ3JvdXAuZXhwYW5kZWQgPSAhY29sbGFwc2VkSWRzLmluY2x1ZGVzKGdyb3VwLmlkKTtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzTWFwW2dyb3VwLmlkXSA9IGdyb3VwO1xuICAgICAgICAgICAgdGhpcy5ncm91cHMucHVzaChncm91cCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBJdGVtcygpIHtcbiAgICAgICAgdGhpcy5vcmlnaW5JdGVtcyA9IHVuaXFCeSh0aGlzLm9yaWdpbkl0ZW1zLCAnaWQnKTtcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5ncm91cHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5vcmlnaW5JdGVtcy5mb3JFYWNoKChvcmlnaW4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBzTWFwW29yaWdpbi5ncm91cF9pZF07XG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBuZXcgR2FudHRJdGVtSW50ZXJuYWwob3JpZ2luLCAwLCB7IGZpbGxEYXlzOiB0aGlzLnZpZXcub3B0aW9ucz8uZmlsbERheXMgfSk7XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwLml0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9yaWdpbkl0ZW1zLmZvckVhY2goKG9yaWdpbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBuZXcgR2FudHRJdGVtSW50ZXJuYWwob3JpZ2luLCAwLCB7IGZpbGxEYXlzOiB0aGlzLnZpZXcub3B0aW9ucz8uZmlsbERheXMgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwQmFzZWxpbmVJdGVtcygpIHtcbiAgICAgICAgdGhpcy5vcmlnaW5CYXNlbGluZUl0ZW1zID0gdW5pcUJ5KHRoaXMub3JpZ2luQmFzZWxpbmVJdGVtcywgJ2lkJyk7XG4gICAgICAgIHRoaXMuYmFzZWxpbmVJdGVtcyA9IFtdO1xuXG4gICAgICAgIHRoaXMub3JpZ2luQmFzZWxpbmVJdGVtcy5mb3JFYWNoKChvcmlnaW4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBuZXcgR2FudHRCYXNlbGluZUl0ZW1JbnRlcm5hbChvcmlnaW4pO1xuICAgICAgICAgICAgdGhpcy5iYXNlbGluZUl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYmFzZWxpbmVJdGVtc01hcCA9IGtleUJ5KHRoaXMuYmFzZWxpbmVJdGVtcywgJ2lkJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cEV4cGFuZGVkU3RhdGUoKSB7XG4gICAgICAgIHRoaXMub3JpZ2luSXRlbXMgPSB1bmlxQnkodGhpcy5vcmlnaW5JdGVtcywgJ2lkJyk7XG4gICAgICAgIGxldCBpdGVtczogR2FudHRJdGVtSW50ZXJuYWxbXSA9IFtdO1xuICAgICAgICBjb25zdCBmbGF0T3JpZ2luSXRlbXMgPSBnZXRGbGF0SXRlbXModGhpcy5vcmlnaW5JdGVtcyk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaXRlbXMgPSByZWN1cnNpdmVJdGVtcyh0aGlzLml0ZW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGl0ZW1zID0gZmxhdHRlbih0aGlzLmdyb3Vwcy5tYXAoKGdyb3VwKSA9PiByZWN1cnNpdmVJdGVtcyhncm91cC5pdGVtcykpKTtcbiAgICAgICAgfVxuICAgICAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS5vcmlnaW4uZXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdJdGVtID0gZmxhdE9yaWdpbkl0ZW1zLmZpbmQoKG9yaWdpbkl0ZW0pID0+IG9yaWdpbkl0ZW0uaWQgPT09IGl0ZW0uaWQpO1xuICAgICAgICAgICAgICAgIGlmIChuZXdJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdJdGVtLmV4cGFuZGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0l0ZW0uZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFZpZXdEYXRlKCkge1xuICAgICAgICBsZXQgc3RhcnQgPSB0aGlzLnN0YXJ0O1xuICAgICAgICBsZXQgZW5kID0gdGhpcy5lbmQ7XG4gICAgICAgIGlmICghdGhpcy5zdGFydCB8fCAhdGhpcy5lbmQpIHtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luSXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLnN0YXJ0ICYmICF0aGlzLnN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gc3RhcnQgPyBNYXRoLm1pbihzdGFydCwgaXRlbS5zdGFydCkgOiBpdGVtLnN0YXJ0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5lbmQgJiYgIXRoaXMuZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IGVuZCA/IE1hdGgubWF4KGVuZCwgaXRlbS5lbmQpIDogaXRlbS5lbmQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICAgICAgZGF0ZTogbmV3IEdhbnR0RGF0ZShzdGFydCksXG4gICAgICAgICAgICAgICAgaXNDdXN0b206IHRoaXMuc3RhcnQgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmQ6IHtcbiAgICAgICAgICAgICAgICBkYXRlOiBuZXcgR2FudHREYXRlKGVuZCksXG4gICAgICAgICAgICAgICAgaXNDdXN0b206IHRoaXMuZW5kID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY29tcHV0ZVJlZnMoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbXB1dGVBbGxSZWZzKSB7XG4gICAgICAgICAgICB0aGlzLmdyb3Vwcy5mb3JFYWNoKChncm91cCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwSXRlbXMgPSByZWN1cnNpdmVJdGVtcyhncm91cC5pdGVtcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wdXRlSXRlbXNSZWZzKC4uLmdyb3VwSXRlbXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBpdGVtcyA9IHJlY3Vyc2l2ZUl0ZW1zKHRoaXMuaXRlbXMpO1xuICAgICAgICAgICAgdGhpcy5jb21wdXRlSXRlbXNSZWZzKC4uLml0ZW1zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdFNlbGVjdGlvbk1vZGVsKCkge1xuICAgICAgICByZXR1cm4gbmV3IFNlbGVjdGlvbk1vZGVsKHRoaXMubXVsdGlwbGUsIFtdKTtcbiAgICB9XG5cbiAgICBleHBhbmRHcm91cHMoZXhwYW5kZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5ncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcbiAgICAgICAgICAgIGdyb3VwLnNldEV4cGFuZChleHBhbmRlZCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmV4cGFuZENoYW5nZS5uZXh0KG51bGwpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc3R5bGVzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFN0eWxlcywgdGhpcy5zdHlsZXMpO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLmRhdGVGb3JtYXQgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0Q29uZmlnLmRhdGVGb3JtYXQsIHRoaXMuY29uZmlnLmRhdGVGb3JtYXQsIHRoaXMudmlld09wdGlvbnMuZGF0ZUZvcm1hdCk7XG4gICAgICAgIHRoaXMuY3JlYXRlVmlldygpO1xuICAgICAgICB0aGlzLnNldHVwR3JvdXBzKCk7XG4gICAgICAgIHRoaXMuc2V0dXBJdGVtcygpO1xuICAgICAgICB0aGlzLmNvbXB1dGVSZWZzKCk7XG4gICAgICAgIHRoaXMuc2V0dXBCYXNlbGluZUl0ZW1zKCk7XG4gICAgICAgIHRoaXMuY29tcHV0ZUl0ZW1zUmVmcyguLi50aGlzLmJhc2VsaW5lSXRlbXMpO1xuICAgICAgICB0aGlzLmluaXRTZWxlY3Rpb25Nb2RlbCgpO1xuICAgICAgICB0aGlzLmZpcnN0Q2hhbmdlID0gZmFsc2U7XG5cbiAgICAgICAgLy8gTm90ZTogdGhlIHpvbmUgbWF5IGJlIG5vb3BlZCB0aHJvdWdoIGBCb290c3RyYXBPcHRpb25zYCB3aGVuIGJvb3RzdHJhcHBpbmcgdGhlIHJvb3QgbW9kdWxlLiBUaGlzIG1lYW5zXG4gICAgICAgIC8vIHRoZSBgb25TdGFibGVgIHdpbGwgbmV2ZXIgZW1pdCBhbnkgdmFsdWUuXG4gICAgICAgIGNvbnN0IG9uU3RhYmxlJCA9IHRoaXMubmdab25lLmlzU3RhYmxlID8gZnJvbShQcm9taXNlLnJlc29sdmUoKSkgOiB0aGlzLm5nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMSkpO1xuICAgICAgICAvLyBOb3JtYWxseSB0aGlzIGlzbid0IGluIHRoZSB6b25lLCBidXQgaXQgY2FuIGNhdXNlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb25zIGZvciBhcHBzXG4gICAgICAgIC8vIHVzaW5nIGB6b25lLXBhdGNoLXJ4anNgIGJlY2F1c2UgaXQnbGwgdHJpZ2dlciBhIGNoYW5nZSBkZXRlY3Rpb24gd2hlbiBpdCB1bnN1YnNjcmliZXMuXG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIG9uU3RhYmxlJC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLm9wYWNpdHkgPSAnMSc7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlzYWJsZWRMb2FkT25TY3JvbGwgPSB0aGlzLmRpc2FibGVkTG9hZE9uU2Nyb2xsO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ0NvbnRhaW5lci5kcmFnU3RhcnRlZC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlZExvYWRPblNjcm9sbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhZ1N0YXJ0ZWQuZW1pdChldmVudCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdDb250YWluZXIuZHJhZ01vdmVkLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYWdNb3ZlZC5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ0NvbnRhaW5lci5kcmFnRW5kZWQucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRMb2FkT25TY3JvbGwgPSBkaXNhYmxlZExvYWRPblNjcm9sbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmFnRW5kZWQuZW1pdChldmVudCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy52aWV3LnN0YXJ0JC5waXBlKHNraXAoMSksIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbXB1dGVSZWZzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICBpZiAoY2hhbmdlcy52aWV3VHlwZSAmJiBjaGFuZ2VzLnZpZXdUeXBlLmN1cnJlbnRWYWx1ZSAmJiBjaGFuZ2VzLnZpZXdUeXBlLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlcy52aWV3VHlwZS5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VWaWV3KGNoYW5nZXMudmlld1R5cGUuY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjaGFuZ2VzLnZpZXdPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VWaWV3KHRoaXMudmlld1R5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNoYW5nZXMub3JpZ2luSXRlbXMgfHwgY2hhbmdlcy5vcmlnaW5Hcm91cHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHVwRXhwYW5kZWRTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dXBHcm91cHMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHVwSXRlbXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXB1dGVSZWZzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjaGFuZ2VzLm9yaWdpbkJhc2VsaW5lSXRlbXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHVwQmFzZWxpbmVJdGVtcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcHV0ZUl0ZW1zUmVmcyguLi50aGlzLmJhc2VsaW5lSXRlbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUkLm5leHQoKTtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBjb21wdXRlSXRlbXNSZWZzKC4uLml0ZW1zOiBHYW50dEl0ZW1JbnRlcm5hbFtdIHwgR2FudHRCYXNlbGluZUl0ZW1JbnRlcm5hbFtdKSB7XG4gICAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGl0ZW0udXBkYXRlUmVmcyh7XG4gICAgICAgICAgICAgICAgd2lkdGg6IGl0ZW0uc3RhcnQgJiYgaXRlbS5lbmQgPyB0aGlzLnZpZXcuZ2V0RGF0ZVJhbmdlV2lkdGgoaXRlbS5zdGFydC5zdGFydE9mRGF5KCksIGl0ZW0uZW5kLmVuZE9mRGF5KCkpIDogMCxcbiAgICAgICAgICAgICAgICB4OiBpdGVtLnN0YXJ0ID8gdGhpcy52aWV3LmdldFhQb2ludEJ5RGF0ZShpdGVtLnN0YXJ0KSA6IDAsXG4gICAgICAgICAgICAgICAgeTogKHRoaXMuc3R5bGVzLmxpbmVIZWlnaHQgLSB0aGlzLnN0eWxlcy5iYXJIZWlnaHQpIC8gMiAtIDFcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0cmFja0J5KGluZGV4OiBudW1iZXIsIGl0ZW06IEdhbnR0R3JvdXBJbnRlcm5hbCB8IEdhbnR0SXRlbUludGVybmFsKSB7XG4gICAgICAgIHJldHVybiBpdGVtLmlkIHx8IGluZGV4O1xuICAgIH1cblxuICAgIGRldGVjdENoYW5nZXMoKSB7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvLyBwdWJsaWMgZnVuY3Rpb25zXG5cbiAgICBleHBhbmRHcm91cChncm91cDogR2FudHRHcm91cEludGVybmFsKSB7XG4gICAgICAgIGdyb3VwLnNldEV4cGFuZCghZ3JvdXAuZXhwYW5kZWQpO1xuICAgICAgICB0aGlzLmV4cGFuZENoYW5nZS5lbWl0KGdyb3VwKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIGV4cGFuZEFsbCgpIHtcbiAgICAgICAgdGhpcy5leHBhbmRHcm91cHModHJ1ZSk7XG4gICAgfVxuXG4gICAgY29sbGFwc2VBbGwoKSB7XG4gICAgICAgIHRoaXMuZXhwYW5kR3JvdXBzKGZhbHNlKTtcbiAgICB9XG5cbiAgICBnZXRHYW50dEl0ZW0oaWQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRHYW50dEl0ZW1zKFtpZF0pWzBdIHx8IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0R2FudHRJdGVtcyhpZHM6IHN0cmluZ1tdKSB7XG4gICAgICAgIGxldCBpdGVtczogR2FudHRJdGVtSW50ZXJuYWxbXSA9IFtdO1xuICAgICAgICBpZiAodGhpcy5pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpdGVtcyA9IHJlY3Vyc2l2ZUl0ZW1zKHRoaXMuaXRlbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXRlbXMgPSBmbGF0dGVuKHRoaXMuZ3JvdXBzLm1hcCgoZ3JvdXApID0+IHJlY3Vyc2l2ZUl0ZW1zKGdyb3VwLml0ZW1zKSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGlkcy5pbmNsdWRlcyhpdGVtLmlkKSk7XG4gICAgfVxuXG4gICAgaXNTZWxlY3RlZChpZDogc3RyaW5nKSB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbk1vZGVsLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKGlkKTtcbiAgICB9XG5cbiAgICBjaGFuZ2VWaWV3KHR5cGU6IEdhbnR0Vmlld1R5cGUpIHtcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMuY3JlYXRlVmlldygpO1xuICAgICAgICB0aGlzLnNldHVwR3JvdXBzKCk7XG4gICAgICAgIHRoaXMuc2V0dXBJdGVtcygpO1xuICAgICAgICB0aGlzLmNvbXB1dGVSZWZzKCk7XG4gICAgICAgIHRoaXMuc2V0dXBCYXNlbGluZUl0ZW1zKCk7XG4gICAgICAgIHRoaXMuY29tcHV0ZUl0ZW1zUmVmcyguLi50aGlzLmJhc2VsaW5lSXRlbXMpO1xuICAgICAgICB0aGlzLnZpZXdDaGFuZ2UuZW1pdCh0aGlzLnZpZXcpO1xuICAgIH1cblxuICAgIHJlcmVuZGVyVmlldygpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VWaWV3KHRoaXMudmlld1R5cGUpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IEdBTlRUX1VQUEVSX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPEdhbnR0VXBwZXI+KCdHQU5UVF9VUFBFUl9UT0tFTicpO1xuIl19
400
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQtdXBwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9nYW50dC9zcmMvZ2FudHQtdXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILEtBQUssRUFFTCxNQUFNLEVBQ04sWUFBWSxFQUNaLFlBQVksRUFFWixXQUFXLEVBSVgsY0FBYyxFQUNkLFNBQVMsRUFDVCxNQUFNLEVBSVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUdILGFBQWEsRUFHYixrQkFBa0IsRUFDbEIsaUJBQWlCLEVBSXBCLE1BQU0sU0FBUyxDQUFDO0FBRWpCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFlLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVELE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQWMsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFbkcsT0FBTyxFQUFFLG1CQUFtQixFQUFxQixhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBcUIseUJBQXlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFJaEYsTUFBTSxPQUFnQixVQUFVO0lBZ0M1QixJQUFhLFdBQVcsQ0FBQyxPQUF5QjtRQUM5QyxJQUFJLENBQUMsWUFBWSxH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QUFqRCxZQUFZO3VCQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRUksYUFBYTtzQkFBckQsWUFBWTt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUVDLFlBQVk7c0JBQW5ELFlBQVk7dUJBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFTSxnQkFBZ0I7c0JBQTNELFlBQVk7dUJBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFRCxhQUFhO3NCQUFyRCxZQUFZO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRVEsbUJBQW1CO3NCQUFqRSxZQUFZO3VCQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRUYsZUFBZTtzQkFBekQsWUFBWTt1QkFBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQTBDYixVQUFVO3NCQUFyQyxXQUFXO3VCQUFDLGFBQWE7O0FBOFE5QixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLGNBQWMsQ0FBYSxtQkFBbUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBJbnB1dCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIE5nWm9uZSxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIEluamVjdGlvblRva2VuLFxuICAgIERpcmVjdGl2ZSxcbiAgICBJbmplY3QsXG4gICAgT25Jbml0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmcm9tLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwsIHRha2UsIHNraXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICAgIEdhbnR0SXRlbSxcbiAgICBHYW50dEdyb3VwLFxuICAgIEdhbnR0Vmlld1R5cGUsXG4gICAgR2FudHRMb2FkT25TY3JvbGxFdmVudCxcbiAgICBHYW50dERyYWdFdmVudCxcbiAgICBHYW50dEdyb3VwSW50ZXJuYWwsXG4gICAgR2FudHRJdGVtSW50ZXJuYWwsXG4gICAgR2FudHRCYXJDbGlja0V2ZW50LFxuICAgIEdhbnR0TGlua0RyYWdFdmVudCxcbiAgICBHYW50dFRvb2xiYXJPcHRpb25zXG59IGZyb20gJy4vY2xhc3MnO1xuaW1wb3J0IHsgR2FudHRWaWV3LCBHYW50dFZpZXdPcHRpb25zIH0gZnJvbSAnLi92aWV3cy92aWV3JztcbmltcG9ydCB7IGNyZWF0ZVZpZXdGYWN0b3J5IH0gZnJvbSAnLi92aWV3cy9mYWN0b3J5JztcbmltcG9ydCB7IEdhbnR0RGF0ZSB9IGZyb20gJy4vdXRpbHMvZGF0ZSc7XG5pbXBvcnQgeyBHYW50dFN0eWxlcywgZGVmYXVsdFN0eWxlcyB9IGZyb20gJy4vZ2FudHQuc3R5bGVzJztcbmltcG9ydCB7IHVuaXFCeSwgZmxhdHRlbiwgcmVjdXJzaXZlSXRlbXMsIGdldEZsYXRJdGVtcywgRGljdGlvbmFyeSwga2V5QnkgfSBmcm9tICcuL3V0aWxzL2hlbHBlcnMnO1xuaW1wb3J0IHsgR2FudHREcmFnQ29udGFpbmVyIH0gZnJvbSAnLi9nYW50dC1kcmFnLWNvbnRhaW5lcic7XG5pbXBvcnQgeyBHQU5UVF9HTE9CQUxfQ09ORklHLCBHYW50dEdsb2JhbENvbmZpZywgZGVmYXVsdENvbmZpZyB9IGZyb20gJy4vZ2FudHQuY29uZmlnJztcbmltcG9ydCB7IEdhbnR0TGlua09wdGlvbnMgfSBmcm9tICcuL2NsYXNzL2xpbmsnO1xuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgR2FudHRCYXNlbGluZUl0ZW0sIEdhbnR0QmFzZWxpbmVJdGVtSW50ZXJuYWwgfSBmcm9tICcuL2NsYXNzL2Jhc2VsaW5lJztcbmltcG9ydCB7IE5neEdhbnR0VGFibGVDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlL2dhbnR0LXRhYmxlLmNvbXBvbmVudCc7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEdhbnR0VXBwZXIgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0LXJlbmFtZVxuICAgIEBJbnB1dCgnaXRlbXMnKSBvcmlnaW5JdGVtczogR2FudHRJdGVtW10gPSBbXTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taW5wdXQtcmVuYW1lXG4gICAgQElucHV0KCdncm91cHMnKSBvcmlnaW5Hcm91cHM6IEdhbnR0R3JvdXBbXSA9IFtdO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1pbnB1dC1yZW5hbWVcbiAgICBASW5wdXQoJ2Jhc2VsaW5lSXRlbXMnKSBvcmlnaW5CYXNlbGluZUl0ZW1zOiBHYW50dEJhc2VsaW5lSXRlbVtdID0gW107XG5cbiAgICBASW5wdXQoKSB2aWV3VHlwZTogR2FudHRWaWV3VHlwZSA9IEdhbnR0Vmlld1R5cGUubW9udGg7XG5cbiAgICBASW5wdXQoKSBzdGFydDogbnVtYmVyO1xuXG4gICAgQElucHV0KCkgZW5kOiBudW1iZXI7XG5cbiAgICBASW5wdXQoKSBzaG93VG9kYXlMaW5lID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpIGRyYWdnYWJsZTogYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpIHN0eWxlczogR2FudHRTdHlsZXM7XG5cbiAgICBASW5wdXQoKSBzaG93VG9vbGJhciA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgcmVzdHJpY3RUb0JvdW5kcyA9IHRydWU7XG5cbiAgICBASW5wdXQoKSB0b29sYmFyT3B0aW9uczogR2FudHRUb29sYmFyT3B0aW9ucyA9IHtcbiAgICAgICAgdmlld1R5cGVzOiBbR2FudHRWaWV3VHlwZS5kYXksIEdhbnR0Vmlld1R5cGUubW9udGgsIEdhbnR0Vmlld1R5cGUueWVhcl1cbiAgICB9O1xuXG4gICAgQElucHV0KCkgdmlld09wdGlvbnM6IEdhbnR0Vmlld09wdGlvbnMgPSB7fTtcblxuICAgIEBJbnB1dCgpIHNldCBsaW5rT3B0aW9ucyhvcHRpb25zOiBHYW50dExpbmtPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX2xpbmtPcHRpb25zID0gb3B0aW9ucztcbiAgICB9XG5cbiAgICBnZXQgbGlua09wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0Q29uZmlnLmxpbmtPcHRpb25zLCB0aGlzLmNvbmZpZy5saW5rT3B0aW9ucywgdGhpcy5fbGlua09wdGlvbnMpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIGRpc2FibGVkTG9hZE9uU2Nyb2xsOiBib29sZWFuO1xuXG4gICAgQElucHV0KClcbiAgICBzZXQgc2VsZWN0YWJsZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGFibGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5fc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbCA9IHRoaXMuaW5pdFNlbGVjdGlvbk1vZGVsKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsPy5jbGVhcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHNlbGVjdGFibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RhYmxlO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IG11bHRpcGxlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5fbXVsdGlwbGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsID0gdGhpcy5pbml0U2VsZWN0aW9uTW9kZWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBtdWx0aXBsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX211bHRpcGxlO1xuICAgIH1cblxuICAgIEBPdXRwdXQoKSBsb2FkT25TY3JvbGwgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbnR0TG9hZE9uU2Nyb2xsRXZlbnQ+KCk7XG5cbiAgICBAT3V0cHV0KCkgZHJhZ1N0YXJ0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbnR0RHJhZ0V2ZW50PigpO1xuXG4gICAgQE91dHB1dCgpIGRyYWdNb3ZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8R2FudHREcmFnRXZlbnQ+KCk7XG5cbiAgICBAT3V0cHV0KCkgZHJhZ0VuZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxHYW50dERyYWdFdmVudD4oKTtcblxuICAgIEBPdXRwdXQoKSBiYXJDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8R2FudHRCYXJDbGlja0V2ZW50PigpO1xuXG4gICAgQE91dHB1dCgpIHZpZXdDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbnR0Vmlldz4oKTtcblxuICAgIEBPdXRwdXQoKSBleHBhbmRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbnR0SXRlbUludGVybmFsIHwgR2FudHRHcm91cEludGVybmFsPigpO1xuXG4gICAgQENvbnRlbnRDaGlsZCgnYmFyJywgeyBzdGF0aWM6IHRydWUgfSkgYmFyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAQ29udGVudENoaWxkKCdyYW5nZScsIHsgc3RhdGljOiB0cnVlIH0pIHJhbmdlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAQ29udGVudENoaWxkKCdpdGVtJywgeyBzdGF0aWM6IHRydWUgfSkgaXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQENvbnRlbnRDaGlsZCgnYmFzZWxpbmUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBiYXNlbGluZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQENvbnRlbnRDaGlsZCgnZ3JvdXAnLCB7IHN0YXRpYzogdHJ1ZSB9KSBncm91cFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQENvbnRlbnRDaGlsZCgnZ3JvdXBIZWFkZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBncm91cEhlYWRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQENvbnRlbnRDaGlsZCgndG9vbGJhcicsIHsgc3RhdGljOiB0cnVlIH0pIHRvb2xiYXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIHB1YmxpYyBsaW5rYWJsZTogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBjb21wdXRlQWxsUmVmcyA9IHRydWU7XG5cbiAgICBwdWJsaWMgbGlua0RyYWdFbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8R2FudHRMaW5rRHJhZ0V2ZW50PigpO1xuXG4gICAgcHVibGljIHZpZXc6IEdhbnR0VmlldztcblxuICAgIHB1YmxpYyBpdGVtczogR2FudHRJdGVtSW50ZXJuYWxbXSA9IFtdO1xuXG4gICAgcHVibGljIGdyb3VwczogR2FudHRHcm91cEludGVybmFsW10gPSBbXTtcblxuICAgIHB1YmxpYyBiYXNlbGluZUl0ZW1zOiBHYW50dEJhc2VsaW5lSXRlbUludGVybmFsW10gPSBbXTtcblxuICAgIHB1YmxpYyBiYXNlbGluZUl0ZW1zTWFwOiBEaWN0aW9uYXJ5PEdhbnR0QmFzZWxpbmVJdGVtSW50ZXJuYWw+ID0ge307XG5cbiAgICAvLyBwdWJsaWMgdmlld0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8R2FudHRWaWV3PigpO1xuXG4gICAgcHVibGljIGdldCBlbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIGZpcnN0Q2hhbmdlID0gdHJ1ZTtcblxuICAgIHB1YmxpYyBkcmFnQ29udGFpbmVyOiBHYW50dERyYWdDb250YWluZXI7XG5cbiAgICBwdWJsaWMgdW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIHB1YmxpYyBzZWxlY3Rpb25Nb2RlbDogU2VsZWN0aW9uTW9kZWw8c3RyaW5nPjtcblxuICAgIHB1YmxpYyB0YWJsZT86IE5neEdhbnR0VGFibGVDb21wb25lbnQ7XG5cbiAgICBwcml2YXRlIGdyb3Vwc01hcDogeyBba2V5OiBzdHJpbmddOiBHYW50dEdyb3VwSW50ZXJuYWwgfTtcblxuICAgIHByaXZhdGUgX3NlbGVjdGFibGUgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX211bHRpcGxlID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9saW5rT3B0aW9uczogR2FudHRMaW5rT3B0aW9ucztcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZ2FudHQnKSBnYW50dENsYXNzID0gdHJ1ZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIHByb3RlY3RlZCBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcm90ZWN0ZWQgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIEBJbmplY3QoR0FOVFRfR0xPQkFMX0NPTkZJRykgcHVibGljIGNvbmZpZzogR2FudHRHbG9iYWxDb25maWdcbiAgICApIHt9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVZpZXcoKSB7XG4gICAgICAgIGNvbnN0IHZpZXdEYXRlID0gdGhpcy5nZXRWaWV3RGF0ZSgpO1xuICAgICAgICB0aGlzLnZpZXcgPSBjcmVhdGVWaWV3RmFjdG9yeSh0aGlzLnZpZXdUeXBlLCB2aWV3RGF0ZS5zdGFydCwgdmlld0RhdGUuZW5kLCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwR3JvdXBzKCkge1xuICAgICAgICBjb25zdCBjb2xsYXBzZWRJZHMgPSB0aGlzLmdyb3Vwcy5maWx0ZXIoKGdyb3VwKSA9PiBncm91cC5leHBhbmRlZCA9PT0gZmFsc2UpLm1hcCgoZ3JvdXApID0+IGdyb3VwLmlkKTtcbiAgICAgICAgdGhpcy5ncm91cHNNYXAgPSB7fTtcbiAgICAgICAgdGhpcy5ncm91cHMgPSBbXTtcbiAgICAgICAgdGhpcy5vcmlnaW5Hcm91cHMuZm9yRWFjaCgob3JpZ2luKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBncm91cCA9IG5ldyBHYW50dEdyb3VwSW50ZXJuYWwob3JpZ2luKTtcbiAgICAgICAgICAgIGdyb3VwLmV4cGFuZGVkID0gIWNvbGxhcHNlZElkcy5pbmNsdWRlcyhncm91cC5pZCk7XG4gICAgICAgICAgICB0aGlzLmdyb3Vwc01hcFtncm91cC5pZF0gPSBncm91cDtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzLnB1c2goZ3JvdXApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwSXRlbXMoKSB7XG4gICAgICAgIHRoaXMub3JpZ2luSXRlbXMgPSB1bmlxQnkodGhpcy5vcmlnaW5JdGVtcywgJ2lkJyk7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luSXRlbXMuZm9yRWFjaCgob3JpZ2luKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3Vwc01hcFtvcmlnaW4uZ3JvdXBfaWRdO1xuICAgICAgICAgICAgICAgIGlmIChncm91cCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gbmV3IEdhbnR0SXRlbUludGVybmFsKG9yaWdpbiwgMCwgeyBmaWxsRGF5czogdGhpcy52aWV3Lm9wdGlvbnM/LmZpbGxEYXlzIH0pO1xuICAgICAgICAgICAgICAgICAgICBncm91cC5pdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vcmlnaW5JdGVtcy5mb3JFYWNoKChvcmlnaW4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gbmV3IEdhbnR0SXRlbUludGVybmFsKG9yaWdpbiwgMCwgeyBmaWxsRGF5czogdGhpcy52aWV3Lm9wdGlvbnM/LmZpbGxEYXlzIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cEJhc2VsaW5lSXRlbXMoKSB7XG4gICAgICAgIHRoaXMub3JpZ2luQmFzZWxpbmVJdGVtcyA9IHVuaXFCeSh0aGlzLm9yaWdpbkJhc2VsaW5lSXRlbXMsICdpZCcpO1xuICAgICAgICB0aGlzLmJhc2VsaW5lSXRlbXMgPSBbXTtcblxuICAgICAgICB0aGlzLm9yaWdpbkJhc2VsaW5lSXRlbXMuZm9yRWFjaCgob3JpZ2luKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gbmV3IEdhbnR0QmFzZWxpbmVJdGVtSW50ZXJuYWwob3JpZ2luKTtcbiAgICAgICAgICAgIHRoaXMuYmFzZWxpbmVJdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmJhc2VsaW5lSXRlbXNNYXAgPSBrZXlCeSh0aGlzLmJhc2VsaW5lSXRlbXMsICdpZCcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBFeHBhbmRlZFN0YXRlKCkge1xuICAgICAgICB0aGlzLm9yaWdpbkl0ZW1zID0gdW5pcUJ5KHRoaXMub3JpZ2luSXRlbXMsICdpZCcpO1xuICAgICAgICBsZXQgaXRlbXM6IEdhbnR0SXRlbUludGVybmFsW10gPSBbXTtcbiAgICAgICAgY29uc3QgZmxhdE9yaWdpbkl0ZW1zID0gZ2V0RmxhdEl0ZW1zKHRoaXMub3JpZ2luSXRlbXMpO1xuXG4gICAgICAgIGlmICh0aGlzLml0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGl0ZW1zID0gcmVjdXJzaXZlSXRlbXModGhpcy5pdGVtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpdGVtcyA9IGZsYXR0ZW4odGhpcy5ncm91cHMubWFwKChncm91cCkgPT4gcmVjdXJzaXZlSXRlbXMoZ3JvdXAuaXRlbXMpKSk7XG4gICAgICAgIH1cbiAgICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0ub3JpZ2luLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3SXRlbSA9IGZsYXRPcmlnaW5JdGVtcy5maW5kKChvcmlnaW5JdGVtKSA9PiBvcmlnaW5JdGVtLmlkID09PSBpdGVtLmlkKTtcbiAgICAgICAgICAgICAgICBpZiAobmV3SXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV3SXRlbS5leHBhbmRlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdJdGVtLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWaWV3RGF0ZSgpIHtcbiAgICAgICAgbGV0IHN0YXJ0ID0gdGhpcy5zdGFydDtcbiAgICAgICAgbGV0IGVuZCA9IHRoaXMuZW5kO1xuICAgICAgICBpZiAoIXRoaXMuc3RhcnQgfHwgIXRoaXMuZW5kKSB7XG4gICAgICAgICAgICB0aGlzLm9yaWdpbkl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5zdGFydCAmJiAhdGhpcy5zdGFydCkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHN0YXJ0ID8gTWF0aC5taW4oc3RhcnQsIGl0ZW0uc3RhcnQpIDogaXRlbS5zdGFydDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uZW5kICYmICF0aGlzLmVuZCkge1xuICAgICAgICAgICAgICAgICAgICBlbmQgPSBlbmQgPyBNYXRoLm1heChlbmQsIGl0ZW0uZW5kKSA6IGl0ZW0uZW5kO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGFydDoge1xuICAgICAgICAgICAgICAgIGRhdGU6IG5ldyBHYW50dERhdGUoc3RhcnQpLFxuICAgICAgICAgICAgICAgIGlzQ3VzdG9tOiB0aGlzLnN0YXJ0ID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5kOiB7XG4gICAgICAgICAgICAgICAgZGF0ZTogbmV3IEdhbnR0RGF0ZShlbmQpLFxuICAgICAgICAgICAgICAgIGlzQ3VzdG9tOiB0aGlzLmVuZCA/IHRydWUgOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNvbXB1dGVSZWZzKCkge1xuICAgICAgICBpZiAodGhpcy5jb21wdXRlQWxsUmVmcykge1xuICAgICAgICAgICAgdGhpcy5ncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cEl0ZW1zID0gcmVjdXJzaXZlSXRlbXMoZ3JvdXAuaXRlbXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcHV0ZUl0ZW1zUmVmcyguLi5ncm91cEl0ZW1zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgaXRlbXMgPSByZWN1cnNpdmVJdGVtcyh0aGlzLml0ZW1zKTtcbiAgICAgICAgICAgIHRoaXMuY29tcHV0ZUl0ZW1zUmVmcyguLi5pdGVtcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRTZWxlY3Rpb25Nb2RlbCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3Rpb25Nb2RlbCh0aGlzLm11bHRpcGxlLCBbXSk7XG4gICAgfVxuXG4gICAgZXhwYW5kR3JvdXBzKGV4cGFuZGVkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBzLmZvckVhY2goKGdyb3VwKSA9PiB7XG4gICAgICAgICAgICBncm91cC5zZXRFeHBhbmQoZXhwYW5kZWQpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5leHBhbmRDaGFuZ2UubmV4dChudWxsKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnN0eWxlcyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTdHlsZXMsIHRoaXMuc3R5bGVzKTtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5kYXRlRm9ybWF0ID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdENvbmZpZy5kYXRlRm9ybWF0LCB0aGlzLmNvbmZpZy5kYXRlRm9ybWF0LCB0aGlzLnZpZXdPcHRpb25zLmRhdGVGb3JtYXQpO1xuICAgICAgICB0aGlzLmNyZWF0ZVZpZXcoKTtcbiAgICAgICAgdGhpcy5zZXR1cEdyb3VwcygpO1xuICAgICAgICB0aGlzLnNldHVwSXRlbXMoKTtcbiAgICAgICAgdGhpcy5jb21wdXRlUmVmcygpO1xuICAgICAgICB0aGlzLnNldHVwQmFzZWxpbmVJdGVtcygpO1xuICAgICAgICB0aGlzLmNvbXB1dGVJdGVtc1JlZnMoLi4udGhpcy5iYXNlbGluZUl0ZW1zKTtcbiAgICAgICAgdGhpcy5pbml0U2VsZWN0aW9uTW9kZWwoKTtcbiAgICAgICAgdGhpcy5maXJzdENoYW5nZSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIE5vdGU6IHRoZSB6b25lIG1heSBiZSBub29wZWQgdGhyb3VnaCBgQm9vdHN0cmFwT3B0aW9uc2Agd2hlbiBib290c3RyYXBwaW5nIHRoZSByb290IG1vZHVsZS4gVGhpcyBtZWFuc1xuICAgICAgICAvLyB0aGUgYG9uU3RhYmxlYCB3aWxsIG5ldmVyIGVtaXQgYW55IHZhbHVlLlxuICAgICAgICBjb25zdCBvblN0YWJsZSQgPSB0aGlzLm5nWm9uZS5pc1N0YWJsZSA/IGZyb20oUHJvbWlzZS5yZXNvbHZlKCkpIDogdGhpcy5uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDEpKTtcbiAgICAgICAgLy8gTm9ybWFsbHkgdGhpcyBpc24ndCBpbiB0aGUgem9uZSwgYnV0IGl0IGNhbiBjYXVzZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucyBmb3IgYXBwc1xuICAgICAgICAvLyB1c2luZyBgem9uZS1wYXRjaC1yeGpzYCBiZWNhdXNlIGl0J2xsIHRyaWdnZXIgYSBjaGFuZ2UgZGV0ZWN0aW9uIHdoZW4gaXQgdW5zdWJzY3JpYmVzLlxuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBvblN0YWJsZSQucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gJzEnO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpc2FibGVkTG9hZE9uU2Nyb2xsID0gdGhpcy5kaXNhYmxlZExvYWRPblNjcm9sbDtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdDb250YWluZXIuZHJhZ1N0YXJ0ZWQucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRMb2FkT25TY3JvbGwgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYWdTdGFydGVkLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnQ29udGFpbmVyLmRyYWdNb3ZlZC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmFnTW92ZWQuZW1pdChldmVudCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdDb250YWluZXIuZHJhZ0VuZGVkLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVkTG9hZE9uU2Nyb2xsID0gZGlzYWJsZWRMb2FkT25TY3JvbGw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhZ0VuZGVkLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudmlldy5zdGFydCQucGlwZShza2lwKDEpLCB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb21wdXRlUmVmcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmICghdGhpcy5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgaWYgKGNoYW5nZXMudmlld1R5cGUgJiYgY2hhbmdlcy52aWV3VHlwZS5jdXJyZW50VmFsdWUgJiYgY2hhbmdlcy52aWV3VHlwZS5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXMudmlld1R5cGUucHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlVmlldyhjaGFuZ2VzLnZpZXdUeXBlLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hhbmdlcy52aWV3T3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlVmlldyh0aGlzLnZpZXdUeXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjaGFuZ2VzLm9yaWdpbkl0ZW1zIHx8IGNoYW5nZXMub3JpZ2luR3JvdXBzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR1cEV4cGFuZGVkU3RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHVwR3JvdXBzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR1cEl0ZW1zKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wdXRlUmVmcygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY2hhbmdlcy5vcmlnaW5CYXNlbGluZUl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR1cEJhc2VsaW5lSXRlbXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXB1dGVJdGVtc1JlZnMoLi4udGhpcy5iYXNlbGluZUl0ZW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgY29tcHV0ZUl0ZW1zUmVmcyguLi5pdGVtczogR2FudHRJdGVtSW50ZXJuYWxbXSB8IEdhbnR0QmFzZWxpbmVJdGVtSW50ZXJuYWxbXSkge1xuICAgICAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpdGVtLnVwZGF0ZVJlZnMoe1xuICAgICAgICAgICAgICAgIHdpZHRoOiBpdGVtLnN0YXJ0ICYmIGl0ZW0uZW5kID8gdGhpcy52aWV3LmdldERhdGVSYW5nZVdpZHRoKGl0ZW0uc3RhcnQuc3RhcnRPZkRheSgpLCBpdGVtLmVuZC5lbmRPZkRheSgpKSA6IDAsXG4gICAgICAgICAgICAgICAgeDogaXRlbS5zdGFydCA/IHRoaXMudmlldy5nZXRYUG9pbnRCeURhdGUoaXRlbS5zdGFydCkgOiAwLFxuICAgICAgICAgICAgICAgIHk6ICh0aGlzLnN0eWxlcy5saW5lSGVpZ2h0IC0gdGhpcy5zdHlsZXMuYmFySGVpZ2h0KSAvIDIgLSAxXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdHJhY2tCeShpbmRleDogbnVtYmVyLCBpdGVtOiBHYW50dEdyb3VwSW50ZXJuYWwgfCBHYW50dEl0ZW1JbnRlcm5hbCkge1xuICAgICAgICByZXR1cm4gaXRlbS5pZCB8fCBpbmRleDtcbiAgICB9XG5cbiAgICBkZXRlY3RDaGFuZ2VzKCkge1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLy8gcHVibGljIGZ1bmN0aW9uc1xuXG4gICAgZXhwYW5kR3JvdXAoZ3JvdXA6IEdhbnR0R3JvdXBJbnRlcm5hbCkge1xuICAgICAgICBncm91cC5zZXRFeHBhbmQoIWdyb3VwLmV4cGFuZGVkKTtcbiAgICAgICAgdGhpcy5leHBhbmRDaGFuZ2UuZW1pdChncm91cCk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBleHBhbmRBbGwoKSB7XG4gICAgICAgIHRoaXMuZXhwYW5kR3JvdXBzKHRydWUpO1xuICAgIH1cblxuICAgIGNvbGxhcHNlQWxsKCkge1xuICAgICAgICB0aGlzLmV4cGFuZEdyb3VwcyhmYWxzZSk7XG4gICAgfVxuXG4gICAgZ2V0R2FudHRJdGVtKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0R2FudHRJdGVtcyhbaWRdKVswXSB8fCBudWxsO1xuICAgIH1cblxuICAgIGdldEdhbnR0SXRlbXMoaWRzOiBzdHJpbmdbXSkge1xuICAgICAgICBsZXQgaXRlbXM6IEdhbnR0SXRlbUludGVybmFsW10gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaXRlbXMgPSByZWN1cnNpdmVJdGVtcyh0aGlzLml0ZW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGl0ZW1zID0gZmxhdHRlbih0aGlzLmdyb3Vwcy5tYXAoKGdyb3VwKSA9PiByZWN1cnNpdmVJdGVtcyhncm91cC5pdGVtcykpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpZHMuaW5jbHVkZXMoaXRlbS5pZCkpO1xuICAgIH1cblxuICAgIGlzU2VsZWN0ZWQoaWQ6IHN0cmluZykge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb25Nb2RlbC5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChpZCk7XG4gICAgfVxuXG4gICAgY2hhbmdlVmlldyh0eXBlOiBHYW50dFZpZXdUeXBlKSB7XG4gICAgICAgIHRoaXMudmlld1R5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLmNyZWF0ZVZpZXcoKTtcbiAgICAgICAgdGhpcy5zZXR1cEdyb3VwcygpO1xuICAgICAgICB0aGlzLnNldHVwSXRlbXMoKTtcbiAgICAgICAgdGhpcy5jb21wdXRlUmVmcygpO1xuICAgICAgICB0aGlzLnNldHVwQmFzZWxpbmVJdGVtcygpO1xuICAgICAgICB0aGlzLmNvbXB1dGVJdGVtc1JlZnMoLi4udGhpcy5iYXNlbGluZUl0ZW1zKTtcbiAgICAgICAgdGhpcy52aWV3Q2hhbmdlLmVtaXQodGhpcy52aWV3KTtcbiAgICB9XG5cbiAgICByZXJlbmRlclZpZXcoKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlVmlldyh0aGlzLnZpZXdUeXBlKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBHQU5UVF9VUFBFUl9UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxHYW50dFVwcGVyPignR0FOVFRfVVBQRVJfVE9LRU4nKTtcbiJdfQ==
@@ -100,14 +100,29 @@ export class GanttView {
100
100
  }
101
101
  // 根据X坐标获取对应时间
102
102
  getDateByXPoint(x) {
103
- const indexOfSecondaryDate = Math.max(Math.floor(x / this.getCellWidth()), 0);
104
- const matchDate = this.secondaryDatePoints[Math.min(this.secondaryDatePoints.length - 1, indexOfSecondaryDate)];
105
- const dayWidth = this.getDayOccupancyWidth(matchDate?.start);
103
+ let indexOfSecondaryDate;
104
+ let matchDate;
105
+ let dayWidth;
106
+ let day;
107
+ if (x >= 0) {
108
+ indexOfSecondaryDate = Math.floor(x / this.getCellWidth());
109
+ matchDate = this.secondaryDatePoints[Math.min(this.secondaryDatePoints.length - 1, indexOfSecondaryDate)];
110
+ dayWidth = this.getDayOccupancyWidth(matchDate?.start);
111
+ }
112
+ else {
113
+ const datePointTemp = this.secondaryDatePoints[0];
114
+ dayWidth = this.getDayOccupancyWidth(datePointTemp?.start);
115
+ day = Math.floor(x / dayWidth);
116
+ return datePointTemp?.start.addDays(day);
117
+ }
106
118
  if (dayWidth === this.getCellWidth()) {
107
119
  return matchDate?.start;
108
120
  }
109
121
  else {
110
- const day = Math.floor((x % this.getCellWidth()) / dayWidth) + 1;
122
+ day = Math.floor((x % this.getCellWidth()) / dayWidth) + 1;
123
+ if (indexOfSecondaryDate > this.secondaryDatePoints.length - 1) {
124
+ day += (indexOfSecondaryDate - (this.secondaryDatePoints.length - 1)) * 30;
125
+ }
111
126
  if (this.getCellWidth() / dayWidth === 7) {
112
127
  return matchDate?.start.addDays(day);
113
128
  }
@@ -120,4 +135,4 @@ export class GanttView {
120
135
  return this.getDateIntervalWidth(start, end.addSeconds(1));
121
136
  }
122
137
  }
123
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2dhbnR0L3NyYy92aWV3cy92aWV3LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBRTNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLGFBQWEsRUFBbUIsTUFBTSxpQkFBaUIsQ0FBQztBQUdqRSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLENBQUM7QUFFdEMsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsRUFBRSxDQUFDO0FBc0J4QyxNQUFNLFdBQVcsR0FBcUI7SUFDbEMsR0FBRyxFQUFFLElBQUksU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFO0lBQy9DLEdBQUcsRUFBRSxJQUFJLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUU7SUFDNUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxVQUFVO0NBQ3ZDLENBQUM7QUFFRixNQUFNLE9BQWdCLFNBQVM7SUFPM0IsSUFBSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFJLEdBQUc7UUFDSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQWtCRCxZQUFZLEtBQW9CLEVBQUUsR0FBa0IsRUFBRSxPQUF5QjtRQU4vRSxpQkFBWSxHQUFHLElBQUksQ0FBQztRQU9oQixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN2RCxNQUFNLFNBQVMsR0FBRyxLQUFL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Q0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7UUFDaEgsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM3RCxJQUFJLFFBQVEsS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUU7WUFDbEMsT0FBTyxTQUFTLEVBQUUsS0FBSyxDQUFDO1NBQzNCO2FBQU07WUFDSCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqRSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBRyxRQUFRLEtBQUssQ0FBQyxFQUFFO2dCQUN0QyxPQUFPLFNBQVMsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3hDO1lBQ0QsT0FBTyxTQUFTLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN4QztJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ2QsaUJBQWlCLENBQUMsS0FBZ0IsRUFBRSxHQUFjO1FBQzlDLDhEQUE4RDtRQUM5RCxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdhbnR0RGF0ZSwgZGlmZmVyZW5jZUluRGF5cywgR2FudHREYXRlVXRpbCB9IGZyb20gJy4uL3V0aWxzL2RhdGUnO1xuaW1wb3J0IHsgR2FudHREYXRlUG9pbnQgfSBmcm9tICcuLi9jbGFzcy9kYXRlLXBvaW50JztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVmYXVsdENvbmZpZywgR2FudHREYXRlRm9ybWF0IH0gZnJvbSAnLi4vZ2FudHQuY29uZmlnJztcbmltcG9ydCB7IEdhbnR0Vmlld1R5cGUgfSBmcm9tICcuLi9jbGFzcyc7XG5cbmV4cG9ydCBjb25zdCBwcmltYXJ5RGF0ZVBvaW50VG9wID0gMTg7XG5cbmV4cG9ydCBjb25zdCBzZWNvbmRhcnlEYXRlUG9pbnRUb3AgPSAzNjtcblxuZXhwb3J0IGludGVyZmFjZSBHYW50dFZpZXdEYXRlIHtcbiAgICBkYXRlOiBHYW50dERhdGU7XG4gICAgaXNDdXN0b20/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdhbnR0Vmlld09wdGlvbnMge1xuICAgIHN0YXJ0PzogR2FudHREYXRlO1xuICAgIGVuZD86IEdhbnR0RGF0ZTtcbiAgICBtaW4/OiBHYW50dERhdGU7XG4gICAgbWF4PzogR2FudHREYXRlO1xuICAgIGNlbGxXaWR0aD86IG51bWJlcjtcbiAgICBhZGRBbW91bnQ/OiBudW1iZXI7XG4gICAgYWRkVW5pdD86IEdhbnR0RGF0ZVV0aWw7XG4gICAgZGF0ZUZvcm1hdD86IEdhbnR0RGF0ZUZvcm1hdDtcbiAgICAvLyBmaWxsIGRheXMgd2hlbiBzdGFydCBvciBlbmQgaXMgbnVsbFxuICAgIGZpbGxEYXlzPzogbnVtYmVyO1xuICAgIC8vIGN1c3RvbSBrZXkgYW5kIHZhbHVlXG4gICAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5jb25zdCB2aWV3T3B0aW9uczogR2FudHRWaWV3T3B0aW9ucyA9IHtcbiAgICBtaW46IG5ldyBHYW50dERhdGUoKS5hZGRZZWFycygtMSkuc3RhcnRPZlllYXIoKSxcbiAgICBtYXg6IG5ldyBHYW50dERhdGUoKS5hZGRZZWFycygxKS5lbmRPZlllYXIoKSxcbiAgICBkYXRlRm9ybWF0OiBkZWZhdWx0Q29uZmlnLmRhdGVGb3JtYXRcbn07XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBHYW50dFZpZXcge1xuICAgIHZpZXdUeXBlOiBHYW50dFZpZXdUeXBlO1xuXG4gICAgc3RhcnQkOiBCZWhhdmlvclN1YmplY3Q8R2FudHREYXRlPjtcblxuICAgIGVuZCQ6IEJlaGF2aW9yU3ViamVjdDxHYW50dERhdGU+O1xuXG4gICAgZ2V0IHN0YXJ0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFydCQuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICBnZXQgZW5kKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbmQkLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgcHJpbWFyeURhdGVQb2ludHM6IEdhbnR0RGF0ZVBvaW50W107XG5cbiAgICBzZWNvbmRhcnlEYXRlUG9pbnRzOiBHYW50dERhdGVQb2ludFtdO1xuXG4gICAgd2lkdGg6IG51bWJlcjtcblxuICAgIGNlbGxXaWR0aDogbnVtYmVyO1xuXG4gICAgcHJpbWFyeVdpZHRoOiBudW1iZXI7XG5cbiAgICBzaG93VGltZWxpbmUgPSB0cnVlO1xuXG4gICAgc2hvd1dlZWtCYWNrZHJvcDogYm9vbGVhbjtcblxuICAgIG9wdGlvbnM6IEdhbnR0Vmlld09wdGlvbnM7XG5cbiAgICBjb25zdHJ1Y3RvcihzdGFydDogR2FudHRWaWV3RGF0ZSwgZW5kOiBHYW50dFZpZXdEYXRlLCBvcHRpb25zOiBHYW50dFZpZXdPcHRpb25zKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHZpZXdPcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gc3RhcnQuaXNDdXN0b21cbiAgICAgICAgICAgID8gdGhpcy5zdGFydE9mKHN0YXJ0LmRhdGUpXG4gICAgICAgICAgICA6IHRoaXMuc3RhcnRPZihzdGFydC5kYXRlLnZhbHVlIDwgdGhpcy5vcHRpb25zLnN0YXJ0LnZhbHVlID8gc3RhcnQuZGF0ZSA6IHRoaXMub3B0aW9ucy5zdGFydCk7XG4gICAgICAgIGNvbnN0IGVuZERhdGUgPSBlbmQuaXNDdXN0b21cbiAgICAgICAgICAgID8gdGhpcy5lbmRPZihlbmQuZGF0ZSlcbiAgICAgICAgICAgIDogdGhpcy5lbmRPZihlbmQuZGF0ZS52YWx1ZSA+IHRoaXMub3B0aW9ucy5lbmQudmFsdWUgPyBlbmQuZGF0ZSA6IHRoaXMub3B0aW9ucy5lbmQpO1xuICAgICAgICB0aGlzLnN0YXJ0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8R2FudHREYXRlPihzdGFydERhdGUpO1xuICAgICAgICB0aGlzLmVuZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEdhbnR0RGF0ZT4oZW5kRGF0ZSk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICAgIH1cblxuICAgIGFic3RyYWN0IHN0YXJ0T2YoZGF0ZTogR2FudHREYXRlKTogR2FudHREYXRlO1xuXG4gICAgYWJzdHJhY3QgZW5kT2YoZGF0ZTogR2FudHREYXRlKTogR2FudHREYXRlO1xuXG4gICAgLy8g6I635Y+W5LiA57qn5pe26Ze0572R5qC85ZCI5bm25ZCO55qE5a695bqmXG4gICAgYWJzdHJhY3QgZ2V0UHJpbWFyeVdpZHRoKCk6IG51bWJlcjtcblxuICAgIC8vIOiOt+WPluW9k+WJjeinhuWbvuS4i+avj+S4gOWkqeWNoOeUqOeahOWuveW6plxuICAgIGFic3RyYWN0IGdldERheU9jY3VwYW5jeVdpZHRoKGRhdGU6IEdhbnR0RGF0ZSk6IG51bWJlcjtcblxuICAgIC8vIOiOt+WPluS4gOe6p+aXtumXtOeCue+8iOWdkOagh++8jOaYvuekuuWQjeensO+8iVxuICAgIGFic3RyYWN0IGdldFByaW1hcnlEYXRlUG9pbnRzKCk6IEdhbnR0RGF0ZVBvaW50W107XG5cbiAgICAvLyDojrflj5bkuoznuqfml7bpl7TngrnvvIjlnZDmoIfvvIzmmL7npLrlkI3np7DvvIlcbiAgICBhYnN0cmFjdCBnZXRTZWNvbmRhcnlEYXRlUG9pbnRzKCk6IEdhbnR0RGF0ZVBvaW50W107XG5cbiAgICBwcm90ZWN0ZWQgZ2V0RGF0ZUludGVydmFsV2lkdGgoc3RhcnQ6IEdhbnR0RGF0ZSwgZW5kOiBHYW50dERhdGUpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgICAgIGNvbnN0IGRheXMgPSBkaWZmZXJlbmNlSW5EYXlzKGVuZC52YWx1ZSwgc3RhcnQudmFsdWUpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGguYWJzKGRheXMpOyBpKyspIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSB0aGlzLmdldERheU9jY3VwYW5jeVdpZHRoKHN0YXJ0LmFkZERheXMoaSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IGRheXMgPj0gMCA/IHJlc3VsdCA6IC1yZXN1bHQ7XG4gICAgICAgIHJldHVybiBOdW1iZXIocmVzdWx0LnRvRml4ZWQoMykpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBpbml0aWFsaXplKCkge1xuICAgICAgICB0aGlzLnByaW1hcnlEYXRlUG9pbnRzID0gdGhpcy5nZXRQcmltYXJ5RGF0ZVBvaW50cygpO1xuICAgICAgICB0aGlzLnNlY29uZGFyeURhdGVQb2ludHMgPSB0aGlzLmdldFNlY29uZGFyeURhdGVQb2ludHMoKTtcbiAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMuZ2V0V2lkdGgoKTtcbiAgICAgICAgdGhpcy5jZWxsV2lkdGggPSB0aGlzLmdldENlbGxXaWR0aCgpO1xuICAgICAgICB0aGlzLnByaW1hcnlXaWR0aCA9IHRoaXMuZ2V0UHJpbWFyeVdpZHRoKCk7XG4gICAgfVxuXG4gICAgYWRkU3RhcnREYXRlKCkge1xuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuc3RhcnRPZih0aGlzLnN0YXJ0LmFkZCh0aGlzLm9wdGlvbnMuYWRkQW1vdW50ICogLTEsIHRoaXMub3B0aW9ucy5hZGRVbml0KSk7XG4gICAgICAgIGlmIChzdGFydC52YWx1ZSA+PSB0aGlzLm9wdGlvbnMubWluLnZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW4gPSB0aGlzLnN0YXJ0O1xuICAgICAgICAgICAgdGhpcy5zdGFydCQubmV4dChzdGFydCk7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgICAgICAgICAgIHJldHVybiB7IHN0YXJ0OiB0aGlzLnN0YXJ0LCBlbmQ6IG9yaWdpbiB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGFkZEVuZERhdGUoKSB7XG4gICAgICAgIGNvbnN0IGVuZCA9IHRoaXMuZW5kT2YodGhpcy5lbmQuYWRkKHRoaXMub3B0aW9ucy5hZGRBbW91bnQsIHRoaXMub3B0aW9ucy5hZGRVbml0KSk7XG4gICAgICAgIGlmIChlbmQudmFsdWUgPD0gdGhpcy5vcHRpb25zLm1heC52YWx1ZSkge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luID0gdGhpcy5lbmQ7XG4gICAgICAgICAgICB0aGlzLmVuZCQubmV4dChlbmQpO1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplKCk7XG4gICAgICAgICAgICByZXR1cm4geyBzdGFydDogb3JpZ2luLCBlbmQ6IHRoaXMuZW5kIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdXBkYXRlRGF0ZShzdGFydDogR2FudHREYXRlLCBlbmQ6IEdhbnR0RGF0ZSkge1xuICAgICAgICBzdGFydCA9IHRoaXMuc3RhcnRPZihzdGFydCk7XG4gICAgICAgIGVuZCA9IHRoaXMuZW5kT2YoZW5kKTtcbiAgICAgICAgaWYgKHN0YXJ0LnZhbHVlIDwgdGhpcy5zdGFydC52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zdGFydCQubmV4dChzdGFydCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVuZC52YWx1ZSA+IHRoaXMuZW5kLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmVuZCQubmV4dChlbmQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICAgIH1cblxuICAgIC8vIOiOt+WPllZpZXfnmoTlrr3luqZcbiAgICBnZXRXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2VsbFdpZHRoKCkgKiB0aGlzLnNlY29uZGFyeURhdGVQb2ludHMubGVuZ3RoO1xuICAgIH1cblxuICAgIC8vIOiOt+WPluWNleS4que9keagvOeahOWuveW6plxuICAgIGdldENlbGxXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5jZWxsV2lkdGg7XG4gICAgfVxuXG4gICAgLy8g6I635Y+W5b2T5YmN5pe26Ze055qEWOWdkOagh1xuICAgIGdldFRvZGF5WFBvaW50KCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHRvYWR5ID0gbmV3IEdhbnR0RGF0ZSgpLnN0YXJ0T2ZEYXkoKTtcbiAgICAgICAgaWYgKHRvYWR5LnZhbHVlID4gdGhpcy5zdGFydC52YWx1ZSAmJiB0b2FkeS52YWx1ZSA8IHRoaXMuZW5kLnZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCB4ID0gdGhpcy5nZXRYUG9pbnRCeURhdGUodG9hZHkpICsgdGhpcy5nZXREYXlPY2N1cGFuY3lXaWR0aCh0b2FkeSkgLyAyO1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIOiOt+WPluaMh+WumuaXtumXtOeahFjlnZDmoIdcbiAgICBnZXRYUG9pbnRCeURhdGUoZGF0ZTogR2FudHREYXRlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldERhdGVJbnRlcnZhbFdpZHRoKHRoaXMuc3RhcnQsIGRhdGUpO1xuICAgIH1cblxuICAgIC8vIOagueaNrljlnZDmoIfojrflj5blr7nlupTml7bpl7RcbiAgICBnZXREYXRlQnlYUG9pbnQoeDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGluZGV4T2ZTZWNvbmRhcnlEYXRlID0gTWF0aC5tYXgoTWF0aC5mbG9vcih4IC8gdGhpcy5nZXRDZWxsV2lkdGgoKSksIDApO1xuICAgICAgICBjb25zdCBtYXRjaERhdGUgPSB0aGlzLnNlY29uZGFyeURhdGVQb2ludHNbTWF0aC5taW4odGhpcy5zZWNvbmRhcnlEYXRlUG9pbnRzLmxlbmd0aCAtIDEsIGluZGV4T2ZTZWNvbmRhcnlEYXRlKV07XG4gICAgICAgIGNvbnN0IGRheVdpZHRoID0gdGhpcy5nZXREYXlPY2N1cGFuY3lXaWR0aChtYXRjaERhdGU/LnN0YXJ0KTtcbiAgICAgICAgaWYgKGRheVdpZHRoID09PSB0aGlzLmdldENlbGxXaWR0aCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hEYXRlPy5zdGFydDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGRheSA9IE1hdGguZmxvb3IoKHggJSB0aGlzLmdldENlbGxXaWR0aCgpKSAvIGRheVdpZHRoKSArIDE7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXRDZWxsV2lkdGgoKSAvIGRheVdpZHRoID09PSA3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoRGF0ZT8uc3RhcnQuYWRkRGF5cyhkYXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoRGF0ZT8uc3RhcnQuc2V0RGF0ZShkYXkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8g6I635Y+W5oyH5a6a5pe26Ze06IyD5Zu055qE5a695bqmXG4gICAgZ2V0RGF0ZVJhbmdlV2lkdGgoc3RhcnQ6IEdhbnR0RGF0ZSwgZW5kOiBHYW50dERhdGUpIHtcbiAgICAgICAgLy8gYWRkU2Vjb25kcygxKSDmmK/lm6DkuLrorqHnrpfnm7jlt67lpKnkvJrku6XkuIDkuKrmlbTlpKnmnaXorqHnrpcgZW5k5pe26Ze05LiA6Iis5pivNTnliIY1OeenkuS4jeaYr+S4gOS4quaVtOWkqe+8jOaJgOS7pemcgOimgeWKoDFcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0ZUludGVydmFsV2lkdGgoc3RhcnQsIGVuZC5hZGRTZWNvbmRzKDEpKTtcbiAgICB9XG59XG4iXX0=
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2dhbnR0L3NyYy92aWV3cy92aWV3LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBRTNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLGFBQWEsRUFBbUIsTUFBTSxpQkFBaUIsQ0FBQztBQUdqRSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLENBQUM7QUFFdEMsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsRUFBRSxDQUFDO0FBc0J4QyxNQUFNLFdBQVcsR0FBcUI7SUFDbEMsR0FBRyxFQUFFLElBQUksU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFO0lBQy9DLEdBQUcsRUFBRSxJQUFJLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUU7SUFDNUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxVQUFVO0NBQ3ZDLENBQUM7QUFFRixNQUFNLE9BQWdCLFNBQVM7SUFPM0IsSUFBSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFJLEdBQUc7UUFDSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQWtCRCxZQUFZLEtBQW9CLEVBQUUsR0FBa0IsRUFBRSxPQUF5QjtRQU4vRSxpQkFBWSxHQUFHLElBQUksQ0FBQztRQU9oQixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN2RCxNQUFNLFNBQVMsR0FBRyxLQUFL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S0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN4QztZQUNELE9BQU8sU0FBUyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDeEM7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNkLGlCQUFpQixDQUFDLEtBQWdCLEVBQUUsR0FBYztRQUM5Qyw4REFBOEQ7UUFDOUQsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHYW50dERhdGUsIGRpZmZlcmVuY2VJbkRheXMsIEdhbnR0RGF0ZVV0aWwgfSBmcm9tICcuLi91dGlscy9kYXRlJztcbmltcG9ydCB7IEdhbnR0RGF0ZVBvaW50IH0gZnJvbSAnLi4vY2xhc3MvZGF0ZS1wb2ludCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlZmF1bHRDb25maWcsIEdhbnR0RGF0ZUZvcm1hdCB9IGZyb20gJy4uL2dhbnR0LmNvbmZpZyc7XG5pbXBvcnQgeyBHYW50dFZpZXdUeXBlIH0gZnJvbSAnLi4vY2xhc3MnO1xuXG5leHBvcnQgY29uc3QgcHJpbWFyeURhdGVQb2ludFRvcCA9IDE4O1xuXG5leHBvcnQgY29uc3Qgc2Vjb25kYXJ5RGF0ZVBvaW50VG9wID0gMzY7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2FudHRWaWV3RGF0ZSB7XG4gICAgZGF0ZTogR2FudHREYXRlO1xuICAgIGlzQ3VzdG9tPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHYW50dFZpZXdPcHRpb25zIHtcbiAgICBzdGFydD86IEdhbnR0RGF0ZTtcbiAgICBlbmQ/OiBHYW50dERhdGU7XG4gICAgbWluPzogR2FudHREYXRlO1xuICAgIG1heD86IEdhbnR0RGF0ZTtcbiAgICBjZWxsV2lkdGg/OiBudW1iZXI7XG4gICAgYWRkQW1vdW50PzogbnVtYmVyO1xuICAgIGFkZFVuaXQ/OiBHYW50dERhdGVVdGlsO1xuICAgIGRhdGVGb3JtYXQ/OiBHYW50dERhdGVGb3JtYXQ7XG4gICAgLy8gZmlsbCBkYXlzIHdoZW4gc3RhcnQgb3IgZW5kIGlzIG51bGxcbiAgICBmaWxsRGF5cz86IG51bWJlcjtcbiAgICAvLyBjdXN0b20ga2V5IGFuZCB2YWx1ZVxuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuY29uc3Qgdmlld09wdGlvbnM6IEdhbnR0Vmlld09wdGlvbnMgPSB7XG4gICAgbWluOiBuZXcgR2FudHREYXRlKCkuYWRkWWVhcnMoLTEpLnN0YXJ0T2ZZZWFyKCksXG4gICAgbWF4OiBuZXcgR2FudHREYXRlKCkuYWRkWWVhcnMoMSkuZW5kT2ZZZWFyKCksXG4gICAgZGF0ZUZvcm1hdDogZGVmYXVsdENvbmZpZy5kYXRlRm9ybWF0XG59O1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR2FudHRWaWV3IHtcbiAgICB2aWV3VHlwZTogR2FudHRWaWV3VHlwZTtcblxuICAgIHN0YXJ0JDogQmVoYXZpb3JTdWJqZWN0PEdhbnR0RGF0ZT47XG5cbiAgICBlbmQkOiBCZWhhdmlvclN1YmplY3Q8R2FudHREYXRlPjtcblxuICAgIGdldCBzdGFydCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnQkLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgZ2V0IGVuZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5kJC5nZXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIHByaW1hcnlEYXRlUG9pbnRzOiBHYW50dERhdGVQb2ludFtdO1xuXG4gICAgc2Vjb25kYXJ5RGF0ZVBvaW50czogR2FudHREYXRlUG9pbnRbXTtcblxuICAgIHdpZHRoOiBudW1iZXI7XG5cbiAgICBjZWxsV2lkdGg6IG51bWJlcjtcblxuICAgIHByaW1hcnlXaWR0aDogbnVtYmVyO1xuXG4gICAgc2hvd1RpbWVsaW5lID0gdHJ1ZTtcblxuICAgIHNob3dXZWVrQmFja2Ryb3A6IGJvb2xlYW47XG5cbiAgICBvcHRpb25zOiBHYW50dFZpZXdPcHRpb25zO1xuXG4gICAgY29uc3RydWN0b3Ioc3RhcnQ6IEdhbnR0Vmlld0RhdGUsIGVuZDogR2FudHRWaWV3RGF0ZSwgb3B0aW9uczogR2FudHRWaWV3T3B0aW9ucykge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCB2aWV3T3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHN0YXJ0LmlzQ3VzdG9tXG4gICAgICAgICAgICA/IHRoaXMuc3RhcnRPZihzdGFydC5kYXRlKVxuICAgICAgICAgICAgOiB0aGlzLnN0YXJ0T2Yoc3RhcnQuZGF0ZS52YWx1ZSA8IHRoaXMub3B0aW9ucy5zdGFydC52YWx1ZSA/IHN0YXJ0LmRhdGUgOiB0aGlzLm9wdGlvbnMuc3RhcnQpO1xuICAgICAgICBjb25zdCBlbmREYXRlID0gZW5kLmlzQ3VzdG9tXG4gICAgICAgICAgICA/IHRoaXMuZW5kT2YoZW5kLmRhdGUpXG4gICAgICAgICAgICA6IHRoaXMuZW5kT2YoZW5kLmRhdGUudmFsdWUgPiB0aGlzLm9wdGlvbnMuZW5kLnZhbHVlID8gZW5kLmRhdGUgOiB0aGlzLm9wdGlvbnMuZW5kKTtcbiAgICAgICAgdGhpcy5zdGFydCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEdhbnR0RGF0ZT4oc3RhcnREYXRlKTtcbiAgICAgICAgdGhpcy5lbmQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxHYW50dERhdGU+KGVuZERhdGUpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgICB9XG5cbiAgICBhYnN0cmFjdCBzdGFydE9mKGRhdGU6IEdhbnR0RGF0ZSk6IEdhbnR0RGF0ZTtcblxuICAgIGFic3RyYWN0IGVuZE9mKGRhdGU6IEdhbnR0RGF0ZSk6IEdhbnR0RGF0ZTtcblxuICAgIC8vIOiOt+WPluS4gOe6p+aXtumXtOe9keagvOWQiOW5tuWQjueahOWuveW6plxuICAgIGFic3RyYWN0IGdldFByaW1hcnlXaWR0aCgpOiBudW1iZXI7XG5cbiAgICAvLyDojrflj5blvZPliY3op4blm77kuIvmr4/kuIDlpKnljaDnlKjnmoTlrr3luqZcbiAgICBhYnN0cmFjdCBnZXREYXlPY2N1cGFuY3lXaWR0aChkYXRlOiBHYW50dERhdGUpOiBudW1iZXI7XG5cbiAgICAvLyDojrflj5bkuIDnuqfml7bpl7TngrnvvIjlnZDmoIfvvIzmmL7npLrlkI3np7DvvIlcbiAgICBhYnN0cmFjdCBnZXRQcmltYXJ5RGF0ZVBvaW50cygpOiBHYW50dERhdGVQb2ludFtdO1xuXG4gICAgLy8g6I635Y+W5LqM57qn5pe26Ze054K577yI5Z2Q5qCH77yM5pi+56S65ZCN56ew77yJXG4gICAgYWJzdHJhY3QgZ2V0U2Vjb25kYXJ5RGF0ZVBvaW50cygpOiBHYW50dERhdGVQb2ludFtdO1xuXG4gICAgcHJvdGVjdGVkIGdldERhdGVJbnRlcnZhbFdpZHRoKHN0YXJ0OiBHYW50dERhdGUsIGVuZDogR2FudHREYXRlKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSAwO1xuICAgICAgICBjb25zdCBkYXlzID0gZGlmZmVyZW5jZUluRGF5cyhlbmQudmFsdWUsIHN0YXJ0LnZhbHVlKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLmFicyhkYXlzKTsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gdGhpcy5nZXREYXlPY2N1cGFuY3lXaWR0aChzdGFydC5hZGREYXlzKGkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgPSBkYXlzID49IDAgPyByZXN1bHQgOiAtcmVzdWx0O1xuICAgICAgICByZXR1cm4gTnVtYmVyKHJlc3VsdC50b0ZpeGVkKDMpKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgdGhpcy5wcmltYXJ5RGF0ZVBvaW50cyA9IHRoaXMuZ2V0UHJpbWFyeURhdGVQb2ludHMoKTtcbiAgICAgICAgdGhpcy5zZWNvbmRhcnlEYXRlUG9pbnRzID0gdGhpcy5nZXRTZWNvbmRhcnlEYXRlUG9pbnRzKCk7XG4gICAgICAgIHRoaXMud2lkdGggPSB0aGlzLmdldFdpZHRoKCk7XG4gICAgICAgIHRoaXMuY2VsbFdpZHRoID0gdGhpcy5nZXRDZWxsV2lkdGgoKTtcbiAgICAgICAgdGhpcy5wcmltYXJ5V2lkdGggPSB0aGlzLmdldFByaW1hcnlXaWR0aCgpO1xuICAgIH1cblxuICAgIGFkZFN0YXJ0RGF0ZSgpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnN0YXJ0T2YodGhpcy5zdGFydC5hZGQodGhpcy5vcHRpb25zLmFkZEFtb3VudCAqIC0xLCB0aGlzLm9wdGlvbnMuYWRkVW5pdCkpO1xuICAgICAgICBpZiAoc3RhcnQudmFsdWUgPj0gdGhpcy5vcHRpb25zLm1pbi52YWx1ZSkge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luID0gdGhpcy5zdGFydDtcbiAgICAgICAgICAgIHRoaXMuc3RhcnQkLm5leHQoc3RhcnQpO1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplKCk7XG4gICAgICAgICAgICByZXR1cm4geyBzdGFydDogdGhpcy5zdGFydCwgZW5kOiBvcmlnaW4gfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBhZGRFbmREYXRlKCkge1xuICAgICAgICBjb25zdCBlbmQgPSB0aGlzLmVuZE9mKHRoaXMuZW5kLmFkZCh0aGlzLm9wdGlvbnMuYWRkQW1vdW50LCB0aGlzLm9wdGlvbnMuYWRkVW5pdCkpO1xuICAgICAgICBpZiAoZW5kLnZhbHVlIDw9IHRoaXMub3B0aW9ucy5tYXgudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbiA9IHRoaXMuZW5kO1xuICAgICAgICAgICAgdGhpcy5lbmQkLm5leHQoZW5kKTtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIHsgc3RhcnQ6IG9yaWdpbiwgZW5kOiB0aGlzLmVuZCB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHVwZGF0ZURhdGUoc3RhcnQ6IEdhbnR0RGF0ZSwgZW5kOiBHYW50dERhdGUpIHtcbiAgICAgICAgc3RhcnQgPSB0aGlzLnN0YXJ0T2Yoc3RhcnQpO1xuICAgICAgICBlbmQgPSB0aGlzLmVuZE9mKGVuZCk7XG4gICAgICAgIGlmIChzdGFydC52YWx1ZSA8IHRoaXMuc3RhcnQudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnQkLm5leHQoc3RhcnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbmQudmFsdWUgPiB0aGlzLmVuZC52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5lbmQkLm5leHQoZW5kKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgICB9XG5cbiAgICAvLyDojrflj5ZWaWV355qE5a695bqmXG4gICAgZ2V0V2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENlbGxXaWR0aCgpICogdGhpcy5zZWNvbmRhcnlEYXRlUG9pbnRzLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvLyDojrflj5bljZXkuKrnvZHmoLznmoTlrr3luqZcbiAgICBnZXRDZWxsV2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuY2VsbFdpZHRoO1xuICAgIH1cblxuICAgIC8vIOiOt+WPluW9k+WJjeaXtumXtOeahFjlnZDmoIdcbiAgICBnZXRUb2RheVhQb2ludCgpOiBudW1iZXIge1xuICAgICAgICBjb25zdCB0b2FkeSA9IG5ldyBHYW50dERhdGUoKS5zdGFydE9mRGF5KCk7XG4gICAgICAgIGlmICh0b2FkeS52YWx1ZSA+IHRoaXMuc3RhcnQudmFsdWUgJiYgdG9hZHkudmFsdWUgPCB0aGlzLmVuZC52YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgeCA9IHRoaXMuZ2V0WFBvaW50QnlEYXRlKHRvYWR5KSArIHRoaXMuZ2V0RGF5T2NjdXBhbmN5V2lkdGgodG9hZHkpIC8gMjtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDojrflj5bmjIflrprml7bpl7TnmoRY5Z2Q5qCHXG4gICAgZ2V0WFBvaW50QnlEYXRlKGRhdGU6IEdhbnR0RGF0ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRlSW50ZXJ2YWxXaWR0aCh0aGlzLnN0YXJ0LCBkYXRlKTtcbiAgICB9XG5cbiAgICAvLyDmoLnmja5Y5Z2Q5qCH6I635Y+W5a+55bqU5pe26Ze0XG4gICAgZ2V0RGF0ZUJ5WFBvaW50KHg6IG51bWJlcik6IEdhbnR0RGF0ZSB7XG4gICAgICAgIGxldCBpbmRleE9mU2Vjb25kYXJ5RGF0ZTogbnVtYmVyO1xuICAgICAgICBsZXQgbWF0Y2hEYXRlOiBHYW50dERhdGVQb2ludDtcbiAgICAgICAgbGV0IGRheVdpZHRoOiBudW1iZXI7XG4gICAgICAgIGxldCBkYXk6IG51bWJlcjtcbiAgICAgICAgaWYgKHggPj0gMCkge1xuICAgICAgICAgICAgaW5kZXhPZlNlY29uZGFyeURhdGUgPSBNYXRoLmZsb29yKHggLyB0aGlzLmdldENlbGxXaWR0aCgpKTtcbiAgICAgICAgICAgIG1hdGNoRGF0ZSA9IHRoaXMuc2Vjb25kYXJ5RGF0ZVBvaW50c1tNYXRoLm1pbih0aGlzLnNlY29uZGFyeURhdGVQb2ludHMubGVuZ3RoIC0gMSwgaW5kZXhPZlNlY29uZGFyeURhdGUpXTtcbiAgICAgICAgICAgIGRheVdpZHRoID0gdGhpcy5nZXREYXlPY2N1cGFuY3lXaWR0aChtYXRjaERhdGU/LnN0YXJ0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGVQb2ludFRlbXAgPSB0aGlzLnNlY29uZGFyeURhdGVQb2ludHNbMF07XG4gICAgICAgICAgICBkYXlXaWR0aCA9IHRoaXMuZ2V0RGF5T2NjdXBhbmN5V2lkdGgoZGF0ZVBvaW50VGVtcD8uc3RhcnQpO1xuICAgICAgICAgICAgZGF5ID0gTWF0aC5mbG9vcih4IC8gZGF5V2lkdGgpO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGVQb2ludFRlbXA/LnN0YXJ0LmFkZERheXMoZGF5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF5V2lkdGggPT09IHRoaXMuZ2V0Q2VsbFdpZHRoKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaERhdGU/LnN0YXJ0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF5ID0gTWF0aC5mbG9vcigoeCAlIHRoaXMuZ2V0Q2VsbFdpZHRoKCkpIC8gZGF5V2lkdGgpICsgMTtcbiAgICAgICAgICAgIGlmIChpbmRleE9mU2Vjb25kYXJ5RGF0ZSA+IHRoaXMuc2Vjb25kYXJ5RGF0ZVBvaW50cy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgZGF5ICs9IChpbmRleE9mU2Vjb25kYXJ5RGF0ZSAtICh0aGlzLnNlY29uZGFyeURhdGVQb2ludHMubGVuZ3RoIC0gMSkpICogMzA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5nZXRDZWxsV2lkdGgoKSAvIGRheVdpZHRoID09PSA3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoRGF0ZT8uc3RhcnQuYWRkRGF5cyhkYXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoRGF0ZT8uc3RhcnQuc2V0RGF0ZShkYXkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8g6I635Y+W5oyH5a6a5pe26Ze06IyD5Zu055qE5a695bqmXG4gICAgZ2V0RGF0ZVJhbmdlV2lkdGgoc3RhcnQ6IEdhbnR0RGF0ZSwgZW5kOiBHYW50dERhdGUpIHtcbiAgICAgICAgLy8gYWRkU2Vjb25kcygxKSDmmK/lm6DkuLrorqHnrpfnm7jlt67lpKnkvJrku6XkuIDkuKrmlbTlpKnmnaXorqHnrpcgZW5k5pe26Ze05LiA6Iis5pivNTnliIY1OeenkuS4jeaYr+S4gOS4quaVtOWkqe+8jOaJgOS7pemcgOimgeWKoDFcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0ZUludGVydmFsV2lkdGgoc3RhcnQsIGVuZC5hZGRTZWNvbmRzKDEpKTtcbiAgICB9XG59XG4iXX0=
@@ -491,14 +491,29 @@ class GanttView {
491
491
  }
492
492
  // 根据X坐标获取对应时间
493
493
  getDateByXPoint(x) {
494
- const indexOfSecondaryDate = Math.max(Math.floor(x / this.getCellWidth()), 0);
495
- const matchDate = this.secondaryDatePoints[Math.min(this.secondaryDatePoints.length - 1, indexOfSecondaryDate)];
496
- const dayWidth = this.getDayOccupancyWidth(matchDate?.start);
494
+ let indexOfSecondaryDate;
495
+ let matchDate;
496
+ let dayWidth;
497
+ let day;
498
+ if (x >= 0) {
499
+ indexOfSecondaryDate = Math.floor(x / this.getCellWidth());
500
+ matchDate = this.secondaryDatePoints[Math.min(this.secondaryDatePoints.length - 1, indexOfSecondaryDate)];
501
+ dayWidth = this.getDayOccupancyWidth(matchDate?.start);
502
+ }
503
+ else {
504
+ const datePointTemp = this.secondaryDatePoints[0];
505
+ dayWidth = this.getDayOccupancyWidth(datePointTemp?.start);
506
+ day = Math.floor(x / dayWidth);
507
+ return datePointTemp?.start.addDays(day);
508
+ }
497
509
  if (dayWidth === this.getCellWidth()) {
498
510
  return matchDate?.start;
499
511
  }
500
512
  else {
501
- const day = Math.floor((x % this.getCellWidth()) / dayWidth) + 1;
513
+ day = Math.floor((x % this.getCellWidth()) / dayWidth) + 1;
514
+ if (indexOfSecondaryDate > this.secondaryDatePoints.length - 1) {
515
+ day += (indexOfSecondaryDate - (this.secondaryDatePoints.length - 1)) * 30;
516
+ }
502
517
  if (this.getCellWidth() / dayWidth === 7) {
503
518
  return matchDate?.start.addDays(day);
504
519
  }
@@ -905,6 +920,7 @@ class GanttUpper {
905
920
  this.viewType = GanttViewType.month;
906
921
  this.showTodayLine = true;
907
922
  this.showToolbar = false;
923
+ this.restrictToBounds = true;
908
924
  this.toolbarOptions = {
909
925
  viewTypes: [GanttViewType.day, GanttViewType.month, GanttViewType.year]
910
926
  };
@@ -1160,7 +1176,7 @@ class GanttUpper {
1160
1176
  this.changeView(this.viewType);
1161
1177
  }
1162
1178
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: GanttUpper, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: GANTT_GLOBAL_CONFIG }], target: i0.ɵɵFactoryTarget.Directive }); }
1163
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.0", type: GanttUpper, inputs: { originItems: ["items", "originItems"], originGroups: ["groups", "originGroups"], originBaselineItems: ["baselineItems", "originBaselineItems"], viewType: "viewType", start: "start", end: "end", showTodayLine: "showTodayLine", draggable: "draggable", styles: "styles", showToolbar: "showToolbar", toolbarOptions: "toolbarOptions", viewOptions: "viewOptions", linkOptions: "linkOptions", disabledLoadOnScroll: "disabledLoadOnScroll", selectable: "selectable", multiple: "multiple" }, outputs: { loadOnScroll: "loadOnScroll", dragStarted: "dragStarted", dragMoved: "dragMoved", dragEnded: "dragEnded", barClick: "barClick", viewChange: "viewChange", expandChange: "expandChange" }, host: { properties: { "class.gantt": "this.ganttClass" } }, queries: [{ propertyName: "barTemplate", first: true, predicate: ["bar"], descendants: true, static: true }, { propertyName: "rangeTemplate", first: true, predicate: ["range"], descendants: true, static: true }, { propertyName: "itemTemplate", first: true, predicate: ["item"], descendants: true, static: true }, { propertyName: "baselineTemplate", first: true, predicate: ["baseline"], descendants: true, static: true }, { propertyName: "groupTemplate", first: true, predicate: ["group"], descendants: true, static: true }, { propertyName: "groupHeaderTemplate", first: true, predicate: ["groupHeader"], descendants: true, static: true }, { propertyName: "toolbarTemplate", first: true, predicate: ["toolbar"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0 }); }
1179
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.0", type: GanttUpper, inputs: { originItems: ["items", "originItems"], originGroups: ["groups", "originGroups"], originBaselineItems: ["baselineItems", "originBaselineItems"], viewType: "viewType", start: "start", end: "end", showTodayLine: "showTodayLine", draggable: "draggable", styles: "styles", showToolbar: "showToolbar", restrictToBounds: "restrictToBounds", toolbarOptions: "toolbarOptions", viewOptions: "viewOptions", linkOptions: "linkOptions", disabledLoadOnScroll: "disabledLoadOnScroll", selectable: "selectable", multiple: "multiple" }, outputs: { loadOnScroll: "loadOnScroll", dragStarted: "dragStarted", dragMoved: "dragMoved", dragEnded: "dragEnded", barClick: "barClick", viewChange: "viewChange", expandChange: "expandChange" }, host: { properties: { "class.gantt": "this.ganttClass" } }, queries: [{ propertyName: "barTemplate", first: true, predicate: ["bar"], descendants: true, static: true }, { propertyName: "rangeTemplate", first: true, predicate: ["range"], descendants: true, static: true }, { propertyName: "itemTemplate", first: true, predicate: ["item"], descendants: true, static: true }, { propertyName: "baselineTemplate", first: true, predicate: ["baseline"], descendants: true, static: true }, { propertyName: "groupTemplate", first: true, predicate: ["group"], descendants: true, static: true }, { propertyName: "groupHeaderTemplate", first: true, predicate: ["groupHeader"], descendants: true, static: true }, { propertyName: "toolbarTemplate", first: true, predicate: ["toolbar"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0 }); }
1164
1180
  }
1165
1181
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: GanttUpper, decorators: [{
1166
1182
  type: Directive
@@ -1190,6 +1206,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImpor
1190
1206
  type: Input
1191
1207
  }], showToolbar: [{
1192
1208
  type: Input
1209
+ }], restrictToBounds: [{
1210
+ type: Input
1193
1211
  }], toolbarOptions: [{
1194
1212
  type: Input
1195
1213
  }], viewOptions: [{
@@ -1457,11 +1475,11 @@ class GanttTableHeaderComponent {
1457
1475
  this.unsubscribe$.complete();
1458
1476
  }
1459
1477
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: GanttTableHeaderComponent, deps: [{ token: i0.ElementRef }, { token: GANTT_ABSTRACT_TOKEN }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
1460
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.0", type: GanttTableHeaderComponent, selector: "gantt-table-header", inputs: { columns: "columns" }, host: { properties: { "class": "this.className" } }, viewQueries: [{ propertyName: "resizeLineElementRef", first: true, predicate: ["resizeLine"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"gantt-table-header-container\">\n <div class=\"gantt-table-column\" *ngFor=\"let column of columns; let i = index\" [style.width]=\"column.columnWidth\">\n <ng-container *ngIf=\"column.headerTemplateRef; else default\" [ngTemplateOutlet]=\"column.headerTemplateRef\"> </ng-container>\n <ng-template #default>\n {{ column.name }}\n </ng-template>\n <div\n class=\"column-resize-handle\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n cdkDragBoundary=\".gantt\"\n (cdkDragMoved)=\"onResizeMoved($event, column)\"\n (cdkDragStarted)=\"onResizeStarted($event)\"\n (cdkDragEnded)=\"onResizeEnded($event, column)\"\n ></div>\n </div>\n</div>\n\n<div\n class=\"table-resize-handle\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n cdkDragBoundary=\".gantt\"\n (cdkDragMoved)=\"onResizeMoved($event)\"\n (cdkDragStarted)=\"onResizeStarted($event)\"\n (cdkDragEnded)=\"onOverallResizeEnded($event)\"\n></div>\n\n<div #resizeLine class=\"table-resize-auxiliary-line\"></div>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }] }); }
1478
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.0", type: GanttTableHeaderComponent, selector: "gantt-table-header", inputs: { columns: "columns" }, host: { properties: { "class": "this.className" } }, viewQueries: [{ propertyName: "resizeLineElementRef", first: true, predicate: ["resizeLine"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"d-flex\">\n <div class=\"gantt-table-column\" *ngFor=\"let column of columns; let i = index\" [style.width]=\"column.columnWidth\">\n <ng-container *ngIf=\"column.headerTemplateRef; else default\" [ngTemplateOutlet]=\"column.headerTemplateRef\"> </ng-container>\n <ng-template #default>\n {{ column.name }}\n </ng-template>\n <div\n class=\"column-resize-handle\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n cdkDragBoundary=\".gantt\"\n (cdkDragMoved)=\"onResizeMoved($event, column)\"\n (cdkDragStarted)=\"onResizeStarted($event)\"\n (cdkDragEnded)=\"onResizeEnded($event, column)\"\n ></div>\n </div>\n</div>\n\n<div\n class=\"table-resize-handle\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n cdkDragBoundary=\".gantt\"\n (cdkDragMoved)=\"onResizeMoved($event)\"\n (cdkDragStarted)=\"onResizeStarted($event)\"\n (cdkDragEnded)=\"onOverallResizeEnded($event)\"\n></div>\n\n<div #resizeLine class=\"table-resize-auxiliary-line\"></div>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }] }); }
1461
1479
  }
1462
1480
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: GanttTableHeaderComponent, decorators: [{
1463
1481
  type: Component,
1464
- args: [{ selector: 'gantt-table-header', template: "<div class=\"gantt-table-header-container\">\n <div class=\"gantt-table-column\" *ngFor=\"let column of columns; let i = index\" [style.width]=\"column.columnWidth\">\n <ng-container *ngIf=\"column.headerTemplateRef; else default\" [ngTemplateOutlet]=\"column.headerTemplateRef\"> </ng-container>\n <ng-template #default>\n {{ column.name }}\n </ng-template>\n <div\n class=\"column-resize-handle\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n cdkDragBoundary=\".gantt\"\n (cdkDragMoved)=\"onResizeMoved($event, column)\"\n (cdkDragStarted)=\"onResizeStarted($event)\"\n (cdkDragEnded)=\"onResizeEnded($event, column)\"\n ></div>\n </div>\n</div>\n\n<div\n class=\"table-resize-handle\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n cdkDragBoundary=\".gantt\"\n (cdkDragMoved)=\"onResizeMoved($event)\"\n (cdkDragStarted)=\"onResizeStarted($event)\"\n (cdkDragEnded)=\"onOverallResizeEnded($event)\"\n></div>\n\n<div #resizeLine class=\"table-resize-auxiliary-line\"></div>\n" }]
1482
+ args: [{ selector: 'gantt-table-header', template: "<div class=\"d-flex\">\n <div class=\"gantt-table-column\" *ngFor=\"let column of columns; let i = index\" [style.width]=\"column.columnWidth\">\n <ng-container *ngIf=\"column.headerTemplateRef; else default\" [ngTemplateOutlet]=\"column.headerTemplateRef\"> </ng-container>\n <ng-template #default>\n {{ column.name }}\n </ng-template>\n <div\n class=\"column-resize-handle\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n cdkDragBoundary=\".gantt\"\n (cdkDragMoved)=\"onResizeMoved($event, column)\"\n (cdkDragStarted)=\"onResizeStarted($event)\"\n (cdkDragEnded)=\"onResizeEnded($event, column)\"\n ></div>\n </div>\n</div>\n\n<div\n class=\"table-resize-handle\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n cdkDragBoundary=\".gantt\"\n (cdkDragMoved)=\"onResizeMoved($event)\"\n (cdkDragStarted)=\"onResizeStarted($event)\"\n (cdkDragEnded)=\"onOverallResizeEnded($event)\"\n></div>\n\n<div #resizeLine class=\"table-resize-auxiliary-line\"></div>\n" }]
1465
1483
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: undefined, decorators: [{
1466
1484
  type: Inject,
1467
1485
  args: [GANTT_ABSTRACT_TOKEN]
@@ -2717,7 +2735,9 @@ class GanttBarDrag {
2717
2735
  createBarDrag() {
2718
2736
  const dragRef = this.createDragRef(this.barElement);
2719
2737
  dragRef.lockAxis = 'x';
2720
- dragRef.withBoundaryElement(this.dom.mainItems);
2738
+ if (this.ganttUpper.restrictToBounds) {
2739
+ dragRef.withBoundaryElement(this.dom.mainItems);
2740
+ }
2721
2741
  dragRef.started.subscribe(() => {
2722
2742
  this.setDraggingStyles();
2723
2743
  this.containerScrollLeft = this.dom.mainContainer.scrollLeft;
@@ -3070,6 +3090,9 @@ class GanttBarDrag {
3070
3090
  const itemEnd = end.getUnixTime();
3071
3091
  const viewStart = this.ganttUpper.view.start.getUnixTime();
3072
3092
  const viewEnd = this.ganttUpper.view.end.getUnixTime();
3093
+ if (!this.ganttUpper.restrictToBounds) {
3094
+ return true;
3095
+ }
3073
3096
  if (itemStart < viewStart || itemEnd > viewEnd) {
3074
3097
  return false;
3075
3098
  }