mage-engine 3.16.0 → 3.16.1
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/dist/mage.js +412 -612
- package/package.json +10 -10
package/dist/mage.js
CHANGED
|
@@ -1,17 +1,37 @@
|
|
|
1
|
-
function
|
|
2
|
-
|
|
1
|
+
function ownKeys(object, enumerableOnly) {
|
|
2
|
+
var keys = Object.keys(object);
|
|
3
3
|
|
|
4
|
-
if (
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
if (Object.getOwnPropertySymbols) {
|
|
5
|
+
var symbols = Object.getOwnPropertySymbols(object);
|
|
6
|
+
enumerableOnly && (symbols = symbols.filter(function (sym) {
|
|
7
|
+
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
8
|
+
})), keys.push.apply(keys, symbols);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
return keys;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function _objectSpread2(target) {
|
|
15
|
+
for (var i = 1; i < arguments.length; i++) {
|
|
16
|
+
var source = null != arguments[i] ? arguments[i] : {};
|
|
17
|
+
i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
|
|
18
|
+
_defineProperty(target, key, source[key]);
|
|
19
|
+
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {
|
|
20
|
+
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
21
|
+
});
|
|
12
22
|
}
|
|
13
23
|
|
|
14
|
-
return
|
|
24
|
+
return target;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function _typeof(obj) {
|
|
28
|
+
"@babel/helpers - typeof";
|
|
29
|
+
|
|
30
|
+
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
|
|
31
|
+
return typeof obj;
|
|
32
|
+
} : function (obj) {
|
|
33
|
+
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
|
|
34
|
+
}, _typeof(obj);
|
|
15
35
|
}
|
|
16
36
|
|
|
17
37
|
function _classCallCheck(instance, Constructor) {
|
|
@@ -33,6 +53,9 @@ function _defineProperties(target, props) {
|
|
|
33
53
|
function _createClass(Constructor, protoProps, staticProps) {
|
|
34
54
|
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
35
55
|
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
56
|
+
Object.defineProperty(Constructor, "prototype", {
|
|
57
|
+
writable: false
|
|
58
|
+
});
|
|
36
59
|
return Constructor;
|
|
37
60
|
}
|
|
38
61
|
|
|
@@ -51,40 +74,6 @@ function _defineProperty(obj, key, value) {
|
|
|
51
74
|
return obj;
|
|
52
75
|
}
|
|
53
76
|
|
|
54
|
-
function ownKeys(object, enumerableOnly) {
|
|
55
|
-
var keys = Object.keys(object);
|
|
56
|
-
|
|
57
|
-
if (Object.getOwnPropertySymbols) {
|
|
58
|
-
var symbols = Object.getOwnPropertySymbols(object);
|
|
59
|
-
if (enumerableOnly) symbols = symbols.filter(function (sym) {
|
|
60
|
-
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
61
|
-
});
|
|
62
|
-
keys.push.apply(keys, symbols);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
return keys;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
function _objectSpread2(target) {
|
|
69
|
-
for (var i = 1; i < arguments.length; i++) {
|
|
70
|
-
var source = arguments[i] != null ? arguments[i] : {};
|
|
71
|
-
|
|
72
|
-
if (i % 2) {
|
|
73
|
-
ownKeys(Object(source), true).forEach(function (key) {
|
|
74
|
-
_defineProperty(target, key, source[key]);
|
|
75
|
-
});
|
|
76
|
-
} else if (Object.getOwnPropertyDescriptors) {
|
|
77
|
-
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
|
78
|
-
} else {
|
|
79
|
-
ownKeys(Object(source)).forEach(function (key) {
|
|
80
|
-
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
return target;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
77
|
function _inherits(subClass, superClass) {
|
|
89
78
|
if (typeof superClass !== "function" && superClass !== null) {
|
|
90
79
|
throw new TypeError("Super expression must either be null or a function");
|
|
@@ -97,6 +86,9 @@ function _inherits(subClass, superClass) {
|
|
|
97
86
|
configurable: true
|
|
98
87
|
}
|
|
99
88
|
});
|
|
89
|
+
Object.defineProperty(subClass, "prototype", {
|
|
90
|
+
writable: false
|
|
91
|
+
});
|
|
100
92
|
if (superClass) _setPrototypeOf(subClass, superClass);
|
|
101
93
|
}
|
|
102
94
|
|
|
@@ -122,7 +114,7 @@ function _isNativeReflectConstruct() {
|
|
|
122
114
|
if (typeof Proxy === "function") return true;
|
|
123
115
|
|
|
124
116
|
try {
|
|
125
|
-
|
|
117
|
+
Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
|
|
126
118
|
return true;
|
|
127
119
|
} catch (e) {
|
|
128
120
|
return false;
|
|
@@ -176,6 +168,8 @@ function _assertThisInitialized(self) {
|
|
|
176
168
|
function _possibleConstructorReturn(self, call) {
|
|
177
169
|
if (call && (typeof call === "object" || typeof call === "function")) {
|
|
178
170
|
return call;
|
|
171
|
+
} else if (call !== void 0) {
|
|
172
|
+
throw new TypeError("Derived constructors may only return object or undefined");
|
|
179
173
|
}
|
|
180
174
|
|
|
181
175
|
return _assertThisInitialized(self);
|
|
@@ -209,7 +203,7 @@ function _superPropBase(object, property) {
|
|
|
209
203
|
return object;
|
|
210
204
|
}
|
|
211
205
|
|
|
212
|
-
function _get(
|
|
206
|
+
function _get() {
|
|
213
207
|
if (typeof Reflect !== "undefined" && Reflect.get) {
|
|
214
208
|
_get = Reflect.get;
|
|
215
209
|
} else {
|
|
@@ -220,14 +214,14 @@ function _get(target, property, receiver) {
|
|
|
220
214
|
var desc = Object.getOwnPropertyDescriptor(base, property);
|
|
221
215
|
|
|
222
216
|
if (desc.get) {
|
|
223
|
-
return desc.get.call(receiver);
|
|
217
|
+
return desc.get.call(arguments.length < 3 ? target : receiver);
|
|
224
218
|
}
|
|
225
219
|
|
|
226
220
|
return desc.value;
|
|
227
221
|
};
|
|
228
222
|
}
|
|
229
223
|
|
|
230
|
-
return _get(
|
|
224
|
+
return _get.apply(this, arguments);
|
|
231
225
|
}
|
|
232
226
|
|
|
233
227
|
function _toConsumableArray(arr) {
|
|
@@ -239,7 +233,7 @@ function _arrayWithoutHoles(arr) {
|
|
|
239
233
|
}
|
|
240
234
|
|
|
241
235
|
function _iterableToArray(iter) {
|
|
242
|
-
if (typeof Symbol !== "undefined" && Symbol.iterator
|
|
236
|
+
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
|
|
243
237
|
}
|
|
244
238
|
|
|
245
239
|
function _unsupportedIterableToArray(o, minLen) {
|
|
@@ -261,6 +255,63 @@ function _arrayLikeToArray(arr, len) {
|
|
|
261
255
|
|
|
262
256
|
function _nonIterableSpread() {
|
|
263
257
|
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
function _createForOfIteratorHelper(o, allowArrayLike) {
|
|
261
|
+
var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
|
|
262
|
+
|
|
263
|
+
if (!it) {
|
|
264
|
+
if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
|
|
265
|
+
if (it) o = it;
|
|
266
|
+
var i = 0;
|
|
267
|
+
|
|
268
|
+
var F = function () {};
|
|
269
|
+
|
|
270
|
+
return {
|
|
271
|
+
s: F,
|
|
272
|
+
n: function () {
|
|
273
|
+
if (i >= o.length) return {
|
|
274
|
+
done: true
|
|
275
|
+
};
|
|
276
|
+
return {
|
|
277
|
+
done: false,
|
|
278
|
+
value: o[i++]
|
|
279
|
+
};
|
|
280
|
+
},
|
|
281
|
+
e: function (e) {
|
|
282
|
+
throw e;
|
|
283
|
+
},
|
|
284
|
+
f: F
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
var normalCompletion = true,
|
|
292
|
+
didErr = false,
|
|
293
|
+
err;
|
|
294
|
+
return {
|
|
295
|
+
s: function () {
|
|
296
|
+
it = it.call(o);
|
|
297
|
+
},
|
|
298
|
+
n: function () {
|
|
299
|
+
var step = it.next();
|
|
300
|
+
normalCompletion = step.done;
|
|
301
|
+
return step;
|
|
302
|
+
},
|
|
303
|
+
e: function (e) {
|
|
304
|
+
didErr = true;
|
|
305
|
+
err = e;
|
|
306
|
+
},
|
|
307
|
+
f: function () {
|
|
308
|
+
try {
|
|
309
|
+
if (!normalCompletion && it.return != null) it.return();
|
|
310
|
+
} finally {
|
|
311
|
+
if (didErr) throw err;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
};
|
|
264
315
|
}var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
|
|
265
316
|
|
|
266
317
|
function createCommonjsModule(fn, basedir, module) {
|
|
@@ -53474,9 +53525,7 @@ if ( typeof window !== 'undefined' ) {
|
|
|
53474
53525
|
|
|
53475
53526
|
}
|
|
53476
53527
|
|
|
53477
|
-
}var three_module=/*#__PURE__*/Object.freeze({__proto__:null,ACESFilmicToneMapping: ACESFilmicToneMapping,AddEquation: AddEquation,AddOperation: AddOperation,AdditiveAnimationBlendMode: AdditiveAnimationBlendMode,AdditiveBlending: AdditiveBlending,AlphaFormat: AlphaFormat,AlwaysDepth: AlwaysDepth,AlwaysStencilFunc: AlwaysStencilFunc,AmbientLight: AmbientLight,AmbientLightProbe: AmbientLightProbe,AnimationClip: AnimationClip,AnimationLoader: AnimationLoader,AnimationMixer: AnimationMixer,AnimationObjectGroup: AnimationObjectGroup,AnimationUtils: AnimationUtils,ArcCurve: ArcCurve,ArrayCamera: ArrayCamera,ArrowHelper: ArrowHelper,Audio: Audio,AudioAnalyser: AudioAnalyser,AudioContext: AudioContext,AudioListener: AudioListener,AudioLoader: AudioLoader,AxesHelper: AxesHelper,AxisHelper: AxisHelper,BackSide: BackSide,BasicDepthPacking: BasicDepthPacking,BasicShadowMap: BasicShadowMap,BinaryTextureLoader: BinaryTextureLoader,Bone: Bone,BooleanKeyframeTrack: BooleanKeyframeTrack,BoundingBoxHelper: BoundingBoxHelper,Box2: Box2,Box3: Box3,Box3Helper: Box3Helper,BoxBufferGeometry: BoxGeometry,BoxGeometry: BoxGeometry,BoxHelper: BoxHelper,BufferAttribute: BufferAttribute,BufferGeometry: BufferGeometry,BufferGeometryLoader: BufferGeometryLoader,ByteType: ByteType,Cache: Cache,Camera: Camera,CameraHelper: CameraHelper,CanvasRenderer: CanvasRenderer,CanvasTexture: CanvasTexture,CatmullRomCurve3: CatmullRomCurve3,CineonToneMapping: CineonToneMapping,CircleBufferGeometry: CircleGeometry,CircleGeometry: CircleGeometry,ClampToEdgeWrapping: ClampToEdgeWrapping,Clock: Clock,Color: Color,ColorKeyframeTrack: ColorKeyframeTrack,CompressedTexture: CompressedTexture,CompressedTextureLoader: CompressedTextureLoader,ConeBufferGeometry: ConeGeometry,ConeGeometry: ConeGeometry,CubeCamera: CubeCamera,CubeReflectionMapping: CubeReflectionMapping,CubeRefractionMapping: CubeRefractionMapping,CubeTexture: CubeTexture,CubeTextureLoader: CubeTextureLoader,CubeUVReflectionMapping: CubeUVReflectionMapping,CubeUVRefractionMapping: CubeUVRefractionMapping,CubicBezierCurve: CubicBezierCurve,CubicBezierCurve3: CubicBezierCurve3,CubicInterpolant: CubicInterpolant,CullFaceBack: CullFaceBack,CullFaceFront: CullFaceFront,CullFaceFrontBack: CullFaceFrontBack,CullFaceNone: CullFaceNone,Curve: Curve,CurvePath: CurvePath,CustomBlending: CustomBlending,CustomToneMapping: CustomToneMapping,CylinderBufferGeometry: CylinderGeometry,CylinderGeometry: CylinderGeometry,Cylindrical: Cylindrical,DataTexture: DataTexture,DataTexture2DArray: DataTexture2DArray,DataTexture3D: DataTexture3D,DataTextureLoader: DataTextureLoader,DataUtils: DataUtils,DecrementStencilOp: DecrementStencilOp,DecrementWrapStencilOp: DecrementWrapStencilOp,DefaultLoadingManager: DefaultLoadingManager,DepthFormat: DepthFormat,DepthStencilFormat: DepthStencilFormat,DepthTexture: DepthTexture,DirectionalLight: DirectionalLight,DirectionalLightHelper: DirectionalLightHelper,DiscreteInterpolant: DiscreteInterpolant,DodecahedronBufferGeometry: DodecahedronGeometry,DodecahedronGeometry: DodecahedronGeometry,DoubleSide: DoubleSide,DstAlphaFactor: DstAlphaFactor,DstColorFactor: DstColorFactor,DynamicBufferAttribute: DynamicBufferAttribute,DynamicCopyUsage: DynamicCopyUsage,DynamicDrawUsage: DynamicDrawUsage,DynamicReadUsage: DynamicReadUsage,EdgesGeometry: EdgesGeometry,EdgesHelper: EdgesHelper,EllipseCurve: EllipseCurve,EqualDepth: EqualDepth,EqualStencilFunc: EqualStencilFunc,EquirectangularReflectionMapping: EquirectangularReflectionMapping,EquirectangularRefractionMapping: EquirectangularRefractionMapping,Euler: Euler,EventDispatcher: EventDispatcher,ExtrudeBufferGeometry: ExtrudeGeometry,ExtrudeGeometry: ExtrudeGeometry,FaceColors: FaceColors,FileLoader: FileLoader,FlatShading: FlatShading,Float16BufferAttribute: Float16BufferAttribute,Float32Attribute: Float32Attribute,Float32BufferAttribute: Float32BufferAttribute,Float64Attribute: Float64Attribute,Float64BufferAttribute: Float64BufferAttribute,FloatType: FloatType$1,Fog: Fog,FogExp2: FogExp2,Font: Font,FontLoader: FontLoader,FrontSide: FrontSide,Frustum: Frustum,GLBufferAttribute: GLBufferAttribute,GLSL1: GLSL1,GLSL3: GLSL3,GammaEncoding: GammaEncoding,GreaterDepth: GreaterDepth,GreaterEqualDepth: GreaterEqualDepth,GreaterEqualStencilFunc: GreaterEqualStencilFunc,GreaterStencilFunc: GreaterStencilFunc,GridHelper: GridHelper,Group: Group,HalfFloatType: HalfFloatType,HemisphereLight: HemisphereLight,HemisphereLightHelper: HemisphereLightHelper,HemisphereLightProbe: HemisphereLightProbe,IcosahedronBufferGeometry: IcosahedronGeometry,IcosahedronGeometry: IcosahedronGeometry,ImageBitmapLoader: ImageBitmapLoader,ImageLoader: ImageLoader,ImageUtils: ImageUtils,ImmediateRenderObject: ImmediateRenderObject,IncrementStencilOp: IncrementStencilOp,IncrementWrapStencilOp: IncrementWrapStencilOp,InstancedBufferAttribute: InstancedBufferAttribute,InstancedBufferGeometry: InstancedBufferGeometry,InstancedInterleavedBuffer: InstancedInterleavedBuffer,InstancedMesh: InstancedMesh,Int16Attribute: Int16Attribute,Int16BufferAttribute: Int16BufferAttribute,Int32Attribute: Int32Attribute,Int32BufferAttribute: Int32BufferAttribute,Int8Attribute: Int8Attribute,Int8BufferAttribute: Int8BufferAttribute,IntType: IntType,InterleavedBuffer: InterleavedBuffer,InterleavedBufferAttribute: InterleavedBufferAttribute,Interpolant: Interpolant,InterpolateDiscrete: InterpolateDiscrete,InterpolateLinear: InterpolateLinear,InterpolateSmooth: InterpolateSmooth,InvertStencilOp: InvertStencilOp,JSONLoader: JSONLoader,KeepStencilOp: KeepStencilOp,KeyframeTrack: KeyframeTrack,LOD: LOD,LatheBufferGeometry: LatheGeometry,LatheGeometry: LatheGeometry,Layers: Layers,LensFlare: LensFlare,LessDepth: LessDepth,LessEqualDepth: LessEqualDepth,LessEqualStencilFunc: LessEqualStencilFunc,LessStencilFunc: LessStencilFunc,Light: Light,LightProbe: LightProbe,Line: Line,Line3: Line3,LineBasicMaterial: LineBasicMaterial,LineCurve: LineCurve,LineCurve3: LineCurve3,LineDashedMaterial: LineDashedMaterial,LineLoop: LineLoop,LinePieces: LinePieces,LineSegments: LineSegments,LineStrip: LineStrip,LinearEncoding: LinearEncoding,LinearFilter: LinearFilter,LinearInterpolant: LinearInterpolant,LinearMipMapLinearFilter: LinearMipMapLinearFilter,LinearMipMapNearestFilter: LinearMipMapNearestFilter,LinearMipmapLinearFilter: LinearMipmapLinearFilter,LinearMipmapNearestFilter: LinearMipmapNearestFilter,LinearToneMapping: LinearToneMapping,Loader: Loader,LoaderUtils: LoaderUtils,LoadingManager: LoadingManager,LogLuvEncoding: LogLuvEncoding,LoopOnce: LoopOnce,LoopPingPong: LoopPingPong,LoopRepeat: LoopRepeat,LuminanceAlphaFormat: LuminanceAlphaFormat,LuminanceFormat: LuminanceFormat,MOUSE: MOUSE,Material: Material,MaterialLoader: MaterialLoader,Math: MathUtils,MathUtils: MathUtils,Matrix3: Matrix3,Matrix4: Matrix4,MaxEquation: MaxEquation,Mesh: Mesh,MeshBasicMaterial: MeshBasicMaterial,MeshDepthMaterial: MeshDepthMaterial,MeshDistanceMaterial: MeshDistanceMaterial,MeshFaceMaterial: MeshFaceMaterial,MeshLambertMaterial: MeshLambertMaterial,MeshMatcapMaterial: MeshMatcapMaterial,MeshNormalMaterial: MeshNormalMaterial,MeshPhongMaterial: MeshPhongMaterial,MeshPhysicalMaterial: MeshPhysicalMaterial,MeshStandardMaterial: MeshStandardMaterial,MeshToonMaterial: MeshToonMaterial,MinEquation: MinEquation,MirroredRepeatWrapping: MirroredRepeatWrapping,MixOperation: MixOperation,MultiMaterial: MultiMaterial,MultiplyBlending: MultiplyBlending,MultiplyOperation: MultiplyOperation,NearestFilter: NearestFilter,NearestMipMapLinearFilter: NearestMipMapLinearFilter,NearestMipMapNearestFilter: NearestMipMapNearestFilter,NearestMipmapLinearFilter: NearestMipmapLinearFilter,NearestMipmapNearestFilter: NearestMipmapNearestFilter,NeverDepth: NeverDepth,NeverStencilFunc: NeverStencilFunc,NoBlending: NoBlending,NoColors: NoColors,NoToneMapping: NoToneMapping,NormalAnimationBlendMode: NormalAnimationBlendMode,NormalBlending: NormalBlending,NotEqualDepth: NotEqualDepth,NotEqualStencilFunc: NotEqualStencilFunc,NumberKeyframeTrack: NumberKeyframeTrack,Object3D: Object3D,ObjectLoader: ObjectLoader,ObjectSpaceNormalMap: ObjectSpaceNormalMap,OctahedronBufferGeometry: OctahedronGeometry,OctahedronGeometry: OctahedronGeometry,OneFactor: OneFactor,OneMinusDstAlphaFactor: OneMinusDstAlphaFactor,OneMinusDstColorFactor: OneMinusDstColorFactor,OneMinusSrcAlphaFactor: OneMinusSrcAlphaFactor,OneMinusSrcColorFactor: OneMinusSrcColorFactor,OrthographicCamera: OrthographicCamera,PCFShadowMap: PCFShadowMap,PCFSoftShadowMap: PCFSoftShadowMap,PMREMGenerator: PMREMGenerator,ParametricBufferGeometry: ParametricGeometry,ParametricGeometry: ParametricGeometry,Particle: Particle,ParticleBasicMaterial: ParticleBasicMaterial,ParticleSystem: ParticleSystem,ParticleSystemMaterial: ParticleSystemMaterial,Path: Path,PerspectiveCamera: PerspectiveCamera,Plane: Plane,PlaneBufferGeometry: PlaneGeometry,PlaneGeometry: PlaneGeometry,PlaneHelper: PlaneHelper,PointCloud: PointCloud,PointCloudMaterial: PointCloudMaterial,PointLight: PointLight,PointLightHelper: PointLightHelper,Points: Points,PointsMaterial: PointsMaterial,PolarGridHelper: PolarGridHelper,PolyhedronBufferGeometry: PolyhedronGeometry,PolyhedronGeometry: PolyhedronGeometry,PositionalAudio: PositionalAudio,PropertyBinding: PropertyBinding,PropertyMixer: PropertyMixer,QuadraticBezierCurve: QuadraticBezierCurve,QuadraticBezierCurve3: QuadraticBezierCurve3,Quaternion: Quaternion,QuaternionKeyframeTrack: QuaternionKeyframeTrack,QuaternionLinearInterpolant: QuaternionLinearInterpolant,REVISION: REVISION,RGBADepthPacking: RGBADepthPacking,RGBAFormat: RGBAFormat,RGBAIntegerFormat: RGBAIntegerFormat,RGBA_ASTC_10x10_Format: RGBA_ASTC_10x10_Format,RGBA_ASTC_10x5_Format: RGBA_ASTC_10x5_Format,RGBA_ASTC_10x6_Format: RGBA_ASTC_10x6_Format,RGBA_ASTC_10x8_Format: RGBA_ASTC_10x8_Format,RGBA_ASTC_12x10_Format: RGBA_ASTC_12x10_Format,RGBA_ASTC_12x12_Format: RGBA_ASTC_12x12_Format,RGBA_ASTC_4x4_Format: RGBA_ASTC_4x4_Format,RGBA_ASTC_5x4_Format: RGBA_ASTC_5x4_Format,RGBA_ASTC_5x5_Format: RGBA_ASTC_5x5_Format,RGBA_ASTC_6x5_Format: RGBA_ASTC_6x5_Format,RGBA_ASTC_6x6_Format: RGBA_ASTC_6x6_Format,RGBA_ASTC_8x5_Format: RGBA_ASTC_8x5_Format,RGBA_ASTC_8x6_Format: RGBA_ASTC_8x6_Format,RGBA_ASTC_8x8_Format: RGBA_ASTC_8x8_Format,RGBA_BPTC_Format: RGBA_BPTC_Format,RGBA_ETC2_EAC_Format: RGBA_ETC2_EAC_Format,RGBA_PVRTC_2BPPV1_Format: RGBA_PVRTC_2BPPV1_Format,RGBA_PVRTC_4BPPV1_Format: RGBA_PVRTC_4BPPV1_Format,RGBA_S3TC_DXT1_Format: RGBA_S3TC_DXT1_Format,RGBA_S3TC_DXT3_Format: RGBA_S3TC_DXT3_Format,RGBA_S3TC_DXT5_Format: RGBA_S3TC_DXT5_Format,RGBDEncoding: RGBDEncoding,RGBEEncoding: RGBEEncoding,RGBEFormat: RGBEFormat,RGBFormat: RGBFormat,RGBIntegerFormat: RGBIntegerFormat,RGBM16Encoding: RGBM16Encoding,RGBM7Encoding: RGBM7Encoding,RGB_ETC1_Format: RGB_ETC1_Format,RGB_ETC2_Format: RGB_ETC2_Format,RGB_PVRTC_2BPPV1_Format: RGB_PVRTC_2BPPV1_Format,RGB_PVRTC_4BPPV1_Format: RGB_PVRTC_4BPPV1_Format,RGB_S3TC_DXT1_Format: RGB_S3TC_DXT1_Format,RGFormat: RGFormat,RGIntegerFormat: RGIntegerFormat,RawShaderMaterial: RawShaderMaterial,Ray: Ray,Raycaster: Raycaster,RectAreaLight: RectAreaLight,RedFormat: RedFormat,RedIntegerFormat: RedIntegerFormat,ReinhardToneMapping: ReinhardToneMapping,RepeatWrapping: RepeatWrapping$1,ReplaceStencilOp: ReplaceStencilOp,ReverseSubtractEquation: ReverseSubtractEquation,RingBufferGeometry: RingGeometry,RingGeometry: RingGeometry,SRGB8_ALPHA8_ASTC_10x10_Format: SRGB8_ALPHA8_ASTC_10x10_Format,SRGB8_ALPHA8_ASTC_10x5_Format: SRGB8_ALPHA8_ASTC_10x5_Format,SRGB8_ALPHA8_ASTC_10x6_Format: SRGB8_ALPHA8_ASTC_10x6_Format,SRGB8_ALPHA8_ASTC_10x8_Format: SRGB8_ALPHA8_ASTC_10x8_Format,SRGB8_ALPHA8_ASTC_12x10_Format: SRGB8_ALPHA8_ASTC_12x10_Format,SRGB8_ALPHA8_ASTC_12x12_Format: SRGB8_ALPHA8_ASTC_12x12_Format,SRGB8_ALPHA8_ASTC_4x4_Format: SRGB8_ALPHA8_ASTC_4x4_Format,SRGB8_ALPHA8_ASTC_5x4_Format: SRGB8_ALPHA8_ASTC_5x4_Format,SRGB8_ALPHA8_ASTC_5x5_Format: SRGB8_ALPHA8_ASTC_5x5_Format,SRGB8_ALPHA8_ASTC_6x5_Format: SRGB8_ALPHA8_ASTC_6x5_Format,SRGB8_ALPHA8_ASTC_6x6_Format: SRGB8_ALPHA8_ASTC_6x6_Format,SRGB8_ALPHA8_ASTC_8x5_Format: SRGB8_ALPHA8_ASTC_8x5_Format,SRGB8_ALPHA8_ASTC_8x6_Format: SRGB8_ALPHA8_ASTC_8x6_Format,SRGB8_ALPHA8_ASTC_8x8_Format: SRGB8_ALPHA8_ASTC_8x8_Format,Scene: Scene,SceneUtils: SceneUtils,ShaderChunk: ShaderChunk,ShaderLib: ShaderLib,ShaderMaterial: ShaderMaterial,ShadowMaterial: ShadowMaterial,Shape: Shape,ShapeBufferGeometry: ShapeGeometry,ShapeGeometry: ShapeGeometry,ShapePath: ShapePath,ShapeUtils: ShapeUtils,ShortType: ShortType,Skeleton: Skeleton,SkeletonHelper: SkeletonHelper,SkinnedMesh: SkinnedMesh,SmoothShading: SmoothShading,Sphere: Sphere,SphereBufferGeometry: SphereGeometry,SphereGeometry: SphereGeometry,Spherical: Spherical,SphericalHarmonics3: SphericalHarmonics3,SplineCurve: SplineCurve,SpotLight: SpotLight,SpotLightHelper: SpotLightHelper,Sprite: Sprite,SpriteMaterial: SpriteMaterial,SrcAlphaFactor: SrcAlphaFactor,SrcAlphaSaturateFactor: SrcAlphaSaturateFactor,SrcColorFactor: SrcColorFactor,StaticCopyUsage: StaticCopyUsage,StaticDrawUsage: StaticDrawUsage,StaticReadUsage: StaticReadUsage,StereoCamera: StereoCamera,StreamCopyUsage: StreamCopyUsage,StreamDrawUsage: StreamDrawUsage,StreamReadUsage: StreamReadUsage,StringKeyframeTrack: StringKeyframeTrack,SubtractEquation: SubtractEquation,SubtractiveBlending: SubtractiveBlending,TOUCH: TOUCH,TangentSpaceNormalMap: TangentSpaceNormalMap,TetrahedronBufferGeometry: TetrahedronGeometry,TetrahedronGeometry: TetrahedronGeometry,TextBufferGeometry: TextGeometry,TextGeometry: TextGeometry,Texture: Texture,TextureLoader: TextureLoader,TorusBufferGeometry: TorusGeometry,TorusGeometry: TorusGeometry,TorusKnotBufferGeometry: TorusKnotGeometry,TorusKnotGeometry: TorusKnotGeometry,Triangle: Triangle,TriangleFanDrawMode: TriangleFanDrawMode,TriangleStripDrawMode: TriangleStripDrawMode,TrianglesDrawMode: TrianglesDrawMode,TubeBufferGeometry: TubeGeometry,TubeGeometry: TubeGeometry,UVMapping: UVMapping,Uint16Attribute: Uint16Attribute,Uint16BufferAttribute: Uint16BufferAttribute,Uint32Attribute: Uint32Attribute,Uint32BufferAttribute: Uint32BufferAttribute,Uint8Attribute: Uint8Attribute,Uint8BufferAttribute: Uint8BufferAttribute,Uint8ClampedAttribute: Uint8ClampedAttribute,Uint8ClampedBufferAttribute: Uint8ClampedBufferAttribute,Uniform: Uniform,UniformsLib: UniformsLib,UniformsUtils: UniformsUtils,UnsignedByteType: UnsignedByteType,UnsignedInt248Type: UnsignedInt248Type,UnsignedIntType: UnsignedIntType,UnsignedShort4444Type: UnsignedShort4444Type,UnsignedShort5551Type: UnsignedShort5551Type,UnsignedShort565Type: UnsignedShort565Type,UnsignedShortType: UnsignedShortType,VSMShadowMap: VSMShadowMap,Vector2: Vector2,Vector3: Vector3$1,Vector4: Vector4,VectorKeyframeTrack: VectorKeyframeTrack,Vertex: Vertex,VertexColors: VertexColors,VideoTexture: VideoTexture,WebGL1Renderer: WebGL1Renderer,WebGLCubeRenderTarget: WebGLCubeRenderTarget,WebGLMultisampleRenderTarget: WebGLMultisampleRenderTarget,WebGLRenderTarget: WebGLRenderTarget,WebGLRenderTargetCube: WebGLRenderTargetCube,WebGLRenderer: WebGLRenderer,WebGLUtils: WebGLUtils,WireframeGeometry: WireframeGeometry,WireframeHelper: WireframeHelper,WrapAroundEnding: WrapAroundEnding,XHRLoader: XHRLoader,ZeroCurvatureEnding: ZeroCurvatureEnding,ZeroFactor: ZeroFactor,ZeroSlopeEnding: ZeroSlopeEnding,ZeroStencilOp: ZeroStencilOp,sRGBEncoding: sRGBEncoding});var BaseScript =
|
|
53478
|
-
/*#__PURE__*/
|
|
53479
|
-
function () {
|
|
53528
|
+
}var three_module=/*#__PURE__*/Object.freeze({__proto__:null,ACESFilmicToneMapping: ACESFilmicToneMapping,AddEquation: AddEquation,AddOperation: AddOperation,AdditiveAnimationBlendMode: AdditiveAnimationBlendMode,AdditiveBlending: AdditiveBlending,AlphaFormat: AlphaFormat,AlwaysDepth: AlwaysDepth,AlwaysStencilFunc: AlwaysStencilFunc,AmbientLight: AmbientLight,AmbientLightProbe: AmbientLightProbe,AnimationClip: AnimationClip,AnimationLoader: AnimationLoader,AnimationMixer: AnimationMixer,AnimationObjectGroup: AnimationObjectGroup,AnimationUtils: AnimationUtils,ArcCurve: ArcCurve,ArrayCamera: ArrayCamera,ArrowHelper: ArrowHelper,Audio: Audio,AudioAnalyser: AudioAnalyser,AudioContext: AudioContext,AudioListener: AudioListener,AudioLoader: AudioLoader,AxesHelper: AxesHelper,AxisHelper: AxisHelper,BackSide: BackSide,BasicDepthPacking: BasicDepthPacking,BasicShadowMap: BasicShadowMap,BinaryTextureLoader: BinaryTextureLoader,Bone: Bone,BooleanKeyframeTrack: BooleanKeyframeTrack,BoundingBoxHelper: BoundingBoxHelper,Box2: Box2,Box3: Box3,Box3Helper: Box3Helper,BoxBufferGeometry: BoxGeometry,BoxGeometry: BoxGeometry,BoxHelper: BoxHelper,BufferAttribute: BufferAttribute,BufferGeometry: BufferGeometry,BufferGeometryLoader: BufferGeometryLoader,ByteType: ByteType,Cache: Cache,Camera: Camera,CameraHelper: CameraHelper,CanvasRenderer: CanvasRenderer,CanvasTexture: CanvasTexture,CatmullRomCurve3: CatmullRomCurve3,CineonToneMapping: CineonToneMapping,CircleBufferGeometry: CircleGeometry,CircleGeometry: CircleGeometry,ClampToEdgeWrapping: ClampToEdgeWrapping,Clock: Clock,Color: Color,ColorKeyframeTrack: ColorKeyframeTrack,CompressedTexture: CompressedTexture,CompressedTextureLoader: CompressedTextureLoader,ConeBufferGeometry: ConeGeometry,ConeGeometry: ConeGeometry,CubeCamera: CubeCamera,CubeReflectionMapping: CubeReflectionMapping,CubeRefractionMapping: CubeRefractionMapping,CubeTexture: CubeTexture,CubeTextureLoader: CubeTextureLoader,CubeUVReflectionMapping: CubeUVReflectionMapping,CubeUVRefractionMapping: CubeUVRefractionMapping,CubicBezierCurve: CubicBezierCurve,CubicBezierCurve3: CubicBezierCurve3,CubicInterpolant: CubicInterpolant,CullFaceBack: CullFaceBack,CullFaceFront: CullFaceFront,CullFaceFrontBack: CullFaceFrontBack,CullFaceNone: CullFaceNone,Curve: Curve,CurvePath: CurvePath,CustomBlending: CustomBlending,CustomToneMapping: CustomToneMapping,CylinderBufferGeometry: CylinderGeometry,CylinderGeometry: CylinderGeometry,Cylindrical: Cylindrical,DataTexture: DataTexture,DataTexture2DArray: DataTexture2DArray,DataTexture3D: DataTexture3D,DataTextureLoader: DataTextureLoader,DataUtils: DataUtils,DecrementStencilOp: DecrementStencilOp,DecrementWrapStencilOp: DecrementWrapStencilOp,DefaultLoadingManager: DefaultLoadingManager,DepthFormat: DepthFormat,DepthStencilFormat: DepthStencilFormat,DepthTexture: DepthTexture,DirectionalLight: DirectionalLight,DirectionalLightHelper: DirectionalLightHelper,DiscreteInterpolant: DiscreteInterpolant,DodecahedronBufferGeometry: DodecahedronGeometry,DodecahedronGeometry: DodecahedronGeometry,DoubleSide: DoubleSide,DstAlphaFactor: DstAlphaFactor,DstColorFactor: DstColorFactor,DynamicBufferAttribute: DynamicBufferAttribute,DynamicCopyUsage: DynamicCopyUsage,DynamicDrawUsage: DynamicDrawUsage,DynamicReadUsage: DynamicReadUsage,EdgesGeometry: EdgesGeometry,EdgesHelper: EdgesHelper,EllipseCurve: EllipseCurve,EqualDepth: EqualDepth,EqualStencilFunc: EqualStencilFunc,EquirectangularReflectionMapping: EquirectangularReflectionMapping,EquirectangularRefractionMapping: EquirectangularRefractionMapping,Euler: Euler,EventDispatcher: EventDispatcher,ExtrudeBufferGeometry: ExtrudeGeometry,ExtrudeGeometry: ExtrudeGeometry,FaceColors: FaceColors,FileLoader: FileLoader,FlatShading: FlatShading,Float16BufferAttribute: Float16BufferAttribute,Float32Attribute: Float32Attribute,Float32BufferAttribute: Float32BufferAttribute,Float64Attribute: Float64Attribute,Float64BufferAttribute: Float64BufferAttribute,FloatType: FloatType$1,Fog: Fog,FogExp2: FogExp2,Font: Font,FontLoader: FontLoader,FrontSide: FrontSide,Frustum: Frustum,GLBufferAttribute: GLBufferAttribute,GLSL1: GLSL1,GLSL3: GLSL3,GammaEncoding: GammaEncoding,GreaterDepth: GreaterDepth,GreaterEqualDepth: GreaterEqualDepth,GreaterEqualStencilFunc: GreaterEqualStencilFunc,GreaterStencilFunc: GreaterStencilFunc,GridHelper: GridHelper,Group: Group,HalfFloatType: HalfFloatType,HemisphereLight: HemisphereLight,HemisphereLightHelper: HemisphereLightHelper,HemisphereLightProbe: HemisphereLightProbe,IcosahedronBufferGeometry: IcosahedronGeometry,IcosahedronGeometry: IcosahedronGeometry,ImageBitmapLoader: ImageBitmapLoader,ImageLoader: ImageLoader,ImageUtils: ImageUtils,ImmediateRenderObject: ImmediateRenderObject,IncrementStencilOp: IncrementStencilOp,IncrementWrapStencilOp: IncrementWrapStencilOp,InstancedBufferAttribute: InstancedBufferAttribute,InstancedBufferGeometry: InstancedBufferGeometry,InstancedInterleavedBuffer: InstancedInterleavedBuffer,InstancedMesh: InstancedMesh,Int16Attribute: Int16Attribute,Int16BufferAttribute: Int16BufferAttribute,Int32Attribute: Int32Attribute,Int32BufferAttribute: Int32BufferAttribute,Int8Attribute: Int8Attribute,Int8BufferAttribute: Int8BufferAttribute,IntType: IntType,InterleavedBuffer: InterleavedBuffer,InterleavedBufferAttribute: InterleavedBufferAttribute,Interpolant: Interpolant,InterpolateDiscrete: InterpolateDiscrete,InterpolateLinear: InterpolateLinear,InterpolateSmooth: InterpolateSmooth,InvertStencilOp: InvertStencilOp,JSONLoader: JSONLoader,KeepStencilOp: KeepStencilOp,KeyframeTrack: KeyframeTrack,LOD: LOD,LatheBufferGeometry: LatheGeometry,LatheGeometry: LatheGeometry,Layers: Layers,LensFlare: LensFlare,LessDepth: LessDepth,LessEqualDepth: LessEqualDepth,LessEqualStencilFunc: LessEqualStencilFunc,LessStencilFunc: LessStencilFunc,Light: Light,LightProbe: LightProbe,Line: Line,Line3: Line3,LineBasicMaterial: LineBasicMaterial,LineCurve: LineCurve,LineCurve3: LineCurve3,LineDashedMaterial: LineDashedMaterial,LineLoop: LineLoop,LinePieces: LinePieces,LineSegments: LineSegments,LineStrip: LineStrip,LinearEncoding: LinearEncoding,LinearFilter: LinearFilter,LinearInterpolant: LinearInterpolant,LinearMipMapLinearFilter: LinearMipMapLinearFilter,LinearMipMapNearestFilter: LinearMipMapNearestFilter,LinearMipmapLinearFilter: LinearMipmapLinearFilter,LinearMipmapNearestFilter: LinearMipmapNearestFilter,LinearToneMapping: LinearToneMapping,Loader: Loader,LoaderUtils: LoaderUtils,LoadingManager: LoadingManager,LogLuvEncoding: LogLuvEncoding,LoopOnce: LoopOnce,LoopPingPong: LoopPingPong,LoopRepeat: LoopRepeat,LuminanceAlphaFormat: LuminanceAlphaFormat,LuminanceFormat: LuminanceFormat,MOUSE: MOUSE,Material: Material,MaterialLoader: MaterialLoader,Math: MathUtils,MathUtils: MathUtils,Matrix3: Matrix3,Matrix4: Matrix4,MaxEquation: MaxEquation,Mesh: Mesh,MeshBasicMaterial: MeshBasicMaterial,MeshDepthMaterial: MeshDepthMaterial,MeshDistanceMaterial: MeshDistanceMaterial,MeshFaceMaterial: MeshFaceMaterial,MeshLambertMaterial: MeshLambertMaterial,MeshMatcapMaterial: MeshMatcapMaterial,MeshNormalMaterial: MeshNormalMaterial,MeshPhongMaterial: MeshPhongMaterial,MeshPhysicalMaterial: MeshPhysicalMaterial,MeshStandardMaterial: MeshStandardMaterial,MeshToonMaterial: MeshToonMaterial,MinEquation: MinEquation,MirroredRepeatWrapping: MirroredRepeatWrapping,MixOperation: MixOperation,MultiMaterial: MultiMaterial,MultiplyBlending: MultiplyBlending,MultiplyOperation: MultiplyOperation,NearestFilter: NearestFilter,NearestMipMapLinearFilter: NearestMipMapLinearFilter,NearestMipMapNearestFilter: NearestMipMapNearestFilter,NearestMipmapLinearFilter: NearestMipmapLinearFilter,NearestMipmapNearestFilter: NearestMipmapNearestFilter,NeverDepth: NeverDepth,NeverStencilFunc: NeverStencilFunc,NoBlending: NoBlending,NoColors: NoColors,NoToneMapping: NoToneMapping,NormalAnimationBlendMode: NormalAnimationBlendMode,NormalBlending: NormalBlending,NotEqualDepth: NotEqualDepth,NotEqualStencilFunc: NotEqualStencilFunc,NumberKeyframeTrack: NumberKeyframeTrack,Object3D: Object3D,ObjectLoader: ObjectLoader,ObjectSpaceNormalMap: ObjectSpaceNormalMap,OctahedronBufferGeometry: OctahedronGeometry,OctahedronGeometry: OctahedronGeometry,OneFactor: OneFactor,OneMinusDstAlphaFactor: OneMinusDstAlphaFactor,OneMinusDstColorFactor: OneMinusDstColorFactor,OneMinusSrcAlphaFactor: OneMinusSrcAlphaFactor,OneMinusSrcColorFactor: OneMinusSrcColorFactor,OrthographicCamera: OrthographicCamera,PCFShadowMap: PCFShadowMap,PCFSoftShadowMap: PCFSoftShadowMap,PMREMGenerator: PMREMGenerator,ParametricBufferGeometry: ParametricGeometry,ParametricGeometry: ParametricGeometry,Particle: Particle,ParticleBasicMaterial: ParticleBasicMaterial,ParticleSystem: ParticleSystem,ParticleSystemMaterial: ParticleSystemMaterial,Path: Path,PerspectiveCamera: PerspectiveCamera,Plane: Plane,PlaneBufferGeometry: PlaneGeometry,PlaneGeometry: PlaneGeometry,PlaneHelper: PlaneHelper,PointCloud: PointCloud,PointCloudMaterial: PointCloudMaterial,PointLight: PointLight,PointLightHelper: PointLightHelper,Points: Points,PointsMaterial: PointsMaterial,PolarGridHelper: PolarGridHelper,PolyhedronBufferGeometry: PolyhedronGeometry,PolyhedronGeometry: PolyhedronGeometry,PositionalAudio: PositionalAudio,PropertyBinding: PropertyBinding,PropertyMixer: PropertyMixer,QuadraticBezierCurve: QuadraticBezierCurve,QuadraticBezierCurve3: QuadraticBezierCurve3,Quaternion: Quaternion,QuaternionKeyframeTrack: QuaternionKeyframeTrack,QuaternionLinearInterpolant: QuaternionLinearInterpolant,REVISION: REVISION,RGBADepthPacking: RGBADepthPacking,RGBAFormat: RGBAFormat,RGBAIntegerFormat: RGBAIntegerFormat,RGBA_ASTC_10x10_Format: RGBA_ASTC_10x10_Format,RGBA_ASTC_10x5_Format: RGBA_ASTC_10x5_Format,RGBA_ASTC_10x6_Format: RGBA_ASTC_10x6_Format,RGBA_ASTC_10x8_Format: RGBA_ASTC_10x8_Format,RGBA_ASTC_12x10_Format: RGBA_ASTC_12x10_Format,RGBA_ASTC_12x12_Format: RGBA_ASTC_12x12_Format,RGBA_ASTC_4x4_Format: RGBA_ASTC_4x4_Format,RGBA_ASTC_5x4_Format: RGBA_ASTC_5x4_Format,RGBA_ASTC_5x5_Format: RGBA_ASTC_5x5_Format,RGBA_ASTC_6x5_Format: RGBA_ASTC_6x5_Format,RGBA_ASTC_6x6_Format: RGBA_ASTC_6x6_Format,RGBA_ASTC_8x5_Format: RGBA_ASTC_8x5_Format,RGBA_ASTC_8x6_Format: RGBA_ASTC_8x6_Format,RGBA_ASTC_8x8_Format: RGBA_ASTC_8x8_Format,RGBA_BPTC_Format: RGBA_BPTC_Format,RGBA_ETC2_EAC_Format: RGBA_ETC2_EAC_Format,RGBA_PVRTC_2BPPV1_Format: RGBA_PVRTC_2BPPV1_Format,RGBA_PVRTC_4BPPV1_Format: RGBA_PVRTC_4BPPV1_Format,RGBA_S3TC_DXT1_Format: RGBA_S3TC_DXT1_Format,RGBA_S3TC_DXT3_Format: RGBA_S3TC_DXT3_Format,RGBA_S3TC_DXT5_Format: RGBA_S3TC_DXT5_Format,RGBDEncoding: RGBDEncoding,RGBEEncoding: RGBEEncoding,RGBEFormat: RGBEFormat,RGBFormat: RGBFormat,RGBIntegerFormat: RGBIntegerFormat,RGBM16Encoding: RGBM16Encoding,RGBM7Encoding: RGBM7Encoding,RGB_ETC1_Format: RGB_ETC1_Format,RGB_ETC2_Format: RGB_ETC2_Format,RGB_PVRTC_2BPPV1_Format: RGB_PVRTC_2BPPV1_Format,RGB_PVRTC_4BPPV1_Format: RGB_PVRTC_4BPPV1_Format,RGB_S3TC_DXT1_Format: RGB_S3TC_DXT1_Format,RGFormat: RGFormat,RGIntegerFormat: RGIntegerFormat,RawShaderMaterial: RawShaderMaterial,Ray: Ray,Raycaster: Raycaster,RectAreaLight: RectAreaLight,RedFormat: RedFormat,RedIntegerFormat: RedIntegerFormat,ReinhardToneMapping: ReinhardToneMapping,RepeatWrapping: RepeatWrapping$1,ReplaceStencilOp: ReplaceStencilOp,ReverseSubtractEquation: ReverseSubtractEquation,RingBufferGeometry: RingGeometry,RingGeometry: RingGeometry,SRGB8_ALPHA8_ASTC_10x10_Format: SRGB8_ALPHA8_ASTC_10x10_Format,SRGB8_ALPHA8_ASTC_10x5_Format: SRGB8_ALPHA8_ASTC_10x5_Format,SRGB8_ALPHA8_ASTC_10x6_Format: SRGB8_ALPHA8_ASTC_10x6_Format,SRGB8_ALPHA8_ASTC_10x8_Format: SRGB8_ALPHA8_ASTC_10x8_Format,SRGB8_ALPHA8_ASTC_12x10_Format: SRGB8_ALPHA8_ASTC_12x10_Format,SRGB8_ALPHA8_ASTC_12x12_Format: SRGB8_ALPHA8_ASTC_12x12_Format,SRGB8_ALPHA8_ASTC_4x4_Format: SRGB8_ALPHA8_ASTC_4x4_Format,SRGB8_ALPHA8_ASTC_5x4_Format: SRGB8_ALPHA8_ASTC_5x4_Format,SRGB8_ALPHA8_ASTC_5x5_Format: SRGB8_ALPHA8_ASTC_5x5_Format,SRGB8_ALPHA8_ASTC_6x5_Format: SRGB8_ALPHA8_ASTC_6x5_Format,SRGB8_ALPHA8_ASTC_6x6_Format: SRGB8_ALPHA8_ASTC_6x6_Format,SRGB8_ALPHA8_ASTC_8x5_Format: SRGB8_ALPHA8_ASTC_8x5_Format,SRGB8_ALPHA8_ASTC_8x6_Format: SRGB8_ALPHA8_ASTC_8x6_Format,SRGB8_ALPHA8_ASTC_8x8_Format: SRGB8_ALPHA8_ASTC_8x8_Format,Scene: Scene,SceneUtils: SceneUtils,ShaderChunk: ShaderChunk,ShaderLib: ShaderLib,ShaderMaterial: ShaderMaterial,ShadowMaterial: ShadowMaterial,Shape: Shape,ShapeBufferGeometry: ShapeGeometry,ShapeGeometry: ShapeGeometry,ShapePath: ShapePath,ShapeUtils: ShapeUtils,ShortType: ShortType,Skeleton: Skeleton,SkeletonHelper: SkeletonHelper,SkinnedMesh: SkinnedMesh,SmoothShading: SmoothShading,Sphere: Sphere,SphereBufferGeometry: SphereGeometry,SphereGeometry: SphereGeometry,Spherical: Spherical,SphericalHarmonics3: SphericalHarmonics3,SplineCurve: SplineCurve,SpotLight: SpotLight,SpotLightHelper: SpotLightHelper,Sprite: Sprite,SpriteMaterial: SpriteMaterial,SrcAlphaFactor: SrcAlphaFactor,SrcAlphaSaturateFactor: SrcAlphaSaturateFactor,SrcColorFactor: SrcColorFactor,StaticCopyUsage: StaticCopyUsage,StaticDrawUsage: StaticDrawUsage,StaticReadUsage: StaticReadUsage,StereoCamera: StereoCamera,StreamCopyUsage: StreamCopyUsage,StreamDrawUsage: StreamDrawUsage,StreamReadUsage: StreamReadUsage,StringKeyframeTrack: StringKeyframeTrack,SubtractEquation: SubtractEquation,SubtractiveBlending: SubtractiveBlending,TOUCH: TOUCH,TangentSpaceNormalMap: TangentSpaceNormalMap,TetrahedronBufferGeometry: TetrahedronGeometry,TetrahedronGeometry: TetrahedronGeometry,TextBufferGeometry: TextGeometry,TextGeometry: TextGeometry,Texture: Texture,TextureLoader: TextureLoader,TorusBufferGeometry: TorusGeometry,TorusGeometry: TorusGeometry,TorusKnotBufferGeometry: TorusKnotGeometry,TorusKnotGeometry: TorusKnotGeometry,Triangle: Triangle,TriangleFanDrawMode: TriangleFanDrawMode,TriangleStripDrawMode: TriangleStripDrawMode,TrianglesDrawMode: TrianglesDrawMode,TubeBufferGeometry: TubeGeometry,TubeGeometry: TubeGeometry,UVMapping: UVMapping,Uint16Attribute: Uint16Attribute,Uint16BufferAttribute: Uint16BufferAttribute,Uint32Attribute: Uint32Attribute,Uint32BufferAttribute: Uint32BufferAttribute,Uint8Attribute: Uint8Attribute,Uint8BufferAttribute: Uint8BufferAttribute,Uint8ClampedAttribute: Uint8ClampedAttribute,Uint8ClampedBufferAttribute: Uint8ClampedBufferAttribute,Uniform: Uniform,UniformsLib: UniformsLib,UniformsUtils: UniformsUtils,UnsignedByteType: UnsignedByteType,UnsignedInt248Type: UnsignedInt248Type,UnsignedIntType: UnsignedIntType,UnsignedShort4444Type: UnsignedShort4444Type,UnsignedShort5551Type: UnsignedShort5551Type,UnsignedShort565Type: UnsignedShort565Type,UnsignedShortType: UnsignedShortType,VSMShadowMap: VSMShadowMap,Vector2: Vector2,Vector3: Vector3$1,Vector4: Vector4,VectorKeyframeTrack: VectorKeyframeTrack,Vertex: Vertex,VertexColors: VertexColors,VideoTexture: VideoTexture,WebGL1Renderer: WebGL1Renderer,WebGLCubeRenderTarget: WebGLCubeRenderTarget,WebGLMultisampleRenderTarget: WebGLMultisampleRenderTarget,WebGLRenderTarget: WebGLRenderTarget,WebGLRenderTargetCube: WebGLRenderTargetCube,WebGLRenderer: WebGLRenderer,WebGLUtils: WebGLUtils,WireframeGeometry: WireframeGeometry,WireframeHelper: WireframeHelper,WrapAroundEnding: WrapAroundEnding,XHRLoader: XHRLoader,ZeroCurvatureEnding: ZeroCurvatureEnding,ZeroFactor: ZeroFactor,ZeroSlopeEnding: ZeroSlopeEnding,ZeroStencilOp: ZeroStencilOp,sRGBEncoding: sRGBEncoding});var BaseScript = /*#__PURE__*/function () {
|
|
53480
53529
|
_createClass(BaseScript, [{
|
|
53481
53530
|
key: "__check",
|
|
53482
53531
|
value: function __check() {
|
|
@@ -54104,9 +54153,7 @@ var AUDIO_UNABLE_TO_LOAD_SOUND = "".concat(PREFIX, " Unable to load sound, sorry
|
|
|
54104
54153
|
};
|
|
54105
54154
|
var COMBINATION_DIVIDER = '+';
|
|
54106
54155
|
|
|
54107
|
-
var Keyboard =
|
|
54108
|
-
/*#__PURE__*/
|
|
54109
|
-
function () {
|
|
54156
|
+
var Keyboard = /*#__PURE__*/function () {
|
|
54110
54157
|
function Keyboard() {
|
|
54111
54158
|
var _this = this;
|
|
54112
54159
|
|
|
@@ -54245,9 +54292,7 @@ var createElementFromSelector = function createElementFromSelector(selector) {
|
|
|
54245
54292
|
var DEFAULT_WIDTH = 800;
|
|
54246
54293
|
var DEFAULT_RATIO = DEFAULT_WIDTH / DEFAULT_HEIGHT;
|
|
54247
54294
|
|
|
54248
|
-
var Config =
|
|
54249
|
-
/*#__PURE__*/
|
|
54250
|
-
function () {
|
|
54295
|
+
var Config = /*#__PURE__*/function () {
|
|
54251
54296
|
function Config() {
|
|
54252
54297
|
_classCallCheck(this, Config);
|
|
54253
54298
|
|
|
@@ -54295,9 +54340,9 @@ function () {
|
|
|
54295
54340
|
value: function setConfig(config) {
|
|
54296
54341
|
if (this.isDefault) {
|
|
54297
54342
|
this.isDefault = false;
|
|
54298
|
-
this.config = _objectSpread2({}, this.default,
|
|
54343
|
+
this.config = _objectSpread2(_objectSpread2({}, this.default), config);
|
|
54299
54344
|
} else {
|
|
54300
|
-
this.config = _objectSpread2({}, this.config, {
|
|
54345
|
+
this.config = _objectSpread2(_objectSpread2({}, this.config), {}, {
|
|
54301
54346
|
config: config
|
|
54302
54347
|
});
|
|
54303
54348
|
}
|
|
@@ -54374,7 +54419,7 @@ function () {
|
|
|
54374
54419
|
w = _ref.w,
|
|
54375
54420
|
ratio = _ref.ratio;
|
|
54376
54421
|
|
|
54377
|
-
this.config.screen = _objectSpread2({}, this.config.screen, {
|
|
54422
|
+
this.config.screen = _objectSpread2(_objectSpread2({}, this.config.screen), {}, {
|
|
54378
54423
|
h: h,
|
|
54379
54424
|
w: w,
|
|
54380
54425
|
ratio: ratio,
|
|
@@ -54402,9 +54447,7 @@ function () {
|
|
|
54402
54447
|
return Config;
|
|
54403
54448
|
}();
|
|
54404
54449
|
|
|
54405
|
-
var Config$1 = new Config();var Universe =
|
|
54406
|
-
/*#__PURE__*/
|
|
54407
|
-
function () {
|
|
54450
|
+
var Config$1 = new Config();var Universe = /*#__PURE__*/function () {
|
|
54408
54451
|
function Universe() {
|
|
54409
54452
|
var _this = this;
|
|
54410
54453
|
|
|
@@ -54632,9 +54675,7 @@ var HASH_CHANGE = 'hashchange';var lib_constants=/*#__PURE__*/Object.freeze({__p
|
|
|
54632
54675
|
};
|
|
54633
54676
|
var isLevelName = function isLevelName(level) {
|
|
54634
54677
|
return level.startsWith(DIVIDER);
|
|
54635
|
-
};var Images =
|
|
54636
|
-
/*#__PURE__*/
|
|
54637
|
-
function () {
|
|
54678
|
+
};var Images = /*#__PURE__*/function () {
|
|
54638
54679
|
function Images() {
|
|
54639
54680
|
var _this = this;
|
|
54640
54681
|
|
|
@@ -54767,9 +54808,7 @@ var Images$1 = new Images();var mapShadowTypeToShadowMap = function mapShadowTyp
|
|
|
54767
54808
|
|
|
54768
54809
|
var shadowType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_SHADOWTYPE;
|
|
54769
54810
|
return (_SHADOW_TYPES$BASIC$S = {}, _defineProperty(_SHADOW_TYPES$BASIC$S, SHADOW_TYPES.BASIC, BasicShadowMap), _defineProperty(_SHADOW_TYPES$BASIC$S, SHADOW_TYPES.SOFT, PCFSoftShadowMap), _defineProperty(_SHADOW_TYPES$BASIC$S, SHADOW_TYPES.HARD, PCFShadowMap), _SHADOW_TYPES$BASIC$S)[shadowType] || BasicShadowMap;
|
|
54770
|
-
};var Scene$1 =
|
|
54771
|
-
/*#__PURE__*/
|
|
54772
|
-
function () {
|
|
54811
|
+
};var Scene$1 = /*#__PURE__*/function () {
|
|
54773
54812
|
function Scene$1() {
|
|
54774
54813
|
var _this = this;
|
|
54775
54814
|
|
|
@@ -55074,9 +55113,7 @@ var MOUSE_MOVE = 'mouseMove';
|
|
|
55074
55113
|
var ELEMENT_CLICK = 'elementClick';
|
|
55075
55114
|
var ELEMENT_DESELECT = 'elementDeselect';
|
|
55076
55115
|
|
|
55077
|
-
var Mouse =
|
|
55078
|
-
/*#__PURE__*/
|
|
55079
|
-
function (_EventDispatcher) {
|
|
55116
|
+
var Mouse = /*#__PURE__*/function (_EventDispatcher) {
|
|
55080
55117
|
_inherits(Mouse, _EventDispatcher);
|
|
55081
55118
|
|
|
55082
55119
|
var _super = _createSuper(Mouse);
|
|
@@ -55265,9 +55302,7 @@ function (_EventDispatcher) {
|
|
|
55265
55302
|
GAMEPADAPI: 'gamepadapi',
|
|
55266
55303
|
MEMORY: 'memory'
|
|
55267
55304
|
};
|
|
55268
|
-
var Features =
|
|
55269
|
-
/*#__PURE__*/
|
|
55270
|
-
function () {
|
|
55305
|
+
var Features = /*#__PURE__*/function () {
|
|
55271
55306
|
function Features() {
|
|
55272
55307
|
_classCallCheck(this, Features);
|
|
55273
55308
|
|
|
@@ -56199,7 +56234,7 @@ function applyMiddleware() {
|
|
|
56199
56234
|
|
|
56200
56235
|
var thunk = createThunkMiddleware();
|
|
56201
56236
|
thunk.withExtraArgument = createThunkMiddleware;var name = "mage-engine";
|
|
56202
|
-
var version = "3.16.
|
|
56237
|
+
var version = "3.16.1";
|
|
56203
56238
|
var description = "A WebGL Javascript Game Engine, built on top of THREE.js and many other libraries.";
|
|
56204
56239
|
var main = "dist/mage.js";
|
|
56205
56240
|
var author = {
|
|
@@ -56256,20 +56291,20 @@ var dependencies = {
|
|
|
56256
56291
|
xstate: "^4.8.0"
|
|
56257
56292
|
};
|
|
56258
56293
|
var devDependencies = {
|
|
56259
|
-
"@babel/cli": "
|
|
56260
|
-
"@babel/core": "
|
|
56261
|
-
"@babel/node": "7.
|
|
56262
|
-
"@babel/plugin-proposal-class-properties": "7.
|
|
56263
|
-
"@babel/polyfill": "7.
|
|
56264
|
-
"@babel/preset-env": "7.
|
|
56265
|
-
"@babel/register": "7.
|
|
56294
|
+
"@babel/cli": "7.17.3",
|
|
56295
|
+
"@babel/core": "7.17.5",
|
|
56296
|
+
"@babel/node": "7.16.8",
|
|
56297
|
+
"@babel/plugin-proposal-class-properties": "7.16.7",
|
|
56298
|
+
"@babel/polyfill": "7.12.1",
|
|
56299
|
+
"@babel/preset-env": "7.16.11",
|
|
56300
|
+
"@babel/register": "7.17.0",
|
|
56266
56301
|
"@rollup/plugin-babel": "^5.2.1",
|
|
56267
56302
|
"@rollup/plugin-commonjs": "^16.0.0",
|
|
56268
56303
|
"@rollup/plugin-json": "4.0.1",
|
|
56269
56304
|
"@rollup/plugin-node-resolve": "^10.0.0",
|
|
56270
56305
|
"@rollup/plugin-replace": "^2.3.4",
|
|
56271
|
-
"babel-loader": "8.
|
|
56272
|
-
"babel-plugin-inferno": "6.
|
|
56306
|
+
"babel-loader": "8.2.3",
|
|
56307
|
+
"babel-plugin-inferno": "6.3.0",
|
|
56273
56308
|
concurrently: "^5.3.0",
|
|
56274
56309
|
"http-server": "^0.12.3",
|
|
56275
56310
|
rimraf: "^3.0.0",
|
|
@@ -56310,12 +56345,12 @@ var storage = (function () {
|
|
|
56310
56345
|
|
|
56311
56346
|
switch (action.type) {
|
|
56312
56347
|
case SAVE_STARTED:
|
|
56313
|
-
return _objectSpread2({}, state, {
|
|
56348
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56314
56349
|
saving: true
|
|
56315
56350
|
});
|
|
56316
56351
|
|
|
56317
56352
|
case SAVE_COMPLETED:
|
|
56318
|
-
return _objectSpread2({}, state, {
|
|
56353
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56319
56354
|
saving: false,
|
|
56320
56355
|
error: false,
|
|
56321
56356
|
sceneName: action.currentScene,
|
|
@@ -56324,25 +56359,25 @@ var storage = (function () {
|
|
|
56324
56359
|
});
|
|
56325
56360
|
|
|
56326
56361
|
case SAVE_ERROR:
|
|
56327
|
-
return _objectSpread2({}, state, {
|
|
56362
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56328
56363
|
saving: false,
|
|
56329
56364
|
error: true,
|
|
56330
56365
|
errorDetails: action.errorDetails
|
|
56331
56366
|
});
|
|
56332
56367
|
|
|
56333
56368
|
case LOAD_STARTED:
|
|
56334
|
-
return _objectSpread2({}, state, {
|
|
56369
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56335
56370
|
loading: true
|
|
56336
56371
|
});
|
|
56337
56372
|
|
|
56338
56373
|
case LOAD_COMPLETED:
|
|
56339
|
-
return _objectSpread2({}, state, {
|
|
56374
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56340
56375
|
loading: false,
|
|
56341
56376
|
error: false
|
|
56342
56377
|
});
|
|
56343
56378
|
|
|
56344
56379
|
case LOAD_ERROR:
|
|
56345
|
-
return _objectSpread2({}, state, {
|
|
56380
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56346
56381
|
loading: false,
|
|
56347
56382
|
error: true,
|
|
56348
56383
|
errorDetails: action.errorDetails
|
|
@@ -56363,52 +56398,52 @@ var input = (function () {
|
|
|
56363
56398
|
|
|
56364
56399
|
switch (action.type) {
|
|
56365
56400
|
case INPUT_ENABLED:
|
|
56366
|
-
return _objectSpread2({}, state, {
|
|
56401
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56367
56402
|
keyboard: true,
|
|
56368
56403
|
mouse: true,
|
|
56369
56404
|
gamepad: true
|
|
56370
56405
|
});
|
|
56371
56406
|
|
|
56372
56407
|
case KEYBOARD_ENABLED:
|
|
56373
|
-
return _objectSpread2({}, state, {
|
|
56408
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56374
56409
|
keyboard: true
|
|
56375
56410
|
});
|
|
56376
56411
|
|
|
56377
56412
|
case MOUSE_ENABLED:
|
|
56378
|
-
return _objectSpread2({}, state, {
|
|
56413
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56379
56414
|
mouse: true
|
|
56380
56415
|
});
|
|
56381
56416
|
|
|
56382
56417
|
case GAMEPAD_ENABLED:
|
|
56383
|
-
return _objectSpread2({}, state, {
|
|
56418
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56384
56419
|
gamepad: true
|
|
56385
56420
|
});
|
|
56386
56421
|
|
|
56387
56422
|
case INPUT_DISABLED:
|
|
56388
|
-
return _objectSpread2({}, state, {
|
|
56423
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56389
56424
|
keyboard: false,
|
|
56390
56425
|
mouse: false,
|
|
56391
56426
|
gamepad: false
|
|
56392
56427
|
});
|
|
56393
56428
|
|
|
56394
56429
|
case KEYBOARD_DISABLED:
|
|
56395
|
-
return _objectSpread2({}, state, {
|
|
56430
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56396
56431
|
keyboard: false
|
|
56397
56432
|
});
|
|
56398
56433
|
|
|
56399
56434
|
case MOUSE_DISABLED:
|
|
56400
|
-
return _objectSpread2({}, state, {
|
|
56435
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56401
56436
|
mouse: false
|
|
56402
56437
|
});
|
|
56403
56438
|
|
|
56404
56439
|
case GAMEPAD_DISABLED:
|
|
56405
|
-
return _objectSpread2({}, state, {
|
|
56440
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56406
56441
|
gamepad: false
|
|
56407
56442
|
});
|
|
56408
56443
|
|
|
56409
56444
|
case GAMEPAD_CONNECTED:
|
|
56410
56445
|
case GAMEPAD_DISCONNECTED:
|
|
56411
|
-
return _objectSpread2({}, state, {
|
|
56446
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56412
56447
|
gamepads: action.gamepads
|
|
56413
56448
|
});
|
|
56414
56449
|
|
|
@@ -56424,7 +56459,7 @@ var network = (function () {
|
|
|
56424
56459
|
|
|
56425
56460
|
switch (action.type) {
|
|
56426
56461
|
case NETWORK_CHANGED:
|
|
56427
|
-
return _objectSpread2({}, state, {
|
|
56462
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56428
56463
|
isOnline: action.isOnline
|
|
56429
56464
|
});
|
|
56430
56465
|
|
|
@@ -56440,7 +56475,7 @@ var ui = (function () {
|
|
|
56440
56475
|
|
|
56441
56476
|
switch (action.type) {
|
|
56442
56477
|
case UI_LOADING_SCREEN:
|
|
56443
|
-
return _objectSpread2({}, state, {
|
|
56478
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56444
56479
|
loadingScreenVisible: action.loadingScreenVisible
|
|
56445
56480
|
});
|
|
56446
56481
|
|
|
@@ -56456,7 +56491,7 @@ var location$1 = (function () {
|
|
|
56456
56491
|
|
|
56457
56492
|
switch (action.type) {
|
|
56458
56493
|
case LOCATION_PATH_CHANGE:
|
|
56459
|
-
return _objectSpread2({}, state, {
|
|
56494
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56460
56495
|
path: action.path
|
|
56461
56496
|
});
|
|
56462
56497
|
|
|
@@ -56468,7 +56503,7 @@ var location$1 = (function () {
|
|
|
56468
56503
|
switch (action.type) {
|
|
56469
56504
|
case RESET:
|
|
56470
56505
|
if (Object.keys(action.state).length > 0) {
|
|
56471
|
-
return _objectSpread2({}, state,
|
|
56506
|
+
return _objectSpread2(_objectSpread2({}, state), action.state);
|
|
56472
56507
|
} else {
|
|
56473
56508
|
return state;
|
|
56474
56509
|
}
|
|
@@ -56518,7 +56553,7 @@ var defaultMiddleware = function defaultMiddleware() {
|
|
|
56518
56553
|
|
|
56519
56554
|
var combineReducers$1 = function combineReducers$1() {
|
|
56520
56555
|
var reducers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
56521
|
-
return combineReducers(_objectSpread2({}, reducers,
|
|
56556
|
+
return combineReducers(_objectSpread2(_objectSpread2({}, reducers), DEFAULT_REDUCERS));
|
|
56522
56557
|
};
|
|
56523
56558
|
|
|
56524
56559
|
var getState = function getState() {
|
|
@@ -56577,12 +56612,12 @@ var getConnectedGamepads = function getConnectedGamepads() {
|
|
|
56577
56612
|
var list = navigator.getGamepads ? navigator.getGamepads() : navigator.webkitGetGamepads ? navigator.webkitGetGamepads() : [];
|
|
56578
56613
|
if (typeof list === 'array') return list;
|
|
56579
56614
|
var gamepads = [];
|
|
56580
|
-
|
|
56581
|
-
var
|
|
56582
|
-
|
|
56615
|
+
|
|
56616
|
+
var _iterator = _createForOfIteratorHelper(navigator.getGamepads()),
|
|
56617
|
+
_step;
|
|
56583
56618
|
|
|
56584
56619
|
try {
|
|
56585
|
-
for (
|
|
56620
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
56586
56621
|
var gamepad = _step.value;
|
|
56587
56622
|
|
|
56588
56623
|
if (isValidGamepad(gamepad)) {
|
|
@@ -56590,18 +56625,9 @@ var getConnectedGamepads = function getConnectedGamepads() {
|
|
|
56590
56625
|
}
|
|
56591
56626
|
}
|
|
56592
56627
|
} catch (err) {
|
|
56593
|
-
|
|
56594
|
-
_iteratorError = err;
|
|
56628
|
+
_iterator.e(err);
|
|
56595
56629
|
} finally {
|
|
56596
|
-
|
|
56597
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
56598
|
-
_iterator.return();
|
|
56599
|
-
}
|
|
56600
|
-
} finally {
|
|
56601
|
-
if (_didIteratorError) {
|
|
56602
|
-
throw _iteratorError;
|
|
56603
|
-
}
|
|
56604
|
-
}
|
|
56630
|
+
_iterator.f();
|
|
56605
56631
|
}
|
|
56606
56632
|
|
|
56607
56633
|
return gamepads;
|
|
@@ -56626,9 +56652,7 @@ var parseButton = function parseButton(button, index) {
|
|
|
56626
56652
|
};
|
|
56627
56653
|
};
|
|
56628
56654
|
|
|
56629
|
-
var Gamepad =
|
|
56630
|
-
/*#__PURE__*/
|
|
56631
|
-
function (_EventDispatcher) {
|
|
56655
|
+
var Gamepad = /*#__PURE__*/function (_EventDispatcher) {
|
|
56632
56656
|
_inherits(Gamepad, _EventDispatcher);
|
|
56633
56657
|
|
|
56634
56658
|
var _super = _createSuper(Gamepad);
|
|
@@ -56834,9 +56858,7 @@ var INPUT_EVENTS = (_INPUT_EVENTS = {
|
|
|
56834
56858
|
MOUSE_DOWN: MOUSE_DOWN,
|
|
56835
56859
|
MOUSE_UP: MOUSE_UP
|
|
56836
56860
|
}, _defineProperty(_INPUT_EVENTS, "MOUSE_DOWN", MOUSE_DOWN), _defineProperty(_INPUT_EVENTS, "MOUSE_MOVE", MOUSE_MOVE), _defineProperty(_INPUT_EVENTS, "ELEMENT_CLICK", ELEMENT_CLICK), _defineProperty(_INPUT_EVENTS, "ELEMENT_DESELECT", ELEMENT_DESELECT), _defineProperty(_INPUT_EVENTS, "GAMEPAD_CONNECTED_EVENT", GAMEPAD_CONNECTED_EVENT), _defineProperty(_INPUT_EVENTS, "GAMEPAD_DISCONNECTED_EVENT", GAMEPAD_DISCONNECTED_EVENT), _defineProperty(_INPUT_EVENTS, "BUTTON_PRESSED_EVENT", BUTTON_PRESSED_EVENT), _defineProperty(_INPUT_EVENTS, "BUTTON_RELEASED_EVENT", BUTTON_RELEASED_EVENT), _defineProperty(_INPUT_EVENTS, "AXIS_CHANGE_EVENT", AXIS_CHANGE_EVENT), _INPUT_EVENTS);
|
|
56837
|
-
var Input =
|
|
56838
|
-
/*#__PURE__*/
|
|
56839
|
-
function (_EventDispatcher) {
|
|
56861
|
+
var Input = /*#__PURE__*/function (_EventDispatcher) {
|
|
56840
56862
|
_inherits(Input, _EventDispatcher);
|
|
56841
56863
|
|
|
56842
56864
|
var _super = _createSuper(Input);
|
|
@@ -56856,20 +56878,20 @@ function (_EventDispatcher) {
|
|
|
56856
56878
|
if (event.type === Keyboard.KEYDOWN) {
|
|
56857
56879
|
_this.dispatchEvent({
|
|
56858
56880
|
type: KEY_DOWN,
|
|
56859
|
-
event: _objectSpread2({}, event,
|
|
56881
|
+
event: _objectSpread2(_objectSpread2({}, event), handler)
|
|
56860
56882
|
});
|
|
56861
56883
|
}
|
|
56862
56884
|
|
|
56863
56885
|
if (event.type === Keyboard.KEYUP) {
|
|
56864
56886
|
_this.dispatchEvent({
|
|
56865
56887
|
type: KEY_UP,
|
|
56866
|
-
event: _objectSpread2({}, event,
|
|
56888
|
+
event: _objectSpread2(_objectSpread2({}, event), handler)
|
|
56867
56889
|
});
|
|
56868
56890
|
}
|
|
56869
56891
|
|
|
56870
56892
|
_this.dispatchEvent({
|
|
56871
56893
|
type: KEY_PRESS,
|
|
56872
|
-
event: _objectSpread2({}, event,
|
|
56894
|
+
event: _objectSpread2(_objectSpread2({}, event), handler)
|
|
56873
56895
|
});
|
|
56874
56896
|
});
|
|
56875
56897
|
|
|
@@ -57526,7 +57548,7 @@ function createBase64WorkerFactory(base64, sourcemapArg, enableUnicodeArg) {
|
|
|
57526
57548
|
url = url || createURL(base64, sourcemapArg, enableUnicodeArg);
|
|
57527
57549
|
return new Worker(url, options);
|
|
57528
57550
|
};
|
|
57529
|
-
}var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIHZhciBMSUJSQVJZX05BTUUgPSAnYW1tby5qcyc7CiAgICB2YXIgVFlQRVMgPSB7CiAgICAgIEJPWDogJ0JPWCcsCiAgICAgIFNQSEVSRTogJ1NQSEVSRScsCiAgICAgIFZFSElDTEU6ICdWRUhJQ0xFJywKICAgICAgTUVTSDogJ01FU0gnLAogICAgICBQTEFZRVI6ICdQTEFZRVInCiAgICB9OwogICAgdmFyIERFRkFVTFRfVkVISUNMRV9TVEFURSA9IHsKICAgICAgdmVoaWNsZVN0ZWVyaW5nOiAwLAogICAgICBhY2NlbGVyYXRpb246IGZhbHNlLAogICAgICBicmVha2luZzogZmFsc2UsCiAgICAgIHJpZ2h0OiBmYWxzZSwKICAgICAgbGVmdDogZmFsc2UKICAgIH07CiAgICB2YXIgREVGQVVMVF9SSUdJREJPRFlfU1RBVEUgPSB7CiAgICAgIHZlbG9jaXR5OiB7CiAgICAgICAgeDogMCwKICAgICAgICB5OiAwLAogICAgICAgIHo6IDAKICAgICAgfSwKICAgICAgbW92ZW1lbnQ6IHsKICAgICAgICBmb3J3YXJkOiBmYWxzZSwKICAgICAgICBiYWNrd2FyZHM6IGZhbHNlLAogICAgICAgIGxlZnQ6IGZhbHNlLAogICAgICAgIHJpZ2h0OiBmYWxzZQogICAgICB9LAogICAgICBkaXJlY3Rpb246IHsKICAgICAgICB4OiAwLAogICAgICAgIHk6IDAsCiAgICAgICAgejogMAogICAgICB9CiAgICB9OwogICAgdmFyIERFRkFVTFRfU0NBTEUgPSB7CiAgICAgIHg6IDEsCiAgICAgIHk6IDEsCiAgICAgIHo6IDEKICAgIH07CiAgICB2YXIgREVGQVVMVF9MSU5FQVJfVkVMT0NJVFkgPSB7CiAgICAgIHg6IDAsCiAgICAgIHk6IDAsCiAgICAgIHo6IDAKICAgIH07CiAgICB2YXIgREVGQVVMVF9JTVBVTFNFID0gewogICAgICB4OiAwLAogICAgICB5OiAwLAogICAgICB6OiAwCiAgICB9OwogICAgdmFyIERJU0FCTEVfREVBQ1RJVkFUSU9OID0gNDsKICAgIHZhciBHUkFWSVRZID0gewogICAgICB4OiAwLAogICAgICB5OiAtMTAsCiAgICAgIHo6IDAKICAgIH07CiAgICB2YXIgRlJPTlRfTEVGVCA9IDA7CiAgICB2YXIgRlJPTlRfUklHSFQgPSAxOwogICAgdmFyIEJBQ0tfTEVGVCA9IDI7CiAgICB2YXIgQkFDS19SSUdIVCA9IDM7CiAgICB2YXIgREVGQVVMVF9TVEVFUklOR19JTkNSRU1FTlQgPSAuMDQ7CiAgICB2YXIgREVGQVVMVF9TVEVFUklOR19DTEFNUCA9IC41OwogICAgdmFyIERFRkFVTFRfTUFYX0VOR0lORV9GT1JDRSA9IDIwMDA7CiAgICB2YXIgREVGQVVMVF9NQVhfQlJFQUtJTkdfRk9SQ0UgPSAxMDA7CiAgICB2YXIgRVhQTE9TSU9OX1NJWkVTID0gewogICAgICBTTUFMTDogNCwKICAgICAgTUVESVVNOiA2LAogICAgICBMQVJHRTogOCwKICAgICAgTUFTU0lWRTogMTIKICAgIH07CiAgICB2YXIgRVhQTE9TSU9OX1NUUkVOR1RIUyA9IHsKICAgICAgVkVSWV9XRUFLOiAyLAogICAgICBXRUFLOiA0LAogICAgICBNRURJVU06IDgsCiAgICAgIExBUkdFOiAxNiwKICAgICAgTUFTU0lWRTogMzIsCiAgICAgIE9LX05POiA2NAogICAgfTsKCiAgICB2YXIgUEhZU0lDU19FVkVOVFMgPSB7CiAgICAgIERJU1BBVENIOiAncGh5c2ljczpkaXNwYXRjaCcsCiAgICAgIFRFUk1JTkFURTogJ3BoeXNpY3M6dGVybWluYXRlJywKICAgICAgTE9BRDogewogICAgICAgIEFNTU86ICdwaHlzaWNzOmxvYWQ6YW1tbycKICAgICAgfSwKICAgICAgUkVBRFk6ICdwaHlzaWNzOnJlYWR5JywKICAgICAgSU5JVDogJ3BoeXNpY3M6aW5pdCcsCiAgICAgIFVQREFURTogJ3BoeXNpY3M6dXBkYXRlJywKICAgICAgQUREOiB7CiAgICAgICAgQk9YOiAncGh5c2ljczphZGQ6Ym94JywKICAgICAgICBWRUhJQ0xFOiAncGh5c2ljczphZGQ6dmVoaWNsZScsCiAgICAgICAgTU9ERUw6ICdwaHlzaWNzOmFkZDptb2RlbCcsCiAgICAgICAgUExBWUVSOiAncGh5c2ljczphZGQ6cGxheWVyJywKICAgICAgICBTUEhFUkU6ICdwaHlzaWNzOmFkZDpzcGhlcmUnCiAgICAgIH0sCiAgICAgIEVMRU1FTlQ6IHsKICAgICAgICBESVNQT1NFOiAncGh5c2ljczplbGVtZW50OmRpc3Bvc2UnLAogICAgICAgIENPTExJU0lPTjogJ3BoeXNpY3M6ZWxlbWVudDpjb2xsaXNpb24nLAogICAgICAgIFVQREFURTogJ3BoeXNpY3M6ZWxlbWVudDp1cGRhdGUnLAogICAgICAgIENSRUFURUQ6ICdwaHlzaWNzOmVsZW1lbnQ6Y3JlYXRlZCcsCiAgICAgICAgU0VUOiB7CiAgICAgICAgICBQT1NJVElPTjogJ3BoeXNpY3M6ZWxlbWVudDpzZXQ6cG9zaXRpb24nLAogICAgICAgICAgUVVBVEVSTklPTjogJ3BoeXNpY3M6ZWxlbWVudDpzZXQ6cXVhdGVybmlvbicsCiAgICAgICAgICBMSU5FQVJfVkVMT0NJVFk6ICdwaHlzaWNzOmVsZW1lbnQ6c2V0OmxpbmVhcl92ZWxvY2l0eScKICAgICAgICB9LAogICAgICAgIEFQUExZOiB7CiAgICAgICAgICBJTVBVTFNFOiAncGh5c2ljczplbGVtZW50OmFwcGx5OmltcHVsc2UnCiAgICAgICAgfQogICAgICB9LAogICAgICBWRUhJQ0xFOiB7CiAgICAgICAgU0VUOiB7CiAgICAgICAgICBQT1NJVElPTjogJ3BoeXNpY3M6dmVoaWNsZTpzZXQ6cG9zaXRpb24nLAogICAgICAgICAgUVVBVEVSTklPTjogJ3BoeXNpY3M6dmVoaWNsZTpzZXQ6cXVhdGVybmlvbicKICAgICAgICB9LAogICAgICAgIFJFU0VUOiAncGh5c2ljczp2ZWhpY2xlOnJlc2V0JywKICAgICAgICBTUEVFRDogJ3BoeXNpY3M6dmVoaWNsZTpzcGVlZCcsCiAgICAgICAgRElSRUNUSU9OOiAncGh5c2ljczp2ZWhpY2xlOmRpcmVjdGlvbicKICAgICAgfSwKICAgICAgRUZGRUNUUzogewogICAgICAgIEVYUExPU0lPTjogJ3BoeXNpY3M6ZWZmZWN0czpleHBsb3Npb24nCiAgICAgIH0KICAgIH07CgogICAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgewogICAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpOwogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsKICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7CiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOwogICAgICAgIGlmICgidmFsdWUiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOwogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsKICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsKICAgICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7CiAgICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsKICAgICAgcmV0dXJuIENvbnN0cnVjdG9yOwogICAgfQoKICAgIGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsKICAgICAgaWYgKGtleSBpbiBvYmopIHsKICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsKICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICB3cml0YWJsZTogdHJ1ZQogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIG9ialtrZXldID0gdmFsdWU7CiAgICAgIH0KCiAgICAgIHJldHVybiBvYmo7CiAgICB9CgogICAgZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7CiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsKCiAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7CiAgICAgICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7CiAgICAgICAgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgewogICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7CiAgICAgICAgfSk7CiAgICAgICAga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOwogICAgICB9CgogICAgICByZXR1cm4ga2V5czsKICAgIH0KCiAgICBmdW5jdGlvbiBfb2JqZWN0U3ByZWFkMih0YXJnZXQpIHsKICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsKCiAgICAgICAgaWYgKGkgJSAyKSB7CiAgICAgICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsKICAgICAgICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7CiAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiB0YXJnZXQ7CiAgICB9CgogICAgdmFyIERpc3BhdGNoZXIgPSBmdW5jdGlvbiBEaXNwYXRjaGVyKCkgewogICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRGlzcGF0Y2hlcik7CgogICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInNlbmRQaHlzaWNzVXBkYXRlIiwgZnVuY3Rpb24gKGR0KSB7CiAgICAgICAgcmV0dXJuIHBvc3RNZXNzYWdlKHsKICAgICAgICAgIGV2ZW50OiBQSFlTSUNTX0VWRU5UUy5VUERBVEUsCiAgICAgICAgICBkdDogZHQKICAgICAgICB9KTsKICAgICAgfSk7CgogICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInNlbmRSZWFkeUV2ZW50IiwgZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiBwb3N0TWVzc2FnZSh7CiAgICAgICAgICBldmVudDogUEhZU0lDU19FVkVOVFMuUkVBRFkKICAgICAgICB9KTsKICAgICAgfSk7CgogICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInNlbmRUZXJtaW5hdGVFdmVudCIsIGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gcG9zdE1lc3NhZ2UoewogICAgICAgICAgZXZlbnQ6IFBIWVNJQ1NfRVZFTlRTLlRFUk1JTkFURQogICAgICAgIH0pOwogICAgICB9KTsKCiAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAic2VuZEJvZHlVcGRhdGUiLCBmdW5jdGlvbiAodXVpZCwgcG9zaXRpb24sIHJvdGF0aW9uLCBkdCkgewogICAgICAgIHJldHVybiBwb3N0TWVzc2FnZSh7CiAgICAgICAgICBldmVudDogUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5VUERBVEUsCiAgICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgICAgcG9zaXRpb246IHsKICAgICAgICAgICAgeDogcG9zaXRpb24ueCgpLAogICAgICAgICAgICB5OiBwb3NpdGlvbi55KCksCiAgICAgICAgICAgIHo6IHBvc2l0aW9uLnooKQogICAgICAgICAgfSwKICAgICAgICAgIHF1YXRlcm5pb246IHsKICAgICAgICAgICAgeDogcm90YXRpb24ueCgpLAogICAgICAgICAgICB5OiByb3RhdGlvbi55KCksCiAgICAgICAgICAgIHo6IHJvdGF0aW9uLnooKSwKICAgICAgICAgICAgdzogcm90YXRpb24udygpCiAgICAgICAgICB9LAogICAgICAgICAgZHQ6IGR0CiAgICAgICAgfSk7CiAgICAgIH0pOwoKICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJzZW5kRGlzcGF0Y2hFdmVudCIsIGZ1bmN0aW9uICh1dWlkLCBldmVudE5hbWUsIGV2ZW50RGF0YSkgewogICAgICAgIHJldHVybiBwb3N0TWVzc2FnZSh7CiAgICAgICAgICBldmVudDogUEhZU0lDU19FVkVOVFMuRElTUEFUQ0gsCiAgICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgICAgZXZlbnROYW1lOiBldmVudE5hbWUsCiAgICAgICAgICBldmVudERhdGE6IGV2ZW50RGF0YQogICAgICAgIH0pOwogICAgICB9KTsKICAgIH07CiAgICB2YXIgZGlzcGF0Y2hlciQxID0gbmV3IERpc3BhdGNoZXIoKTsKCiAgICB2YXIgYXBwbHlNYXRyaXg0VG9WZWN0b3IzID0gZnVuY3Rpb24gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKF9yZWYpIHsKICAgICAgdmFyIF9yZWYkeCA9IF9yZWYueCwKICAgICAgICAgIHggPSBfcmVmJHggPT09IHZvaWQgMCA/IDAgOiBfcmVmJHgsCiAgICAgICAgICBfcmVmJHkgPSBfcmVmLnksCiAgICAgICAgICB5ID0gX3JlZiR5ID09PSB2b2lkIDAgPyAwIDogX3JlZiR5LAogICAgICAgICAgX3JlZiR6ID0gX3JlZi56LAogICAgICAgICAgeiA9IF9yZWYkeiA9PT0gdm9pZCAwID8gMCA6IF9yZWYkejsKICAgICAgdmFyIG1hdHJpeCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogW107CiAgICAgIHZhciB3ID0gMSAvIChtYXRyaXhbM10gKiB4ICsgbWF0cml4WzddICogeSArIG1hdHJpeFsxMV0gKiB6ICsgbWF0cml4WzE1XSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgeDogKG1hdHJpeFswXSAqIHggKyBtYXRyaXhbNF0gKiB5ICsgbWF0cml4WzhdICogeiArIG1hdHJpeFsxMl0pICogdywKICAgICAgICB5OiAobWF0cml4WzFdICogeCArIG1hdHJpeFs1XSAqIHkgKyBtYXRyaXhbOV0gKiB6ICsgbWF0cml4WzEzXSkgKiB3LAogICAgICAgIHo6IChtYXRyaXhbMl0gKiB4ICsgbWF0cml4WzZdICogeSArIG1hdHJpeFsxMF0gKiB6ICsgbWF0cml4WzE0XSkgKiB3CiAgICAgIH07CiAgICB9OwoKICAgIHZhciBjcmVhdGVSaWdpZEJvZHkgPSBmdW5jdGlvbiBjcmVhdGVSaWdpZEJvZHkoc2hhcGUsIG9wdGlvbnMpIHsKICAgICAgdmFyIHV1aWQgPSBvcHRpb25zLnV1aWQsCiAgICAgICAgICBwb3NpdGlvbiA9IG9wdGlvbnMucG9zaXRpb24sCiAgICAgICAgICBxdWF0ZXJuaW9uID0gb3B0aW9ucy5xdWF0ZXJuaW9uLAogICAgICAgICAgbWFzcyA9IG9wdGlvbnMubWFzcywKICAgICAgICAgIGZyaWN0aW9uID0gb3B0aW9ucy5mcmljdGlvbiwKICAgICAgICAgIF9vcHRpb25zJHJlc3RpdHV0aW9uID0gb3B0aW9ucy5yZXN0aXR1dGlvbiwKICAgICAgICAgIHJlc3RpdHV0aW9uID0gX29wdGlvbnMkcmVzdGl0dXRpb24gPT09IHZvaWQgMCA/IC45IDogX29wdGlvbnMkcmVzdGl0dXRpb24sCiAgICAgICAgICBfb3B0aW9ucyRkYW1waW5nID0gb3B0aW9ucy5kYW1waW5nLAogICAgICAgICAgZGFtcGluZyA9IF9vcHRpb25zJGRhbXBpbmcgPT09IHZvaWQgMCA/IHsKICAgICAgICBsaW5lYXI6IDAuMiwKICAgICAgICBhbmd1bGFyOiAwLjIKICAgICAgfSA6IF9vcHRpb25zJGRhbXBpbmc7CiAgICAgIHZhciB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpOwogICAgICB0cmFuc2Zvcm0uc2V0SWRlbnRpdHkoKTsKICAgICAgdHJhbnNmb3JtLnNldE9yaWdpbihuZXcgQW1tby5idFZlY3RvcjMocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueikpOwogICAgICB0cmFuc2Zvcm0uc2V0Um90YXRpb24obmV3IEFtbW8uYnRRdWF0ZXJuaW9uKHF1YXRlcm5pb24ueCwgcXVhdGVybmlvbi55LCBxdWF0ZXJuaW9uLnosIHF1YXRlcm5pb24udykpOwogICAgICB2YXIgbW90aW9uU3RhdGUgPSBuZXcgQW1tby5idERlZmF1bHRNb3Rpb25TdGF0ZSh0cmFuc2Zvcm0pOwogICAgICB2YXIgbG9jYWxJbmVydGlhID0gbmV3IEFtbW8uYnRWZWN0b3IzKDAsIDAsIDApOwogICAgICBzaGFwZS5jYWxjdWxhdGVMb2NhbEluZXJ0aWEobWFzcywgbG9jYWxJbmVydGlhKTsKICAgICAgdmFyIHJiSW5mbyA9IG5ldyBBbW1vLmJ0UmlnaWRCb2R5Q29uc3RydWN0aW9uSW5mbyhtYXNzLCBtb3Rpb25TdGF0ZSwgc2hhcGUsIGxvY2FsSW5lcnRpYSk7CiAgICAgIHZhciBib2R5ID0gbmV3IEFtbW8uYnRSaWdpZEJvZHkocmJJbmZvKTsKCiAgICAgIGlmIChtYXNzID4gMCkgewogICAgICAgIGJvZHkuc2V0RnJpY3Rpb24oZnJpY3Rpb24pOwogICAgICAgIGJvZHkuc2V0UmVzdGl0dXRpb24ocmVzdGl0dXRpb24pOwogICAgICAgIGJvZHkuc2V0RGFtcGluZyhkYW1waW5nLmxpbmVhciwgZGFtcGluZy5hbmd1bGFyKTsKICAgICAgICBib2R5LnNldEFjdGl2YXRpb25TdGF0ZShESVNBQkxFX0RFQUNUSVZBVElPTik7CiAgICAgIH0gLy8gc3RvcmluZyB1dWlkIGZvciBmdXR1cmUgcmVmZXJlbmNlCgoKICAgICAgYm9keS51dWlkID0gdXVpZDsKICAgICAgd29ybGQuYWRkUmlnaWRCb2R5KGJvZHkpOwogICAgICByZXR1cm4gYm9keTsKICAgIH07CiAgICB2YXIgYWRkTW9kZWwgPSBmdW5jdGlvbiBhZGRNb2RlbChvcHRpb25zKSB7CiAgICAgIHZhciB1dWlkID0gb3B0aW9ucy51dWlkLAogICAgICAgICAgdmVydGljZXMgPSBvcHRpb25zLnZlcnRpY2VzLAogICAgICAgICAgbWF0cmljZXMgPSBvcHRpb25zLm1hdHJpY2VzLAogICAgICAgICAgaW5kZXhlcyA9IG9wdGlvbnMuaW5kZXhlcywKICAgICAgICAgIHBvc2l0aW9uID0gb3B0aW9ucy5wb3NpdGlvbiwKICAgICAgICAgIHF1YXRlcm5pb24gPSBvcHRpb25zLnF1YXRlcm5pb24sCiAgICAgICAgICBfb3B0aW9ucyRtYXNzID0gb3B0aW9ucy5tYXNzLAogICAgICAgICAgbWFzcyA9IF9vcHRpb25zJG1hc3MgPT09IHZvaWQgMCA/IDAgOiBfb3B0aW9ucyRtYXNzLAogICAgICAgICAgX29wdGlvbnMkZnJpY3Rpb24gPSBvcHRpb25zLmZyaWN0aW9uLAogICAgICAgICAgZnJpY3Rpb24gPSBfb3B0aW9ucyRmcmljdGlvbiA9PT0gdm9pZCAwID8gMiA6IF9vcHRpb25zJGZyaWN0aW9uOwogICAgICB2YXIgc2NhbGUgPSBERUZBVUxUX1NDQUxFOwogICAgICB2YXIgYnRhID0gbmV3IEFtbW8uYnRWZWN0b3IzKCk7CiAgICAgIHZhciBidGIgPSBuZXcgQW1tby5idFZlY3RvcjMoKTsKICAgICAgdmFyIGJ0YyA9IG5ldyBBbW1vLmJ0VmVjdG9yMygpOwogICAgICB2YXIgdHJpTWVzaCA9IG5ldyBBbW1vLmJ0VHJpYW5nbGVNZXNoKHRydWUsIGZhbHNlKTsKCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmVydGljZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgY29tcG9uZW50cyA9IHZlcnRpY2VzW2ldOwogICAgICAgIHZhciBpbmRleCA9IGluZGV4ZXNbaV0gPyBpbmRleGVzW2ldIDogbnVsbDsKICAgICAgICB2YXIgbWF0cml4ID0gQXJyYXkuZnJvbShtYXRyaWNlc1tpXSk7CgogICAgICAgIGlmIChpbmRleCkgewogICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpbmRleC5sZW5ndGg7IGogKz0gMykgewogICAgICAgICAgICB2YXIgYWkgPSBpbmRleFtqXSAqIDM7CiAgICAgICAgICAgIHZhciBiaSA9IGluZGV4W2ogKyAxXSAqIDM7CiAgICAgICAgICAgIHZhciBjaSA9IGluZGV4W2ogKyAyXSAqIDM7CiAgICAgICAgICAgIHZhciB2YSA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7CiAgICAgICAgICAgICAgeDogY29tcG9uZW50c1thaV0sCiAgICAgICAgICAgICAgeTogY29tcG9uZW50c1thaSArIDFdLAogICAgICAgICAgICAgIHo6IGNvbXBvbmVudHNbYWkgKyAyXQogICAgICAgICAgICB9LCBtYXRyaXgpOwogICAgICAgICAgICB2YXIgdmIgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoewogICAgICAgICAgICAgIHg6IGNvbXBvbmVudHNbYmldLAogICAgICAgICAgICAgIHk6IGNvbXBvbmVudHNbYmkgKyAxXSwKICAgICAgICAgICAgICB6OiBjb21wb25lbnRzW2JpICsgMl0KICAgICAgICAgICAgfSwgbWF0cml4KTsKICAgICAgICAgICAgdmFyIHZjID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsKICAgICAgICAgICAgICB4OiBjb21wb25lbnRzW2NpXSwKICAgICAgICAgICAgICB5OiBjb21wb25lbnRzW2NpICsgMV0sCiAgICAgICAgICAgICAgejogY29tcG9uZW50c1tjaSArIDJdCiAgICAgICAgICAgIH0sIG1hdHJpeCk7CiAgICAgICAgICAgIGJ0YS5zZXRWYWx1ZSh2YS54LCB2YS55LCB2YS56KTsKICAgICAgICAgICAgYnRiLnNldFZhbHVlKHZiLngsIHZiLnksIHZiLnopOwogICAgICAgICAgICBidGMuc2V0VmFsdWUodmMueCwgdmMueSwgdmMueik7CiAgICAgICAgICAgIHRyaU1lc2guYWRkVHJpYW5nbGUoYnRhLCBidGIsIGJ0YywgZmFsc2UpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBmb3IgKHZhciBfaiA9IDA7IF9qIDwgY29tcG9uZW50cy5sZW5ndGg7IF9qICs9IDkpIHsKICAgICAgICAgICAgdmFyIF92YSA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7CiAgICAgICAgICAgICAgeDogY29tcG9uZW50c1tfaiArIDBdLAogICAgICAgICAgICAgIHk6IGNvbXBvbmVudHNbX2ogKyAxXSwKICAgICAgICAgICAgICB6OiBjb21wb25lbnRzW19qICsgMl0KICAgICAgICAgICAgfSwgbWF0cml4KTsKCiAgICAgICAgICAgIHZhciBfdmIgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoewogICAgICAgICAgICAgIHg6IGNvbXBvbmVudHNbX2ogKyAzXSwKICAgICAgICAgICAgICB5OiBjb21wb25lbnRzW19qICsgNF0sCiAgICAgICAgICAgICAgejogY29tcG9uZW50c1tfaiArIDVdCiAgICAgICAgICAgIH0sIG1hdHJpeCk7CgogICAgICAgICAgICB2YXIgX3ZjID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsKICAgICAgICAgICAgICB4OiBjb21wb25lbnRzW19qICsgNl0sCiAgICAgICAgICAgICAgeTogY29tcG9uZW50c1tfaiArIDddLAogICAgICAgICAgICAgIHo6IGNvbXBvbmVudHNbX2ogKyA4XQogICAgICAgICAgICB9LCBtYXRyaXgpOwoKICAgICAgICAgICAgYnRhLnNldFZhbHVlKF92YS54LCBfdmEueSwgX3ZhLnopOwogICAgICAgICAgICBidGIuc2V0VmFsdWUoX3ZiLngsIF92Yi55LCBfdmIueik7CiAgICAgICAgICAgIGJ0Yy5zZXRWYWx1ZShfdmMueCwgX3ZjLnksIF92Yy56KTsKICAgICAgICAgICAgdHJpTWVzaC5hZGRUcmlhbmdsZShidGEsIGJ0YiwgYnRjLCBmYWxzZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICB2YXIgbG9jYWxTY2FsZSA9IG5ldyBBbW1vLmJ0VmVjdG9yMyhzY2FsZS54LCBzY2FsZS55LCBzY2FsZS56KTsKICAgICAgdHJpTWVzaC5zZXRTY2FsaW5nKGxvY2FsU2NhbGUpOwogICAgICBBbW1vLmRlc3Ryb3kobG9jYWxTY2FsZSk7CiAgICAgIHZhciBjb2xsaXNpb25TaGFwZSA9IG5ldyBBbW1vLmJ0QnZoVHJpYW5nbGVNZXNoU2hhcGUodHJpTWVzaCwgdHJ1ZSwgdHJ1ZSk7CiAgICAgIGNvbGxpc2lvblNoYXBlLnJlc291cmNlcyA9IFt0cmlNZXNoXTsKICAgICAgQW1tby5kZXN0cm95KGJ0YSk7CiAgICAgIEFtbW8uZGVzdHJveShidGIpOwogICAgICBBbW1vLmRlc3Ryb3koYnRjKTsKICAgICAgdmFyIGJvZHkgPSBjcmVhdGVSaWdpZEJvZHkoY29sbGlzaW9uU2hhcGUsIHsKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbiwKICAgICAgICBxdWF0ZXJuaW9uOiBxdWF0ZXJuaW9uLAogICAgICAgIG1hc3M6IG1hc3MsCiAgICAgICAgZnJpY3Rpb246IGZyaWN0aW9uCiAgICAgIH0pOwogICAgICB3b3JsZC5zZXRCb2R5KHsKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIGJvZHk6IGJvZHksCiAgICAgICAgdHlwZTogVFlQRVMuTUVTSCwKICAgICAgICBzdGF0ZTogREVGQVVMVF9SSUdJREJPRFlfU1RBVEUKICAgICAgfSk7CiAgICB9OwogICAgdmFyIGFkZEJveCA9IGZ1bmN0aW9uIGFkZEJveChkYXRhKSB7CiAgICAgIHZhciB1dWlkID0gZGF0YS51dWlkLAogICAgICAgICAgd2lkdGggPSBkYXRhLndpZHRoLAogICAgICAgICAgbGVuZ3RoID0gZGF0YS5sZW5ndGgsCiAgICAgICAgICBoZWlnaHQgPSBkYXRhLmhlaWdodCwKICAgICAgICAgIHBvc2l0aW9uID0gZGF0YS5wb3NpdGlvbiwKICAgICAgICAgIHF1YXRlcm5pb24gPSBkYXRhLnF1YXRlcm5pb24sCiAgICAgICAgICBfZGF0YSRtYXNzID0gZGF0YS5tYXNzLAogICAgICAgICAgbWFzcyA9IF9kYXRhJG1hc3MgPT09IHZvaWQgMCA/IDAgOiBfZGF0YSRtYXNzLAogICAgICAgICAgX2RhdGEkZnJpY3Rpb24gPSBkYXRhLmZyaWN0aW9uLAogICAgICAgICAgZnJpY3Rpb24gPSBfZGF0YSRmcmljdGlvbiA9PT0gdm9pZCAwID8gMiA6IF9kYXRhJGZyaWN0aW9uOwogICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgQW1tby5idEJveFNoYXBlKG5ldyBBbW1vLmJ0VmVjdG9yMyh3aWR0aCAqIDAuNSwgaGVpZ2h0ICogMC41LCBsZW5ndGggKiAwLjUpKTsKICAgICAgdmFyIGJvZHkgPSBjcmVhdGVSaWdpZEJvZHkoZ2VvbWV0cnksIHsKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbiwKICAgICAgICBxdWF0ZXJuaW9uOiBxdWF0ZXJuaW9uLAogICAgICAgIG1hc3M6IG1hc3MsCiAgICAgICAgZnJpY3Rpb246IGZyaWN0aW9uCiAgICAgIH0pOwogICAgICB3b3JsZC5zZXRCb2R5KHsKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIGJvZHk6IGJvZHksCiAgICAgICAgdHlwZTogVFlQRVMuQk9YLAogICAgICAgIHN0YXRlOiBERUZBVUxUX1JJR0lEQk9EWV9TVEFURQogICAgICB9KTsKICAgIH07CiAgICB2YXIgYWRkU3BoZXJlID0gZnVuY3Rpb24gYWRkU3BoZXJlKGRhdGEpIHsKICAgICAgdmFyIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICByYWRpdXMgPSBkYXRhLnJhZGl1cywKICAgICAgICAgIHBvc2l0aW9uID0gZGF0YS5wb3NpdGlvbiwKICAgICAgICAgIHF1YXRlcm5pb24gPSBkYXRhLnF1YXRlcm5pb24sCiAgICAgICAgICBfZGF0YSRtYXNzMiA9IGRhdGEubWFzcywKICAgICAgICAgIG1hc3MgPSBfZGF0YSRtYXNzMiA9PT0gdm9pZCAwID8gMCA6IF9kYXRhJG1hc3MyLAogICAgICAgICAgX2RhdGEkZnJpY3Rpb24yID0gZGF0YS5mcmljdGlvbiwKICAgICAgICAgIGZyaWN0aW9uID0gX2RhdGEkZnJpY3Rpb24yID09PSB2b2lkIDAgPyAyIDogX2RhdGEkZnJpY3Rpb24yOwogICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgQW1tby5idFNwaGVyZVNoYXBlKHJhZGl1cyk7CiAgICAgIHZhciBib2R5ID0gY3JlYXRlUmlnaWRCb2R5KGdlb21ldHJ5LCB7CiAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICBwb3NpdGlvbjogcG9zaXRpb24sCiAgICAgICAgcXVhdGVybmlvbjogcXVhdGVybmlvbiwKICAgICAgICBtYXNzOiBtYXNzLAogICAgICAgIGZyaWN0aW9uOiBmcmljdGlvbgogICAgICB9KTsKICAgICAgd29ybGQuc2V0Qm9keSh7CiAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICBib2R5OiBib2R5LAogICAgICAgIHR5cGU6IFRZUEVTLlNQSEVSRSwKICAgICAgICBzdGF0ZTogREVGQVVMVF9SSUdJREJPRFlfU1RBVEUKICAgICAgfSk7CiAgICB9OwogICAgdmFyIHNldExpbmVhclZlbG9jaXR5ID0gZnVuY3Rpb24gc2V0TGluZWFyVmVsb2NpdHkoZGF0YSkgewogICAgICB2YXIgdXVpZCA9IGRhdGEudXVpZCwKICAgICAgICAgIF9kYXRhJHZlbG9jaXR5ID0gZGF0YS52ZWxvY2l0eSwKICAgICAgICAgIHZlbG9jaXR5ID0gX2RhdGEkdmVsb2NpdHkgPT09IHZvaWQgMCA/IERFRkFVTFRfTElORUFSX1ZFTE9DSVRZIDogX2RhdGEkdmVsb2NpdHk7CgogICAgICB2YXIgX3dvcmxkJGdldEVsZW1lbnQgPSB3b3JsZC5nZXRFbGVtZW50KHV1aWQpLAogICAgICAgICAgYm9keSA9IF93b3JsZCRnZXRFbGVtZW50LmJvZHk7CgogICAgICB2YXIgbW90aW9uU3RhdGUgPSBib2R5LmdldE1vdGlvblN0YXRlKCk7CgogICAgICBpZiAobW90aW9uU3RhdGUpIHsKICAgICAgICB2YXIgbGluZWFyVmVsb2NpdHkgPSBuZXcgQW1tby5idFZlY3RvcjModmVsb2NpdHkueCwgdmVsb2NpdHkueSwgdmVsb2NpdHkueik7CiAgICAgICAgYm9keS5zZXRMaW5lYXJWZWxvY2l0eShsaW5lYXJWZWxvY2l0eSk7CiAgICAgICAgQW1tby5kZXN0cm95KGxpbmVhclZlbG9jaXR5KTsKICAgICAgfQogICAgfTsKICAgIHZhciBzZXRQb3NpdGlvbiA9IGZ1bmN0aW9uIHNldFBvc2l0aW9uKGRhdGEpIHsKICAgICAgdmFyIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICBwb3NpdGlvbiA9IGRhdGEucG9zaXRpb247CgogICAgICB2YXIgX3dvcmxkJGdldEVsZW1lbnQyID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKSwKICAgICAgICAgIGJvZHkgPSBfd29ybGQkZ2V0RWxlbWVudDIuYm9keTsKCiAgICAgIHZhciB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpOwogICAgICBib2R5LmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgIHRyYW5zZm9ybS5zZXRPcmlnaW4obmV3IEFtbW8uYnRWZWN0b3IzKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnopKTsKICAgICAgYm9keS5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgfTsKICAgIHZhciBhcHBseUltcHVzZSA9IGZ1bmN0aW9uIGFwcGx5SW1wdXNlKF9yZWYpIHsKICAgICAgdmFyIHV1aWQgPSBfcmVmLnV1aWQsCiAgICAgICAgICBfcmVmJGltcHVsc2UgPSBfcmVmLmltcHVsc2UsCiAgICAgICAgICBpbXB1bHNlID0gX3JlZiRpbXB1bHNlID09PSB2b2lkIDAgPyBERUZBVUxUX0lNUFVMU0UgOiBfcmVmJGltcHVsc2U7CgogICAgICB2YXIgX3dvcmxkJGdldEVsZW1lbnQzID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKSwKICAgICAgICAgIGJvZHkgPSBfd29ybGQkZ2V0RWxlbWVudDMuYm9keTsKCiAgICAgIHZhciBtb3Rpb25TdGF0ZSA9IGJvZHkuZ2V0TW90aW9uU3RhdGUoKTsKCiAgICAgIGlmIChtb3Rpb25TdGF0ZSkgewogICAgICAgIHZhciBpbXB1bHNlVmVjdG9yID0gbmV3IEFtbW8uYnRWZWN0b3IzKGltcHVsc2UueCwgaW1wdWxzZS55LCBpbXB1bHNlLnopOwogICAgICAgIGJvZHkuYXBwbHlDZW50cmFsSW1wdWxzZShpbXB1bHNlVmVjdG9yKTsKICAgICAgICBBbW1vLmRlc3Ryb3koaW1wdWxzZVZlY3Rvcik7CiAgICAgIH0KICAgIH07CiAgICB2YXIgaGFuZGxlRWxlbWVudFVwZGF0ZSA9IGZ1bmN0aW9uIGhhbmRsZUVsZW1lbnRVcGRhdGUoX3JlZjIsIGR0KSB7CiAgICAgIHZhciBib2R5ID0gX3JlZjIuYm9keSwKICAgICAgICAgIHV1aWQgPSBfcmVmMi51dWlkLAogICAgICAgICAgX3JlZjIkc3RhdGUgPSBfcmVmMi5zdGF0ZTsKICAgICAgdmFyIG1vdGlvblN0YXRlID0gYm9keS5nZXRNb3Rpb25TdGF0ZSgpOwoKICAgICAgaWYgKG1vdGlvblN0YXRlKSB7CiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7CiAgICAgICAgbW90aW9uU3RhdGUuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgICB2YXIgb3JpZ2luID0gdHJhbnNmb3JtLmdldE9yaWdpbigpOwogICAgICAgIHZhciByb3RhdGlvbiA9IHRyYW5zZm9ybS5nZXRSb3RhdGlvbigpOwogICAgICAgIGRpc3BhdGNoZXIkMS5zZW5kQm9keVVwZGF0ZSh1dWlkLCBvcmlnaW4sIHJvdGF0aW9uLCBkdCk7CiAgICAgICAgQW1tby5kZXN0cm95KHRyYW5zZm9ybSk7CiAgICAgIH0KICAgIH07CgogICAgdmFyIGFkZFBsYXllciA9IGZ1bmN0aW9uIGFkZFBsYXllcihkYXRhKSB7CiAgICAgIHZhciB1dWlkID0gZGF0YS51dWlkLAogICAgICAgICAgd2lkdGggPSBkYXRhLndpZHRoLAogICAgICAgICAgaGVpZ2h0ID0gZGF0YS5oZWlnaHQsCiAgICAgICAgICBwb3NpdGlvbiA9IGRhdGEucG9zaXRpb24sCiAgICAgICAgICBxdWF0ZXJuaW9uID0gZGF0YS5xdWF0ZXJuaW9uLAogICAgICAgICAgbWFzcyA9IGRhdGEubWFzcywKICAgICAgICAgIGZyaWN0aW9uID0gZGF0YS5mcmljdGlvbjsKICAgICAgdmFyIGNhcHN1bGUgPSBuZXcgQW1tby5idENhcHN1bGVTaGFwZSh3aWR0aCwgaGVpZ2h0KTsKICAgICAgdmFyIGJvZHkgPSBjcmVhdGVSaWdpZEJvZHkoY2Fwc3VsZSwgewogICAgICAgIHV1aWQ6IHV1aWQsCiAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uLAogICAgICAgIHF1YXRlcm5pb246IHF1YXRlcm5pb24sCiAgICAgICAgbWFzczogbWFzcywKICAgICAgICBmcmljdGlvbjogZnJpY3Rpb24KICAgICAgfSk7IC8vIGRpc2FibGlpbmcgcm90YXRpb24gZm9yIGNvbGxpc2lvbnMKCiAgICAgIGJvZHkuc2V0QW5ndWxhckZhY3RvcigwKTsKICAgICAgd29ybGQuYWRkUmlnaWRCb2R5KGJvZHkpOwogICAgICB3b3JsZC5zZXRCb2R5KHsKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIGJvZHk6IGJvZHksCiAgICAgICAgdHlwZTogVFlQRVMuUExBWUVSLAogICAgICAgIHN0YXRlOiBERUZBVUxUX1JJR0lEQk9EWV9TVEFURQogICAgICB9KTsKICAgIH07CiAgICB2YXIgaGFuZGxlUGxheWVyVXBkYXRlID0gZnVuY3Rpb24gaGFuZGxlUGxheWVyVXBkYXRlKF9yZWYsIGR0KSB7CiAgICAgIHZhciBib2R5ID0gX3JlZi5ib2R5LAogICAgICAgICAgdXVpZCA9IF9yZWYudXVpZCwKICAgICAgICAgIF9yZWYkc3RhdGUgPSBfcmVmLnN0YXRlLAogICAgICAgICAgc3RhdGUgPSBfcmVmJHN0YXRlID09PSB2b2lkIDAgPyBERUZBVUxUX1JJR0lEQk9EWV9TVEFURSA6IF9yZWYkc3RhdGU7CiAgICAgIHZhciBtb3ZlbWVudCA9IHN0YXRlLm1vdmVtZW50LAogICAgICAgICAgZGlyZWN0aW9uID0gc3RhdGUuZGlyZWN0aW9uLAogICAgICAgICAgY2FtZXJhRGlyZWN0aW9uID0gc3RhdGUuY2FtZXJhRGlyZWN0aW9uLAogICAgICAgICAgcXVhdGVybmlvbiA9IHN0YXRlLnF1YXRlcm5pb24sCiAgICAgICAgICBwb3NpdGlvbiA9IHN0YXRlLnBvc2l0aW9uOwogICAgICB2YXIgTUFYX1NQRUVEID0gMTsKICAgICAgdmFyIHdhbGtWZWxvY2l0eSA9IC4xOwogICAgICB2YXIgbW90aW9uU3RhdGUgPSBib2R5LmdldE1vdGlvblN0YXRlKCk7CgogICAgICBpZiAobW90aW9uU3RhdGUpIHsKICAgICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgICBtb3Rpb25TdGF0ZS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICAgIHZhciBsaW5lYXJWZWxvY2l0eSA9IGJvZHkuZ2V0TGluZWFyVmVsb2NpdHkoKTsKICAgICAgICB2YXIgc3BlZWQgPSBsaW5lYXJWZWxvY2l0eS5sZW5ndGgoKTsKICAgICAgICB2YXIgZm9yd2FyZERpciA9IHRyYW5zZm9ybS5nZXRCYXNpcygpLmdldFJvdygyKTsKICAgICAgICBmb3J3YXJkRGlyLm5vcm1hbGl6ZSgpOwogICAgICAgIHZhciB3YWxrRGlyZWN0aW9uID0gbmV3IEFtbW8uYnRWZWN0b3IzKDAuMCwgMC4wLCAwLjApOwogICAgICAgIHZhciB3YWxrU3BlZWQgPSB3YWxrVmVsb2NpdHkgKiBkdDsKCiAgICAgICAgaWYgKG1vdmVtZW50LmZvcndhcmQpIHsKICAgICAgICAgIHdhbGtEaXJlY3Rpb24uc2V0WCh3YWxrRGlyZWN0aW9uLngoKSArIGZvcndhcmREaXIueCgpKTsgLy93YWxrRGlyZWN0aW9uLnNldFkoIHdhbGtEaXJlY3Rpb24ueSgpICsgZm9yd2FyZERpci55KCkpOwoKICAgICAgICAgIHdhbGtEaXJlY3Rpb24uc2V0Wih3YWxrRGlyZWN0aW9uLnooKSArIGZvcndhcmREaXIueigpKTsKICAgICAgICB9CgogICAgICAgIGlmIChtb3ZlbWVudC5iYWNrd2FyZHMpIHsKICAgICAgICAgIHdhbGtEaXJlY3Rpb24uc2V0WCh3YWxrRGlyZWN0aW9uLngoKSAtIGZvcndhcmREaXIueCgpKTsgLy93YWxrRGlyZWN0aW9uLnNldFkoIHdhbGtEaXJlY3Rpb24ueSgpIC0gZm9yd2FyZERpci55KCkpOwoKICAgICAgICAgIHdhbGtEaXJlY3Rpb24uc2V0Wih3YWxrRGlyZWN0aW9uLnooKSAtIGZvcndhcmREaXIueigpKTsKICAgICAgICB9CgogICAgICAgIGlmICghbW92ZW1lbnQuZm9yd2FyZCAmJiAhbW92ZW1lbnQuYmFja3dhcmRzKSB7CiAgICAgICAgICBsaW5lYXJWZWxvY2l0eS5zZXRYKGxpbmVhclZlbG9jaXR5LngoKSAqIDAuMik7CiAgICAgICAgICBsaW5lYXJWZWxvY2l0eS5zZXRaKGxpbmVhclZlbG9jaXR5LnooKSAqIDAuMik7CiAgICAgICAgfSBlbHNlIGlmIChzcGVlZCA8IE1BWF9TUEVFRCkgewogICAgICAgICAgbGluZWFyVmVsb2NpdHkuc2V0WChsaW5lYXJWZWxvY2l0eS54KCkgKyBjYW1lcmFEaXJlY3Rpb24ueCAqIHdhbGtTcGVlZCk7CiAgICAgICAgICBsaW5lYXJWZWxvY2l0eS5zZXRaKGxpbmVhclZlbG9jaXR5LnooKSArIGNhbWVyYURpcmVjdGlvbi56ICogd2Fsa1NwZWVkKTsKICAgICAgICB9CgogICAgICAgIGJvZHkuc2V0TGluZWFyVmVsb2NpdHkobGluZWFyVmVsb2NpdHkpOwogICAgICAgIGJvZHkuZ2V0TW90aW9uU3RhdGUoKS5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICAgIGJvZHkuc2V0Q2VudGVyT2ZNYXNzVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgICAgdmFyIG9yaWdpbiA9IHRyYW5zZm9ybS5nZXRPcmlnaW4oKTsKICAgICAgICB2YXIgcm90YXRpb24gPSB0cmFuc2Zvcm0uZ2V0Um90YXRpb24oKTsKICAgICAgICBkaXNwYXRjaGVyLnNlbmRCb2R5VXBkYXRlKHV1aWQsIG9yaWdpbiwgcm90YXRpb24sIGR0KTsKICAgICAgfQogICAgfTsKCiAgICB2YXIgQ2xvY2sgPQogICAgLyojX19QVVJFX18qLwogICAgZnVuY3Rpb24gKCkgewogICAgICBmdW5jdGlvbiBDbG9jaygpIHsKICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ2xvY2spOwoKICAgICAgICB0aGlzLnRpbWVzdGFtcCA9IG51bGw7CiAgICAgIH0KCiAgICAgIF9jcmVhdGVDbGFzcyhDbG9jaywgW3sKICAgICAgICBrZXk6ICJnZXREZWx0YSIsCiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlbHRhKCkgewogICAgICAgICAgdmFyIHRpbWUgPSBEYXRlLm5vdygpOwoKICAgICAgICAgIGlmICh0aGlzLnRpbWVzdGFtcCkgewogICAgICAgICAgICB2YXIgZGVsdGEgPSB0aW1lIC0gdGhpcy50aW1lc3RhbXA7CiAgICAgICAgICAgIHRoaXMudGltZXN0YW1wID0gdGltZTsKICAgICAgICAgICAgcmV0dXJuIGRlbHRhOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy50aW1lc3RhbXAgPSB0aW1lOwogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH1dKTsKCiAgICAgIHJldHVybiBDbG9jazsKICAgIH0oKTsKCiAgICB2YXIgV29ybGQgPQogICAgLyojX19QVVJFX18qLwogICAgZnVuY3Rpb24gKCkgewogICAgICBmdW5jdGlvbiBXb3JsZCgpIHsKICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwoKICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgV29ybGQpOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImluaXQiLCBmdW5jdGlvbiAob3B0aW9ucykgewogICAgICAgICAgdmFyIF9vcHRpb25zJGdyYXZpdHkgPSBvcHRpb25zLmdyYXZpdHksCiAgICAgICAgICAgICAgZ3Jhdml0eSA9IF9vcHRpb25zJGdyYXZpdHkgPT09IHZvaWQgMCA/IEdSQVZJVFkgOiBfb3B0aW9ucyRncmF2aXR5OwogICAgICAgICAgX3RoaXMuY29sbGlzaW9uQ29uZmlndXJhdGlvbiA9IG5ldyBBbW1vLmJ0RGVmYXVsdENvbGxpc2lvbkNvbmZpZ3VyYXRpb24oKTsKICAgICAgICAgIF90aGlzLmRpc3BhdGNoZXIgPSBuZXcgQW1tby5idENvbGxpc2lvbkRpc3BhdGNoZXIoX3RoaXMuY29sbGlzaW9uQ29uZmlndXJhdGlvbik7CiAgICAgICAgICBfdGhpcy5icm9hZHBoYXNlID0gbmV3IEFtbW8uYnREYnZ0QnJvYWRwaGFzZSgpOwogICAgICAgICAgX3RoaXMuc29sdmVyID0gbmV3IEFtbW8uYnRTZXF1ZW50aWFsSW1wdWxzZUNvbnN0cmFpbnRTb2x2ZXIoKTsKICAgICAgICAgIF90aGlzLmR5bmFtaWNzV29ybGQgPSBuZXcgQW1tby5idERpc2NyZXRlRHluYW1pY3NXb3JsZChfdGhpcy5kaXNwYXRjaGVyLCBfdGhpcy5icm9hZHBoYXNlLCBfdGhpcy5zb2x2ZXIsIF90aGlzLmNvbGxpc2lvbkNvbmZpZ3VyYXRpb24pOwoKICAgICAgICAgIF90aGlzLmR5bmFtaWNzV29ybGQuc2V0R3Jhdml0eShuZXcgQW1tby5idFZlY3RvcjMoZ3Jhdml0eS54LCBncmF2aXR5LnksIGdyYXZpdHkueikpOyAvLyB0aGlzIGlzIG5lZWRlZCBmb3IgZ2hvc3RPYmplY3QgY29sbGlzaW9ucwoKCiAgICAgICAgICBfdGhpcy5keW5hbWljc1dvcmxkLmdldEJyb2FkcGhhc2UoKS5nZXRPdmVybGFwcGluZ1BhaXJDYWNoZSgpLnNldEludGVybmFsR2hvc3RQYWlyQ2FsbGJhY2sobmV3IEFtbW8uYnRHaG9zdFBhaXJDYWxsYmFjaygpKTsKCiAgICAgICAgICBfdGhpcy5pbml0aWFsaXNlZCA9IHRydWU7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAicmVtb3ZlRWxlbWVudCIsIGZ1bmN0aW9uICh1dWlkKSB7CiAgICAgICAgICBpZiAoX3RoaXMuaGFzRWxlbWVudCh1dWlkKSkgewogICAgICAgICAgICBfdGhpcy5lbGVtZW50c1t1dWlkXS5kZWxldGVkID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJyZW1vdmVEZWxldGVkRWxlbWVudHMiLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoX3RoaXMuZWxlbWVudHMpLmZpbHRlcihmdW5jdGlvbiAodXVpZCkgewogICAgICAgICAgICByZXR1cm4gX3RoaXMuZWxlbWVudHNbdXVpZF0uZGVsZXRlZDsKICAgICAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24gKHV1aWQpIHsKICAgICAgICAgICAgZGVsZXRlIF90aGlzLmVsZW1lbnRzW3V1aWRdOwogICAgICAgICAgfSk7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiaGFzRWxlbWVudCIsIGZ1bmN0aW9uICh1dWlkKSB7CiAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoX3RoaXMuZWxlbWVudHMpLmluY2x1ZGVzKHV1aWQpOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImdldEVsZW1lbnQiLCBmdW5jdGlvbiAodXVpZCkgewogICAgICAgICAgcmV0dXJuIF90aGlzLmVsZW1lbnRzW3V1aWRdOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImlzSW5pdGlhbGlzZWQiLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gX3RoaXMuaW5pdGlhbGlzZWQ7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiZ2V0RHluYW1pY3NXb3JsZCIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiBfdGhpcy5keW5hbWljc1dvcmxkOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImFkZFJpZ2lkQm9keSIsIGZ1bmN0aW9uIChib2R5KSB7CiAgICAgICAgICBfdGhpcy5keW5hbWljc1dvcmxkLmFkZFJpZ2lkQm9keShib2R5KTsKICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJhZGRBY3Rpb24iLCBmdW5jdGlvbiAoYWN0aW9uKSB7CiAgICAgICAgICBfdGhpcy5keW5hbWljc1dvcmxkLmFkZEFjdGlvbihhY3Rpb24pOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImFkZENvbGxpc2lvbk9iamVjdCIsIGZ1bmN0aW9uIChjb2xsaXNpb25PYmplY3QpIHsKICAgICAgICAgIF90aGlzLmR5bmFtaWNzV29ybGQuYWRkQ29sbGlzaW9uT2JqZWN0KGNvbGxpc2lvbk9iamVjdCk7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAic3RlcFNpbXVsYXRpb24iLCBmdW5jdGlvbiAoZHQpIHsKICAgICAgICAgIF90aGlzLmR5bmFtaWNzV29ybGQuc3RlcFNpbXVsYXRpb24oZHQpOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInNpbXVsYXRlIiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGR0ID0gX3RoaXMuY2xvY2suZ2V0RGVsdGEoKTsKCiAgICAgICAgICBfdGhpcy5zdGVwU2ltdWxhdGlvbihkdCk7CgogICAgICAgICAgT2JqZWN0LmtleXMoX3RoaXMuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKHV1aWQpIHsKICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBfdGhpcy5nZXRFbGVtZW50KHV1aWQpOwoKICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHsKICAgICAgICAgICAgICBzd2l0Y2ggKGVsZW1lbnQudHlwZSkgewogICAgICAgICAgICAgICAgY2FzZSBUWVBFUy5CT1g6CiAgICAgICAgICAgICAgICBjYXNlIFRZUEVTLlNQSEVSRToKICAgICAgICAgICAgICAgIGNhc2UgVFlQRVMuTUVTSDoKICAgICAgICAgICAgICAgICAgaGFuZGxlRWxlbWVudFVwZGF0ZShlbGVtZW50LCBkdCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgVFlQRVMuUExBWUVSOgogICAgICAgICAgICAgICAgICBoYW5kbGVQbGF5ZXJVcGRhdGUoZWxlbWVudCwgZHQpOwogICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIFRZUEVTLlZFSElDTEU6CiAgICAgICAgICAgICAgICAgIGhhbmRsZVZlaGljbGVVcGRhdGUoZWxlbWVudCwgZHQpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwoKICAgICAgICAgIF90aGlzLmNhbGN1bGF0ZUNvbGxpc2lvbnMoKTsKCiAgICAgICAgICBfdGhpcy5yZW1vdmVEZWxldGVkRWxlbWVudHMoKTsKCiAgICAgICAgICBkaXNwYXRjaGVyJDEuc2VuZFBoeXNpY3NVcGRhdGUoZHQpOwogICAgICAgICAgX3RoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3RoaXMuc2ltdWxhdGUuYmluZChfdGhpcykpOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImNhbGN1bGF0ZUNvbGxpc2lvbnMiLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgYW1tb0Rpc3BhdGNoZXIgPSBfdGhpcy5keW5hbWljc1dvcmxkLmdldERpc3BhdGNoZXIoKTsKCiAgICAgICAgICB2YXIgbnVtTWFuaWZvbGRzID0gYW1tb0Rpc3BhdGNoZXIuZ2V0TnVtTWFuaWZvbGRzKCk7CgogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1NYW5pZm9sZHM7IGkrKykgewogICAgICAgICAgICB2YXIgY29udGFjdE1hbmlmb2xkID0gYW1tb0Rpc3BhdGNoZXIuZ2V0TWFuaWZvbGRCeUluZGV4SW50ZXJuYWwoaSk7CiAgICAgICAgICAgIHZhciByYjAgPSBBbW1vLmNhc3RPYmplY3QoY29udGFjdE1hbmlmb2xkLmdldEJvZHkwKCksIEFtbW8uYnRSaWdpZEJvZHkpOwogICAgICAgICAgICB2YXIgcmIxID0gQW1tby5jYXN0T2JqZWN0KGNvbnRhY3RNYW5pZm9sZC5nZXRCb2R5MSgpLCBBbW1vLmJ0UmlnaWRCb2R5KTsKICAgICAgICAgICAgdmFyIG51bUNvbnRhY3RzID0gY29udGFjdE1hbmlmb2xkLmdldE51bUNvbnRhY3RzKCk7IC8vIHRoaXMgaXRlcmF0aW9uIGRvZXNuJ3QgaGF2ZSB1dWlkcwoKICAgICAgICAgICAgaWYgKCFyYjAudXVpZCB8fCAhcmIxLnV1aWQpIGNvbnRpbnVlOwogICAgICAgICAgICB2YXIgY29udGFjdHMgPSBbXTsKCiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbnVtQ29udGFjdHM7IGorKykgewogICAgICAgICAgICAgIHZhciBjb250YWN0UG9pbnQgPSBjb250YWN0TWFuaWZvbGQuZ2V0Q29udGFjdFBvaW50KGopOwogICAgICAgICAgICAgIHZhciBkaXN0YW5jZSA9IGNvbnRhY3RQb2ludC5nZXREaXN0YW5jZSgpOwogICAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+IDAuMCkgY29udGludWU7CiAgICAgICAgICAgICAgdmFyIHZlbG9jaXR5MCA9IHJiMC5nZXRMaW5lYXJWZWxvY2l0eSgpOwogICAgICAgICAgICAgIHZhciB2ZWxvY2l0eTEgPSByYjEuZ2V0TGluZWFyVmVsb2NpdHkoKTsKICAgICAgICAgICAgICB2YXIgd29ybGRQb3MwID0gY29udGFjdFBvaW50LmdldF9tX3Bvc2l0aW9uV29ybGRPbkEoKTsKICAgICAgICAgICAgICB2YXIgd29ybGRQb3MxID0gY29udGFjdFBvaW50LmdldF9tX3Bvc2l0aW9uV29ybGRPbkIoKTsKICAgICAgICAgICAgICB2YXIgbG9jYWxQb3MwID0gY29udGFjdFBvaW50LmdldF9tX2xvY2FsUG9pbnRBKCk7CiAgICAgICAgICAgICAgdmFyIGxvY2FsUG9zMSA9IGNvbnRhY3RQb2ludC5nZXRfbV9sb2NhbFBvaW50QigpOwogICAgICAgICAgICAgIGNvbnRhY3RzLnB1c2goewogICAgICAgICAgICAgICAgZGlzdGFuY2U6IGRpc3RhbmNlLAogICAgICAgICAgICAgICAgZWxlbWVudHM6IFt7CiAgICAgICAgICAgICAgICAgIHV1aWQ6IHJiMC51dWlkLAogICAgICAgICAgICAgICAgICB2ZWxvY2l0eTogewogICAgICAgICAgICAgICAgICAgIHg6IHZlbG9jaXR5MC54KCksCiAgICAgICAgICAgICAgICAgICAgeTogdmVsb2NpdHkwLnkoKSwKICAgICAgICAgICAgICAgICAgICB6OiB2ZWxvY2l0eTAueigpCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIHdvcmxkUG9zOiB7CiAgICAgICAgICAgICAgICAgICAgeDogd29ybGRQb3MwLngoKSwKICAgICAgICAgICAgICAgICAgICB5OiB3b3JsZFBvczAueSgpLAogICAgICAgICAgICAgICAgICAgIHo6IHdvcmxkUG9zMC56KCkKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgbG9jYWxQb3M6IHsKICAgICAgICAgICAgICAgICAgICB4OiBsb2NhbFBvczAueCgpLAogICAgICAgICAgICAgICAgICAgIHk6IGxvY2FsUG9zMC55KCksCiAgICAgICAgICAgICAgICAgICAgejogbG9jYWxQb3MwLnooKQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgIHV1aWQ6IHJiMS51dWlkLAogICAgICAgICAgICAgICAgICB2ZWxvY2l0eTogewogICAgICAgICAgICAgICAgICAgIHg6IHZlbG9jaXR5MS54KCksCiAgICAgICAgICAgICAgICAgICAgeTogdmVsb2NpdHkxLnkoKSwKICAgICAgICAgICAgICAgICAgICB6OiB2ZWxvY2l0eTEueigpCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIHdvcmxkUG9zOiB7CiAgICAgICAgICAgICAgICAgICAgeDogd29ybGRQb3MxLngoKSwKICAgICAgICAgICAgICAgICAgICB5OiB3b3JsZFBvczEueSgpLAogICAgICAgICAgICAgICAgICAgIHo6IHdvcmxkUG9zMS56KCkKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgbG9jYWxQb3M6IHsKICAgICAgICAgICAgICAgICAgICB4OiBsb2NhbFBvczEueCgpLAogICAgICAgICAgICAgICAgICAgIHk6IGxvY2FsUG9zMS55KCksCiAgICAgICAgICAgICAgICAgICAgejogbG9jYWxQb3MxLnooKQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICBkaXNwYXRjaGVyJDEuc2VuZERpc3BhdGNoRXZlbnQocmIwLnV1aWQsIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuQ09MTElTSU9OLCB7CiAgICAgICAgICAgICAgY29udGFjdHM6IGNvbnRhY3RzCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBkaXNwYXRjaGVyJDEuc2VuZERpc3BhdGNoRXZlbnQocmIxLnV1aWQsIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuQ09MTElTSU9OLCB7CiAgICAgICAgICAgICAgY29udGFjdHM6IGNvbnRhY3RzCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImFkZEVsZW1lbnQiLCBmdW5jdGlvbiAoZGF0YSkgewogICAgICAgICAgX3RoaXMuZWxlbWVudHNbZGF0YS51dWlkXSA9IGRhdGE7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAidXBkYXRlQm9keVN0YXRlIiwgZnVuY3Rpb24gKF9yZWYpIHsKICAgICAgICAgIHZhciB1dWlkID0gX3JlZi51dWlkLAogICAgICAgICAgICAgIHN0YXRlID0gX3JlZi5zdGF0ZTsKICAgICAgICAgIF90aGlzLmVsZW1lbnRzW3V1aWRdLnN0YXRlID0gX29iamVjdFNwcmVhZDIoe30sIF90aGlzLmVsZW1lbnRzW3V1aWRdLnN0YXRlLCB7fSwgc3RhdGUpOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInRlcm1pbmF0ZSIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFtbW8uZGVzdHJveShfdGhpcy5keW5hbWljc1dvcmxkKTsKICAgICAgICAgIEFtbW8uZGVzdHJveShfdGhpcy5zb2x2ZXIpOwogICAgICAgICAgQW1tby5kZXN0cm95KF90aGlzLmRpc3BhdGNoZXIpOwogICAgICAgICAgQW1tby5kZXN0cm95KF90aGlzLmNvbGxpc2lvbkNvbmZpZ3VyYXRpb24pOwogICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoX3RoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQpOwogICAgICAgICAgZGlzcGF0Y2hlciQxLnNlbmRUZXJtaW5hdGVFdmVudCgpOwogICAgICAgIH0pOwoKICAgICAgICB0aGlzLmVsZW1lbnRzID0ge307CiAgICAgICAgdGhpcy5pbml0aWFsaXNlZCA9IGZhbHNlOwogICAgICAgIHRoaXMuY29sbGlzaW9uQ29uZmlndXJhdGlvbiA9IHVuZGVmaW5lZDsKICAgICAgICB0aGlzLmRpc3BhdGNoZXIgPSB1bmRlZmluZWQ7CiAgICAgICAgdGhpcy5icm9hZHBoYXNlID0gdW5kZWZpbmVkOwogICAgICAgIHRoaXMuc29sdmVyID0gdW5kZWZpbmVkOwogICAgICAgIHRoaXMuZHluYW1pY3NXb3JsZCA9IHVuZGVmaW5lZDsKICAgICAgICB0aGlzLnJlcXVlc3RBbmltYXRpb25GcmFtZUlkID0gbnVsbDsKICAgICAgICB0aGlzLmNsb2NrID0gbmV3IENsb2NrKCk7CiAgICAgIH0KCiAgICAgIF9jcmVhdGVDbGFzcyhXb3JsZCwgW3sKICAgICAgICBrZXk6ICJkaXNwb3NlQm9keSIsCiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRpc3Bvc2VCb2R5KF9yZWYyKSB7CiAgICAgICAgICB2YXIgdXVpZCA9IF9yZWYyLnV1aWQ7CiAgICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuZ2V0RWxlbWVudCh1dWlkKTsKICAgICAgICAgIHRoaXMuZHluYW1pY3NXb3JsZC5yZW1vdmVSaWdpZEJvZHkoZWxlbWVudC5ib2R5KTsKICAgICAgICAgIHRoaXMucmVtb3ZlRWxlbWVudCh1dWlkKTsKICAgICAgICAgIGRpc3BhdGNoZXIkMS5zZW5kRWxlbWVudERpc3Bvc2VkKHsKICAgICAgICAgICAgdXVpZDogdXVpZAogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9XSk7CgogICAgICByZXR1cm4gV29ybGQ7CiAgICB9KCk7CiAgICB2YXIgd29ybGQgPSBuZXcgV29ybGQoKTsKCiAgICB2YXIgREVGQVVMVF9ST0xMX0lORkxVRU5DRSA9IDAuMjsKICAgIHZhciBERUZBVUxUX0ZSSUNUSU9OID0gMTAwMDsKICAgIHZhciBERUZBVUxUX01BU1MgPSA4MDA7CiAgICB2YXIgYWRkVmVoaWNsZSA9IGZ1bmN0aW9uIGFkZFZlaGljbGUoZGF0YSkgewogICAgICB2YXIgcG9zaXRpb24gPSBkYXRhLnBvc2l0aW9uLAogICAgICAgICAgcXVhdGVybmlvbiA9IGRhdGEucXVhdGVybmlvbiwKICAgICAgICAgIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICB3aGVlbHMgPSBkYXRhLndoZWVscywKICAgICAgICAgIF9kYXRhJG1hc3MgPSBkYXRhLm1hc3MsCiAgICAgICAgICBtYXNzID0gX2RhdGEkbWFzcyA9PT0gdm9pZCAwID8gREVGQVVMVF9NQVNTIDogX2RhdGEkbWFzcywKICAgICAgICAgIF9kYXRhJHdpZHRoID0gZGF0YS53aWR0aCwKICAgICAgICAgIHdpZHRoID0gX2RhdGEkd2lkdGggPT09IHZvaWQgMCA/IDEuOCA6IF9kYXRhJHdpZHRoLAogICAgICAgICAgX2RhdGEkaGVpZ2h0ID0gZGF0YS5oZWlnaHQsCiAgICAgICAgICBoZWlnaHQgPSBfZGF0YSRoZWlnaHQgPT09IHZvaWQgMCA/IC42IDogX2RhdGEkaGVpZ2h0LAogICAgICAgICAgX2RhdGEkbGVuZ3RoID0gZGF0YS5sZW5ndGgsCiAgICAgICAgICBsZW5ndGggPSBfZGF0YSRsZW5ndGggPT09IHZvaWQgMCA/IDQgOiBfZGF0YSRsZW5ndGgsCiAgICAgICAgICBfZGF0YSRmcmljdGlvbiA9IGRhdGEuZnJpY3Rpb24sCiAgICAgICAgICBmcmljdGlvbiA9IF9kYXRhJGZyaWN0aW9uID09PSB2b2lkIDAgPyBERUZBVUxUX0ZSSUNUSU9OIDogX2RhdGEkZnJpY3Rpb24sCiAgICAgICAgICBfZGF0YSRyb2xsSW5mbHVlbmNlID0gZGF0YS5yb2xsSW5mbHVlbmNlLAogICAgICAgICAgcm9sbEluZmx1ZW5jZSA9IF9kYXRhJHJvbGxJbmZsdWVuY2UgPT09IHZvaWQgMCA/IERFRkFVTFRfUk9MTF9JTkZMVUVOQ0UgOiBfZGF0YSRyb2xsSW5mbHVlbmNlLAogICAgICAgICAgX2RhdGEkd2hlZWxzT3B0aW9ucyA9IGRhdGEud2hlZWxzT3B0aW9ucywKICAgICAgICAgIHdoZWVsc09wdGlvbnMgPSBfZGF0YSR3aGVlbHNPcHRpb25zID09PSB2b2lkIDAgPyB7fSA6IF9kYXRhJHdoZWVsc09wdGlvbnMsCiAgICAgICAgICBfZGF0YSRzdXNwZW5zaW9ucyA9IGRhdGEuc3VzcGVuc2lvbnMsCiAgICAgICAgICBzdXNwZW5zaW9ucyA9IF9kYXRhJHN1c3BlbnNpb25zID09PSB2b2lkIDAgPyB7fSA6IF9kYXRhJHN1c3BlbnNpb25zOwogICAgICB2YXIgX3doZWVsc09wdGlvbnMkYmFjayA9IHdoZWVsc09wdGlvbnMuYmFjaywKICAgICAgICAgIGJhY2sgPSBfd2hlZWxzT3B0aW9ucyRiYWNrID09PSB2b2lkIDAgPyB7fSA6IF93aGVlbHNPcHRpb25zJGJhY2ssCiAgICAgICAgICBfd2hlZWxzT3B0aW9ucyRmcm9udCA9IHdoZWVsc09wdGlvbnMuZnJvbnQsCiAgICAgICAgICBmcm9udCA9IF93aGVlbHNPcHRpb25zJGZyb250ID09PSB2b2lkIDAgPyB7fSA6IF93aGVlbHNPcHRpb25zJGZyb250OwogICAgICB2YXIgX2JhY2skYXhpc1Bvc2l0aW9uID0gYmFjay5heGlzUG9zaXRpb24sCiAgICAgICAgICBheGlzUG9zaXRpb25CYWNrID0gX2JhY2skYXhpc1Bvc2l0aW9uID09PSB2b2lkIDAgPyAtMSA6IF9iYWNrJGF4aXNQb3NpdGlvbiwKICAgICAgICAgIF9iYWNrJHJhZGl1cyA9IGJhY2sucmFkaXVzLAogICAgICAgICAgd2hlZWxSYWRpdXNCYWNrID0gX2JhY2skcmFkaXVzID09PSB2b2lkIDAgPyAuNCA6IF9iYWNrJHJhZGl1cywKICAgICAgICAgIF9iYWNrJGhhbGZUcmFjayA9IGJhY2suaGFsZlRyYWNrLAogICAgICAgICAgd2hlZWxIYWxmVHJhY2tCYWNrID0gX2JhY2skaGFsZlRyYWNrID09PSB2b2lkIDAgPyAxIDogX2JhY2skaGFsZlRyYWNrLAogICAgICAgICAgX2JhY2skYXhpc0hlaWdodCA9IGJhY2suYXhpc0hlaWdodCwKICAgICAgICAgIHdoZWVsQXhpc0hlaWdodEJhY2sgPSBfYmFjayRheGlzSGVpZ2h0ID09PSB2b2lkIDAgPyAuMyA6IF9iYWNrJGF4aXNIZWlnaHQ7CiAgICAgIHZhciBfZnJvbnQkYXhpc1Bvc2l0aW9uID0gZnJvbnQuYXhpc1Bvc2l0aW9uLAogICAgICAgICAgYXhpc1Bvc2l0aW9uRnJvbnQgPSBfZnJvbnQkYXhpc1Bvc2l0aW9uID09PSB2b2lkIDAgPyAxLjcgOiBfZnJvbnQkYXhpc1Bvc2l0aW9uLAogICAgICAgICAgX2Zyb250JHJhZGl1cyA9IGZyb250LnJhZGl1cywKICAgICAgICAgIHdoZWVsUmFkaXVzRnJvbnQgPSBfZnJvbnQkcmFkaXVzID09PSB2b2lkIDAgPyAuNCA6IF9mcm9udCRyYWRpdXMsCiAgICAgICAgICBfZnJvbnQkaGFsZlRyYWNrID0gZnJvbnQuaGFsZlRyYWNrLAogICAgICAgICAgd2hlZWxIYWxmVHJhY2tGcm9udCA9IF9mcm9udCRoYWxmVHJhY2sgPT09IHZvaWQgMCA/IDEgOiBfZnJvbnQkaGFsZlRyYWNrLAogICAgICAgICAgX2Zyb250JGF4aXNIZWlnaHQgPSBmcm9udC5heGlzSGVpZ2h0LAogICAgICAgICAgd2hlZWxBeGlzSGVpZ2h0RnJvbnQgPSBfZnJvbnQkYXhpc0hlaWdodCA9PT0gdm9pZCAwID8gLjMgOiBfZnJvbnQkYXhpc0hlaWdodDsKICAgICAgdmFyIF9zdXNwZW5zaW9ucyRzdGlmZm5lcyA9IHN1c3BlbnNpb25zLnN0aWZmbmVzcywKICAgICAgICAgIHN0aWZmbmVzcyA9IF9zdXNwZW5zaW9ucyRzdGlmZm5lcyA9PT0gdm9pZCAwID8gMjAuMCA6IF9zdXNwZW5zaW9ucyRzdGlmZm5lcywKICAgICAgICAgIF9zdXNwZW5zaW9ucyRkYW1waW5nID0gc3VzcGVuc2lvbnMuZGFtcGluZywKICAgICAgICAgIGRhbXBpbmcgPSBfc3VzcGVuc2lvbnMkZGFtcGluZyA9PT0gdm9pZCAwID8gMi4zIDogX3N1c3BlbnNpb25zJGRhbXBpbmcsCiAgICAgICAgICBfc3VzcGVuc2lvbnMkY29tcHJlc3MgPSBzdXNwZW5zaW9ucy5jb21wcmVzc2lvbiwKICAgICAgICAgIGNvbXByZXNzaW9uID0gX3N1c3BlbnNpb25zJGNvbXByZXNzID09PSB2b2lkIDAgPyA0LjQgOiBfc3VzcGVuc2lvbnMkY29tcHJlc3MsCiAgICAgICAgICBfc3VzcGVuc2lvbnMkcmVzdExlbmcgPSBzdXNwZW5zaW9ucy5yZXN0TGVuZ3RoLAogICAgICAgICAgcmVzdExlbmd0aCA9IF9zdXNwZW5zaW9ucyRyZXN0TGVuZyA9PT0gdm9pZCAwID8gMC42IDogX3N1c3BlbnNpb25zJHJlc3RMZW5nOyAvLyBDaGFzc2lzCgogICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgQW1tby5idEJveFNoYXBlKG5ldyBBbW1vLmJ0VmVjdG9yMyh3aWR0aCAqIC41LCBoZWlnaHQgKiAuNSwgbGVuZ3RoICogLjUpKTsKICAgICAgdmFyIHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7CiAgICAgIHRyYW5zZm9ybS5zZXRJZGVudGl0eSgpOwogICAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKG5ldyBBbW1vLmJ0VmVjdG9yMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KSk7CiAgICAgIHRyYW5zZm9ybS5zZXRSb3RhdGlvbihuZXcgQW1tby5idFF1YXRlcm5pb24ocXVhdGVybmlvbi54LCBxdWF0ZXJuaW9uLnksIHF1YXRlcm5pb24ueiwgcXVhdGVybmlvbi53KSk7CiAgICAgIHZhciBtb3Rpb25TdGF0ZSA9IG5ldyBBbW1vLmJ0RGVmYXVsdE1vdGlvblN0YXRlKHRyYW5zZm9ybSk7CiAgICAgIHZhciBsb2NhbEluZXJ0aWEgPSBuZXcgQW1tby5idFZlY3RvcjMoMCwgMCwgMCk7CiAgICAgIGdlb21ldHJ5LmNhbGN1bGF0ZUxvY2FsSW5lcnRpYShtYXNzLCBsb2NhbEluZXJ0aWEpOwogICAgICB2YXIgY2hhc3NpcyA9IG5ldyBBbW1vLmJ0UmlnaWRCb2R5KG5ldyBBbW1vLmJ0UmlnaWRCb2R5Q29uc3RydWN0aW9uSW5mbyhtYXNzLCBtb3Rpb25TdGF0ZSwgZ2VvbWV0cnksIGxvY2FsSW5lcnRpYSkpOwogICAgICBjaGFzc2lzLnNldEFjdGl2YXRpb25TdGF0ZShESVNBQkxFX0RFQUNUSVZBVElPTik7CiAgICAgIHdvcmxkLmFkZFJpZ2lkQm9keShjaGFzc2lzKTsgLy8gUmF5Y2FzdCBWZWhpY2xlCgogICAgICB2YXIgdHVuaW5nID0gbmV3IEFtbW8uYnRWZWhpY2xlVHVuaW5nKCk7CiAgICAgIHZhciByYXlDYXN0ZXIgPSBuZXcgQW1tby5idERlZmF1bHRWZWhpY2xlUmF5Y2FzdGVyKHdvcmxkLmdldER5bmFtaWNzV29ybGQoKSk7CiAgICAgIHZhciB2ZWhpY2xlID0gbmV3IEFtbW8uYnRSYXljYXN0VmVoaWNsZSh0dW5pbmcsIGNoYXNzaXMsIHJheUNhc3Rlcik7CiAgICAgIHZlaGljbGUuc2V0Q29vcmRpbmF0ZVN5c3RlbSgwLCAxLCAyKTsKICAgICAgd29ybGQuYWRkQWN0aW9uKHZlaGljbGUpOwogICAgICB2YXIgd2hlZWxEaXJlY3Rpb25DUzAgPSBuZXcgQW1tby5idFZlY3RvcjMoMCwgLTEsIDApOwogICAgICB2YXIgd2hlZWxBeGxlQ1MgPSBuZXcgQW1tby5idFZlY3RvcjMoLTEsIDAsIDApOwoKICAgICAgdmFyIGFkZFdoZWVsID0gZnVuY3Rpb24gYWRkV2hlZWwoaXNGcm9udCwgcG9zLCByYWRpdXMpIHsKICAgICAgICB2YXIgd2hlZWxJbmZvID0gdmVoaWNsZS5hZGRXaGVlbChwb3MsIHdoZWVsRGlyZWN0aW9uQ1MwLCB3aGVlbEF4bGVDUywgcmVzdExlbmd0aCwgcmFkaXVzLCB0dW5pbmcsIGlzRnJvbnQpOwogICAgICAgIHdoZWVsSW5mby5zZXRfbV9zdXNwZW5zaW9uU3RpZmZuZXNzKHN0aWZmbmVzcyk7CiAgICAgICAgd2hlZWxJbmZvLnNldF9tX3doZWVsc0RhbXBpbmdSZWxheGF0aW9uKGRhbXBpbmcpOwogICAgICAgIHdoZWVsSW5mby5zZXRfbV93aGVlbHNEYW1waW5nQ29tcHJlc3Npb24oY29tcHJlc3Npb24pOwogICAgICAgIHdoZWVsSW5mby5zZXRfbV9mcmljdGlvblNsaXAoZnJpY3Rpb24pOwogICAgICAgIHdoZWVsSW5mby5zZXRfbV9yb2xsSW5mbHVlbmNlKHJvbGxJbmZsdWVuY2UpOwogICAgICB9OwoKICAgICAgYWRkV2hlZWwodHJ1ZSwgbmV3IEFtbW8uYnRWZWN0b3IzKHdoZWVsSGFsZlRyYWNrRnJvbnQsIHdoZWVsQXhpc0hlaWdodEZyb250LCBheGlzUG9zaXRpb25Gcm9udCksIHdoZWVsUmFkaXVzRnJvbnQpOwogICAgICBhZGRXaGVlbCh0cnVlLCBuZXcgQW1tby5idFZlY3RvcjMoLXdoZWVsSGFsZlRyYWNrRnJvbnQsIHdoZWVsQXhpc0hlaWdodEZyb250LCBheGlzUG9zaXRpb25Gcm9udCksIHdoZWVsUmFkaXVzRnJvbnQpOwogICAgICBhZGRXaGVlbChmYWxzZSwgbmV3IEFtbW8uYnRWZWN0b3IzKC13aGVlbEhhbGZUcmFja0JhY2ssIHdoZWVsQXhpc0hlaWdodEJhY2ssIGF4aXNQb3NpdGlvbkJhY2spLCB3aGVlbFJhZGl1c0JhY2spOwogICAgICBhZGRXaGVlbChmYWxzZSwgbmV3IEFtbW8uYnRWZWN0b3IzKHdoZWVsSGFsZlRyYWNrQmFjaywgd2hlZWxBeGlzSGVpZ2h0QmFjaywgYXhpc1Bvc2l0aW9uQmFjayksIHdoZWVsUmFkaXVzQmFjayk7CiAgICAgIHZlaGljbGUudXVpZCA9IHV1aWQ7CiAgICAgIHdvcmxkLnNldEJvZHkoewogICAgICAgIHR5cGU6IFRZUEVTLlZFSElDTEUsCiAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICB2ZWhpY2xlOiB2ZWhpY2xlLAogICAgICAgIHdoZWVsczogd2hlZWxzLAogICAgICAgIG9wdGlvbnM6IGRhdGEsCiAgICAgICAgc3RhdGU6IERFRkFVTFRfVkVISUNMRV9TVEFURQogICAgICB9KTsKICAgIH07CiAgICB2YXIgc2V0VmVoaWNsZVBvc2l0aW9uID0gZnVuY3Rpb24gc2V0VmVoaWNsZVBvc2l0aW9uKGRhdGEpIHsKICAgICAgdmFyIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICBwb3NpdGlvbiA9IGRhdGEucG9zaXRpb247CiAgICAgIHZhciBlbGVtZW50ID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKTsKCiAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFRZUEVTLlZFSElDTEUpIHsKICAgICAgICB2YXIgYm9keSA9IGVsZW1lbnQudmVoaWNsZS5nZXRSaWdpZEJvZHkoKTsKICAgICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgICBib2R5LmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgICAgdHJhbnNmb3JtLnNldE9yaWdpbihuZXcgQW1tby5idFZlY3RvcjMocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueikpOwogICAgICAgIGJvZHkuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgfQogICAgfTsKICAgIHZhciBzZXRWZWhpY2xlUXVhdGVybmlvbiA9IGZ1bmN0aW9uIHNldFZlaGljbGVRdWF0ZXJuaW9uKGRhdGEpIHsKICAgICAgdmFyIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICBxdWF0ZXJuaW9uID0gZGF0YS5xdWF0ZXJuaW9uOwogICAgICB2YXIgZWxlbWVudCA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCk7CgogICAgICBpZiAoZWxlbWVudC50eXBlID09PSBUWVBFUy5WRUhJQ0xFKSB7CiAgICAgICAgdmFyIGJvZHkgPSBlbGVtZW50LnZlaGljbGUuZ2V0UmlnaWRCb2R5KCk7CiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7CiAgICAgICAgYm9keS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICAgIHRyYW5zZm9ybS5zZXRSb3RhdGlvbihuZXcgQW1tby5idFF1YXRlcm5pb24ocXVhdGVybmlvbi54LCBxdWF0ZXJuaW9uLnksIHF1YXRlcm5pb24ueiwgcXVhdGVybmlvbi53KSk7CiAgICAgICAgYm9keS5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICB9CiAgICB9OwogICAgdmFyIHJlc2V0VmVoaWNsZSA9IGZ1bmN0aW9uIHJlc2V0VmVoaWNsZShkYXRhKSB7CiAgICAgIHZhciB1dWlkID0gZGF0YS51dWlkLAogICAgICAgICAgcXVhdGVybmlvbiA9IGRhdGEucXVhdGVybmlvbiwKICAgICAgICAgIHBvc2l0aW9uID0gZGF0YS5wb3NpdGlvbjsKICAgICAgdmFyIGVsZW1lbnQgPSB3b3JsZC5nZXRFbGVtZW50KHV1aWQpOwoKICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gVFlQRVMuVkVISUNMRSkgewogICAgICAgIHZhciBib2R5ID0gZWxlbWVudC52ZWhpY2xlLmdldFJpZ2lkQm9keSgpOwogICAgICAgIHZhciB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpOwogICAgICAgIGJvZHkuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgICB0cmFuc2Zvcm0uc2V0SWRlbnRpdHkoKTsKICAgICAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKG5ldyBBbW1vLmJ0VmVjdG9yMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KSk7CiAgICAgICAgdHJhbnNmb3JtLnNldFJvdGF0aW9uKG5ldyBBbW1vLmJ0UXVhdGVybmlvbihxdWF0ZXJuaW9uLngsIHF1YXRlcm5pb24ueSwgcXVhdGVybmlvbi56LCBxdWF0ZXJuaW9uLncpKTsKICAgICAgICBib2R5LnNldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgIH0KICAgIH07CiAgICB2YXIgaGFuZGxlVmVoaWNsZVVwZGF0ZSA9IGZ1bmN0aW9uIGhhbmRsZVZlaGljbGVVcGRhdGUoX3JlZiwgZHQpIHsKICAgICAgdmFyIHZlaGljbGUgPSBfcmVmLnZlaGljbGUsCiAgICAgICAgICB3aGVlbHMgPSBfcmVmLndoZWVscywKICAgICAgICAgIHV1aWQgPSBfcmVmLnV1aWQsCiAgICAgICAgICBfcmVmJHN0YXRlID0gX3JlZi5zdGF0ZSwKICAgICAgICAgIHN0YXRlID0gX3JlZiRzdGF0ZSA9PT0gdm9pZCAwID8gREVGQVVMVF9WRUhJQ0xFX1NUQVRFIDogX3JlZiRzdGF0ZSwKICAgICAgICAgIF9yZWYkb3B0aW9ucyA9IF9yZWYub3B0aW9ucywKICAgICAgICAgIG9wdGlvbnMgPSBfcmVmJG9wdGlvbnMgPT09IHZvaWQgMCA/IHt9IDogX3JlZiRvcHRpb25zOwogICAgICB2YXIgc3BlZWQgPSB2ZWhpY2xlLmdldEN1cnJlbnRTcGVlZEttSG91cigpOwogICAgICBkaXNwYXRjaGVyJDEuc2VuZERpc3BhdGNoRXZlbnQodXVpZCwgUEhZU0lDU19FVkVOVFMuVkVISUNMRS5TUEVFRCwgewogICAgICAgIHNwZWVkOiBzcGVlZAogICAgICB9KTsKICAgICAgdmFyIGJyZWFraW5nRm9yY2UgPSAwOwogICAgICB2YXIgZW5naW5lRm9yY2UgPSAwOwogICAgICB2YXIgX29wdGlvbnMkc3RlZXJpbmdDbGFtID0gb3B0aW9ucy5zdGVlcmluZ0NsYW1wLAogICAgICAgICAgc3RlZXJpbmdDbGFtcCA9IF9vcHRpb25zJHN0ZWVyaW5nQ2xhbSA9PT0gdm9pZCAwID8gREVGQVVMVF9TVEVFUklOR19DTEFNUCA6IF9vcHRpb25zJHN0ZWVyaW5nQ2xhbSwKICAgICAgICAgIF9vcHRpb25zJHN0ZWVyaW5nSW5jciA9IG9wdGlvbnMuc3RlZXJpbmdJbmNyZW1lbnQsCiAgICAgICAgICBzdGVlcmluZ0luY3JlbWVudCA9IF9vcHRpb25zJHN0ZWVyaW5nSW5jciA9PT0gdm9pZCAwID8gREVGQVVMVF9TVEVFUklOR19JTkNSRU1FTlQgOiBfb3B0aW9ucyRzdGVlcmluZ0luY3IsCiAgICAgICAgICBfb3B0aW9ucyRtYXhFbmdpbmVGb3IgPSBvcHRpb25zLm1heEVuZ2luZUZvcmNlLAogICAgICAgICAgbWF4RW5naW5lRm9yY2UgPSBfb3B0aW9ucyRtYXhFbmdpbmVGb3IgPT09IHZvaWQgMCA/IERFRkFVTFRfTUFYX0VOR0lORV9GT1JDRSA6IF9vcHRpb25zJG1heEVuZ2luZUZvciwKICAgICAgICAgIF9vcHRpb25zJG1heEJyZWFraW5nRiA9IG9wdGlvbnMubWF4QnJlYWtpbmdGb3JjZSwKICAgICAgICAgIG1heEJyZWFraW5nRm9yY2UgPSBfb3B0aW9ucyRtYXhCcmVha2luZ0YgPT09IHZvaWQgMCA/IERFRkFVTFRfTUFYX0JSRUFLSU5HX0ZPUkNFIDogX29wdGlvbnMkbWF4QnJlYWtpbmdGOwoKICAgICAgaWYgKHN0YXRlLmFjY2VsZXJhdGlvbikgewogICAgICAgIGlmIChzcGVlZCA8IC0xKSBicmVha2luZ0ZvcmNlID0gbWF4QnJlYWtpbmdGb3JjZTtlbHNlIGVuZ2luZUZvcmNlID0gbWF4RW5naW5lRm9yY2U7CiAgICAgIH0KCiAgICAgIGlmIChzdGF0ZS5icmFraW5nKSB7CiAgICAgICAgaWYgKHNwZWVkID4gMSkgYnJlYWtpbmdGb3JjZSA9IG1heEJyZWFraW5nRm9yY2U7ZWxzZSBlbmdpbmVGb3JjZSA9IC1tYXhFbmdpbmVGb3JjZSAvIDI7CiAgICAgIH0KCiAgICAgIGlmIChzdGF0ZS5sZWZ0KSB7CiAgICAgICAgaWYgKHN0YXRlLnZlaGljbGVTdGVlcmluZyA8IHN0ZWVyaW5nQ2xhbXApIHN0YXRlLnZlaGljbGVTdGVlcmluZyArPSBzdGVlcmluZ0luY3JlbWVudDsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoc3RhdGUucmlnaHQpIHsKICAgICAgICAgIGlmIChzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPiAtc3RlZXJpbmdDbGFtcCkgc3RhdGUudmVoaWNsZVN0ZWVyaW5nIC09IHN0ZWVyaW5nSW5jcmVtZW50OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoc3RhdGUudmVoaWNsZVN0ZWVyaW5nIDwgLXN0ZWVyaW5nSW5jcmVtZW50KSBzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgKz0gc3RlZXJpbmdJbmNyZW1lbnQ7ZWxzZSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPiBzdGVlcmluZ0luY3JlbWVudCkgc3RhdGUudmVoaWNsZVN0ZWVyaW5nIC09IHN0ZWVyaW5nSW5jcmVtZW50O2Vsc2UgewogICAgICAgICAgICAgIHN0YXRlLnZlaGljbGVTdGVlcmluZyA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIHZlaGljbGUuYXBwbHlFbmdpbmVGb3JjZShlbmdpbmVGb3JjZSwgQkFDS19MRUZUKTsKICAgICAgdmVoaWNsZS5hcHBseUVuZ2luZUZvcmNlKGVuZ2luZUZvcmNlLCBCQUNLX1JJR0hUKTsKICAgICAgdmVoaWNsZS5zZXRCcmFrZShicmVha2luZ0ZvcmNlIC8gMiwgRlJPTlRfTEVGVCk7CiAgICAgIHZlaGljbGUuc2V0QnJha2UoYnJlYWtpbmdGb3JjZSAvIDIsIEZST05UX1JJR0hUKTsKICAgICAgdmVoaWNsZS5zZXRCcmFrZShicmVha2luZ0ZvcmNlLCBCQUNLX0xFRlQpOwogICAgICB2ZWhpY2xlLnNldEJyYWtlKGJyZWFraW5nRm9yY2UsIEJBQ0tfUklHSFQpOwogICAgICB2ZWhpY2xlLnNldFN0ZWVyaW5nVmFsdWUoc3RhdGUudmVoaWNsZVN0ZWVyaW5nLCBGUk9OVF9MRUZUKTsKICAgICAgdmVoaWNsZS5zZXRTdGVlcmluZ1ZhbHVlKHN0YXRlLnZlaGljbGVTdGVlcmluZywgRlJPTlRfUklHSFQpOwogICAgICB2YXIgdG0sIHAsIHEsIGk7CiAgICAgIHZhciBuID0gdmVoaWNsZS5nZXROdW1XaGVlbHMoKTsKCiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICB2ZWhpY2xlLnVwZGF0ZVdoZWVsVHJhbnNmb3JtKGksIHRydWUpOwogICAgICAgIHRtID0gdmVoaWNsZS5nZXRXaGVlbFRyYW5zZm9ybVdTKGkpOwogICAgICAgIHAgPSB0bS5nZXRPcmlnaW4oKTsKICAgICAgICBxID0gdG0uZ2V0Um90YXRpb24oKTsKICAgICAgICB2YXIgd2hlZWxVVUlEID0gd2hlZWxzW2ldOwogICAgICAgIGRpc3BhdGNoZXIkMS5zZW5kQm9keVVwZGF0ZSh3aGVlbFVVSUQsIHAsIHEsIGR0KTsKICAgICAgfQoKICAgICAgdG0gPSB2ZWhpY2xlLmdldENoYXNzaXNXb3JsZFRyYW5zZm9ybSgpOwogICAgICBwID0gdG0uZ2V0T3JpZ2luKCk7CiAgICAgIHEgPSB0bS5nZXRSb3RhdGlvbigpOwogICAgICB2YXIgZGlyZWN0aW9uID0gdmVoaWNsZS5nZXRGb3J3YXJkVmVjdG9yKCk7CiAgICAgIGRpc3BhdGNoZXIkMS5zZW5kRGlzcGF0Y2hFdmVudCh1dWlkLCBQSFlTSUNTX0VWRU5UUy5WRUhJQ0xFLkRJUkVDVElPTiwgewogICAgICAgIGRpcmVjdGlvbjogewogICAgICAgICAgeDogZGlyZWN0aW9uLngoKSwKICAgICAgICAgIHk6IGRpcmVjdGlvbi55KCksCiAgICAgICAgICB6OiBkaXJlY3Rpb24ueigpCiAgICAgICAgfQogICAgICB9KTsKICAgICAgZGlzcGF0Y2hlciQxLnNlbmRCb2R5VXBkYXRlKHV1aWQsIHAsIHEsIGR0KTsKICAgICAgd29ybGQudXBkYXRlQm9keVN0YXRlKHV1aWQsIHN0YXRlKTsKICAgIH07CgogICAgdmFyIGNyZWF0ZUdob3N0Q29sbGlkZXIgPSBmdW5jdGlvbiBjcmVhdGVHaG9zdENvbGxpZGVyKHJhZGl1cywgcG9zaXRpb24pIHsKICAgICAgdmFyIGdob3N0Q29sbGlkZXIgPSBuZXcgQW1tby5idEdob3N0T2JqZWN0KCk7CiAgICAgIHZhciB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpOwogICAgICBnaG9zdENvbGxpZGVyLnNldENvbGxpc2lvblNoYXBlKG5ldyBBbW1vLmJ0U3BoZXJlU2hhcGUocmFkaXVzKSk7CiAgICAgIGdob3N0Q29sbGlkZXIuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgdHJhbnNmb3JtLnNldElkZW50aXR5KCk7CiAgICAgIHRyYW5zZm9ybS5zZXRPcmlnaW4ocG9zaXRpb24pOwogICAgICB0cmFuc2Zvcm0uc2V0Um90YXRpb24obmV3IEFtbW8uYnRRdWF0ZXJuaW9uKDAsIDAsIDAsIDEpKTsKICAgICAgZ2hvc3RDb2xsaWRlci5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICByZXR1cm4gewogICAgICAgIGdob3N0Q29sbGlkZXI6IGdob3N0Q29sbGlkZXIsCiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm0KICAgICAgfTsKICAgIH07CiAgICB2YXIgZm9yRWFjaEdob3N0Q29sbGlzaW9uID0gZnVuY3Rpb24gZm9yRWFjaEdob3N0Q29sbGlzaW9uKGdob3N0Q29sbGlkZXIpIHsKICAgICAgdmFyIGZvckVhY2hDYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKCkge307CiAgICAgIHZhciBjb2xsaXNpb25zID0gZ2hvc3RDb2xsaWRlci5nZXROdW1PdmVybGFwcGluZ09iamVjdHMoKTsKCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sbGlzaW9uczsgaSsrKSB7CiAgICAgICAgdmFyIG9iamVjdCA9IEFtbW8uY2FzdE9iamVjdChnaG9zdENvbGxpZGVyLmdldE92ZXJsYXBwaW5nT2JqZWN0KGkpLCBBbW1vLmJ0UmlnaWRCb2R5KTsKICAgICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgICBvYmplY3QuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgICBmb3JFYWNoQ2FsbGJhY2sob2JqZWN0LCB0cmFuc2Zvcm0sIGkpOwogICAgICAgIEFtbW8uZGVzdHJveSh0cmFuc2Zvcm0pOwogICAgICB9CiAgICB9OwogICAgdmFyIGdldEV4cGxvc2lvblBvc2l0aW9uID0gZnVuY3Rpb24gZ2V0RXhwbG9zaW9uUG9zaXRpb24odXVpZCwgcG9zaXRpb24pIHsKICAgICAgdmFyIGV4cGxvc2lvblBvc2l0aW9uID0gcG9zaXRpb247CgogICAgICBpZiAoIWV4cGxvc2lvblBvc2l0aW9uKSB7CiAgICAgICAgdmFyIF93b3JsZCRnZXRFbGVtZW50ID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKSwKICAgICAgICAgICAgYm9keSA9IF93b3JsZCRnZXRFbGVtZW50LmJvZHk7CgogICAgICAgIHZhciBtb3Rpb25TdGF0ZSA9IGJvZHkuZ2V0TW90aW9uU3RhdGUoKTsKICAgICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgICBtb3Rpb25TdGF0ZS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICAgIGV4cGxvc2lvblBvc2l0aW9uID0gdHJhbnNmb3JtLmdldE9yaWdpbigpOwogICAgICB9CgogICAgICByZXR1cm4gZXhwbG9zaW9uUG9zaXRpb247CiAgICB9OwogICAgdmFyIGdldEV4cGxvc2lvbkltcHVsc2UgPSBmdW5jdGlvbiBnZXRFeHBsb3Npb25JbXB1bHNlKHBvc2l0aW9uLCBleHBsb3Npb25Qb3NpdGlvbiwgc3RyZW5ndGgpIHsKICAgICAgdmFyIGRpc3RhbmNlID0gcG9zaXRpb24ub3Bfc3ViKGV4cGxvc2lvblBvc2l0aW9uKTsKICAgICAgZGlzdGFuY2Uubm9ybWFsaXplKCk7CiAgICAgIHZhciBpbXB1bHNlID0gZGlzdGFuY2Uub3BfbXVsKHN0cmVuZ3RoKTsKICAgICAgaW1wdWxzZS5zZXRZKGltcHVsc2UueSgpICsgc3RyZW5ndGgpOwogICAgICByZXR1cm4gaW1wdWxzZTsKICAgIH07CiAgICB2YXIgY3JlYXRlRXhwbG9zaW9uID0gZnVuY3Rpb24gY3JlYXRlRXhwbG9zaW9uKF9yZWYpIHsKICAgICAgdmFyIHV1aWQgPSBfcmVmLnV1aWQsCiAgICAgICAgICBwb3NpdGlvbiA9IF9yZWYucG9zaXRpb24sCiAgICAgICAgICBfcmVmJHJhZGl1cyA9IF9yZWYucmFkaXVzLAogICAgICAgICAgcmFkaXVzID0gX3JlZiRyYWRpdXMgPT09IHZvaWQgMCA/IEVYUExPU0lPTl9TSVpFUy5TTUFMTCA6IF9yZWYkcmFkaXVzLAogICAgICAgICAgX3JlZiRzdHJlbmd0aCA9IF9yZWYuc3RyZW5ndGgsCiAgICAgICAgICBzdHJlbmd0aCA9IF9yZWYkc3RyZW5ndGggPT09IHZvaWQgMCA/IEVYUExPU0lPTl9TVFJFTkdUSFMuTUVESVVNIDogX3JlZiRzdHJlbmd0aDsKCiAgICAgIHRyeSB7CiAgICAgICAgdmFyIGV4cGxvc2lvblBvc2l0aW9uID0gZ2V0RXhwbG9zaW9uUG9zaXRpb24odXVpZCwgcG9zaXRpb24pOwoKICAgICAgICB2YXIgX2NyZWF0ZUdob3N0Q29sbGlkZXIgPSBjcmVhdGVHaG9zdENvbGxpZGVyKHJhZGl1cywgZXhwbG9zaW9uUG9zaXRpb24pLAogICAgICAgICAgICBnaG9zdENvbGxpZGVyID0gX2NyZWF0ZUdob3N0Q29sbGlkZXIuZ2hvc3RDb2xsaWRlciwKICAgICAgICAgICAgdHJhbnNmb3JtID0gX2NyZWF0ZUdob3N0Q29sbGlkZXIudHJhbnNmb3JtOwoKICAgICAgICB3b3JsZC5hZGRDb2xsaXNpb25PYmplY3QoZ2hvc3RDb2xsaWRlcik7CiAgICAgICAgZm9yRWFjaEdob3N0Q29sbGlzaW9uKGdob3N0Q29sbGlkZXIsIGZ1bmN0aW9uIChvYmplY3QsIG9iamVjdFRyYW5zZm9ybSkgewogICAgICAgICAgdmFyIG9yaWdpbiA9IG9iamVjdFRyYW5zZm9ybS5nZXRPcmlnaW4oKTsKICAgICAgICAgIG9iamVjdC5hY3RpdmF0ZSh0cnVlKTsKICAgICAgICAgIG9iamVjdC5hcHBseUNlbnRyYWxJbXB1bHNlKGdldEV4cGxvc2lvbkltcHVsc2Uob3JpZ2luLCBleHBsb3Npb25Qb3NpdGlvbiwgc3RyZW5ndGgpKTsKICAgICAgICB9KTsKICAgICAgICB3b3JsZC5nZXREeW5hbWljc1dvcmxkKCkucmVtb3ZlQ29sbGlzaW9uT2JqZWN0KGdob3N0Q29sbGlkZXIpOwogICAgICAgIEFtbW8uZGVzdHJveShnaG9zdENvbGxpZGVyKTsKICAgICAgICBBbW1vLmRlc3Ryb3kodHJhbnNmb3JtKTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIGNvbnNvbGUubG9nKGUpOwogICAgICB9CiAgICB9OwoKICAgIHZhciBoYW5kbGVMb2FkRXZlbnQgPSBmdW5jdGlvbiBoYW5kbGVMb2FkRXZlbnQob3B0aW9ucykgewogICAgICByZXR1cm4gZnVuY3Rpb24gKEFtbW8pIHsKICAgICAgICBzZWxmLkFtbW8gPSBBbW1vOwoKICAgICAgICBvbm1lc3NhZ2UgPSBmdW5jdGlvbiBvbm1lc3NhZ2UoX3JlZikgewogICAgICAgICAgdmFyIGRhdGEgPSBfcmVmLmRhdGE7CgogICAgICAgICAgc3dpdGNoIChkYXRhLmV2ZW50KSB7CiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuQURELkJPWDoKICAgICAgICAgICAgICBhZGRCb3goZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkFERC5TUEhFUkU6CiAgICAgICAgICAgICAgYWRkU3BoZXJlKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5BREQuVkVISUNMRToKICAgICAgICAgICAgICBhZGRWZWhpY2xlKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5BREQuTU9ERUw6CiAgICAgICAgICAgICAgYWRkTW9kZWwoZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkFERC5QTEFZRVI6CiAgICAgICAgICAgICAgYWRkUGxheWVyKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5FTEVNRU5ULlNFVC5MSU5FQVJfVkVMT0NJVFk6CiAgICAgICAgICAgICAgc2V0TGluZWFyVmVsb2NpdHkoZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuU0VULlBPU0lUSU9OOgogICAgICAgICAgICAgIHNldFBvc2l0aW9uKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5WRUhJQ0xFLlNFVC5QT1NJVElPTjoKICAgICAgICAgICAgICBzZXRWZWhpY2xlUG9zaXRpb24oZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLlZFSElDTEUuU0VULlFVQVRFUk5JT046CiAgICAgICAgICAgICAgc2V0VmVoaWNsZVF1YXRlcm5pb24oZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLlZFSElDTEUuUkVTRVQ6CiAgICAgICAgICAgICAgcmVzZXRWZWhpY2xlKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5FTEVNRU5ULkFQUExZLklNUFVMU0U6CiAgICAgICAgICAgICAgYXBwbHlJbXB1c2UoZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuVVBEQVRFOgogICAgICAgICAgICAgIHdvcmxkLnVwZGF0ZUJvZHlTdGF0ZShkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5ESVNQT1NFOgogICAgICAgICAgICAgIHdvcmxkLmRpc3Bvc2VCb2R5KGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5FRkZFQ1RTLkVYUExPU0lPTjoKICAgICAgICAgICAgICBjcmVhdGVFeHBsb3Npb24oZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLlRFUk1JTkFURToKICAgICAgICAgICAgICB3b3JsZC50ZXJtaW5hdGUoKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICB3b3JsZC5pbml0KG9wdGlvbnMpOwogICAgICAgIGRpc3BhdGNoZXIkMS5zZW5kUmVhZHlFdmVudCgpOwogICAgICAgIHdvcmxkLnNpbXVsYXRlKCk7CiAgICAgIH07CiAgICB9OwoKICAgIHZhciBsb2FkQW1tbyA9IGZ1bmN0aW9uIGxvYWRBbW1vKG9wdGlvbnMpIHsKICAgICAgdmFyIHNjcmlwdFVybCA9IG9wdGlvbnMuaG9zdCArICcvJyArIChvcHRpb25zLnBhdGggfHwgTElCUkFSWV9OQU1FKTsKICAgICAgaW1wb3J0U2NyaXB0cyhzY3JpcHRVcmwpOwogICAgICBBbW1vKCkudGhlbihoYW5kbGVMb2FkRXZlbnQob3B0aW9ucykpOwogICAgfTsKCiAgICBvbm1lc3NhZ2UgPSBmdW5jdGlvbiBvbm1lc3NhZ2UoX3JlZjIpIHsKICAgICAgdmFyIGRhdGEgPSBfcmVmMi5kYXRhOwoKICAgICAgc3dpdGNoIChkYXRhLmV2ZW50KSB7CiAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5MT0FELkFNTU86CiAgICAgICAgICBsb2FkQW1tbyhkYXRhKTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9OwoKfSgpKTsKCg==', 'data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIndvcmtlcjovL3dlYi13b3JrZXIvcGh5c2ljcy9jb25zdGFudHMuanMiLCJ3b3JrZXI6Ly93ZWItd29ya2VyL3BoeXNpY3MvbWVzc2FnZXMuanMiLCJ3b3JrZXI6Ly93ZWItd29ya2VyL3BoeXNpY3Mvd29ya2VyL2xpYi9kaXNwYXRjaGVyLmpzIiwid29ya2VyOi8vd2ViLXdvcmtlci9waHlzaWNzL3dvcmtlci9saWIvbWF0aC5qcyIsIndvcmtlcjovL3dlYi13b3JrZXIvcGh5c2ljcy93b3JrZXIvZWxlbWVudHMuanMiLCJ3b3JrZXI6Ly93ZWItd29ya2VyL3BoeXNpY3Mvd29ya2VyL3BsYXllci5qcyIsIndvcmtlcjovL3dlYi13b3JrZXIvcGh5c2ljcy93b3JrZXIvd29ybGQuanMiLCJ3b3JrZXI6Ly93ZWItd29ya2VyL3BoeXNpY3Mvd29ya2VyL3ZlaGljbGVzLmpzIiwid29ya2VyOi8vd2ViLXdvcmtlci9waHlzaWNzL3dvcmtlci9lZmZlY3RzLmpzIiwid29ya2VyOi8vd2ViLXdvcmtlci9waHlzaWNzL3dvcmtlci9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgTElCUkFSWV9OQU1FID0gJ2FtbW8uanMnO1xuXG5leHBvcnQgY29uc3QgVFlQRVMgPSB7XG4gICAgQk9YOiAnQk9YJyxcbiAgICBTUEhFUkU6ICdTUEhFUkUnLFxuICAgIFZFSElDTEU6ICdWRUhJQ0xFJyxcbiAgICBNRVNIOiAnTUVTSCcsXG4gICAgUExBWUVSOiAnUExBWUVSJ1xufTtcblxuZXhwb3J0IGNvbnN0IENPTExJREVSX1RZUEVTID0ge1xuICAgIEJPWDogJ0JPWCcsXG4gICAgVkVISUNMRTogJ1ZFSElDTEUnLFxuICAgIFBMQVlFUjogJ1BMQVlFUicsXG4gICAgU1BIRVJFOiAnU1BIRVJFJ1xufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVkVISUNMRV9TVEFURSA9IHtcbiAgICB2ZWhpY2xlU3RlZXJpbmc6IDAsXG4gICAgYWNjZWxlcmF0aW9uOiBmYWxzZSxcbiAgICBicmVha2luZzogZmFsc2UsXG4gICAgcmlnaHQ6IGZhbHNlLFxuICAgIGxlZnQ6IGZhbHNlXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9SSUdJREJPRFlfU1RBVEUgPSB7XG4gICAgdmVsb2NpdHk6IHsgeDogMCwgeTogMCwgejogMCB9LFxuICAgIG1vdmVtZW50OiB7XG4gICAgICAgIGZvcndhcmQ6IGZhbHNlLFxuICAgICAgICBiYWNrd2FyZHM6IGZhbHNlLFxuICAgICAgICBsZWZ0OiBmYWxzZSxcbiAgICAgICAgcmlnaHQ6IGZhbHNlXG4gICAgfSxcbiAgICBkaXJlY3Rpb246IHtcbiAgICAgICAgeDogMCxcbiAgICAgICAgeTogMCxcbiAgICAgICAgejogMFxuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NDQUxFID0geyB4OiAxLCB5OiAxLCB6OiAxIH07XG5leHBvcnQgY29uc3QgREVGQVVMVF9RVUFURVJOSU9OID0geyB4OiAwLCB5OiAwLCB6OiAwLCB3OiAxIH07XG5leHBvcnQgY29uc3QgREVGQVVMVF9QT1NJVElPTiA9IHsgeDogMCwgeTogMCwgejogMCB9O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTElORUFSX1ZFTE9DSVRZID0geyB4OiAwLCB5OiAwLCB6OiAwIH07XG5leHBvcnQgY29uc3QgREVGQVVMVF9JTVBVTFNFID0geyB4OiAwLCB5OiAwLCB6OiAwIH07XG5cbmV4cG9ydCBjb25zdCBESVNBQkxFX0RFQUNUSVZBVElPTiA9IDQ7XG5leHBvcnQgY29uc3QgR1JBVklUWSA9IHsgeDogMCwgeTogLTEwLCB6OiAwIH07XG5cbmV4cG9ydCBjb25zdCBGUk9OVF9MRUZUID0gMDtcbmV4cG9ydCBjb25zdCBGUk9OVF9SSUdIVCA9IDE7XG5leHBvcnQgY29uc3QgQkFDS19MRUZUID0gMjtcbmV4cG9ydCBjb25zdCBCQUNLX1JJR0hUID0gMztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1RFRVJJTkdfSU5DUkVNRU5UID0gLjA0O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1RFRVJJTkdfQ0xBTVAgPSAuNTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX01BWF9FTkdJTkVfRk9SQ0UgPSAyMDAwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFYX0JSRUFLSU5HX0ZPUkNFID0gMTAwO1xuXG5leHBvcnQgY29uc3QgRVhQTE9TSU9OX1NJWkVTID0ge1xuICAgIFNNQUxMOiA0LFxuICAgIE1FRElVTTogNixcbiAgICBMQVJHRTogOCxcbiAgICBNQVNTSVZFOiAxMlxufTtcblxuZXhwb3J0IGNvbnN0IEVYUExPU0lPTl9TVFJFTkdUSFMgPSB7XG4gICAgVkVSWV9XRUFLOiAyLFxuICAgIFdFQUs6IDQsXG4gICAgTUVESVVNOiA4LFxuICAgIExBUkdFOiAxNixcbiAgICBNQVNTSVZFOiAzMixcbiAgICBPS19OTzogNjRcbn07IiwiZXhwb3J0IGNvbnN0IFBIWVNJQ1NfRVZFTlRTID0ge1xuICAgIERJU1BBVENIOiAncGh5c2ljczpkaXNwYXRjaCcsXG4gICAgVEVSTUlOQVRFOiAncGh5c2ljczp0ZXJtaW5hdGUnLFxuICAgIExPQUQ6IHtcbiAgICAgICAgQU1NTzogJ3BoeXNpY3M6bG9hZDphbW1vJyxcbiAgICB9LFxuICAgIFJFQURZOiAncGh5c2ljczpyZWFkeScsXG4gICAgSU5JVDogJ3BoeXNpY3M6aW5pdCcsXG4gICAgVVBEQVRFOiAncGh5c2ljczp1cGRhdGUnLFxuICAgIFxuICAgIEFERDoge1xuICAgICAgICBCT1g6ICdwaHlzaWNzOmFkZDpib3gnLFxuICAgICAgICBWRUhJQ0xFOiAncGh5c2ljczphZGQ6dmVoaWNsZScsXG4gICAgICAgIE1PREVMOiAncGh5c2ljczphZGQ6bW9kZWwnLFxuICAgICAgICBQTEFZRVI6ICdwaHlzaWNzOmFkZDpwbGF5ZXInLFxuICAgICAgICBTUEhFUkU6ICdwaHlzaWNzOmFkZDpzcGhlcmUnLFxuICAgIH0sXG5cbiAgICBFTEVNRU5UOiB7XG4gICAgICAgIERJU1BPU0U6ICdwaHlzaWNzOmVsZW1lbnQ6ZGlzcG9zZScsXG4gICAgICAgIENPTExJU0lPTjogJ3BoeXNpY3M6ZWxlbWVudDpjb2xsaXNpb24nLFxuICAgICAgICBVUERBVEU6ICdwaHlzaWNzOmVsZW1lbnQ6dXBkYXRlJyxcbiAgICAgICAgQ1JFQVRFRDogJ3BoeXNpY3M6ZWxlbWVudDpjcmVhdGVkJyxcblxuICAgICAgICBTRVQ6IHtcbiAgICAgICAgICAgIFBPU0lUSU9OOiAncGh5c2ljczplbGVtZW50OnNldDpwb3NpdGlvbicsXG4gICAgICAgICAgICBRVUFURVJOSU9OOiAncGh5c2ljczplbGVtZW50OnNldDpxdWF0ZXJuaW9uJyxcbiAgICAgICAgICAgIExJTkVBUl9WRUxPQ0lUWTogJ3BoeXNpY3M6ZWxlbWVudDpzZXQ6bGluZWFyX3ZlbG9jaXR5J1xuICAgICAgICB9LFxuXG4gICAgICAgIEFQUExZOiB7XG4gICAgICAgICAgICBJTVBVTFNFOiAncGh5c2ljczplbGVtZW50OmFwcGx5OmltcHVsc2UnXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgVkVISUNMRToge1xuICAgICAgICBTRVQ6IHtcbiAgICAgICAgICAgIFBPU0lUSU9OOiAncGh5c2ljczp2ZWhpY2xlOnNldDpwb3NpdGlvbicsXG4gICAgICAgICAgICBRVUFURVJOSU9OOiAncGh5c2ljczp2ZWhpY2xlOnNldDpxdWF0ZXJuaW9uJ1xuICAgICAgICB9LFxuICAgICAgICBSRVNFVDogJ3BoeXNpY3M6dmVoaWNsZTpyZXNldCcsXG4gICAgICAgIFxuICAgICAgICBTUEVFRDogJ3BoeXNpY3M6dmVoaWNsZTpzcGVlZCcsXG4gICAgICAgIERJUkVDVElPTjogJ3BoeXNpY3M6dmVoaWNsZTpkaXJlY3Rpb24nXG4gICAgfSxcblxuICAgIEVGRkVDVFM6IHtcbiAgICAgICAgRVhQTE9TSU9OOiAncGh5c2ljczplZmZlY3RzOmV4cGxvc2lvbidcbiAgICB9XG59OyIsImltcG9ydCB7IFBIWVNJQ1NfRVZFTlRTIH0gZnJvbSAnLi4vLi4vbWVzc2FnZXMnO1xuXG5leHBvcnQgY2xhc3MgRGlzcGF0Y2hlciB7XG5cbiAgICBzZW5kUGh5c2ljc1VwZGF0ZSA9IGR0ID0+IHBvc3RNZXNzYWdlKHsgZXZlbnQ6IFBIWVNJQ1NfRVZFTlRTLlVQREFURSwgZHQgfSlcbiAgICBzZW5kUmVhZHlFdmVudCA9ICgpID0+IHBvc3RNZXNzYWdlKHsgZXZlbnQ6IFBIWVNJQ1NfRVZFTlRTLlJFQURZIH0pO1xuICAgIHNlbmRUZXJtaW5hdGVFdmVudCA9ICgpID0+IHBvc3RNZXNzYWdlKHsgZXZlbnQ6IFBIWVNJQ1NfRVZFTlRTLlRFUk1JTkFURSB9KTtcblxuICAgIHNlbmRCb2R5VXBkYXRlID0gKHV1aWQsIHBvc2l0aW9uLCByb3RhdGlvbiwgZHQpID0+IHBvc3RNZXNzYWdlKHtcbiAgICAgICAgZXZlbnQ6IFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuVVBEQVRFLFxuICAgICAgICB1dWlkLFxuICAgICAgICBwb3NpdGlvbjogeyB4OiBwb3NpdGlvbi54KCksIHk6IHBvc2l0aW9uLnkoKSwgejogcG9zaXRpb24ueigpIH0sXG4gICAgICAgIHF1YXRlcm5pb246IHsgeDogcm90YXRpb24ueCgpLCB5OiByb3RhdGlvbi55KCksIHo6IHJvdGF0aW9uLnooKSwgdzogcm90YXRpb24udygpIH0sXG4gICAgICAgIGR0XG4gICAgfSk7XG5cbiAgICBzZW5kRGlzcGF0Y2hFdmVudCA9ICh1dWlkLCBldmVudE5hbWUsIGV2ZW50RGF0YSkgPT4gcG9zdE1lc3NhZ2Uoe1xuICAgICAgICBldmVudDogUEhZU0lDU19FVkVOVFMuRElTUEFUQ0gsXG4gICAgICAgIHV1aWQsXG4gICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgZXZlbnREYXRhXG4gICAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBuZXcgRGlzcGF0Y2hlcigpOyIsImV4cG9ydCBjb25zdCBhcHBseU1hdHJpeDRUb1ZlY3RvcjMgPSAoeyB4ID0gMCwgeSA9IDAsIHogPSAwIH0sIG1hdHJpeCA9IFtdKSA9PiB7XG4gICAgY29uc3QgdyA9IDEgLyAoIG1hdHJpeFsgMyBdICogeCArIG1hdHJpeFsgNyBdICogeSArIG1hdHJpeFsgMTEgXSAqIHogKyBtYXRyaXhbIDE1IF0gKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIHg6ICggbWF0cml4WyAwIF0gKiB4ICsgbWF0cml4WyA0IF0gKiB5ICsgbWF0cml4WyA4IF0gKiB6ICsgbWF0cml4WyAxMiBdICkgKiB3LFxuICAgICAgICB5OiAoIG1hdHJpeFsgMSBdICogeCArIG1hdHJpeFsgNSBdICogeSArIG1hdHJpeFsgOSBdICogeiArIG1hdHJpeFsgMTMgXSApICogdyxcbiAgICAgICAgejogKCBtYXRyaXhbIDIgXSAqIHggKyBtYXRyaXhbIDYgXSAqIHkgKyBtYXRyaXhbIDEwIF0gKiB6ICsgbWF0cml4WyAxNCBdICkgKiB3LFxuICAgIH1cbn07IiwiaW1wb3J0IGRpc3BhdGNoZXIgZnJvbSAnLi9saWIvZGlzcGF0Y2hlcic7XG5pbXBvcnQgd29ybGQgZnJvbSAnLi93b3JsZCc7XG5cbmltcG9ydCB7XG4gICAgYXBwbHlNYXRyaXg0VG9WZWN0b3IzXG59IGZyb20gJy4vbGliL21hdGgnO1xuXG5pbXBvcnQge1xuICAgIERFRkFVTFRfUklHSURCT0RZX1NUQVRFLFxuICAgIFRZUEVTLFxuICAgIERFRkFVTFRfU0NBTEUsXG4gICAgRElTQUJMRV9ERUFDVElWQVRJT04sXG4gICAgREVGQVVMVF9MSU5FQVJfVkVMT0NJVFksXG4gICAgREVGQVVMVF9JTVBVTFNFXG59IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVSaWdpZEJvZHkgPSAoc2hhcGUsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICAgIHV1aWQsXG4gICAgICAgIHBvc2l0aW9uLFxuICAgICAgICBxdWF0ZXJuaW9uLFxuICAgICAgICBtYXNzLFxuICAgICAgICBmcmljdGlvbixcbiAgICAgICAgcmVzdGl0dXRpb24gPSAuOSxcbiAgICAgICAgZGFtcGluZyA9IHsgbGluZWFyOiAwLjIsIGFuZ3VsYXI6IDAuMiB9XG4gICAgfSA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpO1xuXG4gICAgdHJhbnNmb3JtLnNldElkZW50aXR5KCk7XG4gICAgdHJhbnNmb3JtLnNldE9yaWdpbihuZXcgQW1tby5idFZlY3RvcjMocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueikpO1xuICAgIHRyYW5zZm9ybS5zZXRSb3RhdGlvbihuZXcgQW1tby5idFF1YXRlcm5pb24ocXVhdGVybmlvbi54LCBxdWF0ZXJuaW9uLnksIHF1YXRlcm5pb24ueiwgcXVhdGVybmlvbi53KSk7XG4gICAgY29uc3QgbW90aW9uU3RhdGUgPSBuZXcgQW1tby5idERlZmF1bHRNb3Rpb25TdGF0ZSh0cmFuc2Zvcm0pO1xuICAgIGNvbnN0IGxvY2FsSW5lcnRpYSA9IG5ldyBBbW1vLmJ0VmVjdG9yMygwLCAwLCAwKTtcbiAgICBzaGFwZS5jYWxjdWxhdGVMb2NhbEluZXJ0aWEobWFzcywgbG9jYWxJbmVydGlhKTtcblxuICAgIGNvbnN0IHJiSW5mbyA9IG5ldyBBbW1vLmJ0UmlnaWRCb2R5Q29uc3RydWN0aW9uSW5mbyhtYXNzLCBtb3Rpb25TdGF0ZSwgc2hhcGUsIGxvY2FsSW5lcnRpYSk7XG4gICAgY29uc3QgYm9keSA9IG5ldyBBbW1vLmJ0UmlnaWRCb2R5KHJiSW5mbyk7XG5cbiAgICBcblxuICAgIGlmIChtYXNzID4gMCkge1xuICAgICAgICBib2R5LnNldEZyaWN0aW9uKGZyaWN0aW9uKTtcbiAgICAgICAgYm9keS5zZXRSZXN0aXR1dGlvbihyZXN0aXR1dGlvbik7XG4gICAgICAgIGJvZHkuc2V0RGFtcGluZyhkYW1waW5nLmxpbmVhciwgZGFtcGluZy5hbmd1bGFyKTtcbiAgICAgICAgYm9keS5zZXRBY3RpdmF0aW9uU3RhdGUoRElTQUJMRV9ERUFDVElWQVRJT04pO1xuICAgIH1cblxuICAgIC8vIHN0b3JpbmcgdXVpZCBmb3IgZnV0dXJlIHJlZmVyZW5jZVxuICAgIGJvZHkudXVpZCA9IHV1aWQ7XG5cbiAgICB3b3JsZC5hZGRSaWdpZEJvZHkoYm9keSk7XG5cbiAgICByZXR1cm4gYm9keTtcbn1cblxuZXhwb3J0IGNvbnN0IGFkZE1vZGVsID0gKG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICAgIHV1aWQsXG4gICAgICAgIHZlcnRpY2VzLFxuICAgICAgICBtYXRyaWNlcyxcbiAgICAgICAgaW5kZXhlcyxcbiAgICAgICAgcG9zaXRpb24sXG4gICAgICAgIHF1YXRlcm5pb24sXG4gICAgICAgIG1hc3MgPSAwLFxuICAgICAgICBmcmljdGlvbiA9IDJcbiAgICB9ID0gb3B0aW9ucztcblxuICAgIGNvbnN0IHNjYWxlID0gREVGQVVMVF9TQ0FMRTtcblxuICAgIGNvbnN0IGJ0YSA9IG5ldyBBbW1vLmJ0VmVjdG9yMygpO1xuICAgIGNvbnN0IGJ0YiA9IG5ldyBBbW1vLmJ0VmVjdG9yMygpO1xuICAgIGNvbnN0IGJ0YyA9IG5ldyBBbW1vLmJ0VmVjdG9yMygpO1xuICAgIGNvbnN0IHRyaU1lc2ggPSBuZXcgQW1tby5idFRyaWFuZ2xlTWVzaCh0cnVlLCBmYWxzZSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZlcnRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB2ZXJ0aWNlc1tpXTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBpbmRleGVzW2ldID8gaW5kZXhlc1tpXSA6IG51bGw7XG4gICAgICAgIGNvbnN0IG1hdHJpeCA9IEFycmF5LmZyb20obWF0cmljZXNbaV0pO1xuXG4gICAgICAgIGlmIChpbmRleCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpbmRleC5sZW5ndGg7IGogKz0gMykge1xuICAgICAgICAgICAgY29uc3QgYWkgPSBpbmRleFtqXSAqIDM7XG4gICAgICAgICAgICBjb25zdCBiaSA9IGluZGV4W2ogKyAxXSAqIDM7XG4gICAgICAgICAgICBjb25zdCBjaSA9IGluZGV4W2ogKyAyXSAqIDM7XG5cbiAgICAgICAgICAgIGNvbnN0IHZhID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsgeDogY29tcG9uZW50c1thaV0sIHk6IGNvbXBvbmVudHNbYWkgKyAxXSwgejogY29tcG9uZW50c1thaSArIDJdIH0sIG1hdHJpeCk7XG4gICAgICAgICAgICBjb25zdCB2YiA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7IHg6IGNvbXBvbmVudHNbYmldLCB5OiBjb21wb25lbnRzW2JpICsgMV0sIHo6IGNvbXBvbmVudHNbYmkgKyAyXSB9LCBtYXRyaXgpO1xuICAgICAgICAgICAgY29uc3QgdmMgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoeyB4OiBjb21wb25lbnRzW2NpXSwgeTogY29tcG9uZW50c1tjaSArIDFdLCB6OiBjb21wb25lbnRzW2NpICsgMl0gfSwgbWF0cml4KTtcblxuICAgICAgICAgICAgYnRhLnNldFZhbHVlKHZhLngsIHZhLnksIHZhLnopO1xuICAgICAgICAgICAgYnRiLnNldFZhbHVlKHZiLngsIHZiLnksIHZiLnopO1xuICAgICAgICAgICAgYnRjLnNldFZhbHVlKHZjLngsIHZjLnksIHZjLnopO1xuICAgICAgICAgICAgdHJpTWVzaC5hZGRUcmlhbmdsZShidGEsIGJ0YiwgYnRjLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbXBvbmVudHMubGVuZ3RoOyBqICs9IDkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YSA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7IHg6IGNvbXBvbmVudHNbaiArIDBdLCB5OiBjb21wb25lbnRzW2ogKyAxXSwgejogY29tcG9uZW50c1tqICsgMl0gfSwgbWF0cml4KTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YiA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7IHg6IGNvbXBvbmVudHNbaiArIDNdLCB5OiBjb21wb25lbnRzW2ogKyA0XSwgejogY29tcG9uZW50c1tqICsgNV0gfSwgbWF0cml4KTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YyA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7IHg6IGNvbXBvbmVudHNbaiArIDZdLCB5OiBjb21wb25lbnRzW2ogKyA3XSwgejogY29tcG9uZW50c1tqICsgOF0gfSwgbWF0cml4KTtcblxuICAgICAgICAgICAgICAgIGJ0YS5zZXRWYWx1ZSh2YS54LCB2YS55LCB2YS56KTtcbiAgICAgICAgICAgICAgICBidGIuc2V0VmFsdWUodmIueCwgdmIueSwgdmIueik7XG4gICAgICAgICAgICAgICAgYnRjLnNldFZhbHVlKHZjLngsIHZjLnksIHZjLnopO1xuICAgICAgICAgICAgICAgIHRyaU1lc2guYWRkVHJpYW5nbGUoYnRhLCBidGIsIGJ0YywgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbG9jYWxTY2FsZSA9IG5ldyBBbW1vLmJ0VmVjdG9yMyhzY2FsZS54LCBzY2FsZS55LCBzY2FsZS56KTtcbiAgICB0cmlNZXNoLnNldFNjYWxpbmcobG9jYWxTY2FsZSk7XG4gICAgQW1tby5kZXN0cm95KGxvY2FsU2NhbGUpO1xuXG4gICAgY29uc3QgY29sbGlzaW9uU2hhcGUgPSBuZXcgQW1tby5idEJ2aFRyaWFuZ2xlTWVzaFNoYXBlKHRyaU1lc2gsIHRydWUsIHRydWUpO1xuICAgIGNvbGxpc2lvblNoYXBlLnJlc291cmNlcyA9IFt0cmlNZXNoXTtcblxuICAgIEFtbW8uZGVzdHJveShidGEpO1xuICAgIEFtbW8uZGVzdHJveShidGIpO1xuICAgIEFtbW8uZGVzdHJveShidGMpO1xuXG4gICAgY29uc3QgYm9keSA9IGNyZWF0ZVJpZ2lkQm9keShjb2xsaXNpb25TaGFwZSwgeyB1dWlkLCBwb3NpdGlvbiwgcXVhdGVybmlvbiwgbWFzcywgZnJpY3Rpb24gfSk7XG4gICAgd29ybGQuc2V0Qm9keSh7IHV1aWQsIGJvZHksIHR5cGU6IFRZUEVTLk1FU0gsIHN0YXRlOiBERUZBVUxUX1JJR0lEQk9EWV9TVEFURSB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IGFkZEJveCA9IChkYXRhKSA9PiB7XG4gICAgY29uc3QgeyB1dWlkLCB3aWR0aCwgbGVuZ3RoLCBoZWlnaHQsIHBvc2l0aW9uLCBxdWF0ZXJuaW9uLCBtYXNzID0gMCwgZnJpY3Rpb24gPSAyIH0gPSBkYXRhO1xuXG4gICAgY29uc3QgZ2VvbWV0cnkgPSBuZXcgQW1tby5idEJveFNoYXBlKG5ldyBBbW1vLmJ0VmVjdG9yMyh3aWR0aCAqIDAuNSwgaGVpZ2h0ICogMC41LCBsZW5ndGggKiAwLjUpKTtcbiAgICBjb25zdCBib2R5ID0gY3JlYXRlUmlnaWRCb2R5KGdlb21ldHJ5LCB7IHV1aWQsIHBvc2l0aW9uLCBxdWF0ZXJuaW9uLCBtYXNzLCBmcmljdGlvbiB9KTtcblxuICAgIHdvcmxkLnNldEJvZHkoeyB1dWlkLCBib2R5LCB0eXBlOiBUWVBFUy5CT1gsIHN0YXRlOiBERUZBVUxUX1JJR0lEQk9EWV9TVEFURSB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRTcGhlcmUgPSBkYXRhID0+IHtcbiAgICBjb25zdCB7IHV1aWQsIHJhZGl1cywgcG9zaXRpb24sIHF1YXRlcm5pb24sIG1hc3MgPSAwLCBmcmljdGlvbiA9IDIgfSA9IGRhdGE7XG5cbiAgICBjb25zdCBnZW9tZXRyeSA9IG5ldyBBbW1vLmJ0U3BoZXJlU2hhcGUocmFkaXVzKTtcbiAgICBjb25zdCBib2R5ID0gY3JlYXRlUmlnaWRCb2R5KGdlb21ldHJ5LCB7IHV1aWQsIHBvc2l0aW9uLCBxdWF0ZXJuaW9uLCBtYXNzLCBmcmljdGlvbiB9KTtcblxuICAgIHdvcmxkLnNldEJvZHkoeyB1dWlkLCBib2R5LCB0eXBlOiBUWVBFUy5TUEhFUkUsIHN0YXRlOiBERUZBVUxUX1JJR0lEQk9EWV9TVEFURSB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRMaW5lYXJWZWxvY2l0eSA9IChkYXRhKSA9PiB7XG4gICAgY29uc3QgeyB1dWlkLCB2ZWxvY2l0eSA9IERFRkFVTFRfTElORUFSX1ZFTE9DSVRZIH0gPSBkYXRhO1xuICAgIGNvbnN0IHsgYm9keSB9ID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKTtcbiAgICBjb25zdCBtb3Rpb25TdGF0ZSA9IGJvZHkuZ2V0TW90aW9uU3RhdGUoKTtcblxuICAgIGlmIChtb3Rpb25TdGF0ZSkge1xuICAgICAgICBjb25zdCBsaW5lYXJWZWxvY2l0eSA9IG5ldyBBbW1vLmJ0VmVjdG9yMyh2ZWxvY2l0eS54LCB2ZWxvY2l0eS55LCB2ZWxvY2l0eS56KTtcbiAgICAgICAgYm9keS5zZXRMaW5lYXJWZWxvY2l0eShsaW5lYXJWZWxvY2l0eSk7XG4gICAgICAgIEFtbW8uZGVzdHJveShsaW5lYXJWZWxvY2l0eSk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHNldFBvc2l0aW9uID0gZGF0YSA9PiB7XG4gICAgY29uc3QgeyB1dWlkLCBwb3NpdGlvbiB9ID0gZGF0YTtcbiAgICBjb25zdCB7IGJvZHkgfSA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCk7XG5cbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpO1xuXG4gICAgYm9keS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuICAgIHRyYW5zZm9ybS5zZXRPcmlnaW4obmV3IEFtbW8uYnRWZWN0b3IzKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnogKSk7XG5cbiAgICBib2R5LnNldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7XG59XG5cbmV4cG9ydCBjb25zdCBhcHBseUltcHVzZSA9ICh7IHV1aWQsIGltcHVsc2UgPSBERUZBVUxUX0lNUFVMU0UgfSkgPT4ge1xuICAgIGNvbnN0IHsgYm9keSB9ID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKTtcbiAgICBjb25zdCBtb3Rpb25TdGF0ZSA9IGJvZHkuZ2V0TW90aW9uU3RhdGUoKTtcblxuICAgIGlmIChtb3Rpb25TdGF0ZSkge1xuICAgICAgICBjb25zdCBpbXB1bHNlVmVjdG9yID0gbmV3IEFtbW8uYnRWZWN0b3IzKGltcHVsc2UueCwgaW1wdWxzZS55LCBpbXB1bHNlLnopO1xuICAgICAgICBib2R5LmFwcGx5Q2VudHJhbEltcHVsc2UoaW1wdWxzZVZlY3Rvcik7XG4gICAgICAgIEFtbW8uZGVzdHJveShpbXB1bHNlVmVjdG9yKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVFbGVtZW50VXBkYXRlID0gKHsgYm9keSwgdXVpZCwgc3RhdGUgPSBERUZBVUxUX1JJR0lEQk9EWV9TVEFURSB9LCBkdCkgPT4ge1xuICAgIGNvbnN0IG1vdGlvblN0YXRlID0gYm9keS5nZXRNb3Rpb25TdGF0ZSgpO1xuXG4gICAgaWYgKG1vdGlvblN0YXRlKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7XG5cbiAgICAgICAgbW90aW9uU3RhdGUuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcbiAgICAgICAgbGV0IG9yaWdpbiA9IHRyYW5zZm9ybS5nZXRPcmlnaW4oKTtcbiAgICAgICAgbGV0IHJvdGF0aW9uID0gdHJhbnNmb3JtLmdldFJvdGF0aW9uKCk7XG5cbiAgICAgICAgZGlzcGF0Y2hlci5zZW5kQm9keVVwZGF0ZSh1dWlkLCBvcmlnaW4sIHJvdGF0aW9uLCBkdCk7XG4gICAgICAgIEFtbW8uZGVzdHJveSh0cmFuc2Zvcm0pO1xuICAgIH1cbn0iLCJpbXBvcnQgeyBjcmVhdGVSaWdpZEJvZHkgfSBmcm9tICcuL2VsZW1lbnRzJztcbmltcG9ydCB3b3JsZCBmcm9tICcuL3dvcmxkJztcblxuaW1wb3J0IHtcbiAgICBUWVBFUyxcbiAgICBERUZBVUxUX1JJR0lEQk9EWV9TVEFURVxufSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5leHBvcnQgY29uc3QgYWRkUGxheWVyID0gKGRhdGEpID0+IHtcbiAgICBjb25zdCB7IHV1aWQsIHdpZHRoLCBoZWlnaHQsIHBvc2l0aW9uLCBxdWF0ZXJuaW9uLCBtYXNzLCBmcmljdGlvbiB9ID0gZGF0YTtcblxuICAgIGNvbnN0IGNhcHN1bGUgPSBuZXcgQW1tby5idENhcHN1bGVTaGFwZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICBjb25zdCBib2R5ID0gY3JlYXRlUmlnaWRCb2R5KGNhcHN1bGUsIHsgdXVpZCwgcG9zaXRpb24sIHF1YXRlcm5pb24sIG1hc3MsIGZyaWN0aW9uIH0pO1xuXG4gICAgLy8gZGlzYWJsaWluZyByb3RhdGlvbiBmb3IgY29sbGlzaW9uc1xuICAgIGJvZHkuc2V0QW5ndWxhckZhY3RvcigwKTtcblxuICAgIHdvcmxkLmFkZFJpZ2lkQm9keShib2R5KTtcbiAgICB3b3JsZC5zZXRCb2R5KHsgdXVpZCwgYm9keSwgdHlwZTogVFlQRVMuUExBWUVSLCBzdGF0ZTogREVGQVVMVF9SSUdJREJPRFlfU1RBVEUgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgaGFuZGxlUGxheWVyVXBkYXRlID0gKHsgYm9keSwgdXVpZCwgc3RhdGUgPSBERUZBVUxUX1JJR0lEQk9EWV9TVEFURSB9LCBkdCkgPT4ge1xuICAgIGNvbnN0IHsgbW92ZW1lbnQsIGRpcmVjdGlvbiwgY2FtZXJhRGlyZWN0aW9uLCBxdWF0ZXJuaW9uLCBwb3NpdGlvbiB9ID0gc3RhdGU7XG5cbiAgICBjb25zdCBNQVhfU1BFRUQgPSAxO1xuICAgIGNvbnN0IHdhbGtWZWxvY2l0eSA9IC4xO1xuXG4gICAgY29uc3QgbW90aW9uU3RhdGUgPSBib2R5LmdldE1vdGlvblN0YXRlKCk7XG5cbiAgICBpZiAobW90aW9uU3RhdGUpIHtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTtcbiAgICAgICAgbW90aW9uU3RhdGUuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcblxuICAgICAgICBjb25zdCBsaW5lYXJWZWxvY2l0eSA9IGJvZHkuZ2V0TGluZWFyVmVsb2NpdHkoKTtcbiAgICAgICAgY29uc3Qgc3BlZWQgPSBsaW5lYXJWZWxvY2l0eS5sZW5ndGgoKTtcblxuICAgICAgICBjb25zdCBmb3J3YXJkRGlyID0gdHJhbnNmb3JtLmdldEJhc2lzKCkuZ2V0Um93KDIpO1xuICAgICAgICBmb3J3YXJkRGlyLm5vcm1hbGl6ZSgpO1xuICAgICAgICBjb25zdCB3YWxrRGlyZWN0aW9uID0gbmV3IEFtbW8uYnRWZWN0b3IzKDAuMCwgMC4wLCAwLjApO1xuXG4gICAgICAgIGNvbnN0IHdhbGtTcGVlZCA9IHdhbGtWZWxvY2l0eSAqIGR0O1xuXG4gICAgICAgIGlmIChtb3ZlbWVudC5mb3J3YXJkKSB7XG4gICAgICAgICAgICB3YWxrRGlyZWN0aW9uLnNldFgoIHdhbGtEaXJlY3Rpb24ueCgpICsgZm9yd2FyZERpci54KCkpO1xuICAgICAgICAgICAgLy93YWxrRGlyZWN0aW9uLnNldFkoIHdhbGtEaXJlY3Rpb24ueSgpICsgZm9yd2FyZERpci55KCkpO1xuICAgICAgICAgICAgd2Fsa0RpcmVjdGlvbi5zZXRaKCB3YWxrRGlyZWN0aW9uLnooKSArIGZvcndhcmREaXIueigpKTtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICBpZiAobW92ZW1lbnQuYmFja3dhcmRzKSB7XG4gICAgICAgICAgICB3YWxrRGlyZWN0aW9uLnNldFgoIHdhbGtEaXJlY3Rpb24ueCgpIC0gZm9yd2FyZERpci54KCkpO1xuICAgICAgICAgICAgLy93YWxrRGlyZWN0aW9uLnNldFkoIHdhbGtEaXJlY3Rpb24ueSgpIC0gZm9yd2FyZERpci55KCkpO1xuICAgICAgICAgICAgd2Fsa0RpcmVjdGlvbi5zZXRaKCB3YWxrRGlyZWN0aW9uLnooKSAtIGZvcndhcmREaXIueigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbW92ZW1lbnQuZm9yd2FyZCAmJiAhbW92ZW1lbnQuYmFja3dhcmRzKSB7XG4gICAgICAgICAgICBsaW5lYXJWZWxvY2l0eS5zZXRYKGxpbmVhclZlbG9jaXR5LngoKSAqIDAuMik7XG4gICAgICAgICAgICBsaW5lYXJWZWxvY2l0eS5zZXRaKGxpbmVhclZlbG9jaXR5LnooKSAqIDAuMik7XG4gICAgICAgIH0gZWxzZSBpZiAoc3BlZWQgPCBNQVhfU1BFRUQpIHtcbiAgICAgICAgICAgIGxpbmVhclZlbG9jaXR5LnNldFgobGluZWFyVmVsb2NpdHkueCgpICsgY2FtZXJhRGlyZWN0aW9uLnggKiB3YWxrU3BlZWQpO1xuICAgICAgICAgICAgbGluZWFyVmVsb2NpdHkuc2V0WihsaW5lYXJWZWxvY2l0eS56KCkgKyBjYW1lcmFEaXJlY3Rpb24ueiAqIHdhbGtTcGVlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBib2R5LnNldExpbmVhclZlbG9jaXR5KGxpbmVhclZlbG9jaXR5KTtcblxuICAgICAgICBib2R5LmdldE1vdGlvblN0YXRlKCkuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcbiAgICAgICAgYm9keS5zZXRDZW50ZXJPZk1hc3NUcmFuc2Zvcm0odHJhbnNmb3JtKTtcblxuICAgICAgICBsZXQgb3JpZ2luID0gdHJhbnNmb3JtLmdldE9yaWdpbigpO1xuICAgICAgICBsZXQgcm90YXRpb24gPSB0cmFuc2Zvcm0uZ2V0Um90YXRpb24oKTtcblxuICAgICAgICBkaXNwYXRjaGVyLnNlbmRCb2R5VXBkYXRlKHV1aWQsIG9yaWdpbiwgcm90YXRpb24sIGR0KTtcbiAgICB9XG59OyIsImltcG9ydCB7XG4gICAgR1JBVklUWSxcbiAgICBUWVBFU1xufSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5pbXBvcnQgeyBoYW5kbGVFbGVtZW50VXBkYXRlIH0gZnJvbSAnLi9lbGVtZW50cyc7XG5pbXBvcnQgeyBoYW5kbGVWZWhpY2xlVXBkYXRlIH0gZnJvbSAnLi92ZWhpY2xlcyc7XG5pbXBvcnQgeyBoYW5kbGVQbGF5ZXJVcGRhdGUgfSBmcm9tICcuL3BsYXllcic7XG5cbmltcG9ydCBkaXNwYXRjaGVyIGZyb20gJy4vbGliL2Rpc3BhdGNoZXInO1xuaW1wb3J0IHsgUEhZU0lDU19FVkVOVFMgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5cbmNsYXNzIENsb2NrIHtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnRpbWVzdGFtcCA9IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0RGVsdGEoKSB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICBpZiAodGhpcy50aW1lc3RhbXApIHtcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gdGltZSAtIHRoaXMudGltZXN0YW1wO1xuICAgICAgICAgICAgdGhpcy50aW1lc3RhbXAgPSB0aW1lO1xuXG4gICAgICAgICAgICByZXR1cm4gZGVsdGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRpbWVzdGFtcCA9IHRpbWU7XG5cbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFdvcmxkIHtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmVsZW1lbnRzID0ge307XG4gICAgICAgIHRoaXMuaW5pdGlhbGlzZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmNvbGxpc2lvbkNvbmZpZ3VyYXRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5icm9hZHBoYXNlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnNvbHZlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5keW5hbWljc1dvcmxkID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHRoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQgPSBudWxsO1xuICAgICAgICB0aGlzLmNsb2NrID0gbmV3IENsb2NrKCk7XG4gICAgfVxuXG4gICAgaW5pdCA9IChvcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZ3Jhdml0eSA9IEdSQVZJVFkgfSA9IG9wdGlvbnM7XG5cbiAgICAgICAgdGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uID0gbmV3IEFtbW8uYnREZWZhdWx0Q29sbGlzaW9uQ29uZmlndXJhdGlvbigpO1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIgPSBuZXcgQW1tby5idENvbGxpc2lvbkRpc3BhdGNoZXIodGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5icm9hZHBoYXNlID0gbmV3IEFtbW8uYnREYnZ0QnJvYWRwaGFzZSgpO1xuICAgICAgICB0aGlzLnNvbHZlciA9IG5ldyBBbW1vLmJ0U2VxdWVudGlhbEltcHVsc2VDb25zdHJhaW50U29sdmVyKCk7XG4gICAgICAgIHRoaXMuZHluYW1pY3NXb3JsZCA9IG5ldyBBbW1vLmJ0RGlzY3JldGVEeW5hbWljc1dvcmxkKHRoaXMuZGlzcGF0Y2hlciwgdGhpcy5icm9hZHBoYXNlLCB0aGlzLnNvbHZlciwgdGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5keW5hbWljc1dvcmxkLnNldEdyYXZpdHkobmV3IEFtbW8uYnRWZWN0b3IzKGdyYXZpdHkueCwgZ3Jhdml0eS55LCBncmF2aXR5LnopKTtcblxuICAgICAgICAvLyB0aGlzIGlzIG5lZWRlZCBmb3IgZ2hvc3RPYmplY3QgY29sbGlzaW9uc1xuICAgICAgICB0aGlzLmR5bmFtaWNzV29ybGRcbiAgICAgICAgICAgIC5nZXRCcm9hZHBoYXNlKClcbiAgICAgICAgICAgIC5nZXRPdmVybGFwcGluZ1BhaXJDYWNoZSgpXG4gICAgICAgICAgICAuc2V0SW50ZXJuYWxHaG9zdFBhaXJDYWxsYmFjayhuZXcgQW1tby5idEdob3N0UGFpckNhbGxiYWNrKCkpXG5cbiAgICAgICAgdGhpcy5pbml0aWFsaXNlZCA9IHRydWU7XG4gICAgfTtcblxuICAgIHJlbW92ZUVsZW1lbnQgPSB1dWlkID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRWxlbWVudCh1dWlkKSkge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50c1t1dWlkXS5kZWxldGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZURlbGV0ZWRFbGVtZW50cyA9ICgpID0+IChcbiAgICAgICAgT2JqZWN0XG4gICAgICAgICAgICAua2V5cyh0aGlzLmVsZW1lbnRzKVxuICAgICAgICAgICAgLmZpbHRlcih1dWlkID0+IHRoaXMuZWxlbWVudHNbdXVpZF0uZGVsZXRlZClcbiAgICAgICAgICAgIC5mb3JFYWNoKHV1aWQgPT4ge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmVsZW1lbnRzW3V1aWRdO1xuICAgICAgICAgICAgfSlcbiAgICApO1xuXG4gICAgaGFzRWxlbWVudCA9IHV1aWQgPT4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5lbGVtZW50cykuaW5jbHVkZXModXVpZCk7XG4gICAgfVxuXG4gICAgZ2V0RWxlbWVudCA9IHV1aWQgPT4gdGhpcy5lbGVtZW50c1t1dWlkXTtcblxuICAgIGlzSW5pdGlhbGlzZWQgPSAoKSA9PiB0aGlzLmluaXRpYWxpc2VkO1xuXG4gICAgZ2V0RHluYW1pY3NXb3JsZCA9ICgpID0+IHRoaXMuZHluYW1pY3NXb3JsZDtcblxuICAgIGFkZFJpZ2lkQm9keSA9IGJvZHkgPT4ge1xuICAgICAgICB0aGlzLmR5bmFtaWNzV29ybGQuYWRkUmlnaWRCb2R5KGJvZHkpO1xuICAgIH1cblxuICAgIGFkZEFjdGlvbiA9IGFjdGlvbiA9PiB7XG4gICAgICAgIHRoaXMuZHluYW1pY3NXb3JsZC5hZGRBY3Rpb24oYWN0aW9uKTtcbiAgICB9XG5cbiAgICBhZGRDb2xsaXNpb25PYmplY3QgPSBjb2xsaXNpb25PYmplY3QgPT4ge1xuICAgICAgICB0aGlzLmR5bmFtaWNzV29ybGQuYWRkQ29sbGlzaW9uT2JqZWN0KGNvbGxpc2lvbk9iamVjdCk7XG4gICAgfVxuXG4gICAgc3RlcFNpbXVsYXRpb24gPSBkdCA9PiB7XG4gICAgICAgIHRoaXMuZHluYW1pY3NXb3JsZC5zdGVwU2ltdWxhdGlvbihkdCk7XG4gICAgfVxuXG4gICAgc2ltdWxhdGUgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGR0ID0gdGhpcy5jbG9jay5nZXREZWx0YSgpO1xuICAgICAgICB0aGlzLnN0ZXBTaW11bGF0aW9uKGR0KTtcblxuICAgICAgICBPYmplY3RcbiAgICAgICAgICAgIC5rZXlzKHRoaXMuZWxlbWVudHMpXG4gICAgICAgICAgICAuZm9yRWFjaCh1dWlkID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5nZXRFbGVtZW50KHV1aWQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoKGVsZW1lbnQudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUWVBFUy5CT1g6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRZUEVTLlNQSEVSRTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVFlQRVMuTUVTSDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVFbGVtZW50VXBkYXRlKGVsZW1lbnQsIGR0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVFlQRVMuUExBWUVSOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVBsYXllclVwZGF0ZShlbGVtZW50LCBkdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRZUEVTLlZFSElDTEU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlVmVoaWNsZVVwZGF0ZShlbGVtZW50LCBkdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jYWxjdWxhdGVDb2xsaXNpb25zKCk7XG4gICAgICAgIHRoaXMucmVtb3ZlRGVsZXRlZEVsZW1lbnRzKCk7XG5cbiAgICAgICAgZGlzcGF0Y2hlci5zZW5kUGh5c2ljc1VwZGF0ZShkdCk7XG5cbiAgICAgICAgdGhpcy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnNpbXVsYXRlLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIGNhbGN1bGF0ZUNvbGxpc2lvbnMgPSAoKSA9PiB7XG4gICAgICAgIGxldCBhbW1vRGlzcGF0Y2hlciA9IHRoaXMuZHluYW1pY3NXb3JsZC5nZXREaXNwYXRjaGVyKCk7XG4gICAgICAgIGxldCBudW1NYW5pZm9sZHMgPSBhbW1vRGlzcGF0Y2hlci5nZXROdW1NYW5pZm9sZHMoKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bU1hbmlmb2xkczsgaSsrKSB7XG5cbiAgICAgICAgICAgIGxldCBjb250YWN0TWFuaWZvbGQgPSBhbW1vRGlzcGF0Y2hlci5nZXRNYW5pZm9sZEJ5SW5kZXhJbnRlcm5hbChpKTtcblxuICAgICAgICAgICAgbGV0IHJiMCA9IEFtbW8uY2FzdE9iamVjdChjb250YWN0TWFuaWZvbGQuZ2V0Qm9keTAoKSwgQW1tby5idFJpZ2lkQm9keSk7XG4gICAgICAgICAgICBsZXQgcmIxID0gQW1tby5jYXN0T2JqZWN0KGNvbnRhY3RNYW5pZm9sZC5nZXRCb2R5MSgpLCBBbW1vLmJ0UmlnaWRCb2R5KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IG51bUNvbnRhY3RzID0gY29udGFjdE1hbmlmb2xkLmdldE51bUNvbnRhY3RzKCk7XG5cbiAgICAgICAgICAgIC8vIHRoaXMgaXRlcmF0aW9uIGRvZXNuJ3QgaGF2ZSB1dWlkc1xuICAgICAgICAgICAgaWYgKCFyYjAudXVpZCB8fCAhcmIxLnV1aWQpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBsZXQgY29udGFjdHMgPSBbXTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW1Db250YWN0czsgaisrKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgY29udGFjdFBvaW50ID0gY29udGFjdE1hbmlmb2xkLmdldENvbnRhY3RQb2ludChqKTtcbiAgICAgICAgICAgICAgICBsZXQgZGlzdGFuY2UgPSBjb250YWN0UG9pbnQuZ2V0RGlzdGFuY2UoKTtcblxuICAgICAgICAgICAgICAgIGlmKCBkaXN0YW5jZSA+IDAuMCkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICBsZXQgdmVsb2NpdHkwID0gcmIwLmdldExpbmVhclZlbG9jaXR5KCk7XG4gICAgICAgICAgICAgICAgbGV0IHZlbG9jaXR5MSA9IHJiMS5nZXRMaW5lYXJWZWxvY2l0eSgpO1xuICAgICAgICAgICAgICAgIGxldCB3b3JsZFBvczAgPSBjb250YWN0UG9pbnQuZ2V0X21fcG9zaXRpb25Xb3JsZE9uQSgpO1xuICAgICAgICAgICAgICAgIGxldCB3b3JsZFBvczEgPSBjb250YWN0UG9pbnQuZ2V0X21fcG9zaXRpb25Xb3JsZE9uQigpO1xuICAgICAgICAgICAgICAgIGxldCBsb2NhbFBvczAgPSBjb250YWN0UG9pbnQuZ2V0X21fbG9jYWxQb2ludEEoKTtcbiAgICAgICAgICAgICAgICBsZXQgbG9jYWxQb3MxID0gY29udGFjdFBvaW50LmdldF9tX2xvY2FsUG9pbnRCKCk7XG5cbiAgICAgICAgICAgICAgICBjb250YWN0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzOltcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dWlkOiByYjAudXVpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWxvY2l0eTogeyB4OiB2ZWxvY2l0eTAueCgpLCB5OiB2ZWxvY2l0eTAueSgpLCB6OiB2ZWxvY2l0eTAueigpIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ybGRQb3M6IHsgeDogd29ybGRQb3MwLngoKSwgeTogd29ybGRQb3MwLnkoKSwgejogd29ybGRQb3MwLnooKSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsUG9zOiB7IHg6IGxvY2FsUG9zMC54KCksIHk6IGxvY2FsUG9zMC55KCksIHo6IGxvY2FsUG9zMC56KCkgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dWlkOiByYjEudXVpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWxvY2l0eTogeyB4OiB2ZWxvY2l0eTEueCgpLCB5OiB2ZWxvY2l0eTEueSgpLCB6OiB2ZWxvY2l0eTEueigpIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ybGRQb3M6IHsgeDogd29ybGRQb3MxLngoKSwgeTogd29ybGRQb3MxLnkoKSwgejogd29ybGRQb3MxLnooKSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsUG9zOiB7IHg6IGxvY2FsUG9zMS54KCksIHk6IGxvY2FsUG9zMS55KCksIHo6IGxvY2FsUG9zMS56KCkgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRpc3BhdGNoZXIuc2VuZERpc3BhdGNoRXZlbnQocmIwLnV1aWQsIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuQ09MTElTSU9OLCB7IGNvbnRhY3RzIH0pO1xuICAgICAgICAgICAgZGlzcGF0Y2hlci5zZW5kRGlzcGF0Y2hFdmVudChyYjEudXVpZCwgUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5DT0xMSVNJT04sIHsgY29udGFjdHMgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRFbGVtZW50ID0gZGF0YSA9PiB7XG4gICAgICAgIHRoaXMuZWxlbWVudHNbZGF0YS51dWlkXSA9IGRhdGE7XG4gICAgfVxuXG4gICAgdXBkYXRlQm9keVN0YXRlID0gKHsgdXVpZCwgc3RhdGUgfSkgPT4ge1xuICAgICAgICB0aGlzLmVsZW1lbnRzW3V1aWRdLnN0YXRlID0ge1xuICAgICAgICAgICAgLi4udGhpcy5lbGVtZW50c1t1dWlkXS5zdGF0ZSxcbiAgICAgICAgICAgIC4uLnN0YXRlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZGlzcG9zZUJvZHkoeyB1dWlkIH0pIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZ2V0RWxlbWVudCh1dWlkKTtcbiAgICAgICAgdGhpcy5keW5hbWljc1dvcmxkLnJlbW92ZVJpZ2lkQm9keShlbGVtZW50LmJvZHkpO1xuICAgICAgICB0aGlzLnJlbW92ZUVsZW1lbnQodXVpZCk7XG5cbiAgICAgICAgZGlzcGF0Y2hlci5zZW5kRWxlbWVudERpc3Bvc2VkKHsgdXVpZCB9KTtcbiAgICB9XG5cbiAgICB0ZXJtaW5hdGUgPSAoKSA9PiB7XG4gICAgICAgIEFtbW8uZGVzdHJveSh0aGlzLmR5bmFtaWNzV29ybGQpO1xuICAgICAgICBBbW1vLmRlc3Ryb3kodGhpcy5zb2x2ZXIpO1xuICAgICAgICBBbW1vLmRlc3Ryb3kodGhpcy5kaXNwYXRjaGVyKTtcbiAgICAgICAgQW1tby5kZXN0cm95KHRoaXMuY29sbGlzaW9uQ29uZmlndXJhdGlvbik7XG5cbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCk7XG5cbiAgICAgICAgZGlzcGF0Y2hlci5zZW5kVGVybWluYXRlRXZlbnQoKTtcbiAgICB9XG59O1xuXG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBXb3JsZCgpOyIsImltcG9ydCB7XG4gICAgRElTQUJMRV9ERUFDVElWQVRJT04sXG4gICAgVFlQRVMsXG4gICAgREVGQVVMVF9WRUhJQ0xFX1NUQVRFLFxuICAgIEJBQ0tfTEVGVCxcbiAgICBCQUNLX1JJR0hULFxuICAgIEZST05UX0xFRlQsXG4gICAgRlJPTlRfUklHSFQsXG4gICAgREVGQVVMVF9NQVhfRU5HSU5FX0ZPUkNFLFxuICAgIERFRkFVTFRfTUFYX0JSRUFLSU5HX0ZPUkNFLFxuICAgIERFRkFVTFRfU1RFRVJJTkdfQ0xBTVAsXG4gICAgREVGQVVMVF9TVEVFUklOR19JTkNSRU1FTlRcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuaW1wb3J0IHtcbiAgICBQSFlTSUNTX0VWRU5UU1xufSBmcm9tICcuLi9tZXNzYWdlcyc7XG5cbmltcG9ydCB3b3JsZCBmcm9tICcuL3dvcmxkJztcbmltcG9ydCBkaXNwYXRjaGVyIGZyb20gJy4vbGliL2Rpc3BhdGNoZXInO1xuXG5jb25zdCBERUZBVUxUX1JPTExfSU5GTFVFTkNFID0gMC4yO1xuY29uc3QgREVGQVVMVF9GUklDVElPTiA9IDEwMDA7XG5jb25zdCBERUZBVUxUX01BU1MgPSA4MDA7XG5cbmV4cG9ydCBjb25zdCBhZGRWZWhpY2xlID0gZGF0YSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgcXVhdGVybmlvbixcbiAgICAgICAgdXVpZCxcbiAgICAgICAgd2hlZWxzLFxuICAgICAgICBtYXNzID0gREVGQVVMVF9NQVNTLFxuICAgICAgICB3aWR0aCA9IDEuOCxcbiAgICAgICAgaGVpZ2h0ID0gLjYsXG4gICAgICAgIGxlbmd0aCA9IDQsXG4gICAgICAgIGZyaWN0aW9uID0gREVGQVVMVF9GUklDVElPTixcbiAgICAgICAgcm9sbEluZmx1ZW5jZSA9IERFRkFVTFRfUk9MTF9JTkZMVUVOQ0UsXG4gICAgICAgIHdoZWVsc09wdGlvbnMgPSB7fSxcbiAgICAgICAgc3VzcGVuc2lvbnMgPSB7fVxuICAgIH0gPSBkYXRhO1xuXG4gICAgY29uc3QgeyBiYWNrID0ge30sIGZyb250ID0ge30gfSA9IHdoZWVsc09wdGlvbnM7XG4gICAgY29uc3Qge1xuICAgICAgICBheGlzUG9zaXRpb246IGF4aXNQb3NpdGlvbkJhY2sgPSAtMSxcbiAgICAgICAgcmFkaXVzOiB3aGVlbFJhZGl1c0JhY2sgPSAuNCxcbiAgICAgICAgaGFsZlRyYWNrOiB3aGVlbEhhbGZUcmFja0JhY2sgPSAxLFxuICAgICAgICBheGlzSGVpZ2h0OiB3aGVlbEF4aXNIZWlnaHRCYWNrID0gLjNcbiAgICB9ID0gYmFjaztcblxuICAgIGNvbnN0IHtcbiAgICAgICAgYXhpc1Bvc2l0aW9uOiBheGlzUG9zaXRpb25Gcm9udCA9IDEuNyxcbiAgICAgICAgcmFkaXVzOiB3aGVlbFJhZGl1c0Zyb250ID0gLjQsXG4gICAgICAgIGhhbGZUcmFjazogd2hlZWxIYWxmVHJhY2tGcm9udCA9IDEsXG4gICAgICAgIGF4aXNIZWlnaHQ6IHdoZWVsQXhpc0hlaWdodEZyb250ID0gLjNcbiAgICB9ID0gZnJvbnQ7XG5cbiAgICBjb25zdCB7IHN0aWZmbmVzcyA9IDIwLjAsIGRhbXBpbmcgPSAyLjMsIGNvbXByZXNzaW9uID0gNC40LCByZXN0TGVuZ3RoID0gMC42IH0gPSBzdXNwZW5zaW9ucztcblxuXG4gICAgLy8gQ2hhc3Npc1xuICAgIGNvbnN0IGdlb21ldHJ5ID0gbmV3IEFtbW8uYnRCb3hTaGFwZShuZXcgQW1tby5idFZlY3RvcjMod2lkdGggKiAuNSwgaGVpZ2h0ICogLjUsIGxlbmd0aCAqIC41KSk7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTtcbiAgICB0cmFuc2Zvcm0uc2V0SWRlbnRpdHkoKTtcbiAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKG5ldyBBbW1vLmJ0VmVjdG9yMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KSk7XG4gICAgdHJhbnNmb3JtLnNldFJvdGF0aW9uKG5ldyBBbW1vLmJ0UXVhdGVybmlvbihxdWF0ZXJuaW9uLngsIHF1YXRlcm5pb24ueSwgcXVhdGVybmlvbi56LCBxdWF0ZXJuaW9uLncpKTtcbiAgICBjb25zdCBtb3Rpb25TdGF0ZSA9IG5ldyBBbW1vLmJ0RGVmYXVsdE1vdGlvblN0YXRlKHRyYW5zZm9ybSk7XG4gICAgY29uc3QgbG9jYWxJbmVydGlhID0gbmV3IEFtbW8uYnRWZWN0b3IzKDAsIDAsIDApO1xuICAgIGdlb21ldHJ5LmNhbGN1bGF0ZUxvY2FsSW5lcnRpYShtYXNzLCBsb2NhbEluZXJ0aWEpO1xuICAgIGNvbnN0IGNoYXNzaXMgPSBuZXcgQW1tby5idFJpZ2lkQm9keShuZXcgQW1tby5idFJpZ2lkQm9keUNvbnN0cnVjdGlvbkluZm8obWFzcywgbW90aW9uU3RhdGUsIGdlb21ldHJ5LCBsb2NhbEluZXJ0aWEpKTtcbiAgICBjaGFzc2lzLnNldEFjdGl2YXRpb25TdGF0ZShESVNBQkxFX0RFQUNUSVZBVElPTik7XG4gICAgd29ybGQuYWRkUmlnaWRCb2R5KGNoYXNzaXMpO1xuXG5cbiAgICAvLyBSYXljYXN0IFZlaGljbGVcbiAgICBjb25zdCB0dW5pbmcgPSBuZXcgQW1tby5idFZlaGljbGVUdW5pbmcoKTtcbiAgICBjb25zdCByYXlDYXN0ZXIgPSBuZXcgQW1tby5idERlZmF1bHRWZWhpY2xlUmF5Y2FzdGVyKHdvcmxkLmdldER5bmFtaWNzV29ybGQoKSk7XG4gICAgY29uc3QgdmVoaWNsZSA9IG5ldyBBbW1vLmJ0UmF5Y2FzdFZlaGljbGUodHVuaW5nLCBjaGFzc2lzLCByYXlDYXN0ZXIpO1xuICAgIHZlaGljbGUuc2V0Q29vcmRpbmF0ZVN5c3RlbSgwLCAxLCAyKTtcbiAgICB3b3JsZC5hZGRBY3Rpb24odmVoaWNsZSk7XG5cbiAgICBjb25zdCB3aGVlbERpcmVjdGlvbkNTMCA9IG5ldyBBbW1vLmJ0VmVjdG9yMygwLCAtMSwgMCk7XG4gICAgY29uc3Qgd2hlZWxBeGxlQ1MgPSBuZXcgQW1tby5idFZlY3RvcjMoLTEsIDAsIDApO1xuXG4gICAgY29uc3QgYWRkV2hlZWwgPSAoaXNGcm9udCwgcG9zLCByYWRpdXMpID0+IHtcblxuICAgICAgICB2YXIgd2hlZWxJbmZvID0gdmVoaWNsZS5hZGRXaGVlbChcbiAgICAgICAgICAgIHBvcyxcbiAgICAgICAgICAgIHdoZWVsRGlyZWN0aW9uQ1MwLFxuICAgICAgICAgICAgd2hlZWxBeGxlQ1MsXG4gICAgICAgICAgICByZXN0TGVuZ3RoLFxuICAgICAgICAgICAgcmFkaXVzLFxuICAgICAgICAgICAgdHVuaW5nLFxuICAgICAgICAgICAgaXNGcm9udCk7XG5cbiAgICAgICAgd2hlZWxJbmZvLnNldF9tX3N1c3BlbnNpb25TdGlmZm5lc3Moc3RpZmZuZXNzKTtcbiAgICAgICAgd2hlZWxJbmZvLnNldF9tX3doZWVsc0RhbXBpbmdSZWxheGF0aW9uKGRhbXBpbmcpO1xuICAgICAgICB3aGVlbEluZm8uc2V0X21fd2hlZWxzRGFtcGluZ0NvbXByZXNzaW9uKGNvbXByZXNzaW9uKTtcbiAgICAgICAgd2hlZWxJbmZvLnNldF9tX2ZyaWN0aW9uU2xpcChmcmljdGlvbik7XG4gICAgICAgIHdoZWVsSW5mby5zZXRfbV9yb2xsSW5mbHVlbmNlKHJvbGxJbmZsdWVuY2UpO1xuICAgIH1cblxuICAgIGFkZFdoZWVsKHRydWUsIG5ldyBBbW1vLmJ0VmVjdG9yMyh3aGVlbEhhbGZUcmFja0Zyb250LCB3aGVlbEF4aXNIZWlnaHRGcm9udCwgYXhpc1Bvc2l0aW9uRnJvbnQpLCB3aGVlbFJhZGl1c0Zyb250KTtcbiAgICBhZGRXaGVlbCh0cnVlLCBuZXcgQW1tby5idFZlY3RvcjMoLXdoZWVsSGFsZlRyYWNrRnJvbnQsIHdoZWVsQXhpc0hlaWdodEZyb250LCBheGlzUG9zaXRpb25Gcm9udCksIHdoZWVsUmFkaXVzRnJvbnQpO1xuICAgIGFkZFdoZWVsKGZhbHNlLCBuZXcgQW1tby5idFZlY3RvcjMoLXdoZWVsSGFsZlRyYWNrQmFjaywgd2hlZWxBeGlzSGVpZ2h0QmFjaywgYXhpc1Bvc2l0aW9uQmFjayksIHdoZWVsUmFkaXVzQmFjayk7XG4gICAgYWRkV2hlZWwoZmFsc2UsIG5ldyBBbW1vLmJ0VmVjdG9yMyh3aGVlbEhhbGZUcmFja0JhY2ssIHdoZWVsQXhpc0hlaWdodEJhY2ssIGF4aXNQb3NpdGlvbkJhY2spLCB3aGVlbFJhZGl1c0JhY2spO1xuXG4gICAgdmVoaWNsZS51dWlkID0gdXVpZDtcblxuICAgIHdvcmxkLnNldEJvZHkoe1xuICAgICAgICB0eXBlOiBUWVBFUy5WRUhJQ0xFLFxuICAgICAgICB1dWlkLFxuICAgICAgICB2ZWhpY2xlOiB2ZWhpY2xlLFxuICAgICAgICB3aGVlbHMsXG4gICAgICAgIG9wdGlvbnM6IGRhdGEsXG4gICAgICAgIHN0YXRlOiBERUZBVUxUX1ZFSElDTEVfU1RBVEVcbiAgICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IHNldFZlaGljbGVQb3NpdGlvbiA9IGRhdGEgPT4ge1xuICAgIGNvbnN0IHsgdXVpZCwgcG9zaXRpb24gfSA9IGRhdGE7XG4gICAgY29uc3QgZWxlbWVudCA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCk7XG5cbiAgICBpZiAoZWxlbWVudC50eXBlID09PSBUWVBFUy5WRUhJQ0xFKSB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBlbGVtZW50LnZlaGljbGUuZ2V0UmlnaWRCb2R5KCk7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7XG5cbiAgICAgICAgYm9keS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuICAgICAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKG5ldyBBbW1vLmJ0VmVjdG9yMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56ICkpO1xuXG4gICAgICAgIGJvZHkuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0VmVoaWNsZVF1YXRlcm5pb24gPSBkYXRhID0+IHtcbiAgICBjb25zdCB7IHV1aWQsIHF1YXRlcm5pb24gfSA9IGRhdGE7XG4gICAgY29uc3QgZWxlbWVudCA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCk7XG5cbiAgICBpZiAoZWxlbWVudC50eXBlID09PSBUWVBFUy5WRUhJQ0xFKSB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBlbGVtZW50LnZlaGljbGUuZ2V0UmlnaWRCb2R5KCk7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7XG5cbiAgICAgICAgYm9keS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuICAgICAgICB0cmFuc2Zvcm0uc2V0Um90YXRpb24obmV3IEFtbW8uYnRRdWF0ZXJuaW9uKHF1YXRlcm5pb24ueCwgcXVhdGVybmlvbi55LCBxdWF0ZXJuaW9uLnosIHF1YXRlcm5pb24udykpO1xuXG4gICAgICAgIGJvZHkuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgcmVzZXRWZWhpY2xlID0gZGF0YSA9PiB7XG4gICAgY29uc3QgeyB1dWlkLCBxdWF0ZXJuaW9uLCBwb3NpdGlvbiB9ID0gZGF0YTtcbiAgICBjb25zdCBlbGVtZW50ID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKTtcblxuICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFRZUEVTLlZFSElDTEUpIHtcbiAgICAgICAgY29uc3QgYm9keSA9IGVsZW1lbnQudmVoaWNsZS5nZXRSaWdpZEJvZHkoKTtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTtcbiAgICAgICAgXG4gICAgICAgIGJvZHkuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcblxuICAgICAgICB0cmFuc2Zvcm0uc2V0SWRlbnRpdHkoKTtcbiAgICAgICAgdHJhbnNmb3JtLnNldE9yaWdpbihuZXcgQW1tby5idFZlY3RvcjMocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueiApKTtcbiAgICAgICAgdHJhbnNmb3JtLnNldFJvdGF0aW9uKG5ldyBBbW1vLmJ0UXVhdGVybmlvbihxdWF0ZXJuaW9uLngsIHF1YXRlcm5pb24ueSwgcXVhdGVybmlvbi56LCBxdWF0ZXJuaW9uLncpKTtcblxuICAgICAgICBib2R5LnNldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgaGFuZGxlVmVoaWNsZVVwZGF0ZSA9ICh7IHZlaGljbGUsIHdoZWVscywgdXVpZCwgc3RhdGUgPSBERUZBVUxUX1ZFSElDTEVfU1RBVEUsIG9wdGlvbnMgPSB7fSB9LCBkdCkgPT4ge1xuICAgIGNvbnN0IHNwZWVkID0gdmVoaWNsZS5nZXRDdXJyZW50U3BlZWRLbUhvdXIoKTtcblxuICAgIGRpc3BhdGNoZXIuc2VuZERpc3BhdGNoRXZlbnQodXVpZCwgUEhZU0lDU19FVkVOVFMuVkVISUNMRS5TUEVFRCwgeyBzcGVlZCB9KTtcblxuICAgIGxldCBicmVha2luZ0ZvcmNlID0gMDtcbiAgICBsZXQgZW5naW5lRm9yY2UgPSAwO1xuXG4gICAgY29uc3Qge1xuICAgICAgICBzdGVlcmluZ0NsYW1wID0gREVGQVVMVF9TVEVFUklOR19DTEFNUCxcbiAgICAgICAgc3RlZXJpbmdJbmNyZW1lbnQgPSBERUZBVUxUX1NURUVSSU5HX0lOQ1JFTUVOVCxcbiAgICAgICAgbWF4RW5naW5lRm9yY2UgPSBERUZBVUxUX01BWF9FTkdJTkVfRk9SQ0UsXG4gICAgICAgIG1heEJyZWFraW5nRm9yY2UgPSBERUZBVUxUX01BWF9CUkVBS0lOR19GT1JDRVxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgaWYgKHN0YXRlLmFjY2VsZXJhdGlvbikge1xuICAgICAgICBpZiAoc3BlZWQgPCAtMSlcbiAgICAgICAgICAgIGJyZWFraW5nRm9yY2UgPSBtYXhCcmVha2luZ0ZvcmNlO1xuICAgICAgICBlbHNlIGVuZ2luZUZvcmNlID0gbWF4RW5naW5lRm9yY2U7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5icmFraW5nKSB7XG4gICAgICAgIGlmIChzcGVlZCA+IDEpXG4gICAgICAgICAgICBicmVha2luZ0ZvcmNlID0gbWF4QnJlYWtpbmdGb3JjZTtcbiAgICAgICAgZWxzZSBlbmdpbmVGb3JjZSA9IC1tYXhFbmdpbmVGb3JjZSAvIDI7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5sZWZ0KSB7XG4gICAgICAgIGlmIChzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPCBzdGVlcmluZ0NsYW1wKVxuICAgICAgICAgICAgc3RhdGUudmVoaWNsZVN0ZWVyaW5nICs9IHN0ZWVyaW5nSW5jcmVtZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzdGF0ZS5yaWdodCkge1xuICAgICAgICAgICAgaWYgKHN0YXRlLnZlaGljbGVTdGVlcmluZyA+IC1zdGVlcmluZ0NsYW1wKVxuICAgICAgICAgICAgICAgIHN0YXRlLnZlaGljbGVTdGVlcmluZyAtPSBzdGVlcmluZ0luY3JlbWVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPCAtc3RlZXJpbmdJbmNyZW1lbnQpXG4gICAgICAgICAgICAgICAgc3RhdGUudmVoaWNsZVN0ZWVyaW5nICs9IHN0ZWVyaW5nSW5jcmVtZW50O1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnZlaGljbGVTdGVlcmluZyA+IHN0ZWVyaW5nSW5jcmVtZW50KVxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgLT0gc3RlZXJpbmdJbmNyZW1lbnQ7XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnZlaGljbGVTdGVlcmluZyA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmVoaWNsZS5hcHBseUVuZ2luZUZvcmNlKGVuZ2luZUZvcmNlLCBCQUNLX0xFRlQpO1xuICAgIHZlaGljbGUuYXBwbHlFbmdpbmVGb3JjZShlbmdpbmVGb3JjZSwgQkFDS19SSUdIVCk7XG5cbiAgICB2ZWhpY2xlLnNldEJyYWtlKGJyZWFraW5nRm9yY2UgLyAyLCBGUk9OVF9MRUZUKTtcbiAgICB2ZWhpY2xlLnNldEJyYWtlKGJyZWFraW5nRm9yY2UgLyAyLCBGUk9OVF9SSUdIVCk7XG4gICAgdmVoaWNsZS5zZXRCcmFrZShicmVha2luZ0ZvcmNlLCBCQUNLX0xFRlQpO1xuICAgIHZlaGljbGUuc2V0QnJha2UoYnJlYWtpbmdGb3JjZSwgQkFDS19SSUdIVCk7XG5cbiAgICB2ZWhpY2xlLnNldFN0ZWVyaW5nVmFsdWUoc3RhdGUudmVoaWNsZVN0ZWVyaW5nLCBGUk9OVF9MRUZUKTtcbiAgICB2ZWhpY2xlLnNldFN0ZWVyaW5nVmFsdWUoc3RhdGUudmVoaWNsZVN0ZWVyaW5nLCBGUk9OVF9SSUdIVCk7XG5cbiAgICBsZXQgdG0sIHAsIHEsIGk7XG4gICAgY29uc3QgbiA9IHZlaGljbGUuZ2V0TnVtV2hlZWxzKCk7XG4gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICB2ZWhpY2xlLnVwZGF0ZVdoZWVsVHJhbnNmb3JtKGksIHRydWUpO1xuICAgICAgICB0bSA9IHZlaGljbGUuZ2V0V2hlZWxUcmFuc2Zvcm1XUyhpKTtcbiAgICAgICAgcCA9IHRtLmdldE9yaWdpbigpO1xuICAgICAgICBxID0gdG0uZ2V0Um90YXRpb24oKTtcblxuICAgICAgICBjb25zdCB3aGVlbFVVSUQgPSB3aGVlbHNbaV07XG4gICAgICAgIGRpc3BhdGNoZXIuc2VuZEJvZHlVcGRhdGUod2hlZWxVVUlELCBwLCBxLCBkdCk7XG4gICAgfVxuXG4gICAgdG0gPSB2ZWhpY2xlLmdldENoYXNzaXNXb3JsZFRyYW5zZm9ybSgpO1xuICAgIHAgPSB0bS5nZXRPcmlnaW4oKTtcbiAgICBxID0gdG0uZ2V0Um90YXRpb24oKTtcblxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IHZlaGljbGUuZ2V0Rm9yd2FyZFZlY3RvcigpO1xuICAgIGRpc3BhdGNoZXIuc2VuZERpc3BhdGNoRXZlbnQodXVpZCwgUEhZU0lDU19FVkVOVFMuVkVISUNMRS5ESVJFQ1RJT04sIHtcbiAgICAgICAgZGlyZWN0aW9uOiB7XG4gICAgICAgICAgICB4OiBkaXJlY3Rpb24ueCgpLFxuICAgICAgICAgICAgeTogZGlyZWN0aW9uLnkoKSxcbiAgICAgICAgICAgIHo6IGRpcmVjdGlvbi56KClcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgZGlzcGF0Y2hlci5zZW5kQm9keVVwZGF0ZSh1dWlkLCBwLCBxLCBkdCk7XG4gICAgd29ybGQudXBkYXRlQm9keVN0YXRlKHV1aWQsIHN0YXRlKTtcbn0iLCJpbXBvcnQgeyBFWFBMT1NJT05fU0laRVMsIEVYUExPU0lPTl9TVFJFTkdUSFMgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgd29ybGQgZnJvbSBcIi4vd29ybGRcIjtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUdob3N0Q29sbGlkZXIgPSAocmFkaXVzLCBwb3NpdGlvbikgPT4ge1xuICAgIGNvbnN0IGdob3N0Q29sbGlkZXIgPSBuZXcgQW1tby5idEdob3N0T2JqZWN0KCk7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTtcblxuICAgIGdob3N0Q29sbGlkZXIuc2V0Q29sbGlzaW9uU2hhcGUobmV3IEFtbW8uYnRTcGhlcmVTaGFwZShyYWRpdXMpKTtcbiAgICBnaG9zdENvbGxpZGVyLmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7XG5cbiAgICB0cmFuc2Zvcm0uc2V0SWRlbnRpdHkoKTtcbiAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKHBvc2l0aW9uKTtcbiAgICB0cmFuc2Zvcm0uc2V0Um90YXRpb24obmV3IEFtbW8uYnRRdWF0ZXJuaW9uKDAsIDAsIDAsIDEpKTtcblxuICAgIGdob3N0Q29sbGlkZXIuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcblxuICAgIHJldHVybiB7IGdob3N0Q29sbGlkZXIsIHRyYW5zZm9ybSB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGZvckVhY2hHaG9zdENvbGxpc2lvbiA9IChnaG9zdENvbGxpZGVyLCBmb3JFYWNoQ2FsbGJhY2sgPSAoKSA9PiB7fSkgPT4ge1xuICAgIGNvbnN0IGNvbGxpc2lvbnMgPSBnaG9zdENvbGxpZGVyLmdldE51bU92ZXJsYXBwaW5nT2JqZWN0cygpO1xuICAgIGZvciAobGV0IGk9MDsgaTxjb2xsaXNpb25zOyBpKyspIHtcbiAgICAgICAgY29uc3Qgb2JqZWN0ID0gQW1tby5jYXN0T2JqZWN0KGdob3N0Q29sbGlkZXIuZ2V0T3ZlcmxhcHBpbmdPYmplY3QoaSksIEFtbW8uYnRSaWdpZEJvZHkpO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpO1xuXG4gICAgICAgIG9iamVjdC5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuICAgICAgICBmb3JFYWNoQ2FsbGJhY2sob2JqZWN0LCB0cmFuc2Zvcm0sIGkpO1xuXG4gICAgICAgIEFtbW8uZGVzdHJveSh0cmFuc2Zvcm0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGdldEV4cGxvc2lvblBvc2l0aW9uID0gKHV1aWQsIHBvc2l0aW9uKSA9PiB7XG4gICAgbGV0IGV4cGxvc2lvblBvc2l0aW9uID0gcG9zaXRpb247XG4gICAgaWYgKCFleHBsb3Npb25Qb3NpdGlvbikge1xuICAgICAgICBjb25zdCB7IGJvZHkgfSA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCk7XG4gICAgICAgIGNvbnN0IG1vdGlvblN0YXRlID0gYm9keS5nZXRNb3Rpb25TdGF0ZSgpO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpO1xuXG4gICAgICAgIG1vdGlvblN0YXRlLmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7XG4gICAgICAgIGV4cGxvc2lvblBvc2l0aW9uID0gdHJhbnNmb3JtLmdldE9yaWdpbigpO1xuICAgIH1cblxuICAgIHJldHVybiBleHBsb3Npb25Qb3NpdGlvbjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFeHBsb3Npb25JbXB1bHNlID0gKHBvc2l0aW9uLCBleHBsb3Npb25Qb3NpdGlvbiwgc3RyZW5ndGgpID0+IHtcbiAgICBjb25zdCBkaXN0YW5jZSA9IHBvc2l0aW9uLm9wX3N1YihleHBsb3Npb25Qb3NpdGlvbik7XG4gICAgZGlzdGFuY2Uubm9ybWFsaXplKCk7XG4gICAgY29uc3QgaW1wdWxzZSA9IGRpc3RhbmNlLm9wX211bChzdHJlbmd0aCk7XG5cbiAgICBpbXB1bHNlLnNldFkoaW1wdWxzZS55KCkgKyBzdHJlbmd0aCk7XG5cbiAgICByZXR1cm4gaW1wdWxzZTtcbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUV4cGxvc2lvbiA9ICh7XG4gICAgdXVpZCxcbiAgICBwb3NpdGlvbixcbiAgICByYWRpdXMgPSBFWFBMT1NJT05fU0laRVMuU01BTEwsXG4gICAgc3RyZW5ndGggPSBFWFBMT1NJT05fU1RSRU5HVEhTLk1FRElVTVxufSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGV4cGxvc2lvblBvc2l0aW9uID0gZ2V0RXhwbG9zaW9uUG9zaXRpb24odXVpZCwgcG9zaXRpb24pO1xuICAgICAgICBjb25zdCB7IGdob3N0Q29sbGlkZXIsIHRyYW5zZm9ybSB9ID0gY3JlYXRlR2hvc3RDb2xsaWRlcihyYWRpdXMsIGV4cGxvc2lvblBvc2l0aW9uKTtcblxuICAgICAgICB3b3JsZC5hZGRDb2xsaXNpb25PYmplY3QoZ2hvc3RDb2xsaWRlcik7XG5cbiAgICAgICAgZm9yRWFjaEdob3N0Q29sbGlzaW9uKGdob3N0Q29sbGlkZXIsIChvYmplY3QsIG9iamVjdFRyYW5zZm9ybSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luID0gb2JqZWN0VHJhbnNmb3JtLmdldE9yaWdpbigpO1xuICAgICAgICAgICAgb2JqZWN0LmFjdGl2YXRlKHRydWUpO1xuICAgICAgICAgICAgb2JqZWN0LmFwcGx5Q2VudHJhbEltcHVsc2UoZ2V0RXhwbG9zaW9uSW1wdWxzZShvcmlnaW4sIGV4cGxvc2lvblBvc2l0aW9uLCBzdHJlbmd0aCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICB3b3JsZC5nZXREeW5hbWljc1dvcmxkKCkucmVtb3ZlQ29sbGlzaW9uT2JqZWN0KGdob3N0Q29sbGlkZXIpO1xuICAgICAgICBBbW1vLmRlc3Ryb3koZ2hvc3RDb2xsaWRlcik7XG4gICAgICAgIEFtbW8uZGVzdHJveSh0cmFuc2Zvcm0pO1xuICAgIH0gY2F0Y2goZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICB9XG59IiwiaW1wb3J0IHtcbiAgICBMSUJSQVJZX05BTUVcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuaW1wb3J0IHsgYWRkVmVoaWNsZSwgcmVzZXRWZWhpY2xlLCBzZXRWZWhpY2xlUG9zaXRpb24sIHNldFZlaGljbGVRdWF0ZXJuaW9uIH0gZnJvbSAnLi92ZWhpY2xlcyc7XG5pbXBvcnQgeyBhZGRCb3gsIGFkZE1vZGVsLCBzZXRMaW5lYXJWZWxvY2l0eSwgYXBwbHlJbXB1c2UsIGFkZFNwaGVyZSwgc2V0UG9zaXRpb24gfSBmcm9tICcuL2VsZW1lbnRzJztcbmltcG9ydCB7IGNyZWF0ZUV4cGxvc2lvbiB9IGZyb20gJy4vZWZmZWN0cyc7XG5pbXBvcnQgeyBhZGRQbGF5ZXIgfSBmcm9tICcuL3BsYXllcic7XG5cbmltcG9ydCBkaXNwYXRjaGVyIGZyb20gJy4vbGliL2Rpc3BhdGNoZXInO1xuaW1wb3J0IHdvcmxkIGZyb20gJy4vd29ybGQnO1xuaW1wb3J0IHsgUEhZU0lDU19FVkVOVFMgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5cbmNvbnN0IGhhbmRsZUxvYWRFdmVudCA9IG9wdGlvbnMgPT4gQW1tbyA9PiB7XG4gICAgc2VsZi5BbW1vID0gQW1tbztcblxuICAgIG9ubWVzc2FnZSA9ICh7IGRhdGEgfSkgPT4ge1xuICAgICAgICBzd2l0Y2goZGF0YS5ldmVudCkge1xuICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5BREQuQk9YOlxuICAgICAgICAgICAgICAgIGFkZEJveChkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuQURELlNQSEVSRTpcbiAgICAgICAgICAgICAgICBhZGRTcGhlcmUoZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkFERC5WRUhJQ0xFOlxuICAgICAgICAgICAgICAgIGFkZFZlaGljbGUoZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkFERC5NT0RFTDpcbiAgICAgICAgICAgICAgICBhZGRNb2RlbChkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuQURELlBMQVlFUjpcbiAgICAgICAgICAgICAgICBhZGRQbGF5ZXIoZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuU0VULkxJTkVBUl9WRUxPQ0lUWTpcbiAgICAgICAgICAgICAgICBzZXRMaW5lYXJWZWxvY2l0eShkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5TRVQuUE9TSVRJT046XG4gICAgICAgICAgICAgICAgc2V0UG9zaXRpb24oZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLlZFSElDTEUuU0VULlBPU0lUSU9OOlxuICAgICAgICAgICAgICAgIHNldFZlaGljbGVQb3NpdGlvbihkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuVkVISUNMRS5TRVQuUVVBVEVSTklPTjpcbiAgICAgICAgICAgICAgICBzZXRWZWhpY2xlUXVhdGVybmlvbihkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuVkVISUNMRS5SRVNFVDpcbiAgICAgICAgICAgICAgICByZXNldFZlaGljbGUoZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuQVBQTFkuSU1QVUxTRTpcbiAgICAgICAgICAgICAgICBhcHBseUltcHVzZShkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5VUERBVEU6XG4gICAgICAgICAgICAgICAgd29ybGQudXBkYXRlQm9keVN0YXRlKGRhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5FTEVNRU5ULkRJU1BPU0U6XG4gICAgICAgICAgICAgICAgd29ybGQuZGlzcG9zZUJvZHkoZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkVGRkVDVFMuRVhQTE9TSU9OOlxuICAgICAgICAgICAgICAgIGNyZWF0ZUV4cGxvc2lvbihkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuVEVSTUlOQVRFOlxuICAgICAgICAgICAgICAgIHdvcmxkLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgd29ybGQuaW5pdChvcHRpb25zKTtcbiAgICBkaXNwYXRjaGVyLnNlbmRSZWFkeUV2ZW50KCk7XG4gICAgd29ybGQuc2ltdWxhdGUoKVxufTtcblxuY29uc3QgbG9hZEFtbW8gPSAob3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IHNjcmlwdFVybCA9IG9wdGlvbnMuaG9zdCArICcvJyArIChvcHRpb25zLnBhdGggfHwgTElCUkFSWV9OQU1FKTtcbiAgICBpbXBvcnRTY3JpcHRzKHNjcmlwdFVybCk7XG5cbiAgICBBbW1vKCkudGhlbihoYW5kbGVMb2FkRXZlbnQob3B0aW9ucykpO1xufTtcblxub25tZXNzYWdlID0gKHsgZGF0YSB9KSA9PiB7XG4gICAgc3dpdGNoKGRhdGEuZXZlbnQpIHtcbiAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5MT0FELkFNTU86XG4gICAgICAgICAgICBsb2FkQW1tbyhkYXRhKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxufSJdLCJuYW1lcyI6WyJMSUJSQVJZX05BTUUiLCJUWVBFUyIsIkJPWCIsIlNQSEVSRSIsIlZFSElDTEUiLCJNRVNIIiwiUExBWUVSIiwiREVGQVVMVF9WRUhJQ0xFX1NUQVRFIiwidmVoaWNsZVN0ZWVyaW5nIiwiYWNjZWxlcmF0aW9uIiwiYnJlYWtpbmciLCJyaWdodCIsImxlZnQiLCJERUZBVUxUX1JJR0lEQk9EWV9TVEFURSIsInZlbG9jaXR5IiwieCIsInkiLCJ6IiwibW92ZW1lbnQiLCJmb3J3YXJkIiwiYmFja3dhcmRzIiwiZGlyZWN0aW9uIiwiREVGQVVMVF9TQ0FMRSIsIkRFRkFVTFRfTElORUFSX1ZFTE9DSVRZIiwiREVGQVVMVF9JTVBVTFNFIiwiRElTQUJMRV9ERUFDVElWQVRJT04iLCJHUkFWSVRZIiwiRlJPTlRfTEVGVCIsIkZST05UX1JJR0hUIiwiQkFDS19MRUZUIiwiQkFDS19SSUdIVCIsIkRFRkFVTFRfU1RFRVJJTkdfSU5DUkVNRU5UIiwiREVGQVVMVF9TVEVFUklOR19DTEFNUCIsIkRFRkFVTFRfTUFYX0VOR0lORV9GT1JDRSIsIkRFRkFVTFRfTUFYX0JSRUFLSU5HX0ZPUkNFIiwiRVhQTE9TSU9OX1NJWkVTIiwiU01BTEwiLCJNRURJVU0iLCJMQVJHRSIsIk1BU1NJVkUiLCJFWFBMT1NJT05fU1RSRU5HVEhTIiwiVkVSWV9XRUFLIiwiV0VBSyIsIk9LX05PIiwiUEhZU0lDU19FVkVOVFMiLCJESVNQQVRDSCIsIlRFUk1JTkFURSIsIkxPQUQiLCJBTU1PIiwiUkVBRFkiLCJJTklUIiwiVVBEQVRFIiwiQUREIiwiTU9ERUwiLCJFTEVNRU5UIiwiRElTUE9TRSIsIkNPTExJU0lPTiIsIkNSRUFURUQiLCJTRVQiLCJQT1NJVElPTiIsIlFVQVRFUk5JT04iLCJMSU5FQVJfVkVMT0NJVFkiLCJBUFBMWSIsIklNUFVMU0UiLCJSRVNFVCIsIlNQRUVEIiwiRElSRUNUSU9OIiwiRUZGRUNUUyIsIkVYUExPU0lPTiIsIkRpc3BhdGNoZXIiLCJkdCIsInBvc3RNZXNzYWdlIiwiZXZlbnQiLCJ1dWlkIiwicG9zaXRpb24iLCJyb3RhdGlvbiIsInF1YXRlcm5pb24iLCJ3IiwiZXZlbnROYW1lIiwiZXZlbnREYXRhIiwiYXBwbHlNYXRyaXg0VG9WZWN0b3IzIiwibWF0cml4IiwiY3JlYXRlUmlnaWRCb2R5Iiwic2hhcGUiLCJvcHRpb25zIiwibWFzcyIsImZyaWN0aW9uIiwicmVzdGl0dXRpb24iLCJkYW1waW5nIiwibGluZWFyIiwiYW5ndWxhciIsInRyYW5zZm9ybSIsIkFtbW8iLCJidFRyYW5zZm9ybSIsInNldElkZW50aXR5Iiwic2V0T3JpZ2luIiwiYnRWZWN0b3IzIiwic2V0Um90YXRpb24iLCJidFF1YXRlcm5pb24iLCJtb3Rpb25TdGF0ZSIsImJ0RGVmYXVsdE1vdGlvblN0YXRlIiwibG9jYWxJbmVydGlhIiwiY2FsY3VsYXRlTG9jYWxJbmVydGlhIiwicmJJbmZvIiwiYnRSaWdpZEJvZHlDb25zdHJ1Y3Rpb25JbmZvIiwiYm9keSIsImJ0UmlnaWRCb2R5Iiwic2V0RnJpY3Rpb24iLCJzZXRSZXN0aXR1dGlvbiIsInNldERhbXBpbmciLCJzZXRBY3RpdmF0aW9uU3RhdGUiLCJ3b3JsZCIsImFkZFJpZ2lkQm9keSIsImFkZE1vZGVsIiwidmVydGljZXMiLCJtYXRyaWNlcyIsImluZGV4ZXMiLCJzY2FsZSIsImJ0YSIsImJ0YiIsImJ0YyIsInRyaU1lc2giLCJidFRyaWFuZ2xlTWVzaCIsImkiLCJsZW5ndGgiLCJjb21wb25lbnRzIiwiaW5kZXgiLCJBcnJheSIsImZyb20iLCJqIiwiYWkiLCJiaSIsImNpIiwidmEiLCJ2YiIsInZjIiwic2V0VmFsdWUiLCJhZGRUcmlhbmdsZSIsImxvY2FsU2NhbGUiLCJzZXRTY2FsaW5nIiwiZGVzdHJveSIsImNvbGxpc2lvblNoYXBlIiwiYnRCdmhUcmlhbmdsZU1lc2hTaGFwZSIsInJlc291cmNlcyIsInNldEJvZHkiLCJ0eXBlIiwic3RhdGUiLCJhZGRCb3giLCJkYXRhIiwid2lkdGgiLCJoZWlnaHQiLCJnZW9tZXRyeSIsImJ0Qm94U2hhcGUiLCJhZGRTcGhlcmUiLCJyYWRpdXMiLCJidFNwaGVyZVNoYXBlIiwic2V0TGluZWFyVmVsb2NpdHkiLCJnZXRFbGVtZW50IiwiZ2V0TW90aW9uU3RhdGUiLCJsaW5lYXJWZWxvY2l0eSIsInNldFBvc2l0aW9uIiwiZ2V0V29ybGRUcmFuc2Zvcm0iLCJzZXRXb3JsZFRyYW5zZm9ybSIsImFwcGx5SW1wdXNlIiwiaW1wdWxzZSIsImltcHVsc2VWZWN0b3IiLCJhcHBseUNlbnRyYWxJbXB1bHNlIiwiaGFuZGxlRWxlbWVudFVwZGF0ZSIsIm9yaWdpbiIsImdldE9yaWdpbiIsImdldFJvdGF0aW9uIiwiZGlzcGF0Y2hlciIsInNlbmRCb2R5VXBkYXRlIiwiYWRkUGxheWVyIiwiY2Fwc3VsZSIsImJ0Q2Fwc3VsZVNoYXBlIiwic2V0QW5ndWxhckZhY3RvciIsImhhbmRsZVBsYXllclVwZGF0ZSIsImNhbWVyYURpcmVjdGlvbiIsIk1BWF9TUEVFRCIsIndhbGtWZWxvY2l0eSIsImdldExpbmVhclZlbG9jaXR5Iiwic3BlZWQiLCJmb3J3YXJkRGlyIiwiZ2V0QmFzaXMiLCJnZXRSb3ciLCJub3JtYWxpemUiLCJ3YWxrRGlyZWN0aW9uIiwid2Fsa1NwZWVkIiwic2V0WCIsInNldFoiLCJzZXRDZW50ZXJPZk1hc3NUcmFuc2Zvcm0iLCJDbG9jayIsInRpbWVzdGFtcCIsInRpbWUiLCJEYXRlIiwibm93IiwiZGVsdGEiLCJXb3JsZCIsImdyYXZpdHkiLCJjb2xsaXNpb25Db25maWd1cmF0aW9uIiwiYnREZWZhdWx0Q29sbGlzaW9uQ29uZmlndXJhdGlvbiIsImJ0Q29sbGlzaW9uRGlzcGF0Y2hlciIsImJyb2FkcGhhc2UiLCJidERidnRCcm9hZHBoYXNlIiwic29sdmVyIiwiYnRTZXF1ZW50aWFsSW1wdWxzZUNvbnN0cmFpbnRTb2x2ZXIiLCJkeW5hbWljc1dvcmxkIiwiYnREaXNjcmV0ZUR5bmFtaWNzV29ybGQiLCJzZXRHcmF2aXR5IiwiZ2V0QnJvYWRwaGFzZSIsImdldE92ZXJsYXBwaW5nUGFpckNhY2hlIiwic2V0SW50ZXJuYWxHaG9zdFBhaXJDYWxsYmFjayIsImJ0R2hvc3RQYWlyQ2FsbGJhY2siLCJpbml0aWFsaXNlZCIsImhhc0VsZW1lbnQiLCJlbGVtZW50cyIsImRlbGV0ZWQiLCJPYmplY3QiLCJrZXlzIiwiZmlsdGVyIiwiZm9yRWFjaCIsImluY2x1ZGVzIiwiYWN0aW9uIiwiYWRkQWN0aW9uIiwiY29sbGlzaW9uT2JqZWN0IiwiYWRkQ29sbGlzaW9uT2JqZWN0Iiwic3RlcFNpbXVsYXRpb24iLCJjbG9jayIsImdldERlbHRhIiwiZWxlbWVudCIsImhhbmRsZVZlaGljbGVVcGRhdGUiLCJjYWxjdWxhdGVDb2xsaXNpb25zIiwicmVtb3ZlRGVsZXRlZEVsZW1lbnRzIiwic2VuZFBoeXNpY3NVcGRhdGUiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInNpbXVsYXRlIiwiYmluZCIsImFtbW9EaXNwYXRjaGVyIiwiZ2V0RGlzcGF0Y2hlciIsIm51bU1hbmlmb2xkcyIsImdldE51bU1hbmlmb2xkcyIsImNvbnRhY3RNYW5pZm9sZCIsImdldE1hbmlmb2xkQnlJbmRleEludGVybmFsIiwicmIwIiwiY2FzdE9iamVjdCIsImdldEJvZHkwIiwicmIxIiwiZ2V0Qm9keTEiLCJudW1Db250YWN0cyIsImdldE51bUNvbnRhY3RzIiwiY29udGFjdHMiLCJjb250YWN0UG9pbnQiLCJnZXRDb250YWN0UG9pbnQiLCJkaXN0YW5jZSIsImdldERpc3RhbmNlIiwidmVsb2NpdHkwIiwidmVsb2NpdHkxIiwid29ybGRQb3MwIiwiZ2V0X21fcG9zaXRpb25Xb3JsZE9uQSIsIndvcmxkUG9zMSIsImdldF9tX3Bvc2l0aW9uV29ybGRPbkIiLCJsb2NhbFBvczAiLCJnZXRfbV9sb2NhbFBvaW50QSIsImxvY2FsUG9zMSIsImdldF9tX2xvY2FsUG9pbnRCIiwicHVzaCIsIndvcmxkUG9zIiwibG9jYWxQb3MiLCJzZW5kRGlzcGF0Y2hFdmVudCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwic2VuZFRlcm1pbmF0ZUV2ZW50IiwidW5kZWZpbmVkIiwicmVtb3ZlUmlnaWRCb2R5IiwicmVtb3ZlRWxlbWVudCIsInNlbmRFbGVtZW50RGlzcG9zZWQiLCJERUZBVUxUX1JPTExfSU5GTFVFTkNFIiwiREVGQVVMVF9GUklDVElPTiIsIkRFRkFVTFRfTUFTUyIsImFkZFZlaGljbGUiLCJ3aGVlbHMiLCJyb2xsSW5mbHVlbmNlIiwid2hlZWxzT3B0aW9ucyIsInN1c3BlbnNpb25zIiwiYmFjayIsImZyb250IiwiYXhpc1Bvc2l0aW9uIiwiYXhpc1Bvc2l0aW9uQmFjayIsIndoZWVsUmFkaXVzQmFjayIsImhhbGZUcmFjayIsIndoZWVsSGFsZlRyYWNrQmFjayIsImF4aXNIZWlnaHQiLCJ3aGVlbEF4aXNIZWlnaHRCYWNrIiwiYXhpc1Bvc2l0aW9uRnJvbnQiLCJ3aGVlbFJhZGl1c0Zyb250Iiwid2hlZWxIYWxmVHJhY2tGcm9udCIsIndoZWVsQXhpc0hlaWdodEZyb250Iiwic3RpZmZuZXNzIiwiY29tcHJlc3Npb24iLCJyZXN0TGVuZ3RoIiwiY2hhc3NpcyIsInR1bmluZyIsImJ0VmVoaWNsZVR1bmluZyIsInJheUNhc3RlciIsImJ0RGVmYXVsdFZlaGljbGVSYXljYXN0ZXIiLCJnZXREeW5hbWljc1dvcmxkIiwidmVoaWNsZSIsImJ0UmF5Y2FzdFZlaGljbGUiLCJzZXRDb29yZGluYXRlU3lzdGVtIiwid2hlZWxEaXJlY3Rpb25DUzAiLCJ3aGVlbEF4bGVDUyIsImFkZFdoZWVsIiwiaXNGcm9udCIsInBvcyIsIndoZWVsSW5mbyIsInNldF9tX3N1c3BlbnNpb25TdGlmZm5lc3MiLCJzZXRfbV93aGVlbHNEYW1waW5nUmVsYXhhdGlvbiIsInNldF9tX3doZWVsc0RhbXBpbmdDb21wcmVzc2lvbiIsInNldF9tX2ZyaWN0aW9uU2xpcCIsInNldF9tX3JvbGxJbmZsdWVuY2UiLCJzZXRWZWhpY2xlUG9zaXRpb24iLCJnZXRSaWdpZEJvZHkiLCJzZXRWZWhpY2xlUXVhdGVybmlvbiIsInJlc2V0VmVoaWNsZSIsImdldEN1cnJlbnRTcGVlZEttSG91ciIsImJyZWFraW5nRm9yY2UiLCJlbmdpbmVGb3JjZSIsInN0ZWVyaW5nQ2xhbXAiLCJzdGVlcmluZ0luY3JlbWVudCIsIm1heEVuZ2luZUZvcmNlIiwibWF4QnJlYWtpbmdGb3JjZSIsImJyYWtpbmciLCJhcHBseUVuZ2luZUZvcmNlIiwic2V0QnJha2UiLCJzZXRTdGVlcmluZ1ZhbHVlIiwidG0iLCJwIiwicSIsIm4iLCJnZXROdW1XaGVlbHMiLCJ1cGRhdGVXaGVlbFRyYW5zZm9ybSIsImdldFdoZWVsVHJhbnNmb3JtV1MiLCJ3aGVlbFVVSUQiLCJnZXRDaGFzc2lzV29ybGRUcmFuc2Zvcm0iLCJnZXRGb3J3YXJkVmVjdG9yIiwidXBkYXRlQm9keVN0YXRlIiwiY3JlYXRlR2hvc3RDb2xsaWRlciIsImdob3N0Q29sbGlkZXIiLCJidEdob3N0T2JqZWN0Iiwic2V0Q29sbGlzaW9uU2hhcGUiLCJmb3JFYWNoR2hvc3RDb2xsaXNpb24iLCJmb3JFYWNoQ2FsbGJhY2siLCJjb2xsaXNpb25zIiwiZ2V0TnVtT3ZlcmxhcHBpbmdPYmplY3RzIiwib2JqZWN0IiwiZ2V0T3ZlcmxhcHBpbmdPYmplY3QiLCJnZXRFeHBsb3Npb25Qb3NpdGlvbiIsImV4cGxvc2lvblBvc2l0aW9uIiwiZ2V0RXhwbG9zaW9uSW1wdWxzZSIsInN0cmVuZ3RoIiwib3Bfc3ViIiwib3BfbXVsIiwic2V0WSIsImNyZWF0ZUV4cGxvc2lvbiIsIm9iamVjdFRyYW5zZm9ybSIsImFjdGl2YXRlIiwicmVtb3ZlQ29sbGlzaW9uT2JqZWN0IiwiZSIsImNvbnNvbGUiLCJsb2ciLCJoYW5kbGVMb2FkRXZlbnQiLCJzZWxmIiwib25tZXNzYWdlIiwiZGlzcG9zZUJvZHkiLCJ0ZXJtaW5hdGUiLCJpbml0Iiwic2VuZFJlYWR5RXZlbnQiLCJsb2FkQW1tbyIsInNjcmlwdFVybCIsImhvc3QiLCJwYXRoIiwiaW1wb3J0U2NyaXB0cyIsInRoZW4iXSwibWFwcGluZ3MiOiI7OztJQUFPLElBQU1BLFlBQVksR0FBRyxTQUFyQjtJQUVBLElBQU1DLEtBQUssR0FBRztJQUNqQkMsRUFBQUEsR0FBRyxFQUFFLEtBRFk7SUFFakJDLEVBQUFBLE1BQU0sRUFBRSxRQUZTO0lBR2pCQyxFQUFBQSxPQUFPLEVBQUUsU0FIUTtJQUlqQkMsRUFBQUEsSUFBSSxFQUFFLE1BSlc7SUFLakJDLEVBQUFBLE1BQU0sRUFBRTtJQUxTLENBQWQ7SUFlQSxJQUFNQyxxQkFBcUIsR0FBRztJQUNqQ0MsRUFBQUEsZUFBZSxFQUFFLENBRGdCO0lBRWpDQyxFQUFBQSxZQUFZLEVBQUUsS0FGbUI7SUFHakNDLEVBQUFBLFFBQVEsRUFBRSxLQUh1QjtJQUlqQ0MsRUFBQUEsS0FBSyxFQUFFLEtBSjBCO0lBS2pDQyxFQUFBQSxJQUFJLEVBQUU7SUFMMkIsQ0FBOUI7SUFRQSxJQUFNQyx1QkFBdUIsR0FBRztJQUNuQ0MsRUFBQUEsUUFBUSxFQUFFO0lBQUVDLElBQUFBLENBQUMsRUFBRSxDQUFMO0lBQVFDLElBQUFBLENBQUMsRUFBRSxDQUFYO0lBQWNDLElBQUFBLENBQUMsRUFBRTtJQUFqQixHQUR5QjtJQUVuQ0MsRUFBQUEsUUFBUSxFQUFFO0lBQ05DLElBQUFBLE9BQU8sRUFBRSxLQURIO0lBRU5DLElBQUFBLFNBQVMsRUFBRSxLQUZMO0lBR05SLElBQUFBLElBQUksRUFBRSxLQUhBO0lBSU5ELElBQUFBLEtBQUssRUFB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', false);
|
|
57551
|
+
}var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIHZhciBMSUJSQVJZX05BTUUgPSAnYW1tby5qcyc7CiAgICB2YXIgVFlQRVMgPSB7CiAgICAgIEJPWDogJ0JPWCcsCiAgICAgIFNQSEVSRTogJ1NQSEVSRScsCiAgICAgIFZFSElDTEU6ICdWRUhJQ0xFJywKICAgICAgTUVTSDogJ01FU0gnLAogICAgICBQTEFZRVI6ICdQTEFZRVInCiAgICB9OwogICAgdmFyIERFRkFVTFRfVkVISUNMRV9TVEFURSA9IHsKICAgICAgdmVoaWNsZVN0ZWVyaW5nOiAwLAogICAgICBhY2NlbGVyYXRpb246IGZhbHNlLAogICAgICBicmVha2luZzogZmFsc2UsCiAgICAgIHJpZ2h0OiBmYWxzZSwKICAgICAgbGVmdDogZmFsc2UKICAgIH07CiAgICB2YXIgREVGQVVMVF9SSUdJREJPRFlfU1RBVEUgPSB7CiAgICAgIHZlbG9jaXR5OiB7CiAgICAgICAgeDogMCwKICAgICAgICB5OiAwLAogICAgICAgIHo6IDAKICAgICAgfSwKICAgICAgbW92ZW1lbnQ6IHsKICAgICAgICBmb3J3YXJkOiBmYWxzZSwKICAgICAgICBiYWNrd2FyZHM6IGZhbHNlLAogICAgICAgIGxlZnQ6IGZhbHNlLAogICAgICAgIHJpZ2h0OiBmYWxzZQogICAgICB9LAogICAgICBkaXJlY3Rpb246IHsKICAgICAgICB4OiAwLAogICAgICAgIHk6IDAsCiAgICAgICAgejogMAogICAgICB9CiAgICB9OwogICAgdmFyIERFRkFVTFRfU0NBTEUgPSB7CiAgICAgIHg6IDEsCiAgICAgIHk6IDEsCiAgICAgIHo6IDEKICAgIH07CiAgICB2YXIgREVGQVVMVF9MSU5FQVJfVkVMT0NJVFkgPSB7CiAgICAgIHg6IDAsCiAgICAgIHk6IDAsCiAgICAgIHo6IDAKICAgIH07CiAgICB2YXIgREVGQVVMVF9JTVBVTFNFID0gewogICAgICB4OiAwLAogICAgICB5OiAwLAogICAgICB6OiAwCiAgICB9OwogICAgdmFyIERJU0FCTEVfREVBQ1RJVkFUSU9OID0gNDsKICAgIHZhciBHUkFWSVRZID0gewogICAgICB4OiAwLAogICAgICB5OiAtMTAsCiAgICAgIHo6IDAKICAgIH07CiAgICB2YXIgRlJPTlRfTEVGVCA9IDA7CiAgICB2YXIgRlJPTlRfUklHSFQgPSAxOwogICAgdmFyIEJBQ0tfTEVGVCA9IDI7CiAgICB2YXIgQkFDS19SSUdIVCA9IDM7CiAgICB2YXIgREVGQVVMVF9TVEVFUklOR19JTkNSRU1FTlQgPSAuMDQ7CiAgICB2YXIgREVGQVVMVF9TVEVFUklOR19DTEFNUCA9IC41OwogICAgdmFyIERFRkFVTFRfTUFYX0VOR0lORV9GT1JDRSA9IDIwMDA7CiAgICB2YXIgREVGQVVMVF9NQVhfQlJFQUtJTkdfRk9SQ0UgPSAxMDA7CiAgICB2YXIgRVhQTE9TSU9OX1NJWkVTID0gewogICAgICBTTUFMTDogNCwKICAgICAgTUVESVVNOiA2LAogICAgICBMQVJHRTogOCwKICAgICAgTUFTU0lWRTogMTIKICAgIH07CiAgICB2YXIgRVhQTE9TSU9OX1NUUkVOR1RIUyA9IHsKICAgICAgVkVSWV9XRUFLOiAyLAogICAgICBXRUFLOiA0LAogICAgICBNRURJVU06IDgsCiAgICAgIExBUkdFOiAxNiwKICAgICAgTUFTU0lWRTogMzIsCiAgICAgIE9LX05POiA2NAogICAgfTsKCiAgICB2YXIgUEhZU0lDU19FVkVOVFMgPSB7CiAgICAgIERJU1BBVENIOiAncGh5c2ljczpkaXNwYXRjaCcsCiAgICAgIFRFUk1JTkFURTogJ3BoeXNpY3M6dGVybWluYXRlJywKICAgICAgTE9BRDogewogICAgICAgIEFNTU86ICdwaHlzaWNzOmxvYWQ6YW1tbycKICAgICAgfSwKICAgICAgUkVBRFk6ICdwaHlzaWNzOnJlYWR5JywKICAgICAgSU5JVDogJ3BoeXNpY3M6aW5pdCcsCiAgICAgIFVQREFURTogJ3BoeXNpY3M6dXBkYXRlJywKICAgICAgQUREOiB7CiAgICAgICAgQk9YOiAncGh5c2ljczphZGQ6Ym94JywKICAgICAgICBWRUhJQ0xFOiAncGh5c2ljczphZGQ6dmVoaWNsZScsCiAgICAgICAgTU9ERUw6ICdwaHlzaWNzOmFkZDptb2RlbCcsCiAgICAgICAgUExBWUVSOiAncGh5c2ljczphZGQ6cGxheWVyJywKICAgICAgICBTUEhFUkU6ICdwaHlzaWNzOmFkZDpzcGhlcmUnCiAgICAgIH0sCiAgICAgIEVMRU1FTlQ6IHsKICAgICAgICBESVNQT1NFOiAncGh5c2ljczplbGVtZW50OmRpc3Bvc2UnLAogICAgICAgIENPTExJU0lPTjogJ3BoeXNpY3M6ZWxlbWVudDpjb2xsaXNpb24nLAogICAgICAgIFVQREFURTogJ3BoeXNpY3M6ZWxlbWVudDp1cGRhdGUnLAogICAgICAgIENSRUFURUQ6ICdwaHlzaWNzOmVsZW1lbnQ6Y3JlYXRlZCcsCiAgICAgICAgU0VUOiB7CiAgICAgICAgICBQT1NJVElPTjogJ3BoeXNpY3M6ZWxlbWVudDpzZXQ6cG9zaXRpb24nLAogICAgICAgICAgUVVBVEVSTklPTjogJ3BoeXNpY3M6ZWxlbWVudDpzZXQ6cXVhdGVybmlvbicsCiAgICAgICAgICBMSU5FQVJfVkVMT0NJVFk6ICdwaHlzaWNzOmVsZW1lbnQ6c2V0OmxpbmVhcl92ZWxvY2l0eScKICAgICAgICB9LAogICAgICAgIEFQUExZOiB7CiAgICAgICAgICBJTVBVTFNFOiAncGh5c2ljczplbGVtZW50OmFwcGx5OmltcHVsc2UnCiAgICAgICAgfQogICAgICB9LAogICAgICBWRUhJQ0xFOiB7CiAgICAgICAgU0VUOiB7CiAgICAgICAgICBQT1NJVElPTjogJ3BoeXNpY3M6dmVoaWNsZTpzZXQ6cG9zaXRpb24nLAogICAgICAgICAgUVVBVEVSTklPTjogJ3BoeXNpY3M6dmVoaWNsZTpzZXQ6cXVhdGVybmlvbicKICAgICAgICB9LAogICAgICAgIFJFU0VUOiAncGh5c2ljczp2ZWhpY2xlOnJlc2V0JywKICAgICAgICBTUEVFRDogJ3BoeXNpY3M6dmVoaWNsZTpzcGVlZCcsCiAgICAgICAgRElSRUNUSU9OOiAncGh5c2ljczp2ZWhpY2xlOmRpcmVjdGlvbicKICAgICAgfSwKICAgICAgRUZGRUNUUzogewogICAgICAgIEVYUExPU0lPTjogJ3BoeXNpY3M6ZWZmZWN0czpleHBsb3Npb24nCiAgICAgIH0KICAgIH07CgogICAgZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7CiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsKCiAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7CiAgICAgICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7CiAgICAgICAgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7CiAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsKICAgICAgICB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsKICAgICAgfQoKICAgICAgcmV0dXJuIGtleXM7CiAgICB9CgogICAgZnVuY3Rpb24gX29iamVjdFNwcmVhZDIodGFyZ2V0KSB7CiAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHNvdXJjZSA9IG51bGwgIT0gYXJndW1lbnRzW2ldID8gYXJndW1lbnRzW2ldIDoge307CiAgICAgICAgaSAlIDIgPyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CiAgICAgICAgICBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsKICAgICAgICB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgewogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7CiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIHJldHVybiB0YXJnZXQ7CiAgICB9CgogICAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgewogICAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpOwogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsKICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7CiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOwogICAgICAgIGlmICgidmFsdWUiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOwogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsKICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsKICAgICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7CiAgICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCAicHJvdG90eXBlIiwgewogICAgICAgIHdyaXRhYmxlOiBmYWxzZQogICAgICB9KTsKICAgICAgcmV0dXJuIENvbnN0cnVjdG9yOwogICAgfQoKICAgIGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsKICAgICAgaWYgKGtleSBpbiBvYmopIHsKICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsKICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICB3cml0YWJsZTogdHJ1ZQogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIG9ialtrZXldID0gdmFsdWU7CiAgICAgIH0KCiAgICAgIHJldHVybiBvYmo7CiAgICB9CgogICAgdmFyIERpc3BhdGNoZXIgPSBmdW5jdGlvbiBEaXNwYXRjaGVyKCkgewogICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRGlzcGF0Y2hlcik7CgogICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInNlbmRQaHlzaWNzVXBkYXRlIiwgZnVuY3Rpb24gKGR0KSB7CiAgICAgICAgcmV0dXJuIHBvc3RNZXNzYWdlKHsKICAgICAgICAgIGV2ZW50OiBQSFlTSUNTX0VWRU5UUy5VUERBVEUsCiAgICAgICAgICBkdDogZHQKICAgICAgICB9KTsKICAgICAgfSk7CgogICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInNlbmRSZWFkeUV2ZW50IiwgZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiBwb3N0TWVzc2FnZSh7CiAgICAgICAgICBldmVudDogUEhZU0lDU19FVkVOVFMuUkVBRFkKICAgICAgICB9KTsKICAgICAgfSk7CgogICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInNlbmRUZXJtaW5hdGVFdmVudCIsIGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gcG9zdE1lc3NhZ2UoewogICAgICAgICAgZXZlbnQ6IFBIWVNJQ1NfRVZFTlRTLlRFUk1JTkFURQogICAgICAgIH0pOwogICAgICB9KTsKCiAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAic2VuZEJvZHlVcGRhdGUiLCBmdW5jdGlvbiAodXVpZCwgcG9zaXRpb24sIHJvdGF0aW9uLCBkdCkgewogICAgICAgIHJldHVybiBwb3N0TWVzc2FnZSh7CiAgICAgICAgICBldmVudDogUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5VUERBVEUsCiAgICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgICAgcG9zaXRpb246IHsKICAgICAgICAgICAgeDogcG9zaXRpb24ueCgpLAogICAgICAgICAgICB5OiBwb3NpdGlvbi55KCksCiAgICAgICAgICAgIHo6IHBvc2l0aW9uLnooKQogICAgICAgICAgfSwKICAgICAgICAgIHF1YXRlcm5pb246IHsKICAgICAgICAgICAgeDogcm90YXRpb24ueCgpLAogICAgICAgICAgICB5OiByb3RhdGlvbi55KCksCiAgICAgICAgICAgIHo6IHJvdGF0aW9uLnooKSwKICAgICAgICAgICAgdzogcm90YXRpb24udygpCiAgICAgICAgICB9LAogICAgICAgICAgZHQ6IGR0CiAgICAgICAgfSk7CiAgICAgIH0pOwoKICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJzZW5kRGlzcGF0Y2hFdmVudCIsIGZ1bmN0aW9uICh1dWlkLCBldmVudE5hbWUsIGV2ZW50RGF0YSkgewogICAgICAgIHJldHVybiBwb3N0TWVzc2FnZSh7CiAgICAgICAgICBldmVudDogUEhZU0lDU19FVkVOVFMuRElTUEFUQ0gsCiAgICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgICAgZXZlbnROYW1lOiBldmVudE5hbWUsCiAgICAgICAgICBldmVudERhdGE6IGV2ZW50RGF0YQogICAgICAgIH0pOwogICAgICB9KTsKICAgIH07CiAgICB2YXIgZGlzcGF0Y2hlciQxID0gbmV3IERpc3BhdGNoZXIoKTsKCiAgICB2YXIgYXBwbHlNYXRyaXg0VG9WZWN0b3IzID0gZnVuY3Rpb24gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKF9yZWYpIHsKICAgICAgdmFyIF9yZWYkeCA9IF9yZWYueCwKICAgICAgICAgIHggPSBfcmVmJHggPT09IHZvaWQgMCA/IDAgOiBfcmVmJHgsCiAgICAgICAgICBfcmVmJHkgPSBfcmVmLnksCiAgICAgICAgICB5ID0gX3JlZiR5ID09PSB2b2lkIDAgPyAwIDogX3JlZiR5LAogICAgICAgICAgX3JlZiR6ID0gX3JlZi56LAogICAgICAgICAgeiA9IF9yZWYkeiA9PT0gdm9pZCAwID8gMCA6IF9yZWYkejsKICAgICAgdmFyIG1hdHJpeCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogW107CiAgICAgIHZhciB3ID0gMSAvIChtYXRyaXhbM10gKiB4ICsgbWF0cml4WzddICogeSArIG1hdHJpeFsxMV0gKiB6ICsgbWF0cml4WzE1XSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgeDogKG1hdHJpeFswXSAqIHggKyBtYXRyaXhbNF0gKiB5ICsgbWF0cml4WzhdICogeiArIG1hdHJpeFsxMl0pICogdywKICAgICAgICB5OiAobWF0cml4WzFdICogeCArIG1hdHJpeFs1XSAqIHkgKyBtYXRyaXhbOV0gKiB6ICsgbWF0cml4WzEzXSkgKiB3LAogICAgICAgIHo6IChtYXRyaXhbMl0gKiB4ICsgbWF0cml4WzZdICogeSArIG1hdHJpeFsxMF0gKiB6ICsgbWF0cml4WzE0XSkgKiB3CiAgICAgIH07CiAgICB9OwoKICAgIHZhciBjcmVhdGVSaWdpZEJvZHkgPSBmdW5jdGlvbiBjcmVhdGVSaWdpZEJvZHkoc2hhcGUsIG9wdGlvbnMpIHsKICAgICAgdmFyIHV1aWQgPSBvcHRpb25zLnV1aWQsCiAgICAgICAgICBwb3NpdGlvbiA9IG9wdGlvbnMucG9zaXRpb24sCiAgICAgICAgICBxdWF0ZXJuaW9uID0gb3B0aW9ucy5xdWF0ZXJuaW9uLAogICAgICAgICAgbWFzcyA9IG9wdGlvbnMubWFzcywKICAgICAgICAgIGZyaWN0aW9uID0gb3B0aW9ucy5mcmljdGlvbiwKICAgICAgICAgIF9vcHRpb25zJHJlc3RpdHV0aW9uID0gb3B0aW9ucy5yZXN0aXR1dGlvbiwKICAgICAgICAgIHJlc3RpdHV0aW9uID0gX29wdGlvbnMkcmVzdGl0dXRpb24gPT09IHZvaWQgMCA/IC45IDogX29wdGlvbnMkcmVzdGl0dXRpb24sCiAgICAgICAgICBfb3B0aW9ucyRkYW1waW5nID0gb3B0aW9ucy5kYW1waW5nLAogICAgICAgICAgZGFtcGluZyA9IF9vcHRpb25zJGRhbXBpbmcgPT09IHZvaWQgMCA/IHsKICAgICAgICBsaW5lYXI6IDAuMiwKICAgICAgICBhbmd1bGFyOiAwLjIKICAgICAgfSA6IF9vcHRpb25zJGRhbXBpbmc7CiAgICAgIHZhciB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpOwogICAgICB0cmFuc2Zvcm0uc2V0SWRlbnRpdHkoKTsKICAgICAgdHJhbnNmb3JtLnNldE9yaWdpbihuZXcgQW1tby5idFZlY3RvcjMocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueikpOwogICAgICB0cmFuc2Zvcm0uc2V0Um90YXRpb24obmV3IEFtbW8uYnRRdWF0ZXJuaW9uKHF1YXRlcm5pb24ueCwgcXVhdGVybmlvbi55LCBxdWF0ZXJuaW9uLnosIHF1YXRlcm5pb24udykpOwogICAgICB2YXIgbW90aW9uU3RhdGUgPSBuZXcgQW1tby5idERlZmF1bHRNb3Rpb25TdGF0ZSh0cmFuc2Zvcm0pOwogICAgICB2YXIgbG9jYWxJbmVydGlhID0gbmV3IEFtbW8uYnRWZWN0b3IzKDAsIDAsIDApOwogICAgICBzaGFwZS5jYWxjdWxhdGVMb2NhbEluZXJ0aWEobWFzcywgbG9jYWxJbmVydGlhKTsKICAgICAgdmFyIHJiSW5mbyA9IG5ldyBBbW1vLmJ0UmlnaWRCb2R5Q29uc3RydWN0aW9uSW5mbyhtYXNzLCBtb3Rpb25TdGF0ZSwgc2hhcGUsIGxvY2FsSW5lcnRpYSk7CiAgICAgIHZhciBib2R5ID0gbmV3IEFtbW8uYnRSaWdpZEJvZHkocmJJbmZvKTsKCiAgICAgIGlmIChtYXNzID4gMCkgewogICAgICAgIGJvZHkuc2V0RnJpY3Rpb24oZnJpY3Rpb24pOwogICAgICAgIGJvZHkuc2V0UmVzdGl0dXRpb24ocmVzdGl0dXRpb24pOwogICAgICAgIGJvZHkuc2V0RGFtcGluZyhkYW1waW5nLmxpbmVhciwgZGFtcGluZy5hbmd1bGFyKTsKICAgICAgICBib2R5LnNldEFjdGl2YXRpb25TdGF0ZShESVNBQkxFX0RFQUNUSVZBVElPTik7CiAgICAgIH0gLy8gc3RvcmluZyB1dWlkIGZvciBmdXR1cmUgcmVmZXJlbmNlCgoKICAgICAgYm9keS51dWlkID0gdXVpZDsKICAgICAgd29ybGQuYWRkUmlnaWRCb2R5KGJvZHkpOwogICAgICByZXR1cm4gYm9keTsKICAgIH07CiAgICB2YXIgYWRkTW9kZWwgPSBmdW5jdGlvbiBhZGRNb2RlbChvcHRpb25zKSB7CiAgICAgIHZhciB1dWlkID0gb3B0aW9ucy51dWlkLAogICAgICAgICAgdmVydGljZXMgPSBvcHRpb25zLnZlcnRpY2VzLAogICAgICAgICAgbWF0cmljZXMgPSBvcHRpb25zLm1hdHJpY2VzLAogICAgICAgICAgaW5kZXhlcyA9IG9wdGlvbnMuaW5kZXhlcywKICAgICAgICAgIHBvc2l0aW9uID0gb3B0aW9ucy5wb3NpdGlvbiwKICAgICAgICAgIHF1YXRlcm5pb24gPSBvcHRpb25zLnF1YXRlcm5pb24sCiAgICAgICAgICBfb3B0aW9ucyRtYXNzID0gb3B0aW9ucy5tYXNzLAogICAgICAgICAgbWFzcyA9IF9vcHRpb25zJG1hc3MgPT09IHZvaWQgMCA/IDAgOiBfb3B0aW9ucyRtYXNzLAogICAgICAgICAgX29wdGlvbnMkZnJpY3Rpb24gPSBvcHRpb25zLmZyaWN0aW9uLAogICAgICAgICAgZnJpY3Rpb24gPSBfb3B0aW9ucyRmcmljdGlvbiA9PT0gdm9pZCAwID8gMiA6IF9vcHRpb25zJGZyaWN0aW9uOwogICAgICB2YXIgc2NhbGUgPSBERUZBVUxUX1NDQUxFOwogICAgICB2YXIgYnRhID0gbmV3IEFtbW8uYnRWZWN0b3IzKCk7CiAgICAgIHZhciBidGIgPSBuZXcgQW1tby5idFZlY3RvcjMoKTsKICAgICAgdmFyIGJ0YyA9IG5ldyBBbW1vLmJ0VmVjdG9yMygpOwogICAgICB2YXIgdHJpTWVzaCA9IG5ldyBBbW1vLmJ0VHJpYW5nbGVNZXNoKHRydWUsIGZhbHNlKTsKCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmVydGljZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgY29tcG9uZW50cyA9IHZlcnRpY2VzW2ldOwogICAgICAgIHZhciBpbmRleCA9IGluZGV4ZXNbaV0gPyBpbmRleGVzW2ldIDogbnVsbDsKICAgICAgICB2YXIgbWF0cml4ID0gQXJyYXkuZnJvbShtYXRyaWNlc1tpXSk7CgogICAgICAgIGlmIChpbmRleCkgewogICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpbmRleC5sZW5ndGg7IGogKz0gMykgewogICAgICAgICAgICB2YXIgYWkgPSBpbmRleFtqXSAqIDM7CiAgICAgICAgICAgIHZhciBiaSA9IGluZGV4W2ogKyAxXSAqIDM7CiAgICAgICAgICAgIHZhciBjaSA9IGluZGV4W2ogKyAyXSAqIDM7CiAgICAgICAgICAgIHZhciB2YSA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7CiAgICAgICAgICAgICAgeDogY29tcG9uZW50c1thaV0sCiAgICAgICAgICAgICAgeTogY29tcG9uZW50c1thaSArIDFdLAogICAgICAgICAgICAgIHo6IGNvbXBvbmVudHNbYWkgKyAyXQogICAgICAgICAgICB9LCBtYXRyaXgpOwogICAgICAgICAgICB2YXIgdmIgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoewogICAgICAgICAgICAgIHg6IGNvbXBvbmVudHNbYmldLAogICAgICAgICAgICAgIHk6IGNvbXBvbmVudHNbYmkgKyAxXSwKICAgICAgICAgICAgICB6OiBjb21wb25lbnRzW2JpICsgMl0KICAgICAgICAgICAgfSwgbWF0cml4KTsKICAgICAgICAgICAgdmFyIHZjID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsKICAgICAgICAgICAgICB4OiBjb21wb25lbnRzW2NpXSwKICAgICAgICAgICAgICB5OiBjb21wb25lbnRzW2NpICsgMV0sCiAgICAgICAgICAgICAgejogY29tcG9uZW50c1tjaSArIDJdCiAgICAgICAgICAgIH0sIG1hdHJpeCk7CiAgICAgICAgICAgIGJ0YS5zZXRWYWx1ZSh2YS54LCB2YS55LCB2YS56KTsKICAgICAgICAgICAgYnRiLnNldFZhbHVlKHZiLngsIHZiLnksIHZiLnopOwogICAgICAgICAgICBidGMuc2V0VmFsdWUodmMueCwgdmMueSwgdmMueik7CiAgICAgICAgICAgIHRyaU1lc2guYWRkVHJpYW5nbGUoYnRhLCBidGIsIGJ0YywgZmFsc2UpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBmb3IgKHZhciBfaiA9IDA7IF9qIDwgY29tcG9uZW50cy5sZW5ndGg7IF9qICs9IDkpIHsKICAgICAgICAgICAgdmFyIF92YSA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7CiAgICAgICAgICAgICAgeDogY29tcG9uZW50c1tfaiArIDBdLAogICAgICAgICAgICAgIHk6IGNvbXBvbmVudHNbX2ogKyAxXSwKICAgICAgICAgICAgICB6OiBjb21wb25lbnRzW19qICsgMl0KICAgICAgICAgICAgfSwgbWF0cml4KTsKCiAgICAgICAgICAgIHZhciBfdmIgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoewogICAgICAgICAgICAgIHg6IGNvbXBvbmVudHNbX2ogKyAzXSwKICAgICAgICAgICAgICB5OiBjb21wb25lbnRzW19qICsgNF0sCiAgICAgICAgICAgICAgejogY29tcG9uZW50c1tfaiArIDVdCiAgICAgICAgICAgIH0sIG1hdHJpeCk7CgogICAgICAgICAgICB2YXIgX3ZjID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsKICAgICAgICAgICAgICB4OiBjb21wb25lbnRzW19qICsgNl0sCiAgICAgICAgICAgICAgeTogY29tcG9uZW50c1tfaiArIDddLAogICAgICAgICAgICAgIHo6IGNvbXBvbmVudHNbX2ogKyA4XQogICAgICAgICAgICB9LCBtYXRyaXgpOwoKICAgICAgICAgICAgYnRhLnNldFZhbHVlKF92YS54LCBfdmEueSwgX3ZhLnopOwogICAgICAgICAgICBidGIuc2V0VmFsdWUoX3ZiLngsIF92Yi55LCBfdmIueik7CiAgICAgICAgICAgIGJ0Yy5zZXRWYWx1ZShfdmMueCwgX3ZjLnksIF92Yy56KTsKICAgICAgICAgICAgdHJpTWVzaC5hZGRUcmlhbmdsZShidGEsIGJ0YiwgYnRjLCBmYWxzZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICB2YXIgbG9jYWxTY2FsZSA9IG5ldyBBbW1vLmJ0VmVjdG9yMyhzY2FsZS54LCBzY2FsZS55LCBzY2FsZS56KTsKICAgICAgdHJpTWVzaC5zZXRTY2FsaW5nKGxvY2FsU2NhbGUpOwogICAgICBBbW1vLmRlc3Ryb3kobG9jYWxTY2FsZSk7CiAgICAgIHZhciBjb2xsaXNpb25TaGFwZSA9IG5ldyBBbW1vLmJ0QnZoVHJpYW5nbGVNZXNoU2hhcGUodHJpTWVzaCwgdHJ1ZSwgdHJ1ZSk7CiAgICAgIGNvbGxpc2lvblNoYXBlLnJlc291cmNlcyA9IFt0cmlNZXNoXTsKICAgICAgQW1tby5kZXN0cm95KGJ0YSk7CiAgICAgIEFtbW8uZGVzdHJveShidGIpOwogICAgICBBbW1vLmRlc3Ryb3koYnRjKTsKICAgICAgdmFyIGJvZHkgPSBjcmVhdGVSaWdpZEJvZHkoY29sbGlzaW9uU2hhcGUsIHsKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbiwKICAgICAgICBxdWF0ZXJuaW9uOiBxdWF0ZXJuaW9uLAogICAgICAgIG1hc3M6IG1hc3MsCiAgICAgICAgZnJpY3Rpb246IGZyaWN0aW9uCiAgICAgIH0pOwogICAgICB3b3JsZC5zZXRCb2R5KHsKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIGJvZHk6IGJvZHksCiAgICAgICAgdHlwZTogVFlQRVMuTUVTSCwKICAgICAgICBzdGF0ZTogREVGQVVMVF9SSUdJREJPRFlfU1RBVEUKICAgICAgfSk7CiAgICB9OwogICAgdmFyIGFkZEJveCA9IGZ1bmN0aW9uIGFkZEJveChkYXRhKSB7CiAgICAgIHZhciB1dWlkID0gZGF0YS51dWlkLAogICAgICAgICAgd2lkdGggPSBkYXRhLndpZHRoLAogICAgICAgICAgbGVuZ3RoID0gZGF0YS5sZW5ndGgsCiAgICAgICAgICBoZWlnaHQgPSBkYXRhLmhlaWdodCwKICAgICAgICAgIHBvc2l0aW9uID0gZGF0YS5wb3NpdGlvbiwKICAgICAgICAgIHF1YXRlcm5pb24gPSBkYXRhLnF1YXRlcm5pb24sCiAgICAgICAgICBfZGF0YSRtYXNzID0gZGF0YS5tYXNzLAogICAgICAgICAgbWFzcyA9IF9kYXRhJG1hc3MgPT09IHZvaWQgMCA/IDAgOiBfZGF0YSRtYXNzLAogICAgICAgICAgX2RhdGEkZnJpY3Rpb24gPSBkYXRhLmZyaWN0aW9uLAogICAgICAgICAgZnJpY3Rpb24gPSBfZGF0YSRmcmljdGlvbiA9PT0gdm9pZCAwID8gMiA6IF9kYXRhJGZyaWN0aW9uOwogICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgQW1tby5idEJveFNoYXBlKG5ldyBBbW1vLmJ0VmVjdG9yMyh3aWR0aCAqIDAuNSwgaGVpZ2h0ICogMC41LCBsZW5ndGggKiAwLjUpKTsKICAgICAgdmFyIGJvZHkgPSBjcmVhdGVSaWdpZEJvZHkoZ2VvbWV0cnksIHsKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbiwKICAgICAgICBxdWF0ZXJuaW9uOiBxdWF0ZXJuaW9uLAogICAgICAgIG1hc3M6IG1hc3MsCiAgICAgICAgZnJpY3Rpb246IGZyaWN0aW9uCiAgICAgIH0pOwogICAgICB3b3JsZC5zZXRCb2R5KHsKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIGJvZHk6IGJvZHksCiAgICAgICAgdHlwZTogVFlQRVMuQk9YLAogICAgICAgIHN0YXRlOiBERUZBVUxUX1JJR0lEQk9EWV9TVEFURQogICAgICB9KTsKICAgIH07CiAgICB2YXIgYWRkU3BoZXJlID0gZnVuY3Rpb24gYWRkU3BoZXJlKGRhdGEpIHsKICAgICAgdmFyIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICByYWRpdXMgPSBkYXRhLnJhZGl1cywKICAgICAgICAgIHBvc2l0aW9uID0gZGF0YS5wb3NpdGlvbiwKICAgICAgICAgIHF1YXRlcm5pb24gPSBkYXRhLnF1YXRlcm5pb24sCiAgICAgICAgICBfZGF0YSRtYXNzMiA9IGRhdGEubWFzcywKICAgICAgICAgIG1hc3MgPSBfZGF0YSRtYXNzMiA9PT0gdm9pZCAwID8gMCA6IF9kYXRhJG1hc3MyLAogICAgICAgICAgX2RhdGEkZnJpY3Rpb24yID0gZGF0YS5mcmljdGlvbiwKICAgICAgICAgIGZyaWN0aW9uID0gX2RhdGEkZnJpY3Rpb24yID09PSB2b2lkIDAgPyAyIDogX2RhdGEkZnJpY3Rpb24yOwogICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgQW1tby5idFNwaGVyZVNoYXBlKHJhZGl1cyk7CiAgICAgIHZhciBib2R5ID0gY3JlYXRlUmlnaWRCb2R5KGdlb21ldHJ5LCB7CiAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICBwb3NpdGlvbjogcG9zaXRpb24sCiAgICAgICAgcXVhdGVybmlvbjogcXVhdGVybmlvbiwKICAgICAgICBtYXNzOiBtYXNzLAogICAgICAgIGZyaWN0aW9uOiBmcmljdGlvbgogICAgICB9KTsKICAgICAgd29ybGQuc2V0Qm9keSh7CiAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICBib2R5OiBib2R5LAogICAgICAgIHR5cGU6IFRZUEVTLlNQSEVSRSwKICAgICAgICBzdGF0ZTogREVGQVVMVF9SSUdJREJPRFlfU1RBVEUKICAgICAgfSk7CiAgICB9OwogICAgdmFyIHNldExpbmVhclZlbG9jaXR5ID0gZnVuY3Rpb24gc2V0TGluZWFyVmVsb2NpdHkoZGF0YSkgewogICAgICB2YXIgdXVpZCA9IGRhdGEudXVpZCwKICAgICAgICAgIF9kYXRhJHZlbG9jaXR5ID0gZGF0YS52ZWxvY2l0eSwKICAgICAgICAgIHZlbG9jaXR5ID0gX2RhdGEkdmVsb2NpdHkgPT09IHZvaWQgMCA/IERFRkFVTFRfTElORUFSX1ZFTE9DSVRZIDogX2RhdGEkdmVsb2NpdHk7CgogICAgICB2YXIgX3dvcmxkJGdldEVsZW1lbnQgPSB3b3JsZC5nZXRFbGVtZW50KHV1aWQpLAogICAgICAgICAgYm9keSA9IF93b3JsZCRnZXRFbGVtZW50LmJvZHk7CgogICAgICB2YXIgbW90aW9uU3RhdGUgPSBib2R5LmdldE1vdGlvblN0YXRlKCk7CgogICAgICBpZiAobW90aW9uU3RhdGUpIHsKICAgICAgICB2YXIgbGluZWFyVmVsb2NpdHkgPSBuZXcgQW1tby5idFZlY3RvcjModmVsb2NpdHkueCwgdmVsb2NpdHkueSwgdmVsb2NpdHkueik7CiAgICAgICAgYm9keS5zZXRMaW5lYXJWZWxvY2l0eShsaW5lYXJWZWxvY2l0eSk7CiAgICAgICAgQW1tby5kZXN0cm95KGxpbmVhclZlbG9jaXR5KTsKICAgICAgfQogICAgfTsKICAgIHZhciBzZXRQb3NpdGlvbiA9IGZ1bmN0aW9uIHNldFBvc2l0aW9uKGRhdGEpIHsKICAgICAgdmFyIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICBwb3NpdGlvbiA9IGRhdGEucG9zaXRpb247CgogICAgICB2YXIgX3dvcmxkJGdldEVsZW1lbnQyID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKSwKICAgICAgICAgIGJvZHkgPSBfd29ybGQkZ2V0RWxlbWVudDIuYm9keTsKCiAgICAgIHZhciB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpOwogICAgICBib2R5LmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgIHRyYW5zZm9ybS5zZXRPcmlnaW4obmV3IEFtbW8uYnRWZWN0b3IzKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnopKTsKICAgICAgYm9keS5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgfTsKICAgIHZhciBhcHBseUltcHVzZSA9IGZ1bmN0aW9uIGFwcGx5SW1wdXNlKF9yZWYpIHsKICAgICAgdmFyIHV1aWQgPSBfcmVmLnV1aWQsCiAgICAgICAgICBfcmVmJGltcHVsc2UgPSBfcmVmLmltcHVsc2UsCiAgICAgICAgICBpbXB1bHNlID0gX3JlZiRpbXB1bHNlID09PSB2b2lkIDAgPyBERUZBVUxUX0lNUFVMU0UgOiBfcmVmJGltcHVsc2U7CgogICAgICB2YXIgX3dvcmxkJGdldEVsZW1lbnQzID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKSwKICAgICAgICAgIGJvZHkgPSBfd29ybGQkZ2V0RWxlbWVudDMuYm9keTsKCiAgICAgIHZhciBtb3Rpb25TdGF0ZSA9IGJvZHkuZ2V0TW90aW9uU3RhdGUoKTsKCiAgICAgIGlmIChtb3Rpb25TdGF0ZSkgewogICAgICAgIHZhciBpbXB1bHNlVmVjdG9yID0gbmV3IEFtbW8uYnRWZWN0b3IzKGltcHVsc2UueCwgaW1wdWxzZS55LCBpbXB1bHNlLnopOwogICAgICAgIGJvZHkuYXBwbHlDZW50cmFsSW1wdWxzZShpbXB1bHNlVmVjdG9yKTsKICAgICAgICBBbW1vLmRlc3Ryb3koaW1wdWxzZVZlY3Rvcik7CiAgICAgIH0KICAgIH07CiAgICB2YXIgaGFuZGxlRWxlbWVudFVwZGF0ZSA9IGZ1bmN0aW9uIGhhbmRsZUVsZW1lbnRVcGRhdGUoX3JlZjIsIGR0KSB7CiAgICAgIHZhciBib2R5ID0gX3JlZjIuYm9keSwKICAgICAgICAgIHV1aWQgPSBfcmVmMi51dWlkLAogICAgICAgICAgX3JlZjIkc3RhdGUgPSBfcmVmMi5zdGF0ZTsKICAgICAgdmFyIG1vdGlvblN0YXRlID0gYm9keS5nZXRNb3Rpb25TdGF0ZSgpOwoKICAgICAgaWYgKG1vdGlvblN0YXRlKSB7CiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7CiAgICAgICAgbW90aW9uU3RhdGUuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgICB2YXIgb3JpZ2luID0gdHJhbnNmb3JtLmdldE9yaWdpbigpOwogICAgICAgIHZhciByb3RhdGlvbiA9IHRyYW5zZm9ybS5nZXRSb3RhdGlvbigpOwogICAgICAgIGRpc3BhdGNoZXIkMS5zZW5kQm9keVVwZGF0ZSh1dWlkLCBvcmlnaW4sIHJvdGF0aW9uLCBkdCk7CiAgICAgICAgQW1tby5kZXN0cm95KHRyYW5zZm9ybSk7CiAgICAgIH0KICAgIH07CgogICAgdmFyIGFkZFBsYXllciA9IGZ1bmN0aW9uIGFkZFBsYXllcihkYXRhKSB7CiAgICAgIHZhciB1dWlkID0gZGF0YS51dWlkLAogICAgICAgICAgd2lkdGggPSBkYXRhLndpZHRoLAogICAgICAgICAgaGVpZ2h0ID0gZGF0YS5oZWlnaHQsCiAgICAgICAgICBwb3NpdGlvbiA9IGRhdGEucG9zaXRpb24sCiAgICAgICAgICBxdWF0ZXJuaW9uID0gZGF0YS5xdWF0ZXJuaW9uLAogICAgICAgICAgbWFzcyA9IGRhdGEubWFzcywKICAgICAgICAgIGZyaWN0aW9uID0gZGF0YS5mcmljdGlvbjsKICAgICAgdmFyIGNhcHN1bGUgPSBuZXcgQW1tby5idENhcHN1bGVTaGFwZSh3aWR0aCwgaGVpZ2h0KTsKICAgICAgdmFyIGJvZHkgPSBjcmVhdGVSaWdpZEJvZHkoY2Fwc3VsZSwgewogICAgICAgIHV1aWQ6IHV1aWQsCiAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uLAogICAgICAgIHF1YXRlcm5pb246IHF1YXRlcm5pb24sCiAgICAgICAgbWFzczogbWFzcywKICAgICAgICBmcmljdGlvbjogZnJpY3Rpb24KICAgICAgfSk7IC8vIGRpc2FibGlpbmcgcm90YXRpb24gZm9yIGNvbGxpc2lvbnMKCiAgICAgIGJvZHkuc2V0QW5ndWxhckZhY3RvcigwKTsKICAgICAgd29ybGQuYWRkUmlnaWRCb2R5KGJvZHkpOwogICAgICB3b3JsZC5zZXRCb2R5KHsKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIGJvZHk6IGJvZHksCiAgICAgICAgdHlwZTogVFlQRVMuUExBWUVSLAogICAgICAgIHN0YXRlOiBERUZBVUxUX1JJR0lEQk9EWV9TVEFURQogICAgICB9KTsKICAgIH07CiAgICB2YXIgaGFuZGxlUGxheWVyVXBkYXRlID0gZnVuY3Rpb24gaGFuZGxlUGxheWVyVXBkYXRlKF9yZWYsIGR0KSB7CiAgICAgIHZhciBib2R5ID0gX3JlZi5ib2R5LAogICAgICAgICAgdXVpZCA9IF9yZWYudXVpZCwKICAgICAgICAgIF9yZWYkc3RhdGUgPSBfcmVmLnN0YXRlLAogICAgICAgICAgc3RhdGUgPSBfcmVmJHN0YXRlID09PSB2b2lkIDAgPyBERUZBVUxUX1JJR0lEQk9EWV9TVEFURSA6IF9yZWYkc3RhdGU7CiAgICAgIHZhciBtb3ZlbWVudCA9IHN0YXRlLm1vdmVtZW50LAogICAgICAgICAgZGlyZWN0aW9uID0gc3RhdGUuZGlyZWN0aW9uLAogICAgICAgICAgY2FtZXJhRGlyZWN0aW9uID0gc3RhdGUuY2FtZXJhRGlyZWN0aW9uLAogICAgICAgICAgcXVhdGVybmlvbiA9IHN0YXRlLnF1YXRlcm5pb24sCiAgICAgICAgICBwb3NpdGlvbiA9IHN0YXRlLnBvc2l0aW9uOwogICAgICB2YXIgTUFYX1NQRUVEID0gMTsKICAgICAgdmFyIHdhbGtWZWxvY2l0eSA9IC4xOwogICAgICB2YXIgbW90aW9uU3RhdGUgPSBib2R5LmdldE1vdGlvblN0YXRlKCk7CgogICAgICBpZiAobW90aW9uU3RhdGUpIHsKICAgICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgICBtb3Rpb25TdGF0ZS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICAgIHZhciBsaW5lYXJWZWxvY2l0eSA9IGJvZHkuZ2V0TGluZWFyVmVsb2NpdHkoKTsKICAgICAgICB2YXIgc3BlZWQgPSBsaW5lYXJWZWxvY2l0eS5sZW5ndGgoKTsKICAgICAgICB2YXIgZm9yd2FyZERpciA9IHRyYW5zZm9ybS5nZXRCYXNpcygpLmdldFJvdygyKTsKICAgICAgICBmb3J3YXJkRGlyLm5vcm1hbGl6ZSgpOwogICAgICAgIHZhciB3YWxrRGlyZWN0aW9uID0gbmV3IEFtbW8uYnRWZWN0b3IzKDAuMCwgMC4wLCAwLjApOwogICAgICAgIHZhciB3YWxrU3BlZWQgPSB3YWxrVmVsb2NpdHkgKiBkdDsKCiAgICAgICAgaWYgKG1vdmVtZW50LmZvcndhcmQpIHsKICAgICAgICAgIHdhbGtEaXJlY3Rpb24uc2V0WCh3YWxrRGlyZWN0aW9uLngoKSArIGZvcndhcmREaXIueCgpKTsgLy93YWxrRGlyZWN0aW9uLnNldFkoIHdhbGtEaXJlY3Rpb24ueSgpICsgZm9yd2FyZERpci55KCkpOwoKICAgICAgICAgIHdhbGtEaXJlY3Rpb24uc2V0Wih3YWxrRGlyZWN0aW9uLnooKSArIGZvcndhcmREaXIueigpKTsKICAgICAgICB9CgogICAgICAgIGlmIChtb3ZlbWVudC5iYWNrd2FyZHMpIHsKICAgICAgICAgIHdhbGtEaXJlY3Rpb24uc2V0WCh3YWxrRGlyZWN0aW9uLngoKSAtIGZvcndhcmREaXIueCgpKTsgLy93YWxrRGlyZWN0aW9uLnNldFkoIHdhbGtEaXJlY3Rpb24ueSgpIC0gZm9yd2FyZERpci55KCkpOwoKICAgICAgICAgIHdhbGtEaXJlY3Rpb24uc2V0Wih3YWxrRGlyZWN0aW9uLnooKSAtIGZvcndhcmREaXIueigpKTsKICAgICAgICB9CgogICAgICAgIGlmICghbW92ZW1lbnQuZm9yd2FyZCAmJiAhbW92ZW1lbnQuYmFja3dhcmRzKSB7CiAgICAgICAgICBsaW5lYXJWZWxvY2l0eS5zZXRYKGxpbmVhclZlbG9jaXR5LngoKSAqIDAuMik7CiAgICAgICAgICBsaW5lYXJWZWxvY2l0eS5zZXRaKGxpbmVhclZlbG9jaXR5LnooKSAqIDAuMik7CiAgICAgICAgfSBlbHNlIGlmIChzcGVlZCA8IE1BWF9TUEVFRCkgewogICAgICAgICAgbGluZWFyVmVsb2NpdHkuc2V0WChsaW5lYXJWZWxvY2l0eS54KCkgKyBjYW1lcmFEaXJlY3Rpb24ueCAqIHdhbGtTcGVlZCk7CiAgICAgICAgICBsaW5lYXJWZWxvY2l0eS5zZXRaKGxpbmVhclZlbG9jaXR5LnooKSArIGNhbWVyYURpcmVjdGlvbi56ICogd2Fsa1NwZWVkKTsKICAgICAgICB9CgogICAgICAgIGJvZHkuc2V0TGluZWFyVmVsb2NpdHkobGluZWFyVmVsb2NpdHkpOwogICAgICAgIGJvZHkuZ2V0TW90aW9uU3RhdGUoKS5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICAgIGJvZHkuc2V0Q2VudGVyT2ZNYXNzVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgICAgdmFyIG9yaWdpbiA9IHRyYW5zZm9ybS5nZXRPcmlnaW4oKTsKICAgICAgICB2YXIgcm90YXRpb24gPSB0cmFuc2Zvcm0uZ2V0Um90YXRpb24oKTsKICAgICAgICBkaXNwYXRjaGVyLnNlbmRCb2R5VXBkYXRlKHV1aWQsIG9yaWdpbiwgcm90YXRpb24sIGR0KTsKICAgICAgfQogICAgfTsKCiAgICB2YXIgQ2xvY2sgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewogICAgICBmdW5jdGlvbiBDbG9jaygpIHsKICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ2xvY2spOwoKICAgICAgICB0aGlzLnRpbWVzdGFtcCA9IG51bGw7CiAgICAgIH0KCiAgICAgIF9jcmVhdGVDbGFzcyhDbG9jaywgW3sKICAgICAgICBrZXk6ICJnZXREZWx0YSIsCiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlbHRhKCkgewogICAgICAgICAgdmFyIHRpbWUgPSBEYXRlLm5vdygpOwoKICAgICAgICAgIGlmICh0aGlzLnRpbWVzdGFtcCkgewogICAgICAgICAgICB2YXIgZGVsdGEgPSB0aW1lIC0gdGhpcy50aW1lc3RhbXA7CiAgICAgICAgICAgIHRoaXMudGltZXN0YW1wID0gdGltZTsKICAgICAgICAgICAgcmV0dXJuIGRlbHRhOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy50aW1lc3RhbXAgPSB0aW1lOwogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH1dKTsKCiAgICAgIHJldHVybiBDbG9jazsKICAgIH0oKTsKCiAgICB2YXIgV29ybGQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewogICAgICBmdW5jdGlvbiBXb3JsZCgpIHsKICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwoKICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgV29ybGQpOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImluaXQiLCBmdW5jdGlvbiAob3B0aW9ucykgewogICAgICAgICAgdmFyIF9vcHRpb25zJGdyYXZpdHkgPSBvcHRpb25zLmdyYXZpdHksCiAgICAgICAgICAgICAgZ3Jhdml0eSA9IF9vcHRpb25zJGdyYXZpdHkgPT09IHZvaWQgMCA/IEdSQVZJVFkgOiBfb3B0aW9ucyRncmF2aXR5OwogICAgICAgICAgX3RoaXMuY29sbGlzaW9uQ29uZmlndXJhdGlvbiA9IG5ldyBBbW1vLmJ0RGVmYXVsdENvbGxpc2lvbkNvbmZpZ3VyYXRpb24oKTsKICAgICAgICAgIF90aGlzLmRpc3BhdGNoZXIgPSBuZXcgQW1tby5idENvbGxpc2lvbkRpc3BhdGNoZXIoX3RoaXMuY29sbGlzaW9uQ29uZmlndXJhdGlvbik7CiAgICAgICAgICBfdGhpcy5icm9hZHBoYXNlID0gbmV3IEFtbW8uYnREYnZ0QnJvYWRwaGFzZSgpOwogICAgICAgICAgX3RoaXMuc29sdmVyID0gbmV3IEFtbW8uYnRTZXF1ZW50aWFsSW1wdWxzZUNvbnN0cmFpbnRTb2x2ZXIoKTsKICAgICAgICAgIF90aGlzLmR5bmFtaWNzV29ybGQgPSBuZXcgQW1tby5idERpc2NyZXRlRHluYW1pY3NXb3JsZChfdGhpcy5kaXNwYXRjaGVyLCBfdGhpcy5icm9hZHBoYXNlLCBfdGhpcy5zb2x2ZXIsIF90aGlzLmNvbGxpc2lvbkNvbmZpZ3VyYXRpb24pOwoKICAgICAgICAgIF90aGlzLmR5bmFtaWNzV29ybGQuc2V0R3Jhdml0eShuZXcgQW1tby5idFZlY3RvcjMoZ3Jhdml0eS54LCBncmF2aXR5LnksIGdyYXZpdHkueikpOyAvLyB0aGlzIGlzIG5lZWRlZCBmb3IgZ2hvc3RPYmplY3QgY29sbGlzaW9ucwoKCiAgICAgICAgICBfdGhpcy5keW5hbWljc1dvcmxkLmdldEJyb2FkcGhhc2UoKS5nZXRPdmVybGFwcGluZ1BhaXJDYWNoZSgpLnNldEludGVybmFsR2hvc3RQYWlyQ2FsbGJhY2sobmV3IEFtbW8uYnRHaG9zdFBhaXJDYWxsYmFjaygpKTsKCiAgICAgICAgICBfdGhpcy5pbml0aWFsaXNlZCA9IHRydWU7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAicmVtb3ZlRWxlbWVudCIsIGZ1bmN0aW9uICh1dWlkKSB7CiAgICAgICAgICBpZiAoX3RoaXMuaGFzRWxlbWVudCh1dWlkKSkgewogICAgICAgICAgICBfdGhpcy5lbGVtZW50c1t1dWlkXS5kZWxldGVkID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJyZW1vdmVEZWxldGVkRWxlbWVudHMiLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoX3RoaXMuZWxlbWVudHMpLmZpbHRlcihmdW5jdGlvbiAodXVpZCkgewogICAgICAgICAgICByZXR1cm4gX3RoaXMuZWxlbWVudHNbdXVpZF0uZGVsZXRlZDsKICAgICAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24gKHV1aWQpIHsKICAgICAgICAgICAgZGVsZXRlIF90aGlzLmVsZW1lbnRzW3V1aWRdOwogICAgICAgICAgfSk7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiaGFzRWxlbWVudCIsIGZ1bmN0aW9uICh1dWlkKSB7CiAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoX3RoaXMuZWxlbWVudHMpLmluY2x1ZGVzKHV1aWQpOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImdldEVsZW1lbnQiLCBmdW5jdGlvbiAodXVpZCkgewogICAgICAgICAgcmV0dXJuIF90aGlzLmVsZW1lbnRzW3V1aWRdOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImlzSW5pdGlhbGlzZWQiLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gX3RoaXMuaW5pdGlhbGlzZWQ7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiZ2V0RHluYW1pY3NXb3JsZCIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiBfdGhpcy5keW5hbWljc1dvcmxkOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImFkZFJpZ2lkQm9keSIsIGZ1bmN0aW9uIChib2R5KSB7CiAgICAgICAgICBfdGhpcy5keW5hbWljc1dvcmxkLmFkZFJpZ2lkQm9keShib2R5KTsKICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJhZGRBY3Rpb24iLCBmdW5jdGlvbiAoYWN0aW9uKSB7CiAgICAgICAgICBfdGhpcy5keW5hbWljc1dvcmxkLmFkZEFjdGlvbihhY3Rpb24pOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImFkZENvbGxpc2lvbk9iamVjdCIsIGZ1bmN0aW9uIChjb2xsaXNpb25PYmplY3QpIHsKICAgICAgICAgIF90aGlzLmR5bmFtaWNzV29ybGQuYWRkQ29sbGlzaW9uT2JqZWN0KGNvbGxpc2lvbk9iamVjdCk7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAic3RlcFNpbXVsYXRpb24iLCBmdW5jdGlvbiAoZHQpIHsKICAgICAgICAgIF90aGlzLmR5bmFtaWNzV29ybGQuc3RlcFNpbXVsYXRpb24oZHQpOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInNpbXVsYXRlIiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGR0ID0gX3RoaXMuY2xvY2suZ2V0RGVsdGEoKTsKCiAgICAgICAgICBfdGhpcy5zdGVwU2ltdWxhdGlvbihkdCk7CgogICAgICAgICAgT2JqZWN0LmtleXMoX3RoaXMuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKHV1aWQpIHsKICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBfdGhpcy5nZXRFbGVtZW50KHV1aWQpOwoKICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHsKICAgICAgICAgICAgICBzd2l0Y2ggKGVsZW1lbnQudHlwZSkgewogICAgICAgICAgICAgICAgY2FzZSBUWVBFUy5CT1g6CiAgICAgICAgICAgICAgICBjYXNlIFRZUEVTLlNQSEVSRToKICAgICAgICAgICAgICAgIGNhc2UgVFlQRVMuTUVTSDoKICAgICAgICAgICAgICAgICAgaGFuZGxlRWxlbWVudFVwZGF0ZShlbGVtZW50LCBkdCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgVFlQRVMuUExBWUVSOgogICAgICAgICAgICAgICAgICBoYW5kbGVQbGF5ZXJVcGRhdGUoZWxlbWVudCwgZHQpOwogICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIFRZUEVTLlZFSElDTEU6CiAgICAgICAgICAgICAgICAgIGhhbmRsZVZlaGljbGVVcGRhdGUoZWxlbWVudCwgZHQpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwoKICAgICAgICAgIF90aGlzLmNhbGN1bGF0ZUNvbGxpc2lvbnMoKTsKCiAgICAgICAgICBfdGhpcy5yZW1vdmVEZWxldGVkRWxlbWVudHMoKTsKCiAgICAgICAgICBkaXNwYXRjaGVyJDEuc2VuZFBoeXNpY3NVcGRhdGUoZHQpOwogICAgICAgICAgX3RoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3RoaXMuc2ltdWxhdGUuYmluZChfdGhpcykpOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImNhbGN1bGF0ZUNvbGxpc2lvbnMiLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgYW1tb0Rpc3BhdGNoZXIgPSBfdGhpcy5keW5hbWljc1dvcmxkLmdldERpc3BhdGNoZXIoKTsKCiAgICAgICAgICB2YXIgbnVtTWFuaWZvbGRzID0gYW1tb0Rpc3BhdGNoZXIuZ2V0TnVtTWFuaWZvbGRzKCk7CgogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1NYW5pZm9sZHM7IGkrKykgewogICAgICAgICAgICB2YXIgY29udGFjdE1hbmlmb2xkID0gYW1tb0Rpc3BhdGNoZXIuZ2V0TWFuaWZvbGRCeUluZGV4SW50ZXJuYWwoaSk7CiAgICAgICAgICAgIHZhciByYjAgPSBBbW1vLmNhc3RPYmplY3QoY29udGFjdE1hbmlmb2xkLmdldEJvZHkwKCksIEFtbW8uYnRSaWdpZEJvZHkpOwogICAgICAgICAgICB2YXIgcmIxID0gQW1tby5jYXN0T2JqZWN0KGNvbnRhY3RNYW5pZm9sZC5nZXRCb2R5MSgpLCBBbW1vLmJ0UmlnaWRCb2R5KTsKICAgICAgICAgICAgdmFyIG51bUNvbnRhY3RzID0gY29udGFjdE1hbmlmb2xkLmdldE51bUNvbnRhY3RzKCk7IC8vIHRoaXMgaXRlcmF0aW9uIGRvZXNuJ3QgaGF2ZSB1dWlkcwoKICAgICAgICAgICAgaWYgKCFyYjAudXVpZCB8fCAhcmIxLnV1aWQpIGNvbnRpbnVlOwogICAgICAgICAgICB2YXIgY29udGFjdHMgPSBbXTsKCiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbnVtQ29udGFjdHM7IGorKykgewogICAgICAgICAgICAgIHZhciBjb250YWN0UG9pbnQgPSBjb250YWN0TWFuaWZvbGQuZ2V0Q29udGFjdFBvaW50KGopOwogICAgICAgICAgICAgIHZhciBkaXN0YW5jZSA9IGNvbnRhY3RQb2ludC5nZXREaXN0YW5jZSgpOwogICAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+IDAuMCkgY29udGludWU7CiAgICAgICAgICAgICAgdmFyIHZlbG9jaXR5MCA9IHJiMC5nZXRMaW5lYXJWZWxvY2l0eSgpOwogICAgICAgICAgICAgIHZhciB2ZWxvY2l0eTEgPSByYjEuZ2V0TGluZWFyVmVsb2NpdHkoKTsKICAgICAgICAgICAgICB2YXIgd29ybGRQb3MwID0gY29udGFjdFBvaW50LmdldF9tX3Bvc2l0aW9uV29ybGRPbkEoKTsKICAgICAgICAgICAgICB2YXIgd29ybGRQb3MxID0gY29udGFjdFBvaW50LmdldF9tX3Bvc2l0aW9uV29ybGRPbkIoKTsKICAgICAgICAgICAgICB2YXIgbG9jYWxQb3MwID0gY29udGFjdFBvaW50LmdldF9tX2xvY2FsUG9pbnRBKCk7CiAgICAgICAgICAgICAgdmFyIGxvY2FsUG9zMSA9IGNvbnRhY3RQb2ludC5nZXRfbV9sb2NhbFBvaW50QigpOwogICAgICAgICAgICAgIGNvbnRhY3RzLnB1c2goewogICAgICAgICAgICAgICAgZGlzdGFuY2U6IGRpc3RhbmNlLAogICAgICAgICAgICAgICAgZWxlbWVudHM6IFt7CiAgICAgICAgICAgICAgICAgIHV1aWQ6IHJiMC51dWlkLAogICAgICAgICAgICAgICAgICB2ZWxvY2l0eTogewogICAgICAgICAgICAgICAgICAgIHg6IHZlbG9jaXR5MC54KCksCiAgICAgICAgICAgICAgICAgICAgeTogdmVsb2NpdHkwLnkoKSwKICAgICAgICAgICAgICAgICAgICB6OiB2ZWxvY2l0eTAueigpCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIHdvcmxkUG9zOiB7CiAgICAgICAgICAgICAgICAgICAgeDogd29ybGRQb3MwLngoKSwKICAgICAgICAgICAgICAgICAgICB5OiB3b3JsZFBvczAueSgpLAogICAgICAgICAgICAgICAgICAgIHo6IHdvcmxkUG9zMC56KCkKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgbG9jYWxQb3M6IHsKICAgICAgICAgICAgICAgICAgICB4OiBsb2NhbFBvczAueCgpLAogICAgICAgICAgICAgICAgICAgIHk6IGxvY2FsUG9zMC55KCksCiAgICAgICAgICAgICAgICAgICAgejogbG9jYWxQb3MwLnooKQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgIHV1aWQ6IHJiMS51dWlkLAogICAgICAgICAgICAgICAgICB2ZWxvY2l0eTogewogICAgICAgICAgICAgICAgICAgIHg6IHZlbG9jaXR5MS54KCksCiAgICAgICAgICAgICAgICAgICAgeTogdmVsb2NpdHkxLnkoKSwKICAgICAgICAgICAgICAgICAgICB6OiB2ZWxvY2l0eTEueigpCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIHdvcmxkUG9zOiB7CiAgICAgICAgICAgICAgICAgICAgeDogd29ybGRQb3MxLngoKSwKICAgICAgICAgICAgICAgICAgICB5OiB3b3JsZFBvczEueSgpLAogICAgICAgICAgICAgICAgICAgIHo6IHdvcmxkUG9zMS56KCkKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgbG9jYWxQb3M6IHsKICAgICAgICAgICAgICAgICAgICB4OiBsb2NhbFBvczEueCgpLAogICAgICAgICAgICAgICAgICAgIHk6IGxvY2FsUG9zMS55KCksCiAgICAgICAgICAgICAgICAgICAgejogbG9jYWxQb3MxLnooKQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICBkaXNwYXRjaGVyJDEuc2VuZERpc3BhdGNoRXZlbnQocmIwLnV1aWQsIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuQ09MTElTSU9OLCB7CiAgICAgICAgICAgICAgY29udGFjdHM6IGNvbnRhY3RzCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBkaXNwYXRjaGVyJDEuc2VuZERpc3BhdGNoRXZlbnQocmIxLnV1aWQsIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuQ09MTElTSU9OLCB7CiAgICAgICAgICAgICAgY29udGFjdHM6IGNvbnRhY3RzCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImFkZEVsZW1lbnQiLCBmdW5jdGlvbiAoZGF0YSkgewogICAgICAgICAgX3RoaXMuZWxlbWVudHNbZGF0YS51dWlkXSA9IGRhdGE7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAidXBkYXRlQm9keVN0YXRlIiwgZnVuY3Rpb24gKF9yZWYpIHsKICAgICAgICAgIHZhciB1dWlkID0gX3JlZi51dWlkLAogICAgICAgICAgICAgIHN0YXRlID0gX3JlZi5zdGF0ZTsKICAgICAgICAgIF90aGlzLmVsZW1lbnRzW3V1aWRdLnN0YXRlID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIF90aGlzLmVsZW1lbnRzW3V1aWRdLnN0YXRlKSwgc3RhdGUpOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInRlcm1pbmF0ZSIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFtbW8uZGVzdHJveShfdGhpcy5keW5hbWljc1dvcmxkKTsKICAgICAgICAgIEFtbW8uZGVzdHJveShfdGhpcy5zb2x2ZXIpOwogICAgICAgICAgQW1tby5kZXN0cm95KF90aGlzLmRpc3BhdGNoZXIpOwogICAgICAgICAgQW1tby5kZXN0cm95KF90aGlzLmNvbGxpc2lvbkNvbmZpZ3VyYXRpb24pOwogICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoX3RoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQpOwogICAgICAgICAgZGlzcGF0Y2hlciQxLnNlbmRUZXJtaW5hdGVFdmVudCgpOwogICAgICAgIH0pOwoKICAgICAgICB0aGlzLmVsZW1lbnRzID0ge307CiAgICAgICAgdGhpcy5pbml0aWFsaXNlZCA9IGZhbHNlOwogICAgICAgIHRoaXMuY29sbGlzaW9uQ29uZmlndXJhdGlvbiA9IHVuZGVmaW5lZDsKICAgICAgICB0aGlzLmRpc3BhdGNoZXIgPSB1bmRlZmluZWQ7CiAgICAgICAgdGhpcy5icm9hZHBoYXNlID0gdW5kZWZpbmVkOwogICAgICAgIHRoaXMuc29sdmVyID0gdW5kZWZpbmVkOwogICAgICAgIHRoaXMuZHluYW1pY3NXb3JsZCA9IHVuZGVmaW5lZDsKICAgICAgICB0aGlzLnJlcXVlc3RBbmltYXRpb25GcmFtZUlkID0gbnVsbDsKICAgICAgICB0aGlzLmNsb2NrID0gbmV3IENsb2NrKCk7CiAgICAgIH0KCiAgICAgIF9jcmVhdGVDbGFzcyhXb3JsZCwgW3sKICAgICAgICBrZXk6ICJkaXNwb3NlQm9keSIsCiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRpc3Bvc2VCb2R5KF9yZWYyKSB7CiAgICAgICAgICB2YXIgdXVpZCA9IF9yZWYyLnV1aWQ7CiAgICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuZ2V0RWxlbWVudCh1dWlkKTsKICAgICAgICAgIHRoaXMuZHluYW1pY3NXb3JsZC5yZW1vdmVSaWdpZEJvZHkoZWxlbWVudC5ib2R5KTsKICAgICAgICAgIHRoaXMucmVtb3ZlRWxlbWVudCh1dWlkKTsKICAgICAgICAgIGRpc3BhdGNoZXIkMS5zZW5kRWxlbWVudERpc3Bvc2VkKHsKICAgICAgICAgICAgdXVpZDogdXVpZAogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9XSk7CgogICAgICByZXR1cm4gV29ybGQ7CiAgICB9KCk7CiAgICB2YXIgd29ybGQgPSBuZXcgV29ybGQoKTsKCiAgICB2YXIgREVGQVVMVF9ST0xMX0lORkxVRU5DRSA9IDAuMjsKICAgIHZhciBERUZBVUxUX0ZSSUNUSU9OID0gMTAwMDsKICAgIHZhciBERUZBVUxUX01BU1MgPSA4MDA7CiAgICB2YXIgYWRkVmVoaWNsZSA9IGZ1bmN0aW9uIGFkZFZlaGljbGUoZGF0YSkgewogICAgICB2YXIgcG9zaXRpb24gPSBkYXRhLnBvc2l0aW9uLAogICAgICAgICAgcXVhdGVybmlvbiA9IGRhdGEucXVhdGVybmlvbiwKICAgICAgICAgIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICB3aGVlbHMgPSBkYXRhLndoZWVscywKICAgICAgICAgIF9kYXRhJG1hc3MgPSBkYXRhLm1hc3MsCiAgICAgICAgICBtYXNzID0gX2RhdGEkbWFzcyA9PT0gdm9pZCAwID8gREVGQVVMVF9NQVNTIDogX2RhdGEkbWFzcywKICAgICAgICAgIF9kYXRhJHdpZHRoID0gZGF0YS53aWR0aCwKICAgICAgICAgIHdpZHRoID0gX2RhdGEkd2lkdGggPT09IHZvaWQgMCA/IDEuOCA6IF9kYXRhJHdpZHRoLAogICAgICAgICAgX2RhdGEkaGVpZ2h0ID0gZGF0YS5oZWlnaHQsCiAgICAgICAgICBoZWlnaHQgPSBfZGF0YSRoZWlnaHQgPT09IHZvaWQgMCA/IC42IDogX2RhdGEkaGVpZ2h0LAogICAgICAgICAgX2RhdGEkbGVuZ3RoID0gZGF0YS5sZW5ndGgsCiAgICAgICAgICBsZW5ndGggPSBfZGF0YSRsZW5ndGggPT09IHZvaWQgMCA/IDQgOiBfZGF0YSRsZW5ndGgsCiAgICAgICAgICBfZGF0YSRmcmljdGlvbiA9IGRhdGEuZnJpY3Rpb24sCiAgICAgICAgICBmcmljdGlvbiA9IF9kYXRhJGZyaWN0aW9uID09PSB2b2lkIDAgPyBERUZBVUxUX0ZSSUNUSU9OIDogX2RhdGEkZnJpY3Rpb24sCiAgICAgICAgICBfZGF0YSRyb2xsSW5mbHVlbmNlID0gZGF0YS5yb2xsSW5mbHVlbmNlLAogICAgICAgICAgcm9sbEluZmx1ZW5jZSA9IF9kYXRhJHJvbGxJbmZsdWVuY2UgPT09IHZvaWQgMCA/IERFRkFVTFRfUk9MTF9JTkZMVUVOQ0UgOiBfZGF0YSRyb2xsSW5mbHVlbmNlLAogICAgICAgICAgX2RhdGEkd2hlZWxzT3B0aW9ucyA9IGRhdGEud2hlZWxzT3B0aW9ucywKICAgICAgICAgIHdoZWVsc09wdGlvbnMgPSBfZGF0YSR3aGVlbHNPcHRpb25zID09PSB2b2lkIDAgPyB7fSA6IF9kYXRhJHdoZWVsc09wdGlvbnMsCiAgICAgICAgICBfZGF0YSRzdXNwZW5zaW9ucyA9IGRhdGEuc3VzcGVuc2lvbnMsCiAgICAgICAgICBzdXNwZW5zaW9ucyA9IF9kYXRhJHN1c3BlbnNpb25zID09PSB2b2lkIDAgPyB7fSA6IF9kYXRhJHN1c3BlbnNpb25zOwogICAgICB2YXIgX3doZWVsc09wdGlvbnMkYmFjayA9IHdoZWVsc09wdGlvbnMuYmFjaywKICAgICAgICAgIGJhY2sgPSBfd2hlZWxzT3B0aW9ucyRiYWNrID09PSB2b2lkIDAgPyB7fSA6IF93aGVlbHNPcHRpb25zJGJhY2ssCiAgICAgICAgICBfd2hlZWxzT3B0aW9ucyRmcm9udCA9IHdoZWVsc09wdGlvbnMuZnJvbnQsCiAgICAgICAgICBmcm9udCA9IF93aGVlbHNPcHRpb25zJGZyb250ID09PSB2b2lkIDAgPyB7fSA6IF93aGVlbHNPcHRpb25zJGZyb250OwogICAgICB2YXIgX2JhY2skYXhpc1Bvc2l0aW9uID0gYmFjay5heGlzUG9zaXRpb24sCiAgICAgICAgICBheGlzUG9zaXRpb25CYWNrID0gX2JhY2skYXhpc1Bvc2l0aW9uID09PSB2b2lkIDAgPyAtMSA6IF9iYWNrJGF4aXNQb3NpdGlvbiwKICAgICAgICAgIF9iYWNrJHJhZGl1cyA9IGJhY2sucmFkaXVzLAogICAgICAgICAgd2hlZWxSYWRpdXNCYWNrID0gX2JhY2skcmFkaXVzID09PSB2b2lkIDAgPyAuNCA6IF9iYWNrJHJhZGl1cywKICAgICAgICAgIF9iYWNrJGhhbGZUcmFjayA9IGJhY2suaGFsZlRyYWNrLAogICAgICAgICAgd2hlZWxIYWxmVHJhY2tCYWNrID0gX2JhY2skaGFsZlRyYWNrID09PSB2b2lkIDAgPyAxIDogX2JhY2skaGFsZlRyYWNrLAogICAgICAgICAgX2JhY2skYXhpc0hlaWdodCA9IGJhY2suYXhpc0hlaWdodCwKICAgICAgICAgIHdoZWVsQXhpc0hlaWdodEJhY2sgPSBfYmFjayRheGlzSGVpZ2h0ID09PSB2b2lkIDAgPyAuMyA6IF9iYWNrJGF4aXNIZWlnaHQ7CiAgICAgIHZhciBfZnJvbnQkYXhpc1Bvc2l0aW9uID0gZnJvbnQuYXhpc1Bvc2l0aW9uLAogICAgICAgICAgYXhpc1Bvc2l0aW9uRnJvbnQgPSBfZnJvbnQkYXhpc1Bvc2l0aW9uID09PSB2b2lkIDAgPyAxLjcgOiBfZnJvbnQkYXhpc1Bvc2l0aW9uLAogICAgICAgICAgX2Zyb250JHJhZGl1cyA9IGZyb250LnJhZGl1cywKICAgICAgICAgIHdoZWVsUmFkaXVzRnJvbnQgPSBfZnJvbnQkcmFkaXVzID09PSB2b2lkIDAgPyAuNCA6IF9mcm9udCRyYWRpdXMsCiAgICAgICAgICBfZnJvbnQkaGFsZlRyYWNrID0gZnJvbnQuaGFsZlRyYWNrLAogICAgICAgICAgd2hlZWxIYWxmVHJhY2tGcm9udCA9IF9mcm9udCRoYWxmVHJhY2sgPT09IHZvaWQgMCA/IDEgOiBfZnJvbnQkaGFsZlRyYWNrLAogICAgICAgICAgX2Zyb250JGF4aXNIZWlnaHQgPSBmcm9udC5heGlzSGVpZ2h0LAogICAgICAgICAgd2hlZWxBeGlzSGVpZ2h0RnJvbnQgPSBfZnJvbnQkYXhpc0hlaWdodCA9PT0gdm9pZCAwID8gLjMgOiBfZnJvbnQkYXhpc0hlaWdodDsKICAgICAgdmFyIF9zdXNwZW5zaW9ucyRzdGlmZm5lcyA9IHN1c3BlbnNpb25zLnN0aWZmbmVzcywKICAgICAgICAgIHN0aWZmbmVzcyA9IF9zdXNwZW5zaW9ucyRzdGlmZm5lcyA9PT0gdm9pZCAwID8gMjAuMCA6IF9zdXNwZW5zaW9ucyRzdGlmZm5lcywKICAgICAgICAgIF9zdXNwZW5zaW9ucyRkYW1waW5nID0gc3VzcGVuc2lvbnMuZGFtcGluZywKICAgICAgICAgIGRhbXBpbmcgPSBfc3VzcGVuc2lvbnMkZGFtcGluZyA9PT0gdm9pZCAwID8gMi4zIDogX3N1c3BlbnNpb25zJGRhbXBpbmcsCiAgICAgICAgICBfc3VzcGVuc2lvbnMkY29tcHJlc3MgPSBzdXNwZW5zaW9ucy5jb21wcmVzc2lvbiwKICAgICAgICAgIGNvbXByZXNzaW9uID0gX3N1c3BlbnNpb25zJGNvbXByZXNzID09PSB2b2lkIDAgPyA0LjQgOiBfc3VzcGVuc2lvbnMkY29tcHJlc3MsCiAgICAgICAgICBfc3VzcGVuc2lvbnMkcmVzdExlbmcgPSBzdXNwZW5zaW9ucy5yZXN0TGVuZ3RoLAogICAgICAgICAgcmVzdExlbmd0aCA9IF9zdXNwZW5zaW9ucyRyZXN0TGVuZyA9PT0gdm9pZCAwID8gMC42IDogX3N1c3BlbnNpb25zJHJlc3RMZW5nOyAvLyBDaGFzc2lzCgogICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgQW1tby5idEJveFNoYXBlKG5ldyBBbW1vLmJ0VmVjdG9yMyh3aWR0aCAqIC41LCBoZWlnaHQgKiAuNSwgbGVuZ3RoICogLjUpKTsKICAgICAgdmFyIHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7CiAgICAgIHRyYW5zZm9ybS5zZXRJZGVudGl0eSgpOwogICAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKG5ldyBBbW1vLmJ0VmVjdG9yMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KSk7CiAgICAgIHRyYW5zZm9ybS5zZXRSb3RhdGlvbihuZXcgQW1tby5idFF1YXRlcm5pb24ocXVhdGVybmlvbi54LCBxdWF0ZXJuaW9uLnksIHF1YXRlcm5pb24ueiwgcXVhdGVybmlvbi53KSk7CiAgICAgIHZhciBtb3Rpb25TdGF0ZSA9IG5ldyBBbW1vLmJ0RGVmYXVsdE1vdGlvblN0YXRlKHRyYW5zZm9ybSk7CiAgICAgIHZhciBsb2NhbEluZXJ0aWEgPSBuZXcgQW1tby5idFZlY3RvcjMoMCwgMCwgMCk7CiAgICAgIGdlb21ldHJ5LmNhbGN1bGF0ZUxvY2FsSW5lcnRpYShtYXNzLCBsb2NhbEluZXJ0aWEpOwogICAgICB2YXIgY2hhc3NpcyA9IG5ldyBBbW1vLmJ0UmlnaWRCb2R5KG5ldyBBbW1vLmJ0UmlnaWRCb2R5Q29uc3RydWN0aW9uSW5mbyhtYXNzLCBtb3Rpb25TdGF0ZSwgZ2VvbWV0cnksIGxvY2FsSW5lcnRpYSkpOwogICAgICBjaGFzc2lzLnNldEFjdGl2YXRpb25TdGF0ZShESVNBQkxFX0RFQUNUSVZBVElPTik7CiAgICAgIHdvcmxkLmFkZFJpZ2lkQm9keShjaGFzc2lzKTsgLy8gUmF5Y2FzdCBWZWhpY2xlCgogICAgICB2YXIgdHVuaW5nID0gbmV3IEFtbW8uYnRWZWhpY2xlVHVuaW5nKCk7CiAgICAgIHZhciByYXlDYXN0ZXIgPSBuZXcgQW1tby5idERlZmF1bHRWZWhpY2xlUmF5Y2FzdGVyKHdvcmxkLmdldER5bmFtaWNzV29ybGQoKSk7CiAgICAgIHZhciB2ZWhpY2xlID0gbmV3IEFtbW8uYnRSYXljYXN0VmVoaWNsZSh0dW5pbmcsIGNoYXNzaXMsIHJheUNhc3Rlcik7CiAgICAgIHZlaGljbGUuc2V0Q29vcmRpbmF0ZVN5c3RlbSgwLCAxLCAyKTsKICAgICAgd29ybGQuYWRkQWN0aW9uKHZlaGljbGUpOwogICAgICB2YXIgd2hlZWxEaXJlY3Rpb25DUzAgPSBuZXcgQW1tby5idFZlY3RvcjMoMCwgLTEsIDApOwogICAgICB2YXIgd2hlZWxBeGxlQ1MgPSBuZXcgQW1tby5idFZlY3RvcjMoLTEsIDAsIDApOwoKICAgICAgdmFyIGFkZFdoZWVsID0gZnVuY3Rpb24gYWRkV2hlZWwoaXNGcm9udCwgcG9zLCByYWRpdXMpIHsKICAgICAgICB2YXIgd2hlZWxJbmZvID0gdmVoaWNsZS5hZGRXaGVlbChwb3MsIHdoZWVsRGlyZWN0aW9uQ1MwLCB3aGVlbEF4bGVDUywgcmVzdExlbmd0aCwgcmFkaXVzLCB0dW5pbmcsIGlzRnJvbnQpOwogICAgICAgIHdoZWVsSW5mby5zZXRfbV9zdXNwZW5zaW9uU3RpZmZuZXNzKHN0aWZmbmVzcyk7CiAgICAgICAgd2hlZWxJbmZvLnNldF9tX3doZWVsc0RhbXBpbmdSZWxheGF0aW9uKGRhbXBpbmcpOwogICAgICAgIHdoZWVsSW5mby5zZXRfbV93aGVlbHNEYW1waW5nQ29tcHJlc3Npb24oY29tcHJlc3Npb24pOwogICAgICAgIHdoZWVsSW5mby5zZXRfbV9mcmljdGlvblNsaXAoZnJpY3Rpb24pOwogICAgICAgIHdoZWVsSW5mby5zZXRfbV9yb2xsSW5mbHVlbmNlKHJvbGxJbmZsdWVuY2UpOwogICAgICB9OwoKICAgICAgYWRkV2hlZWwodHJ1ZSwgbmV3IEFtbW8uYnRWZWN0b3IzKHdoZWVsSGFsZlRyYWNrRnJvbnQsIHdoZWVsQXhpc0hlaWdodEZyb250LCBheGlzUG9zaXRpb25Gcm9udCksIHdoZWVsUmFkaXVzRnJvbnQpOwogICAgICBhZGRXaGVlbCh0cnVlLCBuZXcgQW1tby5idFZlY3RvcjMoLXdoZWVsSGFsZlRyYWNrRnJvbnQsIHdoZWVsQXhpc0hlaWdodEZyb250LCBheGlzUG9zaXRpb25Gcm9udCksIHdoZWVsUmFkaXVzRnJvbnQpOwogICAgICBhZGRXaGVlbChmYWxzZSwgbmV3IEFtbW8uYnRWZWN0b3IzKC13aGVlbEhhbGZUcmFja0JhY2ssIHdoZWVsQXhpc0hlaWdodEJhY2ssIGF4aXNQb3NpdGlvbkJhY2spLCB3aGVlbFJhZGl1c0JhY2spOwogICAgICBhZGRXaGVlbChmYWxzZSwgbmV3IEFtbW8uYnRWZWN0b3IzKHdoZWVsSGFsZlRyYWNrQmFjaywgd2hlZWxBeGlzSGVpZ2h0QmFjaywgYXhpc1Bvc2l0aW9uQmFjayksIHdoZWVsUmFkaXVzQmFjayk7CiAgICAgIHZlaGljbGUudXVpZCA9IHV1aWQ7CiAgICAgIHdvcmxkLnNldEJvZHkoewogICAgICAgIHR5cGU6IFRZUEVTLlZFSElDTEUsCiAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICB2ZWhpY2xlOiB2ZWhpY2xlLAogICAgICAgIHdoZWVsczogd2hlZWxzLAogICAgICAgIG9wdGlvbnM6IGRhdGEsCiAgICAgICAgc3RhdGU6IERFRkFVTFRfVkVISUNMRV9TVEFURQogICAgICB9KTsKICAgIH07CiAgICB2YXIgc2V0VmVoaWNsZVBvc2l0aW9uID0gZnVuY3Rpb24gc2V0VmVoaWNsZVBvc2l0aW9uKGRhdGEpIHsKICAgICAgdmFyIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICBwb3NpdGlvbiA9IGRhdGEucG9zaXRpb247CiAgICAgIHZhciBlbGVtZW50ID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKTsKCiAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFRZUEVTLlZFSElDTEUpIHsKICAgICAgICB2YXIgYm9keSA9IGVsZW1lbnQudmVoaWNsZS5nZXRSaWdpZEJvZHkoKTsKICAgICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgICBib2R5LmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgICAgdHJhbnNmb3JtLnNldE9yaWdpbihuZXcgQW1tby5idFZlY3RvcjMocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueikpOwogICAgICAgIGJvZHkuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgfQogICAgfTsKICAgIHZhciBzZXRWZWhpY2xlUXVhdGVybmlvbiA9IGZ1bmN0aW9uIHNldFZlaGljbGVRdWF0ZXJuaW9uKGRhdGEpIHsKICAgICAgdmFyIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICBxdWF0ZXJuaW9uID0gZGF0YS5xdWF0ZXJuaW9uOwogICAgICB2YXIgZWxlbWVudCA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCk7CgogICAgICBpZiAoZWxlbWVudC50eXBlID09PSBUWVBFUy5WRUhJQ0xFKSB7CiAgICAgICAgdmFyIGJvZHkgPSBlbGVtZW50LnZlaGljbGUuZ2V0UmlnaWRCb2R5KCk7CiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7CiAgICAgICAgYm9keS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICAgIHRyYW5zZm9ybS5zZXRSb3RhdGlvbihuZXcgQW1tby5idFF1YXRlcm5pb24ocXVhdGVybmlvbi54LCBxdWF0ZXJuaW9uLnksIHF1YXRlcm5pb24ueiwgcXVhdGVybmlvbi53KSk7CiAgICAgICAgYm9keS5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICB9CiAgICB9OwogICAgdmFyIHJlc2V0VmVoaWNsZSA9IGZ1bmN0aW9uIHJlc2V0VmVoaWNsZShkYXRhKSB7CiAgICAgIHZhciB1dWlkID0gZGF0YS51dWlkLAogICAgICAgICAgcXVhdGVybmlvbiA9IGRhdGEucXVhdGVybmlvbiwKICAgICAgICAgIHBvc2l0aW9uID0gZGF0YS5wb3NpdGlvbjsKICAgICAgdmFyIGVsZW1lbnQgPSB3b3JsZC5nZXRFbGVtZW50KHV1aWQpOwoKICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gVFlQRVMuVkVISUNMRSkgewogICAgICAgIHZhciBib2R5ID0gZWxlbWVudC52ZWhpY2xlLmdldFJpZ2lkQm9keSgpOwogICAgICAgIHZhciB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpOwogICAgICAgIGJvZHkuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgICB0cmFuc2Zvcm0uc2V0SWRlbnRpdHkoKTsKICAgICAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKG5ldyBBbW1vLmJ0VmVjdG9yMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KSk7CiAgICAgICAgdHJhbnNmb3JtLnNldFJvdGF0aW9uKG5ldyBBbW1vLmJ0UXVhdGVybmlvbihxdWF0ZXJuaW9uLngsIHF1YXRlcm5pb24ueSwgcXVhdGVybmlvbi56LCBxdWF0ZXJuaW9uLncpKTsKICAgICAgICBib2R5LnNldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgIH0KICAgIH07CiAgICB2YXIgaGFuZGxlVmVoaWNsZVVwZGF0ZSA9IGZ1bmN0aW9uIGhhbmRsZVZlaGljbGVVcGRhdGUoX3JlZiwgZHQpIHsKICAgICAgdmFyIHZlaGljbGUgPSBfcmVmLnZlaGljbGUsCiAgICAgICAgICB3aGVlbHMgPSBfcmVmLndoZWVscywKICAgICAgICAgIHV1aWQgPSBfcmVmLnV1aWQsCiAgICAgICAgICBfcmVmJHN0YXRlID0gX3JlZi5zdGF0ZSwKICAgICAgICAgIHN0YXRlID0gX3JlZiRzdGF0ZSA9PT0gdm9pZCAwID8gREVGQVVMVF9WRUhJQ0xFX1NUQVRFIDogX3JlZiRzdGF0ZSwKICAgICAgICAgIF9yZWYkb3B0aW9ucyA9IF9yZWYub3B0aW9ucywKICAgICAgICAgIG9wdGlvbnMgPSBfcmVmJG9wdGlvbnMgPT09IHZvaWQgMCA/IHt9IDogX3JlZiRvcHRpb25zOwogICAgICB2YXIgc3BlZWQgPSB2ZWhpY2xlLmdldEN1cnJlbnRTcGVlZEttSG91cigpOwogICAgICBkaXNwYXRjaGVyJDEuc2VuZERpc3BhdGNoRXZlbnQodXVpZCwgUEhZU0lDU19FVkVOVFMuVkVISUNMRS5TUEVFRCwgewogICAgICAgIHNwZWVkOiBzcGVlZAogICAgICB9KTsKICAgICAgdmFyIGJyZWFraW5nRm9yY2UgPSAwOwogICAgICB2YXIgZW5naW5lRm9yY2UgPSAwOwogICAgICB2YXIgX29wdGlvbnMkc3RlZXJpbmdDbGFtID0gb3B0aW9ucy5zdGVlcmluZ0NsYW1wLAogICAgICAgICAgc3RlZXJpbmdDbGFtcCA9IF9vcHRpb25zJHN0ZWVyaW5nQ2xhbSA9PT0gdm9pZCAwID8gREVGQVVMVF9TVEVFUklOR19DTEFNUCA6IF9vcHRpb25zJHN0ZWVyaW5nQ2xhbSwKICAgICAgICAgIF9vcHRpb25zJHN0ZWVyaW5nSW5jciA9IG9wdGlvbnMuc3RlZXJpbmdJbmNyZW1lbnQsCiAgICAgICAgICBzdGVlcmluZ0luY3JlbWVudCA9IF9vcHRpb25zJHN0ZWVyaW5nSW5jciA9PT0gdm9pZCAwID8gREVGQVVMVF9TVEVFUklOR19JTkNSRU1FTlQgOiBfb3B0aW9ucyRzdGVlcmluZ0luY3IsCiAgICAgICAgICBfb3B0aW9ucyRtYXhFbmdpbmVGb3IgPSBvcHRpb25zLm1heEVuZ2luZUZvcmNlLAogICAgICAgICAgbWF4RW5naW5lRm9yY2UgPSBfb3B0aW9ucyRtYXhFbmdpbmVGb3IgPT09IHZvaWQgMCA/IERFRkFVTFRfTUFYX0VOR0lORV9GT1JDRSA6IF9vcHRpb25zJG1heEVuZ2luZUZvciwKICAgICAgICAgIF9vcHRpb25zJG1heEJyZWFraW5nRiA9IG9wdGlvbnMubWF4QnJlYWtpbmdGb3JjZSwKICAgICAgICAgIG1heEJyZWFraW5nRm9yY2UgPSBfb3B0aW9ucyRtYXhCcmVha2luZ0YgPT09IHZvaWQgMCA/IERFRkFVTFRfTUFYX0JSRUFLSU5HX0ZPUkNFIDogX29wdGlvbnMkbWF4QnJlYWtpbmdGOwoKICAgICAgaWYgKHN0YXRlLmFjY2VsZXJhdGlvbikgewogICAgICAgIGlmIChzcGVlZCA8IC0xKSBicmVha2luZ0ZvcmNlID0gbWF4QnJlYWtpbmdGb3JjZTtlbHNlIGVuZ2luZUZvcmNlID0gbWF4RW5naW5lRm9yY2U7CiAgICAgIH0KCiAgICAgIGlmIChzdGF0ZS5icmFraW5nKSB7CiAgICAgICAgaWYgKHNwZWVkID4gMSkgYnJlYWtpbmdGb3JjZSA9IG1heEJyZWFraW5nRm9yY2U7ZWxzZSBlbmdpbmVGb3JjZSA9IC1tYXhFbmdpbmVGb3JjZSAvIDI7CiAgICAgIH0KCiAgICAgIGlmIChzdGF0ZS5sZWZ0KSB7CiAgICAgICAgaWYgKHN0YXRlLnZlaGljbGVTdGVlcmluZyA8IHN0ZWVyaW5nQ2xhbXApIHN0YXRlLnZlaGljbGVTdGVlcmluZyArPSBzdGVlcmluZ0luY3JlbWVudDsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoc3RhdGUucmlnaHQpIHsKICAgICAgICAgIGlmIChzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPiAtc3RlZXJpbmdDbGFtcCkgc3RhdGUudmVoaWNsZVN0ZWVyaW5nIC09IHN0ZWVyaW5nSW5jcmVtZW50OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoc3RhdGUudmVoaWNsZVN0ZWVyaW5nIDwgLXN0ZWVyaW5nSW5jcmVtZW50KSBzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgKz0gc3RlZXJpbmdJbmNyZW1lbnQ7ZWxzZSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPiBzdGVlcmluZ0luY3JlbWVudCkgc3RhdGUudmVoaWNsZVN0ZWVyaW5nIC09IHN0ZWVyaW5nSW5jcmVtZW50O2Vsc2UgewogICAgICAgICAgICAgIHN0YXRlLnZlaGljbGVTdGVlcmluZyA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIHZlaGljbGUuYXBwbHlFbmdpbmVGb3JjZShlbmdpbmVGb3JjZSwgQkFDS19MRUZUKTsKICAgICAgdmVoaWNsZS5hcHBseUVuZ2luZUZvcmNlKGVuZ2luZUZvcmNlLCBCQUNLX1JJR0hUKTsKICAgICAgdmVoaWNsZS5zZXRCcmFrZShicmVha2luZ0ZvcmNlIC8gMiwgRlJPTlRfTEVGVCk7CiAgICAgIHZlaGljbGUuc2V0QnJha2UoYnJlYWtpbmdGb3JjZSAvIDIsIEZST05UX1JJR0hUKTsKICAgICAgdmVoaWNsZS5zZXRCcmFrZShicmVha2luZ0ZvcmNlLCBCQUNLX0xFRlQpOwogICAgICB2ZWhpY2xlLnNldEJyYWtlKGJyZWFraW5nRm9yY2UsIEJBQ0tfUklHSFQpOwogICAgICB2ZWhpY2xlLnNldFN0ZWVyaW5nVmFsdWUoc3RhdGUudmVoaWNsZVN0ZWVyaW5nLCBGUk9OVF9MRUZUKTsKICAgICAgdmVoaWNsZS5zZXRTdGVlcmluZ1ZhbHVlKHN0YXRlLnZlaGljbGVTdGVlcmluZywgRlJPTlRfUklHSFQpOwogICAgICB2YXIgdG0sIHAsIHEsIGk7CiAgICAgIHZhciBuID0gdmVoaWNsZS5nZXROdW1XaGVlbHMoKTsKCiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICB2ZWhpY2xlLnVwZGF0ZVdoZWVsVHJhbnNmb3JtKGksIHRydWUpOwogICAgICAgIHRtID0gdmVoaWNsZS5nZXRXaGVlbFRyYW5zZm9ybVdTKGkpOwogICAgICAgIHAgPSB0bS5nZXRPcmlnaW4oKTsKICAgICAgICBxID0gdG0uZ2V0Um90YXRpb24oKTsKICAgICAgICB2YXIgd2hlZWxVVUlEID0gd2hlZWxzW2ldOwogICAgICAgIGRpc3BhdGNoZXIkMS5zZW5kQm9keVVwZGF0ZSh3aGVlbFVVSUQsIHAsIHEsIGR0KTsKICAgICAgfQoKICAgICAgdG0gPSB2ZWhpY2xlLmdldENoYXNzaXNXb3JsZFRyYW5zZm9ybSgpOwogICAgICBwID0gdG0uZ2V0T3JpZ2luKCk7CiAgICAgIHEgPSB0bS5nZXRSb3RhdGlvbigpOwogICAgICB2YXIgZGlyZWN0aW9uID0gdmVoaWNsZS5nZXRGb3J3YXJkVmVjdG9yKCk7CiAgICAgIGRpc3BhdGNoZXIkMS5zZW5kRGlzcGF0Y2hFdmVudCh1dWlkLCBQSFlTSUNTX0VWRU5UUy5WRUhJQ0xFLkRJUkVDVElPTiwgewogICAgICAgIGRpcmVjdGlvbjogewogICAgICAgICAgeDogZGlyZWN0aW9uLngoKSwKICAgICAgICAgIHk6IGRpcmVjdGlvbi55KCksCiAgICAgICAgICB6OiBkaXJlY3Rpb24ueigpCiAgICAgICAgfQogICAgICB9KTsKICAgICAgZGlzcGF0Y2hlciQxLnNlbmRCb2R5VXBkYXRlKHV1aWQsIHAsIHEsIGR0KTsKICAgICAgd29ybGQudXBkYXRlQm9keVN0YXRlKHV1aWQsIHN0YXRlKTsKICAgIH07CgogICAgdmFyIGNyZWF0ZUdob3N0Q29sbGlkZXIgPSBmdW5jdGlvbiBjcmVhdGVHaG9zdENvbGxpZGVyKHJhZGl1cywgcG9zaXRpb24pIHsKICAgICAgdmFyIGdob3N0Q29sbGlkZXIgPSBuZXcgQW1tby5idEdob3N0T2JqZWN0KCk7CiAgICAgIHZhciB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpOwogICAgICBnaG9zdENvbGxpZGVyLnNldENvbGxpc2lvblNoYXBlKG5ldyBBbW1vLmJ0U3BoZXJlU2hhcGUocmFkaXVzKSk7CiAgICAgIGdob3N0Q29sbGlkZXIuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgdHJhbnNmb3JtLnNldElkZW50aXR5KCk7CiAgICAgIHRyYW5zZm9ybS5zZXRPcmlnaW4ocG9zaXRpb24pOwogICAgICB0cmFuc2Zvcm0uc2V0Um90YXRpb24obmV3IEFtbW8uYnRRdWF0ZXJuaW9uKDAsIDAsIDAsIDEpKTsKICAgICAgZ2hvc3RDb2xsaWRlci5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICByZXR1cm4gewogICAgICAgIGdob3N0Q29sbGlkZXI6IGdob3N0Q29sbGlkZXIsCiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm0KICAgICAgfTsKICAgIH07CiAgICB2YXIgZm9yRWFjaEdob3N0Q29sbGlzaW9uID0gZnVuY3Rpb24gZm9yRWFjaEdob3N0Q29sbGlzaW9uKGdob3N0Q29sbGlkZXIpIHsKICAgICAgdmFyIGZvckVhY2hDYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKCkge307CiAgICAgIHZhciBjb2xsaXNpb25zID0gZ2hvc3RDb2xsaWRlci5nZXROdW1PdmVybGFwcGluZ09iamVjdHMoKTsKCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sbGlzaW9uczsgaSsrKSB7CiAgICAgICAgdmFyIG9iamVjdCA9IEFtbW8uY2FzdE9iamVjdChnaG9zdENvbGxpZGVyLmdldE92ZXJsYXBwaW5nT2JqZWN0KGkpLCBBbW1vLmJ0UmlnaWRCb2R5KTsKICAgICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgICBvYmplY3QuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgICBmb3JFYWNoQ2FsbGJhY2sob2JqZWN0LCB0cmFuc2Zvcm0sIGkpOwogICAgICAgIEFtbW8uZGVzdHJveSh0cmFuc2Zvcm0pOwogICAgICB9CiAgICB9OwogICAgdmFyIGdldEV4cGxvc2lvblBvc2l0aW9uID0gZnVuY3Rpb24gZ2V0RXhwbG9zaW9uUG9zaXRpb24odXVpZCwgcG9zaXRpb24pIHsKICAgICAgdmFyIGV4cGxvc2lvblBvc2l0aW9uID0gcG9zaXRpb247CgogICAgICBpZiAoIWV4cGxvc2lvblBvc2l0aW9uKSB7CiAgICAgICAgdmFyIF93b3JsZCRnZXRFbGVtZW50ID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKSwKICAgICAgICAgICAgYm9keSA9IF93b3JsZCRnZXRFbGVtZW50LmJvZHk7CgogICAgICAgIHZhciBtb3Rpb25TdGF0ZSA9IGJvZHkuZ2V0TW90aW9uU3RhdGUoKTsKICAgICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgICBtb3Rpb25TdGF0ZS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICAgIGV4cGxvc2lvblBvc2l0aW9uID0gdHJhbnNmb3JtLmdldE9yaWdpbigpOwogICAgICB9CgogICAgICByZXR1cm4gZXhwbG9zaW9uUG9zaXRpb247CiAgICB9OwogICAgdmFyIGdldEV4cGxvc2lvbkltcHVsc2UgPSBmdW5jdGlvbiBnZXRFeHBsb3Npb25JbXB1bHNlKHBvc2l0aW9uLCBleHBsb3Npb25Qb3NpdGlvbiwgc3RyZW5ndGgpIHsKICAgICAgdmFyIGRpc3RhbmNlID0gcG9zaXRpb24ub3Bfc3ViKGV4cGxvc2lvblBvc2l0aW9uKTsKICAgICAgZGlzdGFuY2Uubm9ybWFsaXplKCk7CiAgICAgIHZhciBpbXB1bHNlID0gZGlzdGFuY2Uub3BfbXVsKHN0cmVuZ3RoKTsKICAgICAgaW1wdWxzZS5zZXRZKGltcHVsc2UueSgpICsgc3RyZW5ndGgpOwogICAgICByZXR1cm4gaW1wdWxzZTsKICAgIH07CiAgICB2YXIgY3JlYXRlRXhwbG9zaW9uID0gZnVuY3Rpb24gY3JlYXRlRXhwbG9zaW9uKF9yZWYpIHsKICAgICAgdmFyIHV1aWQgPSBfcmVmLnV1aWQsCiAgICAgICAgICBwb3NpdGlvbiA9IF9yZWYucG9zaXRpb24sCiAgICAgICAgICBfcmVmJHJhZGl1cyA9IF9yZWYucmFkaXVzLAogICAgICAgICAgcmFkaXVzID0gX3JlZiRyYWRpdXMgPT09IHZvaWQgMCA/IEVYUExPU0lPTl9TSVpFUy5TTUFMTCA6IF9yZWYkcmFkaXVzLAogICAgICAgICAgX3JlZiRzdHJlbmd0aCA9IF9yZWYuc3RyZW5ndGgsCiAgICAgICAgICBzdHJlbmd0aCA9IF9yZWYkc3RyZW5ndGggPT09IHZvaWQgMCA/IEVYUExPU0lPTl9TVFJFTkdUSFMuTUVESVVNIDogX3JlZiRzdHJlbmd0aDsKCiAgICAgIHRyeSB7CiAgICAgICAgdmFyIGV4cGxvc2lvblBvc2l0aW9uID0gZ2V0RXhwbG9zaW9uUG9zaXRpb24odXVpZCwgcG9zaXRpb24pOwoKICAgICAgICB2YXIgX2NyZWF0ZUdob3N0Q29sbGlkZXIgPSBjcmVhdGVHaG9zdENvbGxpZGVyKHJhZGl1cywgZXhwbG9zaW9uUG9zaXRpb24pLAogICAgICAgICAgICBnaG9zdENvbGxpZGVyID0gX2NyZWF0ZUdob3N0Q29sbGlkZXIuZ2hvc3RDb2xsaWRlciwKICAgICAgICAgICAgdHJhbnNmb3JtID0gX2NyZWF0ZUdob3N0Q29sbGlkZXIudHJhbnNmb3JtOwoKICAgICAgICB3b3JsZC5hZGRDb2xsaXNpb25PYmplY3QoZ2hvc3RDb2xsaWRlcik7CiAgICAgICAgZm9yRWFjaEdob3N0Q29sbGlzaW9uKGdob3N0Q29sbGlkZXIsIGZ1bmN0aW9uIChvYmplY3QsIG9iamVjdFRyYW5zZm9ybSkgewogICAgICAgICAgdmFyIG9yaWdpbiA9IG9iamVjdFRyYW5zZm9ybS5nZXRPcmlnaW4oKTsKICAgICAgICAgIG9iamVjdC5hY3RpdmF0ZSh0cnVlKTsKICAgICAgICAgIG9iamVjdC5hcHBseUNlbnRyYWxJbXB1bHNlKGdldEV4cGxvc2lvbkltcHVsc2Uob3JpZ2luLCBleHBsb3Npb25Qb3NpdGlvbiwgc3RyZW5ndGgpKTsKICAgICAgICB9KTsKICAgICAgICB3b3JsZC5nZXREeW5hbWljc1dvcmxkKCkucmVtb3ZlQ29sbGlzaW9uT2JqZWN0KGdob3N0Q29sbGlkZXIpOwogICAgICAgIEFtbW8uZGVzdHJveShnaG9zdENvbGxpZGVyKTsKICAgICAgICBBbW1vLmRlc3Ryb3kodHJhbnNmb3JtKTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIGNvbnNvbGUubG9nKGUpOwogICAgICB9CiAgICB9OwoKICAgIHZhciBoYW5kbGVMb2FkRXZlbnQgPSBmdW5jdGlvbiBoYW5kbGVMb2FkRXZlbnQob3B0aW9ucykgewogICAgICByZXR1cm4gZnVuY3Rpb24gKEFtbW8pIHsKICAgICAgICBzZWxmLkFtbW8gPSBBbW1vOwoKICAgICAgICBvbm1lc3NhZ2UgPSBmdW5jdGlvbiBvbm1lc3NhZ2UoX3JlZikgewogICAgICAgICAgdmFyIGRhdGEgPSBfcmVmLmRhdGE7CgogICAgICAgICAgc3dpdGNoIChkYXRhLmV2ZW50KSB7CiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuQURELkJPWDoKICAgICAgICAgICAgICBhZGRCb3goZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkFERC5TUEhFUkU6CiAgICAgICAgICAgICAgYWRkU3BoZXJlKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5BREQuVkVISUNMRToKICAgICAgICAgICAgICBhZGRWZWhpY2xlKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5BREQuTU9ERUw6CiAgICAgICAgICAgICAgYWRkTW9kZWwoZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkFERC5QTEFZRVI6CiAgICAgICAgICAgICAgYWRkUGxheWVyKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5FTEVNRU5ULlNFVC5MSU5FQVJfVkVMT0NJVFk6CiAgICAgICAgICAgICAgc2V0TGluZWFyVmVsb2NpdHkoZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuU0VULlBPU0lUSU9OOgogICAgICAgICAgICAgIHNldFBvc2l0aW9uKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5WRUhJQ0xFLlNFVC5QT1NJVElPTjoKICAgICAgICAgICAgICBzZXRWZWhpY2xlUG9zaXRpb24oZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLlZFSElDTEUuU0VULlFVQVRFUk5JT046CiAgICAgICAgICAgICAgc2V0VmVoaWNsZVF1YXRlcm5pb24oZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLlZFSElDTEUuUkVTRVQ6CiAgICAgICAgICAgICAgcmVzZXRWZWhpY2xlKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5FTEVNRU5ULkFQUExZLklNUFVMU0U6CiAgICAgICAgICAgICAgYXBwbHlJbXB1c2UoZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuVVBEQVRFOgogICAgICAgICAgICAgIHdvcmxkLnVwZGF0ZUJvZHlTdGF0ZShkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5ESVNQT1NFOgogICAgICAgICAgICAgIHdvcmxkLmRpc3Bvc2VCb2R5KGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5FRkZFQ1RTLkVYUExPU0lPTjoKICAgICAgICAgICAgICBjcmVhdGVFeHBsb3Npb24oZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLlRFUk1JTkFURToKICAgICAgICAgICAgICB3b3JsZC50ZXJtaW5hdGUoKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICB3b3JsZC5pbml0KG9wdGlvbnMpOwogICAgICAgIGRpc3BhdGNoZXIkMS5zZW5kUmVhZHlFdmVudCgpOwogICAgICAgIHdvcmxkLnNpbXVsYXRlKCk7CiAgICAgIH07CiAgICB9OwoKICAgIHZhciBsb2FkQW1tbyA9IGZ1bmN0aW9uIGxvYWRBbW1vKG9wdGlvbnMpIHsKICAgICAgdmFyIHNjcmlwdFVybCA9IG9wdGlvbnMuaG9zdCArICcvJyArIChvcHRpb25zLnBhdGggfHwgTElCUkFSWV9OQU1FKTsKICAgICAgaW1wb3J0U2NyaXB0cyhzY3JpcHRVcmwpOwogICAgICBBbW1vKCkudGhlbihoYW5kbGVMb2FkRXZlbnQob3B0aW9ucykpOwogICAgfTsKCiAgICBvbm1lc3NhZ2UgPSBmdW5jdGlvbiBvbm1lc3NhZ2UoX3JlZjIpIHsKICAgICAgdmFyIGRhdGEgPSBfcmVmMi5kYXRhOwoKICAgICAgc3dpdGNoIChkYXRhLmV2ZW50KSB7CiAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5MT0FELkFNTU86CiAgICAgICAgICBsb2FkQW1tbyhkYXRhKTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9OwoKfSgpKTsKCg==', 'data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIndvcmtlcjovL3dlYi13b3JrZXIvcGh5c2ljcy9jb25zdGFudHMuanMiLCJ3b3JrZXI6Ly93ZWItd29ya2VyL3BoeXNpY3MvbWVzc2FnZXMuanMiLCJ3b3JrZXI6Ly93ZWItd29ya2VyL3BoeXNpY3Mvd29ya2VyL2xpYi9kaXNwYXRjaGVyLmpzIiwid29ya2VyOi8vd2ViLXdvcmtlci9waHlzaWNzL3dvcmtlci9saWIvbWF0aC5qcyIsIndvcmtlcjovL3dlYi13b3JrZXIvcGh5c2ljcy93b3JrZXIvZWxlbWVudHMuanMiLCJ3b3JrZXI6Ly93ZWItd29ya2VyL3BoeXNpY3Mvd29ya2VyL3BsYXllci5qcyIsIndvcmtlcjovL3dlYi13b3JrZXIvcGh5c2ljcy93b3JrZXIvd29ybGQuanMiLCJ3b3JrZXI6Ly93ZWItd29ya2VyL3BoeXNpY3Mvd29ya2VyL3ZlaGljbGVzLmpzIiwid29ya2VyOi8vd2ViLXdvcmtlci9waHlzaWNzL3dvcmtlci9lZmZlY3RzLmpzIiwid29ya2VyOi8vd2ViLXdvcmtlci9waHlzaWNzL3dvcmtlci9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgTElCUkFSWV9OQU1FID0gJ2FtbW8uanMnO1xuXG5leHBvcnQgY29uc3QgVFlQRVMgPSB7XG4gICAgQk9YOiAnQk9YJyxcbiAgICBTUEhFUkU6ICdTUEhFUkUnLFxuICAgIFZFSElDTEU6ICdWRUhJQ0xFJyxcbiAgICBNRVNIOiAnTUVTSCcsXG4gICAgUExBWUVSOiAnUExBWUVSJ1xufTtcblxuZXhwb3J0IGNvbnN0IENPTExJREVSX1RZUEVTID0ge1xuICAgIEJPWDogJ0JPWCcsXG4gICAgVkVISUNMRTogJ1ZFSElDTEUnLFxuICAgIFBMQVlFUjogJ1BMQVlFUicsXG4gICAgU1BIRVJFOiAnU1BIRVJFJ1xufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVkVISUNMRV9TVEFURSA9IHtcbiAgICB2ZWhpY2xlU3RlZXJpbmc6IDAsXG4gICAgYWNjZWxlcmF0aW9uOiBmYWxzZSxcbiAgICBicmVha2luZzogZmFsc2UsXG4gICAgcmlnaHQ6IGZhbHNlLFxuICAgIGxlZnQ6IGZhbHNlXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9SSUdJREJPRFlfU1RBVEUgPSB7XG4gICAgdmVsb2NpdHk6IHsgeDogMCwgeTogMCwgejogMCB9LFxuICAgIG1vdmVtZW50OiB7XG4gICAgICAgIGZvcndhcmQ6IGZhbHNlLFxuICAgICAgICBiYWNrd2FyZHM6IGZhbHNlLFxuICAgICAgICBsZWZ0OiBmYWxzZSxcbiAgICAgICAgcmlnaHQ6IGZhbHNlXG4gICAgfSxcbiAgICBkaXJlY3Rpb246IHtcbiAgICAgICAgeDogMCxcbiAgICAgICAgeTogMCxcbiAgICAgICAgejogMFxuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NDQUxFID0geyB4OiAxLCB5OiAxLCB6OiAxIH07XG5leHBvcnQgY29uc3QgREVGQVVMVF9RVUFURVJOSU9OID0geyB4OiAwLCB5OiAwLCB6OiAwLCB3OiAxIH07XG5leHBvcnQgY29uc3QgREVGQVVMVF9QT1NJVElPTiA9IHsgeDogMCwgeTogMCwgejogMCB9O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTElORUFSX1ZFTE9DSVRZID0geyB4OiAwLCB5OiAwLCB6OiAwIH07XG5leHBvcnQgY29uc3QgREVGQVVMVF9JTVBVTFNFID0geyB4OiAwLCB5OiAwLCB6OiAwIH07XG5cbmV4cG9ydCBjb25zdCBESVNBQkxFX0RFQUNUSVZBVElPTiA9IDQ7XG5leHBvcnQgY29uc3QgR1JBVklUWSA9IHsgeDogMCwgeTogLTEwLCB6OiAwIH07XG5cbmV4cG9ydCBjb25zdCBGUk9OVF9MRUZUID0gMDtcbmV4cG9ydCBjb25zdCBGUk9OVF9SSUdIVCA9IDE7XG5leHBvcnQgY29uc3QgQkFDS19MRUZUID0gMjtcbmV4cG9ydCBjb25zdCBCQUNLX1JJR0hUID0gMztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1RFRVJJTkdfSU5DUkVNRU5UID0gLjA0O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1RFRVJJTkdfQ0xBTVAgPSAuNTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX01BWF9FTkdJTkVfRk9SQ0UgPSAyMDAwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFYX0JSRUFLSU5HX0ZPUkNFID0gMTAwO1xuXG5leHBvcnQgY29uc3QgRVhQTE9TSU9OX1NJWkVTID0ge1xuICAgIFNNQUxMOiA0LFxuICAgIE1FRElVTTogNixcbiAgICBMQVJHRTogOCxcbiAgICBNQVNTSVZFOiAxMlxufTtcblxuZXhwb3J0IGNvbnN0IEVYUExPU0lPTl9TVFJFTkdUSFMgPSB7XG4gICAgVkVSWV9XRUFLOiAyLFxuICAgIFdFQUs6IDQsXG4gICAgTUVESVVNOiA4LFxuICAgIExBUkdFOiAxNixcbiAgICBNQVNTSVZFOiAzMixcbiAgICBPS19OTzogNjRcbn07IiwiZXhwb3J0IGNvbnN0IFBIWVNJQ1NfRVZFTlRTID0ge1xuICAgIERJU1BBVENIOiAncGh5c2ljczpkaXNwYXRjaCcsXG4gICAgVEVSTUlOQVRFOiAncGh5c2ljczp0ZXJtaW5hdGUnLFxuICAgIExPQUQ6IHtcbiAgICAgICAgQU1NTzogJ3BoeXNpY3M6bG9hZDphbW1vJyxcbiAgICB9LFxuICAgIFJFQURZOiAncGh5c2ljczpyZWFkeScsXG4gICAgSU5JVDogJ3BoeXNpY3M6aW5pdCcsXG4gICAgVVBEQVRFOiAncGh5c2ljczp1cGRhdGUnLFxuICAgIFxuICAgIEFERDoge1xuICAgICAgICBCT1g6ICdwaHlzaWNzOmFkZDpib3gnLFxuICAgICAgICBWRUhJQ0xFOiAncGh5c2ljczphZGQ6dmVoaWNsZScsXG4gICAgICAgIE1PREVMOiAncGh5c2ljczphZGQ6bW9kZWwnLFxuICAgICAgICBQTEFZRVI6ICdwaHlzaWNzOmFkZDpwbGF5ZXInLFxuICAgICAgICBTUEhFUkU6ICdwaHlzaWNzOmFkZDpzcGhlcmUnLFxuICAgIH0sXG5cbiAgICBFTEVNRU5UOiB7XG4gICAgICAgIERJU1BPU0U6ICdwaHlzaWNzOmVsZW1lbnQ6ZGlzcG9zZScsXG4gICAgICAgIENPTExJU0lPTjogJ3BoeXNpY3M6ZWxlbWVudDpjb2xsaXNpb24nLFxuICAgICAgICBVUERBVEU6ICdwaHlzaWNzOmVsZW1lbnQ6dXBkYXRlJyxcbiAgICAgICAgQ1JFQVRFRDogJ3BoeXNpY3M6ZWxlbWVudDpjcmVhdGVkJyxcblxuICAgICAgICBTRVQ6IHtcbiAgICAgICAgICAgIFBPU0lUSU9OOiAncGh5c2ljczplbGVtZW50OnNldDpwb3NpdGlvbicsXG4gICAgICAgICAgICBRVUFURVJOSU9OOiAncGh5c2ljczplbGVtZW50OnNldDpxdWF0ZXJuaW9uJyxcbiAgICAgICAgICAgIExJTkVBUl9WRUxPQ0lUWTogJ3BoeXNpY3M6ZWxlbWVudDpzZXQ6bGluZWFyX3ZlbG9jaXR5J1xuICAgICAgICB9LFxuXG4gICAgICAgIEFQUExZOiB7XG4gICAgICAgICAgICBJTVBVTFNFOiAncGh5c2ljczplbGVtZW50OmFwcGx5OmltcHVsc2UnXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgVkVISUNMRToge1xuICAgICAgICBTRVQ6IHtcbiAgICAgICAgICAgIFBPU0lUSU9OOiAncGh5c2ljczp2ZWhpY2xlOnNldDpwb3NpdGlvbicsXG4gICAgICAgICAgICBRVUFURVJOSU9OOiAncGh5c2ljczp2ZWhpY2xlOnNldDpxdWF0ZXJuaW9uJ1xuICAgICAgICB9LFxuICAgICAgICBSRVNFVDogJ3BoeXNpY3M6dmVoaWNsZTpyZXNldCcsXG4gICAgICAgIFxuICAgICAgICBTUEVFRDogJ3BoeXNpY3M6dmVoaWNsZTpzcGVlZCcsXG4gICAgICAgIERJUkVDVElPTjogJ3BoeXNpY3M6dmVoaWNsZTpkaXJlY3Rpb24nXG4gICAgfSxcblxuICAgIEVGRkVDVFM6IHtcbiAgICAgICAgRVhQTE9TSU9OOiAncGh5c2ljczplZmZlY3RzOmV4cGxvc2lvbidcbiAgICB9XG59OyIsImltcG9ydCB7IFBIWVNJQ1NfRVZFTlRTIH0gZnJvbSAnLi4vLi4vbWVzc2FnZXMnO1xuXG5leHBvcnQgY2xhc3MgRGlzcGF0Y2hlciB7XG5cbiAgICBzZW5kUGh5c2ljc1VwZGF0ZSA9IGR0ID0+IHBvc3RNZXNzYWdlKHsgZXZlbnQ6IFBIWVNJQ1NfRVZFTlRTLlVQREFURSwgZHQgfSlcbiAgICBzZW5kUmVhZHlFdmVudCA9ICgpID0+IHBvc3RNZXNzYWdlKHsgZXZlbnQ6IFBIWVNJQ1NfRVZFTlRTLlJFQURZIH0pO1xuICAgIHNlbmRUZXJtaW5hdGVFdmVudCA9ICgpID0+IHBvc3RNZXNzYWdlKHsgZXZlbnQ6IFBIWVNJQ1NfRVZFTlRTLlRFUk1JTkFURSB9KTtcblxuICAgIHNlbmRCb2R5VXBkYXRlID0gKHV1aWQsIHBvc2l0aW9uLCByb3RhdGlvbiwgZHQpID0+IHBvc3RNZXNzYWdlKHtcbiAgICAgICAgZXZlbnQ6IFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuVVBEQVRFLFxuICAgICAgICB1dWlkLFxuICAgICAgICBwb3NpdGlvbjogeyB4OiBwb3NpdGlvbi54KCksIHk6IHBvc2l0aW9uLnkoKSwgejogcG9zaXRpb24ueigpIH0sXG4gICAgICAgIHF1YXRlcm5pb246IHsgeDogcm90YXRpb24ueCgpLCB5OiByb3RhdGlvbi55KCksIHo6IHJvdGF0aW9uLnooKSwgdzogcm90YXRpb24udygpIH0sXG4gICAgICAgIGR0XG4gICAgfSk7XG5cbiAgICBzZW5kRGlzcGF0Y2hFdmVudCA9ICh1dWlkLCBldmVudE5hbWUsIGV2ZW50RGF0YSkgPT4gcG9zdE1lc3NhZ2Uoe1xuICAgICAgICBldmVudDogUEhZU0lDU19FVkVOVFMuRElTUEFUQ0gsXG4gICAgICAgIHV1aWQsXG4gICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgZXZlbnREYXRhXG4gICAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBuZXcgRGlzcGF0Y2hlcigpOyIsImV4cG9ydCBjb25zdCBhcHBseU1hdHJpeDRUb1ZlY3RvcjMgPSAoeyB4ID0gMCwgeSA9IDAsIHogPSAwIH0sIG1hdHJpeCA9IFtdKSA9PiB7XG4gICAgY29uc3QgdyA9IDEgLyAoIG1hdHJpeFsgMyBdICogeCArIG1hdHJpeFsgNyBdICogeSArIG1hdHJpeFsgMTEgXSAqIHogKyBtYXRyaXhbIDE1IF0gKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIHg6ICggbWF0cml4WyAwIF0gKiB4ICsgbWF0cml4WyA0IF0gKiB5ICsgbWF0cml4WyA4IF0gKiB6ICsgbWF0cml4WyAxMiBdICkgKiB3LFxuICAgICAgICB5OiAoIG1hdHJpeFsgMSBdICogeCArIG1hdHJpeFsgNSBdICogeSArIG1hdHJpeFsgOSBdICogeiArIG1hdHJpeFsgMTMgXSApICogdyxcbiAgICAgICAgejogKCBtYXRyaXhbIDIgXSAqIHggKyBtYXRyaXhbIDYgXSAqIHkgKyBtYXRyaXhbIDEwIF0gKiB6ICsgbWF0cml4WyAxNCBdICkgKiB3LFxuICAgIH1cbn07IiwiaW1wb3J0IGRpc3BhdGNoZXIgZnJvbSAnLi9saWIvZGlzcGF0Y2hlcic7XG5pbXBvcnQgd29ybGQgZnJvbSAnLi93b3JsZCc7XG5cbmltcG9ydCB7XG4gICAgYXBwbHlNYXRyaXg0VG9WZWN0b3IzXG59IGZyb20gJy4vbGliL21hdGgnO1xuXG5pbXBvcnQge1xuICAgIERFRkFVTFRfUklHSURCT0RZX1NUQVRFLFxuICAgIFRZUEVTLFxuICAgIERFRkFVTFRfU0NBTEUsXG4gICAgRElTQUJMRV9ERUFDVElWQVRJT04sXG4gICAgREVGQVVMVF9MSU5FQVJfVkVMT0NJVFksXG4gICAgREVGQVVMVF9JTVBVTFNFXG59IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVSaWdpZEJvZHkgPSAoc2hhcGUsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICAgIHV1aWQsXG4gICAgICAgIHBvc2l0aW9uLFxuICAgICAgICBxdWF0ZXJuaW9uLFxuICAgICAgICBtYXNzLFxuICAgICAgICBmcmljdGlvbixcbiAgICAgICAgcmVzdGl0dXRpb24gPSAuOSxcbiAgICAgICAgZGFtcGluZyA9IHsgbGluZWFyOiAwLjIsIGFuZ3VsYXI6IDAuMiB9XG4gICAgfSA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpO1xuXG4gICAgdHJhbnNmb3JtLnNldElkZW50aXR5KCk7XG4gICAgdHJhbnNmb3JtLnNldE9yaWdpbihuZXcgQW1tby5idFZlY3RvcjMocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueikpO1xuICAgIHRyYW5zZm9ybS5zZXRSb3RhdGlvbihuZXcgQW1tby5idFF1YXRlcm5pb24ocXVhdGVybmlvbi54LCBxdWF0ZXJuaW9uLnksIHF1YXRlcm5pb24ueiwgcXVhdGVybmlvbi53KSk7XG4gICAgY29uc3QgbW90aW9uU3RhdGUgPSBuZXcgQW1tby5idERlZmF1bHRNb3Rpb25TdGF0ZSh0cmFuc2Zvcm0pO1xuICAgIGNvbnN0IGxvY2FsSW5lcnRpYSA9IG5ldyBBbW1vLmJ0VmVjdG9yMygwLCAwLCAwKTtcbiAgICBzaGFwZS5jYWxjdWxhdGVMb2NhbEluZXJ0aWEobWFzcywgbG9jYWxJbmVydGlhKTtcblxuICAgIGNvbnN0IHJiSW5mbyA9IG5ldyBBbW1vLmJ0UmlnaWRCb2R5Q29uc3RydWN0aW9uSW5mbyhtYXNzLCBtb3Rpb25TdGF0ZSwgc2hhcGUsIGxvY2FsSW5lcnRpYSk7XG4gICAgY29uc3QgYm9keSA9IG5ldyBBbW1vLmJ0UmlnaWRCb2R5KHJiSW5mbyk7XG5cbiAgICBcblxuICAgIGlmIChtYXNzID4gMCkge1xuICAgICAgICBib2R5LnNldEZyaWN0aW9uKGZyaWN0aW9uKTtcbiAgICAgICAgYm9keS5zZXRSZXN0aXR1dGlvbihyZXN0aXR1dGlvbik7XG4gICAgICAgIGJvZHkuc2V0RGFtcGluZyhkYW1waW5nLmxpbmVhciwgZGFtcGluZy5hbmd1bGFyKTtcbiAgICAgICAgYm9keS5zZXRBY3RpdmF0aW9uU3RhdGUoRElTQUJMRV9ERUFDVElWQVRJT04pO1xuICAgIH1cblxuICAgIC8vIHN0b3JpbmcgdXVpZCBmb3IgZnV0dXJlIHJlZmVyZW5jZVxuICAgIGJvZHkudXVpZCA9IHV1aWQ7XG5cbiAgICB3b3JsZC5hZGRSaWdpZEJvZHkoYm9keSk7XG5cbiAgICByZXR1cm4gYm9keTtcbn1cblxuZXhwb3J0IGNvbnN0IGFkZE1vZGVsID0gKG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICAgIHV1aWQsXG4gICAgICAgIHZlcnRpY2VzLFxuICAgICAgICBtYXRyaWNlcyxcbiAgICAgICAgaW5kZXhlcyxcbiAgICAgICAgcG9zaXRpb24sXG4gICAgICAgIHF1YXRlcm5pb24sXG4gICAgICAgIG1hc3MgPSAwLFxuICAgICAgICBmcmljdGlvbiA9IDJcbiAgICB9ID0gb3B0aW9ucztcblxuICAgIGNvbnN0IHNjYWxlID0gREVGQVVMVF9TQ0FMRTtcblxuICAgIGNvbnN0IGJ0YSA9IG5ldyBBbW1vLmJ0VmVjdG9yMygpO1xuICAgIGNvbnN0IGJ0YiA9IG5ldyBBbW1vLmJ0VmVjdG9yMygpO1xuICAgIGNvbnN0IGJ0YyA9IG5ldyBBbW1vLmJ0VmVjdG9yMygpO1xuICAgIGNvbnN0IHRyaU1lc2ggPSBuZXcgQW1tby5idFRyaWFuZ2xlTWVzaCh0cnVlLCBmYWxzZSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZlcnRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB2ZXJ0aWNlc1tpXTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBpbmRleGVzW2ldID8gaW5kZXhlc1tpXSA6IG51bGw7XG4gICAgICAgIGNvbnN0IG1hdHJpeCA9IEFycmF5LmZyb20obWF0cmljZXNbaV0pO1xuXG4gICAgICAgIGlmIChpbmRleCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpbmRleC5sZW5ndGg7IGogKz0gMykge1xuICAgICAgICAgICAgY29uc3QgYWkgPSBpbmRleFtqXSAqIDM7XG4gICAgICAgICAgICBjb25zdCBiaSA9IGluZGV4W2ogKyAxXSAqIDM7XG4gICAgICAgICAgICBjb25zdCBjaSA9IGluZGV4W2ogKyAyXSAqIDM7XG5cbiAgICAgICAgICAgIGNvbnN0IHZhID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsgeDogY29tcG9uZW50c1thaV0sIHk6IGNvbXBvbmVudHNbYWkgKyAxXSwgejogY29tcG9uZW50c1thaSArIDJdIH0sIG1hdHJpeCk7XG4gICAgICAgICAgICBjb25zdCB2YiA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7IHg6IGNvbXBvbmVudHNbYmldLCB5OiBjb21wb25lbnRzW2JpICsgMV0sIHo6IGNvbXBvbmVudHNbYmkgKyAyXSB9LCBtYXRyaXgpO1xuICAgICAgICAgICAgY29uc3QgdmMgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoeyB4OiBjb21wb25lbnRzW2NpXSwgeTogY29tcG9uZW50c1tjaSArIDFdLCB6OiBjb21wb25lbnRzW2NpICsgMl0gfSwgbWF0cml4KTtcblxuICAgICAgICAgICAgYnRhLnNldFZhbHVlKHZhLngsIHZhLnksIHZhLnopO1xuICAgICAgICAgICAgYnRiLnNldFZhbHVlKHZiLngsIHZiLnksIHZiLnopO1xuICAgICAgICAgICAgYnRjLnNldFZhbHVlKHZjLngsIHZjLnksIHZjLnopO1xuICAgICAgICAgICAgdHJpTWVzaC5hZGRUcmlhbmdsZShidGEsIGJ0YiwgYnRjLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbXBvbmVudHMubGVuZ3RoOyBqICs9IDkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YSA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7IHg6IGNvbXBvbmVudHNbaiArIDBdLCB5OiBjb21wb25lbnRzW2ogKyAxXSwgejogY29tcG9uZW50c1tqICsgMl0gfSwgbWF0cml4KTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YiA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7IHg6IGNvbXBvbmVudHNbaiArIDNdLCB5OiBjb21wb25lbnRzW2ogKyA0XSwgejogY29tcG9uZW50c1tqICsgNV0gfSwgbWF0cml4KTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YyA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7IHg6IGNvbXBvbmVudHNbaiArIDZdLCB5OiBjb21wb25lbnRzW2ogKyA3XSwgejogY29tcG9uZW50c1tqICsgOF0gfSwgbWF0cml4KTtcblxuICAgICAgICAgICAgICAgIGJ0YS5zZXRWYWx1ZSh2YS54LCB2YS55LCB2YS56KTtcbiAgICAgICAgICAgICAgICBidGIuc2V0VmFsdWUodmIueCwgdmIueSwgdmIueik7XG4gICAgICAgICAgICAgICAgYnRjLnNldFZhbHVlKHZjLngsIHZjLnksIHZjLnopO1xuICAgICAgICAgICAgICAgIHRyaU1lc2guYWRkVHJpYW5nbGUoYnRhLCBidGIsIGJ0YywgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbG9jYWxTY2FsZSA9IG5ldyBBbW1vLmJ0VmVjdG9yMyhzY2FsZS54LCBzY2FsZS55LCBzY2FsZS56KTtcbiAgICB0cmlNZXNoLnNldFNjYWxpbmcobG9jYWxTY2FsZSk7XG4gICAgQW1tby5kZXN0cm95KGxvY2FsU2NhbGUpO1xuXG4gICAgY29uc3QgY29sbGlzaW9uU2hhcGUgPSBuZXcgQW1tby5idEJ2aFRyaWFuZ2xlTWVzaFNoYXBlKHRyaU1lc2gsIHRydWUsIHRydWUpO1xuICAgIGNvbGxpc2lvblNoYXBlLnJlc291cmNlcyA9IFt0cmlNZXNoXTtcblxuICAgIEFtbW8uZGVzdHJveShidGEpO1xuICAgIEFtbW8uZGVzdHJveShidGIpO1xuICAgIEFtbW8uZGVzdHJveShidGMpO1xuXG4gICAgY29uc3QgYm9keSA9IGNyZWF0ZVJpZ2lkQm9keShjb2xsaXNpb25TaGFwZSwgeyB1dWlkLCBwb3NpdGlvbiwgcXVhdGVybmlvbiwgbWFzcywgZnJpY3Rpb24gfSk7XG4gICAgd29ybGQuc2V0Qm9keSh7IHV1aWQsIGJvZHksIHR5cGU6IFRZUEVTLk1FU0gsIHN0YXRlOiBERUZBVUxUX1JJR0lEQk9EWV9TVEFURSB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IGFkZEJveCA9IChkYXRhKSA9PiB7XG4gICAgY29uc3QgeyB1dWlkLCB3aWR0aCwgbGVuZ3RoLCBoZWlnaHQsIHBvc2l0aW9uLCBxdWF0ZXJuaW9uLCBtYXNzID0gMCwgZnJpY3Rpb24gPSAyIH0gPSBkYXRhO1xuXG4gICAgY29uc3QgZ2VvbWV0cnkgPSBuZXcgQW1tby5idEJveFNoYXBlKG5ldyBBbW1vLmJ0VmVjdG9yMyh3aWR0aCAqIDAuNSwgaGVpZ2h0ICogMC41LCBsZW5ndGggKiAwLjUpKTtcbiAgICBjb25zdCBib2R5ID0gY3JlYXRlUmlnaWRCb2R5KGdlb21ldHJ5LCB7IHV1aWQsIHBvc2l0aW9uLCBxdWF0ZXJuaW9uLCBtYXNzLCBmcmljdGlvbiB9KTtcblxuICAgIHdvcmxkLnNldEJvZHkoeyB1dWlkLCBib2R5LCB0eXBlOiBUWVBFUy5CT1gsIHN0YXRlOiBERUZBVUxUX1JJR0lEQk9EWV9TVEFURSB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRTcGhlcmUgPSBkYXRhID0+IHtcbiAgICBjb25zdCB7IHV1aWQsIHJhZGl1cywgcG9zaXRpb24sIHF1YXRlcm5pb24sIG1hc3MgPSAwLCBmcmljdGlvbiA9IDIgfSA9IGRhdGE7XG5cbiAgICBjb25zdCBnZW9tZXRyeSA9IG5ldyBBbW1vLmJ0U3BoZXJlU2hhcGUocmFkaXVzKTtcbiAgICBjb25zdCBib2R5ID0gY3JlYXRlUmlnaWRCb2R5KGdlb21ldHJ5LCB7IHV1aWQsIHBvc2l0aW9uLCBxdWF0ZXJuaW9uLCBtYXNzLCBmcmljdGlvbiB9KTtcblxuICAgIHdvcmxkLnNldEJvZHkoeyB1dWlkLCBib2R5LCB0eXBlOiBUWVBFUy5TUEhFUkUsIHN0YXRlOiBERUZBVUxUX1JJR0lEQk9EWV9TVEFURSB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRMaW5lYXJWZWxvY2l0eSA9IChkYXRhKSA9PiB7XG4gICAgY29uc3QgeyB1dWlkLCB2ZWxvY2l0eSA9IERFRkFVTFRfTElORUFSX1ZFTE9DSVRZIH0gPSBkYXRhO1xuICAgIGNvbnN0IHsgYm9keSB9ID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKTtcbiAgICBjb25zdCBtb3Rpb25TdGF0ZSA9IGJvZHkuZ2V0TW90aW9uU3RhdGUoKTtcblxuICAgIGlmIChtb3Rpb25TdGF0ZSkge1xuICAgICAgICBjb25zdCBsaW5lYXJWZWxvY2l0eSA9IG5ldyBBbW1vLmJ0VmVjdG9yMyh2ZWxvY2l0eS54LCB2ZWxvY2l0eS55LCB2ZWxvY2l0eS56KTtcbiAgICAgICAgYm9keS5zZXRMaW5lYXJWZWxvY2l0eShsaW5lYXJWZWxvY2l0eSk7XG4gICAgICAgIEFtbW8uZGVzdHJveShsaW5lYXJWZWxvY2l0eSk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHNldFBvc2l0aW9uID0gZGF0YSA9PiB7XG4gICAgY29uc3QgeyB1dWlkLCBwb3NpdGlvbiB9ID0gZGF0YTtcbiAgICBjb25zdCB7IGJvZHkgfSA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCk7XG5cbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpO1xuXG4gICAgYm9keS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuICAgIHRyYW5zZm9ybS5zZXRPcmlnaW4obmV3IEFtbW8uYnRWZWN0b3IzKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnogKSk7XG5cbiAgICBib2R5LnNldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7XG59XG5cbmV4cG9ydCBjb25zdCBhcHBseUltcHVzZSA9ICh7IHV1aWQsIGltcHVsc2UgPSBERUZBVUxUX0lNUFVMU0UgfSkgPT4ge1xuICAgIGNvbnN0IHsgYm9keSB9ID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKTtcbiAgICBjb25zdCBtb3Rpb25TdGF0ZSA9IGJvZHkuZ2V0TW90aW9uU3RhdGUoKTtcblxuICAgIGlmIChtb3Rpb25TdGF0ZSkge1xuICAgICAgICBjb25zdCBpbXB1bHNlVmVjdG9yID0gbmV3IEFtbW8uYnRWZWN0b3IzKGltcHVsc2UueCwgaW1wdWxzZS55LCBpbXB1bHNlLnopO1xuICAgICAgICBib2R5LmFwcGx5Q2VudHJhbEltcHVsc2UoaW1wdWxzZVZlY3Rvcik7XG4gICAgICAgIEFtbW8uZGVzdHJveShpbXB1bHNlVmVjdG9yKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVFbGVtZW50VXBkYXRlID0gKHsgYm9keSwgdXVpZCwgc3RhdGUgPSBERUZBVUxUX1JJR0lEQk9EWV9TVEFURSB9LCBkdCkgPT4ge1xuICAgIGNvbnN0IG1vdGlvblN0YXRlID0gYm9keS5nZXRNb3Rpb25TdGF0ZSgpO1xuXG4gICAgaWYgKG1vdGlvblN0YXRlKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7XG5cbiAgICAgICAgbW90aW9uU3RhdGUuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcbiAgICAgICAgbGV0IG9yaWdpbiA9IHRyYW5zZm9ybS5nZXRPcmlnaW4oKTtcbiAgICAgICAgbGV0IHJvdGF0aW9uID0gdHJhbnNmb3JtLmdldFJvdGF0aW9uKCk7XG5cbiAgICAgICAgZGlzcGF0Y2hlci5zZW5kQm9keVVwZGF0ZSh1dWlkLCBvcmlnaW4sIHJvdGF0aW9uLCBkdCk7XG4gICAgICAgIEFtbW8uZGVzdHJveSh0cmFuc2Zvcm0pO1xuICAgIH1cbn0iLCJpbXBvcnQgeyBjcmVhdGVSaWdpZEJvZHkgfSBmcm9tICcuL2VsZW1lbnRzJztcbmltcG9ydCB3b3JsZCBmcm9tICcuL3dvcmxkJztcblxuaW1wb3J0IHtcbiAgICBUWVBFUyxcbiAgICBERUZBVUxUX1JJR0lEQk9EWV9TVEFURVxufSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5leHBvcnQgY29uc3QgYWRkUGxheWVyID0gKGRhdGEpID0+IHtcbiAgICBjb25zdCB7IHV1aWQsIHdpZHRoLCBoZWlnaHQsIHBvc2l0aW9uLCBxdWF0ZXJuaW9uLCBtYXNzLCBmcmljdGlvbiB9ID0gZGF0YTtcblxuICAgIGNvbnN0IGNhcHN1bGUgPSBuZXcgQW1tby5idENhcHN1bGVTaGFwZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICBjb25zdCBib2R5ID0gY3JlYXRlUmlnaWRCb2R5KGNhcHN1bGUsIHsgdXVpZCwgcG9zaXRpb24sIHF1YXRlcm5pb24sIG1hc3MsIGZyaWN0aW9uIH0pO1xuXG4gICAgLy8gZGlzYWJsaWluZyByb3RhdGlvbiBmb3IgY29sbGlzaW9uc1xuICAgIGJvZHkuc2V0QW5ndWxhckZhY3RvcigwKTtcblxuICAgIHdvcmxkLmFkZFJpZ2lkQm9keShib2R5KTtcbiAgICB3b3JsZC5zZXRCb2R5KHsgdXVpZCwgYm9keSwgdHlwZTogVFlQRVMuUExBWUVSLCBzdGF0ZTogREVGQVVMVF9SSUdJREJPRFlfU1RBVEUgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgaGFuZGxlUGxheWVyVXBkYXRlID0gKHsgYm9keSwgdXVpZCwgc3RhdGUgPSBERUZBVUxUX1JJR0lEQk9EWV9TVEFURSB9LCBkdCkgPT4ge1xuICAgIGNvbnN0IHsgbW92ZW1lbnQsIGRpcmVjdGlvbiwgY2FtZXJhRGlyZWN0aW9uLCBxdWF0ZXJuaW9uLCBwb3NpdGlvbiB9ID0gc3RhdGU7XG5cbiAgICBjb25zdCBNQVhfU1BFRUQgPSAxO1xuICAgIGNvbnN0IHdhbGtWZWxvY2l0eSA9IC4xO1xuXG4gICAgY29uc3QgbW90aW9uU3RhdGUgPSBib2R5LmdldE1vdGlvblN0YXRlKCk7XG5cbiAgICBpZiAobW90aW9uU3RhdGUpIHtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTtcbiAgICAgICAgbW90aW9uU3RhdGUuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcblxuICAgICAgICBjb25zdCBsaW5lYXJWZWxvY2l0eSA9IGJvZHkuZ2V0TGluZWFyVmVsb2NpdHkoKTtcbiAgICAgICAgY29uc3Qgc3BlZWQgPSBsaW5lYXJWZWxvY2l0eS5sZW5ndGgoKTtcblxuICAgICAgICBjb25zdCBmb3J3YXJkRGlyID0gdHJhbnNmb3JtLmdldEJhc2lzKCkuZ2V0Um93KDIpO1xuICAgICAgICBmb3J3YXJkRGlyLm5vcm1hbGl6ZSgpO1xuICAgICAgICBjb25zdCB3YWxrRGlyZWN0aW9uID0gbmV3IEFtbW8uYnRWZWN0b3IzKDAuMCwgMC4wLCAwLjApO1xuXG4gICAgICAgIGNvbnN0IHdhbGtTcGVlZCA9IHdhbGtWZWxvY2l0eSAqIGR0O1xuXG4gICAgICAgIGlmIChtb3ZlbWVudC5mb3J3YXJkKSB7XG4gICAgICAgICAgICB3YWxrRGlyZWN0aW9uLnNldFgoIHdhbGtEaXJlY3Rpb24ueCgpICsgZm9yd2FyZERpci54KCkpO1xuICAgICAgICAgICAgLy93YWxrRGlyZWN0aW9uLnNldFkoIHdhbGtEaXJlY3Rpb24ueSgpICsgZm9yd2FyZERpci55KCkpO1xuICAgICAgICAgICAgd2Fsa0RpcmVjdGlvbi5zZXRaKCB3YWxrRGlyZWN0aW9uLnooKSArIGZvcndhcmREaXIueigpKTtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICBpZiAobW92ZW1lbnQuYmFja3dhcmRzKSB7XG4gICAgICAgICAgICB3YWxrRGlyZWN0aW9uLnNldFgoIHdhbGtEaXJlY3Rpb24ueCgpIC0gZm9yd2FyZERpci54KCkpO1xuICAgICAgICAgICAgLy93YWxrRGlyZWN0aW9uLnNldFkoIHdhbGtEaXJlY3Rpb24ueSgpIC0gZm9yd2FyZERpci55KCkpO1xuICAgICAgICAgICAgd2Fsa0RpcmVjdGlvbi5zZXRaKCB3YWxrRGlyZWN0aW9uLnooKSAtIGZvcndhcmREaXIueigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbW92ZW1lbnQuZm9yd2FyZCAmJiAhbW92ZW1lbnQuYmFja3dhcmRzKSB7XG4gICAgICAgICAgICBsaW5lYXJWZWxvY2l0eS5zZXRYKGxpbmVhclZlbG9jaXR5LngoKSAqIDAuMik7XG4gICAgICAgICAgICBsaW5lYXJWZWxvY2l0eS5zZXRaKGxpbmVhclZlbG9jaXR5LnooKSAqIDAuMik7XG4gICAgICAgIH0gZWxzZSBpZiAoc3BlZWQgPCBNQVhfU1BFRUQpIHtcbiAgICAgICAgICAgIGxpbmVhclZlbG9jaXR5LnNldFgobGluZWFyVmVsb2NpdHkueCgpICsgY2FtZXJhRGlyZWN0aW9uLnggKiB3YWxrU3BlZWQpO1xuICAgICAgICAgICAgbGluZWFyVmVsb2NpdHkuc2V0WihsaW5lYXJWZWxvY2l0eS56KCkgKyBjYW1lcmFEaXJlY3Rpb24ueiAqIHdhbGtTcGVlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBib2R5LnNldExpbmVhclZlbG9jaXR5KGxpbmVhclZlbG9jaXR5KTtcblxuICAgICAgICBib2R5LmdldE1vdGlvblN0YXRlKCkuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcbiAgICAgICAgYm9keS5zZXRDZW50ZXJPZk1hc3NUcmFuc2Zvcm0odHJhbnNmb3JtKTtcblxuICAgICAgICBsZXQgb3JpZ2luID0gdHJhbnNmb3JtLmdldE9yaWdpbigpO1xuICAgICAgICBsZXQgcm90YXRpb24gPSB0cmFuc2Zvcm0uZ2V0Um90YXRpb24oKTtcblxuICAgICAgICBkaXNwYXRjaGVyLnNlbmRCb2R5VXBkYXRlKHV1aWQsIG9yaWdpbiwgcm90YXRpb24sIGR0KTtcbiAgICB9XG59OyIsImltcG9ydCB7XG4gICAgR1JBVklUWSxcbiAgICBUWVBFU1xufSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5pbXBvcnQgeyBoYW5kbGVFbGVtZW50VXBkYXRlIH0gZnJvbSAnLi9lbGVtZW50cyc7XG5pbXBvcnQgeyBoYW5kbGVWZWhpY2xlVXBkYXRlIH0gZnJvbSAnLi92ZWhpY2xlcyc7XG5pbXBvcnQgeyBoYW5kbGVQbGF5ZXJVcGRhdGUgfSBmcm9tICcuL3BsYXllcic7XG5cbmltcG9ydCBkaXNwYXRjaGVyIGZyb20gJy4vbGliL2Rpc3BhdGNoZXInO1xuaW1wb3J0IHsgUEhZU0lDU19FVkVOVFMgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5cbmNsYXNzIENsb2NrIHtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnRpbWVzdGFtcCA9IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0RGVsdGEoKSB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICBpZiAodGhpcy50aW1lc3RhbXApIHtcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gdGltZSAtIHRoaXMudGltZXN0YW1wO1xuICAgICAgICAgICAgdGhpcy50aW1lc3RhbXAgPSB0aW1lO1xuXG4gICAgICAgICAgICByZXR1cm4gZGVsdGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRpbWVzdGFtcCA9IHRpbWU7XG5cbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFdvcmxkIHtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmVsZW1lbnRzID0ge307XG4gICAgICAgIHRoaXMuaW5pdGlhbGlzZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmNvbGxpc2lvbkNvbmZpZ3VyYXRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5icm9hZHBoYXNlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnNvbHZlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5keW5hbWljc1dvcmxkID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHRoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQgPSBudWxsO1xuICAgICAgICB0aGlzLmNsb2NrID0gbmV3IENsb2NrKCk7XG4gICAgfVxuXG4gICAgaW5pdCA9IChvcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZ3Jhdml0eSA9IEdSQVZJVFkgfSA9IG9wdGlvbnM7XG5cbiAgICAgICAgdGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uID0gbmV3IEFtbW8uYnREZWZhdWx0Q29sbGlzaW9uQ29uZmlndXJhdGlvbigpO1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIgPSBuZXcgQW1tby5idENvbGxpc2lvbkRpc3BhdGNoZXIodGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5icm9hZHBoYXNlID0gbmV3IEFtbW8uYnREYnZ0QnJvYWRwaGFzZSgpO1xuICAgICAgICB0aGlzLnNvbHZlciA9IG5ldyBBbW1vLmJ0U2VxdWVudGlhbEltcHVsc2VDb25zdHJhaW50U29sdmVyKCk7XG4gICAgICAgIHRoaXMuZHluYW1pY3NXb3JsZCA9IG5ldyBBbW1vLmJ0RGlzY3JldGVEeW5hbWljc1dvcmxkKHRoaXMuZGlzcGF0Y2hlciwgdGhpcy5icm9hZHBoYXNlLCB0aGlzLnNvbHZlciwgdGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5keW5hbWljc1dvcmxkLnNldEdyYXZpdHkobmV3IEFtbW8uYnRWZWN0b3IzKGdyYXZpdHkueCwgZ3Jhdml0eS55LCBncmF2aXR5LnopKTtcblxuICAgICAgICAvLyB0aGlzIGlzIG5lZWRlZCBmb3IgZ2hvc3RPYmplY3QgY29sbGlzaW9uc1xuICAgICAgICB0aGlzLmR5bmFtaWNzV29ybGRcbiAgICAgICAgICAgIC5nZXRCcm9hZHBoYXNlKClcbiAgICAgICAgICAgIC5nZXRPdmVybGFwcGluZ1BhaXJDYWNoZSgpXG4gICAgICAgICAgICAuc2V0SW50ZXJuYWxHaG9zdFBhaXJDYWxsYmFjayhuZXcgQW1tby5idEdob3N0UGFpckNhbGxiYWNrKCkpXG5cbiAgICAgICAgdGhpcy5pbml0aWFsaXNlZCA9IHRydWU7XG4gICAgfTtcblxuICAgIHJlbW92ZUVsZW1lbnQgPSB1dWlkID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRWxlbWVudCh1dWlkKSkge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50c1t1dWlkXS5kZWxldGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZURlbGV0ZWRFbGVtZW50cyA9ICgpID0+IChcbiAgICAgICAgT2JqZWN0XG4gICAgICAgICAgICAua2V5cyh0aGlzLmVsZW1lbnRzKVxuICAgICAgICAgICAgLmZpbHRlcih1dWlkID0+IHRoaXMuZWxlbWVudHNbdXVpZF0uZGVsZXRlZClcbiAgICAgICAgICAgIC5mb3JFYWNoKHV1aWQgPT4ge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmVsZW1lbnRzW3V1aWRdO1xuICAgICAgICAgICAgfSlcbiAgICApO1xuXG4gICAgaGFzRWxlbWVudCA9IHV1aWQgPT4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5lbGVtZW50cykuaW5jbHVkZXModXVpZCk7XG4gICAgfVxuXG4gICAgZ2V0RWxlbWVudCA9IHV1aWQgPT4gdGhpcy5lbGVtZW50c1t1dWlkXTtcblxuICAgIGlzSW5pdGlhbGlzZWQgPSAoKSA9PiB0aGlzLmluaXRpYWxpc2VkO1xuXG4gICAgZ2V0RHluYW1pY3NXb3JsZCA9ICgpID0+IHRoaXMuZHluYW1pY3NXb3JsZDtcblxuICAgIGFkZFJpZ2lkQm9keSA9IGJvZHkgPT4ge1xuICAgICAgICB0aGlzLmR5bmFtaWNzV29ybGQuYWRkUmlnaWRCb2R5KGJvZHkpO1xuICAgIH1cblxuICAgIGFkZEFjdGlvbiA9IGFjdGlvbiA9PiB7XG4gICAgICAgIHRoaXMuZHluYW1pY3NXb3JsZC5hZGRBY3Rpb24oYWN0aW9uKTtcbiAgICB9XG5cbiAgICBhZGRDb2xsaXNpb25PYmplY3QgPSBjb2xsaXNpb25PYmplY3QgPT4ge1xuICAgICAgICB0aGlzLmR5bmFtaWNzV29ybGQuYWRkQ29sbGlzaW9uT2JqZWN0KGNvbGxpc2lvbk9iamVjdCk7XG4gICAgfVxuXG4gICAgc3RlcFNpbXVsYXRpb24gPSBkdCA9PiB7XG4gICAgICAgIHRoaXMuZHluYW1pY3NXb3JsZC5zdGVwU2ltdWxhdGlvbihkdCk7XG4gICAgfVxuXG4gICAgc2ltdWxhdGUgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGR0ID0gdGhpcy5jbG9jay5nZXREZWx0YSgpO1xuICAgICAgICB0aGlzLnN0ZXBTaW11bGF0aW9uKGR0KTtcblxuICAgICAgICBPYmplY3RcbiAgICAgICAgICAgIC5rZXlzKHRoaXMuZWxlbWVudHMpXG4gICAgICAgICAgICAuZm9yRWFjaCh1dWlkID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5nZXRFbGVtZW50KHV1aWQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoKGVsZW1lbnQudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUWVBFUy5CT1g6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRZUEVTLlNQSEVSRTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVFlQRVMuTUVTSDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVFbGVtZW50VXBkYXRlKGVsZW1lbnQsIGR0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVFlQRVMuUExBWUVSOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVBsYXllclVwZGF0ZShlbGVtZW50LCBkdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRZUEVTLlZFSElDTEU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlVmVoaWNsZVVwZGF0ZShlbGVtZW50LCBkdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jYWxjdWxhdGVDb2xsaXNpb25zKCk7XG4gICAgICAgIHRoaXMucmVtb3ZlRGVsZXRlZEVsZW1lbnRzKCk7XG5cbiAgICAgICAgZGlzcGF0Y2hlci5zZW5kUGh5c2ljc1VwZGF0ZShkdCk7XG5cbiAgICAgICAgdGhpcy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnNpbXVsYXRlLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIGNhbGN1bGF0ZUNvbGxpc2lvbnMgPSAoKSA9PiB7XG4gICAgICAgIGxldCBhbW1vRGlzcGF0Y2hlciA9IHRoaXMuZHluYW1pY3NXb3JsZC5nZXREaXNwYXRjaGVyKCk7XG4gICAgICAgIGxldCBudW1NYW5pZm9sZHMgPSBhbW1vRGlzcGF0Y2hlci5nZXROdW1NYW5pZm9sZHMoKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bU1hbmlmb2xkczsgaSsrKSB7XG5cbiAgICAgICAgICAgIGxldCBjb250YWN0TWFuaWZvbGQgPSBhbW1vRGlzcGF0Y2hlci5nZXRNYW5pZm9sZEJ5SW5kZXhJbnRlcm5hbChpKTtcblxuICAgICAgICAgICAgbGV0IHJiMCA9IEFtbW8uY2FzdE9iamVjdChjb250YWN0TWFuaWZvbGQuZ2V0Qm9keTAoKSwgQW1tby5idFJpZ2lkQm9keSk7XG4gICAgICAgICAgICBsZXQgcmIxID0gQW1tby5jYXN0T2JqZWN0KGNvbnRhY3RNYW5pZm9sZC5nZXRCb2R5MSgpLCBBbW1vLmJ0UmlnaWRCb2R5KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IG51bUNvbnRhY3RzID0gY29udGFjdE1hbmlmb2xkLmdldE51bUNvbnRhY3RzKCk7XG5cbiAgICAgICAgICAgIC8vIHRoaXMgaXRlcmF0aW9uIGRvZXNuJ3QgaGF2ZSB1dWlkc1xuICAgICAgICAgICAgaWYgKCFyYjAudXVpZCB8fCAhcmIxLnV1aWQpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBsZXQgY29udGFjdHMgPSBbXTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW1Db250YWN0czsgaisrKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgY29udGFjdFBvaW50ID0gY29udGFjdE1hbmlmb2xkLmdldENvbnRhY3RQb2ludChqKTtcbiAgICAgICAgICAgICAgICBsZXQgZGlzdGFuY2UgPSBjb250YWN0UG9pbnQuZ2V0RGlzdGFuY2UoKTtcblxuICAgICAgICAgICAgICAgIGlmKCBkaXN0YW5jZSA+IDAuMCkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICBsZXQgdmVsb2NpdHkwID0gcmIwLmdldExpbmVhclZlbG9jaXR5KCk7XG4gICAgICAgICAgICAgICAgbGV0IHZlbG9jaXR5MSA9IHJiMS5nZXRMaW5lYXJWZWxvY2l0eSgpO1xuICAgICAgICAgICAgICAgIGxldCB3b3JsZFBvczAgPSBjb250YWN0UG9pbnQuZ2V0X21fcG9zaXRpb25Xb3JsZE9uQSgpO1xuICAgICAgICAgICAgICAgIGxldCB3b3JsZFBvczEgPSBjb250YWN0UG9pbnQuZ2V0X21fcG9zaXRpb25Xb3JsZE9uQigpO1xuICAgICAgICAgICAgICAgIGxldCBsb2NhbFBvczAgPSBjb250YWN0UG9pbnQuZ2V0X21fbG9jYWxQb2ludEEoKTtcbiAgICAgICAgICAgICAgICBsZXQgbG9jYWxQb3MxID0gY29udGFjdFBvaW50LmdldF9tX2xvY2FsUG9pbnRCKCk7XG5cbiAgICAgICAgICAgICAgICBjb250YWN0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzOltcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dWlkOiByYjAudXVpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWxvY2l0eTogeyB4OiB2ZWxvY2l0eTAueCgpLCB5OiB2ZWxvY2l0eTAueSgpLCB6OiB2ZWxvY2l0eTAueigpIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ybGRQb3M6IHsgeDogd29ybGRQb3MwLngoKSwgeTogd29ybGRQb3MwLnkoKSwgejogd29ybGRQb3MwLnooKSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsUG9zOiB7IHg6IGxvY2FsUG9zMC54KCksIHk6IGxvY2FsUG9zMC55KCksIHo6IGxvY2FsUG9zMC56KCkgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dWlkOiByYjEudXVpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWxvY2l0eTogeyB4OiB2ZWxvY2l0eTEueCgpLCB5OiB2ZWxvY2l0eTEueSgpLCB6OiB2ZWxvY2l0eTEueigpIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ybGRQb3M6IHsgeDogd29ybGRQb3MxLngoKSwgeTogd29ybGRQb3MxLnkoKSwgejogd29ybGRQb3MxLnooKSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsUG9zOiB7IHg6IGxvY2FsUG9zMS54KCksIHk6IGxvY2FsUG9zMS55KCksIHo6IGxvY2FsUG9zMS56KCkgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRpc3BhdGNoZXIuc2VuZERpc3BhdGNoRXZlbnQocmIwLnV1aWQsIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuQ09MTElTSU9OLCB7IGNvbnRhY3RzIH0pO1xuICAgICAgICAgICAgZGlzcGF0Y2hlci5zZW5kRGlzcGF0Y2hFdmVudChyYjEudXVpZCwgUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5DT0xMSVNJT04sIHsgY29udGFjdHMgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRFbGVtZW50ID0gZGF0YSA9PiB7XG4gICAgICAgIHRoaXMuZWxlbWVudHNbZGF0YS51dWlkXSA9IGRhdGE7XG4gICAgfVxuXG4gICAgdXBkYXRlQm9keVN0YXRlID0gKHsgdXVpZCwgc3RhdGUgfSkgPT4ge1xuICAgICAgICB0aGlzLmVsZW1lbnRzW3V1aWRdLnN0YXRlID0ge1xuICAgICAgICAgICAgLi4udGhpcy5lbGVtZW50c1t1dWlkXS5zdGF0ZSxcbiAgICAgICAgICAgIC4uLnN0YXRlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZGlzcG9zZUJvZHkoeyB1dWlkIH0pIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZ2V0RWxlbWVudCh1dWlkKTtcbiAgICAgICAgdGhpcy5keW5hbWljc1dvcmxkLnJlbW92ZVJpZ2lkQm9keShlbGVtZW50LmJvZHkpO1xuICAgICAgICB0aGlzLnJlbW92ZUVsZW1lbnQodXVpZCk7XG5cbiAgICAgICAgZGlzcGF0Y2hlci5zZW5kRWxlbWVudERpc3Bvc2VkKHsgdXVpZCB9KTtcbiAgICB9XG5cbiAgICB0ZXJtaW5hdGUgPSAoKSA9PiB7XG4gICAgICAgIEFtbW8uZGVzdHJveSh0aGlzLmR5bmFtaWNzV29ybGQpO1xuICAgICAgICBBbW1vLmRlc3Ryb3kodGhpcy5zb2x2ZXIpO1xuICAgICAgICBBbW1vLmRlc3Ryb3kodGhpcy5kaXNwYXRjaGVyKTtcbiAgICAgICAgQW1tby5kZXN0cm95KHRoaXMuY29sbGlzaW9uQ29uZmlndXJhdGlvbik7XG5cbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCk7XG5cbiAgICAgICAgZGlzcGF0Y2hlci5zZW5kVGVybWluYXRlRXZlbnQoKTtcbiAgICB9XG59O1xuXG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBXb3JsZCgpOyIsImltcG9ydCB7XG4gICAgRElTQUJMRV9ERUFDVElWQVRJT04sXG4gICAgVFlQRVMsXG4gICAgREVGQVVMVF9WRUhJQ0xFX1NUQVRFLFxuICAgIEJBQ0tfTEVGVCxcbiAgICBCQUNLX1JJR0hULFxuICAgIEZST05UX0xFRlQsXG4gICAgRlJPTlRfUklHSFQsXG4gICAgREVGQVVMVF9NQVhfRU5HSU5FX0ZPUkNFLFxuICAgIERFRkFVTFRfTUFYX0JSRUFLSU5HX0ZPUkNFLFxuICAgIERFRkFVTFRfU1RFRVJJTkdfQ0xBTVAsXG4gICAgREVGQVVMVF9TVEVFUklOR19JTkNSRU1FTlRcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuaW1wb3J0IHtcbiAgICBQSFlTSUNTX0VWRU5UU1xufSBmcm9tICcuLi9tZXNzYWdlcyc7XG5cbmltcG9ydCB3b3JsZCBmcm9tICcuL3dvcmxkJztcbmltcG9ydCBkaXNwYXRjaGVyIGZyb20gJy4vbGliL2Rpc3BhdGNoZXInO1xuXG5jb25zdCBERUZBVUxUX1JPTExfSU5GTFVFTkNFID0gMC4yO1xuY29uc3QgREVGQVVMVF9GUklDVElPTiA9IDEwMDA7XG5jb25zdCBERUZBVUxUX01BU1MgPSA4MDA7XG5cbmV4cG9ydCBjb25zdCBhZGRWZWhpY2xlID0gZGF0YSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgcXVhdGVybmlvbixcbiAgICAgICAgdXVpZCxcbiAgICAgICAgd2hlZWxzLFxuICAgICAgICBtYXNzID0gREVGQVVMVF9NQVNTLFxuICAgICAgICB3aWR0aCA9IDEuOCxcbiAgICAgICAgaGVpZ2h0ID0gLjYsXG4gICAgICAgIGxlbmd0aCA9IDQsXG4gICAgICAgIGZyaWN0aW9uID0gREVGQVVMVF9GUklDVElPTixcbiAgICAgICAgcm9sbEluZmx1ZW5jZSA9IERFRkFVTFRfUk9MTF9JTkZMVUVOQ0UsXG4gICAgICAgIHdoZWVsc09wdGlvbnMgPSB7fSxcbiAgICAgICAgc3VzcGVuc2lvbnMgPSB7fVxuICAgIH0gPSBkYXRhO1xuXG4gICAgY29uc3QgeyBiYWNrID0ge30sIGZyb250ID0ge30gfSA9IHdoZWVsc09wdGlvbnM7XG4gICAgY29uc3Qge1xuICAgICAgICBheGlzUG9zaXRpb246IGF4aXNQb3NpdGlvbkJhY2sgPSAtMSxcbiAgICAgICAgcmFkaXVzOiB3aGVlbFJhZGl1c0JhY2sgPSAuNCxcbiAgICAgICAgaGFsZlRyYWNrOiB3aGVlbEhhbGZUcmFja0JhY2sgPSAxLFxuICAgICAgICBheGlzSGVpZ2h0OiB3aGVlbEF4aXNIZWlnaHRCYWNrID0gLjNcbiAgICB9ID0gYmFjaztcblxuICAgIGNvbnN0IHtcbiAgICAgICAgYXhpc1Bvc2l0aW9uOiBheGlzUG9zaXRpb25Gcm9udCA9IDEuNyxcbiAgICAgICAgcmFkaXVzOiB3aGVlbFJhZGl1c0Zyb250ID0gLjQsXG4gICAgICAgIGhhbGZUcmFjazogd2hlZWxIYWxmVHJhY2tGcm9udCA9IDEsXG4gICAgICAgIGF4aXNIZWlnaHQ6IHdoZWVsQXhpc0hlaWdodEZyb250ID0gLjNcbiAgICB9ID0gZnJvbnQ7XG5cbiAgICBjb25zdCB7IHN0aWZmbmVzcyA9IDIwLjAsIGRhbXBpbmcgPSAyLjMsIGNvbXByZXNzaW9uID0gNC40LCByZXN0TGVuZ3RoID0gMC42IH0gPSBzdXNwZW5zaW9ucztcblxuXG4gICAgLy8gQ2hhc3Npc1xuICAgIGNvbnN0IGdlb21ldHJ5ID0gbmV3IEFtbW8uYnRCb3hTaGFwZShuZXcgQW1tby5idFZlY3RvcjMod2lkdGggKiAuNSwgaGVpZ2h0ICogLjUsIGxlbmd0aCAqIC41KSk7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTtcbiAgICB0cmFuc2Zvcm0uc2V0SWRlbnRpdHkoKTtcbiAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKG5ldyBBbW1vLmJ0VmVjdG9yMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KSk7XG4gICAgdHJhbnNmb3JtLnNldFJvdGF0aW9uKG5ldyBBbW1vLmJ0UXVhdGVybmlvbihxdWF0ZXJuaW9uLngsIHF1YXRlcm5pb24ueSwgcXVhdGVybmlvbi56LCBxdWF0ZXJuaW9uLncpKTtcbiAgICBjb25zdCBtb3Rpb25TdGF0ZSA9IG5ldyBBbW1vLmJ0RGVmYXVsdE1vdGlvblN0YXRlKHRyYW5zZm9ybSk7XG4gICAgY29uc3QgbG9jYWxJbmVydGlhID0gbmV3IEFtbW8uYnRWZWN0b3IzKDAsIDAsIDApO1xuICAgIGdlb21ldHJ5LmNhbGN1bGF0ZUxvY2FsSW5lcnRpYShtYXNzLCBsb2NhbEluZXJ0aWEpO1xuICAgIGNvbnN0IGNoYXNzaXMgPSBuZXcgQW1tby5idFJpZ2lkQm9keShuZXcgQW1tby5idFJpZ2lkQm9keUNvbnN0cnVjdGlvbkluZm8obWFzcywgbW90aW9uU3RhdGUsIGdlb21ldHJ5LCBsb2NhbEluZXJ0aWEpKTtcbiAgICBjaGFzc2lzLnNldEFjdGl2YXRpb25TdGF0ZShESVNBQkxFX0RFQUNUSVZBVElPTik7XG4gICAgd29ybGQuYWRkUmlnaWRCb2R5KGNoYXNzaXMpO1xuXG5cbiAgICAvLyBSYXljYXN0IFZlaGljbGVcbiAgICBjb25zdCB0dW5pbmcgPSBuZXcgQW1tby5idFZlaGljbGVUdW5pbmcoKTtcbiAgICBjb25zdCByYXlDYXN0ZXIgPSBuZXcgQW1tby5idERlZmF1bHRWZWhpY2xlUmF5Y2FzdGVyKHdvcmxkLmdldER5bmFtaWNzV29ybGQoKSk7XG4gICAgY29uc3QgdmVoaWNsZSA9IG5ldyBBbW1vLmJ0UmF5Y2FzdFZlaGljbGUodHVuaW5nLCBjaGFzc2lzLCByYXlDYXN0ZXIpO1xuICAgIHZlaGljbGUuc2V0Q29vcmRpbmF0ZVN5c3RlbSgwLCAxLCAyKTtcbiAgICB3b3JsZC5hZGRBY3Rpb24odmVoaWNsZSk7XG5cbiAgICBjb25zdCB3aGVlbERpcmVjdGlvbkNTMCA9IG5ldyBBbW1vLmJ0VmVjdG9yMygwLCAtMSwgMCk7XG4gICAgY29uc3Qgd2hlZWxBeGxlQ1MgPSBuZXcgQW1tby5idFZlY3RvcjMoLTEsIDAsIDApO1xuXG4gICAgY29uc3QgYWRkV2hlZWwgPSAoaXNGcm9udCwgcG9zLCByYWRpdXMpID0+IHtcblxuICAgICAgICB2YXIgd2hlZWxJbmZvID0gdmVoaWNsZS5hZGRXaGVlbChcbiAgICAgICAgICAgIHBvcyxcbiAgICAgICAgICAgIHdoZWVsRGlyZWN0aW9uQ1MwLFxuICAgICAgICAgICAgd2hlZWxBeGxlQ1MsXG4gICAgICAgICAgICByZXN0TGVuZ3RoLFxuICAgICAgICAgICAgcmFkaXVzLFxuICAgICAgICAgICAgdHVuaW5nLFxuICAgICAgICAgICAgaXNGcm9udCk7XG5cbiAgICAgICAgd2hlZWxJbmZvLnNldF9tX3N1c3BlbnNpb25TdGlmZm5lc3Moc3RpZmZuZXNzKTtcbiAgICAgICAgd2hlZWxJbmZvLnNldF9tX3doZWVsc0RhbXBpbmdSZWxheGF0aW9uKGRhbXBpbmcpO1xuICAgICAgICB3aGVlbEluZm8uc2V0X21fd2hlZWxzRGFtcGluZ0NvbXByZXNzaW9uKGNvbXByZXNzaW9uKTtcbiAgICAgICAgd2hlZWxJbmZvLnNldF9tX2ZyaWN0aW9uU2xpcChmcmljdGlvbik7XG4gICAgICAgIHdoZWVsSW5mby5zZXRfbV9yb2xsSW5mbHVlbmNlKHJvbGxJbmZsdWVuY2UpO1xuICAgIH1cblxuICAgIGFkZFdoZWVsKHRydWUsIG5ldyBBbW1vLmJ0VmVjdG9yMyh3aGVlbEhhbGZUcmFja0Zyb250LCB3aGVlbEF4aXNIZWlnaHRGcm9udCwgYXhpc1Bvc2l0aW9uRnJvbnQpLCB3aGVlbFJhZGl1c0Zyb250KTtcbiAgICBhZGRXaGVlbCh0cnVlLCBuZXcgQW1tby5idFZlY3RvcjMoLXdoZWVsSGFsZlRyYWNrRnJvbnQsIHdoZWVsQXhpc0hlaWdodEZyb250LCBheGlzUG9zaXRpb25Gcm9udCksIHdoZWVsUmFkaXVzRnJvbnQpO1xuICAgIGFkZFdoZWVsKGZhbHNlLCBuZXcgQW1tby5idFZlY3RvcjMoLXdoZWVsSGFsZlRyYWNrQmFjaywgd2hlZWxBeGlzSGVpZ2h0QmFjaywgYXhpc1Bvc2l0aW9uQmFjayksIHdoZWVsUmFkaXVzQmFjayk7XG4gICAgYWRkV2hlZWwoZmFsc2UsIG5ldyBBbW1vLmJ0VmVjdG9yMyh3aGVlbEhhbGZUcmFja0JhY2ssIHdoZWVsQXhpc0hlaWdodEJhY2ssIGF4aXNQb3NpdGlvbkJhY2spLCB3aGVlbFJhZGl1c0JhY2spO1xuXG4gICAgdmVoaWNsZS51dWlkID0gdXVpZDtcblxuICAgIHdvcmxkLnNldEJvZHkoe1xuICAgICAgICB0eXBlOiBUWVBFUy5WRUhJQ0xFLFxuICAgICAgICB1dWlkLFxuICAgICAgICB2ZWhpY2xlOiB2ZWhpY2xlLFxuICAgICAgICB3aGVlbHMsXG4gICAgICAgIG9wdGlvbnM6IGRhdGEsXG4gICAgICAgIHN0YXRlOiBERUZBVUxUX1ZFSElDTEVfU1RBVEVcbiAgICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IHNldFZlaGljbGVQb3NpdGlvbiA9IGRhdGEgPT4ge1xuICAgIGNvbnN0IHsgdXVpZCwgcG9zaXRpb24gfSA9IGRhdGE7XG4gICAgY29uc3QgZWxlbWVudCA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCk7XG5cbiAgICBpZiAoZWxlbWVudC50eXBlID09PSBUWVBFUy5WRUhJQ0xFKSB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBlbGVtZW50LnZlaGljbGUuZ2V0UmlnaWRCb2R5KCk7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7XG5cbiAgICAgICAgYm9keS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuICAgICAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKG5ldyBBbW1vLmJ0VmVjdG9yMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56ICkpO1xuXG4gICAgICAgIGJvZHkuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0VmVoaWNsZVF1YXRlcm5pb24gPSBkYXRhID0+IHtcbiAgICBjb25zdCB7IHV1aWQsIHF1YXRlcm5pb24gfSA9IGRhdGE7XG4gICAgY29uc3QgZWxlbWVudCA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCk7XG5cbiAgICBpZiAoZWxlbWVudC50eXBlID09PSBUWVBFUy5WRUhJQ0xFKSB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBlbGVtZW50LnZlaGljbGUuZ2V0UmlnaWRCb2R5KCk7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7XG5cbiAgICAgICAgYm9keS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuICAgICAgICB0cmFuc2Zvcm0uc2V0Um90YXRpb24obmV3IEFtbW8uYnRRdWF0ZXJuaW9uKHF1YXRlcm5pb24ueCwgcXVhdGVybmlvbi55LCBxdWF0ZXJuaW9uLnosIHF1YXRlcm5pb24udykpO1xuXG4gICAgICAgIGJvZHkuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgcmVzZXRWZWhpY2xlID0gZGF0YSA9PiB7XG4gICAgY29uc3QgeyB1dWlkLCBxdWF0ZXJuaW9uLCBwb3NpdGlvbiB9ID0gZGF0YTtcbiAgICBjb25zdCBlbGVtZW50ID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKTtcblxuICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFRZUEVTLlZFSElDTEUpIHtcbiAgICAgICAgY29uc3QgYm9keSA9IGVsZW1lbnQudmVoaWNsZS5nZXRSaWdpZEJvZHkoKTtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTtcbiAgICAgICAgXG4gICAgICAgIGJvZHkuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcblxuICAgICAgICB0cmFuc2Zvcm0uc2V0SWRlbnRpdHkoKTtcbiAgICAgICAgdHJhbnNmb3JtLnNldE9yaWdpbihuZXcgQW1tby5idFZlY3RvcjMocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueiApKTtcbiAgICAgICAgdHJhbnNmb3JtLnNldFJvdGF0aW9uKG5ldyBBbW1vLmJ0UXVhdGVybmlvbihxdWF0ZXJuaW9uLngsIHF1YXRlcm5pb24ueSwgcXVhdGVybmlvbi56LCBxdWF0ZXJuaW9uLncpKTtcblxuICAgICAgICBib2R5LnNldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgaGFuZGxlVmVoaWNsZVVwZGF0ZSA9ICh7IHZlaGljbGUsIHdoZWVscywgdXVpZCwgc3RhdGUgPSBERUZBVUxUX1ZFSElDTEVfU1RBVEUsIG9wdGlvbnMgPSB7fSB9LCBkdCkgPT4ge1xuICAgIGNvbnN0IHNwZWVkID0gdmVoaWNsZS5nZXRDdXJyZW50U3BlZWRLbUhvdXIoKTtcblxuICAgIGRpc3BhdGNoZXIuc2VuZERpc3BhdGNoRXZlbnQodXVpZCwgUEhZU0lDU19FVkVOVFMuVkVISUNMRS5TUEVFRCwgeyBzcGVlZCB9KTtcblxuICAgIGxldCBicmVha2luZ0ZvcmNlID0gMDtcbiAgICBsZXQgZW5naW5lRm9yY2UgPSAwO1xuXG4gICAgY29uc3Qge1xuICAgICAgICBzdGVlcmluZ0NsYW1wID0gREVGQVVMVF9TVEVFUklOR19DTEFNUCxcbiAgICAgICAgc3RlZXJpbmdJbmNyZW1lbnQgPSBERUZBVUxUX1NURUVSSU5HX0lOQ1JFTUVOVCxcbiAgICAgICAgbWF4RW5naW5lRm9yY2UgPSBERUZBVUxUX01BWF9FTkdJTkVfRk9SQ0UsXG4gICAgICAgIG1heEJyZWFraW5nRm9yY2UgPSBERUZBVUxUX01BWF9CUkVBS0lOR19GT1JDRVxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgaWYgKHN0YXRlLmFjY2VsZXJhdGlvbikge1xuICAgICAgICBpZiAoc3BlZWQgPCAtMSlcbiAgICAgICAgICAgIGJyZWFraW5nRm9yY2UgPSBtYXhCcmVha2luZ0ZvcmNlO1xuICAgICAgICBlbHNlIGVuZ2luZUZvcmNlID0gbWF4RW5naW5lRm9yY2U7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5icmFraW5nKSB7XG4gICAgICAgIGlmIChzcGVlZCA+IDEpXG4gICAgICAgICAgICBicmVha2luZ0ZvcmNlID0gbWF4QnJlYWtpbmdGb3JjZTtcbiAgICAgICAgZWxzZSBlbmdpbmVGb3JjZSA9IC1tYXhFbmdpbmVGb3JjZSAvIDI7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5sZWZ0KSB7XG4gICAgICAgIGlmIChzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPCBzdGVlcmluZ0NsYW1wKVxuICAgICAgICAgICAgc3RhdGUudmVoaWNsZVN0ZWVyaW5nICs9IHN0ZWVyaW5nSW5jcmVtZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzdGF0ZS5yaWdodCkge1xuICAgICAgICAgICAgaWYgKHN0YXRlLnZlaGljbGVTdGVlcmluZyA+IC1zdGVlcmluZ0NsYW1wKVxuICAgICAgICAgICAgICAgIHN0YXRlLnZlaGljbGVTdGVlcmluZyAtPSBzdGVlcmluZ0luY3JlbWVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPCAtc3RlZXJpbmdJbmNyZW1lbnQpXG4gICAgICAgICAgICAgICAgc3RhdGUudmVoaWNsZVN0ZWVyaW5nICs9IHN0ZWVyaW5nSW5jcmVtZW50O1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnZlaGljbGVTdGVlcmluZyA+IHN0ZWVyaW5nSW5jcmVtZW50KVxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgLT0gc3RlZXJpbmdJbmNyZW1lbnQ7XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnZlaGljbGVTdGVlcmluZyA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmVoaWNsZS5hcHBseUVuZ2luZUZvcmNlKGVuZ2luZUZvcmNlLCBCQUNLX0xFRlQpO1xuICAgIHZlaGljbGUuYXBwbHlFbmdpbmVGb3JjZShlbmdpbmVGb3JjZSwgQkFDS19SSUdIVCk7XG5cbiAgICB2ZWhpY2xlLnNldEJyYWtlKGJyZWFraW5nRm9yY2UgLyAyLCBGUk9OVF9MRUZUKTtcbiAgICB2ZWhpY2xlLnNldEJyYWtlKGJyZWFraW5nRm9yY2UgLyAyLCBGUk9OVF9SSUdIVCk7XG4gICAgdmVoaWNsZS5zZXRCcmFrZShicmVha2luZ0ZvcmNlLCBCQUNLX0xFRlQpO1xuICAgIHZlaGljbGUuc2V0QnJha2UoYnJlYWtpbmdGb3JjZSwgQkFDS19SSUdIVCk7XG5cbiAgICB2ZWhpY2xlLnNldFN0ZWVyaW5nVmFsdWUoc3RhdGUudmVoaWNsZVN0ZWVyaW5nLCBGUk9OVF9MRUZUKTtcbiAgICB2ZWhpY2xlLnNldFN0ZWVyaW5nVmFsdWUoc3RhdGUudmVoaWNsZVN0ZWVyaW5nLCBGUk9OVF9SSUdIVCk7XG5cbiAgICBsZXQgdG0sIHAsIHEsIGk7XG4gICAgY29uc3QgbiA9IHZlaGljbGUuZ2V0TnVtV2hlZWxzKCk7XG4gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICB2ZWhpY2xlLnVwZGF0ZVdoZWVsVHJhbnNmb3JtKGksIHRydWUpO1xuICAgICAgICB0bSA9IHZlaGljbGUuZ2V0V2hlZWxUcmFuc2Zvcm1XUyhpKTtcbiAgICAgICAgcCA9IHRtLmdldE9yaWdpbigpO1xuICAgICAgICBxID0gdG0uZ2V0Um90YXRpb24oKTtcblxuICAgICAgICBjb25zdCB3aGVlbFVVSUQgPSB3aGVlbHNbaV07XG4gICAgICAgIGRpc3BhdGNoZXIuc2VuZEJvZHlVcGRhdGUod2hlZWxVVUlELCBwLCBxLCBkdCk7XG4gICAgfVxuXG4gICAgdG0gPSB2ZWhpY2xlLmdldENoYXNzaXNXb3JsZFRyYW5zZm9ybSgpO1xuICAgIHAgPSB0bS5nZXRPcmlnaW4oKTtcbiAgICBxID0gdG0uZ2V0Um90YXRpb24oKTtcblxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IHZlaGljbGUuZ2V0Rm9yd2FyZFZlY3RvcigpO1xuICAgIGRpc3BhdGNoZXIuc2VuZERpc3BhdGNoRXZlbnQodXVpZCwgUEhZU0lDU19FVkVOVFMuVkVISUNMRS5ESVJFQ1RJT04sIHtcbiAgICAgICAgZGlyZWN0aW9uOiB7XG4gICAgICAgICAgICB4OiBkaXJlY3Rpb24ueCgpLFxuICAgICAgICAgICAgeTogZGlyZWN0aW9uLnkoKSxcbiAgICAgICAgICAgIHo6IGRpcmVjdGlvbi56KClcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgZGlzcGF0Y2hlci5zZW5kQm9keVVwZGF0ZSh1dWlkLCBwLCBxLCBkdCk7XG4gICAgd29ybGQudXBkYXRlQm9keVN0YXRlKHV1aWQsIHN0YXRlKTtcbn0iLCJpbXBvcnQgeyBFWFBMT1NJT05fU0laRVMsIEVYUExPU0lPTl9TVFJFTkdUSFMgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgd29ybGQgZnJvbSBcIi4vd29ybGRcIjtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUdob3N0Q29sbGlkZXIgPSAocmFkaXVzLCBwb3NpdGlvbikgPT4ge1xuICAgIGNvbnN0IGdob3N0Q29sbGlkZXIgPSBuZXcgQW1tby5idEdob3N0T2JqZWN0KCk7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTtcblxuICAgIGdob3N0Q29sbGlkZXIuc2V0Q29sbGlzaW9uU2hhcGUobmV3IEFtbW8uYnRTcGhlcmVTaGFwZShyYWRpdXMpKTtcbiAgICBnaG9zdENvbGxpZGVyLmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7XG5cbiAgICB0cmFuc2Zvcm0uc2V0SWRlbnRpdHkoKTtcbiAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKHBvc2l0aW9uKTtcbiAgICB0cmFuc2Zvcm0uc2V0Um90YXRpb24obmV3IEFtbW8uYnRRdWF0ZXJuaW9uKDAsIDAsIDAsIDEpKTtcblxuICAgIGdob3N0Q29sbGlkZXIuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcblxuICAgIHJldHVybiB7IGdob3N0Q29sbGlkZXIsIHRyYW5zZm9ybSB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGZvckVhY2hHaG9zdENvbGxpc2lvbiA9IChnaG9zdENvbGxpZGVyLCBmb3JFYWNoQ2FsbGJhY2sgPSAoKSA9PiB7fSkgPT4ge1xuICAgIGNvbnN0IGNvbGxpc2lvbnMgPSBnaG9zdENvbGxpZGVyLmdldE51bU92ZXJsYXBwaW5nT2JqZWN0cygpO1xuICAgIGZvciAobGV0IGk9MDsgaTxjb2xsaXNpb25zOyBpKyspIHtcbiAgICAgICAgY29uc3Qgb2JqZWN0ID0gQW1tby5jYXN0T2JqZWN0KGdob3N0Q29sbGlkZXIuZ2V0T3ZlcmxhcHBpbmdPYmplY3QoaSksIEFtbW8uYnRSaWdpZEJvZHkpO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpO1xuXG4gICAgICAgIG9iamVjdC5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuICAgICAgICBmb3JFYWNoQ2FsbGJhY2sob2JqZWN0LCB0cmFuc2Zvcm0sIGkpO1xuXG4gICAgICAgIEFtbW8uZGVzdHJveSh0cmFuc2Zvcm0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGdldEV4cGxvc2lvblBvc2l0aW9uID0gKHV1aWQsIHBvc2l0aW9uKSA9PiB7XG4gICAgbGV0IGV4cGxvc2lvblBvc2l0aW9uID0gcG9zaXRpb247XG4gICAgaWYgKCFleHBsb3Npb25Qb3NpdGlvbikge1xuICAgICAgICBjb25zdCB7IGJvZHkgfSA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCk7XG4gICAgICAgIGNvbnN0IG1vdGlvblN0YXRlID0gYm9keS5nZXRNb3Rpb25TdGF0ZSgpO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpO1xuXG4gICAgICAgIG1vdGlvblN0YXRlLmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7XG4gICAgICAgIGV4cGxvc2lvblBvc2l0aW9uID0gdHJhbnNmb3JtLmdldE9yaWdpbigpO1xuICAgIH1cblxuICAgIHJldHVybiBleHBsb3Npb25Qb3NpdGlvbjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFeHBsb3Npb25JbXB1bHNlID0gKHBvc2l0aW9uLCBleHBsb3Npb25Qb3NpdGlvbiwgc3RyZW5ndGgpID0+IHtcbiAgICBjb25zdCBkaXN0YW5jZSA9IHBvc2l0aW9uLm9wX3N1YihleHBsb3Npb25Qb3NpdGlvbik7XG4gICAgZGlzdGFuY2Uubm9ybWFsaXplKCk7XG4gICAgY29uc3QgaW1wdWxzZSA9IGRpc3RhbmNlLm9wX211bChzdHJlbmd0aCk7XG5cbiAgICBpbXB1bHNlLnNldFkoaW1wdWxzZS55KCkgKyBzdHJlbmd0aCk7XG5cbiAgICByZXR1cm4gaW1wdWxzZTtcbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUV4cGxvc2lvbiA9ICh7XG4gICAgdXVpZCxcbiAgICBwb3NpdGlvbixcbiAgICByYWRpdXMgPSBFWFBMT1NJT05fU0laRVMuU01BTEwsXG4gICAgc3RyZW5ndGggPSBFWFBMT1NJT05fU1RSRU5HVEhTLk1FRElVTVxufSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGV4cGxvc2lvblBvc2l0aW9uID0gZ2V0RXhwbG9zaW9uUG9zaXRpb24odXVpZCwgcG9zaXRpb24pO1xuICAgICAgICBjb25zdCB7IGdob3N0Q29sbGlkZXIsIHRyYW5zZm9ybSB9ID0gY3JlYXRlR2hvc3RDb2xsaWRlcihyYWRpdXMsIGV4cGxvc2lvblBvc2l0aW9uKTtcblxuICAgICAgICB3b3JsZC5hZGRDb2xsaXNpb25PYmplY3QoZ2hvc3RDb2xsaWRlcik7XG5cbiAgICAgICAgZm9yRWFjaEdob3N0Q29sbGlzaW9uKGdob3N0Q29sbGlkZXIsIChvYmplY3QsIG9iamVjdFRyYW5zZm9ybSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luID0gb2JqZWN0VHJhbnNmb3JtLmdldE9yaWdpbigpO1xuICAgICAgICAgICAgb2JqZWN0LmFjdGl2YXRlKHRydWUpO1xuICAgICAgICAgICAgb2JqZWN0LmFwcGx5Q2VudHJhbEltcHVsc2UoZ2V0RXhwbG9zaW9uSW1wdWxzZShvcmlnaW4sIGV4cGxvc2lvblBvc2l0aW9uLCBzdHJlbmd0aCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICB3b3JsZC5nZXREeW5hbWljc1dvcmxkKCkucmVtb3ZlQ29sbGlzaW9uT2JqZWN0KGdob3N0Q29sbGlkZXIpO1xuICAgICAgICBBbW1vLmRlc3Ryb3koZ2hvc3RDb2xsaWRlcik7XG4gICAgICAgIEFtbW8uZGVzdHJveSh0cmFuc2Zvcm0pO1xuICAgIH0gY2F0Y2goZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICB9XG59IiwiaW1wb3J0IHtcbiAgICBMSUJSQVJZX05BTUVcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuaW1wb3J0IHsgYWRkVmVoaWNsZSwgcmVzZXRWZWhpY2xlLCBzZXRWZWhpY2xlUG9zaXRpb24sIHNldFZlaGljbGVRdWF0ZXJuaW9uIH0gZnJvbSAnLi92ZWhpY2xlcyc7XG5pbXBvcnQgeyBhZGRCb3gsIGFkZE1vZGVsLCBzZXRMaW5lYXJWZWxvY2l0eSwgYXBwbHlJbXB1c2UsIGFkZFNwaGVyZSwgc2V0UG9zaXRpb24gfSBmcm9tICcuL2VsZW1lbnRzJztcbmltcG9ydCB7IGNyZWF0ZUV4cGxvc2lvbiB9IGZyb20gJy4vZWZmZWN0cyc7XG5pbXBvcnQgeyBhZGRQbGF5ZXIgfSBmcm9tICcuL3BsYXllcic7XG5cbmltcG9ydCBkaXNwYXRjaGVyIGZyb20gJy4vbGliL2Rpc3BhdGNoZXInO1xuaW1wb3J0IHdvcmxkIGZyb20gJy4vd29ybGQnO1xuaW1wb3J0IHsgUEhZU0lDU19FVkVOVFMgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5cbmNvbnN0IGhhbmRsZUxvYWRFdmVudCA9IG9wdGlvbnMgPT4gQW1tbyA9PiB7XG4gICAgc2VsZi5BbW1vID0gQW1tbztcblxuICAgIG9ubWVzc2FnZSA9ICh7IGRhdGEgfSkgPT4ge1xuICAgICAgICBzd2l0Y2goZGF0YS5ldmVudCkge1xuICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5BREQuQk9YOlxuICAgICAgICAgICAgICAgIGFkZEJveChkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuQURELlNQSEVSRTpcbiAgICAgICAgICAgICAgICBhZGRTcGhlcmUoZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkFERC5WRUhJQ0xFOlxuICAgICAgICAgICAgICAgIGFkZFZlaGljbGUoZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkFERC5NT0RFTDpcbiAgICAgICAgICAgICAgICBhZGRNb2RlbChkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuQURELlBMQVlFUjpcbiAgICAgICAgICAgICAgICBhZGRQbGF5ZXIoZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuU0VULkxJTkVBUl9WRUxPQ0lUWTpcbiAgICAgICAgICAgICAgICBzZXRMaW5lYXJWZWxvY2l0eShkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5TRVQuUE9TSVRJT046XG4gICAgICAgICAgICAgICAgc2V0UG9zaXRpb24oZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLlZFSElDTEUuU0VULlBPU0lUSU9OOlxuICAgICAgICAgICAgICAgIHNldFZlaGljbGVQb3NpdGlvbihkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuVkVISUNMRS5TRVQuUVVBVEVSTklPTjpcbiAgICAgICAgICAgICAgICBzZXRWZWhpY2xlUXVhdGVybmlvbihkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuVkVISUNMRS5SRVNFVDpcbiAgICAgICAgICAgICAgICByZXNldFZlaGljbGUoZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuQVBQTFkuSU1QVUxTRTpcbiAgICAgICAgICAgICAgICBhcHBseUltcHVzZShkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5VUERBVEU6XG4gICAgICAgICAgICAgICAgd29ybGQudXBkYXRlQm9keVN0YXRlKGRhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5FTEVNRU5ULkRJU1BPU0U6XG4gICAgICAgICAgICAgICAgd29ybGQuZGlzcG9zZUJvZHkoZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkVGRkVDVFMuRVhQTE9TSU9OOlxuICAgICAgICAgICAgICAgIGNyZWF0ZUV4cGxvc2lvbihkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuVEVSTUlOQVRFOlxuICAgICAgICAgICAgICAgIHdvcmxkLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgd29ybGQuaW5pdChvcHRpb25zKTtcbiAgICBkaXNwYXRjaGVyLnNlbmRSZWFkeUV2ZW50KCk7XG4gICAgd29ybGQuc2ltdWxhdGUoKVxufTtcblxuY29uc3QgbG9hZEFtbW8gPSAob3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IHNjcmlwdFVybCA9IG9wdGlvbnMuaG9zdCArICcvJyArIChvcHRpb25zLnBhdGggfHwgTElCUkFSWV9OQU1FKTtcbiAgICBpbXBvcnRTY3JpcHRzKHNjcmlwdFVybCk7XG5cbiAgICBBbW1vKCkudGhlbihoYW5kbGVMb2FkRXZlbnQob3B0aW9ucykpO1xufTtcblxub25tZXNzYWdlID0gKHsgZGF0YSB9KSA9PiB7XG4gICAgc3dpdGNoKGRhdGEuZXZlbnQpIHtcbiAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5MT0FELkFNTU86XG4gICAgICAgICAgICBsb2FkQW1tbyhkYXRhKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxufSJdLCJuYW1lcyI6WyJMSUJSQVJZX05BTUUiLCJUWVBFUyIsIkJPWCIsIlNQSEVSRSIsIlZFSElDTEUiLCJNRVNIIiwiUExBWUVSIiwiREVGQVVMVF9WRUhJQ0xFX1NUQVRFIiwidmVoaWNsZVN0ZWVyaW5nIiwiYWNjZWxlcmF0aW9uIiwiYnJlYWtpbmciLCJyaWdodCIsImxlZnQiLCJERUZBVUxUX1JJR0lEQk9EWV9TVEFURSIsInZlbG9jaXR5IiwieCIsInkiLCJ6IiwibW92ZW1lbnQiLCJmb3J3YXJkIiwiYmFja3dhcmRzIiwiZGlyZWN0aW9uIiwiREVGQVVMVF9TQ0FMRSIsIkRFRkFVTFRfTElORUFSX1ZFTE9DSVRZIiwiREVGQVVMVF9JTVBVTFNFIiwiRElTQUJMRV9ERUFDVElWQVRJT04iLCJHUkFWSVRZIiwiRlJPTlRfTEVGVCIsIkZST05UX1JJR0hUIiwiQkFDS19MRUZUIiwiQkFDS19SSUdIVCIsIkRFRkFVTFRfU1RFRVJJTkdfSU5DUkVNRU5UIiwiREVGQVVMVF9TVEVFUklOR19DTEFNUCIsIkRFRkFVTFRfTUFYX0VOR0lORV9GT1JDRSIsIkRFRkFVTFRfTUFYX0JSRUFLSU5HX0ZPUkNFIiwiRVhQTE9TSU9OX1NJWkVTIiwiU01BTEwiLCJNRURJVU0iLCJMQVJHRSIsIk1BU1NJVkUiLCJFWFBMT1NJT05fU1RSRU5HVEhTIiwiVkVSWV9XRUFLIiwiV0VBSyIsIk9LX05PIiwiUEhZU0lDU19FVkVOVFMiLCJESVNQQVRDSCIsIlRFUk1JTkFURSIsIkxPQUQiLCJBTU1PIiwiUkVBRFkiLCJJTklUIiwiVVBEQVRFIiwiQUREIiwiTU9ERUwiLCJFTEVNRU5UIiwiRElTUE9TRSIsIkNPTExJU0lPTiIsIkNSRUFURUQiLCJTRVQiLCJQT1NJVElPTiIsIlFVQVRFUk5JT04iLCJMSU5FQVJfVkVMT0NJVFkiLCJBUFBMWSIsIklNUFVMU0UiLCJSRVNFVCIsIlNQRUVEIiwiRElSRUNUSU9OIiwiRUZGRUNUUyIsIkVYUExPU0lPTiIsIkRpc3BhdGNoZXIiLCJkdCIsInBvc3RNZXNzYWdlIiwiZXZlbnQiLCJ1dWlkIiwicG9zaXRpb24iLCJyb3RhdGlvbiIsInF1YXRlcm5pb24iLCJ3IiwiZXZlbnROYW1lIiwiZXZlbnREYXRhIiwiYXBwbHlNYXRyaXg0VG9WZWN0b3IzIiwibWF0cml4IiwiY3JlYXRlUmlnaWRCb2R5Iiwic2hhcGUiLCJvcHRpb25zIiwibWFzcyIsImZyaWN0aW9uIiwicmVzdGl0dXRpb24iLCJkYW1waW5nIiwibGluZWFyIiwiYW5ndWxhciIsInRyYW5zZm9ybSIsIkFtbW8iLCJidFRyYW5zZm9ybSIsInNldElkZW50aXR5Iiwic2V0T3JpZ2luIiwiYnRWZWN0b3IzIiwic2V0Um90YXRpb24iLCJidFF1YXRlcm5pb24iLCJtb3Rpb25TdGF0ZSIsImJ0RGVmYXVsdE1vdGlvblN0YXRlIiwibG9jYWxJbmVydGlhIiwiY2FsY3VsYXRlTG9jYWxJbmVydGlhIiwicmJJbmZvIiwiYnRSaWdpZEJvZHlDb25zdHJ1Y3Rpb25JbmZvIiwiYm9keSIsImJ0UmlnaWRCb2R5Iiwic2V0RnJpY3Rpb24iLCJzZXRSZXN0aXR1dGlvbiIsInNldERhbXBpbmciLCJzZXRBY3RpdmF0aW9uU3RhdGUiLCJ3b3JsZCIsImFkZFJpZ2lkQm9keSIsImFkZE1vZGVsIiwidmVydGljZXMiLCJtYXRyaWNlcyIsImluZGV4ZXMiLCJzY2FsZSIsImJ0YSIsImJ0YiIsImJ0YyIsInRyaU1lc2giLCJidFRyaWFuZ2xlTWVzaCIsImkiLCJsZW5ndGgiLCJjb21wb25lbnRzIiwiaW5kZXgiLCJBcnJheSIsImZyb20iLCJqIiwiYWkiLCJiaSIsImNpIiwidmEiLCJ2YiIsInZjIiwic2V0VmFsdWUiLCJhZGRUcmlhbmdsZSIsImxvY2FsU2NhbGUiLCJzZXRTY2FsaW5nIiwiZGVzdHJveSIsImNvbGxpc2lvblNoYXBlIiwiYnRCdmhUcmlhbmdsZU1lc2hTaGFwZSIsInJlc291cmNlcyIsInNldEJvZHkiLCJ0eXBlIiwic3RhdGUiLCJhZGRCb3giLCJkYXRhIiwid2lkdGgiLCJoZWlnaHQiLCJnZW9tZXRyeSIsImJ0Qm94U2hhcGUiLCJhZGRTcGhlcmUiLCJyYWRpdXMiLCJidFNwaGVyZVNoYXBlIiwic2V0TGluZWFyVmVsb2NpdHkiLCJnZXRFbGVtZW50IiwiZ2V0TW90aW9uU3RhdGUiLCJsaW5lYXJWZWxvY2l0eSIsInNldFBvc2l0aW9uIiwiZ2V0V29ybGRUcmFuc2Zvcm0iLCJzZXRXb3JsZFRyYW5zZm9ybSIsImFwcGx5SW1wdXNlIiwiaW1wdWxzZSIsImltcHVsc2VWZWN0b3IiLCJhcHBseUNlbnRyYWxJbXB1bHNlIiwiaGFuZGxlRWxlbWVudFVwZGF0ZSIsIm9yaWdpbiIsImdldE9yaWdpbiIsImdldFJvdGF0aW9uIiwiZGlzcGF0Y2hlciIsInNlbmRCb2R5VXBkYXRlIiwiYWRkUGxheWVyIiwiY2Fwc3VsZSIsImJ0Q2Fwc3VsZVNoYXBlIiwic2V0QW5ndWxhckZhY3RvciIsImhhbmRsZVBsYXllclVwZGF0ZSIsImNhbWVyYURpcmVjdGlvbiIsIk1BWF9TUEVFRCIsIndhbGtWZWxvY2l0eSIsImdldExpbmVhclZlbG9jaXR5Iiwic3BlZWQiLCJmb3J3YXJkRGlyIiwiZ2V0QmFzaXMiLCJnZXRSb3ciLCJub3JtYWxpemUiLCJ3YWxrRGlyZWN0aW9uIiwid2Fsa1NwZWVkIiwic2V0WCIsInNldFoiLCJzZXRDZW50ZXJPZk1hc3NUcmFuc2Zvcm0iLCJDbG9jayIsInRpbWVzdGFtcCIsInRpbWUiLCJEYXRlIiwibm93IiwiZGVsdGEiLCJXb3JsZCIsImdyYXZpdHkiLCJjb2xsaXNpb25Db25maWd1cmF0aW9uIiwiYnREZWZhdWx0Q29sbGlzaW9uQ29uZmlndXJhdGlvbiIsImJ0Q29sbGlzaW9uRGlzcGF0Y2hlciIsImJyb2FkcGhhc2UiLCJidERidnRCcm9hZHBoYXNlIiwic29sdmVyIiwiYnRTZXF1ZW50aWFsSW1wdWxzZUNvbnN0cmFpbnRTb2x2ZXIiLCJkeW5hbWljc1dvcmxkIiwiYnREaXNjcmV0ZUR5bmFtaWNzV29ybGQiLCJzZXRHcmF2aXR5IiwiZ2V0QnJvYWRwaGFzZSIsImdldE92ZXJsYXBwaW5nUGFpckNhY2hlIiwic2V0SW50ZXJuYWxHaG9zdFBhaXJDYWxsYmFjayIsImJ0R2hvc3RQYWlyQ2FsbGJhY2siLCJpbml0aWFsaXNlZCIsImhhc0VsZW1lbnQiLCJlbGVtZW50cyIsImRlbGV0ZWQiLCJPYmplY3QiLCJrZXlzIiwiZmlsdGVyIiwiZm9yRWFjaCIsImluY2x1ZGVzIiwiYWN0aW9uIiwiYWRkQWN0aW9uIiwiY29sbGlzaW9uT2JqZWN0IiwiYWRkQ29sbGlzaW9uT2JqZWN0Iiwic3RlcFNpbXVsYXRpb24iLCJjbG9jayIsImdldERlbHRhIiwiZWxlbWVudCIsImhhbmRsZVZlaGljbGVVcGRhdGUiLCJjYWxjdWxhdGVDb2xsaXNpb25zIiwicmVtb3ZlRGVsZXRlZEVsZW1lbnRzIiwic2VuZFBoeXNpY3NVcGRhdGUiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInNpbXVsYXRlIiwiYmluZCIsImFtbW9EaXNwYXRjaGVyIiwiZ2V0RGlzcGF0Y2hlciIsIm51bU1hbmlmb2xkcyIsImdldE51bU1hbmlmb2xkcyIsImNvbnRhY3RNYW5pZm9sZCIsImdldE1hbmlmb2xkQnlJbmRleEludGVybmFsIiwicmIwIiwiY2FzdE9iamVjdCIsImdldEJvZHkwIiwicmIxIiwiZ2V0Qm9keTEiLCJudW1Db250YWN0cyIsImdldE51bUNvbnRhY3RzIiwiY29udGFjdHMiLCJjb250YWN0UG9pbnQiLCJnZXRDb250YWN0UG9pbnQiLCJkaXN0YW5jZSIsImdldERpc3RhbmNlIiwidmVsb2NpdHkwIiwidmVsb2NpdHkxIiwid29ybGRQb3MwIiwiZ2V0X21fcG9zaXRpb25Xb3JsZE9uQSIsIndvcmxkUG9zMSIsImdldF9tX3Bvc2l0aW9uV29ybGRPbkIiLCJsb2NhbFBvczAiLCJnZXRfbV9sb2NhbFBvaW50QSIsImxvY2FsUG9zMSIsImdldF9tX2xvY2FsUG9pbnRCIiwicHVzaCIsIndvcmxkUG9zIiwibG9jYWxQb3MiLCJzZW5kRGlzcGF0Y2hFdmVudCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwic2VuZFRlcm1pbmF0ZUV2ZW50IiwidW5kZWZpbmVkIiwicmVtb3ZlUmlnaWRCb2R5IiwicmVtb3ZlRWxlbWVudCIsInNlbmRFbGVtZW50RGlzcG9zZWQiLCJERUZBVUxUX1JPTExfSU5GTFVFTkNFIiwiREVGQVVMVF9GUklDVElPTiIsIkRFRkFVTFRfTUFTUyIsImFkZFZlaGljbGUiLCJ3aGVlbHMiLCJyb2xsSW5mbHVlbmNlIiwid2hlZWxzT3B0aW9ucyIsInN1c3BlbnNpb25zIiwiYmFjayIsImZyb250IiwiYXhpc1Bvc2l0aW9uIiwiYXhpc1Bvc2l0aW9uQmFjayIsIndoZWVsUmFkaXVzQmFjayIsImhhbGZUcmFjayIsIndoZWVsSGFsZlRyYWNrQmFjayIsImF4aXNIZWlnaHQiLCJ3aGVlbEF4aXNIZWlnaHRCYWNrIiwiYXhpc1Bvc2l0aW9uRnJvbnQiLCJ3aGVlbFJhZGl1c0Zyb250Iiwid2hlZWxIYWxmVHJhY2tGcm9udCIsIndoZWVsQXhpc0hlaWdodEZyb250Iiwic3RpZmZuZXNzIiwiY29tcHJlc3Npb24iLCJyZXN0TGVuZ3RoIiwiY2hhc3NpcyIsInR1bmluZyIsImJ0VmVoaWNsZVR1bmluZyIsInJheUNhc3RlciIsImJ0RGVmYXVsdFZlaGljbGVSYXljYXN0ZXIiLCJnZXREeW5hbWljc1dvcmxkIiwidmVoaWNsZSIsImJ0UmF5Y2FzdFZlaGljbGUiLCJzZXRDb29yZGluYXRlU3lzdGVtIiwid2hlZWxEaXJlY3Rpb25DUzAiLCJ3aGVlbEF4bGVDUyIsImFkZFdoZWVsIiwiaXNGcm9udCIsInBvcyIsIndoZWVsSW5mbyIsInNldF9tX3N1c3BlbnNpb25TdGlmZm5lc3MiLCJzZXRfbV93aGVlbHNEYW1waW5nUmVsYXhhdGlvbiIsInNldF9tX3doZWVsc0RhbXBpbmdDb21wcmVzc2lvbiIsInNldF9tX2ZyaWN0aW9uU2xpcCIsInNldF9tX3JvbGxJbmZsdWVuY2UiLCJzZXRWZWhpY2xlUG9zaXRpb24iLCJnZXRSaWdpZEJvZHkiLCJzZXRWZWhpY2xlUXVhdGVybmlvbiIsInJlc2V0VmVoaWNsZSIsImdldEN1cnJlbnRTcGVlZEttSG91ciIsImJyZWFraW5nRm9yY2UiLCJlbmdpbmVGb3JjZSIsInN0ZWVyaW5nQ2xhbXAiLCJzdGVlcmluZ0luY3JlbWVudCIsIm1heEVuZ2luZUZvcmNlIiwibWF4QnJlYWtpbmdGb3JjZSIsImJyYWtpbmciLCJhcHBseUVuZ2luZUZvcmNlIiwic2V0QnJha2UiLCJzZXRTdGVlcmluZ1ZhbHVlIiwidG0iLCJwIiwicSIsIm4iLCJnZXROdW1XaGVlbHMiLCJ1cGRhdGVXaGVlbFRyYW5zZm9ybSIsImdldFdoZWVsVHJhbnNmb3JtV1MiLCJ3aGVlbFVVSUQiLCJnZXRDaGFzc2lzV29ybGRUcmFuc2Zvcm0iLCJnZXRGb3J3YXJkVmVjdG9yIiwidXBkYXRlQm9keVN0YXRlIiwiY3JlYXRlR2hvc3RDb2xsaWRlciIsImdob3N0Q29sbGlkZXIiLCJidEdob3N0T2JqZWN0Iiwic2V0Q29sbGlzaW9uU2hhcGUiLCJmb3JFYWNoR2hvc3RDb2xsaXNpb24iLCJmb3JFYWNoQ2FsbGJhY2siLCJjb2xsaXNpb25zIiwiZ2V0TnVtT3ZlcmxhcHBpbmdPYmplY3RzIiwib2JqZWN0IiwiZ2V0T3ZlcmxhcHBpbmdPYmplY3QiLCJnZXRFeHBsb3Npb25Qb3NpdGlvbiIsImV4cGxvc2lvblBvc2l0aW9uIiwiZ2V0RXhwbG9zaW9uSW1wdWxzZSIsInN0cmVuZ3RoIiwib3Bfc3ViIiwib3BfbXVsIiwic2V0WSIsImNyZWF0ZUV4cGxvc2lvbiIsIm9iamVjdFRyYW5zZm9ybSIsImFjdGl2YXRlIiwicmVtb3ZlQ29sbGlzaW9uT2JqZWN0IiwiZSIsImNvbnNvbGUiLCJsb2ciLCJoYW5kbGVMb2FkRXZlbnQiLCJzZWxmIiwib25tZXNzYWdlIiwiZGlzcG9zZUJvZHkiLCJ0ZXJtaW5hdGUiLCJpbml0Iiwic2VuZFJlYWR5RXZlbnQiLCJsb2FkQW1tbyIsInNjcmlwdFVybCIsImhvc3QiLCJwYXRoIiwiaW1wb3J0U2NyaXB0cyIsInRoZW4iXSwibWFwcGluZ3MiOiI7OztJQUFPLElBQU1BLFlBQVksR0FBRyxTQUFyQjtJQUVBLElBQU1DLEtBQUssR0FBRztJQUNqQkMsRUFBQUEsR0FBRyxFQUFFLEtBRFk7SUFFakJDLEVBQUFBLE1BQU0sRUFBRSxRQUZTO0lBR2pCQyxFQUFBQSxPQUFPLEVBQUUsU0FIUTtJQUlqQkMsRUFBQUEsSUFBSSxFQUFFLE1BSlc7SUFLakJDLEVBQUFBLE1BQU0sRUFBRTtJQUxTLENBQWQ7SUFlQSxJQUFNQyxxQkFBcUIsR0FBRztJQUNqQ0MsRUFBQUEsZUFBZSxFQUFFLENBRGdCO0lBRWpDQyxFQUFBQSxZQUFZLEVBQUUsS0FGbUI7SUFHakNDLEVBQUFBLFFBQVEsRUFBRSxLQUh1QjtJQUlqQ0MsRUFBQUEsS0FBSyxFQUFFLEtBSjBCO0lBS2pDQyxFQUFBQSxJQUFJLEVBQUU7SUFMMkIsQ0FBOUI7SUFRQSxJQUFNQyx1QkFBdUIsR0FBRztJQUNuQ0MsRUFBQUEsUUFBUSxFQUFFO0lBQUVDLElBQUFBLENBQUMsRUFBRSxDQUFMO0lBQVFDLElBQUFBLENBQUMsRUFBRSxDQUFYO0lBQWNDLElBQUFBLENBQUMsRUFBRTtJQUFqQixHQUR5QjtJQUVuQ0MsRUFBQUEsUUFBUSxFQUFFO0lBQ05DLElBQUFBLE9BQU8sRUFBRSxLQURIO0lBRU5DLElBQUFBLFNBQVMsRUFBRSxLQUZMO0lBR05SLElBQUFBLElBQUksRUFBRSxLQUhBO0lBSU5ELElBQUFBLEtBQUssRUFB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', false);
|
|
57530
57552
|
/* eslint-enable */var PHYSICS_EVENTS = {
|
|
57531
57553
|
DISPATCH: 'physics:dispatch',
|
|
57532
57554
|
TERMINATE: 'physics:terminate',
|
|
@@ -57791,14 +57813,14 @@ var EXPLOSION_STRENGTHS = {
|
|
|
57791
57813
|
position: DEFAULT_POSITION
|
|
57792
57814
|
};
|
|
57793
57815
|
|
|
57794
|
-
var DEFAULT_BOX_DESCRIPTION = _objectSpread2({}, DEFAULT_DESCRIPTION, {
|
|
57816
|
+
var DEFAULT_BOX_DESCRIPTION = _objectSpread2(_objectSpread2({}, DEFAULT_DESCRIPTION), {}, {
|
|
57795
57817
|
width: 2,
|
|
57796
57818
|
length: 2,
|
|
57797
57819
|
height: 2,
|
|
57798
57820
|
collider: COLLIDER_TYPES.BOX
|
|
57799
57821
|
});
|
|
57800
57822
|
|
|
57801
|
-
var DEFAULT_SPHERE_DESCRIPTION = _objectSpread2({}, DEFAULT_DESCRIPTION, {
|
|
57823
|
+
var DEFAULT_SPHERE_DESCRIPTION = _objectSpread2(_objectSpread2({}, DEFAULT_DESCRIPTION), {}, {
|
|
57802
57824
|
radius: 2,
|
|
57803
57825
|
collider: COLLIDER_TYPES.SPHERE
|
|
57804
57826
|
});
|
|
@@ -57905,10 +57927,10 @@ var extractSphereDescription = function extractSphereDescription(element) {
|
|
|
57905
57927
|
}, extractPositionAndQuaternion(element));
|
|
57906
57928
|
};
|
|
57907
57929
|
var getBoxDescriptionForElement = function getBoxDescriptionForElement(element) {
|
|
57908
|
-
return _objectSpread2({}, DEFAULT_BOX_DESCRIPTION,
|
|
57930
|
+
return _objectSpread2(_objectSpread2({}, DEFAULT_BOX_DESCRIPTION), extractBoxDescription(element));
|
|
57909
57931
|
};
|
|
57910
57932
|
var getSphereDescriptionForElement = function getSphereDescriptionForElement(element) {
|
|
57911
|
-
return _objectSpread2({}, DEFAULT_SPHERE_DESCRIPTION,
|
|
57933
|
+
return _objectSpread2(_objectSpread2({}, DEFAULT_SPHERE_DESCRIPTION), extractSphereDescription(element));
|
|
57912
57934
|
};
|
|
57913
57935
|
var mapColliderTypeToDescription = function mapColliderTypeToDescription() {
|
|
57914
57936
|
var _COLLIDER_TYPES$BOX$C2;
|
|
@@ -57960,9 +57982,7 @@ var getBoxDescriptionForElement$1 = getBoxDescriptionForElement,
|
|
|
57960
57982
|
mapColliderTypeToAddEvent$1 = mapColliderTypeToAddEvent,
|
|
57961
57983
|
DEFAULT_DESCRIPTION$1 = DEFAULT_DESCRIPTION;
|
|
57962
57984
|
var WORKER_READY_TIMEOUT = 200;
|
|
57963
|
-
var Physics =
|
|
57964
|
-
/*#__PURE__*/
|
|
57965
|
-
function (_EventDispatcher) {
|
|
57985
|
+
var Physics = /*#__PURE__*/function (_EventDispatcher) {
|
|
57966
57986
|
_inherits(Physics, _EventDispatcher);
|
|
57967
57987
|
|
|
57968
57988
|
var _super = _createSuper(Physics);
|
|
@@ -58198,9 +58218,9 @@ function (_EventDispatcher) {
|
|
|
58198
58218
|
|
|
58199
58219
|
if (Config$1.physics().enabled) {
|
|
58200
58220
|
this.createWorker();
|
|
58201
|
-
this.worker.postMessage(_objectSpread2({
|
|
58221
|
+
this.worker.postMessage(_objectSpread2(_objectSpread2({
|
|
58202
58222
|
event: PHYSICS_EVENTS.LOAD.AMMO
|
|
58203
|
-
}, Config$1.physics(), {
|
|
58223
|
+
}, Config$1.physics()), {}, {
|
|
58204
58224
|
host: getHostURL()
|
|
58205
58225
|
}));
|
|
58206
58226
|
return new Promise(function (resolve) {
|
|
@@ -58246,12 +58266,12 @@ function (_EventDispatcher) {
|
|
|
58246
58266
|
colliderType = _options$colliderType === void 0 ? COLLIDER_TYPES$1.BOX : _options$colliderType;
|
|
58247
58267
|
var uuid = element.uuid();
|
|
58248
58268
|
|
|
58249
|
-
var description = _objectSpread2({}, mapColliderTypeToDescription$1(colliderType)(element),
|
|
58269
|
+
var description = _objectSpread2(_objectSpread2({}, mapColliderTypeToDescription$1(colliderType)(element)), options);
|
|
58250
58270
|
|
|
58251
58271
|
this.storeElement(element, options);
|
|
58252
|
-
this.worker.postMessage(_objectSpread2({
|
|
58272
|
+
this.worker.postMessage(_objectSpread2(_objectSpread2({
|
|
58253
58273
|
event: mapColliderTypeToAddEvent$1(description.collider)
|
|
58254
|
-
}, description, {
|
|
58274
|
+
}, description), {}, {
|
|
58255
58275
|
uuid: uuid
|
|
58256
58276
|
}));
|
|
58257
58277
|
}
|
|
@@ -58263,10 +58283,10 @@ function (_EventDispatcher) {
|
|
|
58263
58283
|
var uuid = element.uuid();
|
|
58264
58284
|
var description = getBoxDescriptionForElement$1(element);
|
|
58265
58285
|
this.storeElement(element, options);
|
|
58266
|
-
this.worker.postMessage(_objectSpread2({
|
|
58286
|
+
this.worker.postMessage(_objectSpread2(_objectSpread2({
|
|
58267
58287
|
event: PHYSICS_EVENTS.ADD.VEHICLE,
|
|
58268
58288
|
uuid: uuid
|
|
58269
|
-
}, description,
|
|
58289
|
+
}, description), options));
|
|
58270
58290
|
}
|
|
58271
58291
|
}
|
|
58272
58292
|
}, {
|
|
@@ -58283,13 +58303,13 @@ function (_EventDispatcher) {
|
|
|
58283
58303
|
indexes.push(indexArray);
|
|
58284
58304
|
});
|
|
58285
58305
|
this.storeElement(model, options);
|
|
58286
|
-
this.worker.postMessage(_objectSpread2({
|
|
58306
|
+
this.worker.postMessage(_objectSpread2(_objectSpread2(_objectSpread2({
|
|
58287
58307
|
event: PHYSICS_EVENTS.ADD.MODEL,
|
|
58288
58308
|
uuid: uuid,
|
|
58289
58309
|
vertices: vertices,
|
|
58290
58310
|
matrices: matrices,
|
|
58291
58311
|
indexes: indexes
|
|
58292
|
-
}, DEFAULT_DESCRIPTION$1,
|
|
58312
|
+
}, DEFAULT_DESCRIPTION$1), extractPositionAndQuaternion$1(model)), options));
|
|
58293
58313
|
}
|
|
58294
58314
|
}
|
|
58295
58315
|
}, {
|
|
@@ -58308,9 +58328,9 @@ function (_EventDispatcher) {
|
|
|
58308
58328
|
|
|
58309
58329
|
return Physics;
|
|
58310
58330
|
}(EventDispatcher);
|
|
58311
|
-
var Physics$1 = new Physics();var
|
|
58312
|
-
|
|
58313
|
-
function (_BaseScript) {
|
|
58331
|
+
var Physics$1 = new Physics();var _excluded = ["wheels", "accelerationKey", "brakingKey", "rightKey", "leftKey", "debug"];
|
|
58332
|
+
|
|
58333
|
+
var BaseCar = /*#__PURE__*/function (_BaseScript) {
|
|
58314
58334
|
_inherits(BaseCar, _BaseScript);
|
|
58315
58335
|
|
|
58316
58336
|
var _super = _createSuper(BaseCar);
|
|
@@ -58335,7 +58355,7 @@ function (_BaseScript) {
|
|
|
58335
58355
|
leftKey = _options$leftKey === void 0 ? 'a' : _options$leftKey,
|
|
58336
58356
|
_options$debug = options.debug,
|
|
58337
58357
|
debug = _options$debug === void 0 ? false : _options$debug,
|
|
58338
|
-
physicsOptions = _objectWithoutProperties(options,
|
|
58358
|
+
physicsOptions = _objectWithoutProperties(options, _excluded);
|
|
58339
58359
|
|
|
58340
58360
|
this.car = element;
|
|
58341
58361
|
this.wheels = wheels;
|
|
@@ -58386,9 +58406,7 @@ function (_BaseScript) {
|
|
|
58386
58406
|
var index=/*#__PURE__*/Object.freeze({__proto__:null,Emitter: k$1,Particle: P,ParticlesSystem: E,Randomizers: N,Utils: b});var PARTICLE_EMITTER_TYPES = {
|
|
58387
58407
|
SINGLE: 'SINGLE',
|
|
58388
58408
|
GROUP: 'GROUP'
|
|
58389
|
-
};var ParticleEmitter =
|
|
58390
|
-
/*#__PURE__*/
|
|
58391
|
-
function (_EventDispatcher) {
|
|
58409
|
+
};var ParticleEmitter = /*#__PURE__*/function (_EventDispatcher) {
|
|
58392
58410
|
_inherits(ParticleEmitter, _EventDispatcher);
|
|
58393
58411
|
|
|
58394
58412
|
var _super = _createSuper(ParticleEmitter);
|
|
@@ -58474,7 +58492,7 @@ function (_EventDispatcher) {
|
|
|
58474
58492
|
}, {
|
|
58475
58493
|
key: "setPosition",
|
|
58476
58494
|
value: function setPosition(where) {
|
|
58477
|
-
var position = _objectSpread2({}, this.getPosition(),
|
|
58495
|
+
var position = _objectSpread2(_objectSpread2({}, this.getPosition()), where);
|
|
58478
58496
|
|
|
58479
58497
|
this.system.particleSystem.position.set(position.x, position.y, position.z);
|
|
58480
58498
|
}
|
|
@@ -58490,7 +58508,7 @@ function (_EventDispatcher) {
|
|
|
58490
58508
|
}, {
|
|
58491
58509
|
key: "setRotation",
|
|
58492
58510
|
value: function setRotation(howmuch) {
|
|
58493
|
-
var rotation = _objectSpread2({}, this.getRotation(),
|
|
58511
|
+
var rotation = _objectSpread2(_objectSpread2({}, this.getRotation()), howmuch);
|
|
58494
58512
|
|
|
58495
58513
|
this.system.particleSystem.rotation.set(rotation.x, rotation.y, rotation.z);
|
|
58496
58514
|
}
|
|
@@ -58524,9 +58542,7 @@ function (_EventDispatcher) {
|
|
|
58524
58542
|
}]);
|
|
58525
58543
|
|
|
58526
58544
|
return ParticleEmitter;
|
|
58527
|
-
}(EventDispatcher);var Fountain =
|
|
58528
|
-
/*#__PURE__*/
|
|
58529
|
-
function (_ParticleEmitter) {
|
|
58545
|
+
}(EventDispatcher);var Fountain = /*#__PURE__*/function (_ParticleEmitter) {
|
|
58530
58546
|
_inherits(Fountain, _ParticleEmitter);
|
|
58531
58547
|
|
|
58532
58548
|
var _super = _createSuper(Fountain);
|
|
@@ -58590,9 +58606,7 @@ function (_ParticleEmitter) {
|
|
|
58590
58606
|
*
|
|
58591
58607
|
*/
|
|
58592
58608
|
(function(a,b){module.exports=b(require$$0);})(commonjsGlobal,function(a){function bd(a,b,c,d){bd._super_.call(this),this.camera=a,this.renderer=b,this.dis=c||20,d=d||"1234";for(var e=1;e<5;e++)this["d"+e]=d.indexOf(e+"")>=0;this.name="ScreenZone";}function bc(a,c,d,e,f,g){var h,i,j,k,l,e;bc._super_.call(this),b.Util.isUndefined(c,d,e,f,g)?(h=i=j=0,k=l=e=a||100):b.Util.isUndefined(e,f,g)?(h=i=j=0,k=a,l=c,e=d):(h=a,i=c,j=d,k=e,l=f,e=g),this.x=h,this.y=i,this.z=j,this.width=k,this.height=l,this.depth=e,this.friction=.85,this.max=6;}function bb(a,c,d){var e,f,g;bb._super_.call(this),b.Util.isUndefined(a,c,d)?e=f=g=0:(e=a,f=c,g=d),this.x=e,this.y=f,this.z=g;}function ba(b,c){ba._super_.call(this),b instanceof a.Geometry?this.geometry=b:this.geometry=b.geometry,this.scale=c||1;}function _(a,c,d,e){var f,g,h,i;_._super_.call(this),b.Util.isUndefined(c,d,e)?(f=g=h=0,i=a||100):(f=a,g=c,h=d,i=e),this.x=f,this.y=f,this.z=f,this.radius=i,this.tha=this.phi=0;}function $(a,c,d,e,f,g){$._super_.call(this),a instanceof b.Vector3D?(this.x1=a.x,this.y1=a.y,this.z1=a.z,this.x2=e.x,this.y2=e.y,this.z2=e.z):(this.x1=a,this.y1=c,this.z1=d,this.x2=e,this.y2=f,this.z2=g);}function Z(){this.vector=new b.Vector3D(0,0,0),this.random=0,this.crossType="dead",this.log=!0;}function Y(){Y._super_.call(this),this.targetPool=new b.Pool,this.materialPool=new b.Pool,this.name="CustomRender";}function X(b){X._super_.call(this,b),this._body=new a.Sprite(new a.SpriteMaterial({color:16777215})),this.name="SpriteRender";}function W(a){W._super_.call(this),this.points=a,this.name="PointsRender";}function V(c){V._super_.call(this),this.container=c,this._targetPool=new b.Pool,this._materialPool=new b.Pool,this._body=new a.Mesh(new a.BoxGeometry(50,50,50),new a.MeshLambertMaterial({color:"#ff0000"})),this.name="MeshRender";}function U(){this.name="BaseRender";}function R(a,c,d){this.mouseTarget=b.Util.initValue(a,window),this.ease=b.Util.initValue(c,.7),this._allowEmitting=!1,this.mouse=new b.Vector3D,this.initEventHandler(),R._super_.call(this,d);}function Q(a){this.selfBehaviours=[],Q._super_.call(this,a);}function P(a){this.initializes=[],this.particles=[],this.behaviours=[],this.currentEmitTime=0,this.totalEmitTimes=-1,this.damping=.006,this.bindEmitter=!0,this.rate=new b.Rate(1,.1),P._super_.call(this,a),this.id="emitter_"+P.ID++,this.cID=0,this.name="Emitter";}function O(a,b,c,d,e,f,g){O._super_.call(this,f,g),O.prototype.reset(a,b,c,d,e),this.name="Spring";}function N(a,b,c,d){N._super_.call(this,c,d),this.reset(a,b),this.name="Color";}function M(a,b,c,d,e){M._super_.call(this,d,e),this.reset(a,b,c),this.name="Rotate";}function L(a,b,c,d){L._super_.call(this,c,d),this.reset(a,b),this.name="Scale";}function K(a,b,c,d){K._super_.call(this,c,d),this.reset(a,b),this.name="Alpha";}function J(a,b,c,d){J._super_.call(this,c,d),this.reset(a,b),this.name="CrossZone";}function I(a,b,c,d,e){I._super_.call(this,d,e),this.reset(a,b,c),this.name="Collision";}function H(a,b,c){H._super_.call(this,0,-a,0,b,c),this.name="Gravity";}function G(a,b,c,d,e){G._super_.call(this,a,b,c,d,e),this.force*=-1,this.name="Repulsion";}function F(a,b,c,d,e,f){F._super_.call(this,e,f),this.reset(a,b,c,d),this.time=0,this.name="RandomDrift";}function E(a,c,d,e,f){E._super_.call(this,e,f),this.targetPosition=b.Util.initValue(a,new b.Vector3D),this.radius=b.Util.initValue(d,1e3),this.force=b.Util.initValue(this.normalizeValue(c),100),this.radiusSq=this.radius*this.radius,this.attractionForce=new b.Vector3D,this.lengthSq=0,this.name="Attraction";}function D(a,b,c,d,e){D._super_.call(this,d,e),D.prototype.reset.call(this,a,b,c),this.name="Force";}function C(a,c,d){C._super_.call(this),this.body=b.createArraySpan(a),this.w=c,this.h=b.Util.initValue(d,this.w);}function B(a,c,d){B._super_.call(this),this.radius=b.createSpan(a,c,d);}function A(a,c,d){A._super_.call(this),this.massPan=b.createSpan(a,c,d);}function z(a,c,d){z._super_.call(this),this.reset(a,c,d),this.dirVec=new b.Vector3D(0,0,0),this.name="Velocity";}function y(){y._super_.call(this),this.reset.apply(this,arguments);}function x(a,c,d){x._super_.call(this),this.lifePan=b.createSpan(a,c,d);}function v(){this.name="Initialize";}function u(a,c){this.numPan=b.createSpan(b.Util.initValue(a,1)),this.timePan=b.createSpan(b.Util.initValue(c,1)),this.startTime=0,this.nextTime=0,this.init();}function t(a,c){this.id="Behaviour_"+t.id++,this.life=b.Util.initValue(a,Infinity),this.easing=b.Util.initValue(c,b.ease.setEasingByName(b.ease.easeLinear)),this.age=0,this.energy=1,this.dead=!1,this.name="Behaviour";}function s(a,b,c,d,e,f){this.x=a,this.y=b,this.z=c,this.width=d,this.height=e,this.depth=f,this.bottom=this.y+this.height,this.right=this.x+this.width,this.right=this.x+this.width;}function q(a){this._arr=b.Util.isArray(a)?a:[a];}function p(a,c,d){this._isArray=!1,b.Util.isArray(a)?(this._isArray=!0,this.a=a):(this.a=b.Util.initValue(a,1),this.b=b.Util.initValue(c,this.a),this._center=b.Util.initValue(d,!1));}function j(){this.cID=0,this.list={};}function i(a){this.id="particle_"+i.ID++,this.name="Particle",this.reset("init"),b.Util.setPrototypeByObj(this,a);}function c(){this.initialize();}function b(a,c){this.preParticles=b.Util.initValue(a,b.POOL_MAX),this.integrationType=b.Util.initValue(c,b.EULER),this.emitters=[],this.renderers=[],this.pool=new b.Pool,b.integrator=new b.Integration(this.integrationType);}b.POOL_MAX=500,b.TIME_STEP=60,b.PI=3.142,b.DR=b.PI/180,b.MEASURE=100,b.EULER="euler",b.RK2="runge-kutta2",b.RK4="runge-kutta4",b.VERLET="verlet",b.PARTICLE_CREATED="partilcleCreated",b.PARTICLE_UPDATE="partilcleUpdate",b.PARTICLE_SLEEP="particleSleep",b.PARTICLE_DEAD="partilcleDead",b.PROTON_UPDATE="protonUpdate",b.PROTON_UPDATE_AFTER="protonUpdateAfter",b.EMITTER_ADDED="emitterAdded",b.EMITTER_REMOVED="emitterRemoved",b.bindEmtterEvent=!1,b.prototype={addRender:function(a){this.renderers.push(a),a.init(this);},removeRender:function(a){this.renderers.splice(this.renderers.indexOf(a),1),a.remove(this);},addEmitter:function(a){this.emitters.push(a),a.parent=this,this.dispatchEvent("EMITTER_ADDED",a);},removeEmitter:function(a){a.parent==this&&(this.emitters.splice(this.emitters.indexOf(a),1),a.parent=null,this.dispatchEvent("EMITTER_REMOVED",a));},update:function(a){this.dispatchEvent("PROTON_UPDATE",this);var b=a||.0167;if(b>0){var c=this.emitters.length;while(c--)this.emitters[c].update(b);}this.dispatchEvent("PROTON_UPDATE_AFTER",this);},getCount:function(){var a=0,b,c=this.emitters.length;for(b=0;b<c;b++)a+=this.emitters[b].particles.length;return a},destroy:function(){var a=0,b=this.emitters.length;for(a;a<b;a++)this.emitters[a].destroy(),delete this.emitters[a];this.emitters.length=0,this.pool.destroy();}},c.initialize=function(a){a.addEventListener=d.addEventListener,a.removeEventListener=d.removeEventListener,a.removeAllEventListeners=d.removeAllEventListeners,a.hasEventListener=d.hasEventListener,a.dispatchEvent=d.dispatchEvent;};var d=c.prototype;d._listeners=null,d.initialize=function(){},d.addEventListener=function(a,b){this._listeners?this.removeEventListener(a,b):this._listeners={},this._listeners[a]||(this._listeners[a]=[]),this._listeners[a].push(b);return b},d.removeEventListener=function(a,b){if(!!this._listeners){if(!this._listeners[a])return;var c=this._listeners[a];for(var d=0,e=c.length;d<e;d++)if(c[d]==b){e==1?delete this._listeners[a]:c.splice(d,1);break}}},d.removeAllEventListeners=function(a){a?this._listeners&&delete this._listeners[a]:this._listeners=null;},d.dispatchEvent=function(a,b){var c=!1,d=this._listeners;if(a&&d){var e=d[a];if(!e)return c;e=e.slice();var f,g=e.length;while(g--){var f=e[g];c=c||f(b);}}return !!c},d.hasEventListener=function(a){var b=this._listeners;return !!b&&!!b[a]},c.initialize(b.prototype),b.EventDispatcher=c;var e=e||{initValue:function(a,b){var a=a!=null&&a!=undefined?a:b;return a},isArray:function(a){return Object.prototype.toString.call(a)==="[object Array]"},destroyArray:function(a){a.length=0;},destroyObject:function(a){for(var b in a)delete a[b];},isUndefined:function(){for(var a in arguments){var b=arguments[a];if(b!==undefined)return !1}return !0},setVectorByObj:function(a,b){b.x!==undefined&&(a.p.x=b.x),b.y!==undefined&&(a.p.y=b.y),b.z!==undefined&&(a.p.z=b.z),b.vx!==undefined&&(a.v.x=b.vx),b.vy!==undefined&&(a.v.y=b.vy),b.vz!==undefined&&(a.v.z=b.vz),b.ax!==undefined&&(a.a.x=b.ax),b.ay!==undefined&&(a.a.y=b.ay),b.az!==undefined&&(a.a.z=b.az),b.p!==undefined&&a.p.copy(b.p),b.v!==undefined&&a.v.copy(b.v),b.a!==undefined&&a.a.copy(b.a),b.position!==undefined&&a.p.copy(b.position),b.velocity!==undefined&&a.v.copy(b.velocity),b.accelerate!==undefined&&a.a.copy(b.accelerate);},setPrototypeByObj:function(a,b,c){for(var d in b)a.hasOwnProperty(d)&&(c?c.indexOf(d)<0&&(a[d]=e._getValue(b[d])):a[d]=e._getValue(b[d]));return a},_getValue:function(a){return a instanceof p?a.getValue():a},inherits:function(a,b){a._super_=b;if(Object.create)a.prototype=Object.create(b.prototype,{constructor:{value:a}});else {var c=function(){};c.prototype=b.prototype,a.prototype=new c,a.prototype.constructor=a;}}};b.Util=e;var f=f||{getRGB:function(b){var c={};if(typeof b=="number")e=Math.floor(b),c.r=(b>>16&255)/255,c.g=(b>>8&255)/255,c.b=(b&255)/255;else if(typeof b=="string"){var d;if(d=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(b))c.r=Math.min(255,parseInt(d[1],10))/255,c.g=Math.min(255,parseInt(d[2],10))/255,c.b=Math.min(255,parseInt(d[3],10))/255;else if(d=/^\#([A-Fa-f0-9]+)$/.exec(b)){var e=d[1];c.r=parseInt(e.charAt(0)+e.charAt(1),16)/255,c.g=parseInt(e.charAt(2)+e.charAt(3),16)/255,c.b=parseInt(e.charAt(4)+e.charAt(5),16)/255;}}else b instanceof a.Color&&(c.r=b.r,c.g=b.g,c.b=b.b);return c}};b.ColorUtil=f;var g={toScreenPos:function(){var b=new a.Vector3;return function(a,c,d){b.copy(a),b.project(c),b.x=Math.round((b.x+1)*d.width/2),b.y=Math.round((-b.y+1)*d.height/2),b.z=0;return b}}(),toSpacePos:function(){var b=new a.Vector3,c=new a.Vector3,d;return function(a,e,f){b.set(a.x/f.width*2-1,-(a.y/f.height)*2+1,.5),b.unproject(e),c.copy(b.sub(e.position).normalize()),d=-e.position.z/c.z,b.copy(e.position),b.add(c.multiplyScalar(d));return b}}(),getTexture:function(){var c={};return function(d){if(d instanceof a.Texture)return d;if(typeof d=="string"){var e=b.PUID.hash(d);c[e]||(c[e]=new a.Texture(d));return c[e]}if(d instanceof Image){var e=b.PUID.hash(d.src);c[e]||(c[e]=new a.Texture(d));return c[e]}}}()};b.THREEUtil=g;var h=h||{_id:0,_uids:{},id:function(a){for(var b in this._uids)if(this._uids[b]==a)return b;var c="PUID_"+this._id++;this._uids[c]=a;return c},hash:function(a){return}};b.PUID=h,i.ID=0,i.prototype={getDirection:function(){return Math.atan2(this.v.x,-this.v.y)*(180/b.PI)},reset:function(a){this.life=Infinity,this.age=0,this.energy=1,this.dead=!1,this.sleep=!1,this.body=null,this.parent=null,this.mass=1,this.radius=10,this.alpha=1,this.scale=1,this.useColor=!1,this.useAlpha=!1,this.easing=b.ease.setEasingByName(b.ease.easeLinear),a?(this.p=new b.Vector3D,this.v=new b.Vector3D,this.a=new b.Vector3D,this.old={},this.old.p=this.p.clone(),this.old.v=this.v.clone(),this.old.a=this.a.clone(),this.behaviours=[],this.transform={},this.color={r:0,g:0,b:0},this.rotation=new b.Vector3D):(this.p.set(0,0,0),this.v.set(0,0,0),this.a.set(0,0,0),this.old.p.set(0,0,0),this.old.v.set(0,0,0),this.old.a.set(0,0,0),this.color.r=0,this.color.g=0,this.color.b=0,this.rotation.clear(),b.Util.destroyObject(this.transform),this.removeAllBehaviours());return this},update:function(a,b){if(!this.sleep){this.age+=a;var c=this.behaviours.length;while(c--)this.behaviours[c]&&this.behaviours[c].applyBehaviour(this,a,b);}if(this.age>=this.life)this.destroy();else {var d=this.easing(this.age/this.life);this.energy=Math.max(1-d,0);}},addBehaviour:function(a){this.behaviours.push(a),a.initialize(this);},addBehaviours:function(a){var b=a.length;while(b--)this.addBehaviour(a[b]);},removeBehaviour:function(a){var b=this.behaviours.indexOf(a);b>-1&&this.behaviours.splice(b,1);},removeAllBehaviours:function(){b.Util.destroyArray(this.behaviours);},destroy:function(){this.removeAllBehaviours(),this.energy=0,this.dead=!0,this.parent=null;}},b.Particle=i,j.prototype={create:function(a){this.cID++;return typeof a=="function"?new a:a.clone()},getCount:function(){var a=0;for(var b in this.list)a+=this.list[b].length;return a++},get:function(a){var c,d=a.__puid||b.PUID.id(a);this.list[d]&&this.list[d].length>0?c=this.list[d].pop():c=this.create(a),c.__puid=a.__puid||d;return c},expire:function(a){return this._getList(a.__puid).push(a)},destroy:function(){for(var a in this.list)this.list[a].length=0,delete this.list[a];},_getList:function(a){a=a||"default",this.list[a]||(this.list[a]=[]);return this.list[a]}},b.Pool=j;var k={randomAToB:function(a,b,c){return c?(Math.random()*(b-a)>>0)+a:a+Math.random()*(b-a)},randomFloating:function(a,b,c){return k.randomAToB(a-b,a+b,c)},randomZone:function(a){},degreeTransform:function(a){return a*b.PI/180},toColor16:function(a){return "#"+a.toString(16)},randomColor:function(){return "#"+("00000"+(Math.random()*16777216<<0).toString(16)).slice(-6)},lerp:function(a,b,c){return b+(a-b)*c},getNormal:function(a,b){a.x==0&&a.y==0?a.z==0?b.set(1,0,1):b.set(1,1,-a.y/a.z):a.x==0?b.set(1,0,1):b.set(-a.y/a.x,1,1);return b.normalize()},axisRotate:function(a,b,c,d){var e=Math.cos(d),f=Math.sin(d),g=c.dot(b)*(1-e);a.copy(c),a.cross(b).scalar(f),a.addValue(b.x*e,b.y*e,b.z*e),a.addValue(c.x*g,c.y*g,c.z*g);}};b.MathUtils=k;var m=function(a){this.type=b.Util.initValue(a,b.EULER);};m.prototype={integrate:function(a,b,c){this.euler(a,b,c);},euler:function(a,b,c){a.sleep||(a.old.p.copy(a.p),a.old.v.copy(a.v),a.a.scalar(1/a.mass),a.v.add(a.a.scalar(b)),a.p.add(a.old.v.scalar(b)),c&&a.v.scalar(c),a.a.clear());}},b.Integration=m;var n=function(a,b,c){this.x=a||0,this.y=b||0,this.z=c||0;};n.prototype={set:function(a,b,c){this.x=a,this.y=b,this.z=c;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},getGradient:function(){if(this.x!=0)return Math.atan2(this.y,this.x);if(this.y>0)return b.PI/2;if(this.y<0)return -b.PI/2},copy:function(a){this.x=a.x,this.y=a.y,this.z=a.z;return this},add:function(a,b){if(b!==undefined)return this.addVectors(a,b);this.x+=a.x,this.y+=a.y,this.z+=a.z;return this},addValue:function(a,b,c){this.x+=a,this.y+=b,this.z+=c;return this},addVectors:function(a,b){this.x=a.x+b.x,this.y=a.y+b.y,this.z=a.z+b.z;return this},addScalar:function(a){this.x+=a,this.y+=a,this.z+=a;return this},sub:function(a,b){if(b!==undefined)return this.subVectors(a,b);this.x-=a.x,this.y-=a.y,this.z-=a.z;return this},subVectors:function(a,b){this.x=a.x-b.x,this.y=a.y-b.y,this.z=a.z-b.z;return this},scalar:function(a){this.x*=a,this.y*=a,this.z*=a;return this},divideScalar:function(a){a!==0?(this.x/=a,this.y/=a,this.z/=a):this.set(0,0,0);return this},negate:function(){return this.scalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},cross:function(a){var b=this.x,c=this.y,d=this.z;this.x=c*a.z-d*a.y,this.y=d*a.x-b*a.z,this.z=b*a.y-c*a.x;return this},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.lengthSq())},normalize:function(){return this.divideScalar(this.length())},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},crossVectors:function(a,b){var c=a.x,d=a.y,e=a.z,f=b.x,g=b.y,h=b.z;this.x=d*h-e*g,this.y=e*f-c*h,this.z=c*g-d*f;return this},eulerFromDir:function(a){},applyEuler:function(){var a;return function(c){a===undefined&&(a=new b.Quaternion),this.applyQuaternion(a.setFromEuler(c));return this}}(),applyAxisAngle:function(){var a;return function(c,d){a===undefined&&(a=new b.Quaternion),this.applyQuaternion(a.setFromAxisAngle(c,d));return this}}(),applyQuaternion:function(a){var b=this.x,c=this.y,d=this.z,e=a.x,f=a.y,g=a.z,h=a.w,i=h*b+f*d-g*c,j=h*c+g*b-e*d,k=h*d+e*c-f*b,l=-e*b-f*c-g*d;this.x=i*h+l*-e+j*-g-k*-f,this.y=j*h+l*-f+k*-e-i*-g,this.z=k*h+l*-g+i*-f-j*-e;return this},distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y,d=this.z-a.z;return b*b+c*c+d*d},lerp:function(a,b){this.x+=(a.x-this.x)*b,this.y+=(a.y-this.y)*b,this.z+=(a.z-this.z)*b;return this},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},clear:function(){this.x=0,this.y=0,this.z=0;return this},clone:function(){return new b.Vector3D(this.x,this.y,this.z)},toString:function(){return "x:"+this.x+"y:"+this.y+"z:"+this.z}},b.Vector3D=n;var o=function(a,b,c){this.radius=a||1,this.phi=c||0,this.theta=b||0;};o.prototype={set:function(a,b,c){this.radius=a||1,this.phi=c||0,this.theta=b||0;return this},setRadius:function(a){this.radius=a;return this},setPhi:function(a){this.phi=a;return this},setTheta:function(a){this.theta=a;return this},copy:function(a){this.radius=a.radius,this.phi=a.phi,this.theta=a.theta;return this},toVector3D:function(){return new b.Vector3D(this.getX(),this.getY(),this.getZ())},getX:function(){return this.radius*Math.sin(this.theta)*Math.cos(this.phi)},getY:function(){return -this.radius*Math.sin(this.theta)*Math.sin(this.phi)},getZ:function(){return this.radius*Math.cos(this.theta)},normalize:function(){this.radius=1;return this},equals:function(a){return a.radius===this.radius&&a.phi===this.phi&&a.theta===this.theta},clear:function(){this.radius=0,this.phi=0,this.theta=0;return this},clone:function(){return new o(this.radius,this.phi,this.theta)}},b.Polar3D=o,p.prototype={getValue:function(a){return this._isArray?this.a[this.a.length*Math.random()>>0]:this._center?b.MathUtils.randomFloating(this.a,this.b,a):b.MathUtils.randomAToB(this.a,this.b,a)}},b.createSpan=function(a,b,c){if(a instanceof p)return a;return b===undefined?new p(a):c===undefined?new p(a,b):new p(a,b,c)},b.Span=p,b.Util.inherits(q,b.Span),q.prototype.getValue=function(){var a=this._arr[this._arr.length*Math.random()>>0];return a=="random"||a=="Random"?b.MathUtils.randomColor():a},b.createArraySpan=function(a){if(!a)return null;return a instanceof b.ArraySpan?a:new b.ArraySpan(a)},b.ArraySpan=q;var r=function(a,b,c,d){this.x=a||0,this.y=b||0,this.z=c||0,this.w=d!==undefined?d:1;};r.prototype={set:function(a,b,c,d){this.x=a,this.y=b,this.z=c,this.w=d;return this},clone:function(){return new b.Quaternion(this.x,this.y,this.z,this.w)},copy:function(a){this.x=a.x,this.y=a.y,this.z=a.z,this.w=a.w;return this},setFromEuler:function(a){var b=Math.cos(a.x/2),c=Math.cos(a.y/2),d=Math.cos(a.z/2),e=Math.sin(a.x/2),f=Math.sin(a.y/2),g=Math.sin(a.z/2);this.x=e*c*d+b*f*g,this.y=b*f*d-e*c*g,this.z=b*c*g+e*f*d,this.w=b*c*d-e*f*g;return this},setFromAxisAngle:function(a,b){var c=b/2,d=Math.sin(c);this.x=a.x*d,this.y=a.y*d,this.z=a.z*d,this.w=Math.cos(c);return this},normalize:function(){var a=this.length();a===0?(this.x=0,this.y=0,this.z=0,this.w=1):(a=1/a,this.x*=a,this.y*=a,this.z*=a,this.w*=a);return this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w}},b.Quaternion=r,s.prototype={contains:function(a,b,c){return a<=this.right&&a>=this.x&&b<=this.bottom&&b>=this.y&&c<=this.depth&&c>=this.z?!0:!1}},b.Box=s,t.id=0,t.prototype={reset:function(a,c){this.life=b.Util.initValue(a,Infinity),this.easing=b.Util.initValue(c,b.ease.setEasingByName(b.ease.easeLinear));},normalizeForce:function(a){return a.scalar(b.MEASURE)},normalizeValue:function(a){return a*b.MEASURE},initialize:function(a){},applyBehaviour:function(a,b,c){if(!this.dead){this.age+=b;if(this.age>=this.life){this.energy=0,this.dead=!0;return}var d=this.easing(a.age/a.life);this.energy=Math.max(1-d,0);}},destroy:function(){}},b.Behaviour=t,u.prototype={init:function(){this.startTime=0,this.nextTime=this.timePan.getValue();},getValue:function(a){this.startTime+=a;if(this.startTime>=this.nextTime){this.init();return this.numPan.b==1?this.numPan.getValue("Float")>.5?1:0:this.numPan.getValue("Int")}return 0}},b.Rate=u,v.prototype.reset=function(){},v.prototype.init=function(a,b){b?this.initialize(b):this.initialize(a);},v.prototype.initialize=function(a){},b.Initialize=v;var w={initialize:function(a,c,d){var e=d.length;while(e--){var f=d[e];f instanceof b.Initialize?f.init(a,c):w.init(a,c,f);}w.bindEmitter(a,c);},init:function(a,c,d){b.Util.setPrototypeByObj(c,d),b.Util.setVectorByObj(c,d);},bindEmitter:function(a,b){a.bindEmitter&&(b.p.add(a.p),b.v.add(a.v),b.a.add(a.a),b.v.applyEuler(a.rotation));}};b.InitializeUtil=w,b.Util.inherits(x,b.Initialize),x.prototype.initialize=function(a){this.lifePan.a==Infinity||this.lifePan.a=="infi"?a.life=Infinity:a.life=this.lifePan.getValue();},b.Life=x,b.Util.inherits(y,b.Initialize),y.prototype.reset=function(){this.zones?this.zones.length=0:this.zones=[];var a=Array.prototype.slice.call(arguments);this.zones=this.zones.concat(a);},y.prototype.addZone=function(){var a=Array.prototype.slice.call(arguments);this.zones=this.zones.concat(a);},y.prototype.initialize=function(){return function(a){var b=this.zones[Math.random()*this.zones.length>>0];b.getPosition(),a.p.x=b.vector.x,a.p.y=b.vector.y,a.p.z=b.vector.z;}}(),b.Position=y,b.P=y,b.Util.inherits(z,b.Initialize),z.prototype.reset=function(a,c,d){a instanceof b.Vector3D?(this.radiusPan=b.createSpan(1),this.dir=a.clone(),this.tha=c*b.DR,this._useV=!0):a instanceof b.Polar3D?(this.tha=c*b.DR,this.dirVec=a.toVector3D(),this._useV=!1):(this.radiusPan=b.createSpan(a),this.dir=c.clone().normalize(),this.tha=d*b.DR,this._useV=!0);},z.prototype.normalize=function(a){return a*b.MEASURE},z.prototype.initialize=function(){var a,c=new b.Vector3D(0,0,1),d=new b.Vector3D(0,0,0);return function(e){a=this.tha*Math.random(),this._useV&&this.dirVec.copy(this.dir).scalar(this.radiusPan.getValue()),b.MathUtils.getNormal(this.dirVec,c),d.copy(this.dirVec).applyAxisAngle(c,a),d.applyAxisAngle(this.dirVec.normalize(),Math.random()*b.PI*2),e.v.copy(d);return this}}(),b.Velocity=z,b.V=z,b.Util.inherits(A,b.Initialize),A.prototype.initialize=function(a){a.mass=this.massPan.getValue();},b.Mass=A,b.Util.inherits(B,b.Initialize),B.prototype.reset=function(a,c,d){this.radius=b.createSpan(a,c,d);},B.prototype.initialize=function(a){a.radius=this.radius.getValue(),a.transform.oldRadius=a.radius;},b.Radius=B,b.Util.inherits(C,b.Initialize),C.prototype.initialize=function(a){var b=this.body.getValue();this.w?a.body={width:this.w,height:this.h,body:b}:a.body=b;},b.Body=C,b.Util.inherits(D,b.Behaviour),D.prototype.reset=function(a,c,d){this.force=this.normalizeForce(new b.Vector3D(a,c,d)),this.force.id=Math.random();},D.prototype.applyBehaviour=function(a,b,c){D._super_.prototype.applyBehaviour.call(this,a,b,c),a.a.add(this.force);},b.F=b.Force=D,b.Util.inherits(E,b.Behaviour),E.prototype.reset=function(a,c,d,e,f){this.targetPosition=b.Util.initValue(a,new b.Vector3D),this.radius=b.Util.initValue(d,1e3),this.force=b.Util.initValue(this.normalizeValue(c),100),this.radiusSq=this.radius*this.radius,this.attractionForce=new b.Vector3D,this.lengthSq=0,e&&E._super_.prototype.reset.call(this,e,f);},E.prototype.applyBehaviour=function(a,b,c){E._super_.prototype.applyBehaviour.call(this,a,b,c),this.attractionForce.copy(this.targetPosition),this.attractionForce.sub(a.p),this.lengthSq=this.attractionForce.lengthSq(),this.lengthSq>4e-6&&this.lengthSq<this.radiusSq&&(this.attractionForce.normalize(),this.attractionForce.scalar(1-this.lengthSq/this.radiusSq),this.attractionForce.scalar(this.force),a.a.add(this.attractionForce));},b.Attraction=E,b.Util.inherits(F,b.Behaviour),F.prototype.reset=function(a,c,d,e,f,g){this.randomFoce=this.normalizeForce(new b.Vector3D(a,c,d)),this.delayPan=b.createSpan(e||.03),this.time=0,f&&F._super_.prototype.reset.call(this,f,g);},F.prototype.applyBehaviour=function(a,c,d){F._super_.prototype.applyBehaviour.call(this,a,c,d),this.time+=c;if(this.time>=this.delayPan.getValue()){var e=b.MathUtils.randomAToB(-this.randomFoce.x,this.randomFoce.x),f=b.MathUtils.randomAToB(-this.randomFoce.y,this.randomFoce.y),g=b.MathUtils.randomAToB(-this.randomFoce.z,this.randomFoce.z);a.a.addValue(e,f,g),this.time=0;}},b.RandomDrift=F,b.Util.inherits(G,b.Attraction),G.prototype.reset=function(a,b,c,d,e){G._super_.prototype.reset.call(this,a,b,c,d,e),this.force*=-1;},b.Repulsion=G,b.Util.inherits(H,b.Force),H.prototype.reset=function(a,b,c){H._super_.prototype.reset.call(this,0,-a,0,b,c);},b.Gravity=H,b.G=H,b.Util.inherits(I,b.Behaviour),I.prototype.reset=function(a,c,d,e,f){this.emitter=a,this.useMass=c,this.callback=d,this.particles=[],this.delta=new b.Vector3D,e&&I._super_.prototype.reset.call(this,e,f);},I.prototype.applyBehaviour=function(a,b,c){var d=this.emitter?this.emitter.particles.slice(c):this.particles.slice(c),e,f,g,h,i,j,k=d.length;while(k--){e=d[k];if(e==a)continue;this.delta.copy(e.p).sub(a.p),f=this.delta.lengthSq(),h=a.radius+e.radius,f<=h*h&&(g=h-Math.sqrt(f),g+=.5,i=this._getAverageMass(a,e),j=this._getAverageMass(e,a),a.p.add(this.delta.clone().normalize().scalar(g*-i)),e.p.add(this.delta.normalize().scalar(g*j)),this.callback&&this.callback(a,e));}},I.prototype._getAverageMass=function(a,b){return this.useMass?b.mass/(a.mass+b.mass):.5},b.Collision=I,b.Util.inherits(J,b.Behaviour),J.prototype.reset=function(a,c,d,e){var f,g;typeof a=="string"?(g=a,f=c):(g=c,f=a),this.zone=f,this.zone.crossType=b.Util.initValue(g,"dead"),d&&J._super_.prototype.reset.call(this,d,e);},J.prototype.applyBehaviour=function(a,b,c){J._super_.prototype.applyBehaviour.call(this,a,b,c),this.zone.crossing.call(this.zone,a);},b.CrossZone=J,b.Util.inherits(K,b.Behaviour),K.prototype.reset=function(a,c,d,e){c==null||c==undefined?this._same=!0:this._same=!1,this.a=b.createSpan(b.Util.initValue(a,1)),this.b=b.createSpan(c),d&&K._super_.prototype.reset.call(this,d,e);},K.prototype.initialize=function(a){a.useAlpha=!0,a.transform.alphaA=this.a.getValue(),this._same?a.transform.alphaB=a.transform.alphaA:a.transform.alphaB=this.b.getValue();},K.prototype.applyBehaviour=function(a,c,d){K._super_.prototype.applyBehaviour.call(this,a,c,d),a.alpha=b.MathUtils.lerp(a.transform.alphaA,a.transform.alphaB,this.energy),a.alpha<.002&&(a.alpha=0);},b.Alpha=K,b.Util.inherits(L,b.Behaviour),L.prototype.reset=function(a,c,d,e){c==null||c==undefined?this._same=!0:this._same=!1,this.a=b.createSpan(b.Util.initValue(a,1)),this.b=b.createSpan(c),d&&L._super_.prototype.reset.call(this,d,e);},L.prototype.initialize=function(a){a.transform.scaleA=this.a.getValue(),a.transform.oldRadius=a.radius,this._same?a.transform.scaleB=a.transform.scaleA:a.transform.scaleB=this.b.getValue();},L.prototype.applyBehaviour=function(a,c,d){L._super_.prototype.applyBehaviour.call(this,a,c,d),a.scale=b.MathUtils.lerp(a.transform.scaleA,a.transform.scaleB,this.energy),a.scale<5e-4&&(a.scale=0),a.radius=a.transform.oldRadius*a.scale;},b.Scale=L,b.Util.inherits(M,b.Behaviour),M.prototype.reset=function(a,c,d,e,f){this.a=a||0,this.b=c||0,this.c=d||0,a===undefined||a=="same"?this._type="same":c==undefined?this._type="set":d===undefined?this._type="to":(this._type="add",this.a=b.createSpan(this.a*b.DR),this.b=b.createSpan(this.b*b.DR),this.c=b.createSpan(this.c*b.DR)),e&&M._super_.prototype.reset.call(this,e,f);},M.prototype.initialize=function(a){switch(this._type){case"same":break;case"set":this._setRotation(a.rotation,this.a);break;case"to":a.transform.fR=a.transform.fR||new b.Vector3D,a.transform.tR=a.transform.tR||new b.Vector3D,this._setRotation(a.transform.fR,this.a),this._setRotation(a.transform.tR,this.b);break;case"add":a.transform.addR=new b.Vector3D(this.a.getValue(),this.b.getValue(),this.c.getValue());}},M.prototype._setRotation=function(a,c){a=a||new b.Vector3D;if(c=="random"){var d=b.MathUtils.randomAToB(-b.PI,b.PI),e=b.MathUtils.randomAToB(-b.PI,b.PI),f=b.MathUtils.randomAToB(-b.PI,b.PI);a.set(d,e,f);}else c instanceof b.Vector3D&&a.copy(c);},M.prototype.applyBehaviour=function(a,c,d){M._super_.prototype.applyBehaviour.call(this,a,c,d);switch(this._type){case"same":a.rotation||(a.rotation=new b.Vector3D),a.rotation.eulerFromDir(a.v);break;case"set":break;case"to":a.rotation.x=b.MathUtils.lerp(a.transform.fR.x,a.transform.tR.x,this.energy),a.rotation.y=b.MathUtils.lerp(a.transform.fR.y,a.transform.tR.y,this.energy),a.rotation.z=b.MathUtils.lerp(a.transform.fR.z,a.transform.tR.z,this.energy);break;case"add":a.rotation.add(a.transform.addR);}},b.Rotate=M,b.Util.inherits(N,b.Behaviour),N.prototype.reset=function(a,c,d,e){c==null||c==undefined?this._same=!0:this._same=!1,this.a=b.createArraySpan(a),this.b=b.createArraySpan(c),d&&N._super_.prototype.reset.call(this,d,e);},N.prototype.initialize=function(a){a.transform.colorA=b.ColorUtil.getRGB(this.a.getValue()),a.useColor=!0,this._same?a.transform.colorB=a.transform.colorA:a.transform.colorB=b.ColorUtil.getRGB(this.b.getValue());},N.prototype.applyBehaviour=function(a,c,d){N._super_.prototype.applyBehaviour.call(this,a,c,d),this._same?(a.color.r=a.transform.colorA.r,a.color.g=a.transform.colorA.g,a.color.b=a.transform.colorA.b):(a.color.r=b.MathUtils.lerp(a.transform.colorA.r,a.transform.colorB.r,this.energy),a.color.g=b.MathUtils.lerp(a.transform.colorA.g,a.transform.colorB.g,this.energy),a.color.b=b.MathUtils.lerp(a.transform.colorA.b,a.transform.colorB.b,this.energy));},b.Color=N,b.Util.inherits(O,b.Behaviour),O.prototype.reset=function(a,c,d,e,f){this.pos?this.pos.set(a,c,d):this.pos=new b.Vector3D(a,c,d),this.spring=e||.1,this.friction=f||.98;},O.prototype.applyBehaviour=function(a,b,c){O._super_.prototype.applyBehaviour.call(this,a,b,c),a.v.x+=(this.pos.x-a.p.x)*this.spring,a.v.y+=(this.pos.y-a.p.y)*this.spring,a.v.z+=(this.pos.z-a.p.z)*this.spring;},b.Spring=O,P.ID=0,b.Util.inherits(P,b.Particle),b.EventDispatcher.initialize(P.prototype),P.prototype.emit=function(a,c){this.currentEmitTime=0,this.totalEmitTimes=b.Util.initValue(a,Infinity),c==!0||c=="life"||c=="destroy"?this.life=a=="once"?1:this.totalEmitTimes:isNaN(c)||(this.life=c),this.rate.init();},P.prototype.stopEmit=function(){this.totalEmitTimes=-1,this.currentEmitTime=0;},P.prototype.removeAllParticles=function(){var a=this.particles.length;while(a--)this.particles[a].dead=!0;},P.prototype.createParticle=function(a,c){var d=this.parent.pool.get(b.Particle);this.setupParticle(d,a,c),this.parent&&this.parent.dispatchEvent("PARTICLE_CREATED",d),b.bindEmtterEvent&&this.dispatchEvent("PARTICLE_CREATED",d);return d},P.prototype.addSelfInitialize=function(a){a.init?a.init(this):this.initAll();},P.prototype.addInitialize=function(){var a=arguments.length;while(a--)this.initializes.push(arguments[a]);},P.prototype.removeInitialize=function(a){var b=this.initializes.indexOf(a);b>-1&&this.initializes.splice(b,1);},P.prototype.removeInitializers=function(){b.Util.destroyArray(this.initializes);},P.prototype.addBehaviour=function(){var a=arguments.length;while(a--)this.behaviours.push(arguments[a]);},P.prototype.removeBehaviour=function(a){var b=this.behaviours.indexOf(a);b>-1&&this.behaviours.splice(b,1);},P.prototype.removeAllBehaviours=function(){b.Util.destroyArray(this.behaviours);},P.prototype.integrate=function(a){var c=1-this.damping;b.integrator.integrate(this,a,c);var d=this.particles.length;while(d--){var e=this.particles[d];e.update(a,d),b.integrator.integrate(e,a,c),this.parent&&this.parent.dispatchEvent("PARTICLE_UPDATE",e),b.bindEmtterEvent&&this.dispatchEvent("PARTICLE_UPDATE",e);}},P.prototype.emitting=function(a){if(this.totalEmitTimes=="once"){var b=this.rate.getValue(99999);b>0&&(this.cID=b);while(b--)this.createParticle();this.totalEmitTimes="none";}else if(!isNaN(this.totalEmitTimes)){this.currentEmitTime+=a;if(this.currentEmitTime<this.totalEmitTimes){var b=this.rate.getValue(a);b>0&&(this.cID=b);while(b--)this.createParticle();}}},P.prototype.update=function(a){this.age+=a,(this.dead||this.age>=this.life)&&this.destroy(),this.emitting(a),this.integrate(a);var c,d=this.particles.length;while(d--)c=this.particles[d],c.dead&&(this.parent&&this.parent.dispatchEvent("PARTICLE_DEAD",c),b.bindEmtterEvent&&this.dispatchEvent("PARTICLE_DEAD",c),this.parent.pool.expire(c.reset()),this.particles.splice(d,1));},P.prototype.setupParticle=function(a,c,d){var e=this.initializes,f=this.behaviours;c&&(b.Util.isArray(c)?e=c:e=[c]),d&&(b.Util.isArray(d)?f=d:f=[d]),b.InitializeUtil.initialize(this,a,e),a.addBehaviours(f),a.parent=this,this.particles.push(a);},P.prototype.destroy=function(){this.dead=!0,this.energy=0,this.totalEmitTimes=-1,this.particles.length==0&&(this.removeInitializers(),this.removeAllBehaviours(),this.parent&&this.parent.removeEmitter(this));},b.Emitter=P,b.Util.inherits(Q,b.Emitter),Q.prototype.addSelfBehaviour=function(){var a=arguments.length,b;for(b=0;b<a;b++)this.selfBehaviours.push(arguments[b]);},Q.prototype.removeSelfBehaviour=function(a){var b=this.selfBehaviours.indexOf(a);b>-1&&this.selfBehaviours.splice(b,1);},Q.prototype.update=function(a){Q._super_.prototype.update.call(this,a);if(!this.sleep){var b=this.selfBehaviours.length,c;for(c=0;c<b;c++)this.selfBehaviours[c].applyBehaviour(this,a,c);}},b.BehaviourEmitter=Q,b.Util.inherits(R,b.Emitter),R.prototype.initEventHandler=function(){var a=this;this.mousemoveHandler=function(b){a.mousemove.call(a,b);},this.mousedownHandler=function(b){a.mousedown.call(a,b);},this.mouseupHandler=function(b){a.mouseup.call(a,b);},this.mouseTarget.addEventListener("mousemove",this.mousemoveHandler,!1);},R.prototype.emit=function(){this._allowEmitting=!0;},R.prototype.stopEmit=function(){this._allowEmitting=!1;},R.prototype.setCameraAndCanvas=function(a,b){this.camera=a,this.canvas=b;},R.prototype.setCameraAndRenderer=function(a,b){this.camera=a,this.renderer=b,this.canvas=b.domElement;},R.prototype.mousemove=function(a){var c=this.canvas.getBoundingClientRect(),d=a.clientX-c.left,e=a.clientY-c.top,f=this.renderer?this.renderer.getPixelRatio():1;d*=f,e*=f,this.mouse.x+=(d-this.mouse.x)*this.ease,this.mouse.y+=(e-this.mouse.y)*this.ease,this.p.copy(b.THREEUtil.toSpacePos(this.mouse,this.camera,this.canvas,this.renderer)),this._allowEmitting&&R._super_.prototype.emit.call(this,"once");},R.prototype.destroy=function(){R._super_.prototype.destroy.call(this),this.mouseTarget.removeEventListener("mousemove",this.mousemoveHandler,!1);},b.FollowEmitter=R;var S=S||{easeLinear:function(a){return a},easeInQuad:function(a){return Math.pow(a,2)},easeOutQuad:function(a){return -(Math.pow(a-1,2)-1)},easeInOutQuad:function(a){if((a/=.5)<1)return .5*Math.pow(a,2);return -0.5*((a-=2)*a-2)},easeInCubic:function(a){return Math.pow(a,3)},easeOutCubic:function(a){return Math.pow(a-1,3)+1},easeInOutCubic:function(a){if((a/=.5)<1)return .5*Math.pow(a,3);return .5*(Math.pow(a-2,3)+2)},easeInQuart:function(a){return Math.pow(a,4)},easeOutQuart:function(a){return -(Math.pow(a-1,4)-1)},easeInOutQuart:function(a){if((a/=.5)<1)return .5*Math.pow(a,4);return -0.5*((a-=2)*Math.pow(a,3)-2)},easeInSine:function(a){return -Math.cos(a*(b.PI/2))+1},easeOutSine:function(a){return Math.sin(a*(b.PI/2))},easeInOutSine:function(a){return -0.5*(Math.cos(b.PI*a)-1)},easeInExpo:function(a){return a===0?0:Math.pow(2,10*(a-1))},easeOutExpo:function(a){return a===1?1:-Math.pow(2,-10*a)+1},easeInOutExpo:function(a){if(a===0)return 0;if(a===1)return 1;if((a/=.5)<1)return .5*Math.pow(2,10*(a-1));return .5*(-Math.pow(2,-10*--a)+2)},easeInCirc:function(a){return -(Math.sqrt(1-a*a)-1)},easeOutCirc:function(a){return Math.sqrt(1-Math.pow(a-1,2))},easeInOutCirc:function(a){if((a/=.5)<1)return -0.5*(Math.sqrt(1-a*a)-1);return .5*(Math.sqrt(1-(a-=2)*a)+1)},easeInBack:function(a){var b=1.70158;return a*a*((b+1)*a-b)},easeOutBack:function(a){var b=1.70158;return (a=a-1)*a*((b+1)*a+b)+1},easeInOutBack:function(a){var b=1.70158;if((a/=.5)<1)return .5*a*a*(((b*=1.525)+1)*a-b);return .5*((a-=2)*a*(((b*=1.525)+1)*a+b)+2)},setEasingByName:function(a){return S[a]?S[a]:S.easeLinear}};for(var T in S)T!="setEasingByName"&&(b[T]=S[T]);b.ease=S,U.prototype={init:function(a){var b=this;this.proton=a,this.proton.addEventListener("PROTON_UPDATE",function(a){b.onProtonUpdate.call(b,a);}),this.proton.addEventListener("PARTICLE_CREATED",function(a){b.onParticleCreated.call(b,a);}),this.proton.addEventListener("PARTICLE_UPDATE",function(a){b.onParticleUpdate.call(b,a);}),this.proton.addEventListener("PARTICLE_DEAD",function(a){b.onParticleDead.call(b,a);});},remove:function(a){this.proton=null;},onParticleCreated:function(a){},onParticleUpdate:function(a){},onParticleDead:function(a){},onProtonUpdate:function(a){}},b.BaseRender=U,b.Util.inherits(V,b.BaseRender),V.prototype.onProtonUpdate=function(){},V.prototype.onParticleCreated=function(a){if(!a.target){a.body||(a.body=this._body),a.target=this._targetPool.get(a.body);if(a.useAlpha||a.useColor)a.target.material.__puid=b.PUID.id(a.body.material),a.target.material=this._materialPool.get(a.target.material);}a.target&&(a.target.position.copy(a.p),this.container.add(a.target));},V.prototype.onParticleUpdate=function(a){a.target&&(a.target.position.copy(a.p),a.target.rotation.set(a.rotation.x,a.rotation.y,a.rotation.z),this.scale(a),a.useAlpha&&(a.target.material.opacity=a.alpha,a.target.material.transparent=!0),a.useColor&&a.target.material.color.copy(a.color));},V.prototype.scale=function(a){a.target.scale.set(a.scale,a.scale,a.scale);},V.prototype.onParticleDead=function(a){a.target&&((a.useAlpha||a.useColor)&&this._materialPool.expire(a.target.material),this._targetPool.expire(a.target),this.container.remove(a.target),a.target=null);},b.MeshRender=V,b.Util.inherits(W,b.BaseRender),W.prototype.onProtonUpdate=function(){},W.prototype.onParticleCreated=function(b){b.target||(b.target=new a.Vector3),b.target.copy(b.p),this.points.geometry.vertices.push(b.target);},W.prototype.onParticleUpdate=function(a){a.target&&a.target.copy(a.p);},W.prototype.onParticleDead=function(a){if(a.target){var b=this.points.geometry.vertices.indexOf(a.target);b>-1&&this.points.geometry.vertices.splice(b,1),a.target=null;}},b.PointsRender=W,b.Util.inherits(X,b.MeshRender),X.prototype.scale=function(a){a.target.scale.set(a.scale*a.radius,a.scale*a.radius,1);},b.SpriteRender=X,b.Util.inherits(Y,b.BaseRender),Y.prototype.onProtonUpdate=function(){},Y.prototype.onParticleCreated=function(a){},Y.prototype.onParticleUpdate=function(a){},Y.prototype.onParticleDead=function(a){},b.CustomRender=Y,Z.prototype={getPosition:function(){return null},crossing:function(a){switch(this.crossType){case"bound":this._bound(a);break;case"cross":this._cross(a);break;case"dead":this._dead(a);}},_dead:function(a){},_bound:function(a){},_cross:function(a){}},b.Zone=Z,b.Util.inherits($,b.Zone),$.prototype.getPosition=function(){this.random=Math.random(),this.vector.x=this.x1+this.random*(this.x2-this.x1),this.vector.y=this.y1+this.random*(this.y2-this.y1),this.vector.z=this.z1+this.random*(this.z2-this.z1);return this.vector},$.prototype.crossing=function(a){this.log&&(console.error("Sorry LineZone does not support crossing method"),this.log=!1);},b.LineZone=$,b.Util.inherits(_,b.Zone),_.prototype.getPosition=function(){var a,c,d;return function(){this.random=Math.random(),d=this.random*this.radius,a=b.PI*Math.random(),c=b.PI*2*Math.random(),this.vector.x=this.x+d*Math.sin(a)*Math.cos(c),this.vector.y=this.y+d*Math.sin(c)*Math.sin(a),this.vector.z=this.z+d*Math.cos(a);return this.vector}}(),_.prototype._dead=function(a){var b=a.p.distanceTo(this);b-a.radius>this.radius&&(a.dead=!0);},_.prototype._bound=function(){var a=new b.Vector3D,c=new b.Vector3D,d;return function(b){var e=b.p.distanceTo(this);e+b.radius>=this.radius&&(a.copy(b.p).sub(this).normalize(),c.copy(b.v),d=2*c.dot(a),b.v.sub(a.scalar(d)));}}(),_.prototype._cross=function(a){this.log&&(console.error("Sorry SphereZone does not support _cross method"),this.log=!1);},b.SphereZone=_,b.Util.inherits(ba,b.Zone),ba.prototype.getPosition=function(){var a=this.geometry.vertices,b=a[a.length*Math.random()>>0];this.vector.x=b.x*this.scale,this.vector.y=b.y*this.scale,this.vector.z=b.z*this.scale;return this.vector},ba.prototype.crossing=function(a){this.log&&(console.error("Sorry MeshZone does not support crossing method"),this.log=!1);},b.MeshZone=ba,b.Util.inherits(bb,b.Zone),bb.prototype.getPosition=function(){this.vector.x=this.x,this.vector.y=this.y,this.vector.z=this.z;return this.vector},bb.prototype.crossing=function(a){this.log&&(console.error("Sorry PointZone does not support crossing method"),this.log=!1);},b.PointZone=bb,b.Util.inherits(bc,b.Zone),bc.prototype.getPosition=function(){this.vector.x=this.x+b.MathUtils.randomAToB(-0.5,.5)*this.width,this.vector.y=this.y+b.MathUtils.randomAToB(-0.5,.5)*this.height,this.vector.z=this.z+b.MathUtils.randomAToB(-0.5,.5)*this.depth;return this.vector},bc.prototype._dead=function(a){a.p.x+a.radius<this.x-this.width/2?a.dead=!0:a.p.x-a.radius>this.x+this.width/2&&(a.dead=!0),a.p.y+a.radius<this.y-this.height/2?a.dead=!0:a.p.y-a.radius>this.y+this.height/2&&(a.dead=!0),a.p.z+a.radius<this.z-this.depth/2?a.dead=!0:a.p.z-a.radius>this.z+this.depth/2&&(a.dead=!0);},bc.prototype._bound=function(a){a.p.x-a.radius<this.x-this.width/2?(a.p.x=this.x-this.width/2+a.radius,a.v.x*=-this.friction,this._static(a,"x")):a.p.x+a.radius>this.x+this.width/2&&(a.p.x=this.x+this.width/2-a.radius,a.v.x*=-this.friction,this._static(a,"x")),a.p.y-a.radius<this.y-this.height/2?(a.p.y=this.y-this.height/2+a.radius,a.v.y*=-this.friction,this._static(a,"y")):a.p.y+a.radius>this.y+this.height/2&&(a.p.y=this.y+this.height/2-a.radius,a.v.y*=-this.friction,this._static(a,"y")),a.p.z-a.radius<this.z-this.depth/2?(a.p.z=this.z-this.depth/2+a.radius,a.v.z*=-this.friction,this._static(a,"z")):a.p.z+a.radius>this.z+this.depth/2&&(a.p.z=this.z+this.depth/2-a.radius,a.v.z*=-this.friction,this._static(a,"z"));},bc.prototype._static=function(a,b){a.v[b]*a.a[b]>0||Math.abs(a.v[b])<Math.abs(a.a[b])*.0167*this.max&&(a.v[b]=0,a.a[b]=0);},bc.prototype._cross=function(a){a.p.x+a.radius<this.x-this.width/2&&a.v.x<=0?a.p.x=this.x+this.width/2+a.radius:a.p.x-a.radius>this.x+this.width/2&&a.v.x>=0&&(a.p.x=this.x-this.width/2-a.radius),a.p.y+a.radius<this.y-this.height/2&&a.v.y<=0?a.p.y=this.y+this.height/2+a.radius:a.p.y-a.radius>this.y+this.height/2&&a.v.y>=0&&(a.p.y=this.y-this.height/2-a.radius),a.p.z+a.radius<this.z-this.depth/2&&a.v.z<=0?a.p.z=this.z+this.depth/2+a.radius:a.p.z-a.radius>this.z+this.depth/2&&a.v.z>=0&&(a.p.z=this.z-this.depth/2-a.radius);},b.BoxZone=bc,b.Util.inherits(bd,b.Zone),bd.prototype.getPosition=function(){var a=new b.Vector3D,c;return function(){c=this.renderer.domElement,a.x=Math.random()*c.width,a.y=Math.random()*c.height,this.vector.copy(b.THREEUtil.toSpacePos(a,this.camera,c));return this.vector}}(),bd.prototype._dead=function(a){var c=b.THREEUtil.toScreenPos(a.p,this.camera,this.renderer.domElement),d=this.renderer.domElement;c.y+a.radius<-this.dis&&this.d1?a.dead=!0:c.y-a.radius>d.height+this.dis&&this.d3&&(a.dead=!0),c.x+a.radius<-this.dis&&this.d4?a.dead=!0:c.x-a.radius>d.width+this.dis&&this.d2&&(a.dead=!0);},bd.prototype._cross=function(){var a=new b.Vector3D;return function(c){var d=b.THREEUtil.toScreenPos(c.p,this.camera,this.renderer.domElement),e=this.renderer.domElement;d.y+c.radius<-this.dis?(a.x=d.x,a.y=e.height+this.dis+c.radius,c.p.y=b.THREEUtil.toSpacePos(a,this.camera,e).y):d.y-c.radius>e.height+this.dis&&(a.x=d.x,a.y=-this.dis-c.radius,c.p.y=b.THREEUtil.toSpacePos(a,this.camera,e).y),d.x+c.radius<-this.dis?(a.y=d.y,a.x=e.width+this.dis+c.radius,c.p.x=b.THREEUtil.toSpacePos(a,this.camera,e).x):d.x-c.radius>e.width+this.dis&&(a.y=d.y,a.x=-this.dis-c.radius,c.p.x=b.THREEUtil.toSpacePos(a,this.camera,e).x);}}(),bd.prototype._bound=function(a){var c=b.THREEUtil.toScreenPos(a.p,this.camera,this.renderer.domElement),d=this.renderer.domElement;c.y+a.radius<-this.dis?a.v.y*=-1:c.y-a.radius>d.height+this.dis&&(a.v.y*=-1),c.x+a.radius<-this.dis?a.v.y*=-1:c.x-a.radius>d.width+this.dis&&(a.v.y*=-1);},b.ScreenZone=bd;var be=function(){if(window.console&&window.console.trace){var a=Array.prototype.slice.call(arguments),b=arguments[0]+"";if(b.indexOf("+")==0){var c=parseInt(arguments[0]);be.once<c&&(a.shift(),console.trace.apply(console,a),be.once++);}else a.unshift("+15"),be.apply(console,a);}};be.once=0,b.log=be;var bf=bf||{addEventListener:function(a,b){a.addEventListener("PROTON_UPDATE",function(a){b(a);});},drawZone:function(c,d,e){var f,g,h;e instanceof b.PointZone?f=new a.SphereGeometry(15):e instanceof b.LineZone||(e instanceof b.BoxZone?f=new a.BoxGeometry(e.width,e.height,e.depth):e instanceof b.SphereZone?f=new a.SphereGeometry(e.radius,10,10):e instanceof b.MeshZone&&(e.geometry instanceof a.Geometry?f=e.geometry:f=e.geometry.geometry,f=new a.SphereGeometry(e.radius,10,10))),g=new a.MeshBasicMaterial({color:"#2194ce",wireframe:!0}),h=new a.Mesh(f,g),d.add(h),this.addEventListener(c,function(a){h.position.set(e.x,e.y,e.z);});},drawEmitter:function(b,c,d,e){var f=new a.OctahedronGeometry(15),g=new a.MeshBasicMaterial({color:e||"#aaa",wireframe:!0}),h=new a.Mesh(f,g);c.add(h),this.addEventListener(b,function(){h.position.copy(d.p),h.rotation.set(d.rotation.x,d.rotation.y,d.rotation.z);});},renderInfo:function(){function b(a){var b=a.emitters[0];return Math.round(b.p.x)+","+Math.round(b.p.y)+","+Math.round(b.p.z)}function a(a,b){var c=b=="material"?"_materialPool":"_targetPool",d=a.renderers[0];return d[c].cID}return function(c,d){this.addInfo(d);var e="";switch(this._infoType){case 2:e+="emitter:"+c.emitters.length+"<br>",e+="em speed:"+c.emitters[0].cID+"<br>",e+="pos:"+b(c);break;case 3:e+=c.renderers[0].name+"<br>",e+="target:"+a(c,"target")+"<br>",e+="material:"+a(c,"material");break;default:e+="particles:"+c.getCount()+"<br>",e+="pool:"+c.pool.getCount()+"<br>",e+="total:"+(c.getCount()+c.pool.getCount());}this._infoCon.innerHTML=e;}}(),addInfo:function(){return function(a){var b=this;if(!this._infoCon){this._infoCon=document.createElement("div"),this._infoCon.style.cssText=["position:fixed;bottom:0px;left:0;cursor:pointer;","opacity:0.9;z-index:10000;padding:10px;font-size:12px;","width:120px;height:50px;background-color:#002;color:#0ff;"].join(""),this._infoType=1,this._infoCon.addEventListener("click",function(a){b._infoType++,b._infoType>3&&(b._infoType=1);},!1);var c,d;switch(a){case 2:c="#201",d="#f08";break;case 3:c="#020",d="#0f0";break;default:c="#002",d="#0ff";}this._infoCon.style["background-color"]=c,this._infoCon.style.color=d;}this._infoCon.parentNode||document.body.appendChild(this._infoCon);}}()};b.Debug=bf;return b});
|
|
58593
|
-
});var ParticleEmitterGroup =
|
|
58594
|
-
/*#__PURE__*/
|
|
58595
|
-
function (_EventDispatcher) {
|
|
58609
|
+
});var ParticleEmitterGroup = /*#__PURE__*/function (_EventDispatcher) {
|
|
58596
58610
|
_inherits(ParticleEmitterGroup, _EventDispatcher);
|
|
58597
58611
|
|
|
58598
58612
|
var _super = _createSuper(ParticleEmitterGroup);
|
|
@@ -58700,7 +58714,7 @@ function (_EventDispatcher) {
|
|
|
58700
58714
|
var _this5 = this;
|
|
58701
58715
|
|
|
58702
58716
|
if (this.hasSystem()) {
|
|
58703
|
-
var position = _objectSpread2({}, this.getPosition(),
|
|
58717
|
+
var position = _objectSpread2(_objectSpread2({}, this.getPosition()), where);
|
|
58704
58718
|
|
|
58705
58719
|
Object.keys(this.system).forEach(function (emitterId) {
|
|
58706
58720
|
return _this5.system[emitterId].setPosition(position);
|
|
@@ -58723,7 +58737,7 @@ function (_EventDispatcher) {
|
|
|
58723
58737
|
var _this6 = this;
|
|
58724
58738
|
|
|
58725
58739
|
if (this.hasSystem()) {
|
|
58726
|
-
var rotation = _objectSpread2({}, this.getRotation(),
|
|
58740
|
+
var rotation = _objectSpread2(_objectSpread2({}, this.getRotation()), howmuch);
|
|
58727
58741
|
|
|
58728
58742
|
Object.keys(this.system).forEach(function (emitterId) {
|
|
58729
58743
|
return _this6.system[emitterId].setRotation(rotation);
|
|
@@ -58784,7 +58798,21 @@ function (_EventDispatcher) {
|
|
|
58784
58798
|
* THANKS TO https://flatuicolors.com/ for providing the palettes below.
|
|
58785
58799
|
*/
|
|
58786
58800
|
var BASE = {
|
|
58787
|
-
|
|
58801
|
+
WHITE: 0XFFFFFF,
|
|
58802
|
+
BLACK: 0x000000,
|
|
58803
|
+
RED: 0xFF0000,
|
|
58804
|
+
GREEN: 0x00FF00,
|
|
58805
|
+
BLUE: 0x0000FF,
|
|
58806
|
+
YELLOW: 0xFFFF00,
|
|
58807
|
+
CYAN: 0x00FFFF,
|
|
58808
|
+
MAGENTA: 0xFF00FF,
|
|
58809
|
+
SILVER: 0xC0C0C0,
|
|
58810
|
+
GRAY: 0x808080,
|
|
58811
|
+
MAROON: 0x800000,
|
|
58812
|
+
OLIVE: 0x808000,
|
|
58813
|
+
PURPLE: 0x800080,
|
|
58814
|
+
TEAL: 0x008080,
|
|
58815
|
+
NAVY: 0x000080
|
|
58788
58816
|
};
|
|
58789
58817
|
var FRENCH_PALETTE = {
|
|
58790
58818
|
/**
|
|
@@ -58813,12 +58841,11 @@ var FRENCH_PALETTE = {
|
|
|
58813
58841
|
};
|
|
58814
58842
|
var PALETTES = {
|
|
58815
58843
|
BASE: BASE,
|
|
58816
|
-
FRENCH_PALETTE: FRENCH_PALETTE
|
|
58844
|
+
FRENCH_PALETTE: FRENCH_PALETTE,
|
|
58845
|
+
FRENCH: FRENCH_PALETTE
|
|
58817
58846
|
};var DEFAULT_PARTICLE_COLOR = PALETTES.BASE.BLACK;
|
|
58818
58847
|
|
|
58819
|
-
var ProtonParticleEmitter =
|
|
58820
|
-
/*#__PURE__*/
|
|
58821
|
-
function (_ParticleEmitter) {
|
|
58848
|
+
var ProtonParticleEmitter = /*#__PURE__*/function (_ParticleEmitter) {
|
|
58822
58849
|
_inherits(ProtonParticleEmitter, _ParticleEmitter);
|
|
58823
58850
|
|
|
58824
58851
|
var _super = _createSuper(ProtonParticleEmitter);
|
|
@@ -58901,7 +58928,7 @@ function (_ParticleEmitter) {
|
|
|
58901
58928
|
value: function setPosition() {
|
|
58902
58929
|
var where = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
58903
58930
|
|
|
58904
|
-
var position = _objectSpread2({}, this.getPosition(),
|
|
58931
|
+
var position = _objectSpread2(_objectSpread2({}, this.getPosition()), where);
|
|
58905
58932
|
|
|
58906
58933
|
this.system.p.x = position.x;
|
|
58907
58934
|
this.system.p.y = position.y;
|
|
@@ -58920,7 +58947,7 @@ function (_ParticleEmitter) {
|
|
|
58920
58947
|
}, {
|
|
58921
58948
|
key: "setRotation",
|
|
58922
58949
|
value: function setRotation(howmuch) {
|
|
58923
|
-
var rotation = _objectSpread2({}, this.getRotation(),
|
|
58950
|
+
var rotation = _objectSpread2(_objectSpread2({}, this.getRotation()), howmuch);
|
|
58924
58951
|
|
|
58925
58952
|
this.system.rotation.x = rotation.x;
|
|
58926
58953
|
this.system.rotation.y = rotation.y;
|
|
@@ -59003,9 +59030,7 @@ var getFireBehaviours = function getFireBehaviours() {
|
|
|
59003
59030
|
return [new three_proton_min.Scale(1, 2), new three_proton_min.Color('#c0392b', '#f1c40f')];
|
|
59004
59031
|
};
|
|
59005
59032
|
|
|
59006
|
-
var Explosion =
|
|
59007
|
-
/*#__PURE__*/
|
|
59008
|
-
function (_ParticleEmitterGroup) {
|
|
59033
|
+
var Explosion = /*#__PURE__*/function (_ParticleEmitterGroup) {
|
|
59009
59034
|
_inherits(Explosion, _ParticleEmitterGroup);
|
|
59010
59035
|
|
|
59011
59036
|
var _super = _createSuper(Explosion);
|
|
@@ -59065,9 +59090,7 @@ var getFireBehaviours$1 = function getFireBehaviours(direction, strength) {
|
|
|
59065
59090
|
return [new three_proton_min.Scale(new three_proton_min.Span(2, 2.5), 0), new three_proton_min.G(strength / 100), new three_proton_min.Color('#FF0026', ['#ffff00', '#ffff11'], Infinity, three_proton_min.easeOutSine), new three_proton_min.RandomDrift(direction.x / 100, direction.y / 100, direction.z / 100, 2.5)];
|
|
59066
59091
|
};
|
|
59067
59092
|
|
|
59068
|
-
var Fire =
|
|
59069
|
-
/*#__PURE__*/
|
|
59070
|
-
function (_ProtonParticleEmitte) {
|
|
59093
|
+
var Fire = /*#__PURE__*/function (_ProtonParticleEmitte) {
|
|
59071
59094
|
_inherits(Fire, _ProtonParticleEmitte);
|
|
59072
59095
|
|
|
59073
59096
|
var _super = _createSuper(Fire);
|
|
@@ -59092,9 +59115,7 @@ function (_ProtonParticleEmitte) {
|
|
|
59092
59115
|
}
|
|
59093
59116
|
|
|
59094
59117
|
return Fire;
|
|
59095
|
-
}(ProtonParticleEmitter);var Rain =
|
|
59096
|
-
/*#__PURE__*/
|
|
59097
|
-
function (_ParticleEmitter) {
|
|
59118
|
+
}(ProtonParticleEmitter);var Rain = /*#__PURE__*/function (_ParticleEmitter) {
|
|
59098
59119
|
_inherits(Rain, _ParticleEmitter);
|
|
59099
59120
|
|
|
59100
59121
|
var _super = _createSuper(Rain);
|
|
@@ -59140,9 +59161,7 @@ function (_ParticleEmitter) {
|
|
|
59140
59161
|
}
|
|
59141
59162
|
|
|
59142
59163
|
return Rain;
|
|
59143
|
-
}(ParticleEmitter);var Snow =
|
|
59144
|
-
/*#__PURE__*/
|
|
59145
|
-
function (_ParticleEmitter) {
|
|
59164
|
+
}(ParticleEmitter);var Snow = /*#__PURE__*/function (_ParticleEmitter) {
|
|
59146
59165
|
_inherits(Snow, _ParticleEmitter);
|
|
59147
59166
|
|
|
59148
59167
|
var _super = _createSuper(Snow);
|
|
@@ -59202,9 +59221,7 @@ var getTrailBehaviour = function getTrailBehaviour() {
|
|
|
59202
59221
|
return [new three_proton_min.Alpha(1, 0), new three_proton_min.Color("#ffffff"), new three_proton_min.Scale(.5, 0.1)];
|
|
59203
59222
|
};
|
|
59204
59223
|
|
|
59205
|
-
var Trail =
|
|
59206
|
-
/*#__PURE__*/
|
|
59207
|
-
function (_ParticleEmitterGroup) {
|
|
59224
|
+
var Trail = /*#__PURE__*/function (_ParticleEmitterGroup) {
|
|
59208
59225
|
_inherits(Trail, _ParticleEmitterGroup);
|
|
59209
59226
|
|
|
59210
59227
|
var _super = _createSuper(Trail);
|
|
@@ -59242,9 +59259,7 @@ function (_ParticleEmitterGroup) {
|
|
|
59242
59259
|
TRAIL: 'trail'
|
|
59243
59260
|
};
|
|
59244
59261
|
var GROUP = PARTICLE_EMITTER_TYPES.GROUP;
|
|
59245
|
-
var Particles =
|
|
59246
|
-
/*#__PURE__*/
|
|
59247
|
-
function () {
|
|
59262
|
+
var Particles = /*#__PURE__*/function () {
|
|
59248
59263
|
function Particles() {
|
|
59249
59264
|
var _this = this,
|
|
59250
59265
|
_this$map;
|
|
@@ -59387,9 +59402,7 @@ function () {
|
|
|
59387
59402
|
|
|
59388
59403
|
return Particles;
|
|
59389
59404
|
}();
|
|
59390
|
-
var Particles$1 = new Particles();var Trails =
|
|
59391
|
-
/*#__PURE__*/
|
|
59392
|
-
function (_BaseScript) {
|
|
59405
|
+
var Particles$1 = new Particles();var Trails = /*#__PURE__*/function (_BaseScript) {
|
|
59393
59406
|
_inherits(Trails, _BaseScript);
|
|
59394
59407
|
|
|
59395
59408
|
var _super = _createSuper(Trails);
|
|
@@ -59430,9 +59443,7 @@ function (_BaseScript) {
|
|
|
59430
59443
|
BASECAR: 'BaseCar',
|
|
59431
59444
|
TRAILS: 'Trails'
|
|
59432
59445
|
};
|
|
59433
|
-
var Scripts =
|
|
59434
|
-
/*#__PURE__*/
|
|
59435
|
-
function () {
|
|
59446
|
+
var Scripts = /*#__PURE__*/function () {
|
|
59436
59447
|
function Scripts() {
|
|
59437
59448
|
var _this = this,
|
|
59438
59449
|
_this$map;
|
|
@@ -59529,9 +59540,7 @@ var AUDIO_RAMPS = {
|
|
|
59529
59540
|
LINEAR: 'LINEAR',
|
|
59530
59541
|
EXPONENTIAL: 'EXPONENTIAL'
|
|
59531
59542
|
};
|
|
59532
|
-
var Audio$1 =
|
|
59533
|
-
/*#__PURE__*/
|
|
59534
|
-
function () {
|
|
59543
|
+
var Audio$1 = /*#__PURE__*/function () {
|
|
59535
59544
|
function Audio() {
|
|
59536
59545
|
var _this = this;
|
|
59537
59546
|
|
|
@@ -59719,9 +59728,7 @@ function () {
|
|
|
59719
59728
|
|
|
59720
59729
|
return Audio;
|
|
59721
59730
|
}();
|
|
59722
|
-
var Audio$2 = new Audio$1();var Beat =
|
|
59723
|
-
/*#__PURE__*/
|
|
59724
|
-
function () {
|
|
59731
|
+
var Audio$2 = new Audio$1();var Beat = /*#__PURE__*/function () {
|
|
59725
59732
|
function Beat(name) {
|
|
59726
59733
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
59727
59734
|
|
|
@@ -59866,9 +59873,7 @@ function () {
|
|
|
59866
59873
|
}]);
|
|
59867
59874
|
|
|
59868
59875
|
return Beat;
|
|
59869
|
-
}();var Sound =
|
|
59870
|
-
/*#__PURE__*/
|
|
59871
|
-
function (_Beat) {
|
|
59876
|
+
}();var Sound = /*#__PURE__*/function (_Beat) {
|
|
59872
59877
|
_inherits(Sound, _Beat);
|
|
59873
59878
|
|
|
59874
59879
|
var _super = _createSuper(Sound);
|
|
@@ -59992,9 +59997,7 @@ function (_Beat) {
|
|
|
59992
59997
|
}]);
|
|
59993
59998
|
|
|
59994
59999
|
return Sound;
|
|
59995
|
-
}(Beat);var Sound$1 =
|
|
59996
|
-
/*#__PURE__*/
|
|
59997
|
-
function (_Beat) {
|
|
60000
|
+
}(Beat);var Sound$1 = /*#__PURE__*/function (_Beat) {
|
|
59998
60001
|
_inherits(Sound, _Beat);
|
|
59999
60002
|
|
|
60000
60003
|
var _super = _createSuper(Sound);
|
|
@@ -60118,9 +60121,7 @@ function (_Beat) {
|
|
|
60118
60121
|
}]);
|
|
60119
60122
|
|
|
60120
60123
|
return Sound;
|
|
60121
|
-
}(Beat);var DirectionalSound =
|
|
60122
|
-
/*#__PURE__*/
|
|
60123
|
-
function (_Sound) {
|
|
60124
|
+
}(Beat);var DirectionalSound = /*#__PURE__*/function (_Sound) {
|
|
60124
60125
|
_inherits(DirectionalSound, _Sound);
|
|
60125
60126
|
|
|
60126
60127
|
var _super = _createSuper(DirectionalSound);
|
|
@@ -60180,7 +60181,9 @@ function (_Sound) {
|
|
|
60180
60181
|
}]);
|
|
60181
60182
|
|
|
60182
60183
|
return DirectionalSound;
|
|
60183
|
-
}(Sound$1);var
|
|
60184
|
+
}(Sound$1);var _excluded$1 = ["autoplay"],
|
|
60185
|
+
_excluded2 = ["autoplay"];
|
|
60186
|
+
var DEFAULT_POSITION$1 = {
|
|
60184
60187
|
x: 0,
|
|
60185
60188
|
y: 0,
|
|
60186
60189
|
z: 0
|
|
@@ -60214,9 +60217,7 @@ var ENTITY_EVENTS = {
|
|
|
60214
60217
|
};
|
|
60215
60218
|
var DEFAULT_TAG = 'all';
|
|
60216
60219
|
|
|
60217
|
-
var Entity =
|
|
60218
|
-
/*#__PURE__*/
|
|
60219
|
-
function (_EventDispatcher) {
|
|
60220
|
+
var Entity = /*#__PURE__*/function (_EventDispatcher) {
|
|
60220
60221
|
_inherits(Entity, _EventDispatcher);
|
|
60221
60222
|
|
|
60222
60223
|
var _super = _createSuper(Entity);
|
|
@@ -60325,6 +60326,11 @@ function (_EventDispatcher) {
|
|
|
60325
60326
|
value: function getBody() {
|
|
60326
60327
|
return this.body;
|
|
60327
60328
|
}
|
|
60329
|
+
}, {
|
|
60330
|
+
key: "setBody",
|
|
60331
|
+
value: function setBody(body) {
|
|
60332
|
+
this.body = body;
|
|
60333
|
+
}
|
|
60328
60334
|
}, {
|
|
60329
60335
|
key: "add",
|
|
60330
60336
|
value: function add(element) {
|
|
@@ -60614,7 +60620,7 @@ function (_EventDispatcher) {
|
|
|
60614
60620
|
value: function addSound(name, options) {
|
|
60615
60621
|
var _options$autoplay = options.autoplay,
|
|
60616
60622
|
autoplay = _options$autoplay === void 0 ? false : _options$autoplay,
|
|
60617
|
-
opts = _objectWithoutProperties(options,
|
|
60623
|
+
opts = _objectWithoutProperties(options, _excluded$1);
|
|
60618
60624
|
|
|
60619
60625
|
this.isPlayingSound = autoplay;
|
|
60620
60626
|
this.sound = new Sound(name, _objectSpread2({
|
|
@@ -60628,7 +60634,7 @@ function (_EventDispatcher) {
|
|
|
60628
60634
|
value: function addDirectionalSound(name, options) {
|
|
60629
60635
|
var _options$autoplay2 = options.autoplay,
|
|
60630
60636
|
autoplay = _options$autoplay2 === void 0 ? false : _options$autoplay2,
|
|
60631
|
-
opts = _objectWithoutProperties(options,
|
|
60637
|
+
opts = _objectWithoutProperties(options, _excluded2);
|
|
60632
60638
|
|
|
60633
60639
|
this.isPlayingSound = autoplay;
|
|
60634
60640
|
this.sound = new DirectionalSound(name, _objectSpread2({
|
|
@@ -60691,7 +60697,7 @@ function (_EventDispatcher) {
|
|
|
60691
60697
|
key: "setScale",
|
|
60692
60698
|
value: function setScale(howbig) {
|
|
60693
60699
|
if (this.hasBody()) {
|
|
60694
|
-
var scale = _objectSpread2({}, this.getScale(),
|
|
60700
|
+
var scale = _objectSpread2(_objectSpread2({}, this.getScale()), howbig);
|
|
60695
60701
|
|
|
60696
60702
|
this.body.scale.set(scale.x, scale.y, scale.z);
|
|
60697
60703
|
}
|
|
@@ -60948,9 +60954,7 @@ function (_EventDispatcher) {
|
|
|
60948
60954
|
}]);
|
|
60949
60955
|
|
|
60950
60956
|
return Entity;
|
|
60951
|
-
}(EventDispatcher);var AnimationHandler =
|
|
60952
|
-
/*#__PURE__*/
|
|
60953
|
-
function (_EventDispatcher) {
|
|
60957
|
+
}(EventDispatcher);var AnimationHandler = /*#__PURE__*/function (_EventDispatcher) {
|
|
60954
60958
|
_inherits(AnimationHandler, _EventDispatcher);
|
|
60955
60959
|
|
|
60956
60960
|
var _super = _createSuper(AnimationHandler);
|
|
@@ -61067,9 +61071,7 @@ function (_EventDispatcher) {
|
|
|
61067
61071
|
return AnimationHandler;
|
|
61068
61072
|
}(EventDispatcher);var inverseProjectionMatrix = new Matrix4();
|
|
61069
61073
|
|
|
61070
|
-
var Frustum$1 =
|
|
61071
|
-
/*#__PURE__*/
|
|
61072
|
-
function () {
|
|
61074
|
+
var Frustum$1 = /*#__PURE__*/function () {
|
|
61073
61075
|
function Frustum(data) {
|
|
61074
61076
|
_classCallCheck(this, Frustum);
|
|
61075
61077
|
|
|
@@ -61186,9 +61188,7 @@ var DEFAULT_INTENSITY = 1;
|
|
|
61186
61188
|
var DEFAULT_NEAR = 1;
|
|
61187
61189
|
var DEFAULT_FAR = 2000;
|
|
61188
61190
|
var DEFAULT_MARGIN = 200;
|
|
61189
|
-
var CascadeShadowMaps =
|
|
61190
|
-
/*#__PURE__*/
|
|
61191
|
-
function () {
|
|
61191
|
+
var CascadeShadowMaps = /*#__PURE__*/function () {
|
|
61192
61192
|
function CascadeShadowMaps(_ref) {
|
|
61193
61193
|
var _ref$camera = _ref.camera,
|
|
61194
61194
|
camera = _ref$camera === void 0 ? Scene$2.getCameraBody() : _ref$camera,
|
|
@@ -61524,9 +61524,7 @@ var SUNLIGHT = 'sunlight';
|
|
|
61524
61524
|
var SPOTLIGHT = 'spotlight';
|
|
61525
61525
|
var HEMISPHERELIGHT = 'hemisphere';
|
|
61526
61526
|
var TIME_TO_UPDATE = 100;
|
|
61527
|
-
var Lights =
|
|
61528
|
-
/*#__PURE__*/
|
|
61529
|
-
function () {
|
|
61527
|
+
var Lights = /*#__PURE__*/function () {
|
|
61530
61528
|
function Lights() {
|
|
61531
61529
|
_classCallCheck(this, Lights);
|
|
61532
61530
|
|
|
@@ -61615,9 +61613,7 @@ var Lights$1 = new Lights();var ToonShader = {
|
|
|
61615
61613
|
"float diffuse = dot( normal, lVector );", "if ( diffuse > 0.6 ) { diffuse = 1.0; }", "else if ( diffuse > -0.2 ) { diffuse = 0.7; }", "else { diffuse = 0.3; }", "gl_FragColor = vec4( uKd * uMaterialColor * uDirLightColor * diffuse, 1.0 );", "}"].join("\n")
|
|
61616
61614
|
};
|
|
61617
61615
|
|
|
61618
|
-
var ToonMaterial =
|
|
61619
|
-
/*#__PURE__*/
|
|
61620
|
-
function (_ShaderMaterial) {
|
|
61616
|
+
var ToonMaterial = /*#__PURE__*/function (_ShaderMaterial) {
|
|
61621
61617
|
_inherits(ToonMaterial, _ShaderMaterial);
|
|
61622
61618
|
|
|
61623
61619
|
var _super = _createSuper(ToonMaterial);
|
|
@@ -61795,7 +61791,8 @@ var mapColliderTypeToHitbox = function mapColliderTypeToHitbox() {
|
|
|
61795
61791
|
|
|
61796
61792
|
var colliderType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : COLLIDER_TYPES.BOX;
|
|
61797
61793
|
return (_COLLIDER_TYPES$BOX$C = {}, _defineProperty(_COLLIDER_TYPES$BOX$C, COLLIDER_TYPES.BOX, getBoxHitbox), _defineProperty(_COLLIDER_TYPES$BOX$C, COLLIDER_TYPES.SPHERE, getSphereHitbox), _COLLIDER_TYPES$BOX$C)[colliderType] || getBoxHitbox;
|
|
61798
|
-
};var
|
|
61794
|
+
};var _excluded$2 = ["applyPhysicsUpdate"];
|
|
61795
|
+
var COLLIDER_TAG = 'collider';
|
|
61799
61796
|
var COLLIDER_COLOR = 0xff0000;
|
|
61800
61797
|
var DEFAULT_COLLIDER_OFFSET = {
|
|
61801
61798
|
x: 0,
|
|
@@ -61803,9 +61800,7 @@ var DEFAULT_COLLIDER_OFFSET = {
|
|
|
61803
61800
|
z: 0
|
|
61804
61801
|
};
|
|
61805
61802
|
|
|
61806
|
-
var Element =
|
|
61807
|
-
/*#__PURE__*/
|
|
61808
|
-
function (_Entity) {
|
|
61803
|
+
var Element = /*#__PURE__*/function (_Entity) {
|
|
61809
61804
|
_inherits(Element, _Entity);
|
|
61810
61805
|
|
|
61811
61806
|
var _super = _createSuper(Element);
|
|
@@ -61891,7 +61886,7 @@ function (_Entity) {
|
|
|
61891
61886
|
var type = _ref2.type,
|
|
61892
61887
|
vector = _ref2.vector;
|
|
61893
61888
|
|
|
61894
|
-
var parsedOffset = _objectSpread2({}, DEFAULT_COLLIDER_OFFSET,
|
|
61889
|
+
var parsedOffset = _objectSpread2(_objectSpread2({}, DEFAULT_COLLIDER_OFFSET), offset);
|
|
61895
61890
|
|
|
61896
61891
|
var position = _this.body.position.clone().add(new Vector3$1(parsedOffset.x, parsedOffset.y, parsedOffset.z));
|
|
61897
61892
|
|
|
@@ -62052,7 +62047,7 @@ function (_Entity) {
|
|
|
62052
62047
|
|
|
62053
62048
|
_this.texture = undefined;
|
|
62054
62049
|
_this.opacity = 1;
|
|
62055
|
-
_this.options = _objectSpread2({}, _options, {
|
|
62050
|
+
_this.options = _objectSpread2(_objectSpread2({}, _options), {}, {
|
|
62056
62051
|
name: _name
|
|
62057
62052
|
});
|
|
62058
62053
|
_this.physicsOptions = {};
|
|
@@ -62262,7 +62257,7 @@ function (_Entity) {
|
|
|
62262
62257
|
value: function setPhysicsOptions(_ref8) {
|
|
62263
62258
|
var _ref8$applyPhysicsUpd = _ref8.applyPhysicsUpdate,
|
|
62264
62259
|
applyPhysicsUpdate = _ref8$applyPhysicsUpd === void 0 ? true : _ref8$applyPhysicsUpd,
|
|
62265
|
-
rest = _objectWithoutProperties(_ref8,
|
|
62260
|
+
rest = _objectWithoutProperties(_ref8, _excluded$2);
|
|
62266
62261
|
|
|
62267
62262
|
var parsedOptions = _objectSpread2({
|
|
62268
62263
|
applyPhysicsUpdate: applyPhysicsUpdate
|
|
@@ -62501,7 +62496,7 @@ function (_Entity) {
|
|
|
62501
62496
|
key: "toJSON",
|
|
62502
62497
|
value: function toJSON() {
|
|
62503
62498
|
if (this.serializable) {
|
|
62504
|
-
return _objectSpread2({}, _get(_getPrototypeOf(Element.prototype), "toJSON", this).call(this), {
|
|
62499
|
+
return _objectSpread2(_objectSpread2({}, _get(_getPrototypeOf(Element.prototype), "toJSON", this).call(this)), {}, {
|
|
62505
62500
|
body: this.body.toJSON(),
|
|
62506
62501
|
scripts: this.mapScriptsToJSON(),
|
|
62507
62502
|
texture: this.texture
|
|
@@ -62511,9 +62506,7 @@ function (_Entity) {
|
|
|
62511
62506
|
}]);
|
|
62512
62507
|
|
|
62513
62508
|
return Element;
|
|
62514
|
-
}(Entity);var Camera$1 =
|
|
62515
|
-
/*#__PURE__*/
|
|
62516
|
-
function (_Entity) {
|
|
62509
|
+
}(Entity);var Camera$1 = /*#__PURE__*/function (_Entity) {
|
|
62517
62510
|
_inherits(Camera, _Entity);
|
|
62518
62511
|
|
|
62519
62512
|
var _super = _createSuper(Camera);
|
|
@@ -62528,7 +62521,9 @@ function (_Entity) {
|
|
|
62528
62521
|
name: name
|
|
62529
62522
|
});
|
|
62530
62523
|
_this.options = options;
|
|
62531
|
-
|
|
62524
|
+
|
|
62525
|
+
_this.setBody(new PerspectiveCamera(options.fov, options.ratio, options.near, options.far));
|
|
62526
|
+
|
|
62532
62527
|
return _this;
|
|
62533
62528
|
}
|
|
62534
62529
|
|
|
@@ -62568,28 +62563,41 @@ function (_Entity) {
|
|
|
62568
62563
|
}]);
|
|
62569
62564
|
|
|
62570
62565
|
return Camera;
|
|
62571
|
-
}(Entity);var Grid =
|
|
62572
|
-
|
|
62573
|
-
|
|
62566
|
+
}(Entity);var Grid = /*#__PURE__*/function (_Element) {
|
|
62567
|
+
_inherits(Grid, _Element);
|
|
62568
|
+
|
|
62569
|
+
var _super = _createSuper(Grid);
|
|
62570
|
+
|
|
62574
62571
|
function Grid(size, division, color1, color2) {
|
|
62572
|
+
var _this;
|
|
62573
|
+
|
|
62575
62574
|
_classCallCheck(this, Grid);
|
|
62576
62575
|
|
|
62577
|
-
|
|
62578
|
-
|
|
62576
|
+
var options = {
|
|
62577
|
+
size: size,
|
|
62578
|
+
division: division,
|
|
62579
|
+
color1: color1,
|
|
62580
|
+
color2: color2
|
|
62581
|
+
};
|
|
62582
|
+
_this = _super.call(this, null, null, options);
|
|
62583
|
+
_this.body = new GridHelper(size, division, color1, color2);
|
|
62584
|
+
|
|
62585
|
+
_this.setBody({
|
|
62586
|
+
body: body
|
|
62587
|
+
});
|
|
62588
|
+
|
|
62589
|
+
_this.setEntityType(ENTITY_TYPES.MESH);
|
|
62590
|
+
|
|
62591
|
+
return _this;
|
|
62579
62592
|
}
|
|
62580
62593
|
|
|
62581
62594
|
_createClass(Grid, [{
|
|
62582
62595
|
key: "update",
|
|
62583
62596
|
value: function update() {}
|
|
62584
|
-
}, {
|
|
62585
|
-
key: "render",
|
|
62586
|
-
value: function render() {}
|
|
62587
62597
|
}]);
|
|
62588
62598
|
|
|
62589
62599
|
return Grid;
|
|
62590
|
-
}();var Cube =
|
|
62591
|
-
/*#__PURE__*/
|
|
62592
|
-
function (_Element) {
|
|
62600
|
+
}(Element);var Cube = /*#__PURE__*/function (_Element) {
|
|
62593
62601
|
_inherits(Cube, _Element);
|
|
62594
62602
|
|
|
62595
62603
|
var _super = _createSuper(Cube);
|
|
@@ -62621,9 +62629,7 @@ function (_Element) {
|
|
|
62621
62629
|
}
|
|
62622
62630
|
|
|
62623
62631
|
return Cube;
|
|
62624
|
-
}(Element);var Sphere$1 =
|
|
62625
|
-
/*#__PURE__*/
|
|
62626
|
-
function (_Element) {
|
|
62632
|
+
}(Element);var Sphere$1 = /*#__PURE__*/function (_Element) {
|
|
62627
62633
|
_inherits(Sphere, _Element);
|
|
62628
62634
|
|
|
62629
62635
|
var _super = _createSuper(Sphere);
|
|
@@ -62656,9 +62662,7 @@ function (_Element) {
|
|
|
62656
62662
|
}
|
|
62657
62663
|
|
|
62658
62664
|
return Sphere;
|
|
62659
|
-
}(Element);var Cylinder =
|
|
62660
|
-
/*#__PURE__*/
|
|
62661
|
-
function (_Element) {
|
|
62665
|
+
}(Element);var Cylinder = /*#__PURE__*/function (_Element) {
|
|
62662
62666
|
_inherits(Cylinder, _Element);
|
|
62663
62667
|
|
|
62664
62668
|
var _super = _createSuper(Cylinder);
|
|
@@ -62696,9 +62700,7 @@ function (_Element) {
|
|
|
62696
62700
|
}(Element);var DEFAULT_LINE_COLOR = 0xffffff;
|
|
62697
62701
|
var DEFAULT_LINE_THICKNESS = 2;
|
|
62698
62702
|
|
|
62699
|
-
var Line$1 =
|
|
62700
|
-
/*#__PURE__*/
|
|
62701
|
-
function (_Element) {
|
|
62703
|
+
var Line$1 = /*#__PURE__*/function (_Element) {
|
|
62702
62704
|
_inherits(Line$1, _Element);
|
|
62703
62705
|
|
|
62704
62706
|
var _super = _createSuper(Line$1);
|
|
@@ -62797,9 +62799,7 @@ function (_Element) {
|
|
|
62797
62799
|
return Line$1;
|
|
62798
62800
|
}(Element);var DEFAULT_CURVE_LINE_DIVISIONS = 20;
|
|
62799
62801
|
|
|
62800
|
-
var CurveLine =
|
|
62801
|
-
/*#__PURE__*/
|
|
62802
|
-
function (_Line) {
|
|
62802
|
+
var CurveLine = /*#__PURE__*/function (_Line) {
|
|
62803
62803
|
_inherits(CurveLine, _Line);
|
|
62804
62804
|
|
|
62805
62805
|
var _super = _createSuper(CurveLine);
|
|
@@ -62836,9 +62836,7 @@ function (_Line) {
|
|
|
62836
62836
|
}(Line$1);var UP$1 = new Vector3$1(0, 1, 0);
|
|
62837
62837
|
var DOWN$1 = new Vector3$1(0, -1, 0);
|
|
62838
62838
|
|
|
62839
|
-
var Plane$1 =
|
|
62840
|
-
/*#__PURE__*/
|
|
62841
|
-
function (_Element) {
|
|
62839
|
+
var Plane$1 = /*#__PURE__*/function (_Element) {
|
|
62842
62840
|
_inherits(Plane, _Element);
|
|
62843
62841
|
|
|
62844
62842
|
var _super = _createSuper(Plane);
|
|
@@ -62894,9 +62892,7 @@ function (_Element) {
|
|
|
62894
62892
|
}]);
|
|
62895
62893
|
|
|
62896
62894
|
return Plane;
|
|
62897
|
-
}(Element);var Box =
|
|
62898
|
-
/*#__PURE__*/
|
|
62899
|
-
function (_Element) {
|
|
62895
|
+
}(Element);var Box = /*#__PURE__*/function (_Element) {
|
|
62900
62896
|
_inherits(Box, _Element);
|
|
62901
62897
|
|
|
62902
62898
|
var _super = _createSuper(Box);
|
|
@@ -62930,14 +62926,14 @@ function (_Element) {
|
|
|
62930
62926
|
}
|
|
62931
62927
|
|
|
62932
62928
|
return Box;
|
|
62933
|
-
}(Element);var
|
|
62929
|
+
}(Element);var _excluded$3 = ["anisotropy"];
|
|
62930
|
+
|
|
62931
|
+
var validateAnisotropy = function validateAnisotropy(anisotropy) {
|
|
62934
62932
|
var max = Scene$2.getRenderer().capabilities.getMaxAnisotropy();
|
|
62935
62933
|
return anisotropy > max ? max : anisotropy;
|
|
62936
62934
|
};
|
|
62937
62935
|
|
|
62938
|
-
var Sprite$1 =
|
|
62939
|
-
/*#__PURE__*/
|
|
62940
|
-
function (_Element) {
|
|
62936
|
+
var Sprite$1 = /*#__PURE__*/function (_Element) {
|
|
62941
62937
|
_inherits(Sprite$1, _Element);
|
|
62942
62938
|
|
|
62943
62939
|
var _super = _createSuper(Sprite$1);
|
|
@@ -62956,7 +62952,7 @@ function (_Element) {
|
|
|
62956
62952
|
|
|
62957
62953
|
var _options$anisotropy = options.anisotropy,
|
|
62958
62954
|
anisotropy = _options$anisotropy === void 0 ? 1 : _options$anisotropy,
|
|
62959
|
-
rest = _objectWithoutProperties(options,
|
|
62955
|
+
rest = _objectWithoutProperties(options, _excluded$3);
|
|
62960
62956
|
|
|
62961
62957
|
var texture = Images$1.get(spriteTexture);
|
|
62962
62958
|
texture.anisotropy = validateAnisotropy(anisotropy);
|
|
@@ -62990,9 +62986,7 @@ function (_Element) {
|
|
|
62990
62986
|
}]);
|
|
62991
62987
|
|
|
62992
62988
|
return Sprite$1;
|
|
62993
|
-
}(Element);var BackgroundSound =
|
|
62994
|
-
/*#__PURE__*/
|
|
62995
|
-
function (_Sound) {
|
|
62989
|
+
}(Element);var BackgroundSound = /*#__PURE__*/function (_Sound) {
|
|
62996
62990
|
_inherits(BackgroundSound, _Sound);
|
|
62997
62991
|
|
|
62998
62992
|
var _super = _createSuper(BackgroundSound);
|
|
@@ -63034,9 +63028,7 @@ function (_Sound) {
|
|
|
63034
63028
|
}]);
|
|
63035
63029
|
|
|
63036
63030
|
return BackgroundSound;
|
|
63037
|
-
}(Sound$1);var Video =
|
|
63038
|
-
/*#__PURE__*/
|
|
63039
|
-
function () {
|
|
63031
|
+
}(Sound$1);var Video = /*#__PURE__*/function () {
|
|
63040
63032
|
function Video() {
|
|
63041
63033
|
_classCallCheck(this, Video);
|
|
63042
63034
|
}
|
|
@@ -65564,19 +65556,11 @@ for (var i = 0; i < 32; ++i) {
|
|
|
65564
65556
|
} // fixed length map
|
|
65565
65557
|
|
|
65566
65558
|
|
|
65567
|
-
var flm =
|
|
65568
|
-
/*#__PURE__*/
|
|
65569
|
-
hMap(flt, 9, 0),
|
|
65570
|
-
flrm =
|
|
65571
|
-
/*#__PURE__*/
|
|
65572
|
-
hMap(flt, 9, 1); // fixed distance map
|
|
65559
|
+
var flm = /*#__PURE__*/hMap(flt, 9, 0),
|
|
65560
|
+
flrm = /*#__PURE__*/hMap(flt, 9, 1); // fixed distance map
|
|
65573
65561
|
|
|
65574
|
-
var fdm =
|
|
65575
|
-
/*#__PURE__*/
|
|
65576
|
-
hMap(fdt, 5, 0),
|
|
65577
|
-
fdrm =
|
|
65578
|
-
/*#__PURE__*/
|
|
65579
|
-
hMap(fdt, 5, 1); // find max of array
|
|
65562
|
+
var fdm = /*#__PURE__*/hMap(fdt, 5, 0),
|
|
65563
|
+
fdrm = /*#__PURE__*/hMap(fdt, 5, 1); // find max of array
|
|
65580
65564
|
|
|
65581
65565
|
var max = function max(a) {
|
|
65582
65566
|
var m = a[0];
|
|
@@ -66116,13 +66100,9 @@ var wblk = function wblk(dat, out, final, syms, lf, df, eb, li, bs, bl, p) {
|
|
|
66116
66100
|
}; // deflate options (nice << 13) | chain
|
|
66117
66101
|
|
|
66118
66102
|
|
|
66119
|
-
var deo =
|
|
66120
|
-
/*#__PURE__*/
|
|
66121
|
-
new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]); // empty
|
|
66103
|
+
var deo = /*#__PURE__*/new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]); // empty
|
|
66122
66104
|
|
|
66123
|
-
var et =
|
|
66124
|
-
/*#__PURE__*/
|
|
66125
|
-
new u8(0); // compresses data into a raw DEFLATE buffer
|
|
66105
|
+
var et = /*#__PURE__*/new u8(0); // compresses data into a raw DEFLATE buffer
|
|
66126
66106
|
|
|
66127
66107
|
var dflt = function dflt(dat, lvl, plvl, pre, post, lst) {
|
|
66128
66108
|
var s = dat.length;
|
|
@@ -66275,9 +66255,7 @@ var dflt = function dflt(dat, lvl, plvl, pre, post, lst) {
|
|
|
66275
66255
|
}; // CRC32 table
|
|
66276
66256
|
|
|
66277
66257
|
|
|
66278
|
-
var crct =
|
|
66279
|
-
/*#__PURE__*/
|
|
66280
|
-
function () {
|
|
66258
|
+
var crct = /*#__PURE__*/function () {
|
|
66281
66259
|
var t = new u32(256);
|
|
66282
66260
|
|
|
66283
66261
|
for (var i = 0; i < 256; ++i) {
|
|
@@ -66604,9 +66582,7 @@ function AsyncCmpStrm(opts, cb) {
|
|
|
66604
66582
|
*/
|
|
66605
66583
|
|
|
66606
66584
|
|
|
66607
|
-
var Deflate =
|
|
66608
|
-
/*#__PURE__*/
|
|
66609
|
-
function () {
|
|
66585
|
+
var Deflate = /*#__PURE__*/function () {
|
|
66610
66586
|
function Deflate(opts, cb) {
|
|
66611
66587
|
if (!cb && typeof opts == 'function') cb = opts, opts = {};
|
|
66612
66588
|
this.ondata = cb;
|
|
@@ -66636,9 +66612,7 @@ function () {
|
|
|
66636
66612
|
* Asynchronous streaming DEFLATE compression
|
|
66637
66613
|
*/
|
|
66638
66614
|
|
|
66639
|
-
var AsyncDeflate =
|
|
66640
|
-
/*#__PURE__*/
|
|
66641
|
-
function () {
|
|
66615
|
+
var AsyncDeflate = /*#__PURE__*/function () {
|
|
66642
66616
|
function AsyncDeflate(opts, cb) {
|
|
66643
66617
|
astrmify([bDflt, function () {
|
|
66644
66618
|
return [astrm, Deflate];
|
|
@@ -66671,9 +66645,7 @@ function deflateSync(data, opts) {
|
|
|
66671
66645
|
* Streaming DEFLATE decompression
|
|
66672
66646
|
*/
|
|
66673
66647
|
|
|
66674
|
-
var Inflate =
|
|
66675
|
-
/*#__PURE__*/
|
|
66676
|
-
function () {
|
|
66648
|
+
var Inflate = /*#__PURE__*/function () {
|
|
66677
66649
|
/**
|
|
66678
66650
|
* Creates an inflation stream
|
|
66679
66651
|
* @param cb The callback to call whenever data is inflated
|
|
@@ -66717,9 +66689,7 @@ function () {
|
|
|
66717
66689
|
* Asynchronous streaming DEFLATE decompression
|
|
66718
66690
|
*/
|
|
66719
66691
|
|
|
66720
|
-
var AsyncInflate =
|
|
66721
|
-
/*#__PURE__*/
|
|
66722
|
-
function () {
|
|
66692
|
+
var AsyncInflate = /*#__PURE__*/function () {
|
|
66723
66693
|
/**
|
|
66724
66694
|
* Creates an asynchronous inflation stream
|
|
66725
66695
|
* @param cb The callback to call whenever data is deflated
|
|
@@ -66758,9 +66728,7 @@ function inflateSync(data, out) {
|
|
|
66758
66728
|
* Streaming GZIP compression
|
|
66759
66729
|
*/
|
|
66760
66730
|
|
|
66761
|
-
var Gzip =
|
|
66762
|
-
/*#__PURE__*/
|
|
66763
|
-
function () {
|
|
66731
|
+
var Gzip = /*#__PURE__*/function () {
|
|
66764
66732
|
function Gzip(opts, cb) {
|
|
66765
66733
|
this.c = crc();
|
|
66766
66734
|
this.l = 0;
|
|
@@ -66793,9 +66761,7 @@ function () {
|
|
|
66793
66761
|
* Asynchronous streaming GZIP compression
|
|
66794
66762
|
*/
|
|
66795
66763
|
|
|
66796
|
-
var AsyncGzip =
|
|
66797
|
-
/*#__PURE__*/
|
|
66798
|
-
function () {
|
|
66764
|
+
var AsyncGzip = /*#__PURE__*/function () {
|
|
66799
66765
|
function AsyncGzip(opts, cb) {
|
|
66800
66766
|
astrmify([bDflt, gze, function () {
|
|
66801
66767
|
return [astrm, Deflate, Gzip];
|
|
@@ -66836,9 +66802,7 @@ function gzipSync(data, opts) {
|
|
|
66836
66802
|
* Streaming GZIP decompression
|
|
66837
66803
|
*/
|
|
66838
66804
|
|
|
66839
|
-
var Gunzip =
|
|
66840
|
-
/*#__PURE__*/
|
|
66841
|
-
function () {
|
|
66805
|
+
var Gunzip = /*#__PURE__*/function () {
|
|
66842
66806
|
/**
|
|
66843
66807
|
* Creates a GUNZIP stream
|
|
66844
66808
|
* @param cb The callback to call whenever data is inflated
|
|
@@ -66879,9 +66843,7 @@ function () {
|
|
|
66879
66843
|
* Asynchronous streaming GZIP decompression
|
|
66880
66844
|
*/
|
|
66881
66845
|
|
|
66882
|
-
var AsyncGunzip =
|
|
66883
|
-
/*#__PURE__*/
|
|
66884
|
-
function () {
|
|
66846
|
+
var AsyncGunzip = /*#__PURE__*/function () {
|
|
66885
66847
|
/**
|
|
66886
66848
|
* Creates an asynchronous GUNZIP stream
|
|
66887
66849
|
* @param cb The callback to call whenever data is deflated
|
|
@@ -66921,9 +66883,7 @@ function gunzipSync(data, out) {
|
|
|
66921
66883
|
* Streaming Zlib compression
|
|
66922
66884
|
*/
|
|
66923
66885
|
|
|
66924
|
-
var Zlib =
|
|
66925
|
-
/*#__PURE__*/
|
|
66926
|
-
function () {
|
|
66886
|
+
var Zlib = /*#__PURE__*/function () {
|
|
66927
66887
|
function Zlib(opts, cb) {
|
|
66928
66888
|
this.c = adler();
|
|
66929
66889
|
this.v = 1;
|
|
@@ -66954,9 +66914,7 @@ function () {
|
|
|
66954
66914
|
* Asynchronous streaming Zlib compression
|
|
66955
66915
|
*/
|
|
66956
66916
|
|
|
66957
|
-
var AsyncZlib =
|
|
66958
|
-
/*#__PURE__*/
|
|
66959
|
-
function () {
|
|
66917
|
+
var AsyncZlib = /*#__PURE__*/function () {
|
|
66960
66918
|
function AsyncZlib(opts, cb) {
|
|
66961
66919
|
astrmify([bDflt, zle, function () {
|
|
66962
66920
|
return [astrm, Deflate, Zlib];
|
|
@@ -66995,9 +66953,7 @@ function zlibSync(data, opts) {
|
|
|
66995
66953
|
* Streaming Zlib decompression
|
|
66996
66954
|
*/
|
|
66997
66955
|
|
|
66998
|
-
var Unzlib =
|
|
66999
|
-
/*#__PURE__*/
|
|
67000
|
-
function () {
|
|
66956
|
+
var Unzlib = /*#__PURE__*/function () {
|
|
67001
66957
|
/**
|
|
67002
66958
|
* Creates a Zlib decompression stream
|
|
67003
66959
|
* @param cb The callback to call whenever data is inflated
|
|
@@ -67037,9 +66993,7 @@ function () {
|
|
|
67037
66993
|
* Asynchronous streaming Zlib decompression
|
|
67038
66994
|
*/
|
|
67039
66995
|
|
|
67040
|
-
var AsyncUnzlib =
|
|
67041
|
-
/*#__PURE__*/
|
|
67042
|
-
function () {
|
|
66996
|
+
var AsyncUnzlib = /*#__PURE__*/function () {
|
|
67043
66997
|
/**
|
|
67044
66998
|
* Creates an asynchronous Zlib decompression stream
|
|
67045
66999
|
* @param cb The callback to call whenever data is deflated
|
|
@@ -67079,9 +67033,7 @@ function unzlibSync(data, out) {
|
|
|
67079
67033
|
* Streaming GZIP, Zlib, or raw DEFLATE decompression
|
|
67080
67034
|
*/
|
|
67081
67035
|
|
|
67082
|
-
var Decompress =
|
|
67083
|
-
/*#__PURE__*/
|
|
67084
|
-
function () {
|
|
67036
|
+
var Decompress = /*#__PURE__*/function () {
|
|
67085
67037
|
/**
|
|
67086
67038
|
* Creates a decompression stream
|
|
67087
67039
|
* @param cb The callback to call whenever data is decompressed
|
|
@@ -67128,9 +67080,7 @@ function () {
|
|
|
67128
67080
|
* Asynchronous streaming GZIP, Zlib, or raw DEFLATE decompression
|
|
67129
67081
|
*/
|
|
67130
67082
|
|
|
67131
|
-
var AsyncDecompress =
|
|
67132
|
-
/*#__PURE__*/
|
|
67133
|
-
function () {
|
|
67083
|
+
var AsyncDecompress = /*#__PURE__*/function () {
|
|
67134
67084
|
/**
|
|
67135
67085
|
* Creates an asynchronous decompression stream
|
|
67136
67086
|
* @param cb The callback to call whenever data is decompressed
|
|
@@ -67179,13 +67129,9 @@ var fltn = function fltn(d, p, t, o) {
|
|
|
67179
67129
|
}; // text encoder
|
|
67180
67130
|
|
|
67181
67131
|
|
|
67182
|
-
var te = typeof TextEncoder != 'undefined' &&
|
|
67183
|
-
/*#__PURE__*/
|
|
67184
|
-
new TextEncoder(); // text decoder
|
|
67132
|
+
var te = typeof TextEncoder != 'undefined' && /*#__PURE__*/new TextEncoder(); // text decoder
|
|
67185
67133
|
|
|
67186
|
-
var td = typeof TextDecoder != 'undefined' &&
|
|
67187
|
-
/*#__PURE__*/
|
|
67188
|
-
new TextDecoder(); // text decoder stream
|
|
67134
|
+
var td = typeof TextDecoder != 'undefined' && /*#__PURE__*/new TextDecoder(); // text decoder stream
|
|
67189
67135
|
|
|
67190
67136
|
var tds = 0;
|
|
67191
67137
|
|
|
@@ -67212,9 +67158,7 @@ var dutf8 = function dutf8(d) {
|
|
|
67212
67158
|
*/
|
|
67213
67159
|
|
|
67214
67160
|
|
|
67215
|
-
var DecodeUTF8 =
|
|
67216
|
-
/*#__PURE__*/
|
|
67217
|
-
function () {
|
|
67161
|
+
var DecodeUTF8 = /*#__PURE__*/function () {
|
|
67218
67162
|
/**
|
|
67219
67163
|
* Creates a UTF-8 decoding stream
|
|
67220
67164
|
* @param cb The callback to call whenever data is decoded
|
|
@@ -67270,9 +67214,7 @@ function () {
|
|
|
67270
67214
|
* Streaming UTF-8 encoding
|
|
67271
67215
|
*/
|
|
67272
67216
|
|
|
67273
|
-
var EncodeUTF8 =
|
|
67274
|
-
/*#__PURE__*/
|
|
67275
|
-
function () {
|
|
67217
|
+
var EncodeUTF8 = /*#__PURE__*/function () {
|
|
67276
67218
|
/**
|
|
67277
67219
|
* Creates a UTF-8 decoding stream
|
|
67278
67220
|
* @param cb The callback to call whenever data is encoded
|
|
@@ -67473,9 +67415,7 @@ var wzf = function wzf(o, b, c, d, e) {
|
|
|
67473
67415
|
*/
|
|
67474
67416
|
|
|
67475
67417
|
|
|
67476
|
-
var ZipPassThrough =
|
|
67477
|
-
/*#__PURE__*/
|
|
67478
|
-
function () {
|
|
67418
|
+
var ZipPassThrough = /*#__PURE__*/function () {
|
|
67479
67419
|
/**
|
|
67480
67420
|
* Creates a pass-through stream that can be added to ZIP archives
|
|
67481
67421
|
* @param filename The filename to associate with this data stream
|
|
@@ -67524,9 +67464,7 @@ function () {
|
|
|
67524
67464
|
* for better performance
|
|
67525
67465
|
*/
|
|
67526
67466
|
|
|
67527
|
-
var ZipDeflate =
|
|
67528
|
-
/*#__PURE__*/
|
|
67529
|
-
function () {
|
|
67467
|
+
var ZipDeflate = /*#__PURE__*/function () {
|
|
67530
67468
|
/**
|
|
67531
67469
|
* Creates a DEFLATE stream that can be added to ZIP archives
|
|
67532
67470
|
* @param filename The filename to associate with this data stream
|
|
@@ -67568,9 +67506,7 @@ function () {
|
|
|
67568
67506
|
* Asynchronous streaming DEFLATE compression for ZIP archives
|
|
67569
67507
|
*/
|
|
67570
67508
|
|
|
67571
|
-
var AsyncZipDeflate =
|
|
67572
|
-
/*#__PURE__*/
|
|
67573
|
-
function () {
|
|
67509
|
+
var AsyncZipDeflate = /*#__PURE__*/function () {
|
|
67574
67510
|
/**
|
|
67575
67511
|
* Creates a DEFLATE stream that can be added to ZIP archives
|
|
67576
67512
|
* @param filename The filename to associate with this data stream
|
|
@@ -67610,9 +67546,7 @@ function () {
|
|
|
67610
67546
|
* A zippable archive to which files can incrementally be added
|
|
67611
67547
|
*/
|
|
67612
67548
|
|
|
67613
|
-
var Zip =
|
|
67614
|
-
/*#__PURE__*/
|
|
67615
|
-
function () {
|
|
67549
|
+
var Zip = /*#__PURE__*/function () {
|
|
67616
67550
|
/**
|
|
67617
67551
|
* Creates an empty ZIP archive to which files can be added
|
|
67618
67552
|
* @param cb The callback to call whenever data for the generated ZIP archive
|
|
@@ -67934,9 +67868,7 @@ function zipSync(data, opts) {
|
|
|
67934
67868
|
* Streaming pass-through decompression for ZIP archives
|
|
67935
67869
|
*/
|
|
67936
67870
|
|
|
67937
|
-
var UnzipPassThrough =
|
|
67938
|
-
/*#__PURE__*/
|
|
67939
|
-
function () {
|
|
67871
|
+
var UnzipPassThrough = /*#__PURE__*/function () {
|
|
67940
67872
|
function UnzipPassThrough() {}
|
|
67941
67873
|
|
|
67942
67874
|
UnzipPassThrough.prototype.push = function (data, final) {
|
|
@@ -67951,9 +67883,7 @@ function () {
|
|
|
67951
67883
|
* better performance.
|
|
67952
67884
|
*/
|
|
67953
67885
|
|
|
67954
|
-
var UnzipInflate =
|
|
67955
|
-
/*#__PURE__*/
|
|
67956
|
-
function () {
|
|
67886
|
+
var UnzipInflate = /*#__PURE__*/function () {
|
|
67957
67887
|
/**
|
|
67958
67888
|
* Creates a DEFLATE decompression that can be used in ZIP archives
|
|
67959
67889
|
*/
|
|
@@ -67980,9 +67910,7 @@ function () {
|
|
|
67980
67910
|
* Asynchronous streaming DEFLATE decompression for ZIP archives
|
|
67981
67911
|
*/
|
|
67982
67912
|
|
|
67983
|
-
var AsyncUnzipInflate =
|
|
67984
|
-
/*#__PURE__*/
|
|
67985
|
-
function () {
|
|
67913
|
+
var AsyncUnzipInflate = /*#__PURE__*/function () {
|
|
67986
67914
|
/**
|
|
67987
67915
|
* Creates a DEFLATE decompression that can be used in ZIP archives
|
|
67988
67916
|
*/
|
|
@@ -68013,9 +67941,7 @@ function () {
|
|
|
68013
67941
|
* A ZIP archive decompression stream that emits files as they are discovered
|
|
68014
67942
|
*/
|
|
68015
67943
|
|
|
68016
|
-
var Unzip =
|
|
68017
|
-
/*#__PURE__*/
|
|
68018
|
-
function () {
|
|
67944
|
+
var Unzip = /*#__PURE__*/function () {
|
|
68019
67945
|
/**
|
|
68020
67946
|
* Creates a ZIP decompression stream
|
|
68021
67947
|
* @param cb The callback to call whenever a file in the ZIP archive is found
|
|
@@ -68651,9 +68577,7 @@ function calcNURBSDerivatives(p, U, P, u, nd) {
|
|
|
68651
68577
|
*
|
|
68652
68578
|
**/
|
|
68653
68579
|
|
|
68654
|
-
var NURBSCurve =
|
|
68655
|
-
/*#__PURE__*/
|
|
68656
|
-
function (_Curve) {
|
|
68580
|
+
var NURBSCurve = /*#__PURE__*/function (_Curve) {
|
|
68657
68581
|
_inherits(NURBSCurve, _Curve);
|
|
68658
68582
|
|
|
68659
68583
|
var _super = _createSuper(NURBSCurve);
|
|
@@ -68738,9 +68662,7 @@ var fbxTree;
|
|
|
68738
68662
|
var connections;
|
|
68739
68663
|
var sceneGraph;
|
|
68740
68664
|
|
|
68741
|
-
var FBXLoader =
|
|
68742
|
-
/*#__PURE__*/
|
|
68743
|
-
function (_Loader) {
|
|
68665
|
+
var FBXLoader = /*#__PURE__*/function (_Loader) {
|
|
68744
68666
|
_inherits(FBXLoader, _Loader);
|
|
68745
68667
|
|
|
68746
68668
|
var _super = _createSuper(FBXLoader);
|
|
@@ -68804,9 +68726,7 @@ function (_Loader) {
|
|
|
68804
68726
|
}(Loader); // Parse the FBXTree object returned by the BinaryParser or TextParser and return a Group
|
|
68805
68727
|
|
|
68806
68728
|
|
|
68807
|
-
var FBXTreeParser =
|
|
68808
|
-
/*#__PURE__*/
|
|
68809
|
-
function () {
|
|
68729
|
+
var FBXTreeParser = /*#__PURE__*/function () {
|
|
68810
68730
|
function FBXTreeParser(textureLoader, manager) {
|
|
68811
68731
|
_classCallCheck(this, FBXTreeParser);
|
|
68812
68732
|
|
|
@@ -69804,9 +69724,7 @@ function () {
|
|
|
69804
69724
|
}(); // parse Geometry data from FBXTree and return map of BufferGeometries
|
|
69805
69725
|
|
|
69806
69726
|
|
|
69807
|
-
var GeometryParser =
|
|
69808
|
-
/*#__PURE__*/
|
|
69809
|
-
function () {
|
|
69727
|
+
var GeometryParser = /*#__PURE__*/function () {
|
|
69810
69728
|
function GeometryParser() {
|
|
69811
69729
|
_classCallCheck(this, GeometryParser);
|
|
69812
69730
|
}
|
|
@@ -70416,9 +70334,7 @@ function () {
|
|
|
70416
70334
|
}(); // parse animation data from FBXTree
|
|
70417
70335
|
|
|
70418
70336
|
|
|
70419
|
-
var AnimationParser =
|
|
70420
|
-
/*#__PURE__*/
|
|
70421
|
-
function () {
|
|
70337
|
+
var AnimationParser = /*#__PURE__*/function () {
|
|
70422
70338
|
function AnimationParser() {
|
|
70423
70339
|
_classCallCheck(this, AnimationParser);
|
|
70424
70340
|
}
|
|
@@ -70852,9 +70768,7 @@ function () {
|
|
|
70852
70768
|
}(); // parse an FBX file in ASCII format
|
|
70853
70769
|
|
|
70854
70770
|
|
|
70855
|
-
var TextParser =
|
|
70856
|
-
/*#__PURE__*/
|
|
70857
|
-
function () {
|
|
70771
|
+
var TextParser = /*#__PURE__*/function () {
|
|
70858
70772
|
function TextParser() {
|
|
70859
70773
|
_classCallCheck(this, TextParser);
|
|
70860
70774
|
}
|
|
@@ -71109,9 +71023,7 @@ function () {
|
|
|
71109
71023
|
}(); // Parse an FBX file in Binary format
|
|
71110
71024
|
|
|
71111
71025
|
|
|
71112
|
-
var BinaryParser =
|
|
71113
|
-
/*#__PURE__*/
|
|
71114
|
-
function () {
|
|
71026
|
+
var BinaryParser = /*#__PURE__*/function () {
|
|
71115
71027
|
function BinaryParser() {
|
|
71116
71028
|
_classCallCheck(this, BinaryParser);
|
|
71117
71029
|
}
|
|
@@ -71366,9 +71278,7 @@ function () {
|
|
|
71366
71278
|
return BinaryParser;
|
|
71367
71279
|
}();
|
|
71368
71280
|
|
|
71369
|
-
var BinaryReader =
|
|
71370
|
-
/*#__PURE__*/
|
|
71371
|
-
function () {
|
|
71281
|
+
var BinaryReader = /*#__PURE__*/function () {
|
|
71372
71282
|
function BinaryReader(buffer, littleEndian) {
|
|
71373
71283
|
_classCallCheck(this, BinaryReader);
|
|
71374
71284
|
|
|
@@ -71570,9 +71480,7 @@ function () {
|
|
|
71570
71480
|
// and BinaryParser( FBX Binary format)
|
|
71571
71481
|
|
|
71572
71482
|
|
|
71573
|
-
var FBXTree =
|
|
71574
|
-
/*#__PURE__*/
|
|
71575
|
-
function () {
|
|
71483
|
+
var FBXTree = /*#__PURE__*/function () {
|
|
71576
71484
|
function FBXTree() {
|
|
71577
71485
|
_classCallCheck(this, FBXTree);
|
|
71578
71486
|
}
|
|
@@ -72194,9 +72102,7 @@ function parallelTraverse(a, b, callback) {
|
|
|
72194
72102
|
* Loads a Wavefront .mtl file specifying materials
|
|
72195
72103
|
*/
|
|
72196
72104
|
|
|
72197
|
-
var MTLLoader =
|
|
72198
|
-
/*#__PURE__*/
|
|
72199
|
-
function (_Loader) {
|
|
72105
|
+
var MTLLoader = /*#__PURE__*/function (_Loader) {
|
|
72200
72106
|
_inherits(MTLLoader, _Loader);
|
|
72201
72107
|
|
|
72202
72108
|
var _super = _createSuper(MTLLoader);
|
|
@@ -72327,9 +72233,7 @@ function (_Loader) {
|
|
|
72327
72233
|
*/
|
|
72328
72234
|
|
|
72329
72235
|
|
|
72330
|
-
var MaterialCreator =
|
|
72331
|
-
/*#__PURE__*/
|
|
72332
|
-
function () {
|
|
72236
|
+
var MaterialCreator = /*#__PURE__*/function () {
|
|
72333
72237
|
function MaterialCreator() {
|
|
72334
72238
|
var baseUrl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
72335
72239
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
@@ -72898,9 +72802,7 @@ function ParserState() {
|
|
|
72898
72802
|
} //
|
|
72899
72803
|
|
|
72900
72804
|
|
|
72901
|
-
var OBJLoader =
|
|
72902
|
-
/*#__PURE__*/
|
|
72903
|
-
function (_Loader) {
|
|
72805
|
+
var OBJLoader = /*#__PURE__*/function (_Loader) {
|
|
72904
72806
|
_inherits(OBJLoader, _Loader);
|
|
72905
72807
|
|
|
72906
72808
|
var _super = _createSuper(OBJLoader);
|
|
@@ -73239,9 +73141,7 @@ function (_Loader) {
|
|
|
73239
73141
|
MTL: '.mtl'
|
|
73240
73142
|
};
|
|
73241
73143
|
|
|
73242
|
-
var OBJMTLLoader =
|
|
73243
|
-
/*#__PURE__*/
|
|
73244
|
-
function () {
|
|
73144
|
+
var OBJMTLLoader = /*#__PURE__*/function () {
|
|
73245
73145
|
function OBJMTLLoader() {
|
|
73246
73146
|
_classCallCheck(this, OBJMTLLoader);
|
|
73247
73147
|
|
|
@@ -73476,9 +73376,7 @@ var DEFAULT_ASSETS = {
|
|
|
73476
73376
|
common: DEFAULT_COMMON_ASSETS,
|
|
73477
73377
|
levels: {}
|
|
73478
73378
|
};
|
|
73479
|
-
var Assets =
|
|
73480
|
-
/*#__PURE__*/
|
|
73481
|
-
function () {
|
|
73379
|
+
var Assets = /*#__PURE__*/function () {
|
|
73482
73380
|
function Assets() {
|
|
73483
73381
|
var _this = this;
|
|
73484
73382
|
|
|
@@ -73626,7 +73524,7 @@ function () {
|
|
|
73626
73524
|
group.common[lowerCaseType] = assets[assetType];
|
|
73627
73525
|
} else if (isLevelName(lowerCaseType)) {
|
|
73628
73526
|
var levelAssets = assets[assetType] || {};
|
|
73629
|
-
group.levels[lowerCaseType] = _objectSpread2({}, DEFAULT_COMMON_ASSETS,
|
|
73527
|
+
group.levels[lowerCaseType] = _objectSpread2(_objectSpread2({}, DEFAULT_COMMON_ASSETS), levelAssets);
|
|
73630
73528
|
}
|
|
73631
73529
|
|
|
73632
73530
|
return group;
|
|
@@ -74419,9 +74317,7 @@ var AnonymousSubject = /*@__PURE__*/ (function (_super) {
|
|
|
74419
74317
|
return AnonymousSubject;
|
|
74420
74318
|
}(Subject));var ONE_MB = 1048576;
|
|
74421
74319
|
|
|
74422
|
-
var Stats =
|
|
74423
|
-
/*#__PURE__*/
|
|
74424
|
-
function () {
|
|
74320
|
+
var Stats = /*#__PURE__*/function () {
|
|
74425
74321
|
function Stats() {
|
|
74426
74322
|
_classCallCheck(this, Stats);
|
|
74427
74323
|
|
|
@@ -74493,9 +74389,7 @@ function () {
|
|
|
74493
74389
|
return Stats;
|
|
74494
74390
|
}();
|
|
74495
74391
|
|
|
74496
|
-
var Stats$1 = new Stats();var Loader$1 =
|
|
74497
|
-
/*#__PURE__*/
|
|
74498
|
-
function () {
|
|
74392
|
+
var Stats$1 = new Stats();var Loader$1 = /*#__PURE__*/function () {
|
|
74499
74393
|
function Loader() {
|
|
74500
74394
|
_classCallCheck(this, Loader);
|
|
74501
74395
|
|
|
@@ -74508,9 +74402,8 @@ function () {
|
|
|
74508
74402
|
}]);
|
|
74509
74403
|
|
|
74510
74404
|
return Loader;
|
|
74511
|
-
}();var
|
|
74512
|
-
/*#__PURE__*/
|
|
74513
|
-
function (_Loader) {
|
|
74405
|
+
}();var _excluded$4 = ["mesh", "scripts", "texture"];
|
|
74406
|
+
var MeshLoader = /*#__PURE__*/function (_Loader) {
|
|
74514
74407
|
_inherits(MeshLoader, _Loader);
|
|
74515
74408
|
|
|
74516
74409
|
var _super = _createSuper(MeshLoader);
|
|
@@ -74535,7 +74428,7 @@ function (_Loader) {
|
|
|
74535
74428
|
var mesh = _ref.mesh,
|
|
74536
74429
|
scripts = _ref.scripts,
|
|
74537
74430
|
texture = _ref.texture,
|
|
74538
|
-
opts = _objectWithoutProperties(_ref,
|
|
74431
|
+
opts = _objectWithoutProperties(_ref, _excluded$4);
|
|
74539
74432
|
|
|
74540
74433
|
return _this.loadMesh(_this.parseMesh(mesh), scripts, texture, opts);
|
|
74541
74434
|
});
|
|
@@ -74571,9 +74464,7 @@ function (_Loader) {
|
|
|
74571
74464
|
}(Loader$1);
|
|
74572
74465
|
var MeshLoader$1 = new MeshLoader();var LAMP_COLOR = 0Xf1c40f;
|
|
74573
74466
|
|
|
74574
|
-
var Light$1 =
|
|
74575
|
-
/*#__PURE__*/
|
|
74576
|
-
function (_Entity) {
|
|
74467
|
+
var Light$1 = /*#__PURE__*/function (_Entity) {
|
|
74577
74468
|
_inherits(Light, _Entity);
|
|
74578
74469
|
|
|
74579
74470
|
var _super = _createSuper(Light);
|
|
@@ -74666,7 +74557,7 @@ function (_Entity) {
|
|
|
74666
74557
|
_ref2$updateHolder = _ref2.updateHolder,
|
|
74667
74558
|
updateHolder = _ref2$updateHolder === void 0 ? true : _ref2$updateHolder;
|
|
74668
74559
|
|
|
74669
|
-
var position = _objectSpread2({}, this.getPosition(),
|
|
74560
|
+
var position = _objectSpread2(_objectSpread2({}, this.getPosition()), where);
|
|
74670
74561
|
|
|
74671
74562
|
var x = position.x,
|
|
74672
74563
|
y = position.y,
|
|
@@ -74783,9 +74674,7 @@ var DEFAULT_MAP_SIZE = 512;
|
|
|
74783
74674
|
var DEFAULT_BIAS$1 = -0.0001;
|
|
74784
74675
|
var WHITE = 0xffffff;
|
|
74785
74676
|
|
|
74786
|
-
var SunLight =
|
|
74787
|
-
/*#__PURE__*/
|
|
74788
|
-
function (_Light) {
|
|
74677
|
+
var SunLight = /*#__PURE__*/function (_Light) {
|
|
74789
74678
|
_inherits(SunLight, _Light);
|
|
74790
74679
|
|
|
74791
74680
|
var _super = _createSuper(SunLight);
|
|
@@ -74827,9 +74716,9 @@ function (_Light) {
|
|
|
74827
74716
|
intensity = _ref$intensity === void 0 ? DEFAULT_INTENSITY$1 : _ref$intensity;
|
|
74828
74717
|
|
|
74829
74718
|
if (light) {
|
|
74830
|
-
this.
|
|
74719
|
+
this.setBody(light);
|
|
74831
74720
|
} else {
|
|
74832
|
-
this.
|
|
74721
|
+
this.setBody(new DirectionalLight(color, intensity));
|
|
74833
74722
|
}
|
|
74834
74723
|
|
|
74835
74724
|
if (this.hasBody()) {
|
|
@@ -74935,7 +74824,7 @@ function (_Light) {
|
|
|
74935
74824
|
}, {
|
|
74936
74825
|
key: "toJSON",
|
|
74937
74826
|
value: function toJSON() {
|
|
74938
|
-
return _objectSpread2({}, _get(_getPrototypeOf(SunLight.prototype), "toJSON", this).call(this), {
|
|
74827
|
+
return _objectSpread2(_objectSpread2({}, _get(_getPrototypeOf(SunLight.prototype), "toJSON", this).call(this)), {}, {
|
|
74939
74828
|
type: SUNLIGHT
|
|
74940
74829
|
});
|
|
74941
74830
|
}
|
|
@@ -74950,17 +74839,15 @@ function (_Light) {
|
|
|
74950
74839
|
var DEFAULT_INTENSITY$2 = 0.5;
|
|
74951
74840
|
var WHITE$1 = 0xffffff;
|
|
74952
74841
|
|
|
74953
|
-
var
|
|
74954
|
-
|
|
74955
|
-
function (_Light) {
|
|
74956
|
-
_inherits(LightAmbient, _Light);
|
|
74842
|
+
var AmbientLight$1 = /*#__PURE__*/function (_Light) {
|
|
74843
|
+
_inherits(AmbientLight$1, _Light);
|
|
74957
74844
|
|
|
74958
|
-
var _super = _createSuper(
|
|
74845
|
+
var _super = _createSuper(AmbientLight$1);
|
|
74959
74846
|
|
|
74960
|
-
function
|
|
74847
|
+
function AmbientLight$1(options) {
|
|
74961
74848
|
var _this;
|
|
74962
74849
|
|
|
74963
|
-
_classCallCheck(this,
|
|
74850
|
+
_classCallCheck(this, AmbientLight$1);
|
|
74964
74851
|
|
|
74965
74852
|
var _options$color = options.color,
|
|
74966
74853
|
color = _options$color === void 0 ? WHITE$1 : _options$color,
|
|
@@ -74982,7 +74869,7 @@ function (_Light) {
|
|
|
74982
74869
|
return _this;
|
|
74983
74870
|
}
|
|
74984
74871
|
|
|
74985
|
-
_createClass(
|
|
74872
|
+
_createClass(AmbientLight$1, [{
|
|
74986
74873
|
key: "setLight",
|
|
74987
74874
|
value: function setLight(_ref) {
|
|
74988
74875
|
var light = _ref.light,
|
|
@@ -74992,9 +74879,9 @@ function (_Light) {
|
|
|
74992
74879
|
intensity = _ref$intensity === void 0 ? DEFAULT_INTENSITY$2 : _ref$intensity;
|
|
74993
74880
|
|
|
74994
74881
|
if (light) {
|
|
74995
|
-
this.light
|
|
74882
|
+
this.setBody(light);
|
|
74996
74883
|
} else {
|
|
74997
|
-
this.
|
|
74884
|
+
this.setBody(new AmbientLight(color, intensity));
|
|
74998
74885
|
}
|
|
74999
74886
|
|
|
75000
74887
|
if (this.hasBody()) {
|
|
@@ -75007,6 +74894,7 @@ function (_Light) {
|
|
|
75007
74894
|
var _this$options$positio = this.options.position,
|
|
75008
74895
|
position = _this$options$positio === void 0 ? DEFAULT_POSITION$3 : _this$options$positio;
|
|
75009
74896
|
this.setPosition(position);
|
|
74897
|
+
console.log('about to add ambientlight to scene', this.body);
|
|
75010
74898
|
this.addToScene();
|
|
75011
74899
|
}
|
|
75012
74900
|
}, {
|
|
@@ -75018,7 +74906,7 @@ function (_Light) {
|
|
|
75018
74906
|
}, {
|
|
75019
74907
|
key: "update",
|
|
75020
74908
|
value: function update(dt) {
|
|
75021
|
-
_get(_getPrototypeOf(
|
|
74909
|
+
_get(_getPrototypeOf(AmbientLight$1.prototype), "update", this).call(this, dt);
|
|
75022
74910
|
|
|
75023
74911
|
if (this.hasHelper()) {
|
|
75024
74912
|
this.setPosition(this.holder.getPosition(), {
|
|
@@ -75029,13 +74917,13 @@ function (_Light) {
|
|
|
75029
74917
|
}, {
|
|
75030
74918
|
key: "toJSON",
|
|
75031
74919
|
value: function toJSON() {
|
|
75032
|
-
return _objectSpread2({}, _get(_getPrototypeOf(
|
|
74920
|
+
return _objectSpread2(_objectSpread2({}, _get(_getPrototypeOf(AmbientLight$1.prototype), "toJSON", this).call(this)), {}, {
|
|
75033
74921
|
type: AMBIENTLIGHT
|
|
75034
74922
|
});
|
|
75035
74923
|
}
|
|
75036
74924
|
}]);
|
|
75037
74925
|
|
|
75038
|
-
return
|
|
74926
|
+
return AmbientLight$1;
|
|
75039
74927
|
}(Light$1);var DEFAULT_NEAR$2 = 0.1;
|
|
75040
74928
|
var DEFAULT_FAR$2 = 100;
|
|
75041
74929
|
var DEFAULT_POSITION$4 = {
|
|
@@ -75051,9 +74939,7 @@ var DEFAULT_BIAS$2 = -0.0001;
|
|
|
75051
74939
|
var WHITE$2 = 0xffffff;
|
|
75052
74940
|
var GREEN = 0x2ecc71;
|
|
75053
74941
|
|
|
75054
|
-
var PointLight$1 =
|
|
75055
|
-
/*#__PURE__*/
|
|
75056
|
-
function (_Light) {
|
|
74942
|
+
var PointLight$1 = /*#__PURE__*/function (_Light) {
|
|
75057
74943
|
_inherits(PointLight$1, _Light);
|
|
75058
74944
|
|
|
75059
74945
|
var _super = _createSuper(PointLight$1);
|
|
@@ -75101,9 +74987,9 @@ function (_Light) {
|
|
|
75101
74987
|
decay = _ref$decay === void 0 ? DEFAULT_DECAY : _ref$decay;
|
|
75102
74988
|
|
|
75103
74989
|
if (light) {
|
|
75104
|
-
this.
|
|
74990
|
+
this.setBody(light);
|
|
75105
74991
|
} else {
|
|
75106
|
-
this.
|
|
74992
|
+
this.setBody(new PointLight(color, intensity, distance, decay));
|
|
75107
74993
|
}
|
|
75108
74994
|
|
|
75109
74995
|
if (this.hasBody()) {
|
|
@@ -75174,7 +75060,7 @@ function (_Light) {
|
|
|
75174
75060
|
}, {
|
|
75175
75061
|
key: "toJSON",
|
|
75176
75062
|
value: function toJSON() {
|
|
75177
|
-
return _objectSpread2({}, _get(_getPrototypeOf(PointLight$1.prototype), "toJSON", this).call(this), {
|
|
75063
|
+
return _objectSpread2(_objectSpread2({}, _get(_getPrototypeOf(PointLight$1.prototype), "toJSON", this).call(this)), {}, {
|
|
75178
75064
|
distance: this.distance,
|
|
75179
75065
|
type: POINTLIGHT
|
|
75180
75066
|
});
|
|
@@ -75182,9 +75068,7 @@ function (_Light) {
|
|
|
75182
75068
|
}]);
|
|
75183
75069
|
|
|
75184
75070
|
return PointLight$1;
|
|
75185
|
-
}(Light$1);var LightLoader =
|
|
75186
|
-
/*#__PURE__*/
|
|
75187
|
-
function (_Loader) {
|
|
75071
|
+
}(Light$1);var LightLoader = /*#__PURE__*/function (_Loader) {
|
|
75188
75072
|
_inherits(LightLoader, _Loader);
|
|
75189
75073
|
|
|
75190
75074
|
var _super = _createSuper(LightLoader);
|
|
@@ -75253,7 +75137,7 @@ function (_Loader) {
|
|
|
75253
75137
|
intensity = _ref3.intensity,
|
|
75254
75138
|
position = _ref3.position,
|
|
75255
75139
|
name = _ref3.name;
|
|
75256
|
-
return new
|
|
75140
|
+
return new AmbientLight$1({
|
|
75257
75141
|
color: color,
|
|
75258
75142
|
intensity: intensity,
|
|
75259
75143
|
position: position,
|
|
@@ -75280,9 +75164,7 @@ function (_Loader) {
|
|
|
75280
75164
|
|
|
75281
75165
|
return LightLoader;
|
|
75282
75166
|
}(Loader$1);
|
|
75283
|
-
var LightLoader$1 = new LightLoader();var Pass =
|
|
75284
|
-
/*#__PURE__*/
|
|
75285
|
-
function () {
|
|
75167
|
+
var LightLoader$1 = new LightLoader();var Pass = /*#__PURE__*/function () {
|
|
75286
75168
|
function Pass() {
|
|
75287
75169
|
_classCallCheck(this, Pass);
|
|
75288
75170
|
|
|
@@ -75335,9 +75217,7 @@ Pass.FullScreenQuad = function () {
|
|
|
75335
75217
|
}
|
|
75336
75218
|
});
|
|
75337
75219
|
return FullScreenQuad;
|
|
75338
|
-
}();var ShaderPass =
|
|
75339
|
-
/*#__PURE__*/
|
|
75340
|
-
function (_Pass) {
|
|
75220
|
+
}();var ShaderPass = /*#__PURE__*/function (_Pass) {
|
|
75341
75221
|
_inherits(ShaderPass, _Pass);
|
|
75342
75222
|
|
|
75343
75223
|
var _super = _createSuper(ShaderPass);
|
|
@@ -75405,9 +75285,7 @@ var CopyShader = {
|
|
|
75405
75285
|
},
|
|
75406
75286
|
vertexShader: ["varying vec2 vUv;", "void main() {", " vUv = uv;", " gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", "}"].join("\n"),
|
|
75407
75287
|
fragmentShader: ["uniform float opacity;", "uniform sampler2D tDiffuse;", "varying vec2 vUv;", "void main() {", " vec4 texel = texture2D( tDiffuse, vUv );", " gl_FragColor = opacity * texel;", "}"].join("\n")
|
|
75408
|
-
};var MaskPass =
|
|
75409
|
-
/*#__PURE__*/
|
|
75410
|
-
function (_Pass) {
|
|
75288
|
+
};var MaskPass = /*#__PURE__*/function (_Pass) {
|
|
75411
75289
|
_inherits(MaskPass, _Pass);
|
|
75412
75290
|
|
|
75413
75291
|
var _super = _createSuper(MaskPass);
|
|
@@ -75473,9 +75351,7 @@ function (_Pass) {
|
|
|
75473
75351
|
}]);
|
|
75474
75352
|
|
|
75475
75353
|
return MaskPass;
|
|
75476
|
-
}(Pass);var ClearMaskPass =
|
|
75477
|
-
/*#__PURE__*/
|
|
75478
|
-
function (_Pass) {
|
|
75354
|
+
}(Pass);var ClearMaskPass = /*#__PURE__*/function (_Pass) {
|
|
75479
75355
|
_inherits(ClearMaskPass, _Pass);
|
|
75480
75356
|
|
|
75481
75357
|
var _super = _createSuper(ClearMaskPass);
|
|
@@ -75499,9 +75375,7 @@ function (_Pass) {
|
|
|
75499
75375
|
}]);
|
|
75500
75376
|
|
|
75501
75377
|
return ClearMaskPass;
|
|
75502
|
-
}(Pass);var EffectComposer =
|
|
75503
|
-
/*#__PURE__*/
|
|
75504
|
-
function () {
|
|
75378
|
+
}(Pass);var EffectComposer = /*#__PURE__*/function () {
|
|
75505
75379
|
function EffectComposer(renderer, renderTarget) {
|
|
75506
75380
|
var _this = this;
|
|
75507
75381
|
|
|
@@ -75679,9 +75553,7 @@ function () {
|
|
|
75679
75553
|
}]);
|
|
75680
75554
|
|
|
75681
75555
|
return EffectComposer;
|
|
75682
|
-
}();var RenderPass =
|
|
75683
|
-
/*#__PURE__*/
|
|
75684
|
-
function (_Pass) {
|
|
75556
|
+
}();var RenderPass = /*#__PURE__*/function (_Pass) {
|
|
75685
75557
|
_inherits(RenderPass, _Pass);
|
|
75686
75558
|
|
|
75687
75559
|
var _super = _createSuper(RenderPass);
|
|
@@ -75859,9 +75731,7 @@ var ConvolutionShader = {
|
|
|
75859
75731
|
};var BLUR_X = new Vector2(0.001953125, 0.0);
|
|
75860
75732
|
var BLUR_Y = new Vector2(0.0, 0.001953125);
|
|
75861
75733
|
|
|
75862
|
-
var BloomPass =
|
|
75863
|
-
/*#__PURE__*/
|
|
75864
|
-
function (_Pass) {
|
|
75734
|
+
var BloomPass = /*#__PURE__*/function (_Pass) {
|
|
75865
75735
|
_inherits(BloomPass, _Pass);
|
|
75866
75736
|
|
|
75867
75737
|
var _super = _createSuper(BloomPass);
|
|
@@ -75996,9 +75866,7 @@ var BokehShader = {
|
|
|
75996
75866
|
'uniform float aperture;', // aperture - bigger values for shallower depth of field
|
|
75997
75867
|
'uniform float nearClip;', 'uniform float farClip;', 'uniform float focus;', 'uniform float aspect;', '#include <packing>', 'float getDepth( const in vec2 screenPosition ) {', ' #if DEPTH_PACKING == 1', ' return unpackRGBAToDepth( texture2D( tDepth, screenPosition ) );', ' #else', ' return texture2D( tDepth, screenPosition ).x;', ' #endif', '}', 'float getViewZ( const in float depth ) {', ' #if PERSPECTIVE_CAMERA == 1', ' return perspectiveDepthToViewZ( depth, nearClip, farClip );', ' #else', ' return orthographicDepthToViewZ( depth, nearClip, farClip );', ' #endif', '}', 'void main() {', ' vec2 aspectcorrect = vec2( 1.0, aspect );', ' float viewZ = getViewZ( getDepth( vUv ) );', ' float factor = ( focus + viewZ );', // viewZ is <= 0, so this is a difference equation
|
|
75998
75868
|
' vec2 dofblur = vec2 ( clamp( factor * aperture, -maxblur, maxblur ) );', ' vec2 dofblur9 = dofblur * 0.9;', ' vec2 dofblur7 = dofblur * 0.7;', ' vec2 dofblur4 = dofblur * 0.4;', ' vec4 col = vec4( 0.0 );', ' col += texture2D( tColor, vUv.xy );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.0, 0.4 ) * aspectcorrect ) * dofblur );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.15, 0.37 ) * aspectcorrect ) * dofblur );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.29, 0.29 ) * aspectcorrect ) * dofblur );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.37, 0.15 ) * aspectcorrect ) * dofblur );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.40, 0.0 ) * aspectcorrect ) * dofblur );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.37, -0.15 ) * aspectcorrect ) * dofblur );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.29, -0.29 ) * aspectcorrect ) * dofblur );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.15, -0.37 ) * aspectcorrect ) * dofblur );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.0, -0.4 ) * aspectcorrect ) * dofblur );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.15, 0.37 ) * aspectcorrect ) * dofblur );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.29, 0.29 ) * aspectcorrect ) * dofblur );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.37, 0.15 ) * aspectcorrect ) * dofblur );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.4, 0.0 ) * aspectcorrect ) * dofblur );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.37, -0.15 ) * aspectcorrect ) * dofblur );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.15, -0.37 ) * aspectcorrect ) * dofblur );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.15, 0.37 ) * aspectcorrect ) * dofblur9 );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.37, 0.15 ) * aspectcorrect ) * dofblur9 );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.37, -0.15 ) * aspectcorrect ) * dofblur9 );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.15, -0.37 ) * aspectcorrect ) * dofblur9 );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.15, 0.37 ) * aspectcorrect ) * dofblur9 );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.37, 0.15 ) * aspectcorrect ) * dofblur9 );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.37, -0.15 ) * aspectcorrect ) * dofblur9 );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.15, -0.37 ) * aspectcorrect ) * dofblur9 );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.29, 0.29 ) * aspectcorrect ) * dofblur7 );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.40, 0.0 ) * aspectcorrect ) * dofblur7 );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.29, -0.29 ) * aspectcorrect ) * dofblur7 );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.0, -0.4 ) * aspectcorrect ) * dofblur7 );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.29, 0.29 ) * aspectcorrect ) * dofblur7 );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.4, 0.0 ) * aspectcorrect ) * dofblur7 );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur7 );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.0, 0.4 ) * aspectcorrect ) * dofblur7 );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.29, 0.29 ) * aspectcorrect ) * dofblur4 );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.4, 0.0 ) * aspectcorrect ) * dofblur4 );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.29, -0.29 ) * aspectcorrect ) * dofblur4 );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.0, -0.4 ) * aspectcorrect ) * dofblur4 );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.29, 0.29 ) * aspectcorrect ) * dofblur4 );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.4, 0.0 ) * aspectcorrect ) * dofblur4 );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur4 );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.0, 0.4 ) * aspectcorrect ) * dofblur4 );', ' gl_FragColor = col / 41.0;', ' gl_FragColor.a = 1.0;', '}'].join('\n')
|
|
75999
|
-
};var BokehPass =
|
|
76000
|
-
/*#__PURE__*/
|
|
76001
|
-
function (_Pass) {
|
|
75869
|
+
};var BokehPass = /*#__PURE__*/function (_Pass) {
|
|
76002
75870
|
_inherits(BokehPass, _Pass);
|
|
76003
75871
|
|
|
76004
75872
|
var _super = _createSuper(BokehPass);
|
|
@@ -76109,9 +75977,7 @@ function (_Pass) {
|
|
|
76109
75977
|
}]);
|
|
76110
75978
|
|
|
76111
75979
|
return BokehPass;
|
|
76112
|
-
}(Pass);var DepthOfField =
|
|
76113
|
-
/*#__PURE__*/
|
|
76114
|
-
function (_BokehPass) {
|
|
75980
|
+
}(Pass);var DepthOfField = /*#__PURE__*/function (_BokehPass) {
|
|
76115
75981
|
_inherits(DepthOfField, _BokehPass);
|
|
76116
75982
|
|
|
76117
75983
|
var _super = _createSuper(DepthOfField);
|
|
@@ -76124,7 +75990,7 @@ function (_BokehPass) {
|
|
|
76124
75990
|
height = _config$screen.h,
|
|
76125
75991
|
aspect = _config$screen.ratio;
|
|
76126
75992
|
|
|
76127
|
-
return _super.call(this, Scene$2.scene, Scene$2.getCameraBody(), _objectSpread2({}, params, {
|
|
75993
|
+
return _super.call(this, Scene$2.scene, Scene$2.getCameraBody(), _objectSpread2(_objectSpread2({}, params), {}, {
|
|
76128
75994
|
width: width,
|
|
76129
75995
|
height: height,
|
|
76130
75996
|
aspect: aspect
|
|
@@ -76188,9 +76054,7 @@ var DigitalGlitch = {
|
|
|
76188
76054
|
" vec4 normal = texture2D (tDisp, p*seed*seed);", " if(p.y<distortion_x+col_s && p.y>distortion_x-col_s*seed) {", " if(seed_x>0.){", " p.y = 1. - (p.y + distortion_y);", " }", " else {", " p.y = distortion_y;", " }", " }", " if(p.x<distortion_y+col_s && p.x>distortion_y-col_s*seed) {", " if(seed_y>0.){", " p.x=distortion_x;", " }", " else {", " p.x = 1. - (p.x + distortion_x);", " }", " }", " p.x+=normal.x*seed_x*(seed/5.);", " p.y+=normal.y*seed_y*(seed/5.);", //base from RGB shift shader
|
|
76189
76055
|
" vec2 offset = amount * vec2( cos(angle), sin(angle));", " vec4 cr = texture2D(tDiffuse, p + offset);", " vec4 cga = texture2D(tDiffuse, p);", " vec4 cb = texture2D(tDiffuse, p - offset);", " gl_FragColor = vec4(cr.r, cga.g, cb.b, cga.a);", //add noise
|
|
76190
76056
|
" vec4 snow = 200.*amount*vec4(rand(vec2(xs * seed,ys * seed*50.))*0.2);", " gl_FragColor = gl_FragColor+ snow;", " }", " else {", " gl_FragColor=texture2D (tDiffuse, vUv);", " }", "}"].join("\n")
|
|
76191
|
-
};var GlitchEffect =
|
|
76192
|
-
/*#__PURE__*/
|
|
76193
|
-
function (_Pass) {
|
|
76057
|
+
};var GlitchEffect = /*#__PURE__*/function (_Pass) {
|
|
76194
76058
|
_inherits(GlitchEffect, _Pass);
|
|
76195
76059
|
|
|
76196
76060
|
var _super = _createSuper(GlitchEffect);
|
|
@@ -76303,9 +76167,7 @@ function (_Pass) {
|
|
|
76303
76167
|
fragmentShader: ["uniform sampler2D tDiffuse;", "uniform float pixelSize;", "uniform vec2 resolution;", "varying highp vec2 vUv;", "void main(){", "vec2 dxy = pixelSize / resolution;", "vec2 coord = dxy * floor( vUv / dxy );", "gl_FragColor = texture2D(tDiffuse, coord);", "}"].join("\n")
|
|
76304
76168
|
};
|
|
76305
76169
|
|
|
76306
|
-
var PixelEffect =
|
|
76307
|
-
/*#__PURE__*/
|
|
76308
|
-
function (_ShaderPass) {
|
|
76170
|
+
var PixelEffect = /*#__PURE__*/function (_ShaderPass) {
|
|
76309
76171
|
_inherits(PixelEffect, _ShaderPass);
|
|
76310
76172
|
|
|
76311
76173
|
var _super = _createSuper(PixelEffect);
|
|
@@ -76415,9 +76277,7 @@ var DEFAULT_COLOR = 0x000000;
|
|
|
76415
76277
|
var DEFAULT_ALPHA = 1.0;
|
|
76416
76278
|
var DEFAULT_KEEPALIVE = false;
|
|
76417
76279
|
|
|
76418
|
-
var OutlineEffect =
|
|
76419
|
-
/*#__PURE__*/
|
|
76420
|
-
function () {
|
|
76280
|
+
var OutlineEffect = /*#__PURE__*/function () {
|
|
76421
76281
|
function OutlineEffect(_ref) {
|
|
76422
76282
|
var _this = this;
|
|
76423
76283
|
|
|
@@ -76762,9 +76622,7 @@ function () {
|
|
|
76762
76622
|
}]);
|
|
76763
76623
|
|
|
76764
76624
|
return OutlineEffect;
|
|
76765
|
-
}();var PostProcessing =
|
|
76766
|
-
/*#__PURE__*/
|
|
76767
|
-
function () {
|
|
76625
|
+
}();var PostProcessing = /*#__PURE__*/function () {
|
|
76768
76626
|
function PostProcessing() {
|
|
76769
76627
|
var _this = this,
|
|
76770
76628
|
_this$map;
|
|
@@ -76900,9 +76758,7 @@ function () {
|
|
|
76900
76758
|
|
|
76901
76759
|
return PostProcessing;
|
|
76902
76760
|
}();
|
|
76903
|
-
var PostProcessing$1 = new PostProcessing();var Orbit =
|
|
76904
|
-
/*#__PURE__*/
|
|
76905
|
-
function (_EventDispatcher) {
|
|
76761
|
+
var PostProcessing$1 = new PostProcessing();var Orbit = /*#__PURE__*/function (_EventDispatcher) {
|
|
76906
76762
|
_inherits(Orbit, _EventDispatcher);
|
|
76907
76763
|
|
|
76908
76764
|
var _super = _createSuper(Orbit);
|
|
@@ -77650,9 +77506,7 @@ function (_EventDispatcher) {
|
|
|
77650
77506
|
}]);
|
|
77651
77507
|
|
|
77652
77508
|
return Orbit;
|
|
77653
|
-
}(EventDispatcher);var Gizmo =
|
|
77654
|
-
/*#__PURE__*/
|
|
77655
|
-
function (_Object3D) {
|
|
77509
|
+
}(EventDispatcher);var Gizmo = /*#__PURE__*/function (_Object3D) {
|
|
77656
77510
|
_inherits(Gizmo, _Object3D);
|
|
77657
77511
|
|
|
77658
77512
|
var _super = _createSuper(Gizmo);
|
|
@@ -78229,9 +78083,7 @@ function (_Object3D) {
|
|
|
78229
78083
|
}]);
|
|
78230
78084
|
|
|
78231
78085
|
return Gizmo;
|
|
78232
|
-
}(Object3D);var TransformControlsPlane =
|
|
78233
|
-
/*#__PURE__*/
|
|
78234
|
-
function (_Mesh) {
|
|
78086
|
+
}(Object3D);var TransformControlsPlane = /*#__PURE__*/function (_Mesh) {
|
|
78235
78087
|
_inherits(TransformControlsPlane, _Mesh);
|
|
78236
78088
|
|
|
78237
78089
|
var _super = _createSuper(TransformControlsPlane);
|
|
@@ -78333,9 +78185,7 @@ function (_Mesh) {
|
|
|
78333
78185
|
}]);
|
|
78334
78186
|
|
|
78335
78187
|
return TransformControlsPlane;
|
|
78336
|
-
}(Mesh);var TransformControls =
|
|
78337
|
-
/*#__PURE__*/
|
|
78338
|
-
function (_Object3D) {
|
|
78188
|
+
}(Mesh);var TransformControls = /*#__PURE__*/function (_Object3D) {
|
|
78339
78189
|
_inherits(TransformControls, _Object3D);
|
|
78340
78190
|
|
|
78341
78191
|
var _super = _createSuper(TransformControls);
|
|
@@ -79282,9 +79132,7 @@ var UNLOCK_EVENT = {
|
|
|
79282
79132
|
};
|
|
79283
79133
|
var PI_2$1 = Math.PI / 2;
|
|
79284
79134
|
|
|
79285
|
-
var FirstPersonControl =
|
|
79286
|
-
/*#__PURE__*/
|
|
79287
|
-
function (_EventDispatcher) {
|
|
79135
|
+
var FirstPersonControl = /*#__PURE__*/function (_EventDispatcher) {
|
|
79288
79136
|
_inherits(FirstPersonControl, _EventDispatcher);
|
|
79289
79137
|
|
|
79290
79138
|
var _super = _createSuper(FirstPersonControl);
|
|
@@ -79650,9 +79498,7 @@ function (_EventDispatcher) {
|
|
|
79650
79498
|
}]);
|
|
79651
79499
|
|
|
79652
79500
|
return FirstPersonControl;
|
|
79653
|
-
}(EventDispatcher);var FlyControl =
|
|
79654
|
-
/*#__PURE__*/
|
|
79655
|
-
function (_EventDispatcher) {
|
|
79501
|
+
}(EventDispatcher);var FlyControl = /*#__PURE__*/function (_EventDispatcher) {
|
|
79656
79502
|
_inherits(FlyControl, _EventDispatcher);
|
|
79657
79503
|
|
|
79658
79504
|
var _super = _createSuper(FlyControl);
|
|
@@ -80007,9 +79853,7 @@ var EVENTS = {
|
|
|
80007
79853
|
CHANGE: 'change',
|
|
80008
79854
|
DRAGGING_CHANGE: 'dragging-changed'
|
|
80009
79855
|
};
|
|
80010
|
-
var Controls =
|
|
80011
|
-
/*#__PURE__*/
|
|
80012
|
-
function () {
|
|
79856
|
+
var Controls = /*#__PURE__*/function () {
|
|
80013
79857
|
function Controls() {
|
|
80014
79858
|
var _this = this,
|
|
80015
79859
|
_this$controls;
|
|
@@ -80115,9 +79959,7 @@ var Controls$1 = new Controls();var author$1 = {
|
|
|
80115
79959
|
email: 'mrc.stagni@gmail.com',
|
|
80116
79960
|
website: 'http://mage.studio'
|
|
80117
79961
|
};
|
|
80118
|
-
var Level =
|
|
80119
|
-
/*#__PURE__*/
|
|
80120
|
-
function (_EventDispatcher) {
|
|
79962
|
+
var Level = /*#__PURE__*/function (_EventDispatcher) {
|
|
80121
79963
|
_inherits(Level, _EventDispatcher);
|
|
80122
79964
|
|
|
80123
79965
|
var _super = _createSuper(Level);
|
|
@@ -80312,14 +80154,12 @@ function (_EventDispatcher) {
|
|
|
80312
80154
|
}, {
|
|
80313
80155
|
key: "toJSON",
|
|
80314
80156
|
value: function toJSON() {
|
|
80315
|
-
return _objectSpread2({}, Lights$1.toJSON(),
|
|
80157
|
+
return _objectSpread2(_objectSpread2({}, Lights$1.toJSON()), Universe$1.toJSON());
|
|
80316
80158
|
}
|
|
80317
80159
|
}]);
|
|
80318
80160
|
|
|
80319
80161
|
return Level;
|
|
80320
|
-
}(EventDispatcher);var Color$1 =
|
|
80321
|
-
/*#__PURE__*/
|
|
80322
|
-
function () {
|
|
80162
|
+
}(EventDispatcher);var Color$1 = /*#__PURE__*/function () {
|
|
80323
80163
|
_createClass(Color$1, null, [{
|
|
80324
80164
|
key: "randomColor",
|
|
80325
80165
|
value: function randomColor() {
|
|
@@ -80406,9 +80246,7 @@ var STATE_SNAPSHOT = 'STATE_SNAPSHOT';
|
|
|
80406
80246
|
var TIMESTAMP = 'TIMESTAMP';
|
|
80407
80247
|
var CURRENT_SCENE_JSON = 'CURRENT_SCENE_JSON';
|
|
80408
80248
|
var CURRENT_PATH = 'CURRENT_PATH';
|
|
80409
|
-
var Storage =
|
|
80410
|
-
/*#__PURE__*/
|
|
80411
|
-
function () {
|
|
80249
|
+
var Storage = /*#__PURE__*/function () {
|
|
80412
80250
|
function Storage() {
|
|
80413
80251
|
_classCallCheck(this, Storage);
|
|
80414
80252
|
}
|
|
@@ -80489,9 +80327,7 @@ function () {
|
|
|
80489
80327
|
|
|
80490
80328
|
return Storage;
|
|
80491
80329
|
}();
|
|
80492
|
-
var storage$1 = new Storage();var GameRunner =
|
|
80493
|
-
/*#__PURE__*/
|
|
80494
|
-
function () {
|
|
80330
|
+
var storage$1 = new Storage();var GameRunner = /*#__PURE__*/function () {
|
|
80495
80331
|
function GameRunner() {
|
|
80496
80332
|
var _this = this;
|
|
80497
80333
|
|
|
@@ -80500,7 +80336,7 @@ function () {
|
|
|
80500
80336
|
_defineProperty(this, "createNewScene", function (path, options) {
|
|
80501
80337
|
var classname = _this.get(path);
|
|
80502
80338
|
|
|
80503
|
-
var scene = new classname(_objectSpread2({}, options, {
|
|
80339
|
+
var scene = new classname(_objectSpread2(_objectSpread2({}, options), {}, {
|
|
80504
80340
|
path: path
|
|
80505
80341
|
}));
|
|
80506
80342
|
subscribe(scene);
|
|
@@ -80655,7 +80491,7 @@ var parseQuery = function parseQuery(queryString) {
|
|
|
80655
80491
|
var split = couple.split(EQUALS);
|
|
80656
80492
|
return _defineProperty({}, split[0], split[1]);
|
|
80657
80493
|
}).reduce(function (acc, param) {
|
|
80658
|
-
return _objectSpread2({}, acc,
|
|
80494
|
+
return _objectSpread2(_objectSpread2({}, acc), param);
|
|
80659
80495
|
}, {}) : EMPTY_QUERY;
|
|
80660
80496
|
};var isArray$2 = Array.isArray;
|
|
80661
80497
|
function isStringOrNumber(o) {
|
|
@@ -85926,9 +85762,7 @@ var setLocationHash = function setLocationHash(hash) {
|
|
|
85926
85762
|
if (hasLocation()) {
|
|
85927
85763
|
location.hash = hash;
|
|
85928
85764
|
}
|
|
85929
|
-
};var Router =
|
|
85930
|
-
/*#__PURE__*/
|
|
85931
|
-
function () {
|
|
85765
|
+
};var Router = /*#__PURE__*/function () {
|
|
85932
85766
|
function Router() {
|
|
85933
85767
|
var _this = this;
|
|
85934
85768
|
|
|
@@ -86100,9 +85934,7 @@ var DEFAULT_BIAS$3 = -0.0001;
|
|
|
86100
85934
|
var WHITE$3 = 0xffffff;
|
|
86101
85935
|
var GREEN$1 = 0x2ecc71;
|
|
86102
85936
|
|
|
86103
|
-
var SpotLight$1 =
|
|
86104
|
-
/*#__PURE__*/
|
|
86105
|
-
function (_Light) {
|
|
85937
|
+
var SpotLight$1 = /*#__PURE__*/function (_Light) {
|
|
86106
85938
|
_inherits(SpotLight$1, _Light);
|
|
86107
85939
|
|
|
86108
85940
|
var _super = _createSuper(SpotLight$1);
|
|
@@ -86154,9 +85986,9 @@ function (_Light) {
|
|
|
86154
85986
|
intensity = _ref$intensity === void 0 ? DEFAULT_INTENSITY$4 : _ref$intensity;
|
|
86155
85987
|
|
|
86156
85988
|
if (light) {
|
|
86157
|
-
this.
|
|
85989
|
+
this.setBody(light);
|
|
86158
85990
|
} else {
|
|
86159
|
-
this.
|
|
85991
|
+
this.setBody(new SpotLight(color, intensity));
|
|
86160
85992
|
}
|
|
86161
85993
|
|
|
86162
85994
|
if (this.hasBody()) {
|
|
@@ -86207,7 +86039,7 @@ function (_Light) {
|
|
|
86207
86039
|
key: "setTargetPosition",
|
|
86208
86040
|
value: function setTargetPosition() {
|
|
86209
86041
|
var position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
86210
|
-
this.target = _objectSpread2({}, this.target,
|
|
86042
|
+
this.target = _objectSpread2(_objectSpread2({}, this.target), position);
|
|
86211
86043
|
var _this$target = this.target,
|
|
86212
86044
|
_this$target$x = _this$target.x,
|
|
86213
86045
|
x = _this$target$x === void 0 ? 0 : _this$target$x,
|
|
@@ -86255,7 +86087,7 @@ function (_Light) {
|
|
|
86255
86087
|
}, {
|
|
86256
86088
|
key: "toJSON",
|
|
86257
86089
|
value: function toJSON() {
|
|
86258
|
-
return _objectSpread2({}, _get(_getPrototypeOf(SpotLight$1.prototype), "toJSON", this).call(this), {
|
|
86090
|
+
return _objectSpread2(_objectSpread2({}, _get(_getPrototypeOf(SpotLight$1.prototype), "toJSON", this).call(this)), {}, {
|
|
86259
86091
|
type: SPOTLIGHT
|
|
86260
86092
|
});
|
|
86261
86093
|
}
|
|
@@ -86267,9 +86099,7 @@ var DEFAULT_SKY_COLOR = 0xffffff;
|
|
|
86267
86099
|
var DEFAULT_GROUND_COLOR = 0x555555;
|
|
86268
86100
|
var GREEN$2 = 0x2ecc71;
|
|
86269
86101
|
|
|
86270
|
-
var HemisphereLight$1 =
|
|
86271
|
-
/*#__PURE__*/
|
|
86272
|
-
function (_Light) {
|
|
86102
|
+
var HemisphereLight$1 = /*#__PURE__*/function (_Light) {
|
|
86273
86103
|
_inherits(HemisphereLight$1, _Light);
|
|
86274
86104
|
|
|
86275
86105
|
var _super = _createSuper(HemisphereLight$1);
|
|
@@ -86315,13 +86145,13 @@ function (_Light) {
|
|
|
86315
86145
|
intensity = _ref$intensity === void 0 ? DEFAULT_INTENSITY$5 : _ref$intensity;
|
|
86316
86146
|
|
|
86317
86147
|
if (light) {
|
|
86318
|
-
this.
|
|
86148
|
+
this.setBody(light);
|
|
86319
86149
|
} else {
|
|
86320
86150
|
var _color$sky = color.sky,
|
|
86321
86151
|
sky = _color$sky === void 0 ? DEFAULT_SKY_COLOR : _color$sky,
|
|
86322
86152
|
_color$ground = color.ground,
|
|
86323
86153
|
ground = _color$ground === void 0 ? DEFAULT_GROUND_COLOR : _color$ground;
|
|
86324
|
-
this.
|
|
86154
|
+
this.setBody(new HemisphereLight(sky, ground, intensity));
|
|
86325
86155
|
}
|
|
86326
86156
|
|
|
86327
86157
|
if (this.hasBody()) {
|
|
@@ -86337,16 +86167,14 @@ function (_Light) {
|
|
|
86337
86167
|
}, {
|
|
86338
86168
|
key: "toJSON",
|
|
86339
86169
|
value: function toJSON() {
|
|
86340
|
-
return _objectSpread2({}, _get(_getPrototypeOf(HemisphereLight$1.prototype), "toJSON", this).call(this), {
|
|
86170
|
+
return _objectSpread2(_objectSpread2({}, _get(_getPrototypeOf(HemisphereLight$1.prototype), "toJSON", this).call(this)), {}, {
|
|
86341
86171
|
type: HEMISPHERELIGHT
|
|
86342
86172
|
});
|
|
86343
86173
|
}
|
|
86344
86174
|
}]);
|
|
86345
86175
|
|
|
86346
86176
|
return HemisphereLight$1;
|
|
86347
|
-
}(Light$1);var Atmosphere =
|
|
86348
|
-
/*#__PURE__*/
|
|
86349
|
-
function () {
|
|
86177
|
+
}(Light$1);var Atmosphere = /*#__PURE__*/function () {
|
|
86350
86178
|
function Atmosphere() {
|
|
86351
86179
|
_classCallCheck(this, Atmosphere);
|
|
86352
86180
|
|
|
@@ -86390,9 +86218,7 @@ function () {
|
|
|
86390
86218
|
}]);
|
|
86391
86219
|
|
|
86392
86220
|
return Atmosphere;
|
|
86393
|
-
}();var Mirror =
|
|
86394
|
-
/*#__PURE__*/
|
|
86395
|
-
function (_Object3D) {
|
|
86221
|
+
}();var Mirror = /*#__PURE__*/function (_Object3D) {
|
|
86396
86222
|
_inherits(Mirror, _Object3D);
|
|
86397
86223
|
|
|
86398
86224
|
var _super = _createSuper(Mirror);
|
|
@@ -86621,9 +86447,7 @@ function (_Object3D) {
|
|
|
86621
86447
|
}]);
|
|
86622
86448
|
|
|
86623
86449
|
return Mirror;
|
|
86624
|
-
}(Object3D);var OceanMain =
|
|
86625
|
-
/*#__PURE__*/
|
|
86626
|
-
function () {
|
|
86450
|
+
}(Object3D);var OceanMain = /*#__PURE__*/function () {
|
|
86627
86451
|
function OceanMain() {
|
|
86628
86452
|
_classCallCheck(this, OceanMain);
|
|
86629
86453
|
}
|
|
@@ -86704,9 +86528,7 @@ function () {
|
|
|
86704
86528
|
|
|
86705
86529
|
return OceanMain;
|
|
86706
86530
|
}();
|
|
86707
|
-
var OceanNormals =
|
|
86708
|
-
/*#__PURE__*/
|
|
86709
|
-
function () {
|
|
86531
|
+
var OceanNormals = /*#__PURE__*/function () {
|
|
86710
86532
|
function OceanNormals() {
|
|
86711
86533
|
_classCallCheck(this, OceanNormals);
|
|
86712
86534
|
}
|
|
@@ -86747,9 +86569,7 @@ function () {
|
|
|
86747
86569
|
|
|
86748
86570
|
return OceanNormals;
|
|
86749
86571
|
}();
|
|
86750
|
-
var OceanSpectrum =
|
|
86751
|
-
/*#__PURE__*/
|
|
86752
|
-
function () {
|
|
86572
|
+
var OceanSpectrum = /*#__PURE__*/function () {
|
|
86753
86573
|
function OceanSpectrum() {
|
|
86754
86574
|
_classCallCheck(this, OceanSpectrum);
|
|
86755
86575
|
}
|
|
@@ -86799,9 +86619,7 @@ function () {
|
|
|
86799
86619
|
|
|
86800
86620
|
return OceanSpectrum;
|
|
86801
86621
|
}();
|
|
86802
|
-
var OceanPhase =
|
|
86803
|
-
/*#__PURE__*/
|
|
86804
|
-
function () {
|
|
86622
|
+
var OceanPhase = /*#__PURE__*/function () {
|
|
86805
86623
|
function OceanPhase() {
|
|
86806
86624
|
_classCallCheck(this, OceanPhase);
|
|
86807
86625
|
}
|
|
@@ -86846,9 +86664,7 @@ function () {
|
|
|
86846
86664
|
|
|
86847
86665
|
return OceanPhase;
|
|
86848
86666
|
}();
|
|
86849
|
-
var OceanInitialSpectrum =
|
|
86850
|
-
/*#__PURE__*/
|
|
86851
|
-
function () {
|
|
86667
|
+
var OceanInitialSpectrum = /*#__PURE__*/function () {
|
|
86852
86668
|
function OceanInitialSpectrum() {
|
|
86853
86669
|
_classCallCheck(this, OceanInitialSpectrum);
|
|
86854
86670
|
}
|
|
@@ -86881,9 +86697,7 @@ function () {
|
|
|
86881
86697
|
|
|
86882
86698
|
return OceanInitialSpectrum;
|
|
86883
86699
|
}();
|
|
86884
|
-
var OceanSubTransform =
|
|
86885
|
-
/*#__PURE__*/
|
|
86886
|
-
function () {
|
|
86700
|
+
var OceanSubTransform = /*#__PURE__*/function () {
|
|
86887
86701
|
function OceanSubTransform() {
|
|
86888
86702
|
_classCallCheck(this, OceanSubTransform);
|
|
86889
86703
|
}
|
|
@@ -86926,9 +86740,7 @@ function () {
|
|
|
86926
86740
|
|
|
86927
86741
|
return OceanSubTransform;
|
|
86928
86742
|
}();
|
|
86929
|
-
var OceanSimVertex =
|
|
86930
|
-
/*#__PURE__*/
|
|
86931
|
-
function () {
|
|
86743
|
+
var OceanSimVertex = /*#__PURE__*/function () {
|
|
86932
86744
|
function OceanSimVertex() {
|
|
86933
86745
|
_classCallCheck(this, OceanSimVertex);
|
|
86934
86746
|
}
|
|
@@ -86951,9 +86763,7 @@ function () {
|
|
|
86951
86763
|
|
|
86952
86764
|
return OceanSimVertex;
|
|
86953
86765
|
}();
|
|
86954
|
-
var OceanShaders = {};var OceanShader =
|
|
86955
|
-
/*#__PURE__*/
|
|
86956
|
-
function () {
|
|
86766
|
+
var OceanShaders = {};var OceanShader = /*#__PURE__*/function () {
|
|
86957
86767
|
function OceanShader(renderer, camera, scene, options) {
|
|
86958
86768
|
_classCallCheck(this, OceanShader);
|
|
86959
86769
|
|
|
@@ -87310,9 +87120,7 @@ function () {
|
|
|
87310
87120
|
return OceanShader;
|
|
87311
87121
|
}();
|
|
87312
87122
|
|
|
87313
|
-
var Ocean =
|
|
87314
|
-
/*#__PURE__*/
|
|
87315
|
-
function () {
|
|
87123
|
+
var Ocean = /*#__PURE__*/function () {
|
|
87316
87124
|
function Ocean() {
|
|
87317
87125
|
_classCallCheck(this, Ocean);
|
|
87318
87126
|
|
|
@@ -87576,9 +87384,7 @@ var DEFAULT_WATER_WIDTH = 512;
|
|
|
87576
87384
|
var DEFAULT_WATER_ALPHA = 1.0;
|
|
87577
87385
|
var DEFAULT_WATER_DISTORTION_SCALE = 3.7;
|
|
87578
87386
|
|
|
87579
|
-
var Water =
|
|
87580
|
-
/*#__PURE__*/
|
|
87581
|
-
function (_Element) {
|
|
87387
|
+
var Water = /*#__PURE__*/function (_Element) {
|
|
87582
87388
|
_inherits(Water, _Element);
|
|
87583
87389
|
|
|
87584
87390
|
var _super = _createSuper(Water);
|
|
@@ -87647,9 +87453,7 @@ function (_Element) {
|
|
|
87647
87453
|
}]);
|
|
87648
87454
|
|
|
87649
87455
|
return Water;
|
|
87650
|
-
}(Element);var SkyShader =
|
|
87651
|
-
/*#__PURE__*/
|
|
87652
|
-
function () {
|
|
87456
|
+
}(Element);var SkyShader = /*#__PURE__*/function () {
|
|
87653
87457
|
function SkyShader() {
|
|
87654
87458
|
_classCallCheck(this, SkyShader);
|
|
87655
87459
|
}
|
|
@@ -87730,9 +87534,7 @@ var DEFAULT_SUN_INCLINATION = .49;
|
|
|
87730
87534
|
var DEFAULT_SUN_AZIMUTH = 0.205;
|
|
87731
87535
|
var DEFAULT_SUN_DISTANCE = 100;
|
|
87732
87536
|
|
|
87733
|
-
var Sky =
|
|
87734
|
-
/*#__PURE__*/
|
|
87735
|
-
function (_Element) {
|
|
87537
|
+
var Sky = /*#__PURE__*/function (_Element) {
|
|
87736
87538
|
_inherits(Sky, _Element);
|
|
87737
87539
|
|
|
87738
87540
|
var _super = _createSuper(Sky);
|
|
@@ -87834,9 +87636,9 @@ function (_Element) {
|
|
|
87834
87636
|
}]);
|
|
87835
87637
|
|
|
87836
87638
|
return Sky;
|
|
87837
|
-
}(Element);var
|
|
87838
|
-
|
|
87839
|
-
function (_Element) {
|
|
87639
|
+
}(Element);var _excluded$5 = ["name", "texture"];
|
|
87640
|
+
|
|
87641
|
+
var Skybox = /*#__PURE__*/function (_Element) {
|
|
87840
87642
|
_inherits(Skybox, _Element);
|
|
87841
87643
|
|
|
87842
87644
|
var _super = _createSuper(Skybox);
|
|
@@ -87850,7 +87652,7 @@ function (_Element) {
|
|
|
87850
87652
|
name = _options$name === void 0 ? "skybox_".concat(generateUUID()) : _options$name,
|
|
87851
87653
|
_options$texture = options.texture,
|
|
87852
87654
|
texture = _options$texture === void 0 ? 'skybox' : _options$texture,
|
|
87853
|
-
rest = _objectWithoutProperties(options,
|
|
87655
|
+
rest = _objectWithoutProperties(options, _excluded$5);
|
|
87854
87656
|
|
|
87855
87657
|
_this = _super.call(this, null, null, _objectSpread2({
|
|
87856
87658
|
name: name,
|
|
@@ -87872,9 +87674,7 @@ function (_Element) {
|
|
|
87872
87674
|
}
|
|
87873
87675
|
|
|
87874
87676
|
return Skybox;
|
|
87875
|
-
}(Element);var Shaders =
|
|
87876
|
-
/*#__PURE__*/
|
|
87877
|
-
function () {
|
|
87677
|
+
}(Element);var Shaders = /*#__PURE__*/function () {
|
|
87878
87678
|
function Shaders() {
|
|
87879
87679
|
var _this = this;
|
|
87880
87680
|
|
|
@@ -87950,4 +87750,4 @@ var Shaders$1 = new Shaders();var Shader$1 = function Shader(name, attributes, u
|
|
|
87950
87750
|
} else {
|
|
87951
87751
|
this.instance = this.shader.instance;
|
|
87952
87752
|
}
|
|
87953
|
-
};var constants$1 = _objectSpread2({}, lib_constants,
|
|
87753
|
+
};var constants$1 = _objectSpread2(_objectSpread2({}, lib_constants), light_contants);export{AUDIO_RAMPS,AmbientLight$1 as AmbientLight,Atmosphere,Audio$2 as Audio,BUILTIN,BackgroundSound,BaseScript,Box,Camera$1 as Camera,Color$1 as Color,Config$1 as Config,Controls$1 as Controls,Cube,CurveLine,Cylinder,DirectionalSound,ENTITY_EVENTS,ENTITY_TYPES,Element,EventDispatcher,FEATURES,Features$1 as Features,GameRunner$1 as GameRunner,Grid,HemisphereLight$1 as HemisphereLight,INPUT_EVENTS,Images$1 as Images,Input$1 as Input,Level,LightLoader$1 as LightLoader,Lights$1 as Lights,Line$1 as Line,MeshLoader$1 as MeshLoader,Mirror,Models$1 as Models,Ocean,PALETTES,PARTICLES,constants as PHYSICS_CONSTANTS,PHYSICS_EVENTS,ParticleEmitter as ParticlEmitter,Particles$1 as Particles,index as Partykals,Physics$1 as Physics,Plane$1 as Plane,PointLight$1 as PointLight,PostProcessing$1 as PostProcessing,Provider,Router$1 as Router,Scene$2 as Scene,Scripts$1 as Scripts,Shader$1 as Shader,Sky,Skybox,Sound,Sphere$1 as Sphere,SpotLight$1 as SpotLight,Sprite$1 as Sprite,Stats$1 as Stats,SunLight,three_module as THREE,Universe$1 as Universe,Vector3$1 as Vector3,Water,author$1 as author,connect,constants$1 as constants,functions,math,utils as physicsUtils,index$1 as store,strings,uuid,workers};
|