@gpa-gemstone/react-graph 1.0.51 → 1.0.52
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/lib/AggregatingCircles.d.ts +16 -17
- package/lib/AggregatingCircles.js +180 -173
- package/lib/Button.d.ts +7 -7
- package/lib/Button.js +33 -33
- package/lib/Circle.d.ts +19 -20
- package/lib/Circle.js +125 -118
- package/lib/GraphContext.d.ts +89 -89
- package/lib/GraphContext.js +140 -140
- package/lib/HeatLegend.d.ts +10 -11
- package/lib/HeatLegend.js +109 -106
- package/lib/HeatMapChart.d.ts +14 -15
- package/lib/HeatMapChart.js +119 -119
- package/lib/HorizontalMarker.d.ts +13 -14
- package/lib/HorizontalMarker.js +110 -110
- package/lib/Infobox.d.ts +17 -17
- package/lib/Infobox.js +180 -180
- package/lib/InteractiveButtons.d.ts +21 -21
- package/lib/InteractiveButtons.js +218 -218
- package/lib/Legend.d.ts +14 -14
- package/lib/Legend.js +117 -117
- package/lib/LegendContext.d.ts +14 -14
- package/lib/LegendContext.js +34 -34
- package/lib/Line.d.ts +14 -15
- package/lib/Line.js +144 -144
- package/lib/LineLegend.d.ts +11 -12
- package/lib/LineLegend.js +97 -97
- package/lib/LineWithThreshold.d.ts +12 -13
- package/lib/LineWithThreshold.js +144 -144
- package/lib/LogAxis.d.ts +20 -20
- package/lib/LogAxis.js +165 -165
- package/lib/Plot.d.ts +38 -37
- package/lib/Plot.js +802 -802
- package/lib/PointNode.d.ts +31 -31
- package/lib/PointNode.js +254 -254
- package/lib/SymbolicMarker.d.ts +17 -17
- package/lib/SymbolicMarker.js +119 -119
- package/lib/TimeAxis.d.ts +18 -18
- package/lib/TimeAxis.js +433 -433
- package/lib/ValueAxis.d.ts +21 -21
- package/lib/ValueAxis.js +196 -192
- package/lib/VerticalMarker.d.ts +14 -15
- package/lib/VerticalMarker.js +111 -111
- package/lib/index.d.ts +13 -13
- package/lib/index.js +27 -27
- package/package.json +4 -4
package/lib/PointNode.d.ts
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
* Node in a tree.
|
|
4
|
-
*/
|
|
5
|
-
export declare class PointNode {
|
|
6
|
-
minT: number;
|
|
7
|
-
maxT: number;
|
|
8
|
-
minV: number[];
|
|
9
|
-
maxV: number[];
|
|
10
|
-
avgV: number[];
|
|
11
|
-
dim: number;
|
|
12
|
-
private children;
|
|
13
|
-
private points;
|
|
14
|
-
constructor(data: [...number[]][]);
|
|
15
|
-
GetData(Tstart: number, Tend: number, IncludeEdges?: boolean): [...number[]][];
|
|
16
|
-
GetFullData(): [...number[]][];
|
|
17
|
-
GetAllLimits(Tstart: number, Tend: number): [number, number][];
|
|
18
|
-
GetLimits(Tstart: number, Tend: number, dimension?: number): [number, number];
|
|
19
|
-
/**
|
|
20
|
-
* Retrieves a point from the PointNode tree
|
|
21
|
-
* @param {number} tVal - The time value of the point to retrieve from the tree.
|
|
22
|
-
*/
|
|
23
|
-
GetPoint(tVal: number): [...number[]];
|
|
24
|
-
/**
|
|
25
|
-
* Retrieves a specified number of points from the PointNode tree, centered around a point
|
|
26
|
-
* @param {number} tVal - The time value of the center point of the point retrieval.
|
|
27
|
-
* @param {number} pointsRetrieved - The number of points to retrieve
|
|
28
|
-
*/
|
|
29
|
-
GetPoints(tVal: number, pointsRetrieved?: number): [...number[]][];
|
|
30
|
-
private PointBinarySearch;
|
|
31
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* Node in a tree.
|
|
4
|
+
*/
|
|
5
|
+
export declare class PointNode {
|
|
6
|
+
minT: number;
|
|
7
|
+
maxT: number;
|
|
8
|
+
minV: number[];
|
|
9
|
+
maxV: number[];
|
|
10
|
+
avgV: number[];
|
|
11
|
+
dim: number;
|
|
12
|
+
private children;
|
|
13
|
+
private points;
|
|
14
|
+
constructor(data: [...number[]][]);
|
|
15
|
+
GetData(Tstart: number, Tend: number, IncludeEdges?: boolean): [...number[]][];
|
|
16
|
+
GetFullData(): [...number[]][];
|
|
17
|
+
GetAllLimits(Tstart: number, Tend: number): [number, number][];
|
|
18
|
+
GetLimits(Tstart: number, Tend: number, dimension?: number): [number, number];
|
|
19
|
+
/**
|
|
20
|
+
* Retrieves a point from the PointNode tree
|
|
21
|
+
* @param {number} tVal - The time value of the point to retrieve from the tree.
|
|
22
|
+
*/
|
|
23
|
+
GetPoint(tVal: number): [...number[]];
|
|
24
|
+
/**
|
|
25
|
+
* Retrieves a specified number of points from the PointNode tree, centered around a point
|
|
26
|
+
* @param {number} tVal - The time value of the center point of the point retrieval.
|
|
27
|
+
* @param {number} pointsRetrieved - The number of points to retrieve
|
|
28
|
+
*/
|
|
29
|
+
GetPoints(tVal: number, pointsRetrieved?: number): [...number[]][];
|
|
30
|
+
private PointBinarySearch;
|
|
31
|
+
}
|
package/lib/PointNode.js
CHANGED
|
@@ -1,254 +1,254 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// ******************************************************************************************************
|
|
3
|
-
// PointNode.tsx - Gbtc
|
|
4
|
-
//
|
|
5
|
-
// Copyright © 2020, Grid Protection Alliance. All Rights Reserved.
|
|
6
|
-
//
|
|
7
|
-
// Licensed to the Grid Protection Alliance (GPA) under one or more contributor license agreements. See
|
|
8
|
-
// the NOTICE file distributed with this work for additional information regarding copyright ownership.
|
|
9
|
-
// The GPA licenses this file to you under the MIT License (MIT), the "License"; you may not use this
|
|
10
|
-
// file except in compliance with the License. You may obtain a copy of the License at:
|
|
11
|
-
//
|
|
12
|
-
// http://opensource.org/licenses/MIT
|
|
13
|
-
//
|
|
14
|
-
// Unless agreed to in writing, the subject software distributed under the License is distributed on an
|
|
15
|
-
// "AS-IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. Refer to the
|
|
16
|
-
// License for the specific language governing permissions and limitations.
|
|
17
|
-
//
|
|
18
|
-
// Code Modification History:
|
|
19
|
-
// ----------------------------------------------------------------------------------------------------
|
|
20
|
-
// 03/18/2021 - C Lackner
|
|
21
|
-
// Generated original version of source code.
|
|
22
|
-
//
|
|
23
|
-
// ******************************************************************************************************
|
|
24
|
-
var __read = (this && this.__read) || function (o, n) {
|
|
25
|
-
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
26
|
-
if (!m) return o;
|
|
27
|
-
var i = m.call(o), r, ar = [], e;
|
|
28
|
-
try {
|
|
29
|
-
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
30
|
-
}
|
|
31
|
-
catch (error) { e = { error: error }; }
|
|
32
|
-
finally {
|
|
33
|
-
try {
|
|
34
|
-
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
35
|
-
}
|
|
36
|
-
finally { if (e) throw e.error; }
|
|
37
|
-
}
|
|
38
|
-
return ar;
|
|
39
|
-
};
|
|
40
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
41
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
42
|
-
if (ar || !(i in from)) {
|
|
43
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
44
|
-
ar[i] = from[i];
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
48
|
-
};
|
|
49
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
-
exports.PointNode = void 0;
|
|
51
|
-
var MaxPoints = 20;
|
|
52
|
-
/**
|
|
53
|
-
*
|
|
54
|
-
* Node in a tree.
|
|
55
|
-
*/
|
|
56
|
-
var PointNode = /** @class */ (function () {
|
|
57
|
-
function PointNode(data) {
|
|
58
|
-
var _this = this;
|
|
59
|
-
this.dim = data[0].length;
|
|
60
|
-
// That minimum time stamp that fits in this bucket
|
|
61
|
-
this.minT = data[0][0];
|
|
62
|
-
// The maximum time stamp that might fit in this bucket
|
|
63
|
-
this.maxT = data[data.length - 1][0];
|
|
64
|
-
// Intializing other vars
|
|
65
|
-
this.avgV = Array(this.dim - 1).fill(0);
|
|
66
|
-
this.minV = Array(this.dim - 1).fill(0);
|
|
67
|
-
this.maxV = Array(this.dim - 1).fill(0);
|
|
68
|
-
this.children = null;
|
|
69
|
-
this.points = null;
|
|
70
|
-
if (data.length <= MaxPoints) {
|
|
71
|
-
if (data.some(function (point) { return point.length != _this.dim; }))
|
|
72
|
-
throw new TypeError("Jagged data passed to PointNode. All points should all be "
|
|
73
|
-
this.points = data;
|
|
74
|
-
var _loop_1 = function (index_1) {
|
|
75
|
-
this_1.minV[index_1 - 1] = Math.min.apply(Math, __spreadArray([], __read(data.filter(function (pt) { return !isNaN(pt[index_1]); }).map(function (pt) { return pt[index_1]; })), false));
|
|
76
|
-
};
|
|
77
|
-
var this_1 = this;
|
|
78
|
-
for (var index_1 = 1; index_1 < this.dim; index_1++) {
|
|
79
|
-
_loop_1(index_1);
|
|
80
|
-
}
|
|
81
|
-
var _loop_2 = function (index_2) {
|
|
82
|
-
this_2.maxV[index_2 - 1] = Math.max.apply(Math, __spreadArray([], __read(data.filter(function (pt) { return !isNaN(pt[index_2]); }).map(function (pt) { return pt[index_2]; })), false));
|
|
83
|
-
};
|
|
84
|
-
var this_2 = this;
|
|
85
|
-
for (var index_2 = 1; index_2 < this.dim; index_2++) {
|
|
86
|
-
_loop_2(index_2);
|
|
87
|
-
}
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
var nLevel = Math.floor(Math.pow(data.length, 1 / MaxPoints));
|
|
91
|
-
var blockSize = nLevel * MaxPoints;
|
|
92
|
-
var index = 0;
|
|
93
|
-
this.children = [];
|
|
94
|
-
while (index < data.length) {
|
|
95
|
-
this.children.push(new PointNode(data.slice(index, index + blockSize)));
|
|
96
|
-
index = index + blockSize;
|
|
97
|
-
}
|
|
98
|
-
var _loop_3 = function (index_3) {
|
|
99
|
-
this_3.minV[index_3] = Math.min.apply(Math, __spreadArray([], __read(this_3.children.map(function (node) { return node.minV[index_3]; })), false));
|
|
100
|
-
};
|
|
101
|
-
var this_3 = this;
|
|
102
|
-
for (var index_3 = 0; index_3 < this.dim - 1; index_3++) {
|
|
103
|
-
_loop_3(index_3);
|
|
104
|
-
}
|
|
105
|
-
var _loop_4 = function (index_4) {
|
|
106
|
-
this_4.maxV[index_4] = Math.max.apply(Math, __spreadArray([], __read(this_4.children.map(function (node) { return node.maxV[index_4]; })), false));
|
|
107
|
-
};
|
|
108
|
-
var this_4 = this;
|
|
109
|
-
for (var index_4 = 0; index_4 < this.dim - 1; index_4++) {
|
|
110
|
-
_loop_4(index_4);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
PointNode.prototype.GetData = function (Tstart, Tend, IncludeEdges) {
|
|
114
|
-
var _this = this;
|
|
115
|
-
if (this.points != null && Tstart <= this.minT && Tend >= this.maxT)
|
|
116
|
-
return this.points;
|
|
117
|
-
if (this.points != null && IncludeEdges !== undefined && IncludeEdges)
|
|
118
|
-
return this.points.filter(function (pt, i) {
|
|
119
|
-
var _a, _b;
|
|
120
|
-
return (pt[0] >= Tstart && pt[0] <= Tend) ||
|
|
121
|
-
i < (((_b = (_a = _this.points) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) - 1) && (_this.points != null ? _this.points[i + 1][0] : 0) >= Tstart ||
|
|
122
|
-
i > 0 && (_this.points != null ? _this.points[i - 1][0] : 0) <= Tend;
|
|
123
|
-
});
|
|
124
|
-
if (this.points != null)
|
|
125
|
-
return this.points.filter(function (pt) { return pt[0] >= Tstart && pt[0] <= Tend; });
|
|
126
|
-
var result = [];
|
|
127
|
-
return result.concat.apply(result, __spreadArray([], __read(this.children.filter(function (node) {
|
|
128
|
-
return (node.minT <= Tstart && node.maxT > Tstart) ||
|
|
129
|
-
(node.maxT >= Tend && node.minT < Tend) ||
|
|
130
|
-
(node.minT >= Tstart && node.maxT <= Tend);
|
|
131
|
-
}).map(function (node) { return node.GetData(Tstart, Tend, IncludeEdges); })), false));
|
|
132
|
-
};
|
|
133
|
-
PointNode.prototype.GetFullData = function () {
|
|
134
|
-
return this.GetData(this.minT, this.maxT);
|
|
135
|
-
};
|
|
136
|
-
PointNode.prototype.GetAllLimits = function (Tstart, Tend) {
|
|
137
|
-
var result = Array(this.dim - 1);
|
|
138
|
-
for (var index = 0; index < this.dim - 1; index++)
|
|
139
|
-
result[index] = this.GetLimits(Tstart, Tend, index);
|
|
140
|
-
return result;
|
|
141
|
-
};
|
|
142
|
-
// Note: Dimension indexing does not include time, I.E. in (x,y), y would be dimension 0;
|
|
143
|
-
PointNode.prototype.GetLimits = function (Tstart, Tend, dimension) {
|
|
144
|
-
var currentIndex = dimension !== null && dimension !== void 0 ? dimension : 0;
|
|
145
|
-
var max = this.maxV[currentIndex];
|
|
146
|
-
var min = this.minV[currentIndex];
|
|
147
|
-
if (this.points == null && !(Tstart <= this.minT && Tend > this.maxT)) {
|
|
148
|
-
// Array represents all limits of buckets
|
|
149
|
-
var limits = this.children.filter(function (n) { return n.maxT > Tstart && n.minT < Tend; }).map(function (n) { return n.GetLimits(Tstart, Tend, currentIndex); });
|
|
150
|
-
min = Math.min.apply(Math, __spreadArray([], __read(limits.map(function (pt) { return pt[0]; })), false));
|
|
151
|
-
max = Math.max.apply(Math, __spreadArray([], __read(limits.map(function (pt) { return pt[1]; })), false));
|
|
152
|
-
}
|
|
153
|
-
if (this.points != null && !(Tstart <= this.minT && Tend > this.maxT)) {
|
|
154
|
-
// Array represents all numbers within this bucket that fall in range
|
|
155
|
-
var limits = this.points.filter(function (pt) { return pt[0] > Tstart && pt[0] < Tend; }).map(function (pt) { return pt[currentIndex + 1]; });
|
|
156
|
-
min = Math.min.apply(Math, __spreadArray([], __read(limits), false));
|
|
157
|
-
max = Math.max.apply(Math, __spreadArray([], __read(limits), false));
|
|
158
|
-
}
|
|
159
|
-
return [min, max];
|
|
160
|
-
};
|
|
161
|
-
/**
|
|
162
|
-
* Retrieves a point from the PointNode tree
|
|
163
|
-
* @param {number} tVal - The time value of the point to retrieve from the tree.
|
|
164
|
-
*/
|
|
165
|
-
PointNode.prototype.GetPoint = function (tVal) {
|
|
166
|
-
return this.PointBinarySearch(tVal, 1)[0];
|
|
167
|
-
};
|
|
168
|
-
/**
|
|
169
|
-
* Retrieves a specified number of points from the PointNode tree, centered around a point
|
|
170
|
-
* @param {number} tVal - The time value of the center point of the point retrieval.
|
|
171
|
-
* @param {number} pointsRetrieved - The number of points to retrieve
|
|
172
|
-
*/
|
|
173
|
-
PointNode.prototype.GetPoints = function (tVal, pointsRetrieved) {
|
|
174
|
-
if (pointsRetrieved === void 0) { pointsRetrieved = 1; }
|
|
175
|
-
return this.PointBinarySearch(tVal, pointsRetrieved);
|
|
176
|
-
};
|
|
177
|
-
PointNode.prototype.PointBinarySearch = function (tVal, pointsRetrieved, bucketLowerNeighbor, bucketUpperNeighbor) {
|
|
178
|
-
if (pointsRetrieved === void 0) { pointsRetrieved = 1; }
|
|
179
|
-
if (pointsRetrieved <= 0)
|
|
180
|
-
throw new RangeError("Requested number of points must be positive value.");
|
|
181
|
-
// round tVal back to whole integer
|
|
182
|
-
if (this.points !== null) {
|
|
183
|
-
// if the tVal is less than the minimum value of the subsection, return the first point
|
|
184
|
-
if (tVal < this.minT) {
|
|
185
|
-
var spillOver = pointsRetrieved - this.points.length;
|
|
186
|
-
var spillOverPoints = (spillOver > 0 && bucketUpperNeighbor !== undefined) ? bucketUpperNeighbor.PointBinarySearch(tVal, spillOver, this, undefined) : [];
|
|
187
|
-
return this.points.slice(0, pointsRetrieved).concat(spillOverPoints);
|
|
188
|
-
}
|
|
189
|
-
// if the tVal is greater than the largest value of the subsection, return the last point
|
|
190
|
-
if (tVal > this.maxT) {
|
|
191
|
-
var spillOver = pointsRetrieved - this.points.length;
|
|
192
|
-
var spillOverPoints = (spillOver > 0 && bucketLowerNeighbor !== undefined) ? bucketLowerNeighbor.PointBinarySearch(tVal, spillOver, undefined, this) : [];
|
|
193
|
-
return spillOverPoints.concat(this.points.slice(-pointsRetrieved));
|
|
194
|
-
}
|
|
195
|
-
// Otherwise, perform binary search
|
|
196
|
-
var upper = this.points.length - 1;
|
|
197
|
-
var lower = 0;
|
|
198
|
-
var Tlower = this.minT;
|
|
199
|
-
var Tupper = this.maxT;
|
|
200
|
-
while (Tupper !== tVal && Tlower !== tVal && upper !== lower && Tupper !== Tlower) {
|
|
201
|
-
var center = Math.round((upper + lower) / 2);
|
|
202
|
-
var Tcenter = this.points[center][0];
|
|
203
|
-
if (center === upper || center === lower)
|
|
204
|
-
break;
|
|
205
|
-
if (Tcenter <= tVal)
|
|
206
|
-
lower = center;
|
|
207
|
-
if (Tcenter > tVal)
|
|
208
|
-
upper = center;
|
|
209
|
-
Tupper = this.points[upper][0];
|
|
210
|
-
Tlower = this.points[lower][0];
|
|
211
|
-
}
|
|
212
|
-
var upperPoints = Math.floor(pointsRetrieved / 2);
|
|
213
|
-
var lowerPoints = upperPoints;
|
|
214
|
-
// Adjustment for even number of points
|
|
215
|
-
var sidingAdjust = pointsRetrieved % 2 === 0 ? 1 : 0;
|
|
216
|
-
var centerIndex = void 0;
|
|
217
|
-
if (Math.abs(tVal - Tlower) < Math.abs(tVal - Tupper)) {
|
|
218
|
-
centerIndex = lower;
|
|
219
|
-
lowerPoints -= sidingAdjust;
|
|
220
|
-
}
|
|
221
|
-
else {
|
|
222
|
-
centerIndex = upper;
|
|
223
|
-
upperPoints -= sidingAdjust;
|
|
224
|
-
}
|
|
225
|
-
// Note: If we have spillover and no neighbor on the spillover side, then we discard the idea of spillover, and just return as many as we can on that side
|
|
226
|
-
var upperSpillOver = centerIndex + upperPoints + 1 - this.points.length;
|
|
227
|
-
var upperNeighborPoints = (upperSpillOver > 0 && bucketUpperNeighbor !== undefined) ? bucketUpperNeighbor.PointBinarySearch(tVal, upperSpillOver, this, undefined) : [];
|
|
228
|
-
var lowerSpillOver = lowerPoints - centerIndex;
|
|
229
|
-
var lowerNeighborPoints = (lowerSpillOver > 0 && bucketLowerNeighbor !== undefined) ? bucketLowerNeighbor.PointBinarySearch(tVal, lowerSpillOver, undefined, this) : [];
|
|
230
|
-
return lowerNeighborPoints.concat(this.points.slice(Math.max(centerIndex - lowerPoints, 0), Math.min(centerIndex + upperPoints + 1, this.points.length))).concat(upperNeighborPoints);
|
|
231
|
-
}
|
|
232
|
-
else if (this.children !== null) {
|
|
233
|
-
var childIndex = -1;
|
|
234
|
-
// if the subsection is null, and the tVal is less than the minimum value of the subsection, ??Start over again looking for the point in the first subsection??
|
|
235
|
-
if (tVal < this.minT)
|
|
236
|
-
childIndex = 0;
|
|
237
|
-
else if (tVal > this.maxT)
|
|
238
|
-
childIndex = this.children.length - 1;
|
|
239
|
-
else
|
|
240
|
-
childIndex = this.children.findIndex(function (n) { return n.maxT > tVal; });
|
|
241
|
-
if (childIndex === -1)
|
|
242
|
-
throw new RangeError("Could not find child bucket with point that has a time value of "
|
|
243
|
-
// Find neighbors
|
|
244
|
-
var upperNeighbor = childIndex !== this.children.length - 1 ? this.children[childIndex + 1] : undefined;
|
|
245
|
-
var lowerNeighbor = childIndex !== 0 ? this.children[childIndex - 1] : undefined;
|
|
246
|
-
return this.children[childIndex].PointBinarySearch(tVal, pointsRetrieved, lowerNeighbor, upperNeighbor);
|
|
247
|
-
}
|
|
248
|
-
else
|
|
249
|
-
throw new RangeError("Both children and points are null for PointNode, unabled to find point with time value of "
|
|
250
|
-
};
|
|
251
|
-
return PointNode;
|
|
252
|
-
}());
|
|
253
|
-
exports.PointNode = PointNode;
|
|
254
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9pbnROb2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1BvaW50Tm9kZS50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHlHQUF5RztBQUN6Ryx3QkFBd0I7QUFDeEIsRUFBRTtBQUNGLHFFQUFxRTtBQUNyRSxFQUFFO0FBQ0Ysd0dBQXdHO0FBQ3hHLHdHQUF3RztBQUN4RyxzR0FBc0c7QUFDdEcsd0ZBQXdGO0FBQ3hGLEVBQUU7QUFDRiwwQ0FBMEM7QUFDMUMsRUFBRTtBQUNGLHdHQUF3RztBQUN4Ryx3R0FBd0c7QUFDeEcsNEVBQTRFO0FBQzVFLEVBQUU7QUFDRiw4QkFBOEI7QUFDOUIsd0dBQXdHO0FBQ3hHLDBCQUEwQjtBQUMxQixtREFBbUQ7QUFDbkQsRUFBRTtBQUNGLHlHQUF5Rzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUV6RyxJQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFFckI7OztHQUdHO0FBQ0g7SUFZSSxtQkFBWSxJQUFxQjtRQUFqQyxpQkFnQ0M7UUEvQkcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQzFCLG1EQUFtRDtRQUNuRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2Qix1REFBdUQ7UUFDdkQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyx5QkFBeUI7UUFDekIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsQ0FB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
|
|
1
|
+
"use strict";
|
|
2
|
+
// ******************************************************************************************************
|
|
3
|
+
// PointNode.tsx - Gbtc
|
|
4
|
+
//
|
|
5
|
+
// Copyright © 2020, Grid Protection Alliance. All Rights Reserved.
|
|
6
|
+
//
|
|
7
|
+
// Licensed to the Grid Protection Alliance (GPA) under one or more contributor license agreements. See
|
|
8
|
+
// the NOTICE file distributed with this work for additional information regarding copyright ownership.
|
|
9
|
+
// The GPA licenses this file to you under the MIT License (MIT), the "License"; you may not use this
|
|
10
|
+
// file except in compliance with the License. You may obtain a copy of the License at:
|
|
11
|
+
//
|
|
12
|
+
// http://opensource.org/licenses/MIT
|
|
13
|
+
//
|
|
14
|
+
// Unless agreed to in writing, the subject software distributed under the License is distributed on an
|
|
15
|
+
// "AS-IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. Refer to the
|
|
16
|
+
// License for the specific language governing permissions and limitations.
|
|
17
|
+
//
|
|
18
|
+
// Code Modification History:
|
|
19
|
+
// ----------------------------------------------------------------------------------------------------
|
|
20
|
+
// 03/18/2021 - C Lackner
|
|
21
|
+
// Generated original version of source code.
|
|
22
|
+
//
|
|
23
|
+
// ******************************************************************************************************
|
|
24
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
25
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
26
|
+
if (!m) return o;
|
|
27
|
+
var i = m.call(o), r, ar = [], e;
|
|
28
|
+
try {
|
|
29
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
30
|
+
}
|
|
31
|
+
catch (error) { e = { error: error }; }
|
|
32
|
+
finally {
|
|
33
|
+
try {
|
|
34
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
35
|
+
}
|
|
36
|
+
finally { if (e) throw e.error; }
|
|
37
|
+
}
|
|
38
|
+
return ar;
|
|
39
|
+
};
|
|
40
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
41
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
42
|
+
if (ar || !(i in from)) {
|
|
43
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
44
|
+
ar[i] = from[i];
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
48
|
+
};
|
|
49
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
+
exports.PointNode = void 0;
|
|
51
|
+
var MaxPoints = 20;
|
|
52
|
+
/**
|
|
53
|
+
*
|
|
54
|
+
* Node in a tree.
|
|
55
|
+
*/
|
|
56
|
+
var PointNode = /** @class */ (function () {
|
|
57
|
+
function PointNode(data) {
|
|
58
|
+
var _this = this;
|
|
59
|
+
this.dim = data[0].length;
|
|
60
|
+
// That minimum time stamp that fits in this bucket
|
|
61
|
+
this.minT = data[0][0];
|
|
62
|
+
// The maximum time stamp that might fit in this bucket
|
|
63
|
+
this.maxT = data[data.length - 1][0];
|
|
64
|
+
// Intializing other vars
|
|
65
|
+
this.avgV = Array(this.dim - 1).fill(0);
|
|
66
|
+
this.minV = Array(this.dim - 1).fill(0);
|
|
67
|
+
this.maxV = Array(this.dim - 1).fill(0);
|
|
68
|
+
this.children = null;
|
|
69
|
+
this.points = null;
|
|
70
|
+
if (data.length <= MaxPoints) {
|
|
71
|
+
if (data.some(function (point) { return point.length != _this.dim; }))
|
|
72
|
+
throw new TypeError("Jagged data passed to PointNode. All points should all be ".concat(this.dim, " dimensions."));
|
|
73
|
+
this.points = data;
|
|
74
|
+
var _loop_1 = function (index_1) {
|
|
75
|
+
this_1.minV[index_1 - 1] = Math.min.apply(Math, __spreadArray([], __read(data.filter(function (pt) { return !isNaN(pt[index_1]); }).map(function (pt) { return pt[index_1]; })), false));
|
|
76
|
+
};
|
|
77
|
+
var this_1 = this;
|
|
78
|
+
for (var index_1 = 1; index_1 < this.dim; index_1++) {
|
|
79
|
+
_loop_1(index_1);
|
|
80
|
+
}
|
|
81
|
+
var _loop_2 = function (index_2) {
|
|
82
|
+
this_2.maxV[index_2 - 1] = Math.max.apply(Math, __spreadArray([], __read(data.filter(function (pt) { return !isNaN(pt[index_2]); }).map(function (pt) { return pt[index_2]; })), false));
|
|
83
|
+
};
|
|
84
|
+
var this_2 = this;
|
|
85
|
+
for (var index_2 = 1; index_2 < this.dim; index_2++) {
|
|
86
|
+
_loop_2(index_2);
|
|
87
|
+
}
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
var nLevel = Math.floor(Math.pow(data.length, 1 / MaxPoints));
|
|
91
|
+
var blockSize = nLevel * MaxPoints;
|
|
92
|
+
var index = 0;
|
|
93
|
+
this.children = [];
|
|
94
|
+
while (index < data.length) {
|
|
95
|
+
this.children.push(new PointNode(data.slice(index, index + blockSize)));
|
|
96
|
+
index = index + blockSize;
|
|
97
|
+
}
|
|
98
|
+
var _loop_3 = function (index_3) {
|
|
99
|
+
this_3.minV[index_3] = Math.min.apply(Math, __spreadArray([], __read(this_3.children.map(function (node) { return node.minV[index_3]; })), false));
|
|
100
|
+
};
|
|
101
|
+
var this_3 = this;
|
|
102
|
+
for (var index_3 = 0; index_3 < this.dim - 1; index_3++) {
|
|
103
|
+
_loop_3(index_3);
|
|
104
|
+
}
|
|
105
|
+
var _loop_4 = function (index_4) {
|
|
106
|
+
this_4.maxV[index_4] = Math.max.apply(Math, __spreadArray([], __read(this_4.children.map(function (node) { return node.maxV[index_4]; })), false));
|
|
107
|
+
};
|
|
108
|
+
var this_4 = this;
|
|
109
|
+
for (var index_4 = 0; index_4 < this.dim - 1; index_4++) {
|
|
110
|
+
_loop_4(index_4);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
PointNode.prototype.GetData = function (Tstart, Tend, IncludeEdges) {
|
|
114
|
+
var _this = this;
|
|
115
|
+
if (this.points != null && Tstart <= this.minT && Tend >= this.maxT)
|
|
116
|
+
return this.points;
|
|
117
|
+
if (this.points != null && IncludeEdges !== undefined && IncludeEdges)
|
|
118
|
+
return this.points.filter(function (pt, i) {
|
|
119
|
+
var _a, _b;
|
|
120
|
+
return (pt[0] >= Tstart && pt[0] <= Tend) ||
|
|
121
|
+
i < (((_b = (_a = _this.points) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) - 1) && (_this.points != null ? _this.points[i + 1][0] : 0) >= Tstart ||
|
|
122
|
+
i > 0 && (_this.points != null ? _this.points[i - 1][0] : 0) <= Tend;
|
|
123
|
+
});
|
|
124
|
+
if (this.points != null)
|
|
125
|
+
return this.points.filter(function (pt) { return pt[0] >= Tstart && pt[0] <= Tend; });
|
|
126
|
+
var result = [];
|
|
127
|
+
return result.concat.apply(result, __spreadArray([], __read(this.children.filter(function (node) {
|
|
128
|
+
return (node.minT <= Tstart && node.maxT > Tstart) ||
|
|
129
|
+
(node.maxT >= Tend && node.minT < Tend) ||
|
|
130
|
+
(node.minT >= Tstart && node.maxT <= Tend);
|
|
131
|
+
}).map(function (node) { return node.GetData(Tstart, Tend, IncludeEdges); })), false));
|
|
132
|
+
};
|
|
133
|
+
PointNode.prototype.GetFullData = function () {
|
|
134
|
+
return this.GetData(this.minT, this.maxT);
|
|
135
|
+
};
|
|
136
|
+
PointNode.prototype.GetAllLimits = function (Tstart, Tend) {
|
|
137
|
+
var result = Array(this.dim - 1);
|
|
138
|
+
for (var index = 0; index < this.dim - 1; index++)
|
|
139
|
+
result[index] = this.GetLimits(Tstart, Tend, index);
|
|
140
|
+
return result;
|
|
141
|
+
};
|
|
142
|
+
// Note: Dimension indexing does not include time, I.E. in (x,y), y would be dimension 0;
|
|
143
|
+
PointNode.prototype.GetLimits = function (Tstart, Tend, dimension) {
|
|
144
|
+
var currentIndex = dimension !== null && dimension !== void 0 ? dimension : 0;
|
|
145
|
+
var max = this.maxV[currentIndex];
|
|
146
|
+
var min = this.minV[currentIndex];
|
|
147
|
+
if (this.points == null && !(Tstart <= this.minT && Tend > this.maxT)) {
|
|
148
|
+
// Array represents all limits of buckets
|
|
149
|
+
var limits = this.children.filter(function (n) { return n.maxT > Tstart && n.minT < Tend; }).map(function (n) { return n.GetLimits(Tstart, Tend, currentIndex); });
|
|
150
|
+
min = Math.min.apply(Math, __spreadArray([], __read(limits.map(function (pt) { return pt[0]; })), false));
|
|
151
|
+
max = Math.max.apply(Math, __spreadArray([], __read(limits.map(function (pt) { return pt[1]; })), false));
|
|
152
|
+
}
|
|
153
|
+
if (this.points != null && !(Tstart <= this.minT && Tend > this.maxT)) {
|
|
154
|
+
// Array represents all numbers within this bucket that fall in range
|
|
155
|
+
var limits = this.points.filter(function (pt) { return pt[0] > Tstart && pt[0] < Tend; }).map(function (pt) { return pt[currentIndex + 1]; });
|
|
156
|
+
min = Math.min.apply(Math, __spreadArray([], __read(limits), false));
|
|
157
|
+
max = Math.max.apply(Math, __spreadArray([], __read(limits), false));
|
|
158
|
+
}
|
|
159
|
+
return [min, max];
|
|
160
|
+
};
|
|
161
|
+
/**
|
|
162
|
+
* Retrieves a point from the PointNode tree
|
|
163
|
+
* @param {number} tVal - The time value of the point to retrieve from the tree.
|
|
164
|
+
*/
|
|
165
|
+
PointNode.prototype.GetPoint = function (tVal) {
|
|
166
|
+
return this.PointBinarySearch(tVal, 1)[0];
|
|
167
|
+
};
|
|
168
|
+
/**
|
|
169
|
+
* Retrieves a specified number of points from the PointNode tree, centered around a point
|
|
170
|
+
* @param {number} tVal - The time value of the center point of the point retrieval.
|
|
171
|
+
* @param {number} pointsRetrieved - The number of points to retrieve
|
|
172
|
+
*/
|
|
173
|
+
PointNode.prototype.GetPoints = function (tVal, pointsRetrieved) {
|
|
174
|
+
if (pointsRetrieved === void 0) { pointsRetrieved = 1; }
|
|
175
|
+
return this.PointBinarySearch(tVal, pointsRetrieved);
|
|
176
|
+
};
|
|
177
|
+
PointNode.prototype.PointBinarySearch = function (tVal, pointsRetrieved, bucketLowerNeighbor, bucketUpperNeighbor) {
|
|
178
|
+
if (pointsRetrieved === void 0) { pointsRetrieved = 1; }
|
|
179
|
+
if (pointsRetrieved <= 0)
|
|
180
|
+
throw new RangeError("Requested number of points must be positive value.");
|
|
181
|
+
// round tVal back to whole integer
|
|
182
|
+
if (this.points !== null) {
|
|
183
|
+
// if the tVal is less than the minimum value of the subsection, return the first point
|
|
184
|
+
if (tVal < this.minT) {
|
|
185
|
+
var spillOver = pointsRetrieved - this.points.length;
|
|
186
|
+
var spillOverPoints = (spillOver > 0 && bucketUpperNeighbor !== undefined) ? bucketUpperNeighbor.PointBinarySearch(tVal, spillOver, this, undefined) : [];
|
|
187
|
+
return this.points.slice(0, pointsRetrieved).concat(spillOverPoints);
|
|
188
|
+
}
|
|
189
|
+
// if the tVal is greater than the largest value of the subsection, return the last point
|
|
190
|
+
if (tVal > this.maxT) {
|
|
191
|
+
var spillOver = pointsRetrieved - this.points.length;
|
|
192
|
+
var spillOverPoints = (spillOver > 0 && bucketLowerNeighbor !== undefined) ? bucketLowerNeighbor.PointBinarySearch(tVal, spillOver, undefined, this) : [];
|
|
193
|
+
return spillOverPoints.concat(this.points.slice(-pointsRetrieved));
|
|
194
|
+
}
|
|
195
|
+
// Otherwise, perform binary search
|
|
196
|
+
var upper = this.points.length - 1;
|
|
197
|
+
var lower = 0;
|
|
198
|
+
var Tlower = this.minT;
|
|
199
|
+
var Tupper = this.maxT;
|
|
200
|
+
while (Tupper !== tVal && Tlower !== tVal && upper !== lower && Tupper !== Tlower) {
|
|
201
|
+
var center = Math.round((upper + lower) / 2);
|
|
202
|
+
var Tcenter = this.points[center][0];
|
|
203
|
+
if (center === upper || center === lower)
|
|
204
|
+
break;
|
|
205
|
+
if (Tcenter <= tVal)
|
|
206
|
+
lower = center;
|
|
207
|
+
if (Tcenter > tVal)
|
|
208
|
+
upper = center;
|
|
209
|
+
Tupper = this.points[upper][0];
|
|
210
|
+
Tlower = this.points[lower][0];
|
|
211
|
+
}
|
|
212
|
+
var upperPoints = Math.floor(pointsRetrieved / 2);
|
|
213
|
+
var lowerPoints = upperPoints;
|
|
214
|
+
// Adjustment for even number of points
|
|
215
|
+
var sidingAdjust = pointsRetrieved % 2 === 0 ? 1 : 0;
|
|
216
|
+
var centerIndex = void 0;
|
|
217
|
+
if (Math.abs(tVal - Tlower) < Math.abs(tVal - Tupper)) {
|
|
218
|
+
centerIndex = lower;
|
|
219
|
+
lowerPoints -= sidingAdjust;
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
centerIndex = upper;
|
|
223
|
+
upperPoints -= sidingAdjust;
|
|
224
|
+
}
|
|
225
|
+
// Note: If we have spillover and no neighbor on the spillover side, then we discard the idea of spillover, and just return as many as we can on that side
|
|
226
|
+
var upperSpillOver = centerIndex + upperPoints + 1 - this.points.length;
|
|
227
|
+
var upperNeighborPoints = (upperSpillOver > 0 && bucketUpperNeighbor !== undefined) ? bucketUpperNeighbor.PointBinarySearch(tVal, upperSpillOver, this, undefined) : [];
|
|
228
|
+
var lowerSpillOver = lowerPoints - centerIndex;
|
|
229
|
+
var lowerNeighborPoints = (lowerSpillOver > 0 && bucketLowerNeighbor !== undefined) ? bucketLowerNeighbor.PointBinarySearch(tVal, lowerSpillOver, undefined, this) : [];
|
|
230
|
+
return lowerNeighborPoints.concat(this.points.slice(Math.max(centerIndex - lowerPoints, 0), Math.min(centerIndex + upperPoints + 1, this.points.length))).concat(upperNeighborPoints);
|
|
231
|
+
}
|
|
232
|
+
else if (this.children !== null) {
|
|
233
|
+
var childIndex = -1;
|
|
234
|
+
// if the subsection is null, and the tVal is less than the minimum value of the subsection, ??Start over again looking for the point in the first subsection??
|
|
235
|
+
if (tVal < this.minT)
|
|
236
|
+
childIndex = 0;
|
|
237
|
+
else if (tVal > this.maxT)
|
|
238
|
+
childIndex = this.children.length - 1;
|
|
239
|
+
else
|
|
240
|
+
childIndex = this.children.findIndex(function (n) { return n.maxT > tVal; });
|
|
241
|
+
if (childIndex === -1)
|
|
242
|
+
throw new RangeError("Could not find child bucket with point that has a time value of ".concat(tVal));
|
|
243
|
+
// Find neighbors
|
|
244
|
+
var upperNeighbor = childIndex !== this.children.length - 1 ? this.children[childIndex + 1] : undefined;
|
|
245
|
+
var lowerNeighbor = childIndex !== 0 ? this.children[childIndex - 1] : undefined;
|
|
246
|
+
return this.children[childIndex].PointBinarySearch(tVal, pointsRetrieved, lowerNeighbor, upperNeighbor);
|
|
247
|
+
}
|
|
248
|
+
else
|
|
249
|
+
throw new RangeError("Both children and points are null for PointNode, unabled to find point with time value of ".concat(tVal));
|
|
250
|
+
};
|
|
251
|
+
return PointNode;
|
|
252
|
+
}());
|
|
253
|
+
exports.PointNode = PointNode;
|
|
254
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9pbnROb2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1BvaW50Tm9kZS50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHlHQUF5RztBQUN6Ryx3QkFBd0I7QUFDeEIsRUFBRTtBQUNGLHFFQUFxRTtBQUNyRSxFQUFFO0FBQ0Ysd0dBQXdHO0FBQ3hHLHdHQUF3RztBQUN4RyxzR0FBc0c7QUFDdEcsd0ZBQXdGO0FBQ3hGLEVBQUU7QUFDRiwwQ0FBMEM7QUFDMUMsRUFBRTtBQUNGLHdHQUF3RztBQUN4Ryx3R0FBd0c7QUFDeEcsNEVBQTRFO0FBQzVFLEVBQUU7QUFDRiw4QkFBOEI7QUFDOUIsd0dBQXdHO0FBQ3hHLDBCQUEwQjtBQUMxQixtREFBbUQ7QUFDbkQsRUFBRTtBQUNGLHlHQUF5Rzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUV6RyxJQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFFckI7OztHQUdHO0FBQ0g7SUFZSSxtQkFBWSxJQUFxQjtRQUFqQyxpQkFnQ0M7UUEvQkcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQzFCLG1EQUFtRDtRQUNuRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2Qix1REFBdUQ7UUFDdkQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyx5QkFBeUI7UUFDekIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsQ0FB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LFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLEVBQWhDLENBQWdDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBQyxJQUFJLEVBQUMsWUFBWSxDQUFDLEVBQXJDLENBQXFDLENBQUMsQ0FBQztZQUM1SCxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsT0FBUixJQUFJLDJCQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBQSxFQUFFLElBQUksT0FBQSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUwsQ0FBSyxDQUFDLFVBQUMsQ0FBQztZQUMzQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsT0FBUixJQUFJLDJCQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBQSxFQUFFLElBQUksT0FBQSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUwsQ0FBSyxDQUFDLFVBQUMsQ0FBQztRQUM3QyxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3RFLHFFQUFxRTtZQUNyRSxJQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTyxDQUFDLE1BQU0sQ0FBQyxVQUFBLEVBQUUsSUFBSSxPQUFBLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBOUIsQ0FBOEIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFBLEVBQUUsSUFBSSxPQUFBLEVBQUUsQ0FBQyxZQUFZLEdBQUMsQ0FBQyxDQUFDLEVBQWxCLENBQWtCLENBQUMsQ0FBQztZQUN2RyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsT0FBUixJQUFJLDJCQUFRLE1BQU0s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
|