@cesium/engine 2.4.1 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/Build/Workers/cesiumWorkerBootstrapper.js +1 -1
  2. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +0 -22
  3. package/Build/Workers/package.js +1 -1
  4. package/Build/Workers/transferTypedArrayTest.js +1 -1
  5. package/Source/Core/ArcGISTiledElevationTerrainProvider.js +0 -75
  6. package/Source/Core/CesiumTerrainProvider.js +0 -75
  7. package/Source/Core/CustomHeightmapTerrainProvider.js +0 -38
  8. package/Source/Core/EllipsoidTerrainProvider.js +0 -37
  9. package/Source/Core/GoogleEarthEnterpriseMetadata.js +0 -53
  10. package/Source/Core/GoogleEarthEnterpriseTerrainProvider.js +1 -101
  11. package/Source/Core/GoogleMaps.js +1 -1
  12. package/Source/Core/Ion.js +1 -2
  13. package/Source/Core/TerrainProvider.js +0 -22
  14. package/Source/Core/VRTheWorldTerrainProvider.js +0 -59
  15. package/Source/Core/sampleTerrain.js +0 -7
  16. package/Source/Core/sampleTerrainMostDetailed.js +0 -7
  17. package/Source/DataSources/Cesium3DTilesetVisualizer.js +6 -5
  18. package/Source/DataSources/KmlTour.js +1 -12
  19. package/Source/DataSources/ModelVisualizer.js +0 -12
  20. package/Source/Renderer/Context.js +10 -2
  21. package/Source/Scene/ArcGisMapServerImageryProvider.js +7 -335
  22. package/Source/Scene/ArcGisMapService.js +1 -1
  23. package/Source/Scene/Billboard.js +7 -0
  24. package/Source/Scene/BingMapsImageryProvider.js +0 -326
  25. package/Source/Scene/Camera.js +1 -1
  26. package/Source/Scene/Cesium3DTile.js +4 -5
  27. package/Source/Scene/Cesium3DTileContent.js +0 -16
  28. package/Source/Scene/Cesium3DTilesVoxelProvider.js +0 -123
  29. package/Source/Scene/Cesium3DTileset.js +183 -184
  30. package/Source/Scene/Cesium3DTilesetBaseTraversal.js +1 -1
  31. package/Source/Scene/Cesium3DTilesetCache.js +1 -3
  32. package/Source/Scene/Cesium3DTilesetSkipTraversal.js +5 -2
  33. package/Source/Scene/Cesium3DTilesetTraversal.js +2 -2
  34. package/Source/Scene/ClassificationPrimitive.js +5 -43
  35. package/Source/Scene/Composite3DTileContent.js +0 -27
  36. package/Source/Scene/CreditDisplay.js +0 -54
  37. package/Source/Scene/DerivedCommand.js +15 -10
  38. package/Source/Scene/Empty3DTileContent.js +0 -21
  39. package/Source/Scene/Geometry3DTileContent.js +0 -29
  40. package/Source/Scene/Globe.js +1 -9
  41. package/Source/Scene/GlobeSurfaceTile.js +13 -8
  42. package/Source/Scene/GlobeSurfaceTileProvider.js +8 -60
  43. package/Source/Scene/GltfPipeline/removeUnusedElements.js +27 -0
  44. package/Source/Scene/GltfPipeline/updateVersion.js +21 -4
  45. package/Source/Scene/GoogleEarthEnterpriseImageryProvider.js +1 -339
  46. package/Source/Scene/GoogleEarthEnterpriseMapsProvider.js +0 -326
  47. package/Source/Scene/GridImageryProvider.js +0 -274
  48. package/Source/Scene/GroundPolylinePrimitive.js +5 -38
  49. package/Source/Scene/GroundPrimitive.js +5 -43
  50. package/Source/Scene/I3SDataProvider.js +4 -99
  51. package/Source/Scene/I3SLayer.js +15 -22
  52. package/Source/Scene/Imagery.js +1 -9
  53. package/Source/Scene/ImageryLayer.js +1 -40
  54. package/Source/Scene/ImageryProvider.js +0 -138
  55. package/Source/Scene/Implicit3DTileContent.js +0 -23
  56. package/Source/Scene/IonImageryProvider.js +1 -369
  57. package/Source/Scene/MapboxImageryProvider.js +0 -276
  58. package/Source/Scene/MapboxStyleImageryProvider.js +0 -274
  59. package/Source/Scene/Model/Model.js +6 -249
  60. package/Source/Scene/Model/Model3DTileContent.js +0 -50
  61. package/Source/Scene/Model/ModelAnimationCollection.js +1 -1
  62. package/Source/Scene/Model/PointCloudStylingPipelineStage.js +1 -1
  63. package/Source/Scene/Multiple3DTileContent.js +0 -27
  64. package/Source/Scene/Primitive.js +10 -38
  65. package/Source/Scene/QuadtreePrimitive.js +3 -5
  66. package/Source/Scene/QuadtreeTileProvider.js +0 -10
  67. package/Source/Scene/Scene.js +3 -3
  68. package/Source/Scene/ScreenSpaceCameraController.js +5 -5
  69. package/Source/Scene/SingleTileImageryProvider.js +6 -302
  70. package/Source/Scene/TileCoordinatesImageryProvider.js +0 -273
  71. package/Source/Scene/TileMapServiceImageryProvider.js +3 -48
  72. package/Source/Scene/Tileset3DTileContent.js +0 -22
  73. package/Source/Scene/TimeDynamicPointCloud.js +0 -28
  74. package/Source/Scene/UrlTemplateImageryProvider.js +0 -375
  75. package/Source/Scene/Vector3DTileContent.js +0 -29
  76. package/Source/Scene/VoxelPrimitive.js +9 -49
  77. package/Source/Scene/VoxelProvider.js +0 -24
  78. package/Source/Scene/WebMapServiceImageryProvider.js +0 -274
  79. package/Source/Scene/WebMapTileServiceImageryProvider.js +0 -274
  80. package/Source/Scene/computeFlyToLocationForRectangle.js +0 -6
  81. package/Source/Scene/createGooglePhotorealistic3DTileset.js +5 -0
  82. package/Source/Widget/CesiumWidget.js +2 -19
  83. package/index.d.ts +62 -1183
  84. package/index.js +54 -57
  85. package/package.json +2 -2
  86. package/Source/Core/createWorldTerrain.js +0 -61
  87. package/Source/Scene/createOsmBuildings.js +0 -82
  88. package/Source/Scene/createWorldImagery.js +0 -47
@@ -1,7 +1,6 @@
1
1
  import Check from "../Core/Check.js";
2
2
  import defaultValue from "../Core/defaultValue.js";
3
3
  import defined from "../Core/defined.js";
4
- import deprecationWarning from "../Core/deprecationWarning.js";
5
4
  import Event from "../Core/Event.js";
6
5
  import IonResource from "../Core/IonResource.js";
7
6
  import RuntimeError from "../Core/RuntimeError.js";
@@ -15,26 +14,8 @@ import UrlTemplateImageryProvider from "./UrlTemplateImageryProvider.js";
15
14
  import WebMapServiceImageryProvider from "./WebMapServiceImageryProvider.js";
16
15
  import WebMapTileServiceImageryProvider from "./WebMapTileServiceImageryProvider.js";
17
16
 
18
- function createFactory(Type) {
19
- return function (options) {
20
- return new Type(options);
21
- };
22
- }
23
-
24
17
  // These values are the list of supported external imagery
25
18
  // assets in the Cesium ion beta. They are subject to change.
26
- const ImageryProviderMapping = {
27
- ARCGIS_MAPSERVER: createFactory(ArcGisMapServerImageryProvider),
28
- BING: createFactory(BingMapsImageryProvider),
29
- GOOGLE_EARTH: createFactory(GoogleEarthEnterpriseMapsProvider),
30
- MAPBOX: createFactory(MapboxImageryProvider),
31
- SINGLE_TILE: createFactory(SingleTileImageryProvider),
32
- TMS: createFactory(TileMapServiceImageryProvider),
33
- URL_TEMPLATE: createFactory(UrlTemplateImageryProvider),
34
- WMS: createFactory(WebMapServiceImageryProvider),
35
- WMTS: createFactory(WebMapTileServiceImageryProvider),
36
- };
37
-
38
19
  const ImageryProviderAsyncMapping = {
39
20
  ARCGIS_MAPSERVER: ArcGisMapServerImageryProvider.fromUrl,
40
21
  BING: async (url, options) => {
@@ -78,7 +59,6 @@ const ImageryProviderAsyncMapping = {
78
59
  *
79
60
  * Initialization options for the TileMapServiceImageryProvider constructor
80
61
  *
81
- * @property {number} [assetId] An ion imagery asset ID. Deprecated.
82
62
  * @property {string} [accessToken=Ion.defaultAccessToken] The access token to use.
83
63
  * @property {string|Resource} [server=Ion.defaultServer] The resource to the Cesium ion API server.
84
64
  */
@@ -93,7 +73,7 @@ const ImageryProviderAsyncMapping = {
93
73
  * @alias IonImageryProvider
94
74
  * @constructor
95
75
  *
96
- * @param {IonImageryProvider.ConstructorOptions} options Object describing initialization options
76
+ * @param {IonImageryProvider.ConstructorOptions} [options] Object describing initialization options
97
77
  *
98
78
  * @example
99
79
  * const imageryLayer = Cesium.ImageryLayer.fromProviderAsync(Cesium.IonImageryProvider.fromAssetId(3812));
@@ -115,56 +95,11 @@ function IonImageryProvider(options) {
115
95
  this._defaultMinificationFilter = undefined;
116
96
  this._defaultMagnificationFilter = undefined;
117
97
 
118
- this._ready = false;
119
98
  this._tileCredits = undefined;
120
99
  this._errorEvent = new Event();
121
-
122
- const assetId = options.assetId;
123
- if (defined(assetId)) {
124
- deprecationWarning(
125
- "IonImageryProvider options.assetId",
126
- "options.assetId was deprecated in CesiumJS 1.104. It will be removed in CesiumJS 1.107. Use IonImageryProvider.fromAssetId instead."
127
- );
128
-
129
- IonImageryProvider._initialize(this, assetId, options);
130
- }
131
100
  }
132
101
 
133
102
  Object.defineProperties(IonImageryProvider.prototype, {
134
- /**
135
- * Gets a value indicating whether or not the provider is ready for use.
136
- * @memberof IonImageryProvider.prototype
137
- * @type {boolean}
138
- * @readonly
139
- * @deprecated
140
- */
141
- ready: {
142
- get: function () {
143
- deprecationWarning(
144
- "IonImageryProvider.ready",
145
- "IonImageryProvider.ready was deprecated in CesiumJS 1.104. It will be removed in CesiumJS 1.107. Use IonImageryProvider.fromAssetId instead."
146
- );
147
- return this._ready;
148
- },
149
- },
150
-
151
- /**
152
- * Gets a promise that resolves to true when the provider is ready for use.
153
- * @memberof IonImageryProvider.prototype
154
- * @type {Promise<boolean>}
155
- * @readonly
156
- * @deprecated
157
- */
158
- readyPromise: {
159
- get: function () {
160
- deprecationWarning(
161
- "IonImageryProvider.readyPromise",
162
- "IonImageryProvider.readyPromise was deprecated in CesiumJS 1.104. It will be removed in CesiumJS 1.107. Use IonImageryProvider.fromAssetId instead."
163
- );
164
- return this._readyPromise;
165
- },
166
- },
167
-
168
103
  /**
169
104
  * Gets the rectangle, in radians, of the imagery provided by the instance.
170
105
  * @memberof IonImageryProvider.prototype
@@ -310,309 +245,8 @@ Object.defineProperties(IonImageryProvider.prototype, {
310
245
  return undefined;
311
246
  },
312
247
  },
313
-
314
- /**
315
- * The default alpha blending value of this provider, with 0.0 representing fully transparent and
316
- * 1.0 representing fully opaque.
317
- * @memberof IonImageryProvider.prototype
318
- * @type {Number|undefined}
319
- * @deprecated
320
- */
321
- defaultAlpha: {
322
- get: function () {
323
- deprecationWarning(
324
- "IonImageryProvider.defaultAlpha",
325
- "IonImageryProvider.defaultAlpha was deprecated in CesiumJS 1.104. It will be removed in CesiumJS 1.107. Use ImageryLayer.alpha instead."
326
- );
327
- return this._defaultAlpha;
328
- },
329
- set: function (value) {
330
- deprecationWarning(
331
- "IonImageryProvider.defaultAlpha",
332
- "IonImageryProvider.defaultAlpha was deprecated in CesiumJS 1.104. It will be removed in CesiumJS 1.107. Use ImageryLayer.alpha instead."
333
- );
334
- this._defaultAlpha = value;
335
- },
336
- },
337
-
338
- /**
339
- * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and
340
- * 1.0 representing fully opaque.
341
- * @memberof IonImageryProvider.prototype
342
- * @type {Number|undefined}
343
- * @deprecated
344
- */
345
- defaultNightAlpha: {
346
- get: function () {
347
- deprecationWarning(
348
- "IonImageryProvider.defaultNightAlpha",
349
- "IonImageryProvider.defaultNightAlpha was deprecated in CesiumJS 1.104. It will be removed in CesiumJS 1.107. Use ImageryLayer.nightAlpha instead."
350
- );
351
- return this.defaultNightAlpha;
352
- },
353
- set: function (value) {
354
- deprecationWarning(
355
- "IonImageryProvider.defaultNightAlpha",
356
- "IonImageryProvider.defaultNightAlpha was deprecated in CesiumJS 1.104. It will be removed in CesiumJS 1.107. Use ImageryLayer.nightAlpha instead."
357
- );
358
- this.defaultNightAlpha = value;
359
- },
360
- },
361
-
362
- /**
363
- * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and
364
- * 1.0 representing fully opaque.
365
- * @memberof IonImageryProvider.prototype
366
- * @type {Number|undefined}
367
- * @deprecated
368
- */
369
- defaultDayAlpha: {
370
- get: function () {
371
- deprecationWarning(
372
- "IonImageryProvider.defaultDayAlpha",
373
- "IonImageryProvider.defaultDayAlpha was deprecated in CesiumJS 1.104. It will be removed in CesiumJS 1.107. Use ImageryLayer.dayAlpha instead."
374
- );
375
- return this._defaultDayAlpha;
376
- },
377
- set: function (value) {
378
- deprecationWarning(
379
- "IonImageryProvider.defaultDayAlpha",
380
- "IonImageryProvider.defaultDayAlpha was deprecated in CesiumJS 1.104. It will be removed in CesiumJS 1.107. Use ImageryLayer.dayAlpha instead."
381
- );
382
- this._defaultDayAlpha = value;
383
- },
384
- },
385
-
386
- /**
387
- * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0
388
- * makes the imagery darker while greater than 1.0 makes it brighter.
389
- * @memberof IonImageryProvider.prototype
390
- * @type {Number|undefined}
391
- * @deprecated
392
- */
393
- defaultBrightness: {
394
- get: function () {
395
- deprecationWarning(
396
- "IonImageryProvider.defaultBrightness",
397
- "IonImageryProvider.defaultBrightness was deprecated in CesiumJS 1.104. It will be removed in CesiumJS 1.107. Use ImageryLayer.brightness instead."
398
- );
399
- return this._defaultBrightness;
400
- },
401
- set: function (value) {
402
- deprecationWarning(
403
- "IonImageryProvider.defaultBrightness",
404
- "IonImageryProvider.defaultBrightness was deprecated in CesiumJS 1.104. It will be removed in CesiumJS 1.107. Use ImageryLayer.brightness instead."
405
- );
406
- this._defaultBrightness = value;
407
- },
408
- },
409
-
410
- /**
411
- * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces
412
- * the contrast while greater than 1.0 increases it.
413
- * @memberof IonImageryProvider.prototype
414
- * @type {Number|undefined}
415
- * @deprecated
416
- */
417
- defaultContrast: {
418
- get: function () {
419
- deprecationWarning(
420
- "IonImageryProvider.defaultContrast",
421
- "IonImageryProvider.defaultContrast was deprecated in CesiumJS 1.104. It will be removed in CesiumJS 1.107. Use ImageryLayer.contrast instead."
422
- );
423
- return this._defaultContrast;
424
- },
425
- set: function (value) {
426
- deprecationWarning(
427
- "IonImageryProvider.defaultContrast",
428
- "IonImageryProvider.defaultContrast was deprecated in CesiumJS 1.104. It will be removed in CesiumJS 1.107. Use ImageryLayer.contrast instead."
429
- );
430
- this._defaultContrast = value;
431
- },
432
- },
433
-
434
- /**
435
- * The default hue of this provider in radians. 0.0 uses the unmodified imagery color.
436
- * @memberof IonImageryProvider.prototype
437
- * @type {Number|undefined}
438
- * @deprecated
439
- */
440
- defaultHue: {
441
- get: function () {
442
- deprecationWarning(
443
- "IonImageryProvider.defaultHue",
444
- "IonImageryProvider.defaultHue was deprecated in CesiumJS 1.104. It will be removed in CesiumJS 1.107. Use ImageryLayer.hue instead."
445
- );
446
- return this._defaultHue;
447
- },
448
- set: function (value) {
449
- deprecationWarning(
450
- "IonImageryProvider.defaultHue",
451
- "IonImageryProvider.defaultHue was deprecated in CesiumJS 1.104. It will be removed in CesiumJS 1.107. Use ImageryLayer.hue instead."
452
- );
453
- this._defaultHue = value;
454
- },
455
- },
456
-
457
- /**
458
- * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the
459
- * saturation while greater than 1.0 increases it.
460
- * @memberof IonImageryProvider.prototype
461
- * @type {Number|undefined}
462
- * @deprecated
463
- */
464
- defaultSaturation: {
465
- get: function () {
466
- deprecationWarning(
467
- "IonImageryProvider.defaultSaturation",
468
- "IonImageryProvider.defaultSaturation was deprecated in CesiumJS 1.104. It will be removed in CesiumJS 1.107. Use ImageryLayer.saturation instead."
469
- );
470
- return this._defaultSaturation;
471
- },
472
- set: function (value) {
473
- deprecationWarning(
474
- "IonImageryProvider.defaultSaturation",
475
- "IonImageryProvider.defaultSaturation was deprecated in CesiumJS 1.104. It will be removed in CesiumJS 1.107. Use ImageryLayer.saturation instead."
476
- );
477
- this._defaultSaturation = value;
478
- },
479
- },
480
-
481
- /**
482
- * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color.
483
- * @memberof IonImageryProvider.prototype
484
- * @type {Number|undefined}
485
- * @deprecated
486
- */
487
- defaultGamma: {
488
- get: function () {
489
- deprecationWarning(
490
- "IonImageryProvider.defaultGamma",
491
- "IonImageryProvider.defaultGamma was deprecated in CesiumJS 1.104. It will be removed in CesiumJS 1.107. Use ImageryLayer.gamma instead."
492
- );
493
- return this._defaultGamma;
494
- },
495
- set: function (value) {
496
- deprecationWarning(
497
- "IonImageryProvider.defaultGamma",
498
- "IonImageryProvider.defaultGamma was deprecated in CesiumJS 1.104. It will be removed in CesiumJS 1.107. Use ImageryLayer.gamma instead."
499
- );
500
- this._defaultGamma = value;
501
- },
502
- },
503
-
504
- /**
505
- * The default texture minification filter to apply to this provider.
506
- * @memberof IonImageryProvider.prototype
507
- * @type {TextureMinificationFilter}
508
- * @deprecated
509
- */
510
- defaultMinificationFilter: {
511
- get: function () {
512
- deprecationWarning(
513
- "IonImageryProvider.defaultMinificationFilter",
514
- "IonImageryProvider.defaultMinificationFilter was deprecated in CesiumJS 1.104. It will be removed in CesiumJS 1.107. Use ImageryLayer.minificationFilter instead."
515
- );
516
- return this._defaultMinificationFilter;
517
- },
518
- set: function (value) {
519
- deprecationWarning(
520
- "IonImageryProvider.defaultMinificationFilter",
521
- "IonImageryProvider.defaultMinificationFilter was deprecated in CesiumJS 1.104. It will be removed in CesiumJS 1.107. Use ImageryLayer.minificationFilter instead."
522
- );
523
- this._defaultMinificationFilter = value;
524
- },
525
- },
526
-
527
- /**
528
- * The default texture magnification filter to apply to this provider.
529
- * @memberof IonImageryProvider.prototype
530
- * @type {TextureMagnificationFilter}
531
- * @deprecated
532
- */
533
- defaultMagnificationFilter: {
534
- get: function () {
535
- deprecationWarning(
536
- "IonImageryProvider.defaultMagnificationFilter",
537
- "IonImageryProvider.defaultMagnificationFilter was deprecated in CesiumJS 1.104. It will be removed in CesiumJS 1.107. Use ImageryLayer.magnificationFilter instead."
538
- );
539
- return this._defaultMagnificationFilter;
540
- },
541
- set: function (value) {
542
- deprecationWarning(
543
- "IonImageryProvider.defaultMagnificationFilter",
544
- "IonImageryProvider.defaultMagnificationFilter was deprecated in CesiumJS 1.104. It will be removed in CesiumJS 1.107. Use ImageryLayer.magnificationFilter instead."
545
- );
546
- this._defaultMagnificationFilter = value;
547
- },
548
- },
549
248
  });
550
249
 
551
- // This is here for backwards compatibility
552
- IonImageryProvider._initialize = function (provider, assetId, options) {
553
- const endpointResource = IonResource._createEndpointResource(
554
- assetId,
555
- options
556
- );
557
-
558
- // A simple cache to avoid making repeated requests to ion for endpoints we've
559
- // already retrieved. This exists mainly to support Bing caching to reduce
560
- // world imagery sessions, but provides a small boost of performance in general
561
- // if constantly reloading assets
562
- const cacheKey = assetId.toString() + options.accessToken + options.server;
563
- let promise = IonImageryProvider._endpointCache[cacheKey];
564
- if (!defined(promise)) {
565
- promise = endpointResource.fetchJson();
566
- IonImageryProvider._endpointCache[cacheKey] = promise;
567
- }
568
-
569
- provider._readyPromise = promise.then(function (endpoint) {
570
- if (endpoint.type !== "IMAGERY") {
571
- return Promise.reject(
572
- new RuntimeError(`Cesium ion asset ${assetId} is not an imagery asset.`)
573
- );
574
- }
575
-
576
- let imageryProvider;
577
- const externalType = endpoint.externalType;
578
- if (!defined(externalType)) {
579
- imageryProvider = new TileMapServiceImageryProvider({
580
- url: new IonResource(endpoint, endpointResource),
581
- });
582
- } else {
583
- const factory = ImageryProviderMapping[externalType];
584
-
585
- if (!defined(factory)) {
586
- return Promise.reject(
587
- new RuntimeError(
588
- `Unrecognized Cesium ion imagery type: ${externalType}`
589
- )
590
- );
591
- }
592
- imageryProvider = factory(endpoint.options);
593
- }
594
-
595
- provider._tileCredits = IonResource.getCreditsFromEndpoint(
596
- endpoint,
597
- endpointResource
598
- );
599
-
600
- imageryProvider.errorEvent.addEventListener(function (tileProviderError) {
601
- //Propagate the errorEvent but set the provider to this instance instead
602
- //of the inner instance.
603
- tileProviderError.provider = provider;
604
- provider._errorEvent.raiseEvent(tileProviderError);
605
- });
606
-
607
- provider._imageryProvider = imageryProvider;
608
- // readyPromise is deprecated. This is here for backwards compatibility
609
- return Promise.resolve(imageryProvider._readyPromise).then(function () {
610
- provider._ready = true;
611
- return true;
612
- });
613
- });
614
- };
615
-
616
250
  /**
617
251
  * Creates a provider for tiled imagery using the Cesium ion REST API.
618
252
  *
@@ -692,8 +326,6 @@ IonImageryProvider.fromAssetId = async function (assetId, options) {
692
326
  );
693
327
 
694
328
  provider._imageryProvider = imageryProvider;
695
- provider._ready = true;
696
- provider._readyPromise = Promise.resolve(true);
697
329
 
698
330
  return provider;
699
331
  };