@schneideress/dashboardframework 17.0.23 → 17.0.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -82,6 +82,11 @@ export class RADashboardArea {
82
82
  this.bulkActionData = JSON.parse(JSON.stringify(data)); // To create a new reference;
83
83
  });
84
84
  });
85
+ setTimeout(() => {
86
+ this.calculateLayout = this.raDashboardEventBus.subscribe(RAEvent.LayoutChange).subscribe(() => {
87
+ this.options.api.optionsChanged();
88
+ });
89
+ });
85
90
  }
86
91
  ngOnChanges(changes) {
87
92
  this.isWidgetMgmnt = this.permissionService.hasPermission('ra.widgetmanagement');
@@ -243,6 +248,8 @@ export class RADashboardArea {
243
248
  this.curatedFilterChange.unsubscribe();
244
249
  if (this.bulkActionClick)
245
250
  this.bulkActionClick.unsubscribe();
251
+ if (this.calculateLayout)
252
+ this.calculateLayout.unsubscribe();
246
253
  }
247
254
  /**To update position/dimention of all widgets in the area */
248
255
  updateWidgets() {
@@ -288,8 +295,9 @@ export class RADashboardArea {
288
295
  dashboardAreaKey: areaKey,
289
296
  isIndicatorDashboard: this.isIndicatorDashboard
290
297
  };
291
- this.widgetList = [];
298
+ let _the = this;
292
299
  this.dashboardService.getWidgetsByDashboardArea(widgetInfo, this.appConfig).subscribe(widgets => {
300
+ _the.widgetList = [];
293
301
  this.userWidgets = widgets;
294
302
  this.PAMWidgets = [];
295
303
  widgets.forEach((element) => {
@@ -565,4 +573,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
565
573
  type: HostListener,
566
574
  args: ['document:scroll']
567
575
  }] } });
568
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmEuZGFzaGJvYXJkLmFyZWEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yYS1kYXNoYm9hcmQtZnJhbWV3b3JrL3NyYy9saWIvcmEtZGFzaGJvYXJkLWFyZWEvcmEuZGFzaGJvYXJkLmFyZWEudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yYS1kYXNoYm9hcmQtZnJhbWV3b3JrL3NyYy9saWIvcmEtZGFzaGJvYXJkLWFyZWEvcmEuZGFzaGJvYXJkLmFyZWEuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBK0MsU0FBUyxFQUFjLFlBQVksRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUtwTCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7Ozs7O0FBYzNDLE1BQU0sT0FBTyxlQUFlO0lBNkMxQixZQUFvQixnQkFBb0MsRUFDOUMsTUFBYyxFQUNkLFVBQThCLEVBQzlCLGdCQUFvQyxFQUNwQyxRQUF5QixFQUN6QixHQUFzQixFQUN0QixpQkFBK0MsRUFDL0MsaUJBQXNDO1FBUDVCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUFDOUMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGVBQVUsR0FBVixVQUFVLENBQW9CO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUFDcEMsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUE4QjtRQUMvQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQXFCO1FBbER6QyxlQUFVLEdBQUcsS0FBSyxFQUFnQixDQUFDO1FBRW5DLGVBQVUsR0FBVyxHQUFHLENBQUM7UUFDekIsbUJBQWMsR0FBVyxDQUFDLENBQUM7UUFDM0IsZ0JBQVcsR0FBVSxFQUFF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QWU7bUdBQWYsZUFBZSwyd0JDbkI1Qix3Z0VBc0NBOzs0RkRuQmEsZUFBZTtrQkFMM0IsU0FBUzsrQkFDRSxtQkFBbUI7eVRBa0NELGVBQWU7c0JBQTFDLEtBQUs7dUJBQUMsbUJBQW1CO2dCQUNQLE9BQU87c0JBQXpCLEtBQUs7dUJBQUMsVUFBVTtnQkFDTyxZQUFZO3NCQUFuQyxLQUFLO3VCQUFDLGVBQWU7Z0JBQ0YsbUJBQW1CO3NCQUF0QyxLQUFLO3VCQUFDLFdBQVc7Z0JBQ00sWUFBWTtzQkFBbkMsS0FBSzt1QkFBQyxlQUFlO2dCQUNDLFdBQVc7c0JBQWpDLEtBQUs7dUJBQUMsY0FBYztnQkFDQSxTQUFTO3NCQUE3QixLQUFLO3VCQUFDLFlBQVk7Z0JBQ00sYUFBYTtzQkFBckMsS0FBSzt1QkFBQyxnQkFBZ0I7Z0JBQ1Esb0JBQW9CO3NCQUFsRCxLQUFLO3VCQUFDLHNCQUFzQjtnQkFDcEIsY0FBYztzQkFBdEIsS0FBSztnQkFDSSxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBRXNDLFdBQVc7c0JBQXZELFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFlM0MsTUFBTTtzQkFETCxZQUFZO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElucHV0LCBPbkluaXQsIENvbXBvbmVudCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBOZ1pvbmUsIE9uRGVzdHJveSwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgR3JpZHN0ZXJDb25maWcsIEdyaWRzdGVySXRlbSB9IGZyb20gJy4uLy4uL2dyaWRzdGVyL2luZGV4JztcclxuaW1wb3J0IHsgUmFEYXNoYm9hcmRTZXJ2aWNlIH0gZnJvbSAnLi4vcmEuZGFzaGJvYXJkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSQURhc2hib2FyZEV2ZW50QnVzIH0gZnJvbSAnLi4vcmEuZGFzaGJhcmQuZXZlbnQuYnVzJztcclxuaW1wb3J0IHsgUkFFdmVudCB9IGZyb20gJy4uL3JhLmV2ZW50LmVudW0nO1xyXG5pbXBvcnQgeyBJV2lkZ2V0SW5mbywgSUFwcENvbmZpZywgSUJ1bGtBY3Rpb24gfSBmcm9tICdAc2NobmVpZGVyZXNzL3dpZGdldGZyYW1ld29yayc7XHJcbmltcG9ydCB7IE5neFVpTG9hZGVyU2VydmljZSB9IGZyb20gJ25neC11aS1sb2FkZXInO1xyXG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICdhbmd1bGFyLW5vdGlmaWVyJztcclxuaW1wb3J0IHsgUkFUcmFuc2xhdGVTZXJ2aWNlLCBSQVBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnQHNjaG5laWRlcmVzcy9yYS1jb21tb24nO1xyXG5pbXBvcnQgeyBSQURhc2hib2FyZFJlc3BvbnNpdmVTZXJ2aWNlIH0gZnJvbSAnLi4vcmEuZGFzaGJvYXJkLnJlc3BvbnNpdmUuc2VydmljZSc7XHJcbmltcG9ydCB7IElEYXNoYm9hcmRJbmZvIH0gZnJvbSAnQHNjaG5laWRlcmVzcy93aWRnZXRmcmFtZXdvcmsnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdyYS1kYXNoYm9hcmQtYXJlYScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JhLmRhc2hib2FyZC5hcmVhLmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3JhLmRhc2hib2FyZC5hcmVhLmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSQURhc2hib2FyZEFyZWEgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuXHJcbiAgcHVibGljIHdpZGdldExpc3QgPSBBcnJheTxHcmlkc3Rlckl0ZW0+KCk7XHJcbiAgcHVibGljIG9wdGlvbnMhOiBHcmlkc3RlckNvbmZpZztcclxuICBwdWJsaWMgZ3JpZGhlaWdodDogbnVtYmVyID0gMzAwO1xyXG4gIHB1YmxpYyBncmlkY2VsbEhlaWdodDogbnVtYmVyID0gMDtcclxuICBwdWJsaWMgdXNlcldpZGdldHM6IGFueVtdID0gW107XHJcbiAgcHVibGljIFBBTVdpZGdldHM6IGFueSA9IFtdO1xyXG5cclxuICBwcml2YXRlIGNvbmlmZ0FkZENsaWNrOiBhbnk7XHJcbiAgcHJpdmF0ZSBjdXJhdGVkRmlsdGVyQ2hhbmdlOiBhbnk7XHJcbiAgcHJpdmF0ZSBidWxrQWN0aW9uQ2xpY2s6IGFueTtcclxuICBwcml2YXRlIHJlYXJyYW5nZVdpZGdldENsaWNrOiBhbnk7XHJcbiAgcHJpdmF0ZSB3aWRnZXREZWxldGVFdmVudDogYW55O1xyXG4gIHByaXZhdGUgd2lkZ2V0QWRkRXZlbnQ6IGFueTtcclxuICBwcml2YXRlIHdpZGdldExpYnJhcnlEb25lQ2xpY2s6IGFueTtcclxuICBwcml2YXRlIGlzV2lkZ2V0TG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGRvbVJlc2l6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd0VtcHR5RGFzaGJvYXJkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzV2lkZ2V0TWdtbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgbGFzdFZpZXdUeXBlITogc3RyaW5nO1xyXG4gIHB1YmxpYyBidWxrQWN0aW9uRGF0YSE6IElCdWxrQWN0aW9uO1xyXG4gIHB1YmxpYyBlbXB0eURhc2hib2FyZFRpdGxlOiBhbnk7XHJcbiAgcHVibGljIGVtcHR5RGFzaGJvYXJkTXNnMTogYW55O1xyXG4gIHB1YmxpYyBlbXB0eURhc2hib2FyZE1zZzI6IGFueTtcclxuICBwdWJsaWMgZW1wdHlEYXNoYm9hcmRCdXR0b25UZXh0OiBhbnk7XHJcbiAgcHVibGljIGVtcHR5RGFzaGJvYXJkQnV0dG9uSWNvbjogYW55O1xyXG4gIHB1YmxpYyBlbXB0eURhc2hib2FyZEJ1dHRvbkFjdGlvbjogYW55O1xyXG4gIHByaXZhdGUgaW5pdGlhbFdpZGdldENvdW50OiBudW1iZXIgPSAxMDtcclxuICBwcml2YXRlIGN1cnJlbnRMb2FkaW5nQ291bnQ6IG51bWJlciA9IDA7XHJcbiAgQElucHV0KCd1c2VyLWRhc2hib2FyZC1pZCcpIHVzZXJEYXNoYm9hcmRJZCE6IG51bWJlcjtcclxuICBASW5wdXQoJ2FyZWEta2V5JykgYXJlYUtleSE6IHN0cmluZztcclxuICBASW5wdXQoJ2dsb2JhbC1maWx0ZXInKSBnbG9iYWxGaWx0ZXIhOiBhbnk7XHJcbiAgQElucHV0KCdldmVudC1idXMnKSByYURhc2hib2FyZEV2ZW50QnVzITogUkFEYXNoYm9hcmRFdmVudEJ1cztcclxuICBASW5wdXQoJ3dpZGdldC1oZWlnaHQnKSB3aWRnZXRIZWlnaHQ6IG51bWJlciA9IDI7XHJcbiAgQElucHV0KCd3aWRnZXQtd2lkdGgnKSB3aWRnZXRXaWR0aDogbnVtYmVyID0gNDtcclxuICBASW5wdXQoJ2FwcC1jb25maWcnKSBhcHBDb25maWchOiBJQXBwQ29uZmlnO1xyXG4gIEBJbnB1dCgnZGFzaGJvYXJkLWluZm8nKSBkYXNoYm9hcmRJbmZvITogSURhc2hib2FyZEluZm87XHJcbiAgQElucHV0KCdpc0luZGljYXRvckRhc2hib2FyZCcpIGlzSW5kaWNhdG9yRGFzaGJvYXJkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgdGVtcGxhdGVDb25maWc6IGFueTtcclxuICBAT3V0cHV0KCkgaGlkZURhc2hib2FyZEJhbm5lciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZ3JpZFdyYXBwZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgZ3JpZFdyYXBwZXIhOiBFbGVtZW50UmVmO1xyXG4gIHByaXZhdGUgc2Nyb2xsVHJpZ2dlcjogYW55O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhc2hib2FyZFNlcnZpY2U6IFJhRGFzaGJvYXJkU2VydmljZSxcclxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXHJcbiAgICBwcml2YXRlIG5neFNlcnZpY2U6IE5neFVpTG9hZGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogUkFUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBub3RpZmllcjogTm90aWZpZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSByZXNwb25zaXZlU2VydmljZTogUkFEYXNoYm9hcmRSZXNwb25zaXZlU2VydmljZSxcclxuICAgIHByaXZhdGUgcGVybWlzc2lvblNlcnZpY2U6IFJBUGVybWlzc2lvblNlcnZpY2VcclxuICApIHtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OnNjcm9sbCcpXHJcbiAgc2Nyb2xsKCkge1xyXG4gICAgaWYgKHRoaXMuc2Nyb2xsVHJpZ2dlcilcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2Nyb2xsVHJpZ2dlcik7XHJcblxyXG4gICAgdGhpcy5zY3JvbGxUcmlnZ2VyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMubG9hZERhdGEoKTtcclxuICAgIH0sIDUwMCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLmlzV2lkZ2V0TWdtbnQgPSB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmhhc1Blcm1pc3Npb24oJ3JhLndpZGdldG1hbmFnZW1lbnQnKTtcclxuICAgIHRoaXMuaW5pdGlhdGVHcmlkc3RlckNvbmZpZygpO1xyXG4gICAgdGhpcy5zZXRFbXB0eURhc2hib2FyZENvbmZpZygpO1xyXG4gICAgdGhpcy5sYXN0Vmlld1R5cGUgPSB0aGlzLnJlc3BvbnNpdmVTZXJ2aWNlLklzRGVza3RvcFZpZXcgPyAnZGVza3RvcCcgOiAnbW9iaWxlJztcclxuICAgIHRoaXMucmVzcG9uc2l2ZVNlcnZpY2UucmVzaXplZC5zdWJzY3JpYmUoKGlzRGVza3RvcCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5sYXN0Vmlld1R5cGUgIT0gKGlzRGVza3RvcCA/ICdkZXNrdG9wJyA6ICdtb2JpbGUnKSB8fCAhaXNEZXNrdG9wKSB7XHJcbiAgICAgICAgdGhpcy5sYXN0Vmlld1R5cGUgPSAoaXNEZXNrdG9wID8gJ2Rlc2t0b3AnIDogJ21vYmlsZScpO1xyXG4gICAgICAgIHRoaXMud2lkZ2V0TGlzdCA9IFtdO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pbml0aWF0ZUdyaWRzdGVyQ29uZmlnKCk7XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuYXBpIS5vcHRpb25zQ2hhbmdlZCEoKTtcclxuICAgICAgICAgIGlmICh0aGlzLnVzZXJXaWRnZXRzKSB7XHJcbiAgICAgICAgICAgIGxldCB3aWRnZXRzID0gdGhpcy5tYXBPYmplY3RMaXN0VG9Hcmlkc3Rlckl0ZW1MaXN0KHRoaXMudXNlcldpZGdldHMpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMb2FkaW5nQ291bnQgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLndpZGdldExpc3QgPSB3aWRnZXRzO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNldEFyZWFIZWlnaHQoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkV2lkZ2V0cyh0aGlzLnVzZXJEYXNoYm9hcmRJZCwgdGhpcy5hcmVhS2V5KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZG9tUmVzaXplZCA9ICF0aGlzLmRvbVJlc2l6ZWQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmdyaWRjZWxsSGVpZ2h0ID0gdGhpcy5vcHRpb25zLmFwaSEuZ2V0Q3VycmVudFJvd0hlaWdodCEoKTtcclxuICAgICAgICAgIHRoaXMuZG9tUmVzaXplZCA9ICF0aGlzLmRvbVJlc2l6ZWQ7XHJcbiAgICAgICAgICB0aGlzLnNldEFyZWFIZWlnaHQoKTtcclxuICAgICAgICB9LCAxMDApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5idWxrQWN0aW9uQ2xpY2sgPSB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMuc3Vic2NyaWJlKFJBRXZlbnQuQnVsa0FjdGlvbkNsaWNrKS5zdWJzY3JpYmUoKGRhdGE6IElCdWxrQWN0aW9uKSA9PiB7XHJcbiAgICAgICAgdGhpcy5idWxrQWN0aW9uRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpOyAvLyBUbyBjcmVhdGUgYSBuZXcgcmVmZXJlbmNlO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgdGhpcy5pc1dpZGdldE1nbW50ID0gdGhpcy5wZXJtaXNzaW9uU2VydmljZS5oYXNQZXJtaXNzaW9uKCdyYS53aWRnZXRtYW5hZ2VtZW50Jyk7XHJcbiAgICBpZiAodGhpcy5yYURhc2hib2FyZEV2ZW50QnVzICYmIHRoaXMuYXBwQ29uZmlnICYmICF0aGlzLmlzV2lkZ2V0TG9hZGVkKSB7XHJcbiAgICAgIHRoaXMuaXNXaWRnZXRMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLmxvYWRXaWRnZXRzKHRoaXMudXNlckRhc2hib2FyZElkLCB0aGlzLmFyZWFLZXkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbml0aWF0ZUdyaWRzdGVyQ29uZmlnKCk7XHJcblxyXG4gICAgaWYgKGNoYW5nZXNbJ3JhRGFzaGJvYXJkRXZlbnRCdXMnXSAmJiBjaGFuZ2VzWydyYURhc2hib2FyZEV2ZW50QnVzJ10uY3VycmVudFZhbHVlICE9IGNoYW5nZXNbJ3JhRGFzaGJvYXJkRXZlbnRCdXMnXS5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgIHRoaXMuaW5pdGl0YXRlRXZlbnRCdXNTdWJzY3JpdGlvbnMoKTtcclxuICAgIH1cclxuICB9XHJcbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xyXG4gICAgLy90aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXRFbXB0eURhc2hib2FyZENvbmZpZygpIHtcclxuICAgIGlmICh0aGlzLmRhc2hib2FyZEluZm8gJiYgdGhpcy5kYXNoYm9hcmRJbmZvLnRlbXBsYXRlQ29uZmlnLmVtcHR5RGFzaGJvYXJkSGVhZGVyKSB7XHJcbiAgICAgIHRoaXMuZW1wdHlEYXNoYm9hcmRUaXRsZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoXCJkYXNoYm9hcmQuXCIgKyB0aGlzLmRhc2hib2FyZEluZm8udGVtcGxhdGVDb25maWcuZW1wdHlEYXNoYm9hcmRIZWFkZXIudGl0bGVLZXkpO1xyXG4gICAgICB0aGlzLmVtcHR5RGFzaGJvYXJkTXNnMSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoXCJkYXNoYm9hcmQuXCIgKyB0aGlzLmRhc2hib2FyZEluZm8udGVtcGxhdGVDb25maWcuZW1wdHlEYXNoYm9hcmRIZWFkZXIuZGVzY3JpcHRpb25LZXkxKTtcclxuICAgICAgdGhpcy5lbXB0eURhc2hib2FyZE1zZzIgPSAodGhpcy5kYXNoYm9hcmRJbmZvLnRlbXBsYXRlQ29uZmlnLmVtcHR5RGFzaGJvYXJkSGVhZGVyLmRlc2NyaXB0aW9uS2V5MikgPyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKFwiZGFzaGJvYXJkLlwiICsgdGhpcy5kYXNoYm9hcmRJbmZvLnRlbXBsYXRlQ29uZmlnLmVtcHR5RGFzaGJvYXJkSGVhZGVyLmRlc2NyaXB0aW9uS2V5MikgOiAnJztcclxuICAgICAgdGhpcy5lbXB0eURhc2hib2FyZEJ1dHRvblRleHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKFwiZGFzaGJvYXJkLlwiICsgdGhpcy5kYXNoYm9hcmRJbmZvLnRlbXBsYXRlQ29uZmlnLmVtcHR5RGFzaGJvYXJkSGVhZGVyLmJ1dHRvblRleHRLZXkpO1xyXG4gICAgICB0aGlzLmVtcHR5RGFzaGJvYXJkQnV0dG9uSWNvbiA9IHRoaXMuZGFzaGJvYXJkSW5mby50ZW1wbGF0ZUNvbmZpZy5lbXB0eURhc2hib2FyZEhlYWRlci5idXR0b25JY29uID8gdGhpcy5kYXNoYm9hcmRJbmZvLnRlbXBsYXRlQ29uZmlnLmVtcHR5RGFzaGJvYXJkSGVhZGVyLmJ1dHRvbkljb24gOiAnJztcclxuICAgICAgdGhpcy5lbXB0eURhc2hib2FyZEJ1dHRvbkFjdGlvbiA9IHRoaXMuZGFzaGJvYXJkSW5mby50ZW1wbGF0ZUNvbmZpZy5lbXB0eURhc2hib2FyZEhlYWRlci5idXR0b25BY3Rpb24gPyB0aGlzLmRhc2hib2FyZEluZm8udGVtcGxhdGVDb25maWcuZW1wdHlEYXNoYm9hcmRIZWFkZXIuYnV0dG9uQWN0aW9uIDogJyc7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlRvIHNldCBHcmlkc3RlckNvbmZpZyAqL1xyXG4gIHB1YmxpYyBpbml0aWF0ZUdyaWRzdGVyQ29uZmlnKCkge1xyXG4gICAgaWYgKHRoaXMuZGFzaGJvYXJkSW5mbykge1xyXG4gICAgICAvKipUbyBvdmVycmlkZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdmFsdWVzIHRvIHRoZSBncmlkc3RlciBjb250cm9sICovXHJcbiAgICAgIHRoaXMub3B0aW9ucyA9IHRoaXMucmVzcG9uc2l2ZVNlcnZpY2UuZ2V0R3JpZHN0ZXJDb25maWcodGhpcy5pc1dpZGdldE1nbW50LFxyXG4gICAgICAgIHRoaXMuZGFzaGJvYXJkSW5mby50ZW1wbGF0ZUNvbmZpZy53aWRnZXQuY2FuUmVzaXplLCB0aGlzLmRhc2hib2FyZEluZm8udGVtcGxhdGVDb25maWcud2lkZ2V0LmNhbk1vdmUpO1xyXG4gICAgICB0aGlzLm9wdGlvbnMuaW5pdENhbGxiYWNrID0gKGdyaWRzdGVyOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmFwaSkge1xyXG4gICAgICAgICAgdGhpcy5ncmlkY2VsbEhlaWdodCA9IHRoaXMub3B0aW9ucy5hcGkuZ2V0Q3VycmVudFJvd0hlaWdodCEoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMub3B0aW9ucy5pdGVtQ2hhbmdlQ2FsbGJhY2sgPSAoaXRlbTogR3JpZHN0ZXJJdGVtKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVzcG9uc2l2ZVNlcnZpY2UuSXNEZXNrdG9wVmlldykge1xyXG4gICAgICAgICAgaWYgKGl0ZW0ud2lkZ2V0SW5mbyAmJiBpdGVtLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVdpZGdldFBvc2l0aW9uKGl0ZW0ud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRBcmVhSGVpZ2h0KCk7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgd2lkZ2V0TG9hZGVkKHdpZGdldEVsZW1lbnQ6IGFueSwgd2lkZ2V0OiBhbnkpIHtcclxuICAgIHdpZGdldC53aWRnZXRFbGVtZW50ID0gd2lkZ2V0RWxlbWVudDtcclxuICAgIGxldCBpdGVtcyA9IHRoaXMud2lkZ2V0TGlzdC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbS53aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQgPT0gd2lkZ2V0LndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZClcclxuICAgIGlmIChpdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMubG9hZERhdGEoaXRlbXNbMF0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkRGF0YShpdGVtPzogYW55KSB7XHJcbiAgICBsZXQgaXRlbXMgPSBbXTtcclxuICAgIGxldCB0b3RhbExvYWRlZENvdW50ID0gdGhpcy53aWRnZXRMaXN0LmZpbHRlcigodyA9PiB3LmNhbkxvYWREYXRhKSkubGVuZ3RoO1xyXG4gICAgaWYgKCFpdGVtKVxyXG4gICAgICBpdGVtcyA9IHRoaXMud2lkZ2V0TGlzdC5maWx0ZXIoKHcgPT4gIXcuY2FuTG9hZERhdGEpKTtcclxuICAgIGVsc2VcclxuICAgICAgaXRlbXMucHVzaChpdGVtKTtcclxuICAgIGlmIChpdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGlmICh0aGlzLmluaXRpYWxXaWRnZXRDb3VudCA+IHRoaXMuY3VycmVudExvYWRpbmdDb3VudCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmICh0aGlzLmlzRWxlbWVudExvYWRlZChpdGVtc1tpXS53aWRnZXRFbGVtZW50KSB8fFxyXG4gICAgICAgICAgICAodG90YWxMb2FkZWRDb3VudCA8PSB0aGlzLmluaXRpYWxXaWRnZXRDb3VudCkpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50TG9hZGluZ0NvdW50Kys7XHJcbiAgICAgICAgICAgIGl0ZW1zW2ldLmNhbkxvYWREYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgdG90YWxMb2FkZWRDb3VudCA9IHRoaXMud2lkZ2V0TGlzdC5maWx0ZXIoKHcgPT4gdy5jYW5Mb2FkRGF0YSkpLmxlbmd0aDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBkYXRhTG9hZGVkKHdpZGdldEluZm86IGFueSkge1xyXG4gICAgdGhpcy5jdXJyZW50TG9hZGluZ0NvdW50LS07XHJcbiAgICAvLyB0aGlzLmxvYWREYXRhKClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNFbGVtZW50TG9hZGVkKGVsOiBhbnkpIHtcclxuICAgIGlmIChlbCkge1xyXG4gICAgICBsZXQgcmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICByZXR1cm4gcmVjdCAmJiByZWN0LnRvcCA8IHdpbmRvdy5pbm5lckhlaWdodDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZFdpZGdldFdyYXBwZXJzKGlzSW5pdGlhbExvYWQ6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICBsZXQgd2lkZ2V0czogR3JpZHN0ZXJJdGVtW10gPSB0aGlzLm1hcE9iamVjdExpc3RUb0dyaWRzdGVySXRlbUxpc3QodGhpcy51c2VyV2lkZ2V0cyk7XHJcblxyXG4gICAgdGhpcy53aWRnZXRMaXN0LnB1c2goLi4ud2lkZ2V0cyk7XHJcbiAgICB0aGlzLnNldEFyZWFIZWlnaHQoKTtcclxuICB9XHJcblxyXG4gIC8qKiBUbyBpbml0aWF0ZSBldmVudGJ1cyBzdWJzY3RpcHRpb25zICovXHJcbiAgaW5pdGl0YXRlRXZlbnRCdXNTdWJzY3JpdGlvbnMoKSB7XHJcbiAgICB0aGlzLndpZGdldERlbGV0ZUV2ZW50ID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZShSQUV2ZW50LldpZGdldERlbGV0ZSkuc3Vic2NyaWJlKChpbnN0YW5jZUlkKSA9PiB7XHJcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kZWxldGVXaWRnZXQoaW5zdGFuY2VJZCwgdHJ1ZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy53aWRnZXRBZGRFdmVudCA9IHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5zdWJzY3JpYmUoUkFFdmVudC5BZGRXaWRnZXQpLnN1YnNjcmliZSgod2lkZ2V0SW5mbykgPT4ge1xyXG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY29weVdpZGdldCh3aWRnZXRJbmZvKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNvbmlmZ0FkZENsaWNrID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZShSQUV2ZW50LkNvbmZpZ0FkZENsaWNrKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLmFkZFdpZGdldChlKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmN1cmF0ZWRGaWx0ZXJDaGFuZ2UgPSB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMuc3Vic2NyaWJlKFJBRXZlbnQuQ3VyYXRlZEZpbHRlckNoYW5nZSkuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkV2lkZ2V0cyh0aGlzLnVzZXJEYXNoYm9hcmRJZCwgdGhpcy5hcmVhS2V5KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnJlYXJyYW5nZVdpZGdldENsaWNrID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZShSQUV2ZW50LlJlYXJyYW5nZUNsaWNrZWQpLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVhcnJhbmdlV2lkZ2V0cygpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMud2lkZ2V0TGlicmFyeURvbmVDbGljayA9IHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5zdWJzY3JpYmUoUkFFdmVudC53aWRnZXRMaWJyYXJ5RG9uZUNsaWNrKS5zdWJzY3JpYmUoKHdpZGdldExpc3QpID0+IHtcclxuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICBpZiAod2lkZ2V0TGlzdCkge1xyXG4gICAgICAgICAgdGhpcy5hZGRXaWRnZXRMaXN0VG9Hcmlkc3Rlcih3aWRnZXRMaXN0LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiB0ZW1wIGZpeC0gcmVjdXJzaXZlIG1ldGhvZCB0byBpdGVyYXRlIG92ZXIgdGhlIGxpc3Qgb2YgaXRlbXNcclxuICAgKiBhbmQgYWRkIHRoZW0gdG8gZ3JpZHN0ZXIgaW4gdGhlIGdpdmVuIG9yZGVyXHJcbiAgICogQHBhcmFtIHdpZGdldExpc3QgIC1saXN0IG9mIHdpZGdldHNcclxuICAgKiBAcGFyYW0gaW5kZXggLWluZGV4IG9mIHRoZSBjdXJyZW50IHZhbHVlIHRvIGJlIGFkZGVkXHJcbiAgICovXHJcbiAgYWRkV2lkZ2V0TGlzdFRvR3JpZHN0ZXIod2lkZ2V0TGlzdDogYW55LCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICBsZXQgYXJlYUNvbnRleHQgPSB0aGlzO1xyXG4gICAgbGV0IGluZGV4VmFsID0gaW5kZXggKyAxO1xyXG4gICAgaWYgKGluZGV4ID4gd2lkZ2V0TGlzdC5sZW5ndGggLSAxKVxyXG4gICAgICByZXR1cm47XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKGluZGV4ID09IDApIHtcclxuICAgICAgICBhcmVhQ29udGV4dC5hZGRXaWRnZXQod2lkZ2V0TGlzdFtpbmRleF0pO1xyXG4gICAgICAgIGFyZWFDb250ZXh0LmFkZFdpZGdldExpc3RUb0dyaWRzdGVyKHdpZGdldExpc3QsIGluZGV4VmFsKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIGFyZWFDb250ZXh0LmFkZFdpZGdldCh3aWRnZXRMaXN0W2luZGV4XSk7XHJcbiAgICAgICAgICBhcmVhQ29udGV4dC5hZGRXaWRnZXRMaXN0VG9Hcmlkc3Rlcih3aWRnZXRMaXN0LCBpbmRleFZhbCk7XHJcbiAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29uaWZnQWRkQ2xpY2spXHJcbiAgICAgIHRoaXMuY29uaWZnQWRkQ2xpY2sudW5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBpZiAodGhpcy53aWRnZXRBZGRFdmVudClcclxuICAgICAgdGhpcy53aWRnZXRBZGRFdmVudC51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGlmICh0aGlzLndpZGdldERlbGV0ZUV2ZW50KVxyXG4gICAgICB0aGlzLndpZGdldERlbGV0ZUV2ZW50LnVuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgaWYgKHRoaXMud2lkZ2V0TGlicmFyeURvbmVDbGljaylcclxuICAgICAgdGhpcy53aWRnZXRMaWJyYXJ5RG9uZUNsaWNrLnVuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgaWYgKHRoaXMucmVhcnJhbmdlV2lkZ2V0Q2xpY2spXHJcbiAgICAgIHRoaXMucmVhcnJhbmdlV2lkZ2V0Q2xpY2sudW5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBpZiAodGhpcy5jdXJhdGVkRmlsdGVyQ2hhbmdlKVxyXG4gICAgICB0aGlzLmN1cmF0ZWRGaWx0ZXJDaGFuZ2UudW5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBpZiAodGhpcy5idWxrQWN0aW9uQ2xpY2spXHJcbiAgICAgIHRoaXMuYnVsa0FjdGlvbkNsaWNrLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICAvKipUbyB1cGRhdGUgcG9zaXRpb24vZGltZW50aW9uIG9mIGFsbCB3aWRnZXRzIGluIHRoZSBhcmVhICovXHJcbiAgdXBkYXRlV2lkZ2V0cygpIHtcclxuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS51cGRhdGVXaWRnZXRzKHRoaXMuZm9ybWF0V2lkZ2V0RGF0YUZvclBvc2l0aW9uRGV0YWlscyh0aGlzLm1hcEdyaWRzdGVyTGlzdFRvT2JqZWN0KHRoaXMud2lkZ2V0TGlzdCkpLFxyXG4gICAgICB0aGlzLmFwcENvbmZpZykuc3Vic2NyaWJlKHdpZGdldHMgPT4ge1xyXG4gICAgICB9KTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqVG8gdXBkYXRlIHdpZGdldCBkaW1lbnNpb25zICovXHJcbiAgdXBkYXRlV2lkZ2V0UG9zaXRpb24od2lkZ2V0SW5zdGFuY2VJZDogbnVtYmVyKSB7XHJcblxyXG4gICAgbGV0IHdpZGdldEZpbHRlcmVkTGlzdCA9IFtdO1xyXG4gICAgbGV0IHdpZGdldCA9IHRoaXMud2lkZ2V0TGlzdC5maWx0ZXIoZmlsdGVyZWQgPT4gZmlsdGVyZWQud2lkZ2V0SW5mbyAmJiBmaWx0ZXJlZC53aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQgPT0gd2lkZ2V0SW5zdGFuY2VJZCk7XHJcbiAgICBpZiAod2lkZ2V0ICYmIHdpZGdldC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHdpZGdldEZpbHRlcmVkTGlzdC5wdXNoKHdpZGdldFswXSk7XHJcbiAgICAgIGxldCB3aWRnZXRMaXN0ID0gdGhpcy5tYXBHcmlkc3Rlckxpc3RUb09iamVjdCh3aWRnZXRGaWx0ZXJlZExpc3QpO1xyXG4gICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UudXBkYXRlV2lkZ2V0cyh0aGlzLmZvcm1hdFdpZGdldERhdGFGb3JQb3NpdGlvbkRldGFpbHMod2lkZ2V0TGlzdCksIHRoaXMuYXBwQ29uZmlnKS5zdWJzY3JpYmUod2lkZ2V0cyA9PiB7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipUbyByZXN0cmljdCByZXF1ZXN0IHBheWxvYWQgdG8gYmUgb2YgbWluIHNpemUgKHBvc2l0aW9uICYgc2l6ZSBkZXRhaWxzKSAqL1xyXG4gIGZvcm1hdFdpZGdldERhdGFGb3JQb3NpdGlvbkRldGFpbHMod2lkZ2V0SXRlbUxpc3Q6IElXaWRnZXRJbmZvW10pIHtcclxuICAgIGxldCBpdGVtTGlzdDogYW55ID0gW107XHJcbiAgICB3aWRnZXRJdGVtTGlzdC5mb3JFYWNoKGZ1bmN0aW9uICh3aWRnZXRJdGVtKSB7XHJcbiAgICAgIGxldCBpdGVtID0ge30gYXMgSVdpZGdldEluZm87XHJcbiAgICAgIGl0ZW0ud2lkZ2V0SW5zdGFuY2VJZCA9IHdpZGdldEl0ZW0ud2lkZ2V0SW5zdGFuY2VJZDtcclxuICAgICAgaXRlbS5wb3NpdGlvbl94ID0gd2lkZ2V0SXRlbS5wb3NpdGlvbl94O1xyXG4gICAgICBpdGVtLnBvc2l0aW9uX3kgPSB3aWRnZXRJdGVtLnBvc2l0aW9uX3k7XHJcbiAgICAgIGl0ZW0ud2lkdGggPSB3aWRnZXRJdGVtLndpZHRoO1xyXG4gICAgICBpdGVtLmhlaWdodCA9IHdpZGdldEl0ZW0uaGVpZ2h0O1xyXG4gICAgICBpdGVtTGlzdC5wdXNoKGl0ZW0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gaXRlbUxpc3Q7XHJcbiAgfVxyXG5cclxuICAvKiogVG8gcmV0cmlldmUgd2lkZ2V0cyBiYXNlZCBvbiB1c2VyRGFzaGJvYXJkaWQgYW5kIGFyZWEgbmFtZSAqL1xyXG4gIGxvYWRXaWRnZXRzKHVzZXJEYXNoYm9hcklkOiBudW1iZXIsIGFyZWFLZXk6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMudGVtcGxhdGVDb25maWcgJiYgdGhpcy50ZW1wbGF0ZUNvbmZpZy5pbml0aWFsV2lkZ2V0Q291bnQpXHJcbiAgICAgIHRoaXMuaW5pdGlhbFdpZGdldENvdW50ID0gdGhpcy50ZW1wbGF0ZUNvbmZpZy5pbml0aWFsV2lkZ2V0Q291bnQ7XHJcbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XHJcbiAgICBpZiAobG9jYXRpb24uaHJlZi5pbmRleE9mKCcva2lvc2svJykgPiAtMSlcclxuICAgICAgdGhpcy5pbml0aWFsV2lkZ2V0Q291bnQgPSAxMDAwO1xyXG5cclxuICAgIGxldCB3aWRnZXRJbmZvID0gPElXaWRnZXRJbmZvPntcclxuICAgICAgZGFzaGJvYXJkSWQ6IHVzZXJEYXNoYm9hcklkLnRvU3RyaW5nKCksXHJcbiAgICAgIGRhc2hib2FyZEFyZWFLZXk6IGFyZWFLZXksXHJcbiAgICAgIGlzSW5kaWNhdG9yRGFzaGJvYXJkOiB0aGlzLmlzSW5kaWNhdG9yRGFzaGJvYXJkXHJcbiAgICB9XHJcbiAgICB0aGlzLndpZGdldExpc3QgPSBbXTtcclxuXHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0V2lkZ2V0c0J5RGFzaGJvYXJkQXJlYSh3aWRnZXRJbmZvLCB0aGlzLmFwcENvbmZpZykuc3Vic2NyaWJlKHdpZGdldHMgPT4ge1xyXG4gICAgICB0aGlzLnVzZXJXaWRnZXRzID0gd2lkZ2V0cztcclxuICAgICAgdGhpcy5QQU1XaWRnZXRzID0gW107XHJcbiAgICAgIHdpZGdldHMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgdmFyIHNldHRpbmdzOiBhbnkgPSB1bmRlZmluZWRcclxuICAgICAgICBpZiAoZWxlbWVudC53aWRnZXRTZXR0aW5ncykge1xyXG4gICAgICAgICAgc2V0dGluZ3MgPSBKU09OLnBhcnNlKGVsZW1lbnQud2lkZ2V0U2V0dGluZ3MpO1xyXG4gICAgICAgICAgaWYgKHNldHRpbmdzICYmIHNldHRpbmdzLmlzUEFNV2lkZ2V0KVxyXG4gICAgICAgICAgICB0aGlzLlBBTVdpZGdldHMucHVzaChlbGVtZW50LndpZGdldEluc3RhbmNlSWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuY2hlY2tQQU1XaWRnZXRzKCk7XHJcblxyXG4gICAgICBpZiAod2lkZ2V0cyAmJiB3aWRnZXRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuY2xpZW50SWQgPSB3aWRnZXRzWzBdLmNsaWVudElkO1xyXG4gICAgICAgIHRoaXMubG9hZFdpZGdldFdyYXBwZXJzKCk7XHJcbiAgICAgICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5IaWRlRGFzaGJvYXJkQmFubmVyLCBmYWxzZSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zaG93RW1wdHlEYXNoYm9hcmQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuSGlkZURhc2hib2FyZEJhbm5lciwgdGhpcy5zaG93RW1wdHlEYXNoYm9hcmQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKiBUbyBzZXQgQXJlYShHcmlkc3RlcikgaGVpZ2h0IGR5bmFtaWNhbGx5IGFzIHdpZGdldHMgYXJlIGFkZGVkL3JlbW92ZWQgKi9cclxuICBzZXRBcmVhSGVpZ2h0KCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGxldCBpc01vYmlsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLm1vYmlsZUJyZWFrcG9pbnQhID4gdGhpcy5ncmlkV3JhcHBlci5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoKSB7XHJcbiAgICAgICAgaXNNb2JpbGUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBhcmVhU2Nyb2xsSGVpZ2h0ID0gMDtcclxuICAgICAgbGV0IGFyZWFIZWlnaHQgPSAwO1xyXG4gICAgICBsZXQgY3VyUm93SGVpZ2h0ID0gMDtcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hcGkpIHtcclxuICAgICAgICBjdXJSb3dIZWlnaHQgPSB0aGlzLm9wdGlvbnMuYXBpLmdldEN1cnJlbnRSb3dIZWlnaHQhKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2hvd0VtcHR5RGFzaGJvYXJkID0gdGhpcy51c2VyV2lkZ2V0cy5sZW5ndGggPiAwID8gZmFsc2UgOiB0cnVlO1xyXG5cclxuICAgICAgdGhpcy53aWRnZXRMaXN0LmZvckVhY2goKHQpID0+IHtcclxuICAgICAgICBsZXQgY3VycmVudEhlaWdodCA9IHQueSEgKyB0LnJvd3M7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRIZWlnaHQgPiBhcmVhU2Nyb2xsSGVpZ2h0KSB7XHJcbiAgICAgICAgICBhcmVhU2Nyb2xsSGVpZ2h0ID0gY3VycmVudEhlaWdodDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGN1clJvd0hlaWdodCA9PSAwKSB7XHJcbiAgICAgICAgICBjdXJyZW50SGVpZ2h0ID0gdGhpcy53aWRnZXRMaXN0WzBdLmN1clJvd0hlaWdodCE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHQud2lkZ2V0SW5mby5yb3dIZWlnaHQgPSBjdXJSb3dIZWlnaHQ7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmdyaWRjZWxsSGVpZ2h0ID0gY3VyUm93SGVpZ2h0O1xyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmFwaSkge1xyXG4gICAgICAgIGFyZWFIZWlnaHQgPSBhcmVhU2Nyb2xsSGVpZ2h0ICogdGhpcy5vcHRpb25zLmFwaS5nZXRDdXJyZW50Um93SGVpZ2h0ISgpICsgMTAwO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBhcmVhU2Nyb2xsSGVpZ2h0TW9iID0gMDtcclxuICAgICAgaWYgKGlzTW9iaWxlKSB7XHJcbiAgICAgICAgYXJlYVNjcm9sbEhlaWdodE1vYiA9IHRoaXMud2lkZ2V0TGlzdC5sZW5ndGggKiAzMDAgKyAyMDA7XHJcbiAgICAgICAgYXJlYUhlaWdodCA9IGFyZWFTY3JvbGxIZWlnaHRNb2I7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGFyZWFIZWlnaHQgPCA2MDApIHtcclxuICAgICAgICBhcmVhSGVpZ2h0ID0gNjAwO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZ3JpZGhlaWdodCA9IGFyZWFIZWlnaHQ7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKiBUbyByZW1vdmUgYSB3aWRnZXQgaW5zdGFuY2UgZnJvbSBkYXNoYm9hcmQgYW5kIHRvIHNhdmUgaW5mbyBpbiBkYXRhYmFzZSAqL1xyXG4gIGRlbGV0ZVdpZGdldCh3aWRnZXRJbnN0YW5jZUlkOiBhbnksIGlzYWxlcnREaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcblxyXG4gICAgbGV0IHdpZGdldCA9IHRoaXMudXNlcldpZGdldHMuZmlsdGVyKChpdGVtKSA9PiB7XHJcbiAgICAgIHJldHVybiBpdGVtLndpZGdldEluc3RhbmNlSWQgPT09IHdpZGdldEluc3RhbmNlSWQ7XHJcbiAgICB9KTtcclxuICAgIGlmICh3aWRnZXQubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnVzZXJXaWRnZXRzLnNwbGljZSh0aGlzLnVzZXJXaWRnZXRzLmluZGV4T2Yod2lkZ2V0WzBdKSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuUEFNV2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHZhciBpbmR4ID0gdGhpcy5QQU1XaWRnZXRzLmluZGV4T2Yod2lkZ2V0SW5zdGFuY2VJZCk7XHJcbiAgICAgIGlmIChpbmR4ID4gLTEpXHJcbiAgICAgICAgdGhpcy5QQU1XaWRnZXRzLnNwbGljZShpbmR4LCAxKTtcclxuICAgICAgdGhpcy5jaGVja1BBTVdpZGdldHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZ3JpZHN0ZXJJdGVtID0gdGhpcy53aWRnZXRMaXN0LmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICByZXR1cm4gaXRlbS53aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQgPT09IHdpZGdldEluc3RhbmNlSWQ7XHJcbiAgICB9KTtcclxuICAgIGlmIChncmlkc3Rlckl0ZW0ubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLndpZGdldExpc3Quc3BsaWNlKHRoaXMud2lkZ2V0TGlzdC5pbmRleE9mKGdyaWRzdGVySXRlbVswXSksIDEpO1xyXG4gICAgICB0aGlzLnNldEFyZWFIZWlnaHQoKTtcclxuICAgICAgaWYgKCFpc2FsZXJ0RGlzYWJsZWQpIHtcclxuICAgICAgICB0aGlzLm5vdGlmaWVyLm5vdGlmeSgnc3VjY2VzcycsIFwiIFwiICsgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLldpZGdldHRleHQnKSArIFwiIFwiICsgZ3JpZHN0ZXJJdGVtWzBdLndpZGdldEluZm8ud2lkZ2V0VGl0bGUgKyBcIiBcIiArIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5kZWxldGVkU3VjY2VzZnVsbHknKSArIFwiIFwiKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5zaG93RW1wdHlEYXNoYm9hcmQgPSB0aGlzLnVzZXJXaWRnZXRzLmxlbmd0aCA+IDAgPyBmYWxzZSA6IHRydWU7XHJcbiAgICBpZiAodGhpcy5zaG93RW1wdHlEYXNoYm9hcmQgPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50LkhpZGVEYXNoYm9hcmRCYW5uZXIsIHRoaXMuc2hvd0VtcHR5RGFzaGJvYXJkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlRvIHJlYXJyYW5nZSB3aWRnZXRzIHBvc2l0aW9uIGluIHRoZSBkYXNoYm9hcmQsIGNvbXBhY3RMZWZ0JlVwLGNvbXBhY3RMZWZ0LGNvbXBhY3RVcCxldGMqL1xyXG4gIHJlYXJyYW5nZVdpZGdldHMoKSB7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnVzZXJXaWRnZXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHRoaXMudXNlcldpZGdldHNbaV0ucG9zaXRpb25feCA9IDA7XHJcbiAgICAgIHRoaXMudXNlcldpZGdldHNbaV0ucG9zaXRpb25feSA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy53aWRnZXRMaXN0ID0gW107XHJcbiAgICB0aGlzLmxvYWRXaWRnZXRXcmFwcGVycygpO1xyXG4gICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5IaWRlRGFzaGJvYXJkQmFubmVyLCBmYWxzZSk7XHJcblxyXG4gICAgaWYgKHRoaXMud2lkZ2V0TGlzdC5sZW5ndGggPiAwKVxyXG4gICAgICB0aGlzLnVwZGF0ZVdpZGdldFBvc2l0aW9uKHRoaXMud2lkZ2V0TGlzdFswXS53aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0QXJlYUhlaWdodCgpO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqVG8gYWRkIHdpZGdldCBpbnN0YW5jZSB0byB0aGUgZGF0YWJhc2Ugd2l0aCB0aGUgbmV4dCBhdmFpbGFibGUgcG9zaXRpb24gYW5kIHRvIG1ha2UgY2hhbmdlcyBpblxyXG4gICAqIGRhc2hib2FyZCBhcmVhLlxyXG4gICAqL1xyXG4gIGFkZFdpZGdldChkYXRhOiBhbnkpIHtcclxuICAgIGRhdGEuaGVpZ2h0ID0gdGhpcy53aWRnZXRIZWlnaHQ7XHJcbiAgICBkYXRhLndpZHRoID0gdGhpcy53aWRnZXRXaWR0aDtcclxuICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuSGlkZURhc2hib2FyZEJhbm5lciwgZmFsc2UpO1xyXG4gICAgaWYgKGRhdGEud2lkZ2V0U2V0dGluZ3MpIHtcclxuICAgICAgaWYgKHR5cGVvZiBkYXRhLndpZGdldFNldHRpbmdzID09PSAnc3RyaW5nJylcclxuICAgICAgICBkYXRhLndpZGdldFNldHRpbmdzID0gSlNPTi5wYXJzZShkYXRhLndpZGdldFNldHRpbmdzKTtcclxuXHJcbiAgICAgIGlmIChkYXRhLndpZGdldFNldHRpbmdzLmRlZmF1bHRDb2xzKSB7XHJcbiAgICAgICAgZGF0YS53aWR0aCA9IGRhdGEud2lkZ2V0U2V0dGluZ3MuZGVmYXVsdENvbHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGRhdGEud2lkZ2V0U2V0dGluZ3MuZGVmYXVsdFJvd3MpIHtcclxuICAgICAgICBkYXRhLmhlaWdodCA9IGRhdGEud2lkZ2V0U2V0dGluZ3MuZGVmYXVsdFJvd3M7XHJcbiAgICAgIH1cclxuICAgICAgZGF0YS53aWRnZXRTZXR0aW5ncyA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBkYXRhID0gdGhpcy5zZXRQb3NpdGlvbnMoZGF0YSk7XHJcblxyXG4gICAgLyoqIHRvIGZpbmQgdGhlIGF2YWlsYWJsZSBwb3NpdGlvbiBpbiBncmlkc3RlciwgdGVtcCBjb21tZW50aW5nIHRoZSBjb2RlLXJldHVybmluZyBoaWdoZXIgeSB2YWx1ZSB0aGFuIG5vcm1hbCAqL1xyXG4gICAgZGF0YS5kYXNoYm9hcmRBcmVhS2V5ID0gdGhpcy5hcmVhS2V5O1xyXG4gICAgZGF0YS5kYXNoYm9hcmRJZCA9IHRoaXMudXNlckRhc2hib2FyZElkO1xyXG4gICAgdGhpcy5uZ3hTZXJ2aWNlLnN0YXJ0KCk7XHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuYWRkV2lkZ2V0KGRhdGEsIHRoaXMuYXBwQ29uZmlnKS5zdWJzY3JpYmUod2lkZ2V0ID0+IHtcclxuICAgICAgdGhpcy51c2VyV2lkZ2V0cy5wdXNoKHdpZGdldCk7XHJcbiAgICAgIGxldCBncmlkc3Rlckl0ZW0gPSB0aGlzLnJlc3BvbnNpdmVTZXJ2aWNlLmdldEdyaWRzdGVySXRlbSh3aWRnZXQpO1xyXG4gICAgICB0aGlzLndpZGdldExpc3QucHVzaChncmlkc3Rlckl0ZW0pO1xyXG4gICAgICB0aGlzLnNldEFyZWFIZWlnaHQoKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXBpKSB7XHJcbiAgICAgICAgbGV0IGN1clJvd0hlaWdodDogbnVtYmVyID0gTnVtYmVyKHRoaXMub3B0aW9ucy5hcGkuZ2V0Q3VycmVudFJvd0hlaWdodCEoKSk7XHJcbiAgICAgICAgaWYgKGN1clJvd0hlaWdodCA+IDApIHtcclxuICAgICAgICAgIHdpZGdldC5yb3dIZWlnaHQgPSBjdXJSb3dIZWlnaHQ7XHJcbiAgICAgICAgICB0aGlzLmdyaWRjZWxsSGVpZ2h0ID0gY3VyUm93SGVpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB2YXIgd2lkZ2V0SW5zdGFuY2VJZCA9IDA7XHJcbiAgICAgIGlmICh3aWRnZXQgJiYgd2lkZ2V0LndpZGdldEluc3RhbmNlSWQpIHtcclxuICAgICAgICB3aWRnZXRJbnN0YW5jZUlkID0gd2lkZ2V0LndpZGdldEluc3RhbmNlSWQ7XHJcbiAgICAgICAgLyoqVG8gc2F2ZSBhZGRlZCB3aWRnZXQgcG9zaXRpb24gaW4gZGIgKi9cclxuICAgICAgICBpZiAodGhpcy5yZXNwb25zaXZlU2VydmljZS5Jc0Rlc2t0b3BWaWV3KSB7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVXaWRnZXRQb3NpdGlvbih3aWRnZXRJbnN0YW5jZUlkKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAod2lkZ2V0LnNldHRpbmdzICYmIHdpZGdldC5zZXR0aW5ncy5pc1BBTVdpZGdldCkge1xyXG4gICAgICAgIHRoaXMuUEFNV2lkZ2V0cy5wdXNoKHdpZGdldC53aWRnZXRJbnN0YW5jZUlkKTtcclxuICAgICAgICB0aGlzLmNoZWNrUEFNV2lkZ2V0cygpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50LldpZGdldEFkZGVkLCB3aWRnZXQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFBvc2l0aW9ucyhkYXRhOiBhbnkpIHtcclxuICAgIGRhdGEucG9zaXRpb25feCA9IDA7XHJcbiAgICBkYXRhLnBvc2l0aW9uX3kgPSAwO1xyXG4gICAgaWYgKCF0aGlzLnJlc3BvbnNpdmVTZXJ2aWNlLklzRGVza3RvcFZpZXcpIHtcclxuICAgICAgaWYgKHRoaXMudXNlcldpZGdldHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGxldCB3aWRnZXQgPSB0aGlzLnVzZXJXaWRnZXRzW3RoaXMudXNlcldpZGdldHMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgaWYgKHdpZGdldC5wb3NpdGlvbl94ICsgd2lkZ2V0LndpZHRoID4gKHRoaXMucmVzcG9uc2l2ZVNlcnZpY2UubWF4Q29sc0Rlc2t0b3AgLyAyKSkge1xyXG4gICAgICAgICAgZGF0YS5wb3NpdGlvbl95ID0gd2lkZ2V0LnBvc2l0aW9uX3kgKyAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGRhdGEucG9zaXRpb25feSA9IHdpZGdldC5wb3NpdGlvbl95O1xyXG4gICAgICAgICAgZGF0YS5wb3NpdGlvbl94ID0gdGhpcy5yZXNwb25zaXZlU2VydmljZS5tYXhDb2xzRGVza3RvcCAtICh3aWRnZXQucG9zaXRpb25feCArIHdpZGdldC53aWR0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0YTtcclxuICB9XHJcblxyXG4gIC8qKiBUbyBhZGQgd2lkZ2V0IHRvIGN1cnJlbnQgd2lkZ2V0IGxpc3QgLGludm9rZWQgZnJvbSBjb3B5IHdpZGdldCB3aW5kb3cqL1xyXG4gIGNvcHlXaWRnZXQoZGF0YTogYW55KSB7XHJcbiAgICBkYXRhID0gdGhpcy5zZXRQb3NpdGlvbnMoZGF0YSk7XHJcbiAgICBpZiAoIXRoaXMucmVzcG9uc2l2ZVNlcnZpY2UuSXNEZXNrdG9wVmlldykge1xyXG4gICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UudXBkYXRlV2lkZ2V0cyh0aGlzLmZvcm1hdFdpZGdldERhdGFGb3JQb3NpdGlvbkRldGFpbHMoW2RhdGFdKSwgdGhpcy5hcHBDb25maWcpLnN1YnNjcmliZSh3aWRnZXRzID0+IHtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVzZXJXaWRnZXRzLnB1c2goZGF0YSk7XHJcbiAgICBsZXQgZ3JpZHN0ZXJJdGVtID0gdGhpcy5yZXNwb25zaXZlU2VydmljZS5nZXRHcmlkc3Rlckl0ZW0oZGF0YSk7XHJcbiAgICB0aGlzLndpZGdldExpc3QucHVzaChncmlkc3Rlckl0ZW0pO1xyXG4gICAgdGhpcy5zZXRBcmVhSGVpZ2h0KCk7XHJcbiAgICBpZiAoZGF0YS5zZXR0aW5ncyAmJiBkYXRhLnNldHRpbmdzLmlzUEFNV2lkZ2V0KSB7XHJcbiAgICAgIHRoaXMuUEFNV2lkZ2V0cy5wdXNoKGRhdGEud2lkZ2V0SW5zdGFuY2VJZCk7XHJcbiAgICAgIHRoaXMuY2hlY2tQQU1XaWRnZXRzKCk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgbWFwT2JqZWN0TGlzdFRvR3JpZHN0ZXJJdGVtTGlzdCh3aWRnZXRMaXN0OiBBcnJheTxJV2lkZ2V0SW5mbz4pIHtcclxuICAgIGxldCB3aWRnZXRBcnJheSA9IEFycmF5PEdyaWRzdGVySXRlbT4oKTtcclxuICAgIHdpZGdldExpc3QuZm9yRWFjaCh3aWRnZXQgPT4ge1xyXG4gICAgICB3aWRnZXRBcnJheS5wdXNoKHRoaXMucmVzcG9uc2l2ZVNlcnZpY2UuZ2V0R3JpZHN0ZXJJdGVtKHdpZGdldCkpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gd2lkZ2V0QXJyYXk7XHJcbiAgfVxyXG5cclxuICBtYXBHcmlkc3Rlckl0ZW1Ub09iamVjdCh3aWRnZXRJdGVtOiBHcmlkc3Rlckl0ZW0pIHtcclxuICAgIGxldCB3aWRnZXQ6IElXaWRnZXRJbmZvO1xyXG4gICAgd2lkZ2V0ID0gd2lkZ2V0SXRlbS53aWRnZXRJbmZvO1xyXG4gICAgd2lkZ2V0LmhlaWdodCA9IHdpZGdldEl0ZW0ucm93cztcclxuICAgIHdpZGdldC53aWR0aCA9IHdpZGdldEl0ZW0uY29scztcclxuICAgIHdpZGdldC5wb3NpdGlvbl94ID0gd2lkZ2V0SXRlbS54ITtcclxuICAgIHdpZGdldC5wb3NpdGlvbl95ID0gd2lkZ2V0SXRlbS55ITtcclxuICAgIHdpZGdldC5yb3dIZWlnaHQgPSB3aWRnZXRJdGVtLmN1clJvd0hlaWdodCE7XHJcbiAgICByZXR1cm4gd2lkZ2V0O1xyXG4gIH1cclxuXHJcbiAgbWFwR3JpZHN0ZXJMaXN0VG9PYmplY3Qod2lkZ2V0SXRlbUxpc3Q6IEFycmF5PEdyaWRzdGVySXRlbT4pIHtcclxuICAgIGxldCB3aWRnZXRMaXN0QXJyYXkgPSBBcnJheTxJV2lkZ2V0SW5mbz4oKTtcclxuICAgIHdpZGdldEl0ZW1MaXN0LmZvckVhY2god2lkZ2V0ID0+IHtcclxuICAgICAgd2lkZ2V0TGlzdEFycmF5LnB1c2godGhpcy5tYXBHcmlkc3Rlckl0ZW1Ub09iamVjdCh3aWRnZXQpKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHdpZGdldExpc3RBcnJheTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBidXR0b25DbGljaygpIHtcclxuICAgIGlmICh0aGlzLmVtcHR5RGFzaGJvYXJkQnV0dG9uQWN0aW9uID09IFwid2lkZ2V0c1wiKVxyXG4gICAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50LkFkZE5ld1dpZGdldFRvRGFzaGJvYXJkLCBudWxsKTtcclxuICAgIGVsc2UgaWYgKHRoaXMuZW1wdHlEYXNoYm9hcmRCdXR0b25BY3Rpb24gPT0gXCJmaWx0ZXJcIilcclxuICAgICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5HbG9iYWxGaWx0ZXJDbGljaywgbnVsbCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlQXBwbGllZEZpbHRlcnMoZGF0YTogYW55KSB7XHJcbiAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50LlVwZGF0ZUFwcGxlZEZpdGVyRm9ySW5hcHBsaWNhYmxlRmlsdGVyLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjaGVja1BBTVdpZGdldHMoKSB7XHJcbiAgICBpZiAodGhpcy5QQU1XaWRnZXRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5TaG93SW5hcHBsaWNhYmxlRmlsdGVyTWVzc2FnZSwgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5TaG93SW5hcHBsaWNhYmxlRmlsdGVyTWVzc2FnZSwgZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn0iLCI8ZGl2ICNncmlkV3JhcHBlciBjbGFzcz1cIndyYXAgZ3JpZHN0ZXIgZ3JpZHN0ZXItbW9iaWxlXCJcclxuICBbbmdTdHlsZV09XCJ7J2hlaWdodCc6IHVzZXJXaWRnZXRzLmxlbmd0aCA+IDAgPyAoZ3JpZGhlaWdodCArICdweCcpIDogJ3Vuc2V0J31cIj5cclxuICA8IS0tIDxkaXYgI2dyaWRXcmFwcGVyIGNsYXNzPVwid3JhcCBncmlkc3RlclwiPiAtLT5cclxuICA8Z3JpZHN0ZXIgW29wdGlvbnNdPVwib3B0aW9uc1wiIHN0eWxlPVwiaGVpZ2h0OjEwMCU7XCIgKm5nSWY9XCJ1c2VyV2lkZ2V0cy5sZW5ndGggPiAwXCI+XHJcbiAgICA8Z3JpZHN0ZXItaXRlbSBbaXRlbV09XCJpdGVtXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygd2lkZ2V0TGlzdFwiPlxyXG4gICAgICA8cmEtd2lkZ2V0LWNvbnRhaW5lciAod2lkZ2V0TG9hZGVkKT1cIndpZGdldExvYWRlZCgkZXZlbnQsICBpdGVtKVwiIFtjYW5Mb2FkRGF0YV09XCJpdGVtLmNhbkxvYWREYXRhXCIgKGRhdGFMb2FkZWQpPVwiZGF0YUxvYWRlZCgkZXZlbnQpXCJcclxuICAgICAgICBbYnVsay1hY3Rpb24tZGF0YV09XCJidWxrQWN0aW9uRGF0YVwiIFtkYXNoYm9hcmQtaW5mb109XCJkYXNoYm9hcmRJbmZvXCIgW2FwcC1jb25maWddPVwiYXBwQ29uZmlnXCJcclxuICAgICAgICBbZXZlbnQtYnVzXT1cInJhRGFzaGJvYXJkRXZlbnRCdXNcIiAod2lkZ2V0RGVsZXRlZCk9XCJkZWxldGVXaWRnZXQoJGV2ZW50KVwiIFtkYXRhXT1cIml0ZW1cIlxyXG4gICAgICAgIFtnbG9iYWwtZmlsdGVyXT1cImdsb2JhbEZpbHRlclwiIFtncmlkLWNlbGwtaGVpZ2h0XT1cImdyaWRjZWxsSGVpZ2h0XCIgKm5nSWY9XCJncmlkY2VsbEhlaWdodCAmJiBncmlkY2VsbEhlaWdodCA+IDBcIlxyXG4gICAgICAgIFt3aWRnZXQtd2lkdGhdPVwiaXRlbS5jb2xzXCIgW3dpZGdldC1oZWlnaHRdPVwiaXRlbS5yb3dzXCIgW3dpZGdldC1pbnN0YW5jZS1pZF09XCJpdGVtLndpZGdldEluc3RhbmNlSWRcIlxyXG4gICAgICAgIFtkb20tcmVzaXplZF09XCJkb21SZXNpemVkXCIgKHVwZGF0ZUFwcGxpZWRGaWx0ZXJzKT1cInVwZGF0ZUFwcGxpZWRGaWx0ZXJzKCRldmVudClcIj5cclxuICAgICAgPC9yYS13aWRnZXQtY29udGFpbmVyPlxyXG4gICAgPC9ncmlkc3Rlci1pdGVtPlxyXG4gIDwvZ3JpZHN0ZXI+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJlbXB0eS1wYWRkaW5nIGtpb3NrLWhpZGVcIiAqbmdJZj1cInNob3dFbXB0eURhc2hib2FyZFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImVtcHR5LXdyYXBwZXJcIj5cclxuICAgICAgPGRpdj48L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXByZWZpeFwiPlxyXG4gICAgICAgIDwhLS0gPGkgY2xhc3M9XCJmYWwgZmEtZWRpdCBlZGl0LWljb25cIj48L2k+IC0tPlxyXG4gICAgICAgIDxzcGFuPnt7ZW1wdHlEYXNoYm9hcmRUaXRsZX19PC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGhyIGNsYXNzPVwiaG9yaXpvbnRhbExpbmUtc29saWRcIiAvPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktY29udGVudCBsaWdodFwiPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGVtcHR5LW1zZ1wiPlxyXG4gICAgICAgICAgICB7e2VtcHR5RGFzaGJvYXJkTXNnMX19IDxiciAvPlxyXG4gICAgICAgICAgICB7e2VtcHR5RGFzaGJvYXJkTXNnMn19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpc1dpZGdldE1nbW50XCIgY2xhc3M9XCJidG4gYnRuTGliIGJ0bi1zbSBkYXNoYm9hcmQtYnV0dG9uIGxpZ2h0XCIgKGNsaWNrKT1cImJ1dHRvbkNsaWNrKClcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJ7e2VtcHR5RGFzaGJvYXJkQnV0dG9uSWNvbn19XCI+PC9pPnt7ZW1wdHlEYXNoYm9hcmRCdXR0b25UZXh0fX08L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPG5vdGlmaWVyLWNvbnRhaW5lcj48L25vdGlmaWVyLWNvbnRhaW5lcj5cclxuPC9kaXY+XHJcbiJdfQ==
576
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmEuZGFzaGJvYXJkLmFyZWEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yYS1kYXNoYm9hcmQtZnJhbWV3b3JrL3NyYy9saWIvcmEtZGFzaGJvYXJkLWFyZWEvcmEuZGFzaGJvYXJkLmFyZWEudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yYS1kYXNoYm9hcmQtZnJhbWV3b3JrL3NyYy9saWIvcmEtZGFzaGJvYXJkLWFyZWEvcmEuZGFzaGJvYXJkLmFyZWEuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBK0MsU0FBUyxFQUFjLFlBQVksRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUtwTCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7Ozs7O0FBYzNDLE1BQU0sT0FBTyxlQUFlO0lBOEMxQixZQUFvQixnQkFBb0MsRUFDOUMsTUFBYyxFQUNkLFVBQThCLEVBQzlCLGdCQUFvQyxFQUNwQyxRQUF5QixFQUN6QixHQUFzQixFQUN0QixpQkFBK0MsRUFDL0MsaUJBQXNDO1FBUDVCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUFDOUMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGVBQVUsR0FBVixVQUFVLENBQW9CO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUFDcEMsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUE4QjtRQUMvQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQXFCO1FBbkR6QyxlQUFVLEdBQUcsS0FBSyxFQUFnQixDQUFDO1FBRW5DLGVBQVUsR0FBVyxHQUFHLENBQUM7UUFDekIsbUJBQWMsR0FBVyxDQUFDLENBQUM7UUFDM0IsZ0JBQVcsR0FBVSxFQUFF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bXBvbmVudCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBOZ1pvbmUsIE9uRGVzdHJveSwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgR3JpZHN0ZXJDb25maWcsIEdyaWRzdGVySXRlbSB9IGZyb20gJy4uLy4uL2dyaWRzdGVyL2luZGV4JztcclxuaW1wb3J0IHsgUmFEYXNoYm9hcmRTZXJ2aWNlIH0gZnJvbSAnLi4vcmEuZGFzaGJvYXJkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSQURhc2hib2FyZEV2ZW50QnVzIH0gZnJvbSAnLi4vcmEuZGFzaGJhcmQuZXZlbnQuYnVzJztcclxuaW1wb3J0IHsgUkFFdmVudCB9IGZyb20gJy4uL3JhLmV2ZW50LmVudW0nO1xyXG5pbXBvcnQgeyBJV2lkZ2V0SW5mbywgSUFwcENvbmZpZywgSUJ1bGtBY3Rpb24gfSBmcm9tICdAc2NobmVpZGVyZXNzL3dpZGdldGZyYW1ld29yayc7XHJcbmltcG9ydCB7IE5neFVpTG9hZGVyU2VydmljZSB9IGZyb20gJ25neC11aS1sb2FkZXInO1xyXG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICdhbmd1bGFyLW5vdGlmaWVyJztcclxuaW1wb3J0IHsgUkFUcmFuc2xhdGVTZXJ2aWNlLCBSQVBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnQHNjaG5laWRlcmVzcy9yYS1jb21tb24nO1xyXG5pbXBvcnQgeyBSQURhc2hib2FyZFJlc3BvbnNpdmVTZXJ2aWNlIH0gZnJvbSAnLi4vcmEuZGFzaGJvYXJkLnJlc3BvbnNpdmUuc2VydmljZSc7XHJcbmltcG9ydCB7IElEYXNoYm9hcmRJbmZvIH0gZnJvbSAnQHNjaG5laWRlcmVzcy93aWRnZXRmcmFtZXdvcmsnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdyYS1kYXNoYm9hcmQtYXJlYScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JhLmRhc2hib2FyZC5hcmVhLmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3JhLmRhc2hib2FyZC5hcmVhLmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSQURhc2hib2FyZEFyZWEgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuXHJcbiAgcHVibGljIHdpZGdldExpc3QgPSBBcnJheTxHcmlkc3Rlckl0ZW0+KCk7XHJcbiAgcHVibGljIG9wdGlvbnMhOiBHcmlkc3RlckNvbmZpZztcclxuICBwdWJsaWMgZ3JpZGhlaWdodDogbnVtYmVyID0gMzAwO1xyXG4gIHB1YmxpYyBncmlkY2VsbEhlaWdodDogbnVtYmVyID0gMDtcclxuICBwdWJsaWMgdXNlcldpZGdldHM6IGFueVtdID0gW107XHJcbiAgcHVibGljIFBBTVdpZGdldHM6IGFueSA9IFtdO1xyXG5cclxuICBwcml2YXRlIGNvbmlmZ0FkZENsaWNrOiBhbnk7XHJcbiAgcHJpdmF0ZSBjdXJhdGVkRmlsdGVyQ2hhbmdlOiBhbnk7XHJcbiAgcHJpdmF0ZSBidWxrQWN0aW9uQ2xpY2s6IGFueTtcclxuICBwcml2YXRlIGNhbGN1bGF0ZUxheW91dDphbnk7XHJcbiAgcHJpdmF0ZSByZWFycmFuZ2VXaWRnZXRDbGljazogYW55O1xyXG4gIHByaXZhdGUgd2lkZ2V0RGVsZXRlRXZlbnQ6IGFueTtcclxuICBwcml2YXRlIHdpZGdldEFkZEV2ZW50OiBhbnk7XHJcbiAgcHJpdmF0ZSB3aWRnZXRMaWJyYXJ5RG9uZUNsaWNrOiBhbnk7XHJcbiAgcHJpdmF0ZSBpc1dpZGdldExvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBkb21SZXNpemVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dFbXB0eURhc2hib2FyZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc1dpZGdldE1nbW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGxhc3RWaWV3VHlwZSE6IHN0cmluZztcclxuICBwdWJsaWMgYnVsa0FjdGlvbkRhdGEhOiBJQnVsa0FjdGlvbjtcclxuICBwdWJsaWMgZW1wdHlEYXNoYm9hcmRUaXRsZTogYW55O1xyXG4gIHB1YmxpYyBlbXB0eURhc2hib2FyZE1zZzE6IGFueTtcclxuICBwdWJsaWMgZW1wdHlEYXNoYm9hcmRNc2cyOiBhbnk7XHJcbiAgcHVibGljIGVtcHR5RGFzaGJvYXJkQnV0dG9uVGV4dDogYW55O1xyXG4gIHB1YmxpYyBlbXB0eURhc2hib2FyZEJ1dHRvbkljb246IGFueTtcclxuICBwdWJsaWMgZW1wdHlEYXNoYm9hcmRCdXR0b25BY3Rpb246IGFueTtcclxuICBwcml2YXRlIGluaXRpYWxXaWRnZXRDb3VudDogbnVtYmVyID0gMTA7XHJcbiAgcHJpdmF0ZSBjdXJyZW50TG9hZGluZ0NvdW50OiBudW1iZXIgPSAwO1xyXG4gIEBJbnB1dCgndXNlci1kYXNoYm9hcmQtaWQnKSB1c2VyRGFzaGJvYXJkSWQhOiBudW1iZXI7XHJcbiAgQElucHV0KCdhcmVhLWtleScpIGFyZWFLZXkhOiBzdHJpbmc7XHJcbiAgQElucHV0KCdnbG9iYWwtZmlsdGVyJykgZ2xvYmFsRmlsdGVyITogYW55O1xyXG4gIEBJbnB1dCgnZXZlbnQtYnVzJykgcmFEYXNoYm9hcmRFdmVudEJ1cyE6IFJBRGFzaGJvYXJkRXZlbnRCdXM7XHJcbiAgQElucHV0KCd3aWRnZXQtaGVpZ2h0Jykgd2lkZ2V0SGVpZ2h0OiBudW1iZXIgPSAyO1xyXG4gIEBJbnB1dCgnd2lkZ2V0LXdpZHRoJykgd2lkZ2V0V2lkdGg6IG51bWJlciA9IDQ7XHJcbiAgQElucHV0KCdhcHAtY29uZmlnJykgYXBwQ29uZmlnITogSUFwcENvbmZpZztcclxuICBASW5wdXQoJ2Rhc2hib2FyZC1pbmZvJykgZGFzaGJvYXJkSW5mbyE6IElEYXNoYm9hcmRJbmZvO1xyXG4gIEBJbnB1dCgnaXNJbmRpY2F0b3JEYXNoYm9hcmQnKSBpc0luZGljYXRvckRhc2hib2FyZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHRlbXBsYXRlQ29uZmlnOiBhbnk7XHJcbiAgQE91dHB1dCgpIGhpZGVEYXNoYm9hcmRCYW5uZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2dyaWRXcmFwcGVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIGdyaWRXcmFwcGVyITogRWxlbWVudFJlZjtcclxuICBwcml2YXRlIHNjcm9sbFRyaWdnZXI6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXNoYm9hcmRTZXJ2aWNlOiBSYURhc2hib2FyZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxyXG4gICAgcHJpdmF0ZSBuZ3hTZXJ2aWNlOiBOZ3hVaUxvYWRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFJBVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgbm90aWZpZXI6IE5vdGlmaWVyU2VydmljZSxcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgcmVzcG9uc2l2ZVNlcnZpY2U6IFJBRGFzaGJvYXJkUmVzcG9uc2l2ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHBlcm1pc3Npb25TZXJ2aWNlOiBSQVBlcm1pc3Npb25TZXJ2aWNlXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpzY3JvbGwnKVxyXG4gIHNjcm9sbCgpIHtcclxuICAgIGlmICh0aGlzLnNjcm9sbFRyaWdnZXIpXHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNjcm9sbFRyaWdnZXIpO1xyXG5cclxuICAgIHRoaXMuc2Nyb2xsVHJpZ2dlciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmxvYWREYXRhKCk7XHJcbiAgICB9LCA1MDApO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5pc1dpZGdldE1nbW50ID0gdGhpcy5wZXJtaXNzaW9uU2VydmljZS5oYXNQZXJtaXNzaW9uKCdyYS53aWRnZXRtYW5hZ2VtZW50Jyk7XHJcbiAgICB0aGlzLmluaXRpYXRlR3JpZHN0ZXJDb25maWcoKTtcclxuICAgIHRoaXMuc2V0RW1wdHlEYXNoYm9hcmRDb25maWcoKTtcclxuICAgIHRoaXMubGFzdFZpZXdUeXBlID0gdGhpcy5yZXNwb25zaXZlU2VydmljZS5Jc0Rlc2t0b3BWaWV3ID8gJ2Rlc2t0b3AnIDogJ21vYmlsZSc7XHJcbiAgICB0aGlzLnJlc3BvbnNpdmVTZXJ2aWNlLnJlc2l6ZWQuc3Vic2NyaWJlKChpc0Rlc2t0b3ApID0+IHtcclxuICAgICAgaWYgKHRoaXMubGFzdFZpZXdUeXBlICE9IChpc0Rlc2t0b3AgPyAnZGVza3RvcCcgOiAnbW9iaWxlJykgfHwgIWlzRGVza3RvcCkge1xyXG4gICAgICAgIHRoaXMubGFzdFZpZXdUeXBlID0gKGlzRGVza3RvcCA/ICdkZXNrdG9wJyA6ICdtb2JpbGUnKTtcclxuICAgICAgICB0aGlzLndpZGdldExpc3QgPSBbXTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuaW5pdGlhdGVHcmlkc3RlckNvbmZpZygpO1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmFwaSEub3B0aW9uc0NoYW5nZWQhKCk7XHJcbiAgICAgICAgICBpZiAodGhpcy51c2VyV2lkZ2V0cykge1xyXG4gICAgICAgICAgICBsZXQgd2lkZ2V0cyA9IHRoaXMubWFwT2JqZWN0TGlzdFRvR3JpZHN0ZXJJdGVtTGlzdCh0aGlzLnVzZXJXaWRnZXRzKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50TG9hZGluZ0NvdW50ID0gMDtcclxuICAgICAgICAgICAgdGhpcy53aWRnZXRMaXN0ID0gd2lkZ2V0cztcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRBcmVhSGVpZ2h0KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZFdpZGdldHModGhpcy51c2VyRGFzaGJvYXJkSWQsIHRoaXMuYXJlYUtleSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmRvbVJlc2l6ZWQgPSAhdGhpcy5kb21SZXNpemVkO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5ncmlkY2VsbEhlaWdodCA9IHRoaXMub3B0aW9ucy5hcGkhLmdldEN1cnJlbnRSb3dIZWlnaHQhKCk7XHJcbiAgICAgICAgICB0aGlzLmRvbVJlc2l6ZWQgPSAhdGhpcy5kb21SZXNpemVkO1xyXG4gICAgICAgICAgdGhpcy5zZXRBcmVhSGVpZ2h0KCk7XHJcbiAgICAgICAgfSwgMTAwKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuYnVsa0FjdGlvbkNsaWNrID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZShSQUV2ZW50LkJ1bGtBY3Rpb25DbGljaykuc3Vic2NyaWJlKChkYXRhOiBJQnVsa0FjdGlvbikgPT4ge1xyXG4gICAgICAgIHRoaXMuYnVsa0FjdGlvbkRhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTsgLy8gVG8gY3JlYXRlIGEgbmV3IHJlZmVyZW5jZTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmNhbGN1bGF0ZUxheW91dCA9IHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5zdWJzY3JpYmUoUkFFdmVudC5MYXlvdXRDaGFuZ2UpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmFwaSEub3B0aW9uc0NoYW5nZWQhKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzV2lkZ2V0TWdtbnQgPSB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmhhc1Blcm1pc3Npb24oJ3JhLndpZGdldG1hbmFnZW1lbnQnKTtcclxuICAgIGlmICh0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMgJiYgdGhpcy5hcHBDb25maWcgJiYgIXRoaXMuaXNXaWRnZXRMb2FkZWQpIHtcclxuICAgICAgdGhpcy5pc1dpZGdldExvYWRlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMubG9hZFdpZGdldHModGhpcy51c2VyRGFzaGJvYXJkSWQsIHRoaXMuYXJlYUtleSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmluaXRpYXRlR3JpZHN0ZXJDb25maWcoKTtcclxuXHJcbiAgICBpZiAoY2hhbmdlc1sncmFEYXNoYm9hcmRFdmVudEJ1cyddICYmIGNoYW5nZXNbJ3JhRGFzaGJvYXJkRXZlbnRCdXMnXS5jdXJyZW50VmFsdWUgIT0gY2hhbmdlc1sncmFEYXNoYm9hcmRFdmVudEJ1cyddLnByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgdGhpcy5pbml0aXRhdGVFdmVudEJ1c1N1YnNjcml0aW9ucygpO1xyXG4gICAgfVxyXG4gIH1cclxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XHJcbiAgICAvL3RoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcbiAgcHVibGljIHNldEVtcHR5RGFzaGJvYXJkQ29uZmlnKCkge1xyXG4gICAgaWYgKHRoaXMuZGFzaGJvYXJkSW5mbyAmJiB0aGlzLmRhc2hib2FyZEluZm8udGVtcGxhdGVDb25maWcuZW1wdHlEYXNoYm9hcmRIZWFkZXIpIHtcclxuICAgICAgdGhpcy5lbXB0eURhc2hib2FyZFRpdGxlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZShcImRhc2hib2FyZC5cIiArIHRoaXMuZGFzaGJvYXJkSW5mby50ZW1wbGF0ZUNvbmZpZy5lbXB0eURhc2hib2FyZEhlYWRlci50aXRsZUtleSk7XHJcbiAgICAgIHRoaXMuZW1wdHlEYXNoYm9hcmRNc2cxID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZShcImRhc2hib2FyZC5cIiArIHRoaXMuZGFzaGJvYXJkSW5mby50ZW1wbGF0ZUNvbmZpZy5lbXB0eURhc2hib2FyZEhlYWRlci5kZXNjcmlwdGlvbktleTEpO1xyXG4gICAgICB0aGlzLmVtcHR5RGFzaGJvYXJkTXNnMiA9ICh0aGlzLmRhc2hib2FyZEluZm8udGVtcGxhdGVDb25maWcuZW1wdHlEYXNoYm9hcmRIZWFkZXIuZGVzY3JpcHRpb25LZXkyKSA/IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoXCJkYXNoYm9hcmQuXCIgKyB0aGlzLmRhc2hib2FyZEluZm8udGVtcGxhdGVDb25maWcuZW1wdHlEYXNoYm9hcmRIZWFkZXIuZGVzY3JpcHRpb25LZXkyKSA6ICcnO1xyXG4gICAgICB0aGlzLmVtcHR5RGFzaGJvYXJkQnV0dG9uVGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoXCJkYXNoYm9hcmQuXCIgKyB0aGlzLmRhc2hib2FyZEluZm8udGVtcGxhdGVDb25maWcuZW1wdHlEYXNoYm9hcmRIZWFkZXIuYnV0dG9uVGV4dEtleSk7XHJcbiAgICAgIHRoaXMuZW1wdHlEYXNoYm9hcmRCdXR0b25JY29uID0gdGhpcy5kYXNoYm9hcmRJbmZvLnRlbXBsYXRlQ29uZmlnLmVtcHR5RGFzaGJvYXJkSGVhZGVyLmJ1dHRvbkljb24gPyB0aGlzLmRhc2hib2FyZEluZm8udGVtcGxhdGVDb25maWcuZW1wdHlEYXNoYm9hcmRIZWFkZXIuYnV0dG9uSWNvbiA6ICcnO1xyXG4gICAgICB0aGlzLmVtcHR5RGFzaGJvYXJkQnV0dG9uQWN0aW9uID0gdGhpcy5kYXNoYm9hcmRJbmZvLnRlbXBsYXRlQ29uZmlnLmVtcHR5RGFzaGJvYXJkSGVhZGVyLmJ1dHRvbkFjdGlvbiA/IHRoaXMuZGFzaGJvYXJkSW5mby50ZW1wbGF0ZUNvbmZpZy5lbXB0eURhc2hib2FyZEhlYWRlci5idXR0b25BY3Rpb24gOiAnJztcclxuICAgIH1cclxuICB9XHJcbiAgLyoqVG8gc2V0IEdyaWRzdGVyQ29uZmlnICovXHJcbiAgcHVibGljIGluaXRpYXRlR3JpZHN0ZXJDb25maWcoKSB7XHJcbiAgICBpZiAodGhpcy5kYXNoYm9hcmRJbmZvKSB7XHJcbiAgICAgIC8qKlRvIG92ZXJyaWRlIGRlZmF1bHQgY29uZmlndXJhdGlvbiB2YWx1ZXMgdG8gdGhlIGdyaWRzdGVyIGNvbnRyb2wgKi9cclxuICAgICAgdGhpcy5vcHRpb25zID0gdGhpcy5yZXNwb25zaXZlU2VydmljZS5nZXRHcmlkc3RlckNvbmZpZyh0aGlzLmlzV2lkZ2V0TWdtbnQsXHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRJbmZvLnRlbXBsYXRlQ29uZmlnLndpZGdldC5jYW5SZXNpemUsIHRoaXMuZGFzaGJvYXJkSW5mby50ZW1wbGF0ZUNvbmZpZy53aWRnZXQuY2FuTW92ZSk7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5pbml0Q2FsbGJhY2sgPSAoZ3JpZHN0ZXI6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXBpKSB7XHJcbiAgICAgICAgICB0aGlzLmdyaWRjZWxsSGVpZ2h0ID0gdGhpcy5vcHRpb25zLmFwaS5nZXRDdXJyZW50Um93SGVpZ2h0ISgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgdGhpcy5vcHRpb25zLml0ZW1DaGFuZ2VDYWxsYmFjayA9IChpdGVtOiBHcmlkc3Rlckl0ZW0pID0+IHtcclxuICAgICAgICBpZiAodGhpcy5yZXNwb25zaXZlU2VydmljZS5Jc0Rlc2t0b3BWaWV3KSB7XHJcbiAgICAgICAgICBpZiAoaXRlbS53aWRnZXRJbmZvICYmIGl0ZW0ud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlV2lkZ2V0UG9zaXRpb24oaXRlbS53aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldEFyZWFIZWlnaHQoKTtcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB3aWRnZXRMb2FkZWQod2lkZ2V0RWxlbWVudDogYW55LCB3aWRnZXQ6IGFueSkge1xyXG4gICAgd2lkZ2V0LndpZGdldEVsZW1lbnQgPSB3aWRnZXRFbGVtZW50O1xyXG4gICAgbGV0IGl0ZW1zID0gdGhpcy53aWRnZXRMaXN0LmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCA9PSB3aWRnZXQud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkKVxyXG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5sb2FkRGF0YShpdGVtc1swXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWREYXRhKGl0ZW0/OiBhbnkpIHtcclxuICAgIGxldCBpdGVtcyA9IFtdO1xyXG4gICAgbGV0IHRvdGFsTG9hZGVkQ291bnQgPSB0aGlzLndpZGdldExpc3QuZmlsdGVyKCh3ID0+IHcuY2FuTG9hZERhdGEpKS5sZW5ndGg7XHJcbiAgICBpZiAoIWl0ZW0pXHJcbiAgICAgIGl0ZW1zID0gdGhpcy53aWRnZXRMaXN0LmZpbHRlcigodyA9PiAhdy5jYW5Mb2FkRGF0YSkpO1xyXG4gICAgZWxzZVxyXG4gICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgaWYgKHRoaXMuaW5pdGlhbFdpZGdldENvdW50ID4gdGhpcy5jdXJyZW50TG9hZGluZ0NvdW50KSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKHRoaXMuaXNFbGVtZW50TG9hZGVkKGl0ZW1zW2ldLndpZGdldEVsZW1lbnQpIHx8XHJcbiAgICAgICAgICAgICh0b3RhbExvYWRlZENvdW50IDw9IHRoaXMuaW5pdGlhbFdpZGdldENvdW50KSkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMb2FkaW5nQ291bnQrKztcclxuICAgICAgICAgICAgaXRlbXNbaV0uY2FuTG9hZERhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgICB0b3RhbExvYWRlZENvdW50ID0gdGhpcy53aWRnZXRMaXN0LmZpbHRlcigodyA9PiB3LmNhbkxvYWREYXRhKSkubGVuZ3RoO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGRhdGFMb2FkZWQod2lkZ2V0SW5mbzogYW55KSB7XHJcbiAgICB0aGlzLmN1cnJlbnRMb2FkaW5nQ291bnQtLTtcclxuICAgIC8vIHRoaXMubG9hZERhdGEoKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0VsZW1lbnRMb2FkZWQoZWw6IGFueSkge1xyXG4gICAgaWYgKGVsKSB7XHJcbiAgICAgIGxldCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgIHJldHVybiByZWN0ICYmIHJlY3QudG9wIDwgd2luZG93LmlubmVySGVpZ2h0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkV2lkZ2V0V3JhcHBlcnMoaXNJbml0aWFsTG9hZDogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIGxldCB3aWRnZXRzOiBHcmlkc3Rlckl0ZW1bXSA9IHRoaXMubWFwT2JqZWN0TGlzdFRvR3JpZHN0ZXJJdGVtTGlzdCh0aGlzLnVzZXJXaWRnZXRzKTtcclxuXHJcbiAgICB0aGlzLndpZGdldExpc3QucHVzaCguLi53aWRnZXRzKTtcclxuICAgIHRoaXMuc2V0QXJlYUhlaWdodCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvIGluaXRpYXRlIGV2ZW50YnVzIHN1YnNjdGlwdGlvbnMgKi9cclxuICBpbml0aXRhdGVFdmVudEJ1c1N1YnNjcml0aW9ucygpIHtcclxuICAgIHRoaXMud2lkZ2V0RGVsZXRlRXZlbnQgPSB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMuc3Vic2NyaWJlKFJBRXZlbnQuV2lkZ2V0RGVsZXRlKS5zdWJzY3JpYmUoKGluc3RhbmNlSWQpID0+IHtcclxuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLmRlbGV0ZVdpZGdldChpbnN0YW5jZUlkLCB0cnVlKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLndpZGdldEFkZEV2ZW50ID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZShSQUV2ZW50LkFkZFdpZGdldCkuc3Vic2NyaWJlKCh3aWRnZXRJbmZvKSA9PiB7XHJcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb3B5V2lkZ2V0KHdpZGdldEluZm8pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY29uaWZnQWRkQ2xpY2sgPSB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMuc3Vic2NyaWJlKFJBRXZlbnQuQ29uZmlnQWRkQ2xpY2spLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYWRkV2lkZ2V0KGUpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY3VyYXRlZEZpbHRlckNoYW5nZSA9IHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5zdWJzY3JpYmUoUkFFdmVudC5DdXJhdGVkRmlsdGVyQ2hhbmdlKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRXaWRnZXRzKHRoaXMudXNlckRhc2hib2FyZElkLCB0aGlzLmFyZWFLZXkpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucmVhcnJhbmdlV2lkZ2V0Q2xpY2sgPSB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMuc3Vic2NyaWJlKFJBRXZlbnQuUmVhcnJhbmdlQ2xpY2tlZCkuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZWFycmFuZ2VXaWRnZXRzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy53aWRnZXRMaWJyYXJ5RG9uZUNsaWNrID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZShSQUV2ZW50LndpZGdldExpYnJhcnlEb25lQ2xpY2spLnN1YnNjcmliZSgod2lkZ2V0TGlzdCkgPT4ge1xyXG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgIGlmICh3aWRnZXRMaXN0KSB7XHJcbiAgICAgICAgICB0aGlzLmFkZFdpZGdldExpc3RUb0dyaWRzdGVyKHdpZGdldExpc3QsIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHRlbXAgZml4LSByZWN1cnNpdmUgbWV0aG9kIHRvIGl0ZXJhdGUgb3ZlciB0aGUgbGlzdCBvZiBpdGVtc1xyXG4gICAqIGFuZCBhZGQgdGhlbSB0byBncmlkc3RlciBpbiB0aGUgZ2l2ZW4gb3JkZXJcclxuICAgKiBAcGFyYW0gd2lkZ2V0TGlzdCAgLWxpc3Qgb2Ygd2lkZ2V0c1xyXG4gICAqIEBwYXJhbSBpbmRleCAtaW5kZXggb2YgdGhlIGN1cnJlbnQgdmFsdWUgdG8gYmUgYWRkZWRcclxuICAgKi9cclxuICBhZGRXaWRnZXRMaXN0VG9Hcmlkc3Rlcih3aWRnZXRMaXN0OiBhbnksIGluZGV4OiBudW1iZXIpIHtcclxuICAgIGxldCBhcmVhQ29udGV4dCA9IHRoaXM7XHJcbiAgICBsZXQgaW5kZXhWYWwgPSBpbmRleCArIDE7XHJcbiAgICBpZiAoaW5kZXggPiB3aWRnZXRMaXN0Lmxlbmd0aCAtIDEpXHJcbiAgICAgIHJldHVybjtcclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoaW5kZXggPT0gMCkge1xyXG4gICAgICAgIGFyZWFDb250ZXh0LmFkZFdpZGdldCh3aWRnZXRMaXN0W2luZGV4XSk7XHJcbiAgICAgICAgYXJlYUNvbnRleHQuYWRkV2lkZ2V0TGlzdFRvR3JpZHN0ZXIod2lkZ2V0TGlzdCwgaW5kZXhWYWwpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgYXJlYUNvbnRleHQuYWRkV2lkZ2V0KHdpZGdldExpc3RbaW5kZXhdKTtcclxuICAgICAgICAgIGFyZWFDb250ZXh0LmFkZFdpZGdldExpc3RUb0dyaWRzdGVyKHdpZGdldExpc3QsIGluZGV4VmFsKTtcclxuICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb25pZmdBZGRDbGljaylcclxuICAgICAgdGhpcy5jb25pZmdBZGRDbGljay51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGlmICh0aGlzLndpZGdldEFkZEV2ZW50KVxyXG4gICAgICB0aGlzLndpZGdldEFkZEV2ZW50LnVuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgaWYgKHRoaXMud2lkZ2V0RGVsZXRlRXZlbnQpXHJcbiAgICAgIHRoaXMud2lkZ2V0RGVsZXRlRXZlbnQudW5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBpZiAodGhpcy53aWRnZXRMaWJyYXJ5RG9uZUNsaWNrKVxyXG4gICAgICB0aGlzLndpZGdldExpYnJhcnlEb25lQ2xpY2sudW5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBpZiAodGhpcy5yZWFycmFuZ2VXaWRnZXRDbGljaylcclxuICAgICAgdGhpcy5yZWFycmFuZ2VXaWRnZXRDbGljay51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGlmICh0aGlzLmN1cmF0ZWRGaWx0ZXJDaGFuZ2UpXHJcbiAgICAgIHRoaXMuY3VyYXRlZEZpbHRlckNoYW5nZS51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGlmICh0aGlzLmJ1bGtBY3Rpb25DbGljaylcclxuICAgICAgdGhpcy5idWxrQWN0aW9uQ2xpY2sudW5zdWJzY3JpYmUoKTtcclxuICAgIGlmICh0aGlzLmNhbGN1bGF0ZUxheW91dClcclxuICAgICAgdGhpcy5jYWxjdWxhdGVMYXlvdXQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIC8qKlRvIHVwZGF0ZSBwb3NpdGlvbi9kaW1lbnRpb24gb2YgYWxsIHdpZGdldHMgaW4gdGhlIGFyZWEgKi9cclxuICB1cGRhdGVXaWRnZXRzKCkge1xyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZVdpZGdldHModGhpcy5mb3JtYXRXaWRnZXREYXRhRm9yUG9zaXRpb25EZXRhaWxzKHRoaXMubWFwR3JpZHN0ZXJMaXN0VG9PYmplY3QodGhpcy53aWRnZXRMaXN0KSksXHJcbiAgICAgIHRoaXMuYXBwQ29uZmlnKS5zdWJzY3JpYmUod2lkZ2V0cyA9PiB7XHJcbiAgICAgIH0pO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipUbyB1cGRhdGUgd2lkZ2V0IGRpbWVuc2lvbnMgKi9cclxuICB1cGRhdGVXaWRnZXRQb3NpdGlvbih3aWRnZXRJbnN0YW5jZUlkOiBudW1iZXIpIHtcclxuXHJcbiAgICBsZXQgd2lkZ2V0RmlsdGVyZWRMaXN0ID0gW107XHJcbiAgICBsZXQgd2lkZ2V0ID0gdGhpcy53aWRnZXRMaXN0LmZpbHRlcihmaWx0ZXJlZCA9PiBmaWx0ZXJlZC53aWRnZXRJbmZvICYmIGZpbHRlcmVkLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCA9PSB3aWRnZXRJbnN0YW5jZUlkKTtcclxuICAgIGlmICh3aWRnZXQgJiYgd2lkZ2V0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgd2lkZ2V0RmlsdGVyZWRMaXN0LnB1c2god2lkZ2V0WzBdKTtcclxuICAgICAgbGV0IHdpZGdldExpc3QgPSB0aGlzLm1hcEdyaWRzdGVyTGlzdFRvT2JqZWN0KHdpZGdldEZpbHRlcmVkTGlzdCk7XHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS51cGRhdGVXaWRnZXRzKHRoaXMuZm9ybWF0V2lkZ2V0RGF0YUZvclBvc2l0aW9uRGV0YWlscyh3aWRnZXRMaXN0KSwgdGhpcy5hcHBDb25maWcpLnN1YnNjcmliZSh3aWRnZXRzID0+IHtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlRvIHJlc3RyaWN0IHJlcXVlc3QgcGF5bG9hZCB0byBiZSBvZiBtaW4gc2l6ZSAocG9zaXRpb24gJiBzaXplIGRldGFpbHMpICovXHJcbiAgZm9ybWF0V2lkZ2V0RGF0YUZvclBvc2l0aW9uRGV0YWlscyh3aWRnZXRJdGVtTGlzdDogSVdpZGdldEluZm9bXSkge1xyXG4gICAgbGV0IGl0ZW1MaXN0OiBhbnkgPSBbXTtcclxuICAgIHdpZGdldEl0ZW1MaXN0LmZvckVhY2goZnVuY3Rpb24gKHdpZGdldEl0ZW0pIHtcclxuICAgICAgbGV0IGl0ZW0gPSB7fSBhcyBJV2lkZ2V0SW5mbztcclxuICAgICAgaXRlbS53aWRnZXRJbnN0YW5jZUlkID0gd2lkZ2V0SXRlbS53aWRnZXRJbnN0YW5jZUlkO1xyXG4gICAgICBpdGVtLnBvc2l0aW9uX3ggPSB3aWRnZXRJdGVtLnBvc2l0aW9uX3g7XHJcbiAgICAgIGl0ZW0ucG9zaXRpb25feSA9IHdpZGdldEl0ZW0ucG9zaXRpb25feTtcclxuICAgICAgaXRlbS53aWR0aCA9IHdpZGdldEl0ZW0ud2lkdGg7XHJcbiAgICAgIGl0ZW0uaGVpZ2h0ID0gd2lkZ2V0SXRlbS5oZWlnaHQ7XHJcbiAgICAgIGl0ZW1MaXN0LnB1c2goaXRlbSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBpdGVtTGlzdDtcclxuICB9XHJcblxyXG4gIC8qKiBUbyByZXRyaWV2ZSB3aWRnZXRzIGJhc2VkIG9uIHVzZXJEYXNoYm9hcmRpZCBhbmQgYXJlYSBuYW1lICovXHJcbiAgbG9hZFdpZGdldHModXNlckRhc2hib2FySWQ6IG51bWJlciwgYXJlYUtleTogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy50ZW1wbGF0ZUNvbmZpZyAmJiB0aGlzLnRlbXBsYXRlQ29uZmlnLmluaXRpYWxXaWRnZXRDb3VudClcclxuICAgICAgdGhpcy5pbml0aWFsV2lkZ2V0Q291bnQgPSB0aGlzLnRlbXBsYXRlQ29uZmlnLmluaXRpYWxXaWRnZXRDb3VudDtcclxuICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcclxuICAgIGlmIChsb2NhdGlvbi5ocmVmLmluZGV4T2YoJy9raW9zay8nKSA+IC0xKVxyXG4gICAgICB0aGlzLmluaXRpYWxXaWRnZXRDb3VudCA9IDEwMDA7XHJcblxyXG4gICAgbGV0IHdpZGdldEluZm8gPSA8SVdpZGdldEluZm8+e1xyXG4gICAgICBkYXNoYm9hcmRJZDogdXNlckRhc2hib2FySWQudG9TdHJpbmcoKSxcclxuICAgICAgZGFzaGJvYXJkQXJlYUtleTogYXJlYUtleSxcclxuICAgICAgaXNJbmRpY2F0b3JEYXNoYm9hcmQ6IHRoaXMuaXNJbmRpY2F0b3JEYXNoYm9hcmRcclxuICAgIH1cclxuICAgXHJcbiAgICBsZXQgX3RoZSA9IHRoaXM7XHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0V2lkZ2V0c0J5RGFzaGJvYXJkQXJlYSh3aWRnZXRJbmZvLCB0aGlzLmFwcENvbmZpZykuc3Vic2NyaWJlKHdpZGdldHMgPT4ge1xyXG4gICAgICBfdGhlLndpZGdldExpc3QgPSBbXTtcclxuICAgICAgdGhpcy51c2VyV2lkZ2V0cyA9IHdpZGdldHM7XHJcbiAgICAgIHRoaXMuUEFNV2lkZ2V0cyA9IFtdO1xyXG4gICAgICB3aWRnZXRzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIHZhciBzZXR0aW5nczogYW55ID0gdW5kZWZpbmVkXHJcbiAgICAgICAgaWYgKGVsZW1lbnQud2lkZ2V0U2V0dGluZ3MpIHtcclxuICAgICAgICAgIHNldHRpbmdzID0gSlNPTi5wYXJzZShlbGVtZW50LndpZGdldFNldHRpbmdzKTtcclxuICAgICAgICAgIGlmIChzZXR0aW5ncyAmJiBzZXR0aW5ncy5pc1BBTVdpZGdldClcclxuICAgICAgICAgICAgdGhpcy5QQU1XaWRnZXRzLnB1c2goZWxlbWVudC53aWRnZXRJbnN0YW5jZUlkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmNoZWNrUEFNV2lkZ2V0cygpO1xyXG5cclxuICAgICAgaWYgKHdpZGdldHMgJiYgd2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmNsaWVudElkID0gd2lkZ2V0c1swXS5jbGllbnRJZDtcclxuICAgICAgICB0aGlzLmxvYWRXaWRnZXRXcmFwcGVycygpO1xyXG4gICAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuSGlkZURhc2hib2FyZEJhbm5lciwgZmFsc2UpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2hvd0VtcHR5RGFzaGJvYXJkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50LkhpZGVEYXNoYm9hcmRCYW5uZXIsIHRoaXMuc2hvd0VtcHR5RGFzaGJvYXJkKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKiogVG8gc2V0IEFyZWEoR3JpZHN0ZXIpIGhlaWdodCBkeW5hbWljYWxseSBhcyB3aWRnZXRzIGFyZSBhZGRlZC9yZW1vdmVkICovXHJcbiAgc2V0QXJlYUhlaWdodCgpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBsZXQgaXNNb2JpbGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5tb2JpbGVCcmVha3BvaW50ISA+IHRoaXMuZ3JpZFdyYXBwZXIubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCkge1xyXG4gICAgICAgIGlzTW9iaWxlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgYXJlYVNjcm9sbEhlaWdodCA9IDA7XHJcbiAgICAgIGxldCBhcmVhSGVpZ2h0ID0gMDtcclxuICAgICAgbGV0IGN1clJvd0hlaWdodCA9IDA7XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXBpKSB7XHJcbiAgICAgICAgY3VyUm93SGVpZ2h0ID0gdGhpcy5vcHRpb25zLmFwaS5nZXRDdXJyZW50Um93SGVpZ2h0ISgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnNob3dFbXB0eURhc2hib2FyZCA9IHRoaXMudXNlcldpZGdldHMubGVuZ3RoID4gMCA/IGZhbHNlIDogdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMud2lkZ2V0TGlzdC5mb3JFYWNoKCh0KSA9PiB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRIZWlnaHQgPSB0LnkhICsgdC5yb3dzO1xyXG4gICAgICAgIGlmIChjdXJyZW50SGVpZ2h0ID4gYXJlYVNjcm9sbEhlaWdodCkge1xyXG4gICAgICAgICAgYXJlYVNjcm9sbEhlaWdodCA9IGN1cnJlbnRIZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjdXJSb3dIZWlnaHQgPT0gMCkge1xyXG4gICAgICAgICAgY3VycmVudEhlaWdodCA9IHRoaXMud2lkZ2V0TGlzdFswXS5jdXJSb3dIZWlnaHQhO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0LndpZGdldEluZm8ucm93SGVpZ2h0ID0gY3VyUm93SGVpZ2h0O1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5ncmlkY2VsbEhlaWdodCA9IGN1clJvd0hlaWdodDtcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hcGkpIHtcclxuICAgICAgICBhcmVhSGVpZ2h0ID0gYXJlYVNjcm9sbEhlaWdodCAqIHRoaXMub3B0aW9ucy5hcGkuZ2V0Q3VycmVudFJvd0hlaWdodCEoKSArIDEwMDtcclxuICAgICAgfVxyXG4gICAgICBsZXQgYXJlYVNjcm9sbEhlaWdodE1vYiA9IDA7XHJcbiAgICAgIGlmIChpc01vYmlsZSkge1xyXG4gICAgICAgIGFyZWFTY3JvbGxIZWlnaHRNb2IgPSB0aGlzLndpZGdldExpc3QubGVuZ3RoICogMzAwICsgMjAwO1xyXG4gICAgICAgIGFyZWFIZWlnaHQgPSBhcmVhU2Nyb2xsSGVpZ2h0TW9iO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChhcmVhSGVpZ2h0IDwgNjAwKSB7XHJcbiAgICAgICAgYXJlYUhlaWdodCA9IDYwMDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmdyaWRoZWlnaHQgPSBhcmVhSGVpZ2h0O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKiogVG8gcmVtb3ZlIGEgd2lkZ2V0IGluc3RhbmNlIGZyb20gZGFzaGJvYXJkIGFuZCB0byBzYXZlIGluZm8gaW4gZGF0YWJhc2UgKi9cclxuICBkZWxldGVXaWRnZXQod2lkZ2V0SW5zdGFuY2VJZDogYW55LCBpc2FsZXJ0RGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG5cclxuICAgIGxldCB3aWRnZXQgPSB0aGlzLnVzZXJXaWRnZXRzLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICByZXR1cm4gaXRlbS53aWRnZXRJbnN0YW5jZUlkID09PSB3aWRnZXRJbnN0YW5jZUlkO1xyXG4gICAgfSk7XHJcbiAgICBpZiAod2lkZ2V0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy51c2VyV2lkZ2V0cy5zcGxpY2UodGhpcy51c2VyV2lkZ2V0cy5pbmRleE9mKHdpZGdldFswXSksIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlBBTVdpZGdldHMubGVuZ3RoID4gMCkge1xyXG4gICAgICB2YXIgaW5keCA9IHRoaXMuUEFNV2lkZ2V0cy5pbmRleE9mKHdpZGdldEluc3RhbmNlSWQpO1xyXG4gICAgICBpZiAoaW5keCA+IC0xKVxyXG4gICAgICAgIHRoaXMuUEFNV2lkZ2V0cy5zcGxpY2UoaW5keCwgMSk7XHJcbiAgICAgIHRoaXMuY2hlY2tQQU1XaWRnZXRzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGdyaWRzdGVySXRlbSA9IHRoaXMud2lkZ2V0TGlzdC5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgcmV0dXJuIGl0ZW0ud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkID09PSB3aWRnZXRJbnN0YW5jZUlkO1xyXG4gICAgfSk7XHJcbiAgICBpZiAoZ3JpZHN0ZXJJdGVtLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy53aWRnZXRMaXN0LnNwbGljZSh0aGlzLndpZGdldExpc3QuaW5kZXhPZihncmlkc3Rlckl0ZW1bMF0pLCAxKTtcclxuICAgICAgdGhpcy5zZXRBcmVhSGVpZ2h0KCk7XHJcbiAgICAgIGlmICghaXNhbGVydERpc2FibGVkKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmllci5ub3RpZnkoJ3N1Y2Nlc3MnLCBcIiBcIiArIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5XaWRnZXR0ZXh0JykgKyBcIiBcIiArIGdyaWRzdGVySXRlbVswXS53aWRnZXRJbmZvLndpZGdldFRpdGxlICsgXCIgXCIgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZGVsZXRlZFN1Y2Nlc2Z1bGx5JykgKyBcIiBcIik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc2hvd0VtcHR5RGFzaGJvYXJkID0gdGhpcy51c2VyV2lkZ2V0cy5sZW5ndGggPiAwID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgaWYgKHRoaXMuc2hvd0VtcHR5RGFzaGJvYXJkID09IHRydWUpIHtcclxuICAgICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5IaWRlRGFzaGJvYXJkQmFubmVyLCB0aGlzLnNob3dFbXB0eURhc2hib2FyZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipUbyByZWFycmFuZ2Ugd2lkZ2V0cyBwb3NpdGlvbiBpbiB0aGUgZGFzaGJvYXJkLCBjb21wYWN0TGVmdCZVcCxjb21wYWN0TGVmdCxjb21wYWN0VXAsZXRjKi9cclxuICByZWFycmFuZ2VXaWRnZXRzKCkge1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy51c2VyV2lkZ2V0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0aGlzLnVzZXJXaWRnZXRzW2ldLnBvc2l0aW9uX3ggPSAwO1xyXG4gICAgICB0aGlzLnVzZXJXaWRnZXRzW2ldLnBvc2l0aW9uX3kgPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMud2lkZ2V0TGlzdCA9IFtdO1xyXG4gICAgdGhpcy5sb2FkV2lkZ2V0V3JhcHBlcnMoKTtcclxuICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuSGlkZURhc2hib2FyZEJhbm5lciwgZmFsc2UpO1xyXG5cclxuICAgIGlmICh0aGlzLndpZGdldExpc3QubGVuZ3RoID4gMClcclxuICAgICAgdGhpcy51cGRhdGVXaWRnZXRQb3NpdGlvbih0aGlzLndpZGdldExpc3RbMF0ud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNldEFyZWFIZWlnaHQoKTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIC8qKlRvIGFkZCB3aWRnZXQgaW5zdGFuY2UgdG8gdGhlIGRhdGFiYXNlIHdpdGggdGhlIG5leHQgYXZhaWxhYmxlIHBvc2l0aW9uIGFuZCB0byBtYWtlIGNoYW5nZXMgaW5cclxuICAgKiBkYXNoYm9hcmQgYXJlYS5cclxuICAgKi9cclxuICBhZGRXaWRnZXQoZGF0YTogYW55KSB7XHJcbiAgICBkYXRhLmhlaWdodCA9IHRoaXMud2lkZ2V0SGVpZ2h0O1xyXG4gICAgZGF0YS53aWR0aCA9IHRoaXMud2lkZ2V0V2lkdGg7XHJcbiAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50LkhpZGVEYXNoYm9hcmRCYW5uZXIsIGZhbHNlKTtcclxuICAgIGlmIChkYXRhLndpZGdldFNldHRpbmdzKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgZGF0YS53aWRnZXRTZXR0aW5ncyA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgZGF0YS53aWRnZXRTZXR0aW5ncyA9IEpTT04ucGFyc2UoZGF0YS53aWRnZXRTZXR0aW5ncyk7XHJcblxyXG4gICAgICBpZiAoZGF0YS53aWRnZXRTZXR0aW5ncy5kZWZhdWx0Q29scykge1xyXG4gICAgICAgIGRhdGEud2lkdGggPSBkYXRhLndpZGdldFNldHRpbmdzLmRlZmF1bHRDb2xzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChkYXRhLndpZGdldFNldHRpbmdzLmRlZmF1bHRSb3dzKSB7XHJcbiAgICAgICAgZGF0YS5oZWlnaHQgPSBkYXRhLndpZGdldFNldHRpbmdzLmRlZmF1bHRSb3dzO1xyXG4gICAgICB9XHJcbiAgICAgIGRhdGEud2lkZ2V0U2V0dGluZ3MgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgZGF0YSA9IHRoaXMuc2V0UG9zaXRpb25zKGRhdGEpO1xyXG5cclxuICAgIC8qKiB0byBmaW5kIHRoZSBhdmFpbGFibGUgcG9zaXRpb24gaW4gZ3JpZHN0ZXIsIHRlbXAgY29tbWVudGluZyB0aGUgY29kZS1yZXR1cm5pbmcgaGlnaGVyIHkgdmFsdWUgdGhhbiBub3JtYWwgKi9cclxuICAgIGRhdGEuZGFzaGJvYXJkQXJlYUtleSA9IHRoaXMuYXJlYUtleTtcclxuICAgIGRhdGEuZGFzaGJvYXJkSWQgPSB0aGlzLnVzZXJEYXNoYm9hcmRJZDtcclxuICAgIHRoaXMubmd4U2VydmljZS5zdGFydCgpO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmFkZFdpZGdldChkYXRhLCB0aGlzLmFwcENvbmZpZykuc3Vic2NyaWJlKHdpZGdldCA9PiB7XHJcbiAgICAgIHRoaXMudXNlcldpZGdldHMucHVzaCh3aWRnZXQpO1xyXG4gICAgICBsZXQgZ3JpZHN0ZXJJdGVtID0gdGhpcy5yZXNwb25zaXZlU2VydmljZS5nZXRHcmlkc3Rlckl0ZW0od2lkZ2V0KTtcclxuICAgICAgdGhpcy53aWRnZXRMaXN0LnB1c2goZ3JpZHN0ZXJJdGVtKTtcclxuICAgICAgdGhpcy5zZXRBcmVhSGVpZ2h0KCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmFwaSkge1xyXG4gICAgICAgIGxldCBjdXJSb3dIZWlnaHQ6IG51bWJlciA9IE51bWJlcih0aGlzLm9wdGlvbnMuYXBpLmdldEN1cnJlbnRSb3dIZWlnaHQhKCkpO1xyXG4gICAgICAgIGlmIChjdXJSb3dIZWlnaHQgPiAwKSB7XHJcbiAgICAgICAgICB3aWRnZXQucm93SGVpZ2h0ID0gY3VyUm93SGVpZ2h0O1xyXG4gICAgICAgICAgdGhpcy5ncmlkY2VsbEhlaWdodCA9IGN1clJvd0hlaWdodDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdmFyIHdpZGdldEluc3RhbmNlSWQgPSAwO1xyXG4gICAgICBpZiAod2lkZ2V0ICYmIHdpZGdldC53aWRnZXRJbnN0YW5jZUlkKSB7XHJcbiAgICAgICAgd2lkZ2V0SW5zdGFuY2VJZCA9IHdpZGdldC53aWRnZXRJbnN0YW5jZUlkO1xyXG4gICAgICAgIC8qKlRvIHNhdmUgYWRkZWQgd2lkZ2V0IHBvc2l0aW9uIGluIGRiICovXHJcbiAgICAgICAgaWYgKHRoaXMucmVzcG9uc2l2ZVNlcnZpY2UuSXNEZXNrdG9wVmlldykge1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlV2lkZ2V0UG9zaXRpb24od2lkZ2V0SW5zdGFuY2VJZCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHdpZGdldC5zZXR0aW5ncyAmJiB3aWRnZXQuc2V0dGluZ3MuaXNQQU1XaWRnZXQpIHtcclxuICAgICAgICB0aGlzLlBBTVdpZGdldHMucHVzaCh3aWRnZXQud2lkZ2V0SW5zdGFuY2VJZCk7XHJcbiAgICAgICAgdGhpcy5jaGVja1BBTVdpZGdldHMoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5XaWRnZXRBZGRlZCwgd2lkZ2V0KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRQb3NpdGlvbnMoZGF0YTogYW55KSB7XHJcbiAgICBkYXRhLnBvc2l0aW9uX3ggPSAwO1xyXG4gICAgZGF0YS5wb3NpdGlvbl95ID0gMDtcclxuICAgIGlmICghdGhpcy5yZXNwb25zaXZlU2VydmljZS5Jc0Rlc2t0b3BWaWV3KSB7XHJcbiAgICAgIGlmICh0aGlzLnVzZXJXaWRnZXRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBsZXQgd2lkZ2V0ID0gdGhpcy51c2VyV2lkZ2V0c1t0aGlzLnVzZXJXaWRnZXRzLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgIGlmICh3aWRnZXQucG9zaXRpb25feCArIHdpZGdldC53aWR0aCA+ICh0aGlzLnJlc3BvbnNpdmVTZXJ2aWNlLm1heENvbHNEZXNrdG9wIC8gMikpIHtcclxuICAgICAgICAgIGRhdGEucG9zaXRpb25feSA9IHdpZGdldC5wb3NpdGlvbl95ICsgMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBkYXRhLnBvc2l0aW9uX3kgPSB3aWRnZXQucG9zaXRpb25feTtcclxuICAgICAgICAgIGRhdGEucG9zaXRpb25feCA9IHRoaXMucmVzcG9uc2l2ZVNlcnZpY2UubWF4Q29sc0Rlc2t0b3AgLSAod2lkZ2V0LnBvc2l0aW9uX3ggKyB3aWRnZXQud2lkdGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG5cclxuICAvKiogVG8gYWRkIHdpZGdldCB0byBjdXJyZW50IHdpZGdldCBsaXN0ICxpbnZva2VkIGZyb20gY29weSB3aWRnZXQgd2luZG93Ki9cclxuICBjb3B5V2lkZ2V0KGRhdGE6IGFueSkge1xyXG4gICAgZGF0YSA9IHRoaXMuc2V0UG9zaXRpb25zKGRhdGEpO1xyXG4gICAgaWYgKCF0aGlzLnJlc3BvbnNpdmVTZXJ2aWNlLklzRGVza3RvcFZpZXcpIHtcclxuICAgICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZVdpZGdldHModGhpcy5mb3JtYXRXaWRnZXREYXRhRm9yUG9zaXRpb25EZXRhaWxzKFtkYXRhXSksIHRoaXMuYXBwQ29uZmlnKS5zdWJzY3JpYmUod2lkZ2V0cyA9PiB7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy51c2VyV2lkZ2V0cy5wdXNoKGRhdGEpO1xyXG4gICAgbGV0IGdyaWRzdGVySXRlbSA9IHRoaXMucmVzcG9uc2l2ZVNlcnZpY2UuZ2V0R3JpZHN0ZXJJdGVtKGRhdGEpO1xyXG4gICAgdGhpcy53aWRnZXRMaXN0LnB1c2goZ3JpZHN0ZXJJdGVtKTtcclxuICAgIHRoaXMuc2V0QXJlYUhlaWdodCgpO1xyXG4gICAgaWYgKGRhdGEuc2V0dGluZ3MgJiYgZGF0YS5zZXR0aW5ncy5pc1BBTVdpZGdldCkge1xyXG4gICAgICB0aGlzLlBBTVdpZGdldHMucHVzaChkYXRhLndpZGdldEluc3RhbmNlSWQpO1xyXG4gICAgICB0aGlzLmNoZWNrUEFNV2lkZ2V0cygpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIG1hcE9iamVjdExpc3RUb0dyaWRzdGVySXRlbUxpc3Qod2lkZ2V0TGlzdDogQXJyYXk8SVdpZGdldEluZm8+KSB7XHJcbiAgICBsZXQgd2lkZ2V0QXJyYXkgPSBBcnJheTxHcmlkc3Rlckl0ZW0+KCk7XHJcbiAgICB3aWRnZXRMaXN0LmZvckVhY2god2lkZ2V0ID0+IHtcclxuICAgICAgd2lkZ2V0QXJyYXkucHVzaCh0aGlzLnJlc3BvbnNpdmVTZXJ2aWNlLmdldEdyaWRzdGVySXRlbSh3aWRnZXQpKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHdpZGdldEFycmF5O1xyXG4gIH1cclxuXHJcbiAgbWFwR3JpZHN0ZXJJdGVtVG9PYmplY3Qod2lkZ2V0SXRlbTogR3JpZHN0ZXJJdGVtKSB7XHJcbiAgICBsZXQgd2lkZ2V0OiBJV2lkZ2V0SW5mbztcclxuICAgIHdpZGdldCA9IHdpZGdldEl0ZW0ud2lkZ2V0SW5mbztcclxuICAgIHdpZGdldC5oZWlnaHQgPSB3aWRnZXRJdGVtLnJvd3M7XHJcbiAgICB3aWRnZXQud2lkdGggPSB3aWRnZXRJdGVtLmNvbHM7XHJcbiAgICB3aWRnZXQucG9zaXRpb25feCA9IHdpZGdldEl0ZW0ueCE7XHJcbiAgICB3aWRnZXQucG9zaXRpb25feSA9IHdpZGdldEl0ZW0ueSE7XHJcbiAgICB3aWRnZXQucm93SGVpZ2h0ID0gd2lkZ2V0SXRlbS5jdXJSb3dIZWlnaHQhO1xyXG4gICAgcmV0dXJuIHdpZGdldDtcclxuICB9XHJcblxyXG4gIG1hcEdyaWRzdGVyTGlzdFRvT2JqZWN0KHdpZGdldEl0ZW1MaXN0OiBBcnJheTxHcmlkc3Rlckl0ZW0+KSB7XHJcbiAgICBsZXQgd2lkZ2V0TGlzdEFycmF5ID0gQXJyYXk8SVdpZGdldEluZm8+KCk7XHJcbiAgICB3aWRnZXRJdGVtTGlzdC5mb3JFYWNoKHdpZGdldCA9PiB7XHJcbiAgICAgIHdpZGdldExpc3RBcnJheS5wdXNoKHRoaXMubWFwR3JpZHN0ZXJJdGVtVG9PYmplY3Qod2lkZ2V0KSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB3aWRnZXRMaXN0QXJyYXk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYnV0dG9uQ2xpY2soKSB7XHJcbiAgICBpZiAodGhpcy5lbXB0eURhc2hib2FyZEJ1dHRvbkFjdGlvbiA9PSBcIndpZGdldHNcIilcclxuICAgICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5BZGROZXdXaWRnZXRUb0Rhc2hib2FyZCwgbnVsbCk7XHJcbiAgICBlbHNlIGlmICh0aGlzLmVtcHR5RGFzaGJvYXJkQnV0dG9uQWN0aW9uID09IFwiZmlsdGVyXCIpXHJcbiAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuR2xvYmFsRmlsdGVyQ2xpY2ssIG51bGwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZUFwcGxpZWRGaWx0ZXJzKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5VcGRhdGVBcHBsZWRGaXRlckZvckluYXBwbGljYWJsZUZpbHRlciwgZGF0YSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2hlY2tQQU1XaWRnZXRzKCkge1xyXG4gICAgaWYgKHRoaXMuUEFNV2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuU2hvd0luYXBwbGljYWJsZUZpbHRlck1lc3NhZ2UsIHRydWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuU2hvd0luYXBwbGljYWJsZUZpbHRlck1lc3NhZ2UsIGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG59IiwiPGRpdiAjZ3JpZFdyYXBwZXIgY2xhc3M9XCJ3cmFwIGdyaWRzdGVyIGdyaWRzdGVyLW1vYmlsZVwiXHJcbiAgW25nU3R5bGVdPVwieydoZWlnaHQnOiB1c2VyV2lkZ2V0cy5sZW5ndGggPiAwID8gKGdyaWRoZWlnaHQgKyAncHgnKSA6ICd1bnNldCd9XCI+XHJcbiAgPCEtLSA8ZGl2ICNncmlkV3JhcHBlciBjbGFzcz1cIndyYXAgZ3JpZHN0ZXJcIj4gLS0+XHJcbiAgPGdyaWRzdGVyIFtvcHRpb25zXT1cIm9wdGlvbnNcIiBzdHlsZT1cImhlaWdodDoxMDAlO1wiICpuZ0lmPVwidXNlcldpZGdldHMubGVuZ3RoID4gMFwiPlxyXG4gICAgPGdyaWRzdGVyLWl0ZW0gW2l0ZW1dPVwiaXRlbVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHdpZGdldExpc3RcIj5cclxuICAgICAgPHJhLXdpZGdldC1jb250YWluZXIgKHdpZGdldExvYWRlZCk9XCJ3aWRnZXRMb2FkZWQoJGV2ZW50LCAgaXRlbSlcIiBbY2FuTG9hZERhdGFdPVwiaXRlbS5jYW5Mb2FkRGF0YVwiIChkYXRhTG9hZGVkKT1cImRhdGFMb2FkZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgW2J1bGstYWN0aW9uLWRhdGFdPVwiYnVsa0FjdGlvbkRhdGFcIiBbZGFzaGJvYXJkLWluZm9dPVwiZGFzaGJvYXJkSW5mb1wiIFthcHAtY29uZmlnXT1cImFwcENvbmZpZ1wiXHJcbiAgICAgICAgW2V2ZW50LWJ1c109XCJyYURhc2hib2FyZEV2ZW50QnVzXCIgKHdpZGdldERlbGV0ZWQpPVwiZGVsZXRlV2lkZ2V0KCRldmVudClcIiBbZGF0YV09XCJpdGVtXCJcclxuICAgICAgICBbZ2xvYmFsLWZpbHRlcl09XCJnbG9iYWxGaWx0ZXJcIiBbZ3JpZC1jZWxsLWhlaWdodF09XCJncmlkY2VsbEhlaWdodFwiICpuZ0lmPVwiZ3JpZGNlbGxIZWlnaHQgJiYgZ3JpZGNlbGxIZWlnaHQgPiAwXCJcclxuICAgICAgICBbd2lkZ2V0LXdpZHRoXT1cIml0ZW0uY29sc1wiIFt3aWRnZXQtaGVpZ2h0XT1cIml0ZW0ucm93c1wiIFt3aWRnZXQtaW5zdGFuY2UtaWRdPVwiaXRlbS53aWRnZXRJbnN0YW5jZUlkXCJcclxuICAgICAgICBbZG9tLXJlc2l6ZWRdPVwiZG9tUmVzaXplZFwiICh1cGRhdGVBcHBsaWVkRmlsdGVycyk9XCJ1cGRhdGVBcHBsaWVkRmlsdGVycygkZXZlbnQpXCI+XHJcbiAgICAgIDwvcmEtd2lkZ2V0LWNvbnRhaW5lcj5cclxuICAgIDwvZ3JpZHN0ZXItaXRlbT5cclxuICA8L2dyaWRzdGVyPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZW1wdHktcGFkZGluZyBraW9zay1oaWRlXCIgKm5nSWY9XCJzaG93RW1wdHlEYXNoYm9hcmRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJlbXB0eS13cmFwcGVyXCI+XHJcbiAgICAgIDxkaXY+PC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eS1wcmVmaXhcIj5cclxuICAgICAgICA8IS0tIDxpIGNsYXNzPVwiZmFsIGZhLWVkaXQgZWRpdC1pY29uXCI+PC9pPiAtLT5cclxuICAgICAgICA8c3Bhbj57e2VtcHR5RGFzaGJvYXJkVGl0bGV9fTwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxociBjbGFzcz1cImhvcml6b250YWxMaW5lLXNvbGlkXCIgLz5cclxuICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LWNvbnRlbnQgbGlnaHRcIj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBlbXB0eS1tc2dcIj5cclxuICAgICAgICAgICAge3tlbXB0eURhc2hib2FyZE1zZzF9fSA8YnIgLz5cclxuICAgICAgICAgICAge3tlbXB0eURhc2hib2FyZE1zZzJ9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaXNXaWRnZXRNZ21udFwiIGNsYXNzPVwiYnRuIGJ0bkxpYiBidG4tc20gZGFzaGJvYXJkLWJ1dHRvbiBsaWdodFwiIChjbGljayk9XCJidXR0b25DbGljaygpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwie3tlbXB0eURhc2hib2FyZEJ1dHRvbkljb259fVwiPjwvaT57e2VtcHR5RGFzaGJvYXJkQnV0dG9uVGV4dH19PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxub3RpZmllci1jb250YWluZXI+PC9ub3RpZmllci1jb250YWluZXI+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -57,10 +57,11 @@ export var RAEvent;
57
57
  /** When user change the curated filter(eg:data streams), system will create/delete widgets */
58
58
  RAEvent["CuratedFilterChange"] = "CuratedFilterChange";
59
59
  RAEvent["GlobalFilterClick"] = "GlobalFilterClick";
60
+ RAEvent["LayoutChange"] = "LayoutChange";
60
61
  })(RAEvent || (RAEvent = {}));
61
62
  export var RAEventKey;
62
63
  (function (RAEventKey) {
63
64
  /** on edit widget click */
64
65
  RAEventKey["WidgetInstanceId"] = "widgetInstanceId";
65
66
  })(RAEventKey || (RAEventKey = {}));
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmEuZXZlbnQuZW51bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3JhLWRhc2hib2FyZC1mcmFtZXdvcmsvc3JjL2xpYi9yYS5ldmVudC5lbnVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBTixJQUFZLE9Bc0ZYO0FBdEZELFdBQVksT0FBTztJQUVmLCtDQUErQztJQUMvQyw0Q0FBaUMsQ0FBQTtJQUVqQyxvRUFBb0U7SUFDcEUsa0RBQXVDLENBQUE7SUFFdkMsaUZBQWlGO0lBQ2pGLGtEQUF1QyxDQUFBO0lBRXZDLGtGQUFrRjtJQUNsRixnREFBcUMsQ0FBQTtJQUVyQyxzREFBc0Q7SUFDdEQsNENBQWlDLENBQUE7SUFFakMsbUZBQW1GO0lBQ25GLDBDQUErQixDQUFBO0lBRS9CLHlDQUF5QztJQUN6QyxnREFBcUMsQ0FBQTtJQUVyQyxzQ0FBc0M7SUFDdEMsOERBQW1ELENBQUE7SUFFbkQsOEVBQThFO0lBQzlFLGdEQUFxQyxDQUFBO0lBRXJDLDREQUE0RDtJQUM1RCx3RUFBNkQsQ0FBQTtJQUU3RCxpREFBaUQ7SUFDakQsMENBQStCLENBQUE7SUFFL0IsOENBQThDO0lBQzlDLG9DQUF5QixDQUFBO0lBRXpCLDhDQUE4QztJQUM5QyxvQ0FBeUIsQ0FBQTtJQUV6QixrREFBa0Q7SUFDbEQsd0NBQTZCLENBQUE7SUFFN0Isc0ZBQXNGO0lBQ3RGLGtDQUF1QixDQUFBO0lBRXZCLGlEQUFpRDtJQUNqRCw0REFBaUQsQ0FBQTtJQUVqRCxpRUFBaUU7SUFDakUsc0RBQTJDLENBQUE7SUFFM0MsNkJBQTZCO0lBQzdCLGdEQUFxQyxDQUFBO0lBRXJDLGlDQUFpQztJQUNqQyxzQ0FBMkIsQ0FBQTtJQUUzQixnRUFBZ0U7SUFDaEUsOEVBQW1FLENBQUE7SUFFbkUsc0NBQXNDO0lBQ3RDLDhEQUFtRCxDQUFBO0lBRW5ELHlDQUF5QztJQUN6Qyw4REFBbUQsQ0FBQTtJQUVuRCxzREFBMkMsQ0FBQTtJQUUzQyxpREFBaUQ7SUFDakQsZ0VBQXFELENBQUE7SUFFckQseURBQXlEO0lBQ3pELDRGQUFpRixDQUFBO0lBRWpGLDhEQUE4RDtJQUM5RCwwRUFBK0QsQ0FBQTtJQUUvRCwwQkFBMEI7SUFDMUIsOENBQW1DLENBQUE7SUFFbkMsNEJBQTRCO0lBQzVCLDhGQUE4RjtJQUM5RixzREFBMkMsQ0FBQTtJQUMzQyxrREFBdUMsQ0FBQTtBQUMzQyxDQUFDLEVBdEZXLE9BQU8sS0FBUCxPQUFPLFFBc0ZsQjtBQUVELE1BQU0sQ0FBTixJQUFZLFVBR1g7QUFIRCxXQUFZLFVBQVU7SUFDbEIsMkJBQTJCO0lBQzNCLG1EQUFxQyxDQUFBO0FBQ3pDLENBQUMsRUFIVyxVQUFVLEtBQVYsVUFBVSxRQUdyQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIFJBRXZlbnQge1xyXG5cclxuICAgIC8qKiB3aWRnZXQgc2VsZWN0aW9uIGNsaWNrIG9uIHdpZGdldCBsaWJyYXJ5ICovXHJcbiAgICBXaWRnZXRTZWxlY3RlZCA9IFwid2lkZ2V0U2VsZWN0ZWRcIixcclxuXHJcbiAgICAvKiogdHJpZ2dlcnMgd2hlbiB1c2VyIGNsaWNrIG9uIHRoZSBlZGl0IGxpbmsgaW4gd2lkZ2V0IGNvbnRhaW5lciAqL1xyXG4gICAgV2lkZ2V0RWRpdENsaWNrZWQgPSBcIndpZGdldEVkaXRDbGlja2VkXCIsXHJcblxyXG4gICAgLyoqIHRyaWdnZXJzIHdoZW4gdXNlciBjbGlja3MgdGhlIGNhbmNlbCBidXR0b24gb24gd2lkZ2V0IGNvbmZpZ3VyYXRpb24gd2luZG93ICovXHJcbiAgICBDb25maWdDYW5jZWxDbGljayA9IFwiY29uZmlnQ2FuY2VsQ2xpY2tcIixcclxuXHJcbiAgICAvKiogdHJpZ2dlcnMgd2hlbiB1c2VyIGNsaWNrIG9uIHRoZSBjbG9zZSBidXR0b24gb24gd2lkZ2V0IGNvbmZpZ3VyYXRpb24gd2luZG93ICovXHJcbiAgICBDb25maWdDbG9zZUNsaWNrID0gXCJjb25maWdDbG9zZUNsaWNrXCIsXHJcblxyXG4gICAgLyoqIGFkZCBidXR0b24gY2xpY2sgb24gd2lkZ2V0IGNvbmZpZ3VyYXRpb24gd2luZG93ICovXHJcbiAgICBDb25maWdBZGRDbGljayA9IFwiY29uZmlnQWRkQ2xpY2tcIixcclxuXHJcbiAgICAvKiogdHJpZ2dlcnMgd2hlbiBhIHVzZXIgY2xpY2sgb24gdGhlIHNhdmUgYnV0dG9uIGluIHdpZGdldCBjb25maWd1cmF0aW9uIHdpbmRvdyAqL1xyXG4gICAgQ29uZmlnQ2hhbmdlZCA9IFwiY29uZmlnQ2hhbmdlZFwiLFxyXG5cclxuICAgIC8qKlRvIHJlYXJyYW5nZSB3aWRnZXRzIGluIGEgZGFzaGJvYXJkICovXHJcbiAgICBSZWFycmFuZ2VDbGlja2VkID0gXCJyZWFycmFuZ2VDbGlja2VkXCIsXHJcblxyXG4gICAgLyoqZGFzaGJvYXJkIGN1c3RvbWl6ZSBidXR0b24gY2xpY2sgKi9cclxuICAgIERhc2hib2FyZEN1c3RvbWl6ZUNsaWNrID0gXCJkYXNoYm9hcmRDdXN0b21pemVDbGlja1wiLFxyXG5cclxuICAgIC8qKnRyaWdnZXJzIHdoZW4gdXNlciBjbGlja3Mgb24gdGhlIGRhc2hib2FyZCBjaGFuZ2UgaWNvbiBpbiBoZWFkZXIgc2VjdGlvbiAqL1xyXG4gICAgRGFzaGJvYXJkQ2hhbmdlZCA9IFwiZGFzaGJvYXJkQ2hhbmdlZFwiLFxyXG5cclxuICAgIC8qKiB0cmlnZ2VycyB3aGVuIHVzZXIgY2xpY2tzIHRoZSBjbG9zZSBidXR0b24gb24gbGlicmFyeSAqL1xyXG4gICAgV2lkZ2V0TGlicmFyeUNsb3NlQnRuQ2xpY2tlZCA9IFwiV2lkZ2V0TGlicmFyeUNsb3NlQnRuQ2xpY2tlZFwiLFxyXG5cclxuICAgIC8qKiB0cmlnZ2VycyB3aGVuIHVzZXIgY2xpY2tzIG9uIHZpZXcgZGFzaGJvYXJkKi9cclxuICAgIExvYWREYXNoYm9hcmQgPSBcIkxvYWREYXNoYm9hcmRcIixcclxuXHJcbiAgICAvKiogdHJpZ2dlcnMgd2hlbiB1c2VyIGNsaWNrcyBvbiBjb3B5d2lkZ2V0ICovXHJcbiAgICBDb3B5V2lkZ2V0ID0gXCJDb3B5V2lkZ2V0XCIsXHJcblxyXG4gICAgLyoqdHJpZ2dlcnMgd2hlbiB1c2VyIGNsaWNrcyBvbiBNb3ZlIHdpZGdldCAqL1xyXG4gICAgTW92ZVdpZGdldCA9IFwiTW92ZVdpZGdldFwiLFxyXG5cclxuICAgIC8qKnRyaWdnZXJzIHdoZW4gdXNlciByYWlzZSBkZWxldGUgd2lkZ2V0IGV2ZW50ICovXHJcbiAgICBXaWRnZXREZWxldGUgPSBcIldpZGdldERlbGV0ZVwiLFxyXG5cclxuICAgIC8qKiB1c2VkIHRvIGFkZCB3aWRnZXQgdG8gd2lkZ2V0bGlzdCB3aGVuIHVzZXIgY29waWVzIGEgd2lkZ2V0IHRvIGN1cnJlbnQgZGFzaGJvYXJkICovXHJcbiAgICBBZGRXaWRnZXQgPSBcIkFkZFdpZGdldFwiLFxyXG5cclxuICAgIC8qKiBkb25lIGJ1dHRvbiBjbGljayBvbiB3aWRnZXQgbGlicmFyeSBmbHlvdXQgKi9cclxuICAgIHdpZGdldExpYnJhcnlEb25lQ2xpY2sgPSBcIndpZGdldExpYnJhcnlEb25lQ2xpY2tcIixcclxuXHJcbiAgICAvKipyZWZyZXNoIGZhdm9yaXRlIGljb24gYWZ0ZXIgc3J0dGluZyBhbmQgcmVzZXR0aW5nIGZhdm9yaXRlcyAqL1xyXG4gICAgZmF2b3JpdGVJY29uUmVmcmVzaCA9IFwiZmF2b3JpdGVJY29uUmVmcmVzaFwiLFxyXG5cclxuICAgIC8qKnRvIHJlZnJlc2ggbWVudSBjb250ZW50ICovXHJcbiAgICBRdWlja0xpbmtSZWZyZXNoID0gXCJRdWlja0xpbmtSZWZyZXNoXCIsXHJcblxyXG4gICAgLyoqVG8gcmFpc2Ugd2lkZ2V0IGFkZGVkIGV2ZW50ICovXHJcbiAgICBXaWRnZXRBZGRlZCA9IFwiV2lkZ2V0QWRkZWRcIixcclxuXHJcbiAgICAvKipUbyB1cGRhdGUgZ2xvYmFsIGZpbHRlciBzaXRlIGZyb20gbWFwIHdpZGdldCBzZWxlY3RlZCBzaXRlICovXHJcbiAgICBVcGRhdGVHbG9iYWxGaWx0ZXJGcm9tTWFwV2lkZ2V0ID0gXCJVcGRhdGVHbG9iYWxGaWx0ZXJGcm9tTWFwV2lkZ2V0XCIsXHJcblxyXG4gICAgLyoqVG8gYWRkIHdpZGdldCBvbiBlbXB0eSBkYXNoYm9hcmQgKi9cclxuICAgIEFkZFdpZGdldEVtcHR5RGFzaGJvYXJkID0gXCJBZGRXaWRnZXRFbXB0eURhc2hib2FyZFwiLFxyXG5cclxuICAgIC8qKlRvIHJhaXNlIG5ldyB3aWRnZXQgYWRkIGNsaWNrIGV2ZW50ICovXHJcbiAgICBBZGROZXdXaWRnZXRUb0Rhc2hib2FyZCA9IFwiQWRkTmV3V2lkZ2V0VG9EYXNoYm9hcmRcIixcclxuXHJcbiAgICBIaWRlRGFzaGJvYXJkQmFubmVyID0gXCJIaWRlRGFzaGJvYXJkQmFubmVyXCIsXHJcblxyXG4gICAgLyoqVG8gbGF1bmNoIGZseW91dCBmcm9tIGN1c3RvbSB3aWRnZXQgbGlicmFyeSAqL1xyXG4gICAgTGF1bmNoQ3VzdG9tV2lkZ2V0Rmx5b3V0ID0gXCJMYXVuY2hDdXN0b21XaWRnZXRGbHlvdXRcIixcclxuXHJcbiAgICAvKip1cGRhdGUgYXBwbGllZCBmaWx0ZXIgYmFkZ2UgZm9yIGluYXBsaWNhYmxlIGZpbHRlcnMgKi9cclxuICAgIFVwZGF0ZUFwcGxlZEZpdGVyRm9ySW5hcHBsaWNhYmxlRmlsdGVyID0gXCJVcGRhdGVBcHBsZWRGaXRlckZvckluYXBwbGljYWJsZUZpbHRlclwiLFxyXG5cclxuICAgIC8qKnNob3cgaW5hcHBsaWNhYmxlIGZpbHRlciBtZXNzYWdlIGluIGdsb2JhbCBmaWx0ZXIgZmx5b3V0ICovXHJcbiAgICBTaG93SW5hcHBsaWNhYmxlRmlsdGVyTWVzc2FnZSA9IFwiU2hvd0luYXBwbGljYWJsZUZpbHRlck1lc3NhZ2VcIixcclxuXHJcbiAgICAvKiogQnVsayBBY3Rpb24gQ2xpY2tlZCAqL1xyXG4gICAgQnVsa0FjdGlvbkNsaWNrID0gXCJCdWxrQWN0aW9uQ2xpY2tcIixcclxuXHJcbiAgICAvKiogR2xvYmFsIEZpbHRlciBDbGlja2VkICovXHJcbiAgICAvKiogV2hlbiB1c2VyIGNoYW5nZSB0aGUgY3VyYXRlZCBmaWx0ZXIoZWc6ZGF0YSBzdHJlYW1zKSwgc3lzdGVtIHdpbGwgY3JlYXRlL2RlbGV0ZSB3aWRnZXRzICovXHJcbiAgICBDdXJhdGVkRmlsdGVyQ2hhbmdlID0gXCJDdXJhdGVkRmlsdGVyQ2hhbmdlXCIsXHJcbiAgICBHbG9iYWxGaWx0ZXJDbGljayA9IFwiR2xvYmFsRmlsdGVyQ2xpY2tcIlxyXG59XHJcblxyXG5leHBvcnQgZW51bSBSQUV2ZW50S2V5IHtcclxuICAgIC8qKiBvbiBlZGl0IHdpZGdldCBjbGljayAqL1xyXG4gICAgV2lkZ2V0SW5zdGFuY2VJZCA9IFwid2lkZ2V0SW5zdGFuY2VJZFwiXHJcbn1cclxuXHJcbiJdfQ==
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmEuZXZlbnQuZW51bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3JhLWRhc2hib2FyZC1mcmFtZXdvcmsvc3JjL2xpYi9yYS5ldmVudC5lbnVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBTixJQUFZLE9BdUZYO0FBdkZELFdBQVksT0FBTztJQUVmLCtDQUErQztJQUMvQyw0Q0FBaUMsQ0FBQTtJQUVqQyxvRUFBb0U7SUFDcEUsa0RBQXVDLENBQUE7SUFFdkMsaUZBQWlGO0lBQ2pGLGtEQUF1QyxDQUFBO0lBRXZDLGtGQUFrRjtJQUNsRixnREFBcUMsQ0FBQTtJQUVyQyxzREFBc0Q7SUFDdEQsNENBQWlDLENBQUE7SUFFakMsbUZBQW1GO0lBQ25GLDBDQUErQixDQUFBO0lBRS9CLHlDQUF5QztJQUN6QyxnREFBcUMsQ0FBQTtJQUVyQyxzQ0FBc0M7SUFDdEMsOERBQW1ELENBQUE7SUFFbkQsOEVBQThFO0lBQzlFLGdEQUFxQyxDQUFBO0lBRXJDLDREQUE0RDtJQUM1RCx3RUFBNkQsQ0FBQTtJQUU3RCxpREFBaUQ7SUFDakQsMENBQStCLENBQUE7SUFFL0IsOENBQThDO0lBQzlDLG9DQUF5QixDQUFBO0lBRXpCLDhDQUE4QztJQUM5QyxvQ0FBeUIsQ0FBQTtJQUV6QixrREFBa0Q7SUFDbEQsd0NBQTZCLENBQUE7SUFFN0Isc0ZBQXNGO0lBQ3RGLGtDQUF1QixDQUFBO0lBRXZCLGlEQUFpRDtJQUNqRCw0REFBaUQsQ0FBQTtJQUVqRCxpRUFBaUU7SUFDakUsc0RBQTJDLENBQUE7SUFFM0MsNkJBQTZCO0lBQzdCLGdEQUFxQyxDQUFBO0lBRXJDLGlDQUFpQztJQUNqQyxzQ0FBMkIsQ0FBQTtJQUUzQixnRUFBZ0U7SUFDaEUsOEVBQW1FLENBQUE7SUFFbkUsc0NBQXNDO0lBQ3RDLDhEQUFtRCxDQUFBO0lBRW5ELHlDQUF5QztJQUN6Qyw4REFBbUQsQ0FBQTtJQUVuRCxzREFBMkMsQ0FBQTtJQUUzQyxpREFBaUQ7SUFDakQsZ0VBQXFELENBQUE7SUFFckQseURBQXlEO0lBQ3pELDRGQUFpRixDQUFBO0lBRWpGLDhEQUE4RDtJQUM5RCwwRUFBK0QsQ0FBQTtJQUUvRCwwQkFBMEI7SUFDMUIsOENBQW1DLENBQUE7SUFFbkMsNEJBQTRCO0lBQzVCLDhGQUE4RjtJQUM5RixzREFBMkMsQ0FBQTtJQUMzQyxrREFBdUMsQ0FBQTtJQUN2Qyx3Q0FBNkIsQ0FBQTtBQUNqQyxDQUFDLEVBdkZXLE9BQU8sS0FBUCxPQUFPLFFBdUZsQjtBQUVELE1BQU0sQ0FBTixJQUFZLFVBR1g7QUFIRCxXQUFZLFVBQVU7SUFDbEIsMkJBQTJCO0lBQzNCLG1EQUFxQyxDQUFBO0FBQ3pDLENBQUMsRUFIVyxVQUFVLEtBQVYsVUFBVSxRQUdyQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIFJBRXZlbnQge1xyXG5cclxuICAgIC8qKiB3aWRnZXQgc2VsZWN0aW9uIGNsaWNrIG9uIHdpZGdldCBsaWJyYXJ5ICovXHJcbiAgICBXaWRnZXRTZWxlY3RlZCA9IFwid2lkZ2V0U2VsZWN0ZWRcIixcclxuXHJcbiAgICAvKiogdHJpZ2dlcnMgd2hlbiB1c2VyIGNsaWNrIG9uIHRoZSBlZGl0IGxpbmsgaW4gd2lkZ2V0IGNvbnRhaW5lciAqL1xyXG4gICAgV2lkZ2V0RWRpdENsaWNrZWQgPSBcIndpZGdldEVkaXRDbGlja2VkXCIsXHJcblxyXG4gICAgLyoqIHRyaWdnZXJzIHdoZW4gdXNlciBjbGlja3MgdGhlIGNhbmNlbCBidXR0b24gb24gd2lkZ2V0IGNvbmZpZ3VyYXRpb24gd2luZG93ICovXHJcbiAgICBDb25maWdDYW5jZWxDbGljayA9IFwiY29uZmlnQ2FuY2VsQ2xpY2tcIixcclxuXHJcbiAgICAvKiogdHJpZ2dlcnMgd2hlbiB1c2VyIGNsaWNrIG9uIHRoZSBjbG9zZSBidXR0b24gb24gd2lkZ2V0IGNvbmZpZ3VyYXRpb24gd2luZG93ICovXHJcbiAgICBDb25maWdDbG9zZUNsaWNrID0gXCJjb25maWdDbG9zZUNsaWNrXCIsXHJcblxyXG4gICAgLyoqIGFkZCBidXR0b24gY2xpY2sgb24gd2lkZ2V0IGNvbmZpZ3VyYXRpb24gd2luZG93ICovXHJcbiAgICBDb25maWdBZGRDbGljayA9IFwiY29uZmlnQWRkQ2xpY2tcIixcclxuXHJcbiAgICAvKiogdHJpZ2dlcnMgd2hlbiBhIHVzZXIgY2xpY2sgb24gdGhlIHNhdmUgYnV0dG9uIGluIHdpZGdldCBjb25maWd1cmF0aW9uIHdpbmRvdyAqL1xyXG4gICAgQ29uZmlnQ2hhbmdlZCA9IFwiY29uZmlnQ2hhbmdlZFwiLFxyXG5cclxuICAgIC8qKlRvIHJlYXJyYW5nZSB3aWRnZXRzIGluIGEgZGFzaGJvYXJkICovXHJcbiAgICBSZWFycmFuZ2VDbGlja2VkID0gXCJyZWFycmFuZ2VDbGlja2VkXCIsXHJcblxyXG4gICAgLyoqZGFzaGJvYXJkIGN1c3RvbWl6ZSBidXR0b24gY2xpY2sgKi9cclxuICAgIERhc2hib2FyZEN1c3RvbWl6ZUNsaWNrID0gXCJkYXNoYm9hcmRDdXN0b21pemVDbGlja1wiLFxyXG5cclxuICAgIC8qKnRyaWdnZXJzIHdoZW4gdXNlciBjbGlja3Mgb24gdGhlIGRhc2hib2FyZCBjaGFuZ2UgaWNvbiBpbiBoZWFkZXIgc2VjdGlvbiAqL1xyXG4gICAgRGFzaGJvYXJkQ2hhbmdlZCA9IFwiZGFzaGJvYXJkQ2hhbmdlZFwiLFxyXG5cclxuICAgIC8qKiB0cmlnZ2VycyB3aGVuIHVzZXIgY2xpY2tzIHRoZSBjbG9zZSBidXR0b24gb24gbGlicmFyeSAqL1xyXG4gICAgV2lkZ2V0TGlicmFyeUNsb3NlQnRuQ2xpY2tlZCA9IFwiV2lkZ2V0TGlicmFyeUNsb3NlQnRuQ2xpY2tlZFwiLFxyXG5cclxuICAgIC8qKiB0cmlnZ2VycyB3aGVuIHVzZXIgY2xpY2tzIG9uIHZpZXcgZGFzaGJvYXJkKi9cclxuICAgIExvYWREYXNoYm9hcmQgPSBcIkxvYWREYXNoYm9hcmRcIixcclxuXHJcbiAgICAvKiogdHJpZ2dlcnMgd2hlbiB1c2VyIGNsaWNrcyBvbiBjb3B5d2lkZ2V0ICovXHJcbiAgICBDb3B5V2lkZ2V0ID0gXCJDb3B5V2lkZ2V0XCIsXHJcblxyXG4gICAgLyoqdHJpZ2dlcnMgd2hlbiB1c2VyIGNsaWNrcyBvbiBNb3ZlIHdpZGdldCAqL1xyXG4gICAgTW92ZVdpZGdldCA9IFwiTW92ZVdpZGdldFwiLFxyXG5cclxuICAgIC8qKnRyaWdnZXJzIHdoZW4gdXNlciByYWlzZSBkZWxldGUgd2lkZ2V0IGV2ZW50ICovXHJcbiAgICBXaWRnZXREZWxldGUgPSBcIldpZGdldERlbGV0ZVwiLFxyXG5cclxuICAgIC8qKiB1c2VkIHRvIGFkZCB3aWRnZXQgdG8gd2lkZ2V0bGlzdCB3aGVuIHVzZXIgY29waWVzIGEgd2lkZ2V0IHRvIGN1cnJlbnQgZGFzaGJvYXJkICovXHJcbiAgICBBZGRXaWRnZXQgPSBcIkFkZFdpZGdldFwiLFxyXG5cclxuICAgIC8qKiBkb25lIGJ1dHRvbiBjbGljayBvbiB3aWRnZXQgbGlicmFyeSBmbHlvdXQgKi9cclxuICAgIHdpZGdldExpYnJhcnlEb25lQ2xpY2sgPSBcIndpZGdldExpYnJhcnlEb25lQ2xpY2tcIixcclxuXHJcbiAgICAvKipyZWZyZXNoIGZhdm9yaXRlIGljb24gYWZ0ZXIgc3J0dGluZyBhbmQgcmVzZXR0aW5nIGZhdm9yaXRlcyAqL1xyXG4gICAgZmF2b3JpdGVJY29uUmVmcmVzaCA9IFwiZmF2b3JpdGVJY29uUmVmcmVzaFwiLFxyXG5cclxuICAgIC8qKnRvIHJlZnJlc2ggbWVudSBjb250ZW50ICovXHJcbiAgICBRdWlja0xpbmtSZWZyZXNoID0gXCJRdWlja0xpbmtSZWZyZXNoXCIsXHJcblxyXG4gICAgLyoqVG8gcmFpc2Ugd2lkZ2V0IGFkZGVkIGV2ZW50ICovXHJcbiAgICBXaWRnZXRBZGRlZCA9IFwiV2lkZ2V0QWRkZWRcIixcclxuXHJcbiAgICAvKipUbyB1cGRhdGUgZ2xvYmFsIGZpbHRlciBzaXRlIGZyb20gbWFwIHdpZGdldCBzZWxlY3RlZCBzaXRlICovXHJcbiAgICBVcGRhdGVHbG9iYWxGaWx0ZXJGcm9tTWFwV2lkZ2V0ID0gXCJVcGRhdGVHbG9iYWxGaWx0ZXJGcm9tTWFwV2lkZ2V0XCIsXHJcblxyXG4gICAgLyoqVG8gYWRkIHdpZGdldCBvbiBlbXB0eSBkYXNoYm9hcmQgKi9cclxuICAgIEFkZFdpZGdldEVtcHR5RGFzaGJvYXJkID0gXCJBZGRXaWRnZXRFbXB0eURhc2hib2FyZFwiLFxyXG5cclxuICAgIC8qKlRvIHJhaXNlIG5ldyB3aWRnZXQgYWRkIGNsaWNrIGV2ZW50ICovXHJcbiAgICBBZGROZXdXaWRnZXRUb0Rhc2hib2FyZCA9IFwiQWRkTmV3V2lkZ2V0VG9EYXNoYm9hcmRcIixcclxuXHJcbiAgICBIaWRlRGFzaGJvYXJkQmFubmVyID0gXCJIaWRlRGFzaGJvYXJkQmFubmVyXCIsXHJcblxyXG4gICAgLyoqVG8gbGF1bmNoIGZseW91dCBmcm9tIGN1c3RvbSB3aWRnZXQgbGlicmFyeSAqL1xyXG4gICAgTGF1bmNoQ3VzdG9tV2lkZ2V0Rmx5b3V0ID0gXCJMYXVuY2hDdXN0b21XaWRnZXRGbHlvdXRcIixcclxuXHJcbiAgICAvKip1cGRhdGUgYXBwbGllZCBmaWx0ZXIgYmFkZ2UgZm9yIGluYXBsaWNhYmxlIGZpbHRlcnMgKi9cclxuICAgIFVwZGF0ZUFwcGxlZEZpdGVyRm9ySW5hcHBsaWNhYmxlRmlsdGVyID0gXCJVcGRhdGVBcHBsZWRGaXRlckZvckluYXBwbGljYWJsZUZpbHRlclwiLFxyXG5cclxuICAgIC8qKnNob3cgaW5hcHBsaWNhYmxlIGZpbHRlciBtZXNzYWdlIGluIGdsb2JhbCBmaWx0ZXIgZmx5b3V0ICovXHJcbiAgICBTaG93SW5hcHBsaWNhYmxlRmlsdGVyTWVzc2FnZSA9IFwiU2hvd0luYXBwbGljYWJsZUZpbHRlck1lc3NhZ2VcIixcclxuXHJcbiAgICAvKiogQnVsayBBY3Rpb24gQ2xpY2tlZCAqL1xyXG4gICAgQnVsa0FjdGlvbkNsaWNrID0gXCJCdWxrQWN0aW9uQ2xpY2tcIixcclxuXHJcbiAgICAvKiogR2xvYmFsIEZpbHRlciBDbGlja2VkICovXHJcbiAgICAvKiogV2hlbiB1c2VyIGNoYW5nZSB0aGUgY3VyYXRlZCBmaWx0ZXIoZWc6ZGF0YSBzdHJlYW1zKSwgc3lzdGVtIHdpbGwgY3JlYXRlL2RlbGV0ZSB3aWRnZXRzICovXHJcbiAgICBDdXJhdGVkRmlsdGVyQ2hhbmdlID0gXCJDdXJhdGVkRmlsdGVyQ2hhbmdlXCIsXHJcbiAgICBHbG9iYWxGaWx0ZXJDbGljayA9IFwiR2xvYmFsRmlsdGVyQ2xpY2tcIixcclxuICAgIExheW91dENoYW5nZSA9IFwiTGF5b3V0Q2hhbmdlXCJcclxufVxyXG5cclxuZXhwb3J0IGVudW0gUkFFdmVudEtleSB7XHJcbiAgICAvKiogb24gZWRpdCB3aWRnZXQgY2xpY2sgKi9cclxuICAgIFdpZGdldEluc3RhbmNlSWQgPSBcIndpZGdldEluc3RhbmNlSWRcIlxyXG59XHJcblxyXG4iXX0=
@@ -155,6 +155,7 @@ var RAEvent;
155
155
  /** When user change the curated filter(eg:data streams), system will create/delete widgets */
156
156
  RAEvent["CuratedFilterChange"] = "CuratedFilterChange";
157
157
  RAEvent["GlobalFilterClick"] = "GlobalFilterClick";
158
+ RAEvent["LayoutChange"] = "LayoutChange";
158
159
  })(RAEvent || (RAEvent = {}));
159
160
  var RAEventKey;
160
161
  (function (RAEventKey) {
@@ -4809,6 +4810,11 @@ class RADashboardArea {
4809
4810
  this.bulkActionData = JSON.parse(JSON.stringify(data)); // To create a new reference;
4810
4811
  });
4811
4812
  });
4813
+ setTimeout(() => {
4814
+ this.calculateLayout = this.raDashboardEventBus.subscribe(RAEvent.LayoutChange).subscribe(() => {
4815
+ this.options.api.optionsChanged();
4816
+ });
4817
+ });
4812
4818
  }
4813
4819
  ngOnChanges(changes) {
4814
4820
  this.isWidgetMgmnt = this.permissionService.hasPermission('ra.widgetmanagement');
@@ -4970,6 +4976,8 @@ class RADashboardArea {
4970
4976
  this.curatedFilterChange.unsubscribe();
4971
4977
  if (this.bulkActionClick)
4972
4978
  this.bulkActionClick.unsubscribe();
4979
+ if (this.calculateLayout)
4980
+ this.calculateLayout.unsubscribe();
4973
4981
  }
4974
4982
  /**To update position/dimention of all widgets in the area */
4975
4983
  updateWidgets() {
@@ -5015,8 +5023,9 @@ class RADashboardArea {
5015
5023
  dashboardAreaKey: areaKey,
5016
5024
  isIndicatorDashboard: this.isIndicatorDashboard
5017
5025
  };
5018
- this.widgetList = [];
5026
+ let _the = this;
5019
5027
  this.dashboardService.getWidgetsByDashboardArea(widgetInfo, this.appConfig).subscribe(widgets => {
5028
+ _the.widgetList = [];
5020
5029
  this.userWidgets = widgets;
5021
5030
  this.PAMWidgets = [];
5022
5031
  widgets.forEach((element) => {