@tetacom/ng-components 1.0.33 → 1.0.34

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.
@@ -14,6 +14,7 @@ export declare class Chart3dComponent implements OnInit, AfterViewInit, OnDestro
14
14
  private _config;
15
15
  private SIDE_SIZE;
16
16
  private gridColor;
17
+ private axesColor;
17
18
  private _alive;
18
19
  constructor(_elementRef: ElementRef, _themeService: ThemeSwitchService);
19
20
  set config(config: Chart3dOptions);
@@ -2,6 +2,7 @@ import { Base3dPoint } from './base-3d-point';
2
2
  import { Series3d } from './series-3d';
3
3
  export declare class Chart3dOptions {
4
4
  axes?: {
5
+ min?: number;
5
6
  max?: number;
6
7
  };
7
8
  series: Series3d<Base3dPoint>[];
@@ -27,7 +27,8 @@ export class Chart3dComponent {
27
27
  ngOnInit() {
28
28
  this._themeService.theme
29
29
  .pipe(takeWhile((_) => this._alive), tap((_) => {
30
- this.gridColor = _ ? '#474751' : '#d7dee3';
30
+ this.gridColor = _ ? '#5d6a73' : '#bdbdc6';
31
+ this.axesColor = _ ? '#8e8f9d' : '#7d8f9a';
31
32
  this.init();
32
33
  }))
33
34
  .subscribe();
@@ -36,6 +37,7 @@ export class Chart3dComponent {
36
37
  this.addResizeObserver();
37
38
  this.createScene();
38
39
  this.startRenderingLoop();
40
+ this.init();
39
41
  }
40
42
  ngOnDestroy() {
41
43
  this._alive = false;
@@ -49,37 +51,51 @@ export class Chart3dComponent {
49
51
  }
50
52
  const { x, y, z } = this.getScales(this._config.series);
51
53
  this.config.series.forEach((data, idx) => {
52
- const geometry = new THREE.BufferGeometry().setFromPoints(data.points.map((_) => new THREE.Vector3(x(_.x), z(_.z), y(_.y))));
54
+ if (!data.points?.length) {
55
+ return;
56
+ }
57
+ const points = data.points.map((_) => new THREE.Vector3(x(_.x), y(_.y), z(_.z)));
53
58
  const color = d3.scaleOrdinal(d3.schemeTableau10);
54
59
  const material = new THREE.LineBasicMaterial({
55
60
  color: data?.color ?? color(idx.toString()),
56
61
  });
57
- const line = new THREE.Line(geometry, material);
58
- line.computeLineDistances();
59
- line.scale.set(1, 1, 1);
60
- this._scene.add(line);
62
+ const tubeGeometry = new THREE.TubeGeometry(new THREE.CatmullRomCurve3(points), 1024, 0.5, 20, false);
63
+ let tube = new THREE.Line(tubeGeometry, material);
64
+ this._scene.add(tube);
65
+ });
66
+ const circles = x.ticks(this.SIDE_SIZE / 10);
67
+ const material = new THREE.LineBasicMaterial({ color: this.axesColor });
68
+ const pointsLines = [];
69
+ pointsLines.push(new THREE.Vector3(0, 0, 0));
70
+ pointsLines.push(new THREE.Vector3(0, 0, z(-z.domain()[1])));
71
+ pointsLines.push(new THREE.Vector3(0, 0, 0));
72
+ pointsLines.push(new THREE.Vector3(x(-x.domain()[1]), 0, 0));
73
+ const geometryLines = new THREE.BufferGeometry().setFromPoints(pointsLines);
74
+ const line = new THREE.Line(geometryLines, material);
75
+ this._scene.add(line);
76
+ circles.forEach((r) => {
77
+ const material = new THREE.LineDashedMaterial({
78
+ color: this.gridColor,
79
+ dashSize: 1,
80
+ gapSize: 3
81
+ });
82
+ const circleGeometry = new THREE.BufferGeometry().setFromPoints(new THREE.Path().absarc(0, 0, x(r), 0, Math.PI * 2, false).getSpacedPoints(100));
83
+ const circle = new THREE.LineSegments(circleGeometry, material);
84
+ circle.geometry.rotateX(-Math.PI / 2);
85
+ this._scene.add(circle);
61
86
  });
62
- const plane = new THREE.GridHelper(this.SIDE_SIZE, this.SIDE_SIZE / 10, this.gridColor, this.gridColor);
63
- plane.position.set(this.SIDE_SIZE / 2, 0, this.SIDE_SIZE / 2);
64
- this._scene.add(plane);
65
- const gridX = new THREE.GridHelper(this.SIDE_SIZE, this.SIDE_SIZE / 10, this.gridColor, this.gridColor);
66
- gridX.geometry.rotateX(-Math.PI / 2);
67
- gridX.position.set(this.SIDE_SIZE / 2, this.SIDE_SIZE / 2, 0);
68
- this._scene.add(gridX);
69
- const gridY = new THREE.GridHelper(this.SIDE_SIZE, this.SIDE_SIZE / 10, this.gridColor, this.gridColor);
70
- gridY.geometry.rotateZ(Math.PI / 2);
71
- gridY.position.set(0, this.SIDE_SIZE / 2, this.SIDE_SIZE / 2);
72
- this._scene.add(gridY);
73
87
  this.drawTicks(x, y, z);
74
- this._controls = new OrbitControls(this._camera, this._renderer.domElement);
75
- this._controls.enableDamping = true;
76
- this._controls.enablePan = true;
77
- this._controls.dampingFactor = 0.25;
78
- this._controls.screenSpacePanning = true;
79
- this._controls.minDistance = 0;
80
- this._controls.maxDistance = 10000;
81
- this._controls.maxPolarAngle = Math.PI / 2;
82
- this._controls.enableZoom = true;
88
+ if (!this._controls) {
89
+ this._controls = new OrbitControls(this._camera, this._renderer.domElement);
90
+ this._controls.enableDamping = true;
91
+ this._controls.enablePan = true;
92
+ this._controls.dampingFactor = 0.25;
93
+ this._controls.screenSpacePanning = true;
94
+ this._controls.minDistance = 0;
95
+ this._controls.maxDistance = 10000;
96
+ this._controls.maxPolarAngle = Math.PI / 2;
97
+ this._controls.enableZoom = true;
98
+ }
83
99
  }
84
100
  createScene() {
85
101
  this._scene = new THREE.Scene();
@@ -141,7 +157,7 @@ export class Chart3dComponent {
141
157
  map: texture,
142
158
  });
143
159
  const sprite = new THREE.Sprite(spriteMaterial);
144
- sprite.scale.set(5, 5, 5);
160
+ sprite.scale.set(0.4 * fontSize, 0.4 * fontSize, 0.4 * fontSize);
145
161
  return sprite;
146
162
  }
147
163
  drawTicks(x, y, z) {
@@ -153,24 +169,27 @@ export class Chart3dComponent {
153
169
  generatedTicks.forEach((_) => {
154
170
  const sprite = this.makeSprite(_);
155
171
  if (idx === 0) {
156
- sprite.position.set(x(_), z(0), -5);
172
+ sprite.position.set(x(_), y(y.domain()[1]), 0);
157
173
  }
158
174
  if (idx === 1) {
159
- sprite.position.set(-5, z(0), y(_));
175
+ sprite.position.set(-10, y(_), 0);
160
176
  }
161
177
  if (idx === 2) {
162
- sprite.position.set(0, z(_), -5);
178
+ sprite.position.set(0, y(y.domain()[1]), z(_));
163
179
  }
164
180
  ticks.add(sprite);
165
181
  });
166
182
  });
167
- const northLabel = this.makeSprite('North', { fontSize: 28 });
168
- const westLabel = this.makeSprite('West', { fontSize: 28 });
183
+ const northLabel = this.makeSprite('X', { fontSize: 28 });
184
+ const westLabel = this.makeSprite('Y', { fontSize: 28 });
169
185
  const tvdLabel = this.makeSprite('TVD', { fontSize: 28 });
170
- northLabel.position.set(x(scalesExtrems[0]) + 10, 0, 0);
171
- westLabel.position.set(0, 0, y(scalesExtrems[1]) + 10);
172
- tvdLabel.position.set(0, z(scalesExtrems[2]), 0);
186
+ northLabel.position.set(x(x.domain()[1]) + 5, 0, 0);
187
+ westLabel.position.set(0, 0, y(y.domain()[0]) + 5);
188
+ tvdLabel.position.set(0, z(z.domain()[1]) + 5, 0);
173
189
  ticks.add(northLabel, westLabel, tvdLabel);
190
+ const axesHelper = new THREE.AxesHelper(this.SIDE_SIZE);
191
+ axesHelper.setColors(this.axesColor, this.axesColor, this.axesColor);
192
+ this._scene.add(axesHelper);
174
193
  this._scene.add(ticks);
175
194
  }
176
195
  getScales(series) {
@@ -187,34 +206,22 @@ export class Chart3dComponent {
187
206
  }, { x: [], y: [], z: [] });
188
207
  const x = d3
189
208
  .scaleLinear()
190
- .domain([
191
- d3.min(flattenExtrems.x),
192
- this._config?.axes?.max == null
193
- ? d3.max(flattenExtrems.x)
209
+ .domain([0, this._config?.axes?.max == null
210
+ ? parseInt(d3.max(flattenExtrems.x))
194
211
  : this._config.axes.max,
195
212
  ])
196
- .range([0, this.SIDE_SIZE])
197
- .nice();
213
+ .range([0, this.SIDE_SIZE]).nice();
198
214
  const y = d3
199
215
  .scaleLinear()
200
- .domain([
201
- d3.min(flattenExtrems.y),
202
- this._config?.axes?.max == null
203
- ? d3.max(flattenExtrems.y)
204
- : this._config.axes.max,
205
- ])
206
- .range([0, this.SIDE_SIZE])
207
- .nice();
216
+ .domain([0, parseInt(d3.max(flattenExtrems.y), 10)])
217
+ .range([this.SIDE_SIZE, 0]);
208
218
  const z = d3
209
219
  .scaleLinear()
210
- .domain([
211
- d3.min(flattenExtrems.z),
220
+ .domain([0,
212
221
  this._config?.axes?.max == null
213
- ? d3.max(flattenExtrems.z)
214
- : this._config.axes.max,
215
- ])
216
- .range([this.SIDE_SIZE, 0])
217
- .nice();
222
+ ? parseInt(d3.max(flattenExtrems.z))
223
+ : this._config.axes.max])
224
+ .range([0, this.SIDE_SIZE]).nice();
218
225
  return { x, y, z };
219
226
  }
220
227
  }
@@ -229,4 +236,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImpor
229
236
  }], config: [{
230
237
  type: Input
231
238
  }] } });
232
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQzZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L2NoYXJ0LTNkL2NoYXJ0M2QvY2hhcnQzZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L2NoYXJ0LTNkL2NoYXJ0M2QvY2hhcnQzZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ1UsdUJBQXVCLEVBQ3RDLFNBQVMsRUFFVCxLQUFLLEVBR0wsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMxRSxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUt6QixPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFRaEQsTUFBTSxPQUFPLGdCQUFnQjtJQWUzQixZQUNVLFdBQXVCLEVBQ3ZCLGFBQWlDO1FBRGpDLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3ZCLGtCQUFhLEdBQWIsYUFBYSxDQUFvQjtRQVBuQyxjQUFTLEdBQUcsR0FBRyxDQUFDO1FBR2hCLFdBQU0sR0FBRyxJQUFJLENBQUM7SUFLbkIsQ0FBQztJQUVKLElBQWEsTUFBTSxDQUFDLE1BQXNCO1FBQ3hDLElBQUksTUFBTSxFQUFFO1lBQ1YsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7WUFDdEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUFZLE1BQU07UUFDaEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQztJQUN0QyxDQUFDO0lB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YyxDQUFDLENBQUMsQ0FBQztnQkFDMUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUc7U0FDMUIsQ0FBQzthQUNELEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDMUIsSUFBSSxFQUFFLENBQUM7UUFFVixPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNyQixDQUFDOzs2R0F2VFUsZ0JBQWdCO2lHQUFoQixnQkFBZ0IsdUxDeEI3Qiw2QkFDQTsyRkR1QmEsZ0JBQWdCO2tCQU41QixTQUFTOytCQUNFLGNBQWMsbUJBR1AsdUJBQXVCLENBQUMsTUFBTTtrSUFHMUIsU0FBUztzQkFBN0IsU0FBUzt1QkFBQyxRQUFRO2dCQW1CTixNQUFNO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgT3JiaXRDb250cm9scyB9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9jb250cm9scy9PcmJpdENvbnRyb2xzJztcbmltcG9ydCAqIGFzIGQzIGZyb20gJ2QzJztcbmltcG9ydCB7IENoYXJ0M2RPcHRpb25zIH0gZnJvbSAnLi4vbW9kZWwvY2hhcnQtM2Qtb3B0aW9ucyc7XG5pbXBvcnQgeyBCYXNlM2RQb2ludCB9IGZyb20gJy4uL21vZGVsL2Jhc2UtM2QtcG9pbnQnO1xuaW1wb3J0IHsgU2VyaWVzM2QgfSBmcm9tICcuLi9tb2RlbC9zZXJpZXMtM2QnO1xuaW1wb3J0IHsgVGhlbWVTd2l0Y2hTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdGhlbWUtc3dpdGNoL3RoZW1lLXN3aXRjaC5zZXJ2aWNlJztcbmltcG9ydCB7IHRha2VXaGlsZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZXRhLWNoYXJ0M2QnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2hhcnQzZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NoYXJ0M2QuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIENoYXJ0M2RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoJ2NhbnZhcycpIGNhbnZhc1JlZjogRWxlbWVudFJlZjtcblxuICBwcml2YXRlIF9zY2VuZTogVEhSRUUuU2NlbmU7XG4gIHByaXZhdGUgX2NhbWVyYTogVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmE7XG4gIHByaXZhdGUgX3JlbmRlcmVyOiBUSFJFRS5SZW5kZXJlcjtcbiAgcHJpdmF0ZSBfY29udHJvbHM6IE9yYml0Q29udHJvbHM7XG4gIHByaXZhdGUgX29iczogUmVzaXplT2JzZXJ2ZXI7XG4gIHByaXZhdGUgX2NvbmZpZzogQ2hhcnQzZE9wdGlvbnM7XG5cbiAgcHJpdmF0ZSBTSURFX1NJWkUgPSAxMDA7XG4gIHByaXZhdGUgZ3JpZENvbG9yOiBhbnk7XG5cbiAgcHJpdmF0ZSBfYWxpdmUgPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBfdGhlbWVTZXJ2aWNlOiBUaGVtZVN3aXRjaFNlcnZpY2VcbiAgKSB7fVxuXG4gIEBJbnB1dCgpIHNldCBjb25maWcoY29uZmlnOiBDaGFydDNkT3B0aW9ucykge1xuICAgIGlmIChjb25maWcpIHtcbiAgICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBjb25maWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGNhbnZhcygpOiBIVE1MQ2FudmFzRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuY2FudmFzUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl90aGVtZVNlcnZpY2UudGhlbWVcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKSxcbiAgICAgICAgdGFwKChfKSA9PiB7XG4gICAgICAgICAgdGhpcy5ncmlkQ29sb3IgPSBfID8gJyM0NzQ3NTEnIDogJyNkN2RlZTMnO1xuICAgICAgICAgIHRoaXMuaW5pdCgpO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuYWRkUmVzaXplT2JzZXJ2ZXIoKTtcbiAgICB0aGlzLmNyZWF0ZVNjZW5lKCk7XG4gICAgdGhpcy5zdGFydFJlbmRlcmluZ0xvb3AoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2FsaXZlID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGluaXQoKSB7XG4gICAgaWYgKCF0aGlzLl9zY2VuZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdoaWxlICh0aGlzLl9zY2VuZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl9zY2VuZS5yZW1vdmUodGhpcy5fc2NlbmUuY2hpbGRyZW5bMF0pO1xuICAgIH1cblxuICAgIGNvbnN0IHsgeCwgeSwgeiB9ID0gdGhpcy5nZXRTY2FsZXModGhpcy5fY29uZmlnLnNlcmllcyk7XG5cbiAgICB0aGlzLmNvbmZpZy5zZXJpZXMuZm9yRWFjaCgoZGF0YSwgaWR4KSA9PiB7XG4gICAgICBjb25zdCBnZW9tZXRyeSA9IG5ldyBUSFJFRS5CdWZmZXJHZW9tZXRyeSgpLnNldEZyb21Qb2ludHMoXG4gICAgICAgIGRhdGEucG9pbnRzLm1hcCgoXykgPT4gbmV3IFRIUkVFLlZlY3RvcjMoeChfLngpLCB6KF8ueiksIHkoXy55KSkpXG4gICAgICApO1xuXG4gICAgICBjb25zdCBjb2xvciA9IGQzLnNjYWxlT3JkaW5hbChkMy5zY2hlbWVUYWJsZWF1MTApO1xuXG4gICAgICBjb25zdCBtYXRlcmlhbCA9IG5ldyBUSFJFRS5MaW5lQmFzaWNNYXRlcmlhbCh7XG4gICAgICAgIGNvbG9yOiBkYXRhPy5jb2xvciA/PyBjb2xvcihpZHgudG9TdHJpbmcoKSksXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgbGluZSA9IG5ldyBUSFJFRS5MaW5lKGdlb21ldHJ5LCBtYXRlcmlhbCk7XG5cbiAgICAgIGxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTtcbiAgICAgIGxpbmUuc2NhbGUuc2V0KDEsIDEsIDEpO1xuICAgICAgdGhpcy5fc2NlbmUuYWRkKGxpbmUpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcGxhbmUgPSBuZXcgVEhSRUUuR3JpZEhlbHBlcihcbiAgICAgIHRoaXMuU0lERV9TSVpFLFxuICAgICAgdGhpcy5TSURFX1NJWkUgLyAxMCxcbiAgICAgIHRoaXMuZ3JpZENvbG9yLFxuICAgICAgdGhpcy5ncmlkQ29sb3JcbiAgICApO1xuXG4gICAgcGxhbmUucG9zaXRpb24uc2V0KHRoaXMuU0lERV9TSVpFIC8gMiwgMCwgdGhpcy5TSURFX1NJWkUgLyAyKTtcbiAgICB0aGlzLl9zY2VuZS5hZGQocGxhbmUpO1xuXG4gICAgY29uc3QgZ3JpZFggPSBuZXcgVEhSRUUuR3JpZEhlbHBlcihcbiAgICAgIHRoaXMuU0lERV9TSVpFLFxuICAgICAgdGhpcy5TSURFX1NJWkUgLyAxMCxcbiAgICAgIHRoaXMuZ3JpZENvbG9yLFxuICAgICAgdGhpcy5ncmlkQ29sb3JcbiAgICApO1xuICAgIGdyaWRYLmdlb21ldHJ5LnJvdGF0ZVgoLU1hdGguUEkgLyAyKTtcbiAgICBncmlkWC5wb3NpdGlvbi5zZXQodGhpcy5TSURFX1NJWkUgLyAyLCB0aGlzLlNJREVfU0laRSAvIDIsIDApO1xuICAgIHRoaXMuX3NjZW5lLmFkZChncmlkWCk7XG5cbiAgICBjb25zdCBncmlkWSA9IG5ldyBUSFJFRS5HcmlkSGVscGVyKFxuICAgICAgdGhpcy5TSURFX1NJWkUsXG4gICAgICB0aGlzLlNJREVfU0laRSAvIDEwLFxuICAgICAgdGhpcy5ncmlkQ29sb3IsXG4gICAgICB0aGlzLmdyaWRDb2xvclxuICAgICk7XG4gICAgZ3JpZFkuZ2VvbWV0cnkucm90YXRlWihNYXRoLlBJIC8gMik7XG4gICAgZ3JpZFkucG9zaXRpb24uc2V0KDAsIHRoaXMuU0lERV9TSVpFIC8gMiwgdGhpcy5TSURFX1NJWkUgLyAyKTtcbiAgICB0aGlzLl9zY2VuZS5hZGQoZ3JpZFkpO1xuXG4gICAgdGhpcy5kcmF3VGlja3MoeCwgeSwgeik7XG5cbiAgICB0aGlzLl9jb250cm9scyA9IG5ldyBPcmJpdENvbnRyb2xzKHRoaXMuX2NhbWVyYSwgdGhpcy5fcmVuZGVyZXIuZG9tRWxlbWVudCk7XG5cbiAgICB0aGlzLl9jb250cm9scy5lbmFibGVEYW1waW5nID0gdHJ1ZTtcbiAgICB0aGlzLl9jb250cm9scy5lbmFibGVQYW4gPSB0cnVlO1xuICAgIHRoaXMuX2NvbnRyb2xzLmRhbXBpbmdGYWN0b3IgPSAwLjI1O1xuICAgIHRoaXMuX2NvbnRyb2xzLnNjcmVlblNwYWNlUGFubmluZyA9IHRydWU7XG4gICAgdGhpcy5fY29udHJvbHMubWluRGlzdGFuY2UgPSAwO1xuICAgIHRoaXMuX2NvbnRyb2xzLm1heERpc3RhbmNlID0gMTAwMDA7XG4gICAgdGhpcy5fY29udHJvbHMubWF4UG9sYXJBbmdsZSA9IE1hdGguUEkgLyAyO1xuXG4gICAgdGhpcy5fY29udHJvbHMuZW5hYmxlWm9vbSA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNjZW5lKCkge1xuICAgIHRoaXMuX3NjZW5lID0gbmV3IFRIUkVFLlNjZW5lKCk7XG5cbiAgICBjb25zdCBhc3BlY3RSYXRpbyA9XG4gICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggL1xuICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodDtcblxuICAgIGNvbnN0IGZpZWxkT2ZWaWV3ID0gMTA7XG4gICAgY29uc3QgbmVhckNsaXBwaW5nUGFuZSA9IDE7XG4gICAgY29uc3QgZmFyQ2xpcHBpbmdQYW5lID0gMTAwMDA7XG5cbiAgICB0aGlzLl9jYW1lcmEgPSBuZXcgVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEoXG4gICAgICBmaWVsZE9mVmlldyxcbiAgICAgIGFzcGVjdFJhdGlvLFxuICAgICAgbmVhckNsaXBwaW5nUGFuZSxcbiAgICAgIGZhckNsaXBwaW5nUGFuZVxuICAgICk7XG5cbiAgICB0aGlzLl9jYW1lcmEucG9zaXRpb24uc2V0KDEzMDAsIDEzMDAsIDEzMDApLnNldExlbmd0aCgxMzAwKTtcbiAgICB0aGlzLl9zY2VuZS5hZGQodGhpcy5fY2FtZXJhKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIHRoaXMuX2NhbWVyYS5hc3BlY3QgPSB3aWR0aCAvIGhlaWdodDtcbiAgICB0aGlzLl9yZW5kZXJlci5zZXRTaXplKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgdGhpcy5fY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyKCkge1xuICAgIHRoaXMuX3JlbmRlcmVyLnJlbmRlcih0aGlzLl9zY2VuZSwgdGhpcy5fY2FtZXJhKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRSZW5kZXJpbmdMb29wKCkge1xuICAgIHRoaXMuX3JlbmRlcmVyID0gbmV3IFRIUkVFLldlYkdMUmVuZGVyZXIoe1xuICAgICAgYW50aWFsaWFzOiB0cnVlLFxuICAgICAgY2FudmFzOiB0aGlzLmNhbnZhcyxcbiAgICAgIGFscGhhOiB0cnVlLFxuICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYW5pbWF0ZSA9ICgpID0+IHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTtcbiAgICAgIHRoaXMuX2NvbnRyb2xzPy51cGRhdGUoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfTtcblxuICAgIGFuaW1hdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUmVzaXplT2JzZXJ2ZXIoKSB7XG4gICAgdGhpcy5fb2JzID0gbmV3IFJlc2l6ZU9ic2VydmVyKChfKSA9PiB7XG4gICAgICB0aGlzLnNldFNpemUoX1swXT8uY29udGVudFJlY3Qud2lkdGgsIF9bMF0/LmNvbnRlbnRSZWN0LmhlaWdodCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9vYnMub2JzZXJ2ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYWtlU3ByaXRlKHRleHQ6IHN0cmluZywgb3B0cz86IHsgZm9udFNpemU/OiBudW1iZXIgfSk6IFRIUkVFLlNwcml0ZSB7XG4gICAgY29uc3QgZm9udFNpemUgPSAyMDtcblxuICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgIGNvbnN0IHRleHRXaWR0aCA9IHRleHQubGVuZ3RoICogNTA7XG4gICAgY2FudmFzLmhlaWdodCA9IDUwO1xuICAgIGNhbnZhcy53aWR0aCA9IDUwO1xuXG4gICAgaWYoY3R4KSB7XG4gICAgICBjdHguZm9udCA9IGAke2ZvbnRTaXplfXB4IEFyaWFsYDtcbiAgICAgIGN0eC50ZXh0QWxpZ24gPSAnY2VudGVyJztcbiAgICAgIGN0eC50ZXh0QmFzZWxpbmUgPSAnbWlkZGxlJztcbiAgICAgIGN0eC5maWxsU3R5bGUgPSAnI0EwQTBBMCc7XG4gICAgICBjdHguZmlsbFRleHQodGV4dCwgMjUsIDI1KTtcbiAgICB9XG5cbiAgICBjb25zdCB0ZXh0dXJlID0gbmV3IFRIUkVFLlRleHR1cmUoY2FudmFzKTtcbiAgICB0ZXh0dXJlLm1pbkZpbHRlciA9IFRIUkVFLkxpbmVhckZpbHRlcjtcbiAgICB0ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcbiAgICBjb25zdCBzcHJpdGVNYXRlcmlhbCA9IG5ldyBUSFJFRS5TcHJpdGVNYXRlcmlhbCh7XG4gICAgICBtYXA6IHRleHR1cmUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzcHJpdGUgPSBuZXcgVEhSRUUuU3ByaXRlKHNwcml0ZU1hdGVyaWFsKTtcbiAgICBzcHJpdGUuc2NhbGUuc2V0KDUsIDUsIDUpO1xuXG4gICAgcmV0dXJuIHNwcml0ZTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhd1RpY2tzKHg6IGFueSwgeTogYW55LCB6OiBhbnkpIHtcbiAgICBjb25zdCB0aWNrcyA9IG5ldyBUSFJFRS5PYmplY3QzRCgpO1xuICAgIGNvbnN0IHNjYWxlc0V4dHJlbXM6IGFueVtdID0gW107XG5cbiAgICBbeCwgeSwgel0uZm9yRWFjaCgoc2NhbGUsIGlkeCkgPT4ge1xuICAgICAgY29uc3QgZ2VuZXJhdGVkVGlja3MgPSBzY2FsZS50aWNrcyh0aGlzLlNJREVfU0laRSAvIDEwKTtcblxuICAgICAgc2NhbGVzRXh0cmVtcy5wdXNoKGQzLm1heChnZW5lcmF0ZWRUaWNrcykpO1xuXG4gICAgICBnZW5lcmF0ZWRUaWNrcy5mb3JFYWNoKChfOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qgc3ByaXRlID0gdGhpcy5tYWtlU3ByaXRlKF8pO1xuXG4gICAgICAgIGlmIChpZHggPT09IDApIHtcbiAgICAgICAgICBzcHJpdGUucG9zaXRpb24uc2V0KHgoXyksIHooMCksIC01KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpZHggPT09IDEpIHtcbiAgICAgICAgICBzcHJpdGUucG9zaXRpb24uc2V0KC01LCB6KDApLCB5KF8pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpZHggPT09IDIpIHtcbiAgICAgICAgICBzcHJpdGUucG9zaXRpb24uc2V0KDAsIHooXyksIC01KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRpY2tzLmFkZChzcHJpdGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBub3J0aExhYmVsID0gdGhpcy5tYWtlU3ByaXRlKCdOb3J0aCcsIHsgZm9udFNpemU6IDI4IH0pO1xuICAgIGNvbnN0IHdlc3RMYWJlbCA9IHRoaXMubWFrZVNwcml0ZSgnV2VzdCcsIHsgZm9udFNpemU6IDI4IH0pO1xuICAgIGNvbnN0IHR2ZExhYmVsID0gdGhpcy5tYWtlU3ByaXRlKCdUVkQnLCB7IGZvbnRTaXplOiAyOCB9KTtcblxuICAgIG5vcnRoTGFiZWwucG9zaXRpb24uc2V0KHgoc2NhbGVzRXh0cmVtc1swXSkgKyAxMCwgMCwgMCk7XG4gICAgd2VzdExhYmVsLnBvc2l0aW9uLnNldCgwLCAwLCB5KHNjYWxlc0V4dHJlbXNbMV0pICsgMTApO1xuICAgIHR2ZExhYmVsLnBvc2l0aW9uLnNldCgwLCB6KHNjYWxlc0V4dHJlbXNbMl0pLCAwKTtcblxuICAgIHRpY2tzLmFkZChub3J0aExhYmVsLCB3ZXN0TGFiZWwsIHR2ZExhYmVsKTtcblxuICAgIHRoaXMuX3NjZW5lLmFkZCh0aWNrcyk7XG4gIH1cblxuICBwcml2YXRlIGdldFNjYWxlcyhzZXJpZXM6IFNlcmllczNkPEJhc2UzZFBvaW50PltdKSB7XG4gICAgY29uc3QgZXh0cmVtcyA9IHNlcmllcy5tYXAoKF8pID0+ICh7XG4gICAgICB4OiBkMy5leHRlbnQoXy5wb2ludHMsIChwOiBhbnkpID0+IHAueCksXG4gICAgICB5OiBkMy5leHRlbnQoXy5wb2ludHMsIChwOiBhbnkpID0+IHAueSksXG4gICAgICB6OiBkMy5leHRlbnQoXy5wb2ludHMsIChwOiBhbnkpID0+IHAueiksXG4gICAgfSkpO1xuXG4gICAgY29uc3QgZmxhdHRlbkV4dHJlbXMgPSBleHRyZW1zLnJlZHVjZShcbiAgICAgIChhY2M6IGFueSwgXyk6IHsgeDogW251bWJlcl07IHk6IFtudW1iZXJdOyB6OiBbbnVtYmVyXSB9ID0+IHtcbiAgICAgICAgYWNjLnggPSBhY2MueC5jb25jYXQoXy54KTtcbiAgICAgICAgYWNjLnkgPSBhY2MueS5jb25jYXQoXy55KTtcbiAgICAgICAgYWNjLnogPSBhY2Muei5jb25jYXQoXy56KTtcbiAgICAgICAgcmV0dXJuIGFjYyBhcyBhbnk7XG4gICAgICB9LFxuICAgICAgeyB4OiBbXSwgeTogW10sIHo6IFtdIH1cbiAgICApO1xuXG4gICAgY29uc3QgeCA9IGQzXG4gICAgICAuc2NhbGVMaW5lYXIoKVxuICAgICAgLmRvbWFpbihbXG4gICAgICAgIGQzLm1pbihmbGF0dGVuRXh0cmVtcy54KSBhcyBhbnksXG4gICAgICAgIHRoaXMuX2NvbmZpZz8uYXhlcz8ubWF4ID09IG51bGxcbiAgICAgICAgICA/IGQzLm1heChmbGF0dGVuRXh0cmVtcy54KVxuICAgICAgICAgIDogdGhpcy5fY29uZmlnLmF4ZXMubWF4LFxuICAgICAgXSlcbiAgICAgIC5yYW5nZShbMCwgdGhpcy5TSURFX1NJWkVdKVxuICAgICAgLm5pY2UoKTtcblxuICAgIGNvbnN0IHkgPSBkM1xuICAgICAgLnNjYWxlTGluZWFyKClcbiAgICAgIC5kb21haW4oW1xuICAgICAgICBkMy5taW4oZmxhdHRlbkV4dHJlbXMueSkgYXMgYW55LFxuICAgICAgICB0aGlzLl9jb25maWc/LmF4ZXM/Lm1heCA9PSBudWxsXG4gICAgICAgICAgPyBkMy5tYXgoZmxhdHRlbkV4dHJlbXMueSlcbiAgICAgICAgICA6IHRoaXMuX2NvbmZpZy5heGVzLm1heCxcbiAgICAgIF0pXG4gICAgICAucmFuZ2UoWzAsIHRoaXMuU0lERV9TSVpFXSlcbiAgICAgIC5uaWNlKCk7XG5cbiAgICBjb25zdCB6ID0gZDNcbiAgICAgIC5zY2FsZUxpbmVhcigpXG4gICAgICAuZG9tYWluKFtcbiAgICAgICAgZDMubWluKGZsYXR0ZW5FeHRyZW1zLnopIGFzIGFueSxcbiAgICAgICAgdGhpcy5fY29uZmlnPy5heGVzPy5tYXggPT0gbnVsbFxuICAgICAgICAgID8gZDMubWF4KGZsYXR0ZW5FeHRyZW1zLnopXG4gICAgICAgICAgOiB0aGlzLl9jb25maWcuYXhlcy5tYXgsXG4gICAgICBdKVxuICAgICAgLnJhbmdlKFt0aGlzLlNJREVfU0laRSwgMF0pXG4gICAgICAubmljZSgpO1xuXG4gICAgcmV0dXJuIHsgeCwgeSwgeiB9O1xuICB9XG59XG4iLCI8Y2FudmFzICNjYW52YXM+PC9jYW52YXM+XG4iXX0=
239
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQzZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L2NoYXJ0LTNkL2NoYXJ0M2QvY2hhcnQzZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L2NoYXJ0LTNkL2NoYXJ0M2QvY2hhcnQzZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ1UsdUJBQXVCLEVBQ3RDLFNBQVMsRUFFVCxLQUFLLEVBR0wsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUN4RSxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUt6QixPQUFPLEVBQUMsU0FBUyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7QUFROUMsTUFBTSxPQUFPLGdCQUFnQjtJQWdCM0IsWUFDVSxXQUF1QixFQUN2QixhQUFpQztRQURqQyxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixrQkFBYSxHQUFiLGFBQWEsQ0FBb0I7UUFSbkMsY0FBUyxHQUFHLEdBQUcsQ0FBQztRQUloQixXQUFNLEdBQUcsSUFBSSxDQUFDO0lBTXRCLENBQUM7SUFFRCxJQUFhLE1BQU0sQ0FBQyxNQUFzQjtRQUN4QyxJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNiO0lBQ0gsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBWSxNQUFNO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUM7SUFDdEMsQ0FBQztJ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RCxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRXBCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxFQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUMsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEVBQUMsUUFBUSxFQUFFLEVBQUUsRUFBQyxDQUFDLENBQUM7UUFDdkQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBQyxRQUFRLEVBQUUsRUFBRSxFQUFDLENBQUMsQ0FBQztRQUV4RCxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwRCxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuRCxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVsRCxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFHM0MsTUFBTSxVQUFVLEdBQUcsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4RCxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFD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LEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUE7UUFHcEMsT0FBTyxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7SUFDbkIsQ0FBQzs7NkdBalZVLGdCQUFnQjtpR0FBaEIsZ0JBQWdCLHVMQ3hCN0IsNkJBQ0E7MkZEdUJhLGdCQUFnQjtrQkFONUIsU0FBUzsrQkFDRSxjQUFjLG1CQUdQLHVCQUF1QixDQUFDLE1BQU07a0lBRzFCLFNBQVM7c0JBQTdCLFNBQVM7dUJBQUMsUUFBUTtnQkFxQk4sTUFBTTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB7T3JiaXRDb250cm9sc30gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL2NvbnRyb2xzL09yYml0Q29udHJvbHMnO1xuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xuaW1wb3J0IHtDaGFydDNkT3B0aW9uc30gZnJvbSAnLi4vbW9kZWwvY2hhcnQtM2Qtb3B0aW9ucyc7XG5pbXBvcnQge0Jhc2UzZFBvaW50fSBmcm9tICcuLi9tb2RlbC9iYXNlLTNkLXBvaW50JztcbmltcG9ydCB7U2VyaWVzM2R9IGZyb20gJy4uL21vZGVsL3Nlcmllcy0zZCc7XG5pbXBvcnQge1RoZW1lU3dpdGNoU2VydmljZX0gZnJvbSAnLi4vLi4vdGhlbWUtc3dpdGNoL3RoZW1lLXN3aXRjaC5zZXJ2aWNlJztcbmltcG9ydCB7dGFrZVdoaWxlLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGV0YS1jaGFydDNkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoYXJ0M2QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jaGFydDNkLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDaGFydDNkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKCdjYW52YXMnKSBjYW52YXNSZWY6IEVsZW1lbnRSZWY7XG5cbiAgcHJpdmF0ZSBfc2NlbmU6IFRIUkVFLlNjZW5lO1xuICBwcml2YXRlIF9jYW1lcmE6IFRIUkVFLlBlcnNwZWN0aXZlQ2FtZXJhO1xuICBwcml2YXRlIF9yZW5kZXJlcjogVEhSRUUuUmVuZGVyZXI7XG4gIHByaXZhdGUgX2NvbnRyb2xzOiBPcmJpdENvbnRyb2xzO1xuICBwcml2YXRlIF9vYnM6IFJlc2l6ZU9ic2VydmVyO1xuICBwcml2YXRlIF9jb25maWc6IENoYXJ0M2RPcHRpb25zO1xuXG4gIHByaXZhdGUgU0lERV9TSVpFID0gMTAwO1xuICBwcml2YXRlIGdyaWRDb2xvcjogYW55O1xuICBwcml2YXRlIGF4ZXNDb2xvcjogYW55O1xuXG4gIHByaXZhdGUgX2FsaXZlID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgX3RoZW1lU2VydmljZTogVGhlbWVTd2l0Y2hTZXJ2aWNlXG4gICkge1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGNvbmZpZyhjb25maWc6IENoYXJ0M2RPcHRpb25zKSB7XG4gICAgaWYgKGNvbmZpZykge1xuICAgICAgdGhpcy5fY29uZmlnID0gY29uZmlnO1xuICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGNvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY2FudmFzKCk6IEhUTUxDYW52YXNFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5jYW52YXNSZWYubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3RoZW1lU2VydmljZS50aGVtZVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpLFxuICAgICAgICB0YXAoKF8pID0+IHtcbiAgICAgICAgICB0aGlzLmdyaWRDb2xvciA9IF8gPyAnIzVkNmE3MycgOiAnI2JkYmRjNic7XG4gICAgICAgICAgdGhpcy5heGVzQ29sb3IgPSAgXyA/ICcjOGU4ZjlkJyA6ICcjN2Q4ZjlhJztcbiAgICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmFkZFJlc2l6ZU9ic2VydmVyKCk7XG4gICAgdGhpcy5jcmVhdGVTY2VuZSgpO1xuICAgIHRoaXMuc3RhcnRSZW5kZXJpbmdMb29wKCk7XG4gICAgdGhpcy5pbml0KCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9hbGl2ZSA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0KCkge1xuICAgIGlmICghdGhpcy5fc2NlbmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3aGlsZSAodGhpcy5fc2NlbmUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5fc2NlbmUucmVtb3ZlKHRoaXMuX3NjZW5lLmNoaWxkcmVuWzBdKTtcbiAgICB9XG5cbiAgICBjb25zdCB7eCwgeSwgen0gPSB0aGlzLmdldFNjYWxlcyh0aGlzLl9jb25maWcuc2VyaWVzKTtcblxuICAgIHRoaXMuY29uZmlnLnNlcmllcy5mb3JFYWNoKChkYXRhLCBpZHgpID0+IHtcblxuICAgICAgaWYgKCFkYXRhLnBvaW50cz8ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBwb2ludHMgPSBkYXRhLnBvaW50cy5tYXAoKF8pID0+IG5ldyBUSFJFRS5WZWN0b3IzKHgoXy54KSwgeShfLnkpLCB6KF8ueikpKTtcblxuICAgICAgY29uc3QgY29sb3IgPSBkMy5zY2FsZU9yZGluYWwoZDMuc2NoZW1lVGFibGVhdTEwKTtcblxuICAgICAgY29uc3QgbWF0ZXJpYWwgPSBuZXcgVEhSRUUuTGluZUJhc2ljTWF0ZXJpYWwoe1xuICAgICAgICBjb2xvcjogZGF0YT8uY29sb3IgPz8gY29sb3IoaWR4LnRvU3RyaW5nKCkpLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHR1YmVHZW9tZXRyeSA9IG5ldyBUSFJFRS5UdWJlR2VvbWV0cnkoXG4gICAgICAgIG5ldyBUSFJFRS5DYXRtdWxsUm9tQ3VydmUzKHBvaW50cyksXG4gICAgICAgIDEwMjQsXG4gICAgICAgIDAuNSxcbiAgICAgICAgMjAsXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuXG4gICAgICBsZXQgdHViZSA9IG5ldyBUSFJFRS5MaW5lKHR1YmVHZW9tZXRyeSwgbWF0ZXJpYWwpO1xuICAgICAgdGhpcy5fc2NlbmUuYWRkKHR1YmUpO1xuXG5cbiAgICB9KTtcblxuXG4gICAgY29uc3QgY2lyY2xlcyA9IHgudGlja3ModGhpcy5TSURFX1NJWkUgLyAxMCk7XG5cblxuICAgIGNvbnN0IG1hdGVyaWFsID0gbmV3IFRIUkVFLkxpbmVCYXNpY01hdGVyaWFsKCB7IGNvbG9yOiB0aGlzLmF4ZXNDb2xvciB9ICk7XG4gICAgY29uc3QgcG9pbnRzTGluZXMgPSBbXTtcbiAgICBwb2ludHNMaW5lcy5wdXNoKG5ldyBUSFJFRS5WZWN0b3IzKDAsIDAgLCAwKSk7XG4gICAgcG9pbnRzTGluZXMucHVzaChuZXcgVEhSRUUuVmVjdG9yMygwLCAwICwgeigtei5kb21haW4oKVsxXSkpKTtcblxuICAgIHBvaW50c0xpbmVzLnB1c2gobmV3IFRIUkVFLlZlY3RvcjMoMCwgMCAsIDApKTtcbiAgICBwb2ludHNMaW5lcy5wdXNoKG5ldyBUSFJFRS5WZWN0b3IzKHgoLXguZG9tYWluKClbMV0pLCAwICwgMCkpO1xuXG4gICAgY29uc3QgZ2VvbWV0cnlMaW5lcyA9IG5ldyBUSFJFRS5CdWZmZXJHZW9tZXRyeSgpLnNldEZyb21Qb2ludHMocG9pbnRzTGluZXMpO1xuICAgIGNvbnN0IGxpbmUgPSBuZXcgVEhSRUUuTGluZShnZW9tZXRyeUxpbmVzLCBtYXRlcmlhbCk7XG5cbiAgICB0aGlzLl9zY2VuZS5hZGQobGluZSlcblxuICAgIGNpcmNsZXMuZm9yRWFjaCgocikgPT4ge1xuXG4gICAgICBjb25zdCBtYXRlcmlhbCA9IG5ldyBUSFJFRS5MaW5lRGFzaGVkTWF0ZXJpYWwoe1xuICAgICAgICBjb2xvcjogdGhpcy5ncmlkQ29sb3IsXG4gICAgICAgIGRhc2hTaXplOiAxLFxuICAgICAgICBnYXBTaXplOiAzXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgY2lyY2xlR2VvbWV0cnkgPSBuZXcgVEhSRUUuQnVmZmVyR2VvbWV0cnkoKS5zZXRGcm9tUG9pbnRzKFxuICAgICAgICBuZXcgVEhSRUUuUGF0aCgpLmFic2FyYygwLCAwLCB4KHIpLCAwLCBNYXRoLlBJICogMiwgZmFsc2UpLmdldFNwYWNlZFBvaW50cygxMDApXG4gICAgICApO1xuXG4gICAgICBjb25zdCBjaXJjbGUgPSBuZXcgVEhSRUUuTGluZVNlZ21lbnRzKGNpcmNsZUdlb21ldHJ5LCBtYXRlcmlhbCk7XG5cbiAgICAgIGNpcmNsZS5nZW9tZXRyeS5yb3RhdGVYKC1NYXRoLlBJIC8gMilcblxuICAgICAgdGhpcy5fc2NlbmUuYWRkKGNpcmNsZSk7XG5cbiAgICB9KTtcblxuICAgIHRoaXMuZHJhd1RpY2tzKHgsIHksIHopO1xuXG4gICAgaWYoIXRoaXMuX2NvbnRyb2xzKSB7XG4gICAgICB0aGlzLl9jb250cm9scyA9IG5ldyBPcmJpdENvbnRyb2xzKHRoaXMuX2NhbWVyYSwgdGhpcy5fcmVuZGVyZXIuZG9tRWxlbWVudCk7XG5cbiAgICAgIHRoaXMuX2NvbnRyb2xzLmVuYWJsZURhbXBpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5fY29udHJvbHMuZW5hYmxlUGFuID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NvbnRyb2xzLmRhbXBpbmdGYWN0b3IgPSAwLjI1O1xuICAgICAgdGhpcy5fY29udHJvbHMuc2NyZWVuU3BhY2VQYW5uaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NvbnRyb2xzLm1pbkRpc3RhbmNlID0gMDtcbiAgICAgIHRoaXMuX2NvbnRyb2xzLm1heERpc3RhbmNlID0gMTAwMDA7XG4gICAgICB0aGlzLl9jb250cm9scy5tYXhQb2xhckFuZ2xlID0gTWF0aC5QSSAvIDI7XG5cbiAgICAgIHRoaXMuX2NvbnRyb2xzLmVuYWJsZVpvb20gPSB0cnVlO1xuICAgIH1cblxuXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNjZW5lKCkge1xuICAgIHRoaXMuX3NjZW5lID0gbmV3IFRIUkVFLlNjZW5lKCk7XG5cbiAgICBjb25zdCBhc3BlY3RSYXRpbyA9XG4gICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggL1xuICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodDtcblxuICAgIGNvbnN0IGZpZWxkT2ZWaWV3ID0gMTA7XG4gICAgY29uc3QgbmVhckNsaXBwaW5nUGFuZSA9IDE7XG4gICAgY29uc3QgZmFyQ2xpcHBpbmdQYW5lID0gMTAwMDA7XG5cbiAgICB0aGlzLl9jYW1lcmEgPSBuZXcgVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEoXG4gICAgICBmaWVsZE9mVmlldyxcbiAgICAgIGFzcGVjdFJhdGlvLFxuICAgICAgbmVhckNsaXBwaW5nUGFuZSxcbiAgICAgIGZhckNsaXBwaW5nUGFuZVxuICAgICk7XG5cbiAgICB0aGlzLl9jYW1lcmEucG9zaXRpb24uc2V0KDEzMDAsIDEzMDAsIDEzMDApLnNldExlbmd0aCgxMzAwKTtcbiAgICB0aGlzLl9zY2VuZS5hZGQodGhpcy5fY2FtZXJhKTtcblxuXG4gIH1cblxuICBwcml2YXRlIHNldFNpemUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICB0aGlzLl9jYW1lcmEuYXNwZWN0ID0gd2lkdGggLyBoZWlnaHQ7XG4gICAgdGhpcy5fcmVuZGVyZXIuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTtcblxuICAgIHRoaXMuX2NhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlcigpIHtcbiAgICB0aGlzLl9yZW5kZXJlci5yZW5kZXIodGhpcy5fc2NlbmUsIHRoaXMuX2NhbWVyYSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0UmVuZGVyaW5nTG9vcCgpIHtcbiAgICB0aGlzLl9yZW5kZXJlciA9IG5ldyBUSFJFRS5XZWJHTFJlbmRlcmVyKHtcbiAgICAgIGFudGlhbGlhczogdHJ1ZSxcbiAgICAgIGNhbnZhczogdGhpcy5jYW52YXMsXG4gICAgICBhbHBoYTogdHJ1ZSxcbiAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogdHJ1ZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGFuaW1hdGUgPSAoKSA9PiB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XG4gICAgICB0aGlzLl9jb250cm9scz8udXBkYXRlKCk7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH07XG5cbiAgICBhbmltYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGFkZFJlc2l6ZU9ic2VydmVyKCkge1xuICAgIHRoaXMuX29icyA9IG5ldyBSZXNpemVPYnNlcnZlcigoXykgPT4ge1xuICAgICAgdGhpcy5zZXRTaXplKF9bMF0/LmNvbnRlbnRSZWN0LndpZHRoLCBfWzBdPy5jb250ZW50UmVjdC5oZWlnaHQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fb2JzLm9ic2VydmUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgbWFrZVNwcml0ZSh0ZXh0OiBzdHJpbmcsIG9wdHM/OiB7IGZvbnRTaXplPzogbnVtYmVyIH0pOiBUSFJFRS5TcHJpdGUge1xuICAgIGNvbnN0IGZvbnRTaXplID0gMjA7XG5cbiAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICBjb25zdCB0ZXh0V2lkdGggPSB0ZXh0Lmxlbmd0aCAqIDUwO1xuICAgIGNhbnZhcy5oZWlnaHQgPSA1MDtcbiAgICBjYW52YXMud2lkdGggPSA1MDtcblxuICAgIGlmIChjdHgpIHtcbiAgICAgIGN0eC5mb250ID0gYCR7Zm9udFNpemV9cHggQXJpYWxgO1xuICAgICAgY3R4LnRleHRBbGlnbiA9ICdjZW50ZXInO1xuICAgICAgY3R4LnRleHRCYXNlbGluZSA9ICdtaWRkbGUnO1xuICAgICAgY3R4LmZpbGxTdHlsZSA9ICcjQTBBMEEwJztcbiAgICAgIGN0eC5maWxsVGV4dCh0ZXh0LCAyNSwgMjUpO1xuICAgIH1cblxuICAgIGNvbnN0IHRleHR1cmUgPSBuZXcgVEhSRUUuVGV4dHVyZShjYW52YXMpO1xuICAgIHRleHR1cmUubWluRmlsdGVyID0gVEhSRUUuTGluZWFyRmlsdGVyO1xuICAgIHRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xuICAgIGNvbnN0IHNwcml0ZU1hdGVyaWFsID0gbmV3IFRIUkVFLlNwcml0ZU1hdGVyaWFsKHtcbiAgICAgIG1hcDogdGV4dHVyZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHNwcml0ZSA9IG5ldyBUSFJFRS5TcHJpdGUoc3ByaXRlTWF0ZXJpYWwpO1xuICAgIHNwcml0ZS5zY2FsZS5zZXQoMC40ICogZm9udFNpemUsIDAuNCAqIGZvbnRTaXplLCAwLjQgKiBmb250U2l6ZSk7XG5cblxuXG4gICAgcmV0dXJuIHNwcml0ZTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhd1RpY2tzKHg6IGFueSwgeTogYW55LCB6OiBhbnkpIHtcbiAgICBjb25zdCB0aWNrcyA9IG5ldyBUSFJFRS5PYmplY3QzRCgpO1xuICAgIGNvbnN0IHNjYWxlc0V4dHJlbXM6IGFueVtdID0gW107XG5cbiAgICBbeCwgeSwgel0uZm9yRWFjaCgoc2NhbGUsIGlkeCkgPT4ge1xuICAgICAgY29uc3QgZ2VuZXJhdGVkVGlja3MgPSBzY2FsZS50aWNrcyh0aGlzLlNJREVfU0laRSAvIDEwKVxuXG4gICAgICBzY2FsZXNFeHRyZW1zLnB1c2goZDMubWF4KGdlbmVyYXRlZFRpY2tzKSk7XG5cbiAgICAgIGdlbmVyYXRlZFRpY2tzLmZvckVhY2goKF86IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBzcHJpdGUgPSB0aGlzLm1ha2VTcHJpdGUoXyk7XG5cbiAgICAgICAgaWYgKGlkeCA9PT0gMCkge1xuICAgICAgICAgIHNwcml0ZS5wb3NpdGlvbi5zZXQoeChfKSwgeSh5LmRvbWFpbigpWzFdKSwgMCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaWR4ID09PSAxKSB7XG4gICAgICAgICAgc3ByaXRlLnBvc2l0aW9uLnNldCgtMTAsIHkoXyksIDApO1xuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaWR4ID09PSAyKSB7XG4gICAgICAgICAgc3ByaXRlLnBvc2l0aW9uLnNldCgwLCB5KHkuZG9tYWluKClbMV0pLCB6KF8pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRpY2tzLmFkZChzcHJpdGUpO1xuXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IG5vcnRoTGFiZWwgPSB0aGlzLm1ha2VTcHJpdGUoJ1gnLCB7Zm9udFNpemU6IDI4fSk7XG4gICAgY29uc3Qgd2VzdExhYmVsID0gdGhpcy5tYWtlU3ByaXRlKCdZJywge2ZvbnRTaXplOiAyOH0pO1xuICAgIGNvbnN0IHR2ZExhYmVsID0gdGhpcy5tYWtlU3ByaXRlKCdUVkQnLCB7Zm9udFNpemU6IDI4fSk7XG5cbiAgICBub3J0aExhYmVsLnBvc2l0aW9uLnNldCh4KHguZG9tYWluKClbMV0pICsgNSwgMCwgMCk7XG4gICAgd2VzdExhYmVsLnBvc2l0aW9uLnNldCgwLCAwLCB5KHkuZG9tYWluKClbMF0pICsgNSk7XG4gICAgdHZkTGFiZWwucG9zaXRpb24uc2V0KDAsIHooei5kb21haW4oKVsxXSkgKyA1LCAwKTtcblxuICAgIHRpY2tzLmFkZChub3J0aExhYmVsLCB3ZXN0TGFiZWwsIHR2ZExhYmVsKTtcblxuXG4gICAgY29uc3QgYXhlc0hlbHBlciA9IG5ldyBUSFJFRS5BeGVzSGVscGVyKHRoaXMuU0lERV9TSVpFKTtcbiAgICBheGVzSGVscGVyLnNldENvbG9ycyh0aGlzLmF4ZXNDb2xvciwgdGhpcy5heGVzQ29sb3IsIHRoaXMuYXhlc0NvbG9yKVxuXG4gICAgdGhpcy5fc2NlbmUuYWRkKGF4ZXNIZWxwZXIpO1xuXG4gICAgdGhpcy5fc2NlbmUuYWRkKHRpY2tzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2NhbGVzKHNlcmllczogU2VyaWVzM2Q8QmFzZTNkUG9pbnQ+W10pIHtcbiAgICBjb25zdCBleHRyZW1zID0gc2VyaWVzLm1hcCgoXykgPT4gKHtcbiAgICAgIHg6IGQzLmV4dGVudChfLnBvaW50cywgKHA6IGFueSkgPT4gcC54KSxcbiAgICAgIHk6IGQzLmV4dGVudChfLnBvaW50cywgKHA6IGFueSkgPT4gcC55KSxcbiAgICAgIHo6IGQzLmV4dGVudChfLnBvaW50cywgKHA6IGFueSkgPT4gcC56KSxcbiAgICB9KSk7XG5cbiAgICBjb25zdCBmbGF0dGVuRXh0cmVtcyA9IGV4dHJlbXMucmVkdWNlKFxuICAgICAgKGFjYzogYW55LCBfKTogeyB4OiBbbnVtYmVyXTsgeTogW251bWJlcl07IHo6IFtudW1iZXJdIH0gPT4ge1xuICAgICAgICBhY2MueCA9IGFjYy54LmNvbmNhdChfLngpO1xuICAgICAgICBhY2MueSA9IGFjYy55LmNvbmNhdChfLnkpO1xuICAgICAgICBhY2MueiA9IGFjYy56LmNvbmNhdChfLnopO1xuICAgICAgICByZXR1cm4gYWNjIGFzIGFueTtcbiAgICAgIH0sXG4gICAgICB7eDogW10sIHk6IFtdLCB6OiBbXX1cbiAgICApO1xuXG4gICAgY29uc3QgeCA9IGQzXG4gICAgICAuc2NhbGVMaW5lYXIoKVxuICAgICAgLmRvbWFpbihbMCwgdGhpcy5fY29uZmlnPy5heGVzPy5tYXggPT0gbnVsbFxuICAgICAgICAgID8gcGFyc2VJbnQoZDMubWF4KGZsYXR0ZW5FeHRyZW1zLngpKVxuICAgICAgICAgIDogdGhpcy5fY29uZmlnLmF4ZXMubWF4LFxuICAgICAgXSlcbiAgICAgIC5yYW5nZShbMCwgdGhpcy5TSURFX1NJWkVdKS5uaWNlKClcblxuICAgIGNvbnN0IHkgPSBkM1xuICAgICAgLnNjYWxlTGluZWFyKClcbiAgICAgIC5kb21haW4oWzAsIHBhcnNlSW50KGQzLm1heChmbGF0dGVuRXh0cmVtcy55KSwgMTApXSlcbiAgICAgIC5yYW5nZShbdGhpcy5TSURFX1NJWkUsIDBdKVxuXG4gICAgY29uc3QgeiA9IGQzXG4gICAgICAuc2NhbGVMaW5lYXIoKVxuICAgICAgLmRvbWFpbihbMCxcbiAgICAgICAgdGhpcy5fY29uZmlnPy5heGVzPy5tYXggPT0gbnVsbFxuICAgICAgICAgID8gcGFyc2VJbnQoZDMubWF4KGZsYXR0ZW5FeHRyZW1zLnopKVxuICAgICAgICAgIDogdGhpcy5fY29uZmlnLmF4ZXMubWF4XSlcbiAgICAgIC5yYW5nZShbMCwgdGhpcy5TSURFX1NJWkVdKS5uaWNlKClcblxuXG4gICAgcmV0dXJuIHt4LCB5LCB6fTtcbiAgfVxufVxuIiwiPGNhbnZhcyAjY2FudmFzPjwvY2FudmFzPlxuIl19
@@ -4,4 +4,4 @@ export class Chart3dOptions {
4
4
  this.series = options?.series || [];
5
5
  }
6
6
  }
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtM2Qtb3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvY2hhcnQtM2QvbW9kZWwvY2hhcnQtM2Qtb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxNQUFNLE9BQU8sY0FBYztJQU96QixZQUFZLE9BQXdCO1FBQ2xDLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sRUFBRSxNQUFNLElBQUksRUFBRSxDQUFDO0lBQ3RDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2UzZFBvaW50IH0gZnJvbSAnLi9iYXNlLTNkLXBvaW50JztcbmltcG9ydCB7IFNlcmllczNkIH0gZnJvbSAnLi9zZXJpZXMtM2QnO1xuXG5leHBvcnQgY2xhc3MgQ2hhcnQzZE9wdGlvbnMge1xuICBheGVzPzoge1xuICAgIG1heD86IG51bWJlcjtcbiAgfTtcblxuICBzZXJpZXM6IFNlcmllczNkPEJhc2UzZFBvaW50PltdO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBDaGFydDNkT3B0aW9ucykge1xuICAgIHRoaXMuYXhlcyA9IHsgLi4ub3B0aW9ucz8uYXhlcyB9O1xuICAgIHRoaXMuc2VyaWVzID0gb3B0aW9ucz8uc2VyaWVzIHx8IFtdO1xuICB9XG59XG4iXX0=
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtM2Qtb3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvY2hhcnQtM2QvbW9kZWwvY2hhcnQtM2Qtb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxNQUFNLE9BQU8sY0FBYztJQVN6QixZQUFZLE9BQXdCO1FBQ2xDLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sRUFBRSxNQUFNLElBQUksRUFBRSxDQUFDO0lBQ3RDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2UzZFBvaW50IH0gZnJvbSAnLi9iYXNlLTNkLXBvaW50JztcbmltcG9ydCB7IFNlcmllczNkIH0gZnJvbSAnLi9zZXJpZXMtM2QnO1xuXG5leHBvcnQgY2xhc3MgQ2hhcnQzZE9wdGlvbnMge1xuICBheGVzPzoge1xuICAgIG1pbj86IG51bWJlcjtcbiAgICBtYXg/OiBudW1iZXI7XG5cbiAgfTtcblxuICBzZXJpZXM6IFNlcmllczNkPEJhc2UzZFBvaW50PltdO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBDaGFydDNkT3B0aW9ucykge1xuICAgIHRoaXMuYXhlcyA9IHsgLi4ub3B0aW9ucz8uYXhlcyB9O1xuICAgIHRoaXMuc2VyaWVzID0gb3B0aW9ucz8uc2VyaWVzIHx8IFtdO1xuICB9XG59XG4iXX0=
@@ -10048,7 +10048,8 @@ class Chart3dComponent {
10048
10048
  ngOnInit() {
10049
10049
  this._themeService.theme
10050
10050
  .pipe(takeWhile((_) => this._alive), tap((_) => {
10051
- this.gridColor = _ ? '#474751' : '#d7dee3';
10051
+ this.gridColor = _ ? '#5d6a73' : '#bdbdc6';
10052
+ this.axesColor = _ ? '#8e8f9d' : '#7d8f9a';
10052
10053
  this.init();
10053
10054
  }))
10054
10055
  .subscribe();
@@ -10057,6 +10058,7 @@ class Chart3dComponent {
10057
10058
  this.addResizeObserver();
10058
10059
  this.createScene();
10059
10060
  this.startRenderingLoop();
10061
+ this.init();
10060
10062
  }
10061
10063
  ngOnDestroy() {
10062
10064
  this._alive = false;
@@ -10070,38 +10072,52 @@ class Chart3dComponent {
10070
10072
  }
10071
10073
  const { x, y, z } = this.getScales(this._config.series);
10072
10074
  this.config.series.forEach((data, idx) => {
10073
- var _a;
10074
- const geometry = new THREE.BufferGeometry().setFromPoints(data.points.map((_) => new THREE.Vector3(x(_.x), z(_.z), y(_.y))));
10075
+ var _a, _b;
10076
+ if (!((_a = data.points) === null || _a === void 0 ? void 0 : _a.length)) {
10077
+ return;
10078
+ }
10079
+ const points = data.points.map((_) => new THREE.Vector3(x(_.x), y(_.y), z(_.z)));
10075
10080
  const color = d3.scaleOrdinal(d3.schemeTableau10);
10076
10081
  const material = new THREE.LineBasicMaterial({
10077
- color: (_a = data === null || data === void 0 ? void 0 : data.color) !== null && _a !== void 0 ? _a : color(idx.toString()),
10082
+ color: (_b = data === null || data === void 0 ? void 0 : data.color) !== null && _b !== void 0 ? _b : color(idx.toString()),
10083
+ });
10084
+ const tubeGeometry = new THREE.TubeGeometry(new THREE.CatmullRomCurve3(points), 1024, 0.5, 20, false);
10085
+ let tube = new THREE.Line(tubeGeometry, material);
10086
+ this._scene.add(tube);
10087
+ });
10088
+ const circles = x.ticks(this.SIDE_SIZE / 10);
10089
+ const material = new THREE.LineBasicMaterial({ color: this.axesColor });
10090
+ const pointsLines = [];
10091
+ pointsLines.push(new THREE.Vector3(0, 0, 0));
10092
+ pointsLines.push(new THREE.Vector3(0, 0, z(-z.domain()[1])));
10093
+ pointsLines.push(new THREE.Vector3(0, 0, 0));
10094
+ pointsLines.push(new THREE.Vector3(x(-x.domain()[1]), 0, 0));
10095
+ const geometryLines = new THREE.BufferGeometry().setFromPoints(pointsLines);
10096
+ const line = new THREE.Line(geometryLines, material);
10097
+ this._scene.add(line);
10098
+ circles.forEach((r) => {
10099
+ const material = new THREE.LineDashedMaterial({
10100
+ color: this.gridColor,
10101
+ dashSize: 1,
10102
+ gapSize: 3
10078
10103
  });
10079
- const line = new THREE.Line(geometry, material);
10080
- line.computeLineDistances();
10081
- line.scale.set(1, 1, 1);
10082
- this._scene.add(line);
10104
+ const circleGeometry = new THREE.BufferGeometry().setFromPoints(new THREE.Path().absarc(0, 0, x(r), 0, Math.PI * 2, false).getSpacedPoints(100));
10105
+ const circle = new THREE.LineSegments(circleGeometry, material);
10106
+ circle.geometry.rotateX(-Math.PI / 2);
10107
+ this._scene.add(circle);
10083
10108
  });
10084
- const plane = new THREE.GridHelper(this.SIDE_SIZE, this.SIDE_SIZE / 10, this.gridColor, this.gridColor);
10085
- plane.position.set(this.SIDE_SIZE / 2, 0, this.SIDE_SIZE / 2);
10086
- this._scene.add(plane);
10087
- const gridX = new THREE.GridHelper(this.SIDE_SIZE, this.SIDE_SIZE / 10, this.gridColor, this.gridColor);
10088
- gridX.geometry.rotateX(-Math.PI / 2);
10089
- gridX.position.set(this.SIDE_SIZE / 2, this.SIDE_SIZE / 2, 0);
10090
- this._scene.add(gridX);
10091
- const gridY = new THREE.GridHelper(this.SIDE_SIZE, this.SIDE_SIZE / 10, this.gridColor, this.gridColor);
10092
- gridY.geometry.rotateZ(Math.PI / 2);
10093
- gridY.position.set(0, this.SIDE_SIZE / 2, this.SIDE_SIZE / 2);
10094
- this._scene.add(gridY);
10095
10109
  this.drawTicks(x, y, z);
10096
- this._controls = new OrbitControls(this._camera, this._renderer.domElement);
10097
- this._controls.enableDamping = true;
10098
- this._controls.enablePan = true;
10099
- this._controls.dampingFactor = 0.25;
10100
- this._controls.screenSpacePanning = true;
10101
- this._controls.minDistance = 0;
10102
- this._controls.maxDistance = 10000;
10103
- this._controls.maxPolarAngle = Math.PI / 2;
10104
- this._controls.enableZoom = true;
10110
+ if (!this._controls) {
10111
+ this._controls = new OrbitControls(this._camera, this._renderer.domElement);
10112
+ this._controls.enableDamping = true;
10113
+ this._controls.enablePan = true;
10114
+ this._controls.dampingFactor = 0.25;
10115
+ this._controls.screenSpacePanning = true;
10116
+ this._controls.minDistance = 0;
10117
+ this._controls.maxDistance = 10000;
10118
+ this._controls.maxPolarAngle = Math.PI / 2;
10119
+ this._controls.enableZoom = true;
10120
+ }
10105
10121
  }
10106
10122
  createScene() {
10107
10123
  this._scene = new THREE.Scene();
@@ -10165,7 +10181,7 @@ class Chart3dComponent {
10165
10181
  map: texture,
10166
10182
  });
10167
10183
  const sprite = new THREE.Sprite(spriteMaterial);
10168
- sprite.scale.set(5, 5, 5);
10184
+ sprite.scale.set(0.4 * fontSize, 0.4 * fontSize, 0.4 * fontSize);
10169
10185
  return sprite;
10170
10186
  }
10171
10187
  drawTicks(x, y, z) {
@@ -10177,28 +10193,31 @@ class Chart3dComponent {
10177
10193
  generatedTicks.forEach((_) => {
10178
10194
  const sprite = this.makeSprite(_);
10179
10195
  if (idx === 0) {
10180
- sprite.position.set(x(_), z(0), -5);
10196
+ sprite.position.set(x(_), y(y.domain()[1]), 0);
10181
10197
  }
10182
10198
  if (idx === 1) {
10183
- sprite.position.set(-5, z(0), y(_));
10199
+ sprite.position.set(-10, y(_), 0);
10184
10200
  }
10185
10201
  if (idx === 2) {
10186
- sprite.position.set(0, z(_), -5);
10202
+ sprite.position.set(0, y(y.domain()[1]), z(_));
10187
10203
  }
10188
10204
  ticks.add(sprite);
10189
10205
  });
10190
10206
  });
10191
- const northLabel = this.makeSprite('North', { fontSize: 28 });
10192
- const westLabel = this.makeSprite('West', { fontSize: 28 });
10207
+ const northLabel = this.makeSprite('X', { fontSize: 28 });
10208
+ const westLabel = this.makeSprite('Y', { fontSize: 28 });
10193
10209
  const tvdLabel = this.makeSprite('TVD', { fontSize: 28 });
10194
- northLabel.position.set(x(scalesExtrems[0]) + 10, 0, 0);
10195
- westLabel.position.set(0, 0, y(scalesExtrems[1]) + 10);
10196
- tvdLabel.position.set(0, z(scalesExtrems[2]), 0);
10210
+ northLabel.position.set(x(x.domain()[1]) + 5, 0, 0);
10211
+ westLabel.position.set(0, 0, y(y.domain()[0]) + 5);
10212
+ tvdLabel.position.set(0, z(z.domain()[1]) + 5, 0);
10197
10213
  ticks.add(northLabel, westLabel, tvdLabel);
10214
+ const axesHelper = new THREE.AxesHelper(this.SIDE_SIZE);
10215
+ axesHelper.setColors(this.axesColor, this.axesColor, this.axesColor);
10216
+ this._scene.add(axesHelper);
10198
10217
  this._scene.add(ticks);
10199
10218
  }
10200
10219
  getScales(series) {
10201
- var _a, _b, _c, _d, _e, _f;
10220
+ var _a, _b, _c, _d;
10202
10221
  const extrems = series.map((_) => ({
10203
10222
  x: d3.extent(_.points, (p) => p.x),
10204
10223
  y: d3.extent(_.points, (p) => p.y),
@@ -10212,34 +10231,22 @@ class Chart3dComponent {
10212
10231
  }, { x: [], y: [], z: [] });
10213
10232
  const x = d3
10214
10233
  .scaleLinear()
10215
- .domain([
10216
- d3.min(flattenExtrems.x),
10217
- ((_b = (_a = this._config) === null || _a === void 0 ? void 0 : _a.axes) === null || _b === void 0 ? void 0 : _b.max) == null
10218
- ? d3.max(flattenExtrems.x)
10234
+ .domain([0, ((_b = (_a = this._config) === null || _a === void 0 ? void 0 : _a.axes) === null || _b === void 0 ? void 0 : _b.max) == null
10235
+ ? parseInt(d3.max(flattenExtrems.x))
10219
10236
  : this._config.axes.max,
10220
10237
  ])
10221
- .range([0, this.SIDE_SIZE])
10222
- .nice();
10238
+ .range([0, this.SIDE_SIZE]).nice();
10223
10239
  const y = d3
10224
10240
  .scaleLinear()
10225
- .domain([
10226
- d3.min(flattenExtrems.y),
10227
- ((_d = (_c = this._config) === null || _c === void 0 ? void 0 : _c.axes) === null || _d === void 0 ? void 0 : _d.max) == null
10228
- ? d3.max(flattenExtrems.y)
10229
- : this._config.axes.max,
10230
- ])
10231
- .range([0, this.SIDE_SIZE])
10232
- .nice();
10241
+ .domain([0, parseInt(d3.max(flattenExtrems.y), 10)])
10242
+ .range([this.SIDE_SIZE, 0]);
10233
10243
  const z = d3
10234
10244
  .scaleLinear()
10235
- .domain([
10236
- d3.min(flattenExtrems.z),
10237
- ((_f = (_e = this._config) === null || _e === void 0 ? void 0 : _e.axes) === null || _f === void 0 ? void 0 : _f.max) == null
10238
- ? d3.max(flattenExtrems.z)
10239
- : this._config.axes.max,
10240
- ])
10241
- .range([this.SIDE_SIZE, 0])
10242
- .nice();
10245
+ .domain([0,
10246
+ ((_d = (_c = this._config) === null || _c === void 0 ? void 0 : _c.axes) === null || _d === void 0 ? void 0 : _d.max) == null
10247
+ ? parseInt(d3.max(flattenExtrems.z))
10248
+ : this._config.axes.max])
10249
+ .range([0, this.SIDE_SIZE]).nice();
10243
10250
  return { x, y, z };
10244
10251
  }
10245
10252
  }