@kepler.gl/deckgl-layers 3.3.0-alpha.1 → 3.3.0-alpha.11
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/cjs/3d-building-layer/3d-building-layer.js +66 -0
- package/dist/cjs/3d-building-layer/3d-building-utils.js +166 -0
- package/dist/cjs/3d-building-layer/types.js +6 -0
- package/dist/cjs/cluster-layer/cluster-layer.js +292 -0
- package/dist/cjs/column-layer/enhanced-column-layer.js +160 -0
- package/dist/{deckgl-extensions → cjs/deckgl-extensions}/filter-arrow-layer.js +1 -1
- package/dist/cjs/deckgl-extensions/filter-shader-module.js +26 -0
- package/dist/cjs/globe/atmosphere-layer.js +341 -0
- package/dist/cjs/globe/enhanced-multi-icon-layer.js +63 -0
- package/dist/cjs/globe/globe-depth-disk-layer.js +145 -0
- package/dist/cjs/globe/globe-layers.js +574 -0
- package/dist/cjs/globe/globe-stars-layer.js +99 -0
- package/dist/cjs/globe/globe-stars-layer.spec.js +42 -0
- package/dist/cjs/globe/globe-view.js +404 -0
- package/dist/cjs/globe/index.js +140 -0
- package/dist/cjs/globe/mvt-label-layer.js +190 -0
- package/dist/cjs/grid-layer/enhanced-cpu-grid-layer.js +116 -0
- package/dist/cjs/hexagon-layer/enhanced-hexagon-layer.js +134 -0
- package/dist/cjs/index.js +163 -0
- package/dist/cjs/layer-utils/aggregation-utils.js +181 -0
- package/dist/cjs/layer-utils/cluster-utils.js +95 -0
- package/dist/cjs/layer-utils/cpu-aggregator.js +798 -0
- package/dist/cjs/layer-utils/globe-cell-utils.js +203 -0
- package/dist/cjs/layer-utils/globe-cell-utils.spec.js +118 -0
- package/dist/cjs/layer-utils/shader-utils.js +38 -0
- package/dist/cjs/line-layer/line-layer.js +95 -0
- package/dist/cjs/raster/images.js +271 -0
- package/dist/cjs/raster/pipeline-validation-patch.js +101 -0
- package/dist/cjs/raster/raster-layer/raster-layer-shaders.js +163 -0
- package/dist/cjs/raster/raster-layer/raster-layer-webgl1.fs.js +10 -0
- package/dist/cjs/raster/raster-layer/raster-layer-webgl1.vs.js +10 -0
- package/dist/cjs/raster/raster-layer/raster-layer-webgl2.fs.js +10 -0
- package/dist/cjs/raster/raster-layer/raster-layer-webgl2.vs.js +10 -0
- package/dist/cjs/raster/raster-layer/raster-layer.js +287 -0
- package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +38 -0
- package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +10 -0
- package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +10 -0
- package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +10 -0
- package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +10 -0
- package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer.js +321 -0
- package/dist/cjs/raster/raster-processing-uniforms.js +124 -0
- package/dist/cjs/raster/types.js +6 -0
- package/dist/cjs/raster/util.js +139 -0
- package/dist/cjs/raster/webgl/color/colormap.js +45 -0
- package/dist/cjs/raster/webgl/color/filter.js +58 -0
- package/dist/cjs/raster/webgl/color/gamma-contrast.js +68 -0
- package/dist/cjs/raster/webgl/color/linear-rescale.js +35 -0
- package/dist/cjs/raster/webgl/color/saturation.js +42 -0
- package/dist/cjs/raster/webgl/color/sigmoidal-contrast.js +68 -0
- package/dist/{raster → cjs/raster}/webgl/index.js +1 -1
- package/dist/cjs/raster/webgl/pansharpen/pansharpen-brovey.js +46 -0
- package/dist/cjs/raster/webgl/spectral-indices/evi.js +26 -0
- package/dist/cjs/raster/webgl/spectral-indices/msavi.js +25 -0
- package/dist/cjs/raster/webgl/spectral-indices/normalized-difference.js +19 -0
- package/dist/cjs/raster/webgl/spectral-indices/savi.js +21 -0
- package/dist/cjs/raster/webgl/texture/combine-bands.js +65 -0
- package/dist/{raster → cjs/raster}/webgl/texture/mask.js +5 -2
- package/dist/cjs/raster/webgl/texture/reorder-bands.js +72 -0
- package/dist/cjs/raster/webgl/texture/rgba-image.js +34 -0
- package/dist/cjs/raster/webgl/types.js +6 -0
- package/dist/cjs/svg-icon-layer/scatterplot-icon-layer.js +88 -0
- package/dist/cjs/svg-icon-layer/svg-icon-layer.js +104 -0
- package/dist/cjs/wms/wms-layer.js +624 -0
- package/dist/esm/3d-building-layer/3d-building-layer.js +62 -0
- package/dist/esm/3d-building-layer/3d-building-utils.js +157 -0
- package/dist/esm/3d-building-layer/types.js +3 -0
- package/dist/esm/cluster-layer/cluster-layer.js +286 -0
- package/dist/esm/column-layer/enhanced-column-layer.js +156 -0
- package/dist/esm/deckgl-extensions/filter-arrow-layer.js +64 -0
- package/dist/esm/deckgl-extensions/filter-shader-module.js +20 -0
- package/dist/esm/globe/atmosphere-layer.js +335 -0
- package/dist/esm/globe/enhanced-multi-icon-layer.js +60 -0
- package/dist/esm/globe/globe-depth-disk-layer.js +140 -0
- package/dist/esm/globe/globe-layers.js +566 -0
- package/dist/esm/globe/globe-stars-layer.js +92 -0
- package/dist/esm/globe/globe-stars-layer.spec.js +40 -0
- package/dist/esm/globe/globe-view.js +398 -0
- package/dist/esm/globe/index.js +26 -0
- package/dist/esm/globe/mvt-label-layer.js +187 -0
- package/dist/esm/grid-layer/enhanced-cpu-grid-layer.js +112 -0
- package/dist/esm/hexagon-layer/enhanced-hexagon-layer.js +130 -0
- package/dist/esm/index.js +22 -0
- package/dist/esm/layer-utils/aggregation-utils.js +172 -0
- package/dist/esm/layer-utils/cluster-utils.js +89 -0
- package/dist/esm/layer-utils/cpu-aggregator.js +788 -0
- package/dist/esm/layer-utils/globe-cell-utils.js +197 -0
- package/dist/esm/layer-utils/globe-cell-utils.spec.js +115 -0
- package/dist/esm/layer-utils/shader-utils.js +32 -0
- package/dist/esm/line-layer/line-layer.js +91 -0
- package/dist/esm/raster/images.js +267 -0
- package/dist/esm/raster/pipeline-validation-patch.js +94 -0
- package/dist/esm/raster/raster-layer/raster-layer-shaders.js +153 -0
- package/dist/esm/raster/raster-layer/raster-layer-webgl1.fs.js +5 -0
- package/dist/esm/raster/raster-layer/raster-layer-webgl1.vs.js +5 -0
- package/dist/esm/raster/raster-layer/raster-layer-webgl2.fs.js +5 -0
- package/dist/esm/raster/raster-layer/raster-layer-webgl2.vs.js +5 -0
- package/dist/esm/raster/raster-layer/raster-layer.js +283 -0
- package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +30 -0
- package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +5 -0
- package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +5 -0
- package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +5 -0
- package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +5 -0
- package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer.js +318 -0
- package/dist/esm/raster/raster-processing-uniforms.js +118 -0
- package/dist/esm/raster/types.js +3 -0
- package/dist/esm/raster/util.js +134 -0
- package/dist/esm/raster/webgl/color/colormap.js +39 -0
- package/dist/esm/raster/webgl/color/filter.js +52 -0
- package/dist/esm/raster/webgl/color/gamma-contrast.js +62 -0
- package/dist/esm/raster/webgl/color/linear-rescale.js +29 -0
- package/dist/esm/raster/webgl/color/saturation.js +36 -0
- package/dist/esm/raster/webgl/color/sigmoidal-contrast.js +62 -0
- package/dist/esm/raster/webgl/index.js +26 -0
- package/dist/esm/raster/webgl/pansharpen/pansharpen-brovey.js +40 -0
- package/dist/esm/raster/webgl/spectral-indices/evi.js +20 -0
- package/dist/esm/raster/webgl/spectral-indices/msavi.js +19 -0
- package/dist/esm/raster/webgl/spectral-indices/normalized-difference.js +13 -0
- package/dist/esm/raster/webgl/spectral-indices/savi.js +15 -0
- package/dist/esm/raster/webgl/texture/combine-bands.js +58 -0
- package/dist/esm/raster/webgl/texture/mask.js +47 -0
- package/dist/esm/raster/webgl/texture/reorder-bands.js +65 -0
- package/dist/esm/raster/webgl/texture/rgba-image.js +28 -0
- package/dist/esm/raster/webgl/types.js +3 -0
- package/dist/esm/svg-icon-layer/scatterplot-icon-layer.js +84 -0
- package/dist/esm/svg-icon-layer/svg-icon-layer.js +101 -0
- package/dist/esm/wms/wms-layer.js +619 -0
- package/dist/globe/atmosphere-layer.d.ts +58 -0
- package/dist/globe/enhanced-multi-icon-layer.d.ts +6 -0
- package/dist/globe/globe-depth-disk-layer.d.ts +19 -0
- package/dist/globe/globe-layers.d.ts +108 -0
- package/dist/globe/globe-stars-layer.d.ts +10 -0
- package/dist/globe/globe-stars-layer.spec.d.ts +1 -0
- package/dist/globe/globe-view.d.ts +23 -0
- package/dist/globe/index.d.ts +8 -0
- package/dist/globe/mvt-label-layer.d.ts +7928 -0
- package/dist/grid-layer/enhanced-cpu-grid-layer.d.ts +138 -56
- package/dist/hexagon-layer/enhanced-hexagon-layer.d.ts +138 -56
- package/dist/index.d.ts +1 -0
- package/dist/layer-utils/cluster-utils.d.ts +6 -1
- package/dist/layer-utils/globe-cell-utils.d.ts +30 -0
- package/dist/layer-utils/globe-cell-utils.spec.d.ts +1 -0
- package/dist/raster/images.d.ts +10 -1
- package/dist/raster/raster-layer/raster-layer.d.ts +4 -0
- package/dist/raster/raster-mesh-layer/raster-mesh-layer.d.ts +4 -0
- package/dist/svg-icon-layer/scatterplot-icon-layer.d.ts +4 -1
- package/dist/wms/wms-layer.d.ts +27 -0
- package/package.json +22 -13
- package/dist/3d-building-layer/3d-building-layer.js +0 -66
- package/dist/3d-building-layer/3d-building-utils.js +0 -166
- package/dist/3d-building-layer/types.js +0 -6
- package/dist/cluster-layer/cluster-layer.js +0 -293
- package/dist/column-layer/enhanced-column-layer.js +0 -135
- package/dist/deckgl-extensions/filter-shader-module.js +0 -26
- package/dist/grid-layer/enhanced-cpu-grid-layer.js +0 -90
- package/dist/hexagon-layer/enhanced-hexagon-layer.js +0 -108
- package/dist/index.js +0 -152
- package/dist/layer-utils/aggregation-utils.js +0 -181
- package/dist/layer-utils/cluster-utils.js +0 -93
- package/dist/layer-utils/cpu-aggregator.js +0 -798
- package/dist/layer-utils/shader-utils.js +0 -38
- package/dist/line-layer/line-layer.js +0 -95
- package/dist/raster/images.js +0 -259
- package/dist/raster/pipeline-validation-patch.js +0 -101
- package/dist/raster/raster-layer/raster-layer-shaders.js +0 -163
- package/dist/raster/raster-layer/raster-layer-webgl1.fs.js +0 -10
- package/dist/raster/raster-layer/raster-layer-webgl1.vs.js +0 -10
- package/dist/raster/raster-layer/raster-layer-webgl2.fs.js +0 -10
- package/dist/raster/raster-layer/raster-layer-webgl2.vs.js +0 -10
- package/dist/raster/raster-layer/raster-layer.js +0 -237
- package/dist/raster/raster-mesh-layer/matrix.d.ts +0 -4
- package/dist/raster/raster-mesh-layer/matrix.js +0 -18
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +0 -38
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +0 -10
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +0 -10
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +0 -10
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +0 -10
- package/dist/raster/raster-mesh-layer/raster-mesh-layer.js +0 -271
- package/dist/raster/raster-processing-uniforms.js +0 -124
- package/dist/raster/types.js +0 -6
- package/dist/raster/util.js +0 -139
- package/dist/raster/webgl/color/colormap.js +0 -45
- package/dist/raster/webgl/color/filter.js +0 -58
- package/dist/raster/webgl/color/gamma-contrast.js +0 -68
- package/dist/raster/webgl/color/linear-rescale.js +0 -35
- package/dist/raster/webgl/color/saturation.js +0 -42
- package/dist/raster/webgl/color/sigmoidal-contrast.js +0 -68
- package/dist/raster/webgl/pansharpen/pansharpen-brovey.js +0 -46
- package/dist/raster/webgl/spectral-indices/evi.js +0 -26
- package/dist/raster/webgl/spectral-indices/msavi.js +0 -25
- package/dist/raster/webgl/spectral-indices/normalized-difference.js +0 -19
- package/dist/raster/webgl/spectral-indices/savi.js +0 -21
- package/dist/raster/webgl/texture/combine-bands.js +0 -65
- package/dist/raster/webgl/texture/reorder-bands.js +0 -72
- package/dist/raster/webgl/texture/rgba-image.js +0 -34
- package/dist/raster/webgl/types.js +0 -6
- package/dist/svg-icon-layer/scatterplot-icon-layer.js +0 -51
- package/dist/svg-icon-layer/svg-icon-layer.js +0 -104
- package/dist/wms/wms-layer.js +0 -424
|
@@ -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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTVEFSX0NBTlZBU19TSVpFIiwiU1RBUl9DT1VOVCIsInNlZWRlZFJhbmRvbSIsInNlZWQiLCJzIiwiVFJBTlNQQVJFTlRfUElYRUwiLCJjYWNoZWRDYW52YXMiLCJjYWNoZWREYXRhVXJsIiwiZ2VuZXJhdGVTdGFyc1RpbGUiLCJkb2N1bWVudCIsImNhbnZhcyIsImNyZWF0ZUVsZW1lbnQiLCJ3aWR0aCIsImhlaWdodCIsImN0eCIsImdldENvbnRleHQiLCJjbGVhclJlY3QiLCJyYW5kb20iLCJpIiwieCIsInkiLCJicmlnaHRuZXNzIiwiTWF0aCIsImZsb29yIiwiYWxwaGEiLCJyYWRpdXMiLCJiZWdpblBhdGgiLCJhcmMiLCJQSSIsImZpbGxTdHlsZSIsImNvbmNhdCIsImZpbGwiLCJnZXRTdGFyc1RpbGVDYW52YXMiLCJnZXRTdGFyc0JhY2tncm91bmRJbWFnZSIsInRvRGF0YVVSTCIsImRyYXdTdGFyc0JhY2tncm91bmQiLCJ0aWxlIiwicGF0dGVybiIsImNyZWF0ZVBhdHRlcm4iLCJmaWxsUmVjdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9nbG9iZS9nbG9iZS1zdGFycy1sYXllci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHRpbGVhYmxlIHN0YXItZmllbGQgdXNlZCBiZWhpbmQgdGhlIGdsb2JlLlxuICogVGhlIGxpdmUgbWFwIGFuZCB2aWRlby1leHBvcnQgcHJldmlldyBwYWludCBpdCBhcyBhIENTUyBgYmFja2dyb3VuZC1pbWFnZWBcbiAqIHdpdGggYGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXRgLiBWaWRlby1leHBvcnQgY2FwdHVyZSAod2hpY2ggb25seSByZWFkc1xuICogY2FudmFzIHBpeGVscykgdGlsZXMgdGhlIHNhbWUgaW1hZ2Ugb250byBhIDJEIGNvbnRleHQgdmlhXG4gKiBgZHJhd1N0YXJzQmFja2dyb3VuZGAuIFRoZSByZXN1bHQgaXMgZGV0ZXJtaW5pc3RpYyAoc2VlZGVkIFBSTkcpIGFuZCBjYWNoZWRcbiAqIHNvIGl0J3Mgb25seSBnZW5lcmF0ZWQgb25jZS5cbiAqL1xuXG5jb25zdCBTVEFSX0NBTlZBU19TSVpFID0gNTEyO1xuY29uc3QgU1RBUl9DT1VOVCA9IDYwMDtcblxuLy8gU2VlZGVkIHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvciAoUGFyay1NaWxsZXIpIGZvciBkZXRlcm1pbmlzbS5cbmZ1bmN0aW9uIHNlZWRlZFJhbmRvbShzZWVkOiBudW1iZXIpOiAoKSA9PiBudW1iZXIge1xuICBsZXQgcyA9IHNlZWQ7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgcyA9IChzICogMTY4MDcpICUgMjE0NzQ4MzY0NztcbiAgICByZXR1cm4gKHMgLSAxKSAvIDIxNDc0ODM2NDY7XG4gIH07XG59XG5cbi8vIFRyYW5zcGFyZW50IDF4MSBQTkcgdXNlZCBhcyBhIGZhbGxiYWNrIHdoZW4gYSBjYW52YXMgY29udGV4dCBpcyB1bmF2YWlsYWJsZVxuLy8gKFNTUiBvciB1bnN1cHBvcnRlZCBicm93c2VyKSwgc28gdGhhdCBgdXJsKC4uLilgIG5ldmVyIHJlc29sdmVzIHRvIGFuIGVtcHR5XG4vLyB2YWx1ZSB0aGF0IGNvdWxkIHRyaWdnZXIgYSByZXF1ZXN0IGZvciB0aGUgY3VycmVudCBkb2N1bWVudC5cbmNvbnN0IFRSQU5TUEFSRU5UX1BJWEVMID1cbiAgJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBUUFBQUMxSEF3Q0FBQUFDMGxFUVZSNDJtTmtZQUFBQUFZQUFqQ0IwQzhBQUFBQVNVVk9SSzVDWUlJPSc7XG5cbmxldCBjYWNoZWRDYW52YXM6IEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5sZXQgY2FjaGVkRGF0YVVybDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU3RhcnNUaWxlKCk6IEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbCB7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgY2FudmFzLndpZHRoID0gU1RBUl9DQU5WQVNfU0laRTtcbiAgY2FudmFzLmhlaWdodCA9IFNUQVJfQ0FOVkFTX1NJWkU7XG4gIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICBpZiAoIWN0eCkgcmV0dXJuIG51bGw7XG5cbiAgLy8gVHJhbnNwYXJlbnQgYmFja2dyb3VuZCBzbyBDU1MgYmFja2dyb3VuZENvbG9yIC8gY2FudmFzIGZpbGwgc2hvd3MgdGhyb3VnaFxuICBjdHguY2xlYXJSZWN0KDAsIDAsIFNUQVJfQ0FOVkFTX1NJWkUsIFNUQVJfQ0FOVkFTX1NJWkUpO1xuXG4gIGNvbnN0IHJhbmRvbSA9IHNlZWRlZFJhbmRvbSg0Mik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBTVEFSX0NPVU5UOyBpKyspIHtcbiAgICBjb25zdCB4ID0gcmFuZG9tKCkgKiBTVEFSX0NBTlZBU19TSVpFO1xuICAgIGNvbnN0IHkgPSByYW5kb20oKSAqIFNUQVJfQ0FOVkFTX1NJWkU7XG4gICAgY29uc3QgYnJpZ2h0bmVzcyA9IDE0MCArIE1hdGguZmxvb3IocmFuZG9tKCkgKiAxMTUpOyAvLyAxNDDigJMyNTVcbiAgICBjb25zdCBhbHBoYSA9IDAuNCArIHJhbmRvbSgpICogMC42OyAvLyAwLjTigJMxLjBcbiAgICBjb25zdCByYWRpdXMgPSAwLjMgKyByYW5kb20oKSAqIDEuMDsgLy8gMC4z4oCTMS4zIHB4XG5cbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4LmFyYyh4LCB5LCByYWRpdXMsIDAsIE1hdGguUEkgKiAyKTtcbiAgICBjdHguZmlsbFN0eWxlID0gYHJnYmEoJHticmlnaHRuZXNzfSwgJHticmlnaHRuZXNzfSwgJHticmlnaHRuZXNzfSwgJHthbHBoYX0pYDtcbiAgICBjdHguZmlsbCgpO1xuICB9XG5cbiAgcmV0dXJuIGNhbnZhcztcbn1cblxuZnVuY3Rpb24gZ2V0U3RhcnNUaWxlQ2FudmFzKCk6IEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbCB7XG4gIGlmIChjYWNoZWRDYW52YXMpIHJldHVybiBjYWNoZWRDYW52YXM7XG4gIGNhY2hlZENhbnZhcyA9IGdlbmVyYXRlU3RhcnNUaWxlKCk7XG4gIHJldHVybiBjYWNoZWRDYW52YXM7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGRhdGEgVVJMIG9mIGEgdGlsZWFibGUgc3Rhci1maWVsZCBpbWFnZSAoNTEyw5c1MTIgUE5HKS5cbiAqIEdlbmVyYXRlcyB0aGUgaW1hZ2Ugb25jZSBhbmQgY2FjaGVzIGl0IGZvciBzdWJzZXF1ZW50IGNhbGxzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhcnNCYWNrZ3JvdW5kSW1hZ2UoKTogc3RyaW5nIHtcbiAgaWYgKGNhY2hlZERhdGFVcmwpIHJldHVybiBjYWNoZWREYXRhVXJsO1xuXG4gIGNvbnN0IGNhbnZhcyA9IGdldFN0YXJzVGlsZUNhbnZhcygpO1xuICBpZiAoIWNhbnZhcykge1xuICAgIC8vIFNTUiAvIG1pc3NpbmcgMkQgY29udGV4dDogcmV0dXJuIGEgdHJhbnNwYXJlbnQgMXgxIHBpeGVsIHNvIHVybCgpIG5ldmVyXG4gICAgLy8gcmVzb2x2ZXMgdG8gYW4gZW1wdHkgdmFsdWUgdGhhdCBjb3VsZCB0cmlnZ2VyIGEgcmVxdWVzdCBmb3IgdGhlIGRvY3VtZW50LlxuICAgIHJldHVybiAoY2FjaGVkRGF0YVVybCA9IFRSQU5TUEFSRU5UX1BJWEVMKTtcbiAgfVxuXG4gIGNhY2hlZERhdGFVcmwgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnKTtcbiAgcmV0dXJuIGNhY2hlZERhdGFVcmw7XG59XG5cbi8qKlxuICogVGlsZSB0aGUgc3Rhci1maWVsZCBvbnRvIGEgMkQgY2FudmFzIChlLmcuIHZpZGVvLWV4cG9ydCBmcmFtZSBjYXB0dXJlKS5cbiAqIFN0YXJzIGFyZSBkcmF3biB3aXRoIGFscGhhIHNvIHRoZSBjYWxsZXIgc2hvdWxkIGZpbGwgdGhlIGJhY2tncm91bmQgY29sb3IgZmlyc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3U3RhcnNCYWNrZ3JvdW5kKFxuICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgd2lkdGg6IG51bWJlcixcbiAgaGVpZ2h0OiBudW1iZXJcbik6IHZvaWQge1xuICBjb25zdCB0aWxlID0gZ2V0U3RhcnNUaWxlQ2FudmFzKCk7XG4gIGlmICghdGlsZSB8fCB3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKSByZXR1cm47XG4gIGNvbnN0IHBhdHRlcm4gPSBjdHguY3JlYXRlUGF0dGVybih0aWxlLCAncmVwZWF0Jyk7XG4gIGlmICghcGF0dGVybikgcmV0dXJuO1xuICBjdHguZmlsbFN0eWxlID0gcGF0dGVybjtcbiAgY3R4LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQU1BLGdCQUFnQixHQUFHLEdBQUc7QUFDNUIsSUFBTUMsVUFBVSxHQUFHLEdBQUc7O0FBRXRCO0FBQ0EsU0FBU0MsWUFBWUEsQ0FBQ0MsSUFBWSxFQUFnQjtFQUNoRCxJQUFJQyxDQUFDLEdBQUdELElBQUk7RUFDWixPQUFPLFlBQU07SUFDWEMsQ0FBQyxHQUFJQSxDQUFDLEdBQUcsS0FBSyxHQUFJLFVBQVU7SUFDNUIsT0FBTyxDQUFDQSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFVBQVU7RUFDN0IsQ0FBQztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQU1DLGlCQUFpQixHQUNyQixvSEFBb0g7QUFFdEgsSUFBSUMsWUFBc0MsR0FBRyxJQUFJO0FBQ2pELElBQUlDLGFBQTRCLEdBQUcsSUFBSTtBQUV2QyxTQUFTQyxpQkFBaUJBLENBQUEsRUFBNkI7RUFDckQsSUFBSSxPQUFPQyxRQUFRLEtBQUssV0FBVyxFQUFFO0lBQ25DLE9BQU8sSUFBSTtFQUNiO0VBRUEsSUFBTUMsTUFBTSxHQUFHRCxRQUFRLENBQUNFLGFBQWEsQ0FBQyxRQUFRLENBQUM7RUFDL0NELE1BQU0sQ0FBQ0UsS0FBSyxHQUFHWixnQkFBZ0I7RUFDL0JVLE1BQU0sQ0FBQ0csTUFBTSxHQUFHYixnQkFBZ0I7RUFDaEMsSUFBTWMsR0FBRyxHQUFHSixNQUFNLENBQUNLLFVBQVUsQ0FBQyxJQUFJLENBQUM7RUFDbkMsSUFBSSxDQUFDRCxHQUFHLEVBQUUsT0FBTyxJQUFJOztFQUVyQjtFQUNBQSxHQUFHLENBQUNFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFaEIsZ0JBQWdCLEVBQUVBLGdCQUFnQixDQUFDO0VBRXZELElBQU1pQixNQUFNLEdBQUdmLFlBQVksQ0FBQyxFQUFFLENBQUM7RUFFL0IsS0FBSyxJQUFJZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHakIsVUFBVSxFQUFFaUIsQ0FBQyxFQUFFLEVBQUU7SUFDbkMsSUFBTUMsQ0FBQyxHQUFHRixNQUFNLENBQUMsQ0FBQyxHQUFHakIsZ0JBQWdCO0lBQ3JDLElBQU1vQixDQUFDLEdBQUdILE1BQU0sQ0FBQyxDQUFDLEdBQUdqQixnQkFBZ0I7SUFDckMsSUFBTXFCLFVBQVUsR0FBRyxHQUFHLEdBQUdDLElBQUksQ0FBQ0MsS0FBSyxDQUFDTixNQUFNLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDckQsSUFBTU8sS0FBSyxHQUFHLEdBQUcsR0FBR1AsTUFBTSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNwQyxJQUFNUSxNQUFNLEdBQUcsR0FBRyxHQUFHUixNQUFNLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDOztJQUVyQ0gsR0FBRyxDQUFDWSxTQUFTLENBQUMsQ0FBQztJQUNmWixHQUFHLENBQUNhLEdBQUcsQ0FBQ1IsQ0FBQyxFQUFFQyxDQUFDLEVBQUVLLE1BQU0sRUFBRSxDQUFDLEVBQUVILElBQUksQ0FBQ00sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNyQ2QsR0FBRyxDQUFDZSxTQUFTLFdBQUFDLE1BQUEsQ0FBV1QsVUFBVSxRQUFBUyxNQUFBLENBQUtULFVBQVUsUUFBQVMsTUFBQSxDQUFLVCxVQUFVLFFBQUFTLE1BQUEsQ0FBS04sS0FBSyxNQUFHO0lBQzdFVixHQUFHLENBQUNpQixJQUFJLENBQUMsQ0FBQztFQUNaO0VBRUEsT0FBT3JCLE1BQU07QUFDZjtBQUVBLFNBQVNzQixrQkFBa0JBLENBQUEsRUFBNkI7RUFDdEQsSUFBSTFCLFlBQVksRUFBRSxPQUFPQSxZQUFZO0VBQ3JDQSxZQUFZLEdBQUdFLGlCQUFpQixDQUFDLENBQUM7RUFDbEMsT0FBT0YsWUFBWTtBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVMyQix1QkFBdUJBLENBQUEsRUFBVztFQUNoRCxJQUFJMUIsYUFBYSxFQUFFLE9BQU9BLGFBQWE7RUFFdkMsSUFBTUcsTUFBTSxHQUFHc0Isa0JBQWtCLENBQUMsQ0FBQztFQUNuQyxJQUFJLENBQUN0QixNQUFNLEVBQUU7SUFDWDtJQUNBO0lBQ0EsT0FBUUgsYUFBYSxHQUFHRixpQkFBaUI7RUFDM0M7RUFFQUUsYUFBYSxHQUFHRyxNQUFNLENBQUN3QixTQUFTLENBQUMsV0FBVyxDQUFDO0VBQzdDLE9BQU8zQixhQUFhO0FBQ3RCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUzRCLG1CQUFtQkEsQ0FDakNyQixHQUE2QixFQUM3QkYsS0FBYSxFQUNiQyxNQUFjLEVBQ1I7RUFDTixJQUFNdUIsSUFBSSxHQUFHSixrQkFBa0IsQ0FBQyxDQUFDO0VBQ2pDLElBQUksQ0FBQ0ksSUFBSSxJQUFJeEIsS0FBSyxJQUFJLENBQUMsSUFBSUMsTUFBTSxJQUFJLENBQUMsRUFBRTtFQUN4QyxJQUFNd0IsT0FBTyxHQUFHdkIsR0FBRyxDQUFDd0IsYUFBYSxDQUFDRixJQUFJLEVBQUUsUUFBUSxDQUFDO0VBQ2pELElBQUksQ0FBQ0MsT0FBTyxFQUFFO0VBQ2R2QixHQUFHLENBQUNlLFNBQVMsR0FBR1EsT0FBTztFQUN2QnZCLEdBQUcsQ0FBQ3lCLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFM0IsS0FBSyxFQUFFQyxNQUFNLENBQUM7QUFDbkMiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -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+IHtcbiAgICBjb25zdCB0aWxlQ3R4ID0ge1xuICAgICAgY2xlYXJSZWN0OiBqZXN0LmZuKCksXG4gICAgICBiZWdpblBhdGg6IGplc3QuZm4oKSxcbiAgICAgIGFyYzogamVzdC5mbigpLFxuICAgICAgZmlsbDogamVzdC5mbigpLFxuICAgICAgZmlsbFN0eWxlOiAnJ1xuICAgIH07XG4gICAgY29uc3Qgb3JpZ2luYWxHZXRDb250ZXh0ID0gSFRNTENhbnZhc0VsZW1lbnQucHJvdG90eXBlLmdldENvbnRleHQ7XG4gICAgamVzdFxuICAgICAgLnNweU9uKEhUTUxDYW52YXNFbGVtZW50LnByb3RvdHlwZSwgJ2dldENvbnRleHQnKVxuICAgICAgLm1vY2tJbXBsZW1lbnRhdGlvbihmdW5jdGlvbiBnZXRDb250ZXh0KHRoaXM6IEhUTUxDYW52YXNFbGVtZW50LCB0eXBlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHR5cGUgPT09ICcyZCcpIHtcbiAgICAgICAgICByZXR1cm4gdGlsZUN0eCBhcyB1bmtub3duIGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3JpZ2luYWxHZXRDb250ZXh0LmNhbGwodGhpcywgdHlwZSk7XG4gICAgICB9KTtcblxuICAgIGNvbnN0IHBhdHRlcm4gPSB7aWQ6ICdzdGFycy1wYXR0ZXJuJ307XG4gICAgY29uc3QgZGVzdEN0eCA9IHtcbiAgICAgIGNyZWF0ZVBhdHRlcm46IGplc3QuZm4oKCkgPT4gcGF0dGVybiksXG4gICAgICBmaWxsUmVjdDogamVzdC5mbigpLFxuICAgICAgZmlsbFN0eWxlOiAnJyBhcyBzdHJpbmcgfCBDYW52YXNQYXR0ZXJuXG4gICAgfTtcblxuICAgIGRyYXdTdGFyc0JhY2tncm91bmQoZGVzdEN0eCBhcyB1bmtub3duIGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgMTI4MCwgNzIwKTtcblxuICAgIGV4cGVjdChkZXN0Q3R4LmNyZWF0ZVBhdHRlcm4pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5hbnkoSFRNTENhbnZhc0VsZW1lbnQpLCAncmVwZWF0Jyk7XG4gICAgZXhwZWN0KGRlc3RDdHguZmlsbFN0eWxlKS50b0JlKHBhdHRlcm4pO1xuICAgIGV4cGVjdChkZXN0Q3R4LmZpbGxSZWN0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgwLCAwLCAxMjgwLCA3MjApO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOztBQUdBLElBQUFBLGdCQUFBLEdBQUFDLE9BQUE7QUFIQTtBQUNBOztBQUlBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsWUFBTTtFQUNsQ0MsU0FBUyxDQUFDLFlBQU07SUFDZEMsSUFBSSxDQUFDQyxlQUFlLENBQUMsQ0FBQztFQUN4QixDQUFDLENBQUM7RUFFRkMsSUFBSSxDQUFDLG9FQUFvRSxFQUFFLFlBQU07SUFDL0UsSUFBTUMsT0FBTyxHQUFHO01BQ2RDLFNBQVMsRUFBRUosSUFBSSxDQUFDSyxFQUFFLENBQUMsQ0FBQztNQUNwQkMsU0FBUyxFQUFFTixJQUFJLENBQUNLLEVBQUUsQ0FBQyxDQUFDO01BQ3BCRSxHQUFHLEVBQUVQLElBQUksQ0FBQ0ssRUFBRSxDQUFDLENBQUM7TUFDZEcsSUFBSSxFQUFFUixJQUFJLENBQUNLLEVBQUUsQ0FBQyxDQUFDO01BQ2ZJLFNBQVMsRUFBRTtJQUNiLENBQUM7SUFDRCxJQUFNQyxrQkFBa0IsR0FBR0MsaUJBQWlCLENBQUNDLFNBQVMsQ0FBQ0MsVUFBVTtJQUNqRWIsSUFBSSxDQUNEYyxLQUFLLENBQUNILGlCQUFpQixDQUFDQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQ2hERyxrQkFBa0IsQ0FBQyxTQUFTRixVQUFVQSxDQUEwQkcsSUFBWSxFQUFFO01BQzdFLElBQUlBLElBQUksS0FBSyxJQUFJLEVBQUU7UUFDakIsT0FBT2IsT0FBTztNQUNoQjtNQUNBLE9BQU9PLGtCQUFrQixDQUFDTyxJQUFJLENBQUMsSUFBSSxFQUFFRCxJQUFJLENBQUM7SUFDNUMsQ0FBQyxDQUFDO0lBRUosSUFBTUUsT0FBTyxHQUFHO01BQUNDLEVBQUUsRUFBRTtJQUFlLENBQUM7SUFDckMsSUFBTUMsT0FBTyxHQUFHO01BQ2RDLGFBQWEsRUFBRXJCLElBQUksQ0FBQ0ssRUFBRSxDQUFDO1FBQUEsT0FBTWEsT0FBTztNQUFBLEVBQUM7TUFDckNJLFFBQVEsRUFBRXRCLElBQUksQ0FBQ0ssRUFBRSxDQUFDLENBQUM7TUFDbkJJLFNBQVMsRUFBRTtJQUNiLENBQUM7SUFFRCxJQUFBYyxvQ0FBbUIsRUFBQ0gsT0FBTyxFQUF5QyxJQUFJLEVBQUUsR0FBRyxDQUFDO0lBRTlFSSxNQUFNLENBQUNKLE9BQU8sQ0FBQ0MsYUFBYSxDQUFDLENBQUNJLG9CQUFvQixDQUFDRCxNQUFNLENBQUNFLEdBQUcsQ0FBQ2YsaUJBQWlCLENBQUMsRUFBRSxRQUFRLENBQUM7SUFDM0ZhLE1BQU0sQ0FBQ0osT0FBTyxDQUFDWCxTQUFTLENBQUMsQ0FBQ2tCLElBQUksQ0FBQ1QsT0FBTyxDQUFDO0lBQ3ZDTSxNQUFNLENBQUNKLE9BQU8sQ0FBQ0UsUUFBUSxDQUFDLENBQUNHLG9CQUFvQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQztFQUNoRSxDQUFDLENBQUM7QUFDSixDQUFDLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|