@flowmap.gl/layers 8.0.0-alpha.5 → 8.0.0-alpha.6
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/FlowCirclesLayer/FlowCirclesLayer.d.ts +3 -3
- package/dist/FlowCirclesLayer/FlowCirclesLayer.d.ts.map +1 -1
- package/dist/FlowCirclesLayer/FlowCirclesLayer.js +5 -5
- package/dist/FlowCirclesLayer/FlowCirclesLayerFragment.glsl.d.ts +1 -1
- package/dist/FlowCirclesLayer/FlowCirclesLayerFragment.glsl.d.ts.map +1 -1
- package/dist/FlowCirclesLayer/FlowCirclesLayerFragment.glsl.js +13 -10
- package/dist/FlowCirclesLayer/FlowCirclesLayerVertex.glsl.d.ts +1 -1
- package/dist/FlowCirclesLayer/FlowCirclesLayerVertex.glsl.js +2 -2
- package/dist/FlowmapLayer.d.ts +3 -2
- package/dist/FlowmapLayer.d.ts.map +1 -1
- package/dist/FlowmapLayer.js +21 -14
- package/package.json +2 -2
- package/src/FlowCirclesLayer/FlowCirclesLayer.ts +5 -5
- package/src/FlowCirclesLayer/FlowCirclesLayerFragment.glsl.ts +12 -9
- package/src/FlowCirclesLayer/FlowCirclesLayerVertex.glsl.ts +1 -1
- package/src/FlowmapLayer.ts +23 -13
|
@@ -7,7 +7,7 @@ export interface Props extends LayerProps {
|
|
|
7
7
|
opacity?: number;
|
|
8
8
|
pickable?: boolean;
|
|
9
9
|
emptyColor?: RGBA;
|
|
10
|
-
|
|
10
|
+
outlineEmptyMix?: number;
|
|
11
11
|
getColor?: (d: FlowCirclesDatum) => RGBA;
|
|
12
12
|
getPosition?: (d: FlowCirclesDatum) => [number, number];
|
|
13
13
|
getInRadius?: (d: FlowCirclesDatum) => number;
|
|
@@ -28,9 +28,9 @@ declare class FlowCirclesLayer extends Layer {
|
|
|
28
28
|
type: string;
|
|
29
29
|
value: number[];
|
|
30
30
|
};
|
|
31
|
-
|
|
31
|
+
outlineEmptyMix: {
|
|
32
32
|
type: string;
|
|
33
|
-
value: number
|
|
33
|
+
value: number;
|
|
34
34
|
};
|
|
35
35
|
getPosition: {
|
|
36
36
|
type: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlowCirclesLayer.d.ts","sourceRoot":"","sources":["../../src/FlowCirclesLayer/FlowCirclesLayer.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAC,KAAK,EAAqB,MAAM,eAAe,CAAC;AAKxD,OAAO,EAAC,0BAA0B,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AAEpC,oBAAY,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEvD,MAAM,WAAW,KAAM,SAAQ,UAAU;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,
|
|
1
|
+
{"version":3,"file":"FlowCirclesLayer.d.ts","sourceRoot":"","sources":["../../src/FlowCirclesLayer/FlowCirclesLayer.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAC,KAAK,EAAqB,MAAM,eAAe,CAAC;AAKxD,OAAO,EAAC,0BAA0B,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AAEpC,oBAAY,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEvD,MAAM,WAAW,KAAM,SAAQ,UAAU;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACzC,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,gBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxD,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,gBAAgB,KAAK,MAAM,CAAC;IAC9C,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,gBAAgB,KAAK,MAAM,CAAC;IAC/C,IAAI,EAAE,gBAAgB,EAAE,GAAG,0BAA0B,CAAC;IACtD,cAAc,CAAC,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAC,CAAC;CAC3D;AAMD,cAAM,gBAAiB,SAAQ,KAAK;IAClC,MAAM,CAAC,SAAS,SAAsB;IAEtC,MAAM,CAAC,YAAY;;;;;;;;;;;;;;;uBAI0B,gBAAgB;;;;;;;;;;;;;MAM3D;gBAGU,KAAK,EAAE,KAAK;IAIxB,UAAU;IAQV,eAAe;IA+Bf,WAAW,CAAC,EAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAC,EAAE,GAAG;IAY/C,IAAI,CAAC,EAAC,QAAQ,EAAC,EAAE,GAAG;IAWpB,SAAS,CAAC,EAAE,EAAE,qBAAqB;CAmBpC;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -22,7 +22,7 @@ import FragmentShader from './FlowCirclesLayerFragment.glsl';
|
|
|
22
22
|
import VertexShader from './FlowCirclesLayerVertex.glsl';
|
|
23
23
|
const DEFAULT_COLOR = [0, 0, 0, 255];
|
|
24
24
|
const DEFAULT_EMPTY_COLOR = [255, 255, 255, 255];
|
|
25
|
-
const
|
|
25
|
+
const DEFAULT_OUTLINE_EMPTY_MIX = 0.4;
|
|
26
26
|
class FlowCirclesLayer extends Layer {
|
|
27
27
|
// props!: Props;
|
|
28
28
|
constructor(props) {
|
|
@@ -77,10 +77,10 @@ class FlowCirclesLayer extends Layer {
|
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
79
|
draw({ uniforms }) {
|
|
80
|
-
const { emptyColor,
|
|
80
|
+
const { emptyColor, outlineEmptyMix } = this.props;
|
|
81
81
|
this.state.model
|
|
82
82
|
.setUniforms(Object.assign(Object.assign({}, uniforms), { emptyColor,
|
|
83
|
-
|
|
83
|
+
outlineEmptyMix }))
|
|
84
84
|
.draw();
|
|
85
85
|
}
|
|
86
86
|
_getModel(gl) {
|
|
@@ -103,7 +103,7 @@ FlowCirclesLayer.layerName = 'FlowCirclesLayer';
|
|
|
103
103
|
FlowCirclesLayer.defaultProps = {
|
|
104
104
|
getColor: { type: 'accessor', value: DEFAULT_COLOR },
|
|
105
105
|
emptyColor: { type: 'accessor', value: DEFAULT_EMPTY_COLOR },
|
|
106
|
-
|
|
106
|
+
outlineEmptyMix: { type: 'accessor', value: DEFAULT_OUTLINE_EMPTY_MIX },
|
|
107
107
|
getPosition: { type: 'accessor', value: (d) => d.position },
|
|
108
108
|
getInRadius: { type: 'accessor', value: 1 },
|
|
109
109
|
getOutRadius: { type: 'accessor', value: 1 },
|
|
@@ -112,4 +112,4 @@ FlowCirclesLayer.defaultProps = {
|
|
|
112
112
|
},
|
|
113
113
|
};
|
|
114
114
|
export default FlowCirclesLayer;
|
|
115
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd0NpcmNsZXNMYXllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9GbG93Q2lyY2xlc0xheWVyL0Zsb3dDaXJjbGVzTGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFFSCxPQUFPLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEQsT0FBTyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEMsT0FBTyxFQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDOUMsT0FBTyxjQUFjLE1BQU0saUNBQWlDLENBQUM7QUFDN0QsT0FBTyxZQUFZLE1BQU0sK0JBQStCLENBQUM7QUFvQnpELE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDckMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pELE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUV6RCxNQUFNLGdCQUFpQixTQUFRLEtBQUs7SUFjbEMsaUJBQWlCO0lBRWpCLFlBQVksS0FBWTtRQUN0QixLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDZixDQUFDO0lBRUQsVUFBVTtRQUNSLE9BQU8sS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUN0QixFQUFFLEVBQUUsWUFBWTtZQUNoQixFQUFFLEVBQUUsY0FBYztZQUNsQixPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDO1NBQzlCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsWUFBWSxDQUFDO1lBQ3RD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O0FBRS9CLDZCQUFZLEdBQUc7SUFDcEIsUUFBUSxFQUFFLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFDO0lBQ2xELFVBQVUsRUFBRSxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFDO0lBQzFELGlCQUFpQixFQUFFLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsMkJBQTJCLEVBQUM7SUFDekUsV0FBVyxFQUFFLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFDO0lBQzNFLFdBQVcsRUFBRSxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBQztJQUN6QyxZQUFZLEVBQUUsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUM7SUFDMUMsVUFBVSxFQUFFO1FBQ1YsU0FBUyxFQUFFLEtBQUs7S0FDakI7Q0FDRixDQUFDO0FBMEZKLGVBQWUsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjIgRmxvd21hcEJsdWVcbiAqIENvcHlyaWdodCAyMDE4LTIwMjAgVGVyYWx5dGljcywgbW9kaWZpZWQgYnkgRmxvd21hcEJsdWVcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cblxuaW1wb3J0IHtMYXllciwgcGlja2luZywgcHJvamVjdDMyfSBmcm9tICdAZGVjay5nbC9jb3JlJztcbmltcG9ydCBHTCBmcm9tICdAbHVtYS5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtHZW9tZXRyeSwgTW9kZWx9IGZyb20gJ0BsdW1hLmdsL2NvcmUnO1xuaW1wb3J0IEZyYWdtZW50U2hhZGVyIGZyb20gJy4vRmxvd0NpcmNsZXNMYXllckZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IFZlcnRleFNoYWRlciBmcm9tICcuL0Zsb3dDaXJjbGVzTGF5ZXJWZXJ0ZXguZ2xzbCc7XG5pbXBvcnQge0Zsb3dDaXJjbGVzTGF5ZXJBdHRyaWJ1dGVzLCBSR0JBfSBmcm9tICdAZmxvd21hcC5nbC9kYXRhJztcbmltcG9ydCB7TGF5ZXJQcm9wc30gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBGbG93Q2lyY2xlc0RhdHVtID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvcHMgZXh0ZW5kcyBMYXllclByb3BzIHtcbiAgaWQ6IHN0cmluZztcbiAgb3BhY2l0eT86IG51bWJlcjtcbiAgcGlja2FibGU/OiBib29sZWFuO1xuICBlbXB0eUNvbG9yPzogUkdCQTtcbiAgZW1wdHlPdXRsaW5lQ29sb3I/OiBSR0JBO1xuICBnZXRDb2xvcj86IChkOiBGbG93Q2lyY2xlc0RhdHVtKSA9PiBSR0JBO1xuICBnZXRQb3NpdGlvbj86IChkOiBGbG93Q2lyY2xlc0RhdHVtKSA9PiBbbnVtYmVyLCBudW1iZXJdO1xuICBnZXRJblJhZGl1cz86IChkOiBGbG93Q2lyY2xlc0RhdHVtKSA9PiBudW1iZXI7XG4gIGdldE91dFJhZGl1cz86IChkOiBGbG93Q2lyY2xlc0RhdHVtKSA9PiBudW1iZXI7XG4gIGRhdGE6IEZsb3dDaXJjbGVzRGF0dW1bXSB8IEZsb3dDaXJjbGVzTGF5ZXJBdHRyaWJ1dGVzO1xuICB1cGRhdGVUcmlnZ2Vycz86IHtba2V5OiBzdHJpbmddOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn07XG59XG5cbmNvbnN0IERFRkFVTFRfQ09MT1IgPSBbMCwgMCwgMCwgMjU1XTtcbmNvbnN0IERFRkFVTFRfRU1QVFlfQ09MT1IgPSBbMjU1LCAyNTUsIDI1NSwgMjU1XTtcbmNvbnN0IERFRkFVTFRfRU1QVFlfT1VUTElORV9DT0xPUiA9IFsxODAsIDE4MCwgMTgwLCAyNTVdO1xuXG5jbGFzcyBGbG93Q2lyY2xlc0xheWVyIGV4dGVuZHMgTGF5ZXIge1xuICBzdGF0aWMgbGF5ZXJOYW1lID0gJ0Zsb3dDaXJjbGVzTGF5ZXInO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgZ2V0Q29sb3I6IHt0eXBlOiAnYWNjZXNzb3InLCB2YWx1ZTogREVGQVVMVF9DT0xPUn0sXG4gICAgZW1wdHlDb2xvcjoge3R5cGU6ICdhY2Nlc3NvcicsIHZhbHVlOiBERUZBVUxUX0VNUFRZX0NPTE9SfSxcbiAgICBlbXB0eU91dGxpbmVDb2xvcjoge3R5cGU6ICdhY2Nlc3NvcicsIHZhbHVlOiBERUZBVUxUX0VNUFRZX09VVExJTkVfQ09MT1J9LFxuICAgIGdldFBvc2l0aW9uOiB7dHlwZTogJ2FjY2Vzc29yJywgdmFsdWU6IChkOiBGbG93Q2lyY2xlc0RhdHVtKSA9PiBkLnBvc2l0aW9ufSxcbiAgICBnZXRJblJhZGl1czoge3R5cGU6ICdhY2Nlc3NvcicsIHZhbHVlOiAxfSxcbiAgICBnZXRPdXRSYWRpdXM6IHt0eXBlOiAnYWNjZXNzb3InLCB2YWx1ZTogMX0sXG4gICAgcGFyYW1ldGVyczoge1xuICAgICAgZGVwdGhUZXN0OiBmYWxzZSxcbiAgICB9LFxuICB9O1xuICAvLyBwcm9wcyE6IFByb3BzO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuXG4gIGdldFNoYWRlcnMoKSB7XG4gICAgcmV0dXJuIHN1cGVyLmdldFNoYWRlcnMoe1xuICAgICAgdnM6IFZlcnRleFNoYWRlcixcbiAgICAgIGZzOiBGcmFnbWVudFNoYWRlcixcbiAgICAgIG1vZHVsZXM6IFtwcm9qZWN0MzIsIHBpY2tpbmddLFxuICAgIH0pO1xuICB9XG5cbiAgaW5pdGlhbGl6ZVN0YXRlKCkge1xuICAgIHRoaXMuZ2V0QXR0cmlidXRlTWFuYWdlcigpLmFkZEluc3RhbmNlZCh7XG4gICAgICBpbnN0YW5jZVBvc2l0aW9uczoge1xuICAgICAgICBzaXplOiAzLFxuICAgICAgICB0eXBlOiBHTC5ET1VCTEUsXG4gICAgICAgIGZwNjQ6IHRoaXMudXNlNjRiaXRQb3NpdGlvbnMoKSxcbiAgICAgICAgdHJhbnNpdGlvbjogdHJ1ZSxcbiAgICAgICAgYWNjZXNzb3I6ICdnZXRQb3NpdGlvbicsXG4gICAgICB9LFxuICAgICAgaW5zdGFuY2VJblJhZGl1czoge1xuICAgICAgICBzaXplOiAxLFxuICAgICAgICB0cmFuc2l0aW9uOiB0cnVlLFxuICAgICAgICBhY2Nlc3NvcjogJ2dldEluUmFkaXVzJyxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiAxLFxuICAgICAgfSxcbiAgICAgIGluc3RhbmNlT3V0UmFkaXVzOiB7XG4gICAgICAgIHNpemU6IDEsXG4gICAgICAgIHRyYW5zaXRpb246IHRydWUsXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0T3V0UmFkaXVzJyxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiAxLFxuICAgICAgfSxcbiAgICAgIGluc3RhbmNlQ29sb3JzOiB7XG4gICAgICAgIHNpemU6IDQsXG4gICAgICAgIHRyYW5zaXRpb246IHRydWUsXG4gICAgICAgIHR5cGU6IEdMLlVOU0lHTkVEX0JZVEUsXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0Q29sb3InLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IERFRkFVTFRfQ09MT1IsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlU3RhdGUoe3Byb3BzLCBvbGRQcm9wcywgY2hhbmdlRmxhZ3N9OiBhbnkpIHtcbiAgICBzdXBlci51cGRhdGVTdGF0ZSh7cHJvcHMsIG9sZFByb3BzLCBjaGFuZ2VGbGFnc30pO1xuICAgIGlmIChjaGFuZ2VGbGFncy5leHRlbnNpb25zQ2hhbmdlZCkge1xuICAgICAgY29uc3Qge2dsfSA9IHRoaXMuY29udGV4dDtcbiAgICAgIGlmICh0aGlzLnN0YXRlLm1vZGVsKSB7XG4gICAgICAgIHRoaXMuc3RhdGUubW9kZWwuZGVsZXRlKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKHttb2RlbDogdGhpcy5fZ2V0TW9kZWwoZ2wpfSk7XG4gICAgICB0aGlzLmdldEF0dHJpYnV0ZU1hbmFnZXIoKS5pbnZhbGlkYXRlQWxsKCk7XG4gICAgfVxuICB9XG5cbiAgZHJhdyh7dW5pZm9ybXN9OiBhbnkpIHtcbiAgICBjb25zdCB7ZW1wdHlDb2xvciwgZW1wdHlPdXRsaW5lQ29sb3J9ID0gdGhpcy5wcm9wcztcbiAgICB0aGlzLnN0YXRlLm1vZGVsXG4gICAgICAuc2V0VW5pZm9ybXMoe1xuICAgICAgICAuLi51bmlmb3JtcyxcbiAgICAgICAgZW1wdHlDb2xvcixcbiAgICAgICAgZW1wdHlPdXRsaW5lQ29sb3IsXG4gICAgICB9KVxuICAgICAgLmRyYXcoKTtcbiAgfVxuXG4gIF9nZXRNb2RlbChnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0KSB7XG4gICAgLy8gYSBzcXVhcmUgdGhhdCBtaW5pbWFsbHkgY292ZXIgdGhlIHVuaXQgY2lyY2xlXG4gICAgY29uc3QgcG9zaXRpb25zID0gWy0xLCAtMSwgMCwgMSwgLTEsIDAsIDEsIDEsIDAsIC0xLCAxLCAwXTtcblxuICAgIHJldHVybiBuZXcgTW9kZWwoXG4gICAgICBnbCxcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5nZXRTaGFkZXJzKCksIHtcbiAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgIGdlb21ldHJ5OiBuZXcgR2VvbWV0cnkoe1xuICAgICAgICAgIGRyYXdNb2RlOiBHTC5UUklBTkdMRV9GQU4sXG4gICAgICAgICAgdmVydGV4Q291bnQ6IDQsXG4gICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgcG9zaXRpb25zOiB7c2l6ZTogMywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkocG9zaXRpb25zKX0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICAgIGlzSW5zdGFuY2VkOiB0cnVlLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBGbG93Q2lyY2xlc0xheWVyO1xuIl19
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd0NpcmNsZXNMYXllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9GbG93Q2lyY2xlc0xheWVyL0Zsb3dDaXJjbGVzTGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFFSCxPQUFPLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEQsT0FBTyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEMsT0FBTyxFQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDOUMsT0FBTyxjQUFjLE1BQU0saUNBQWlDLENBQUM7QUFDN0QsT0FBTyxZQUFZLE1BQU0sK0JBQStCLENBQUM7QUFvQnpELE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDckMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pELE1BQU0seUJBQXlCLEdBQUcsR0FBRyxDQUFDO0FBRXRDLE1BQU0sZ0JBQWlCLFNBQVEsS0FBSztJQWNsQyxpQkFBaUI7SUFFakIsWUFBWSxLQUFZO1FBQ3RCLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNmLENBQUM7SUFFRCxVQUFVO1FBQ1IsT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFDO1lBQ3RCLEVBQUUsRUFBRSxZQUFZO1lBQ2hCLEVBQUUsRUFBRSxjQUFjO1lBQ2xCLE9BQU8sRUFBRSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUM7U0FDOUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxZQUFZLENBQUM7WUFDdEMsaUJBQWlCLEVBQUU7Z0JBQ2pCLElBQUksRUFBRSxDQUFDO2dCQUNQ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QUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFDO0lBQ2xELFVBQVUsRUFBRSxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFDO0lBQzFELGVBQWUsRUFBRSxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLHlCQUF5QixFQUFDO0lBQ3JFLFdBQVcsRUFBRSxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBQztJQUMzRSxXQUFXLEVBQUUsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUM7SUFDekMsWUFBWSxFQUFFLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFDO0lBQzFDLFVBQVUsRUFBRTtRQUNWLFNBQVMsRUFBRSxLQUFLO0tBQ2pCO0NBQ0YsQ0FBQztBQTBGSixlQUFlLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDIyIEZsb3dtYXBCbHVlXG4gKiBDb3B5cmlnaHQgMjAxOC0yMDIwIFRlcmFseXRpY3MsIG1vZGlmaWVkIGJ5IEZsb3dtYXBCbHVlXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICovXG5cbmltcG9ydCB7TGF5ZXIsIHBpY2tpbmcsIHByb2plY3QzMn0gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG5pbXBvcnQgR0wgZnJvbSAnQGx1bWEuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7R2VvbWV0cnksIE1vZGVsfSBmcm9tICdAbHVtYS5nbC9jb3JlJztcbmltcG9ydCBGcmFnbWVudFNoYWRlciBmcm9tICcuL0Zsb3dDaXJjbGVzTGF5ZXJGcmFnbWVudC5nbHNsJztcbmltcG9ydCBWZXJ0ZXhTaGFkZXIgZnJvbSAnLi9GbG93Q2lyY2xlc0xheWVyVmVydGV4Lmdsc2wnO1xuaW1wb3J0IHtGbG93Q2lyY2xlc0xheWVyQXR0cmlidXRlcywgUkdCQX0gZnJvbSAnQGZsb3dtYXAuZ2wvZGF0YSc7XG5pbXBvcnQge0xheWVyUHJvcHN9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgRmxvd0NpcmNsZXNEYXR1bSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgaW50ZXJmYWNlIFByb3BzIGV4dGVuZHMgTGF5ZXJQcm9wcyB7XG4gIGlkOiBzdHJpbmc7XG4gIG9wYWNpdHk/OiBudW1iZXI7XG4gIHBpY2thYmxlPzogYm9vbGVhbjtcbiAgZW1wdHlDb2xvcj86IFJHQkE7XG4gIG91dGxpbmVFbXB0eU1peD86IG51bWJlcjtcbiAgZ2V0Q29sb3I/OiAoZDogRmxvd0NpcmNsZXNEYXR1bSkgPT4gUkdCQTtcbiAgZ2V0UG9zaXRpb24/OiAoZDogRmxvd0NpcmNsZXNEYXR1bSkgPT4gW251bWJlciwgbnVtYmVyXTtcbiAgZ2V0SW5SYWRpdXM/OiAoZDogRmxvd0NpcmNsZXNEYXR1bSkgPT4gbnVtYmVyO1xuICBnZXRPdXRSYWRpdXM/OiAoZDogRmxvd0NpcmNsZXNEYXR1bSkgPT4gbnVtYmVyO1xuICBkYXRhOiBGbG93Q2lyY2xlc0RhdHVtW10gfCBGbG93Q2lyY2xlc0xheWVyQXR0cmlidXRlcztcbiAgdXBkYXRlVHJpZ2dlcnM/OiB7W2tleTogc3RyaW5nXTogUmVjb3JkPHN0cmluZywgdW5rbm93bj59O1xufVxuXG5jb25zdCBERUZBVUxUX0NPTE9SID0gWzAsIDAsIDAsIDI1NV07XG5jb25zdCBERUZBVUxUX0VNUFRZX0NPTE9SID0gWzI1NSwgMjU1LCAyNTUsIDI1NV07XG5jb25zdCBERUZBVUxUX09VVExJTkVfRU1QVFlfTUlYID0gMC40O1xuXG5jbGFzcyBGbG93Q2lyY2xlc0xheWVyIGV4dGVuZHMgTGF5ZXIge1xuICBzdGF0aWMgbGF5ZXJOYW1lID0gJ0Zsb3dDaXJjbGVzTGF5ZXInO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgZ2V0Q29sb3I6IHt0eXBlOiAnYWNjZXNzb3InLCB2YWx1ZTogREVGQVVMVF9DT0xPUn0sXG4gICAgZW1wdHlDb2xvcjoge3R5cGU6ICdhY2Nlc3NvcicsIHZhbHVlOiBERUZBVUxUX0VNUFRZX0NPTE9SfSxcbiAgICBvdXRsaW5lRW1wdHlNaXg6IHt0eXBlOiAnYWNjZXNzb3InLCB2YWx1ZTogREVGQVVMVF9PVVRMSU5FX0VNUFRZX01JWH0sXG4gICAgZ2V0UG9zaXRpb246IHt0eXBlOiAnYWNjZXNzb3InLCB2YWx1ZTogKGQ6IEZsb3dDaXJjbGVzRGF0dW0pID0+IGQucG9zaXRpb259LFxuICAgIGdldEluUmFkaXVzOiB7dHlwZTogJ2FjY2Vzc29yJywgdmFsdWU6IDF9LFxuICAgIGdldE91dFJhZGl1czoge3R5cGU6ICdhY2Nlc3NvcicsIHZhbHVlOiAxfSxcbiAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICBkZXB0aFRlc3Q6IGZhbHNlLFxuICAgIH0sXG4gIH07XG4gIC8vIHByb3BzITogUHJvcHM7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG5cbiAgZ2V0U2hhZGVycygpIHtcbiAgICByZXR1cm4gc3VwZXIuZ2V0U2hhZGVycyh7XG4gICAgICB2czogVmVydGV4U2hhZGVyLFxuICAgICAgZnM6IEZyYWdtZW50U2hhZGVyLFxuICAgICAgbW9kdWxlczogW3Byb2plY3QzMiwgcGlja2luZ10sXG4gICAgfSk7XG4gIH1cblxuICBpbml0aWFsaXplU3RhdGUoKSB7XG4gICAgdGhpcy5nZXRBdHRyaWJ1dGVNYW5hZ2VyKCkuYWRkSW5zdGFuY2VkKHtcbiAgICAgIGluc3RhbmNlUG9zaXRpb25zOiB7XG4gICAgICAgIHNpemU6IDMsXG4gICAgICAgIHR5cGU6IEdMLkRPVUJMRSxcbiAgICAgICAgZnA2NDogdGhpcy51c2U2NGJpdFBvc2l0aW9ucygpLFxuICAgICAgICB0cmFuc2l0aW9uOiB0cnVlLFxuICAgICAgICBhY2Nlc3NvcjogJ2dldFBvc2l0aW9uJyxcbiAgICAgIH0sXG4gICAgICBpbnN0YW5jZUluUmFkaXVzOiB7XG4gICAgICAgIHNpemU6IDEsXG4gICAgICAgIHRyYW5zaXRpb246IHRydWUsXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0SW5SYWRpdXMnLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IDEsXG4gICAgICB9LFxuICAgICAgaW5zdGFuY2VPdXRSYWRpdXM6IHtcbiAgICAgICAgc2l6ZTogMSxcbiAgICAgICAgdHJhbnNpdGlvbjogdHJ1ZSxcbiAgICAgICAgYWNjZXNzb3I6ICdnZXRPdXRSYWRpdXMnLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IDEsXG4gICAgICB9LFxuICAgICAgaW5zdGFuY2VDb2xvcnM6IHtcbiAgICAgICAgc2l6ZTogNCxcbiAgICAgICAgdHJhbnNpdGlvbjogdHJ1ZSxcbiAgICAgICAgdHlwZTogR0wuVU5TSUdORURfQllURSxcbiAgICAgICAgYWNjZXNzb3I6ICdnZXRDb2xvcicsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9DT0xPUixcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVTdGF0ZSh7cHJvcHMsIG9sZFByb3BzLCBjaGFuZ2VGbGFnc306IGFueSkge1xuICAgIHN1cGVyLnVwZGF0ZVN0YXRlKHtwcm9wcywgb2xkUHJvcHMsIGNoYW5nZUZsYWdzfSk7XG4gICAgaWYgKGNoYW5nZUZsYWdzLmV4dGVuc2lvbnNDaGFuZ2VkKSB7XG4gICAgICBjb25zdCB7Z2x9ID0gdGhpcy5jb250ZXh0O1xuICAgICAgaWYgKHRoaXMuc3RhdGUubW9kZWwpIHtcbiAgICAgICAgdGhpcy5zdGF0ZS5tb2RlbC5kZWxldGUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUoe21vZGVsOiB0aGlzLl9nZXRNb2RlbChnbCl9KTtcbiAgICAgIHRoaXMuZ2V0QXR0cmlidXRlTWFuYWdlcigpLmludmFsaWRhdGVBbGwoKTtcbiAgICB9XG4gIH1cblxuICBkcmF3KHt1bmlmb3Jtc306IGFueSkge1xuICAgIGNvbnN0IHtlbXB0eUNvbG9yLCBvdXRsaW5lRW1wdHlNaXh9ID0gdGhpcy5wcm9wcztcbiAgICB0aGlzLnN0YXRlLm1vZGVsXG4gICAgICAuc2V0VW5pZm9ybXMoe1xuICAgICAgICAuLi51bmlmb3JtcyxcbiAgICAgICAgZW1wdHlDb2xvcixcbiAgICAgICAgb3V0bGluZUVtcHR5TWl4LFxuICAgICAgfSlcbiAgICAgIC5kcmF3KCk7XG4gIH1cblxuICBfZ2V0TW9kZWwoZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dCkge1xuICAgIC8vIGEgc3F1YXJlIHRoYXQgbWluaW1hbGx5IGNvdmVyIHRoZSB1bml0IGNpcmNsZVxuICAgIGNvbnN0IHBvc2l0aW9ucyA9IFstMSwgLTEsIDAsIDEsIC0xLCAwLCAxLCAxLCAwLCAtMSwgMSwgMF07XG5cbiAgICByZXR1cm4gbmV3IE1vZGVsKFxuICAgICAgZ2wsXG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuZ2V0U2hhZGVycygpLCB7XG4gICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICBnZW9tZXRyeTogbmV3IEdlb21ldHJ5KHtcbiAgICAgICAgICBkcmF3TW9kZTogR0wuVFJJQU5HTEVfRkFOLFxuICAgICAgICAgIHZlcnRleENvdW50OiA0LFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgIHBvc2l0aW9uczoge3NpemU6IDMsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KHBvc2l0aW9ucyl9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgICBpc0luc3RhbmNlZDogdHJ1ZSxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRmxvd0NpcmNsZXNMYXllcjtcbiJdfQ==
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
declare const _default: "#define SHADER_NAME flow-circles-layer-fragment-shader\n#define SOFT_OUTLINE 0.
|
|
1
|
+
declare const _default: "#define SHADER_NAME flow-circles-layer-fragment-shader\n#define SOFT_OUTLINE 0.05\n#define EPS 0.05\nprecision highp float;\n\nuniform vec4 emptyColor;\nuniform float outlineEmptyMix;\n\nvarying vec4 vColor;\nvarying vec2 unitPosition;\nvarying float unitInRadius;\nvarying float unitOutRadius;\n\nfloat when_gt(float x, float y) {\n return max(sign(x - y), 0.0);\n}\n\nvoid main(void) {\n geometry.uv = unitPosition;\n float distToCenter = length(unitPosition);\n if (distToCenter > 1.0) {\n discard;\n }\n\n // See https://stackoverflow.com/questions/47285778\n vec4 ringColor = mix(\n emptyColor / 255., vColor,\n when_gt(unitInRadius, unitOutRadius)\n );\n vec4 outlineColor = mix(\n mix(vColor, emptyColor / 255., outlineEmptyMix),\n vColor,\n when_gt(unitInRadius, unitOutRadius)\n );\n \n float innerR = min(unitInRadius, unitOutRadius) * (1.0 - SOFT_OUTLINE);\n \n // Inner circle\n float step2 = innerR - 2.0 * EPS; \n float step3 = innerR - EPS;\n \n // Ring\n float step4 = innerR;\n // float step5 = 1.0 - SOFT_OUTLINE - EPS;\n // float step6 = 1.0 - SOFT_OUTLINE;\n float step5 = 1.0 - 5.0 * EPS;\n float step6 = 1.0;\n \n gl_FragColor = vColor;\n gl_FragColor = mix(gl_FragColor, emptyColor / 255., smoothstep(step2, step3, distToCenter));\n gl_FragColor = mix(gl_FragColor, ringColor, smoothstep(step3, step4, distToCenter));\n gl_FragColor = mix(gl_FragColor, outlineColor, smoothstep(step5, step6, distToCenter));\n // gl_FragColor = mix(gl_FragColor, emptyColor / 255., smoothstep(step6, 1.0, distToCenter));\n gl_FragColor.a *= smoothstep(0.0, SOFT_OUTLINE, 1.0 - distToCenter);\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n";
|
|
2
2
|
export default _default;
|
|
3
3
|
//# sourceMappingURL=FlowCirclesLayerFragment.glsl.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlowCirclesLayerFragment.glsl.d.ts","sourceRoot":"","sources":["../../src/FlowCirclesLayer/FlowCirclesLayerFragment.glsl.ts"],"names":[],"mappings":";AAiBA,
|
|
1
|
+
{"version":3,"file":"FlowCirclesLayerFragment.glsl.d.ts","sourceRoot":"","sources":["../../src/FlowCirclesLayer/FlowCirclesLayerFragment.glsl.ts"],"names":[],"mappings":";AAiBA,wBAyDE"}
|
|
@@ -17,12 +17,12 @@
|
|
|
17
17
|
*/
|
|
18
18
|
export default `\
|
|
19
19
|
#define SHADER_NAME flow-circles-layer-fragment-shader
|
|
20
|
-
#define SOFT_OUTLINE 0.
|
|
20
|
+
#define SOFT_OUTLINE 0.05
|
|
21
21
|
#define EPS 0.05
|
|
22
22
|
precision highp float;
|
|
23
23
|
|
|
24
24
|
uniform vec4 emptyColor;
|
|
25
|
-
uniform
|
|
25
|
+
uniform float outlineEmptyMix;
|
|
26
26
|
|
|
27
27
|
varying vec4 vColor;
|
|
28
28
|
varying vec2 unitPosition;
|
|
@@ -46,28 +46,31 @@ void main(void) {
|
|
|
46
46
|
when_gt(unitInRadius, unitOutRadius)
|
|
47
47
|
);
|
|
48
48
|
vec4 outlineColor = mix(
|
|
49
|
-
|
|
49
|
+
mix(vColor, emptyColor / 255., outlineEmptyMix),
|
|
50
|
+
vColor,
|
|
50
51
|
when_gt(unitInRadius, unitOutRadius)
|
|
51
52
|
);
|
|
52
53
|
|
|
53
54
|
float innerR = min(unitInRadius, unitOutRadius) * (1.0 - SOFT_OUTLINE);
|
|
54
55
|
|
|
55
56
|
// Inner circle
|
|
56
|
-
float step2 = innerR - EPS;
|
|
57
|
-
float step3 = innerR;
|
|
57
|
+
float step2 = innerR - 2.0 * EPS;
|
|
58
|
+
float step3 = innerR - EPS;
|
|
58
59
|
|
|
59
60
|
// Ring
|
|
60
|
-
float step4 = innerR
|
|
61
|
-
float step5 = 1.0 - SOFT_OUTLINE - EPS
|
|
62
|
-
float step6 = 1.0 - SOFT_OUTLINE;
|
|
61
|
+
float step4 = innerR;
|
|
62
|
+
// float step5 = 1.0 - SOFT_OUTLINE - EPS;
|
|
63
|
+
// float step6 = 1.0 - SOFT_OUTLINE;
|
|
64
|
+
float step5 = 1.0 - 5.0 * EPS;
|
|
65
|
+
float step6 = 1.0;
|
|
63
66
|
|
|
64
67
|
gl_FragColor = vColor;
|
|
65
68
|
gl_FragColor = mix(gl_FragColor, emptyColor / 255., smoothstep(step2, step3, distToCenter));
|
|
66
69
|
gl_FragColor = mix(gl_FragColor, ringColor, smoothstep(step3, step4, distToCenter));
|
|
67
70
|
gl_FragColor = mix(gl_FragColor, outlineColor, smoothstep(step5, step6, distToCenter));
|
|
68
|
-
gl_FragColor = mix(gl_FragColor, emptyColor / 255., smoothstep(step6, 1.0, distToCenter));
|
|
71
|
+
// gl_FragColor = mix(gl_FragColor, emptyColor / 255., smoothstep(step6, 1.0, distToCenter));
|
|
69
72
|
gl_FragColor.a *= smoothstep(0.0, SOFT_OUTLINE, 1.0 - distToCenter);
|
|
70
73
|
DECKGL_FILTER_COLOR(gl_FragColor, geometry);
|
|
71
74
|
}
|
|
72
75
|
`;
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd0NpcmNsZXNMYXllckZyYWdtZW50Lmdsc2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvRmxvd0NpcmNsZXNMYXllci9GbG93Q2lyY2xlc0xheWVyRnJhZ21lbnQuZ2xzbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILGVBQWU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXlEZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDIyIEZsb3dtYXBCbHVlXG4gKiBDb3B5cmlnaHQgMjAxOC0yMDIwIFRlcmFseXRpY3MsIG1vZGlmaWVkIGJ5IEZsb3dtYXBCbHVlXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICovXG5leHBvcnQgZGVmYXVsdCBgXFxcbiNkZWZpbmUgU0hBREVSX05BTUUgZmxvdy1jaXJjbGVzLWxheWVyLWZyYWdtZW50LXNoYWRlclxuI2RlZmluZSBTT0ZUX09VVExJTkUgMC4wNVxuI2RlZmluZSBFUFMgMC4wNVxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuXG51bmlmb3JtIHZlYzQgZW1wdHlDb2xvcjtcbnVuaWZvcm0gZmxvYXQgb3V0bGluZUVtcHR5TWl4O1xuXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xudmFyeWluZyB2ZWMyIHVuaXRQb3NpdGlvbjtcbnZhcnlpbmcgZmxvYXQgdW5pdEluUmFkaXVzO1xudmFyeWluZyBmbG9hdCB1bml0T3V0UmFkaXVzO1xuXG5mbG9hdCB3aGVuX2d0KGZsb2F0IHgsIGZsb2F0IHkpIHtcbiAgcmV0dXJuIG1heChzaWduKHggLSB5KSwgMC4wKTtcbn1cblxudm9pZCBtYWluKHZvaWQpIHtcbiAgZ2VvbWV0cnkudXYgPSB1bml0UG9zaXRpb247XG4gIGZsb2F0IGRpc3RUb0NlbnRlciA9IGxlbmd0aCh1bml0UG9zaXRpb24pO1xuICBpZiAoZGlzdFRvQ2VudGVyID4gMS4wKSB7XG4gICAgZGlzY2FyZDtcbiAgfVxuXG4gIC8vIFNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80NzI4NTc3OFxuICB2ZWM0IHJpbmdDb2xvciA9IG1peChcbiAgICBlbXB0eUNvbG9yIC8gMjU1LiwgdkNvbG9yLFxuICAgIHdoZW5fZ3QodW5pdEluUmFkaXVzLCB1bml0T3V0UmFkaXVzKVxuICApO1xuICB2ZWM0IG91dGxpbmVDb2xvciA9IG1peChcbiAgICBtaXgodkNvbG9yLCBlbXB0eUNvbG9yIC8gMjU1Liwgb3V0bGluZUVtcHR5TWl4KSxcbiAgICB2Q29sb3IsXG4gICAgd2hlbl9ndCh1bml0SW5SYWRpdXMsIHVuaXRPdXRSYWRpdXMpXG4gICk7XG4gIFxuICBmbG9hdCBpbm5lclIgPSBtaW4odW5pdEluUmFkaXVzLCB1bml0T3V0UmFkaXVzKSAqICgxLjAgLSBTT0ZUX09VVExJTkUpO1xuICBcbiAgLy8gSW5uZXIgY2lyY2xlXG4gIGZsb2F0IHN0ZXAyID0gaW5uZXJSIC0gMi4wICogRVBTOyBcbiAgZmxvYXQgc3RlcDMgPSBpbm5lclIgLSBFUFM7XG4gIFxuICAvLyBSaW5nXG4gIGZsb2F0IHN0ZXA0ID0gaW5uZXJSO1xuICAvLyBmbG9hdCBzdGVwNSA9IDEuMCAtIFNPRlRfT1VUTElORSAtIEVQUztcbiAgLy8gZmxvYXQgc3RlcDYgPSAxLjAgLSBTT0ZUX09VVExJTkU7XG4gIGZsb2F0IHN0ZXA1ID0gMS4wIC0gNS4wICogRVBTO1xuICBmbG9hdCBzdGVwNiA9IDEuMDtcbiAgXG4gIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjtcbiAgZ2xfRnJhZ0NvbG9yID0gbWl4KGdsX0ZyYWdDb2xvciwgZW1wdHlDb2xvciAvIDI1NS4sIHNtb290aHN0ZXAoc3RlcDIsIHN0ZXAzLCBkaXN0VG9DZW50ZXIpKTtcbiAgZ2xfRnJhZ0NvbG9yID0gbWl4KGdsX0ZyYWdDb2xvciwgcmluZ0NvbG9yLCBzbW9vdGhzdGVwKHN0ZXAzLCBzdGVwNCwgZGlzdFRvQ2VudGVyKSk7XG4gIGdsX0ZyYWdDb2xvciA9IG1peChnbF9GcmFnQ29sb3IsIG91dGxpbmVDb2xvciwgc21vb3Roc3RlcChzdGVwNSwgc3RlcDYsIGRpc3RUb0NlbnRlcikpO1xuICAvLyBnbF9GcmFnQ29sb3IgPSBtaXgoZ2xfRnJhZ0NvbG9yLCBlbXB0eUNvbG9yIC8gMjU1Liwgc21vb3Roc3RlcChzdGVwNiwgMS4wLCBkaXN0VG9DZW50ZXIpKTtcbiAgZ2xfRnJhZ0NvbG9yLmEgKj0gc21vb3Roc3RlcCgwLjAsIFNPRlRfT1VUTElORSwgMS4wIC0gZGlzdFRvQ2VudGVyKTtcbiAgREVDS0dMX0ZJTFRFUl9DT0xPUihnbF9GcmFnQ29sb3IsIGdlb21ldHJ5KTtcbn1cbmA7XG4iXX0=
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
declare const _default: "#define SHADER_NAME flow-circles-layer-vertex-shader\n#define radiusScale 100\n\nattribute vec3 positions;\n\nattribute vec3 instancePositions;\nattribute vec3 instancePositions64Low;\nattribute float instanceInRadius;\nattribute float instanceOutRadius;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\n\nuniform float opacity;\nuniform vec4 emptyColor;\nuniform
|
|
1
|
+
declare const _default: "#define SHADER_NAME flow-circles-layer-vertex-shader\n#define radiusScale 100\n\nattribute vec3 positions;\n\nattribute vec3 instancePositions;\nattribute vec3 instancePositions64Low;\nattribute float instanceInRadius;\nattribute float instanceOutRadius;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\n\nuniform float opacity;\nuniform vec4 emptyColor;\nuniform float outlineEmptyMix;\n\nvarying vec4 vColor;\nvarying vec2 unitPosition;\nvarying float unitInRadius;\nvarying float unitOutRadius;\n\nvoid main(void) {\n geometry.worldPosition = instancePositions;\n\n float outerRadiusPixels = max(instanceInRadius, instanceOutRadius);\n unitInRadius = instanceInRadius / outerRadiusPixels; \n unitOutRadius = instanceOutRadius / outerRadiusPixels; \n\n // position on the containing square in [-1, 1] space\n unitPosition = positions.xy;\n geometry.uv = unitPosition;\n geometry.pickingColor = instancePickingColors;\n \n // Find the center of the point and add the current vertex\n vec3 offset = positions * project_pixel_size(outerRadiusPixels);\n DECKGL_FILTER_SIZE(offset, geometry);\n gl_Position = project_position_to_clipspace(instancePositions, instancePositions64Low, offset, geometry.position);\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n \n // Apply opacity to instance color, or return instance picking color\n vColor = vec4(instanceColors.rgb / 255., instanceColors.a / 255. * opacity);\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n";
|
|
2
2
|
export default _default;
|
|
3
3
|
//# sourceMappingURL=FlowCirclesLayerVertex.glsl.d.ts.map
|
|
@@ -30,7 +30,7 @@ attribute vec3 instancePickingColors;
|
|
|
30
30
|
|
|
31
31
|
uniform float opacity;
|
|
32
32
|
uniform vec4 emptyColor;
|
|
33
|
-
uniform
|
|
33
|
+
uniform float outlineEmptyMix;
|
|
34
34
|
|
|
35
35
|
varying vec4 vColor;
|
|
36
36
|
varying vec2 unitPosition;
|
|
@@ -60,4 +60,4 @@ void main(void) {
|
|
|
60
60
|
DECKGL_FILTER_COLOR(vColor, geometry);
|
|
61
61
|
}
|
|
62
62
|
`;
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd0NpcmNsZXNMYXllclZlcnRleC5nbHNsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL0Zsb3dDaXJjbGVzTGF5ZXIvRmxvd0NpcmNsZXNMYXllclZlcnRleC5nbHNsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsZUFBZTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E0Q2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAyMiBGbG93bWFwQmx1ZVxuICogQ29weXJpZ2h0IDIwMTgtMjAyMCBUZXJhbHl0aWNzLCBtb2RpZmllZCBieSBGbG93bWFwQmx1ZVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqL1xuZXhwb3J0IGRlZmF1bHQgYFxcXG4jZGVmaW5lIFNIQURFUl9OQU1FIGZsb3ctY2lyY2xlcy1sYXllci12ZXJ0ZXgtc2hhZGVyXG4jZGVmaW5lIHJhZGl1c1NjYWxlIDEwMFxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbnM7XG5cbmF0dHJpYnV0ZSB2ZWMzIGluc3RhbmNlUG9zaXRpb25zO1xuYXR0cmlidXRlIHZlYzMgaW5zdGFuY2VQb3NpdGlvbnM2NExvdztcbmF0dHJpYnV0ZSBmbG9hdCBpbnN0YW5jZUluUmFkaXVzO1xuYXR0cmlidXRlIGZsb2F0IGluc3RhbmNlT3V0UmFkaXVzO1xuYXR0cmlidXRlIHZlYzQgaW5zdGFuY2VDb2xvcnM7XG5hdHRyaWJ1dGUgdmVjMyBpbnN0YW5jZVBpY2tpbmdDb2xvcnM7XG5cbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbnVuaWZvcm0gdmVjNCBlbXB0eUNvbG9yO1xudW5pZm9ybSBmbG9hdCBvdXRsaW5lRW1wdHlNaXg7XG5cbnZhcnlpbmcgdmVjNCB2Q29sb3I7XG52YXJ5aW5nIHZlYzIgdW5pdFBvc2l0aW9uO1xudmFyeWluZyBmbG9hdCB1bml0SW5SYWRpdXM7XG52YXJ5aW5nIGZsb2F0IHVuaXRPdXRSYWRpdXM7XG5cbnZvaWQgbWFpbih2b2lkKSB7XG4gIGdlb21ldHJ5LndvcmxkUG9zaXRpb24gPSBpbnN0YW5jZVBvc2l0aW9ucztcblxuICBmbG9hdCBvdXRlclJhZGl1c1BpeGVscyA9IG1heChpbnN0YW5jZUluUmFkaXVzLCBpbnN0YW5jZU91dFJhZGl1cyk7XG4gIHVuaXRJblJhZGl1cyA9IGluc3RhbmNlSW5SYWRpdXMgLyBvdXRlclJhZGl1c1BpeGVsczsgXG4gIHVuaXRPdXRSYWRpdXMgPSBpbnN0YW5jZU91dFJhZGl1cyAvIG91dGVyUmFkaXVzUGl4ZWxzOyBcblxuICAvLyBwb3NpdGlvbiBvbiB0aGUgY29udGFpbmluZyBzcXVhcmUgaW4gWy0xLCAxXSBzcGFjZVxuICB1bml0UG9zaXRpb24gPSBwb3NpdGlvbnMueHk7XG4gIGdlb21ldHJ5LnV2ID0gdW5pdFBvc2l0aW9uO1xuICBnZW9tZXRyeS5waWNraW5nQ29sb3IgPSBpbnN0YW5jZVBpY2tpbmdDb2xvcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIC8vIEZpbmQgdGhlIGNlbnRlciBvZiB0aGUgcG9pbnQgYW5kIGFkZCB0aGUgY3VycmVudCB2ZXJ0ZXhcbiAgdmVjMyBvZmZzZXQgPSBwb3NpdGlvbnMgKiBwcm9qZWN0X3BpeGVsX3NpemUob3V0ZXJSYWRpdXNQaXhlbHMpO1xuICBERUNLR0xfRklMVEVSX1NJWkUob2Zmc2V0LCBnZW9tZXRyeSk7XG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdF9wb3NpdGlvbl90b19jbGlwc3BhY2UoaW5zdGFuY2VQb3NpdGlvbnMsIGluc3RhbmNlUG9zaXRpb25zNjRMb3csIG9mZnNldCwgZ2VvbWV0cnkucG9zaXRpb24pO1xuICBERUNLR0xfRklMVEVSX0dMX1BPU0lUSU9OKGdsX1Bvc2l0aW9uLCBnZW9tZXRyeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIC8vIEFwcGx5IG9wYWNpdHkgdG8gaW5zdGFuY2UgY29sb3IsIG9yIHJldHVybiBpbnN0YW5jZSBwaWNraW5nIGNvbG9yXG4gIHZDb2xvciA9IHZlYzQoaW5zdGFuY2VDb2xvcnMucmdiIC8gMjU1LiwgaW5zdGFuY2VDb2xvcnMuYSAvIDI1NS4gKiBvcGFjaXR5KTtcbiAgREVDS0dMX0ZJTFRFUl9DT0xPUih2Q29sb3IsIGdlb21ldHJ5KTtcbn1cbmA7XG4iXX0=
|
package/dist/FlowmapLayer.d.ts
CHANGED
|
@@ -2,7 +2,8 @@ import { CompositeLayer } from '@deck.gl/core';
|
|
|
2
2
|
import { FlowLinesLayerAttributes, FlowmapData, FlowmapDataAccessors, FlowmapDataProvider, LayersData, FlowmapAggregateAccessors } from '@flowmap.gl/data';
|
|
3
3
|
import { FlowmapLayerPickingInfo, LayerProps } from './types';
|
|
4
4
|
export declare type FlowmapLayerProps<L, F> = {
|
|
5
|
-
data
|
|
5
|
+
data?: FlowmapData<L, F>;
|
|
6
|
+
dataProvider?: FlowmapDataProvider<L, F>;
|
|
6
7
|
locationTotalsEnabled?: boolean;
|
|
7
8
|
adaptiveScalesEnabled?: boolean;
|
|
8
9
|
animationEnabled?: boolean;
|
|
@@ -62,7 +63,7 @@ export default class FlowmapLayer<L, F> extends CompositeLayer {
|
|
|
62
63
|
constructor(props: FlowmapLayerProps<L, F>);
|
|
63
64
|
initializeState(): void;
|
|
64
65
|
private _updateAccessors;
|
|
65
|
-
private
|
|
66
|
+
private _getOrMakeDataProvider;
|
|
66
67
|
private _updateDataProvider;
|
|
67
68
|
shouldUpdateState(params: Record<string, any>): boolean;
|
|
68
69
|
updateState({ oldProps, props, changeFlags }: Record<string, any>): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlowmapLayer.d.ts","sourceRoot":"","sources":["../src/FlowmapLayer.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAC,cAAc,EAAC,MAAM,eAAe,CAAC;AAE7C,OAAO,EAEL,wBAAwB,EACxB,WAAW,EACX,oBAAoB,EACpB,mBAAmB,EAOnB,UAAU,EAIV,yBAAyB,EAC1B,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EACL,uBAAuB,EACvB,UAAU,EAGX,MAAM,SAAS,CAAC;AAEjB,oBAAY,iBAAiB,CAAC,CAAC,EAAE,CAAC,IAAI;IACpC,IAAI,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"FlowmapLayer.d.ts","sourceRoot":"","sources":["../src/FlowmapLayer.ts"],"names":[],"mappings":"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"}
|
package/dist/FlowmapLayer.js
CHANGED
|
@@ -37,7 +37,10 @@ var HighlightType;
|
|
|
37
37
|
})(HighlightType || (HighlightType = {}));
|
|
38
38
|
export default class FlowmapLayer extends CompositeLayer {
|
|
39
39
|
constructor(props) {
|
|
40
|
-
super(Object.assign(Object.assign({}, props), {
|
|
40
|
+
super(Object.assign(Object.assign({}, props), { dataProvider: {
|
|
41
|
+
// To avoid deck.gl props diffing on comlink worker proxy causing an exception
|
|
42
|
+
dataProvider: props.dataProvider,
|
|
43
|
+
}, onHover: (info, event) => {
|
|
41
44
|
// TODO: if (lastHoverEventStartTimeRef > startTime) {
|
|
42
45
|
// // Skipping, because this is not the latest hover event
|
|
43
46
|
// return;
|
|
@@ -61,7 +64,7 @@ export default class FlowmapLayer extends CompositeLayer {
|
|
|
61
64
|
initializeState() {
|
|
62
65
|
this.state = {
|
|
63
66
|
accessors: new FlowmapAggregateAccessors(this.props),
|
|
64
|
-
dataProvider: this.
|
|
67
|
+
dataProvider: this._getOrMakeDataProvider(),
|
|
65
68
|
layersData: undefined,
|
|
66
69
|
highlightedObject: undefined,
|
|
67
70
|
};
|
|
@@ -71,10 +74,10 @@ export default class FlowmapLayer extends CompositeLayer {
|
|
|
71
74
|
(_b = (_a = this.state) === null || _a === void 0 ? void 0 : _a.dataProvider) === null || _b === void 0 ? void 0 : _b.setAccessors(this.props);
|
|
72
75
|
this.setState({ accessors: new FlowmapAggregateAccessors(this.props) });
|
|
73
76
|
}
|
|
74
|
-
|
|
75
|
-
const { data } = this.props;
|
|
76
|
-
if (isFlowmapDataProvider(
|
|
77
|
-
return
|
|
77
|
+
_getOrMakeDataProvider() {
|
|
78
|
+
const { data, dataProvider } = this.props;
|
|
79
|
+
if (isFlowmapDataProvider(dataProvider === null || dataProvider === void 0 ? void 0 : dataProvider.dataProvider)) {
|
|
80
|
+
return dataProvider.dataProvider;
|
|
78
81
|
}
|
|
79
82
|
else if (isFlowmapData(data)) {
|
|
80
83
|
const dataProvider = new LocalFlowmapDataProvider(this.props);
|
|
@@ -84,7 +87,7 @@ export default class FlowmapLayer extends CompositeLayer {
|
|
|
84
87
|
throw new Error('FlowmapLayer: data must be a FlowmapDataProvider or FlowmapData');
|
|
85
88
|
}
|
|
86
89
|
_updateDataProvider() {
|
|
87
|
-
this.setState({ dataProvider: this.
|
|
90
|
+
this.setState({ dataProvider: this._getOrMakeDataProvider() });
|
|
88
91
|
}
|
|
89
92
|
shouldUpdateState(params) {
|
|
90
93
|
const { changeFlags } = params;
|
|
@@ -104,7 +107,7 @@ export default class FlowmapLayer extends CompositeLayer {
|
|
|
104
107
|
return;
|
|
105
108
|
}
|
|
106
109
|
if (changeFlags.propsChanged) {
|
|
107
|
-
this._updateAccessors();
|
|
110
|
+
// this._updateAccessors();
|
|
108
111
|
}
|
|
109
112
|
if (changeFlags.dataChanged) {
|
|
110
113
|
this._updateDataProvider();
|
|
@@ -114,7 +117,9 @@ export default class FlowmapLayer extends CompositeLayer {
|
|
|
114
117
|
highlightedObject: undefined,
|
|
115
118
|
});
|
|
116
119
|
}
|
|
117
|
-
if (changeFlags.viewportChanged ||
|
|
120
|
+
if (changeFlags.viewportChanged ||
|
|
121
|
+
changeFlags.propsOrDataChanged // TODO can we ignore accessor props changes?
|
|
122
|
+
) {
|
|
118
123
|
dataProvider.setFlowmapState(this._getFlowmapState());
|
|
119
124
|
(() => __awaiter(this, void 0, void 0, function* () {
|
|
120
125
|
const layersData = yield dataProvider.getLayersData();
|
|
@@ -142,7 +147,7 @@ export default class FlowmapLayer extends CompositeLayer {
|
|
|
142
147
|
}
|
|
143
148
|
_getFlowmapState() {
|
|
144
149
|
return {
|
|
145
|
-
viewport:
|
|
150
|
+
viewport: pickViewportProps(this.context.viewport),
|
|
146
151
|
filterState: {
|
|
147
152
|
selectedLocations: undefined,
|
|
148
153
|
locationFilterMode: LocationFilterMode.ALL,
|
|
@@ -256,8 +261,10 @@ export default class FlowmapLayer extends CompositeLayer {
|
|
|
256
261
|
layers.push(new FlowCirclesLayer(this.getSubLayerProps({
|
|
257
262
|
id: 'circles',
|
|
258
263
|
data: circleAttributes,
|
|
259
|
-
emptyColor:
|
|
260
|
-
|
|
264
|
+
emptyColor: this.props.darkMode
|
|
265
|
+
? [0, 0, 0, 255]
|
|
266
|
+
: [255, 255, 255, 255],
|
|
267
|
+
outlineEmptyMix: 0.4,
|
|
261
268
|
})));
|
|
262
269
|
if (highlightedObject) {
|
|
263
270
|
switch (highlightedObject.type) {
|
|
@@ -308,7 +315,7 @@ FlowmapLayer.defaultProps = {
|
|
|
308
315
|
highlightColor: 'orange',
|
|
309
316
|
maxTopFlowsDisplayNum: 5000,
|
|
310
317
|
};
|
|
311
|
-
function
|
|
318
|
+
function pickViewportProps(viewport) {
|
|
312
319
|
const { width, height, longitude, latitude, zoom, pitch, bearing } = viewport;
|
|
313
320
|
return {
|
|
314
321
|
width,
|
|
@@ -320,4 +327,4 @@ function asViewState(viewport) {
|
|
|
320
327
|
bearing,
|
|
321
328
|
};
|
|
322
329
|
}
|
|
323
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd21hcExheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0Zsb3dtYXBMYXllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFDTCxXQUFXLEVBS1gsNEJBQTRCLEVBQzVCLGdCQUFnQixFQUNoQiwyQkFBMkIsRUFDM0IsMEJBQTBCLEVBQzFCLGFBQWEsRUFDYixxQkFBcUIsRUFFckIsd0JBQXdCLEVBQ3hCLGtCQUFrQixFQUVsQix5QkFBeUIsR0FDMUIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLHNCQUFzQixNQUFNLDBCQUEwQixDQUFDO0FBQzlELE9BQU8sZ0JBQWdCLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxjQUFjLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUlMLFdBQVcsR0FDWixNQUFNLFNBQVMsQ0FBQztBQXlCakIsSUFBSyxhQUdKO0FBSEQsV0FBSyxhQUFhO0lBQ2hCLHNDQUFxQixDQUFBO0lBQ3JCLDhCQUFhLENBQUE7QUFDZixDQUFDLEVBSEksYUFBYSxLQUFiLGFBQWEsUUFHakI7QUF3QkQsTUFBTSxDQUFDLE9BQU8sT0FBTyxZQUFtQixTQUFRLGNBQWM7SUFrQjVELFlBQW1CLEtBQThCO1FBQy9DLEtBQUssaUNBQ0EsS0FBSyxLQUNSLE9BQU8sRUFBRSxDQUFDLElBQXNCLEVBQUUsS0FBa0IsRUFBRSxFQUFFO2dCQUN0RCxzREFBc0Q7Z0JBQ3RELDREQUE0RDtnQkFDNUQsWUFBWTtnQkFDWixJQUFJO2dCQUNKLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FB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QUFxQixFQUFFLElBQUk7SUFDM0IsV0FBVyxFQUFFLE1BQU07SUFDbkIsY0FBYyxFQUFFLFFBQVE7SUFDeEIscUJBQXFCLEVBQUUsSUFBSTtDQUM1QixDQUFDO0FBeVdKLFNBQVMsV0FBVyxDQUFDLFFBQTZCO0lBQ2hELE1BQU0sRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUMsR0FBRyxRQUFRLENBQUM7SUFDNUUsT0FBTztRQUNMLEtBQUs7UUFDTCxNQUFNO1FBQ04sU0FBUztRQUNULFFBQVE7UUFDUixJQUFJO1FBQ0osS0FBSztRQUNMLE9BQU87S0FDUixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAyMiBGbG93bWFwQmx1ZVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqL1xuaW1wb3J0IHtDb21wb3NpdGVMYXllcn0gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG5pbXBvcnQge1NjYXR0ZXJwbG90TGF5ZXJ9IGZyb20gJ0BkZWNrLmdsL2xheWVycyc7XG5pbXBvcnQge1xuICBjb2xvckFzUmdiYSxcbiAgRmxvd0xpbmVzTGF5ZXJBdHRyaWJ1dGVzLFxuICBGbG93bWFwRGF0YSxcbiAgRmxvd21hcERhdGFBY2Nlc3NvcnMsXG4gIEZsb3dtYXBEYXRhUHJvdmlkZXIsXG4gIGdldEZsb3dMaW5lQXR0cmlidXRlc0J5SW5kZXgsXG4gIGdldEZsb3dtYXBDb2xvcnMsXG4gIGdldE91dGVyQ2lyY2xlUmFkaXVzQnlJbmRleCxcbiAgZ2V0TG9jYXRpb25DZW50cm9pZEJ5SW5kZXgsXG4gIGlzRmxvd21hcERhdGEsXG4gIGlzRmxvd21hcERhdGFQcm92aWRlcixcbiAgTGF5ZXJzRGF0YSxcbiAgTG9jYWxGbG93bWFwRGF0YVByb3ZpZGVyLFxuICBMb2NhdGlvbkZpbHRlck1vZGUsXG4gIFZpZXdwb3J0UHJvcHMsXG4gIEZsb3dtYXBBZ2dyZWdhdGVBY2Nlc3NvcnMsXG59IGZyb20gJ0BmbG93bWFwLmdsL2RhdGEnO1xuaW1wb3J0IEFuaW1hdGVkRmxvd0xpbmVzTGF5ZXIgZnJvbSAnLi9BbmltYXRlZEZsb3dMaW5lc0xheWVyJztcbmltcG9ydCBGbG93Q2lyY2xlc0xheWVyIGZyb20gJy4vRmxvd0NpcmNsZXNMYXllcic7XG5pbXBvcnQgRmxvd0xpbmVzTGF5ZXIgZnJvbSAnLi9GbG93TGluZXNMYXllcic7XG5pbXBvcnQge1xuICBGbG93bWFwTGF5ZXJQaWNraW5nSW5mbyxcbiAgTGF5ZXJQcm9wcyxcbiAgUGlja2luZ0luZm8sXG4gIFBpY2tpbmdUeXBlLFxufSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgRmxvd21hcExheWVyUHJvcHM8TCwgRj4gPSB7XG4gIGRhdGE6IEZsb3dtYXBEYXRhPEwsIEY+IHwgRmxvd21hcERhdGFQcm92aWRlcjxMLCBGPjtcbiAgbG9jYXRpb25Ub3RhbHNFbmFibGVkPzogYm9vbGVhbjtcbiAgYWRhcHRpdmVTY2FsZXNFbmFibGVkPzogYm9vbGVhbjtcbiAgYW5pbWF0aW9uRW5hYmxlZD86IGJvb2xlYW47XG4gIGNsdXN0ZXJpbmdFbmFibGVkPzogYm9vbGVhbjtcbiAgY2x1c3RlcmluZ0xldmVsPzogbnVtYmVyO1xuICBmYWRlRW5hYmxlZD86IGJvb2xlYW47XG4gIGZhZGVPcGFjaXR5RW5hYmxlZD86IGJvb2xlYW47XG4gIGNsdXN0ZXJpbmdBdXRvPzogYm9vbGVhbjtcbiAgZGFya01vZGU/OiBib29sZWFuO1xuICBmYWRlQW1vdW50PzogbnVtYmVyO1xuICBjb2xvclNjaGVtZT86IHN0cmluZztcbiAgaGlnaGxpZ2h0Q29sb3I/OiBzdHJpbmc7XG4gIG1heFRvcEZsb3dzRGlzcGxheU51bT86IG51bWJlcjtcbiAgb25Ib3Zlcj86IChcbiAgICBpbmZvOiBGbG93bWFwTGF5ZXJQaWNraW5nSW5mbzxMLCBGPiB8IHVuZGVmaW5lZCxcbiAgICBldmVudDogU291cmNlRXZlbnQsXG4gICkgPT4gdm9pZDtcbiAgb25DbGljaz86IChpbmZvOiBGbG93bWFwTGF5ZXJQaWNraW5nSW5mbzxMLCBGPiwgZXZlbnQ6IFNvdXJjZUV2ZW50KSA9PiB2b2lkO1xufSAmIFBhcnRpYWw8Rmxvd21hcERhdGFBY2Nlc3NvcnM8TCwgRj4+ICZcbiAgTGF5ZXJQcm9wcztcblxuZW51bSBIaWdobGlnaHRUeXBlIHtcbiAgTE9DQVRJT04gPSAnbG9jYXRpb24nLFxuICBGTE9XID0gJ2Zsb3cnLFxufVxuXG50eXBlIEhpZ2hsaWdodGVkTG9jYXRpb25PYmplY3QgPSB7XG4gIHR5cGU6IEhpZ2hsaWdodFR5cGUuTE9DQVRJT047XG4gIGNlbnRyb2lkOiBbbnVtYmVyLCBudW1iZXJdO1xuICByYWRpdXM6IG51bWJlcjtcbn07XG5cbnR5cGUgSGlnaGxpZ2h0ZWRGbG93T2JqZWN0ID0ge1xuICB0eXBlOiBIaWdobGlnaHRUeXBlLkZMT1c7XG4gIGxpbmVBdHRyaWJ1dGVzOiBGbG93TGluZXNMYXllckF0dHJpYnV0ZXM7XG59O1xuXG50eXBlIEhpZ2hsaWdodGVkT2JqZWN0ID0gSGlnaGxpZ2h0ZWRMb2NhdGlvbk9iamVjdCB8IEhpZ2hsaWdodGVkRmxvd09iamVjdDtcblxudHlwZSBTdGF0ZTxMLCBGPiA9IHtcbiAgYWNjZXNzb3JzOiBGbG93bWFwQWdncmVnYXRlQWNjZXNzb3JzPEwsIEY+O1xuICBkYXRhUHJvdmlkZXI6IEZsb3dtYXBEYXRhUHJvdmlkZXI8TCwgRj47XG4gIGxheWVyc0RhdGE6IExheWVyc0RhdGEgfCB1bmRlZmluZWQ7XG4gIGhpZ2hsaWdodGVkT2JqZWN0OiBIaWdobGlnaHRlZE9iamVjdCB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCB0eXBlIFNvdXJjZUV2ZW50ID0ge3NyY0V2ZW50OiBNb3VzZUV2ZW50fTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmxvd21hcExheWVyPEwsIEY+IGV4dGVuZHMgQ29tcG9zaXRlTGF5ZXIge1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGRhcmtNb2RlOiB0cnVlLFxuICAgIGZhZGVBbW91bnQ6IDUwLFxuICAgIGxvY2F0aW9uVG90YWxzRW5hYmxlZDogdHJ1ZSxcbiAgICBhbmltYXRpb25FbmFibGVkOiBmYWxzZSxcbiAgICBjbHVzdGVyaW5nRW5hYmxlZDogdHJ1ZSxcbiAgICBmYWRlRW5hYmxlZDogdHJ1ZSxcbiAgICBmYWRlT3BhY2l0eUVuYWJsZWQ6IGZhbHNlLFxuICAgIGNsdXN0ZXJpbmdBdXRvOiB0cnVlLFxuICAgIGNsdXN0ZXJpbmdMZXZlbDogdW5kZWZpbmVkLFxuICAgIGFkYXB0aXZlU2NhbGVzRW5hYmxlZDogdHJ1ZSxcbiAgICBjb2xvclNjaGVtZTogJ1RlYWwnLFxuICAgIGhpZ2hsaWdodENvbG9yOiAnb3JhbmdlJyxcbiAgICBtYXhUb3BGbG93c0Rpc3BsYXlOdW06IDUwMDAsXG4gIH07XG4gIHN0YXRlOiBTdGF0ZTxMLCBGPiB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgY29uc3RydWN0b3IocHJvcHM6IEZsb3dtYXBMYXllclByb3BzPEwsIEY+KSB7XG4gICAgc3VwZXIoe1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBvbkhvdmVyOiAoaW5mbzogUGlja2luZ0luZm88YW55PiwgZXZlbnQ6IFNvdXJjZUV2ZW50KSA9PiB7XG4gICAgICAgIC8vIFRPRE86IGlmIChsYXN0SG92ZXJFdmVudFN0YXJ0VGltZVJlZiA+IHN0YXJ0VGltZSkge1xuICAgICAgICAvLyAgIC8vIFNraXBwaW5nLCBiZWNhdXNlIHRoaXMgaXMgbm90IHRoZSBsYXRlc3QgaG92ZXIgZXZlbnRcbiAgICAgICAgLy8gICByZXR1cm47XG4gICAgICAgIC8vIH1cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7aGlnaGxpZ2h0ZWRPYmplY3Q6IHRoaXMuX2dldEhpZ2hsaWdodGVkT2JqZWN0KGluZm8pfSk7XG4gICAgICAgIGNvbnN0IHtvbkhvdmVyfSA9IHByb3BzO1xuICAgICAgICBpZiAob25Ib3Zlcikge1xuICAgICAgICAgIHRoaXMuX2dldEZsb3dtYXBMYXllclBpY2tpbmdJbmZvKGluZm8pLnRoZW4oKGluZm8pID0+XG4gICAgICAgICAgICBvbkhvdmVyKGluZm8sIGV2ZW50KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25DbGljazogKGluZm86IFBpY2tpbmdJbmZvPGFueT4sIGV2ZW50OiBTb3VyY2VFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCB7b25DbGlja30gPSBwcm9wcztcbiAgICAgICAgaWYgKG9uQ2xpY2spIHtcbiAgICAgICAgICB0aGlzLl9nZXRGbG93bWFwTGF5ZXJQaWNraW5nSW5mbyhpbmZvKS50aGVuKChpbmZvKSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5mbykge1xuICAgICAgICAgICAgICBvbkNsaWNrKGluZm8sIGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGluaXRpYWxpemVTdGF0ZSgpIHtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgYWNjZXNzb3JzOiBuZXcgRmxvd21hcEFnZ3JlZ2F0ZUFjY2Vzc29yczxMLCBGPih0aGlzLnByb3BzKSxcbiAgICAgIGRhdGFQcm92aWRlcjogdGhpcy5fbWFrZURhdGFQcm92aWRlcigpLFxuICAgICAgbGF5ZXJzRGF0YTogdW5kZWZpbmVkLFxuICAgICAgaGlnaGxpZ2h0ZWRPYmplY3Q6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlQWNjZXNzb3JzKCkge1xuICAgIHRoaXMuc3RhdGU/LmRhdGFQcm92aWRlcj8uc2V0QWNjZXNzb3JzKHRoaXMucHJvcHMpO1xuICAgIHRoaXMuc2V0U3RhdGUoe2FjY2Vzc29yczogbmV3IEZsb3dtYXBBZ2dyZWdhdGVBY2Nlc3NvcnModGhpcy5wcm9wcyl9KTtcbiAgfVxuXG4gIHByaXZhdGUgX21ha2VEYXRhUHJvdmlkZXIoKSB7XG4gICAgY29uc3Qge2RhdGF9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoaXNGbG93bWFwRGF0YVByb3ZpZGVyPEwsIEY+KGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGVsc2UgaWYgKGlzRmxvd21hcERhdGE8TCwgRj4oZGF0YSkpIHtcbiAgICAgIGNvbnN0IGRhdGFQcm92aWRlciA9IG5ldyBMb2NhbEZsb3dtYXBEYXRhUHJvdmlkZXI8TCwgRj4odGhpcy5wcm9wcyk7XG4gICAgICBkYXRhUHJvdmlkZXIuc2V0Rmxvd21hcERhdGEoZGF0YSk7XG4gICAgICByZXR1cm4gZGF0YVByb3ZpZGVyO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnRmxvd21hcExheWVyOiBkYXRhIG11c3QgYmUgYSBGbG93bWFwRGF0YVByb3ZpZGVyIG9yIEZsb3dtYXBEYXRhJyxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlRGF0YVByb3ZpZGVyKCkge1xuICAgIHRoaXMuc2V0U3RhdGUoe2RhdGFQcm92aWRlcjogdGhpcy5fbWFrZURhdGFQcm92aWRlcigpfSk7XG4gIH1cblxuICBzaG91bGRVcGRhdGVTdGF0ZShwYXJhbXM6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBib29sZWFuIHtcbiAgICBjb25zdCB7Y2hhbmdlRmxhZ3N9ID0gcGFyYW1zO1xuICAgIC8vIGlmICh0aGlzLl92aWV3cG9ydENoYW5nZWQoKSkge1xuICAgIC8vICAgcmV0dXJuIHRydWU7XG4gICAgLy8gfVxuICAgIGlmIChjaGFuZ2VGbGFncy52aWV3cG9ydENoYW5nZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gc3VwZXIuc2hvdWxkVXBkYXRlU3RhdGUocGFyYW1zKTtcbiAgICAvLyBUT0RPOiBiZSBzbWFydGVyIG9uIHdoZW4gdG8gdXBkYXRlXG4gICAgLy8gKGUuZy4gaWdub3JlIHZpZXdwb3J0IGNoYW5nZXMgd2hlbiBhZGFwdGl2ZVNjYWxlc0VuYWJsZWQgYW5kIGNsdXN0ZXJpbmcgYXJlIGZhbHNlKVxuICB9XG5cbiAgdXBkYXRlU3RhdGUoe29sZFByb3BzLCBwcm9wcywgY2hhbmdlRmxhZ3N9OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogdm9pZCB7XG4gICAgY29uc3Qge2RhdGFQcm92aWRlciwgaGlnaGxpZ2h0ZWRPYmplY3R9ID0gdGhpcy5zdGF0ZSB8fCB7fTtcbiAgICBpZiAoIWRhdGFQcm92aWRlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VGbGFncy5wcm9wc0NoYW5nZWQpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZUFjY2Vzc29ycygpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlRmxhZ3MuZGF0YUNoYW5nZWQpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZURhdGFQcm92aWRlcigpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlRmxhZ3Mudmlld3BvcnRDaGFuZ2VkIHx8IGNoYW5nZUZsYWdzLmRhdGFDaGFuZ2VkKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaGlnaGxpZ2h0ZWRPYmplY3Q6IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VGbGFncy52aWV3cG9ydENoYW5nZWQgfHwgY2hhbmdlRmxhZ3MucHJvcHNPckRhdGFDaGFuZ2VkKSB7XG4gICAgICBkYXRhUHJvdmlkZXIuc2V0Rmxvd21hcFN0YXRlKHRoaXMuX2dldEZsb3dtYXBTdGF0ZSgpKTtcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxheWVyc0RhdGEgPSBhd2FpdCBkYXRhUHJvdmlkZXIuZ2V0TGF5ZXJzRGF0YSgpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtsYXllcnNEYXRhfSk7XG4gICAgICB9KSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2dldFNldHRpbmdzU3RhdGUoKSB7XG4gICAgY29uc3Qge1xuICAgICAgbG9jYXRpb25Ub3RhbHNFbmFibGVkLFxuICAgICAgYWRhcHRpdmVTY2FsZXNFbmFibGVkLFxuICAgICAgYW5pbWF0aW9uRW5hYmxlZCxcbiAgICAgIGNsdXN0ZXJpbmdFbmFibGVkLFxuICAgICAgY2x1c3RlcmluZ0xldmVsLFxuICAgICAgZmFkZUVuYWJsZWQsXG4gICAgICBmYWRlT3BhY2l0eUVuYWJsZWQsXG4gICAgICBjbHVzdGVyaW5nQXV0byxcbiAgICAgIGRhcmtNb2RlLFxuICAgICAgZmFkZUFtb3VudCxcbiAgICAgIGNvbG9yU2NoZW1lLFxuICAgICAgaGlnaGxpZ2h0Q29sb3IsXG4gICAgICBtYXhUb3BGbG93c0Rpc3BsYXlOdW0sXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvY2F0aW9uVG90YWxzRW5hYmxlZCxcbiAgICAgIGFkYXB0aXZlU2NhbGVzRW5hYmxlZCxcbiAgICAgIGFuaW1hdGlvbkVuYWJsZWQsXG4gICAgICBjbHVzdGVyaW5nRW5hYmxlZCxcbiAgICAgIGNsdXN0ZXJpbmdMZXZlbCxcbiAgICAgIGZhZGVFbmFibGVkLFxuICAgICAgZmFkZU9wYWNpdHlFbmFibGVkLFxuICAgICAgY2x1c3RlcmluZ0F1dG8sXG4gICAgICBkYXJrTW9kZSxcbiAgICAgIGZhZGVBbW91bnQsXG4gICAgICBjb2xvclNjaGVtZSxcbiAgICAgIGhpZ2hsaWdodENvbG9yLFxuICAgICAgbWF4VG9wRmxvd3NEaXNwbGF5TnVtLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9nZXRGbG93bWFwU3RhdGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZpZXdwb3J0OiBhc1ZpZXdTdGF0ZSh0aGlzLmNvbnRleHQudmlld3BvcnQpLFxuICAgICAgZmlsdGVyU3RhdGU6IHtcbiAgICAgICAgc2VsZWN0ZWRMb2NhdGlvbnM6IHVuZGVmaW5lZCxcbiAgICAgICAgbG9jYXRpb25GaWx0ZXJNb2RlOiBMb2NhdGlvbkZpbHRlck1vZGUuQUxMLFxuICAgICAgICBzZWxlY3RlZFRpbWVSYW5nZTogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIHNldHRpbmdzU3RhdGU6IHRoaXMuX2dldFNldHRpbmdzU3RhdGUoKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfZ2V0Rmxvd21hcExheWVyUGlja2luZ0luZm8oXG4gICAgaW5mbzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgKTogUHJvbWlzZTxGbG93bWFwTGF5ZXJQaWNraW5nSW5mbzxMLCBGPiB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHtpbmRleCwgc291cmNlTGF5ZXJ9ID0gaW5mbztcbiAgICBjb25zdCB7ZGF0YVByb3ZpZGVyLCBhY2Nlc3NvcnN9ID0gdGhpcy5zdGF0ZSB8fCB7fTtcbiAgICBpZiAoIWRhdGFQcm92aWRlciB8fCAhYWNjZXNzb3JzKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBjb21tb25JbmZvID0ge1xuICAgICAgLy8gLi4uaW5mbyxcbiAgICAgIGxheWVyOiBpbmZvLmxheWVyLFxuICAgICAgaW5kZXg6IGluZm8uaW5kZXgsXG4gICAgICB4OiBpbmZvLngsXG4gICAgICB5OiBpbmZvLnksXG4gICAgICBjb29yZGluYXRlOiBpbmZvLmNvb3JkaW5hdGUsXG4gICAgfTtcbiAgICBpZiAoXG4gICAgICBzb3VyY2VMYXllciBpbnN0YW5jZW9mIEZsb3dMaW5lc0xheWVyIHx8XG4gICAgICBzb3VyY2VMYXllciBpbnN0YW5jZW9mIEFuaW1hdGVkRmxvd0xpbmVzTGF5ZXJcbiAgICApIHtcbiAgICAgIGNvbnN0IGZsb3cgPVxuICAgICAgICBpbmRleCA9PT0gLTEgPyB1bmRlZmluZWQgOiBhd2FpdCBkYXRhUHJvdmlkZXIuZ2V0Rmxvd0J5SW5kZXgoaW5kZXgpO1xuICAgICAgaWYgKGZsb3cpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luID0gYXdhaXQgZGF0YVByb3ZpZGVyLmdldExvY2F0aW9uQnlJZChcbiAgICAgICAgICBhY2Nlc3NvcnMuZ2V0Rmxvd09yaWdpbklkKGZsb3cpLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBkZXN0ID0gYXdhaXQgZGF0YVByb3ZpZGVyLmdldExvY2F0aW9uQnlJZChcbiAgICAgICAgICBhY2Nlc3NvcnMuZ2V0Rmxvd0Rlc3RJZChmbG93KSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG9yaWdpbiAmJiBkZXN0KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmNvbW1vbkluZm8sXG4gICAgICAgICAgICB0eXBlOiBQaWNraW5nVHlwZS5GTE9XLFxuICAgICAgICAgICAgb2JqZWN0OiBmbG93LFxuICAgICAgICAgICAgb3JpZ2luOiBvcmlnaW4sXG4gICAgICAgICAgICBkZXN0OiBkZXN0LFxuICAgICAgICAgICAgY291bnQ6IGFjY2Vzc29ycy5nZXRGbG93TWFnbml0dWRlKGZsb3cpLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHNvdXJjZUxheWVyIGluc3RhbmNlb2YgRmxvd0NpcmNsZXNMYXllcikge1xuICAgICAgY29uc3QgbG9jYXRpb24gPVxuICAgICAgICBpbmRleCA9PT0gLTEgPyB1bmRlZmluZWQgOiBhd2FpdCBkYXRhUHJvdmlkZXIuZ2V0TG9jYXRpb25CeUluZGV4KGluZGV4KTtcblxuICAgICAgaWYgKGxvY2F0aW9uKSB7XG4gICAgICAgIGNvbnN0IGlkID0gYWNjZXNzb3JzLmdldExvY2F0aW9uSWQobG9jYXRpb24pO1xuICAgICAgICBjb25zdCBuYW1lID0gYWNjZXNzb3JzLmdldExvY2F0aW9uTmFtZShsb2NhdGlvbik7XG4gICAgICAgIGNvbnN0IHRvdGFscyA9IGF3YWl0IGRhdGFQcm92aWRlci5nZXRUb3RhbHNGb3JMb2NhdGlvbihpZCk7XG4gICAgICAgIGNvbnN0IHtjaXJjbGVBdHRyaWJ1dGVzfSA9IHRoaXMuc3RhdGU/LmxheWVyc0RhdGEgfHwge307XG4gICAgICAgIGlmICh0b3RhbHMgJiYgY2lyY2xlQXR0cmlidXRlcykge1xuICAgICAgICAgIGNvbnN0IGNpcmNsZVJhZGl1cyA9IGdldE91dGVyQ2lyY2xlUmFkaXVzQnlJbmRleChcbiAgICAgICAgICAgIGNpcmNsZUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBpbmZvLmluZGV4LFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmNvbW1vbkluZm8sXG4gICAgICAgICAgICB0eXBlOiBQaWNraW5nVHlwZS5MT0NBVElPTixcbiAgICAgICAgICAgIG9iamVjdDogbG9jYXRpb24sXG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB0b3RhbHMsXG4gICAgICAgICAgICBjaXJjbGVSYWRpdXM6IGNpcmNsZVJhZGl1cyxcbiAgICAgICAgICAgIGV2ZW50OiB1bmRlZmluZWQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIF9nZXRIaWdobGlnaHRlZE9iamVjdChcbiAgICBpbmZvOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICApOiBIaWdobGlnaHRlZE9iamVjdCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qge2luZGV4LCBzb3VyY2VMYXllcn0gPSBpbmZvO1xuICAgIGlmIChpbmRleCA8IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKFxuICAgICAgc291cmNlTGF5ZXIgaW5zdGFuY2VvZiBGbG93TGluZXNMYXllciB8fFxuICAgICAgc291cmNlTGF5ZXIgaW5zdGFuY2VvZiBBbmltYXRlZEZsb3dMaW5lc0xheWVyXG4gICAgKSB7XG4gICAgICBjb25zdCB7bGluZUF0dHJpYnV0ZXN9ID0gdGhpcy5zdGF0ZT8ubGF5ZXJzRGF0YSB8fCB7fTtcbiAgICAgIGlmIChsaW5lQXR0cmlidXRlcykge1xuICAgICAgICBsZXQgYXR0cnMgPSBnZXRGbG93TGluZUF0dHJpYnV0ZXNCeUluZGV4KGxpbmVBdHRyaWJ1dGVzLCBpbmRleCk7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLmZhZGVPcGFjaXR5RW5hYmxlZCkge1xuICAgICAgICAgIGF0dHJzID0ge1xuICAgICAgICAgICAgLi4uYXR0cnMsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgIC4uLmF0dHJzLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgIGdldENvbG9yOiB7XG4gICAgICAgICAgICAgICAgLi4uYXR0cnMuYXR0cmlidXRlcy5nZXRDb2xvcixcbiAgICAgICAgICAgICAgICB2YWx1ZTogbmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgICAgICAgICAgICAgLi4uYXR0cnMuYXR0cmlidXRlcy5nZXRDb2xvci52YWx1ZS5zbGljZSgwLCAzKSxcbiAgICAgICAgICAgICAgICAgIDI1NSwgLy8gdGhlIGhpZ2hsaWdodCBjb2xvciBzaG91bGQgYmUgYWx3YXlzIG9wYXF1ZVxuICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogSGlnaGxpZ2h0VHlwZS5GTE9XLFxuICAgICAgICAgIGxpbmVBdHRyaWJ1dGVzOiBhdHRycyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHNvdXJjZUxheWVyIGluc3RhbmNlb2YgRmxvd0NpcmNsZXNMYXllcikge1xuICAgICAgY29uc3Qge2NpcmNsZUF0dHJpYnV0ZXN9ID0gdGhpcy5zdGF0ZT8ubGF5ZXJzRGF0YSB8fCB7fTtcbiAgICAgIGlmIChjaXJjbGVBdHRyaWJ1dGVzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogSGlnaGxpZ2h0VHlwZS5MT0NBVElPTixcbiAgICAgICAgICBjZW50cm9pZDogZ2V0TG9jYXRpb25DZW50cm9pZEJ5SW5kZXgoY2lyY2xlQXR0cmlidXRlcywgaW5kZXgpLFxuICAgICAgICAgIHJhZGl1czogZ2V0T3V0ZXJDaXJjbGVSYWRpdXNCeUluZGV4KGNpcmNsZUF0dHJpYnV0ZXMsIGluZGV4KSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJlbmRlckxheWVycygpOiBBcnJheTxhbnk+IHtcbiAgICBjb25zdCBsYXllcnMgPSBbXTtcbiAgICBpZiAodGhpcy5zdGF0ZT8ubGF5ZXJzRGF0YSkge1xuICAgICAgY29uc3Qge2xheWVyc0RhdGEsIGhpZ2hsaWdodGVkT2JqZWN0fSA9IHRoaXMuc3RhdGU7XG4gICAgICBjb25zdCB7Y2lyY2xlQXR0cmlidXRlcywgbGluZUF0dHJpYnV0ZXN9ID0gbGF5ZXJzRGF0YSB8fCB7fTtcbiAgICAgIGlmIChjaXJjbGVBdHRyaWJ1dGVzICYmIGxpbmVBdHRyaWJ1dGVzKSB7XG4gICAgICAgIGNvbnN0IGZsb3dtYXBDb2xvcnMgPSBnZXRGbG93bWFwQ29sb3JzKHRoaXMuX2dldFNldHRpbmdzU3RhdGUoKSk7XG4gICAgICAgIGNvbnN0IG91dGxpbmVDb2xvciA9IGNvbG9yQXNSZ2JhKFxuICAgICAgICAgIGZsb3dtYXBDb2xvcnMub3V0bGluZUNvbG9yIHx8ICh0aGlzLnByb3BzLmRhcmtNb2RlID8gJyMwMDAnIDogJyNmZmYnKSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY29tbW9uTGluZUxheWVyUHJvcHMgPSB7XG4gICAgICAgICAgZGF0YTogbGluZUF0dHJpYnV0ZXMsXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgLi4udGhpcy5wcm9wcy5wYXJhbWV0ZXJzLFxuICAgICAgICAgICAgLy8gcHJldmVudCB6LWZpZ2h0aW5nIGF0IG5vbi16ZXJvIGJlYXJpbmcvcGl0Y2hcbiAgICAgICAgICAgIGRlcHRoVGVzdDogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuYW5pbWF0aW9uRW5hYmxlZCkge1xuICAgICAgICAgIGxheWVycy5wdXNoKFxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgbmV3IEFuaW1hdGVkRmxvd0xpbmVzTGF5ZXIoe1xuICAgICAgICAgICAgICAuLi50aGlzLmdldFN1YkxheWVyUHJvcHMoe1xuICAgICAgICAgICAgICAgIC4uLmNvbW1vbkxpbmVMYXllclByb3BzLFxuICAgICAgICAgICAgICAgIGlkOiAnYW5pbWF0ZWQtZmxvdy1saW5lcycsXG4gICAgICAgICAgICAgICAgZHJhd091dGxpbmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHRoaWNrbmVzc1VuaXQ6IDIwLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGF5ZXJzLnB1c2goXG4gICAgICAgICAgICBuZXcgRmxvd0xpbmVzTGF5ZXIoe1xuICAgICAgICAgICAgICAuLi50aGlzLmdldFN1YkxheWVyUHJvcHMoe1xuICAgICAgICAgICAgICAgIC4uLmNvbW1vbkxpbmVMYXllclByb3BzLFxuICAgICAgICAgICAgICAgIGlkOiAnZmxvdy1saW5lcycsXG4gICAgICAgICAgICAgICAgZHJhd091dGxpbmU6IHRydWUsXG4gICAgICAgICAgICAgICAgb3V0bGluZUNvbG9yOiBvdXRsaW5lQ29sb3IsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBsYXllcnMucHVzaChcbiAgICAgICAgICBuZXcgRmxvd0NpcmNsZXNMYXllcihcbiAgICAgICAgICAgIHRoaXMuZ2V0U3ViTGF5ZXJQcm9wcyh7XG4gICAgICAgICAgICAgIGlkOiAnY2lyY2xlcycsXG4gICAgICAgICAgICAgIGRhdGE6IGNpcmNsZUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgIGVtcHR5Q29sb3I6IFswLCAwLCAwLCAyNTVdLFxuICAgICAgICAgICAgICBlbXB0eU91dGxpbmVDb2xvcjogWzAsIDAsIDAsIDI1NV0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgICBpZiAoaGlnaGxpZ2h0ZWRPYmplY3QpIHtcbiAgICAgICAgICBzd2l0Y2ggKGhpZ2hsaWdodGVkT2JqZWN0LnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgSGlnaGxpZ2h0VHlwZS5MT0NBVElPTjpcbiAgICAgICAgICAgICAgbGF5ZXJzLnB1c2goXG4gICAgICAgICAgICAgICAgbmV3IFNjYXR0ZXJwbG90TGF5ZXIoe1xuICAgICAgICAgICAgICAgICAgLi4udGhpcy5nZXRTdWJMYXllclByb3BzKHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6ICdsb2NhdGlvbi1oaWdobGlnaHQnLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBbaGlnaGxpZ2h0ZWRPYmplY3RdLFxuICAgICAgICAgICAgICAgICAgICBwaWNrYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGZpbGxlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGxpbmVXaWR0aFVuaXRzOiAncGl4ZWxzJyxcbiAgICAgICAgICAgICAgICAgICAgZ2V0TGluZVdpZHRoOiAyLFxuICAgICAgICAgICAgICAgICAgICByYWRpdXNVbml0czogJ3BpeGVscycsXG4gICAgICAgICAgICAgICAgICAgIGdldFJhZGl1czogKGQ6IEhpZ2hsaWdodGVkTG9jYXRpb25PYmplY3QpID0+IGQucmFkaXVzLFxuICAgICAgICAgICAgICAgICAgICBnZXRMaW5lQ29sb3I6IGNvbG9yQXNSZ2JhKHRoaXMucHJvcHMuaGlnaGxpZ2h0Q29sb3IpLFxuICAgICAgICAgICAgICAgICAgICBnZXRQb3NpdGlvbjogKGQ6IEhpZ2hsaWdodGVkTG9jYXRpb25PYmplY3QpID0+IGQuY2VudHJvaWQsXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEhpZ2hsaWdodFR5cGUuRkxPVzpcbiAgICAgICAgICAgICAgbGF5ZXJzLnB1c2goXG4gICAgICAgICAgICAgICAgbmV3IEZsb3dMaW5lc0xheWVyKHtcbiAgICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0U3ViTGF5ZXJQcm9wcyh7XG4gICAgICAgICAgICAgICAgICAgIGlkOiAnZmxvdy1oaWdobGlnaHQnLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBoaWdobGlnaHRlZE9iamVjdC5saW5lQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgZHJhd091dGxpbmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHBpY2thYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgb3V0bGluZUNvbG9yOiBjb2xvckFzUmdiYSh0aGlzLnByb3BzLmhpZ2hsaWdodENvbG9yKSxcbiAgICAgICAgICAgICAgICAgICAgb3V0bGluZVRoaWNrbmVzczogMSxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGF5ZXJzO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzVmlld1N0YXRlKHZpZXdwb3J0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogVmlld3BvcnRQcm9wcyB7XG4gIGNvbnN0IHt3aWR0aCwgaGVpZ2h0LCBsb25naXR1ZGUsIGxhdGl0dWRlLCB6b29tLCBwaXRjaCwgYmVhcmluZ30gPSB2aWV3cG9ydDtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgbG9uZ2l0dWRlLFxuICAgIGxhdGl0dWRlLFxuICAgIHpvb20sXG4gICAgcGl0Y2gsXG4gICAgYmVhcmluZyxcbiAgfTtcbn1cbiJdfQ==
|
|
330
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd21hcExheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0Zsb3dtYXBMYXllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFDTCxXQUFXLEVBS1gsNEJBQTRCLEVBQzVCLGdCQUFnQixFQUNoQiwyQkFBMkIsRUFDM0IsMEJBQTBCLEVBQzFCLGFBQWEsRUFDYixxQkFBcUIsRUFFckIsd0JBQXdCLEVBQ3hCLGtCQUFrQixFQUVsQix5QkFBeUIsR0FDMUIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLHNCQUFzQixNQUFNLDBCQUEwQixDQUFDO0FBQzlELE9BQU8sZ0JBQWdCLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxjQUFjLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUlMLFdBQVcsR0FDWixNQUFNLFNBQVMsQ0FBQztBQTBCakIsSUFBSyxhQUdKO0FBSEQsV0FBSyxhQUFhO0lBQ2hCLHNDQUFxQixDQUFBO0lBQ3JCLDhCQUFhLENBQUE7QUFDZixDQUFDLEVBSEksYUFBYSxLQUFiLGFBQWEsUUFHakI7QUF3QkQsTUFBTSxDQUFDLE9BQU8sT0FBTyxZQUFtQixTQUFRLGNBQWM7SUFrQjVELFlBQW1CLEtBQThCO1FBQy9DLEtBQUssaUNBQ0EsS0FBSyxLQUNSLFlBQVksRUFBRTtnQkFDWiw4RUFBOEU7Z0JBQzlFLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTthQUNqQyxFQUNELE9BQU8sRUFBRSxDQUFDLElBQXNCLEVBQUUsS0FBa0IsRUFBRSxFQUFFO2dCQUN0RCxzREFBc0Q7Z0JBQ3RELDREQUE0RDtnQkFDNUQsWUFBWTtnQkFDWixJQUFJO2dCQUNKLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxDQUFDO2dCQUNyRSxNQUFNLEVBQUMsT0FBTyxFQUFDLEdBQUcsS0FBSyxDQUFDO2dCQUN4QixJQUFJLE9BQU8sRUFBRTtvQkFDWCxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDbkQsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FDckIsQ0FBQztpQkFDSDtZQUNILENBQUMsRUFDRCxPQUFPLEVBQUUsQ0FBQyxJQUFzQixFQUFFLEtBQWtCLEVBQUUsRUFBRTtnQkFDdEQsTUFBTSxFQUFDLE9BQU8sRUFBQyxHQUFHLEtBQUssQ0FBQztnQkFDeEIsSUFBSSxPQUFPLEVBQUU7b0JBQ1gsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO3dCQUNuRCxJQUFJLElBQUksRUFBRTs0QkFDUixPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO3lCQUN0QjtvQkFDSCxDQUFDLENBQUMsQ0FBQztpQkFDSjtZQUNILENBQUMsSUFDRCxDQUFDO0lBQ0wsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsS0FBSyxHQUFHO1lBQ1gsU0FBUyxFQUFFLElBQUkseUJBQXlCLENBQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztZQUMxRCxZQUFZLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixFQUFFO1lBQzNDLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLGlCQUFpQixFQUFFLFNBQVM7U0FDN0IsQ0FBQztJQUNKLENBQUM7SUFFTyxnQkFBZ0I7O1FBQ3RCLE1BQUEsTUFBQSxJQUFJLENBQUMsS0FBSywwQ0FBRSxZQUFZLDBDQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFDLFNBQVMsRUFBRSxJQUFJLHlCQUF5QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixNQUFNLEVBQUMsSUFBSSxFQUFFLFlBQVksRUFBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDeEMsSUFBSSxxQkFBcUIsQ0FBTyxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsWUFBWSxDQUFDLEVBQUU7WUFDM0QsT0FBTyxZQUFZLENBQUMsWUFBWSxDQUFDO1NBQ2xDO2FBQU0sSUFBSSxhQUFhLENBQU8sSUFBSSxDQUFDLEVBQUU7WUFDcEMsTUFBTSxZQUFZLEdBQUcsSUFBSSx3QkFBd0IsQ0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEUsWUFBWSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQyxPQUFPLFlBQVksQ0FBQztTQUNyQjtRQUNELE1BQU0sSUFBSSxLQUFLLENBQ2IsaUVBQWlFLENBQ2xFLENBQUM7SUFDSixDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixFQUFFLEVBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxNQUEyQjtRQUMzQyxNQUFNLEVBQUMsV0FBVyxFQUFDLEdBQUcsTUFBTSxDQUFDO1FBQzdCLGlDQUFpQztRQUNqQyxpQkFBaUI7UUFDakIsSUFBSTtRQUNKLElBQUksV0FBVyxDQUFDLGVBQWUsRUFBRTtZQUMvQixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkMscUNBQXFDO1FBQ3JDLHFGQUFxRjtJQUN2RixDQUFDO0lBRUQsV0FBVyxDQUFDLEVBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQXNCO1FBQzdELE1BQU0sRUFBQyxZQUFZLEVBQUUsaUJBQWlCLEVBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUMzRCxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2pCLE9BQU87U0FDUjtRQUVELElBQUksV0FBVyxDQUFDLFlBQVksRUFBRTtZQUM1QiwyQkFBMkI7U0FDNUI7UUFDRCxJQUFJLFdBQVcsQ0FBQyxXQUFXLEVBQUU7WUFDM0IsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7U0FDNUI7UUFDRCxJQUFJLFdBQVcsQ0FBQyxlQUFlLElBQUksV0FBVyxDQUFDLFdBQVcsRUFBRTtZQUMxRCxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUNaLGlCQUFpQixFQUFFLFNBQVM7YUFDN0IsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxJQUNFLFdBQVcsQ0FBQyxlQUFlO1lBQzNCLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyw2Q0FBNkM7VUFDNUU7WUFDQSxZQUFZLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7WUFDdEQsQ0FBQyxHQUFTLEVBQUU7Z0JBQ1YsTUFBTSxVQUFVLEdBQUcsTUFBTSxZQUFZLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxRQUFRLENBQUMsRUFBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDO1lBQzlCLENBQUMsQ0FBQSxDQUFDLEVBQUUsQ0FBQztTQUNOO0lBQ0gsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixNQUFNLEVBQ0oscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLGNBQWMsRUFDZCxRQUFRLEVBQ1IsVUFBVSxFQUNWLFdBQVcsRUFDWCxjQUFjLEVBQ2QscUJBQXFCLEdBQ3RCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNmLE9BQU87WUFDTCxxQkFBcUI7WUFDckIscUJBQXFCO1lBQ3JCLGdCQUFnQjtZQUNoQixpQkFBaUI7WUFDakIsZUFBZTtZQUNmLFdBQVc7WUFDWCxrQkFBa0I7WUFDbEIsY0FBYztZQUNkLFFBQVE7WUFDUixVQUFVO1lBQ1YsV0FBVztZQUNYLGNBQWM7WUFDZCxxQkFBcUI7U0FDdEIsQ0FBQztJQUNKLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsT0FBTztZQUNMLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUNsRCxXQUFXLEVBQUU7Z0JBQ1gsaUJBQWlCLEVBQUUsU0FBUztnQkFDNUIsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsR0FBRztnQkFDMUMsaUJBQWlCLEVBQUUsU0FBUzthQUM3QjtZQUNELGFBQWEsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7U0FDeEMsQ0FBQztJQUNKLENBQUM7SUFFYSwyQkFBMkIsQ0FDdkMsSUFBeUI7OztZQUV6QixNQUFNLEVBQUMsS0FBSyxFQUFFLFdBQVcsRUFBQyxHQUFHLElBQUksQ0FBQztZQUNsQyxNQUFNLEVBQUMsWUFBWSxFQUFFLFNBQVMsRUFBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ25ELElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQy9CLE9BQU8sU0FBUyxDQUFDO2FBQ2xCO1lBQ0QsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCLFdBQVc7Z0JBQ1gsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO2dCQUNqQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7Z0JBQ2pCLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDVCxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ1QsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO2FBQzVCLENBQUM7WUFDRixJQUNFLFdBQVcsWUFBWSxjQUFjO2dCQUNyQyxXQUFXLFlBQVksc0JBQXNCLEVBQzdDO2dCQUNBLE1BQU0sSUFBSSxHQUNSLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLFlBQVksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3RFLElBQUksSUFBSSxFQUFFO29CQUNSLE1BQU0sTUFBTSxHQUFHLE1BQU0sWUFBWSxDQUFDLGVBQWUsQ0FDL0MsU0FBUyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FDaEMsQ0FBQztvQkFDRixNQUFNLElBQUksR0FBRyxNQUFNLFlBQVksQ0FBQyxlQUFlLENBQzdDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQzlCLENBQUM7b0JBQ0YsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO3dCQUNsQix1Q0FDSyxVQUFVLEtBQ2IsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQ3RCLE1BQU0sRUFBRSxJQUFJLEVBQ1osTUFBTSxFQUFFLE1BQU0sRUFDZCxJQUFJLEVBQUUsSUFBSSxFQUNWLEtBQUssRUFBRSxTQUFTLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQ3ZDO3FCQUNIO2lCQUNGO2FBQ0Y7aUJBQU0sSUFBSSxXQUFXLFlBQVksZ0JBQWdCLEVBQUU7Z0JBQ2xELE1BQU0sUUFBUSxHQUNaLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFMUUsSUFBSSxRQUFRLEVBQUU7b0JBQ1osTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDN0MsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDakQsTUFBTSxNQUFNLEdBQUcsTUFBTSxZQUFZLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQzNELE1BQU0sRUFBQyxnQkFBZ0IsRUFBQyxHQUFHLENBQUEsTUFBQSxJQUFJLENBQUMsS0FBSywwQ0FBRSxVQUFVLEtBQUksRUFBRSxDQUFDO29CQUN4RCxJQUFJLE1BQU0sSUFBSSxnQkFBZ0IsRUFBRTt3QkFDOUIsTUFBTSxZQUFZLEdBQUcsMkJBQTJCLENBQzlDLGdCQUFnQixFQUNoQixJQUFJLENBQUMsS0FBSyxDQUNYLENBQUM7d0JBQ0YsdUNBQ0ssVUFBVSxLQUNiLElBQUksRUFBRSxXQUFXLENBQUMsUUFBUSxFQUMxQixNQUFNLEVBQUUsUUFBUSxFQUNoQixFQUFFOzRCQUNGLElBQUk7NEJBQ0osTUFBTSxFQUNOLFlBQVksRUFBRSxZQUFZLEVBQzFCLEtBQUssRUFBRSxTQUFTLElBQ2hCO3FCQUNIO2lCQUNGO2FBQ0Y7WUFFRCxPQUFPLFNBQVMsQ0FBQzs7S0FDbEI7SUFFTyxxQkFBcUIsQ0FDM0IsSUFBeUI7O1FBRXpCLE1BQU0sRUFBQyxLQUFLLEVBQUUsV0FBVyxFQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLElBQUksS0FBSyxHQUFHLENBQUM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUNoQyxJQUNFLFdBQVcsWUFBWSxjQUFjO1lBQ3JDLFdBQVcsWUFBWSxzQkFBc0IsRUFDN0M7WUFDQSxNQUFNLEVBQUMsY0FBYyxFQUFDLEdBQUcsQ0FBQSxNQUFBLElBQUksQ0FBQyxLQUFLLDBDQUFFLFVBQVUsS0FBSSxFQUFFLENBQUM7WUFDdEQsSUFBSSxjQUFjLEVBQUU7Z0JBQ2xCLElBQUksS0FBSyxHQUFHLDRCQUE0QixDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDaEUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFO29CQUNqQyxLQUFLLG1DQUNBLEtBQUssS0FDUixVQUFVLGtDQUNMLEtBQUssQ0FBQyxVQUFVLEtBQ25CLFFBQVEsa0NBQ0gsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEtBQzVCLEtBQUssRUFBRSxJQUFJLFVBQVUsQ0FBQztvQ0FDcEIsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7b0NBQzlDLEdBQUcsRUFBRSw4Q0FBOEM7aUNBQ3BELENBQUMsU0FHUCxDQUFDO2lCQUNIO2dCQUNELE9BQU87b0JBQ0wsSUFBSSxFQUFFLGFBQWEsQ0FBQyxJQUFJO29CQUN4QixjQUFjLEVBQUUsS0FBSztpQkFDdEIsQ0FBQzthQUNIO1NBQ0Y7YUFBTSxJQUFJLFdBQVcsWUFBWSxnQkFBZ0IsRUFBRTtZQUNsRCxNQUFNLEVBQUMsZ0JBQWdCLEVBQUMsR0FBRyxDQUFBLE1BQUEsSUFBSSxDQUFDLEtBQUssMENBQUUsVUFBVSxLQUFJLEVBQUUsQ0FBQztZQUN4RCxJQUFJLGdCQUFnQixFQUFFO2dCQUNwQixPQUFPO29CQUNMLElBQUksRUFBRSxhQUFhLENBQUMsUUFBUTtvQkFDNUIsUUFBUSxFQUFFLDBCQUEwQixDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQztvQkFDN0QsTUFBTSxFQUFFLDJCQUEyQixDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQztpQkFDN0QsQ0FBQzthQUNIO1NBQ0Y7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsWUFBWTs7UUFDVixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxNQUFBLElBQUksQ0FBQyxLQUFLLDBDQUFFLFVBQVUsRUFBRTtZQUMxQixNQUFNLEVBQUMsVUFBVSxFQUFFLGlCQUFpQixFQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUNuRCxNQUFNLEVBQUMsZ0JBQWdCLEVBQUUsY0FBYyxFQUFDLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQztZQUM1RCxJQUFJLGdCQUFnQixJQUFJLGNBQWMsRUFBRTtnQkFDdEMsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztnQkFDakUsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUM5QixhQUFhLENBQUMsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQ3RFLENBQUM7Z0JBQ0YsTUFBTSxvQkFBb0IsR0FBRztvQkFDM0IsSUFBSSxFQUFFLGNBQWM7b0JBQ3BCLFVBQVUsa0NBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVO3dCQUN4QiwrQ0FBK0M7d0JBQy9DLFNBQVMsRUFBRSxLQUFLLEdBQ2pCO2lCQUNGLENBQUM7Z0JBQ0YsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFO29CQUMvQixNQUFNLENBQUMsSUFBSTtvQkFDVCxhQUFhO29CQUNiLElBQUksc0JBQXNCLG1CQUNyQixJQUFJLENBQUMsZ0JBQWdCLGlDQUNuQixvQkFBb0IsS0FDdkIsRUFBRSxFQUFFLHFCQUFxQixFQUN6QixXQUFXLEVBQUUsS0FBSyxFQUNsQixhQUFhLEVBQUUsRUFBRSxJQUNqQixFQUNGLENBQ0gsQ0FBQztpQkFDSDtxQkFBTTtvQkFDTCxNQUFNLENBQUMsSUFBSSxDQUNULElBQUksY0FBYyxtQkFDYixJQUFJLENBQUMsZ0JBQWdCLGlDQUNuQixvQkFBb0IsS0FDdkIsRUFBRSxFQUFFLFlBQVksRUFDaEIsV0FBVyxFQUFFLElBQUksRUFDakIsWUFBWSxFQUFFLFlBQVksSUFDMUIsRUFDRixDQUNILENBQUM7aUJBQ0g7Z0JBQ0QsTUFBTSxDQUFDLElBQUksQ0FDVCxJQUFJLGdCQUFnQixDQUNsQixJQUFJLENBQUMsZ0JBQWdCLENBQUM7b0JBQ3BCLEVBQUUsRUFBRSxTQUFTO29CQUNiLElBQUksRUFBRSxnQkFBZ0I7b0JBQ3RCLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7d0JBQzdCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQzt3QkFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO29CQUN4QixlQUFlLEVBQUUsR0FBRztpQkFDckIsQ0FBQyxDQUNILENBQ0YsQ0FBQztnQkFDRixJQUFJLGlCQUFpQixFQUFFO29CQUNyQixRQUFRLGlCQUFpQixDQUFDLElBQUksRUFBRTt3QkFDOUIsS0FBSyxhQUFhLENBQUMsUUFBUTs0QkFDekIsTUFBTSxDQUFDLElBQUksQ0FDVCxJQUFJLGdCQUFnQixtQkFDZixJQUFJLENBQUMsZ0JBQWdCLENBQUM7Z0NBQ3ZCLEVBQUUsRUFBRSxvQkFBb0I7Z0NBQ3hCLElBQUksRUFBRSxDQUFDLGlCQUFpQixDQUFDO2dDQUN6QixRQUFRLEVBQUUsS0FBSztnQ0FDZixPQUFPLEVBQUUsSUFBSTtnQ0FDYixNQUFNLEVBQUUsS0FBSztnQ0FDYixjQUFjLEVBQUUsUUFBUTtnQ0FDeEIsWUFBWSxFQUFFLENBQUM7Z0NBQ2YsV0FBVyxFQUFFLFFBQVE7Z0NBQ3JCLFNBQVMsRUFBRSxDQUFDLENBQTRCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNO2dDQUNyRCxZQUFZLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO2dDQUNwRCxXQUFXLEVBQUUsQ0FBQyxDQUE0QixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUTs2QkFDMUQsQ0FBQyxFQUNGLENBQ0gsQ0FBQzs0QkFDRixNQUFNO3dCQUNSLEtBQUssYUFBYSxDQUFDLElBQUk7NEJBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQ1QsSUFBSSxjQUFjLG1CQUNiLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztnQ0FDdkIsRUFBRSxFQUFFLGdCQUFnQjtnQ0FDcEIsSUFBSSxFQUFFLGlCQUFpQixDQUFDLGNBQWM7Z0NBQ3RDLFdBQVcsRUFBRSxJQUFJO2dDQUNqQixRQUFRLEVBQUUsS0FBSztnQ0FDZixZQUFZLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO2dDQUNwRCxnQkFBZ0IsRUFBRSxDQUFDOzZCQUNwQixDQUFDLEVBQ0YsQ0FDSCxDQUFDOzRCQUNGLE1BQU07cUJBQ1Q7aUJBQ0Y7YUFDRjtTQUNGO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzs7QUE3WE0seUJBQVksR0FBRztJQUNwQixRQUFRLEVBQUUsSUFBSTtJQUNkLFVBQVUsRUFBRSxFQUFFO0lBQ2QscUJBQXFCLEVBQUUsSUFBSTtJQUMzQixnQkFBZ0IsRUFBRSxLQUFLO0lBQ3ZCLGlCQUFpQixFQUFFLElBQUk7SUFDdkIsV0FBVyxFQUFFLElBQUk7SUFDakIsa0JBQWtCLEVBQUUsS0FBSztJQUN6QixjQUFjLEVBQUUsSUFBSTtJQUNwQixlQUFlLEVBQUUsU0FBUztJQUMxQixxQkFBcUIsRUFBRSxJQUFJO0lBQzNCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLGNBQWMsRUFBRSxRQUFRO0lBQ3hCLHFCQUFxQixFQUFFLElBQUk7Q0FDNUIsQ0FBQztBQWtYSixTQUFTLGlCQUFpQixDQUFDLFFBQTZCO0lBQ3RELE1BQU0sRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUMsR0FBRyxRQUFRLENBQUM7SUFDNUUsT0FBTztRQUNMLEtBQUs7UUFDTCxNQUFNO1FBQ04sU0FBUztRQUNULFFBQVE7UUFDUixJQUFJO1FBQ0osS0FBSztRQUNMLE9BQU87S0FDUixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAyMiBGbG93bWFwQmx1ZVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqL1xuaW1wb3J0IHtDb21wb3NpdGVMYXllcn0gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG5pbXBvcnQge1NjYXR0ZXJwbG90TGF5ZXJ9IGZyb20gJ0BkZWNrLmdsL2xheWVycyc7XG5pbXBvcnQge1xuICBjb2xvckFzUmdiYSxcbiAgRmxvd0xpbmVzTGF5ZXJBdHRyaWJ1dGVzLFxuICBGbG93bWFwRGF0YSxcbiAgRmxvd21hcERhdGFBY2Nlc3NvcnMsXG4gIEZsb3dtYXBEYXRhUHJvdmlkZXIsXG4gIGdldEZsb3dMaW5lQXR0cmlidXRlc0J5SW5kZXgsXG4gIGdldEZsb3dtYXBDb2xvcnMsXG4gIGdldE91dGVyQ2lyY2xlUmFkaXVzQnlJbmRleCxcbiAgZ2V0TG9jYXRpb25DZW50cm9pZEJ5SW5kZXgsXG4gIGlzRmxvd21hcERhdGEsXG4gIGlzRmxvd21hcERhdGFQcm92aWRlcixcbiAgTGF5ZXJzRGF0YSxcbiAgTG9jYWxGbG93bWFwRGF0YVByb3ZpZGVyLFxuICBMb2NhdGlvbkZpbHRlck1vZGUsXG4gIFZpZXdwb3J0UHJvcHMsXG4gIEZsb3dtYXBBZ2dyZWdhdGVBY2Nlc3NvcnMsXG59IGZyb20gJ0BmbG93bWFwLmdsL2RhdGEnO1xuaW1wb3J0IEFuaW1hdGVkRmxvd0xpbmVzTGF5ZXIgZnJvbSAnLi9BbmltYXRlZEZsb3dMaW5lc0xheWVyJztcbmltcG9ydCBGbG93Q2lyY2xlc0xheWVyIGZyb20gJy4vRmxvd0NpcmNsZXNMYXllcic7XG5pbXBvcnQgRmxvd0xpbmVzTGF5ZXIgZnJvbSAnLi9GbG93TGluZXNMYXllcic7XG5pbXBvcnQge1xuICBGbG93bWFwTGF5ZXJQaWNraW5nSW5mbyxcbiAgTGF5ZXJQcm9wcyxcbiAgUGlja2luZ0luZm8sXG4gIFBpY2tpbmdUeXBlLFxufSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgRmxvd21hcExheWVyUHJvcHM8TCwgRj4gPSB7XG4gIGRhdGE/OiBGbG93bWFwRGF0YTxMLCBGPjtcbiAgZGF0YVByb3ZpZGVyPzogRmxvd21hcERhdGFQcm92aWRlcjxMLCBGPjtcbiAgbG9jYXRpb25Ub3RhbHNFbmFibGVkPzogYm9vbGVhbjtcbiAgYWRhcHRpdmVTY2FsZXNFbmFibGVkPzogYm9vbGVhbjtcbiAgYW5pbWF0aW9uRW5hYmxlZD86IGJvb2xlYW47XG4gIGNsdXN0ZXJpbmdFbmFibGVkPzogYm9vbGVhbjtcbiAgY2x1c3RlcmluZ0xldmVsPzogbnVtYmVyO1xuICBmYWRlRW5hYmxlZD86IGJvb2xlYW47XG4gIGZhZGVPcGFjaXR5RW5hYmxlZD86IGJvb2xlYW47XG4gIGNsdXN0ZXJpbmdBdXRvPzogYm9vbGVhbjtcbiAgZGFya01vZGU/OiBib29sZWFuO1xuICBmYWRlQW1vdW50PzogbnVtYmVyO1xuICBjb2xvclNjaGVtZT86IHN0cmluZztcbiAgaGlnaGxpZ2h0Q29sb3I/OiBzdHJpbmc7XG4gIG1heFRvcEZsb3dzRGlzcGxheU51bT86IG51bWJlcjtcbiAgb25Ib3Zlcj86IChcbiAgICBpbmZvOiBGbG93bWFwTGF5ZXJQaWNraW5nSW5mbzxMLCBGPiB8IHVuZGVmaW5lZCxcbiAgICBldmVudDogU291cmNlRXZlbnQsXG4gICkgPT4gdm9pZDtcbiAgb25DbGljaz86IChpbmZvOiBGbG93bWFwTGF5ZXJQaWNraW5nSW5mbzxMLCBGPiwgZXZlbnQ6IFNvdXJjZUV2ZW50KSA9PiB2b2lkO1xufSAmIFBhcnRpYWw8Rmxvd21hcERhdGFBY2Nlc3NvcnM8TCwgRj4+ICZcbiAgTGF5ZXJQcm9wcztcblxuZW51bSBIaWdobGlnaHRUeXBlIHtcbiAgTE9DQVRJT04gPSAnbG9jYXRpb24nLFxuICBGTE9XID0gJ2Zsb3cnLFxufVxuXG50eXBlIEhpZ2hsaWdodGVkTG9jYXRpb25PYmplY3QgPSB7XG4gIHR5cGU6IEhpZ2hsaWdodFR5cGUuTE9DQVRJT047XG4gIGNlbnRyb2lkOiBbbnVtYmVyLCBudW1iZXJdO1xuICByYWRpdXM6IG51bWJlcjtcbn07XG5cbnR5cGUgSGlnaGxpZ2h0ZWRGbG93T2JqZWN0ID0ge1xuICB0eXBlOiBIaWdobGlnaHRUeXBlLkZMT1c7XG4gIGxpbmVBdHRyaWJ1dGVzOiBGbG93TGluZXNMYXllckF0dHJpYnV0ZXM7XG59O1xuXG50eXBlIEhpZ2hsaWdodGVkT2JqZWN0ID0gSGlnaGxpZ2h0ZWRMb2NhdGlvbk9iamVjdCB8IEhpZ2hsaWdodGVkRmxvd09iamVjdDtcblxudHlwZSBTdGF0ZTxMLCBGPiA9IHtcbiAgYWNjZXNzb3JzOiBGbG93bWFwQWdncmVnYXRlQWNjZXNzb3JzPEwsIEY+O1xuICBkYXRhUHJvdmlkZXI6IEZsb3dtYXBEYXRhUHJvdmlkZXI8TCwgRj47XG4gIGxheWVyc0RhdGE6IExheWVyc0RhdGEgfCB1bmRlZmluZWQ7XG4gIGhpZ2hsaWdodGVkT2JqZWN0OiBIaWdobGlnaHRlZE9iamVjdCB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCB0eXBlIFNvdXJjZUV2ZW50ID0ge3NyY0V2ZW50OiBNb3VzZUV2ZW50fTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmxvd21hcExheWVyPEwsIEY+IGV4dGVuZHMgQ29tcG9zaXRlTGF5ZXIge1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGRhcmtNb2RlOiB0cnVlLFxuICAgIGZhZGVBbW91bnQ6IDUwLFxuICAgIGxvY2F0aW9uVG90YWxzRW5hYmxlZDogdHJ1ZSxcbiAgICBhbmltYXRpb25FbmFibGVkOiBmYWxzZSxcbiAgICBjbHVzdGVyaW5nRW5hYmxlZDogdHJ1ZSxcbiAgICBmYWRlRW5hYmxlZDogdHJ1ZSxcbiAgICBmYWRlT3BhY2l0eUVuYWJsZWQ6IGZhbHNlLFxuICAgIGNsdXN0ZXJpbmdBdXRvOiB0cnVlLFxuICAgIGNsdXN0ZXJpbmdMZXZlbDogdW5kZWZpbmVkLFxuICAgIGFkYXB0aXZlU2NhbGVzRW5hYmxlZDogdHJ1ZSxcbiAgICBjb2xvclNjaGVtZTogJ1RlYWwnLFxuICAgIGhpZ2hsaWdodENvbG9yOiAnb3JhbmdlJyxcbiAgICBtYXhUb3BGbG93c0Rpc3BsYXlOdW06IDUwMDAsXG4gIH07XG4gIHN0YXRlOiBTdGF0ZTxMLCBGPiB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgY29uc3RydWN0b3IocHJvcHM6IEZsb3dtYXBMYXllclByb3BzPEwsIEY+KSB7XG4gICAgc3VwZXIoe1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBkYXRhUHJvdmlkZXI6IHtcbiAgICAgICAgLy8gVG8gYXZvaWQgZGVjay5nbCBwcm9wcyBkaWZmaW5nIG9uIGNvbWxpbmsgd29ya2VyIHByb3h5IGNhdXNpbmcgYW4gZXhjZXB0aW9uXG4gICAgICAgIGRhdGFQcm92aWRlcjogcHJvcHMuZGF0YVByb3ZpZGVyLFxuICAgICAgfSxcbiAgICAgIG9uSG92ZXI6IChpbmZvOiBQaWNraW5nSW5mbzxhbnk+LCBldmVudDogU291cmNlRXZlbnQpID0+IHtcbiAgICAgICAgLy8gVE9ETzogaWYgKGxhc3RIb3ZlckV2ZW50U3RhcnRUaW1lUmVmID4gc3RhcnRUaW1lKSB7XG4gICAgICAgIC8vICAgLy8gU2tpcHBpbmcsIGJlY2F1c2UgdGhpcyBpcyBub3QgdGhlIGxhdGVzdCBob3ZlciBldmVudFxuICAgICAgICAvLyAgIHJldHVybjtcbiAgICAgICAgLy8gfVxuICAgICAgICB0aGlzLnNldFN0YXRlKHtoaWdobGlnaHRlZE9iamVjdDogdGhpcy5fZ2V0SGlnaGxpZ2h0ZWRPYmplY3QoaW5mbyl9KTtcbiAgICAgICAgY29uc3Qge29uSG92ZXJ9ID0gcHJvcHM7XG4gICAgICAgIGlmIChvbkhvdmVyKSB7XG4gICAgICAgICAgdGhpcy5fZ2V0Rmxvd21hcExheWVyUGlja2luZ0luZm8oaW5mbykudGhlbigoaW5mbykgPT5cbiAgICAgICAgICAgIG9uSG92ZXIoaW5mbywgZXZlbnQpLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvbkNsaWNrOiAoaW5mbzogUGlja2luZ0luZm88YW55PiwgZXZlbnQ6IFNvdXJjZUV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHtvbkNsaWNrfSA9IHByb3BzO1xuICAgICAgICBpZiAob25DbGljaykge1xuICAgICAgICAgIHRoaXMuX2dldEZsb3dtYXBMYXllclBpY2tpbmdJbmZvKGluZm8pLnRoZW4oKGluZm8pID0+IHtcbiAgICAgICAgICAgIGlmIChpbmZvKSB7XG4gICAgICAgICAgICAgIG9uQ2xpY2soaW5mbywgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgaW5pdGlhbGl6ZVN0YXRlKCkge1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBhY2Nlc3NvcnM6IG5ldyBGbG93bWFwQWdncmVnYXRlQWNjZXNzb3JzPEwsIEY+KHRoaXMucHJvcHMpLFxuICAgICAgZGF0YVByb3ZpZGVyOiB0aGlzLl9nZXRPck1ha2VEYXRhUHJvdmlkZXIoKSxcbiAgICAgIGxheWVyc0RhdGE6IHVuZGVmaW5lZCxcbiAgICAgIGhpZ2hsaWdodGVkT2JqZWN0OiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZUFjY2Vzc29ycygpIHtcbiAgICB0aGlzLnN0YXRlPy5kYXRhUHJvdmlkZXI/LnNldEFjY2Vzc29ycyh0aGlzLnByb3BzKTtcbiAgICB0aGlzLnNldFN0YXRlKHthY2Nlc3NvcnM6IG5ldyBGbG93bWFwQWdncmVnYXRlQWNjZXNzb3JzKHRoaXMucHJvcHMpfSk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRPck1ha2VEYXRhUHJvdmlkZXIoKSB7XG4gICAgY29uc3Qge2RhdGEsIGRhdGFQcm92aWRlcn0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChpc0Zsb3dtYXBEYXRhUHJvdmlkZXI8TCwgRj4oZGF0YVByb3ZpZGVyPy5kYXRhUHJvdmlkZXIpKSB7XG4gICAgICByZXR1cm4gZGF0YVByb3ZpZGVyLmRhdGFQcm92aWRlcjtcbiAgICB9IGVsc2UgaWYgKGlzRmxvd21hcERhdGE8TCwgRj4oZGF0YSkpIHtcbiAgICAgIGNvbnN0IGRhdGFQcm92aWRlciA9IG5ldyBMb2NhbEZsb3dtYXBEYXRhUHJvdmlkZXI8TCwgRj4odGhpcy5wcm9wcyk7XG4gICAgICBkYXRhUHJvdmlkZXIuc2V0Rmxvd21hcERhdGEoZGF0YSk7XG4gICAgICByZXR1cm4gZGF0YVByb3ZpZGVyO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnRmxvd21hcExheWVyOiBkYXRhIG11c3QgYmUgYSBGbG93bWFwRGF0YVByb3ZpZGVyIG9yIEZsb3dtYXBEYXRhJyxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlRGF0YVByb3ZpZGVyKCkge1xuICAgIHRoaXMuc2V0U3RhdGUoe2RhdGFQcm92aWRlcjogdGhpcy5fZ2V0T3JNYWtlRGF0YVByb3ZpZGVyKCl9KTtcbiAgfVxuXG4gIHNob3VsZFVwZGF0ZVN0YXRlKHBhcmFtczogUmVjb3JkPHN0cmluZywgYW55Pik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHtjaGFuZ2VGbGFnc30gPSBwYXJhbXM7XG4gICAgLy8gaWYgKHRoaXMuX3ZpZXdwb3J0Q2hhbmdlZCgpKSB7XG4gICAgLy8gICByZXR1cm4gdHJ1ZTtcbiAgICAvLyB9XG4gICAgaWYgKGNoYW5nZUZsYWdzLnZpZXdwb3J0Q2hhbmdlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5zaG91bGRVcGRhdGVTdGF0ZShwYXJhbXMpO1xuICAgIC8vIFRPRE86IGJlIHNtYXJ0ZXIgb24gd2hlbiB0byB1cGRhdGVcbiAgICAvLyAoZS5nLiBpZ25vcmUgdmlld3BvcnQgY2hhbmdlcyB3aGVuIGFkYXB0aXZlU2NhbGVzRW5hYmxlZCBhbmQgY2x1c3RlcmluZyBhcmUgZmFsc2UpXG4gIH1cblxuICB1cGRhdGVTdGF0ZSh7b2xkUHJvcHMsIHByb3BzLCBjaGFuZ2VGbGFnc306IFJlY29yZDxzdHJpbmcsIGFueT4pOiB2b2lkIHtcbiAgICBjb25zdCB7ZGF0YVByb3ZpZGVyLCBoaWdobGlnaHRlZE9iamVjdH0gPSB0aGlzLnN0YXRlIHx8IHt9O1xuICAgIGlmICghZGF0YVByb3ZpZGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZUZsYWdzLnByb3BzQ2hhbmdlZCkge1xuICAgICAgLy8gdGhpcy5fdXBkYXRlQWNjZXNzb3JzKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VGbGFncy5kYXRhQ2hhbmdlZCkge1xuICAgICAgdGhpcy5fdXBkYXRlRGF0YVByb3ZpZGVyKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VGbGFncy52aWV3cG9ydENoYW5nZWQgfHwgY2hhbmdlRmxhZ3MuZGF0YUNoYW5nZWQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBoaWdobGlnaHRlZE9iamVjdDogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgY2hhbmdlRmxhZ3Mudmlld3BvcnRDaGFuZ2VkIHx8XG4gICAgICBjaGFuZ2VGbGFncy5wcm9wc09yRGF0YUNoYW5nZWQgLy8gVE9ETyBjYW4gd2UgaWdub3JlIGFjY2Vzc29yIHByb3BzIGNoYW5nZXM/XG4gICAgKSB7XG4gICAgICBkYXRhUHJvdmlkZXIuc2V0Rmxvd21hcFN0YXRlKHRoaXMuX2dldEZsb3dtYXBTdGF0ZSgpKTtcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxheWVyc0RhdGEgPSBhd2FpdCBkYXRhUHJvdmlkZXIuZ2V0TGF5ZXJzRGF0YSgpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtsYXllcnNEYXRhfSk7XG4gICAgICB9KSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2dldFNldHRpbmdzU3RhdGUoKSB7XG4gICAgY29uc3Qge1xuICAgICAgbG9jYXRpb25Ub3RhbHNFbmFibGVkLFxuICAgICAgYWRhcHRpdmVTY2FsZXNFbmFibGVkLFxuICAgICAgYW5pbWF0aW9uRW5hYmxlZCxcbiAgICAgIGNsdXN0ZXJpbmdFbmFibGVkLFxuICAgICAgY2x1c3RlcmluZ0xldmVsLFxuICAgICAgZmFkZUVuYWJsZWQsXG4gICAgICBmYWRlT3BhY2l0eUVuYWJsZWQsXG4gICAgICBjbHVzdGVyaW5nQXV0byxcbiAgICAgIGRhcmtNb2RlLFxuICAgICAgZmFkZUFtb3VudCxcbiAgICAgIGNvbG9yU2NoZW1lLFxuICAgICAgaGlnaGxpZ2h0Q29sb3IsXG4gICAgICBtYXhUb3BGbG93c0Rpc3BsYXlOdW0sXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvY2F0aW9uVG90YWxzRW5hYmxlZCxcbiAgICAgIGFkYXB0aXZlU2NhbGVzRW5hYmxlZCxcbiAgICAgIGFuaW1hdGlvbkVuYWJsZWQsXG4gICAgICBjbHVzdGVyaW5nRW5hYmxlZCxcbiAgICAgIGNsdXN0ZXJpbmdMZXZlbCxcbiAgICAgIGZhZGVFbmFibGVkLFxuICAgICAgZmFkZU9wYWNpdHlFbmFibGVkLFxuICAgICAgY2x1c3RlcmluZ0F1dG8sXG4gICAgICBkYXJrTW9kZSxcbiAgICAgIGZhZGVBbW91bnQsXG4gICAgICBjb2xvclNjaGVtZSxcbiAgICAgIGhpZ2hsaWdodENvbG9yLFxuICAgICAgbWF4VG9wRmxvd3NEaXNwbGF5TnVtLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9nZXRGbG93bWFwU3RhdGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZpZXdwb3J0OiBwaWNrVmlld3BvcnRQcm9wcyh0aGlzLmNvbnRleHQudmlld3BvcnQpLFxuICAgICAgZmlsdGVyU3RhdGU6IHtcbiAgICAgICAgc2VsZWN0ZWRMb2NhdGlvbnM6IHVuZGVmaW5lZCxcbiAgICAgICAgbG9jYXRpb25GaWx0ZXJNb2RlOiBMb2NhdGlvbkZpbHRlck1vZGUuQUxMLFxuICAgICAgICBzZWxlY3RlZFRpbWVSYW5nZTogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIHNldHRpbmdzU3RhdGU6IHRoaXMuX2dldFNldHRpbmdzU3RhdGUoKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfZ2V0Rmxvd21hcExheWVyUGlja2luZ0luZm8oXG4gICAgaW5mbzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgKTogUHJvbWlzZTxGbG93bWFwTGF5ZXJQaWNraW5nSW5mbzxMLCBGPiB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHtpbmRleCwgc291cmNlTGF5ZXJ9ID0gaW5mbztcbiAgICBjb25zdCB7ZGF0YVByb3ZpZGVyLCBhY2Nlc3NvcnN9ID0gdGhpcy5zdGF0ZSB8fCB7fTtcbiAgICBpZiAoIWRhdGFQcm92aWRlciB8fCAhYWNjZXNzb3JzKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBjb21tb25JbmZvID0ge1xuICAgICAgLy8gLi4uaW5mbyxcbiAgICAgIGxheWVyOiBpbmZvLmxheWVyLFxuICAgICAgaW5kZXg6IGluZm8uaW5kZXgsXG4gICAgICB4OiBpbmZvLngsXG4gICAgICB5OiBpbmZvLnksXG4gICAgICBjb29yZGluYXRlOiBpbmZvLmNvb3JkaW5hdGUsXG4gICAgfTtcbiAgICBpZiAoXG4gICAgICBzb3VyY2VMYXllciBpbnN0YW5jZW9mIEZsb3dMaW5lc0xheWVyIHx8XG4gICAgICBzb3VyY2VMYXllciBpbnN0YW5jZW9mIEFuaW1hdGVkRmxvd0xpbmVzTGF5ZXJcbiAgICApIHtcbiAgICAgIGNvbnN0IGZsb3cgPVxuICAgICAgICBpbmRleCA9PT0gLTEgPyB1bmRlZmluZWQgOiBhd2FpdCBkYXRhUHJvdmlkZXIuZ2V0Rmxvd0J5SW5kZXgoaW5kZXgpO1xuICAgICAgaWYgKGZsb3cpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luID0gYXdhaXQgZGF0YVByb3ZpZGVyLmdldExvY2F0aW9uQnlJZChcbiAgICAgICAgICBhY2Nlc3NvcnMuZ2V0Rmxvd09yaWdpbklkKGZsb3cpLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBkZXN0ID0gYXdhaXQgZGF0YVByb3ZpZGVyLmdldExvY2F0aW9uQnlJZChcbiAgICAgICAgICBhY2Nlc3NvcnMuZ2V0Rmxvd0Rlc3RJZChmbG93KSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG9yaWdpbiAmJiBkZXN0KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmNvbW1vbkluZm8sXG4gICAgICAgICAgICB0eXBlOiBQaWNraW5nVHlwZS5GTE9XLFxuICAgICAgICAgICAgb2JqZWN0OiBmbG93LFxuICAgICAgICAgICAgb3JpZ2luOiBvcmlnaW4sXG4gICAgICAgICAgICBkZXN0OiBkZXN0LFxuICAgICAgICAgICAgY291bnQ6IGFjY2Vzc29ycy5nZXRGbG93TWFnbml0dWRlKGZsb3cpLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHNvdXJjZUxheWVyIGluc3RhbmNlb2YgRmxvd0NpcmNsZXNMYXllcikge1xuICAgICAgY29uc3QgbG9jYXRpb24gPVxuICAgICAgICBpbmRleCA9PT0gLTEgPyB1bmRlZmluZWQgOiBhd2FpdCBkYXRhUHJvdmlkZXIuZ2V0TG9jYXRpb25CeUluZGV4KGluZGV4KTtcblxuICAgICAgaWYgKGxvY2F0aW9uKSB7XG4gICAgICAgIGNvbnN0IGlkID0gYWNjZXNzb3JzLmdldExvY2F0aW9uSWQobG9jYXRpb24pO1xuICAgICAgICBjb25zdCBuYW1lID0gYWNjZXNzb3JzLmdldExvY2F0aW9uTmFtZShsb2NhdGlvbik7XG4gICAgICAgIGNvbnN0IHRvdGFscyA9IGF3YWl0IGRhdGFQcm92aWRlci5nZXRUb3RhbHNGb3JMb2NhdGlvbihpZCk7XG4gICAgICAgIGNvbnN0IHtjaXJjbGVBdHRyaWJ1dGVzfSA9IHRoaXMuc3RhdGU/LmxheWVyc0RhdGEgfHwge307XG4gICAgICAgIGlmICh0b3RhbHMgJiYgY2lyY2xlQXR0cmlidXRlcykge1xuICAgICAgICAgIGNvbnN0IGNpcmNsZVJhZGl1cyA9IGdldE91dGVyQ2lyY2xlUmFkaXVzQnlJbmRleChcbiAgICAgICAgICAgIGNpcmNsZUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBpbmZvLmluZGV4LFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmNvbW1vbkluZm8sXG4gICAgICAgICAgICB0eXBlOiBQaWNraW5nVHlwZS5MT0NBVElPTixcbiAgICAgICAgICAgIG9iamVjdDogbG9jYXRpb24sXG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB0b3RhbHMsXG4gICAgICAgICAgICBjaXJjbGVSYWRpdXM6IGNpcmNsZVJhZGl1cyxcbiAgICAgICAgICAgIGV2ZW50OiB1bmRlZmluZWQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIF9nZXRIaWdobGlnaHRlZE9iamVjdChcbiAgICBpbmZvOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICApOiBIaWdobGlnaHRlZE9iamVjdCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qge2luZGV4LCBzb3VyY2VMYXllcn0gPSBpbmZvO1xuICAgIGlmIChpbmRleCA8IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKFxuICAgICAgc291cmNlTGF5ZXIgaW5zdGFuY2VvZiBGbG93TGluZXNMYXllciB8fFxuICAgICAgc291cmNlTGF5ZXIgaW5zdGFuY2VvZiBBbmltYXRlZEZsb3dMaW5lc0xheWVyXG4gICAgKSB7XG4gICAgICBjb25zdCB7bGluZUF0dHJpYnV0ZXN9ID0gdGhpcy5zdGF0ZT8ubGF5ZXJzRGF0YSB8fCB7fTtcbiAgICAgIGlmIChsaW5lQXR0cmlidXRlcykge1xuICAgICAgICBsZXQgYXR0cnMgPSBnZXRGbG93TGluZUF0dHJpYnV0ZXNCeUluZGV4KGxpbmVBdHRyaWJ1dGVzLCBpbmRleCk7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLmZhZGVPcGFjaXR5RW5hYmxlZCkge1xuICAgICAgICAgIGF0dHJzID0ge1xuICAgICAgICAgICAgLi4uYXR0cnMsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgIC4uLmF0dHJzLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgIGdldENvbG9yOiB7XG4gICAgICAgICAgICAgICAgLi4uYXR0cnMuYXR0cmlidXRlcy5nZXRDb2xvcixcbiAgICAgICAgICAgICAgICB2YWx1ZTogbmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgICAgICAgICAgICAgLi4uYXR0cnMuYXR0cmlidXRlcy5nZXRDb2xvci52YWx1ZS5zbGljZSgwLCAzKSxcbiAgICAgICAgICAgICAgICAgIDI1NSwgLy8gdGhlIGhpZ2hsaWdodCBjb2xvciBzaG91bGQgYmUgYWx3YXlzIG9wYXF1ZVxuICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogSGlnaGxpZ2h0VHlwZS5GTE9XLFxuICAgICAgICAgIGxpbmVBdHRyaWJ1dGVzOiBhdHRycyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHNvdXJjZUxheWVyIGluc3RhbmNlb2YgRmxvd0NpcmNsZXNMYXllcikge1xuICAgICAgY29uc3Qge2NpcmNsZUF0dHJpYnV0ZXN9ID0gdGhpcy5zdGF0ZT8ubGF5ZXJzRGF0YSB8fCB7fTtcbiAgICAgIGlmIChjaXJjbGVBdHRyaWJ1dGVzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogSGlnaGxpZ2h0VHlwZS5MT0NBVElPTixcbiAgICAgICAgICBjZW50cm9pZDogZ2V0TG9jYXRpb25DZW50cm9pZEJ5SW5kZXgoY2lyY2xlQXR0cmlidXRlcywgaW5kZXgpLFxuICAgICAgICAgIHJhZGl1czogZ2V0T3V0ZXJDaXJjbGVSYWRpdXNCeUluZGV4KGNpcmNsZUF0dHJpYnV0ZXMsIGluZGV4KSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJlbmRlckxheWVycygpOiBBcnJheTxhbnk+IHtcbiAgICBjb25zdCBsYXllcnMgPSBbXTtcbiAgICBpZiAodGhpcy5zdGF0ZT8ubGF5ZXJzRGF0YSkge1xuICAgICAgY29uc3Qge2xheWVyc0RhdGEsIGhpZ2hsaWdodGVkT2JqZWN0fSA9IHRoaXMuc3RhdGU7XG4gICAgICBjb25zdCB7Y2lyY2xlQXR0cmlidXRlcywgbGluZUF0dHJpYnV0ZXN9ID0gbGF5ZXJzRGF0YSB8fCB7fTtcbiAgICAgIGlmIChjaXJjbGVBdHRyaWJ1dGVzICYmIGxpbmVBdHRyaWJ1dGVzKSB7XG4gICAgICAgIGNvbnN0IGZsb3dtYXBDb2xvcnMgPSBnZXRGbG93bWFwQ29sb3JzKHRoaXMuX2dldFNldHRpbmdzU3RhdGUoKSk7XG4gICAgICAgIGNvbnN0IG91dGxpbmVDb2xvciA9IGNvbG9yQXNSZ2JhKFxuICAgICAgICAgIGZsb3dtYXBDb2xvcnMub3V0bGluZUNvbG9yIHx8ICh0aGlzLnByb3BzLmRhcmtNb2RlID8gJyMwMDAnIDogJyNmZmYnKSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY29tbW9uTGluZUxheWVyUHJvcHMgPSB7XG4gICAgICAgICAgZGF0YTogbGluZUF0dHJpYnV0ZXMsXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgLi4udGhpcy5wcm9wcy5wYXJhbWV0ZXJzLFxuICAgICAgICAgICAgLy8gcHJldmVudCB6LWZpZ2h0aW5nIGF0IG5vbi16ZXJvIGJlYXJpbmcvcGl0Y2hcbiAgICAgICAgICAgIGRlcHRoVGVzdDogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuYW5pbWF0aW9uRW5hYmxlZCkge1xuICAgICAgICAgIGxheWVycy5wdXNoKFxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgbmV3IEFuaW1hdGVkRmxvd0xpbmVzTGF5ZXIoe1xuICAgICAgICAgICAgICAuLi50aGlzLmdldFN1YkxheWVyUHJvcHMoe1xuICAgICAgICAgICAgICAgIC4uLmNvbW1vbkxpbmVMYXllclByb3BzLFxuICAgICAgICAgICAgICAgIGlkOiAnYW5pbWF0ZWQtZmxvdy1saW5lcycsXG4gICAgICAgICAgICAgICAgZHJhd091dGxpbmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHRoaWNrbmVzc1VuaXQ6IDIwLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGF5ZXJzLnB1c2goXG4gICAgICAgICAgICBuZXcgRmxvd0xpbmVzTGF5ZXIoe1xuICAgICAgICAgICAgICAuLi50aGlzLmdldFN1YkxheWVyUHJvcHMoe1xuICAgICAgICAgICAgICAgIC4uLmNvbW1vbkxpbmVMYXllclByb3BzLFxuICAgICAgICAgICAgICAgIGlkOiAnZmxvdy1saW5lcycsXG4gICAgICAgICAgICAgICAgZHJhd091dGxpbmU6IHRydWUsXG4gICAgICAgICAgICAgICAgb3V0bGluZUNvbG9yOiBvdXRsaW5lQ29sb3IsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBsYXllcnMucHVzaChcbiAgICAgICAgICBuZXcgRmxvd0NpcmNsZXNMYXllcihcbiAgICAgICAgICAgIHRoaXMuZ2V0U3ViTGF5ZXJQcm9wcyh7XG4gICAgICAgICAgICAgIGlkOiAnY2lyY2xlcycsXG4gICAgICAgICAgICAgIGRhdGE6IGNpcmNsZUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgIGVtcHR5Q29sb3I6IHRoaXMucHJvcHMuZGFya01vZGVcbiAgICAgICAgICAgICAgICA/IFswLCAwLCAwLCAyNTVdXG4gICAgICAgICAgICAgICAgOiBbMjU1LCAyNTUsIDI1NSwgMjU1XSxcbiAgICAgICAgICAgICAgb3V0bGluZUVtcHR5TWl4OiAwLjQsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgICBpZiAoaGlnaGxpZ2h0ZWRPYmplY3QpIHtcbiAgICAgICAgICBzd2l0Y2ggKGhpZ2hsaWdodGVkT2JqZWN0LnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgSGlnaGxpZ2h0VHlwZS5MT0NBVElPTjpcbiAgICAgICAgICAgICAgbGF5ZXJzLnB1c2goXG4gICAgICAgICAgICAgICAgbmV3IFNjYXR0ZXJwbG90TGF5ZXIoe1xuICAgICAgICAgICAgICAgICAgLi4udGhpcy5nZXRTdWJMYXllclByb3BzKHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6ICdsb2NhdGlvbi1oaWdobGlnaHQnLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBbaGlnaGxpZ2h0ZWRPYmplY3RdLFxuICAgICAgICAgICAgICAgICAgICBwaWNrYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGZpbGxlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGxpbmVXaWR0aFVuaXRzOiAncGl4ZWxzJyxcbiAgICAgICAgICAgICAgICAgICAgZ2V0TGluZVdpZHRoOiAyLFxuICAgICAgICAgICAgICAgICAgICByYWRpdXNVbml0czogJ3BpeGVscycsXG4gICAgICAgICAgICAgICAgICAgIGdldFJhZGl1czogKGQ6IEhpZ2hsaWdodGVkTG9jYXRpb25PYmplY3QpID0+IGQucmFkaXVzLFxuICAgICAgICAgICAgICAgICAgICBnZXRMaW5lQ29sb3I6IGNvbG9yQXNSZ2JhKHRoaXMucHJvcHMuaGlnaGxpZ2h0Q29sb3IpLFxuICAgICAgICAgICAgICAgICAgICBnZXRQb3NpdGlvbjogKGQ6IEhpZ2hsaWdodGVkTG9jYXRpb25PYmplY3QpID0+IGQuY2VudHJvaWQsXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEhpZ2hsaWdodFR5cGUuRkxPVzpcbiAgICAgICAgICAgICAgbGF5ZXJzLnB1c2goXG4gICAgICAgICAgICAgICAgbmV3IEZsb3dMaW5lc0xheWVyKHtcbiAgICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0U3ViTGF5ZXJQcm9wcyh7XG4gICAgICAgICAgICAgICAgICAgIGlkOiAnZmxvdy1oaWdobGlnaHQnLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBoaWdobGlnaHRlZE9iamVjdC5saW5lQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgZHJhd091dGxpbmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHBpY2thYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgb3V0bGluZUNvbG9yOiBjb2xvckFzUmdiYSh0aGlzLnByb3BzLmhpZ2hsaWdodENvbG9yKSxcbiAgICAgICAgICAgICAgICAgICAgb3V0bGluZVRoaWNrbmVzczogMSxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGF5ZXJzO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBpY2tWaWV3cG9ydFByb3BzKHZpZXdwb3J0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogVmlld3BvcnRQcm9wcyB7XG4gIGNvbnN0IHt3aWR0aCwgaGVpZ2h0LCBsb25naXR1ZGUsIGxhdGl0dWRlLCB6b29tLCBwaXRjaCwgYmVhcmluZ30gPSB2aWV3cG9ydDtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgbG9uZ2l0dWRlLFxuICAgIGxhdGl0dWRlLFxuICAgIHpvb20sXG4gICAgcGl0Y2gsXG4gICAgYmVhcmluZyxcbiAgfTtcbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flowmap.gl/layers",
|
|
3
|
-
"version": "8.0.0-alpha.
|
|
3
|
+
"version": "8.0.0-alpha.6",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"module": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"@luma.gl/constants": "^8.5.10",
|
|
19
19
|
"@luma.gl/core": "^8.5.10"
|
|
20
20
|
},
|
|
21
|
-
"gitHead": "
|
|
21
|
+
"gitHead": "3d9b5831461c4df182f289892dc7af90718d9fbc",
|
|
22
22
|
"publishConfig": {
|
|
23
23
|
"access": "public"
|
|
24
24
|
}
|
|
@@ -31,7 +31,7 @@ export interface Props extends LayerProps {
|
|
|
31
31
|
opacity?: number;
|
|
32
32
|
pickable?: boolean;
|
|
33
33
|
emptyColor?: RGBA;
|
|
34
|
-
|
|
34
|
+
outlineEmptyMix?: number;
|
|
35
35
|
getColor?: (d: FlowCirclesDatum) => RGBA;
|
|
36
36
|
getPosition?: (d: FlowCirclesDatum) => [number, number];
|
|
37
37
|
getInRadius?: (d: FlowCirclesDatum) => number;
|
|
@@ -42,7 +42,7 @@ export interface Props extends LayerProps {
|
|
|
42
42
|
|
|
43
43
|
const DEFAULT_COLOR = [0, 0, 0, 255];
|
|
44
44
|
const DEFAULT_EMPTY_COLOR = [255, 255, 255, 255];
|
|
45
|
-
const
|
|
45
|
+
const DEFAULT_OUTLINE_EMPTY_MIX = 0.4;
|
|
46
46
|
|
|
47
47
|
class FlowCirclesLayer extends Layer {
|
|
48
48
|
static layerName = 'FlowCirclesLayer';
|
|
@@ -50,7 +50,7 @@ class FlowCirclesLayer extends Layer {
|
|
|
50
50
|
static defaultProps = {
|
|
51
51
|
getColor: {type: 'accessor', value: DEFAULT_COLOR},
|
|
52
52
|
emptyColor: {type: 'accessor', value: DEFAULT_EMPTY_COLOR},
|
|
53
|
-
|
|
53
|
+
outlineEmptyMix: {type: 'accessor', value: DEFAULT_OUTLINE_EMPTY_MIX},
|
|
54
54
|
getPosition: {type: 'accessor', value: (d: FlowCirclesDatum) => d.position},
|
|
55
55
|
getInRadius: {type: 'accessor', value: 1},
|
|
56
56
|
getOutRadius: {type: 'accessor', value: 1},
|
|
@@ -116,12 +116,12 @@ class FlowCirclesLayer extends Layer {
|
|
|
116
116
|
}
|
|
117
117
|
|
|
118
118
|
draw({uniforms}: any) {
|
|
119
|
-
const {emptyColor,
|
|
119
|
+
const {emptyColor, outlineEmptyMix} = this.props;
|
|
120
120
|
this.state.model
|
|
121
121
|
.setUniforms({
|
|
122
122
|
...uniforms,
|
|
123
123
|
emptyColor,
|
|
124
|
-
|
|
124
|
+
outlineEmptyMix,
|
|
125
125
|
})
|
|
126
126
|
.draw();
|
|
127
127
|
}
|
|
@@ -17,12 +17,12 @@
|
|
|
17
17
|
*/
|
|
18
18
|
export default `\
|
|
19
19
|
#define SHADER_NAME flow-circles-layer-fragment-shader
|
|
20
|
-
#define SOFT_OUTLINE 0.
|
|
20
|
+
#define SOFT_OUTLINE 0.05
|
|
21
21
|
#define EPS 0.05
|
|
22
22
|
precision highp float;
|
|
23
23
|
|
|
24
24
|
uniform vec4 emptyColor;
|
|
25
|
-
uniform
|
|
25
|
+
uniform float outlineEmptyMix;
|
|
26
26
|
|
|
27
27
|
varying vec4 vColor;
|
|
28
28
|
varying vec2 unitPosition;
|
|
@@ -46,26 +46,29 @@ void main(void) {
|
|
|
46
46
|
when_gt(unitInRadius, unitOutRadius)
|
|
47
47
|
);
|
|
48
48
|
vec4 outlineColor = mix(
|
|
49
|
-
|
|
49
|
+
mix(vColor, emptyColor / 255., outlineEmptyMix),
|
|
50
|
+
vColor,
|
|
50
51
|
when_gt(unitInRadius, unitOutRadius)
|
|
51
52
|
);
|
|
52
53
|
|
|
53
54
|
float innerR = min(unitInRadius, unitOutRadius) * (1.0 - SOFT_OUTLINE);
|
|
54
55
|
|
|
55
56
|
// Inner circle
|
|
56
|
-
float step2 = innerR - EPS;
|
|
57
|
-
float step3 = innerR;
|
|
57
|
+
float step2 = innerR - 2.0 * EPS;
|
|
58
|
+
float step3 = innerR - EPS;
|
|
58
59
|
|
|
59
60
|
// Ring
|
|
60
|
-
float step4 = innerR
|
|
61
|
-
float step5 = 1.0 - SOFT_OUTLINE - EPS
|
|
62
|
-
float step6 = 1.0 - SOFT_OUTLINE;
|
|
61
|
+
float step4 = innerR;
|
|
62
|
+
// float step5 = 1.0 - SOFT_OUTLINE - EPS;
|
|
63
|
+
// float step6 = 1.0 - SOFT_OUTLINE;
|
|
64
|
+
float step5 = 1.0 - 5.0 * EPS;
|
|
65
|
+
float step6 = 1.0;
|
|
63
66
|
|
|
64
67
|
gl_FragColor = vColor;
|
|
65
68
|
gl_FragColor = mix(gl_FragColor, emptyColor / 255., smoothstep(step2, step3, distToCenter));
|
|
66
69
|
gl_FragColor = mix(gl_FragColor, ringColor, smoothstep(step3, step4, distToCenter));
|
|
67
70
|
gl_FragColor = mix(gl_FragColor, outlineColor, smoothstep(step5, step6, distToCenter));
|
|
68
|
-
gl_FragColor = mix(gl_FragColor, emptyColor / 255., smoothstep(step6, 1.0, distToCenter));
|
|
71
|
+
// gl_FragColor = mix(gl_FragColor, emptyColor / 255., smoothstep(step6, 1.0, distToCenter));
|
|
69
72
|
gl_FragColor.a *= smoothstep(0.0, SOFT_OUTLINE, 1.0 - distToCenter);
|
|
70
73
|
DECKGL_FILTER_COLOR(gl_FragColor, geometry);
|
|
71
74
|
}
|
package/src/FlowmapLayer.ts
CHANGED
|
@@ -45,7 +45,8 @@ import {
|
|
|
45
45
|
} from './types';
|
|
46
46
|
|
|
47
47
|
export type FlowmapLayerProps<L, F> = {
|
|
48
|
-
data
|
|
48
|
+
data?: FlowmapData<L, F>;
|
|
49
|
+
dataProvider?: FlowmapDataProvider<L, F>;
|
|
49
50
|
locationTotalsEnabled?: boolean;
|
|
50
51
|
adaptiveScalesEnabled?: boolean;
|
|
51
52
|
animationEnabled?: boolean;
|
|
@@ -115,6 +116,10 @@ export default class FlowmapLayer<L, F> extends CompositeLayer {
|
|
|
115
116
|
public constructor(props: FlowmapLayerProps<L, F>) {
|
|
116
117
|
super({
|
|
117
118
|
...props,
|
|
119
|
+
dataProvider: {
|
|
120
|
+
// To avoid deck.gl props diffing on comlink worker proxy causing an exception
|
|
121
|
+
dataProvider: props.dataProvider,
|
|
122
|
+
},
|
|
118
123
|
onHover: (info: PickingInfo<any>, event: SourceEvent) => {
|
|
119
124
|
// TODO: if (lastHoverEventStartTimeRef > startTime) {
|
|
120
125
|
// // Skipping, because this is not the latest hover event
|
|
@@ -144,7 +149,7 @@ export default class FlowmapLayer<L, F> extends CompositeLayer {
|
|
|
144
149
|
initializeState() {
|
|
145
150
|
this.state = {
|
|
146
151
|
accessors: new FlowmapAggregateAccessors<L, F>(this.props),
|
|
147
|
-
dataProvider: this.
|
|
152
|
+
dataProvider: this._getOrMakeDataProvider(),
|
|
148
153
|
layersData: undefined,
|
|
149
154
|
highlightedObject: undefined,
|
|
150
155
|
};
|
|
@@ -155,10 +160,10 @@ export default class FlowmapLayer<L, F> extends CompositeLayer {
|
|
|
155
160
|
this.setState({accessors: new FlowmapAggregateAccessors(this.props)});
|
|
156
161
|
}
|
|
157
162
|
|
|
158
|
-
private
|
|
159
|
-
const {data} = this.props;
|
|
160
|
-
if (isFlowmapDataProvider<L, F>(
|
|
161
|
-
return
|
|
163
|
+
private _getOrMakeDataProvider() {
|
|
164
|
+
const {data, dataProvider} = this.props;
|
|
165
|
+
if (isFlowmapDataProvider<L, F>(dataProvider?.dataProvider)) {
|
|
166
|
+
return dataProvider.dataProvider;
|
|
162
167
|
} else if (isFlowmapData<L, F>(data)) {
|
|
163
168
|
const dataProvider = new LocalFlowmapDataProvider<L, F>(this.props);
|
|
164
169
|
dataProvider.setFlowmapData(data);
|
|
@@ -170,7 +175,7 @@ export default class FlowmapLayer<L, F> extends CompositeLayer {
|
|
|
170
175
|
}
|
|
171
176
|
|
|
172
177
|
private _updateDataProvider() {
|
|
173
|
-
this.setState({dataProvider: this.
|
|
178
|
+
this.setState({dataProvider: this._getOrMakeDataProvider()});
|
|
174
179
|
}
|
|
175
180
|
|
|
176
181
|
shouldUpdateState(params: Record<string, any>): boolean {
|
|
@@ -193,7 +198,7 @@ export default class FlowmapLayer<L, F> extends CompositeLayer {
|
|
|
193
198
|
}
|
|
194
199
|
|
|
195
200
|
if (changeFlags.propsChanged) {
|
|
196
|
-
this._updateAccessors();
|
|
201
|
+
// this._updateAccessors();
|
|
197
202
|
}
|
|
198
203
|
if (changeFlags.dataChanged) {
|
|
199
204
|
this._updateDataProvider();
|
|
@@ -204,7 +209,10 @@ export default class FlowmapLayer<L, F> extends CompositeLayer {
|
|
|
204
209
|
});
|
|
205
210
|
}
|
|
206
211
|
|
|
207
|
-
if (
|
|
212
|
+
if (
|
|
213
|
+
changeFlags.viewportChanged ||
|
|
214
|
+
changeFlags.propsOrDataChanged // TODO can we ignore accessor props changes?
|
|
215
|
+
) {
|
|
208
216
|
dataProvider.setFlowmapState(this._getFlowmapState());
|
|
209
217
|
(async () => {
|
|
210
218
|
const layersData = await dataProvider.getLayersData();
|
|
@@ -248,7 +256,7 @@ export default class FlowmapLayer<L, F> extends CompositeLayer {
|
|
|
248
256
|
|
|
249
257
|
private _getFlowmapState() {
|
|
250
258
|
return {
|
|
251
|
-
viewport:
|
|
259
|
+
viewport: pickViewportProps(this.context.viewport),
|
|
252
260
|
filterState: {
|
|
253
261
|
selectedLocations: undefined,
|
|
254
262
|
locationFilterMode: LocationFilterMode.ALL,
|
|
@@ -421,8 +429,10 @@ export default class FlowmapLayer<L, F> extends CompositeLayer {
|
|
|
421
429
|
this.getSubLayerProps({
|
|
422
430
|
id: 'circles',
|
|
423
431
|
data: circleAttributes,
|
|
424
|
-
emptyColor:
|
|
425
|
-
|
|
432
|
+
emptyColor: this.props.darkMode
|
|
433
|
+
? [0, 0, 0, 255]
|
|
434
|
+
: [255, 255, 255, 255],
|
|
435
|
+
outlineEmptyMix: 0.4,
|
|
426
436
|
}),
|
|
427
437
|
),
|
|
428
438
|
);
|
|
@@ -470,7 +480,7 @@ export default class FlowmapLayer<L, F> extends CompositeLayer {
|
|
|
470
480
|
}
|
|
471
481
|
}
|
|
472
482
|
|
|
473
|
-
function
|
|
483
|
+
function pickViewportProps(viewport: Record<string, any>): ViewportProps {
|
|
474
484
|
const {width, height, longitude, latitude, zoom, pitch, bearing} = viewport;
|
|
475
485
|
return {
|
|
476
486
|
width,
|