@colijnit/corecomponents_v12 259.1.21 → 259.1.23

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.
Files changed (26) hide show
  1. package/bundles/colijnit-corecomponents_v12.umd.js +76 -17
  2. package/bundles/colijnit-corecomponents_v12.umd.js.map +1 -1
  3. package/colijnit-corecomponents_v12-259.1.23.tgz +0 -0
  4. package/colijnit-corecomponents_v12.metadata.json +1 -1
  5. package/esm2015/lib/components/base/base-input.component.js +3 -1
  6. package/esm2015/lib/components/hour-scheduling-expandable/components/hour-scheduling-expandable-template/hour-scheduling-expandable-template.component.js +36 -33
  7. package/esm2015/lib/components/hour-scheduling-expandable/components/hour-scheduling-expandable-template/hour-scheduling-expandable-template.module.js +20 -0
  8. package/esm2015/lib/components/hour-scheduling-expandable/hour-scheduling-expandable.component.js +10 -5
  9. package/esm2015/lib/components/hour-scheduling-expandable/hour-scheduling-expandable.module.js +3 -4
  10. package/esm2015/lib/components/list-of-values/list-of-values-popup.component.js +61 -32
  11. package/esm2015/lib/components/list-of-values/list-of-values.component.js +5 -2
  12. package/esm2015/lib/components/list-of-values/list-of-values.module.js +4 -2
  13. package/esm2015/lib/components/simple-grid/simple-grid.component.js +28 -28
  14. package/esm2015/public-api.js +2 -1
  15. package/fesm2015/colijnit-corecomponents_v12.js +157 -98
  16. package/fesm2015/colijnit-corecomponents_v12.js.map +1 -1
  17. package/lib/components/base/base-input.component.d.ts +1 -0
  18. package/lib/components/hour-scheduling-expandable/components/hour-scheduling-expandable-template/hour-scheduling-expandable-template.component.d.ts +1 -1
  19. package/lib/components/hour-scheduling-expandable/components/hour-scheduling-expandable-template/hour-scheduling-expandable-template.module.d.ts +2 -0
  20. package/lib/components/hour-scheduling-expandable/style/_layout.scss +1 -0
  21. package/lib/components/list-of-values/list-of-values-popup.component.d.ts +4 -0
  22. package/lib/components/list-of-values/list-of-values.component.d.ts +1 -0
  23. package/lib/components/list-of-values/style/_layout.scss +7 -0
  24. package/lib/components/simple-grid/style/_layout.scss +47 -8
  25. package/package.json +1 -1
  26. package/public-api.d.ts +1 -0
@@ -97,6 +97,11 @@ export class HourSchedulingExpandableComponent {
97
97
  this.currentDraggingObject = obj;
98
98
  }
99
99
  handleDrop(dragEvent, hour) {
100
+ dragEvent.preventDefault();
101
+ dragEvent.stopPropagation();
102
+ if (!this.schedule[this.objectsProp] || !this.schedule[this.objectsProp].find((object) => { var _a; return object[this.idProp] === this.currentDraggingObject && ((_a = this.currentDraggingObject) === null || _a === void 0 ? void 0 : _a.id); })) {
103
+ this.currentDraggingObject = undefined;
104
+ }
100
105
  if (this.currentDraggingObject) {
101
106
  //The order was scheduled and needs to be moved
102
107
  let start = this.currentDraggingObject.start;
@@ -114,17 +119,17 @@ export class HourSchedulingExpandableComponent {
114
119
  scheduledObject.top = this.timeDifference(this.schedule[this.childProp][this.startTimeProp], scheduledObject.start);
115
120
  scheduledObject.height = this.timeDifference(scheduledObject.start, scheduledObject.end);
116
121
  this.timeChangeEvent.emit(originalObject);
117
- this.currentDraggingObject = undefined;
118
122
  }
123
+ this.currentDraggingObject = undefined;
119
124
  }
120
125
  else {
121
126
  let parsed = this.tryParseJSONObject(dragEvent.dataTransfer.getData("text"));
122
127
  if (!parsed) {
123
128
  this.newObjectPlanEvent.emit({ currentHour: hour, data: parsed.toString() });
124
- return;
125
129
  }
126
- //Move between calendars is still too buggy
127
- // this.moveBetweenCalendarsEvent.emit({hour: hour, data: parsed});
130
+ else {
131
+ this.moveBetweenCalendarsEvent.emit({ hour: hour, data: parsed });
132
+ }
128
133
  }
129
134
  }
130
135
  allowDrop(event, hour) {
@@ -328,4 +333,4 @@ HourSchedulingExpandableComponent.propDecorators = {
328
333
  onResize: [{ type: HostListener, args: ['window:resize', ['$event'],] }],
329
334
  clickOut: [{ type: HostListener, args: ['document:click', ['$event'],] }]
330
335
  };
331
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG91ci1zY2hlZHVsaW5nLWV4cGFuZGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2hvdXItc2NoZWR1bGluZy1leHBhbmRhYmxlL2hvdXItc2NoZWR1bGluZy1leHBhbmRhYmxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQUUsVUFBVSxFQUNyQixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUVOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQWdFdkIsTUFBTSxPQUFPLGlDQUFpQztJQTZENUMsWUFDVSxLQUF3QixFQUN4QixJQUFnQjtRQURoQixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUN4QixTQUFJLEdBQUosSUFBSSxDQUFZO1FBN0RuQixlQUFVLEdBQWEsRUFBRSxDQUFDO1FBQzFCLHFCQUFnQixHQUF1QixFQUFFLENBQUM7UUFHekMsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUsxQiwwQkFBcUIsR0FBNEIsSUFBSSxDQUFDO1FBQ3RELDBCQUFxQixHQUE0QixJQUFJLENBQUM7UUFDdEQsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQixjQUFTLEdBQVcsRUFBRSxDQUFDO1FBdUJkLG9CQUFlLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFDbkUsdUJBQWtCLEdBQXdELElBQUksWUFBWSxFQUd2RyxDQUFDO1FBRVksOEJBQXlCLEdBQXdELElBQUksWUFBWSxFQUF5QyxDQUFDO1FBR3JKLGNBQVMsR0FBWSxJQUFJLENBQUM7SUFtQmpDLENBQUM7SUFoREQsSUFBb0IsUUFBUSxDQUFFLEtBQWE7UUFDekMsSUFBRyxLQUFLLElBQUksS0FBSyxLQUFLLElBQUks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QUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLEVBQUMsUUFBUSxFQUFFLFFBQVEsRUFBQyxDQUFDLENBQUMsQ0FBQztJQUNwSCxDQUFDO0lBRU0scUJBQXFCLENBQUMsSUFBVTtRQUNyQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLGtCQUFrQixDQUFDLENBQUE7SUFDakQsQ0FBQztJQUVNLGlCQUFpQjtRQUN0QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFFLENBQUMsZUFBaUMsRUFBRSxFQUFFO1lBQ25FLElBQUcsZUFBZSxDQUFDLFFBQVEsRUFBRTtnQkFDM0IsZUFBZSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7YUFDbEM7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7OztZQWxaRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLCtCQUErQjtnQkFDekMsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Q1Q7Z0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07Z0JBQy9DLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2FBQ3RDOzs7WUF6RUMsaUJBQWlCO1lBQ04sVUFBVTs7O3VCQTBGcEIsS0FBSzs0QkFhTCxLQUFLOzBCQUNMLEtBQUs7MEJBQ0wsS0FBSzt3QkFDTCxLQUFLOzZCQUNMLEtBQUs7cUJBQ0wsS0FBSzs4QkFFTCxNQUFNO2lDQUNOLE1BQU07d0NBS04sTUFBTTt3QkFFTixXQUFXLFNBQUMscUNBQXFDO3VCQUdqRCxZQUFZLFNBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDO3VCQUt4QyxZQUFZLFNBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCwgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdEJpbmRpbmcsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7RGF0ZVBpcGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5pbnRlcmZhY2UgU2NoZWR1bGluZ09iamVjdCB7XHJcbiAgc3RhcnQ6IERhdGU7XHJcbiAgZW5kOiBEYXRlO1xyXG4gIHRpdGxlPzogc3RyaW5nO1xyXG4gIHN1YlRpdGxlPzogc3RyaW5nO1xyXG4gIGhlaWdodD86IG51bWJlcjtcclxuICB0b3A/OiBudW1iZXI7XHJcbiAgaWQ6IG51bWJlciB8IHN0cmluZztcclxuICBzZWxlY3RlZDogYm9vbGVhbjtcclxuICBzaG93VG9wUmVzaXplcj86IGJvb2xlYW47XHJcbiAgc2hvd0JvdHRvbVJlc2l6ZXI/OiBib29sZWFuO1xyXG5cclxuXHJcbiAgW2tleTogc3RyaW5nXTogYW55OyAvLyBBbGxvd3MgZHluYW1pYyBwcm9wZXJ0aWVzIGluY2x1ZGluZyB1bmlxdWUgaWRlbnRpZmllcnNcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjby1ob3VyLXNjaGVkdWxpbmctZXhwYW5kYWJsZScsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLWJsb2NrXCIgKm5nRm9yPVwibGV0IGhvdXIgb2YgaG91ckxhYmVsc1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJob3VyLWxhYmVsXCI+PHNwYW4gW3RleHRDb250ZW50XT1cImhvdXJcIj48L3NwYW4+PC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJvYmplY3QtZGlzcGxheVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZpcnN0LWhhbGYtaG91ciBvYmplY3QtaGFsZlwiXHJcbiAgICAgICAgICAgICAgIChkcmFnb3Zlcik9XCJhbGxvd0Ryb3AoJGV2ZW50LCBob3VyKVwiXHJcbiAgICAgICAgICAgICAgIChkcmFnbGVhdmUpPVwiaGFuZGxlRHJhZ0xlYXZlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAoZHJvcCk9XCJoYW5kbGVEcm9wKCRldmVudCwgaG91cilcIj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWNvbmQtaGFsZi1ob3VyIG9iamVjdC1oYWxmXCJcclxuICAgICAgICAgICAgICAgKGRyYWdvdmVyKT1cImFsbG93RHJvcCgkZXZlbnQsIGFkZEhhbGZIb3VyKGhvdXIpKVwiXHJcbiAgICAgICAgICAgICAgIChkcmFnbGVhdmUpPVwiaGFuZGxlRHJhZ0xlYXZlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAoZHJvcCk9XCJoYW5kbGVEcm9wKCRldmVudCwgYWRkSGFsZkhvdXIoaG91cikpXCI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwic2NoZWR1bGVkLW9iamVjdHNcIiA+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjdXN0b21UZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XHJcbiAgICAgICAgICAgICAgb2JqZWN0czogc2NoZWR1bGVkT2JqZWN0cyxcclxuICAgICAgICAgICAgICBvblNlbGVjdEJsb2NrOiB0aGlzLm9uU2VsZWN0QmxvY2suYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICBvblJlc2l6ZVN0YXJ0OiB0aGlzLm9uUmVzaXplU3RhcnQuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICBvbkRyYWdTdGFydEN1c3RvbTogdGhpcy5vbkRyYWdTdGFydEN1c3RvbS5iaW5kKHRoaXMpXHJcblxyXG4gICAgICAgICAgICB9XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG4gIGAsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEhvdXJTY2hlZHVsaW5nRXhwYW5kYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIHB1YmxpYyBob3VyTGFiZWxzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHB1YmxpYyBzY2hlZHVsZWRPYmplY3RzOiBTY2hlZHVsaW5nT2JqZWN0W10gPSBbXTtcclxuXHJcblxyXG4gIHByaXZhdGUgcmVzaXppbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIHJlc2l6ZURpcmVjdGlvbjogJ3RvcCcgfCAnYm90dG9tJztcclxuICBwcml2YXRlIGluaXRpYWxZOiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBpbml0aWFsSGVpZ2h0OiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBpbml0aWFsVG9wOiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBjdXJyZW50UmVzaXppbmdPYmplY3Q6IFNjaGVkdWxpbmdPYmplY3QgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGN1cnJlbnREcmFnZ2luZ09iamVjdDogU2NoZWR1bGluZ09iamVjdCB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgTUlOX0hFSUdIVCA9IDMwO1xyXG4gIHByaXZhdGUgX3NjaGVkdWxlOiBPYmplY3QgPSB7fTtcclxuXHJcblxyXG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgc2NoZWR1bGUoIHZhbHVlOiBPYmplY3QpIHtcclxuICAgIGlmKHZhbHVlICYmIHZhbHVlICE9PSB0aGlzLl9zY2hlZHVsZSkge1xyXG4gICAgICB0aGlzLnJlbmRlck9iamVjdHMoKTtcclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLl9zY2hlZHVsZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzY2hlZHVsZSgpOiBPYmplY3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NjaGVkdWxlO1xyXG4gIH1cclxuXHJcblxyXG4gIEBJbnB1dCgpIHB1YmxpYyBzdGFydFRpbWVQcm9wOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcHVibGljIGVuZFRpbWVQcm9wOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcHVibGljIG9iamVjdHNQcm9wOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcHVibGljIGNoaWxkUHJvcDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBASW5wdXQoKSBwdWJsaWMgaWRQcm9wOiBzdHJpbmc7ICAvLyBJbnB1dCBmb3IgdW5pcXVlIGlkZW50aWZpZXIgcHJvcGVydHlcclxuXHJcbiAgQE91dHB1dCgpIHB1YmxpYyB0aW1lQ2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxPYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcjxPYmplY3Q+KCk7XHJcbiAgQE91dHB1dCgpIHB1YmxpYyBuZXdPYmplY3RQbGFuRXZlbnQ6IEV2ZW50RW1pdHRlcjx7IGN1cnJlbnRIb3VyOiBzdHJpbmcsIGRhdGE6IHN0cmluZyB9PiA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgY3VycmVudEhvdXI6IHN0cmluZyxcclxuICAgIGRhdGE6IHN0cmluZ1xyXG4gIH0+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBwdWJsaWMgbW92ZUJldHdlZW5DYWxlbmRhcnNFdmVudDogRXZlbnRFbWl0dGVyPHtob3VyOiBzdHJpbmcsIGRhdGE6U2NoZWR1bGluZ09iamVjdH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7aG91cjogc3RyaW5nLCBkYXRhOlNjaGVkdWxpbmdPYmplY3R9PigpO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmNvLWhvdXItc2NoZWR1bGluZy1leHBhbmRhYmxlJylcclxuICBwdWJsaWMgc2hvd0NsYXNzOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXHJcbiAgcHVibGljIG9uUmVzaXplKGV2ZW50OiB7IHRhcmdldDogeyBpbm5lcldpZHRoOiBhbnk7IH07IH0pIHtcclxuICAgIGV2ZW50LnRhcmdldC5pbm5lcldpZHRoO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxyXG4gIHB1YmxpYyBjbGlja091dChldmVudDogeyB0YXJnZXQ6IGFueTsgfSkge1xyXG4gICAgaWYoIXRoaXMuZVJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcclxuICAgICAgdGhpcy5oYW5kbGVEZXNlbGVjdEFsbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGVSZWY6IEVsZW1lbnRSZWZcclxuICApIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5nZW5lcmF0ZVRpbWVCbG9ja3MoKTtcclxuICAgIGlmKHRoaXMuc2NoZWR1bGUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJPYmplY3RzKCk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgfVxyXG5cclxuICAvLyBDYWxjdWxhdGUgcHJvcGVydGllcyBmb3IgZWFjaCBzY2hlZHVsZWQgb2JqZWN0IHRvIGRldGVybWluZSByZXNpemVyIHZpc2liaWxpdHlcclxuXHJcblxyXG4gIC8vIEZpbmQgdGhlIG5leHQgb2JqZWN0IGluIHRoZSBzY2hlZHVsZWRPYmplY3RzIGxpc3RcclxuICBwcml2YXRlIF9maW5kTmV4dE9iamVjdChjdXJyZW50T2JqZWN0OiBTY2hlZHVsaW5nT2JqZWN0KTogU2NoZWR1bGluZ09iamVjdCB8IG51bGwge1xyXG4gICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5zY2hlZHVsZWRPYmplY3RzLmluZGV4T2YoY3VycmVudE9iamVjdCk7XHJcbiAgICBpZiAoY3VycmVudEluZGV4ID49IDAgJiYgY3VycmVudEluZGV4IDwgdGhpcy5zY2hlZHVsZWRPYmplY3RzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2NoZWR1bGVkT2JqZWN0c1tjdXJyZW50SW5kZXggKyAxXTsgLy8gVGhlIG5leHQgb2JqZWN0IGluIHRoZSBsaXN0XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDsgLy8gTm8gbmV4dCBvYmplY3QgKGl0J3MgdGhlIGxhc3Qgb25lKVxyXG4gIH1cclxuXHJcbiAgLy8gRmluZCB0aGUgcHJldmlvdXMgb2JqZWN0IGluIHRoZSBzY2hlZHVsZWRPYmplY3RzIGxpc3RcclxuICBwcml2YXRlIF9maW5kUHJldmlvdXNPYmplY3QoY3VycmVudE9iamVjdDogU2NoZWR1bGluZ09iamVjdCk6IFNjaGVkdWxpbmdPYmplY3QgfCBudWxsIHtcclxuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuc2NoZWR1bGVkT2JqZWN0cy5pbmRleE9mKGN1cnJlbnRPYmplY3QpO1xyXG4gICAgaWYgKGN1cnJlbnRJbmRleCA+IDApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2NoZWR1bGVkT2JqZWN0c1tjdXJyZW50SW5kZXggLSAxXTsgLy8gVGhlIHByZXZpb3VzIG9iamVjdCBpbiB0aGUgbGlzdFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7IC8vIE5vIHByZXZpb3VzIG9iamVjdCAoaXQncyB0aGUgZmlyc3Qgb25lKVxyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyByZW5kZXJPYmplY3RzKCkge1xyXG4gICAgaWYodGhpcy5zY2hlZHVsZSkge1xyXG4gICAgICBpZiAodGhpcy5zY2hlZHVsZWRPYmplY3RzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICB0aGlzLnNjaGVkdWxlZE9iamVjdHMgPSBbXTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgb2JqZWN0czogT2JqZWN0W10gPSB0aGlzLnNjaGVkdWxlW3RoaXMub2JqZWN0c1Byb3BdO1xyXG5cclxuICAgICAgbGV0IHNjaGVkdWxpbmdPYmplY3RzOiBTY2hlZHVsaW5nT2JqZWN0W10gPSBbXTtcclxuXHJcblxyXG4gICAgICBpZiAob2JqZWN0cyAmJiBvYmplY3RzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBvYmplY3RzLmZvckVhY2gob2JqZWN0ID0+IHtcclxuICAgICAgICAgIGxldCB0b3BEaWZmZXJlbmNlOiBudW1iZXIgPSB0aGlzLnRpbWVEaWZmZXJlbmNlKHRoaXMuc2NoZWR1bGVbdGhpcy5jaGlsZFByb3BdW3RoaXMuc3RhcnRUaW1lUHJvcF0sIG9iamVjdFt0aGlzLnN0YXJ0VGltZVByb3BdKTtcclxuICAgICAgICAgIHNjaGVkdWxpbmdPYmplY3RzLnB1c2goXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0aXRsZTogb2JqZWN0Wyd0aXRsZSddLFxyXG4gICAgICAgICAgICAgIHN1YlRpdGxlOiBvYmplY3RbJ3N1YlRpdGxlJ10sXHJcblxyXG4gICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLmNvbnZlcnREYXRlVG9FdXJvcGVhbihvYmplY3RbdGhpcy5zdGFydFRpbWVQcm9wXSksXHJcbiAgICAgICAgICAgICAgZW5kOiB0aGlzLmNvbnZlcnREYXRlVG9FdXJvcGVhbihvYmplY3RbdGhpcy5lbmRUaW1lUHJvcF0pLFxyXG4gICAgICAgICAgICAgIGlkOiBvYmplY3RbdGhpcy5pZFByb3BdLFxyXG4gICAgICAgICAgICAgIGhlaWdodDogdGhpcy50aW1lRGlmZmVyZW5jZShvYmplY3RbdGhpcy5zdGFydFRpbWVQcm9wXSwgb2JqZWN0W3RoaXMuZW5kVGltZVByb3BdKSxcclxuICAgICAgICAgICAgICB0b3A6IHRvcERpZmZlcmVuY2UsXHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnNjaGVkdWxlZE9iamVjdHMgPSBzY2hlZHVsaW5nT2JqZWN0cztcclxuXHJcbiAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uU2VsZWN0QmxvY2sob2JqOiBTY2hlZHVsaW5nT2JqZWN0KSB7XHJcbiAgICBvYmouc2VsZWN0ZWQgPSAhb2JqLnNlbGVjdGVkO1xyXG4gICAgaWYob2JqLnNlbGVjdGVkKSB7XHJcbiAgICAgIHRoaXMuc2NoZWR1bGVkT2JqZWN0cy5mb3JFYWNoKChzY2hlZHVsZWRPYmplY3Q6IFNjaGVkdWxpbmdPYmplY3QpID0+IHtcclxuICAgICAgICBpZiAoc2NoZWR1bGVkT2JqZWN0LnNlbGVjdGVkICYmIHNjaGVkdWxlZE9iamVjdCAhPT0gb2JqKSB7XHJcbiAgICAgICAgICBzY2hlZHVsZWRPYmplY3Quc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jdXJyZW50UmVzaXppbmdPYmplY3QgPSBvYmo7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25EcmFnU3RhcnRDdXN0b20ob2JqOiBTY2hlZHVsaW5nT2JqZWN0KSB7XHJcbiAgICB0aGlzLmN1cnJlbnREcmFnZ2luZ09iamVjdCA9IG9iajtcclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgaGFuZGxlRHJvcChkcmFnRXZlbnQ6IERyYWdFdmVudCwgaG91cjogc3RyaW5nKSB7XHJcblxyXG4gICAgaWYgKHRoaXMuY3VycmVudERyYWdnaW5nT2JqZWN0KSB7XHJcbiAgICAgIC8vVGhlIG9yZGVyIHdhcyBzY2hlZHVsZWQgYW5kIG5lZWRzIHRvIGJlIG1vdmVkXHJcblxyXG4gICAgICBsZXQgc3RhcnQ6IERhdGUgPSB0aGlzLmN1cnJlbnREcmFnZ2luZ09iamVjdC5zdGFydDtcclxuICAgICAgbGV0IGhvdXJTcGxpdCA9IGhvdXIuc3BsaXQoXCI6XCIpXHJcbiAgICAgIHN0YXJ0LnNldEhvdXJzKHBhcnNlSW50KGhvdXJTcGxpdFswXSkpO1xyXG4gICAgICBzdGFydC5zZXRNaW51dGVzKHBhcnNlSW50KGhvdXJTcGxpdFsxXSkpO1xyXG4gICAgICBsZXQgc2NoZWR1bGVkT2JqZWN0ID0gdGhpcy5zY2hlZHVsZWRPYmplY3RzLmZpbmQoIHNjaGVkdWxlZE9iamVjdCA9PiBzY2hlZHVsZWRPYmplY3QuaWQgPT09IHRoaXMuY3VycmVudERyYWdnaW5nT2JqZWN0LmlkKTtcclxuICAgICAgaWYoc2NoZWR1bGVkT2JqZWN0KSB7XHJcbiAgICAgICAgc2NoZWR1bGVkT2JqZWN0LnN0YXJ0ID0gc3RhcnQ7XHJcblxyXG4gICAgICAgIGxldCBvcmlnaW5hbE9iamVjdDogT2JqZWN0ID0gdGhpcy5zY2hlZHVsZVt0aGlzLm9iamVjdHNQcm9wXS5maW5kKChvYmplY3Q6IE9iamVjdCkgPT4gb2JqZWN0W3RoaXMuaWRQcm9wXSA9PT0gdGhpcy5jdXJyZW50RHJhZ2dpbmdPYmplY3QuaWQpO1xyXG4gICAgICAgIG9yaWdpbmFsT2JqZWN0W3RoaXMuc3RhcnRUaW1lUHJvcF0gPSBzdGFydDtcclxuICAgICAgICBsZXQgZW5kOiBEYXRlID0gdGhpcy5hZGRNaW51dGVzKG9yaWdpbmFsT2JqZWN0W3RoaXMuc3RhcnRUaW1lUHJvcF0sIHRoaXMuY3VycmVudERyYWdnaW5nT2JqZWN0LmhlaWdodCk7XHJcbiAgICAgICAgb3JpZ2luYWxPYmplY3RbdGhpcy5lbmRUaW1lUHJvcF0gPSBlbmQ7XHJcbiAgICAgICAgc2NoZWR1bGVkT2JqZWN0LmVuZCA9IGVuZDtcclxuICAgICAgICBzY2hlZHVsZWRPYmplY3QudG9wID0gdGhpcy50aW1lRGlmZmVyZW5jZSh0aGlzLnNjaGVkdWxlW3RoaXMuY2hpbGRQcm9wXVt0aGlzLnN0YXJ0VGltZVByb3BdLCBzY2hlZHVsZWRPYmplY3Quc3RhcnQpO1xyXG4gICAgICAgIHNjaGVkdWxlZE9iamVjdC5oZWlnaHQgPSB0aGlzLnRpbWVEaWZmZXJlbmNlKHNjaGVkdWxlZE9iamVjdC5zdGFydCwgc2NoZWR1bGVkT2JqZWN0LmVuZCk7XHJcblxyXG4gICAgICAgIHRoaXMudGltZUNoYW5nZUV2ZW50LmVtaXQob3JpZ2luYWxPYmplY3QpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudERyYWdnaW5nT2JqZWN0ID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcblxyXG5cclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICBsZXQgcGFyc2VkOiBTY2hlZHVsaW5nT2JqZWN0ID0gdGhpcy50cnlQYXJzZUpTT05PYmplY3QoZHJhZ0V2ZW50LmRhdGFUcmFuc2ZlciEuZ2V0RGF0YShcInRleHRcIikpO1xyXG5cclxuICAgICAgaWYgKCFwYXJzZWQpIHtcclxuICAgICAgICB0aGlzLm5ld09iamVjdFBsYW5FdmVudC5lbWl0KHtjdXJyZW50SG91cjogaG91ciwgZGF0YTogcGFyc2VkLnRvU3RyaW5nKCl9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vTW92ZSBiZXR3ZWVuIGNhbGVuZGFycyBpcyBzdGlsbCB0b28gYnVnZ3lcclxuICAgICAgLy8gdGhpcy5tb3ZlQmV0d2VlbkNhbGVuZGFyc0V2ZW50LmVtaXQoe2hvdXI6IGhvdXIsIGRhdGE6IHBhcnNlZH0pO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgYWxsb3dEcm9wKGV2ZW50OiBEcmFnRXZlbnQsIGhvdXI6IHN0cmluZykge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYgKCF0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdkcmFnLW92ZXInKSkge1xyXG4gICAgICB0YXJnZXQuY2xhc3NMaXN0LmFkZCgnZHJhZy1vdmVyJyk7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmN1cnJlbnREcmFnZ2luZ09iamVjdCkge1xyXG4gICAgICBsZXQgbmV3U3RhcnREYXRlOiBEYXRlID0gdGhpcy5jb252ZXJ0RGF0ZVRvRXVyb3BlYW4odGhpcy5jdXJyZW50RHJhZ2dpbmdPYmplY3Quc3RhcnQpO1xyXG4gICAgICBsZXQgaG91clNwbGl0OiBzdHJpbmdbXSA9IGhvdXIuc3BsaXQoXCI6XCIpO1xyXG4gICAgICBuZXdTdGFydERhdGUuc2V0SG91cnMocGFyc2VJbnQoaG91clNwbGl0WzBdKSk7XHJcbiAgICAgIG5ld1N0YXJ0RGF0ZS5zZXRIb3VycyhwYXJzZUludChob3VyU3BsaXRbMV0pKTtcclxuXHJcbiAgICAgIGlmKHRoaXMuc2NoZWR1bGVkT2JqZWN0cy5maW5kKCAoc2NoZWR1bGVkT2JqZWN0OiBTY2hlZHVsaW5nT2JqZWN0KSA9PiBzY2hlZHVsZWRPYmplY3Quc3RhcnQgPT09IG5ld1N0YXJ0RGF0ZSApKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gIH1cclxuICBwdWJsaWMgaGFuZGxlRHJhZ0xlYXZlKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgIGlmICh0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdkcmFnLW92ZXInKSkge1xyXG4gICAgICB0YXJnZXQuY2xhc3NMaXN0LnJlbW92ZSgnZHJhZy1vdmVyJyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIFRyaWdnZXJlZCB3aGVuIHJlc2l6aW5nIHN0YXJ0c1xyXG5cclxuICBwdWJsaWMgb25SZXNpemVTdGFydChldmVudDogTW91c2VFdmVudCwgb2JqOiBTY2hlZHVsaW5nT2JqZWN0LCBkaXJlY3Rpb246ICd0b3AnIHwgJ2JvdHRvbScpIHtcclxuICAgIHRoaXMucmVzaXppbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5yZXNpemVEaXJlY3Rpb24gPSBkaXJlY3Rpb247XHJcbiAgICB0aGlzLmN1cnJlbnRSZXNpemluZ09iamVjdCA9IG9iajtcclxuICAgIHRoaXMuaW5pdGlhbFkgPSBldmVudC5jbGllbnRZO1xyXG4gICAgdGhpcy5pbml0aWFsSGVpZ2h0ID0gb2JqLmhlaWdodCB8fCAwO1xyXG4gICAgdGhpcy5pbml0aWFsVG9wID0gb2JqLnRvcCB8fCAwO1xyXG5cclxuICAgIC8vIExpc3RlbiB0byBtb3VzZW1vdmUgYW5kIG1vdXNldXAgZXZlbnRzIGdsb2JhbGx5XHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uUmVzaXppbmcuYmluZCh0aGlzKSk7XHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vblJlc2l6ZUVuZC5iaW5kKHRoaXMpKTtcclxuICB9XHJcbiAgLy8gSGFuZGxlIHJlc2l6aW5nIHdpdGggc25hcHBpbmcgdG8gMzBweCBpbmNyZW1lbnRzIGFuZCBtaW5pbXVtIGhlaWdodCByZXN0cmljdGlvblxyXG5cclxuICBwdWJsaWMgb25SZXNpemluZyhldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgaWYgKCF0aGlzLnJlc2l6aW5nIHx8ICF0aGlzLmN1cnJlbnRSZXNpemluZ09iamVjdCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGRlbHRhWSA9IGV2ZW50LmNsaWVudFkgLSB0aGlzLmluaXRpYWxZO1xyXG4gICAgY29uc3Qgc25hcHBlZERlbHRhWSA9IE1hdGgucm91bmQoZGVsdGFZIC8gMzApICogMzA7XHJcblxyXG4gICAgaWYgKHRoaXMucmVzaXplRGlyZWN0aW9uID09PSAnYm90dG9tJykge1xyXG4gICAgICBjb25zdCBuZXh0T2JqZWN0ID0gdGhpcy5fZmluZE5leHRPYmplY3QodGhpcy5jdXJyZW50UmVzaXppbmdPYmplY3QpO1xyXG4gICAgICBjb25zdCBtYXhIZWlnaHQgPSBuZXh0T2JqZWN0ID8gbmV4dE9iamVjdC50b3AgLSB0aGlzLmN1cnJlbnRSZXNpemluZ09iamVjdC50b3AgOiBJbmZpbml0eTtcclxuXHJcbiAgICAgIC8vIEJsb2NrIGV4cGFuZGluZyBiZXlvbmQgdGhlIG5leHQgb2JqZWN0IGFuZCBzaHJpbmtpbmcgYmVsb3cgMzBweFxyXG4gICAgICBjb25zdCBuZXdIZWlnaHQgPSBNYXRoLm1heCh0aGlzLmluaXRpYWxIZWlnaHQgKyBzbmFwcGVkRGVsdGFZLCB0aGlzLk1JTl9IRUlHSFQpO1xyXG4gICAgICB0aGlzLmN1cnJlbnRSZXNpemluZ09iamVjdC5oZWlnaHQgPSBNYXRoLm1pbihuZXdIZWlnaHQsIG1heEhlaWdodCk7XHJcblxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnJlc2l6ZURpcmVjdGlvbiA9PT0gJ3RvcCcpIHtcclxuICAgICAgY29uc3QgcHJldmlvdXNPYmplY3QgPSB0aGlzLl9maW5kUHJldmlvdXNPYmplY3QodGhpcy5jdXJyZW50UmVzaXppbmdPYmplY3QpO1xyXG4gICAgICBjb25zdCBtaW5Ub3AgPSBwcmV2aW91c09iamVjdCA/IHByZXZpb3VzT2JqZWN0LnRvcCArIHByZXZpb3VzT2JqZWN0LmhlaWdodCA6IDA7XHJcblxyXG4gICAgICBjb25zdCBuZXdIZWlnaHQgPSBNYXRoLm1heCh0aGlzLmluaXRpYWxIZWlnaHQgLSBzbmFwcGVkRGVsdGFZLCB0aGlzLk1JTl9IRUlHSFQpO1xyXG4gICAgICBjb25zdCBuZXdUb3AgPSB0aGlzLmluaXRpYWxUb3AgKyAodGhpcy5pbml0aWFsSGVpZ2h0IC0gbmV3SGVpZ2h0KTtcclxuXHJcbiAgICAgIC8vIEJsb2NrIG1vdmluZyBhYm92ZSB0aGUgcHJldmlvdXMgb2JqZWN0J3MgYm90dG9tIGFuZCBzaHJpbmtpbmcgYmVsb3cgTUlOX0hFSUdIVFxyXG4gICAgICBpZiAobmV3SGVpZ2h0ID49IHRoaXMuTUlOX0hFSUdIVCAmJiBuZXdUb3AgPj0gbWluVG9wKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UmVzaXppbmdPYmplY3QudG9wID0gbmV3VG9wO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFJlc2l6aW5nT2JqZWN0LmhlaWdodCA9IG5ld0hlaWdodDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEVuc3VyZSBjaGFuZ2UgZGV0ZWN0aW9uIGhhcHBlbnNcclxuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuICAvLyBUcmlnZ2VyZWQgd2hlbiByZXNpemluZyBlbmRzXHJcblxyXG4gIHB1YmxpYyBvblJlc2l6ZUVuZChldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgbGV0IG9iamVjdDogU2NoZWR1bGluZ09iamVjdCA9IHRoaXMuY3VycmVudFJlc2l6aW5nT2JqZWN0O1xyXG5cclxuICAgIGlmKG9iamVjdCAmJiBvYmplY3Quc2VsZWN0ZWQpIHtcclxuICAgICAgbGV0IG9yaWdpbmFsT2JqZWN0ID0gdGhpcy5zY2hlZHVsZVt0aGlzLm9iamVjdHNQcm9wXS5maW5kKChzY2hlZHVsZWRPYmplY3Q6IE9iamVjdCkgPT4gc2NoZWR1bGVkT2JqZWN0W3RoaXMuaWRQcm9wXSA9PT0gb2JqZWN0LmlkKTtcclxuXHJcbiAgICAgIGlmIChvcmlnaW5hbE9iamVjdCkge1xyXG4gICAgICAgIC8vIFN0YXJ0IGRhdGUgY2FsY3VsYXRpb24gZmlyc3RcclxuICAgICAgICBvcmlnaW5hbE9iamVjdFt0aGlzLnN0YXJ0VGltZVByb3BdID0gdGhpcy5hZGRNaW51dGVzKHRoaXMuY29udmVydERhdGVUb0V1cm9wZWFuKHRoaXMuc2NoZWR1bGVbdGhpcy5jaGlsZFByb3BdW3RoaXMuc3RhcnRUaW1lUHJvcF0pLCBvYmplY3QudG9wKTtcclxuXHJcbiAgICAgICAgLy8gVGhlbiAgZW5kIGRhdGUgY2FsY3VsYXRpb24gYmFzZWQgb24gdGhlIGhlaWdodCBvZiB0aGUgb2JqZWN0XHJcbiAgICAgICAgb3JpZ2luYWxPYmplY3RbdGhpcy5lbmRUaW1lUHJvcF0gPSB0aGlzLmFkZE1pbnV0ZXModGhpcy5jb252ZXJ0RGF0ZVRvRXVyb3BlYW4ob3JpZ2luYWxPYmplY3RbdGhpcy5zdGFydFRpbWVQcm9wXSksIG9iamVjdC5oZWlnaHQpO1xyXG5cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRpbWVDaGFuZ2VFdmVudC5lbWl0KG9yaWdpbmFsT2JqZWN0KTtcclxuXHJcbiAgICAgIHRoaXMucmVzaXppbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jdXJyZW50UmVzaXppbmdPYmplY3Quc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jdXJyZW50UmVzaXppbmdPYmplY3QgPSBudWxsO1xyXG5cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIFJlbW92ZSBnbG9iYWwgZXZlbnQgbGlzdGVuZXJzXHJcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uUmVzaXppbmcuYmluZCh0aGlzKSk7XHJcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vblJlc2l6ZUVuZC5iaW5kKHRoaXMpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0aW1lRGlmZmVyZW5jZShkYXRlMTogRGF0ZSwgZGF0ZTI6IERhdGUpIHtcclxuICAgIGxldCBkaWZmZXJlbmNlID0gdGhpcy5jb252ZXJ0RGF0ZVRvRXVyb3BlYW4oZGF0ZTEpLmdldFRpbWUoKSAvIDEwMDAgLSB0aGlzLmNvbnZlcnREYXRlVG9FdXJvcGVhbihkYXRlMikuZ2V0VGltZSgpIC8gMTAwMDtcclxuICAgIHJldHVybiBNYXRoLmFicyhkaWZmZXJlbmNlIC8gNjApO1xyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyBnZW5lcmF0ZVRpbWVCbG9ja3MoKSB7XHJcbiAgICBsZXQgc3RhcnRVbml4OiBudW1iZXIgPSAhdGhpcy5jaGlsZFByb3AgPyB0aGlzLmRhdGVUb1VuaXhFcG9jaCh0aGlzLmNvbnZlcnREYXRlVG9FdXJvcGVhbih0aGlzLnNjaGVkdWxlW3RoaXMuc3RhcnRUaW1lUHJvcF0pKSA6IHRoaXMuZGF0ZVRvVW5peEVwb2NoKHRoaXMuY29udmVydERhdGVUb0V1cm9wZWFuKHRoaXMuc2NoZWR1bGVbdGhpcy5jaGlsZFByb3BdW3RoaXMuc3RhcnRUaW1lUHJvcF0pKTtcclxuICAgIGxldCBlbmRVbml4OiBudW1iZXIgPSAhdGhpcy5jaGlsZFByb3AgPyB0aGlzLmRhdGVUb1VuaXhFcG9jaCh0aGlzLmNvbnZlcnREYXRlVG9FdXJvcGVhbih0aGlzLnNjaGVkdWxlW3RoaXMuZW5kVGltZVByb3BdKSkgOiB0aGlzLmRhdGVUb1VuaXhFcG9jaCh0aGlzLmNvbnZlcnREYXRlVG9FdXJvcGVhbih0aGlzLnNjaGVkdWxlW3RoaXMuY2hpbGRQcm9wXVt0aGlzLmVuZFRpbWVQcm9wXSkpO1xyXG5cclxuICAgIGxldCBpbnRlcnZhbCA9IDYwICogNjA7XHJcblxyXG4gICAgZm9yIChsZXQgaG91ckNvdW50ID0gc3RhcnRVbml4OyBob3VyQ291bnQgPD0gZW5kVW5peDsgaG91ckNvdW50ICs9IGludGVydmFsKSB7XHJcbiAgICAgIGxldCBob3VyID0gbmV3IERhdGUoaG91ckNvdW50ICogMTAwMClcclxuICAgICAgbGV0IGhvdXJTdHJpbmcgPSBgJHtob3VyLmdldEhvdXJzKCl9OiR7aG91ci5nZXRNaW51dGVzKCkgPT09IDAgPyAnMDAnIDogaG91ci5nZXRNaW51dGVzKCl9YDtcclxuICAgICAgdGhpcy5ob3VyTGFiZWxzLnB1c2goaG91clN0cmluZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGF0ZVRvVW5peEVwb2NoKGRhdGU6IERhdGUpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIE1hdGguZmxvb3IoZGF0ZS5nZXRUaW1lKCkpIC8gMTAwMDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhZGRNaW51dGVzKGRhdGU6IERhdGUsIG1pbnV0ZXM6IG51bWJlcik6IERhdGUge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpICsgbWludXRlcyAqIDYwMDAwKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0cnlQYXJzZUpTT05PYmplY3QoanNvblN0cmluZzogc3RyaW5nKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgbyA9IEpTT04ucGFyc2UoanNvblN0cmluZyk7XHJcbiAgICAgIGlmIChvICYmIHR5cGVvZiBvID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgcmV0dXJuIG87XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRkSGFsZkhvdXIoaG91cjogc3RyaW5nKSB7XHJcbiAgICBsZXQgc3BsaXQgPSBob3VyLnNwbGl0KFwiOlwiKTtcclxuICAgIHNwbGl0WzFdID0gXCIzMFwiO1xyXG4gICAgcmV0dXJuIHNwbGl0LmpvaW4oJzonKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb252ZXJ0VFooZGF0ZSwgdHpTdHJpbmcpIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZSgodHlwZW9mIGRhdGUgPT09IFwic3RyaW5nXCIgPyBuZXcgRGF0ZShkYXRlKSA6IGRhdGUpLnRvTG9jYWxlU3RyaW5nKFwiZW4tVVNcIiwge3RpbWVab25lOiB0elN0cmluZ30pKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb252ZXJ0RGF0ZVRvRXVyb3BlYW4oZGF0ZTogRGF0ZSk6IERhdGUge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udmVydFRaKGRhdGUsICdFdXJvcGUvQW1zdGVyZGFtJylcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVEZXNlbGVjdEFsbCgpIHtcclxuICAgIHRoaXMuc2NoZWR1bGVkT2JqZWN0cy5mb3JFYWNoKCAoc2NoZWR1bGVkT2JqZWN0OiBTY2hlZHVsaW5nT2JqZWN0KSA9PiB7XHJcbiAgICAgIGlmKHNjaGVkdWxlZE9iamVjdC5zZWxlY3RlZCkge1xyXG4gICAgICAgIHNjaGVkdWxlZE9iamVjdC5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcbn1cclxuIl19
336
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG91ci1zY2hlZHVsaW5nLWV4cGFuZGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2hvdXItc2NoZWR1bGluZy1leHBhbmRhYmxlL2hvdXItc2NoZWR1bGluZy1leHBhbmRhYmxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQUUsVUFBVSxFQUNyQixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUVOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQWdFdkIsTUFBTSxPQUFPLGlDQUFpQztJQTZENUMsWUFDVSxLQUF3QixFQUN4QixJQUFnQjtRQURoQixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUN4QixTQUFJLEdBQUosSUFBSSxDQUFZO1FBN0RuQixlQUFVLEdBQWEsRUFBRSxDQUFDO1FBQzFCLHFCQUFnQixHQUF1QixFQUFFLENBQUM7UUFHekMsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUsxQiwwQkFBcUIsR0FBNEIsSUFBSSxDQUFDO1FBQ3RELDBCQUFxQixHQUE0QixJQUFJLENBQUM7UUFDdEQsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQixjQUFTLEdBQVcsRUFBRSxDQUFDO1FBdUJkLG9CQUFlLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFDbkUsdUJBQWtCLEdBQXdELElBQUksWUFBWSxFQUd2RyxDQUFDO1FBRVksOEJBQXlCLEdBQXdELElBQUksWUFBWSxFQUF5QyxDQUFDO1FBR3JKLGNBQVMsR0FBWSxJQUFJLENBQUM7SUFtQmpDLENBQUM7SUFoREQsSUFBb0IsUUFBUSxDQUFFLEtBQWE7UUFDekMsSUFBRyxLQUFLLElBQUksS0FBSyxLQUFLLElBQUks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Z0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07Z0JBQy9DLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2FBQ3RDOzs7WUF6RUMsaUJBQWlCO1lBQ04sVUFBVTs7O3VCQTBGcEIsS0FBSzs0QkFhTCxLQUFLOzBCQUNMLEtBQUs7MEJBQ0wsS0FBSzt3QkFDTCxLQUFLOzZCQUNMLEtBQUs7cUJBQ0wsS0FBSzs4QkFFTCxNQUFNO2lDQUNOLE1BQU07d0NBS04sTUFBTTt3QkFFTixXQUFXLFNBQUMscUNBQXFDO3VCQUdqRCxZQUFZLFNBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDO3VCQUt4QyxZQUFZLFNBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCwgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdEJpbmRpbmcsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7RGF0ZVBpcGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5pbnRlcmZhY2UgU2NoZWR1bGluZ09iamVjdCB7XHJcbiAgc3RhcnQ6IERhdGU7XHJcbiAgZW5kOiBEYXRlO1xyXG4gIHRpdGxlPzogc3RyaW5nO1xyXG4gIHN1YlRpdGxlPzogc3RyaW5nO1xyXG4gIGhlaWdodD86IG51bWJlcjtcclxuICB0b3A/OiBudW1iZXI7XHJcbiAgaWQ6IG51bWJlciB8IHN0cmluZztcclxuICBzZWxlY3RlZDogYm9vbGVhbjtcclxuICBzaG93VG9wUmVzaXplcj86IGJvb2xlYW47XHJcbiAgc2hvd0JvdHRvbVJlc2l6ZXI/OiBib29sZWFuO1xyXG5cclxuXHJcbiAgW2tleTogc3RyaW5nXTogYW55OyAvLyBBbGxvd3MgZHluYW1pYyBwcm9wZXJ0aWVzIGluY2x1ZGluZyB1bmlxdWUgaWRlbnRpZmllcnNcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjby1ob3VyLXNjaGVkdWxpbmctZXhwYW5kYWJsZScsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLWJsb2NrXCIgKm5nRm9yPVwibGV0IGhvdXIgb2YgaG91ckxhYmVsc1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJob3VyLWxhYmVsXCI+PHNwYW4gW3RleHRDb250ZW50XT1cImhvdXJcIj48L3NwYW4+PC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJvYmplY3QtZGlzcGxheVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZpcnN0LWhhbGYtaG91ciBvYmplY3QtaGFsZlwiXHJcbiAgICAgICAgICAgICAgIChkcmFnb3Zlcik9XCJhbGxvd0Ryb3AoJGV2ZW50LCBob3VyKVwiXHJcbiAgICAgICAgICAgICAgIChkcmFnbGVhdmUpPVwiaGFuZGxlRHJhZ0xlYXZlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAoZHJvcCk9XCJoYW5kbGVEcm9wKCRldmVudCwgaG91cilcIj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWNvbmQtaGFsZi1ob3VyIG9iamVjdC1oYWxmXCJcclxuICAgICAgICAgICAgICAgKGRyYWdvdmVyKT1cImFsbG93RHJvcCgkZXZlbnQsIGFkZEhhbGZIb3VyKGhvdXIpKVwiXHJcbiAgICAgICAgICAgICAgIChkcmFnbGVhdmUpPVwiaGFuZGxlRHJhZ0xlYXZlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAoZHJvcCk9XCJoYW5kbGVEcm9wKCRldmVudCwgYWRkSGFsZkhvdXIoaG91cikpXCI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwic2NoZWR1bGVkLW9iamVjdHNcIiA+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjdXN0b21UZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XHJcbiAgICAgICAgICAgICAgb2JqZWN0czogc2NoZWR1bGVkT2JqZWN0cyxcclxuICAgICAgICAgICAgICBvblNlbGVjdEJsb2NrOiB0aGlzLm9uU2VsZWN0QmxvY2suYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICBvblJlc2l6ZVN0YXJ0OiB0aGlzLm9uUmVzaXplU3RhcnQuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICBvbkRyYWdTdGFydEN1c3RvbTogdGhpcy5vbkRyYWdTdGFydEN1c3RvbS5iaW5kKHRoaXMpXHJcblxyXG4gICAgICAgICAgICB9XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG4gIGAsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEhvdXJTY2hlZHVsaW5nRXhwYW5kYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIHB1YmxpYyBob3VyTGFiZWxzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHB1YmxpYyBzY2hlZHVsZWRPYmplY3RzOiBTY2hlZHVsaW5nT2JqZWN0W10gPSBbXTtcclxuXHJcblxyXG4gIHByaXZhdGUgcmVzaXppbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIHJlc2l6ZURpcmVjdGlvbjogJ3RvcCcgfCAnYm90dG9tJztcclxuICBwcml2YXRlIGluaXRpYWxZOiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBpbml0aWFsSGVpZ2h0OiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBpbml0aWFsVG9wOiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBjdXJyZW50UmVzaXppbmdPYmplY3Q6IFNjaGVkdWxpbmdPYmplY3QgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGN1cnJlbnREcmFnZ2luZ09iamVjdDogU2NoZWR1bGluZ09iamVjdCB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgTUlOX0hFSUdIVCA9IDMwO1xyXG4gIHByaXZhdGUgX3NjaGVkdWxlOiBPYmplY3QgPSB7fTtcclxuXHJcblxyXG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgc2NoZWR1bGUoIHZhbHVlOiBPYmplY3QpIHtcclxuICAgIGlmKHZhbHVlICYmIHZhbHVlICE9PSB0aGlzLl9zY2hlZHVsZSkge1xyXG4gICAgICB0aGlzLnJlbmRlck9iamVjdHMoKTtcclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLl9zY2hlZHVsZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzY2hlZHVsZSgpOiBPYmplY3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NjaGVkdWxlO1xyXG4gIH1cclxuXHJcblxyXG4gIEBJbnB1dCgpIHB1YmxpYyBzdGFydFRpbWVQcm9wOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcHVibGljIGVuZFRpbWVQcm9wOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcHVibGljIG9iamVjdHNQcm9wOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcHVibGljIGNoaWxkUHJvcDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBASW5wdXQoKSBwdWJsaWMgaWRQcm9wOiBzdHJpbmc7ICAvLyBJbnB1dCBmb3IgdW5pcXVlIGlkZW50aWZpZXIgcHJvcGVydHlcclxuXHJcbiAgQE91dHB1dCgpIHB1YmxpYyB0aW1lQ2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxPYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcjxPYmplY3Q+KCk7XHJcbiAgQE91dHB1dCgpIHB1YmxpYyBuZXdPYmplY3RQbGFuRXZlbnQ6IEV2ZW50RW1pdHRlcjx7IGN1cnJlbnRIb3VyOiBzdHJpbmcsIGRhdGE6IHN0cmluZyB9PiA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgY3VycmVudEhvdXI6IHN0cmluZyxcclxuICAgIGRhdGE6IHN0cmluZ1xyXG4gIH0+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBwdWJsaWMgbW92ZUJldHdlZW5DYWxlbmRhcnNFdmVudDogRXZlbnRFbWl0dGVyPHtob3VyOiBzdHJpbmcsIGRhdGE6U2NoZWR1bGluZ09iamVjdH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7aG91cjogc3RyaW5nLCBkYXRhOlNjaGVkdWxpbmdPYmplY3R9PigpO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmNvLWhvdXItc2NoZWR1bGluZy1leHBhbmRhYmxlJylcclxuICBwdWJsaWMgc2hvd0NsYXNzOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXHJcbiAgcHVibGljIG9uUmVzaXplKGV2ZW50OiB7IHRhcmdldDogeyBpbm5lcldpZHRoOiBhbnk7IH07IH0pIHtcclxuICAgIGV2ZW50LnRhcmdldC5pbm5lcldpZHRoO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxyXG4gIHB1YmxpYyBjbGlja091dChldmVudDogeyB0YXJnZXQ6IGFueTsgfSkge1xyXG4gICAgaWYoIXRoaXMuZVJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcclxuICAgICAgdGhpcy5oYW5kbGVEZXNlbGVjdEFsbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGVSZWY6IEVsZW1lbnRSZWZcclxuICApIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5nZW5lcmF0ZVRpbWVCbG9ja3MoKTtcclxuICAgIGlmKHRoaXMuc2NoZWR1bGUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJPYmplY3RzKCk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgfVxyXG5cclxuICAvLyBDYWxjdWxhdGUgcHJvcGVydGllcyBmb3IgZWFjaCBzY2hlZHVsZWQgb2JqZWN0IHRvIGRldGVybWluZSByZXNpemVyIHZpc2liaWxpdHlcclxuXHJcblxyXG4gIC8vIEZpbmQgdGhlIG5leHQgb2JqZWN0IGluIHRoZSBzY2hlZHVsZWRPYmplY3RzIGxpc3RcclxuICBwcml2YXRlIF9maW5kTmV4dE9iamVjdChjdXJyZW50T2JqZWN0OiBTY2hlZHVsaW5nT2JqZWN0KTogU2NoZWR1bGluZ09iamVjdCB8IG51bGwge1xyXG4gICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5zY2hlZHVsZWRPYmplY3RzLmluZGV4T2YoY3VycmVudE9iamVjdCk7XHJcbiAgICBpZiAoY3VycmVudEluZGV4ID49IDAgJiYgY3VycmVudEluZGV4IDwgdGhpcy5zY2hlZHVsZWRPYmplY3RzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2NoZWR1bGVkT2JqZWN0c1tjdXJyZW50SW5kZXggKyAxXTsgLy8gVGhlIG5leHQgb2JqZWN0IGluIHRoZSBsaXN0XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDsgLy8gTm8gbmV4dCBvYmplY3QgKGl0J3MgdGhlIGxhc3Qgb25lKVxyXG4gIH1cclxuXHJcbiAgLy8gRmluZCB0aGUgcHJldmlvdXMgb2JqZWN0IGluIHRoZSBzY2hlZHVsZWRPYmplY3RzIGxpc3RcclxuICBwcml2YXRlIF9maW5kUHJldmlvdXNPYmplY3QoY3VycmVudE9iamVjdDogU2NoZWR1bGluZ09iamVjdCk6IFNjaGVkdWxpbmdPYmplY3QgfCBudWxsIHtcclxuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuc2NoZWR1bGVkT2JqZWN0cy5pbmRleE9mKGN1cnJlbnRPYmplY3QpO1xyXG4gICAgaWYgKGN1cnJlbnRJbmRleCA+IDApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2NoZWR1bGVkT2JqZWN0c1tjdXJyZW50SW5kZXggLSAxXTsgLy8gVGhlIHByZXZpb3VzIG9iamVjdCBpbiB0aGUgbGlzdFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7IC8vIE5vIHByZXZpb3VzIG9iamVjdCAoaXQncyB0aGUgZmlyc3Qgb25lKVxyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyByZW5kZXJPYmplY3RzKCkge1xyXG4gICAgaWYodGhpcy5zY2hlZHVsZSkge1xyXG4gICAgICBpZiAodGhpcy5zY2hlZHVsZWRPYmplY3RzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICB0aGlzLnNjaGVkdWxlZE9iamVjdHMgPSBbXTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgb2JqZWN0czogT2JqZWN0W10gPSB0aGlzLnNjaGVkdWxlW3RoaXMub2JqZWN0c1Byb3BdO1xyXG5cclxuICAgICAgbGV0IHNjaGVkdWxpbmdPYmplY3RzOiBTY2hlZHVsaW5nT2JqZWN0W10gPSBbXTtcclxuXHJcblxyXG4gICAgICBpZiAob2JqZWN0cyAmJiBvYmplY3RzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBvYmplY3RzLmZvckVhY2gob2JqZWN0ID0+IHtcclxuICAgICAgICAgIGxldCB0b3BEaWZmZXJlbmNlOiBudW1iZXIgPSB0aGlzLnRpbWVEaWZmZXJlbmNlKHRoaXMuc2NoZWR1bGVbdGhpcy5jaGlsZFByb3BdW3RoaXMuc3RhcnRUaW1lUHJvcF0sIG9iamVjdFt0aGlzLnN0YXJ0VGltZVByb3BdKTtcclxuICAgICAgICAgIHNjaGVkdWxpbmdPYmplY3RzLnB1c2goXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0aXRsZTogb2JqZWN0Wyd0aXRsZSddLFxyXG4gICAgICAgICAgICAgIHN1YlRpdGxlOiBvYmplY3RbJ3N1YlRpdGxlJ10sXHJcblxyXG4gICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLmNvbnZlcnREYXRlVG9FdXJvcGVhbihvYmplY3RbdGhpcy5zdGFydFRpbWVQcm9wXSksXHJcbiAgICAgICAgICAgICAgZW5kOiB0aGlzLmNvbnZlcnREYXRlVG9FdXJvcGVhbihvYmplY3RbdGhpcy5lbmRUaW1lUHJvcF0pLFxyXG4gICAgICAgICAgICAgIGlkOiBvYmplY3RbdGhpcy5pZFByb3BdLFxyXG4gICAgICAgICAgICAgIGhlaWdodDogdGhpcy50aW1lRGlmZmVyZW5jZShvYmplY3RbdGhpcy5zdGFydFRpbWVQcm9wXSwgb2JqZWN0W3RoaXMuZW5kVGltZVByb3BdKSxcclxuICAgICAgICAgICAgICB0b3A6IHRvcERpZmZlcmVuY2UsXHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnNjaGVkdWxlZE9iamVjdHMgPSBzY2hlZHVsaW5nT2JqZWN0cztcclxuXHJcbiAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uU2VsZWN0QmxvY2sob2JqOiBTY2hlZHVsaW5nT2JqZWN0KSB7XHJcbiAgICBvYmouc2VsZWN0ZWQgPSAhb2JqLnNlbGVjdGVkO1xyXG4gICAgaWYob2JqLnNlbGVjdGVkKSB7XHJcbiAgICAgIHRoaXMuc2NoZWR1bGVkT2JqZWN0cy5mb3JFYWNoKChzY2hlZHVsZWRPYmplY3Q6IFNjaGVkdWxpbmdPYmplY3QpID0+IHtcclxuICAgICAgICBpZiAoc2NoZWR1bGVkT2JqZWN0LnNlbGVjdGVkICYmIHNjaGVkdWxlZE9iamVjdCAhPT0gb2JqKSB7XHJcbiAgICAgICAgICBzY2hlZHVsZWRPYmplY3Quc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jdXJyZW50UmVzaXppbmdPYmplY3QgPSBvYmo7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25EcmFnU3RhcnRDdXN0b20ob2JqOiBTY2hlZHVsaW5nT2JqZWN0KSB7XHJcbiAgICB0aGlzLmN1cnJlbnREcmFnZ2luZ09iamVjdCA9IG9iajtcclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgaGFuZGxlRHJvcChkcmFnRXZlbnQ6IERyYWdFdmVudCwgaG91cjogc3RyaW5nKSB7XHJcbiAgICBkcmFnRXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGRyYWdFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICBpZighdGhpcy5zY2hlZHVsZVt0aGlzLm9iamVjdHNQcm9wXSB8fCAhdGhpcy5zY2hlZHVsZVt0aGlzLm9iamVjdHNQcm9wXS5maW5kKChvYmplY3Q6IE9iamVjdCkgPT4gb2JqZWN0W3RoaXMuaWRQcm9wXSA9PT0gdGhpcy5jdXJyZW50RHJhZ2dpbmdPYmplY3QgJiYgdGhpcy5jdXJyZW50RHJhZ2dpbmdPYmplY3Q/LmlkKSkge1xyXG4gICAgICB0aGlzLmN1cnJlbnREcmFnZ2luZ09iamVjdCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jdXJyZW50RHJhZ2dpbmdPYmplY3QpIHtcclxuICAgICAgLy9UaGUgb3JkZXIgd2FzIHNjaGVkdWxlZCBhbmQgbmVlZHMgdG8gYmUgbW92ZWRcclxuXHJcbiAgICAgIGxldCBzdGFydDogRGF0ZSA9IHRoaXMuY3VycmVudERyYWdnaW5nT2JqZWN0LnN0YXJ0O1xyXG4gICAgICBsZXQgaG91clNwbGl0ID0gaG91ci5zcGxpdChcIjpcIilcclxuICAgICAgc3RhcnQuc2V0SG91cnMocGFyc2VJbnQoaG91clNwbGl0WzBdKSk7XHJcbiAgICAgIHN0YXJ0LnNldE1pbnV0ZXMocGFyc2VJbnQoaG91clNwbGl0WzFdKSk7XHJcbiAgICAgIGxldCBzY2hlZHVsZWRPYmplY3QgPSB0aGlzLnNjaGVkdWxlZE9iamVjdHMuZmluZCggc2NoZWR1bGVkT2JqZWN0ID0+IHNjaGVkdWxlZE9iamVjdC5pZCA9PT0gdGhpcy5jdXJyZW50RHJhZ2dpbmdPYmplY3QuaWQpO1xyXG4gICAgICBpZihzY2hlZHVsZWRPYmplY3QpIHtcclxuICAgICAgICBzY2hlZHVsZWRPYmplY3Quc3RhcnQgPSBzdGFydDtcclxuXHJcbiAgICAgICAgbGV0IG9yaWdpbmFsT2JqZWN0OiBPYmplY3QgPSB0aGlzLnNjaGVkdWxlW3RoaXMub2JqZWN0c1Byb3BdLmZpbmQoKG9iamVjdDogT2JqZWN0KSA9PiBvYmplY3RbdGhpcy5pZFByb3BdID09PSB0aGlzLmN1cnJlbnREcmFnZ2luZ09iamVjdC5pZCk7XHJcbiAgICAgICAgb3JpZ2luYWxPYmplY3RbdGhpcy5zdGFydFRpbWVQcm9wXSA9IHN0YXJ0O1xyXG4gICAgICAgIGxldCBlbmQ6IERhdGUgPSB0aGlzLmFkZE1pbnV0ZXMob3JpZ2luYWxPYmplY3RbdGhpcy5zdGFydFRpbWVQcm9wXSwgdGhpcy5jdXJyZW50RHJhZ2dpbmdPYmplY3QuaGVpZ2h0KTtcclxuICAgICAgICBvcmlnaW5hbE9iamVjdFt0aGlzLmVuZFRpbWVQcm9wXSA9IGVuZDtcclxuICAgICAgICBzY2hlZHVsZWRPYmplY3QuZW5kID0gZW5kO1xyXG4gICAgICAgIHNjaGVkdWxlZE9iamVjdC50b3AgPSB0aGlzLnRpbWVEaWZmZXJlbmNlKHRoaXMuc2NoZWR1bGVbdGhpcy5jaGlsZFByb3BdW3RoaXMuc3RhcnRUaW1lUHJvcF0sIHNjaGVkdWxlZE9iamVjdC5zdGFydCk7XHJcbiAgICAgICAgc2NoZWR1bGVkT2JqZWN0LmhlaWdodCA9IHRoaXMudGltZURpZmZlcmVuY2Uoc2NoZWR1bGVkT2JqZWN0LnN0YXJ0LCBzY2hlZHVsZWRPYmplY3QuZW5kKTtcclxuXHJcbiAgICAgICAgdGhpcy50aW1lQ2hhbmdlRXZlbnQuZW1pdChvcmlnaW5hbE9iamVjdCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jdXJyZW50RHJhZ2dpbmdPYmplY3QgPSB1bmRlZmluZWQ7XHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgbGV0IHBhcnNlZDogU2NoZWR1bGluZ09iamVjdCA9IHRoaXMudHJ5UGFyc2VKU09OT2JqZWN0KGRyYWdFdmVudC5kYXRhVHJhbnNmZXIhLmdldERhdGEoXCJ0ZXh0XCIpKTtcclxuXHJcbiAgICAgIGlmICghcGFyc2VkKSB7XHJcbiAgICAgICAgdGhpcy5uZXdPYmplY3RQbGFuRXZlbnQuZW1pdCh7Y3VycmVudEhvdXI6IGhvdXIsIGRhdGE6IHBhcnNlZC50b1N0cmluZygpfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5tb3ZlQmV0d2VlbkNhbGVuZGFyc0V2ZW50LmVtaXQoe2hvdXI6IGhvdXIsIGRhdGE6IHBhcnNlZH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIGFsbG93RHJvcChldmVudDogRHJhZ0V2ZW50LCBob3VyOiBzdHJpbmcpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgIGlmICghdGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnZHJhZy1vdmVyJykpIHtcclxuICAgICAgdGFyZ2V0LmNsYXNzTGlzdC5hZGQoJ2RyYWctb3ZlcicpO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5jdXJyZW50RHJhZ2dpbmdPYmplY3QpIHtcclxuICAgICAgbGV0IG5ld1N0YXJ0RGF0ZTogRGF0ZSA9IHRoaXMuY29udmVydERhdGVUb0V1cm9wZWFuKHRoaXMuY3VycmVudERyYWdnaW5nT2JqZWN0LnN0YXJ0KTtcclxuICAgICAgbGV0IGhvdXJTcGxpdDogc3RyaW5nW10gPSBob3VyLnNwbGl0KFwiOlwiKTtcclxuICAgICAgbmV3U3RhcnREYXRlLnNldEhvdXJzKHBhcnNlSW50KGhvdXJTcGxpdFswXSkpO1xyXG4gICAgICBuZXdTdGFydERhdGUuc2V0SG91cnMocGFyc2VJbnQoaG91clNwbGl0WzFdKSk7XHJcblxyXG4gICAgICBpZih0aGlzLnNjaGVkdWxlZE9iamVjdHMuZmluZCggKHNjaGVkdWxlZE9iamVjdDogU2NoZWR1bGluZ09iamVjdCkgPT4gc2NoZWR1bGVkT2JqZWN0LnN0YXJ0ID09PSBuZXdTdGFydERhdGUgKSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcbiAgcHVibGljIGhhbmRsZURyYWdMZWF2ZShldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnZHJhZy1vdmVyJykpIHtcclxuICAgICAgdGFyZ2V0LmNsYXNzTGlzdC5yZW1vdmUoJ2RyYWctb3ZlcicpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyBUcmlnZ2VyZWQgd2hlbiByZXNpemluZyBzdGFydHNcclxuXHJcbiAgcHVibGljIG9uUmVzaXplU3RhcnQoZXZlbnQ6IE1vdXNlRXZlbnQsIG9iajogU2NoZWR1bGluZ09iamVjdCwgZGlyZWN0aW9uOiAndG9wJyB8ICdib3R0b20nKSB7XHJcbiAgICB0aGlzLnJlc2l6aW5nID0gdHJ1ZTtcclxuICAgIHRoaXMucmVzaXplRGlyZWN0aW9uID0gZGlyZWN0aW9uO1xyXG4gICAgdGhpcy5jdXJyZW50UmVzaXppbmdPYmplY3QgPSBvYmo7XHJcbiAgICB0aGlzLmluaXRpYWxZID0gZXZlbnQuY2xpZW50WTtcclxuICAgIHRoaXMuaW5pdGlhbEhlaWdodCA9IG9iai5oZWlnaHQgfHwgMDtcclxuICAgIHRoaXMuaW5pdGlhbFRvcCA9IG9iai50b3AgfHwgMDtcclxuXHJcbiAgICAvLyBMaXN0ZW4gdG8gbW91c2Vtb3ZlIGFuZCBtb3VzZXVwIGV2ZW50cyBnbG9iYWxseVxyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vblJlc2l6aW5nLmJpbmQodGhpcykpO1xyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMub25SZXNpemVFbmQuYmluZCh0aGlzKSk7XHJcbiAgfVxyXG4gIC8vIEhhbmRsZSByZXNpemluZyB3aXRoIHNuYXBwaW5nIHRvIDMwcHggaW5jcmVtZW50cyBhbmQgbWluaW11bSBoZWlnaHQgcmVzdHJpY3Rpb25cclxuXHJcbiAgcHVibGljIG9uUmVzaXppbmcoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICghdGhpcy5yZXNpemluZyB8fCAhdGhpcy5jdXJyZW50UmVzaXppbmdPYmplY3QpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBkZWx0YVkgPSBldmVudC5jbGllbnRZIC0gdGhpcy5pbml0aWFsWTtcclxuICAgIGNvbnN0IHNuYXBwZWREZWx0YVkgPSBNYXRoLnJvdW5kKGRlbHRhWSAvIDMwKSAqIDMwO1xyXG5cclxuICAgIGlmICh0aGlzLnJlc2l6ZURpcmVjdGlvbiA9PT0gJ2JvdHRvbScpIHtcclxuICAgICAgY29uc3QgbmV4dE9iamVjdCA9IHRoaXMuX2ZpbmROZXh0T2JqZWN0KHRoaXMuY3VycmVudFJlc2l6aW5nT2JqZWN0KTtcclxuICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gbmV4dE9iamVjdCA/IG5leHRPYmplY3QudG9wIC0gdGhpcy5jdXJyZW50UmVzaXppbmdPYmplY3QudG9wIDogSW5maW5pdHk7XHJcblxyXG4gICAgICAvLyBCbG9jayBleHBhbmRpbmcgYmV5b25kIHRoZSBuZXh0IG9iamVjdCBhbmQgc2hyaW5raW5nIGJlbG93IDMwcHhcclxuICAgICAgY29uc3QgbmV3SGVpZ2h0ID0gTWF0aC5tYXgodGhpcy5pbml0aWFsSGVpZ2h0ICsgc25hcHBlZERlbHRhWSwgdGhpcy5NSU5fSEVJR0hUKTtcclxuICAgICAgdGhpcy5jdXJyZW50UmVzaXppbmdPYmplY3QuaGVpZ2h0ID0gTWF0aC5taW4obmV3SGVpZ2h0LCBtYXhIZWlnaHQpO1xyXG5cclxuICAgIH0gZWxzZSBpZiAodGhpcy5yZXNpemVEaXJlY3Rpb24gPT09ICd0b3AnKSB7XHJcbiAgICAgIGNvbnN0IHByZXZpb3VzT2JqZWN0ID0gdGhpcy5fZmluZFByZXZpb3VzT2JqZWN0KHRoaXMuY3VycmVudFJlc2l6aW5nT2JqZWN0KTtcclxuICAgICAgY29uc3QgbWluVG9wID0gcHJldmlvdXNPYmplY3QgPyBwcmV2aW91c09iamVjdC50b3AgKyBwcmV2aW91c09iamVjdC5oZWlnaHQgOiAwO1xyXG5cclxuICAgICAgY29uc3QgbmV3SGVpZ2h0ID0gTWF0aC5tYXgodGhpcy5pbml0aWFsSGVpZ2h0IC0gc25hcHBlZERlbHRhWSwgdGhpcy5NSU5fSEVJR0hUKTtcclxuICAgICAgY29uc3QgbmV3VG9wID0gdGhpcy5pbml0aWFsVG9wICsgKHRoaXMuaW5pdGlhbEhlaWdodCAtIG5ld0hlaWdodCk7XHJcblxyXG4gICAgICAvLyBCbG9jayBtb3ZpbmcgYWJvdmUgdGhlIHByZXZpb3VzIG9iamVjdCdzIGJvdHRvbSBhbmQgc2hyaW5raW5nIGJlbG93IE1JTl9IRUlHSFRcclxuICAgICAgaWYgKG5ld0hlaWdodCA+PSB0aGlzLk1JTl9IRUlHSFQgJiYgbmV3VG9wID49IG1pblRvcCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFJlc2l6aW5nT2JqZWN0LnRvcCA9IG5ld1RvcDtcclxuICAgICAgICB0aGlzLmN1cnJlbnRSZXNpemluZ09iamVjdC5oZWlnaHQgPSBuZXdIZWlnaHQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBFbnN1cmUgY2hhbmdlIGRldGVjdGlvbiBoYXBwZW5zXHJcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcbiAgLy8gVHJpZ2dlcmVkIHdoZW4gcmVzaXppbmcgZW5kc1xyXG5cclxuICBwdWJsaWMgb25SZXNpemVFbmQoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGxldCBvYmplY3Q6IFNjaGVkdWxpbmdPYmplY3QgPSB0aGlzLmN1cnJlbnRSZXNpemluZ09iamVjdDtcclxuXHJcbiAgICBpZihvYmplY3QgJiYgb2JqZWN0LnNlbGVjdGVkKSB7XHJcbiAgICAgIGxldCBvcmlnaW5hbE9iamVjdCA9IHRoaXMuc2NoZWR1bGVbdGhpcy5vYmplY3RzUHJvcF0uZmluZCgoc2NoZWR1bGVkT2JqZWN0OiBPYmplY3QpID0+IHNjaGVkdWxlZE9iamVjdFt0aGlzLmlkUHJvcF0gPT09IG9iamVjdC5pZCk7XHJcblxyXG4gICAgICBpZiAob3JpZ2luYWxPYmplY3QpIHtcclxuICAgICAgICAvLyBTdGFydCBkYXRlIGNhbGN1bGF0aW9uIGZpcnN0XHJcbiAgICAgICAgb3JpZ2luYWxPYmplY3RbdGhpcy5zdGFydFRpbWVQcm9wXSA9IHRoaXMuYWRkTWludXRlcyh0aGlzLmNvbnZlcnREYXRlVG9FdXJvcGVhbih0aGlzLnNjaGVkdWxlW3RoaXMuY2hpbGRQcm9wXVt0aGlzLnN0YXJ0VGltZVByb3BdKSwgb2JqZWN0LnRvcCk7XHJcblxyXG4gICAgICAgIC8vIFRoZW4gIGVuZCBkYXRlIGNhbGN1bGF0aW9uIGJhc2VkIG9uIHRoZSBoZWlnaHQgb2YgdGhlIG9iamVjdFxyXG4gICAgICAgIG9yaWdpbmFsT2JqZWN0W3RoaXMuZW5kVGltZVByb3BdID0gdGhpcy5hZGRNaW51dGVzKHRoaXMuY29udmVydERhdGVUb0V1cm9wZWFuKG9yaWdpbmFsT2JqZWN0W3RoaXMuc3RhcnRUaW1lUHJvcF0pLCBvYmplY3QuaGVpZ2h0KTtcclxuXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50aW1lQ2hhbmdlRXZlbnQuZW1pdChvcmlnaW5hbE9iamVjdCk7XHJcblxyXG4gICAgICB0aGlzLnJlc2l6aW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY3VycmVudFJlc2l6aW5nT2JqZWN0LnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY3VycmVudFJlc2l6aW5nT2JqZWN0ID0gbnVsbDtcclxuXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBSZW1vdmUgZ2xvYmFsIGV2ZW50IGxpc3RlbmVyc1xyXG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vblJlc2l6aW5nLmJpbmQodGhpcykpO1xyXG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMub25SZXNpemVFbmQuYmluZCh0aGlzKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdGltZURpZmZlcmVuY2UoZGF0ZTE6IERhdGUsIGRhdGUyOiBEYXRlKSB7XHJcbiAgICBsZXQgZGlmZmVyZW5jZSA9IHRoaXMuY29udmVydERhdGVUb0V1cm9wZWFuKGRhdGUxKS5nZXRUaW1lKCkgLyAxMDAwIC0gdGhpcy5jb252ZXJ0RGF0ZVRvRXVyb3BlYW4oZGF0ZTIpLmdldFRpbWUoKSAvIDEwMDA7XHJcbiAgICByZXR1cm4gTWF0aC5hYnMoZGlmZmVyZW5jZSAvIDYwKTtcclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgZ2VuZXJhdGVUaW1lQmxvY2tzKCkge1xyXG4gICAgbGV0IHN0YXJ0VW5peDogbnVtYmVyID0gIXRoaXMuY2hpbGRQcm9wID8gdGhpcy5kYXRlVG9Vbml4RXBvY2godGhpcy5jb252ZXJ0RGF0ZVRvRXVyb3BlYW4odGhpcy5zY2hlZHVsZVt0aGlzLnN0YXJ0VGltZVByb3BdKSkgOiB0aGlzLmRhdGVUb1VuaXhFcG9jaCh0aGlzLmNvbnZlcnREYXRlVG9FdXJvcGVhbih0aGlzLnNjaGVkdWxlW3RoaXMuY2hpbGRQcm9wXVt0aGlzLnN0YXJ0VGltZVByb3BdKSk7XHJcbiAgICBsZXQgZW5kVW5peDogbnVtYmVyID0gIXRoaXMuY2hpbGRQcm9wID8gdGhpcy5kYXRlVG9Vbml4RXBvY2godGhpcy5jb252ZXJ0RGF0ZVRvRXVyb3BlYW4odGhpcy5zY2hlZHVsZVt0aGlzLmVuZFRpbWVQcm9wXSkpIDogdGhpcy5kYXRlVG9Vbml4RXBvY2godGhpcy5jb252ZXJ0RGF0ZVRvRXVyb3BlYW4odGhpcy5zY2hlZHVsZVt0aGlzLmNoaWxkUHJvcF1bdGhpcy5lbmRUaW1lUHJvcF0pKTtcclxuXHJcbiAgICBsZXQgaW50ZXJ2YWwgPSA2MCAqIDYwO1xyXG5cclxuICAgIGZvciAobGV0IGhvdXJDb3VudCA9IHN0YXJ0VW5peDsgaG91ckNvdW50IDw9IGVuZFVuaXg7IGhvdXJDb3VudCArPSBpbnRlcnZhbCkge1xyXG4gICAgICBsZXQgaG91ciA9IG5ldyBEYXRlKGhvdXJDb3VudCAqIDEwMDApXHJcbiAgICAgIGxldCBob3VyU3RyaW5nID0gYCR7aG91ci5nZXRIb3VycygpfToke2hvdXIuZ2V0TWludXRlcygpID09PSAwID8gJzAwJyA6IGhvdXIuZ2V0TWludXRlcygpfWA7XHJcbiAgICAgIHRoaXMuaG91ckxhYmVscy5wdXNoKGhvdXJTdHJpbmcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGRhdGVUb1VuaXhFcG9jaChkYXRlOiBEYXRlKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBNYXRoLmZsb29yKGRhdGUuZ2V0VGltZSgpKSAvIDEwMDA7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRkTWludXRlcyhkYXRlOiBEYXRlLCBtaW51dGVzOiBudW1iZXIpOiBEYXRlIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSArIG1pbnV0ZXMgKiA2MDAwMCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdHJ5UGFyc2VKU09OT2JqZWN0KGpzb25TdHJpbmc6IHN0cmluZykge1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IG8gPSBKU09OLnBhcnNlKGpzb25TdHJpbmcpO1xyXG4gICAgICBpZiAobyAmJiB0eXBlb2YgbyA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgIHJldHVybiBvO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZEhhbGZIb3VyKGhvdXI6IHN0cmluZykge1xyXG4gICAgbGV0IHNwbGl0ID0gaG91ci5zcGxpdChcIjpcIik7XHJcbiAgICBzcGxpdFsxXSA9IFwiMzBcIjtcclxuICAgIHJldHVybiBzcGxpdC5qb2luKCc6Jyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29udmVydFRaKGRhdGUsIHR6U3RyaW5nKSB7XHJcbiAgICByZXR1cm4gbmV3IERhdGUoKHR5cGVvZiBkYXRlID09PSBcInN0cmluZ1wiID8gbmV3IERhdGUoZGF0ZSkgOiBkYXRlKS50b0xvY2FsZVN0cmluZyhcImVuLVVTXCIsIHt0aW1lWm9uZTogdHpTdHJpbmd9KSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29udmVydERhdGVUb0V1cm9wZWFuKGRhdGU6IERhdGUpOiBEYXRlIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnZlcnRUWihkYXRlLCAnRXVyb3BlL0Ftc3RlcmRhbScpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlRGVzZWxlY3RBbGwoKSB7XHJcbiAgICB0aGlzLnNjaGVkdWxlZE9iamVjdHMuZm9yRWFjaCggKHNjaGVkdWxlZE9iamVjdDogU2NoZWR1bGluZ09iamVjdCkgPT4ge1xyXG4gICAgICBpZihzY2hlZHVsZWRPYmplY3Quc2VsZWN0ZWQpIHtcclxuICAgICAgICBzY2hlZHVsZWRPYmplY3Quc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG5cclxuXHJcblxyXG59XHJcbiJdfQ==
@@ -2,7 +2,7 @@ import { NgModule } from "@angular/core";
2
2
  import { CommonModule, DatePipe } from "@angular/common";
3
3
  import { HourSchedulingExpandableComponent } from "./hour-scheduling-expandable.component";
4
4
  import { HourSchedulingComponentModule } from "../hour-scheduling/hour-scheduling.module";
5
- import { HourSchedulingExpandableTemplateComponent } from "./components/hour-scheduling-expandable-template/hour-scheduling-expandable-template.component";
5
+ import { HourSchedulingExpandableTemplateModule } from './components/hour-scheduling-expandable-template/hour-scheduling-expandable-template.module';
6
6
  export class HourSchedulingExpandableComponentModule {
7
7
  }
8
8
  HourSchedulingExpandableComponentModule.decorators = [
@@ -10,16 +10,15 @@ HourSchedulingExpandableComponentModule.decorators = [
10
10
  imports: [
11
11
  CommonModule,
12
12
  HourSchedulingComponentModule,
13
+ HourSchedulingExpandableTemplateModule
13
14
  ],
14
15
  declarations: [
15
16
  HourSchedulingExpandableComponent,
16
- HourSchedulingExpandableTemplateComponent
17
17
  ],
18
18
  exports: [
19
19
  HourSchedulingExpandableComponent,
20
- HourSchedulingExpandableTemplateComponent
21
20
  ],
22
21
  providers: [DatePipe]
23
22
  },] }
24
23
  ];
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG91ci1zY2hlZHVsaW5nLWV4cGFuZGFibGUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2hvdXItc2NoZWR1bGluZy1leHBhbmRhYmxlL2hvdXItc2NoZWR1bGluZy1leHBhbmRhYmxlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUUsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGlDQUFpQyxFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFDekYsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFDeEYsT0FBTyxFQUNMLHlDQUF5QyxFQUMxQyxNQUFNLGdHQUFnRyxDQUFDO0FBb0J4RyxNQUFNLE9BQU8sdUNBQXVDOzs7WUFoQm5ELFFBQVEsU0FBQztnQkFDUixPQUFPLEVBQUU7b0JBQ1AsWUFBWTtvQkFDWiw2QkFBNkI7aUJBQzlCO2dCQUNDLFlBQVksRUFBRTtvQkFDVixpQ0FBaUM7b0JBQ25DLHlDQUF5QztpQkFDMUM7Z0JBQ0gsT0FBTyxFQUFFO29CQUNQLGlDQUFpQztvQkFDakMseUNBQXlDO2lCQUMxQztnQkFDRCxTQUFTLEVBQUUsQ0FBRSxRQUFRLENBQUM7YUFFdkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nTW9kdWxlfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge0NvbW1vbk1vZHVsZSwgRGF0ZVBpcGV9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHtIb3VyU2NoZWR1bGluZ0V4cGFuZGFibGVDb21wb25lbnR9IGZyb20gXCIuL2hvdXItc2NoZWR1bGluZy1leHBhbmRhYmxlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQge0hvdXJTY2hlZHVsaW5nQ29tcG9uZW50TW9kdWxlfSBmcm9tIFwiLi4vaG91ci1zY2hlZHVsaW5nL2hvdXItc2NoZWR1bGluZy5tb2R1bGVcIjtcclxuaW1wb3J0IHtcclxuICBIb3VyU2NoZWR1bGluZ0V4cGFuZGFibGVUZW1wbGF0ZUNvbXBvbmVudFxyXG59IGZyb20gXCIuL2NvbXBvbmVudHMvaG91ci1zY2hlZHVsaW5nLWV4cGFuZGFibGUtdGVtcGxhdGUvaG91ci1zY2hlZHVsaW5nLWV4cGFuZGFibGUtdGVtcGxhdGUuY29tcG9uZW50XCI7XHJcblxyXG5cclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgSG91clNjaGVkdWxpbmdDb21wb25lbnRNb2R1bGUsXHJcbiAgXSxcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICAgIEhvdXJTY2hlZHVsaW5nRXhwYW5kYWJsZUNvbXBvbmVudCxcclxuICAgICAgSG91clNjaGVkdWxpbmdFeHBhbmRhYmxlVGVtcGxhdGVDb21wb25lbnRcclxuICAgIF0sXHJcbiAgZXhwb3J0czogW1xyXG4gICAgSG91clNjaGVkdWxpbmdFeHBhbmRhYmxlQ29tcG9uZW50LFxyXG4gICAgSG91clNjaGVkdWxpbmdFeHBhbmRhYmxlVGVtcGxhdGVDb21wb25lbnRcclxuICBdLFxyXG4gIHByb3ZpZGVyczogWyBEYXRlUGlwZV1cclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBIb3VyU2NoZWR1bGluZ0V4cGFuZGFibGVDb21wb25lbnRNb2R1bGV7XHJcbn1cclxuIl19
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG91ci1zY2hlZHVsaW5nLWV4cGFuZGFibGUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2hvdXItc2NoZWR1bGluZy1leHBhbmRhYmxlL2hvdXItc2NoZWR1bGluZy1leHBhbmRhYmxlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUUsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGlDQUFpQyxFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFDekYsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFDeEYsT0FBTyxFQUFDLHNDQUFzQyxFQUFDLE1BQU0sNkZBQTZGLENBQUM7QUFtQm5KLE1BQU0sT0FBTyx1Q0FBdUM7OztZQWZuRCxRQUFRLFNBQUM7Z0JBQ1IsT0FBTyxFQUFFO29CQUNQLFlBQVk7b0JBQ1osNkJBQTZCO29CQUM3QixzQ0FBc0M7aUJBQ3ZDO2dCQUNDLFlBQVksRUFBRTtvQkFDVixpQ0FBaUM7aUJBQ3BDO2dCQUNILE9BQU8sRUFBRTtvQkFDUCxpQ0FBaUM7aUJBQ2xDO2dCQUNELFNBQVMsRUFBRSxDQUFFLFFBQVEsQ0FBQzthQUV2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdNb2R1bGV9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlLCBEYXRlUGlwZX0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQge0hvdXJTY2hlZHVsaW5nRXhwYW5kYWJsZUNvbXBvbmVudH0gZnJvbSBcIi4vaG91ci1zY2hlZHVsaW5nLWV4cGFuZGFibGUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7SG91clNjaGVkdWxpbmdDb21wb25lbnRNb2R1bGV9IGZyb20gXCIuLi9ob3VyLXNjaGVkdWxpbmcvaG91ci1zY2hlZHVsaW5nLm1vZHVsZVwiO1xyXG5pbXBvcnQge0hvdXJTY2hlZHVsaW5nRXhwYW5kYWJsZVRlbXBsYXRlTW9kdWxlfSBmcm9tICcuL2NvbXBvbmVudHMvaG91ci1zY2hlZHVsaW5nLWV4cGFuZGFibGUtdGVtcGxhdGUvaG91ci1zY2hlZHVsaW5nLWV4cGFuZGFibGUtdGVtcGxhdGUubW9kdWxlJztcclxuXHJcblxyXG5cclxuQE5nTW9kdWxlKHtcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBIb3VyU2NoZWR1bGluZ0NvbXBvbmVudE1vZHVsZSxcclxuICAgIEhvdXJTY2hlZHVsaW5nRXhwYW5kYWJsZVRlbXBsYXRlTW9kdWxlXHJcbiAgXSxcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICAgIEhvdXJTY2hlZHVsaW5nRXhwYW5kYWJsZUNvbXBvbmVudCxcclxuICAgIF0sXHJcbiAgZXhwb3J0czogW1xyXG4gICAgSG91clNjaGVkdWxpbmdFeHBhbmRhYmxlQ29tcG9uZW50LFxyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbIERhdGVQaXBlXVxyXG5cclxufSlcclxuZXhwb3J0IGNsYXNzIEhvdXJTY2hlZHVsaW5nRXhwYW5kYWJsZUNvbXBvbmVudE1vZHVsZXtcclxufVxyXG4iXX0=
@@ -7,6 +7,7 @@ export class ListOfValuesPopupComponent {
7
7
  this.iconCacheService = iconCacheService;
8
8
  this._elementRef = _elementRef;
9
9
  this.multiselect = false;
10
+ this.showToggleAll = false;
10
11
  this.displayField = 'description';
11
12
  this.searchDisabled = false;
12
13
  this.modelChange = new EventEmitter();
@@ -14,6 +15,7 @@ export class ListOfValuesPopupComponent {
14
15
  this.keyDown = new EventEmitter();
15
16
  this.viewModels = [];
16
17
  this.viewModelsMain = [];
18
+ this.allSelected = false;
17
19
  this._collection = [];
18
20
  this._searchTerm = '';
19
21
  this._lovItems = [];
@@ -73,12 +75,13 @@ export class ListOfValuesPopupComponent {
73
75
  case KeyboardKey.Up:
74
76
  this.selectNextOption(true);
75
77
  return false;
76
- case KeyboardKey.SpaceBar:
78
+ case KeyboardKey.Enter:
77
79
  if (this.highLightModel) {
78
80
  this.selectViewModel(this.highLightModel, false);
79
81
  }
80
82
  else {
81
83
  this.keyDown.next(event);
84
+ return true;
82
85
  }
83
86
  return false;
84
87
  default:
@@ -158,6 +161,27 @@ export class ListOfValuesPopupComponent {
158
161
  this._scrollIntoView();
159
162
  }
160
163
  }
164
+ selectAll() {
165
+ if (this.viewModels.length > 0) {
166
+ this.viewModels.forEach(vm => vm.checked = true);
167
+ this.selectOptions();
168
+ }
169
+ }
170
+ toggleAll() {
171
+ if (!this.allSelected) {
172
+ if (this.viewModels.length > 0) {
173
+ this.viewModels.forEach(vm => vm.checked = true);
174
+ this.selectOptions();
175
+ }
176
+ }
177
+ else {
178
+ if (this.viewModels.length > 0) {
179
+ this.viewModels.forEach(vm => vm.checked = false);
180
+ this.selectOptions();
181
+ }
182
+ }
183
+ this.allSelected = !this.allSelected;
184
+ }
161
185
  _prepareViewModelsMain() {
162
186
  this.viewModelsMain.length = 0;
163
187
  this.collection.forEach(m => {
@@ -198,36 +222,40 @@ ListOfValuesPopupComponent.decorators = [
198
222
  { type: Component, args: [{
199
223
  selector: 'co-list-of-values-popup',
200
224
  template: `
201
- <div class="lov-options" [overlay]="parentForOverlay" [inheritWidth]="true" [ngClass]="customCssClass"
202
- id="lov-popup"
203
- role="listbox" [tabindex]="-1"
204
- (clickOutside)="closePopup.emit($event)">
205
- <co-input-search *ngIf="multiselect"
206
- tabindex="-1"
207
- [(model)]="searchTerm"
208
- [placeholder]="searchPlaceholder"
209
- (keydown)="handleInputKeyDown($event)"
210
- (modelChange)="filterViewModels()"></co-input-search>
211
- <ul class="dropdown-list" #dropDownList>
212
- <li
213
- #lovItem
214
- *ngFor="let viewModel of viewModels; let index = index"
215
- [class.selected]="viewModel === highLightModel || viewModels.length === 1"
216
- (click)="selectViewModel(viewModel, !multiselect)"
217
- role="option">
218
- <ng-container *ngIf="!multiselect">
219
- <co-icon *ngIf="viewModel.model[optionIcon]" class="input-text-left-icon" [iconData]="iconCacheService.getIcon(viewModel.model[optionIcon])">
220
- </co-icon>
221
- <span class="lov-options-text" [textContent]="viewModel.model[displayField]"></span>
222
- </ng-container>
223
- <ng-container *ngIf="multiselect">
224
- <co-input-checkbox [model]="viewModel.checked"
225
- (modelChange)="selectViewModel(viewModel, false)"></co-input-checkbox>
226
- <span class="lov-options-text" [textContent]="viewModel.model[displayField]"></span>
227
- </ng-container>
228
- </li>
229
- </ul>
230
- </div>
225
+ <div class="lov-options" [overlay]="parentForOverlay" [inheritWidth]="true" [ngClass]="customCssClass"
226
+ id="lov-popup"
227
+ role="listbox" [tabindex]="-1"
228
+ (clickOutside)="closePopup.emit($event)">
229
+ <co-input-search *ngIf="multiselect"
230
+ tabindex="-1"
231
+ [(model)]="searchTerm"
232
+ [placeholder]="searchPlaceholder"
233
+ (keydown)="handleInputKeyDown($event)"
234
+ (modelChange)="filterViewModels()"></co-input-search>
235
+ <div class="row gap" *ngIf="showToggleAll && multiselect">
236
+ <co-input-checkbox [model]="allSelected" (modelChange)="toggleAll()"></co-input-checkbox>
237
+ <span [textContent]="'DESELECT_ALL' | coreLocalize" (click)="toggleAll()"></span>
238
+ </div>
239
+ <ul class="dropdown-list" #dropDownList>
240
+ <li
241
+ #lovItem
242
+ *ngFor="let viewModel of viewModels; let index = index"
243
+ [class.selected]="viewModel === highLightModel || viewModels.length === 1"
244
+ (click)="selectViewModel(viewModel, !multiselect)"
245
+ role="option">
246
+ <ng-container *ngIf="!multiselect">
247
+ <co-icon *ngIf="viewModel.model[optionIcon]" class="input-text-left-icon" [iconData]="iconCacheService.getIcon(viewModel.model[optionIcon])">
248
+ </co-icon>
249
+ <span class="lov-options-text" [textContent]="viewModel.model[displayField]"></span>
250
+ </ng-container>
251
+ <ng-container *ngIf="multiselect">
252
+ <co-input-checkbox [model]="viewModel.checked"
253
+ (modelChange)="selectViewModel(viewModel, false)"></co-input-checkbox>
254
+ <span class="lov-options-text" [textContent]="viewModel.model[displayField]"></span>
255
+ </ng-container>
256
+ </li>
257
+ </ul>
258
+ </div>
231
259
  `,
232
260
  encapsulation: ViewEncapsulation.None
233
261
  },] }
@@ -242,6 +270,7 @@ ListOfValuesPopupComponent.propDecorators = {
242
270
  inputSearch: [{ type: ViewChild, args: [InputSearchComponent,] }],
243
271
  model: [{ type: Input }],
244
272
  multiselect: [{ type: Input }],
273
+ showToggleAll: [{ type: Input }],
245
274
  displayField: [{ type: Input }],
246
275
  searchPlaceholder: [{ type: Input }],
247
276
  customCssClass: [{ type: Input }],
@@ -254,4 +283,4 @@ ListOfValuesPopupComponent.propDecorators = {
254
283
  keyDown: [{ type: Output }],
255
284
  showClass: [{ type: HostBinding, args: ['class.co-list-of-values-popup',] }]
256
285
  };
257
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1vZi12YWx1ZXMtcG9wdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2xpc3Qtb2YtdmFsdWVzL2xpc3Qtb2YtdmFsdWVzLXBvcHVwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUNULFlBQVksRUFDWixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFDNUUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQzlELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBMkM1RCxNQUFNLE9BQU8sMEJBQTBCO0lBc0ZyQyxZQUNTLGdCQUFtQyxFQUNsQyxXQUF1QjtRQUR4QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW1CO1FBQ2xDLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBcEUxQixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUc3QixpQkFBWSxHQUFXLGFBQWEsQ0FBQztRQVNyQyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQXFCaEMsZ0JBQVcsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUd6RCxlQUFVLEdBQXdCLElBQUksWUFBWSxFQUFTLENBQUM7UUFHNUQsWUFBTyxHQUFnQyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQWtCekUsZUFBVSxHQUFtQixFQUFFLENBQUM7UUFDaEMsbUJBQWMsR0FBbUIsRUFBRSxDQUFDO1FBR25DLGdCQUFXLEdBQVUsRUFBRSxDQUFDO1FBQ3hCLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pC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LEVBQUUsVUFBVSxFQUFDOzBCQUc1QyxTQUFTLFNBQUMsb0JBQW9CO29CQU85QixLQUFLOzBCQUdMLEtBQUs7MkJBR0wsS0FBSztnQ0FHTCxLQUFLOzZCQUdMLEtBQUs7NkJBR0wsS0FBSzsrQkFHTCxLQUFLO3lCQUdMLEtBQUs7eUJBR0wsS0FBSzswQkFZTCxNQUFNO3lCQUdOLE1BQU07c0JBR04sTUFBTTt3QkFHTixXQUFXLFNBQUMsK0JBQStCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdEJpbmRpbmcsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SW5wdXRTZWFyY2hDb21wb25lbnR9IGZyb20gJy4uL2lucHV0LXNlYXJjaC9pbnB1dC1zZWFyY2guY29tcG9uZW50JztcclxuaW1wb3J0IHtLZXlib2FyZEtleX0gZnJvbSAnLi4vLi4vY29yZS9lbnVtL2tleWJvYXJkLWtleS5lbnVtJztcclxuaW1wb3J0IHtJY29uQ2FjaGVTZXJ2aWNlfSBmcm9tICcuLi9pY29uL2ljb24tY2FjaGUuc2VydmljZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIGxvdlZpZXdNb2RlbCB7XHJcbiAgY2hlY2tlZDogYm9vbGVhblxyXG4gIG1vZGVsOiBhbnlcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjby1saXN0LW9mLXZhbHVlcy1wb3B1cCcsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxkaXYgY2xhc3M9XCJsb3Ytb3B0aW9uc1wiIFtvdmVybGF5XT1cInBhcmVudEZvck92ZXJsYXlcIiBbaW5oZXJpdFdpZHRoXT1cInRydWVcIiBbbmdDbGFzc109XCJjdXN0b21Dc3NDbGFzc1wiXHJcbiAgICAgICAgIGlkPVwibG92LXBvcHVwXCJcclxuICAgICAgICAgcm9sZT1cImxpc3Rib3hcIiBbdGFiaW5kZXhdPVwiLTFcIlxyXG4gICAgICAgICAoY2xpY2tPdXRzaWRlKT1cImNsb3NlUG9wdXAuZW1pdCgkZXZlbnQpXCI+XHJcbiAgICAgIDxjby1pbnB1dC1zZWFyY2ggKm5nSWY9XCJtdWx0aXNlbGVjdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgWyhtb2RlbCldPVwic2VhcmNoVGVybVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlYXJjaFBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVJbnB1dEtleURvd24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cImZpbHRlclZpZXdNb2RlbHMoKVwiPjwvY28taW5wdXQtc2VhcmNoPlxyXG4gICAgICA8dWwgY2xhc3M9XCJkcm9wZG93bi1saXN0XCIgI2Ryb3BEb3duTGlzdD5cclxuICAgICAgICA8bGlcclxuICAgICAgICAgICNsb3ZJdGVtXHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgdmlld01vZGVsIG9mIHZpZXdNb2RlbHM7IGxldCBpbmRleCA9IGluZGV4XCJcclxuICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJ2aWV3TW9kZWwgPT09IGhpZ2hMaWdodE1vZGVsIHx8IHZpZXdNb2RlbHMubGVuZ3RoID09PSAxXCJcclxuICAgICAgICAgIChjbGljayk9XCJzZWxlY3RWaWV3TW9kZWwodmlld01vZGVsLCAhbXVsdGlzZWxlY3QpXCJcclxuICAgICAgICAgIHJvbGU9XCJvcHRpb25cIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbXVsdGlzZWxlY3RcIj5cclxuICAgICAgICAgICAgICA8Y28taWNvbiAqbmdJZj1cInZpZXdNb2RlbC5tb2RlbFtvcHRpb25JY29uXVwiIGNsYXNzPVwiaW5wdXQtdGV4dC1sZWZ0LWljb25cIiBbaWNvbkRhdGFdPVwiaWNvbkNhY2hlU2VydmljZS5nZXRJY29uKHZpZXdNb2RlbC5tb2RlbFtvcHRpb25JY29uXSlcIj5cclxuICAgICAgICAgICAgICA8L2NvLWljb24+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibG92LW9wdGlvbnMtdGV4dFwiIFt0ZXh0Q29udGVudF09XCJ2aWV3TW9kZWwubW9kZWxbZGlzcGxheUZpZWxkXVwiPjwvc3Bhbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm11bHRpc2VsZWN0XCI+XHJcbiAgICAgICAgICAgIDxjby1pbnB1dC1jaGVja2JveCBbbW9kZWxdPVwidmlld01vZGVsLmNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cInNlbGVjdFZpZXdNb2RlbCh2aWV3TW9kZWwsIGZhbHNlKVwiPjwvY28taW5wdXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibG92LW9wdGlvbnMtdGV4dFwiIFt0ZXh0Q29udGVudF09XCJ2aWV3TW9kZWwubW9kZWxbZGlzcGxheUZpZWxkXVwiPjwvc3Bhbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgIDwvdWw+XHJcbiAgICA8L2Rpdj5cclxuICBgLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMaXN0T2ZWYWx1ZXNQb3B1cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZHJlbignbG92SXRlbScsIHtyZWFkOiBFbGVtZW50UmVmfSkgc2V0IGxvdkl0ZW1zKGNoaWxkcmVuKSB7XHJcbiAgICB0aGlzLl9sb3ZJdGVtcyA9IGNoaWxkcmVuLnRvQXJyYXkoKTtcclxuICAgIHRoaXMuX3Njcm9sbEludG9WaWV3KCk7XHJcbiAgfVxyXG5cclxuICBAVmlld0NoaWxkKCdkcm9wRG93bkxpc3QnLCB7cmVhZDogRWxlbWVudFJlZn0pXHJcbiAgcHVibGljIGRyb3BEb3duTGlzdDogRWxlbWVudFJlZjtcclxuXHJcbiAgQFZpZXdDaGlsZChJbnB1dFNlYXJjaENvbXBvbmVudCkgc2V0IGlucHV0U2VhcmNoKGNvbXBvbmVudDogSW5wdXRTZWFyY2hDb21wb25lbnQpIHtcclxuICAgIHRoaXMuX3NlYXJjaElucHV0ID0gY29tcG9uZW50O1xyXG4gICAgaWYgKHRoaXMuX3NlYXJjaElucHV0KSB7XHJcbiAgICAgIHRoaXMuX3NlYXJjaElucHV0LnJlcXVlc3RGb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgbW9kZWw6IGFueTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgbXVsdGlzZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZGlzcGxheUZpZWxkOiBzdHJpbmcgPSAnZGVzY3JpcHRpb24nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZWFyY2hQbGFjZWhvbGRlcjogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBjdXN0b21Dc3NDbGFzczogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZWFyY2hEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBwYXJlbnRGb3JPdmVybGF5OiBFbGVtZW50UmVmO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBvcHRpb25JY29uOiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBjb2xsZWN0aW9uKHZhbHVlOiBhbnlbXSkge1xyXG4gICAgdGhpcy5fY29sbGVjdGlvbiA9IHZhbHVlIHx8IFtdO1xyXG4gICAgdGhpcy5fcHJlcGFyZVZpZXdNb2RlbHNNYWluKCk7XHJcbiAgICB0aGlzLl9wcmVwYXJlVmlld01vZGVscygpO1xyXG4gICAgdGhpcy5maWx0ZXJWaWV3TW9kZWxzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNvbGxlY3Rpb24oKTogYW55W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbGxlY3Rpb247XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgbW9kZWxDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBjbG9zZVBvcHVwOiBFdmVudEVtaXR0ZXI8RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIGtleURvd246IEV2ZW50RW1pdHRlcjxLZXlib2FyZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8S2V5Ym9hcmRFdmVudD4oKTtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5jby1saXN0LW9mLXZhbHVlcy1wb3B1cCcpXHJcbiAgcHVibGljIHNob3dDbGFzcygpIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBzZWFyY2hUZXJtKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3NlYXJjaFRlcm0gPSB2YWx1ZTtcclxuICAgIHRoaXMubW9kZWwgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmhpZ2hMaWdodE1vZGVsID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5maWx0ZXJWaWV3TW9kZWxzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHNlYXJjaFRlcm0oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWFyY2hUZXJtO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHZpZXdNb2RlbHM6IGxvdlZpZXdNb2RlbFtdID0gW107XHJcbiAgcHVibGljIHZpZXdNb2RlbHNNYWluOiBsb3ZWaWV3TW9kZWxbXSA9IFtdO1xyXG4gIHB1YmxpYyBoaWdoTGlnaHRNb2RlbDogbG92Vmlld01vZGVsO1xyXG5cclxuICBwcml2YXRlIF9jb2xsZWN0aW9uOiBhbnlbXSA9IFtdO1xyXG4gIHByaXZhdGUgX3NlYXJjaFRlcm06IHN0cmluZyA9ICcnO1xyXG4gIHByaXZhdGUgX2xvdkl0ZW1zOiBFbGVtZW50UmVmW10gPSBbXTtcclxuICBwcml2YXRlIF9zZWFyY2hJbnB1dDogSW5wdXRTZWFyY2hDb21wb25lbnQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGljb25DYWNoZVNlcnZpY2UgOiBJY29uQ2FjaGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZlxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5tb2RlbCkge1xyXG4gICAgICBpZiAoIXRoaXMubXVsdGlzZWxlY3QpIHtcclxuICAgICAgICB0aGlzLl9zY3JvbGxJbnRvVmlldygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5tb2RlbC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3Qgdmlld01vZGVsOiBsb3ZWaWV3TW9kZWwgPSB0aGlzLnZpZXdNb2RlbHNNYWluLmZpbmQodiA9PiBKU09OLnN0cmluZ2lmeSh2Lm1vZGVsKSA9PT0gSlNPTi5zdHJpbmdpZnkodGhpcy5tb2RlbFtpXSkpO1xyXG4gICAgICAgICAgaWYgKHZpZXdNb2RlbCkge1xyXG4gICAgICAgICAgICB2aWV3TW9kZWwuY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlSW5wdXRLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgc3dpdGNoIChldmVudC5jb2RlKSB7XHJcbiAgICAgICAgY2FzZSBLZXlib2FyZEtleS5Eb3duOlxyXG4gICAgICAgICAgdGhpcy5zZWxlY3ROZXh0T3B0aW9uKCk7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgY2FzZSBLZXlib2FyZEtleS5VcDpcclxuICAgICAgICAgIHRoaXMuc2VsZWN0TmV4dE9wdGlvbih0cnVlKTtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICBjYXNlIEtleWJvYXJkS2V5LlNwYWNlQmFyOlxyXG4gICAgICAgICAgaWYgKHRoaXMuaGlnaExpZ2h0TW9kZWwpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RWaWV3TW9kZWwodGhpcy5oaWdoTGlnaHRNb2RlbCwgZmFsc2UpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5rZXlEb3duLm5leHQoZXZlbnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICB0aGlzLmtleURvd24ubmV4dChldmVudCk7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGZpbHRlclZpZXdNb2RlbHMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuY29sbGVjdGlvbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9wcmVwYXJlVmlld01vZGVscygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbGVjdFZpZXdNb2RlbCh2aWV3TW9kZWw6IGxvdlZpZXdNb2RlbCwgY2xvc2VQb3B1cDogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5tdWx0aXNlbGVjdCkge1xyXG4gICAgICB0aGlzLnNlbGVjdE1vZGVsQnlWaWV3TW9kZWwodmlld01vZGVsLCBjbG9zZVBvcHVwKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGlkeDogbnVtYmVyID0gdGhpcy52aWV3TW9kZWxzLmZpbmRJbmRleCh2bSA9PiB2bSA9PT0gdmlld01vZGVsKTtcclxuICAgICAgdGhpcy52aWV3TW9kZWxzW2lkeF0uY2hlY2tlZCA9ICF0aGlzLnZpZXdNb2RlbHNbaWR4XS5jaGVja2VkO1xyXG4gICAgICB0aGlzLnNlbGVjdE9wdGlvbnMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RNb2RlbEJ5Vmlld01vZGVsKHZpZXdNb2RlbDogbG92Vmlld01vZGVsLCBjbG9zZVBvcHVwOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgdGhpcy5tb2RlbCA9IHRoaXMudmlld01vZGVsc01haW4uZmluZCh2bSA9PiB2bSA9PT0gdmlld01vZGVsKS5tb2RlbDtcclxuICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh0aGlzLm1vZGVsKTtcclxuICAgIHRoaXMuX3Njcm9sbEludG9WaWV3KCk7XHJcbiAgICBpZiAoY2xvc2VQb3B1cCkge1xyXG4gICAgICB0aGlzLmNsb3NlUG9wdXAuZW1pdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZm9yIHNpbmdsZSBzZWxlY3RcclxuICBwdWJsaWMgc2VsZWN0T3B0aW9uQW5kQ2xvc2VQb3B1cCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnZpZXdNb2RlbHMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0TmV4dE9wdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5tb2RlbCAmJiB0aGlzLnNlYXJjaFRlcm0pIHtcclxuICAgICAgY29uc3Qgd2lzaE1vZGVsOiBsb3ZWaWV3TW9kZWwgPSB0aGlzLnZpZXdNb2RlbHNNYWluLmZpbmQodm1tID0+IHZtbS5tb2RlbFt0aGlzLmRpc3BsYXlGaWVsZF0gPT09IHRoaXMuc2VhcmNoVGVybSk7XHJcbiAgICAgIGlmICh3aXNoTW9kZWwpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdFZpZXdNb2RlbCh3aXNoTW9kZWwpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHRoaXMubW9kZWwpO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoVGVybSA9ICcnO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNsb3NlUG9wdXAuZW1pdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZm9yIG11bHRpIHNlbGVjdFxyXG4gIHB1YmxpYyBzZWxlY3RPcHRpb25zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5tb2RlbCA9IHRoaXMudmlld01vZGVsc01haW4uZmlsdGVyKHYgPT4gdi5jaGVja2VkKS5tYXAobSA9PiBtLm1vZGVsKTtcclxuICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh0aGlzLm1vZGVsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3ROZXh0T3B0aW9uKGJhY2s6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgbGV0IG5leHRNb2RlbDogYW55O1xyXG4gICAgaWYgKCF0aGlzLmhpZ2hMaWdodE1vZGVsKSB7XHJcbiAgICAgIG5leHRNb2RlbCA9IHRoaXMudmlld01vZGVsc1tiYWNrID8gdGhpcy52aWV3TW9kZWxzLmxlbmd0aCAtIDEgOiAwXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRWaWV3TW9kZWxJZHg6IG51bWJlciA9IHRoaXMudmlld01vZGVscy5maW5kSW5kZXgodm0gPT4gdm0gPT09IHRoaXMuaGlnaExpZ2h0TW9kZWwpO1xyXG4gICAgICBpZiAoYmFjaykge1xyXG4gICAgICAgIG5leHRNb2RlbCA9IHRoaXMudmlld01vZGVsc1tjdXJyZW50Vmlld01vZGVsSWR4IDw9IDAgPyB0aGlzLnZpZXdNb2RlbHMubGVuZ3RoIC0gMSA6IGN1cnJlbnRWaWV3TW9kZWxJZHggLSAxXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuZXh0TW9kZWwgPSB0aGlzLnZpZXdNb2RlbHNbY3VycmVudFZpZXdNb2RlbElkeCA+PSB0aGlzLnZpZXdNb2RlbHMubGVuZ3RoIC0gMSA/IDAgOiBjdXJyZW50Vmlld01vZGVsSWR4ICsgMV07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuaGlnaExpZ2h0TW9kZWwgPSBuZXh0TW9kZWw7XHJcbiAgICBpZiAoIXRoaXMubXVsdGlzZWxlY3QpIHtcclxuICAgICAgdGhpcy5zZWxlY3RWaWV3TW9kZWwobmV4dE1vZGVsLCBmYWxzZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9zY3JvbGxJbnRvVmlldygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJlcGFyZVZpZXdNb2RlbHNNYWluKCk6IHZvaWQge1xyXG4gICAgdGhpcy52aWV3TW9kZWxzTWFpbi5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5jb2xsZWN0aW9uLmZvckVhY2gobSA9PiB7XHJcbiAgICAgIHRoaXMudmlld01vZGVsc01haW4ucHVzaCh7Y2hlY2tlZDogZmFsc2UsIG1vZGVsOiBtfSk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJlcGFyZVZpZXdNb2RlbHMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnZpZXdNb2RlbHMubGVuZ3RoID0gMDtcclxuICAgIHRoaXMudmlld01vZGVscyA9IHRoaXMudmlld01vZGVsc01haW4uZmlsdGVyKFxyXG4gICAgICB2bSA9PiB2bS5tb2RlbFt0aGlzLmRpc3BsYXlGaWVsZF0gJiYgdm0ubW9kZWxbdGhpcy5kaXNwbGF5RmllbGRdLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zZWFyY2hUZXJtID8gdGhpcy5zZWFyY2hUZXJtLnRvTG93ZXJDYXNlKCkgOiBcIlwiKSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbEludG9WaWV3KCk6IHZvaWQge1xyXG4gICAgY29uc3QgYWN0aXZlSW5kZXg6IG51bWJlciA9IHRoaXMudmlld01vZGVscy5maW5kSW5kZXgodm1tID0+IHZtbSA9PT0gdGhpcy5oaWdoTGlnaHRNb2RlbCk7XHJcbiAgICBpZiAoIXRoaXMuX2xvdkl0ZW1zIHx8IHRoaXMuX2xvdkl0ZW1zLmxlbmd0aCA8PSAwIHx8IGFjdGl2ZUluZGV4IDwgMCB8fCAhdGhpcy5kcm9wRG93bkxpc3QpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYWN0aXZlSXRlbSA9IHRoaXMuX2xvdkl0ZW1zW2FjdGl2ZUluZGV4XS5uYXRpdmVFbGVtZW50ID8gdGhpcy5fbG92SXRlbXNbYWN0aXZlSW5kZXhdLm5hdGl2ZUVsZW1lbnQgOiB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCBzY3JvbGxQYXJlbnQgPSB0aGlzLmRyb3BEb3duTGlzdC5uYXRpdmVFbGVtZW50ID8gdGhpcy5kcm9wRG93bkxpc3QubmF0aXZlRWxlbWVudCA6IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuX3Njcm9sbEFjdGl2ZUl0ZW1JbnRvVmlldyhhY3RpdmVJdGVtLCBzY3JvbGxQYXJlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsQWN0aXZlSXRlbUludG9WaWV3KGFjdGl2ZUl0ZW06IGFueSwgc2Nyb2xsUGFyZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICghYWN0aXZlSXRlbSB8fCAhc2Nyb2xsUGFyZW50KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCB7b2Zmc2V0SGVpZ2h0LCBvZmZzZXRUb3B9ID0gYWN0aXZlSXRlbTtcclxuICAgIGxldCB7b2Zmc2V0SGVpZ2h0OiBwYXJlbnRPZmZzZXRIZWlnaHQsIHNjcm9sbFRvcCwgb2Zmc2V0VG9wOiBwYXJlbnRPZmZzZXRUb3B9ID0gc2Nyb2xsUGFyZW50O1xyXG4gICAgb2Zmc2V0VG9wID0gb2Zmc2V0VG9wIC0gcGFyZW50T2Zmc2V0VG9wO1xyXG5cclxuICAgIGNvbnN0IGlzQWJvdmUgPSBvZmZzZXRUb3AgPCBzY3JvbGxUb3A7XHJcbiAgICBjb25zdCBpc0JlbG93ID0gb2Zmc2V0VG9wICsgb2Zmc2V0SGVpZ2h0ID4gc2Nyb2xsVG9wICsgcGFyZW50T2Zmc2V0SGVpZ2h0O1xyXG5cclxuICAgIGlmIChpc0Fib3ZlKSB7XHJcbiAgICAgIHNjcm9sbFBhcmVudC5zY3JvbGxUbygwLCBvZmZzZXRUb3ApO1xyXG4gICAgfSBlbHNlIGlmIChpc0JlbG93KSB7XHJcbiAgICAgIHNjcm9sbFBhcmVudC5zY3JvbGxUbygwLCBvZmZzZXRUb3AgLSBwYXJlbnRPZmZzZXRIZWlnaHQgKyBvZmZzZXRIZWlnaHQpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
286
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1vZi12YWx1ZXMtcG9wdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2xpc3Qtb2YtdmFsdWVzL2xpc3Qtb2YtdmFsdWVzLXBvcHVwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUNULFlBQVksRUFDWixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFDNUUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQzlELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBK0M1RCxNQUFNLE9BQU8sMEJBQTBCO0lBMEZyQyxZQUNTLGdCQUFtQyxFQUNsQyxXQUF1QjtRQUR4QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW1CO1FBQ2xDLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBeEUxQixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUc3QixrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUcvQixpQkFBWSxHQUFXLGFBQWEsQ0FBQztRQVNyQyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQXFCaEMsZ0JBQVcsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUd6RCxlQUFVLEdBQXdCLElBQUksWUFBWSxFQUFTLENBQUM7UUFHNUQsWUFBTyxHQUFnQyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQWtCekUsZUFBVSxHQUFtQixFQUFFLENBQUM7UUFDaEMsbUJBQWMsR0FBbUIsRUFBRSxDQUFDO1FBRXBDLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBRTVC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QkFHTCxLQUFLOzBCQVlMLE1BQU07eUJBR04sTUFBTTtzQkFHTixNQUFNO3dCQUdOLFdBQVcsU0FBQywrQkFBK0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0QmluZGluZyxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q2hpbGRyZW4sXHJcbiAgVmlld0VuY2Fwc3VsYXRpb25cclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtJbnB1dFNlYXJjaENvbXBvbmVudH0gZnJvbSAnLi4vaW5wdXQtc2VhcmNoL2lucHV0LXNlYXJjaC5jb21wb25lbnQnO1xyXG5pbXBvcnQge0tleWJvYXJkS2V5fSBmcm9tICcuLi8uLi9jb3JlL2VudW0va2V5Ym9hcmQta2V5LmVudW0nO1xyXG5pbXBvcnQge0ljb25DYWNoZVNlcnZpY2V9IGZyb20gJy4uL2ljb24vaWNvbi1jYWNoZS5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgbG92Vmlld01vZGVsIHtcclxuICBjaGVja2VkOiBib29sZWFuXHJcbiAgbW9kZWw6IGFueVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NvLWxpc3Qtb2YtdmFsdWVzLXBvcHVwJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgICA8ZGl2IGNsYXNzPVwibG92LW9wdGlvbnNcIiBbb3ZlcmxheV09XCJwYXJlbnRGb3JPdmVybGF5XCIgW2luaGVyaXRXaWR0aF09XCJ0cnVlXCIgW25nQ2xhc3NdPVwiY3VzdG9tQ3NzQ2xhc3NcIlxyXG4gICAgICAgICAgIGlkPVwibG92LXBvcHVwXCJcclxuICAgICAgICAgICByb2xlPVwibGlzdGJveFwiIFt0YWJpbmRleF09XCItMVwiXHJcbiAgICAgICAgICAgKGNsaWNrT3V0c2lkZSk9XCJjbG9zZVBvcHVwLmVtaXQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgPGNvLWlucHV0LXNlYXJjaCAqbmdJZj1cIm11bHRpc2VsZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobW9kZWwpXT1cInNlYXJjaFRlcm1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VhcmNoUGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVJbnB1dEtleURvd24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJmaWx0ZXJWaWV3TW9kZWxzKClcIj48L2NvLWlucHV0LXNlYXJjaD5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZ2FwXCIgKm5nSWY9XCJzaG93VG9nZ2xlQWxsICYmIG11bHRpc2VsZWN0XCI+XHJcbiAgICAgICAgICAgICAgPGNvLWlucHV0LWNoZWNrYm94IFttb2RlbF09XCJhbGxTZWxlY3RlZFwiIChtb2RlbENoYW5nZSk9XCJ0b2dnbGVBbGwoKVwiPjwvY28taW5wdXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgPHNwYW4gW3RleHRDb250ZW50XT1cIidERVNFTEVDVF9BTEwnIHwgY29yZUxvY2FsaXplXCIgKGNsaWNrKT1cInRvZ2dsZUFsbCgpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8dWwgY2xhc3M9XCJkcm9wZG93bi1saXN0XCIgI2Ryb3BEb3duTGlzdD5cclxuICAgICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAgICAgICAgICNsb3ZJdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgdmlld01vZGVsIG9mIHZpZXdNb2RlbHM7IGxldCBpbmRleCA9IGluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJ2aWV3TW9kZWwgPT09IGhpZ2hMaWdodE1vZGVsIHx8IHZpZXdNb2RlbHMubGVuZ3RoID09PSAxXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RWaWV3TW9kZWwodmlld01vZGVsLCAhbXVsdGlzZWxlY3QpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJvcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFtdWx0aXNlbGVjdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGNvLWljb24gKm5nSWY9XCJ2aWV3TW9kZWwubW9kZWxbb3B0aW9uSWNvbl1cIiBjbGFzcz1cImlucHV0LXRleHQtbGVmdC1pY29uXCIgW2ljb25EYXRhXT1cImljb25DYWNoZVNlcnZpY2UuZ2V0SWNvbih2aWV3TW9kZWwubW9kZWxbb3B0aW9uSWNvbl0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2NvLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxvdi1vcHRpb25zLXRleHRcIiBbdGV4dENvbnRlbnRdPVwidmlld01vZGVsLm1vZGVsW2Rpc3BsYXlGaWVsZF1cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibXVsdGlzZWxlY3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxjby1pbnB1dC1jaGVja2JveCBbbW9kZWxdPVwidmlld01vZGVsLmNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJzZWxlY3RWaWV3TW9kZWwodmlld01vZGVsLCBmYWxzZSlcIj48L2NvLWlucHV0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsb3Ytb3B0aW9ucy10ZXh0XCIgW3RleHRDb250ZW50XT1cInZpZXdNb2RlbC5tb2RlbFtkaXNwbGF5RmllbGRdXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPC91bD5cclxuICAgICAgPC9kaXY+XHJcbiAgYCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTGlzdE9mVmFsdWVzUG9wdXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBWaWV3Q2hpbGRyZW4oJ2xvdkl0ZW0nLCB7cmVhZDogRWxlbWVudFJlZn0pIHNldCBsb3ZJdGVtcyhjaGlsZHJlbikge1xyXG4gICAgdGhpcy5fbG92SXRlbXMgPSBjaGlsZHJlbi50b0FycmF5KCk7XHJcbiAgICB0aGlzLl9zY3JvbGxJbnRvVmlldygpO1xyXG4gIH1cclxuXHJcbiAgQFZpZXdDaGlsZCgnZHJvcERvd25MaXN0Jywge3JlYWQ6IEVsZW1lbnRSZWZ9KVxyXG4gIHB1YmxpYyBkcm9wRG93bkxpc3Q6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBWaWV3Q2hpbGQoSW5wdXRTZWFyY2hDb21wb25lbnQpIHNldCBpbnB1dFNlYXJjaChjb21wb25lbnQ6IElucHV0U2VhcmNoQ29tcG9uZW50KSB7XHJcbiAgICB0aGlzLl9zZWFyY2hJbnB1dCA9IGNvbXBvbmVudDtcclxuICAgIGlmICh0aGlzLl9zZWFyY2hJbnB1dCkge1xyXG4gICAgICB0aGlzLl9zZWFyY2hJbnB1dC5yZXF1ZXN0Rm9jdXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIG1vZGVsOiBhbnk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIG11bHRpc2VsZWN0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNob3dUb2dnbGVBbGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZGlzcGxheUZpZWxkOiBzdHJpbmcgPSAnZGVzY3JpcHRpb24nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZWFyY2hQbGFjZWhvbGRlcjogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBjdXN0b21Dc3NDbGFzczogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZWFyY2hEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBwYXJlbnRGb3JPdmVybGF5OiBFbGVtZW50UmVmO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBvcHRpb25JY29uOiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBjb2xsZWN0aW9uKHZhbHVlOiBhbnlbXSkge1xyXG4gICAgdGhpcy5fY29sbGVjdGlvbiA9IHZhbHVlIHx8IFtdO1xyXG4gICAgdGhpcy5fcHJlcGFyZVZpZXdNb2RlbHNNYWluKCk7XHJcbiAgICB0aGlzLl9wcmVwYXJlVmlld01vZGVscygpO1xyXG4gICAgdGhpcy5maWx0ZXJWaWV3TW9kZWxzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNvbGxlY3Rpb24oKTogYW55W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbGxlY3Rpb247XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgbW9kZWxDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBjbG9zZVBvcHVwOiBFdmVudEVtaXR0ZXI8RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIGtleURvd246IEV2ZW50RW1pdHRlcjxLZXlib2FyZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8S2V5Ym9hcmRFdmVudD4oKTtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5jby1saXN0LW9mLXZhbHVlcy1wb3B1cCcpXHJcbiAgcHVibGljIHNob3dDbGFzcygpIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBzZWFyY2hUZXJtKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3NlYXJjaFRlcm0gPSB2YWx1ZTtcclxuICAgIHRoaXMubW9kZWwgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmhpZ2hMaWdodE1vZGVsID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5maWx0ZXJWaWV3TW9kZWxzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHNlYXJjaFRlcm0oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWFyY2hUZXJtO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHZpZXdNb2RlbHM6IGxvdlZpZXdNb2RlbFtdID0gW107XHJcbiAgcHVibGljIHZpZXdNb2RlbHNNYWluOiBsb3ZWaWV3TW9kZWxbXSA9IFtdO1xyXG4gIHB1YmxpYyBoaWdoTGlnaHRNb2RlbDogbG92Vmlld01vZGVsO1xyXG4gIHB1YmxpYyBhbGxTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIF9jb2xsZWN0aW9uOiBhbnlbXSA9IFtdO1xyXG4gIHByaXZhdGUgX3NlYXJjaFRlcm06IHN0cmluZyA9ICcnO1xyXG4gIHByaXZhdGUgX2xvdkl0ZW1zOiBFbGVtZW50UmVmW10gPSBbXTtcclxuICBwcml2YXRlIF9zZWFyY2hJbnB1dDogSW5wdXRTZWFyY2hDb21wb25lbnQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGljb25DYWNoZVNlcnZpY2UgOiBJY29uQ2FjaGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZlxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5tb2RlbCkge1xyXG4gICAgICBpZiAoIXRoaXMubXVsdGlzZWxlY3QpIHtcclxuICAgICAgICB0aGlzLl9zY3JvbGxJbnRvVmlldygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5tb2RlbC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3Qgdmlld01vZGVsOiBsb3ZWaWV3TW9kZWwgPSB0aGlzLnZpZXdNb2RlbHNNYWluLmZpbmQodiA9PiBKU09OLnN0cmluZ2lmeSh2Lm1vZGVsKSA9PT0gSlNPTi5zdHJpbmdpZnkodGhpcy5tb2RlbFtpXSkpO1xyXG4gICAgICAgICAgaWYgKHZpZXdNb2RlbCkge1xyXG4gICAgICAgICAgICB2aWV3TW9kZWwuY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlSW5wdXRLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgc3dpdGNoIChldmVudC5jb2RlKSB7XHJcbiAgICAgICAgY2FzZSBLZXlib2FyZEtleS5Eb3duOlxyXG4gICAgICAgICAgdGhpcy5zZWxlY3ROZXh0T3B0aW9uKCk7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgY2FzZSBLZXlib2FyZEtleS5VcDpcclxuICAgICAgICAgIHRoaXMuc2VsZWN0TmV4dE9wdGlvbih0cnVlKTtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICBjYXNlIEtleWJvYXJkS2V5LkVudGVyOlxyXG4gICAgICAgICAgaWYgKHRoaXMuaGlnaExpZ2h0TW9kZWwpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RWaWV3TW9kZWwodGhpcy5oaWdoTGlnaHRNb2RlbCwgZmFsc2UpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5rZXlEb3duLm5leHQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgdGhpcy5rZXlEb3duLm5leHQoZXZlbnQpO1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBmaWx0ZXJWaWV3TW9kZWxzKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmNvbGxlY3Rpb24pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fcHJlcGFyZVZpZXdNb2RlbHMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RWaWV3TW9kZWwodmlld01vZGVsOiBsb3ZWaWV3TW9kZWwsIGNsb3NlUG9wdXA6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMubXVsdGlzZWxlY3QpIHtcclxuICAgICAgdGhpcy5zZWxlY3RNb2RlbEJ5Vmlld01vZGVsKHZpZXdNb2RlbCwgY2xvc2VQb3B1cCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBpZHg6IG51bWJlciA9IHRoaXMudmlld01vZGVscy5maW5kSW5kZXgodm0gPT4gdm0gPT09IHZpZXdNb2RlbCk7XHJcbiAgICAgIHRoaXMudmlld01vZGVsc1tpZHhdLmNoZWNrZWQgPSAhdGhpcy52aWV3TW9kZWxzW2lkeF0uY2hlY2tlZDtcclxuICAgICAgdGhpcy5zZWxlY3RPcHRpb25zKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VsZWN0TW9kZWxCeVZpZXdNb2RlbCh2aWV3TW9kZWw6IGxvdlZpZXdNb2RlbCwgY2xvc2VQb3B1cDogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcclxuICAgIHRoaXMubW9kZWwgPSB0aGlzLnZpZXdNb2RlbHNNYWluLmZpbmQodm0gPT4gdm0gPT09IHZpZXdNb2RlbCkubW9kZWw7XHJcbiAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodGhpcy5tb2RlbCk7XHJcbiAgICB0aGlzLl9zY3JvbGxJbnRvVmlldygpO1xyXG4gICAgaWYgKGNsb3NlUG9wdXApIHtcclxuICAgICAgdGhpcy5jbG9zZVBvcHVwLmVtaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGZvciBzaW5nbGUgc2VsZWN0XHJcbiAgcHVibGljIHNlbGVjdE9wdGlvbkFuZENsb3NlUG9wdXAoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy52aWV3TW9kZWxzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICB0aGlzLnNlbGVjdE5leHRPcHRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMubW9kZWwgJiYgdGhpcy5zZWFyY2hUZXJtKSB7XHJcbiAgICAgIGNvbnN0IHdpc2hNb2RlbDogbG92Vmlld01vZGVsID0gdGhpcy52aWV3TW9kZWxzTWFpbi5maW5kKHZtbSA9PiB2bW0ubW9kZWxbdGhpcy5kaXNwbGF5RmllbGRdID09PSB0aGlzLnNlYXJjaFRlcm0pO1xyXG4gICAgICBpZiAod2lzaE1vZGVsKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RWaWV3TW9kZWwod2lzaE1vZGVsKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLm1vZGVsID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh0aGlzLm1vZGVsKTtcclxuICAgICAgICB0aGlzLnNlYXJjaFRlcm0gPSAnJztcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jbG9zZVBvcHVwLmVtaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGZvciBtdWx0aSBzZWxlY3RcclxuICBwdWJsaWMgc2VsZWN0T3B0aW9ucygpOiB2b2lkIHtcclxuICAgIHRoaXMubW9kZWwgPSB0aGlzLnZpZXdNb2RlbHNNYWluLmZpbHRlcih2ID0+IHYuY2hlY2tlZCkubWFwKG0gPT4gbS5tb2RlbCk7XHJcbiAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodGhpcy5tb2RlbCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VsZWN0TmV4dE9wdGlvbihiYWNrOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgIGxldCBuZXh0TW9kZWw6IGFueTtcclxuICAgIGlmICghdGhpcy5oaWdoTGlnaHRNb2RlbCkge1xyXG4gICAgICBuZXh0TW9kZWwgPSB0aGlzLnZpZXdNb2RlbHNbYmFjayA/IHRoaXMudmlld01vZGVscy5sZW5ndGggLSAxIDogMF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBjdXJyZW50Vmlld01vZGVsSWR4OiBudW1iZXIgPSB0aGlzLnZpZXdNb2RlbHMuZmluZEluZGV4KHZtID0+IHZtID09PSB0aGlzLmhpZ2hMaWdodE1vZGVsKTtcclxuICAgICAgaWYgKGJhY2spIHtcclxuICAgICAgICBuZXh0TW9kZWwgPSB0aGlzLnZpZXdNb2RlbHNbY3VycmVudFZpZXdNb2RlbElkeCA8PSAwID8gdGhpcy52aWV3TW9kZWxzLmxlbmd0aCAtIDEgOiBjdXJyZW50Vmlld01vZGVsSWR4IC0gMV07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbmV4dE1vZGVsID0gdGhpcy52aWV3TW9kZWxzW2N1cnJlbnRWaWV3TW9kZWxJZHggPj0gdGhpcy52aWV3TW9kZWxzLmxlbmd0aCAtIDEgPyAwIDogY3VycmVudFZpZXdNb2RlbElkeCArIDFdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmhpZ2hMaWdodE1vZGVsID0gbmV4dE1vZGVsO1xyXG4gICAgaWYgKCF0aGlzLm11bHRpc2VsZWN0KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0Vmlld01vZGVsKG5leHRNb2RlbCwgZmFsc2UpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fc2Nyb2xsSW50b1ZpZXcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RBbGwoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy52aWV3TW9kZWxzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy52aWV3TW9kZWxzLmZvckVhY2godm0gPT4gdm0uY2hlY2tlZCA9IHRydWUpO1xyXG4gICAgICB0aGlzLnNlbGVjdE9wdGlvbnMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b2dnbGVBbGwoKTogdm9pZCB7XHJcbiAgICBpZighdGhpcy5hbGxTZWxlY3RlZCkge1xyXG4gICAgICBpZiAodGhpcy52aWV3TW9kZWxzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLnZpZXdNb2RlbHMuZm9yRWFjaCh2bSA9PiB2bS5jaGVja2VkID0gdHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RPcHRpb25zKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLnZpZXdNb2RlbHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMudmlld01vZGVscy5mb3JFYWNoKHZtID0+IHZtLmNoZWNrZWQgPSBmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RPcHRpb25zKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFsbFNlbGVjdGVkID0gIXRoaXMuYWxsU2VsZWN0ZWQ7XHJcblxyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByZXBhcmVWaWV3TW9kZWxzTWFpbigpOiB2b2lkIHtcclxuICAgIHRoaXMudmlld01vZGVsc01haW4ubGVuZ3RoID0gMDtcclxuICAgIHRoaXMuY29sbGVjdGlvbi5mb3JFYWNoKG0gPT4ge1xyXG4gICAgICB0aGlzLnZpZXdNb2RlbHNNYWluLnB1c2goe2NoZWNrZWQ6IGZhbHNlLCBtb2RlbDogbX0pO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByZXBhcmVWaWV3TW9kZWxzKCk6IHZvaWQge1xyXG4gICAgdGhpcy52aWV3TW9kZWxzLmxlbmd0aCA9IDA7XHJcbiAgICB0aGlzLnZpZXdNb2RlbHMgPSB0aGlzLnZpZXdNb2RlbHNNYWluLmZpbHRlcihcclxuICAgICAgdm0gPT4gdm0ubW9kZWxbdGhpcy5kaXNwbGF5RmllbGRdICYmIHZtLm1vZGVsW3RoaXMuZGlzcGxheUZpZWxkXS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc2VhcmNoVGVybSA/IHRoaXMuc2VhcmNoVGVybS50b0xvd2VyQ2FzZSgpIDogXCJcIikpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zY3JvbGxJbnRvVmlldygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGFjdGl2ZUluZGV4OiBudW1iZXIgPSB0aGlzLnZpZXdNb2RlbHMuZmluZEluZGV4KHZtbSA9PiB2bW0gPT09IHRoaXMuaGlnaExpZ2h0TW9kZWwpO1xyXG4gICAgaWYgKCF0aGlzLl9sb3ZJdGVtcyB8fCB0aGlzLl9sb3ZJdGVtcy5sZW5ndGggPD0gMCB8fCBhY3RpdmVJbmRleCA8IDAgfHwgIXRoaXMuZHJvcERvd25MaXN0KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGFjdGl2ZUl0ZW0gPSB0aGlzLl9sb3ZJdGVtc1thY3RpdmVJbmRleF0ubmF0aXZlRWxlbWVudCA/IHRoaXMuX2xvdkl0ZW1zW2FjdGl2ZUluZGV4XS5uYXRpdmVFbGVtZW50IDogdW5kZWZpbmVkO1xyXG4gICAgY29uc3Qgc2Nyb2xsUGFyZW50ID0gdGhpcy5kcm9wRG93bkxpc3QubmF0aXZlRWxlbWVudCA/IHRoaXMuZHJvcERvd25MaXN0Lm5hdGl2ZUVsZW1lbnQgOiB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLl9zY3JvbGxBY3RpdmVJdGVtSW50b1ZpZXcoYWN0aXZlSXRlbSwgc2Nyb2xsUGFyZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbEFjdGl2ZUl0ZW1JbnRvVmlldyhhY3RpdmVJdGVtOiBhbnksIHNjcm9sbFBhcmVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoIWFjdGl2ZUl0ZW0gfHwgIXNjcm9sbFBhcmVudCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQge29mZnNldEhlaWdodCwgb2Zmc2V0VG9wfSA9IGFjdGl2ZUl0ZW07XHJcbiAgICBsZXQge29mZnNldEhlaWdodDogcGFyZW50T2Zmc2V0SGVpZ2h0LCBzY3JvbGxUb3AsIG9mZnNldFRvcDogcGFyZW50T2Zmc2V0VG9wfSA9IHNjcm9sbFBhcmVudDtcclxuICAgIG9mZnNldFRvcCA9IG9mZnNldFRvcCAtIHBhcmVudE9mZnNldFRvcDtcclxuXHJcbiAgICBjb25zdCBpc0Fib3ZlID0gb2Zmc2V0VG9wIDwgc2Nyb2xsVG9wO1xyXG4gICAgY29uc3QgaXNCZWxvdyA9IG9mZnNldFRvcCArIG9mZnNldEhlaWdodCA+IHNjcm9sbFRvcCArIHBhcmVudE9mZnNldEhlaWdodDtcclxuXHJcbiAgICBpZiAoaXNBYm92ZSkge1xyXG4gICAgICBzY3JvbGxQYXJlbnQuc2Nyb2xsVG8oMCwgb2Zmc2V0VG9wKTtcclxuICAgIH0gZWxzZSBpZiAoaXNCZWxvdykge1xyXG4gICAgICBzY3JvbGxQYXJlbnQuc2Nyb2xsVG8oMCwgb2Zmc2V0VG9wIC0gcGFyZW50T2Zmc2V0SGVpZ2h0ICsgb2Zmc2V0SGVpZ2h0KTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19