ngx-image-cropper 9.1.1 → 9.1.3

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.
@@ -3,6 +3,7 @@ import { checkCropperPosition } from '../utils/cropper-position.utils';
3
3
  export class CropperState {
4
4
  constructor() {
5
5
  this.cropper = signal({ x1: 0, x2: 0, y1: 0, y2: 0 });
6
+ this.maxSize = signal({ width: 0, height: 0 });
6
7
  this.transform = {};
7
8
  this.options = {
8
9
  format: 'png',
@@ -23,7 +24,7 @@ export class CropperState {
23
24
  roundCropper: false,
24
25
  onlyScaleDown: false,
25
26
  imageQuality: 92,
26
- backgroundColor: null,
27
+ backgroundColor: undefined,
27
28
  containWithinAspectRatio: false,
28
29
  hideResizeSquares: false,
29
30
  alignImage: 'center',
@@ -92,7 +93,7 @@ export class CropperState {
92
93
  }
93
94
  }
94
95
  setMaxSize(width, height) {
95
- this.maxSize = { width, height };
96
+ this.maxSize.set({ width, height });
96
97
  this.setCropperScaledMinSize();
97
98
  this.setCropperScaledMaxSize();
98
99
  }
@@ -108,7 +109,7 @@ export class CropperState {
108
109
  }
109
110
  setCropperScaledMinWidth() {
110
111
  this.cropperScaledMinWidth = this.options.cropperMinWidth > 0
111
- ? Math.max(20, this.options.cropperMinWidth / this.loadedImage.transformed.size.width * this.maxSize.width)
112
+ ? Math.max(20, this.options.cropperMinWidth / this.loadedImage.transformed.size.width * this.maxSize().width)
112
113
  : 20;
113
114
  }
114
115
  setCropperScaledMinHeight() {
@@ -116,7 +117,7 @@ export class CropperState {
116
117
  this.cropperScaledMinHeight = Math.max(20, this.cropperScaledMinWidth / this.options.aspectRatio);
117
118
  }
118
119
  else if (this.options.cropperMinHeight > 0) {
119
- this.cropperScaledMinHeight = Math.max(20, this.options.cropperMinHeight / this.loadedImage.transformed.size.height * this.maxSize.height);
120
+ this.cropperScaledMinHeight = Math.max(20, this.options.cropperMinHeight / this.loadedImage.transformed.size.height * this.maxSize().height);
120
121
  }
121
122
  else {
122
123
  this.cropperScaledMinHeight = 20;
@@ -124,9 +125,9 @@ export class CropperState {
124
125
  }
125
126
  setCropperScaledMaxSize() {
126
127
  if (this.loadedImage?.transformed.size) {
127
- const ratio = this.loadedImage.transformed.size.width / this.maxSize.width;
128
- this.cropperScaledMaxWidth = this.options.cropperMaxWidth > 20 ? this.options.cropperMaxWidth / ratio : this.maxSize.width;
129
- this.cropperScaledMaxHeight = this.options.cropperMaxHeight > 20 ? this.options.cropperMaxHeight / ratio : this.maxSize.height;
128
+ const ratio = this.loadedImage.transformed.size.width / this.maxSize().width;
129
+ this.cropperScaledMaxWidth = this.options.cropperMaxWidth > 20 ? this.options.cropperMaxWidth / ratio : this.maxSize().width;
130
+ this.cropperScaledMaxHeight = this.options.cropperMaxHeight > 20 ? this.options.cropperMaxHeight / ratio : this.maxSize().height;
130
131
  if (this.options.maintainAspectRatio) {
131
132
  if (this.cropperScaledMaxWidth > this.cropperScaledMaxHeight * this.options.aspectRatio) {
132
133
  this.cropperScaledMaxWidth = this.cropperScaledMaxHeight * this.options.aspectRatio;
@@ -137,8 +138,8 @@ export class CropperState {
137
138
  }
138
139
  }
139
140
  else {
140
- this.cropperScaledMaxWidth = this.maxSize.width;
141
- this.cropperScaledMaxHeight = this.maxSize.height;
141
+ this.cropperScaledMaxWidth = this.maxSize().width;
142
+ this.cropperScaledMaxHeight = this.maxSize().height;
142
143
  }
143
144
  }
144
145
  equalsCropperPosition(cropper) {
@@ -167,12 +168,12 @@ export class CropperState {
167
168
  return currentCropAspectRatio === this.options.aspectRatio;
168
169
  }
169
170
  resizeCropperPosition(oldMaxSize) {
170
- if (oldMaxSize.width !== this.maxSize.width || oldMaxSize.height !== this.maxSize.height) {
171
+ if (oldMaxSize.width !== this.maxSize().width || oldMaxSize.height !== this.maxSize().height) {
171
172
  this.cropper.update(cropper => ({
172
- x1: cropper.x1 * this.maxSize.width / oldMaxSize.width,
173
- x2: cropper.x2 * this.maxSize.width / oldMaxSize.width,
174
- y1: cropper.y1 * this.maxSize.height / oldMaxSize.height,
175
- y2: cropper.y2 * this.maxSize.height / oldMaxSize.height
173
+ x1: cropper.x1 * this.maxSize().width / oldMaxSize.width,
174
+ x2: cropper.x2 * this.maxSize().width / oldMaxSize.width,
175
+ y1: cropper.y1 * this.maxSize().height / oldMaxSize.height,
176
+ y2: cropper.y2 * this.maxSize().height / oldMaxSize.height
176
177
  }));
177
178
  }
178
179
  }
@@ -180,9 +181,18 @@ export class CropperState {
180
181
  return {
181
182
  x1: 0,
182
183
  y1: 0,
183
- x2: this.maxSize.width,
184
- y2: this.maxSize.height
184
+ x2: this.maxSize().width,
185
+ y2: this.maxSize().height
186
+ };
187
+ }
188
+ toCropInput() {
189
+ return {
190
+ cropper: this.cropper(),
191
+ maxSize: this.maxSize(),
192
+ transform: this.transform,
193
+ loadedImage: this.loadedImage,
194
+ options: { ...this.options }
185
195
  };
186
196
  }
187
197
  }
188
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JvcHBlci5zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1pbWFnZS1jcm9wcGVyL3NyYy9saWIvY29tcG9uZW50L2Nyb3BwZXIuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFdkUsTUFBTSxPQUFPLFlBQVk7SUFBekI7UUFFVyxZQUFPLEdBQUcsTUFBTSxDQUFrQixFQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDO1FBSXpFLGNBQVMsR0FBbUIsRUFBRSxDQUFDO1FBQy9CLFlBQU8sR0FBbUI7WUFDeEIsTUFBTSxFQUFFLEtBQUs7WUFDYixNQUFNLEVBQUUsTUFBTTtZQUNkLFFBQVEsRUFBRSxJQUFJO1lBQ2QsbUJBQW1CLEVBQUUsSUFBSTtZQUN6QixXQUFXLEVBQUUsQ0FBQztZQUNkLDRCQUE0QixFQUFFLElBQUk7WUFDbEMsYUFBYSxFQUFFLENBQUM7WUFDaEIsY0FBYyxFQUFFLENBQUM7WUFDakIsZUFBZSxFQUFFLENBQUM7WUFDbEIsZ0JBQWdCLEVBQUUsQ0FBQztZQUNuQixnQkFBZ0IsRUFBRSxDQUFDO1lBQ25CLGVBQWUsRUFBRSxDQUFDO1lBQ2xCLGtCQUFrQixFQUFFLENBQUM7WUFDckIsbUJBQW1CLEVBQUUsQ0FBQztZQUN0QixjQUFjLEVBQUUsQ0FBQztZQUNqQixZQUFZLEVBQUUsS0FBSztZQUNuQixhQUFhLEVBQUUsS0FBSztZQUNwQixZQUFZLEVBQUUsRUFBRTtZQUNoQixlQUFlLEVBQUUsSUFBSTtZQUNyQix3QkFBd0IsRUFBRSxLQUFLO1lBQy9CLGlCQUFpQixFQUFFLEtBQUs7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QUFLLEdBQUcsVUFBVSxDQUFDLEtBQUs7Z0JBQ3ZELEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFRLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNO2dCQUN6RCxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBUSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTTthQUMxRCxDQUFDLENBQUMsQ0FBQztRQUNOLENBQUM7SUFDSCxDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLE9BQU87WUFDTCxFQUFFLEVBQUUsQ0FBQztZQUNMLEVBQUUsRUFBRSxDQUFDO1lBQ0wsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsS0FBSztZQUN2QixFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxNQUFNO1NBQ3pCLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDcm9wcGVyT3B0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMvY3JvcHBlci1vcHRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDcm9wcGVyUG9zaXRpb24sIERpbWVuc2lvbnMsIEltYWdlVHJhbnNmb3JtLCBMb2FkZWRJbWFnZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgc2lnbmFsLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjaGVja0Nyb3BwZXJQb3NpdGlvbiB9IGZyb20gJy4uL3V0aWxzL2Nyb3BwZXItcG9zaXRpb24udXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgQ3JvcHBlclN0YXRlIHtcblxuICByZWFkb25seSBjcm9wcGVyID0gc2lnbmFsPENyb3BwZXJQb3NpdGlvbj4oe3gxOiAwLCB4MjogMCwgeTE6IDAsIHkyOiAwfSk7XG5cbiAgbG9hZGVkSW1hZ2U/OiBMb2FkZWRJbWFnZTtcbiAgbWF4U2l6ZT86IERpbWVuc2lvbnM7XG4gIHRyYW5zZm9ybTogSW1hZ2VUcmFuc2Zvcm0gPSB7fTtcbiAgb3B0aW9uczogQ3JvcHBlck9wdGlvbnMgPSB7XG4gICAgZm9ybWF0OiAncG5nJyxcbiAgICBvdXRwdXQ6ICdibG9iJyxcbiAgICBhdXRvQ3JvcDogdHJ1ZSxcbiAgICBtYWludGFpbkFzcGVjdFJhdGlvOiB0cnVlLFxuICAgIGFzcGVjdFJhdGlvOiAxLFxuICAgIHJlc2V0Q3JvcE9uQXNwZWN0UmF0aW9DaGFuZ2U6IHRydWUsXG4gICAgcmVzaXplVG9XaWR0aDogMCxcbiAgICByZXNpemVUb0hlaWdodDogMCxcbiAgICBjcm9wcGVyTWluV2lkdGg6IDAsXG4gICAgY3JvcHBlck1pbkhlaWdodDogMCxcbiAgICBjcm9wcGVyTWF4SGVpZ2h0OiAwLFxuICAgIGNyb3BwZXJNYXhXaWR0aDogMCxcbiAgICBjcm9wcGVyU3RhdGljV2lkdGg6IDAsXG4gICAgY3JvcHBlclN0YXRpY0hlaWdodDogMCxcbiAgICBjYW52YXNSb3RhdGlvbjogMCxcbiAgICByb3VuZENyb3BwZXI6IGZhbHNlLFxuICAgIG9ubHlTY2FsZURvd246IGZhbHNlLFxuICAgIGltYWdlUXVhbGl0eTogOTIsXG4gICAgYmFja2dyb3VuZENvbG9yOiBudWxsLFxuICAgIGNvbnRhaW5XaXRoaW5Bc3BlY3RSYXRpbzogZmFsc2UsXG4gICAgaGlkZVJlc2l6ZVNxdWFyZXM6IGZhbHNlLFxuICAgIGFsaWduSW1hZ2U6ICdjZW50ZXInLFxuICAgIGNyb3BwZXJGcmFtZUFyaWFMYWJlbDogdW5kZWZpbmVkLFxuICAgIGNoZWNrSW1hZ2VUeXBlOiB0cnVlXG4gIH07XG5cbiAgLy8gSW50ZXJuYWxcbiAgY3JvcHBlclNjYWxlZE1pbldpZHRoID0gMjA7XG4gIGNyb3BwZXJTY2FsZWRNaW5IZWlnaHQgPSAyMDtcbiAgY3JvcHBlclNjYWxlZE1heFdpZHRoID0gMjA7XG4gIGNyb3BwZXJTY2FsZWRNYXhIZWlnaHQgPSAyMDtcbiAgc3RlcFNpemUgPSAzO1xuXG4gIHNldE9wdGlvbnNGcm9tQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ29wdGlvbnMnXT8uY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLnNldE9wdGlvbnMoY2hhbmdlc1snb3B0aW9ucyddLmN1cnJlbnRWYWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IG9wdGlvbnMgPSBPYmplY3QuZW50cmllcyhjaGFuZ2VzKVxuICAgICAgLmZpbHRlcigoW2tleV0pID0+IGtleSBpbiB0aGlzLm9wdGlvbnMpXG4gICAgICAucmVkdWNlKChhY2MsIFtrZXksIGNoYW5nZV0pID0+ICh7XG4gICAgICAgIC4uLmFjYyxcbiAgICAgICAgW2tleV06IGNoYW5nZS5jdXJyZW50VmFsdWVcbiAgICAgIH0pLCB7fSBhcyBQYXJ0aWFsPENyb3BwZXJPcHRpb25zPik7XG4gICAgaWYgKE9iamVjdC5rZXlzKG9wdGlvbnMpLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBzZXRPcHRpb25zKG9wdGlvbnM6IFBhcnRpYWw8Q3JvcHBlck9wdGlvbnM+KTogdm9pZCB7XG4gICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgLi4udGhpcy5vcHRpb25zLFxuICAgICAgLi4uKG9wdGlvbnMgfHwge30pXG4gICAgfTtcbiAgICB0aGlzLnZhbGlkYXRlT3B0aW9ucygpO1xuXG4gICAgaWYgKCF0aGlzLmxvYWRlZEltYWdlPy50cmFuc2Zvcm1lZC5pbWFnZS5jb21wbGV0ZSB8fCAhdGhpcy5tYXhTaXplKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHBvc2l0aW9uUG9zc2libHlDaGFuZ2VkID0gZmFsc2U7XG4gICAgaWYgKCh0aGlzLm9wdGlvbnMubWFpbnRhaW5Bc3BlY3RSYXRpbyAmJiBvcHRpb25zWydhc3BlY3RSYXRpbyddKSB8fCAnbWFpbnRhaW5Bc3BlY3RSYXRpbycgaW4gb3B0aW9ucykge1xuICAgICAgdGhpcy5zZXRDcm9wcGVyU2NhbGVkTWluU2l6ZSgpO1xuICAgICAgdGhpcy5zZXRDcm9wcGVyU2NhbGVkTWF4U2l6ZSgpO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5tYWludGFpbkFzcGVjdFJhdGlvICYmICh0aGlzLm9wdGlvbnMucmVzZXRDcm9wT25Bc3BlY3RSYXRpb0NoYW5nZSB8fCAhdGhpcy5hc3BlY3RSYXRpb0lzQ29ycmVjdCgpKSkge1xuICAgICAgICB0aGlzLmNyb3BwZXIuc2V0KHRoaXMubWF4U2l6ZUNyb3BwZXJQb3NpdGlvbigpKTtcbiAgICAgICAgcG9zaXRpb25Qb3NzaWJseUNoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3B0aW9uc1snY3JvcHBlck1pbldpZHRoJ10gfHwgb3B0aW9uc1snY3JvcHBlck1pbkhlaWdodCddKSB7XG4gICAgICAgIHRoaXMuc2V0Q3JvcHBlclNjYWxlZE1pblNpemUoKTtcbiAgICAgICAgcG9zaXRpb25Qb3NzaWJseUNoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnNbJ2Nyb3BwZXJNYXhXaWR0aCddIHx8IG9wdGlvbnNbJ2Nyb3BwZXJNYXhIZWlnaHQnXSkge1xuICAgICAgICB0aGlzLnNldENyb3BwZXJTY2FsZWRNYXhTaXplKCk7XG4gICAgICAgIHBvc2l0aW9uUG9zc2libHlDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zWydjcm9wcGVyU3RhdGljV2lkdGgnXSB8fCBvcHRpb25zWydjcm9wcGVyU3RhdGljSGVpZ2h0J10pIHtcbiAgICAgICAgcG9zaXRpb25Qb3NzaWJseUNoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwb3NpdGlvblBvc3NpYmx5Q2hhbmdlZCkge1xuICAgICAgdGhpcy5jcm9wcGVyLnVwZGF0ZSgoY3JvcHBlcikgPT4gY2hlY2tDcm9wcGVyUG9zaXRpb24oY3JvcHBlciwgdGhpcywgZmFsc2UpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlT3B0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLm1haW50YWluQXNwZWN0UmF0aW8gJiYgIXRoaXMub3B0aW9ucy5hc3BlY3RSYXRpbykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdgYXNwZWN0UmF0aW9gIHNob3VsZCA+IDAgd2hlbiBgbWFpbnRhaW5Bc3BlY3RSYXRpb2AgaXMgZW5hYmxlZCcpO1xuICAgIH1cbiAgfVxuXG4gIHNldE1heFNpemUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLm1heFNpemUgPSB7d2lkdGgsIGhlaWdodH07XG4gICAgdGhpcy5zZXRDcm9wcGVyU2NhbGVkTWluU2l6ZSgpO1xuICAgIHRoaXMuc2V0Q3JvcHBlclNjYWxlZE1heFNpemUoKTtcbiAgfVxuXG4gIHNldENyb3BwZXJTY2FsZWRNaW5TaXplKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxvYWRlZEltYWdlPy50cmFuc2Zvcm1lZC5zaXplKSB7XG4gICAgICB0aGlzLnNldENyb3BwZXJTY2FsZWRNaW5XaWR0aCgpO1xuICAgICAgdGhpcy5zZXRDcm9wcGVyU2NhbGVkTWluSGVpZ2h0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3JvcHBlclNjYWxlZE1pbldpZHRoID0gMjA7XG4gICAgICB0aGlzLmNyb3BwZXJTY2FsZWRNaW5IZWlnaHQgPSAyMDtcbiAgICB9XG4gIH1cblxuICBzZXRDcm9wcGVyU2NhbGVkTWluV2lkdGgoKTogdm9pZCB7XG4gICAgdGhpcy5jcm9wcGVyU2NhbGVkTWluV2lkdGggPSB0aGlzLm9wdGlvbnMuY3JvcHBlck1pbldpZHRoID4gMFxuICAgICAgPyBNYXRoLm1heCgyMCwgdGhpcy5vcHRpb25zLmNyb3BwZXJNaW5XaWR0aCAvIHRoaXMubG9hZGVkSW1hZ2UhLnRyYW5zZm9ybWVkLnNpemUud2lkdGggKiB0aGlzLm1heFNpemUhLndpZHRoKVxuICAgICAgOiAyMDtcbiAgfVxuXG4gIHNldENyb3BwZXJTY2FsZWRNaW5IZWlnaHQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5tYWludGFpbkFzcGVjdFJhdGlvKSB7XG4gICAgICB0aGlzLmNyb3BwZXJTY2FsZWRNaW5IZWlnaHQgPSBNYXRoLm1heCgyMCwgdGhpcy5jcm9wcGVyU2NhbGVkTWluV2lkdGggLyB0aGlzLm9wdGlvbnMuYXNwZWN0UmF0aW8pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLmNyb3BwZXJNaW5IZWlnaHQgPiAwKSB7XG4gICAgICB0aGlzLmNyb3BwZXJTY2FsZWRNaW5IZWlnaHQgPSBNYXRoLm1heChcbiAgICAgICAgMjAsXG4gICAgICAgIHRoaXMub3B0aW9ucy5jcm9wcGVyTWluSGVpZ2h0IC8gdGhpcy5sb2FkZWRJbWFnZSEudHJhbnNmb3JtZWQuc2l6ZS5oZWlnaHQgKiB0aGlzLm1heFNpemUhLmhlaWdodFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jcm9wcGVyU2NhbGVkTWluSGVpZ2h0ID0gMjA7XG4gICAgfVxuICB9XG5cbiAgc2V0Q3JvcHBlclNjYWxlZE1heFNpemUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubG9hZGVkSW1hZ2U/LnRyYW5zZm9ybWVkLnNpemUpIHtcbiAgICAgIGNvbnN0IHJhdGlvID0gdGhpcy5sb2FkZWRJbWFnZS50cmFuc2Zvcm1lZC5zaXplLndpZHRoIC8gdGhpcy5tYXhTaXplIS53aWR0aDtcbiAgICAgIHRoaXMuY3JvcHBlclNjYWxlZE1heFdpZHRoID0gdGhpcy5vcHRpb25zLmNyb3BwZXJNYXhXaWR0aCA+IDIwID8gdGhpcy5vcHRpb25zLmNyb3BwZXJNYXhXaWR0aCAvIHJhdGlvIDogdGhpcy5tYXhTaXplIS53aWR0aDtcbiAgICAgIHRoaXMuY3JvcHBlclNjYWxlZE1heEhlaWdodCA9IHRoaXMub3B0aW9ucy5jcm9wcGVyTWF4SGVpZ2h0ID4gMjAgPyB0aGlzLm9wdGlvbnMuY3JvcHBlck1heEhlaWdodCAvIHJhdGlvIDogdGhpcy5tYXhTaXplIS5oZWlnaHQ7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm1haW50YWluQXNwZWN0UmF0aW8pIHtcbiAgICAgICAgaWYgKHRoaXMuY3JvcHBlclNjYWxlZE1heFdpZHRoID4gdGhpcy5jcm9wcGVyU2NhbGVkTWF4SGVpZ2h0ICogdGhpcy5vcHRpb25zLmFzcGVjdFJhdGlvKSB7XG4gICAgICAgICAgdGhpcy5jcm9wcGVyU2NhbGVkTWF4V2lkdGggPSB0aGlzLmNyb3BwZXJTY2FsZWRNYXhIZWlnaHQgKiB0aGlzLm9wdGlvbnMuYXNwZWN0UmF0aW87XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jcm9wcGVyU2NhbGVkTWF4V2lkdGggPCB0aGlzLmNyb3BwZXJTY2FsZWRNYXhIZWlnaHQgKiB0aGlzLm9wdGlvbnMuYXNwZWN0UmF0aW8pIHtcbiAgICAgICAgICB0aGlzLmNyb3BwZXJTY2FsZWRNYXhIZWlnaHQgPSB0aGlzLmNyb3BwZXJTY2FsZWRNYXhXaWR0aCAvIHRoaXMub3B0aW9ucy5hc3BlY3RSYXRpbztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNyb3BwZXJTY2FsZWRNYXhXaWR0aCA9IHRoaXMubWF4U2l6ZSEud2lkdGg7XG4gICAgICB0aGlzLmNyb3BwZXJTY2FsZWRNYXhIZWlnaHQgPSB0aGlzLm1heFNpemUhLmhlaWdodDtcbiAgICB9XG4gIH1cblxuICBlcXVhbHNDcm9wcGVyUG9zaXRpb24oY3JvcHBlcj86IENyb3BwZXJQb3NpdGlvbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGxvY2FsQ3JvcHBlciA9IHRoaXMuY3JvcHBlcigpO1xuICAgIHJldHVybiBsb2NhbENyb3BwZXIgPT0gbnVsbCAmJiBjcm9wcGVyID09IG51bGxcbiAgICAgIHx8IGxvY2FsQ3JvcHBlciAhPSBudWxsICYmIGNyb3BwZXIgIT0gbnVsbFxuICAgICAgJiYgbG9jYWxDcm9wcGVyLngxLnRvRml4ZWQoMykgPT09IGNyb3BwZXIueDEudG9GaXhlZCgzKVxuICAgICAgJiYgbG9jYWxDcm9wcGVyLnkxLnRvRml4ZWQoMykgPT09IGNyb3BwZXIueTEudG9GaXhlZCgzKVxuICAgICAgJiYgbG9jYWxDcm9wcGVyLngyLnRvRml4ZWQoMykgPT09IGNyb3BwZXIueDIudG9GaXhlZCgzKVxuICAgICAgJiYgbG9jYWxDcm9wcGVyLnkyLnRvRml4ZWQoMykgPT09IGNyb3BwZXIueTIudG9GaXhlZCgzKTtcbiAgfVxuXG4gIGVxdWFsc1RyYW5zZm9ybVRyYW5zbGF0ZSh0cmFuc2Zvcm06IEltYWdlVHJhbnNmb3JtKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLnRyYW5zZm9ybS50cmFuc2xhdGVIID8/IDApID09PSAodHJhbnNmb3JtLnRyYW5zbGF0ZUggPz8gMClcbiAgICAgICYmICh0aGlzLnRyYW5zZm9ybS50cmFuc2xhdGVWID8/IDApID09PSAodHJhbnNmb3JtLnRyYW5zbGF0ZVYgPz8gMCk7XG4gIH1cblxuICBlcXVhbHNUcmFuc2Zvcm0odHJhbnNmb3JtOiBJbWFnZVRyYW5zZm9ybSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVxdWFsc1RyYW5zZm9ybVRyYW5zbGF0ZSh0cmFuc2Zvcm0pXG4gICAgICAmJiAodGhpcy50cmFuc2Zvcm0uc2NhbGUgPz8gMSkgPT09ICh0cmFuc2Zvcm0uc2NhbGUgPz8gMSlcbiAgICAgICYmICh0aGlzLnRyYW5zZm9ybS5yb3RhdGUgPz8gMCkgPT09ICh0cmFuc2Zvcm0ucm90YXRlID8/IDApXG4gICAgICAmJiAodGhpcy50cmFuc2Zvcm0uZmxpcEggPz8gZmFsc2UpID09PSAodHJhbnNmb3JtLmZsaXBIID8/IGZhbHNlKVxuICAgICAgJiYgKHRoaXMudHJhbnNmb3JtLmZsaXBWID8/IGZhbHNlKSA9PT0gKHRyYW5zZm9ybS5mbGlwViA/PyBmYWxzZSk7XG4gIH1cblxuICBhc3BlY3RSYXRpb0lzQ29ycmVjdCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBsb2NhbENyb3BwZXIgPSB0aGlzLmNyb3BwZXIoKTtcbiAgICBjb25zdCBjdXJyZW50Q3JvcEFzcGVjdFJhdGlvID0gKGxvY2FsQ3JvcHBlci54MiAtIGxvY2FsQ3JvcHBlci54MSkgLyAobG9jYWxDcm9wcGVyLnkyIC0gbG9jYWxDcm9wcGVyLnkxKTtcbiAgICByZXR1cm4gY3VycmVudENyb3BBc3BlY3RSYXRpbyA9PT0gdGhpcy5vcHRpb25zLmFzcGVjdFJhdGlvO1xuICB9XG5cbiAgcmVzaXplQ3JvcHBlclBvc2l0aW9uKG9sZE1heFNpemU6IERpbWVuc2lvbnMpOiB2b2lkIHtcbiAgICBpZiAob2xkTWF4U2l6ZS53aWR0aCAhPT0gdGhpcy5tYXhTaXplIS53aWR0aCB8fCBvbGRNYXhTaXplLmhlaWdodCAhPT0gdGhpcy5tYXhTaXplIS5oZWlnaHQpIHtcbiAgICAgIHRoaXMuY3JvcHBlci51cGRhdGUoY3JvcHBlciA9PiAoe1xuICAgICAgICB4MTogY3JvcHBlci54MSAqIHRoaXMubWF4U2l6ZSEud2lkdGggLyBvbGRNYXhTaXplLndpZHRoLFxuICAgICAgICB4MjogY3JvcHBlci54MiAqIHRoaXMubWF4U2l6ZSEud2lkdGggLyBvbGRNYXhTaXplLndpZHRoLFxuICAgICAgICB5MTogY3JvcHBlci55MSAqIHRoaXMubWF4U2l6ZSEuaGVpZ2h0IC8gb2xkTWF4U2l6ZS5oZWlnaHQsXG4gICAgICAgIHkyOiBjcm9wcGVyLnkyICogdGhpcy5tYXhTaXplIS5oZWlnaHQgLyBvbGRNYXhTaXplLmhlaWdodFxuICAgICAgfSkpO1xuICAgIH1cbiAgfVxuXG4gIG1heFNpemVDcm9wcGVyUG9zaXRpb24oKTogQ3JvcHBlclBvc2l0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDE6IDAsXG4gICAgICB5MTogMCxcbiAgICAgIHgyOiB0aGlzLm1heFNpemUhLndpZHRoLFxuICAgICAgeTI6IHRoaXMubWF4U2l6ZSEuaGVpZ2h0XG4gICAgfTtcbiAgfVxufVxuIl19
198
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JvcHBlci5zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1pbWFnZS1jcm9wcGVyL3NyYy9saWIvY29tcG9uZW50L2Nyb3BwZXIuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFdkUsTUFBTSxPQUFPLFlBQVk7SUFBekI7UUFFVyxZQUFPLEdBQUcsTUFBTSxDQUFrQixFQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDO1FBR3pFLFlBQU8sR0FBRyxNQUFNLENBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELGNBQVMsR0FBbUIsRUFBRSxDQUFDO1FBQy9CLFlBQU8sR0FBbUI7WUFDeEIsTUFBTSxFQUFFLEtBQUs7WUFDYixNQUFNLEVBQUUsTUFBTTtZQUNkLFFBQVEsRUFBRSxJQUFJO1lBQ2QsbUJBQW1CLEVBQUUsSUFBSTtZQUN6QixXQUFXLEVBQUUsQ0FBQztZQUNkLDRCQUE0QixFQUFFLElBQUk7WUFDbEMsYUFBYSxFQUFFLENBQUM7WUFDaEIsY0FBYyxFQUFFLENBQUM7WUFDakIsZUFBZSxFQUFFLENBQUM7WUFDbEIsZ0JBQWdCLEVBQUUsQ0FBQztZQUNuQixnQkFBZ0IsRUFBRSxDQUFDO1lBQ25CLGVBQWUsRUFBRSxDQUFDO1lBQ2xCLGtCQUFrQixFQUFFLENBQUM7WUFDckIsbUJBQW1CLEVBQUUsQ0FBQztZQUN0QixjQUFjLEVBQUUsQ0FBQztZQUNqQixZQUFZLEVBQUUsS0FBSztZQUNuQixhQUFhLEVBQUUsS0FBSztZQUNwQixZ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O2dCQUM5QixFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLO2dCQUN4RCxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLO2dCQUN4RCxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNO2dCQUMxRCxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNO2FBQzNELENBQUMsQ0FBQyxDQUFDO1FBQ04sQ0FBQztJQUNILENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsT0FBTztZQUNMLEVBQUUsRUFBRSxDQUFDO1lBQ0wsRUFBRSxFQUFFLENBQUM7WUFDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUs7WUFDeEIsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNO1NBQzFCLENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVztRQUNULE9BQU87WUFDTCxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUN2QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUN2QixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFZO1lBQzlCLE9BQU8sRUFBRSxFQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBQztTQUMzQixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ3JvcElucHV0LCBDcm9wcGVyT3B0aW9ucywgQ3JvcHBlclBvc2l0aW9uLCBEaW1lbnNpb25zLCBJbWFnZVRyYW5zZm9ybSwgTG9hZGVkSW1hZ2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IHNpZ25hbCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY2hlY2tDcm9wcGVyUG9zaXRpb24gfSBmcm9tICcuLi91dGlscy9jcm9wcGVyLXBvc2l0aW9uLnV0aWxzJztcblxuZXhwb3J0IGNsYXNzIENyb3BwZXJTdGF0ZSB7XG5cbiAgcmVhZG9ubHkgY3JvcHBlciA9IHNpZ25hbDxDcm9wcGVyUG9zaXRpb24+KHt4MTogMCwgeDI6IDAsIHkxOiAwLCB5MjogMH0pO1xuXG4gIGxvYWRlZEltYWdlPzogTG9hZGVkSW1hZ2U7XG4gIG1heFNpemUgPSBzaWduYWw8RGltZW5zaW9ucz4oeyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0pO1xuICB0cmFuc2Zvcm06IEltYWdlVHJhbnNmb3JtID0ge307XG4gIG9wdGlvbnM6IENyb3BwZXJPcHRpb25zID0ge1xuICAgIGZvcm1hdDogJ3BuZycsXG4gICAgb3V0cHV0OiAnYmxvYicsXG4gICAgYXV0b0Nyb3A6IHRydWUsXG4gICAgbWFpbnRhaW5Bc3BlY3RSYXRpbzogdHJ1ZSxcbiAgICBhc3BlY3RSYXRpbzogMSxcbiAgICByZXNldENyb3BPbkFzcGVjdFJhdGlvQ2hhbmdlOiB0cnVlLFxuICAgIHJlc2l6ZVRvV2lkdGg6IDAsXG4gICAgcmVzaXplVG9IZWlnaHQ6IDAsXG4gICAgY3JvcHBlck1pbldpZHRoOiAwLFxuICAgIGNyb3BwZXJNaW5IZWlnaHQ6IDAsXG4gICAgY3JvcHBlck1heEhlaWdodDogMCxcbiAgICBjcm9wcGVyTWF4V2lkdGg6IDAsXG4gICAgY3JvcHBlclN0YXRpY1dpZHRoOiAwLFxuICAgIGNyb3BwZXJTdGF0aWNIZWlnaHQ6IDAsXG4gICAgY2FudmFzUm90YXRpb246IDAsXG4gICAgcm91bmRDcm9wcGVyOiBmYWxzZSxcbiAgICBvbmx5U2NhbGVEb3duOiBmYWxzZSxcbiAgICBpbWFnZVF1YWxpdHk6IDkyLFxuICAgIGJhY2tncm91bmRDb2xvcjogdW5kZWZpbmVkLFxuICAgIGNvbnRhaW5XaXRoaW5Bc3BlY3RSYXRpbzogZmFsc2UsXG4gICAgaGlkZVJlc2l6ZVNxdWFyZXM6IGZhbHNlLFxuICAgIGFsaWduSW1hZ2U6ICdjZW50ZXInLFxuICAgIGNyb3BwZXJGcmFtZUFyaWFMYWJlbDogdW5kZWZpbmVkLFxuICAgIGNoZWNrSW1hZ2VUeXBlOiB0cnVlXG4gIH07XG5cbiAgLy8gSW50ZXJuYWxcbiAgY3JvcHBlclNjYWxlZE1pbldpZHRoID0gMjA7XG4gIGNyb3BwZXJTY2FsZWRNaW5IZWlnaHQgPSAyMDtcbiAgY3JvcHBlclNjYWxlZE1heFdpZHRoID0gMjA7XG4gIGNyb3BwZXJTY2FsZWRNYXhIZWlnaHQgPSAyMDtcbiAgc3RlcFNpemUgPSAzO1xuXG4gIHNldE9wdGlvbnNGcm9tQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ29wdGlvbnMnXT8uY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLnNldE9wdGlvbnMoY2hhbmdlc1snb3B0aW9ucyddLmN1cnJlbnRWYWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IG9wdGlvbnMgPSBPYmplY3QuZW50cmllcyhjaGFuZ2VzKVxuICAgICAgLmZpbHRlcigoW2tleV0pID0+IGtleSBpbiB0aGlzLm9wdGlvbnMpXG4gICAgICAucmVkdWNlKChhY2MsIFtrZXksIGNoYW5nZV0pID0+ICh7XG4gICAgICAgIC4uLmFjYyxcbiAgICAgICAgW2tleV06IGNoYW5nZS5jdXJyZW50VmFsdWVcbiAgICAgIH0pLCB7fSBhcyBQYXJ0aWFsPENyb3BwZXJPcHRpb25zPik7XG4gICAgaWYgKE9iamVjdC5rZXlzKG9wdGlvbnMpLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBzZXRPcHRpb25zKG9wdGlvbnM6IFBhcnRpYWw8Q3JvcHBlck9wdGlvbnM+KTogdm9pZCB7XG4gICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgLi4udGhpcy5vcHRpb25zLFxuICAgICAgLi4uKG9wdGlvbnMgfHwge30pXG4gICAgfTtcbiAgICB0aGlzLnZhbGlkYXRlT3B0aW9ucygpO1xuXG4gICAgaWYgKCF0aGlzLmxvYWRlZEltYWdlPy50cmFuc2Zvcm1lZC5pbWFnZS5jb21wbGV0ZSB8fCAhdGhpcy5tYXhTaXplKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHBvc2l0aW9uUG9zc2libHlDaGFuZ2VkID0gZmFsc2U7XG4gICAgaWYgKCh0aGlzLm9wdGlvbnMubWFpbnRhaW5Bc3BlY3RSYXRpbyAmJiBvcHRpb25zWydhc3BlY3RSYXRpbyddKSB8fCAnbWFpbnRhaW5Bc3BlY3RSYXRpbycgaW4gb3B0aW9ucykge1xuICAgICAgdGhpcy5zZXRDcm9wcGVyU2NhbGVkTWluU2l6ZSgpO1xuICAgICAgdGhpcy5zZXRDcm9wcGVyU2NhbGVkTWF4U2l6ZSgpO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5tYWludGFpbkFzcGVjdFJhdGlvICYmICh0aGlzLm9wdGlvbnMucmVzZXRDcm9wT25Bc3BlY3RSYXRpb0NoYW5nZSB8fCAhdGhpcy5hc3BlY3RSYXRpb0lzQ29ycmVjdCgpKSkge1xuICAgICAgICB0aGlzLmNyb3BwZXIuc2V0KHRoaXMubWF4U2l6ZUNyb3BwZXJQb3NpdGlvbigpKTtcbiAgICAgICAgcG9zaXRpb25Qb3NzaWJseUNoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3B0aW9uc1snY3JvcHBlck1pbldpZHRoJ10gfHwgb3B0aW9uc1snY3JvcHBlck1pbkhlaWdodCddKSB7XG4gICAgICAgIHRoaXMuc2V0Q3JvcHBlclNjYWxlZE1pblNpemUoKTtcbiAgICAgICAgcG9zaXRpb25Qb3NzaWJseUNoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnNbJ2Nyb3BwZXJNYXhXaWR0aCddIHx8IG9wdGlvbnNbJ2Nyb3BwZXJNYXhIZWlnaHQnXSkge1xuICAgICAgICB0aGlzLnNldENyb3BwZXJTY2FsZWRNYXhTaXplKCk7XG4gICAgICAgIHBvc2l0aW9uUG9zc2libHlDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zWydjcm9wcGVyU3RhdGljV2lkdGgnXSB8fCBvcHRpb25zWydjcm9wcGVyU3RhdGljSGVpZ2h0J10pIHtcbiAgICAgICAgcG9zaXRpb25Qb3NzaWJseUNoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwb3NpdGlvblBvc3NpYmx5Q2hhbmdlZCkge1xuICAgICAgdGhpcy5jcm9wcGVyLnVwZGF0ZSgoY3JvcHBlcikgPT4gY2hlY2tDcm9wcGVyUG9zaXRpb24oY3JvcHBlciwgdGhpcywgZmFsc2UpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlT3B0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLm1haW50YWluQXNwZWN0UmF0aW8gJiYgIXRoaXMub3B0aW9ucy5hc3BlY3RSYXRpbykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdgYXNwZWN0UmF0aW9gIHNob3VsZCA+IDAgd2hlbiBgbWFpbnRhaW5Bc3BlY3RSYXRpb2AgaXMgZW5hYmxlZCcpO1xuICAgIH1cbiAgfVxuXG4gIHNldE1heFNpemUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLm1heFNpemUuc2V0KHsgd2lkdGgsIGhlaWdodCB9KTtcbiAgICB0aGlzLnNldENyb3BwZXJTY2FsZWRNaW5TaXplKCk7XG4gICAgdGhpcy5zZXRDcm9wcGVyU2NhbGVkTWF4U2l6ZSgpO1xuICB9XG5cbiAgc2V0Q3JvcHBlclNjYWxlZE1pblNpemUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubG9hZGVkSW1hZ2U/LnRyYW5zZm9ybWVkLnNpemUpIHtcbiAgICAgIHRoaXMuc2V0Q3JvcHBlclNjYWxlZE1pbldpZHRoKCk7XG4gICAgICB0aGlzLnNldENyb3BwZXJTY2FsZWRNaW5IZWlnaHQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jcm9wcGVyU2NhbGVkTWluV2lkdGggPSAyMDtcbiAgICAgIHRoaXMuY3JvcHBlclNjYWxlZE1pbkhlaWdodCA9IDIwO1xuICAgIH1cbiAgfVxuXG4gIHNldENyb3BwZXJTY2FsZWRNaW5XaWR0aCgpOiB2b2lkIHtcbiAgICB0aGlzLmNyb3BwZXJTY2FsZWRNaW5XaWR0aCA9IHRoaXMub3B0aW9ucy5jcm9wcGVyTWluV2lkdGggPiAwXG4gICAgICA/IE1hdGgubWF4KDIwLCB0aGlzLm9wdGlvbnMuY3JvcHBlck1pbldpZHRoIC8gdGhpcy5sb2FkZWRJbWFnZSEudHJhbnNmb3JtZWQuc2l6ZS53aWR0aCAqIHRoaXMubWF4U2l6ZSgpLndpZHRoKVxuICAgICAgOiAyMDtcbiAgfVxuXG4gIHNldENyb3BwZXJTY2FsZWRNaW5IZWlnaHQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5tYWludGFpbkFzcGVjdFJhdGlvKSB7XG4gICAgICB0aGlzLmNyb3BwZXJTY2FsZWRNaW5IZWlnaHQgPSBNYXRoLm1heCgyMCwgdGhpcy5jcm9wcGVyU2NhbGVkTWluV2lkdGggLyB0aGlzLm9wdGlvbnMuYXNwZWN0UmF0aW8pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLmNyb3BwZXJNaW5IZWlnaHQgPiAwKSB7XG4gICAgICB0aGlzLmNyb3BwZXJTY2FsZWRNaW5IZWlnaHQgPSBNYXRoLm1heChcbiAgICAgICAgMjAsXG4gICAgICAgIHRoaXMub3B0aW9ucy5jcm9wcGVyTWluSGVpZ2h0IC8gdGhpcy5sb2FkZWRJbWFnZSEudHJhbnNmb3JtZWQuc2l6ZS5oZWlnaHQgKiB0aGlzLm1heFNpemUoKS5oZWlnaHRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3JvcHBlclNjYWxlZE1pbkhlaWdodCA9IDIwO1xuICAgIH1cbiAgfVxuXG4gIHNldENyb3BwZXJTY2FsZWRNYXhTaXplKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxvYWRlZEltYWdlPy50cmFuc2Zvcm1lZC5zaXplKSB7XG4gICAgICBjb25zdCByYXRpbyA9IHRoaXMubG9hZGVkSW1hZ2UudHJhbnNmb3JtZWQuc2l6ZS53aWR0aCAvIHRoaXMubWF4U2l6ZSgpLndpZHRoO1xuICAgICAgdGhpcy5jcm9wcGVyU2NhbGVkTWF4V2lkdGggPSB0aGlzLm9wdGlvbnMuY3JvcHBlck1heFdpZHRoID4gMjAgPyB0aGlzLm9wdGlvbnMuY3JvcHBlck1heFdpZHRoIC8gcmF0aW8gOiB0aGlzLm1heFNpemUoKS53aWR0aDtcbiAgICAgIHRoaXMuY3JvcHBlclNjYWxlZE1heEhlaWdodCA9IHRoaXMub3B0aW9ucy5jcm9wcGVyTWF4SGVpZ2h0ID4gMjAgPyB0aGlzLm9wdGlvbnMuY3JvcHBlck1heEhlaWdodCAvIHJhdGlvIDogdGhpcy5tYXhTaXplKCkuaGVpZ2h0O1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5tYWludGFpbkFzcGVjdFJhdGlvKSB7XG4gICAgICAgIGlmICh0aGlzLmNyb3BwZXJTY2FsZWRNYXhXaWR0aCA+IHRoaXMuY3JvcHBlclNjYWxlZE1heEhlaWdodCAqIHRoaXMub3B0aW9ucy5hc3BlY3RSYXRpbykge1xuICAgICAgICAgIHRoaXMuY3JvcHBlclNjYWxlZE1heFdpZHRoID0gdGhpcy5jcm9wcGVyU2NhbGVkTWF4SGVpZ2h0ICogdGhpcy5vcHRpb25zLmFzcGVjdFJhdGlvO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY3JvcHBlclNjYWxlZE1heFdpZHRoIDwgdGhpcy5jcm9wcGVyU2NhbGVkTWF4SGVpZ2h0ICogdGhpcy5vcHRpb25zLmFzcGVjdFJhdGlvKSB7XG4gICAgICAgICAgdGhpcy5jcm9wcGVyU2NhbGVkTWF4SGVpZ2h0ID0gdGhpcy5jcm9wcGVyU2NhbGVkTWF4V2lkdGggLyB0aGlzLm9wdGlvbnMuYXNwZWN0UmF0aW87XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jcm9wcGVyU2NhbGVkTWF4V2lkdGggPSB0aGlzLm1heFNpemUoKS53aWR0aDtcbiAgICAgIHRoaXMuY3JvcHBlclNjYWxlZE1heEhlaWdodCA9IHRoaXMubWF4U2l6ZSgpLmhlaWdodDtcbiAgICB9XG4gIH1cblxuICBlcXVhbHNDcm9wcGVyUG9zaXRpb24oY3JvcHBlcj86IENyb3BwZXJQb3NpdGlvbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGxvY2FsQ3JvcHBlciA9IHRoaXMuY3JvcHBlcigpO1xuICAgIHJldHVybiBsb2NhbENyb3BwZXIgPT0gbnVsbCAmJiBjcm9wcGVyID09IG51bGxcbiAgICAgIHx8IGxvY2FsQ3JvcHBlciAhPSBudWxsICYmIGNyb3BwZXIgIT0gbnVsbFxuICAgICAgJiYgbG9jYWxDcm9wcGVyLngxLnRvRml4ZWQoMykgPT09IGNyb3BwZXIueDEudG9GaXhlZCgzKVxuICAgICAgJiYgbG9jYWxDcm9wcGVyLnkxLnRvRml4ZWQoMykgPT09IGNyb3BwZXIueTEudG9GaXhlZCgzKVxuICAgICAgJiYgbG9jYWxDcm9wcGVyLngyLnRvRml4ZWQoMykgPT09IGNyb3BwZXIueDIudG9GaXhlZCgzKVxuICAgICAgJiYgbG9jYWxDcm9wcGVyLnkyLnRvRml4ZWQoMykgPT09IGNyb3BwZXIueTIudG9GaXhlZCgzKTtcbiAgfVxuXG4gIGVxdWFsc1RyYW5zZm9ybVRyYW5zbGF0ZSh0cmFuc2Zvcm06IEltYWdlVHJhbnNmb3JtKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLnRyYW5zZm9ybS50cmFuc2xhdGVIID8/IDApID09PSAodHJhbnNmb3JtLnRyYW5zbGF0ZUggPz8gMClcbiAgICAgICYmICh0aGlzLnRyYW5zZm9ybS50cmFuc2xhdGVWID8/IDApID09PSAodHJhbnNmb3JtLnRyYW5zbGF0ZVYgPz8gMCk7XG4gIH1cblxuICBlcXVhbHNUcmFuc2Zvcm0odHJhbnNmb3JtOiBJbWFnZVRyYW5zZm9ybSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVxdWFsc1RyYW5zZm9ybVRyYW5zbGF0ZSh0cmFuc2Zvcm0pXG4gICAgICAmJiAodGhpcy50cmFuc2Zvcm0uc2NhbGUgPz8gMSkgPT09ICh0cmFuc2Zvcm0uc2NhbGUgPz8gMSlcbiAgICAgICYmICh0aGlzLnRyYW5zZm9ybS5yb3RhdGUgPz8gMCkgPT09ICh0cmFuc2Zvcm0ucm90YXRlID8/IDApXG4gICAgICAmJiAodGhpcy50cmFuc2Zvcm0uZmxpcEggPz8gZmFsc2UpID09PSAodHJhbnNmb3JtLmZsaXBIID8/IGZhbHNlKVxuICAgICAgJiYgKHRoaXMudHJhbnNmb3JtLmZsaXBWID8/IGZhbHNlKSA9PT0gKHRyYW5zZm9ybS5mbGlwViA/PyBmYWxzZSk7XG4gIH1cblxuICBhc3BlY3RSYXRpb0lzQ29ycmVjdCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBsb2NhbENyb3BwZXIgPSB0aGlzLmNyb3BwZXIoKTtcbiAgICBjb25zdCBjdXJyZW50Q3JvcEFzcGVjdFJhdGlvID0gKGxvY2FsQ3JvcHBlci54MiAtIGxvY2FsQ3JvcHBlci54MSkgLyAobG9jYWxDcm9wcGVyLnkyIC0gbG9jYWxDcm9wcGVyLnkxKTtcbiAgICByZXR1cm4gY3VycmVudENyb3BBc3BlY3RSYXRpbyA9PT0gdGhpcy5vcHRpb25zLmFzcGVjdFJhdGlvO1xuICB9XG5cbiAgcmVzaXplQ3JvcHBlclBvc2l0aW9uKG9sZE1heFNpemU6IERpbWVuc2lvbnMpOiB2b2lkIHtcbiAgICBpZiAob2xkTWF4U2l6ZS53aWR0aCAhPT0gdGhpcy5tYXhTaXplKCkud2lkdGggfHwgb2xkTWF4U2l6ZS5oZWlnaHQgIT09IHRoaXMubWF4U2l6ZSgpLmhlaWdodCkge1xuICAgICAgdGhpcy5jcm9wcGVyLnVwZGF0ZShjcm9wcGVyID0+ICh7XG4gICAgICAgIHgxOiBjcm9wcGVyLngxICogdGhpcy5tYXhTaXplKCkud2lkdGggLyBvbGRNYXhTaXplLndpZHRoLFxuICAgICAgICB4MjogY3JvcHBlci54MiAqIHRoaXMubWF4U2l6ZSgpLndpZHRoIC8gb2xkTWF4U2l6ZS53aWR0aCxcbiAgICAgICAgeTE6IGNyb3BwZXIueTEgKiB0aGlzLm1heFNpemUoKS5oZWlnaHQgLyBvbGRNYXhTaXplLmhlaWdodCxcbiAgICAgICAgeTI6IGNyb3BwZXIueTIgKiB0aGlzLm1heFNpemUoKS5oZWlnaHQgLyBvbGRNYXhTaXplLmhlaWdodFxuICAgICAgfSkpO1xuICAgIH1cbiAgfVxuXG4gIG1heFNpemVDcm9wcGVyUG9zaXRpb24oKTogQ3JvcHBlclBvc2l0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDE6IDAsXG4gICAgICB5MTogMCxcbiAgICAgIHgyOiB0aGlzLm1heFNpemUoKS53aWR0aCxcbiAgICAgIHkyOiB0aGlzLm1heFNpemUoKS5oZWlnaHRcbiAgICB9O1xuICB9XG5cbiAgdG9Dcm9wSW5wdXQoKTogQ3JvcElucHV0IHtcbiAgICByZXR1cm4ge1xuICAgICAgY3JvcHBlcjogdGhpcy5jcm9wcGVyKCksXG4gICAgICBtYXhTaXplOiB0aGlzLm1heFNpemUoKSxcbiAgICAgIHRyYW5zZm9ybTogdGhpcy50cmFuc2Zvcm0sXG4gICAgICBsb2FkZWRJbWFnZTogdGhpcy5sb2FkZWRJbWFnZSEsXG4gICAgICBvcHRpb25zOiB7Li4udGhpcy5vcHRpb25zfVxuICAgIH07XG4gIH1cbn1cbiJdfQ==