bbj-screen-widget 2.4.75 → 2.4.77

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.
@@ -6,7 +6,7 @@ import { Subject } from 'rxjs';
6
6
  import { CustomBaiduMapComponent } from '../custom-baidu-map.component';
7
7
  import { NzMessageService } from 'ng-zorro-antd/message';
8
8
  const EARTH_RADIUS = 6371393;
9
- const ɵ0 = { type: 'string', title: 'ID' };
9
+ const ɵ0 = { type: 'string', title: 'ID' }, ɵ1 = { type: 'string', title: 'ID' };
10
10
  let BaiduFenceComponent = class BaiduFenceComponent extends BaseLayer {
11
11
  constructor(parent, zone, message) {
12
12
  super(parent, zone);
@@ -42,6 +42,7 @@ let BaiduFenceComponent = class BaiduFenceComponent extends BaseLayer {
42
42
  },
43
43
  ];
44
44
  this.create = new EventEmitter();
45
+ this.update = new EventEmitter();
45
46
  this.editData = [];
46
47
  this.stopEdit$ = new Subject();
47
48
  }
@@ -77,10 +78,13 @@ let BaiduFenceComponent = class BaiduFenceComponent extends BaseLayer {
77
78
  }
78
79
  updateData() {
79
80
  const data = [];
80
- this.data.forEach((r) => {
81
+ for (const r of this.data) {
82
+ if (r.id && r.id === this.editId) {
83
+ continue;
84
+ }
81
85
  if (r.type === 'circle') {
82
86
  if (!r.radius || !r.lnglat) {
83
- return;
87
+ continue;
84
88
  }
85
89
  let pointsCount = 90;
86
90
  const radius = r.radius;
@@ -90,7 +94,7 @@ let BaiduFenceComponent = class BaiduFenceComponent extends BaseLayer {
90
94
  // 转换中心点纬度为弧度
91
95
  const centerLatRad = (centerLat * Math.PI) / 180;
92
96
  // 存储轨迹点的数组
93
- const trajectory = [];
97
+ const coordinates = [];
94
98
  // 遍历 0~360°,生成等间隔的点
95
99
  for (let i = 0; i < pointsCount; i++) {
96
100
  // 计算当前点的方位角(弧度):从0°到360°,均分pointsCount份
@@ -102,18 +106,18 @@ let BaiduFenceComponent = class BaiduFenceComponent extends BaseLayer {
102
106
  const newLat = centerLat + (deltaLatRad * 180) / Math.PI;
103
107
  const newLng = centerLng + (deltaLngRad * 180) / Math.PI;
104
108
  // 添加到轨迹数组(保留6位小数,经纬度常规精度)
105
- trajectory.push([parseFloat(newLng.toFixed(6)), parseFloat(newLat.toFixed(6))]);
109
+ coordinates.push([parseFloat(newLng.toFixed(6)), parseFloat(newLat.toFixed(6))]);
106
110
  }
107
111
  data.push({
108
112
  geometry: {
109
113
  type: 'Polygon',
110
- coordinates: [trajectory],
114
+ coordinates: [coordinates],
111
115
  },
112
116
  });
113
117
  }
114
118
  else {
115
119
  if (!r.lnglat) {
116
- return;
120
+ continue;
117
121
  }
118
122
  // const coordinates = r.lnglat.split(';').map((r) => {
119
123
  // const lnglat = r.split(',');
@@ -124,26 +128,28 @@ let BaiduFenceComponent = class BaiduFenceComponent extends BaseLayer {
124
128
  return [+lnglat[0], +lnglat[1]];
125
129
  }));
126
130
  data.push({
131
+ id: r.id,
127
132
  geometry: {
128
133
  type: 'Polygon',
129
134
  coordinates: coordinates,
130
135
  },
131
136
  });
132
137
  }
133
- });
138
+ }
134
139
  this.layer.setData(data);
135
140
  }
136
- startDraw(type) {
141
+ createScene() {
137
142
  return __awaiter(this, void 0, void 0, function* () {
138
- const { DrawScene, PolygonDraw, CircleDraw, OperateEventType } = yield import('bmap-draw');
143
+ const { DrawScene, OperateEventType } = yield import('bmap-draw');
139
144
  if (!this.scene) {
140
145
  this.scene = new DrawScene(this.parent.map, { noLimit: true });
141
146
  this.scene.addEventListener(OperateEventType.COMPLETE, (e) => {
142
147
  console.log(e);
148
+ let data;
143
149
  if (e.target.overlay.radius) {
144
150
  const radius = e.target.overlay.radius;
145
151
  const lnglat = e.target.overlay.latLng;
146
- const data = {
152
+ data = {
147
153
  type: 'circle',
148
154
  lnglat: `${lnglat.lng},${lnglat.lat}`,
149
155
  radius: radius,
@@ -152,14 +158,12 @@ let BaiduFenceComponent = class BaiduFenceComponent extends BaseLayer {
152
158
  // this.parent.map.removeOverlay(r);
153
159
  // });
154
160
  this.create.emit(data);
155
- this.editOverlay = null;
156
161
  }
157
162
  else {
158
163
  const points = e.target.overlay.getPoints();
159
164
  if (!this.data) {
160
165
  this.data = [];
161
166
  }
162
- let data;
163
167
  if (points.length && Array.isArray(points[0])) {
164
168
  data = {
165
169
  type: 'polygon',
@@ -169,20 +173,55 @@ let BaiduFenceComponent = class BaiduFenceComponent extends BaseLayer {
169
173
  else {
170
174
  data = {
171
175
  type: 'polygon',
172
- lnglat: points.map((p) => `${p.latLng.lng},${p.latLng.lat}`).join(';'),
176
+ lnglat: points
177
+ .map((p) => {
178
+ let latLng = p.latLng;
179
+ if (!latLng) {
180
+ const [lng, lat] = this.parent.map.mercatorToLnglat(p.lng, p.lat);
181
+ return `${lng},${lat}`;
182
+ }
183
+ else {
184
+ return `${latLng.lng},${latLng.lat}`;
185
+ }
186
+ })
187
+ .join(';'),
173
188
  };
174
189
  }
190
+ }
191
+ this.editOverlay = null;
192
+ this.parent.map.removeOverlay(e.target.overlay);
193
+ if (this.editId) {
194
+ data.id = this.editId;
195
+ const index = this.data.findIndex((r) => r.id === this.editId);
196
+ if (index !== -1) {
197
+ this.data[index] = data;
198
+ }
199
+ this.editId = null;
200
+ this.updateData();
201
+ }
202
+ else {
203
+ this.data.push(data);
204
+ this.updateData();
175
205
  this.create.emit(data);
176
206
  }
177
207
  });
178
208
  this.scene.addEventListener(OperateEventType.CANCEL, (e) => {
179
- console.log(e);
180
209
  if (this.editOverlay) {
181
210
  this.parent.map.removeOverlay(this.editOverlay);
182
211
  this.editOverlay = null;
183
212
  }
213
+ if (this.editId) {
214
+ this.editId = null;
215
+ this.updateData();
216
+ }
184
217
  });
185
218
  }
219
+ });
220
+ }
221
+ startDraw(type) {
222
+ return __awaiter(this, void 0, void 0, function* () {
223
+ this.createScene();
224
+ const { PolygonDraw, CircleDraw } = yield import('bmap-draw');
186
225
  switch (type) {
187
226
  case 'polygon':
188
227
  if (!this.polygon) {
@@ -275,10 +314,42 @@ let BaiduFenceComponent = class BaiduFenceComponent extends BaseLayer {
275
314
  // }
276
315
  // this.editData = null;
277
316
  }
317
+ editPolygon(boundaries) {
318
+ return __awaiter(this, void 0, void 0, function* () {
319
+ const { PolygonEdit } = yield import('bmap-draw');
320
+ this.stopDraw();
321
+ if (!this.polygonEdit) {
322
+ this.polygonEdit = new PolygonEdit(this.scene);
323
+ }
324
+ const points = boundaries.map((boundary) => boundary.split(';').map((p) => {
325
+ const [lng, lat] = p.split(',');
326
+ return new BMapGL.Point(Number(lng), Number(lat));
327
+ }));
328
+ const overlay = new BMapGL.Polygon(points, this.getOptions());
329
+ console.log(overlay);
330
+ this.editOverlay = overlay;
331
+ this.parent.map.addOverlay(overlay);
332
+ this.parent.map.setViewport([].concat.apply([], points));
333
+ this.polygonEdit.edit(overlay);
334
+ });
335
+ }
336
+ editCircle(lng, lat, r) {
337
+ return __awaiter(this, void 0, void 0, function* () {
338
+ const { CircleEdit } = yield import('bmap-draw');
339
+ if (!this.circleEdit) {
340
+ this.circleEdit = new CircleEdit(this.scene);
341
+ }
342
+ const center = new BMapGL.Point(lng, lat);
343
+ this.moveCircleToView(lng, lat, r);
344
+ const overlay = new BMapGL.Circle(center, r, this.getOptions());
345
+ this.editOverlay = overlay;
346
+ this.parent.map.addOverlay(overlay);
347
+ this.circleEdit.open(overlay);
348
+ });
349
+ }
278
350
  search() {
279
351
  return __awaiter(this, void 0, void 0, function* () {
280
352
  // 如果正在绘制多边形围栏,获取地名边界并绘制
281
- const { PolygonEdit } = yield import('bmap-draw');
282
353
  if (this.areaName) {
283
354
  const boundary = new BMapGL.Boundary();
284
355
  // 百度地图 Geocoder.getLocation 回调签名:(results, status)
@@ -286,20 +357,7 @@ let BaiduFenceComponent = class BaiduFenceComponent extends BaseLayer {
286
357
  console.log('边界坐标数组:', results);
287
358
  // 检查状态是否成功
288
359
  if (results && results.boundaries && results.boundaries.length) {
289
- this.stopDraw();
290
- if (!this.polygonEdit) {
291
- this.polygonEdit = new PolygonEdit(this.scene);
292
- }
293
- const points = results.boundaries.map((boundary) => boundary.split(';').map((p) => {
294
- const [lng, lat] = p.split(',');
295
- return new BMapGL.Point(Number(lng), Number(lat));
296
- }));
297
- const overlay = new BMapGL.Polygon(points, this.getOptions());
298
- console.log(overlay);
299
- this.editOverlay = overlay;
300
- this.parent.map.addOverlay(overlay);
301
- this.parent.map.setViewport([].concat.apply([], points));
302
- this.polygonEdit.edit(overlay);
360
+ this.editPolygon(results.boundaries);
303
361
  }
304
362
  else {
305
363
  this.message.error('行政区域不存在');
@@ -321,15 +379,7 @@ let BaiduFenceComponent = class BaiduFenceComponent extends BaseLayer {
321
379
  console.log(e);
322
380
  // 如果正在绘制圆形围栏
323
381
  if (this.circle) {
324
- if (!this.circleEdit) {
325
- this.circleEdit = new CircleEdit(this.scene);
326
- }
327
- const center = new BMapGL.Point(value.location.lng, value.location.lat);
328
- this.parent.map.centerAndZoom(center, 16);
329
- const overlay = new BMapGL.Circle(center, 300, this.getOptions());
330
- this.editOverlay = overlay;
331
- this.parent.map.addOverlay(overlay);
332
- this.circleEdit.open(overlay);
382
+ this.editCircle(value.location.lng, value.location.lat, 300);
333
383
  this.searchText = null;
334
384
  }
335
385
  });
@@ -345,27 +395,7 @@ let BaiduFenceComponent = class BaiduFenceComponent extends BaseLayer {
345
395
  }
346
396
  if (data.type === 'circle') {
347
397
  const [lng, lat] = data.lnglat.split(',');
348
- const centerLng = Number(lng);
349
- const centerLat = Number(lat);
350
- const radius = Number(data.radius);
351
- // 转换中心点纬度为弧度
352
- const centerLatRad = (centerLat * Math.PI) / 180;
353
- // 计算经度方向的偏移(弧度)
354
- const deltaLngRad = radius / (EARTH_RADIUS * Math.cos(centerLatRad));
355
- // 计算纬度方向的偏移(弧度)
356
- const deltaLatRad = radius / EARTH_RADIUS;
357
- // 转换为角度偏移
358
- const deltaLng = (deltaLngRad * 180) / Math.PI;
359
- const deltaLat = (deltaLatRad * 180) / Math.PI;
360
- // 计算圆形的四个边界点(上、下、左、右)
361
- const points = [
362
- new BMapGL.Point(centerLng, centerLat + deltaLat),
363
- new BMapGL.Point(centerLng, centerLat - deltaLat),
364
- new BMapGL.Point(centerLng - deltaLng, centerLat),
365
- new BMapGL.Point(centerLng + deltaLng, centerLat),
366
- ];
367
- // 使用 setViewport 方法调整视图,使整个圆形可见
368
- this.parent.map.setViewport(points);
398
+ this.moveCircleToView(Number(lng), Number(lat), Number(data.radius));
369
399
  }
370
400
  else {
371
401
  this.parent.map.setViewport(data.lnglat.split(/[;\n\r]+/).map((p) => {
@@ -374,11 +404,62 @@ let BaiduFenceComponent = class BaiduFenceComponent extends BaseLayer {
374
404
  }));
375
405
  }
376
406
  }
407
+ moveCircleToView(lng, lat, r) {
408
+ const centerLng = Number(lng);
409
+ const centerLat = Number(lat);
410
+ const radius = Number(r);
411
+ // 转换中心点纬度为弧度
412
+ const centerLatRad = (centerLat * Math.PI) / 180;
413
+ // 计算经度方向的偏移(弧度)
414
+ const deltaLngRad = radius / (EARTH_RADIUS * Math.cos(centerLatRad));
415
+ // 计算纬度方向的偏移(弧度)
416
+ const deltaLatRad = radius / EARTH_RADIUS;
417
+ // 转换为角度偏移
418
+ const deltaLng = (deltaLngRad * 180) / Math.PI;
419
+ const deltaLat = (deltaLatRad * 180) / Math.PI;
420
+ // 计算圆形的四个边界点(上、下、左、右)
421
+ const points = [
422
+ new BMapGL.Point(centerLng, centerLat + deltaLat),
423
+ new BMapGL.Point(centerLng, centerLat - deltaLat),
424
+ new BMapGL.Point(centerLng - deltaLng, centerLat),
425
+ new BMapGL.Point(centerLng + deltaLng, centerLat),
426
+ ];
427
+ // 使用 setViewport 方法调整视图,使整个圆形可见
428
+ this.parent.map.setViewport(points);
429
+ }
430
+ edit(id) {
431
+ return __awaiter(this, void 0, void 0, function* () {
432
+ if (!this.data) {
433
+ console.log('没有数据');
434
+ return;
435
+ }
436
+ const item = this.data.find((item) => item.id === id);
437
+ if (!item) {
438
+ console.log('找不到id', id);
439
+ return;
440
+ }
441
+ if (!item.lnglat) {
442
+ console.log('没有经纬度', item);
443
+ return;
444
+ }
445
+ this.createScene();
446
+ switch (item.type) {
447
+ case 'circle':
448
+ const [lng, lat] = item.lnglat.split(',');
449
+ yield this.editCircle(Number(lng), Number(lat), Number(item.radius));
450
+ break;
451
+ default:
452
+ yield this.editPolygon(item.lnglat.split('\r'));
453
+ }
454
+ this.editId = id;
455
+ this.updateData();
456
+ });
457
+ }
377
458
  };
378
459
  BaiduFenceComponent.decorators = [
379
460
  { type: Component, args: [{
380
461
  selector: 'sc-baidu-fence',
381
- template: "<ng-container *ngIf=\"showDrawButton\">\n <button nz-button (click)=\"startDraw('polygon')\">\u7ED8\u5236\u591A\u8FB9\u5F62</button>\n <button nz-button (click)=\"startDraw('circle')\">\u7ED8\u5236\u5706\u5F62</button>\n <button nz-button (click)=\"stopDraw()\">\u7ED3\u675F\u7ED8\u5236</button>\n <button nz-button (click)=\"moveToView('1')\">\u79FB\u52A8\u5230\u4E2D\u5FC31</button>\n <button nz-button (click)=\"moveToView('2')\">\u79FB\u52A8\u5230\u4E2D\u5FC32</button>\n</ng-container>\n<input\n nz-input\n [ngClass]=\"{ hidden: !circle?.isOpen }\"\n #suggest\n type=\"text\"\n [(ngModel)]=\"searchText\"\n placeholder=\"\u8BF7\u8F93\u5165\u4E2D\u5FC3\u70B9\u4F4D\u7F6E\"\n class=\"input\"\n/>\n<ng-container *ngIf=\"polygon?.isOpen\">\n <input nz-input type=\"text\" placeholder=\"\u8BF7\u8F93\u5165\u884C\u653F\u533A\u540D\u79F0\" [(ngModel)]=\"areaName\" class=\"input\" />\n <button nz-button (click)=\"search()\" style=\"margin-left: 12px\">\u786E\u8BA4</button>\n</ng-container>\n<!-- <input type=\"text\" placeholder=\"\u8BF7\u8F93\u5165\u5730\u70B9\" [(ngModel)]=\"searchText\" />\n<button nz-button (click)=\"search()\">\u67E5\u8BE2</button> -->\n",
462
+ template: "<ng-container *ngIf=\"showDrawButton\">\n <button nz-button (click)=\"startDraw('polygon')\">\u7ED8\u5236\u591A\u8FB9\u5F62</button>\n <button nz-button (click)=\"startDraw('circle')\">\u7ED8\u5236\u5706\u5F62</button>\n <button nz-button (click)=\"stopDraw()\">\u7ED3\u675F\u7ED8\u5236</button>\n <!-- <button nz-button (click)=\"edit('1')\">\u7F16\u8F91</button>\n <button nz-button (click)=\"edit('2')\">\u7F16\u8F912</button> -->\n</ng-container>\n<input\n nz-input\n [ngClass]=\"{ hidden: !circle?.isOpen }\"\n #suggest\n type=\"text\"\n [(ngModel)]=\"searchText\"\n placeholder=\"\u8BF7\u8F93\u5165\u4E2D\u5FC3\u70B9\u4F4D\u7F6E\"\n class=\"input\"\n/>\n<ng-container *ngIf=\"polygon?.isOpen\">\n <input nz-input type=\"text\" placeholder=\"\u8BF7\u8F93\u5165\u884C\u653F\u533A\u540D\u79F0\" [(ngModel)]=\"areaName\" class=\"input\" />\n <button nz-button (click)=\"search()\" style=\"margin-left: 12px\">\u786E\u8BA4</button>\n</ng-container>\n<!-- <input type=\"text\" placeholder=\"\u8BF7\u8F93\u5165\u5730\u70B9\" [(ngModel)]=\"searchText\" />\n<button nz-button (click)=\"search()\">\u67E5\u8BE2</button> -->\n",
382
463
  styles: [":host{position:absolute;display:block;left:0;top:0;z-index:100;padding:12px;pointer-events:auto}button{transition:none}.hidden{display:none}.input{width:300px;margin-left:12px}"]
383
464
  },] }
384
465
  ];
@@ -442,6 +523,19 @@ __decorate([
442
523
  }),
443
524
  __metadata("design:type", Object)
444
525
  ], BaiduFenceComponent.prototype, "create", void 0);
526
+ __decorate([
527
+ Event('编辑围栏', {
528
+ params: {
529
+ properties: {
530
+ id: ɵ1,
531
+ type: { type: 'string', title: '围栏类型' },
532
+ lnglat: { type: 'string', title: '经纬度' },
533
+ radius: { type: 'number', title: '半径' },
534
+ },
535
+ },
536
+ }),
537
+ __metadata("design:type", Object)
538
+ ], BaiduFenceComponent.prototype, "update", void 0);
445
539
  __decorate([
446
540
  Method('开始绘制'),
447
541
  __param(0, Param('类型', {
@@ -468,6 +562,13 @@ __decorate([
468
562
  __metadata("design:paramtypes", [String]),
469
563
  __metadata("design:returntype", void 0)
470
564
  ], BaiduFenceComponent.prototype, "moveToView", null);
565
+ __decorate([
566
+ Method('编辑'),
567
+ __param(0, Param('id')),
568
+ __metadata("design:type", Function),
569
+ __metadata("design:paramtypes", [String]),
570
+ __metadata("design:returntype", Promise)
571
+ ], BaiduFenceComponent.prototype, "edit", null);
471
572
  BaiduFenceComponent = __decorate([
472
573
  Widget('电子围栏', {
473
574
  group: 'component',
@@ -480,5 +581,5 @@ BaiduFenceComponent = __decorate([
480
581
  NzMessageService])
481
582
  ], BaiduFenceComponent);
482
583
  export { BaiduFenceComponent };
483
- export { ɵ0 };
484
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFpZHUtZmVuY2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2NyZWVuLXdpZGdldC9zcmMvbGliL2N1c3RvbS1iYWlkdS1tYXAvYmFpZHUtZmVuY2UvYmFpZHUtZmVuY2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFxQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRy9CLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR3pELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQztXQTRDbkIsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7SUFoQzVCLG1CQUFtQixTQUFuQixtQkFBb0IsU0FBUSxTQUFTO0lBaUZoRCxZQUNZLE1BQStCLEVBQy9CLElBQVksRUFDZCxPQUF5QjtRQUVqQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBSlYsV0FBTSxHQUFOLE1BQU0sQ0FBeUI7UUFDL0IsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNkLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBbkZuQyxvRkFBb0Y7UUFDcEYsb0JBQW9CO1FBQ3BCLGdCQUFnQjtRQUNoQixzQkFBc0I7UUFDdEIsc0JBQXNCO1FBQ3RC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WSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgTmdab25lLCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCYXNlTGF5ZXIgfSBmcm9tICcuLi9iYXNlLWxheWVyJztcbmltcG9ydCB7IERhdGEsIE1ldGhvZCwgUHJvcGVydHksIFdpZGdldCwgRXZlbnQsIFBhcmFtIH0gZnJvbSAnYmJqLXdpZGdldC1iYXNlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERyYXdTY2VuZSwgUmVjdERyYXcgfSBmcm9tICdibWFwLWRyYXcnO1xuaW1wb3J0IHsgQ3VzdG9tQmFpZHVNYXBDb21wb25lbnQgfSBmcm9tICcuLi9jdXN0b20tYmFpZHUtbWFwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOek1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9tZXNzYWdlJztcbmRlY2xhcmUgY29uc3QgbWFwdmdsO1xuZGVjbGFyZSBjb25zdCBCTWFwR0w7XG5jb25zdCBFQVJUSF9SQURJVVMgPSA2MzcxMzkzO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2MtYmFpZHUtZmVuY2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vYmFpZHUtZmVuY2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9iYWlkdS1mZW5jZS5jb21wb25lbnQubGVzcyddLFxufSlcbkBXaWRnZXQoJ+eUteWtkOWbtOagjycsIHtcbiAgZ3JvdXA6ICdjb21wb25lbnQnLFxuICBpbWFnZTogJycsXG4gIGljb246ICcnLFxuICBoaWRkZW46IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEJhaWR1RmVuY2VDb21wb25lbnQgZXh0ZW5kcyBCYXNlTGF5ZXIgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8vIEBQcm9wZXJ0eSgn5qCH562+5a2X5L2TJywgeyB1aTogeyB3aWRnZXQ6ICdteUZvbnQnLCB2aXNpYmxlSWY6IHsgc2hvd0xhYmVsOiBbdHJ1ZV0gfSB9IH0pXG4gIC8vIHRleHRGb250OiBhbnkgPSB7XG4gIC8vICAgZmFtaWx5OiAnJyxcbiAgLy8gICBjb2xvcjogJyMwMDAwMDAnLFxuICAvLyAgIHdlaWdodDogJ25vcm1hbCcsXG4gIC8vICAgc2l6ZTogMTYsXG4gIC8vICAgc3BhY2U6IDAsXG4gIC8vICAgbGluZUhlaWdodDogMCxcbiAgLy8gfTtcbiAgQFByb3BlcnR5KCfnur/mnaHlrr3luqYnLCB7XG4gICAgdWk6IHsgd2lkZ2V0OiAnbXlSYW5nZScsIG1pbjogMSwgbWF4OiA0MCwgc3RlcDogMSB9LFxuICB9KVxuICBsaW5lV2lkdGggPSAyO1xuICBAUHJvcGVydHkoJ+e6v+adoeminOiJsicsIHtcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICB1aToge1xuICAgICAgd2lkZ2V0OiAnbXlDb2xvcicsXG4gICAgfSxcbiAgfSlcbiAgbGluZUNvbG9yID0gJ3JnYig1MCwgMTMzLCAyNTUpJztcbiAgQFByb3BlcnR5KCfloavlhYXpopzoibInLCB7XG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgdWk6IHtcbiAgICAgIHdpZGdldDogJ215Q29sb3InLFxuICAgIH0sXG4gIH0pXG4gIGZpbGxDb2xvciA9ICdyZ2JhKDI0OCwgMjMxLCAyOCwgMC4yKSc7XG4gIEBQcm9wZXJ0eSgn5pi+56S657uY5Yi25oyJ6ZKuJywgeyB0eXBlOiAnYm9vbGVhbicgfSlcbiAgc2hvd0RyYXdCdXR0b24gPSB0cnVlO1xuICBARGF0YSh7XG4gICAgcHJvcGVydGllczoge1xuICAgICAgaWQ6IHsgdHlwZTogJ3N0cmluZycsIHRpdGxlOiAnSUQnIH0sXG4gICAgICAvLyBuYW1lOiB7IHR5cGU6ICdzdHJpbmcnLCB0aXRsZTogJ+WbtOagj+WQjeensCcgfSxcbiAgICAgIHR5cGU6IHsgdHlwZTogJ3N0cmluZycsIHRpdGxlOiAn5Zu05qCP57G75Z6LJyB9LFxuICAgICAgbG5nbGF0OiB7IHR5cGU6ICdzdHJpbmcnLCB0aXRsZTogJ+e7j+e6rOW6picgfSxcbiAgICAgIHJhZGl1czogeyB0eXBlOiAnbnVtYmVyJywgdGl0bGU6ICfljYrlvoQnIH0sXG4gICAgfSxcbiAgfSlcbiAgZGF0YTogYW55W10gPSBbXG4gICAge1xuICAgICAgLy8gbmFtZTogJ+Wkmui+ueW9oicsXG4gICAgICBpZDogJzEnLFxuICAgICAgdHlwZTogJ3BvbHlnb24nLFxuICAgICAgbG5nbGF0OiAnMTIwLjcsMjg7MTIwLjgsMjg7MTIwLjgsMjcuOTsxMjAuNywyNy45JyxcbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIG5hbWU6ICflnIblvaInLFxuICAgICAgaWQ6ICcyJyxcbiAgICAgIHR5cGU6ICdjaXJjbGUnLFxuICAgICAgbG5nbGF0OiAnMTIwLjYsMjcuOScsXG4gICAgICByYWRpdXM6IDUwMDAsXG4gICAgfSxcbiAgXTtcbiAgQEV2ZW50KCfmlrDlop7lm7TmoI8nLCB7XG4gICAgcGFyYW1zOiB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHR5cGU6IHsgdHlwZTogJ3N0cmluZycsIHRpdGxlOiAn5Zu05qCP57G75Z6LJyB9LFxuICAgICAgICBsbmdsYXQ6IHsgdHlwZTogJ3N0cmluZycsIHRpdGxlOiAn57uP57qs5bqmJyB9LFxuICAgICAgICByYWRpdXM6IHsgdHlwZTogJ251bWJlcicsIHRpdGxlOiAn5Y2K5b6EJyB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KVxuICBjcmVhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgbGF5ZXI6IGFueTtcbiAgdGV4dExheWVyOiBhbnk7XG4gIGVkaXRMYXllcjogYW55O1xuICBlZGl0RGF0YSA9IFtdO1xuICBzdG9wRWRpdCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBlZGl0TGluZUxheWVyOiBhbnk7XG4gIHNlYXJjaFRleHQ6IHN0cmluZztcbiAgYXJlYU5hbWU6IHN0cmluZztcbiAgcG9seWdvbjogYW55O1xuICBjaXJjbGU6IGFueTtcbiAgc2NlbmU6IGFueTtcbiAgY2lyY2xlRWRpdDogYW55O1xuICBAVmlld0NoaWxkKCdzdWdnZXN0JylcbiAgc3VnZ2VzdDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcbiAgcG9seWdvbkVkaXQ6IGFueTtcbiAgZWRpdE92ZXJsYXk6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcGFyZW50OiBDdXN0b21CYWlkdU1hcENvbXBvbmVudCxcbiAgICBwcm90ZWN0ZWQgem9uZTogTmdab25lLFxuICAgIHByaXZhdGUgbWVzc2FnZTogTnpNZXNzYWdlU2VydmljZSxcbiAgKSB7XG4gICAgc3VwZXIocGFyZW50LCB6b25lKTtcbiAgfVxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIGF3YWl0IHRoaXMucGFyZW50LmluaXQkO1xuICAgIHRoaXMuaW5pdFNlYXJjaCgpO1xuICAgIC8vIHRoaXMuc3RhcnREcmF3KCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIHRoaXMuc3RvcERyYXcoKTtcbiAgICB0aGlzLnNjZW5lPy5jbGVhckRhdGEoKTtcbiAgfVxuXG4gIGNyZWF0ZUxheWVycygpOiBhbnlbXSB7XG4gICAgdGhpcy5sYXllciA9IG5ldyBtYXB2Z2wuUG9seWdvbkxheWVyKHtcbiAgICAgIHJlbmRlck9yZGVyOiAtMSxcbiAgICAgIGxpbmVDb2xvcjogdGhpcy5saW5lQ29sb3IsXG4gICAgICBsaW5lV2lkdGg6IHRoaXMubGluZVdpZHRoLFxuICAgICAgZmlsbENvbG9yOiB0aGlzLmZpbGxDb2xvcixcbiAgICB9KTtcbiAgICAvLyB0aGlzLnRleHRMYXllciA9IG5ldyBtYXB2Z2wuVGV4dExheWVyKHtcbiAgICAvLyAgIHJlbmRlck9yZGVyOiAtMSxcbiAgICAvLyAgIC4uLnRoaXMuZ2V0VGV4dE9wdGlvbnModGhpcy50ZXh0Rm9udCksXG4gICAgLy8gfSk7XG4gICAgcmV0dXJuIFt0aGlzLmxheWVyXTtcbiAgfVxuICB1cGRhdGVEYXRhKCk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGEgPSBbXTtcbiAgICB0aGlzLmRhdGEuZm9yRWFjaCgocikgPT4ge1xuICAgICAgaWYgKHIudHlwZSA9PT0gJ2NpcmNsZScpIHtcbiAgICAgICAgaWYgKCFyLnJhZGl1cyB8fCAhci5sbmdsYXQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHBvaW50c0NvdW50ID0gOTA7XG4gICAgICAgIGNvbnN0IHJhZGl1cyA9IHIucmFkaXVzO1xuICAgICAgICBjb25zdCBsbmdsYXQgPSByLmxuZ2xhdC5zcGxpdCgnLCcpO1xuICAgICAgICBjb25zdCBjZW50ZXJMbmcgPSArbG5nbGF0WzBdO1xuICAgICAgICBjb25zdCBjZW50ZXJMYXQgPSArbG5nbGF0WzFdO1xuICAgICAgICAvLyDovazmjaLkuK3lv4PngrnnuqzluqbkuLrlvKfluqZcbiAgICAgICAgY29uc3QgY2VudGVyTGF0UmFkID0gKGNlbnRlckxhdCAqIE1hdGguUEkpIC8gMTgwO1xuICAgICAgICAvLyDlrZjlgqjovajov7nngrnnmoTmlbDnu4RcbiAgICAgICAgY29uc3QgdHJhamVjdG9yeSA9IFtdO1xuXG4gICAgICAgIC8vIOmBjeWOhiAwfjM2MMKw77yM55Sf5oiQ562J6Ze06ZqU55qE54K5XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzQ291bnQ7IGkrKykge1xuICAgICAgICAgIC8vIOiuoeeul+W9k+WJjeeCueeahOaWueS9jeinku+8iOW8p+W6pu+8ie+8muS7jjDCsOWIsDM2MMKw77yM5Z2H5YiGcG9pbnRzQ291bnTku71cbiAgICAgICAgICBjb25zdCBhbmdsZVJhZCA9ICgoKGkgKiAzNjApIC8gcG9pbnRzQ291bnQpICogTWF0aC5QSSkgLyAxODA7XG5cbiAgICAgICAgICAvLyDorqHnrpflvZPliY3ngrnnm7jlr7nkuo7kuK3lv4PngrnnmoTnu4/nuqzluqblop7ph4/vvIjlvKfluqbvvIlcbiAgICAgICAgICBjb25zdCBkZWx0YUxhdFJhZCA9IChyYWRpdXMgKiBNYXRoLmNvcyhhbmdsZVJhZCkpIC8gRUFSVEhfUkFESVVTO1xuICAgICAgICAgIGNvbnN0IGRlbHRhTG5nUmFkID0gKHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlUmFkKSkgLyAoRUFSVEhfUkFESVVTICogTWF0aC5jb3MoY2VudGVyTGF0UmFkKSk7XG5cbiAgICAgICAgICAvLyDovazmjaLkuLrop5LluqbvvIzlubborqHnrpfmlrDlnZDmoIdcbiAgICAgICAgICBjb25zdCBuZXdMYXQgPSBjZW50ZXJMYXQgKyAoZGVsdGFMYXRSYWQgKiAxODApIC8gTWF0aC5QSTtcbiAgICAgICAgICBjb25zdCBuZXdMbmcgPSBjZW50ZXJMbmcgKyAoZGVsdGFMbmdSYWQgKiAxODApIC8gTWF0aC5QSTtcblxuICAgICAgICAgIC8vIOa3u+WKoOWIsOi9qOi/ueaVsOe7hO+8iOS/neeVmTbkvY3lsI/mlbDvvIznu4/nuqzluqbluLjop4Tnsr7luqbvvIlcbiAgICAgICAgICB0cmFqZWN0b3J5LnB1c2goW3BhcnNlRmxvYXQobmV3TG5nLnRvRml4ZWQoNikpLCBwYXJzZUZsb2F0KG5ld0xhdC50b0ZpeGVkKDYpKV0pO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEucHVzaCh7XG4gICAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICAgIHR5cGU6ICdQb2x5Z29uJyxcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBbdHJhamVjdG9yeV0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXIubG5nbGF0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnN0IGNvb3JkaW5hdGVzID0gci5sbmdsYXQuc3BsaXQoJzsnKS5tYXAoKHIpID0+IHtcbiAgICAgICAgLy8gICBjb25zdCBsbmdsYXQgPSByLnNwbGl0KCcsJyk7XG4gICAgICAgIC8vICAgcmV0dXJuIFsrbG5nbGF0WzBdLCArbG5nbGF0WzFdXTtcbiAgICAgICAgLy8gfSk7XG4gICAgICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gci5sbmdsYXQuc3BsaXQoJ1xcbicpLm1hcCgocikgPT5cbiAgICAgICAgICByLnNwbGl0KCc7JykubWFwKChyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsbmdsYXQgPSByLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICByZXR1cm4gWytsbmdsYXRbMF0sICtsbmdsYXRbMV1dO1xuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICBkYXRhLnB1c2goe1xuICAgICAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgICAgICB0eXBlOiAnUG9seWdvbicsXG4gICAgICAgICAgICBjb29yZGluYXRlczogY29vcmRpbmF0ZXMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmxheWVyLnNldERhdGEoZGF0YSk7XG4gIH1cblxuICBATWV0aG9kKCflvIDlp4vnu5jliLYnKVxuICBhc3luYyBzdGFydERyYXcoXG4gICAgQFBhcmFtKCfnsbvlnosnLCB7XG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgIGVudW06IFtcbiAgICAgICAgeyBsYWJlbDogJ+Wkmui+ueW9oicsIHZhbHVlOiAncG9seWdvbicgfSxcbiAgICAgICAgeyBsYWJlbDogJ+WchuW9oicsIHZhbHVlOiAnY2lyY2xlJyB9LFxuICAgICAgXSxcbiAgICB9KVxuICAgIHR5cGU6IHN0cmluZyxcbiAgKSB7XG4gICAgY29uc3QgeyBEcmF3U2NlbmUsIFBvbHlnb25EcmF3LCBDaXJjbGVEcmF3LCBPcGVyYXRlRXZlbnRUeXBlIH0gPSBhd2FpdCBpbXBvcnQoJ2JtYXAtZHJhdycpO1xuICAgIGlmICghdGhpcy5zY2VuZSkge1xuICAgICAgdGhpcy5zY2VuZSA9IG5ldyBEcmF3U2NlbmUodGhpcy5wYXJlbnQubWFwLCB7IG5vTGltaXQ6IHRydWUgfSk7XG5cbiAgICAgIHRoaXMuc2NlbmUuYWRkRXZlbnRMaXN0ZW5lcihPcGVyYXRlRXZlbnRUeXBlLkNPTVBMRVRFLCAoZSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgaWYgKGUudGFyZ2V0Lm92ZXJsYXkucmFkaXVzKSB7XG4gICAgICAgICAgY29uc3QgcmFkaXVzID0gZS50YXJnZXQub3ZlcmxheS5yYWRpdXM7XG4gICAgICAgICAgY29uc3QgbG5nbGF0ID0gZS50YXJnZXQub3ZlcmxheS5sYXRMbmc7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdjaXJjbGUnLFxuICAgICAgICAgICAgbG5nbGF0OiBgJHtsbmdsYXQubG5nfSwke2xuZ2xhdC5sYXR9YCxcbiAgICAgICAgICAgIHJhZGl1czogcmFkaXVzLFxuICAgICAgICAgIH07XG4gICAgICAgICAgLy8gdGhpcy50ZW1wT3ZlcmxheS5mb3JFYWNoKChyKSA9PiB7XG4gICAgICAgICAgLy8gICB0aGlzLnBhcmVudC5tYXAucmVtb3ZlT3ZlcmxheShyKTtcbiAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICB0aGlzLmNyZWF0ZS5lbWl0KGRhdGEpO1xuICAgICAgICAgIHRoaXMuZWRpdE92ZXJsYXkgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHBvaW50cyA9IGUudGFyZ2V0Lm92ZXJsYXkuZ2V0UG9pbnRzKCk7XG4gICAgICAgICAgaWYgKCF0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgZGF0YTogYW55O1xuICAgICAgICAgIGlmIChwb2ludHMubGVuZ3RoICYmIEFycmF5LmlzQXJyYXkocG9pbnRzWzBdKSkge1xuICAgICAgICAgICAgZGF0YSA9IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3BvbHlnb24nLFxuICAgICAgICAgICAgICBsbmdsYXQ6IHBvaW50cy5tYXAoKHBzKSA9PiBwcy5tYXAoKHApID0+IGAke3AubGF0TG5nLmxuZ30sJHtwLmxhdExuZy5sYXR9YCkuam9pbignOycpKS5qb2luKCdcXG4nKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSB7XG4gICAgICAgICAgICAgIHR5cGU6ICdwb2x5Z29uJyxcbiAgICAgICAgICAgICAgbG5nbGF0OiBwb2ludHMubWFwKChwKSA9PiBgJHtwLmxhdExuZy5sbmd9LCR7cC5sYXRMbmcubGF0fWApLmpvaW4oJzsnKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5jcmVhdGUuZW1pdChkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLnNjZW5lLmFkZEV2ZW50TGlzdGVuZXIoT3BlcmF0ZUV2ZW50VHlwZS5DQU5DRUwsIChlKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICBpZiAodGhpcy5lZGl0T3ZlcmxheSkge1xuICAgICAgICAgIHRoaXMucGFyZW50Lm1hcC5yZW1vdmVPdmVybGF5KHRoaXMuZWRpdE92ZXJsYXkpO1xuICAgICAgICAgIHRoaXMuZWRpdE92ZXJsYXkgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdwb2x5Z29uJzpcbiAgICAgICAgaWYgKCF0aGlzLnBvbHlnb24pIHtcbiAgICAgICAgICB0aGlzLnBvbHlnb24gPSBuZXcgUG9seWdvbkRyYXcodGhpcy5zY2VuZSwge1xuICAgICAgICAgICAgYXV0b1ZpZXdwb3J0OiB0cnVlLCAvLyDmmK/lkKboh6rliqjosIPmlbTop4bph45cbiAgICAgICAgICAgIGhpZGVUaXA6IGZhbHNlLCAvLyDpmpDol4/nu5jliLbmj5DnpLpcbiAgICAgICAgICAgIGlzU2VyaWVzOiB0cnVlLCAvLyDmmK/lkKblvIDlkK/mibnph4/nu5jliLZcbiAgICAgICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgICAgIGJhc2VPcHRzOiB7XG4gICAgICAgICAgICAgIGZpbGxDb2xvcjogdGhpcy5maWxsQ29sb3IsXG4gICAgICAgICAgICAgIHN0cm9rZVdlaWdodDogdGhpcy5saW5lV2lkdGgsXG4gICAgICAgICAgICAgIHN0cm9rZUNvbG9yOiB0aGlzLmxpbmVDb2xvcixcbiAgICAgICAgICAgICAgLy8gc3Ryb2tlT3BhY2l0eTogMSxcbiAgICAgICAgICAgICAgLy8gZmlsbE9wYWNpdHk6IDAuMixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wb2x5Z29uLm9wZW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjaXJjbGUnOlxuICAgICAgICBpZiAoIXRoaXMuY2lyY2xlKSB7XG4gICAgICAgICAgdGhpcy5jaXJjbGUgPSBuZXcgQ2lyY2xlRHJhdyh0aGlzLnNjZW5lLCB7XG4gICAgICAgICAgICBhdXRvVmlld3BvcnQ6IHRydWUsIC8vIOaYr+WQpuiHquWKqOiwg+aVtOinhumHjlxuICAgICAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICAgICAgaXNTZXJpZXM6IHRydWUsIC8vIOaYr+WQpuW8gOWQr+aJuemHj+e7mOWItlxuICAgICAgICAgICAgLy8gbGFiZWxPcHRpb25zOiB7XG4gICAgICAgICAgICAvLyAgIGJvcmRlclJhZGl1czogJzJweCcsXG4gICAgICAgICAgICAvLyAgIGJhY2tncm91bmQ6ICcjYjVkM2ZiJyxcbiAgICAgICAgICAgIC8vICAgYm9yZGVyOiAnMXB4IHNvbGlkICNiNWQzZmInLFxuICAgICAgICAgICAgLy8gICBjb2xvcjogJyMzMzMnLFxuICAgICAgICAgICAgLy8gICBmb250U2l6ZTogJzEycHgnLFxuICAgICAgICAgICAgLy8gICBsZXR0ZXJTcGFjaW5nOiAnMCcsXG4gICAgICAgICAgICAvLyAgIHBhZGRpbmc6ICc1cHgnLFxuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIGJhc2VPcHRzOiB7XG4gICAgICAgICAgICAgIGZpbGxDb2xvcjogdGhpcy5maWxsQ29sb3IsXG4gICAgICAgICAgICAgIHN0cm9rZVdlaWdodDogdGhpcy5saW5lV2lkdGgsXG4gICAgICAgICAgICAgIHN0cm9rZUNvbG9yOiB0aGlzLmxpbmVDb2xvcixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaXJjbGUub3BlbigpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBnZXRPcHRpb25zKCkge1xuICAgIHJldHVybiB7XG4gICAgICBmaWxsQ29sb3I6IHRoaXMuZmlsbENvbG9yLFxuICAgICAgc3Ryb2tlV2VpZ2h0OiB0aGlzLmxpbmVXaWR0aCxcbiAgICAgIHN0cm9rZUNvbG9yOiB0aGlzLmxpbmVDb2xvcixcbiAgICB9O1xuICB9XG4gIHVwZGF0ZUVkaXREYXRhKCkge1xuICAgIGlmICh0aGlzLmVkaXRMYXllcikge1xuICAgICAgdGhpcy5lZGl0TGF5ZXIuc2V0RGF0YSh0aGlzLmVkaXREYXRhLm1hcCgocikgPT4gKHsgZ2VvbWV0cnk6IHsgdHlwZTogJ1BvaW50JywgY29vcmRpbmF0ZXM6IHIgfSB9KSkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5lZGl0TGluZUxheWVyKSB7XG4gICAgICB0aGlzLmVkaXRMaW5lTGF5ZXIuc2V0RGF0YShbXG4gICAgICAgIHtcbiAgICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgICAgdHlwZTogJ0xpbmVTdHJpbmcnLFxuICAgICAgICAgICAgY29vcmRpbmF0ZXM6IHRoaXMuZWRpdERhdGEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuICAgIH1cbiAgfVxuXG4gIEBNZXRob2QoJ+e7k+adn+e7mOWIticpXG4gIHN0b3BEcmF3KCkge1xuICAgIHRoaXMuc2NlbmU/LmNsb3NlKCk7XG4gICAgLy8gdGhpcy5zdG9wRWRpdCQubmV4dCgpO1xuICAgIC8vIGlmICh0aGlzLmVkaXRMYXllcikge1xuICAgIC8vICAgdGhpcy5wYXJlbnQucmVtb3ZlTGF5ZXIodGhpcy5lZGl0TGF5ZXIpO1xuICAgIC8vICAgdGhpcy5lZGl0TGF5ZXIgPSBudWxsO1xuICAgIC8vIH1cbiAgICAvLyBpZiAodGhpcy5lZGl0TGluZUxheWVyKSB7XG4gICAgLy8gICB0aGlzLnBhcmVudC5yZW1vdmVMYXllcih0aGlzLmVkaXRMaW5lTGF5ZXIpO1xuICAgIC8vICAgdGhpcy5lZGl0TGluZUxheWVyID0gbnVsbDtcbiAgICAvLyB9XG4gICAgLy8gaWYgKHRoaXMuZWRpdERhdGE/Lmxlbmd0aCA+PSAzKSB7XG4gICAgLy8gICBpZiAoIXRoaXMuZGF0YSkge1xuICAgIC8vICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAvLyAgIH1cbiAgICAvLyAgIGNvbnN0IGRhdGEgPSB7XG4gICAgLy8gICAgIHR5cGU6ICdwb2x5Z29uJyxcbiAgICAvLyAgICAgbG5nbGF0OiB0aGlzLmVkaXREYXRhLm1hcCgocikgPT4gci5qb2luKCcsJykpLmpvaW4oJzsnKSxcbiAgICAvLyAgIH07XG4gICAgLy8gICB0aGlzLmRhdGEucHVzaChkYXRhKTtcbiAgICAvLyAgIHRoaXMudXBkYXRlRGF0YSgpO1xuICAgIC8vICAgdGhpcy5jcmVhdGUuZW1pdChkYXRhKTtcbiAgICAvLyB9XG4gICAgLy8gdGhpcy5lZGl0RGF0YSA9IG51bGw7XG4gIH1cblxuICBhc3luYyBzZWFyY2goKSB7XG4gICAgLy8g5aaC5p6c5q2j5Zyo57uY5Yi25aSa6L655b2i5Zu05qCP77yM6I635Y+W5Zyw5ZCN6L6555WM5bm257uY5Yi2XG4gICAgY29uc3QgeyBQb2x5Z29uRWRpdCB9ID0gYXdhaXQgaW1wb3J0KCdibWFwLWRyYXcnKTtcbiAgICBpZiAodGhpcy5hcmVhTmFtZSkge1xuICAgICAgY29uc3QgYm91bmRhcnkgPSBuZXcgQk1hcEdMLkJvdW5kYXJ5KCk7XG4gICAgICAvLyDnmb7luqblnLDlm74gR2VvY29kZXIuZ2V0TG9jYXRpb24g5Zue6LCD562+5ZCN77yaKHJlc3VsdHMsIHN0YXR1cylcbiAgICAgIGJvdW5kYXJ5LmdldCh0aGlzLmFyZWFOYW1lLCAocmVzdWx0cykgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygn6L6555WM5Z2Q5qCH5pWw57uE77yaJywgcmVzdWx0cyk7XG4gICAgICAgIC8vIOajgOafpeeKtuaAgeaYr+WQpuaIkOWKn1xuICAgICAgICBpZiAocmVzdWx0cyAmJiByZXN1bHRzLmJvdW5kYXJpZXMgJiYgcmVzdWx0cy5ib3VuZGFyaWVzLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuc3RvcERyYXcoKTtcbiAgICAgICAgICBpZiAoIXRoaXMucG9seWdvbkVkaXQpIHtcbiAgICAgICAgICAgIHRoaXMucG9seWdvbkVkaXQgPSBuZXcgUG9seWdvbkVkaXQodGhpcy5zY2VuZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHBvaW50cyA9IChyZXN1bHRzLmJvdW5kYXJpZXMgYXMgc3RyaW5nW10pLm1hcCgoYm91bmRhcnkpID0+XG4gICAgICAgICAgICBib3VuZGFyeS5zcGxpdCgnOycpLm1hcCgocCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBbbG5nLCBsYXRdID0gcC5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IEJNYXBHTC5Qb2ludChOdW1iZXIobG5nKSwgTnVtYmVyKGxhdCkpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBvdmVybGF5ID0gbmV3IEJNYXBHTC5Qb2x5Z29uKHBvaW50cywgdGhpcy5nZXRPcHRpb25zKCkpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKG92ZXJsYXkpO1xuICAgICAgICAgIHRoaXMuZWRpdE92ZXJsYXkgPSBvdmVybGF5O1xuICAgICAgICAgIHRoaXMucGFyZW50Lm1hcC5hZGRPdmVybGF5KG92ZXJsYXkpO1xuICAgICAgICAgIHRoaXMucGFyZW50Lm1hcC5zZXRWaWV3cG9ydChbXS5jb25jYXQuYXBwbHkoW10sIHBvaW50cykpO1xuICAgICAgICAgIHRoaXMucG9seWdvbkVkaXQuZWRpdChvdmVybGF5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2UuZXJyb3IoJ+ihjOaUv+WMuuWfn+S4jeWtmOWcqCcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpbml0U2VhcmNoKCkge1xuICAgIGNvbnN0IHsgUG9seWdvbkVkaXQsIENpcmNsZUVkaXQgfSA9IGF3YWl0IGltcG9ydCgnYm1hcC1kcmF3Jyk7XG4gICAgY29uc3QgYWMgPSBuZXcgQk1hcEdMLkF1dG9jb21wbGV0ZSh7XG4gICAgICBpbnB1dDogdGhpcy5zdWdnZXN0Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICBsb2NhdGlvbjogdGhpcy5wYXJlbnQubWFwLFxuICAgIH0pO1xuICAgIGFjLmFkZEV2ZW50TGlzdGVuZXIoJ29uY29uZmlybScsIChlKSA9PiB7XG4gICAgICAvLyDpvKDmoIfngrnlh7vkuIvmi4nliJfooajlkI7nmoTkuovku7ZcbiAgICAgIGNvbnN0IHZhbHVlID0gZS5pdGVtLnZhbHVlO1xuICAgICAgY29uc29sZS5sb2coZSk7XG5cbiAgICAgIC8vIOWmguaenOato+WcqOe7mOWItuWchuW9ouWbtOagj1xuICAgICAgaWYgKHRoaXMuY2lyY2xlKSB7XG4gICAgICAgIGlmICghdGhpcy5jaXJjbGVFZGl0KSB7XG4gICAgICAgICAgdGhpcy5jaXJjbGVFZGl0ID0gbmV3IENpcmNsZUVkaXQodGhpcy5zY2VuZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2VudGVyID0gbmV3IEJNYXBHTC5Qb2ludCh2YWx1ZS5sb2NhdGlvbi5sbmcsIHZhbHVlLmxvY2F0aW9uLmxhdCk7XG4gICAgICAgIHRoaXMucGFyZW50Lm1hcC5jZW50ZXJBbmRab29tKGNlbnRlciwgMTYpO1xuICAgICAgICBjb25zdCBvdmVybGF5ID0gbmV3IEJNYXBHTC5DaXJjbGUoY2VudGVyLCAzMDAsIHRoaXMuZ2V0T3B0aW9ucygpKTtcbiAgICAgICAgdGhpcy5lZGl0T3ZlcmxheSA9IG92ZXJsYXk7XG4gICAgICAgIHRoaXMucGFyZW50Lm1hcC5hZGRPdmVybGF5KG92ZXJsYXkpO1xuICAgICAgICB0aGlzLmNpcmNsZUVkaXQub3BlbihvdmVybGF5KTtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIEBNZXRob2QoJ+enu+WKqOWIsOS4reW/gycpXG4gIG1vdmVUb1ZpZXcoQFBhcmFtKCdpZCcpIGlkOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuZGF0YSB8fCAhaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YS5maW5kKChyKSA9PiByLmlkID09PSBpZCk7XG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChkYXRhLnR5cGUgPT09ICdjaXJjbGUnKSB7XG4gICAgICBjb25zdCBbbG5nLCBsYXRdID0gZGF0YS5sbmdsYXQuc3BsaXQoJywnKTtcbiAgICAgIGNvbnN0IGNlbnRlckxuZyA9IE51bWJlcihsbmcpO1xuICAgICAgY29uc3QgY2VudGVyTGF0ID0gTnVtYmVyKGxhdCk7XG4gICAgICBjb25zdCByYWRpdXMgPSBOdW1iZXIoZGF0YS5yYWRpdXMpO1xuXG4gICAgICAvLyDovazmjaLkuK3lv4PngrnnuqzluqbkuLrlvKfluqZcbiAgICAgIGNvbnN0IGNlbnRlckxhdFJhZCA9IChjZW50ZXJMYXQgKiBNYXRoLlBJKSAvIDE4MDtcblxuICAgICAgLy8g6K6h566X57uP5bqm5pa55ZCR55qE5YGP56e777yI5byn5bqm77yJXG4gICAgICBjb25zdCBkZWx0YUxuZ1JhZCA9IHJhZGl1cyAvIChFQVJUSF9SQURJVVMgKiBNYXRoLmNvcyhjZW50ZXJMYXRSYWQpKTtcbiAgICAgIC8vIOiuoeeul+e6rOW6puaWueWQkeeahOWBj+enu++8iOW8p+W6pu+8iVxuICAgICAgY29uc3QgZGVsdGFMYXRSYWQgPSByYWRpdXMgLyBFQVJUSF9SQURJVVM7XG5cbiAgICAgIC8vIOi9rOaNouS4uuinkuW6puWBj+enu1xuICAgICAgY29uc3QgZGVsdGFMbmcgPSAoZGVsdGFMbmdSYWQgKiAxODApIC8gTWF0aC5QSTtcbiAgICAgIGNvbnN0IGRlbHRhTGF0ID0gKGRlbHRhTGF0UmFkICogMTgwKSAvIE1hdGguUEk7XG5cbiAgICAgIC8vIOiuoeeul+WchuW9oueahOWbm+S4qui+ueeVjOeCue+8iOS4iuOAgeS4i+OAgeW3puOAgeWPs++8iVxuICAgICAgY29uc3QgcG9pbnRzID0gW1xuICAgICAgICBuZXcgQk1hcEdMLlBvaW50KGNlbnRlckxuZywgY2VudGVyTGF0ICsgZGVsdGFMYXQpLCAvLyDkuIpcbiAgICAgICAgbmV3IEJNYXBHTC5Qb2ludChjZW50ZXJMbmcsIGNlbnRlckxhdCAtIGRlbHRhTGF0KSwgLy8g5LiLXG4gICAgICAgIG5ldyBCTWFwR0wuUG9pbnQoY2VudGVyTG5nIC0gZGVsdGFMbmcsIGNlbnRlckxhdCksIC8vIOW3plxuICAgICAgICBuZXcgQk1hcEdMLlBvaW50KGNlbnRlckxuZyArIGRlbHRhTG5nLCBjZW50ZXJMYXQpLCAvLyDlj7NcbiAgICAgIF07XG5cbiAgICAgIC8vIOS9v+eUqCBzZXRWaWV3cG9ydCDmlrnms5XosIPmlbTop4blm77vvIzkvb/mlbTkuKrlnIblvaLlj6/op4FcbiAgICAgIHRoaXMucGFyZW50Lm1hcC5zZXRWaWV3cG9ydChwb2ludHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhcmVudC5tYXAuc2V0Vmlld3BvcnQoXG4gICAgICAgIGRhdGEubG5nbGF0LnNwbGl0KC9bO1xcblxccl0rLykubWFwKChwKSA9PiB7XG4gICAgICAgICAgY29uc3QgW2xuZywgbGF0XSA9IHAuc3BsaXQoJywnKTtcbiAgICAgICAgICByZXR1cm4gbmV3IEJNYXBHTC5Qb2ludChOdW1iZXIobG5nKSwgTnVtYmVyKGxhdCkpO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iXX0=
584
+ export { ɵ0, ɵ1 };
585
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFpZHUtZmVuY2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2NyZWVuLXdpZGdldC9zcmMvbGliL2N1c3RvbS1iYWlkdS1tYXAvYmFpZHUtZmVuY2UvYmFpZHUtZmVuY2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFxQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRy9CLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBSXpELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQztXQTRDbkIsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FtQzdCLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO0lBbkU5QixtQkFBbUIsU0FBbkIsbUJBQW9CLFNBQVEsU0FBUztJQTZGaEQsWUFDWSxNQUErQixFQUMvQixJQUFZLEVBQ2QsT0FBeUI7UUFFakMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUpWLFdBQU0sR0FBTixNQUFNLENBQXlCO1FBQy9CLFNBQUksR0FBSixJQUFJLENBQVE7UUFDZCxZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQS9GbkMsb0ZBQW9GO1FBQ3BG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RTtRQUNULElBQUksRUFBRSxFQUFFO1FBQ1IsTUFBTSxFQUFFLElBQUk7S0FDYixDQUFDO3FDQStGb0IsdUJBQXVCO1FBQ3pCLE1BQU07UUFDTCxnQkFBZ0I7R0FoR3hCLG1CQUFtQixDQThnQi9CO1NBOWdCWSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgTmdab25lLCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCYXNlTGF5ZXIgfSBmcm9tICcuLi9iYXNlLWxheWVyJztcbmltcG9ydCB7IERhdGEsIE1ldGhvZCwgUHJvcGVydHksIFdpZGdldCwgRXZlbnQsIFBhcmFtIH0gZnJvbSAnYmJqLXdpZGdldC1iYXNlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERyYXdTY2VuZSwgUmVjdERyYXcgfSBmcm9tICdibWFwLWRyYXcnO1xuaW1wb3J0IHsgQ3VzdG9tQmFpZHVNYXBDb21wb25lbnQgfSBmcm9tICcuLi9jdXN0b20tYmFpZHUtbWFwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOek1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9tZXNzYWdlJztcbmltcG9ydCB7IGJkMDltY1RvQmQwOWxsIH0gZnJvbSAnYmJqLXNjcmVlbi13aWRnZXQvY29yZSc7XG5kZWNsYXJlIGNvbnN0IG1hcHZnbDtcbmRlY2xhcmUgY29uc3QgQk1hcEdMO1xuY29uc3QgRUFSVEhfUkFESVVTID0gNjM3MTM5MztcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NjLWJhaWR1LWZlbmNlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2JhaWR1LWZlbmNlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYmFpZHUtZmVuY2UuY29tcG9uZW50Lmxlc3MnXSxcbn0pXG5AV2lkZ2V0KCfnlLXlrZDlm7TmoI8nLCB7XG4gIGdyb3VwOiAnY29tcG9uZW50JyxcbiAgaW1hZ2U6ICcnLFxuICBpY29uOiAnJyxcbiAgaGlkZGVuOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBCYWlkdUZlbmNlQ29tcG9uZW50IGV4dGVuZHMgQmFzZUxheWVyIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvLyBAUHJvcGVydHkoJ+agh+etvuWtl+S9kycsIHsgdWk6IHsgd2lkZ2V0OiAnbXlGb250JywgdmlzaWJsZUlmOiB7IHNob3dMYWJlbDogW3RydWVdIH0gfSB9KVxuICAvLyB0ZXh0Rm9udDogYW55ID0ge1xuICAvLyAgIGZhbWlseTogJycsXG4gIC8vICAgY29sb3I6ICcjMDAwMDAwJyxcbiAgLy8gICB3ZWlnaHQ6ICdub3JtYWwnLFxuICAvLyAgIHNpemU6IDE2LFxuICAvLyAgIHNwYWNlOiAwLFxuICAvLyAgIGxpbmVIZWlnaHQ6IDAsXG4gIC8vIH07XG4gIEBQcm9wZXJ0eSgn57q/5p2h5a695bqmJywge1xuICAgIHVpOiB7IHdpZGdldDogJ215UmFuZ2UnLCBtaW46IDEsIG1heDogNDAsIHN0ZXA6IDEgfSxcbiAgfSlcbiAgbGluZVdpZHRoID0gMjtcbiAgQFByb3BlcnR5KCfnur/mnaHpopzoibInLCB7XG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgdWk6IHtcbiAgICAgIHdpZGdldDogJ215Q29sb3InLFxuICAgIH0sXG4gIH0pXG4gIGxpbmVDb2xvciA9ICdyZ2IoNTAsIDEzMywgMjU1KSc7XG4gIEBQcm9wZXJ0eSgn5aGr5YWF6aKc6ImyJywge1xuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIHVpOiB7XG4gICAgICB3aWRnZXQ6ICdteUNvbG9yJyxcbiAgICB9LFxuICB9KVxuICBmaWxsQ29sb3IgPSAncmdiYSgyNDgsIDIzMSwgMjgsIDAuMiknO1xuICBAUHJvcGVydHkoJ+aYvuekuue7mOWItuaMiemSricsIHsgdHlwZTogJ2Jvb2xlYW4nIH0pXG4gIHNob3dEcmF3QnV0dG9uID0gdHJ1ZTtcbiAgQERhdGEoe1xuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIGlkOiB7IHR5cGU6ICdzdHJpbmcnLCB0aXRsZTogJ0lEJyB9LFxuICAgICAgLy8gbmFtZTogeyB0eXBlOiAnc3RyaW5nJywgdGl0bGU6ICflm7TmoI/lkI3np7AnIH0sXG4gICAgICB0eXBlOiB7IHR5cGU6ICdzdHJpbmcnLCB0aXRsZTogJ+WbtOagj+exu+WeiycgfSxcbiAgICAgIGxuZ2xhdDogeyB0eXBlOiAnc3RyaW5nJywgdGl0bGU6ICfnu4/nuqzluqYnIH0sXG4gICAgICByYWRpdXM6IHsgdHlwZTogJ251bWJlcicsIHRpdGxlOiAn5Y2K5b6EJyB9LFxuICAgIH0sXG4gIH0pXG4gIGRhdGE6IGFueVtdID0gW1xuICAgIHtcbiAgICAgIC8vIG5hbWU6ICflpJrovrnlvaInLFxuICAgICAgaWQ6ICcxJyxcbiAgICAgIHR5cGU6ICdwb2x5Z29uJyxcbiAgICAgIGxuZ2xhdDogJzEyMC43LDI4OzEyMC44LDI4OzEyMC44LDI3Ljk7MTIwLjcsMjcuOScsXG4gICAgfSxcbiAgICB7XG4gICAgICAvLyBuYW1lOiAn5ZyG5b2iJyxcbiAgICAgIGlkOiAnMicsXG4gICAgICB0eXBlOiAnY2lyY2xlJyxcbiAgICAgIGxuZ2xhdDogJzEyMC42LDI3LjknLFxuICAgICAgcmFkaXVzOiA1MDAwLFxuICAgIH0sXG4gIF07XG4gIEBFdmVudCgn5paw5aKe5Zu05qCPJywge1xuICAgIHBhcmFtczoge1xuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICB0eXBlOiB7IHR5cGU6ICdzdHJpbmcnLCB0aXRsZTogJ+WbtOagj+exu+WeiycgfSxcbiAgICAgICAgbG5nbGF0OiB7IHR5cGU6ICdzdHJpbmcnLCB0aXRsZTogJ+e7j+e6rOW6picgfSxcbiAgICAgICAgcmFkaXVzOiB7IHR5cGU6ICdudW1iZXInLCB0aXRsZTogJ+WNiuW+hCcgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSlcbiAgY3JlYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBFdmVudCgn57yW6L6R5Zu05qCPJywge1xuICAgIHBhcmFtczoge1xuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBpZDogeyB0eXBlOiAnc3RyaW5nJywgdGl0bGU6ICdJRCcgfSxcbiAgICAgICAgdHlwZTogeyB0eXBlOiAnc3RyaW5nJywgdGl0bGU6ICflm7TmoI/nsbvlnosnIH0sXG4gICAgICAgIGxuZ2xhdDogeyB0eXBlOiAnc3RyaW5nJywgdGl0bGU6ICfnu4/nuqzluqYnIH0sXG4gICAgICAgIHJhZGl1czogeyB0eXBlOiAnbnVtYmVyJywgdGl0bGU6ICfljYrlvoQnIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pXG4gIHVwZGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBsYXllcjogYW55O1xuICB0ZXh0TGF5ZXI6IGFueTtcbiAgZWRpdExheWVyOiBhbnk7XG4gIGVkaXREYXRhID0gW107XG4gIHN0b3BFZGl0JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIGVkaXRMaW5lTGF5ZXI6IGFueTtcbiAgc2VhcmNoVGV4dDogc3RyaW5nO1xuICBhcmVhTmFtZTogc3RyaW5nO1xuICBwb2x5Z29uOiBhbnk7XG4gIGNpcmNsZTogYW55O1xuICBzY2VuZTogYW55O1xuICBjaXJjbGVFZGl0OiBhbnk7XG4gIEBWaWV3Q2hpbGQoJ3N1Z2dlc3QnKVxuICBzdWdnZXN0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBwb2x5Z29uRWRpdDogYW55O1xuICBlZGl0T3ZlcmxheTogYW55O1xuICBlZGl0SWQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcGFyZW50OiBDdXN0b21CYWlkdU1hcENvbXBvbmVudCxcbiAgICBwcm90ZWN0ZWQgem9uZTogTmdab25lLFxuICAgIHByaXZhdGUgbWVzc2FnZTogTnpNZXNzYWdlU2VydmljZSxcbiAgKSB7XG4gICAgc3VwZXIocGFyZW50LCB6b25lKTtcbiAgfVxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIGF3YWl0IHRoaXMucGFyZW50LmluaXQkO1xuICAgIHRoaXMuaW5pdFNlYXJjaCgpO1xuICAgIC8vIHRoaXMuc3RhcnREcmF3KCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIHRoaXMuc3RvcERyYXcoKTtcbiAgICB0aGlzLnNjZW5lPy5jbGVhckRhdGEoKTtcbiAgfVxuXG4gIGNyZWF0ZUxheWVycygpOiBhbnlbXSB7XG4gICAgdGhpcy5sYXllciA9IG5ldyBtYXB2Z2wuUG9seWdvbkxheWVyKHtcbiAgICAgIHJlbmRlck9yZGVyOiAtMSxcbiAgICAgIGxpbmVDb2xvcjogdGhpcy5saW5lQ29sb3IsXG4gICAgICBsaW5lV2lkdGg6IHRoaXMubGluZVdpZHRoLFxuICAgICAgZmlsbENvbG9yOiB0aGlzLmZpbGxDb2xvcixcbiAgICB9KTtcbiAgICAvLyB0aGlzLnRleHRMYXllciA9IG5ldyBtYXB2Z2wuVGV4dExheWVyKHtcbiAgICAvLyAgIHJlbmRlck9yZGVyOiAtMSxcbiAgICAvLyAgIC4uLnRoaXMuZ2V0VGV4dE9wdGlvbnModGhpcy50ZXh0Rm9udCksXG4gICAgLy8gfSk7XG4gICAgcmV0dXJuIFt0aGlzLmxheWVyXTtcbiAgfVxuICB1cGRhdGVEYXRhKCk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGEgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHIgb2YgdGhpcy5kYXRhKSB7XG4gICAgICBpZiAoci5pZCAmJiByLmlkID09PSB0aGlzLmVkaXRJZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyLnR5cGUgPT09ICdjaXJjbGUnKSB7XG4gICAgICAgIGlmICghci5yYWRpdXMgfHwgIXIubG5nbGF0KSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHBvaW50c0NvdW50ID0gOTA7XG4gICAgICAgIGNvbnN0IHJhZGl1cyA9IHIucmFkaXVzO1xuICAgICAgICBjb25zdCBsbmdsYXQgPSByLmxuZ2xhdC5zcGxpdCgnLCcpO1xuICAgICAgICBjb25zdCBjZW50ZXJMbmcgPSArbG5nbGF0WzBdO1xuICAgICAgICBjb25zdCBjZW50ZXJMYXQgPSArbG5nbGF0WzFdO1xuICAgICAgICAvLyDovazmjaLkuK3lv4PngrnnuqzluqbkuLrlvKfluqZcbiAgICAgICAgY29uc3QgY2VudGVyTGF0UmFkID0gKGNlbnRlckxhdCAqIE1hdGguUEkpIC8gMTgwO1xuICAgICAgICAvLyDlrZjlgqjovajov7nngrnnmoTmlbDnu4RcbiAgICAgICAgY29uc3QgY29vcmRpbmF0ZXMgPSBbXTtcblxuICAgICAgICAvLyDpgY3ljoYgMH4zNjDCsO+8jOeUn+aIkOetiemXtOmalOeahOeCuVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50c0NvdW50OyBpKyspIHtcbiAgICAgICAgICAvLyDorqHnrpflvZPliY3ngrnnmoTmlrnkvY3op5LvvIjlvKfluqbvvInvvJrku44wwrDliLAzNjDCsO+8jOWdh+WIhnBvaW50c0NvdW505Lu9XG4gICAgICAgICAgY29uc3QgYW5nbGVSYWQgPSAoKChpICogMzYwKSAvIHBvaW50c0NvdW50KSAqIE1hdGguUEkpIC8gMTgwO1xuXG4gICAgICAgICAgLy8g6K6h566X5b2T5YmN54K555u45a+55LqO5Lit5b+D54K555qE57uP57qs5bqm5aKe6YeP77yI5byn5bqm77yJXG4gICAgICAgICAgY29uc3QgZGVsdGFMYXRSYWQgPSAocmFkaXVzICogTWF0aC5jb3MoYW5nbGVSYWQpKSAvIEVBUlRIX1JBRElVUztcbiAgICAgICAgICBjb25zdCBkZWx0YUxuZ1JhZCA9IChyYWRpdXMgKiBNYXRoLnNpbihhbmdsZVJhZCkpIC8gKEVBUlRIX1JBRElVUyAqIE1hdGguY29zKGNlbnRlckxhdFJhZCkpO1xuXG4gICAgICAgICAgLy8g6L2s5o2i5Li66KeS5bqm77yM5bm26K6h566X5paw5Z2Q5qCHXG4gICAgICAgICAgY29uc3QgbmV3TGF0ID0gY2VudGVyTGF0ICsgKGRlbHRhTGF0UmFkICogMTgwKSAvIE1hdGguUEk7XG4gICAgICAgICAgY29uc3QgbmV3TG5nID0gY2VudGVyTG5nICsgKGRlbHRhTG5nUmFkICogMTgwKSAvIE1hdGguUEk7XG5cbiAgICAgICAgICAvLyDmt7vliqDliLDovajov7nmlbDnu4TvvIjkv53nlZk25L2N5bCP5pWw77yM57uP57qs5bqm5bi46KeE57K+5bqm77yJXG4gICAgICAgICAgY29vcmRpbmF0ZXMucHVzaChbcGFyc2VGbG9hdChuZXdMbmcudG9GaXhlZCg2KSksIHBhcnNlRmxvYXQobmV3TGF0LnRvRml4ZWQoNikpXSk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5wdXNoKHtcbiAgICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgICAgdHlwZTogJ1BvbHlnb24nLFxuICAgICAgICAgICAgY29vcmRpbmF0ZXM6IFtjb29yZGluYXRlc10sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXIubG5nbGF0KSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc3QgY29vcmRpbmF0ZXMgPSByLmxuZ2xhdC5zcGxpdCgnOycpLm1hcCgocikgPT4ge1xuICAgICAgICAvLyAgIGNvbnN0IGxuZ2xhdCA9IHIuc3BsaXQoJywnKTtcbiAgICAgICAgLy8gICByZXR1cm4gWytsbmdsYXRbMF0sICtsbmdsYXRbMV1dO1xuICAgICAgICAvLyB9KTtcbiAgICAgICAgY29uc3QgY29vcmRpbmF0ZXMgPSByLmxuZ2xhdC5zcGxpdCgnXFxuJykubWFwKChyKSA9PlxuICAgICAgICAgIHIuc3BsaXQoJzsnKS5tYXAoKHIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxuZ2xhdCA9IHIuc3BsaXQoJywnKTtcbiAgICAgICAgICAgIHJldHVybiBbK2xuZ2xhdFswXSwgK2xuZ2xhdFsxXV07XG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIGRhdGEucHVzaCh7XG4gICAgICAgICAgaWQ6IHIuaWQsXG4gICAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICAgIHR5cGU6ICdQb2x5Z29uJyxcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBjb29yZGluYXRlcyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxheWVyLnNldERhdGEoZGF0YSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVTY2VuZSgpIHtcbiAgICBjb25zdCB7IERyYXdTY2VuZSwgT3BlcmF0ZUV2ZW50VHlwZSB9ID0gYXdhaXQgaW1wb3J0KCdibWFwLWRyYXcnKTtcbiAgICBpZiAoIXRoaXMuc2NlbmUpIHtcbiAgICAgIHRoaXMuc2NlbmUgPSBuZXcgRHJhd1NjZW5lKHRoaXMucGFyZW50Lm1hcCwgeyBub0xpbWl0OiB0cnVlIH0pO1xuICAgICAgdGhpcy5zY2VuZS5hZGRFdmVudExpc3RlbmVyKE9wZXJhdGVFdmVudFR5cGUuQ09NUExFVEUsIChlKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICBsZXQgZGF0YTogYW55O1xuICAgICAgICBpZiAoZS50YXJnZXQub3ZlcmxheS5yYWRpdXMpIHtcbiAgICAgICAgICBjb25zdCByYWRpdXMgPSBlLnRhcmdldC5vdmVybGF5LnJhZGl1cztcbiAgICAgICAgICBjb25zdCBsbmdsYXQgPSBlLnRhcmdldC5vdmVybGF5LmxhdExuZztcbiAgICAgICAgICBkYXRhID0ge1xuICAgICAgICAgICAgdHlwZTogJ2NpcmNsZScsXG4gICAgICAgICAgICBsbmdsYXQ6IGAke2xuZ2xhdC5sbmd9LCR7bG5nbGF0LmxhdH1gLFxuICAgICAgICAgICAgcmFkaXVzOiByYWRpdXMsXG4gICAgICAgICAgfTtcbiAgICAgICAgICAvLyB0aGlzLnRlbXBPdmVybGF5LmZvckVhY2goKHIpID0+IHtcbiAgICAgICAgICAvLyAgIHRoaXMucGFyZW50Lm1hcC5yZW1vdmVPdmVybGF5KHIpO1xuICAgICAgICAgIC8vIH0pO1xuICAgICAgICAgIHRoaXMuY3JlYXRlLmVtaXQoZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgcG9pbnRzID0gZS50YXJnZXQub3ZlcmxheS5nZXRQb2ludHMoKTtcbiAgICAgICAgICBpZiAoIXRoaXMuZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gW107XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwb2ludHMubGVuZ3RoICYmIEFycmF5LmlzQXJyYXkocG9pbnRzWzBdKSkge1xuICAgICAgICAgICAgZGF0YSA9IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3BvbHlnb24nLFxuICAgICAgICAgICAgICBsbmdsYXQ6IHBvaW50cy5tYXAoKHBzKSA9PiBwcy5tYXAoKHApID0+IGAke3AubGF0TG5nLmxuZ30sJHtwLmxhdExuZy5sYXR9YCkuam9pbignOycpKS5qb2luKCdcXG4nKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSB7XG4gICAgICAgICAgICAgIHR5cGU6ICdwb2x5Z29uJyxcbiAgICAgICAgICAgICAgbG5nbGF0OiBwb2ludHNcbiAgICAgICAgICAgICAgICAubWFwKChwKSA9PiB7XG4gICAgICAgICAgICAgICAgICBsZXQgbGF0TG5nID0gcC5sYXRMbmc7XG4gICAgICAgICAgICAgICAgICBpZiAoIWxhdExuZykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBbbG5nLCBsYXRdID0gdGhpcy5wYXJlbnQubWFwLm1lcmNhdG9yVG9MbmdsYXQocC5sbmcsIHAubGF0KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke2xuZ30sJHtsYXR9YDtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtsYXRMbmcubG5nfSwke2xhdExuZy5sYXR9YDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5qb2luKCc7JyksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVkaXRPdmVybGF5ID0gbnVsbDtcbiAgICAgICAgdGhpcy5wYXJlbnQubWFwLnJlbW92ZU92ZXJsYXkoZS50YXJnZXQub3ZlcmxheSk7XG4gICAgICAgIGlmICh0aGlzLmVkaXRJZCkge1xuICAgICAgICAgIGRhdGEuaWQgPSB0aGlzLmVkaXRJZDtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZGF0YS5maW5kSW5kZXgoKHIpID0+IHIuaWQgPT09IHRoaXMuZWRpdElkKTtcbiAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaW5kZXhdID0gZGF0YTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5lZGl0SWQgPSBudWxsO1xuICAgICAgICAgIHRoaXMudXBkYXRlRGF0YSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGF0YS5wdXNoKGRhdGEpO1xuICAgICAgICAgIHRoaXMudXBkYXRlRGF0YSgpO1xuICAgICAgICAgIHRoaXMuY3JlYXRlLmVtaXQoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5zY2VuZS5hZGRFdmVudExpc3RlbmVyKE9wZXJhdGVFdmVudFR5cGUuQ0FOQ0VMLCAoZSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5lZGl0T3ZlcmxheSkge1xuICAgICAgICAgIHRoaXMucGFyZW50Lm1hcC5yZW1vdmVPdmVybGF5KHRoaXMuZWRpdE92ZXJsYXkpO1xuICAgICAgICAgIHRoaXMuZWRpdE92ZXJsYXkgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVkaXRJZCkge1xuICAgICAgICAgIHRoaXMuZWRpdElkID0gbnVsbDtcbiAgICAgICAgICB0aGlzLnVwZGF0ZURhdGEoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgQE1ldGhvZCgn5byA5aeL57uY5Yi2JylcbiAgYXN5bmMgc3RhcnREcmF3KFxuICAgIEBQYXJhbSgn57G75Z6LJywge1xuICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICBlbnVtOiBbXG4gICAgICAgIHsgbGFiZWw6ICflpJrovrnlvaInLCB2YWx1ZTogJ3BvbHlnb24nIH0sXG4gICAgICAgIHsgbGFiZWw6ICflnIblvaInLCB2YWx1ZTogJ2NpcmNsZScgfSxcbiAgICAgIF0sXG4gICAgfSlcbiAgICB0eXBlOiBzdHJpbmcsXG4gICkge1xuICAgIHRoaXMuY3JlYXRlU2NlbmUoKTtcbiAgICBjb25zdCB7IFBvbHlnb25EcmF3LCBDaXJjbGVEcmF3IH0gPSBhd2FpdCBpbXBvcnQoJ2JtYXAtZHJhdycpO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAncG9seWdvbic6XG4gICAgICAgIGlmICghdGhpcy5wb2x5Z29uKSB7XG4gICAgICAgICAgdGhpcy5wb2x5Z29uID0gbmV3IFBvbHlnb25EcmF3KHRoaXMuc2NlbmUsIHtcbiAgICAgICAgICAgIGF1dG9WaWV3cG9ydDogdHJ1ZSwgLy8g5piv5ZCm6Ieq5Yqo6LCD5pW06KeG6YeOXG4gICAgICAgICAgICBoaWRlVGlwOiBmYWxzZSwgLy8g6ZqQ6JeP57uY5Yi25o+Q56S6XG4gICAgICAgICAgICBpc1NlcmllczogdHJ1ZSwgLy8g5piv5ZCm5byA5ZCv5om56YeP57uY5Yi2XG4gICAgICAgICAgICBpc09wZW46IHRydWUsXG4gICAgICAgICAgICBiYXNlT3B0czoge1xuICAgICAgICAgICAgICBmaWxsQ29sb3I6IHRoaXMuZmlsbENvbG9yLFxuICAgICAgICAgICAgICBzdHJva2VXZWlnaHQ6IHRoaXMubGluZVdpZHRoLFxuICAgICAgICAgICAgICBzdHJva2VDb2xvcjogdGhpcy5saW5lQ29sb3IsXG4gICAgICAgICAgICAgIC8vIHN0cm9rZU9wYWNpdHk6IDEsXG4gICAgICAgICAgICAgIC8vIGZpbGxPcGFjaXR5OiAwLjIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9seWdvbi5vcGVuKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2lyY2xlJzpcbiAgICAgICAgaWYgKCF0aGlzLmNpcmNsZSkge1xuICAgICAgICAgIHRoaXMuY2lyY2xlID0gbmV3IENpcmNsZURyYXcodGhpcy5zY2VuZSwge1xuICAgICAgICAgICAgYXV0b1ZpZXdwb3J0OiB0cnVlLCAvLyDmmK/lkKboh6rliqjosIPmlbTop4bph45cbiAgICAgICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgICAgIGlzU2VyaWVzOiB0cnVlLCAvLyDmmK/lkKblvIDlkK/mibnph4/nu5jliLZcbiAgICAgICAgICAgIC8vIGxhYmVsT3B0aW9uczoge1xuICAgICAgICAgICAgLy8gICBib3JkZXJSYWRpdXM6ICcycHgnLFxuICAgICAgICAgICAgLy8gICBiYWNrZ3JvdW5kOiAnI2I1ZDNmYicsXG4gICAgICAgICAgICAvLyAgIGJvcmRlcjogJzFweCBzb2xpZCAjYjVkM2ZiJyxcbiAgICAgICAgICAgIC8vICAgY29sb3I6ICcjMzMzJyxcbiAgICAgICAgICAgIC8vICAgZm9udFNpemU6ICcxMnB4JyxcbiAgICAgICAgICAgIC8vICAgbGV0dGVyU3BhY2luZzogJzAnLFxuICAgICAgICAgICAgLy8gICBwYWRkaW5nOiAnNXB4JyxcbiAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICBiYXNlT3B0czoge1xuICAgICAgICAgICAgICBmaWxsQ29sb3I6IHRoaXMuZmlsbENvbG9yLFxuICAgICAgICAgICAgICBzdHJva2VXZWlnaHQ6IHRoaXMubGluZVdpZHRoLFxuICAgICAgICAgICAgICBzdHJva2VDb2xvcjogdGhpcy5saW5lQ29sb3IsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2lyY2xlLm9wZW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgZ2V0T3B0aW9ucygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZmlsbENvbG9yOiB0aGlzLmZpbGxDb2xvcixcbiAgICAgIHN0cm9rZVdlaWdodDogdGhpcy5saW5lV2lkdGgsXG4gICAgICBzdHJva2VDb2xvcjogdGhpcy5saW5lQ29sb3IsXG4gICAgfTtcbiAgfVxuICB1cGRhdGVFZGl0RGF0YSgpIHtcbiAgICBpZiAodGhpcy5lZGl0TGF5ZXIpIHtcbiAgICAgIHRoaXMuZWRpdExheWVyLnNldERhdGEodGhpcy5lZGl0RGF0YS5tYXAoKHIpID0+ICh7IGdlb21ldHJ5OiB7IHR5cGU6ICdQb2ludCcsIGNvb3JkaW5hdGVzOiByIH0gfSkpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZWRpdExpbmVMYXllcikge1xuICAgICAgdGhpcy5lZGl0TGluZUxheWVyLnNldERhdGEoW1xuICAgICAgICB7XG4gICAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICAgIHR5cGU6ICdMaW5lU3RyaW5nJyxcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzOiB0aGlzLmVkaXREYXRhLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdKTtcbiAgICB9XG4gIH1cblxuICBATWV0aG9kKCfnu5PmnZ/nu5jliLYnKVxuICBzdG9wRHJhdygpIHtcbiAgICB0aGlzLnNjZW5lPy5jbG9zZSgpO1xuICAgIC8vIHRoaXMuc3RvcEVkaXQkLm5leHQoKTtcbiAgICAvLyBpZiAodGhpcy5lZGl0TGF5ZXIpIHtcbiAgICAvLyAgIHRoaXMucGFyZW50LnJlbW92ZUxheWVyKHRoaXMuZWRpdExheWVyKTtcbiAgICAvLyAgIHRoaXMuZWRpdExheWVyID0gbnVsbDtcbiAgICAvLyB9XG4gICAgLy8gaWYgKHRoaXMuZWRpdExpbmVMYXllcikge1xuICAgIC8vICAgdGhpcy5wYXJlbnQucmVtb3ZlTGF5ZXIodGhpcy5lZGl0TGluZUxheWVyKTtcbiAgICAvLyAgIHRoaXMuZWRpdExpbmVMYXllciA9IG51bGw7XG4gICAgLy8gfVxuICAgIC8vIGlmICh0aGlzLmVkaXREYXRhPy5sZW5ndGggPj0gMykge1xuICAgIC8vICAgaWYgKCF0aGlzLmRhdGEpIHtcbiAgICAvLyAgICAgdGhpcy5kYXRhID0gW107XG4gICAgLy8gICB9XG4gICAgLy8gICBjb25zdCBkYXRhID0ge1xuICAgIC8vICAgICB0eXBlOiAncG9seWdvbicsXG4gICAgLy8gICAgIGxuZ2xhdDogdGhpcy5lZGl0RGF0YS5tYXAoKHIpID0+IHIuam9pbignLCcpKS5qb2luKCc7JyksXG4gICAgLy8gICB9O1xuICAgIC8vICAgdGhpcy5kYXRhLnB1c2goZGF0YSk7XG4gICAgLy8gICB0aGlzLnVwZGF0ZURhdGEoKTtcbiAgICAvLyAgIHRoaXMuY3JlYXRlLmVtaXQoZGF0YSk7XG4gICAgLy8gfVxuICAgIC8vIHRoaXMuZWRpdERhdGEgPSBudWxsO1xuICB9XG5cbiAgYXN5bmMgZWRpdFBvbHlnb24oYm91bmRhcmllczogc3RyaW5nW10pIHtcbiAgICBjb25zdCB7IFBvbHlnb25FZGl0IH0gPSBhd2FpdCBpbXBvcnQoJ2JtYXAtZHJhdycpO1xuICAgIHRoaXMuc3RvcERyYXcoKTtcbiAgICBpZiAoIXRoaXMucG9seWdvbkVkaXQpIHtcbiAgICAgIHRoaXMucG9seWdvbkVkaXQgPSBuZXcgUG9seWdvbkVkaXQodGhpcy5zY2VuZSk7XG4gICAgfVxuICAgIGNvbnN0IHBvaW50cyA9IGJvdW5kYXJpZXMubWFwKChib3VuZGFyeSkgPT5cbiAgICAgIGJvdW5kYXJ5LnNwbGl0KCc7JykubWFwKChwKSA9PiB7XG4gICAgICAgIGNvbnN0IFtsbmcsIGxhdF0gPSBwLnNwbGl0KCcsJyk7XG4gICAgICAgIHJldHVybiBuZXcgQk1hcEdMLlBvaW50KE51bWJlcihsbmcpLCBOdW1iZXIobGF0KSk7XG4gICAgICB9KSxcbiAgICApO1xuICAgIGNvbnN0IG92ZXJsYXkgPSBuZXcgQk1hcEdMLlBvbHlnb24ocG9pbnRzLCB0aGlzLmdldE9wdGlvbnMoKSk7XG4gICAgY29uc29sZS5sb2cob3ZlcmxheSk7XG4gICAgdGhpcy5lZGl0T3ZlcmxheSA9IG92ZXJsYXk7XG4gICAgdGhpcy5wYXJlbnQubWFwLmFkZE92ZXJsYXkob3ZlcmxheSk7XG4gICAgdGhpcy5wYXJlbnQubWFwLnNldFZpZXdwb3J0KFtdLmNvbmNhdC5hcHBseShbXSwgcG9pbnRzKSk7XG4gICAgdGhpcy5wb2x5Z29uRWRpdC5lZGl0KG92ZXJsYXkpO1xuICB9XG5cbiAgYXN5bmMgZWRpdENpcmNsZShsbmc6IG51bWJlciwgbGF0OiBudW1iZXIsIHI6IG51bWJlcikge1xuICAgIGNvbnN0IHsgQ2lyY2xlRWRpdCB9ID0gYXdhaXQgaW1wb3J0KCdibWFwLWRyYXcnKTtcbiAgICBpZiAoIXRoaXMuY2lyY2xlRWRpdCkge1xuICAgICAgdGhpcy5jaXJjbGVFZGl0ID0gbmV3IENpcmNsZUVkaXQodGhpcy5zY2VuZSk7XG4gICAgfVxuICAgIGNvbnN0IGNlbnRlciA9IG5ldyBCTWFwR0wuUG9pbnQobG5nLCBsYXQpO1xuICAgIHRoaXMubW92ZUNpcmNsZVRvVmlldyhsbmcsIGxhdCwgcik7XG4gICAgY29uc3Qgb3ZlcmxheSA9IG5ldyBCTWFwR0wuQ2lyY2xlKGNlbnRlciwgciwgdGhpcy5nZXRPcHRpb25zKCkpO1xuICAgIHRoaXMuZWRpdE92ZXJsYXkgPSBvdmVybGF5O1xuICAgIHRoaXMucGFyZW50Lm1hcC5hZGRPdmVybGF5KG92ZXJsYXkpO1xuICAgIHRoaXMuY2lyY2xlRWRpdC5vcGVuKG92ZXJsYXkpO1xuICB9XG5cbiAgYXN5bmMgc2VhcmNoKCkge1xuICAgIC8vIOWmguaenOato+WcqOe7mOWItuWkmui+ueW9ouWbtOagj++8jOiOt+WPluWcsOWQjei+ueeVjOW5tue7mOWItlxuICAgIGlmICh0aGlzLmFyZWFOYW1lKSB7XG4gICAgICBjb25zdCBib3VuZGFyeSA9IG5ldyBCTWFwR0wuQm91bmRhcnkoKTtcbiAgICAgIC8vIOeZvuW6puWcsOWbviBHZW9jb2Rlci5nZXRMb2NhdGlvbiDlm57osIPnrb7lkI3vvJoocmVzdWx0cywgc3RhdHVzKVxuICAgICAgYm91bmRhcnkuZ2V0KHRoaXMuYXJlYU5hbWUsIChyZXN1bHRzKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCfovrnnlYzlnZDmoIfmlbDnu4TvvJonLCByZXN1bHRzKTtcbiAgICAgICAgLy8g5qOA5p+l54q25oCB5piv5ZCm5oiQ5YqfXG4gICAgICAgIGlmIChyZXN1bHRzICYmIHJlc3VsdHMuYm91bmRhcmllcyAmJiByZXN1bHRzLmJvdW5kYXJpZXMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5lZGl0UG9seWdvbihyZXN1bHRzLmJvdW5kYXJpZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubWVzc2FnZS5lcnJvcign6KGM5pS/5Yy65Z+f5LiN5a2Y5ZyoJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGluaXRTZWFyY2goKSB7XG4gICAgY29uc3QgeyBQb2x5Z29uRWRpdCwgQ2lyY2xlRWRpdCB9ID0gYXdhaXQgaW1wb3J0KCdibWFwLWRyYXcnKTtcbiAgICBjb25zdCBhYyA9IG5ldyBCTWFwR0wuQXV0b2NvbXBsZXRlKHtcbiAgICAgIGlucHV0OiB0aGlzLnN1Z2dlc3QubmF0aXZlRWxlbWVudCxcbiAgICAgIGxvY2F0aW9uOiB0aGlzLnBhcmVudC5tYXAsXG4gICAgfSk7XG4gICAgYWMuYWRkRXZlbnRMaXN0ZW5lcignb25jb25maXJtJywgKGUpID0+IHtcbiAgICAgIC8vIOm8oOagh+eCueWHu+S4i+aLieWIl+ihqOWQjueahOS6i+S7tlxuICAgICAgY29uc3QgdmFsdWUgPSBlLml0ZW0udmFsdWU7XG4gICAgICBjb25zb2xlLmxvZyhlKTtcblxuICAgICAgLy8g5aaC5p6c5q2j5Zyo57uY5Yi25ZyG5b2i5Zu05qCPXG4gICAgICBpZiAodGhpcy5jaXJjbGUpIHtcbiAgICAgICAgdGhpcy5lZGl0Q2lyY2xlKHZhbHVlLmxvY2F0aW9uLmxuZywgdmFsdWUubG9jYXRpb24ubGF0LCAzMDApO1xuICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgQE1ldGhvZCgn56e75Yqo5Yiw5Lit5b+DJylcbiAgbW92ZVRvVmlldyhAUGFyYW0oJ2lkJykgaWQ6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5kYXRhIHx8ICFpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhLmZpbmQoKHIpID0+IHIuaWQgPT09IGlkKTtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGRhdGEudHlwZSA9PT0gJ2NpcmNsZScpIHtcbiAgICAgIGNvbnN0IFtsbmcsIGxhdF0gPSBkYXRhLmxuZ2xhdC5zcGxpdCgnLCcpO1xuICAgICAgdGhpcy5tb3ZlQ2lyY2xlVG9WaWV3KE51bWJlcihsbmcpLCBOdW1iZXIobGF0KSwgTnVtYmVyKGRhdGEucmFkaXVzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFyZW50Lm1hcC5zZXRWaWV3cG9ydChcbiAgICAgICAgZGF0YS5sbmdsYXQuc3BsaXQoL1s7XFxuXFxyXSsvKS5tYXAoKHApID0+IHtcbiAgICAgICAgICBjb25zdCBbbG5nLCBsYXRdID0gcC5zcGxpdCgnLCcpO1xuICAgICAgICAgIHJldHVybiBuZXcgQk1hcEdMLlBvaW50KE51bWJlcihsbmcpLCBOdW1iZXIobGF0KSk7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBtb3ZlQ2lyY2xlVG9WaWV3KGxuZzogbnVtYmVyLCBsYXQ6IG51bWJlciwgcjogbnVtYmVyKSB7XG4gICAgY29uc3QgY2VudGVyTG5nID0gTnVtYmVyKGxuZyk7XG4gICAgY29uc3QgY2VudGVyTGF0ID0gTnVtYmVyKGxhdCk7XG4gICAgY29uc3QgcmFkaXVzID0gTnVtYmVyKHIpO1xuXG4gICAgLy8g6L2s5o2i5Lit5b+D54K557qs5bqm5Li65byn5bqmXG4gICAgY29uc3QgY2VudGVyTGF0UmFkID0gKGNlbnRlckxhdCAqIE1hdGguUEkpIC8gMTgwO1xuXG4gICAgLy8g6K6h566X57uP5bqm5pa55ZCR55qE5YGP56e777yI5byn5bqm77yJXG4gICAgY29uc3QgZGVsdGFMbmdSYWQgPSByYWRpdXMgLyAoRUFSVEhfUkFESVVTICogTWF0aC5jb3MoY2VudGVyTGF0UmFkKSk7XG4gICAgLy8g6K6h566X57qs5bqm5pa55ZCR55qE5YGP56e777yI5byn5bqm77yJXG4gICAgY29uc3QgZGVsdGFMYXRSYWQgPSByYWRpdXMgLyBFQVJUSF9SQURJVVM7XG5cbiAgICAvLyDovazmjaLkuLrop5LluqblgY/np7tcbiAgICBjb25zdCBkZWx0YUxuZyA9IChkZWx0YUxuZ1JhZCAqIDE4MCkgLyBNYXRoLlBJO1xuICAgIGNvbnN0IGRlbHRhTGF0ID0gKGRlbHRhTGF0UmFkICogMTgwKSAvIE1hdGguUEk7XG5cbiAgICAvLyDorqHnrpflnIblvaLnmoTlm5vkuKrovrnnlYzngrnvvIjkuIrjgIHkuIvjgIHlt6bjgIHlj7PvvIlcbiAgICBjb25zdCBwb2ludHMgPSBbXG4gICAgICBuZXcgQk1hcEdMLlBvaW50KGNlbnRlckxuZywgY2VudGVyTGF0ICsgZGVsdGFMYXQpLCAvLyDkuIpcbiAgICAgIG5ldyBCTWFwR0wuUG9pbnQoY2VudGVyTG5nLCBjZW50ZXJMYXQgLSBkZWx0YUxhdCksIC8vIOS4i1xuICAgICAgbmV3IEJNYXBHTC5Qb2ludChjZW50ZXJMbmcgLSBkZWx0YUxuZywgY2VudGVyTGF0KSwgLy8g5bemXG4gICAgICBuZXcgQk1hcEdMLlBvaW50KGNlbnRlckxuZyArIGRlbHRhTG5nLCBjZW50ZXJMYXQpLCAvLyDlj7NcbiAgICBdO1xuXG4gICAgLy8g5L2/55SoIHNldFZpZXdwb3J0IOaWueazleiwg+aVtOinhuWbvu+8jOS9v+aVtOS4quWchuW9ouWPr+ingVxuICAgIHRoaXMucGFyZW50Lm1hcC5zZXRWaWV3cG9ydChwb2ludHMpO1xuICB9XG5cbiAgQE1ldGhvZCgn57yW6L6RJylcbiAgYXN5bmMgZWRpdChAUGFyYW0oJ2lkJykgaWQ6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5kYXRhKSB7XG4gICAgICBjb25zb2xlLmxvZygn5rKh5pyJ5pWw5o2uJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmRhdGEuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gaWQpO1xuICAgIGlmICghaXRlbSkge1xuICAgICAgY29uc29sZS5sb2coJ+aJvuS4jeWIsGlkJywgaWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWl0ZW0ubG5nbGF0KSB7XG4gICAgICBjb25zb2xlLmxvZygn5rKh5pyJ57uP57qs5bqmJywgaXRlbSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY3JlYXRlU2NlbmUoKTtcbiAgICBzd2l0Y2ggKGl0ZW0udHlwZSkge1xuICAgICAgY2FzZSAnY2lyY2xlJzpcbiAgICAgICAgY29uc3QgW2xuZywgbGF0XSA9IGl0ZW0ubG5nbGF0LnNwbGl0KCcsJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuZWRpdENpcmNsZShOdW1iZXIobG5nKSwgTnVtYmVyKGxhdCksIE51bWJlcihpdGVtLnJhZGl1cykpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGF3YWl0IHRoaXMuZWRpdFBvbHlnb24oaXRlbS5sbmdsYXQuc3BsaXQoJ1xccicpKTtcbiAgICB9XG4gICAgdGhpcy5lZGl0SWQgPSBpZDtcbiAgICB0aGlzLnVwZGF0ZURhdGEoKTtcbiAgfVxufVxuIl19
@@ -241,11 +241,30 @@ function transformlng(lng, lat) {
241
241
  */
242
242
  function out_of_china(lng, lat) {
243
243
  return lng < 72.004 || lng > 137.8347 || lat < 0.8293 || lat > 55.8271 || false;
244
+ }
245
+ /**
246
+ * 墨卡托平面坐标转换为经纬度
247
+ * @param mcLon
248
+ * @param mcLat
249
+ * @returns
250
+ */
251
+ function bd09mcToBd09ll(mcLon, mcLat) {
252
+ const x = mcLon;
253
+ const y = mcLat;
254
+ const bd09ll = {};
255
+ // 墨卡托反投影
256
+ const x_pi = (Math.PI * 3000.0) / 180.0;
257
+ bd09ll.lng = x / 20037508.34 / 180;
258
+ let yVal = y / 20037508.34 / 180;
259
+ yVal = Math.exp(yVal * Math.PI);
260
+ yVal = ((Math.PI / 2 - 2 * Math.atan(yVal)) * 180) / Math.PI;
261
+ bd09ll.lat = yVal;
262
+ return bd09ll;
244
263
  }
245
264
 
246
265
  /**
247
266
  * Generated bundle index. Do not edit.
248
267
  */
249
268
 
250
- export { BaiduMapService, SCREEN_WIDGET_CONFIG, bd09togcj02, bd09towgs84, gcj02tobd09, gcj02towgs84, scaleAdapter, wgs84tobd09, wgs84togcj02 };
269
+ export { BaiduMapService, SCREEN_WIDGET_CONFIG, bd09mcToBd09ll, bd09togcj02, bd09towgs84, gcj02tobd09, gcj02towgs84, scaleAdapter, wgs84tobd09, wgs84togcj02 };
251
270
  //# sourceMappingURL=bbj-screen-widget-core.js.map