myrta-ui 17.1.72 → 17.1.75

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.
@@ -17,7 +17,6 @@ export class AlertComponent {
17
17
  return `${AlertIconClasses[this.color]}`;
18
18
  }
19
19
  onCloseClick() {
20
- console.log(1);
21
20
  this.close.emit(null);
22
21
  }
23
22
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AlertComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
@@ -43,4 +42,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
43
42
  }], close: [{
44
43
  type: Output
45
44
  }] } });
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGEtdWkvc3JjL2xpYi9jb21wb25lbnRzL2FsZXJ0L2FsZXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRhLXVpL3NyYy9saWIvY29tcG9uZW50cy9hbGVydC9hbGVydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxpQkFBaUIsRUFBZSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFRaEYsTUFBTSxPQUFPLGNBQWM7SUFDaEIsYUFBYSxHQUFXLEVBQUUsQ0FBQztJQUMzQixLQUFLLEdBQWdCLFNBQVMsQ0FBQztJQUMvQixXQUFXLEdBQVcsRUFBRSxDQUFDO0lBQ3pCLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDYixLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ1gsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBRWhCLEtBQUssR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUU1RCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3hFLENBQUM7SUFFRCxJQUFXLFlBQVk7UUFDckIsT0FBTyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFTSxZQUFZO1FBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QixDQUFDO3dHQXRCVSxjQUFjOzRGQUFkLGNBQWMsc1BDVDNCLDRyQkFtQkE7OzRGRFZhLGNBQWM7a0JBTjFCLFNBQVM7K0JBQ0UsV0FBVyxtQkFHSix1QkFBdUIsQ0FBQyxNQUFNOzhCQUd0QyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVJLEtBQUs7c0JBQWQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBbGVydENvbG9yQ2xhc3NlcywgQWxlcnRDb2xvcnMsIEFsZXJ0SWNvbkNsYXNzZXMgfSBmcm9tICcuL2FsZXJ0LmVudW0nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdtcngtYWxlcnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnYWxlcnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2FsZXJ0LmNvbXBvbmVudC5sZXNzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBbGVydENvbXBvbmVudCB7XHJcbiAgQElucHV0KCkgY3VzdG9tQ2xhc3Nlczogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgY29sb3I6IEFsZXJ0Q29sb3JzID0gJ2RlZmF1bHQnO1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNvbG9yOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBtZXNzYWdlID0gJyc7XHJcbiAgQElucHV0KCkgdGl0bGUgPSAnJztcclxuICBASW5wdXQoKSBjbG9zYWJsZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNob3dJY29uID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKSBjbG9zZTogRXZlbnRFbWl0dGVyPHVua25vd24+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBwdWJsaWMgZ2V0IGdldENsYXNzZXMoKSB7XHJcbiAgICByZXR1cm4gYCR7QWxlcnRDb2xvckNsYXNzZXNbdGhpcy5jb2xvcl0gPz8gJyd9ICR7dGhpcy5jdXN0b21DbGFzc2VzfWA7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGdldEljb25DbGFzcygpIHtcclxuICAgIHJldHVybiBgJHtBbGVydEljb25DbGFzc2VzW3RoaXMuY29sb3JdfWA7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DbG9zZUNsaWNrKCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coMSlcclxuICAgIHRoaXMuY2xvc2UuZW1pdChudWxsKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cIm1yeC1hbGVydFwiIFtjbGFzc109XCJnZXRDbGFzc2VzXCIgW3N0eWxlXT1cIntiYWNrZ3JvdW5kQ29sb3I6IGN1c3RvbUNvbG9yfVwiPlxyXG4gIEBpZiAoY2xvc2FibGUpIHtcclxuICAgIDxzcGFuIGNsYXNzPVwibXJ4LWljb24gaWNvbi1jbG9zZSBpY29uLWZvbnQtMTZcIiAoY2xpY2spPVwib25DbG9zZUNsaWNrKClcIj48L3NwYW4+XHJcbiAgfVxyXG5cclxuICBAaWYgKHRpdGxlIHx8IG1lc3NhZ2UgfHwgc2hvd0ljb24pIHtcclxuICAgIDxzcGFuIFtjbGFzc109XCJnZXRJY29uQ2xhc3NcIiBzdHlsZT1cIm1hcmdpbi10b3A6IDFweFwiIGNsYXNzPVwibXJ4LWljb24gaWNvbi1hbGVydCBpY29uLWZvbnQtMTYgbXItMlwiPjwvc3Bhbj5cclxuICB9XHJcblxyXG4gIEBpZiAodGl0bGUpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJtcngtYWxlcnQtdGl0bGUgbWItMVwiIFtjbGFzcy5tbC00XT1cImdldEljb25DbGFzc1wiIFtpbm5lckhUTUxdPVwidGl0bGVcIj48L2Rpdj5cclxuICB9XHJcblxyXG4gIEBpZiAobWVzc2FnZSkge1xyXG4gICAgPGRpdiBjbGFzcz1cIm1yeC1hbGVydC1tZXNzYWdlXCIgW2NsYXNzLm1sLTRdPVwiZ2V0SWNvbkNsYXNzXCIgW2lubmVySFRNTF09XCJtZXNzYWdlXCI+PC9kaXY+XHJcbiAgfVxyXG5cclxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbjwvZGl2PlxyXG4iXX0=
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGEtdWkvc3JjL2xpYi9jb21wb25lbnRzL2FsZXJ0L2FsZXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRhLXVpL3NyYy9saWIvY29tcG9uZW50cy9hbGVydC9hbGVydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxpQkFBaUIsRUFBZSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFRaEYsTUFBTSxPQUFPLGNBQWM7SUFDaEIsYUFBYSxHQUFXLEVBQUUsQ0FBQztJQUMzQixLQUFLLEdBQWdCLFNBQVMsQ0FBQztJQUMvQixXQUFXLEdBQVcsRUFBRSxDQUFDO0lBQ3pCLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDYixLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ1gsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBRWhCLEtBQUssR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUU1RCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3hFLENBQUM7SUFFRCxJQUFXLFlBQVk7UUFDckIsT0FBTyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFTSxZQUFZO1FBQ2pCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLENBQUM7d0dBckJVLGNBQWM7NEZBQWQsY0FBYyxzUENUM0IsNHJCQW1CQTs7NEZEVmEsY0FBYztrQkFOMUIsU0FBUzsrQkFDRSxXQUFXLG1CQUdKLHVCQUF1QixDQUFDLE1BQU07OEJBR3RDLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUksS0FBSztzQkFBZCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFsZXJ0Q29sb3JDbGFzc2VzLCBBbGVydENvbG9ycywgQWxlcnRJY29uQ2xhc3NlcyB9IGZyb20gJy4vYWxlcnQuZW51bSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ21yeC1hbGVydCcsXHJcbiAgdGVtcGxhdGVVcmw6ICdhbGVydC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYWxlcnQuY29tcG9uZW50Lmxlc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFsZXJ0Q29tcG9uZW50IHtcclxuICBASW5wdXQoKSBjdXN0b21DbGFzc2VzOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBjb2xvcjogQWxlcnRDb2xvcnMgPSAnZGVmYXVsdCc7XHJcbiAgQElucHV0KCkgY3VzdG9tQ29sb3I6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIG1lc3NhZ2UgPSAnJztcclxuICBASW5wdXQoKSB0aXRsZSA9ICcnO1xyXG4gIEBJbnB1dCgpIGNsb3NhYmxlID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd0ljb24gPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIGNsb3NlOiBFdmVudEVtaXR0ZXI8dW5rbm93bj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHB1YmxpYyBnZXQgZ2V0Q2xhc3NlcygpIHtcclxuICAgIHJldHVybiBgJHtBbGVydENvbG9yQ2xhc3Nlc1t0aGlzLmNvbG9yXSA/PyAnJ30gJHt0aGlzLmN1c3RvbUNsYXNzZXN9YDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZ2V0SWNvbkNsYXNzKCkge1xyXG4gICAgcmV0dXJuIGAke0FsZXJ0SWNvbkNsYXNzZXNbdGhpcy5jb2xvcl19YDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNsb3NlQ2xpY2soKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsb3NlLmVtaXQobnVsbCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJtcngtYWxlcnRcIiBbY2xhc3NdPVwiZ2V0Q2xhc3Nlc1wiIFtzdHlsZV09XCJ7YmFja2dyb3VuZENvbG9yOiBjdXN0b21Db2xvcn1cIj5cclxuICBAaWYgKGNsb3NhYmxlKSB7XHJcbiAgICA8c3BhbiBjbGFzcz1cIm1yeC1pY29uIGljb24tY2xvc2UgaWNvbi1mb250LTE2XCIgKGNsaWNrKT1cIm9uQ2xvc2VDbGljaygpXCI+PC9zcGFuPlxyXG4gIH1cclxuXHJcbiAgQGlmICh0aXRsZSB8fCBtZXNzYWdlIHx8IHNob3dJY29uKSB7XHJcbiAgICA8c3BhbiBbY2xhc3NdPVwiZ2V0SWNvbkNsYXNzXCIgc3R5bGU9XCJtYXJnaW4tdG9wOiAxcHhcIiBjbGFzcz1cIm1yeC1pY29uIGljb24tYWxlcnQgaWNvbi1mb250LTE2IG1yLTJcIj48L3NwYW4+XHJcbiAgfVxyXG5cclxuICBAaWYgKHRpdGxlKSB7XHJcbiAgICA8ZGl2IGNsYXNzPVwibXJ4LWFsZXJ0LXRpdGxlIG1iLTFcIiBbY2xhc3MubWwtNF09XCJnZXRJY29uQ2xhc3NcIiBbaW5uZXJIVE1MXT1cInRpdGxlXCI+PC9kaXY+XHJcbiAgfVxyXG5cclxuICBAaWYgKG1lc3NhZ2UpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJtcngtYWxlcnQtbWVzc2FnZVwiIFtjbGFzcy5tbC00XT1cImdldEljb25DbGFzc1wiIFtpbm5lckhUTUxdPVwibWVzc2FnZVwiPjwvZGl2PlxyXG4gIH1cclxuXHJcbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG48L2Rpdj5cclxuIl19
@@ -36,44 +36,68 @@ export class PaginatorComponent {
36
36
  .fill(1)
37
37
  .map((item, index) => ({ index: index + 1, active: index + 1 === this.currentPage }));
38
38
  }
39
+ // TO DO: пока оставлю для тестов
40
+ // public get getViewItems(): PaginatorItem[] {
41
+ // return this.getNumbers.filter((item, index) => {
42
+ // if (this.currentPage === 1 && this.currentPage < this.getItems) {
43
+ // return item.index === this.currentPage ||
44
+ // item.index === this.currentPage + 1 ||
45
+ // item.index === this.currentPage + 2 ||
46
+ // item.index === this.currentPage + 3 ||
47
+ // item.index === this.currentPage + 4;
48
+ // } else if (this.currentPage == 2 && this.currentPage < this.getItems) {
49
+ // return item.index === this.currentPage - 1 ||
50
+ // item.index === this.currentPage ||
51
+ // item.index === this.currentPage + 1 ||
52
+ // item.index === this.currentPage + 2 ||
53
+ // item.index === this.currentPage + 3;
54
+ // } else if (this.currentPage == this.getItems - 1 && this.currentPage < this.getItems) {
55
+ // return item.index === this.currentPage - 3 ||
56
+ // item.index === this.currentPage - 2 ||
57
+ // item.index === this.currentPage - 1 ||
58
+ // item.index === this.currentPage ||
59
+ // item.index === this.currentPage + 1;
60
+ // } else if (this.currentPage > 1 && this.currentPage < this.getItems) {
61
+ // return item.index === this.currentPage - 2 ||
62
+ // item.index === this.currentPage - 1 ||
63
+ // item.index === this.currentPage ||
64
+ // item.index === this.currentPage + 1 ||
65
+ // item.index === this.currentPage + 2;
66
+ // } else {
67
+ // return item.index === this.currentPage - 4 ||
68
+ // item.index === this.currentPage - 3 ||
69
+ // item.index === this.currentPage - 2 ||
70
+ // item.index === this.currentPage - 1 ||
71
+ // item.index === this.currentPage;
72
+ // }
73
+ // });
74
+ // }
75
+ // Упрощенная версия getViewItems()
39
76
  get getViewItems() {
40
- return this.getNumbers.filter((item, index) => {
41
- if (this.currentPage === 1 && this.currentPage < this.getItems) {
42
- return item.index === this.currentPage ||
43
- item.index === this.currentPage + 1 ||
44
- item.index === this.currentPage + 2 ||
45
- item.index === this.currentPage + 3 ||
46
- item.index === this.currentPage + 4;
47
- }
48
- else if (this.currentPage == 2 && this.currentPage < this.getItems) {
49
- return item.index === this.currentPage - 1 ||
50
- item.index === this.currentPage ||
51
- item.index === this.currentPage + 1 ||
52
- item.index === this.currentPage + 2 ||
53
- item.index === this.currentPage + 3;
54
- }
55
- else if (this.currentPage == this.getItems - 1 && this.currentPage < this.getItems) {
56
- return item.index === this.currentPage - 3 ||
57
- item.index === this.currentPage - 2 ||
58
- item.index === this.currentPage - 1 ||
59
- item.index === this.currentPage ||
60
- item.index === this.currentPage + 1;
61
- }
62
- else if (this.currentPage > 1 && this.currentPage < this.getItems) {
63
- return item.index === this.currentPage - 2 ||
64
- item.index === this.currentPage - 1 ||
65
- item.index === this.currentPage ||
66
- item.index === this.currentPage + 1 ||
67
- item.index === this.currentPage + 2;
68
- }
69
- else {
70
- return item.index === this.currentPage - 4 ||
71
- item.index === this.currentPage - 3 ||
72
- item.index === this.currentPage - 2 ||
73
- item.index === this.currentPage - 1 ||
74
- item.index === this.currentPage;
75
- }
76
- });
77
+ const totalPages = this.getItems;
78
+ const current = this.currentPage;
79
+ const delta = 2; // количество страниц по бокам от текущей
80
+ const range = [];
81
+ for (let i = Math.max(2, current - delta); i <= Math.min(totalPages - 1, current + delta); i++) {
82
+ range.push(i);
83
+ }
84
+ // Добавляем первую страницу
85
+ if (current - delta > 1) {
86
+ range.unshift('...');
87
+ }
88
+ range.unshift(1);
89
+ // Добавляем последнюю страницу
90
+ if (current + delta < totalPages - 1) {
91
+ range.push('...');
92
+ }
93
+ if (totalPages > 1) {
94
+ range.push(totalPages);
95
+ }
96
+ return range.map((item, index) => ({
97
+ index: typeof item === 'number' ? item : index,
98
+ active: item === current,
99
+ isEllipsis: item === '...'
100
+ }));
77
101
  }
78
102
  get getFirstNumberCurrentPage() {
79
103
  if (this.total === 0) {
@@ -100,6 +124,7 @@ export class PaginatorComponent {
100
124
  });
101
125
  }
102
126
  onChangePageSize(value) {
127
+ console.log(value);
103
128
  this.currentPage = 1;
104
129
  this.dataStateChanged.emit({
105
130
  currentPage: this.currentPage,
@@ -144,4 +169,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
144
169
  }], dataStateChanged: [{
145
170
  type: Output
146
171
  }] } });
147
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRhLXVpL3NyYy9saWIvY29tcG9uZW50cy9wYWdpbmF0b3IvcGFnaW5hdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRhLXVpL3NyYy9saWIvY29tcG9uZW50cy9wYWdpbmF0b3IvcGFnaW5hdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUdjLG9CQUFvQixHQUN4QyxNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTs7Ozs7QUFPbEQsTUFBTSxPQUFPLGtCQUFrQjtJQUN0QixRQUFRLEdBQWtDLFVBQVUsQ0FBQztJQUNyRCxZQUFZLEdBQXdCLElBQUksQ0FBQztJQUV2QyxTQUFTLEdBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFDaEIsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNkLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDVixhQUFhLEdBQUcsRUFBRSxDQUFDO0lBRW5CLGdCQUFnQixHQUFZLEtBQUssQ0FBQztJQUNsQyxlQUFlLEdBQVksS0FBSyxDQUFDO0lBQ2pDLGFBQWEsR0FBVyxRQUFRLENBQUM7SUFDakMsZ0JBQWdCLEdBQXNCLE1BQU0sQ0FBQyxDQUFDLGFBQWE7SUFDM0QsYUFBYSxHQUFpQixZQUFZLENBQUMsU0FBUyxDQUFDO0lBRTlELElBQ1csV0FBVyxDQUFDLEtBQW9DO1FBQ3pELElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxJQUFJLFVBQVUs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RyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFFRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdLLFdBQVc7c0JBRHJCLEtBQUs7dUJBQUMsVUFBVTtnQkFNTixlQUFlO3NCQUR6QixLQUFLO3VCQUFDLGNBQWM7Z0JBS1gsZ0JBQWdCO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBQYWdpbmF0ZU91dHB1dE9iamVjdCxcclxuICBQYWdpbmF0b3JJdGVtLFxyXG4gIFBhZ2luYXRvclBvc2l0aW9uLCBQYWdpbmF0b3JQb3NpdGlvbkNzcyxcclxufSBmcm9tICcuL3BhZ2luYXRvci5lbnVtJztcclxuaW1wb3J0IHsgRHJvcGRvd25Qb3NpdGlvbiB9IGZyb20gJ0BuZy1zZWxlY3Qvbmctc2VsZWN0JztcclxuaW1wb3J0IHsgUG9zaXRpb25FbnVtIH0gZnJvbSAnLi4vLi4vZW51bXMvb3ZlcmxheSdcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbXJ4LXBhZ2luYXRvcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3BhZ2luYXRvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcGFnaW5hdG9yLmNvbXBvbmVudC5sZXNzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFBhZ2luYXRvckNvbXBvbmVudCB7XHJcbiAgcHVibGljIHBvc2l0aW9uOiBQYWdpbmF0b3JQb3NpdGlvbiB8IHVuZGVmaW5lZCA9ICdjZW50ZXJlZCc7XHJcbiAgcHVibGljIHdpdGhQYWdlU2l6ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpIHBhZ2VTaXplczogbnVtYmVyW10gPSBbMjAsIDUwLCAxMDBdO1xyXG4gIEBJbnB1dCgpIGN1cnJlbnRQYWdlID0gMTtcclxuICBASW5wdXQoKSBwYWdlU2l6ZSA9IDIwO1xyXG4gIEBJbnB1dCgpIHRvdGFsID0gMDtcclxuICBASW5wdXQoKSBjdXN0b21DbGFzc2VzID0gJyc7XHJcblxyXG4gIEBJbnB1dCgpIGlzRW1wdHlQYWdpbmF0b3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBpc1BhZ2luYXRvclRleHQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBwYWdpbmF0b3JUZXh0OiBzdHJpbmcgPSAn0LfQsNC/0LjRgdC4JztcclxuICBASW5wdXQoKSBkcm9wZG93blBvc2l0aW9uOiBEcm9wZG93blBvc2l0aW9uICA9ICdhdXRvJzsgLy8gZGVwcmVjYXRlZFxyXG4gIEBJbnB1dCgpIHBvcHVwUG9zaXRpb246IFBvc2l0aW9uRW51bSA9IFBvc2l0aW9uRW51bS5Cb3R0b21FbmQ7XHJcblxyXG4gIEBJbnB1dCgncG9zaXRpb24nKVxyXG4gIHB1YmxpYyBzZXQgc2V0UG9zaXRpb24odmFsdWU6IFBhZ2luYXRvclBvc2l0aW9uIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLnBvc2l0aW9uID0gdmFsdWUgfHwgJ2NlbnRlcmVkJztcclxuICB9XHJcblxyXG4gIEBJbnB1dCgnd2l0aFBhZ2VTaXplJylcclxuICBwdWJsaWMgc2V0IHNldFdpdGhQYWdlU2l6ZSh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy53aXRoUGFnZVNpemUgPSB2YWx1ZSB8fCBmYWxzZTtcclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKSBkYXRhU3RhdGVDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8UGFnaW5hdGVPdXRwdXRPYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcjxQYWdpbmF0ZU91dHB1dE9iamVjdD4oKTtcclxuXHJcbiAgcHVibGljIGdldCBnZXRDbGFzc2VzKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7dGhpcy5wb3NpdGlvbiAmJiBQYWdpbmF0b3JQb3NpdGlvbkNzc1t0aGlzLnBvc2l0aW9uXX0gJHt0aGlzLmN1c3RvbUNsYXNzZXN9YDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZ2V0SXRlbXMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy50b3RhbCAvIHRoaXMucGFnZVNpemUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBnZXROdW1iZXJzKCk6IFBhZ2luYXRvckl0ZW1bXSB7XHJcbiAgICByZXR1cm4gQXJyYXkodGhpcy5nZXRJdGVtcylcclxuICAgICAgLmZpbGwoMSlcclxuICAgICAgLm1hcCgoaXRlbSwgaW5kZXgpID0+ICh7IGluZGV4OiBpbmRleCArIDEsIGFjdGl2ZTogaW5kZXggKyAxID09PSB0aGlzLmN1cnJlbnRQYWdlIH0pKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZ2V0Vmlld0l0ZW1zKCk6IFBhZ2luYXRvckl0ZW1bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXROdW1iZXJzLmZpbHRlcigoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT09IDEgJiYgdGhpcy5jdXJyZW50UGFnZSA8IHRoaXMuZ2V0SXRlbXMpIHtcclxuICAgICAgICByZXR1cm4gaXRlbS5pbmRleCA9PT0gdGhpcy5jdXJyZW50UGFnZSB8fFxyXG4gICAgICAgICAgaXRlbS5pbmRleCA9PT0gdGhpcy5jdXJyZW50UGFnZSArIDEgfHxcclxuICAgICAgICAgIGl0ZW0uaW5kZXggPT09IHRoaXMuY3VycmVudFBhZ2UgKyAyIHx8XHJcbiAgICAgICAgICBpdGVtLmluZGV4ID09PSB0aGlzLmN1cnJlbnRQYWdlICsgMyB8fFxyXG4gICAgICAgICAgaXRlbS5pbmRleCA9PT0gdGhpcy5jdXJyZW50UGFnZSArIDQ7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50UGFnZSA9PSAyICYmIHRoaXMuY3VycmVudFBhZ2UgPCB0aGlzLmdldEl0ZW1zKSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0uaW5kZXggPT09IHRoaXMuY3VycmVudFBhZ2UgLSAxIHx8XHJcbiAgICAgICAgICBpdGVtLmluZGV4ID09PSB0aGlzLmN1cnJlbnRQYWdlIHx8XHJcbiAgICAgICAgICBpdGVtLmluZGV4ID09PSB0aGlzLmN1cnJlbnRQYWdlICsgMSB8fFxyXG4gICAgICAgICAgaXRlbS5pbmRleCA9PT0gdGhpcy5jdXJyZW50UGFnZSArIDIgfHxcclxuICAgICAgICAgIGl0ZW0uaW5kZXggPT09IHRoaXMuY3VycmVudFBhZ2UgKyAzO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT0gdGhpcy5nZXRJdGVtcyAtIDEgJiYgdGhpcy5jdXJyZW50UGFnZSA8IHRoaXMuZ2V0SXRlbXMpIHtcclxuICAgICAgICByZXR1cm4gaXRlbS5pbmRleCA9PT0gdGhpcy5jdXJyZW50UGFnZSAtIDMgfHxcclxuICAgICAgICAgIGl0ZW0uaW5kZXggPT09IHRoaXMuY3VycmVudFBhZ2UgLSAyIHx8XHJcbiAgICAgICAgICBpdGVtLmluZGV4ID09PSB0aGlzLmN1cnJlbnRQYWdlIC0gMSB8fFxyXG4gICAgICAgICAgaXRlbS5pbmRleCA9PT0gdGhpcy5jdXJyZW50UGFnZSB8fFxyXG4gICAgICAgICAgaXRlbS5pbmRleCA9PT0gdGhpcy5jdXJyZW50UGFnZSArIDE7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50UGFnZSA+IDEgJiYgdGhpcy5jdXJyZW50UGFnZSA8IHRoaXMuZ2V0SXRlbXMpIHtcclxuICAgICAgICByZXR1cm4gaXRlbS5pbmRleCA9PT0gdGhpcy5jdXJyZW50UGFnZSAtIDIgfHxcclxuICAgICAgICAgIGl0ZW0uaW5kZXggPT09IHRoaXMuY3VycmVudFBhZ2UgLSAxIHx8XHJcbiAgICAgICAgICBpdGVtLmluZGV4ID09PSB0aGlzLmN1cnJlbnRQYWdlIHx8XHJcbiAgICAgICAgICBpdGVtLmluZGV4ID09PSB0aGlzLmN1cnJlbnRQYWdlICsgMSB8fFxyXG4gICAgICAgICAgaXRlbS5pbmRleCA9PT0gdGhpcy5jdXJyZW50UGFnZSArIDI7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0uaW5kZXggPT09IHRoaXMuY3VycmVudFBhZ2UgLSA0IHx8XHJcbiAgICAgICAgICBpdGVtLmluZGV4ID09PSB0aGlzLmN1cnJlbnRQYWdlIC0gMyB8fFxyXG4gICAgICAgICAgaXRlbS5pbmRleCA9PT0gdGhpcy5jdXJyZW50UGFnZSAtIDIgfHxcclxuICAgICAgICAgIGl0ZW0uaW5kZXggPT09IHRoaXMuY3VycmVudFBhZ2UgLSAxIHx8XHJcbiAgICAgICAgICBpdGVtLmluZGV4ID09PSB0aGlzLmN1cnJlbnRQYWdlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZ2V0Rmlyc3ROdW1iZXJDdXJyZW50UGFnZSgpOiBudW1iZXIge1xyXG4gICAgaWYodGhpcy50b3RhbCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIGlmKHRoaXMudG90YWwgPCB0aGlzLnBhZ2VTaXplICogdGhpcy5jdXJyZW50UGFnZSAtIHRoaXMucGFnZVNpemUgKyAxKSB7XHJcbiAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAodGhpcy5wYWdlU2l6ZSAqIHRoaXMuY3VycmVudFBhZ2UgLSB0aGlzLnBhZ2VTaXplKSArIDE7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGdldExhc3ROdW1iZXJDdXJyZW50UGFnZSgpOiBudW1iZXIge1xyXG4gICAgaWYodGhpcy50b3RhbCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIGlmKHRoaXMudG90YWwgPCB0aGlzLnBhZ2VTaXplICogdGhpcy5jdXJyZW50UGFnZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy50b3RhbDtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnBhZ2VTaXplICogdGhpcy5jdXJyZW50UGFnZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNoYW5nZUN1cnJlbnRQYWdlKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuZGF0YVN0YXRlQ2hhbmdlZC5lbWl0KHtcclxuICAgICAgY3VycmVudFBhZ2U6IHZhbHVlLFxyXG4gICAgICBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DaGFuZ2VQYWdlU2l6ZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuXHJcbiAgICB0aGlzLmRhdGFTdGF0ZUNoYW5nZWQuZW1pdCh7XHJcbiAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLmN1cnJlbnRQYWdlLFxyXG4gICAgICBwYWdlU2l6ZTogdmFsdWVcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpIHtcclxuICAgIHJldHVybiBpdGVtLmlkO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwibXJ4LXBhZ2luYXRvclwiIFtjbGFzc109XCJnZXRDbGFzc2VzXCIgKm5nSWY9XCJpc0VtcHR5UGFnaW5hdG9yIHx8IHRvdGFsXCI+XHJcbiAgPHVsIGNsYXNzPVwibXJ4LXBhZ2luYXRvcl9fbGlzdFwiPlxyXG4gICAgPGxpXHJcbiAgICAgIGNsYXNzPVwibXJ4LXBhZ2luYXRvcl9fcHJldmlvdXNcIlxyXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UgPD0gMVwiXHJcbiAgICAgIChjbGljayk9XCJjdXJyZW50UGFnZSA+IDEgJiYgb25DaGFuZ2VDdXJyZW50UGFnZShjdXJyZW50UGFnZSAtIDEpXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtcngtaWNvbiBpY29uLWNoZXZyb24tbGVmdCBpY29uLWZvbnQtMjRcIj48L2Rpdj5cclxuICAgIDwvbGk+XHJcblxyXG4gICAgPGxpICpuZ0lmPVwiZ2V0Vmlld0l0ZW1zLmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwibXJ4LXBhZ2luYXRvcl9faXRlbSBhY3RpdmVcIj4xPC9saT5cclxuXHJcbiAgICA8bGkgY2xhc3M9XCJtcngtcGFnaW5hdG9yX19pdGVtXCIgKm5nSWY9XCJjdXJyZW50UGFnZSA+IDMgJiYgZ2V0SXRlbXMgPiA1XCIgKGNsaWNrKT1cIm9uQ2hhbmdlQ3VycmVudFBhZ2UoMSlcIj4xPC9saT5cclxuICAgIDxsaSBjbGFzcz1cIm1yeC1wYWdpbmF0b3JfX2l0ZW0gZG90c1wiICpuZ0lmPVwiY3VycmVudFBhZ2UgPiAzICYmIGdldEl0ZW1zID4gNVwiPi4uLjwvbGk+XHJcblxyXG4gICAgPGxpXHJcbiAgICAgIGNsYXNzPVwibXJ4LXBhZ2luYXRvcl9faXRlbVwiXHJcbiAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldFZpZXdJdGVtczsgdHJhY2tCeTogdHJhY2tCeUZuXCJcclxuICAgICAgKGNsaWNrKT1cIm9uQ2hhbmdlQ3VycmVudFBhZ2UoaXRlbS5pbmRleClcIlxyXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cImN1cnJlbnRQYWdlID09PSBpdGVtLmluZGV4XCJcclxuICAgID5cclxuICAgICAge3tpdGVtLmluZGV4fX1cclxuICAgIDwvbGk+XHJcblxyXG4gICAgPGxpIGNsYXNzPVwibXJ4LXBhZ2luYXRvcl9faXRlbSBkb3RzXCIgKm5nSWY9XCJjdXJyZW50UGFnZSA8IGdldEl0ZW1zIC0gMiAmJiBnZXRJdGVtcyA+IDVcIj4uLi48L2xpPlxyXG4gICAgPGxpIGNsYXNzPVwibXJ4LXBhZ2luYXRvcl9faXRlbVwiICpuZ0lmPVwiY3VycmVudFBhZ2UgPCBnZXRJdGVtcyAtIDIgJiYgZ2V0SXRlbXMgPiA1XCJcclxuICAgICAgICAoY2xpY2spPVwib25DaGFuZ2VDdXJyZW50UGFnZShnZXRJdGVtcylcIj57e2dldEl0ZW1zfX08L2xpPlxyXG5cclxuICAgIDxsaVxyXG4gICAgICBjbGFzcz1cIm1yeC1wYWdpbmF0b3JfX25leHRcIlxyXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UgPj0gZ2V0SXRlbXNcIlxyXG4gICAgICAoY2xpY2spPVwiY3VycmVudFBhZ2UgPCBnZXRJdGVtcyAmJiBvbkNoYW5nZUN1cnJlbnRQYWdlKGN1cnJlbnRQYWdlICsgMSlcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1yeC1pY29uIGljb24tY2hldnJvbi1yaWdodCBpY29uLWZvbnQtMjRcIj48L2Rpdj5cclxuICAgIDwvbGk+XHJcbiAgPC91bD5cclxuXHJcbiAgQGlmICh3aXRoUGFnZVNpemUpIHtcclxuICAgIDxtcngtc2VsZWN0XHJcbiAgICAgIFtuZ01vZGVsXT1cInBhZ2VTaXplXCJcclxuICAgICAgW3NpemVdPVwiJ21lZGl1bSdcIlxyXG4gICAgICBbaXRlbXNdPVwicGFnZVNpemVzXCJcclxuICAgICAgW2NsZWFyYWJsZV09XCJmYWxzZVwiXHJcbiAgICAgIFtzZWFyY2hhYmxlXT1cImZhbHNlXCJcclxuICAgICAgW3BvcHVwUG9zaXRpb25dPVwicG9wdXBQb3NpdGlvblwiXHJcbiAgICAgIFtzaW5nbGVDaGFuZ2VdPVwidHJ1ZVwiXHJcbiAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlUGFnZVNpemUoJGV2ZW50KVwiXHJcbiAgICA+PC9tcngtc2VsZWN0PlxyXG4gIH1cclxuXHJcbiAgPGRpdiAqbmdJZj1cImlzUGFnaW5hdG9yVGV4dFwiIGNsYXNzPVwibXJ4LXBhZ2luYXRvcl9fdGV4dFwiPlxyXG4gICAg0J7RgtC+0LHRgNCw0LbQtdC90Ysge3twYWdpbmF0b3JUZXh0fX0ge3tnZXRGaXJzdE51bWJlckN1cnJlbnRQYWdlfX0gLSB7e2dldExhc3ROdW1iZXJDdXJyZW50UGFnZX19INC40Lcge3t0b3RhbH19XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuXHJcbiJdfQ==
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRhLXVpL3NyYy9saWIvY29tcG9uZW50cy9wYWdpbmF0b3IvcGFnaW5hdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRhLXVpL3NyYy9saWIvY29tcG9uZW50cy9wYWdpbmF0b3IvcGFnaW5hdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUdjLG9CQUFvQixHQUN4QyxNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTs7Ozs7QUFPbEQsTUFBTSxPQUFPLGtCQUFrQjtJQUN0QixRQUFRLEdBQWtDLFVBQVUsQ0FBQztJQUNyRCxZQUFZLEdBQXdCLElBQUksQ0FBQztJQUV2QyxTQUFTLEdBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFDaEIsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNkLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDVixhQUFhLEdBQUcsRUFBRSxDQUFDO0lBRW5CLGdCQUFnQixHQUFZLEtBQUssQ0FBQztJQUNsQyxlQUFlLEdBQVksS0FBSyxDQUFDO0lBQ2pDLGFBQWEsR0FBVyxRQUFRLENBQUM7SUFDakMsZ0JBQWdCLEdBQXNCLE1BQU0sQ0FBQyxDQUFDLGFBQWE7SUFDM0QsYUFBYSxHQUFpQixZQUFZLENBQUMsU0FBUyxDQUFDO0lBRTlELElBQ1csV0FBVyxDQUFDLEtBQW9DO1FBQ3pELElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxJQUFJLFVBQVUs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QWE7UUFDdEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQztZQUN6QixXQUFXLEVBQUUsS0FBSztZQUNsQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDeEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLGdCQUFnQixDQUFDLEtBQWE7UUFDbkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNsQixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUVyQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1lBQ3pCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixRQUFRLEVBQUUsS0FBSztTQUNoQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sU0FBUyxDQUFDLEtBQWEsRUFBRSxJQUFTO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNqQixDQUFDO3dHQXZKVSxrQkFBa0I7NEZBQWxCLGtCQUFrQiw4ZkNkL0IsK29FQXNEQTs7NEZEeENhLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDRSxlQUFlOzhCQVFoQixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFFRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdLLFdBQVc7c0JBRHJCLEtBQUs7dUJBQUMsVUFBVTtnQkFNTixlQUFlO3NCQUR6QixLQUFLO3VCQUFDLGNBQWM7Z0JBS1gsZ0JBQWdCO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBQYWdpbmF0ZU91dHB1dE9iamVjdCxcclxuICBQYWdpbmF0b3JJdGVtLFxyXG4gIFBhZ2luYXRvclBvc2l0aW9uLCBQYWdpbmF0b3JQb3NpdGlvbkNzcyxcclxufSBmcm9tICcuL3BhZ2luYXRvci5lbnVtJztcclxuaW1wb3J0IHsgRHJvcGRvd25Qb3NpdGlvbiB9IGZyb20gJ0BuZy1zZWxlY3Qvbmctc2VsZWN0JztcclxuaW1wb3J0IHsgUG9zaXRpb25FbnVtIH0gZnJvbSAnLi4vLi4vZW51bXMvb3ZlcmxheSdcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbXJ4LXBhZ2luYXRvcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3BhZ2luYXRvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcGFnaW5hdG9yLmNvbXBvbmVudC5sZXNzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFBhZ2luYXRvckNvbXBvbmVudCB7XHJcbiAgcHVibGljIHBvc2l0aW9uOiBQYWdpbmF0b3JQb3NpdGlvbiB8IHVuZGVmaW5lZCA9ICdjZW50ZXJlZCc7XHJcbiAgcHVibGljIHdpdGhQYWdlU2l6ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpIHBhZ2VTaXplczogbnVtYmVyW10gPSBbMjAsIDUwLCAxMDBdO1xyXG4gIEBJbnB1dCgpIGN1cnJlbnRQYWdlID0gMTtcclxuICBASW5wdXQoKSBwYWdlU2l6ZSA9IDIwO1xyXG4gIEBJbnB1dCgpIHRvdGFsID0gMDtcclxuICBASW5wdXQoKSBjdXN0b21DbGFzc2VzID0gJyc7XHJcblxyXG4gIEBJbnB1dCgpIGlzRW1wdHlQYWdpbmF0b3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBpc1BhZ2luYXRvclRleHQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBwYWdpbmF0b3JUZXh0OiBzdHJpbmcgPSAn0LfQsNC/0LjRgdC4JztcclxuICBASW5wdXQoKSBkcm9wZG93blBvc2l0aW9uOiBEcm9wZG93blBvc2l0aW9uICA9ICdhdXRvJzsgLy8gZGVwcmVjYXRlZFxyXG4gIEBJbnB1dCgpIHBvcHVwUG9zaXRpb246IFBvc2l0aW9uRW51bSA9IFBvc2l0aW9uRW51bS5Cb3R0b21FbmQ7XHJcblxyXG4gIEBJbnB1dCgncG9zaXRpb24nKVxyXG4gIHB1YmxpYyBzZXQgc2V0UG9zaXRpb24odmFsdWU6IFBhZ2luYXRvclBvc2l0aW9uIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLnBvc2l0aW9uID0gdmFsdWUgfHwgJ2NlbnRlcmVkJztcclxuICB9XHJcblxyXG4gIEBJbnB1dCgnd2l0aFBhZ2VTaXplJylcclxuICBwdWJsaWMgc2V0IHNldFdpdGhQYWdlU2l6ZSh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy53aXRoUGFnZVNpemUgPSB2YWx1ZSB8fCBmYWxzZTtcclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKSBkYXRhU3RhdGVDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8UGFnaW5hdGVPdXRwdXRPYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcjxQYWdpbmF0ZU91dHB1dE9iamVjdD4oKTtcclxuXHJcbiAgcHVibGljIGdldCBnZXRDbGFzc2VzKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7dGhpcy5wb3NpdGlvbiAmJiBQYWdpbmF0b3JQb3NpdGlvbkNzc1t0aGlzLnBvc2l0aW9uXX0gJHt0aGlzLmN1c3RvbUNsYXNzZXN9YDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZ2V0SXRlbXMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy50b3RhbCAvIHRoaXMucGFnZVNpemUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBnZXROdW1iZXJzKCk6IFBhZ2luYXRvckl0ZW1bXSB7XHJcbiAgICByZXR1cm4gQXJyYXkodGhpcy5nZXRJdGVtcylcclxuICAgICAgLmZpbGwoMSlcclxuICAgICAgLm1hcCgoaXRlbSwgaW5kZXgpID0+ICh7IGluZGV4OiBpbmRleCArIDEsIGFjdGl2ZTogaW5kZXggKyAxID09PSB0aGlzLmN1cnJlbnRQYWdlIH0pKTtcclxuICB9XHJcblxyXG4gIC8vIFRPIERPOiDQv9C+0LrQsCDQvtGB0YLQsNCy0LvRjiDQtNC70Y8g0YLQtdGB0YLQvtCyXHJcbiAgLy8gcHVibGljIGdldCBnZXRWaWV3SXRlbXMoKTogUGFnaW5hdG9ySXRlbVtdIHtcclxuICAvLyAgIHJldHVybiB0aGlzLmdldE51bWJlcnMuZmlsdGVyKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gIC8vICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA9PT0gMSAmJiB0aGlzLmN1cnJlbnRQYWdlIDwgdGhpcy5nZXRJdGVtcykge1xyXG4gIC8vICAgICAgIHJldHVybiBpdGVtLmluZGV4ID09PSB0aGlzLmN1cnJlbnRQYWdlIHx8XHJcbiAgLy8gICAgICAgICBpdGVtLmluZGV4ID09PSB0aGlzLmN1cnJlbnRQYWdlICsgMSB8fFxyXG4gIC8vICAgICAgICAgaXRlbS5pbmRleCA9PT0gdGhpcy5jdXJyZW50UGFnZSArIDIgfHxcclxuICAvLyAgICAgICAgIGl0ZW0uaW5kZXggPT09IHRoaXMuY3VycmVudFBhZ2UgKyAzIHx8XHJcbiAgLy8gICAgICAgICBpdGVtLmluZGV4ID09PSB0aGlzLmN1cnJlbnRQYWdlICsgNDtcclxuICAvLyAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRQYWdlID09IDIgJiYgdGhpcy5jdXJyZW50UGFnZSA8IHRoaXMuZ2V0SXRlbXMpIHtcclxuICAvLyAgICAgICByZXR1cm4gaXRlbS5pbmRleCA9PT0gdGhpcy5jdXJyZW50UGFnZSAtIDEgfHxcclxuICAvLyAgICAgICAgIGl0ZW0uaW5kZXggPT09IHRoaXMuY3VycmVudFBhZ2UgfHxcclxuICAvLyAgICAgICAgIGl0ZW0uaW5kZXggPT09IHRoaXMuY3VycmVudFBhZ2UgKyAxIHx8XHJcbiAgLy8gICAgICAgICBpdGVtLmluZGV4ID09PSB0aGlzLmN1cnJlbnRQYWdlICsgMiB8fFxyXG4gIC8vICAgICAgICAgaXRlbS5pbmRleCA9PT0gdGhpcy5jdXJyZW50UGFnZSArIDM7XHJcbiAgLy8gICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50UGFnZSA9PSB0aGlzLmdldEl0ZW1zIC0gMSAmJiB0aGlzLmN1cnJlbnRQYWdlIDwgdGhpcy5nZXRJdGVtcykge1xyXG4gIC8vICAgICAgIHJldHVybiBpdGVtLmluZGV4ID09PSB0aGlzLmN1cnJlbnRQYWdlIC0gMyB8fFxyXG4gIC8vICAgICAgICAgaXRlbS5pbmRleCA9PT0gdGhpcy5jdXJyZW50UGFnZSAtIDIgfHxcclxuICAvLyAgICAgICAgIGl0ZW0uaW5kZXggPT09IHRoaXMuY3VycmVudFBhZ2UgLSAxIHx8XHJcbiAgLy8gICAgICAgICBpdGVtLmluZGV4ID09PSB0aGlzLmN1cnJlbnRQYWdlIHx8XHJcbiAgLy8gICAgICAgICBpdGVtLmluZGV4ID09PSB0aGlzLmN1cnJlbnRQYWdlICsgMTtcclxuICAvLyAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRQYWdlID4gMSAmJiB0aGlzLmN1cnJlbnRQYWdlIDwgdGhpcy5nZXRJdGVtcykge1xyXG4gIC8vICAgICAgIHJldHVybiBpdGVtLmluZGV4ID09PSB0aGlzLmN1cnJlbnRQYWdlIC0gMiB8fFxyXG4gIC8vICAgICAgICAgaXRlbS5pbmRleCA9PT0gdGhpcy5jdXJyZW50UGFnZSAtIDEgfHxcclxuICAvLyAgICAgICAgIGl0ZW0uaW5kZXggPT09IHRoaXMuY3VycmVudFBhZ2UgfHxcclxuICAvLyAgICAgICAgIGl0ZW0uaW5kZXggPT09IHRoaXMuY3VycmVudFBhZ2UgKyAxIHx8XHJcbiAgLy8gICAgICAgICBpdGVtLmluZGV4ID09PSB0aGlzLmN1cnJlbnRQYWdlICsgMjtcclxuICAvLyAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICByZXR1cm4gaXRlbS5pbmRleCA9PT0gdGhpcy5jdXJyZW50UGFnZSAtIDQgfHxcclxuICAvLyAgICAgICAgIGl0ZW0uaW5kZXggPT09IHRoaXMuY3VycmVudFBhZ2UgLSAzIHx8XHJcbiAgLy8gICAgICAgICBpdGVtLmluZGV4ID09PSB0aGlzLmN1cnJlbnRQYWdlIC0gMiB8fFxyXG4gIC8vICAgICAgICAgaXRlbS5pbmRleCA9PT0gdGhpcy5jdXJyZW50UGFnZSAtIDEgfHxcclxuICAvLyAgICAgICAgIGl0ZW0uaW5kZXggPT09IHRoaXMuY3VycmVudFBhZ2U7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH0pO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8g0KPQv9GA0L7RidC10L3QvdCw0Y8g0LLQtdGA0YHQuNGPIGdldFZpZXdJdGVtcygpXHJcbiAgcHVibGljIGdldCBnZXRWaWV3SXRlbXMoKTogUGFnaW5hdG9ySXRlbVtdIHtcclxuICAgIGNvbnN0IHRvdGFsUGFnZXMgPSB0aGlzLmdldEl0ZW1zO1xyXG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudFBhZ2U7XHJcbiAgICBjb25zdCBkZWx0YSA9IDI7IC8vINC60L7Qu9C40YfQtdGB0YLQstC+INGB0YLRgNCw0L3QuNGGINC/0L4g0LHQvtC60LDQvCDQvtGCINGC0LXQutGD0YnQtdC5XHJcbiAgICBjb25zdCByYW5nZSA9IFtdO1xyXG4gICAgXHJcbiAgICBmb3IgKGxldCBpID0gTWF0aC5tYXgoMiwgY3VycmVudCAtIGRlbHRhKTsgaSA8PSBNYXRoLm1pbih0b3RhbFBhZ2VzIC0gMSwgY3VycmVudCArIGRlbHRhKTsgaSsrKSB7XHJcbiAgICAgIHJhbmdlLnB1c2goaSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vINCU0L7QsdCw0LLQu9GP0LXQvCDQv9C10YDQstGD0Y4g0YHRgtGA0LDQvdC40YbRg1xyXG4gICAgaWYgKGN1cnJlbnQgLSBkZWx0YSA+IDEpIHtcclxuICAgICAgcmFuZ2UudW5zaGlmdCgnLi4uJyBhcyBhbnkpO1xyXG4gICAgfVxyXG4gICAgcmFuZ2UudW5zaGlmdCgxKTtcclxuICAgIFxyXG4gICAgLy8g0JTQvtCx0LDQstC70Y/QtdC8INC/0L7RgdC70LXQtNC90Y7RjiDRgdGC0YDQsNC90LjRhtGDXHJcbiAgICBpZiAoY3VycmVudCArIGRlbHRhIDwgdG90YWxQYWdlcyAtIDEpIHtcclxuICAgICAgcmFuZ2UucHVzaCgnLi4uJyBhcyBhbnkpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRvdGFsUGFnZXMgPiAxKSB7XHJcbiAgICAgIHJhbmdlLnB1c2godG90YWxQYWdlcyk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHJldHVybiByYW5nZS5tYXAoKGl0ZW0sIGluZGV4KSA9PiAoe1xyXG4gICAgICBpbmRleDogdHlwZW9mIGl0ZW0gPT09ICdudW1iZXInID8gaXRlbSA6IGluZGV4LFxyXG4gICAgICBhY3RpdmU6IGl0ZW0gPT09IGN1cnJlbnQsXHJcbiAgICAgIGlzRWxsaXBzaXM6IGl0ZW0gPT09ICcuLi4nXHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGdldEZpcnN0TnVtYmVyQ3VycmVudFBhZ2UoKTogbnVtYmVyIHtcclxuICAgIGlmKHRoaXMudG90YWwgPT09IDApIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLnRvdGFsIDwgdGhpcy5wYWdlU2l6ZSAqIHRoaXMuY3VycmVudFBhZ2UgLSB0aGlzLnBhZ2VTaXplICsgMSkge1xyXG4gICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gKHRoaXMucGFnZVNpemUgKiB0aGlzLmN1cnJlbnRQYWdlIC0gdGhpcy5wYWdlU2l6ZSkgKyAxO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBnZXRMYXN0TnVtYmVyQ3VycmVudFBhZ2UoKTogbnVtYmVyIHtcclxuICAgIGlmKHRoaXMudG90YWwgPT09IDApIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLnRvdGFsIDwgdGhpcy5wYWdlU2l6ZSAqIHRoaXMuY3VycmVudFBhZ2UpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudG90YWw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5wYWdlU2l6ZSAqIHRoaXMuY3VycmVudFBhZ2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DaGFuZ2VDdXJyZW50UGFnZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmRhdGFTdGF0ZUNoYW5nZWQuZW1pdCh7XHJcbiAgICAgIGN1cnJlbnRQYWdlOiB2YWx1ZSxcclxuICAgICAgcGFnZVNpemU6IHRoaXMucGFnZVNpemVcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ2hhbmdlUGFnZVNpemUodmFsdWU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2codmFsdWUpXHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuXHJcbiAgICB0aGlzLmRhdGFTdGF0ZUNoYW5nZWQuZW1pdCh7XHJcbiAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLmN1cnJlbnRQYWdlLFxyXG4gICAgICBwYWdlU2l6ZTogdmFsdWVcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpIHtcclxuICAgIHJldHVybiBpdGVtLmlkO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwibXJ4LXBhZ2luYXRvclwiIFtjbGFzc109XCJnZXRDbGFzc2VzXCIgKm5nSWY9XCJpc0VtcHR5UGFnaW5hdG9yIHx8IHRvdGFsXCI+XHJcbiAgPHVsIGNsYXNzPVwibXJ4LXBhZ2luYXRvcl9fbGlzdFwiPlxyXG4gICAgPGxpXHJcbiAgICAgIGNsYXNzPVwibXJ4LXBhZ2luYXRvcl9fcHJldmlvdXNcIlxyXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UgPD0gMVwiXHJcbiAgICAgIChjbGljayk9XCJjdXJyZW50UGFnZSA+IDEgJiYgb25DaGFuZ2VDdXJyZW50UGFnZShjdXJyZW50UGFnZSAtIDEpXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtcngtaWNvbiBpY29uLWNoZXZyb24tbGVmdCBpY29uLWZvbnQtMjRcIj48L2Rpdj5cclxuICAgIDwvbGk+XHJcblxyXG4gICAgPGxpICpuZ0lmPVwiZ2V0Vmlld0l0ZW1zLmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwibXJ4LXBhZ2luYXRvcl9faXRlbSBhY3RpdmVcIj4xPC9saT5cclxuXHJcbiAgICA8bGkgY2xhc3M9XCJtcngtcGFnaW5hdG9yX19pdGVtXCIgKm5nSWY9XCJjdXJyZW50UGFnZSA+IDMgJiYgZ2V0SXRlbXMgPiA1XCIgKGNsaWNrKT1cIm9uQ2hhbmdlQ3VycmVudFBhZ2UoMSlcIj4xPC9saT5cclxuICAgIDxsaSBjbGFzcz1cIm1yeC1wYWdpbmF0b3JfX2l0ZW0gZG90c1wiICpuZ0lmPVwiY3VycmVudFBhZ2UgPiAzICYmIGdldEl0ZW1zID4gNVwiPi4uLjwvbGk+XHJcblxyXG4gICAgPGxpXHJcbiAgICAgIGNsYXNzPVwibXJ4LXBhZ2luYXRvcl9faXRlbVwiXHJcbiAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldFZpZXdJdGVtczsgdHJhY2tCeTogdHJhY2tCeUZuXCJcclxuICAgICAgKGNsaWNrKT1cIm9uQ2hhbmdlQ3VycmVudFBhZ2UoaXRlbS5pbmRleClcIlxyXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cImN1cnJlbnRQYWdlID09PSBpdGVtLmluZGV4XCJcclxuICAgID5cclxuICAgICAge3tpdGVtLmluZGV4fX1cclxuICAgIDwvbGk+XHJcblxyXG4gICAgPGxpIGNsYXNzPVwibXJ4LXBhZ2luYXRvcl9faXRlbSBkb3RzXCIgKm5nSWY9XCJjdXJyZW50UGFnZSA8IGdldEl0ZW1zIC0gMiAmJiBnZXRJdGVtcyA+IDVcIj4uLi48L2xpPlxyXG4gICAgPGxpIGNsYXNzPVwibXJ4LXBhZ2luYXRvcl9faXRlbVwiICpuZ0lmPVwiY3VycmVudFBhZ2UgPCBnZXRJdGVtcyAtIDIgJiYgZ2V0SXRlbXMgPiA1XCJcclxuICAgICAgICAoY2xpY2spPVwib25DaGFuZ2VDdXJyZW50UGFnZShnZXRJdGVtcylcIj57e2dldEl0ZW1zfX08L2xpPlxyXG5cclxuICAgIDxsaVxyXG4gICAgICBjbGFzcz1cIm1yeC1wYWdpbmF0b3JfX25leHRcIlxyXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UgPj0gZ2V0SXRlbXNcIlxyXG4gICAgICAoY2xpY2spPVwiY3VycmVudFBhZ2UgPCBnZXRJdGVtcyAmJiBvbkNoYW5nZUN1cnJlbnRQYWdlKGN1cnJlbnRQYWdlICsgMSlcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1yeC1pY29uIGljb24tY2hldnJvbi1yaWdodCBpY29uLWZvbnQtMjRcIj48L2Rpdj5cclxuICAgIDwvbGk+XHJcbiAgPC91bD5cclxuXHJcbiAgQGlmICh3aXRoUGFnZVNpemUpIHtcclxuICAgIDxtcngtc2VsZWN0XHJcbiAgICAgIFtuZ01vZGVsXT1cInBhZ2VTaXplXCJcclxuICAgICAgW3NpemVdPVwiJ21lZGl1bSdcIlxyXG4gICAgICBbaXRlbXNdPVwicGFnZVNpemVzXCJcclxuICAgICAgW2NsZWFyYWJsZV09XCJmYWxzZVwiXHJcbiAgICAgIFtzZWFyY2hhYmxlXT1cImZhbHNlXCJcclxuICAgICAgW3BvcHVwUG9zaXRpb25dPVwicG9wdXBQb3NpdGlvblwiXHJcbiAgICAgIFtzaW5nbGVDaGFuZ2VdPVwidHJ1ZVwiXHJcbiAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlUGFnZVNpemUoJGV2ZW50KVwiXHJcbiAgICA+PC9tcngtc2VsZWN0PlxyXG4gIH1cclxuXHJcbiAgPGRpdiAqbmdJZj1cImlzUGFnaW5hdG9yVGV4dFwiIGNsYXNzPVwibXJ4LXBhZ2luYXRvcl9fdGV4dFwiPlxyXG4gICAg0J7RgtC+0LHRgNCw0LbQtdC90Ysge3twYWdpbmF0b3JUZXh0fX0ge3tnZXRGaXJzdE51bWJlckN1cnJlbnRQYWdlfX0gLSB7e2dldExhc3ROdW1iZXJDdXJyZW50UGFnZX19INC40Lcge3t0b3RhbH19XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuXHJcbiJdfQ==
@@ -1,111 +1,72 @@
1
- import { Directive, HostBinding, HostListener, Input } from '@angular/core';
1
+ import { Directive, HostBinding, Input } from "@angular/core";
2
2
  import * as i0 from "@angular/core";
3
3
  export class AutosizeDirective {
4
4
  elem;
5
5
  renderer;
6
- ngZone;
7
6
  overflow = 'hidden';
8
7
  rows = 1;
9
- set autosize(value) {
10
- this._autosize = value;
11
- if (!value) {
12
- this.overflow = 'auto';
13
- this.setHeight('auto');
14
- }
15
- }
16
- get autosize() {
17
- return this._autosize;
18
- }
19
- _autosize = true;
20
- observer = null;
21
- resizeTimeout;
22
- lastHeight = 0;
23
- constructor(elem, renderer, ngZone) {
8
+ autosize = true;
9
+ isInitialized = false;
10
+ constructor(elem, renderer) {
24
11
  this.elem = elem;
25
12
  this.renderer = renderer;
26
- this.ngZone = ngZone;
27
13
  }
28
14
  ngAfterViewInit() {
29
- this.setupAutoResize();
30
- // Первоначальный расчет
31
- setTimeout(() => this.resize(), 0);
32
- }
33
- ngOnDestroy() {
34
- this.cleanup();
35
- }
36
- setupAutoResize() {
37
- if (!this.autosize)
38
- return;
39
- const textarea = this.elem.nativeElement;
40
- // Используем MutationObserver вместо ngDoCheck
41
- this.ngZone.runOutsideAngular(() => {
42
- this.observer = new MutationObserver(() => {
43
- this.scheduleResize();
44
- });
45
- this.observer.observe(textarea, {
46
- characterData: true,
47
- childList: true,
48
- subtree: true
49
- });
50
- });
51
- // Также следим за resize окна
52
- this.renderer.listen('window', 'resize', () => this.scheduleResize());
53
- }
54
- scheduleResize() {
55
- if (!this.autosize)
56
- return;
57
- // Debounce для оптимизации
58
- clearTimeout(this.resizeTimeout);
59
- this.resizeTimeout = setTimeout(() => {
60
- this.ngZone.run(() => this.resize());
61
- }, 50); // Задержка 50мс
15
+ this.isInitialized = true;
16
+ setTimeout(() => this.resize(), 0); // Инициализация после рендера
62
17
  }
63
18
  onInput() {
64
- this.scheduleResize();
19
+ if (this.autosize && this.isInitialized) {
20
+ this.resize();
21
+ }
65
22
  }
66
23
  resize() {
67
24
  if (!this.autosize) {
68
25
  this.overflow = 'auto';
26
+ this.setHeight('auto');
69
27
  return;
70
28
  }
71
29
  const textarea = this.elem.nativeElement;
72
- // Временно отключаем transition для предотвращения скачков
30
+ // Сохраняем текущее значение и стили
31
+ const originalValue = textarea.value;
73
32
  const originalTransition = textarea.style.transition;
33
+ const originalOverflow = textarea.style.overflow;
34
+ // Временно убираем transition для мгновенного расчета
74
35
  this.renderer.setStyle(textarea, 'transition', 'none');
36
+ this.renderer.setStyle(textarea, 'overflow', 'hidden');
37
+ // Сбрасываем высоту для корректного расчета
38
+ this.renderer.setStyle(textarea, 'height', 'auto');
75
39
  // Рассчитываем новую высоту
76
40
  const borderHeight = textarea.offsetHeight - textarea.clientHeight;
77
- this.setHeight('auto');
78
41
  const scrollHeight = textarea.scrollHeight;
79
- const newHeight = scrollHeight + borderHeight;
80
- // Изменяем высоту только если она действительно изменилась
81
- if (Math.abs(newHeight - this.lastHeight) > 2) { // Порог 2px
82
- this.setHeight(`${newHeight}px`);
83
- this.lastHeight = newHeight;
84
- }
85
- // Восстанавливаем transition
42
+ const newHeight = Math.max(textarea.clientHeight, // минимальная высота
43
+ scrollHeight + borderHeight);
44
+ // Устанавливаем новую высоту
45
+ this.renderer.setStyle(textarea, 'height', `${newHeight}px`);
46
+ // Восстанавливаем стили
86
47
  setTimeout(() => {
87
48
  this.renderer.setStyle(textarea, 'transition', originalTransition);
49
+ this.renderer.setStyle(textarea, 'overflow', originalOverflow);
88
50
  }, 0);
89
51
  }
90
52
  setHeight(value) {
91
53
  this.renderer.setStyle(this.elem.nativeElement, 'height', value);
92
54
  }
93
- cleanup() {
94
- if (this.observer) {
95
- this.observer.disconnect();
96
- this.observer = null;
97
- }
98
- clearTimeout(this.resizeTimeout);
99
- }
100
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AutosizeDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
101
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: AutosizeDirective, selector: "[mrxAutosize]", inputs: { rows: "rows", autosize: "autosize" }, host: { listeners: { "input": "onInput()" }, properties: { "style.overflow": "this.overflow", "rows": "this.rows" } }, ngImport: i0 });
55
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AutosizeDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
56
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: AutosizeDirective, selector: "[mrxAutosize]", inputs: { rows: "rows", autosize: "autosize" }, host: { listeners: { "input": "onInput()", "paste": "onInput()", "cut": "onInput()", "change": "onInput()" }, properties: { "style.overflow": "this.overflow", "rows": "this.rows" } }, ngImport: i0 });
102
57
  }
103
58
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AutosizeDirective, decorators: [{
104
59
  type: Directive,
105
60
  args: [{
106
- selector: '[mrxAutosize]'
61
+ selector: '[mrxAutosize]',
62
+ host: {
63
+ '(input)': 'onInput()',
64
+ '(paste)': 'onInput()',
65
+ '(cut)': 'onInput()',
66
+ '(change)': 'onInput()'
67
+ }
107
68
  }]
108
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }], propDecorators: { overflow: [{
69
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { overflow: [{
109
70
  type: HostBinding,
110
71
  args: ['style.overflow']
111
72
  }], rows: [{
@@ -115,8 +76,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
115
76
  args: ['rows']
116
77
  }], autosize: [{
117
78
  type: Input
118
- }], onInput: [{
119
- type: HostListener,
120
- args: ['input']
121
79
  }] } });
122
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b3NpemUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGEtdWkvc3JjL2xpYi9kaXJlY3RpdmVzL2F1dG9zaXplL2F1dG9zaXplLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUlOLE1BQU0sZUFBZSxDQUFDOztBQUt2QixNQUFNLE9BQU8saUJBQWlCO0lBMEJsQjtJQUNBO0lBQ0E7SUExQkgsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUlwQixJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBRWhCLElBQ1csUUFBUSxDQUFDLEtBQWM7UUFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7WUFDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQUNELElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUNPLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFFakIsUUFBUSxHQUE0QixJQUFJLENBQUM7SUFDekMsYUFBYSxDQUFNO0lBQ25CLFVBQVUsR0FBRyxDQUFDLENBQUM7SUFFdkIsWUFDVSxJQUFnQixFQUNoQixRQUFtQixFQUNuQixNQUFjO1FBRmQsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLFdBQU0sR0FBTixNQUFNLENBQVE7SUFDckIsQ0FBQztJQUVHLGVBQWU7UUFDcEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLHdCQUF3QjtRQUN4QixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMs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QUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFTyxTQUFTLENBQUMsS0FBYTtRQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVPLE9BQU87UUFDYixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxZQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ25DLENBQUM7d0dBdEhVLGlCQUFpQjs0RkFBakIsaUJBQWlCOzs0RkFBakIsaUJBQWlCO2tCQUg3QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO2lCQUMxQjs0SEFHUSxRQUFRO3NCQURkLFdBQVc7dUJBQUMsZ0JBQWdCO2dCQUt0QixJQUFJO3NCQUZWLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsTUFBTTtnQkFJUixRQUFRO3NCQURsQixLQUFLO2dCQWtFRSxPQUFPO3NCQURkLFlBQVk7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBEaXJlY3RpdmUsXHJcbiAgRWxlbWVudFJlZixcclxuICBIb3N0QmluZGluZyxcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIFJlbmRlcmVyMixcclxuICBOZ1pvbmVcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW21yeEF1dG9zaXplXSdcclxufSlcclxuZXhwb3J0IGNsYXNzIEF1dG9zaXplRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLm92ZXJmbG93JylcclxuICBwdWJsaWMgb3ZlcmZsb3cgPSAnaGlkZGVuJztcclxuXHJcbiAgQElucHV0KClcclxuICBASG9zdEJpbmRpbmcoJ3Jvd3MnKVxyXG4gIHB1YmxpYyByb3dzID0gMTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGF1dG9zaXplKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9hdXRvc2l6ZSA9IHZhbHVlO1xyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICB0aGlzLm92ZXJmbG93ID0gJ2F1dG8nO1xyXG4gICAgICB0aGlzLnNldEhlaWdodCgnYXV0bycpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGF1dG9zaXplKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2F1dG9zaXplO1xyXG4gIH1cclxuICBwcml2YXRlIF9hdXRvc2l6ZSA9IHRydWU7XHJcblxyXG4gIHByaXZhdGUgb2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIHJlc2l6ZVRpbWVvdXQ6IGFueTtcclxuICBwcml2YXRlIGxhc3RIZWlnaHQgPSAwO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZWxlbTogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcclxuICApIHt9XHJcblxyXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLnNldHVwQXV0b1Jlc2l6ZSgpO1xyXG4gICAgLy8g0J/QtdGA0LLQvtC90LDRh9Cw0LvRjNC90YvQuSDRgNCw0YHRh9C10YJcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZXNpemUoKSwgMCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmNsZWFudXAoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBBdXRvUmVzaXplKCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9zaXplKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgdGV4dGFyZWEgPSB0aGlzLmVsZW0ubmF0aXZlRWxlbWVudCBhcyBIVE1MVGV4dEFyZWFFbGVtZW50O1xyXG4gICAgXHJcbiAgICAvLyDQmNGB0L/QvtC70YzQt9GD0LXQvCBNdXRhdGlvbk9ic2VydmVyINCy0LzQtdGB0YLQviBuZ0RvQ2hlY2tcclxuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAgICAgdGhpcy5vYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHtcclxuICAgICAgICB0aGlzLnNjaGVkdWxlUmVzaXplKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBcclxuICAgICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKHRleHRhcmVhLCB7XHJcbiAgICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcclxuICAgICAgICBjaGlsZExpc3Q6IHRydWUsXHJcbiAgICAgICAgc3VidHJlZTogdHJ1ZVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vINCi0LDQutC20LUg0YHQu9C10LTQuNC8INC30LAgcmVzaXplINC+0LrQvdCwXHJcbiAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ3Jlc2l6ZScsICgpID0+IHRoaXMuc2NoZWR1bGVSZXNpemUoKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNjaGVkdWxlUmVzaXplKCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9zaXplKSByZXR1cm47XHJcblxyXG4gICAgLy8gRGVib3VuY2Ug0LTQu9GPINC+0L/RgtC40LzQuNC30LDRhtC40LhcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLnJlc2l6ZVRpbWVvdXQpO1xyXG4gICAgdGhpcy5yZXNpemVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB0aGlzLnJlc2l6ZSgpKTtcclxuICAgIH0sIDUwKTsgLy8g0JfQsNC00LXRgNC20LrQsCA1MNC80YFcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2lucHV0JylcclxuICBwcml2YXRlIG9uSW5wdXQoKSB7XHJcbiAgICB0aGlzLnNjaGVkdWxlUmVzaXplKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2l6ZSgpIHtcclxuICAgIGlmICghdGhpcy5hdXRvc2l6ZSkge1xyXG4gICAgICB0aGlzLm92ZXJmbG93ID0gJ2F1dG8nO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdGV4dGFyZWEgPSB0aGlzLmVsZW0ubmF0aXZlRWxlbWVudCBhcyBIVE1MVGV4dEFyZWFFbGVtZW50O1xyXG4gICAgXHJcbiAgICAvLyDQktGA0LXQvNC10L3QvdC+INC+0YLQutC70Y7Rh9Cw0LXQvCB0cmFuc2l0aW9uINC00LvRjyDQv9GA0LXQtNC+0YLQstGA0LDRidC10L3QuNGPINGB0LrQsNGH0LrQvtCyXHJcbiAgICBjb25zdCBvcmlnaW5hbFRyYW5zaXRpb24gPSB0ZXh0YXJlYS5zdHlsZS50cmFuc2l0aW9uO1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0ZXh0YXJlYSwgJ3RyYW5zaXRpb24nLCAnbm9uZScpO1xyXG4gICAgXHJcbiAgICAvLyDQoNCw0YHRgdGH0LjRgtGL0LLQsNC10Lwg0L3QvtCy0YPRjiDQstGL0YHQvtGC0YNcclxuICAgIGNvbnN0IGJvcmRlckhlaWdodCA9IHRleHRhcmVhLm9mZnNldEhlaWdodCAtIHRleHRhcmVhLmNsaWVudEhlaWdodDtcclxuICAgIHRoaXMuc2V0SGVpZ2h0KCdhdXRvJyk7XHJcbiAgICBjb25zdCBzY3JvbGxIZWlnaHQgPSB0ZXh0YXJlYS5zY3JvbGxIZWlnaHQ7XHJcbiAgICBjb25zdCBuZXdIZWlnaHQgPSBzY3JvbGxIZWlnaHQgKyBib3JkZXJIZWlnaHQ7XHJcbiAgICBcclxuICAgIC8vINCY0LfQvNC10L3Rj9C10Lwg0LLRi9GB0L7RgtGDINGC0L7Qu9GM0LrQviDQtdGB0LvQuCDQvtC90LAg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0LjQt9C80LXQvdC40LvQsNGB0YxcclxuICAgIGlmIChNYXRoLmFicyhuZXdIZWlnaHQgLSB0aGlzLmxhc3RIZWlnaHQpID4gMikgeyAvLyDQn9C+0YDQvtCzIDJweFxyXG4gICAgICB0aGlzLnNldEhlaWdodChgJHtuZXdIZWlnaHR9cHhgKTtcclxuICAgICAgdGhpcy5sYXN0SGVpZ2h0ID0gbmV3SGVpZ2h0O1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyDQktC+0YHRgdGC0LDQvdCw0LLQu9C40LLQsNC10LwgdHJhbnNpdGlvblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGV4dGFyZWEsICd0cmFuc2l0aW9uJywgb3JpZ2luYWxUcmFuc2l0aW9uKTtcclxuICAgIH0sIDApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRIZWlnaHQodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW0ubmF0aXZlRWxlbWVudCwgJ2hlaWdodCcsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYW51cCgpIHtcclxuICAgIGlmICh0aGlzLm9ic2VydmVyKSB7XHJcbiAgICAgIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgICB0aGlzLm9ic2VydmVyID0gbnVsbDtcclxuICAgIH1cclxuICAgIGNsZWFyVGltZW91dCh0aGlzLnJlc2l6ZVRpbWVvdXQpO1xyXG4gIH1cclxufSJdfQ==
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b3NpemUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGEtdWkvc3JjL2xpYi9kaXJlY3RpdmVzL2F1dG9zaXplL2F1dG9zaXplLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBYyxXQUFXLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDOztBQVdwRyxNQUFNLE9BQU8saUJBQWlCO0lBYVI7SUFBMEI7SUFYdkMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUlwQixJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBR1QsUUFBUSxHQUFHLElBQUksQ0FBQztJQUVmLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFFOUIsWUFBb0IsSUFBZ0IsRUFBVSxRQUFtQjtRQUE3QyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVztJQUFHLENBQUM7SUFFOUQsZUFBZTtRQUNwQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsOEJBQThCO0lBQ3BFLENBQUM7SUFFTSxPQUFPO1FBQ1osSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDaEIsQ0FBQztJQUNILENBQUM7SUFFTyxNQUFNO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztZQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFvQyxDQUFDO1FBRWhFLHFDQUFxQztRQUNyQyxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQ3JDLE1BQU0sa0JBQWtCLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDckQsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUVqRCxzREFBc0Q7UUFDdEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRXZELDRDQUE0QztRQUM1QyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRW5ELDRCQUE0QjtRQUM1QixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDbkUsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQztRQUMzQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUN4QixRQUFRLENBQUMsWUFBWSxFQUFFLHFCQUFxQjtRQUM1QyxZQUFZLEdBQUcsWUFBWSxDQUM1QixDQUFDO1FBRUYsNkJBQTZCO1FBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsR0FBRyxTQUFTLElBQUksQ0FBQyxDQUFDO1FBRTdELHdCQUF3QjtRQUN4QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBQ25FLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUNqRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBRU8sU0FBUyxDQUFDLEtBQWE7UUFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25FLENBQUM7d0dBbkVVLGlCQUFpQjs0RkFBakIsaUJBQWlCOzs0RkFBakIsaUJBQWlCO2tCQVQ3QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO29CQUN6QixJQUFJLEVBQUU7d0JBQ0osU0FBUyxFQUFFLFdBQVc7d0JBQ3RCLFNBQVMsRUFBRSxXQUFXO3dCQUN0QixPQUFPLEVBQUUsV0FBVzt3QkFDcEIsVUFBVSxFQUFFLFdBQVc7cUJBQ3hCO2lCQUNGO3VHQUdRLFFBQVE7c0JBRGQsV0FBVzt1QkFBQyxnQkFBZ0I7Z0JBS3RCLElBQUk7c0JBRlYsS0FBSzs7c0JBQ0wsV0FBVzt1QkFBQyxNQUFNO2dCQUlaLFFBQVE7c0JBRGQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIElucHV0LCBSZW5kZXJlcjIgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbbXJ4QXV0b3NpemVdJyxcclxuICBob3N0OiB7XHJcbiAgICAnKGlucHV0KSc6ICdvbklucHV0KCknLFxyXG4gICAgJyhwYXN0ZSknOiAnb25JbnB1dCgpJyxcclxuICAgICcoY3V0KSc6ICdvbklucHV0KCknLFxyXG4gICAgJyhjaGFuZ2UpJzogJ29uSW5wdXQoKSdcclxuICB9XHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRvc2l6ZURpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG4gIEBIb3N0QmluZGluZygnc3R5bGUub3ZlcmZsb3cnKVxyXG4gIHB1YmxpYyBvdmVyZmxvdyA9ICdoaWRkZW4nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIEBIb3N0QmluZGluZygncm93cycpXHJcbiAgcHVibGljIHJvd3MgPSAxO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBhdXRvc2l6ZSA9IHRydWU7XHJcblxyXG4gIHByaXZhdGUgaXNJbml0aWFsaXplZCA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW06IEVsZW1lbnRSZWYsIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMikge31cclxuXHJcbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVzaXplKCksIDApOyAvLyDQmNC90LjRhtC40LDQu9C40LfQsNGG0LjRjyDQv9C+0YHQu9C1INGA0LXQvdC00LXRgNCwXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25JbnB1dCgpIHtcclxuICAgIGlmICh0aGlzLmF1dG9zaXplICYmIHRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNpemUoKSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b3NpemUpIHtcclxuICAgICAgdGhpcy5vdmVyZmxvdyA9ICdhdXRvJztcclxuICAgICAgdGhpcy5zZXRIZWlnaHQoJ2F1dG8nKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRleHRhcmVhID0gdGhpcy5lbGVtLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcclxuICAgIFxyXG4gICAgLy8g0KHQvtGF0YDQsNC90Y/QtdC8INGC0LXQutGD0YnQtdC1INC30L3QsNGH0LXQvdC40LUg0Lgg0YHRgtC40LvQuFxyXG4gICAgY29uc3Qgb3JpZ2luYWxWYWx1ZSA9IHRleHRhcmVhLnZhbHVlO1xyXG4gICAgY29uc3Qgb3JpZ2luYWxUcmFuc2l0aW9uID0gdGV4dGFyZWEuc3R5bGUudHJhbnNpdGlvbjtcclxuICAgIGNvbnN0IG9yaWdpbmFsT3ZlcmZsb3cgPSB0ZXh0YXJlYS5zdHlsZS5vdmVyZmxvdztcclxuICAgIFxyXG4gICAgLy8g0JLRgNC10LzQtdC90L3QviDRg9Cx0LjRgNCw0LXQvCB0cmFuc2l0aW9uINC00LvRjyDQvNCz0L3QvtCy0LXQvdC90L7Qs9C+INGA0LDRgdGH0LXRgtCwXHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRleHRhcmVhLCAndHJhbnNpdGlvbicsICdub25lJyk7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRleHRhcmVhLCAnb3ZlcmZsb3cnLCAnaGlkZGVuJyk7XHJcbiAgICBcclxuICAgIC8vINCh0LHRgNCw0YHRi9Cy0LDQtdC8INCy0YvRgdC+0YLRgyDQtNC70Y8g0LrQvtGA0YDQtdC60YLQvdC+0LPQviDRgNCw0YHRh9C10YLQsFxyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0ZXh0YXJlYSwgJ2hlaWdodCcsICdhdXRvJyk7XHJcbiAgICBcclxuICAgIC8vINCg0LDRgdGB0YfQuNGC0YvQstCw0LXQvCDQvdC+0LLRg9GOINCy0YvRgdC+0YLRg1xyXG4gICAgY29uc3QgYm9yZGVySGVpZ2h0ID0gdGV4dGFyZWEub2Zmc2V0SGVpZ2h0IC0gdGV4dGFyZWEuY2xpZW50SGVpZ2h0O1xyXG4gICAgY29uc3Qgc2Nyb2xsSGVpZ2h0ID0gdGV4dGFyZWEuc2Nyb2xsSGVpZ2h0O1xyXG4gICAgY29uc3QgbmV3SGVpZ2h0ID0gTWF0aC5tYXgoXHJcbiAgICAgIHRleHRhcmVhLmNsaWVudEhlaWdodCwgLy8g0LzQuNC90LjQvNCw0LvRjNC90LDRjyDQstGL0YHQvtGC0LBcclxuICAgICAgc2Nyb2xsSGVpZ2h0ICsgYm9yZGVySGVpZ2h0XHJcbiAgICApO1xyXG4gICAgXHJcbiAgICAvLyDQo9GB0YLQsNC90LDQstC70LjQstCw0LXQvCDQvdC+0LLRg9GOINCy0YvRgdC+0YLRg1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0ZXh0YXJlYSwgJ2hlaWdodCcsIGAke25ld0hlaWdodH1weGApO1xyXG4gICAgXHJcbiAgICAvLyDQktC+0YHRgdGC0LDQvdCw0LLQu9C40LLQsNC10Lwg0YHRgtC40LvQuFxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGV4dGFyZWEsICd0cmFuc2l0aW9uJywgb3JpZ2luYWxUcmFuc2l0aW9uKTtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0ZXh0YXJlYSwgJ292ZXJmbG93Jywgb3JpZ2luYWxPdmVyZmxvdyk7XHJcbiAgICB9LCAwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0SGVpZ2h0KHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtLm5hdGl2ZUVsZW1lbnQsICdoZWlnaHQnLCB2YWx1ZSk7XHJcbiAgfVxyXG59Il19