@kepler.gl/deckgl-layers 3.3.0-alpha.5 → 3.3.0-alpha.7

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 (189) hide show
  1. package/dist/cjs/3d-building-layer/3d-building-layer.js +66 -0
  2. package/dist/cjs/3d-building-layer/3d-building-utils.js +166 -0
  3. package/dist/cjs/3d-building-layer/types.js +6 -0
  4. package/dist/cjs/cluster-layer/cluster-layer.js +292 -0
  5. package/dist/cjs/column-layer/enhanced-column-layer.js +160 -0
  6. package/dist/{deckgl-extensions → cjs/deckgl-extensions}/filter-arrow-layer.js +1 -1
  7. package/dist/cjs/deckgl-extensions/filter-shader-module.js +26 -0
  8. package/dist/cjs/globe/atmosphere-layer.js +341 -0
  9. package/dist/cjs/globe/enhanced-multi-icon-layer.js +63 -0
  10. package/dist/cjs/globe/globe-depth-disk-layer.js +145 -0
  11. package/dist/cjs/globe/globe-layers.js +574 -0
  12. package/dist/cjs/globe/globe-stars-layer.js +99 -0
  13. package/dist/cjs/globe/globe-stars-layer.spec.js +42 -0
  14. package/dist/cjs/globe/globe-view.js +404 -0
  15. package/dist/{globe → cjs/globe}/index.js +19 -1
  16. package/dist/cjs/globe/mvt-label-layer.js +190 -0
  17. package/dist/cjs/grid-layer/enhanced-cpu-grid-layer.js +116 -0
  18. package/dist/cjs/hexagon-layer/enhanced-hexagon-layer.js +134 -0
  19. package/dist/{index.js → cjs/index.js} +1 -1
  20. package/dist/cjs/layer-utils/aggregation-utils.js +181 -0
  21. package/dist/cjs/layer-utils/cluster-utils.js +93 -0
  22. package/dist/cjs/layer-utils/cpu-aggregator.js +798 -0
  23. package/dist/cjs/layer-utils/globe-cell-utils.js +173 -0
  24. package/dist/cjs/layer-utils/shader-utils.js +38 -0
  25. package/dist/cjs/line-layer/line-layer.js +95 -0
  26. package/dist/cjs/raster/images.js +271 -0
  27. package/dist/cjs/raster/pipeline-validation-patch.js +101 -0
  28. package/dist/cjs/raster/raster-layer/raster-layer-shaders.js +163 -0
  29. package/dist/cjs/raster/raster-layer/raster-layer-webgl1.fs.js +10 -0
  30. package/dist/cjs/raster/raster-layer/raster-layer-webgl1.vs.js +10 -0
  31. package/dist/cjs/raster/raster-layer/raster-layer-webgl2.fs.js +10 -0
  32. package/dist/cjs/raster/raster-layer/raster-layer-webgl2.vs.js +10 -0
  33. package/dist/cjs/raster/raster-layer/raster-layer.js +287 -0
  34. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +38 -0
  35. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +10 -0
  36. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +10 -0
  37. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +10 -0
  38. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +10 -0
  39. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer.js +321 -0
  40. package/dist/cjs/raster/raster-processing-uniforms.js +124 -0
  41. package/dist/cjs/raster/types.js +6 -0
  42. package/dist/cjs/raster/util.js +139 -0
  43. package/dist/cjs/raster/webgl/color/colormap.js +45 -0
  44. package/dist/cjs/raster/webgl/color/filter.js +58 -0
  45. package/dist/cjs/raster/webgl/color/gamma-contrast.js +68 -0
  46. package/dist/cjs/raster/webgl/color/linear-rescale.js +35 -0
  47. package/dist/cjs/raster/webgl/color/saturation.js +42 -0
  48. package/dist/cjs/raster/webgl/color/sigmoidal-contrast.js +68 -0
  49. package/dist/{raster → cjs/raster}/webgl/index.js +1 -1
  50. package/dist/cjs/raster/webgl/pansharpen/pansharpen-brovey.js +46 -0
  51. package/dist/cjs/raster/webgl/spectral-indices/evi.js +26 -0
  52. package/dist/cjs/raster/webgl/spectral-indices/msavi.js +25 -0
  53. package/dist/cjs/raster/webgl/spectral-indices/normalized-difference.js +19 -0
  54. package/dist/cjs/raster/webgl/spectral-indices/savi.js +21 -0
  55. package/dist/cjs/raster/webgl/texture/combine-bands.js +65 -0
  56. package/dist/cjs/raster/webgl/texture/mask.js +50 -0
  57. package/dist/cjs/raster/webgl/texture/reorder-bands.js +72 -0
  58. package/dist/cjs/raster/webgl/texture/rgba-image.js +34 -0
  59. package/dist/cjs/raster/webgl/types.js +6 -0
  60. package/dist/cjs/svg-icon-layer/scatterplot-icon-layer.js +88 -0
  61. package/dist/cjs/svg-icon-layer/svg-icon-layer.js +104 -0
  62. package/dist/cjs/wms/wms-layer.js +624 -0
  63. package/dist/esm/3d-building-layer/3d-building-layer.js +62 -0
  64. package/dist/esm/3d-building-layer/3d-building-utils.js +157 -0
  65. package/dist/esm/3d-building-layer/types.js +3 -0
  66. package/dist/esm/cluster-layer/cluster-layer.js +286 -0
  67. package/dist/esm/column-layer/enhanced-column-layer.js +156 -0
  68. package/dist/esm/deckgl-extensions/filter-arrow-layer.js +64 -0
  69. package/dist/esm/deckgl-extensions/filter-shader-module.js +20 -0
  70. package/dist/esm/globe/atmosphere-layer.js +335 -0
  71. package/dist/esm/globe/enhanced-multi-icon-layer.js +60 -0
  72. package/dist/esm/globe/globe-depth-disk-layer.js +140 -0
  73. package/dist/esm/globe/globe-layers.js +566 -0
  74. package/dist/esm/globe/globe-stars-layer.js +92 -0
  75. package/dist/esm/globe/globe-stars-layer.spec.js +40 -0
  76. package/dist/esm/globe/globe-view.js +398 -0
  77. package/dist/esm/globe/index.js +26 -0
  78. package/dist/esm/globe/mvt-label-layer.js +187 -0
  79. package/dist/esm/grid-layer/enhanced-cpu-grid-layer.js +112 -0
  80. package/dist/esm/hexagon-layer/enhanced-hexagon-layer.js +130 -0
  81. package/dist/esm/index.js +22 -0
  82. package/dist/esm/layer-utils/aggregation-utils.js +172 -0
  83. package/dist/esm/layer-utils/cluster-utils.js +86 -0
  84. package/dist/esm/layer-utils/cpu-aggregator.js +788 -0
  85. package/dist/esm/layer-utils/globe-cell-utils.js +167 -0
  86. package/dist/esm/layer-utils/shader-utils.js +32 -0
  87. package/dist/esm/line-layer/line-layer.js +91 -0
  88. package/dist/esm/raster/images.js +267 -0
  89. package/dist/esm/raster/pipeline-validation-patch.js +94 -0
  90. package/dist/esm/raster/raster-layer/raster-layer-shaders.js +153 -0
  91. package/dist/esm/raster/raster-layer/raster-layer-webgl1.fs.js +5 -0
  92. package/dist/esm/raster/raster-layer/raster-layer-webgl1.vs.js +5 -0
  93. package/dist/esm/raster/raster-layer/raster-layer-webgl2.fs.js +5 -0
  94. package/dist/esm/raster/raster-layer/raster-layer-webgl2.vs.js +5 -0
  95. package/dist/esm/raster/raster-layer/raster-layer.js +283 -0
  96. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +30 -0
  97. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +5 -0
  98. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +5 -0
  99. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +5 -0
  100. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +5 -0
  101. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer.js +318 -0
  102. package/dist/esm/raster/raster-processing-uniforms.js +118 -0
  103. package/dist/esm/raster/types.js +3 -0
  104. package/dist/esm/raster/util.js +134 -0
  105. package/dist/esm/raster/webgl/color/colormap.js +39 -0
  106. package/dist/esm/raster/webgl/color/filter.js +52 -0
  107. package/dist/esm/raster/webgl/color/gamma-contrast.js +62 -0
  108. package/dist/esm/raster/webgl/color/linear-rescale.js +29 -0
  109. package/dist/esm/raster/webgl/color/saturation.js +36 -0
  110. package/dist/esm/raster/webgl/color/sigmoidal-contrast.js +62 -0
  111. package/dist/esm/raster/webgl/index.js +26 -0
  112. package/dist/esm/raster/webgl/pansharpen/pansharpen-brovey.js +40 -0
  113. package/dist/esm/raster/webgl/spectral-indices/evi.js +20 -0
  114. package/dist/esm/raster/webgl/spectral-indices/msavi.js +19 -0
  115. package/dist/esm/raster/webgl/spectral-indices/normalized-difference.js +13 -0
  116. package/dist/esm/raster/webgl/spectral-indices/savi.js +15 -0
  117. package/dist/esm/raster/webgl/texture/combine-bands.js +58 -0
  118. package/dist/esm/raster/webgl/texture/mask.js +44 -0
  119. package/dist/esm/raster/webgl/texture/reorder-bands.js +65 -0
  120. package/dist/esm/raster/webgl/texture/rgba-image.js +28 -0
  121. package/dist/esm/raster/webgl/types.js +3 -0
  122. package/dist/esm/svg-icon-layer/scatterplot-icon-layer.js +84 -0
  123. package/dist/esm/svg-icon-layer/svg-icon-layer.js +101 -0
  124. package/dist/esm/wms/wms-layer.js +619 -0
  125. package/dist/globe/atmosphere-layer.d.ts +22 -1
  126. package/dist/globe/globe-stars-layer.d.ts +5 -0
  127. package/dist/globe/globe-stars-layer.spec.d.ts +1 -0
  128. package/dist/globe/index.d.ts +2 -2
  129. package/dist/wms/wms-layer.d.ts +8 -0
  130. package/package.json +19 -10
  131. package/dist/3d-building-layer/3d-building-layer.js +0 -66
  132. package/dist/3d-building-layer/3d-building-utils.js +0 -166
  133. package/dist/3d-building-layer/types.js +0 -6
  134. package/dist/cluster-layer/cluster-layer.js +0 -292
  135. package/dist/column-layer/enhanced-column-layer.js +0 -160
  136. package/dist/deckgl-extensions/filter-shader-module.js +0 -26
  137. package/dist/globe/atmosphere-layer.js +0 -220
  138. package/dist/globe/enhanced-multi-icon-layer.js +0 -63
  139. package/dist/globe/globe-depth-disk-layer.js +0 -145
  140. package/dist/globe/globe-layers.js +0 -569
  141. package/dist/globe/globe-stars-layer.js +0 -69
  142. package/dist/globe/globe-view.js +0 -404
  143. package/dist/globe/mvt-label-layer.js +0 -190
  144. package/dist/grid-layer/enhanced-cpu-grid-layer.js +0 -116
  145. package/dist/hexagon-layer/enhanced-hexagon-layer.js +0 -134
  146. package/dist/layer-utils/aggregation-utils.js +0 -181
  147. package/dist/layer-utils/cluster-utils.js +0 -93
  148. package/dist/layer-utils/cpu-aggregator.js +0 -798
  149. package/dist/layer-utils/globe-cell-utils.js +0 -173
  150. package/dist/layer-utils/shader-utils.js +0 -38
  151. package/dist/line-layer/line-layer.js +0 -95
  152. package/dist/raster/images.js +0 -271
  153. package/dist/raster/pipeline-validation-patch.js +0 -101
  154. package/dist/raster/raster-layer/raster-layer-shaders.js +0 -163
  155. package/dist/raster/raster-layer/raster-layer-webgl1.fs.js +0 -10
  156. package/dist/raster/raster-layer/raster-layer-webgl1.vs.js +0 -10
  157. package/dist/raster/raster-layer/raster-layer-webgl2.fs.js +0 -10
  158. package/dist/raster/raster-layer/raster-layer-webgl2.vs.js +0 -10
  159. package/dist/raster/raster-layer/raster-layer.js +0 -287
  160. package/dist/raster/raster-mesh-layer/matrix.d.ts +0 -4
  161. package/dist/raster/raster-mesh-layer/matrix.js +0 -18
  162. package/dist/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +0 -38
  163. package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +0 -10
  164. package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +0 -10
  165. package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +0 -10
  166. package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +0 -10
  167. package/dist/raster/raster-mesh-layer/raster-mesh-layer.js +0 -321
  168. package/dist/raster/raster-processing-uniforms.js +0 -124
  169. package/dist/raster/types.js +0 -6
  170. package/dist/raster/util.js +0 -139
  171. package/dist/raster/webgl/color/colormap.js +0 -45
  172. package/dist/raster/webgl/color/filter.js +0 -58
  173. package/dist/raster/webgl/color/gamma-contrast.js +0 -68
  174. package/dist/raster/webgl/color/linear-rescale.js +0 -35
  175. package/dist/raster/webgl/color/saturation.js +0 -42
  176. package/dist/raster/webgl/color/sigmoidal-contrast.js +0 -68
  177. package/dist/raster/webgl/pansharpen/pansharpen-brovey.js +0 -46
  178. package/dist/raster/webgl/spectral-indices/evi.js +0 -26
  179. package/dist/raster/webgl/spectral-indices/msavi.js +0 -25
  180. package/dist/raster/webgl/spectral-indices/normalized-difference.js +0 -19
  181. package/dist/raster/webgl/spectral-indices/savi.js +0 -21
  182. package/dist/raster/webgl/texture/combine-bands.js +0 -65
  183. package/dist/raster/webgl/texture/mask.js +0 -50
  184. package/dist/raster/webgl/texture/reorder-bands.js +0 -72
  185. package/dist/raster/webgl/texture/rgba-image.js +0 -34
  186. package/dist/raster/webgl/types.js +0 -6
  187. package/dist/svg-icon-layer/scatterplot-icon-layer.js +0 -88
  188. package/dist/svg-icon-layer/svg-icon-layer.js +0 -104
  189. package/dist/wms/wms-layer.js +0 -594
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.drawStarsBackground = drawStarsBackground;
7
+ exports.getStarsBackgroundImage = getStarsBackgroundImage;
8
+ // SPDX-License-Identifier: MIT
9
+ // Copyright contributors to the kepler.gl project
10
+
11
+ /**
12
+ * Generates a tileable star-field used behind the globe.
13
+ * The live map and video-export preview paint it as a CSS `background-image`
14
+ * with `background-repeat: repeat`. Video-export capture (which only reads
15
+ * canvas pixels) tiles the same image onto a 2D context via
16
+ * `drawStarsBackground`. The result is deterministic (seeded PRNG) and cached
17
+ * so it's only generated once.
18
+ */
19
+
20
+ var STAR_CANVAS_SIZE = 512;
21
+ var STAR_COUNT = 600;
22
+
23
+ // Seeded pseudo-random number generator (Park-Miller) for determinism.
24
+ function seededRandom(seed) {
25
+ var s = seed;
26
+ return function () {
27
+ s = s * 16807 % 2147483647;
28
+ return (s - 1) / 2147483646;
29
+ };
30
+ }
31
+
32
+ // Transparent 1x1 PNG used as a fallback when a canvas context is unavailable
33
+ // (SSR or unsupported browser), so that `url(...)` never resolves to an empty
34
+ // value that could trigger a request for the current document.
35
+ var TRANSPARENT_PIXEL = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=';
36
+ var cachedCanvas = null;
37
+ var cachedDataUrl = null;
38
+ function generateStarsTile() {
39
+ if (typeof document === 'undefined') {
40
+ return null;
41
+ }
42
+ var canvas = document.createElement('canvas');
43
+ canvas.width = STAR_CANVAS_SIZE;
44
+ canvas.height = STAR_CANVAS_SIZE;
45
+ var ctx = canvas.getContext('2d');
46
+ if (!ctx) return null;
47
+
48
+ // Transparent background so CSS backgroundColor / canvas fill shows through
49
+ ctx.clearRect(0, 0, STAR_CANVAS_SIZE, STAR_CANVAS_SIZE);
50
+ var random = seededRandom(42);
51
+ for (var i = 0; i < STAR_COUNT; i++) {
52
+ var x = random() * STAR_CANVAS_SIZE;
53
+ var y = random() * STAR_CANVAS_SIZE;
54
+ var brightness = 140 + Math.floor(random() * 115); // 140–255
55
+ var alpha = 0.4 + random() * 0.6; // 0.4–1.0
56
+ var radius = 0.3 + random() * 1.0; // 0.3–1.3 px
57
+
58
+ ctx.beginPath();
59
+ ctx.arc(x, y, radius, 0, Math.PI * 2);
60
+ ctx.fillStyle = "rgba(".concat(brightness, ", ").concat(brightness, ", ").concat(brightness, ", ").concat(alpha, ")");
61
+ ctx.fill();
62
+ }
63
+ return canvas;
64
+ }
65
+ function getStarsTileCanvas() {
66
+ if (cachedCanvas) return cachedCanvas;
67
+ cachedCanvas = generateStarsTile();
68
+ return cachedCanvas;
69
+ }
70
+
71
+ /**
72
+ * Returns a data URL of a tileable star-field image (512×512 PNG).
73
+ * Generates the image once and caches it for subsequent calls.
74
+ */
75
+ function getStarsBackgroundImage() {
76
+ if (cachedDataUrl) return cachedDataUrl;
77
+ var canvas = getStarsTileCanvas();
78
+ if (!canvas) {
79
+ // SSR / missing 2D context: return a transparent 1x1 pixel so url() never
80
+ // resolves to an empty value that could trigger a request for the document.
81
+ return cachedDataUrl = TRANSPARENT_PIXEL;
82
+ }
83
+ cachedDataUrl = canvas.toDataURL('image/png');
84
+ return cachedDataUrl;
85
+ }
86
+
87
+ /**
88
+ * Tile the star-field onto a 2D canvas (e.g. video-export frame capture).
89
+ * Stars are drawn with alpha so the caller should fill the background color first.
90
+ */
91
+ function drawStarsBackground(ctx, width, height) {
92
+ var tile = getStarsTileCanvas();
93
+ if (!tile || width <= 0 || height <= 0) return;
94
+ var pattern = ctx.createPattern(tile, 'repeat');
95
+ if (!pattern) return;
96
+ ctx.fillStyle = pattern;
97
+ ctx.fillRect(0, 0, width, height);
98
+ }
99
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTVEFSX0NBTlZBU19TSVpFIiwiU1RBUl9DT1VOVCIsInNlZWRlZFJhbmRvbSIsInNlZWQiLCJzIiwiVFJBTlNQQVJFTlRfUElYRUwiLCJjYWNoZWRDYW52YXMiLCJjYWNoZWREYXRhVXJsIiwiZ2VuZXJhdGVTdGFyc1RpbGUiLCJkb2N1bWVudCIsImNhbnZhcyIsImNyZWF0ZUVsZW1lbnQiLCJ3aWR0aCIsImhlaWdodCIsImN0eCIsImdldENvbnRleHQiLCJjbGVhclJlY3QiLCJyYW5kb20iLCJpIiwieCIsInkiLCJicmlnaHRuZXNzIiwiTWF0aCIsImZsb29yIiwiYWxwaGEiLCJyYWRpdXMiLCJiZWdpblBhdGgiLCJhcmMiLCJQSSIsImZpbGxTdHlsZSIsImNvbmNhdCIsImZpbGwiLCJnZXRTdGFyc1RpbGVDYW52YXMiLCJnZXRTdGFyc0JhY2tncm91bmRJbWFnZSIsInRvRGF0YVVSTCIsImRyYXdTdGFyc0JhY2tncm91bmQiLCJ0aWxlIiwicGF0dGVybiIsImNyZWF0ZVBhdHRlcm4iLCJmaWxsUmVjdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9nbG9iZS9nbG9iZS1zdGFycy1sYXllci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHRpbGVhYmxlIHN0YXItZmllbGQgdXNlZCBiZWhpbmQgdGhlIGdsb2JlLlxuICogVGhlIGxpdmUgbWFwIGFuZCB2aWRlby1leHBvcnQgcHJldmlldyBwYWludCBpdCBhcyBhIENTUyBgYmFja2dyb3VuZC1pbWFnZWBcbiAqIHdpdGggYGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXRgLiBWaWRlby1leHBvcnQgY2FwdHVyZSAod2hpY2ggb25seSByZWFkc1xuICogY2FudmFzIHBpeGVscykgdGlsZXMgdGhlIHNhbWUgaW1hZ2Ugb250byBhIDJEIGNvbnRleHQgdmlhXG4gKiBgZHJhd1N0YXJzQmFja2dyb3VuZGAuIFRoZSByZXN1bHQgaXMgZGV0ZXJtaW5pc3RpYyAoc2VlZGVkIFBSTkcpIGFuZCBjYWNoZWRcbiAqIHNvIGl0J3Mgb25seSBnZW5lcmF0ZWQgb25jZS5cbiAqL1xuXG5jb25zdCBTVEFSX0NBTlZBU19TSVpFID0gNTEyO1xuY29uc3QgU1RBUl9DT1VOVCA9IDYwMDtcblxuLy8gU2VlZGVkIHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvciAoUGFyay1NaWxsZXIpIGZvciBkZXRlcm1pbmlzbS5cbmZ1bmN0aW9uIHNlZWRlZFJhbmRvbShzZWVkOiBudW1iZXIpOiAoKSA9PiBudW1iZXIge1xuICBsZXQgcyA9IHNlZWQ7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgcyA9IChzICogMTY4MDcpICUgMjE0NzQ4MzY0NztcbiAgICByZXR1cm4gKHMgLSAxKSAvIDIxNDc0ODM2NDY7XG4gIH07XG59XG5cbi8vIFRyYW5zcGFyZW50IDF4MSBQTkcgdXNlZCBhcyBhIGZhbGxiYWNrIHdoZW4gYSBjYW52YXMgY29udGV4dCBpcyB1bmF2YWlsYWJsZVxuLy8gKFNTUiBvciB1bnN1cHBvcnRlZCBicm93c2VyKSwgc28gdGhhdCBgdXJsKC4uLilgIG5ldmVyIHJlc29sdmVzIHRvIGFuIGVtcHR5XG4vLyB2YWx1ZSB0aGF0IGNvdWxkIHRyaWdnZXIgYSByZXF1ZXN0IGZvciB0aGUgY3VycmVudCBkb2N1bWVudC5cbmNvbnN0IFRSQU5TUEFSRU5UX1BJWEVMID1cbiAgJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBUUFBQUMxSEF3Q0FBQUFDMGxFUVZSNDJtTmtZQUFBQUFZQUFqQ0IwQzhBQUFBQVNVVk9SSzVDWUlJPSc7XG5cbmxldCBjYWNoZWRDYW52YXM6IEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5sZXQgY2FjaGVkRGF0YVVybDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU3RhcnNUaWxlKCk6IEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbCB7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgY2FudmFzLndpZHRoID0gU1RBUl9DQU5WQVNfU0laRTtcbiAgY2FudmFzLmhlaWdodCA9IFNUQVJfQ0FOVkFTX1NJWkU7XG4gIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICBpZiAoIWN0eCkgcmV0dXJuIG51bGw7XG5cbiAgLy8gVHJhbnNwYXJlbnQgYmFja2dyb3VuZCBzbyBDU1MgYmFja2dyb3VuZENvbG9yIC8gY2FudmFzIGZpbGwgc2hvd3MgdGhyb3VnaFxuICBjdHguY2xlYXJSZWN0KDAsIDAsIFNUQVJfQ0FOVkFTX1NJWkUsIFNUQVJfQ0FOVkFTX1NJWkUpO1xuXG4gIGNvbnN0IHJhbmRvbSA9IHNlZWRlZFJhbmRvbSg0Mik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBTVEFSX0NPVU5UOyBpKyspIHtcbiAgICBjb25zdCB4ID0gcmFuZG9tKCkgKiBTVEFSX0NBTlZBU19TSVpFO1xuICAgIGNvbnN0IHkgPSByYW5kb20oKSAqIFNUQVJfQ0FOVkFTX1NJWkU7XG4gICAgY29uc3QgYnJpZ2h0bmVzcyA9IDE0MCArIE1hdGguZmxvb3IocmFuZG9tKCkgKiAxMTUpOyAvLyAxNDDigJMyNTVcbiAgICBjb25zdCBhbHBoYSA9IDAuNCArIHJhbmRvbSgpICogMC42OyAvLyAwLjTigJMxLjBcbiAgICBjb25zdCByYWRpdXMgPSAwLjMgKyByYW5kb20oKSAqIDEuMDsgLy8gMC4z4oCTMS4zIHB4XG5cbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4LmFyYyh4LCB5LCByYWRpdXMsIDAsIE1hdGguUEkgKiAyKTtcbiAgICBjdHguZmlsbFN0eWxlID0gYHJnYmEoJHticmlnaHRuZXNzfSwgJHticmlnaHRuZXNzfSwgJHticmlnaHRuZXNzfSwgJHthbHBoYX0pYDtcbiAgICBjdHguZmlsbCgpO1xuICB9XG5cbiAgcmV0dXJuIGNhbnZhcztcbn1cblxuZnVuY3Rpb24gZ2V0U3RhcnNUaWxlQ2FudmFzKCk6IEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbCB7XG4gIGlmIChjYWNoZWRDYW52YXMpIHJldHVybiBjYWNoZWRDYW52YXM7XG4gIGNhY2hlZENhbnZhcyA9IGdlbmVyYXRlU3RhcnNUaWxlKCk7XG4gIHJldHVybiBjYWNoZWRDYW52YXM7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGRhdGEgVVJMIG9mIGEgdGlsZWFibGUgc3Rhci1maWVsZCBpbWFnZSAoNTEyw5c1MTIgUE5HKS5cbiAqIEdlbmVyYXRlcyB0aGUgaW1hZ2Ugb25jZSBhbmQgY2FjaGVzIGl0IGZvciBzdWJzZXF1ZW50IGNhbGxzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhcnNCYWNrZ3JvdW5kSW1hZ2UoKTogc3RyaW5nIHtcbiAgaWYgKGNhY2hlZERhdGFVcmwpIHJldHVybiBjYWNoZWREYXRhVXJsO1xuXG4gIGNvbnN0IGNhbnZhcyA9IGdldFN0YXJzVGlsZUNhbnZhcygpO1xuICBpZiAoIWNhbnZhcykge1xuICAgIC8vIFNTUiAvIG1pc3NpbmcgMkQgY29udGV4dDogcmV0dXJuIGEgdHJhbnNwYXJlbnQgMXgxIHBpeGVsIHNvIHVybCgpIG5ldmVyXG4gICAgLy8gcmVzb2x2ZXMgdG8gYW4gZW1wdHkgdmFsdWUgdGhhdCBjb3VsZCB0cmlnZ2VyIGEgcmVxdWVzdCBmb3IgdGhlIGRvY3VtZW50LlxuICAgIHJldHVybiAoY2FjaGVkRGF0YVVybCA9IFRSQU5TUEFSRU5UX1BJWEVMKTtcbiAgfVxuXG4gIGNhY2hlZERhdGFVcmwgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnKTtcbiAgcmV0dXJuIGNhY2hlZERhdGFVcmw7XG59XG5cbi8qKlxuICogVGlsZSB0aGUgc3Rhci1maWVsZCBvbnRvIGEgMkQgY2FudmFzIChlLmcuIHZpZGVvLWV4cG9ydCBmcmFtZSBjYXB0dXJlKS5cbiAqIFN0YXJzIGFyZSBkcmF3biB3aXRoIGFscGhhIHNvIHRoZSBjYWxsZXIgc2hvdWxkIGZpbGwgdGhlIGJhY2tncm91bmQgY29sb3IgZmlyc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3U3RhcnNCYWNrZ3JvdW5kKFxuICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgd2lkdGg6IG51bWJlcixcbiAgaGVpZ2h0OiBudW1iZXJcbik6IHZvaWQge1xuICBjb25zdCB0aWxlID0gZ2V0U3RhcnNUaWxlQ2FudmFzKCk7XG4gIGlmICghdGlsZSB8fCB3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKSByZXR1cm47XG4gIGNvbnN0IHBhdHRlcm4gPSBjdHguY3JlYXRlUGF0dGVybih0aWxlLCAncmVwZWF0Jyk7XG4gIGlmICghcGF0dGVybikgcmV0dXJuO1xuICBjdHguZmlsbFN0eWxlID0gcGF0dGVybjtcbiAgY3R4LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xufVxuXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBTUEsZ0JBQWdCLEdBQUcsR0FBRztBQUM1QixJQUFNQyxVQUFVLEdBQUcsR0FBRzs7QUFFdEI7QUFDQSxTQUFTQyxZQUFZQSxDQUFDQyxJQUFZLEVBQWdCO0VBQ2hELElBQUlDLENBQUMsR0FBR0QsSUFBSTtFQUNaLE9BQU8sWUFBTTtJQUNYQyxDQUFDLEdBQUlBLENBQUMsR0FBRyxLQUFLLEdBQUksVUFBVTtJQUM1QixPQUFPLENBQUNBLENBQUMsR0FBRyxDQUFDLElBQUksVUFBVTtFQUM3QixDQUFDO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBTUMsaUJBQWlCLEdBQ3JCLG9IQUFvSDtBQUV0SCxJQUFJQyxZQUFzQyxHQUFHLElBQUk7QUFDakQsSUFBSUMsYUFBNEIsR0FBRyxJQUFJO0FBRXZDLFNBQVNDLGlCQUFpQkEsQ0FBQSxFQUE2QjtFQUNyRCxJQUFJLE9BQU9DLFFBQVEsS0FBSyxXQUFXLEVBQUU7SUFDbkMsT0FBTyxJQUFJO0VBQ2I7RUFFQSxJQUFNQyxNQUFNLEdBQUdELFFBQVEsQ0FBQ0UsYUFBYSxDQUFDLFFBQVEsQ0FBQztFQUMvQ0QsTUFBTSxDQUFDRSxLQUFLLEdBQUdaLGdCQUFnQjtFQUMvQlUsTUFBTSxDQUFDRyxNQUFNLEdBQUdiLGdCQUFnQjtFQUNoQyxJQUFNYyxHQUFHLEdBQUdKLE1BQU0sQ0FBQ0ssVUFBVSxDQUFDLElBQUksQ0FBQztFQUNuQyxJQUFJLENBQUNELEdBQUcsRUFBRSxPQUFPLElBQUk7O0VBRXJCO0VBQ0FBLEdBQUcsQ0FBQ0UsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUVoQixnQkFBZ0IsRUFBRUEsZ0JBQWdCLENBQUM7RUFFdkQsSUFBTWlCLE1BQU0sR0FBR2YsWUFBWSxDQUFDLEVBQUUsQ0FBQztFQUUvQixLQUFLLElBQUlnQixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdqQixVQUFVLEVBQUVpQixDQUFDLEVBQUUsRUFBRTtJQUNuQyxJQUFNQyxDQUFDLEdBQUdGLE1BQU0sQ0FBQyxDQUFDLEdBQUdqQixnQkFBZ0I7SUFDckMsSUFBTW9CLENBQUMsR0FBR0gsTUFBTSxDQUFDLENBQUMsR0FBR2pCLGdCQUFnQjtJQUNyQyxJQUFNcUIsVUFBVSxHQUFHLEdBQUcsR0FBR0MsSUFBSSxDQUFDQyxLQUFLLENBQUNOLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyRCxJQUFNTyxLQUFLLEdBQUcsR0FBRyxHQUFHUCxNQUFNLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLElBQU1RLE1BQU0sR0FBRyxHQUFHLEdBQUdSLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7O0lBRXJDSCxHQUFHLENBQUNZLFNBQVMsQ0FBQyxDQUFDO0lBQ2ZaLEdBQUcsQ0FBQ2EsR0FBRyxDQUFDUixDQUFDLEVBQUVDLENBQUMsRUFBRUssTUFBTSxFQUFFLENBQUMsRUFBRUgsSUFBSSxDQUFDTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDZCxHQUFHLENBQUNlLFNBQVMsV0FBQUMsTUFBQSxDQUFXVCxVQUFVLFFBQUFTLE1BQUEsQ0FBS1QsVUFBVSxRQUFBUyxNQUFBLENBQUtULFVBQVUsUUFBQVMsTUFBQSxDQUFLTixLQUFLLE1BQUc7SUFDN0VWLEdBQUcsQ0FBQ2lCLElBQUksQ0FBQyxDQUFDO0VBQ1o7RUFFQSxPQUFPckIsTUFBTTtBQUNmO0FBRUEsU0FBU3NCLGtCQUFrQkEsQ0FBQSxFQUE2QjtFQUN0RCxJQUFJMUIsWUFBWSxFQUFFLE9BQU9BLFlBQVk7RUFDckNBLFlBQVksR0FBR0UsaUJBQWlCLENBQUMsQ0FBQztFQUNsQyxPQUFPRixZQUFZO0FBQ3JCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUzJCLHVCQUF1QkEsQ0FBQSxFQUFXO0VBQ2hELElBQUkxQixhQUFhLEVBQUUsT0FBT0EsYUFBYTtFQUV2QyxJQUFNRyxNQUFNLEdBQUdzQixrQkFBa0IsQ0FBQyxDQUFDO0VBQ25DLElBQUksQ0FBQ3RCLE1BQU0sRUFBRTtJQUNYO0lBQ0E7SUFDQSxPQUFRSCxhQUFhLEdBQUdGLGlCQUFpQjtFQUMzQztFQUVBRSxhQUFhLEdBQUdHLE1BQU0sQ0FBQ3dCLFNBQVMsQ0FBQyxXQUFXLENBQUM7RUFDN0MsT0FBTzNCLGFBQWE7QUFDdEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTNEIsbUJBQW1CQSxDQUNqQ3JCLEdBQTZCLEVBQzdCRixLQUFhLEVBQ2JDLE1BQWMsRUFDUjtFQUNOLElBQU11QixJQUFJLEdBQUdKLGtCQUFrQixDQUFDLENBQUM7RUFDakMsSUFBSSxDQUFDSSxJQUFJLElBQUl4QixLQUFLLElBQUksQ0FBQyxJQUFJQyxNQUFNLElBQUksQ0FBQyxFQUFFO0VBQ3hDLElBQU13QixPQUFPLEdBQUd2QixHQUFHLENBQUN3QixhQUFhLENBQUNGLElBQUksRUFBRSxRQUFRLENBQUM7RUFDakQsSUFBSSxDQUFDQyxPQUFPLEVBQUU7RUFDZHZCLEdBQUcsQ0FBQ2UsU0FBUyxHQUFHUSxPQUFPO0VBQ3ZCdkIsR0FBRyxDQUFDeUIsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUzQixLQUFLLEVBQUVDLE1BQU0sQ0FBQztBQUNuQyIsImlnbm9yZUxpc3QiOltdfQ==
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+
3
+ var _globeStarsLayer = require("./globe-stars-layer");
4
+ // SPDX-License-Identifier: MIT
5
+ // Copyright contributors to the kepler.gl project
6
+
7
+ describe('globe-stars-layer', function () {
8
+ afterEach(function () {
9
+ jest.restoreAllMocks();
10
+ });
11
+ test('drawStarsBackground tiles the star canvas with a repeating pattern', function () {
12
+ var tileCtx = {
13
+ clearRect: jest.fn(),
14
+ beginPath: jest.fn(),
15
+ arc: jest.fn(),
16
+ fill: jest.fn(),
17
+ fillStyle: ''
18
+ };
19
+ var originalGetContext = HTMLCanvasElement.prototype.getContext;
20
+ jest.spyOn(HTMLCanvasElement.prototype, 'getContext').mockImplementation(function getContext(type) {
21
+ if (type === '2d') {
22
+ return tileCtx;
23
+ }
24
+ return originalGetContext.call(this, type);
25
+ });
26
+ var pattern = {
27
+ id: 'stars-pattern'
28
+ };
29
+ var destCtx = {
30
+ createPattern: jest.fn(function () {
31
+ return pattern;
32
+ }),
33
+ fillRect: jest.fn(),
34
+ fillStyle: ''
35
+ };
36
+ (0, _globeStarsLayer.drawStarsBackground)(destCtx, 1280, 720);
37
+ expect(destCtx.createPattern).toHaveBeenCalledWith(expect.any(HTMLCanvasElement), 'repeat');
38
+ expect(destCtx.fillStyle).toBe(pattern);
39
+ expect(destCtx.fillRect).toHaveBeenCalledWith(0, 0, 1280, 720);
40
+ });
41
+ });
42
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ2xvYmVTdGFyc0xheWVyIiwicmVxdWlyZSIsImRlc2NyaWJlIiwiYWZ0ZXJFYWNoIiwiamVzdCIsInJlc3RvcmVBbGxNb2NrcyIsInRlc3QiLCJ0aWxlQ3R4IiwiY2xlYXJSZWN0IiwiZm4iLCJiZWdpblBhdGgiLCJhcmMiLCJmaWxsIiwiZmlsbFN0eWxlIiwib3JpZ2luYWxHZXRDb250ZXh0IiwiSFRNTENhbnZhc0VsZW1lbnQiLCJwcm90b3R5cGUiLCJnZXRDb250ZXh0Iiwic3B5T24iLCJtb2NrSW1wbGVtZW50YXRpb24iLCJ0eXBlIiwiY2FsbCIsInBhdHRlcm4iLCJpZCIsImRlc3RDdHgiLCJjcmVhdGVQYXR0ZXJuIiwiZmlsbFJlY3QiLCJkcmF3U3RhcnNCYWNrZ3JvdW5kIiwiZXhwZWN0IiwidG9IYXZlQmVlbkNhbGxlZFdpdGgiLCJhbnkiLCJ0b0JlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2dsb2JlL2dsb2JlLXN0YXJzLWxheWVyLnNwZWMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtkcmF3U3RhcnNCYWNrZ3JvdW5kfSBmcm9tICcuL2dsb2JlLXN0YXJzLWxheWVyJztcblxuZGVzY3JpYmUoJ2dsb2JlLXN0YXJzLWxheWVyJywgKCkgPT4ge1xuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIGplc3QucmVzdG9yZUFsbE1vY2tzKCk7XG4gIH0pO1xuXG4gIHRlc3QoJ2RyYXdTdGFyc0JhY2tncm91bmQgdGlsZXMgdGhlIHN0YXIgY2FudmFzIHdpdGggYSByZXBlYXRpbmcgcGF0dGVybicsICgpID0+IHtcbiAgICBjb25zdCB0aWxlQ3R4ID0ge1xuICAgICAgY2xlYXJSZWN0OiBqZXN0LmZuKCksXG4gICAgICBiZWdpblBhdGg6IGplc3QuZm4oKSxcbiAgICAgIGFyYzogamVzdC5mbigpLFxuICAgICAgZmlsbDogamVzdC5mbigpLFxuICAgICAgZmlsbFN0eWxlOiAnJ1xuICAgIH07XG4gICAgY29uc3Qgb3JpZ2luYWxHZXRDb250ZXh0ID0gSFRNTENhbnZhc0VsZW1lbnQucHJvdG90eXBlLmdldENvbnRleHQ7XG4gICAgamVzdC5zcHlPbihIVE1MQ2FudmFzRWxlbWVudC5wcm90b3R5cGUsICdnZXRDb250ZXh0JykubW9ja0ltcGxlbWVudGF0aW9uKGZ1bmN0aW9uIGdldENvbnRleHQoXG4gICAgICB0aGlzOiBIVE1MQ2FudmFzRWxlbWVudCxcbiAgICAgIHR5cGU6IHN0cmluZ1xuICAgICkge1xuICAgICAgaWYgKHR5cGUgPT09ICcyZCcpIHtcbiAgICAgICAgcmV0dXJuIHRpbGVDdHggYXMgdW5rbm93biBhcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3JpZ2luYWxHZXRDb250ZXh0LmNhbGwodGhpcywgdHlwZSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBwYXR0ZXJuID0ge2lkOiAnc3RhcnMtcGF0dGVybid9O1xuICAgIGNvbnN0IGRlc3RDdHggPSB7XG4gICAgICBjcmVhdGVQYXR0ZXJuOiBqZXN0LmZuKCgpID0+IHBhdHRlcm4pLFxuICAgICAgZmlsbFJlY3Q6IGplc3QuZm4oKSxcbiAgICAgIGZpbGxTdHlsZTogJycgYXMgc3RyaW5nIHwgQ2FudmFzUGF0dGVyblxuICAgIH07XG5cbiAgICBkcmF3U3RhcnNCYWNrZ3JvdW5kKGRlc3RDdHggYXMgdW5rbm93biBhcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIDEyODAsIDcyMCk7XG5cbiAgICBleHBlY3QoZGVzdEN0eC5jcmVhdGVQYXR0ZXJuKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3QuYW55KEhUTUxDYW52YXNFbGVtZW50KSwgJ3JlcGVhdCcpO1xuICAgIGV4cGVjdChkZXN0Q3R4LmZpbGxTdHlsZSkudG9CZShwYXR0ZXJuKTtcbiAgICBleHBlY3QoZGVzdEN0eC5maWxsUmVjdCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoMCwgMCwgMTI4MCwgNzIwKTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFHQSxJQUFBQSxnQkFBQSxHQUFBQyxPQUFBO0FBSEE7QUFDQTs7QUFJQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLFlBQU07RUFDbENDLFNBQVMsQ0FBQyxZQUFNO0lBQ2RDLElBQUksQ0FBQ0MsZUFBZSxDQUFDLENBQUM7RUFDeEIsQ0FBQyxDQUFDO0VBRUZDLElBQUksQ0FBQyxvRUFBb0UsRUFBRSxZQUFNO0lBQy9FLElBQU1DLE9BQU8sR0FBRztNQUNkQyxTQUFTLEVBQUVKLElBQUksQ0FBQ0ssRUFBRSxDQUFDLENBQUM7TUFDcEJDLFNBQVMsRUFBRU4sSUFBSSxDQUFDSyxFQUFFLENBQUMsQ0FBQztNQUNwQkUsR0FBRyxFQUFFUCxJQUFJLENBQUNLLEVBQUUsQ0FBQyxDQUFDO01BQ2RHLElBQUksRUFBRVIsSUFBSSxDQUFDSyxFQUFFLENBQUMsQ0FBQztNQUNmSSxTQUFTLEVBQUU7SUFDYixDQUFDO0lBQ0QsSUFBTUMsa0JBQWtCLEdBQUdDLGlCQUFpQixDQUFDQyxTQUFTLENBQUNDLFVBQVU7SUFDakViLElBQUksQ0FBQ2MsS0FBSyxDQUFDSCxpQkFBaUIsQ0FBQ0MsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDRyxrQkFBa0IsQ0FBQyxTQUFTRixVQUFVQSxDQUUxRkcsSUFBWSxFQUNaO01BQ0EsSUFBSUEsSUFBSSxLQUFLLElBQUksRUFBRTtRQUNqQixPQUFPYixPQUFPO01BQ2hCO01BQ0EsT0FBT08sa0JBQWtCLENBQUNPLElBQUksQ0FBQyxJQUFJLEVBQUVELElBQUksQ0FBQztJQUM1QyxDQUFDLENBQUM7SUFFRixJQUFNRSxPQUFPLEdBQUc7TUFBQ0MsRUFBRSxFQUFFO0lBQWUsQ0FBQztJQUNyQyxJQUFNQyxPQUFPLEdBQUc7TUFDZEMsYUFBYSxFQUFFckIsSUFBSSxDQUFDSyxFQUFFLENBQUM7UUFBQSxPQUFNYSxPQUFPO01BQUEsRUFBQztNQUNyQ0ksUUFBUSxFQUFFdEIsSUFBSSxDQUFDSyxFQUFFLENBQUMsQ0FBQztNQUNuQkksU0FBUyxFQUFFO0lBQ2IsQ0FBQztJQUVELElBQUFjLG9DQUFtQixFQUFDSCxPQUFPLEVBQXlDLElBQUksRUFBRSxHQUFHLENBQUM7SUFFOUVJLE1BQU0sQ0FBQ0osT0FBTyxDQUFDQyxhQUFhLENBQUMsQ0FBQ0ksb0JBQW9CLENBQUNELE1BQU0sQ0FBQ0UsR0FBRyxDQUFDZixpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsQ0FBQztJQUMzRmEsTUFBTSxDQUFDSixPQUFPLENBQUNYLFNBQVMsQ0FBQyxDQUFDa0IsSUFBSSxDQUFDVCxPQUFPLENBQUM7SUFDdkNNLE1BQU0sQ0FBQ0osT0FBTyxDQUFDRSxRQUFRLENBQUMsQ0FBQ0csb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDO0VBQ2hFLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==