@galacean/engine-loader 1.2.0-alpha.9 → 1.2.0-beta.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/main.js CHANGED
@@ -1006,9 +1006,9 @@ var HierarchyParser = /*#__PURE__*/ function() {
1006
1006
  }
1007
1007
  components.set(path + ":" + name + "/" + componentIndexMap[name]++, component);
1008
1008
  });
1009
- for(var i = 0; i < entity.children.length; i++){
1009
+ for(var i = 0, n = entity.children.length; i < n; i++){
1010
1010
  var child = entity.children[i];
1011
- var childPath = path ? path + "/" + child.name : child.name;
1011
+ var childPath = path ? path + "/" + i : "" + i;
1012
1012
  this._traverseAddEntityToMap(child, context, childPath);
1013
1013
  }
1014
1014
  };
@@ -2164,111 +2164,68 @@ function registerGLTFParser(pipeline) {
2164
2164
  };
2165
2165
  GLTFUtils.getAccessorBuffer = function getAccessorBuffer(context, bufferViews, accessor) {
2166
2166
  var componentType = accessor.componentType;
2167
- var bufferView = bufferViews[accessor.bufferView];
2168
- return context.get(exports.GLTFParserType.BufferView, accessor.bufferView).then(function(bufferViewData) {
2169
- var bufferIndex = bufferView.buffer;
2170
- var _bufferViewData_byteOffset;
2171
- var bufferByteOffset = (_bufferViewData_byteOffset = bufferViewData.byteOffset) != null ? _bufferViewData_byteOffset : 0;
2172
- var _accessor_byteOffset;
2173
- var byteOffset = (_accessor_byteOffset = accessor.byteOffset) != null ? _accessor_byteOffset : 0;
2174
- var TypedArray = GLTFUtils.getComponentType(componentType);
2175
- var dataElementSize = GLTFUtils.getAccessorTypeSize(accessor.type);
2176
- var dataElementBytes = TypedArray.BYTES_PER_ELEMENT;
2177
- var elementStride = dataElementSize * dataElementBytes;
2178
- var accessorCount = accessor.count;
2179
- var bufferStride = bufferView.byteStride;
2180
- var bufferInfo;
2181
- // According to the glTF official documentation only byteStride not undefined is allowed
2182
- if (bufferStride !== undefined && bufferStride !== elementStride) {
2183
- var bufferSlice = Math.floor(byteOffset / bufferStride);
2184
- var bufferCacheKey = accessor.bufferView + ":" + componentType + ":" + bufferSlice + ":" + accessorCount;
2185
- var accessorBufferCache = context.accessorBufferCache;
2186
- bufferInfo = accessorBufferCache[bufferCacheKey];
2187
- if (!bufferInfo) {
2188
- var offset = bufferByteOffset + bufferSlice * bufferStride;
2189
- var count = accessorCount * (bufferStride / dataElementBytes);
2190
- var data = new TypedArray(bufferViewData.buffer, offset, count);
2191
- accessorBufferCache[bufferCacheKey] = bufferInfo = new BufferInfo(data, true, bufferStride);
2192
- bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(bufferIndex, TypedArray, offset, count));
2167
+ var TypedArray = GLTFUtils.getComponentType(componentType);
2168
+ var dataElementSize = GLTFUtils.getAccessorTypeSize(accessor.type);
2169
+ var dataElementBytes = TypedArray.BYTES_PER_ELEMENT;
2170
+ var elementStride = dataElementSize * dataElementBytes;
2171
+ var accessorCount = accessor.count;
2172
+ var promise;
2173
+ if (accessor.bufferView !== undefined) {
2174
+ var bufferViewIndex = accessor.bufferView;
2175
+ var bufferView = bufferViews[bufferViewIndex];
2176
+ promise = context.get(exports.GLTFParserType.BufferView, accessor.bufferView).then(function(bufferViewData) {
2177
+ var bufferIndex = bufferView.buffer;
2178
+ var _bufferViewData_byteOffset;
2179
+ var bufferByteOffset = (_bufferViewData_byteOffset = bufferViewData.byteOffset) != null ? _bufferViewData_byteOffset : 0;
2180
+ var _accessor_byteOffset;
2181
+ var byteOffset = (_accessor_byteOffset = accessor.byteOffset) != null ? _accessor_byteOffset : 0;
2182
+ var bufferStride = bufferView.byteStride;
2183
+ var bufferInfo;
2184
+ // According to the glTF official documentation only byteStride not undefined is allowed
2185
+ if (bufferStride !== undefined && bufferStride !== elementStride) {
2186
+ var bufferSlice = Math.floor(byteOffset / bufferStride);
2187
+ var bufferCacheKey = bufferViewIndex + ":" + componentType + ":" + bufferSlice + ":" + accessorCount;
2188
+ var accessorBufferCache = context.accessorBufferCache;
2189
+ bufferInfo = accessorBufferCache[bufferCacheKey];
2190
+ if (!bufferInfo) {
2191
+ var offset = bufferByteOffset + bufferSlice * bufferStride;
2192
+ var count = accessorCount * (bufferStride / dataElementBytes);
2193
+ var data = new TypedArray(bufferViewData.buffer, offset, count);
2194
+ accessorBufferCache[bufferCacheKey] = bufferInfo = new BufferInfo(data, true, bufferStride);
2195
+ bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(bufferIndex, TypedArray, offset, count));
2196
+ }
2197
+ } else {
2198
+ var offset1 = bufferByteOffset + byteOffset;
2199
+ var count1 = accessorCount * dataElementSize;
2200
+ var data1 = new TypedArray(bufferViewData.buffer, offset1, count1);
2201
+ bufferInfo = new BufferInfo(data1, false, elementStride);
2202
+ bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(bufferIndex, TypedArray, offset1, count1));
2193
2203
  }
2194
- } else {
2195
- var offset1 = bufferByteOffset + byteOffset;
2196
- var count1 = accessorCount * dataElementSize;
2197
- var data1 = new TypedArray(bufferViewData.buffer, offset1, count1);
2198
- bufferInfo = new BufferInfo(data1, false, elementStride);
2199
- bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(bufferIndex, TypedArray, offset1, count1));
2200
- }
2201
- if (accessor.sparse) {
2202
- return GLTFUtils.processingSparseData(context, accessor, bufferInfo).then(function() {
2203
- return bufferInfo;
2204
- });
2205
- }
2206
- return bufferInfo;
2207
- });
2204
+ return bufferInfo;
2205
+ });
2206
+ } else {
2207
+ var count = accessorCount * dataElementSize;
2208
+ var data = new TypedArray(count);
2209
+ var bufferInfo = new BufferInfo(data, false, elementStride);
2210
+ bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(undefined, TypedArray, undefined, count));
2211
+ promise = Promise.resolve(bufferInfo);
2212
+ }
2213
+ return accessor.sparse ? promise.then(function(bufferInfo) {
2214
+ return GLTFUtils.processingSparseData(context, accessor, bufferInfo).then(function() {
2215
+ return bufferInfo;
2216
+ });
2217
+ }) : promise;
2208
2218
  };
2209
- GLTFUtils.bufferToVector3Array = function bufferToVector3Array(data, byteStride, accessorByteOffset, count) {
2210
- var bytesPerElement = data.BYTES_PER_ELEMENT;
2211
- var offset = accessorByteOffset % byteStride / bytesPerElement;
2212
- var stride = byteStride / bytesPerElement;
2213
- var vector3s = new Array(count);
2219
+ GLTFUtils.bufferToVector3Array = function bufferToVector3Array(buffer, byteOffset, count, normalized, componentType) {
2220
+ var baseOffset = byteOffset / buffer.BYTES_PER_ELEMENT;
2221
+ var stride = buffer.length / count;
2222
+ var vertices = new Array(count);
2223
+ var factor = normalized ? GLTFUtils.getNormalizedComponentScale(componentType) : 1;
2214
2224
  for(var i = 0; i < count; i++){
2215
- var index = offset + i * stride;
2216
- vector3s[i] = new engineMath.Vector3(data[index], data[index + 1], data[index + 2]);
2225
+ var index = baseOffset + i * stride;
2226
+ vertices[i] = new engineMath.Vector3(buffer[index] * factor, buffer[index + 1] * factor, buffer[index + 2] * factor);
2217
2227
  }
2218
- return vector3s;
2219
- };
2220
- /**
2221
- * @deprecated
2222
- * Get accessor data.
2223
- */ GLTFUtils.getAccessorData = function getAccessorData(glTF, accessor, buffers) {
2224
- var bufferViews = glTF.bufferViews;
2225
- var bufferView = bufferViews[accessor.bufferView];
2226
- var arrayBuffer = buffers[bufferView.buffer];
2227
- var accessorByteOffset = accessor.hasOwnProperty("byteOffset") ? accessor.byteOffset : 0;
2228
- var bufferViewByteOffset = bufferView.hasOwnProperty("byteOffset") ? bufferView.byteOffset : 0;
2229
- var byteOffset = accessorByteOffset + bufferViewByteOffset;
2230
- var accessorTypeSize = GLTFUtils.getAccessorTypeSize(accessor.type);
2231
- var length = accessorTypeSize * accessor.count;
2232
- var _bufferView_byteStride;
2233
- var byteStride = (_bufferView_byteStride = bufferView.byteStride) != null ? _bufferView_byteStride : 0;
2234
- var arrayType = GLTFUtils.getComponentType(accessor.componentType);
2235
- var uint8Array;
2236
- if (byteStride) {
2237
- var accessorByteSize = accessorTypeSize * arrayType.BYTES_PER_ELEMENT;
2238
- uint8Array = new Uint8Array(accessor.count * accessorByteSize);
2239
- var originalBufferView = new Uint8Array(arrayBuffer, bufferViewByteOffset, bufferView.byteLength);
2240
- for(var i = 0; i < accessor.count; i++){
2241
- for(var j = 0; j < accessorByteSize; j++){
2242
- uint8Array[i * accessorByteSize + j] = originalBufferView[i * byteStride + accessorByteOffset + j];
2243
- }
2244
- }
2245
- } else {
2246
- uint8Array = new Uint8Array(arrayBuffer.slice(byteOffset, byteOffset + length * arrayType.BYTES_PER_ELEMENT));
2247
- }
2248
- var typedArray = new arrayType(uint8Array.buffer);
2249
- if (accessor.sparse) {
2250
- var _accessor_sparse = accessor.sparse, count = _accessor_sparse.count, indices = _accessor_sparse.indices, values = _accessor_sparse.values;
2251
- var indicesBufferView = bufferViews[indices.bufferView];
2252
- var valuesBufferView = bufferViews[values.bufferView];
2253
- var indicesArrayBuffer = buffers[indicesBufferView.buffer];
2254
- var valuesArrayBuffer = buffers[valuesBufferView.buffer];
2255
- var _indices_byteOffset, _indicesBufferView_byteOffset;
2256
- var indicesByteOffset = ((_indices_byteOffset = indices.byteOffset) != null ? _indices_byteOffset : 0) + ((_indicesBufferView_byteOffset = indicesBufferView.byteOffset) != null ? _indicesBufferView_byteOffset : 0);
2257
- var indicesByteLength = indicesBufferView.byteLength;
2258
- var _values_byteOffset, _valuesBufferView_byteOffset;
2259
- var valuesByteOffset = ((_values_byteOffset = values.byteOffset) != null ? _values_byteOffset : 0) + ((_valuesBufferView_byteOffset = valuesBufferView.byteOffset) != null ? _valuesBufferView_byteOffset : 0);
2260
- var valuesByteLength = valuesBufferView.byteLength;
2261
- var indicesType = GLTFUtils.getComponentType(indices.componentType);
2262
- var indicesArray = new indicesType(indicesArrayBuffer, indicesByteOffset, indicesByteLength / indicesType.BYTES_PER_ELEMENT);
2263
- var valuesArray = new arrayType(valuesArrayBuffer, valuesByteOffset, valuesByteLength / arrayType.BYTES_PER_ELEMENT);
2264
- for(var i1 = 0; i1 < count; i1++){
2265
- var replaceIndex = indicesArray[i1];
2266
- for(var j1 = 0; j1 < accessorTypeSize; j1++){
2267
- typedArray[replaceIndex * accessorTypeSize + j1] = valuesArray[i1 * accessorTypeSize + j1];
2268
- }
2269
- }
2270
- }
2271
- return typedArray;
2228
+ return vertices;
2272
2229
  };
2273
2230
  GLTFUtils.getBufferViewData = function getBufferViewData(bufferView, buffers) {
2274
2231
  var _bufferView_byteOffset = bufferView.byteOffset, byteOffset = _bufferView_byteOffset === void 0 ? 0 : _bufferView_byteOffset;
@@ -2402,7 +2359,7 @@ function registerGLTFParser(pipeline) {
2402
2359
  };
2403
2360
  /**
2404
2361
  * Parse the glb format.
2405
- */ GLTFUtils.parseGLB = function parseGLB(context, glb) {
2362
+ */ GLTFUtils.parseGLB = function parseGLB(context, originBuffer) {
2406
2363
  var UINT32_LENGTH = 4;
2407
2364
  var GLB_HEADER_MAGIC = 0x46546c67; // 'glTF'
2408
2365
  var GLB_HEADER_LENGTH = 12;
@@ -2410,7 +2367,7 @@ function registerGLTFParser(pipeline) {
2410
2367
  JSON: 0x4e4f534a,
2411
2368
  BIN: 0x004e4942
2412
2369
  };
2413
- var dataView = new DataView(glb);
2370
+ var dataView = new DataView(originBuffer);
2414
2371
  // read header
2415
2372
  var header = {
2416
2373
  magic: dataView.getUint32(0, true),
@@ -2418,8 +2375,9 @@ function registerGLTFParser(pipeline) {
2418
2375
  length: dataView.getUint32(2 * UINT32_LENGTH, true)
2419
2376
  };
2420
2377
  if (header.magic !== GLB_HEADER_MAGIC) {
2421
- console.error("Invalid glb magic number. Expected 0x46546C67, found 0x" + header.magic.toString(16));
2422
- return null;
2378
+ return {
2379
+ originBuffer: originBuffer
2380
+ };
2423
2381
  }
2424
2382
  // read main data
2425
2383
  var chunkLength = dataView.getUint32(GLB_HEADER_LENGTH, true);
@@ -2429,7 +2387,7 @@ function registerGLTFParser(pipeline) {
2429
2387
  console.error("Invalid glb chunk type. Expected 0x4E4F534A, found 0x" + chunkType.toString(16));
2430
2388
  return null;
2431
2389
  }
2432
- var glTFData = new Uint8Array(glb, GLB_HEADER_LENGTH + 2 * UINT32_LENGTH, chunkLength);
2390
+ var glTFData = new Uint8Array(originBuffer, GLB_HEADER_LENGTH + 2 * UINT32_LENGTH, chunkLength);
2433
2391
  var glTF = JSON.parse(engineCore.Utils.decodeText(glTFData));
2434
2392
  // read all buffers
2435
2393
  var buffers = [];
@@ -2443,7 +2401,7 @@ function registerGLTFParser(pipeline) {
2443
2401
  return null;
2444
2402
  }
2445
2403
  var currentOffset = byteOffset + 2 * UINT32_LENGTH;
2446
- var buffer = glb.slice(currentOffset, currentOffset + chunkLength);
2404
+ var buffer = originBuffer.slice(currentOffset, currentOffset + chunkLength);
2447
2405
  buffers.push(buffer);
2448
2406
  restoreGLBBufferSlice.push(new engineMath.Vector2(currentOffset, chunkLength));
2449
2407
  byteOffset += chunkLength + 2 * UINT32_LENGTH;
@@ -3582,16 +3540,16 @@ exports.KTX2Transcoder = void 0;
3582
3540
  var frame = restoreInfo.blendShape.frames[0];
3583
3541
  var position = restoreInfo.position;
3584
3542
  var positionData = _this._getBufferData(buffers, position.buffer);
3585
- frame.deltaPositions = GLTFUtils.bufferToVector3Array(positionData, position.stride, position.byteOffset, position.count);
3543
+ frame.deltaPositions = GLTFUtils.bufferToVector3Array(positionData, position.byteOffset, position.count, position.normalized, position.componentType);
3586
3544
  if (restoreInfo.normal) {
3587
3545
  var normal = restoreInfo.normal;
3588
3546
  var normalData = _this._getBufferData(buffers, normal.buffer);
3589
- frame.deltaNormals = GLTFUtils.bufferToVector3Array(normalData, normal.stride, normal.byteOffset, normal.count);
3547
+ frame.deltaNormals = GLTFUtils.bufferToVector3Array(normalData, normal.byteOffset, normal.count, normal.normalized, normal.componentType);
3590
3548
  }
3591
3549
  if (restoreInfo.tangent) {
3592
3550
  var tangent = restoreInfo.tangent;
3593
3551
  var tangentData = _this._getBufferData(buffers, tangent.buffer);
3594
- frame.deltaTangents = GLTFUtils.bufferToVector3Array(tangentData, tangent.stride, tangent.byteOffset, tangent.count);
3552
+ frame.deltaTangents = GLTFUtils.bufferToVector3Array(tangentData, tangent.byteOffset, tangent.count, tangent.normalized, tangent.componentType);
3595
3553
  }
3596
3554
  }
3597
3555
  mesh.uploadData(true);
@@ -3603,8 +3561,13 @@ exports.KTX2Transcoder = void 0;
3603
3561
  };
3604
3562
  _proto._getBufferData = function _getBufferData(buffers, restoreInfo) {
3605
3563
  var main = restoreInfo.main;
3606
- var buffer = buffers[main.bufferIndex];
3607
- var data = new main.TypedArray(buffer, main.byteOffset, main.length);
3564
+ var data;
3565
+ if (main) {
3566
+ var buffer = buffers[main.bufferIndex];
3567
+ data = new main.TypedArray(buffer, main.byteOffset, main.length);
3568
+ } else {
3569
+ data = new main.TypedArray(main.length);
3570
+ }
3608
3571
  var sparseCount = restoreInfo.sparseCount;
3609
3572
  if (sparseCount) {
3610
3573
  var sparseIndex = restoreInfo.sparseIndices;
@@ -3677,11 +3640,12 @@ exports.KTX2Transcoder = void 0;
3677
3640
  };
3678
3641
  /**
3679
3642
  * @internal
3680
- */ var BlendShapeDataRestoreInfo = function BlendShapeDataRestoreInfo(buffer, stride, byteOffset, count) {
3643
+ */ var BlendShapeDataRestoreInfo = function BlendShapeDataRestoreInfo(buffer, byteOffset, count, normalized, componentType) {
3681
3644
  this.buffer = buffer;
3682
- this.stride = stride;
3683
3645
  this.byteOffset = byteOffset;
3684
3646
  this.count = count;
3647
+ this.normalized = normalized;
3648
+ this.componentType = componentType;
3685
3649
  };
3686
3650
 
3687
3651
  /**
@@ -3857,23 +3821,20 @@ exports.GLTFSchemaParser = /*#__PURE__*/ function(GLTFParser1) {
3857
3821
  var requestConfig = {
3858
3822
  type: "arraybuffer"
3859
3823
  };
3860
- var isGLB = this._isGLB(url);
3861
- contentRestorer.isGLB = isGLB;
3862
- var promise = isGLB ? engineCore.request(url, requestConfig).onProgress(undefined, context._onTaskDetail).then(function(glb) {
3824
+ return engineCore.request(url, requestConfig).onProgress(undefined, context._onTaskDetail).then(function(buffer) {
3863
3825
  restoreBufferRequests.push(new BufferRequestInfo(url, requestConfig));
3864
- return GLTFUtils.parseGLB(context, glb);
3865
- }).then(function(param) {
3866
- var glTF = param.glTF, buffers = param.buffers;
3867
- context.buffers = buffers;
3868
- return glTF;
3869
- }) : engineCore.request(url, {
3870
- type: "json"
3871
- }).onProgress(undefined, context._onTaskDetail);
3872
- return promise;
3873
- };
3874
- _proto._isGLB = function _isGLB(url) {
3875
- var index = url.lastIndexOf(".");
3876
- return url.substring(index + 1, index + 4) === "glb";
3826
+ return GLTFUtils.parseGLB(context, buffer);
3827
+ }).then(function(result) {
3828
+ var _result;
3829
+ if ((_result = result) == null ? void 0 : _result.glTF) {
3830
+ contentRestorer.isGLB = true;
3831
+ context.buffers = result.buffers;
3832
+ return result.glTF;
3833
+ } else {
3834
+ contentRestorer.isGLB = false;
3835
+ return JSON.parse(engineCore.Utils.decodeText(new Uint8Array(result.originBuffer)));
3836
+ }
3837
+ });
3877
3838
  };
3878
3839
  return GLTFSchemaParser;
3879
3840
  }(GLTFParser);
@@ -3933,13 +3894,13 @@ exports.GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
3933
3894
  break;
3934
3895
  }
3935
3896
  input[input.length - 1];
3936
- sampleDataCollection.push({
3897
+ sampleDataCollection[j] = {
3937
3898
  type: outputAccessor.type,
3938
3899
  interpolation: samplerInterpolation,
3939
3900
  input: input,
3940
3901
  output: output,
3941
3902
  outputSize: outputStride
3942
- });
3903
+ };
3943
3904
  });
3944
3905
  promises.push(promise);
3945
3906
  };
@@ -3947,11 +3908,12 @@ exports.GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
3947
3908
  var glTF = context.glTF;
3948
3909
  var accessors = glTF.accessors, bufferViews = glTF.bufferViews;
3949
3910
  var channels = animationInfo.channels, samplers = animationInfo.samplers;
3950
- var sampleDataCollection = new Array();
3911
+ var len = samplers.length;
3912
+ var sampleDataCollection = new Array(len);
3951
3913
  var entities = context.get(exports.GLTFParserType.Entity);
3952
3914
  var promises = new Array();
3953
3915
  // parse samplers
3954
- for(var j = 0, m = samplers.length; j < m; j++)_loop(j);
3916
+ for(var j = 0, m = len; j < m; j++)_loop(j);
3955
3917
  promises.push(context.get(exports.GLTFParserType.Scene));
3956
3918
  return Promise.all(promises).then(function() {
3957
3919
  for(var j = 0, m = channels.length; j < m; j++){
@@ -4309,23 +4271,7 @@ exports.GLTFMeshParser = (_GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1)
4309
4271
  var meshRestoreInfo = new ModelMeshRestoreInfo();
4310
4272
  meshRestoreInfo.mesh = mesh1;
4311
4273
  context.contentRestorer.meshes.push(meshRestoreInfo);
4312
- exports.GLTFMeshParser._parseMeshFromGLTFPrimitive(context, mesh1, meshRestoreInfo, meshInfo, gltfPrimitive, glTF, function(attributeSemantic) {
4313
- return null;
4314
- }, function(attributeName, shapeIndex) {
4315
- var shapeAccessorIdx = gltfPrimitive.targets[shapeIndex];
4316
- var attributeAccessorIdx = shapeAccessorIdx[attributeName];
4317
- if (attributeAccessorIdx) {
4318
- var accessor = glTF.accessors[attributeAccessorIdx];
4319
- return GLTFUtils.getAccessorBuffer(context, context.glTF.bufferViews, accessor);
4320
- } else {
4321
- return null;
4322
- }
4323
- }, function() {
4324
- var indexAccessor = glTF.accessors[gltfPrimitive.indices];
4325
- return context.get(exports.GLTFParserType.Buffer).then(function(buffers) {
4326
- return GLTFUtils.getAccessorData(glTF, indexAccessor, buffers);
4327
- });
4328
- }, context.params.keepMeshData).then(resolve);
4274
+ exports.GLTFMeshParser._parseMeshFromGLTFPrimitive(context, mesh1, meshRestoreInfo, meshInfo, gltfPrimitive, glTF, context.params.keepMeshData).then(resolve);
4329
4275
  }
4330
4276
  });
4331
4277
  };
@@ -4338,7 +4284,7 @@ exports.GLTFMeshParser = (_GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1)
4338
4284
  };
4339
4285
  /**
4340
4286
  * @internal
4341
- */ GLTFMeshParser1._parseMeshFromGLTFPrimitive = function _parseMeshFromGLTFPrimitive(context, mesh, meshRestoreInfo, gltfMesh, gltfPrimitive, gltf, getVertexBufferData, getBlendShapeData, getIndexBufferData, keepMeshData) {
4287
+ */ GLTFMeshParser1._parseMeshFromGLTFPrimitive = function _parseMeshFromGLTFPrimitive(context, mesh, meshRestoreInfo, gltfMesh, gltfPrimitive, gltf, keepMeshData) {
4342
4288
  var _loop = function(attribute) {
4343
4289
  var accessor = accessors[attributes[attribute]];
4344
4290
  var promise = GLTFUtils.getAccessorBuffer(context, gltf.bufferViews, accessor).then(function(accessorBuffer) {
@@ -4433,61 +4379,68 @@ exports.GLTFMeshParser = (_GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1)
4433
4379
  }
4434
4380
  // BlendShapes
4435
4381
  if (targets) {
4436
- promises.push(exports.GLTFMeshParser._createBlendShape(mesh, meshRestoreInfo, gltfMesh, accessors, targets, getBlendShapeData));
4382
+ promises.push(exports.GLTFMeshParser._createBlendShape(context, mesh, meshRestoreInfo, gltfMesh, gltfPrimitive, targets));
4437
4383
  }
4438
4384
  return Promise.all(promises).then(function() {
4439
4385
  mesh.uploadData(!keepMeshData);
4440
- return Promise.resolve(mesh);
4386
+ return mesh;
4441
4387
  });
4442
4388
  });
4443
4389
  };
4390
+ GLTFMeshParser1._getBlendShapeData = function _getBlendShapeData(context, glTF, accessor) {
4391
+ return GLTFUtils.getAccessorBuffer(context, glTF.bufferViews, accessor).then(function(bufferInfo) {
4392
+ var buffer = bufferInfo.data;
4393
+ var _accessor_byteOffset;
4394
+ var byteOffset = bufferInfo.interleaved ? ((_accessor_byteOffset = accessor.byteOffset) != null ? _accessor_byteOffset : 0) % bufferInfo.stride : 0;
4395
+ var count = accessor.count, normalized = accessor.normalized, componentType = accessor.componentType;
4396
+ var vertices = GLTFUtils.bufferToVector3Array(buffer, byteOffset, count, normalized, componentType);
4397
+ var restoreInfo = new BlendShapeDataRestoreInfo(bufferInfo.restoreInfo, byteOffset, count, normalized, componentType);
4398
+ return {
4399
+ vertices: vertices,
4400
+ restoreInfo: restoreInfo
4401
+ };
4402
+ });
4403
+ };
4444
4404
  /**
4445
4405
  * @internal
4446
- */ GLTFMeshParser1._createBlendShape = function _createBlendShape(mesh, meshRestoreInfo, glTFMesh, accessors, glTFTargets, getBlendShapeData) {
4447
- var _loop = function(i, n) {
4406
+ */ GLTFMeshParser1._createBlendShape = function _createBlendShape(context, mesh, meshRestoreInfo, glTFMesh, gltfPrimitive, glTFTargets) {
4407
+ var _this = this, _loop = function(i) {
4408
+ var blendShapeData = {};
4409
+ blendShapeCollection[i] = blendShapeData;
4448
4410
  var name = blendShapeNames ? blendShapeNames[i] : "blendShape" + i;
4411
+ var targets = gltfPrimitive.targets[i];
4412
+ var normalTarget = targets["NORMAL"];
4413
+ var tangentTarget = targets["TANGENT"];
4414
+ var hasNormal = normalTarget !== undefined;
4415
+ var hasTangent = tangentTarget !== undefined;
4449
4416
  var promise = Promise.all([
4450
- getBlendShapeData("POSITION", i),
4451
- getBlendShapeData("NORMAL", i),
4452
- getBlendShapeData("TANGENT", i)
4453
- ]).then(function(infos) {
4454
- var posBufferInfo = infos[0];
4455
- var norBufferInfo = infos[1];
4456
- var tanBufferInfo = infos[2];
4457
- var target = glTFTargets[i];
4458
- var posAccessor;
4459
- var norAccessor;
4460
- var tanAccessor;
4461
- var positions = null;
4462
- if (posBufferInfo) {
4463
- posAccessor = accessors[target["POSITION"]];
4464
- var _posAccessor_byteOffset;
4465
- positions = GLTFUtils.bufferToVector3Array(posBufferInfo.data, posBufferInfo.stride, (_posAccessor_byteOffset = posAccessor.byteOffset) != null ? _posAccessor_byteOffset : 0, posAccessor.count);
4466
- }
4467
- var normals = null;
4468
- if (norBufferInfo) {
4469
- norAccessor = accessors[target["NORMAL"]];
4470
- var _norAccessor_byteOffset;
4471
- normals = GLTFUtils.bufferToVector3Array(norBufferInfo.data, norBufferInfo.stride, (_norAccessor_byteOffset = norAccessor.byteOffset) != null ? _norAccessor_byteOffset : 0, norAccessor.count);
4472
- }
4473
- var tangents = null;
4474
- if (tanBufferInfo) {
4475
- tanAccessor = accessors[target["NORMAL"]];
4476
- var _tanAccessor_byteOffset;
4477
- tangents = GLTFUtils.bufferToVector3Array(tanBufferInfo.data, tanBufferInfo.stride, (_tanAccessor_byteOffset = tanAccessor.byteOffset) != null ? _tanAccessor_byteOffset : 0, tanAccessor.count);
4478
- }
4417
+ _this._getBlendShapeData(context, glTF, accessors[targets["POSITION"]]),
4418
+ hasNormal ? _this._getBlendShapeData(context, glTF, accessors[normalTarget]) : null,
4419
+ hasTangent ? _this._getBlendShapeData(context, glTF, accessors[tangentTarget]) : null
4420
+ ]).then(function(vertices) {
4421
+ var _tangentData;
4422
+ var positionData = vertices[0], normalData = vertices[1], tangentData = vertices[2];
4479
4423
  var blendShape = new engineCore.BlendShape(name);
4480
- blendShape.addFrame(1.0, positions, normals, tangents);
4481
- mesh.addBlendShape(blendShape);
4482
- var _posAccessor_byteOffset1, _norAccessor_byteOffset1, _tanAccessor_byteOffset1;
4483
- meshRestoreInfo.blendShapes.push(new BlendShapeRestoreInfo(blendShape, new BlendShapeDataRestoreInfo(posBufferInfo.restoreInfo, posBufferInfo.stride, (_posAccessor_byteOffset1 = posAccessor.byteOffset) != null ? _posAccessor_byteOffset1 : 0, posAccessor.count), norBufferInfo ? new BlendShapeDataRestoreInfo(norBufferInfo.restoreInfo, norBufferInfo.stride, (_norAccessor_byteOffset1 = norAccessor.byteOffset) != null ? _norAccessor_byteOffset1 : 0, norAccessor.count) : null, tanBufferInfo ? new BlendShapeDataRestoreInfo(tanBufferInfo.restoreInfo, tanBufferInfo.stride, (_tanAccessor_byteOffset1 = tanAccessor.byteOffset) != null ? _tanAccessor_byteOffset1 : 0, tanAccessor.count) : null));
4424
+ blendShape.addFrame(1.0, positionData.vertices, hasNormal ? normalData.vertices : null, hasTangent ? tangentData.vertices : null);
4425
+ blendShapeData.blendShape = blendShape;
4426
+ blendShapeData.restoreInfo = new BlendShapeRestoreInfo(blendShape, positionData.restoreInfo, hasNormal ? normalData.restoreInfo : null, hasTangent ? (_tangentData = tangentData) == null ? void 0 : _tangentData.restoreInfo : null);
4484
4427
  });
4485
4428
  promises.push(promise);
4486
4429
  };
4430
+ var glTF = context.glTF;
4431
+ var accessors = glTF.accessors;
4487
4432
  var blendShapeNames = glTFMesh.extras ? glTFMesh.extras.targetNames : null;
4488
4433
  var promises = new Array();
4489
- for(var i = 0, n = glTFTargets.length; i < n; i++)_loop(i);
4490
- return Promise.all(promises);
4434
+ var blendShapeCount = glTFTargets.length;
4435
+ var blendShapeCollection = new Array(blendShapeCount);
4436
+ for(var i = 0; i < blendShapeCount; i++)_loop(i);
4437
+ return Promise.all(promises).then(function() {
4438
+ for(var _iterator = _create_for_of_iterator_helper_loose(blendShapeCollection), _step; !(_step = _iterator()).done;){
4439
+ var blendShape = _step.value;
4440
+ mesh.addBlendShape(blendShape.blendShape);
4441
+ meshRestoreInfo.blendShapes.push(blendShape.restoreInfo);
4442
+ }
4443
+ });
4491
4444
  };
4492
4445
  return GLTFMeshParser1;
4493
4446
  }(GLTFParser), function() {
@@ -4932,7 +4885,7 @@ var MeshoptDecoder = function() {
4932
4885
  return worker;
4933
4886
  };
4934
4887
  var initWorkers = function initWorkers(count) {
4935
- var source = "var instance; var ready = WebAssembly.instantiate(new Uint8Array([" + new Uint8Array(unpack(wasm)) + "]), {})" + ".then(function(result) {instance = result.instance; instance.exports.__wasm_call_ctors();});" + "self.onmessage = workerProcess;" + decode.toString() + workerProcess.toString();
4888
+ var source = "var instance; var ready = WebAssembly.instantiate(new Uint8Array([" + new Uint8Array(unpack(wasm)) + "]), {})" + ".then(function(result) {instance = result.instance; instance.exports.__wasm_call_ctors();});\n" + "self.onmessage = workerProcess;\n" + 'function decode(fun, target, count, size, source, filter) {\n const sbrk = instance.exports.sbrk;\n const count4 = (count + 3) & ~3;\n const tp = sbrk(count4 * size);\n const sp = sbrk(source.length);\n const heap = new Uint8Array(instance.exports.memory.buffer);\n heap.set(source, sp);\n const res = fun(tp, count, size, sp, source.length);\n if (res == 0 && filter) {\n filter(tp, count4, size);\n }\n target.set(heap.subarray(tp, tp + count * size));\n sbrk(tp - sbrk(0));\n if (res != 0) {\n throw new Error("Malformed buffer data: " + res);\n }\n }\n' + 'function workerProcess(event) {\n ready.then(function () {\n const data = event.data;\n try {\n const target = new Uint8Array(data.count * data.size);\n decode(instance.exports[data.mode], target, data.count, data.size, data.source, instance.exports[data.filter]);\n self.postMessage({ id: data.id, count: data.count, action: "resolve", value: target }, [target.buffer]);\n } catch (error) {\n self.postMessage({\n id: data.id,\n count: data.count,\n action: "reject",\n value: error\n });\n }\n });\n }';
4936
4889
  var blob = new Blob([
4937
4890
  source
4938
4891
  ], {
@@ -4971,30 +4924,6 @@ var MeshoptDecoder = function() {
4971
4924
  ]);
4972
4925
  });
4973
4926
  };
4974
- var workerProcess = function workerProcess(event) {
4975
- ready.then(function() {
4976
- var data = event.data;
4977
- try {
4978
- var target = new Uint8Array(data.count * data.size);
4979
- decode(instance.exports[data.mode], target, data.count, data.size, data.source, instance.exports[data.filter]);
4980
- self.postMessage({
4981
- id: data.id,
4982
- count: data.count,
4983
- action: "resolve",
4984
- value: target
4985
- }, [
4986
- target.buffer
4987
- ]);
4988
- } catch (error) {
4989
- self.postMessage({
4990
- id: data.id,
4991
- count: data.count,
4992
- action: "reject",
4993
- value: error
4994
- });
4995
- }
4996
- });
4997
- };
4998
4927
  var wasm_base = "b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q;iekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq:P8Yqdbk;3sezu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhDcbhqinaqae9pmeaDaeaq9RaqaDfae6Egkcsfgocl4cifcd4hxdndndndnaoc9WGgmTmbcbhPcehsawcjdfhzalhHinaraH9Rax6midnaraHaxfgl9RcK6mbczhoinawcj;cbfaogifgoc9WfhOdndndndndnaHaic9WfgAco4fRbbaAci4coG4ciGPlbedibkaO9cb83ibaOcwf9cb83ibxikaOalRblalRbbgAco4gCaCciSgCE86bbaocGfalclfaCfgORbbaAcl4ciGgCaCciSgCE86bbaocVfaOaCfgORbbaAcd4ciGgCaCciSgCE86bbaoc7faOaCfgORbbaAciGgAaAciSgAE86bbaoctfaOaAfgARbbalRbegOco4gCaCciSgCE86bbaoc91faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc4faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc93faAaCfgARbbaOciGgOaOciSgOE86bbaoc94faAaOfgARbbalRbdgOco4gCaCciSgCE86bbaoc95faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc96faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc97faAaCfgARbbaOciGgOaOciSgOE86bbaoc98faAaOfgORbbalRbiglco4gAaAciSgAE86bbaoc99faOaAfgORbbalcl4ciGgAaAciSgAE86bbaoc9:faOaAfgORbbalcd4ciGgAaAciSgAE86bbaocufaOaAfgoRbbalciGglalciSglE86bbaoalfhlxdkaOalRbwalRbbgAcl4gCaCcsSgCE86bbaocGfalcwfaCfgORbbaAcsGgAaAcsSgAE86bbaocVfaOaAfgORbbalRbegAcl4gCaCcsSgCE86bbaoc7faOaCfgORbbaAcsGgAaAcsSgAE86bbaoctfaOaAfgORbbalRbdgAcl4gCaCcsSgCE86bbaoc91faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc4faOaAfgORbbalRbigAcl4gCaCcsSgCE86bbaoc93faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc94faOaAfgORbbalRblgAcl4gCaCcsSgCE86bbaoc95faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc96faOaAfgORbbalRbvgAcl4gCaCcsSgCE86bbaoc97faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc98faOaAfgORbbalRbogAcl4gCaCcsSgCE86bbaoc99faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc9:faOaAfgORbbalRbrglcl4gAaAcsSgAE86bbaocufaOaAfgoRbbalcsGglalcsSglE86bbaoalfhlxekaOal8Pbb83bbaOcwfalcwf8Pbb83bbalczfhlkdnaiam9pmbaiczfhoaral9RcL0mekkaiam6mialTmidnakTmbawaPfRbbhOcbhoazhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkkazcefhzaPcefgPad6hsalhHaPad9hmexvkkcbhlasceGmdxikalaxad2fhCdnakTmbcbhHcehsawcjdfhminaral9Rax6mialTmdalaxfhlawaHfRbbhOcbhoamhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkamcefhmaHcefgHad6hsaHad9hmbkaChlxikcbhocehsinaral9Rax6mdalTmealaxfhlaocefgoad6hsadao9hmbkaChlxdkcbhlasceGTmekc9:hoxikabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqalmbkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;ebf8Kjjjjbaok;yzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk;siliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabavcefciGaiVcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:Ohkxekcjjjj94hkkabavcdfciGaiVcetfak87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:Ohqxekcjjjj94hqkabavcufciGaiVcetfaq87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohqxekcjjjj94hqkabavciGaiVcetfaq87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2geTmbinababydbgdcwtcw91:Yadce91cjjj;8ifcjjj98G::NUdbabclfhbaecufgembkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaiczfhiaeczfheadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklz9Kbb";
4999
4928
  var wasm_simd = "b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q;Aekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq;t9tqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk;h8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhwcbhDinaDae9pmeawaeaD9RaDawfae6Egqcsfgoc9WGgkci2hxakcethmaocl4cifcd4hPabaDad2fhscbhzdnincehHalhOcbhAdninaraO9RaP6miavcj;cbfaAak2fhCaOaPfhlcbhidnakc;ab6mbaral9Rc;Gb6mbcbhoinaCaofhidndndndndnaOaoco4fRbbgXciGPlbedibkaipxbbbbbbbbbbbbbbbbpklbxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklbalczfhlkdndndndndnaXcd4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklzxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklzalczfhlkdndndndndnaXcl4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklaxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklaalczfhlkdndndndndnaXco4Plbedibkaipxbbbbbbbbbbbbbbbbpkl8WxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalclfaYpQbfaXc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalcwfaYpQbfaXc:q:yjjbfRbbfhlxekaialpbbbpkl8Walczfhlkaoc;abfhiaocjefak0meaihoaral9Rc;Fb0mbkkdndnaiak9pmbaici4hoinaral9RcK6mdaCaifhXdndndndndnaOaico4fRbbaocoG4ciGPlbedibkaXpxbbbbbbbbbbbbbbbbpklbxikaXalpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaXalpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaXalpbbbpklbalczfhlkaocdfhoaiczfgiak6mbkkalTmbaAci6hHalhOaAcefgohAaoclSmdxekkcbhlaHceGmdkdnakTmbavcjdfazfhiavazfpbdbhYcbhXinaiavcj;cbfaXfgopblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLaoakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEaoamfpblbg3cep9Ta3aQp9op9Hp9rg3aoaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfhiaXczfgXak6mbkkazclfgzad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfhDc9:hoalmexikkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk;uzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:EPliuo97eue978Jjjjjbca9Rhidndnadcl9hmbdnaec98GglTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalae9pmeaiaeciGgvcdtgdVcbczad9R;8kbaiabalcdtfglad;8qbbdnavTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkalaiad;8qbbskdnaec98GgxTmbcbhvabhdinadczfglalpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oawaopmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgvax6mbkkaxae9pmbaiaeciGgvcitgdfcbcaad9R;8kbaiabaxcitfglad;8qbbdnavTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oawaopmbezHdiOAlvCXorQLp9qpklbkalaiad;8qbbkk;4wllue97euv978Jjjjjbc8W9Rhidnaec98GglTmbcbhvabhoinaiaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklbaopxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalae9pmbaiaeciGgvcitgofcbcaao9R;8kbaiabalcitfgwao;8qbbdnavTmbaiaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklaaipxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkawaiao;8qbbkk:Pddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbhdabheinaeaepbbbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepkbbaeczfheadclfgdav6mbkkdnaval9pmbaialciGgdcdtgeVcbc;abae9R;8kbaiabavcdtfgvae;8qbbdnadTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepklbkavaiae;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz9Tbb";
5000
4929
  var wasmpack = new Uint8Array([
@@ -6278,7 +6207,7 @@ var SceneLoader = /*#__PURE__*/ function(Loader1) {
6278
6207
  // parse ambient light
6279
6208
  var ambient = data.scene.ambient;
6280
6209
  if (ambient) {
6281
- var useCustomAmbient = ambient.specularMode === "Custom";
6210
+ var useCustomAmbient = ambient.specularMode === exports.SpecularMode.Custom;
6282
6211
  var useSH = ambient.diffuseMode === engineCore.DiffuseMode.SphericalHarmonics;
6283
6212
  scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
6284
6213
  scene.ambientLight.specularIntensity = ambient.specularIntensity;
@@ -6306,6 +6235,7 @@ var SceneLoader = /*#__PURE__*/ function(Loader1) {
6306
6235
  }));
6307
6236
  }
6308
6237
  }
6238
+ // parse background
6309
6239
  var background = data.scene.background;
6310
6240
  scene.background.mode = background.mode;
6311
6241
  switch(scene.background.mode){
@@ -6349,6 +6279,17 @@ var SceneLoader = /*#__PURE__*/ function(Loader1) {
6349
6279
  var _shadow_shadowTwoCascadeSplits;
6350
6280
  scene.shadowTwoCascadeSplits = (_shadow_shadowTwoCascadeSplits = shadow.shadowTwoCascadeSplits) != null ? _shadow_shadowTwoCascadeSplits : scene.shadowTwoCascadeSplits;
6351
6281
  shadow.shadowFourCascadeSplits && scene.shadowFourCascadeSplits.copyFrom(shadow.shadowFourCascadeSplits);
6282
+ var _shadow_shadowFadeBorder;
6283
+ scene.shadowFadeBorder = (_shadow_shadowFadeBorder = shadow.shadowFadeBorder) != null ? _shadow_shadowFadeBorder : scene.shadowFadeBorder;
6284
+ }
6285
+ // parse fog
6286
+ var fog = data.scene.fog;
6287
+ if (fog) {
6288
+ if (fog.fogMode != undefined) scene.fogMode = fog.fogMode;
6289
+ if (fog.fogStart != undefined) scene.fogStart = fog.fogStart;
6290
+ if (fog.fogEnd != undefined) scene.fogEnd = fog.fogEnd;
6291
+ if (fog.fogDensity != undefined) scene.fogDensity = fog.fogDensity;
6292
+ if (fog.fogColor != undefined) scene.fogColor.copyFrom(fog.fogColor);
6352
6293
  }
6353
6294
  return Promise.all(promises).then(function() {
6354
6295
  resolve(scene);