@rocketshow/designer 1.33.0 → 1.35.0
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.
- package/assets/i18n/de.json +2 -1
- package/assets/i18n/en.json +2 -1
- package/esm2022/lib/designer.component.mjs +197 -130
- package/esm2022/lib/designer.module.mjs +5 -2
- package/esm2022/lib/dropzone/dropzone.component.mjs +93 -0
- package/esm2022/lib/effect/effect-curve/effect-curve.component.mjs +14 -6
- package/esm2022/lib/fixture/fixture-capability/fixture-capability.component.mjs +5 -5
- package/esm2022/lib/fixture/fixture-channel/fixture-channel.component.mjs +6 -4
- package/esm2022/lib/fixture/fixture.component.mjs +25 -15
- package/esm2022/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.mjs +4 -4
- package/esm2022/lib/fixture-pool/fixture-pool.component.mjs +75 -21
- package/esm2022/lib/models/cached-fixture.mjs +1 -1
- package/esm2022/lib/models/fixture-matrix-pixel-group-constraints.mjs +27 -0
- package/esm2022/lib/models/fixture-matrix-pixel-group.mjs +12 -0
- package/esm2022/lib/models/fixture-matrix.mjs +25 -0
- package/esm2022/lib/models/fixture-mode-channel.mjs +26 -0
- package/esm2022/lib/models/fixture-mode.mjs +5 -2
- package/esm2022/lib/models/fixture-physical.mjs +14 -0
- package/esm2022/lib/models/fixture-profile.mjs +16 -1
- package/esm2022/lib/models/fixture.mjs +2 -2
- package/esm2022/lib/models/preset-fixture.mjs +10 -0
- package/esm2022/lib/models/preset.mjs +10 -1
- package/esm2022/lib/models/project.mjs +11 -1
- package/esm2022/lib/preview/models/color-changer-3d.mjs +5 -108
- package/esm2022/lib/preview/models/fixture-3d.mjs +125 -1
- package/esm2022/lib/preview/models/moving-head-3d.mjs +3 -122
- package/esm2022/lib/preview/preview.component.mjs +21 -14
- package/esm2022/lib/services/config.service.mjs +2 -1
- package/esm2022/lib/services/fixture.service.mjs +251 -43
- package/esm2022/lib/services/preset.service.mjs +91 -42
- package/esm2022/lib/services/preview.service.mjs +65 -64
- package/esm2022/lib/services/project-load.service.mjs +64 -4
- package/esm2022/lib/services/project.service.mjs +11 -15
- package/esm2022/lib/timeline/composition-settings/composition-settings.component.mjs +14 -44
- package/fesm2022/rocketshow-designer.mjs +1336 -791
- package/fesm2022/rocketshow-designer.mjs.map +1 -1
- package/lib/designer.component.d.ts +5 -5
- package/lib/designer.module.d.ts +15 -14
- package/lib/dropzone/dropzone.component.d.ts +24 -0
- package/lib/fixture/fixture.component.d.ts +4 -3
- package/lib/models/cached-fixture.d.ts +1 -0
- package/lib/models/fixture-matrix-pixel-group-constraints.d.ts +8 -0
- package/lib/models/fixture-matrix-pixel-group.d.ts +6 -0
- package/lib/models/fixture-matrix.d.ts +6 -0
- package/lib/models/fixture-mode-channel.d.ts +8 -0
- package/lib/models/fixture-mode.d.ts +3 -1
- package/lib/models/fixture-physical.d.ts +4 -0
- package/lib/models/fixture-profile.d.ts +5 -0
- package/lib/models/preset-fixture.d.ts +5 -0
- package/lib/models/preset.d.ts +2 -0
- package/lib/models/project.d.ts +3 -0
- package/lib/preview/models/color-changer-3d.d.ts +1 -11
- package/lib/preview/models/fixture-3d.d.ts +11 -0
- package/lib/preview/models/moving-head-3d.d.ts +1 -11
- package/lib/services/config.service.d.ts +1 -0
- package/lib/services/fixture.service.d.ts +7 -2
- package/lib/services/preset.service.d.ts +4 -2
- package/lib/services/preview.service.d.ts +2 -4
- package/lib/services/project-load.service.d.ts +5 -1
- package/lib/services/project.service.d.ts +2 -3
- package/lib/services/timeline.service.d.ts +1 -1
- package/lib/timeline/composition-settings/composition-settings.component.d.ts +2 -1
- package/package.json +1 -1
- package/rocketshow-designer-1.35.0.tgz +0 -0
- package/esm2022/lib/models/universe.mjs +0 -11
- package/esm2022/lib/services/universe.service.mjs +0 -23
- package/lib/models/universe.d.ts +0 -8
- package/lib/services/universe.service.d.ts +0 -9
- package/rocketshow-designer-1.33.0.tgz +0 -0
|
@@ -4,6 +4,8 @@ import { FixtureCapabilityColor, FixtureCapabilityType } from '../../models/fixt
|
|
|
4
4
|
export class Fixture3d {
|
|
5
5
|
constructor(fixtureService, fixture, scene) {
|
|
6
6
|
this.fixtureService = fixtureService;
|
|
7
|
+
this.pointLightMaxIntensity = 2;
|
|
8
|
+
this.spotLightLightMaxIntensity = 10;
|
|
7
9
|
this.fixtureHasDimmer = false;
|
|
8
10
|
this.fixtureHasColorWheel = false;
|
|
9
11
|
this.fixtureHasColor = false;
|
|
@@ -36,6 +38,29 @@ export class Fixture3d {
|
|
|
36
38
|
}
|
|
37
39
|
}
|
|
38
40
|
}
|
|
41
|
+
createObjects() {
|
|
42
|
+
// Add the spotlight
|
|
43
|
+
this.spotLight = new THREE.SpotLight(0xffffff, 50000);
|
|
44
|
+
this.spotLight.angle = 2;
|
|
45
|
+
this.spotLight.penumbra = 1;
|
|
46
|
+
this.spotLight.decay = 0.01;
|
|
47
|
+
this.spotLight.distance = 0;
|
|
48
|
+
this.spotLight.intensity = 1;
|
|
49
|
+
this.spotLightHelper = new THREE.SpotLightHelper(this.spotLight);
|
|
50
|
+
this.scene.add(this.spotLightHelper);
|
|
51
|
+
const spotLightTarget = new THREE.Object3D();
|
|
52
|
+
this.spotLight.target = spotLightTarget;
|
|
53
|
+
this.spotlightGroup = new THREE.Object3D();
|
|
54
|
+
this.spotlightGroup.add(this.spotLight);
|
|
55
|
+
this.spotlightGroup.add(spotLightTarget);
|
|
56
|
+
this.spotLight.position.set(0, -1.4, 0);
|
|
57
|
+
spotLightTarget.position.set(0, -10, 0);
|
|
58
|
+
this.createSpotLightBeam();
|
|
59
|
+
// Add the point light for the surrounding light
|
|
60
|
+
this.pointLight = new THREE.PointLight(0xffffff, 500, 0, 0.1);
|
|
61
|
+
this.spotlightGroup.add(this.pointLight);
|
|
62
|
+
this.pointLight.position.set(0, -1.4, 0);
|
|
63
|
+
}
|
|
39
64
|
getCapabilityInValue(channel, value) {
|
|
40
65
|
for (const capability of channel.capabilities) {
|
|
41
66
|
if (capability.capability.dmxRange.length === 0 ||
|
|
@@ -110,6 +135,22 @@ export class Fixture3d {
|
|
|
110
135
|
}
|
|
111
136
|
}
|
|
112
137
|
}
|
|
138
|
+
// Apply the colors and intensities
|
|
139
|
+
// Apply the dimmer value
|
|
140
|
+
// Take the color into account for the beam (don't show a black beam)
|
|
141
|
+
const color = new THREE.Color('rgb(' + this.colorRed + ', ' + this.colorGreen + ', ' + this.colorBlue + ')');
|
|
142
|
+
const intensityColor = Math.max(this.colorRed, this.colorGreen, this.colorBlue);
|
|
143
|
+
if (this.pointLight) {
|
|
144
|
+
this.pointLight.color = color;
|
|
145
|
+
this.pointLight.intensity = this.pointLightMaxIntensity * this.dimmer;
|
|
146
|
+
}
|
|
147
|
+
if (this.spotLight) {
|
|
148
|
+
this.spotLight.color = color;
|
|
149
|
+
this.spotLightBeam.material.uniforms.lightColor.value = color;
|
|
150
|
+
this.spotLightBeam.material.uniforms.opacity.value = Math.min(intensityColor, this.dimmer);
|
|
151
|
+
this.spotLight.intensity = this.spotLightLightMaxIntensity * this.dimmer;
|
|
152
|
+
this.spotLightBeam.material.uniforms.spotPosition.value = this.spotlightGroup.position;
|
|
153
|
+
}
|
|
113
154
|
}
|
|
114
155
|
updatePosition(object) {
|
|
115
156
|
// Update the position
|
|
@@ -143,8 +184,91 @@ export class Fixture3d {
|
|
|
143
184
|
}
|
|
144
185
|
}
|
|
145
186
|
}
|
|
187
|
+
atmosphereMat() {
|
|
188
|
+
const vertexShader = `
|
|
189
|
+
varying vec3 vNormal;
|
|
190
|
+
varying vec3 vWorldPosition;
|
|
191
|
+
|
|
192
|
+
void main(){
|
|
193
|
+
vNormal = normalize(normalMatrix * normal);
|
|
194
|
+
|
|
195
|
+
vec4 worldPosition = modelMatrix * vec4(position, 1.0);
|
|
196
|
+
vWorldPosition = worldPosition.xyz;
|
|
197
|
+
|
|
198
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
199
|
+
}`;
|
|
200
|
+
const fragmentShader = `
|
|
201
|
+
varying vec3 vNormal;
|
|
202
|
+
varying vec3 vWorldPosition;
|
|
203
|
+
|
|
204
|
+
uniform vec3 lightColor;
|
|
205
|
+
uniform float opacity;
|
|
206
|
+
uniform vec3 spotPosition;
|
|
207
|
+
uniform float attenuation;
|
|
208
|
+
uniform float anglePower;
|
|
209
|
+
|
|
210
|
+
void main(){
|
|
211
|
+
float intensity;
|
|
212
|
+
|
|
213
|
+
intensity = distance(vWorldPosition, spotPosition) / attenuation;
|
|
214
|
+
intensity = 1.0 - clamp(intensity, 0.0, 1.0);
|
|
215
|
+
|
|
216
|
+
vec3 normal = vec3(vNormal.x, vNormal.y, abs(vNormal.z));
|
|
217
|
+
float angleIntensity = pow(dot(normal, vec3(0.0, 0.0, 1.0)), anglePower);
|
|
218
|
+
intensity = intensity * angleIntensity * opacity;
|
|
219
|
+
|
|
220
|
+
gl_FragColor = vec4(lightColor, intensity);
|
|
221
|
+
}`;
|
|
222
|
+
const material = new THREE.ShaderMaterial({
|
|
223
|
+
uniforms: {
|
|
224
|
+
attenuation: {
|
|
225
|
+
type: 'f',
|
|
226
|
+
value: 800.0,
|
|
227
|
+
},
|
|
228
|
+
anglePower: {
|
|
229
|
+
type: 'f',
|
|
230
|
+
value: 2,
|
|
231
|
+
},
|
|
232
|
+
spotPosition: {
|
|
233
|
+
type: 'v3',
|
|
234
|
+
value: new THREE.Vector3(0, 0, 0),
|
|
235
|
+
},
|
|
236
|
+
lightColor: {
|
|
237
|
+
type: 'c',
|
|
238
|
+
value: new THREE.Color('white'),
|
|
239
|
+
},
|
|
240
|
+
opacity: {
|
|
241
|
+
type: 'f',
|
|
242
|
+
value: 1.0,
|
|
243
|
+
},
|
|
244
|
+
},
|
|
245
|
+
vertexShader,
|
|
246
|
+
fragmentShader,
|
|
247
|
+
transparent: true,
|
|
248
|
+
depthWrite: false,
|
|
249
|
+
});
|
|
250
|
+
return material;
|
|
251
|
+
}
|
|
252
|
+
createSpotLightBeam() {
|
|
253
|
+
if (this.spotLightBeam) {
|
|
254
|
+
this.spotlightGroup.remove(this.spotLightBeam);
|
|
255
|
+
}
|
|
256
|
+
// TODO set the correct angle from the profile
|
|
257
|
+
const beamAngleDegrees = 14;
|
|
258
|
+
const geometry = new THREE.CylinderGeometry(0.1, beamAngleDegrees * 1.2, 100, 64, 20, false);
|
|
259
|
+
geometry.applyMatrix4(new THREE.Matrix4().makeTranslation(0, -geometry.parameters.height / 2, 0));
|
|
260
|
+
geometry.applyMatrix4(new THREE.Matrix4().makeRotationX(-Math.PI / 2));
|
|
261
|
+
this.atmosphereMaterial = this.atmosphereMat();
|
|
262
|
+
this.spotLightBeam = new THREE.Mesh(geometry, this.atmosphereMaterial);
|
|
263
|
+
this.spotLightBeam.position.set(0, -0.02, 0);
|
|
264
|
+
this.spotLightBeam.receiveShadow = false;
|
|
265
|
+
this.spotLightBeam.castShadow = false;
|
|
266
|
+
this.spotlightGroup.add(this.spotLightBeam);
|
|
267
|
+
this.spotLightBeam.rotation.x = Math.PI / 2;
|
|
268
|
+
}
|
|
146
269
|
destroy() {
|
|
147
270
|
this.selectedMaterial.dispose();
|
|
271
|
+
this.atmosphereMaterial.dispose();
|
|
148
272
|
}
|
|
149
273
|
}
|
|
150
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS0zZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbmVyL3NyYy9saWIvcHJldmlldy9tb2RlbHMvZml4dHVyZS0zZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUkvQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFJaEcsTUFBTSxPQUFnQixTQUFTO0lBbUI3QixZQUFtQixjQUE4QixFQUFFLE9BQXNCLEVBQUUsS0FBVTtRQUFsRSxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFqQmpELHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6Qix5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFDN0Isb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFReEIsV0FBTSxHQUFHLENBQUMsQ0FBQztRQUVYLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUtmLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLDZFQUE2RTtRQUM3RSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUM7WUFDcEQsS0FBSyxFQUFFLFFBQVE7WUFDZixRQUFRLEVBQUUsUUFBUTtTQUNuQixDQUFDLENBQUM7UUFFSCxpREFBaUQ7UUFDakQsS0FBSyxNQUFNLGFBQWEsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xELElBQUksYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUMxQixLQUFLLE1BQU0sVUFBVSxJQUFJLGFBQWEsQ0FBQyxZQUFZLEVBQUUs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SSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3BILE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUM3RSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDN0UsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzdFLE1BQU07WUFDUixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB7IENhY2hlZEZpeHR1cmUgfSBmcm9tICcuLi8uLi9tb2RlbHMvY2FjaGVkLWZpeHR1cmUnO1xuaW1wb3J0IHsgQ2FjaGVkRml4dHVyZUNhcGFiaWxpdHkgfSBmcm9tICcuLi8uLi9tb2RlbHMvY2FjaGVkLWZpeHR1cmUtY2FwYWJpbGl0eSc7XG5pbXBvcnQgeyBDYWNoZWRGaXh0dXJlQ2hhbm5lbCB9IGZyb20gJy4uLy4uL21vZGVscy9jYWNoZWQtZml4dHVyZS1jaGFubmVsJztcbmltcG9ydCB7IFBvc2l0aW9uaW5nIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2ZpeHR1cmUnO1xuaW1wb3J0IHsgRml4dHVyZUNhcGFiaWxpdHlDb2xvciwgRml4dHVyZUNhcGFiaWxpdHlUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2ZpeHR1cmUtY2FwYWJpbGl0eSc7XG5pbXBvcnQgeyBGaXh0dXJlQ2hhbm5lbFZhbHVlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2ZpeHR1cmUtY2hhbm5lbC12YWx1ZSc7XG5pbXBvcnQgeyBGaXh0dXJlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpeHR1cmUuc2VydmljZSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBGaXh0dXJlM2Qge1xuICBmaXh0dXJlOiBDYWNoZWRGaXh0dXJlO1xuICBmaXh0dXJlSGFzRGltbWVyID0gZmFsc2U7XG4gIGZpeHR1cmVIYXNDb2xvcldoZWVsID0gZmFsc2U7XG4gIGZpeHR1cmVIYXNDb2xvciA9IGZhbHNlO1xuXG4gIHNjZW5lOiBhbnk7XG5cbiAgY29sb3JSZWQ6IG51bWJlcjtcbiAgY29sb3JHcmVlbjogbnVtYmVyO1xuICBjb2xvckJsdWU6IG51bWJlcjtcblxuICBkaW1tZXIgPSAwO1xuXG4gIGlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgaXNMb2FkZWQgPSBmYWxzZTtcblxuICBwcm90ZWN0ZWQgc2VsZWN0ZWRNYXRlcmlhbDogVEhSRUUuTWVzaExhbWJlcnRNYXRlcmlhbDtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZml4dHVyZVNlcnZpY2U6IEZpeHR1cmVTZXJ2aWNlLCBmaXh0dXJlOiBDYWNoZWRGaXh0dXJlLCBzY2VuZTogYW55KSB7XG4gICAgdGhpcy5maXh0dXJlID0gZml4dHVyZTtcbiAgICB0aGlzLnNjZW5lID0gc2NlbmU7XG5cbiAgICAvLyBUT0RPIERvbid0IGNyZWF0ZSBpdCBmb3IgZWFjaCBmaXh0dXJlIGJ1dCBwYXNzIGl0IGZyb20gdGhlIHByZXZpZXcgc2VydmljZVxuICAgIHRoaXMuc2VsZWN0ZWRNYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoTGFtYmVydE1hdGVyaWFsKHtcbiAgICAgIGNvbG9yOiAweGZmMDBmZixcbiAgICAgIGVtaXNzaXZlOiAweGZmMDBmZixcbiAgICB9KTtcblxuICAgIC8vIGV2YWx1YXRlLCB2YXJpb3VzIGNhcGFiaWxpdGllcyBvZiB0aGlzIGZpeHR1cmVcbiAgICBmb3IgKGNvbnN0IGNhY2hlZENoYW5uZWwgb2YgdGhpcy5maXh0dXJlLmNoYW5uZWxzKSB7XG4gICAgICBpZiAoY2FjaGVkQ2hhbm5lbC5jaGFubmVsKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2FwYWJpbGl0eSBvZiBjYWNoZWRDaGFubmVsLmNhcGFiaWxpdGllcykge1xuICAgICAgICAgIHN3aXRjaCAoY2FwYWJpbGl0eS5jYXBhYmlsaXR5LnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgRml4dHVyZUNhcGFiaWxpdHlUeXBlLkludGVuc2l0eTpcbiAgICAgICAgICAgICAgdGhpcy5maXh0dXJlSGFzRGltbWVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5Db2xvckludGVuc2l0eTpcbiAgICAgICAgICAgICAgdGhpcy5maXh0dXJlSGFzQ29sb3IgPSB0cnVlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2FjaGVkQ2hhbm5lbC5jb2xvcldoZWVsKSB7XG4gICAgICAgICAgdGhpcy5maXh0dXJlSGFzQ29sb3JXaGVlbCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Q2FwYWJpbGl0eUluVmFsdWUoY2hhbm5lbDogQ2FjaGVkRml4dHVyZUNoYW5uZWwsIHZhbHVlOiBudW1iZXIpOiBDYWNoZWRGaXh0dXJlQ2FwYWJpbGl0eSB7XG4gICAgZm9yIChjb25zdCBjYXBhYmlsaXR5IG9mIGNoYW5uZWwuY2FwYWJpbGl0aWVzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5kbXhSYW5nZS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgKHZhbHVlID49IGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5kbXhSYW5nZVswXSAmJiB2YWx1ZSA8PSBjYXBhYmlsaXR5LmNhcGFiaWxpdHkuZG14UmFuZ2VbMV0pXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGNhcGFiaWxpdHk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIEFwcGx5IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBiYXNlIGZpeHR1cmUgdG8gdGhlIHByZXZpZXdcbiAgdXBkYXRlUHJldmlldyhjaGFubmVsVmFsdWVzOiBGaXh0dXJlQ2hhbm5lbFZhbHVlW10sIG1hc3RlckRpbW1lclZhbHVlOiBudW1iZXIpIHtcbiAgICAvLyBBcHBseSBkZWZhdWx0IHNldHRpbmdzXG4gICAgaWYgKHRoaXMuZml4dHVyZUhhc0RpbW1lcikge1xuICAgICAgdGhpcy5kaW1tZXIgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpbW1lciA9IDE7XG4gICAgfVxuXG4gICAgdGhpcy5jb2xvclJlZCA9IDI1NTtcbiAgICB0aGlzLmNvbG9yR3JlZW4gPSAyNTU7XG4gICAgdGhpcy5jb2xvckJsdWUgPSAyNTU7XG5cbiAgICBpZiAoIXRoaXMuZml4dHVyZUhhc0NvbG9yV2hlZWwgJiYgdGhpcy5maXh0dXJlSGFzQ29sb3IpIHtcbiAgICAgIHRoaXMuY29sb3JSZWQgPSAwO1xuICAgICAgdGhpcy5jb2xvckdyZWVuID0gMDtcbiAgICAgIHRoaXMuY29sb3JCbHVlID0gMDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNoYW5uZWxWYWx1ZSBvZiBjaGFubmVsVmFsdWVzKSB7XG4gICAgICBjb25zdCBjaGFubmVsID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRDaGFubmVsQnlOYW1lKHRoaXMuZml4dHVyZSwgY2hhbm5lbFZhbHVlLmNoYW5uZWxOYW1lKTtcbiAgICAgIGNvbnN0IGNhcGFiaWxpdHkgPSB0aGlzLmdldENhcGFiaWxpdHlJblZhbHVlKGNoYW5uZWwsIGNoYW5uZWxWYWx1ZS52YWx1ZSk7XG5cbiAgICAgIGlmIChjYXBhYmlsaXR5KSB7XG4gICAgICAgIHN3aXRjaCAoY2FwYWJpbGl0eS5jYXBhYmlsaXR5LnR5cGUpIHtcbiAgICAgICAgICBjYXNlIEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5JbnRlbnNpdHk6IHtcbiAgICAgICAgICAgIGxldCB2YWx1ZVBlcmNlbnRhZ2U6IG51bWJlcjtcbiAgICAgICAgICAgIGlmIChjYXBhYmlsaXR5LmNhcGFiaWxpdHkuZG14UmFuZ2UubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB2YWx1ZVBlcmNlbnRhZ2UgPVxuICAgICAgICAgICAgICAgIChjaGFubmVsVmFsdWUudmFsdWUgLSBjYXBhYmlsaXR5LmNhcGFiaWxpdHkuZG14UmFuZ2VbMF0pIC9cbiAgICAgICAgICAgICAgICAoY2FwYWJpbGl0eS5jYXBhYmlsaXR5LmRteFJhbmdlWzFdIC0gY2FwYWJpbGl0eS5jYXBhYmlsaXR5LmRteFJhbmdlWzBdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhbHVlUGVyY2VudGFnZSA9IGNoYW5uZWxWYWx1ZS52YWx1ZSAvIGNoYW5uZWwubWF4VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRpbW1lciA9IHZhbHVlUGVyY2VudGFnZSAqIG1hc3RlckRpbW1lclZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgRml4dHVyZUNhcGFiaWxpdHlUeXBlLkNvbG9ySW50ZW5zaXR5OiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZVBlcmNlbnRhZ2UgPSAoMjU1ICogY2hhbm5lbFZhbHVlLnZhbHVlKSAvIGNoYW5uZWwubWF4VmFsdWU7XG4gICAgICAgICAgICBzd2l0Y2ggKGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5jb2xvcikge1xuICAgICAgICAgICAgICBjYXNlIEZpeHR1cmVDYXBhYmlsaXR5Q29sb3IuUmVkOlxuICAgICAgICAgICAgICAgIC8vIFJvdW5kIG5lZWRlZCBmb3IgdGhyZWVqc1xuICAgICAgICAgICAgICAgIHRoaXMuY29sb3JSZWQgPSBNYXRoLnJvdW5kKHZhbHVlUGVyY2VudGFnZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgRml4dHVyZUNhcGFiaWxpdHlDb2xvci5HcmVlbjpcbiAgICAgICAgICAgICAgICAvLyBSb3VuZCBuZWVkZWQgZm9yIHRocmVlanNcbiAgICAgICAgICAgICAgICB0aGlzLmNvbG9yR3JlZW4gPSBNYXRoLnJvdW5kKHZhbHVlUGVyY2VudGFnZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgRml4dHVyZUNhcGFiaWxpdHlDb2xvci5CbHVlOlxuICAgICAgICAgICAgICAgIC8vIFJvdW5kIG5lZWRlZCBmb3IgdGhyZWVqc1xuICAgICAgICAgICAgICAgIHRoaXMuY29sb3JCbHVlID0gTWF0aC5yb3VuZCh2YWx1ZVBlcmNlbnRhZ2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgRml4dHVyZUNhcGFiaWxpdHlUeXBlLldoZWVsU2xvdDoge1xuICAgICAgICAgICAgY29uc3QgbWl4ZWRDb2xvciA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0TWl4ZWRXaGVlbFNsb3RDb2xvcihjYXBhYmlsaXR5LndoZWVsLCBjYXBhYmlsaXR5LmNhcGFiaWxpdHkuc2xvdE51bWJlcik7XG4gICAgICAgICAgICBpZiAobWl4ZWRDb2xvcikge1xuICAgICAgICAgICAgICB0aGlzLmNvbG9yUmVkID0gTWF0aC5yb3VuZChtaXhlZENvbG9yLnJlZCk7XG4gICAgICAgICAgICAgIHRoaXMuY29sb3JHcmVlbiA9IE1hdGgucm91bmQobWl4ZWRDb2xvci5ncmVlbik7XG4gICAgICAgICAgICAgIHRoaXMuY29sb3JCbHVlID0gTWF0aC5yb3VuZChtaXhlZENvbG9yLmJsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlUG9zaXRpb24ob2JqZWN0OiBUSFJFRS5PYmplY3QzRCkge1xuICAgIC8vIFVwZGF0ZSB0aGUgcG9zaXRpb25cbiAgICBzd2l0Y2ggKHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uaW5nKSB7XG4gICAgICBjYXNlIFBvc2l0aW9uaW5nLnRvcEZyb250OiB7XG4gICAgICAgIG9iamVjdC5yb3RhdGlvbi54ID0gVEhSRUUuTWF0aFV0aWxzLmRlZ1RvUmFkKDApO1xuICAgICAgICBvYmplY3QucG9zaXRpb24uc2V0KHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWCwgdGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25ZIC0gMTMsIHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBQb3NpdGlvbmluZy5ib3R0b21Gcm9udDoge1xuICAgICAgICBvYmplY3Qucm90YXRpb24ueCA9IFRIUkVFLk1hdGhVdGlscy5kZWdUb1JhZCgxODApO1xuICAgICAgICBvYmplY3QucG9zaXRpb24uc2V0KHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWCwgdGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25ZICsgMTMsIHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBQb3NpdGlvbmluZy50b3BCYWNrOiB7XG4gICAgICAgIG9iamVjdC5yb3RhdGlvbi54ID0gVEhSRUUuTWF0aFV0aWxzLmRlZ1RvUmFkKDApO1xuICAgICAgICBvYmplY3QucG9zaXRpb24uc2V0KHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWCwgdGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25ZIC0gMTMsIHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBQb3NpdGlvbmluZy5ib3R0b21CYWNrOiB7XG4gICAgICAgIG9iamVjdC5yb3RhdGlvbi54ID0gVEhSRUUuTWF0aFV0aWxzLmRlZ1RvUmFkKDE4MCk7XG4gICAgICAgIG9iamVjdC5wb3NpdGlvbi5zZXQodGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25YLCB0aGlzLmZpeHR1cmUuZml4dHVyZS5wb3NpdGlvblkgKyAxMywgdGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25aKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFBvc2l0aW9uaW5nLm1hbnVhbDoge1xuICAgICAgICBvYmplY3QucG9zaXRpb24uc2V0KHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWCwgdGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25ZLCB0aGlzLmZpeHR1cmUuZml4dHVyZS5wb3NpdGlvblopO1xuICAgICAgICBvYmplY3Qucm90YXRpb24ueCA9IFRIUkVFLk1hdGhVdGlscy5kZWdUb1JhZCh0aGlzLmZpeHR1cmUuZml4dHVyZS5yb3RhdGlvblgpO1xuICAgICAgICBvYmplY3Qucm90YXRpb24ueSA9IFRIUkVFLk1hdGhVdGlscy5kZWdUb1JhZCh0aGlzLmZpeHR1cmUuZml4dHVyZS5yb3RhdGlvblkpO1xuICAgICAgICBvYmplY3Qucm90YXRpb24ueiA9IFRIUkVFLk1hdGhVdGlscy5kZWdUb1JhZCh0aGlzLmZpeHR1cmUuZml4dHVyZS5yb3RhdGlvblopO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuc2VsZWN0ZWRNYXRlcmlhbC5kaXNwb3NlKCk7XG4gIH1cbn1cbiJdfQ==
|
|
274
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS0zZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbmVyL3NyYy9saWIvcHJldmlldy9tb2RlbHMvZml4dHVyZS0zZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUkvQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFJaEcsTUFBTSxPQUFnQixTQUFTO0lBOEI3QixZQUFtQixjQUE4QixFQUFFLE9BQXNCLEVBQUUsS0FBVTtRQUFsRSxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUE3QmhDLDJCQUFzQixHQUFXLENBQUMsQ0FBQztRQUNuQywrQkFBMEIsR0FBVyxFQUFFLENBQUM7UUFHekQscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUM3QixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQVF4QixXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRVgsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBYWYsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsNkVBQTZFO1FBQzdFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQztZQUNwRCxLQUFLLEVBQUUsUUFBUTtZQUNmLFFBQVEsRUFBRSxRQUFRO1NBQ25CLENBQUMsQ0FBQztRQUVILGlEQUFpRDtRQUNqRCxLQUFLLE1BQU0sYUFBYSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEQsSUFBSSxhQUFhLENBQUMsT0FBTyxF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QUFLLENBQUMsT0FBTyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xHLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXZFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUV0QyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBDYWNoZWRGaXh0dXJlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NhY2hlZC1maXh0dXJlJztcbmltcG9ydCB7IENhY2hlZEZpeHR1cmVDYXBhYmlsaXR5IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NhY2hlZC1maXh0dXJlLWNhcGFiaWxpdHknO1xuaW1wb3J0IHsgQ2FjaGVkRml4dHVyZUNoYW5uZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvY2FjaGVkLWZpeHR1cmUtY2hhbm5lbCc7XG5pbXBvcnQgeyBQb3NpdGlvbmluZyB9IGZyb20gJy4uLy4uL21vZGVscy9maXh0dXJlJztcbmltcG9ydCB7IEZpeHR1cmVDYXBhYmlsaXR5Q29sb3IsIEZpeHR1cmVDYXBhYmlsaXR5VHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy9maXh0dXJlLWNhcGFiaWxpdHknO1xuaW1wb3J0IHsgRml4dHVyZUNoYW5uZWxWYWx1ZSB9IGZyb20gJy4uLy4uL21vZGVscy9maXh0dXJlLWNoYW5uZWwtdmFsdWUnO1xuaW1wb3J0IHsgRml4dHVyZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9maXh0dXJlLnNlcnZpY2UnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRml4dHVyZTNkIHtcbiAgcHJpdmF0ZSByZWFkb25seSBwb2ludExpZ2h0TWF4SW50ZW5zaXR5OiBudW1iZXIgPSAyO1xuICBwcml2YXRlIHJlYWRvbmx5IHNwb3RMaWdodExpZ2h0TWF4SW50ZW5zaXR5OiBudW1iZXIgPSAxMDtcblxuICBmaXh0dXJlOiBDYWNoZWRGaXh0dXJlO1xuICBmaXh0dXJlSGFzRGltbWVyID0gZmFsc2U7XG4gIGZpeHR1cmVIYXNDb2xvcldoZWVsID0gZmFsc2U7XG4gIGZpeHR1cmVIYXNDb2xvciA9IGZhbHNlO1xuXG4gIHNjZW5lOiBhbnk7XG5cbiAgY29sb3JSZWQ6IG51bWJlcjtcbiAgY29sb3JHcmVlbjogbnVtYmVyO1xuICBjb2xvckJsdWU6IG51bWJlcjtcblxuICBkaW1tZXIgPSAwO1xuXG4gIGlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgaXNMb2FkZWQgPSBmYWxzZTtcblxuICBwcm90ZWN0ZWQgc2VsZWN0ZWRNYXRlcmlhbDogVEhSRUUuTWVzaExhbWJlcnRNYXRlcmlhbDtcblxuICBwcm90ZWN0ZWQgcG9pbnRMaWdodDogVEhSRUUuUG9pbnRMaWdodDtcblxuICBwcm90ZWN0ZWQgYXRtb3NwaGVyZU1hdGVyaWFsOiBUSFJFRS5TaGFkZXJNYXRlcmlhbDtcbiAgcHJvdGVjdGVkIHNwb3RMaWdodDogVEhSRUUuU3BvdExpZ2h0O1xuICBwcm90ZWN0ZWQgc3BvdExpZ2h0SGVscGVyOiBUSFJFRS5TcG90TGlnaHRIZWxwZXI7XG4gIHByb3RlY3RlZCBzcG90TGlnaHRCZWFtOiBUSFJFRS5NZXNoO1xuICBwcm90ZWN0ZWQgc3BvdGxpZ2h0R3JvdXA6IFRIUkVFLk9iamVjdDNEO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBmaXh0dXJlU2VydmljZTogRml4dHVyZVNlcnZpY2UsIGZpeHR1cmU6IENhY2hlZEZpeHR1cmUsIHNjZW5lOiBhbnkpIHtcbiAgICB0aGlzLmZpeHR1cmUgPSBmaXh0dXJlO1xuICAgIHRoaXMuc2NlbmUgPSBzY2VuZTtcblxuICAgIC8vIFRPRE8gRG9uJ3QgY3JlYXRlIGl0IGZvciBlYWNoIGZpeHR1cmUgYnV0IHBhc3MgaXQgZnJvbSB0aGUgcHJldmlldyBzZXJ2aWNlXG4gICAgdGhpcy5zZWxlY3RlZE1hdGVyaWFsID0gbmV3IFRIUkVFLk1lc2hMYW1iZXJ0TWF0ZXJpYWwoe1xuICAgICAgY29sb3I6IDB4ZmYwMGZmLFxuICAgICAgZW1pc3NpdmU6IDB4ZmYwMGZmLFxuICAgIH0pO1xuXG4gICAgLy8gZXZhbHVhdGUsIHZhcmlvdXMgY2FwYWJpbGl0aWVzIG9mIHRoaXMgZml4dHVyZVxuICAgIGZvciAoY29uc3QgY2FjaGVkQ2hhbm5lbCBvZiB0aGlzLmZpeHR1cmUuY2hhbm5lbHMpIHtcbiAgICAgIGlmIChjYWNoZWRDaGFubmVsLmNoYW5uZWwpIHtcbiAgICAgICAgZm9yIChjb25zdCBjYXBhYmlsaXR5IG9mIGNhY2hlZENoYW5uZWwuY2FwYWJpbGl0aWVzKSB7XG4gICAgICAgICAgc3dpdGNoIChjYXBhYmlsaXR5LmNhcGFiaWxpdHkudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuSW50ZW5zaXR5OlxuICAgICAgICAgICAgICB0aGlzLmZpeHR1cmVIYXNEaW1tZXIgPSB0cnVlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRml4dHVyZUNhcGFiaWxpdHlUeXBlLkNvbG9ySW50ZW5zaXR5OlxuICAgICAgICAgICAgICB0aGlzLmZpeHR1cmVIYXNDb2xvciA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYWNoZWRDaGFubmVsLmNvbG9yV2hlZWwpIHtcbiAgICAgICAgICB0aGlzLmZpeHR1cmVIYXNDb2xvcldoZWVsID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVPYmplY3RzKCkge1xuICAgIC8vIEFkZCB0aGUgc3BvdGxpZ2h0XG4gICAgdGhpcy5zcG90TGlnaHQgPSBuZXcgVEhSRUUuU3BvdExpZ2h0KDB4ZmZmZmZmLCA1MDAwMCk7XG4gICAgdGhpcy5zcG90TGlnaHQuYW5nbGUgPSAyO1xuICAgIHRoaXMuc3BvdExpZ2h0LnBlbnVtYnJhID0gMTtcbiAgICB0aGlzLnNwb3RMaWdodC5kZWNheSA9IDAuMDE7XG4gICAgdGhpcy5zcG90TGlnaHQuZGlzdGFuY2UgPSAwO1xuICAgIHRoaXMuc3BvdExpZ2h0LmludGVuc2l0eSA9IDE7XG5cbiAgICB0aGlzLnNwb3RMaWdodEhlbHBlciA9IG5ldyBUSFJFRS5TcG90TGlnaHRIZWxwZXIodGhpcy5zcG90TGlnaHQpO1xuICAgIHRoaXMuc2NlbmUuYWRkKHRoaXMuc3BvdExpZ2h0SGVscGVyKTtcblxuICAgIGNvbnN0IHNwb3RMaWdodFRhcmdldCA9IG5ldyBUSFJFRS5PYmplY3QzRCgpO1xuICAgIHRoaXMuc3BvdExpZ2h0LnRhcmdldCA9IHNwb3RMaWdodFRhcmdldDtcblxuICAgIHRoaXMuc3BvdGxpZ2h0R3JvdXAgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcbiAgICB0aGlzLnNwb3RsaWdodEdyb3VwLmFkZCh0aGlzLnNwb3RMaWdodCk7XG4gICAgdGhpcy5zcG90bGlnaHRHcm91cC5hZGQoc3BvdExpZ2h0VGFyZ2V0KTtcbiAgICB0aGlzLnNwb3RMaWdodC5wb3NpdGlvbi5zZXQoMCwgLTEuNCwgMCk7XG4gICAgc3BvdExpZ2h0VGFyZ2V0LnBvc2l0aW9uLnNldCgwLCAtMTAsIDApO1xuICAgIHRoaXMuY3JlYXRlU3BvdExpZ2h0QmVhbSgpO1xuXG4gICAgLy8gQWRkIHRoZSBwb2ludCBsaWdodCBmb3IgdGhlIHN1cnJvdW5kaW5nIGxpZ2h0XG4gICAgdGhpcy5wb2ludExpZ2h0ID0gbmV3IFRIUkVFLlBvaW50TGlnaHQoMHhmZmZmZmYsIDUwMCwgMCwgMC4xKTtcbiAgICB0aGlzLnNwb3RsaWdodEdyb3VwLmFkZCh0aGlzLnBvaW50TGlnaHQpO1xuICAgIHRoaXMucG9pbnRMaWdodC5wb3NpdGlvbi5zZXQoMCwgLTEuNCwgMCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Q2FwYWJpbGl0eUluVmFsdWUoY2hhbm5lbDogQ2FjaGVkRml4dHVyZUNoYW5uZWwsIHZhbHVlOiBudW1iZXIpOiBDYWNoZWRGaXh0dXJlQ2FwYWJpbGl0eSB7XG4gICAgZm9yIChjb25zdCBjYXBhYmlsaXR5IG9mIGNoYW5uZWwuY2FwYWJpbGl0aWVzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5kbXhSYW5nZS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgKHZhbHVlID49IGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5kbXhSYW5nZVswXSAmJiB2YWx1ZSA8PSBjYXBhYmlsaXR5LmNhcGFiaWxpdHkuZG14UmFuZ2VbMV0pXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGNhcGFiaWxpdHk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIEFwcGx5IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBiYXNlIGZpeHR1cmUgdG8gdGhlIHByZXZpZXdcbiAgdXBkYXRlUHJldmlldyhjaGFubmVsVmFsdWVzOiBGaXh0dXJlQ2hhbm5lbFZhbHVlW10sIG1hc3RlckRpbW1lclZhbHVlOiBudW1iZXIpIHtcbiAgICAvLyBBcHBseSBkZWZhdWx0IHNldHRpbmdzXG4gICAgaWYgKHRoaXMuZml4dHVyZUhhc0RpbW1lcikge1xuICAgICAgdGhpcy5kaW1tZXIgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpbW1lciA9IDE7XG4gICAgfVxuXG4gICAgdGhpcy5jb2xvclJlZCA9IDI1NTtcbiAgICB0aGlzLmNvbG9yR3JlZW4gPSAyNTU7XG4gICAgdGhpcy5jb2xvckJsdWUgPSAyNTU7XG5cbiAgICBpZiAoIXRoaXMuZml4dHVyZUhhc0NvbG9yV2hlZWwgJiYgdGhpcy5maXh0dXJlSGFzQ29sb3IpIHtcbiAgICAgIHRoaXMuY29sb3JSZWQgPSAwO1xuICAgICAgdGhpcy5jb2xvckdyZWVuID0gMDtcbiAgICAgIHRoaXMuY29sb3JCbHVlID0gMDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNoYW5uZWxWYWx1ZSBvZiBjaGFubmVsVmFsdWVzKSB7XG4gICAgICBjb25zdCBjaGFubmVsID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRDaGFubmVsQnlOYW1lKHRoaXMuZml4dHVyZSwgY2hhbm5lbFZhbHVlLmNoYW5uZWxOYW1lKTtcbiAgICAgIGNvbnN0IGNhcGFiaWxpdHkgPSB0aGlzLmdldENhcGFiaWxpdHlJblZhbHVlKGNoYW5uZWwsIGNoYW5uZWxWYWx1ZS52YWx1ZSk7XG5cbiAgICAgIGlmIChjYXBhYmlsaXR5KSB7XG4gICAgICAgIHN3aXRjaCAoY2FwYWJpbGl0eS5jYXBhYmlsaXR5LnR5cGUpIHtcbiAgICAgICAgICBjYXNlIEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5JbnRlbnNpdHk6IHtcbiAgICAgICAgICAgIGxldCB2YWx1ZVBlcmNlbnRhZ2U6IG51bWJlcjtcbiAgICAgICAgICAgIGlmIChjYXBhYmlsaXR5LmNhcGFiaWxpdHkuZG14UmFuZ2UubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB2YWx1ZVBlcmNlbnRhZ2UgPVxuICAgICAgICAgICAgICAgIChjaGFubmVsVmFsdWUudmFsdWUgLSBjYXBhYmlsaXR5LmNhcGFiaWxpdHkuZG14UmFuZ2VbMF0pIC9cbiAgICAgICAgICAgICAgICAoY2FwYWJpbGl0eS5jYXBhYmlsaXR5LmRteFJhbmdlWzFdIC0gY2FwYWJpbGl0eS5jYXBhYmlsaXR5LmRteFJhbmdlWzBdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhbHVlUGVyY2VudGFnZSA9IGNoYW5uZWxWYWx1ZS52YWx1ZSAvIGNoYW5uZWwubWF4VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRpbW1lciA9IHZhbHVlUGVyY2VudGFnZSAqIG1hc3RlckRpbW1lclZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgRml4dHVyZUNhcGFiaWxpdHlUeXBlLkNvbG9ySW50ZW5zaXR5OiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZVBlcmNlbnRhZ2UgPSAoMjU1ICogY2hhbm5lbFZhbHVlLnZhbHVlKSAvIGNoYW5uZWwubWF4VmFsdWU7XG4gICAgICAgICAgICBzd2l0Y2ggKGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5jb2xvcikge1xuICAgICAgICAgICAgICBjYXNlIEZpeHR1cmVDYXBhYmlsaXR5Q29sb3IuUmVkOlxuICAgICAgICAgICAgICAgIC8vIFJvdW5kIG5lZWRlZCBmb3IgdGhyZWVqc1xuICAgICAgICAgICAgICAgIHRoaXMuY29sb3JSZWQgPSBNYXRoLnJvdW5kKHZhbHVlUGVyY2VudGFnZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgRml4dHVyZUNhcGFiaWxpdHlDb2xvci5HcmVlbjpcbiAgICAgICAgICAgICAgICAvLyBSb3VuZCBuZWVkZWQgZm9yIHRocmVlanNcbiAgICAgICAgICAgICAgICB0aGlzLmNvbG9yR3JlZW4gPSBNYXRoLnJvdW5kKHZhbHVlUGVyY2VudGFnZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgRml4dHVyZUNhcGFiaWxpdHlDb2xvci5CbHVlOlxuICAgICAgICAgICAgICAgIC8vIFJvdW5kIG5lZWRlZCBmb3IgdGhyZWVqc1xuICAgICAgICAgICAgICAgIHRoaXMuY29sb3JCbHVlID0gTWF0aC5yb3VuZCh2YWx1ZVBlcmNlbnRhZ2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgRml4dHVyZUNhcGFiaWxpdHlUeXBlLldoZWVsU2xvdDoge1xuICAgICAgICAgICAgY29uc3QgbWl4ZWRDb2xvciA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0TWl4ZWRXaGVlbFNsb3RDb2xvcihjYXBhYmlsaXR5LndoZWVsLCBjYXBhYmlsaXR5LmNhcGFiaWxpdHkuc2xvdE51bWJlcik7XG4gICAgICAgICAgICBpZiAobWl4ZWRDb2xvcikge1xuICAgICAgICAgICAgICB0aGlzLmNvbG9yUmVkID0gTWF0aC5yb3VuZChtaXhlZENvbG9yLnJlZCk7XG4gICAgICAgICAgICAgIHRoaXMuY29sb3JHcmVlbiA9IE1hdGgucm91bmQobWl4ZWRDb2xvci5ncmVlbik7XG4gICAgICAgICAgICAgIHRoaXMuY29sb3JCbHVlID0gTWF0aC5yb3VuZChtaXhlZENvbG9yLmJsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgdGhlIGNvbG9ycyBhbmQgaW50ZW5zaXRpZXNcbiAgICAvLyBBcHBseSB0aGUgZGltbWVyIHZhbHVlXG4gICAgLy8gVGFrZSB0aGUgY29sb3IgaW50byBhY2NvdW50IGZvciB0aGUgYmVhbSAoZG9uJ3Qgc2hvdyBhIGJsYWNrIGJlYW0pXG4gICAgY29uc3QgY29sb3IgPSBuZXcgVEhSRUUuQ29sb3IoJ3JnYignICsgdGhpcy5jb2xvclJlZCArICcsICcgKyB0aGlzLmNvbG9yR3JlZW4gKyAnLCAnICsgdGhpcy5jb2xvckJsdWUgKyAnKScpO1xuICAgIGNvbnN0IGludGVuc2l0eUNvbG9yID0gTWF0aC5tYXgodGhpcy5jb2xvclJlZCwgdGhpcy5jb2xvckdyZWVuLCB0aGlzLmNvbG9yQmx1ZSk7XG5cbiAgICBpZiAodGhpcy5wb2ludExpZ2h0KSB7XG4gICAgICB0aGlzLnBvaW50TGlnaHQuY29sb3IgPSBjb2xvcjtcbiAgICAgIHRoaXMucG9pbnRMaWdodC5pbnRlbnNpdHkgPSB0aGlzLnBvaW50TGlnaHRNYXhJbnRlbnNpdHkgKiB0aGlzLmRpbW1lcjtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3BvdExpZ2h0KSB7XG4gICAgICB0aGlzLnNwb3RMaWdodC5jb2xvciA9IGNvbG9yO1xuICAgICAgdGhpcy5zcG90TGlnaHRCZWFtLm1hdGVyaWFsLnVuaWZvcm1zLmxpZ2h0Q29sb3IudmFsdWUgPSBjb2xvcjtcblxuICAgICAgdGhpcy5zcG90TGlnaHRCZWFtLm1hdGVyaWFsLnVuaWZvcm1zLm9wYWNpdHkudmFsdWUgPSBNYXRoLm1pbihpbnRlbnNpdHlDb2xvciwgdGhpcy5kaW1tZXIpO1xuICAgICAgdGhpcy5zcG90TGlnaHQuaW50ZW5zaXR5ID0gdGhpcy5zcG90TGlnaHRMaWdodE1heEludGVuc2l0eSAqIHRoaXMuZGltbWVyO1xuICAgICAgdGhpcy5zcG90TGlnaHRCZWFtLm1hdGVyaWFsLnVuaWZvcm1zLnNwb3RQb3NpdGlvbi52YWx1ZSA9IHRoaXMuc3BvdGxpZ2h0R3JvdXAucG9zaXRpb247XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlUG9zaXRpb24ob2JqZWN0OiBUSFJFRS5PYmplY3QzRCkge1xuICAgIC8vIFVwZGF0ZSB0aGUgcG9zaXRpb25cbiAgICBzd2l0Y2ggKHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uaW5nKSB7XG4gICAgICBjYXNlIFBvc2l0aW9uaW5nLnRvcEZyb250OiB7XG4gICAgICAgIG9iamVjdC5yb3RhdGlvbi54ID0gVEhSRUUuTWF0aFV0aWxzLmRlZ1RvUmFkKDApO1xuICAgICAgICBvYmplY3QucG9zaXRpb24uc2V0KHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWCwgdGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25ZIC0gMTMsIHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBQb3NpdGlvbmluZy5ib3R0b21Gcm9udDoge1xuICAgICAgICBvYmplY3Qucm90YXRpb24ueCA9IFRIUkVFLk1hdGhVdGlscy5kZWdUb1JhZCgxODApO1xuICAgICAgICBvYmplY3QucG9zaXRpb24uc2V0KHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWCwgdGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25ZICsgMTMsIHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBQb3NpdGlvbmluZy50b3BCYWNrOiB7XG4gICAgICAgIG9iamVjdC5yb3RhdGlvbi54ID0gVEhSRUUuTWF0aFV0aWxzLmRlZ1RvUmFkKDApO1xuICAgICAgICBvYmplY3QucG9zaXRpb24uc2V0KHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWCwgdGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25ZIC0gMTMsIHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBQb3NpdGlvbmluZy5ib3R0b21CYWNrOiB7XG4gICAgICAgIG9iamVjdC5yb3RhdGlvbi54ID0gVEhSRUUuTWF0aFV0aWxzLmRlZ1RvUmFkKDE4MCk7XG4gICAgICAgIG9iamVjdC5wb3NpdGlvbi5zZXQodGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25YLCB0aGlzLmZpeHR1cmUuZml4dHVyZS5wb3NpdGlvblkgKyAxMywgdGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25aKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFBvc2l0aW9uaW5nLm1hbnVhbDoge1xuICAgICAgICBvYmplY3QucG9zaXRpb24uc2V0KHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWCwgdGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25ZLCB0aGlzLmZpeHR1cmUuZml4dHVyZS5wb3NpdGlvblopO1xuICAgICAgICBvYmplY3Qucm90YXRpb24ueCA9IFRIUkVFLk1hdGhVdGlscy5kZWdUb1JhZCh0aGlzLmZpeHR1cmUuZml4dHVyZS5yb3RhdGlvblgpO1xuICAgICAgICBvYmplY3Qucm90YXRpb24ueSA9IFRIUkVFLk1hdGhVdGlscy5kZWdUb1JhZCh0aGlzLmZpeHR1cmUuZml4dHVyZS5yb3RhdGlvblkpO1xuICAgICAgICBvYmplY3Qucm90YXRpb24ueiA9IFRIUkVFLk1hdGhVdGlscy5kZWdUb1JhZCh0aGlzLmZpeHR1cmUuZml4dHVyZS5yb3RhdGlvblopO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXRtb3NwaGVyZU1hdCgpIHtcbiAgICBjb25zdCB2ZXJ0ZXhTaGFkZXIgPSBgXG4gICAgICB2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiAgICAgIHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcblxuICAgICAgdm9pZCBtYWluKCl7XG4gICAgICAgIHZOb3JtYWwgPSBub3JtYWxpemUobm9ybWFsTWF0cml4ICogbm9ybWFsKTtcblxuICAgICAgICB2ZWM0IHdvcmxkUG9zaXRpb24gPSBtb2RlbE1hdHJpeCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gICAgICAgIHZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7XG5cbiAgICAgICAgZ2xfUG9zaXRpb25cdD0gcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld01hdHJpeCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gICAgICB9YDtcbiAgICBjb25zdCBmcmFnbWVudFNoYWRlciA9IGBcbiAgICAgIHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuICAgICAgdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuXG4gICAgICB1bmlmb3JtIHZlYzMgbGlnaHRDb2xvcjtcbiAgICAgIHVuaWZvcm0gZmxvYXRcdG9wYWNpdHk7XG4gICAgICB1bmlmb3JtIHZlYzMgc3BvdFBvc2l0aW9uO1xuICAgICAgdW5pZm9ybSBmbG9hdCBhdHRlbnVhdGlvbjtcbiAgICAgIHVuaWZvcm0gZmxvYXRcdGFuZ2xlUG93ZXI7XG5cbiAgICAgIHZvaWQgbWFpbigpe1xuICAgICAgICBmbG9hdCBpbnRlbnNpdHk7XG5cbiAgICAgICAgaW50ZW5zaXR5XHQ9IGRpc3RhbmNlKHZXb3JsZFBvc2l0aW9uLCBzcG90UG9zaXRpb24pIC8gYXR0ZW51YXRpb247XG4gICAgICAgIGludGVuc2l0eVx0PSAxLjAgLSBjbGFtcChpbnRlbnNpdHksIDAuMCwgMS4wKTtcblxuICAgICAgICB2ZWMzIG5vcm1hbFx0PSB2ZWMzKHZOb3JtYWwueCwgdk5vcm1hbC55LCBhYnModk5vcm1hbC56KSk7XG4gICAgICAgIGZsb2F0IGFuZ2xlSW50ZW5zaXR5XHQ9IHBvdyhkb3Qobm9ybWFsLCB2ZWMzKDAuMCwgMC4wLCAxLjApKSwgYW5nbGVQb3dlcik7XG4gICAgICAgIGludGVuc2l0eVx0PSBpbnRlbnNpdHkgKiBhbmdsZUludGVuc2l0eSAqIG9wYWNpdHk7XG5cbiAgICAgICAgZ2xfRnJhZ0NvbG9yXHQ9IHZlYzQobGlnaHRDb2xvciwgaW50ZW5zaXR5KTtcbiAgICAgIH1gO1xuXG4gICAgY29uc3QgbWF0ZXJpYWwgPSBuZXcgVEhSRUUuU2hhZGVyTWF0ZXJpYWwoe1xuICAgICAgdW5pZm9ybXM6IHtcbiAgICAgICAgYXR0ZW51YXRpb246IHtcbiAgICAgICAgICB0eXBlOiAnZicsXG4gICAgICAgICAgdmFsdWU6IDgwMC4wLFxuICAgICAgICB9LFxuICAgICAgICBhbmdsZVBvd2VyOiB7XG4gICAgICAgICAgdHlwZTogJ2YnLFxuICAgICAgICAgIHZhbHVlOiAyLFxuICAgICAgICB9LFxuICAgICAgICBzcG90UG9zaXRpb246IHtcbiAgICAgICAgICB0eXBlOiAndjMnLFxuICAgICAgICAgIHZhbHVlOiBuZXcgVEhSRUUuVmVjdG9yMygwLCAwLCAwKSxcbiAgICAgICAgfSxcbiAgICAgICAgbGlnaHRDb2xvcjoge1xuICAgICAgICAgIHR5cGU6ICdjJyxcbiAgICAgICAgICB2YWx1ZTogbmV3IFRIUkVFLkNvbG9yKCd3aGl0ZScpLFxuICAgICAgICB9LFxuICAgICAgICBvcGFjaXR5OiB7XG4gICAgICAgICAgdHlwZTogJ2YnLFxuICAgICAgICAgIHZhbHVlOiAxLjAsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdmVydGV4U2hhZGVyLFxuICAgICAgZnJhZ21lbnRTaGFkZXIsXG4gICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcbiAgICAgIGRlcHRoV3JpdGU6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1hdGVyaWFsO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZVNwb3RMaWdodEJlYW0oKSB7XG4gICAgaWYgKHRoaXMuc3BvdExpZ2h0QmVhbSkge1xuICAgICAgdGhpcy5zcG90bGlnaHRHcm91cC5yZW1vdmUodGhpcy5zcG90TGlnaHRCZWFtKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPIHNldCB0aGUgY29ycmVjdCBhbmdsZSBmcm9tIHRoZSBwcm9maWxlXG4gICAgY29uc3QgYmVhbUFuZ2xlRGVncmVlcyA9IDE0O1xuICAgIGNvbnN0IGdlb21ldHJ5ID0gbmV3IFRIUkVFLkN5bGluZGVyR2VvbWV0cnkoMC4xLCBiZWFtQW5nbGVEZWdyZWVzICogMS4yLCAxMDAsIDY0LCAyMCwgZmFsc2UpO1xuICAgIGdlb21ldHJ5LmFwcGx5TWF0cml4NChuZXcgVEhSRUUuTWF0cml4NCgpLm1ha2VUcmFuc2xhdGlvbigwLCAtZ2VvbWV0cnkucGFyYW1ldGVycy5oZWlnaHQgLyAyLCAwKSk7XG4gICAgZ2VvbWV0cnkuYXBwbHlNYXRyaXg0KG5ldyBUSFJFRS5NYXRyaXg0KCkubWFrZVJvdGF0aW9uWCgtTWF0aC5QSSAvIDIpKTtcblxuICAgIHRoaXMuYXRtb3NwaGVyZU1hdGVyaWFsID0gdGhpcy5hdG1vc3BoZXJlTWF0KCk7XG4gICAgdGhpcy5zcG90TGlnaHRCZWFtID0gbmV3IFRIUkVFLk1lc2goZ2VvbWV0cnksIHRoaXMuYXRtb3NwaGVyZU1hdGVyaWFsKTtcbiAgICB0aGlzLnNwb3RMaWdodEJlYW0ucG9zaXRpb24uc2V0KDAsIC0wLjAyLCAwKTtcbiAgICB0aGlzLnNwb3RMaWdodEJlYW0ucmVjZWl2ZVNoYWRvdyA9IGZhbHNlO1xuICAgIHRoaXMuc3BvdExpZ2h0QmVhbS5jYXN0U2hhZG93ID0gZmFsc2U7XG5cbiAgICB0aGlzLnNwb3RsaWdodEdyb3VwLmFkZCh0aGlzLnNwb3RMaWdodEJlYW0pO1xuICAgIHRoaXMuc3BvdExpZ2h0QmVhbS5yb3RhdGlvbi54ID0gTWF0aC5QSSAvIDI7XG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuc2VsZWN0ZWRNYXRlcmlhbC5kaXNwb3NlKCk7XG4gICAgdGhpcy5hdG1vc3BoZXJlTWF0ZXJpYWwuZGlzcG9zZSgpO1xuICB9XG59XG4iXX0=
|
|
@@ -4,89 +4,8 @@ import * as THREE from 'three';
|
|
|
4
4
|
import { FixtureCapabilityType } from '../../models/fixture-capability';
|
|
5
5
|
import { Fixture3d } from './fixture-3d';
|
|
6
6
|
export class MovingHead3d extends Fixture3d {
|
|
7
|
-
atmosphereMat() {
|
|
8
|
-
const vertexShader = `
|
|
9
|
-
varying vec3 vNormal;
|
|
10
|
-
varying vec3 vWorldPosition;
|
|
11
|
-
|
|
12
|
-
void main(){
|
|
13
|
-
vNormal = normalize(normalMatrix * normal);
|
|
14
|
-
|
|
15
|
-
vec4 worldPosition = modelMatrix * vec4(position, 1.0);
|
|
16
|
-
vWorldPosition = worldPosition.xyz;
|
|
17
|
-
|
|
18
|
-
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
19
|
-
}`;
|
|
20
|
-
const fragmentShader = `
|
|
21
|
-
varying vec3 vNormal;
|
|
22
|
-
varying vec3 vWorldPosition;
|
|
23
|
-
|
|
24
|
-
uniform vec3 lightColor;
|
|
25
|
-
uniform float opacity;
|
|
26
|
-
uniform vec3 spotPosition;
|
|
27
|
-
uniform float attenuation;
|
|
28
|
-
uniform float anglePower;
|
|
29
|
-
|
|
30
|
-
void main(){
|
|
31
|
-
float intensity;
|
|
32
|
-
|
|
33
|
-
intensity = distance(vWorldPosition, spotPosition) / attenuation;
|
|
34
|
-
intensity = 1.0 - clamp(intensity, 0.0, 1.0);
|
|
35
|
-
|
|
36
|
-
vec3 normal = vec3(vNormal.x, vNormal.y, abs(vNormal.z));
|
|
37
|
-
float angleIntensity = pow(dot(normal, vec3(0.0, 0.0, 1.0)), anglePower);
|
|
38
|
-
intensity = intensity * angleIntensity * opacity;
|
|
39
|
-
|
|
40
|
-
gl_FragColor = vec4(lightColor, intensity);
|
|
41
|
-
}`;
|
|
42
|
-
const material = new THREE.ShaderMaterial({
|
|
43
|
-
uniforms: {
|
|
44
|
-
attenuation: {
|
|
45
|
-
type: 'f',
|
|
46
|
-
value: 800.0,
|
|
47
|
-
},
|
|
48
|
-
anglePower: {
|
|
49
|
-
type: 'f',
|
|
50
|
-
value: 2,
|
|
51
|
-
},
|
|
52
|
-
spotPosition: {
|
|
53
|
-
type: 'v3',
|
|
54
|
-
value: new THREE.Vector3(0, 0, 0),
|
|
55
|
-
},
|
|
56
|
-
lightColor: {
|
|
57
|
-
type: 'c',
|
|
58
|
-
value: new THREE.Color('white'),
|
|
59
|
-
},
|
|
60
|
-
opacity: {
|
|
61
|
-
type: 'f',
|
|
62
|
-
value: 1.0,
|
|
63
|
-
},
|
|
64
|
-
},
|
|
65
|
-
vertexShader,
|
|
66
|
-
fragmentShader,
|
|
67
|
-
transparent: true,
|
|
68
|
-
depthWrite: false,
|
|
69
|
-
});
|
|
70
|
-
return material;
|
|
71
|
-
}
|
|
72
|
-
createSpotLightBeam() {
|
|
73
|
-
if (this.spotLightBeam) {
|
|
74
|
-
this.spotlightGroup.remove(this.spotLightBeam);
|
|
75
|
-
}
|
|
76
|
-
// TODO update the correct angle from the profile
|
|
77
|
-
const beamAngleDegrees = 14;
|
|
78
|
-
const geometry = new THREE.CylinderGeometry(0.1, beamAngleDegrees * 1.2, 100, 64, 20, false);
|
|
79
|
-
geometry.applyMatrix4(new THREE.Matrix4().makeTranslation(0, -geometry.parameters.height / 2, 0));
|
|
80
|
-
geometry.applyMatrix4(new THREE.Matrix4().makeRotationX(-Math.PI / 2));
|
|
81
|
-
this.atmosphereMaterial = this.atmosphereMat();
|
|
82
|
-
this.spotLightBeam = new THREE.Mesh(geometry, this.atmosphereMaterial);
|
|
83
|
-
this.spotLightBeam.position.set(0, -0.02, 0);
|
|
84
|
-
this.spotLightBeam.receiveShadow = false;
|
|
85
|
-
this.spotLightBeam.castShadow = false;
|
|
86
|
-
this.spotlightGroup.add(this.spotLightBeam);
|
|
87
|
-
this.spotLightBeam.rotation.x = Math.PI / 2;
|
|
88
|
-
}
|
|
89
7
|
createObjects() {
|
|
8
|
+
super.createObjects();
|
|
90
9
|
this.material = new THREE.MeshLambertMaterial({
|
|
91
10
|
color: 0x0d0d0d,
|
|
92
11
|
emissive: 0x0d0d0d,
|
|
@@ -100,27 +19,6 @@ export class MovingHead3d extends Fixture3d {
|
|
|
100
19
|
const headPivotGroup = new THREE.Object3D();
|
|
101
20
|
headPivotGroup.add(this.head);
|
|
102
21
|
this.headGroup.add(headPivotGroup);
|
|
103
|
-
// Add the spotlight
|
|
104
|
-
this.spotLight = new THREE.SpotLight(0xffffff, 50000);
|
|
105
|
-
this.spotLight.angle = 2;
|
|
106
|
-
this.spotLight.penumbra = 1;
|
|
107
|
-
this.spotLight.decay = 0.01;
|
|
108
|
-
this.spotLight.distance = 0;
|
|
109
|
-
this.spotLight.intensity = 1;
|
|
110
|
-
this.spotLightHelper = new THREE.SpotLightHelper(this.spotLight);
|
|
111
|
-
this.scene.add(this.spotLightHelper);
|
|
112
|
-
const spotLightTarget = new THREE.Object3D();
|
|
113
|
-
this.spotLight.target = spotLightTarget;
|
|
114
|
-
this.spotlightGroup.add(this.spotLight);
|
|
115
|
-
this.spotlightGroup.add(spotLightTarget);
|
|
116
|
-
this.spotLight.position.set(0, -1.4, 0);
|
|
117
|
-
spotLightTarget.position.set(0, -10, 0);
|
|
118
|
-
// Add the point light for the surrounding light
|
|
119
|
-
this.pointLight = new THREE.PointLight(0xffffff, 500, 0, 0.1);
|
|
120
|
-
this.spotlightGroup.add(this.pointLight);
|
|
121
|
-
this.pointLight.position.set(0, -1.4, 0);
|
|
122
|
-
// Add the light beam
|
|
123
|
-
this.createSpotLightBeam();
|
|
124
22
|
this.headGroup.add(this.spotlightGroup);
|
|
125
23
|
// Add the arm
|
|
126
24
|
this.armGroup.add(this.headGroup);
|
|
@@ -137,10 +35,7 @@ export class MovingHead3d extends Fixture3d {
|
|
|
137
35
|
}
|
|
138
36
|
constructor(fixtureService, previewMeshService, fixture, scene) {
|
|
139
37
|
super(fixtureService, fixture, scene);
|
|
140
|
-
this.pointLightMaxIntensity = 2;
|
|
141
|
-
this.spotLightLightMaxIntensity = 10;
|
|
142
38
|
this.headGroup = new THREE.Object3D();
|
|
143
|
-
this.spotlightGroup = new THREE.Object3D();
|
|
144
39
|
this.armGroup = new THREE.Object3D();
|
|
145
40
|
this.objectGroup = new THREE.Object3D();
|
|
146
41
|
forkJoin([
|
|
@@ -160,10 +55,10 @@ export class MovingHead3d extends Fixture3d {
|
|
|
160
55
|
return this.objectGroup;
|
|
161
56
|
}
|
|
162
57
|
updatePreview(channelValues, masterDimmerValue) {
|
|
163
|
-
super.updatePreview(channelValues, masterDimmerValue);
|
|
164
58
|
if (!this.isLoaded) {
|
|
165
59
|
return;
|
|
166
60
|
}
|
|
61
|
+
super.updatePreview(channelValues, masterDimmerValue);
|
|
167
62
|
// Apply default settings
|
|
168
63
|
let panStart = 0;
|
|
169
64
|
let panEnd = 255;
|
|
@@ -218,26 +113,12 @@ export class MovingHead3d extends Fixture3d {
|
|
|
218
113
|
}
|
|
219
114
|
this.lastSelected = this.isSelected;
|
|
220
115
|
}
|
|
221
|
-
// Apply the colors
|
|
222
|
-
const color = new THREE.Color('rgb(' + this.colorRed + ', ' + this.colorGreen + ', ' + this.colorBlue + ')');
|
|
223
|
-
this.pointLight.color = color;
|
|
224
|
-
this.spotLight.color = color;
|
|
225
|
-
this.spotLightBeam.material.uniforms.lightColor.value = color;
|
|
226
|
-
// Apply the dimmer value
|
|
227
|
-
// Take the color into account for the beam (don't show a black beam)
|
|
228
|
-
const intensityColor = Math.max(this.colorRed, this.colorGreen, this.colorBlue);
|
|
229
|
-
// console.log(Math.min(intensityColor, this.dimmer));
|
|
230
|
-
this.spotLightBeam.material.uniforms.opacity.value = Math.min(intensityColor, this.dimmer);
|
|
231
|
-
this.spotLight.intensity = this.spotLightLightMaxIntensity * this.dimmer;
|
|
232
|
-
this.pointLight.intensity = this.pointLightMaxIntensity * this.dimmer;
|
|
233
|
-
this.spotLightBeam.material.uniforms.spotPosition.value = this.objectGroup.position;
|
|
234
116
|
// this.spotLightHelper.update();
|
|
235
117
|
}
|
|
236
118
|
destroy() {
|
|
237
119
|
this.scene.remove(this.objectGroup);
|
|
238
120
|
this.material.dispose();
|
|
239
|
-
this.atmosphereMaterial.dispose();
|
|
240
121
|
this.spotLightHelper.dispose();
|
|
241
122
|
}
|
|
242
123
|
}
|
|
243
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW92aW5nLWhlYWQtM2QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ25lci9zcmMvbGliL3ByZXZpZXcvbW9kZWxzL21vdmluZy1oZWFkLTNkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRS9CLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBSXhFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFekMsTUFBTSxPQUFPLFlBQWEsU0FBUSxTQUFTO0lBMkJqQyxhQUFhO1FBQ25CLE1BQU0sWUFBWSxHQUFHOzs7Ozs7Ozs7OztRQVdqQixDQUFDO1FBQ0wsTUFBTSxjQUFjLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQXFCbkIsQ0FBQztRQUVMLE1BQU0sUUFBUSxHQUFHLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQztZQUN4QyxRQUFRLEVBQUU7Z0JBQ1IsV0FBVyxFQUFFO29CQUNYLElBQUksRUFBRSxHQUFHO29CQUNULEtBQUssRUFBRSxLQUFLO2lCQUNiO2dCQUNELFVBQVUsRUFBRTtvQkFDVixJQUFJLEVBQUUsR0FBRztvQkFDVCxLQUFLLEVBQUUsQ0FBQztpQkFDVDtnQkFDRCxZQUFZLEVBQUU7b0JBQ1osSUFBSSxFQUFFLElBQUk7b0JBQ1YsS0FBSyxFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDbEM7Z0JBQ0QsVUFBVSxFQUFFO29CQUNWLElBQUksRUFBRSxHQUFHO29CQUNULEtBQUssRUFBRSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxD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ICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB7IENhY2hlZEZpeHR1cmUgfSBmcm9tICcuLi8uLi9tb2RlbHMvY2FjaGVkLWZpeHR1cmUnO1xuaW1wb3J0IHsgRml4dHVyZUNhcGFiaWxpdHlUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2ZpeHR1cmUtY2FwYWJpbGl0eSc7XG5pbXBvcnQgeyBGaXh0dXJlQ2hhbm5lbFZhbHVlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2ZpeHR1cmUtY2hhbm5lbC12YWx1ZSc7XG5pbXBvcnQgeyBGaXh0dXJlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpeHR1cmUuc2VydmljZSc7XG5pbXBvcnQgeyBQcmV2aWV3TWVzaFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcmV2aWV3LW1lc2guc2VydmljZSc7XG5pbXBvcnQgeyBGaXh0dXJlM2QgfSBmcm9tICcuL2ZpeHR1cmUtM2QnO1xuXG5leHBvcnQgY2xhc3MgTW92aW5nSGVhZDNkIGV4dGVuZHMgRml4dHVyZTNkIHtcbiAgcHJpdmF0ZSByZWFkb25seSBwb2ludExpZ2h0TWF4SW50ZW5zaXR5OiBudW1iZXIgPSAyO1xuICBwcml2YXRlIHJlYWRvbmx5IHNwb3RMaWdodExpZ2h0TWF4SW50ZW5zaXR5OiBudW1iZXIgPSAxMDtcblxuICBwcml2YXRlIHBhbjogbnVtYmVyO1xuICBwcml2YXRlIHRpbHQ6IG51bWJlcjtcblxuICBwcml2YXRlIHNvY2tldDogVEhSRUUuTWVzaDtcbiAgcHJpdmF0ZSBhcm06IFRIUkVFLk1lc2g7XG4gIHByaXZhdGUgaGVhZDogVEhSRUUuTWVzaDtcblxuICBwcml2YXRlIGhlYWRHcm91cDogVEhSRUUuT2JqZWN0M0QgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcbiAgcHJpdmF0ZSBzcG90bGlnaHRHcm91cDogVEhSRUUuT2JqZWN0M0QgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcbiAgcHJpdmF0ZSBhcm1Hcm91cDogVEhSRUUuT2JqZWN0M0QgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcbiAgcHJpdmF0ZSBvYmplY3RHcm91cDogVEhSRUUuT2JqZWN0M0QgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcbiAgcHJpdmF0ZSBzcG90TGlnaHQ6IFRIUkVFLlNwb3RMaWdodDtcbiAgcHJpdmF0ZSBzcG90TGlnaHRIZWxwZXI6IFRIUkVFLlNwb3RMaWdodEhlbHBlcjtcbiAgcHJpdmF0ZSBzcG90TGlnaHRCZWFtOiBUSFJFRS5NZXNoO1xuXG4gIHByaXZhdGUgcG9pbnRMaWdodDogVEhSRUUuUG9pbnRMaWdodDtcblxuICBwcml2YXRlIGxhc3RCZWFtQW5nbGVEZWdyZWVzOiBudW1iZXI7XG4gIHByaXZhdGUgbGFzdFNlbGVjdGVkOiBib29sZWFuO1xuXG4gIHByaXZhdGUgbWF0ZXJpYWw6IFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsO1xuICBwcml2YXRlIGF0bW9zcGhlcmVNYXRlcmlhbDogVEhSRUUuU2hhZGVyTWF0ZXJpYWw7XG5cbiAgcHJpdmF0ZSBhdG1vc3BoZXJlTWF0KCkge1xuICAgIGNvbnN0IHZlcnRleFNoYWRlciA9IGBcbiAgICAgIHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuICAgICAgdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuXG4gICAgICB2b2lkIG1haW4oKXtcbiAgICAgICAgdk5vcm1hbCA9IG5vcm1hbGl6ZShub3JtYWxNYXRyaXggKiBub3JtYWwpO1xuXG4gICAgICAgIHZlYzQgd29ybGRQb3NpdGlvbiA9IG1vZGVsTWF0cml4ICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgICAgICAgdldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejtcblxuICAgICAgICBnbF9Qb3NpdGlvblx0PSBwcm9qZWN0aW9uTWF0cml4ICogbW9kZWxWaWV3TWF0cml4ICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgICAgIH1gO1xuICAgIGNvbnN0IGZyYWdtZW50U2hhZGVyID0gYFxuICAgICAgdmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4gICAgICB2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG5cbiAgICAgIHVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xuICAgICAgdW5pZm9ybSBmbG9hdFx0b3BhY2l0eTtcbiAgICAgIHVuaWZvcm0gdmVjMyBzcG90UG9zaXRpb247XG4gICAgICB1bmlmb3JtIGZsb2F0IGF0dGVudWF0aW9uO1xuICAgICAgdW5pZm9ybSBmbG9hdFx0YW5nbGVQb3dlcjtcblxuICAgICAgdm9pZCBtYWluKCl7XG4gICAgICAgIGZsb2F0IGludGVuc2l0eTtcblxuICAgICAgICBpbnRlbnNpdHlcdD0gZGlzdGFuY2UodldvcmxkUG9zaXRpb24sIHNwb3RQb3NpdGlvbikgLyBhdHRlbnVhdGlvbjtcbiAgICAgICAgaW50ZW5zaXR5XHQ9IDEuMCAtIGNsYW1wKGludGVuc2l0eSwgMC4wLCAxLjApO1xuXG4gICAgICAgIHZlYzMgbm9ybWFsXHQ9IHZlYzModk5vcm1hbC54LCB2Tm9ybWFsLnksIGFicyh2Tm9ybWFsLnopKTtcbiAgICAgICAgZmxvYXQgYW5nbGVJbnRlbnNpdHlcdD0gcG93KGRvdChub3JtYWwsIHZlYzMoMC4wLCAwLjAsIDEuMCkpLCBhbmdsZVBvd2VyKTtcbiAgICAgICAgaW50ZW5zaXR5XHQ9IGludGVuc2l0eSAqIGFuZ2xlSW50ZW5zaXR5ICogb3BhY2l0eTtcblxuICAgICAgICBnbF9GcmFnQ29sb3JcdD0gdmVjNChsaWdodENvbG9yLCBpbnRlbnNpdHkpO1xuICAgICAgfWA7XG5cbiAgICBjb25zdCBtYXRlcmlhbCA9IG5ldyBUSFJFRS5TaGFkZXJNYXRlcmlhbCh7XG4gICAgICB1bmlmb3Jtczoge1xuICAgICAgICBhdHRlbnVhdGlvbjoge1xuICAgICAgICAgIHR5cGU6ICdmJyxcbiAgICAgICAgICB2YWx1ZTogODAwLjAsXG4gICAgICAgIH0sXG4gICAgICAgIGFuZ2xlUG93ZXI6IHtcbiAgICAgICAgICB0eXBlOiAnZicsXG4gICAgICAgICAgdmFsdWU6IDIsXG4gICAgICAgIH0sXG4gICAgICAgIHNwb3RQb3NpdGlvbjoge1xuICAgICAgICAgIHR5cGU6ICd2MycsXG4gICAgICAgICAgdmFsdWU6IG5ldyBUSFJFRS5WZWN0b3IzKDAsIDAsIDApLFxuICAgICAgICB9LFxuICAgICAgICBsaWdodENvbG9yOiB7XG4gICAgICAgICAgdHlwZTogJ2MnLFxuICAgICAgICAgIHZhbHVlOiBuZXcgVEhSRUUuQ29sb3IoJ3doaXRlJyksXG4gICAgICAgIH0sXG4gICAgICAgIG9wYWNpdHk6IHtcbiAgICAgICAgICB0eXBlOiAnZicsXG4gICAgICAgICAgdmFsdWU6IDEuMCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB2ZXJ0ZXhTaGFkZXIsXG4gICAgICBmcmFnbWVudFNoYWRlcixcbiAgICAgIHRyYW5zcGFyZW50OiB0cnVlLFxuICAgICAgZGVwdGhXcml0ZTogZmFsc2UsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWF0ZXJpYWw7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNwb3RMaWdodEJlYW0oKSB7XG4gICAgaWYgKHRoaXMuc3BvdExpZ2h0QmVhbSkge1xuICAgICAgdGhpcy5zcG90bGlnaHRHcm91cC5yZW1vdmUodGhpcy5zcG90TGlnaHRCZWFtKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPIHVwZGF0ZSB0aGUgY29ycmVjdCBhbmdsZSBmcm9tIHRoZSBwcm9maWxlXG4gICAgY29uc3QgYmVhbUFuZ2xlRGVncmVlcyA9IDE0O1xuICAgIGNvbnN0IGdlb21ldHJ5ID0gbmV3IFRIUkVFLkN5bGluZGVyR2VvbWV0cnkoMC4xLCBiZWFtQW5nbGVEZWdyZWVzICogMS4yLCAxMDAsIDY0LCAyMCwgZmFsc2UpO1xuICAgIGdlb21ldHJ5LmFwcGx5TWF0cml4NChuZXcgVEhSRUUuTWF0cml4NCgpLm1ha2VUcmFuc2xhdGlvbigwLCAtZ2VvbWV0cnkucGFyYW1ldGVycy5oZWlnaHQgLyAyLCAwKSk7XG4gICAgZ2VvbWV0cnkuYXBwbHlNYXRyaXg0KG5ldyBUSFJFRS5NYXRyaXg0KCkubWFrZVJvdGF0aW9uWCgtTWF0aC5QSSAvIDIpKTtcblxuICAgIHRoaXMuYXRtb3NwaGVyZU1hdGVyaWFsID0gdGhpcy5hdG1vc3BoZXJlTWF0KCk7XG4gICAgdGhpcy5zcG90TGlnaHRCZWFtID0gbmV3IFRIUkVFLk1lc2goZ2VvbWV0cnksIHRoaXMuYXRtb3NwaGVyZU1hdGVyaWFsKTtcbiAgICB0aGlzLnNwb3RMaWdodEJlYW0ucG9zaXRpb24uc2V0KDAsIC0wLjAyLCAwKTtcbiAgICB0aGlzLnNwb3RMaWdodEJlYW0ucmVjZWl2ZVNoYWRvdyA9IGZhbHNlO1xuICAgIHRoaXMuc3BvdExpZ2h0QmVhbS5jYXN0U2hhZG93ID0gZmFsc2U7XG5cbiAgICB0aGlzLnNwb3RsaWdodEdyb3VwLmFkZCh0aGlzLnNwb3RMaWdodEJlYW0pO1xuICAgIHRoaXMuc3BvdExpZ2h0QmVhbS5yb3RhdGlvbi54ID0gTWF0aC5QSSAvIDI7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU9iamVjdHMoKSB7XG4gICAgKHRoaXMubWF0ZXJpYWwgYXMgYW55KSA9IG5ldyBUSFJFRS5NZXNoTGFtYmVydE1hdGVyaWFsKHtcbiAgICAgIGNvbG9yOiAweDBkMGQwZCxcbiAgICAgIGVtaXNzaXZlOiAweDBkMGQwZCxcbiAgICB9KTtcblxuICAgIHRoaXMuc29ja2V0Lm1hdGVyaWFsID0gdGhpcy5tYXRlcmlhbDtcbiAgICB0aGlzLmFybS5tYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWw7XG4gICAgdGhpcy5oZWFkLm1hdGVyaWFsID0gdGhpcy5tYXRlcmlhbDtcblxuICAgIC8vIEFkZCB0aGUgaGVhZFxuICAgIHRoaXMuaGVhZC5zY2FsZS5tdWx0aXBseVNjYWxhcigwLjkpO1xuICAgIHRoaXMuaGVhZC5wb3NpdGlvbi5zZXQoLTAuMSwgMCwgMCk7XG4gICAgY29uc3QgaGVhZFBpdm90R3JvdXAgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcbiAgICBoZWFkUGl2b3RHcm91cC5hZGQodGhpcy5oZWFkKTtcbiAgICB0aGlzLmhlYWRHcm91cC5hZGQoaGVhZFBpdm90R3JvdXApO1xuXG4gICAgLy8gQWRkIHRoZSBzcG90bGlnaHRcbiAgICB0aGlzLnNwb3RMaWdodCA9IG5ldyBUSFJFRS5TcG90TGlnaHQoMHhmZmZmZmYsIDUwMDAwKTtcbiAgICB0aGlzLnNwb3RMaWdodC5hbmdsZSA9IDI7XG4gICAgdGhpcy5zcG90TGlnaHQucGVudW1icmEgPSAxO1xuICAgIHRoaXMuc3BvdExpZ2h0LmRlY2F5ID0gMC4wMTtcbiAgICB0aGlzLnNwb3RMaWdodC5kaXN0YW5jZSA9IDA7XG4gICAgdGhpcy5zcG90TGlnaHQuaW50ZW5zaXR5ID0gMTtcblxuICAgIHRoaXMuc3BvdExpZ2h0SGVscGVyID0gbmV3IFRIUkVFLlNwb3RMaWdodEhlbHBlcih0aGlzLnNwb3RMaWdodCk7XG4gICAgdGhpcy5zY2VuZS5hZGQodGhpcy5zcG90TGlnaHRIZWxwZXIpO1xuXG4gICAgY29uc3Qgc3BvdExpZ2h0VGFyZ2V0ID0gbmV3IFRIUkVFLk9iamVjdDNEKCk7XG4gICAgdGhpcy5zcG90TGlnaHQudGFyZ2V0ID0gc3BvdExpZ2h0VGFyZ2V0O1xuXG4gICAgdGhpcy5zcG90bGlnaHRHcm91cC5hZGQodGhpcy5zcG90TGlnaHQpO1xuICAgIHRoaXMuc3BvdGxpZ2h0R3JvdXAuYWRkKHNwb3RMaWdodFRhcmdldCk7XG4gICAgdGhpcy5zcG90TGlnaHQucG9zaXRpb24uc2V0KDAsIC0xLjQsIDApO1xuICAgIHNwb3RMaWdodFRhcmdldC5wb3NpdGlvbi5zZXQoMCwgLTEwLCAwKTtcblxuICAgIC8vIEFkZCB0aGUgcG9pbnQgbGlnaHQgZm9yIHRoZSBzdXJyb3VuZGluZyBsaWdodFxuICAgIHRoaXMucG9pbnRMaWdodCA9IG5ldyBUSFJFRS5Qb2ludExpZ2h0KDB4ZmZmZmZmLCA1MDAsIDAsIDAuMSk7XG4gICAgdGhpcy5zcG90bGlnaHRHcm91cC5hZGQodGhpcy5wb2ludExpZ2h0KTtcbiAgICB0aGlzLnBvaW50TGlnaHQucG9zaXRpb24uc2V0KDAsIC0xLjQsIDApO1xuXG4gICAgLy8gQWRkIHRoZSBsaWdodCBiZWFtXG4gICAgdGhpcy5jcmVhdGVTcG90TGlnaHRCZWFtKCk7XG5cbiAgICB0aGlzLmhlYWRHcm91cC5hZGQodGhpcy5zcG90bGlnaHRHcm91cCk7XG5cbiAgICAvLyBBZGQgdGhlIGFybVxuICAgIHRoaXMuYXJtR3JvdXAuYWRkKHRoaXMuaGVhZEdyb3VwKTtcbiAgICB0aGlzLmhlYWRHcm91cC5wb3NpdGlvbi5zZXQoMCwgLTAuNiwgMCk7XG4gICAgdGhpcy5hcm1Hcm91cC5hZGQodGhpcy5hcm0pO1xuXG4gICAgLy8gQWRkIHRoZSBzb2NrZXRcbiAgICB0aGlzLm9iamVjdEdyb3VwLmFkZCh0aGlzLmFybUdyb3VwKTtcbiAgICB0aGlzLm9iamVjdEdyb3VwLmFkZCh0aGlzLnNvY2tldCk7XG4gICAgdGhpcy5zb2NrZXQucG9zaXRpb24uc2V0KDAsIDEuMiwgMCk7XG5cbiAgICAvLyBBIG1vdmluZyBoZWFkIGhhcyBhYm91dCAzMiBjbSBpbiB3aWR0aFxuICAgIHRoaXMub2JqZWN0R3JvdXAuc2NhbGUubXVsdGlwbHlTY2FsYXIoOSk7XG5cbiAgICB0aGlzLnNjZW5lLmFkZCh0aGlzLm9iamVjdEdyb3VwKTtcblxuICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICB9XG5cbiAgY29uc3RydWN0b3IoZml4dHVyZVNlcnZpY2U6IEZpeHR1cmVTZXJ2aWNlLCBwcmV2aWV3TWVzaFNlcnZpY2U6IFByZXZpZXdNZXNoU2VydmljZSwgZml4dHVyZTogQ2FjaGVkRml4dHVyZSwgc2NlbmU6IGFueSkge1xuICAgIHN1cGVyKGZpeHR1cmVTZXJ2aWNlLCBmaXh0dXJlLCBzY2VuZSk7XG5cbiAgICBmb3JrSm9pbihbXG4gICAgICBwcmV2aWV3TWVzaFNlcnZpY2UuZ2V0TWVzaCgnbW92aW5nX2hlYWRfc29ja2V0JyksXG4gICAgICBwcmV2aWV3TWVzaFNlcnZpY2UuZ2V0TWVzaCgnbW92aW5nX2hlYWRfYXJtJyksXG4gICAgICBwcmV2aWV3TWVzaFNlcnZpY2UuZ2V0TWVzaCgnbW92aW5nX2hlYWRfaGVhZCcpLFxuICAgIF0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChbc29ja2V0LCBhcm0sIGhlYWRdKSA9PiB7XG4gICAgICAgICAgdGhpcy5zb2NrZXQgPSBzb2NrZXQ7XG4gICAgICAgICAgdGhpcy5hcm0gPSBhcm07XG4gICAgICAgICAgdGhpcy5oZWFkID0gaGVhZDtcblxuICAgICAgICAgIHRoaXMuY3JlYXRlT2JqZWN0cygpO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIGdldE9iamVjdCgpOiBUSFJFRS5PYmplY3QzRCB7XG4gICAgcmV0dXJuIHRoaXMub2JqZWN0R3JvdXA7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlUHJldmlldyhjaGFubmVsVmFsdWVzOiBGaXh0dXJlQ2hhbm5lbFZhbHVlW10sIG1hc3RlckRpbW1lclZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBzdXBlci51cGRhdGVQcmV2aWV3KGNoYW5uZWxWYWx1ZXMsIG1hc3RlckRpbW1lclZhbHVlKTtcblxuICAgIGlmICghdGhpcy5pc0xvYWRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEFwcGx5IGRlZmF1bHQgc2V0dGluZ3NcbiAgICBsZXQgcGFuU3RhcnQgPSAwO1xuICAgIGxldCBwYW5FbmQgPSAyNTU7XG5cbiAgICBsZXQgdGlsdFN0YXJ0ID0gMDtcbiAgICBsZXQgdGlsdEVuZCA9IDI1NTtcblxuICAgIHRoaXMucGFuID0gMDtcbiAgICB0aGlzLnRpbHQgPSAwO1xuXG4gICAgLy8gQXBwbHkgdGhlIGtub3duIHByb3BlcnR5IHZhbHVlc1xuICAgIGZvciAoY29uc3QgY2hhbm5lbFZhbHVlIG9mIGNoYW5uZWxWYWx1ZXMpIHtcbiAgICAgIGNvbnN0IGNoYW5uZWwgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldENoYW5uZWxCeU5hbWUodGhpcy5maXh0dXJlLCBjaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUpO1xuICAgICAgY29uc3QgY2FwYWJpbGl0eSA9IHRoaXMuZ2V0Q2FwYWJpbGl0eUluVmFsdWUoY2hhbm5lbCwgY2hhbm5lbFZhbHVlLnZhbHVlKTtcbiAgICAgIGlmIChjYXBhYmlsaXR5KSB7XG4gICAgICAgIHN3aXRjaCAoY2FwYWJpbGl0eS5jYXBhYmlsaXR5LnR5cGUpIHtcbiAgICAgICAgICBjYXNlIEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5QYW46IHtcbiAgICAgICAgICAgIHBhblN0YXJ0ID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRSb3RhdGlvbkFuZ2xlRGVnKGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5hbmdsZVN0YXJ0KSB8fCAwO1xuICAgICAgICAgICAgcGFuRW5kID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRSb3RhdGlvbkFuZ2xlRGVnKGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5hbmdsZUVuZCkgfHwgNTQwO1xuICAgICAgICAgICAgdGhpcy5wYW4gPSBjaGFubmVsVmFsdWUudmFsdWUgLyBjaGFubmVsLm1heFZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgRml4dHVyZUNhcGFiaWxpdHlUeXBlLlRpbHQ6IHtcbiAgICAgICAgICAgIHRpbHRTdGFydCA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0Um90YXRpb25BbmdsZURlZyhjYXBhYmlsaXR5LmNhcGFiaWxpdHkuYW5nbGVTdGFydCkgfHwgMDtcbiAgICAgICAgICAgIHRpbHRFbmQgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldFJvdGF0aW9uQW5nbGVEZWcoY2FwYWJpbGl0eS5jYXBhYmlsaXR5LmFuZ2xlRW5kKSB8fCAyNzAwO1xuICAgICAgICAgICAgdGhpcy50aWx0ID0gY2hhbm5lbFZhbHVlLnZhbHVlIC8gY2hhbm5lbC5tYXhWYWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXBkYXRlUG9zaXRpb24odGhpcy5vYmplY3RHcm91cCk7XG5cbiAgICAvLyBjYWxjdWxhdGUgdGhlIHkveCByb3RhdGlvbiBpbiByYWRpYW50cyBiYXNlZCBvbiBwYW4vdGlsdCAoMC0xKSByZXNwZWN0aW5nIHRoZSBtYXggcGFuL3RpbHRcbiAgICB0aGlzLmFybUdyb3VwLnJvdGF0aW9uLnkgPSBUSFJFRS5NYXRoVXRpbHMuZGVnVG9SYWQocGFuRW5kICogdGhpcy5wYW4gKyBwYW5TdGFydCkgLSBUSFJFRS5NYXRoVXRpbHMuZGVnVG9SYWQocGFuRW5kIC8gMik7XG4gICAgdGhpcy5oZWFkR3JvdXAucm90YXRpb24ueCA9IFRIUkVFLk1hdGhVdGlscy5kZWdUb1JhZCh0aWx0RW5kICogdGhpcy50aWx0ICsgdGlsdFN0YXJ0KSAtIFRIUkVFLk1hdGhVdGlscy5kZWdUb1JhZCh0aWx0RW5kIC8gMik7XG5cbiAgICAvLyBVcGRhdGUgdGhlIGFuZ2xlIChvbmx5IG9uIGNoYW5nZSwgYmVjYXVzZSBpdCdzIGV4cGVuc2l2ZSlcbiAgICAvLyBUT0RPIHVwZGF0ZSB0aGUgY29ycmVjdCBhbmdsZSBmcm9tIHRoZSBwcm9maWxlXG4gICAgY29uc3QgYmVhbUFuZ2xlRHJlZ3JlZXMgPSAxNDtcbiAgICBpZiAodGhpcy5sYXN0QmVhbUFuZ2xlRGVncmVlcyAhPT0gYmVhbUFuZ2xlRHJlZ3JlZXMpIHtcbiAgICAgIHRoaXMuc3BvdExpZ2h0LmFuZ2xlID0gVEhSRUUuTWF0aFV0aWxzLmRlZ1RvUmFkKGJlYW1BbmdsZURyZWdyZWVzKTtcbiAgICAgIHRoaXMuY3JlYXRlU3BvdExpZ2h0QmVhbSgpO1xuICAgICAgdGhpcy5sYXN0QmVhbUFuZ2xlRGVncmVlcyA9IGJlYW1BbmdsZURyZWdyZWVzO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgbWF0ZXJpYWxcbiAgICBpZiAodGhpcy5sYXN0U2VsZWN0ZWQgIT09IHRoaXMuaXNTZWxlY3RlZCkge1xuICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZCkge1xuICAgICAgICB0aGlzLnNvY2tldC5tYXRlcmlhbCA9IHRoaXMuc2VsZWN0ZWRNYXRlcmlhbDtcbiAgICAgICAgdGhpcy5hcm0ubWF0ZXJpYWwgPSB0aGlzLnNlbGVjdGVkTWF0ZXJpYWw7XG4gICAgICAgIHRoaXMuaGVhZC5tYXRlcmlhbCA9IHRoaXMuc2VsZWN0ZWRNYXRlcmlhbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc29ja2V0Lm1hdGVyaWFsID0gdGhpcy5tYXRlcmlhbDtcbiAgICAgICAgdGhpcy5hcm0ubWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsO1xuICAgICAgICB0aGlzLmhlYWQubWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxhc3RTZWxlY3RlZCA9IHRoaXMuaXNTZWxlY3RlZDtcbiAgICB9XG5cbiAgICAvLyBBcHBseSB0aGUgY29sb3JzXG4gICAgY29uc3QgY29sb3IgPSBuZXcgVEhSRUUuQ29sb3IoJ3JnYignICsgdGhpcy5jb2xvclJlZCArICcsICcgKyB0aGlzLmNvbG9yR3JlZW4gKyAnLCAnICsgdGhpcy5jb2xvckJsdWUgKyAnKScpO1xuXG4gICAgdGhpcy5wb2ludExpZ2h0LmNvbG9yID0gY29sb3I7XG5cbiAgICB0aGlzLnNwb3RMaWdodC5jb2xvciA9IGNvbG9yO1xuICAgIHRoaXMuc3BvdExpZ2h0QmVhbS5tYXRlcmlhbC51bmlmb3Jtcy5saWdodENvbG9yLnZhbHVlID0gY29sb3I7XG5cbiAgICAvLyBBcHBseSB0aGUgZGltbWVyIHZhbHVlXG4gICAgLy8gVGFrZSB0aGUgY29sb3IgaW50byBhY2NvdW50IGZvciB0aGUgYmVhbSAoZG9uJ3Qgc2hvdyBhIGJsYWNrIGJlYW0pXG4gICAgY29uc3QgaW50ZW5zaXR5Q29sb3IgPSBNYXRoLm1heCh0aGlzLmNvbG9yUmVkLCB0aGlzLmNvbG9yR3JlZW4sIHRoaXMuY29sb3JCbHVlKTtcbiAgICAvLyBjb25zb2xlLmxvZyhNYXRoLm1pbihpbnRlbnNpdHlDb2xvciwgdGhpcy5kaW1tZXIpKTtcbiAgICB0aGlzLnNwb3RMaWdodEJlYW0ubWF0ZXJpYWwudW5pZm9ybXMub3BhY2l0eS52YWx1ZSA9IE1hdGgubWluKGludGVuc2l0eUNvbG9yLCB0aGlzLmRpbW1lcik7XG5cbiAgICB0aGlzLnNwb3RMaWdodC5pbnRlbnNpdHkgPSB0aGlzLnNwb3RMaWdodExpZ2h0TWF4SW50ZW5zaXR5ICogdGhpcy5kaW1tZXI7XG4gICAgdGhpcy5wb2ludExpZ2h0LmludGVuc2l0eSA9IHRoaXMucG9pbnRMaWdodE1heEludGVuc2l0eSAqIHRoaXMuZGltbWVyO1xuXG4gICAgdGhpcy5zcG90TGlnaHRCZWFtLm1hdGVyaWFsLnVuaWZvcm1zLnNwb3RQb3NpdGlvbi52YWx1ZSA9IHRoaXMub2JqZWN0R3JvdXAucG9zaXRpb247XG5cbiAgICAvLyB0aGlzLnNwb3RMaWdodEhlbHBlci51cGRhdGUoKTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5zY2VuZS5yZW1vdmUodGhpcy5vYmplY3RHcm91cCk7XG4gICAgdGhpcy5tYXRlcmlhbC5kaXNwb3NlKCk7XG4gICAgdGhpcy5hdG1vc3BoZXJlTWF0ZXJpYWwuZGlzcG9zZSgpO1xuICAgIHRoaXMuc3BvdExpZ2h0SGVscGVyLmRpc3Bvc2UoKTtcbiAgfVxufVxuIl19
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW92aW5nLWhlYWQtM2QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ25lci9zcmMvbGliL3ByZXZpZXcvbW9kZWxzL21vdmluZy1oZWFkLTNkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRS9CLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBSXhFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFekMsTUFBTSxPQUFPLFlBQWEsU0FBUSxTQUFTO0lBaUIvQixhQUFhO1FBQ3JCLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUVyQixJQUFJLENBQUMsUUFBZ0IsR0FBRyxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQztZQUNyRCxLQUFLLEVBQUUsUUFBUTtZQUNmLFFBQVEsRUFBRSxRQUFRO1NBQ25CLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBRW5DLGVBQWU7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuQyxNQUFNLGNBQWMs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QUFFLENBQUM7WUFDMUMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO2dCQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7WUFDN0MsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDckMsQ0FBQztZQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN0QyxDQUFDO1FBRUQsaUNBQWlDO0lBQ25DLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JrSm9pbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgQ2FjaGVkRml4dHVyZSB9IGZyb20gJy4uLy4uL21vZGVscy9jYWNoZWQtZml4dHVyZSc7XG5pbXBvcnQgeyBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZml4dHVyZS1jYXBhYmlsaXR5JztcbmltcG9ydCB7IEZpeHR1cmVDaGFubmVsVmFsdWUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZml4dHVyZS1jaGFubmVsLXZhbHVlJztcbmltcG9ydCB7IEZpeHR1cmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZml4dHVyZS5zZXJ2aWNlJztcbmltcG9ydCB7IFByZXZpZXdNZXNoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ByZXZpZXctbWVzaC5zZXJ2aWNlJztcbmltcG9ydCB7IEZpeHR1cmUzZCB9IGZyb20gJy4vZml4dHVyZS0zZCc7XG5cbmV4cG9ydCBjbGFzcyBNb3ZpbmdIZWFkM2QgZXh0ZW5kcyBGaXh0dXJlM2Qge1xuICBwcml2YXRlIHBhbjogbnVtYmVyO1xuICBwcml2YXRlIHRpbHQ6IG51bWJlcjtcblxuICBwcml2YXRlIHNvY2tldDogVEhSRUUuTWVzaDtcbiAgcHJpdmF0ZSBhcm06IFRIUkVFLk1lc2g7XG4gIHByaXZhdGUgaGVhZDogVEhSRUUuTWVzaDtcblxuICBwcml2YXRlIGhlYWRHcm91cDogVEhSRUUuT2JqZWN0M0QgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcbiAgcHJpdmF0ZSBhcm1Hcm91cDogVEhSRUUuT2JqZWN0M0QgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcbiAgcHJpdmF0ZSBvYmplY3RHcm91cDogVEhSRUUuT2JqZWN0M0QgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcblxuICBwcml2YXRlIGxhc3RCZWFtQW5nbGVEZWdyZWVzOiBudW1iZXI7XG4gIHByaXZhdGUgbGFzdFNlbGVjdGVkOiBib29sZWFuO1xuXG4gIHByaXZhdGUgbWF0ZXJpYWw6IFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsO1xuXG4gIHByb3RlY3RlZCBjcmVhdGVPYmplY3RzKCkge1xuICAgIHN1cGVyLmNyZWF0ZU9iamVjdHMoKTtcblxuICAgICh0aGlzLm1hdGVyaWFsIGFzIGFueSkgPSBuZXcgVEhSRUUuTWVzaExhbWJlcnRNYXRlcmlhbCh7XG4gICAgICBjb2xvcjogMHgwZDBkMGQsXG4gICAgICBlbWlzc2l2ZTogMHgwZDBkMGQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnNvY2tldC5tYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWw7XG4gICAgdGhpcy5hcm0ubWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsO1xuICAgIHRoaXMuaGVhZC5tYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWw7XG5cbiAgICAvLyBBZGQgdGhlIGhlYWRcbiAgICB0aGlzLmhlYWQuc2NhbGUubXVsdGlwbHlTY2FsYXIoMC45KTtcbiAgICB0aGlzLmhlYWQucG9zaXRpb24uc2V0KC0wLjEsIDAsIDApO1xuICAgIGNvbnN0IGhlYWRQaXZvdEdyb3VwID0gbmV3IFRIUkVFLk9iamVjdDNEKCk7XG4gICAgaGVhZFBpdm90R3JvdXAuYWRkKHRoaXMuaGVhZCk7XG4gICAgdGhpcy5oZWFkR3JvdXAuYWRkKGhlYWRQaXZvdEdyb3VwKTtcblxuICAgIHRoaXMuaGVhZEdyb3VwLmFkZCh0aGlzLnNwb3RsaWdodEdyb3VwKTtcblxuICAgIC8vIEFkZCB0aGUgYXJtXG4gICAgdGhpcy5hcm1Hcm91cC5hZGQodGhpcy5oZWFkR3JvdXApO1xuICAgIHRoaXMuaGVhZEdyb3VwLnBvc2l0aW9uLnNldCgwLCAtMC42LCAwKTtcbiAgICB0aGlzLmFybUdyb3VwLmFkZCh0aGlzLmFybSk7XG5cbiAgICAvLyBBZGQgdGhlIHNvY2tldFxuICAgIHRoaXMub2JqZWN0R3JvdXAuYWRkKHRoaXMuYXJtR3JvdXApO1xuICAgIHRoaXMub2JqZWN0R3JvdXAuYWRkKHRoaXMuc29ja2V0KTtcbiAgICB0aGlzLnNvY2tldC5wb3NpdGlvbi5zZXQoMCwgMS4yLCAwKTtcblxuICAgIC8vIEEgbW92aW5nIGhlYWQgaGFzIGFib3V0IDMyIGNtIGluIHdpZHRoXG4gICAgdGhpcy5vYmplY3RHcm91cC5zY2FsZS5tdWx0aXBseVNjYWxhcig5KTtcblxuICAgIHRoaXMuc2NlbmUuYWRkKHRoaXMub2JqZWN0R3JvdXApO1xuXG4gICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihmaXh0dXJlU2VydmljZTogRml4dHVyZVNlcnZpY2UsIHByZXZpZXdNZXNoU2VydmljZTogUHJldmlld01lc2hTZXJ2aWNlLCBmaXh0dXJlOiBDYWNoZWRGaXh0dXJlLCBzY2VuZTogYW55KSB7XG4gICAgc3VwZXIoZml4dHVyZVNlcnZpY2UsIGZpeHR1cmUsIHNjZW5lKTtcblxuICAgIGZvcmtKb2luKFtcbiAgICAgIHByZXZpZXdNZXNoU2VydmljZS5nZXRNZXNoKCdtb3ZpbmdfaGVhZF9zb2NrZXQnKSxcbiAgICAgIHByZXZpZXdNZXNoU2VydmljZS5nZXRNZXNoKCdtb3ZpbmdfaGVhZF9hcm0nKSxcbiAgICAgIHByZXZpZXdNZXNoU2VydmljZS5nZXRNZXNoKCdtb3ZpbmdfaGVhZF9oZWFkJyksXG4gICAgXSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKFtzb2NrZXQsIGFybSwgaGVhZF0pID0+IHtcbiAgICAgICAgICB0aGlzLnNvY2tldCA9IHNvY2tldDtcbiAgICAgICAgICB0aGlzLmFybSA9IGFybTtcbiAgICAgICAgICB0aGlzLmhlYWQgPSBoZWFkO1xuXG4gICAgICAgICAgdGhpcy5jcmVhdGVPYmplY3RzKCk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0T2JqZWN0KCk6IFRIUkVFLk9iamVjdDNEIHtcbiAgICByZXR1cm4gdGhpcy5vYmplY3RHcm91cDtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVQcmV2aWV3KGNoYW5uZWxWYWx1ZXM6IEZpeHR1cmVDaGFubmVsVmFsdWVbXSwgbWFzdGVyRGltbWVyVmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0xvYWRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN1cGVyLnVwZGF0ZVByZXZpZXcoY2hhbm5lbFZhbHVlcywgbWFzdGVyRGltbWVyVmFsdWUpO1xuXG4gICAgLy8gQXBwbHkgZGVmYXVsdCBzZXR0aW5nc1xuICAgIGxldCBwYW5TdGFydCA9IDA7XG4gICAgbGV0IHBhbkVuZCA9IDI1NTtcblxuICAgIGxldCB0aWx0U3RhcnQgPSAwO1xuICAgIGxldCB0aWx0RW5kID0gMjU1O1xuXG4gICAgdGhpcy5wYW4gPSAwO1xuICAgIHRoaXMudGlsdCA9IDA7XG5cbiAgICAvLyBBcHBseSB0aGUga25vd24gcHJvcGVydHkgdmFsdWVzXG4gICAgZm9yIChjb25zdCBjaGFubmVsVmFsdWUgb2YgY2hhbm5lbFZhbHVlcykge1xuICAgICAgY29uc3QgY2hhbm5lbCA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0Q2hhbm5lbEJ5TmFtZSh0aGlzLmZpeHR1cmUsIGNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSk7XG4gICAgICBjb25zdCBjYXBhYmlsaXR5ID0gdGhpcy5nZXRDYXBhYmlsaXR5SW5WYWx1ZShjaGFubmVsLCBjaGFubmVsVmFsdWUudmFsdWUpO1xuICAgICAgaWYgKGNhcGFiaWxpdHkpIHtcbiAgICAgICAgc3dpdGNoIChjYXBhYmlsaXR5LmNhcGFiaWxpdHkudHlwZSkge1xuICAgICAgICAgIGNhc2UgRml4dHVyZUNhcGFiaWxpdHlUeXBlLlBhbjoge1xuICAgICAgICAgICAgcGFuU3RhcnQgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldFJvdGF0aW9uQW5nbGVEZWcoY2FwYWJpbGl0eS5jYXBhYmlsaXR5LmFuZ2xlU3RhcnQpIHx8IDA7XG4gICAgICAgICAgICBwYW5FbmQgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldFJvdGF0aW9uQW5nbGVEZWcoY2FwYWJpbGl0eS5jYXBhYmlsaXR5LmFuZ2xlRW5kKSB8fCA1NDA7XG4gICAgICAgICAgICB0aGlzLnBhbiA9IGNoYW5uZWxWYWx1ZS52YWx1ZSAvIGNoYW5uZWwubWF4VmFsdWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuVGlsdDoge1xuICAgICAgICAgICAgdGlsdFN0YXJ0ID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRSb3RhdGlvbkFuZ2xlRGVnKGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5hbmdsZVN0YXJ0KSB8fCAwO1xuICAgICAgICAgICAgdGlsdEVuZCA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0Um90YXRpb25BbmdsZURlZyhjYXBhYmlsaXR5LmNhcGFiaWxpdHkuYW5nbGVFbmQpIHx8IDI3MDA7XG4gICAgICAgICAgICB0aGlzLnRpbHQgPSBjaGFubmVsVmFsdWUudmFsdWUgLyBjaGFubmVsLm1heFZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVQb3NpdGlvbih0aGlzLm9iamVjdEdyb3VwKTtcblxuICAgIC8vIGNhbGN1bGF0ZSB0aGUgeS94IHJvdGF0aW9uIGluIHJhZGlhbnRzIGJhc2VkIG9uIHBhbi90aWx0ICgwLTEpIHJlc3BlY3RpbmcgdGhlIG1heCBwYW4vdGlsdFxuICAgIHRoaXMuYXJtR3JvdXAucm90YXRpb24ueSA9IFRIUkVFLk1hdGhVdGlscy5kZWdUb1JhZChwYW5FbmQgKiB0aGlzLnBhbiArIHBhblN0YXJ0KSAtIFRIUkVFLk1hdGhVdGlscy5kZWdUb1JhZChwYW5FbmQgLyAyKTtcbiAgICB0aGlzLmhlYWRHcm91cC5yb3RhdGlvbi54ID0gVEhSRUUuTWF0aFV0aWxzLmRlZ1RvUmFkKHRpbHRFbmQgKiB0aGlzLnRpbHQgKyB0aWx0U3RhcnQpIC0gVEhSRUUuTWF0aFV0aWxzLmRlZ1RvUmFkKHRpbHRFbmQgLyAyKTtcblxuICAgIC8vIFVwZGF0ZSB0aGUgYW5nbGUgKG9ubHkgb24gY2hhbmdlLCBiZWNhdXNlIGl0J3MgZXhwZW5zaXZlKVxuICAgIC8vIFRPRE8gdXBkYXRlIHRoZSBjb3JyZWN0IGFuZ2xlIGZyb20gdGhlIHByb2ZpbGVcbiAgICBjb25zdCBiZWFtQW5nbGVEcmVncmVlcyA9IDE0O1xuICAgIGlmICh0aGlzLmxhc3RCZWFtQW5nbGVEZWdyZWVzICE9PSBiZWFtQW5nbGVEcmVncmVlcykge1xuICAgICAgdGhpcy5zcG90TGlnaHQuYW5nbGUgPSBUSFJFRS5NYXRoVXRpbHMuZGVnVG9SYWQoYmVhbUFuZ2xlRHJlZ3JlZXMpO1xuICAgICAgdGhpcy5jcmVhdGVTcG90TGlnaHRCZWFtKCk7XG4gICAgICB0aGlzLmxhc3RCZWFtQW5nbGVEZWdyZWVzID0gYmVhbUFuZ2xlRHJlZ3JlZXM7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHRoZSBtYXRlcmlhbFxuICAgIGlmICh0aGlzLmxhc3RTZWxlY3RlZCAhPT0gdGhpcy5pc1NlbGVjdGVkKSB7XG4gICAgICBpZiAodGhpcy5pc1NlbGVjdGVkKSB7XG4gICAgICAgIHRoaXMuc29ja2V0Lm1hdGVyaWFsID0gdGhpcy5zZWxlY3RlZE1hdGVyaWFsO1xuICAgICAgICB0aGlzLmFybS5tYXRlcmlhbCA9IHRoaXMuc2VsZWN0ZWRNYXRlcmlhbDtcbiAgICAgICAgdGhpcy5oZWFkLm1hdGVyaWFsID0gdGhpcy5zZWxlY3RlZE1hdGVyaWFsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zb2NrZXQubWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsO1xuICAgICAgICB0aGlzLmFybS5tYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWw7XG4gICAgICAgIHRoaXMuaGVhZC5tYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWw7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubGFzdFNlbGVjdGVkID0gdGhpcy5pc1NlbGVjdGVkO1xuICAgIH1cblxuICAgIC8vIHRoaXMuc3BvdExpZ2h0SGVscGVyLnVwZGF0ZSgpO1xuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLnNjZW5lLnJlbW92ZSh0aGlzLm9iamVjdEdyb3VwKTtcbiAgICB0aGlzLm1hdGVyaWFsLmRpc3Bvc2UoKTtcbiAgICB0aGlzLnNwb3RMaWdodEhlbHBlci5kaXNwb3NlKCk7XG4gIH1cbn1cbiJdfQ==
|