@ultipa-graph/ultipa-driver 6.0.18 → 6.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +5 -3
- package/dist/response.d.ts +44 -2
- package/dist/response.js +115 -2
- package/dist/types/data_types.d.ts +57 -12
- package/dist/types/data_types.js +91 -3
- package/dist/types/typed_value.js +21 -23
- package/package.json +1 -1
|
@@ -1,16 +1,46 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Specialized data types for GQLDB Node.js driver.
|
|
3
3
|
*/
|
|
4
|
-
/**
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
/**
|
|
5
|
+
* 2D geographic point (WGS-84 — server enforces
|
|
6
|
+
* longitude ∈ [-180, 180], latitude ∈ [-90, 90]).
|
|
7
|
+
*
|
|
8
|
+
* Primary fields are `latitude` and `longitude`. For symmetry with
|
|
9
|
+
* `Point3D` and cartesian-style code, `.x` (= longitude) and `.y`
|
|
10
|
+
* (= latitude) are exposed as read-only alias getters.
|
|
11
|
+
*
|
|
12
|
+
* Constructed instances expose the aliases. Plain object literals
|
|
13
|
+
* `{ latitude, longitude }` still pass {@link isPoint}; consumers that
|
|
14
|
+
* want `.x` / `.y` should construct via `new Point(...)`.
|
|
15
|
+
*/
|
|
16
|
+
export declare class Point {
|
|
17
|
+
readonly latitude: number;
|
|
18
|
+
readonly longitude: number;
|
|
19
|
+
constructor(latitude: number, longitude: number);
|
|
20
|
+
/** Alias for `longitude` — matches the Point3D x/y/z convention. */
|
|
21
|
+
get x(): number;
|
|
22
|
+
/** Alias for `latitude` — matches the Point3D x/y/z convention. */
|
|
23
|
+
get y(): number;
|
|
8
24
|
}
|
|
9
|
-
/**
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
25
|
+
/**
|
|
26
|
+
* 3D point (cartesian semantics — server does NOT enforce geographic
|
|
27
|
+
* bounds, so `x` and `y` may legitimately exceed lon/lat ranges).
|
|
28
|
+
*
|
|
29
|
+
* Primary fields are `x`, `y`, `z`. For symmetry with the geographic
|
|
30
|
+
* `Point`, `.longitude` (= x), `.latitude` (= y), `.height` (= z) are
|
|
31
|
+
* exposed as read-only alias getters for geographic-style readers.
|
|
32
|
+
*/
|
|
33
|
+
export declare class Point3D {
|
|
34
|
+
readonly x: number;
|
|
35
|
+
readonly y: number;
|
|
36
|
+
readonly z: number;
|
|
37
|
+
constructor(x: number, y: number, z: number);
|
|
38
|
+
/** Alias for `x` — for geographic-style readers. */
|
|
39
|
+
get longitude(): number;
|
|
40
|
+
/** Alias for `y` — for geographic-style readers. */
|
|
41
|
+
get latitude(): number;
|
|
42
|
+
/** Alias for `z` — for geographic-3D (lon/lat/altitude) readers. */
|
|
43
|
+
get height(): number;
|
|
14
44
|
}
|
|
15
45
|
/** High-precision decimal number */
|
|
16
46
|
export interface GqldbDecimal {
|
|
@@ -91,9 +121,24 @@ export interface DayToSecond {
|
|
|
91
121
|
seconds: number;
|
|
92
122
|
nanoseconds: number;
|
|
93
123
|
}
|
|
94
|
-
/**
|
|
95
|
-
|
|
96
|
-
|
|
124
|
+
/**
|
|
125
|
+
* Float32 vector for embeddings.
|
|
126
|
+
*
|
|
127
|
+
* Implements {@link Iterable} so `for (const v of vec)` walks the
|
|
128
|
+
* elements. `vec.length` returns the dimension count — mirrors the
|
|
129
|
+
* Python driver's `len(vec)` / `for x in vec` ergonomics.
|
|
130
|
+
*
|
|
131
|
+
* Constructed via `new Vector([...])`. Plain object literals
|
|
132
|
+
* `{ values: [...] }` still pass {@link isVector}; consumers that want
|
|
133
|
+
* the iterator / length getter should construct via the class.
|
|
134
|
+
*/
|
|
135
|
+
export declare class Vector implements Iterable<number> {
|
|
136
|
+
readonly values: number[];
|
|
137
|
+
constructor(values: number[]);
|
|
138
|
+
/** Number of dimensions in the vector. */
|
|
139
|
+
get length(): number;
|
|
140
|
+
/** Iterate over the vector elements. */
|
|
141
|
+
[Symbol.iterator](): IterableIterator<number>;
|
|
97
142
|
}
|
|
98
143
|
/** Table data with columns and rows */
|
|
99
144
|
export interface GqldbTable {
|
package/dist/types/data_types.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Specialized data types for GQLDB Node.js driver.
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Vector = exports.Point3D = exports.Point = void 0;
|
|
6
7
|
exports.createTimestamp = createTimestamp;
|
|
7
8
|
exports.timestampToDate = timestampToDate;
|
|
8
9
|
exports.timestampFromDate = timestampFromDate;
|
|
@@ -22,6 +23,56 @@ exports.isYearToMonth = isYearToMonth;
|
|
|
22
23
|
exports.isDayToSecond = isDayToSecond;
|
|
23
24
|
exports.isVector = isVector;
|
|
24
25
|
exports.isGqldbSet = isGqldbSet;
|
|
26
|
+
/**
|
|
27
|
+
* 2D geographic point (WGS-84 — server enforces
|
|
28
|
+
* longitude ∈ [-180, 180], latitude ∈ [-90, 90]).
|
|
29
|
+
*
|
|
30
|
+
* Primary fields are `latitude` and `longitude`. For symmetry with
|
|
31
|
+
* `Point3D` and cartesian-style code, `.x` (= longitude) and `.y`
|
|
32
|
+
* (= latitude) are exposed as read-only alias getters.
|
|
33
|
+
*
|
|
34
|
+
* Constructed instances expose the aliases. Plain object literals
|
|
35
|
+
* `{ latitude, longitude }` still pass {@link isPoint}; consumers that
|
|
36
|
+
* want `.x` / `.y` should construct via `new Point(...)`.
|
|
37
|
+
*/
|
|
38
|
+
class Point {
|
|
39
|
+
latitude;
|
|
40
|
+
longitude;
|
|
41
|
+
constructor(latitude, longitude) {
|
|
42
|
+
this.latitude = latitude;
|
|
43
|
+
this.longitude = longitude;
|
|
44
|
+
}
|
|
45
|
+
/** Alias for `longitude` — matches the Point3D x/y/z convention. */
|
|
46
|
+
get x() { return this.longitude; }
|
|
47
|
+
/** Alias for `latitude` — matches the Point3D x/y/z convention. */
|
|
48
|
+
get y() { return this.latitude; }
|
|
49
|
+
}
|
|
50
|
+
exports.Point = Point;
|
|
51
|
+
/**
|
|
52
|
+
* 3D point (cartesian semantics — server does NOT enforce geographic
|
|
53
|
+
* bounds, so `x` and `y` may legitimately exceed lon/lat ranges).
|
|
54
|
+
*
|
|
55
|
+
* Primary fields are `x`, `y`, `z`. For symmetry with the geographic
|
|
56
|
+
* `Point`, `.longitude` (= x), `.latitude` (= y), `.height` (= z) are
|
|
57
|
+
* exposed as read-only alias getters for geographic-style readers.
|
|
58
|
+
*/
|
|
59
|
+
class Point3D {
|
|
60
|
+
x;
|
|
61
|
+
y;
|
|
62
|
+
z;
|
|
63
|
+
constructor(x, y, z) {
|
|
64
|
+
this.x = x;
|
|
65
|
+
this.y = y;
|
|
66
|
+
this.z = z;
|
|
67
|
+
}
|
|
68
|
+
/** Alias for `x` — for geographic-style readers. */
|
|
69
|
+
get longitude() { return this.x; }
|
|
70
|
+
/** Alias for `y` — for geographic-style readers. */
|
|
71
|
+
get latitude() { return this.y; }
|
|
72
|
+
/** Alias for `z` — for geographic-3D (lon/lat/altitude) readers. */
|
|
73
|
+
get height() { return this.z; }
|
|
74
|
+
}
|
|
75
|
+
exports.Point3D = Point3D;
|
|
25
76
|
/** Helper: Create a GqldbTimestamp from component values */
|
|
26
77
|
function createTimestamp(year, month, day, hour, minute, second, nanosecond = 0) {
|
|
27
78
|
return { _type: 'timestamp', year, month, day, hour, minute, second, nanosecond };
|
|
@@ -65,14 +116,51 @@ function localDateTimeToString(ldt) {
|
|
|
65
116
|
}
|
|
66
117
|
return `${y}-${m}-${d}T${h}:${min}:${s}`;
|
|
67
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* Float32 vector for embeddings.
|
|
121
|
+
*
|
|
122
|
+
* Implements {@link Iterable} so `for (const v of vec)` walks the
|
|
123
|
+
* elements. `vec.length` returns the dimension count — mirrors the
|
|
124
|
+
* Python driver's `len(vec)` / `for x in vec` ergonomics.
|
|
125
|
+
*
|
|
126
|
+
* Constructed via `new Vector([...])`. Plain object literals
|
|
127
|
+
* `{ values: [...] }` still pass {@link isVector}; consumers that want
|
|
128
|
+
* the iterator / length getter should construct via the class.
|
|
129
|
+
*/
|
|
130
|
+
class Vector {
|
|
131
|
+
values;
|
|
132
|
+
constructor(values) {
|
|
133
|
+
this.values = values;
|
|
134
|
+
}
|
|
135
|
+
/** Number of dimensions in the vector. */
|
|
136
|
+
get length() { return this.values.length; }
|
|
137
|
+
/** Iterate over the vector elements. */
|
|
138
|
+
*[Symbol.iterator]() {
|
|
139
|
+
for (const v of this.values)
|
|
140
|
+
yield v;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
exports.Vector = Vector;
|
|
68
144
|
/** Type guards for data types */
|
|
69
145
|
function isPoint(value) {
|
|
70
|
-
|
|
146
|
+
if (value instanceof Point)
|
|
147
|
+
return true;
|
|
148
|
+
if (value instanceof Point3D)
|
|
149
|
+
return false;
|
|
150
|
+
return value && typeof value === 'object'
|
|
151
|
+
&& 'latitude' in value && 'longitude' in value && !('z' in value);
|
|
71
152
|
}
|
|
72
153
|
function isPoint3D(value) {
|
|
73
|
-
|
|
154
|
+
if (value instanceof Point3D)
|
|
155
|
+
return true;
|
|
156
|
+
if (value instanceof Point)
|
|
157
|
+
return false;
|
|
158
|
+
return value && typeof value === 'object'
|
|
159
|
+
&& 'x' in value && 'y' in value && 'z' in value && !('latitude' in value);
|
|
74
160
|
}
|
|
75
161
|
function isGqldbDecimal(value) {
|
|
162
|
+
if (value instanceof Point || value instanceof Point3D)
|
|
163
|
+
return false;
|
|
76
164
|
return value && typeof value === 'object' && 'value' in value && typeof value.value === 'string' && !('latitude' in value) && !('x' in value);
|
|
77
165
|
}
|
|
78
166
|
function isGqldbTimestamp(value) {
|
|
@@ -119,4 +207,4 @@ function isVector(value) {
|
|
|
119
207
|
function isGqldbSet(value) {
|
|
120
208
|
return value instanceof Set;
|
|
121
209
|
}
|
|
122
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YV90eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9kYXRhX3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7QUFpQ0gsMENBRUM7QUFHRCwwQ0FFQztBQUdELDhDQVdDO0FBZUQsa0RBRUM7QUFHRCxrREFFQztBQUdELHNEQVlDO0FBNkRELDBCQUVDO0FBRUQsOEJBRUM7QUFFRCx3Q0FFQztBQUVELDRDQU9DO0FBRUQsb0RBT0M7QUFFRCxrQ0FFQztBQUVELG9EQU1DO0FBRUQsNENBRUM7QUFFRCw0Q0FFQztBQUVELHNDQUVDO0FBRUQsc0NBRUM7QUFFRCw0QkFFQztBQUVELGdDQUVDO0FBeExELDREQUE0RDtBQUM1RCxTQUFnQixlQUFlLENBQUMsSUFBWSxFQUFFLEtBQWEsRUFBRSxHQUFXLEVBQUUsSUFBWSxFQUFFLE1BQWMsRUFBRSxNQUFjLEVBQUUsYUFBcUIsQ0FBQztJQUM1SSxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNwRixDQUFDO0FBRUQsb0ZBQW9GO0FBQ3BGLFNBQWdCLGVBQWUsQ0FBQyxFQUFrQjtJQUNoRCxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0gsQ0FBQztBQUVELDZEQUE2RDtBQUM3RCxTQUFnQixpQkFBaUIsQ0FBQyxJQUFVO0lBQzFDLE9BQU87UUFDTCxLQUFLLEVBQUUsV0FBVztRQUNsQixJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRTtRQUMzQixLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUM7UUFDN0IsR0FBRyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDdEIsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUU7UUFDeEIsTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUU7UUFDNUIsTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUU7UUFDNUIsVUFBVSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLE9BQU87S0FDaEQsQ0FBQztBQUNKLENBQUM7QUFjRCxnRUFBZ0U7QUFDaEUsU0FBZ0IsbUJBQW1CLENBQUMsSUFBWSxFQUFFLEtBQWEsRUFBRSxHQUFXLEVBQUUsSUFBWSxFQUFFLE1BQWMsRUFBRSxNQUFjLEVBQUUsYUFBcUIsQ0FBQztJQUNoSixPQUFPLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUN4RixDQUFDO0FBRUQscUZBQXFGO0FBQ3JGLFNBQWdCLG1CQUFtQixDQUFDLEdBQXVCO0lBQ3pELE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0SSxDQUFDO0FBRUQsK0VBQStFO0FBQy9FLFNBQWdCLHFCQUFxQixDQUFDLEdBQXVCO0lBQzNELE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMvQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDaEQsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMvQyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDbkQsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2pELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsQ0FBQztJQUNoRCxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNiLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQzdFLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUMzQyxDQUFDO0FBNERE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S0FBVTtJQUNuQyxPQUFPLEtBQUssWUFBWSxHQUFHLENBQUM7QUFDOUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU3BlY2lhbGl6ZWQgZGF0YSB0eXBlcyBmb3IgR1FMREIgTm9kZS5qcyBkcml2ZXIuXG4gKi9cblxuLyoqIDJEIGdlb2dyYXBoaWMgcG9pbnQgKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9pbnQge1xuICBsYXRpdHVkZTogbnVtYmVyO1xuICBsb25naXR1ZGU6IG51bWJlcjtcbn1cblxuLyoqIDNEIHBvaW50ICovXG5leHBvcnQgaW50ZXJmYWNlIFBvaW50M0Qge1xuICB4OiBudW1iZXI7XG4gIHk6IG51bWJlcjtcbiAgejogbnVtYmVyO1xufVxuXG4vKiogSGlnaC1wcmVjaXNpb24gZGVjaW1hbCBudW1iZXIgKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3FsZGJEZWNpbWFsIHtcbiAgdmFsdWU6IHN0cmluZztcbn1cblxuLyoqIFRpbWVzdGFtcCB3aXRoIGNvbXBvbmVudC1iYXNlZCBmaWVsZHMgKFVUQykgKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3FsZGJUaW1lc3RhbXAge1xuICBfdHlwZTogJ3RpbWVzdGFtcCc7XG4gIHllYXI6IG51bWJlcjtcbiAgbW9udGg6IG51bWJlcjsgICAvLyAxLTEyXG4gIGRheTogbnVtYmVyOyAgICAgLy8gMS0zMVxuICBob3VyOiBudW1iZXI7ICAgIC8vIDAtMjNcbiAgbWludXRlOiBudW1iZXI7ICAvLyAwLTU5XG4gIHNlY29uZDogbnVtYmVyOyAgLy8gMC01OVxuICBuYW5vc2Vjb25kOiBudW1iZXI7IC8vIDAtOTk5OTk5OTk5XG59XG5cbi8qKiBIZWxwZXI6IENyZWF0ZSBhIEdxbGRiVGltZXN0YW1wIGZyb20gY29tcG9uZW50IHZhbHVlcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRpbWVzdGFtcCh5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXIsIGRheTogbnVtYmVyLCBob3VyOiBudW1iZXIsIG1pbnV0ZTogbnVtYmVyLCBzZWNvbmQ6IG51bWJlciwgbmFub3NlY29uZDogbnVtYmVyID0gMCk6IEdxbGRiVGltZXN0YW1wIHtcbiAgcmV0dXJuIHsgX3R5cGU6ICd0aW1lc3RhbXAnLCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbmFub3NlY29uZCB9O1xufVxuXG4vKiogSGVscGVyOiBDb252ZXJ0IGEgR3FsZGJUaW1lc3RhbXAgdG8gYSBKYXZhU2NyaXB0IERhdGUgKG1pbGxpc2Vjb25kIHByZWNpc2lvbikgKi9cbmV4cG9ydCBmdW5jdGlvbiB0aW1lc3RhbXBUb0RhdGUodHM6IEdxbGRiVGltZXN0YW1wKTogRGF0ZSB7XG4gIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyh0cy55ZWFyLCB0cy5tb250aCAtIDEsIHRzLmRheSwgdHMuaG91ciwgdHMubWludXRlLCB0cy5zZWNvbmQsIE1hdGguZmxvb3IodHMubmFub3NlY29uZCAvIDEwMDAwMDApKSk7XG59XG5cbi8qKiBIZWxwZXI6IENyZWF0ZSBhIEdxbGRiVGltZXN0YW1wIGZyb20gYSBKYXZhU2NyaXB0IERhdGUgKi9cbmV4cG9ydCBmdW5jdGlvbiB0aW1lc3RhbXBGcm9tRGF0ZShkYXRlOiBEYXRlKTogR3FsZGJUaW1lc3RhbXAge1xuICByZXR1cm4ge1xuICAgIF90eXBlOiAndGltZXN0YW1wJyxcbiAgICB5ZWFyOiBkYXRlLmdldFVUQ0Z1bGxZZWFyKCksXG4gICAgbW9udGg6IGRhdGUuZ2V0VVRDTW9udGgoKSArIDEsXG4gICAgZGF5OiBkYXRlLmdldFVUQ0RhdGUoKSxcbiAgICBob3VyOiBkYXRlLmdldFVUQ0hvdXJzKCksXG4gICAgbWludXRlOiBkYXRlLmdldFVUQ01pbnV0ZXMoKSxcbiAgICBzZWNvbmQ6IGRhdGUuZ2V0VVRDU2Vjb25kcygpLFxuICAgIG5hbm9zZWNvbmQ6IGRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCkgKiAxMDAwMDAwLFxuICB9O1xufVxuXG4vKiogTG9jYWwgZGF0ZS10aW1lIHdpdGhvdXQgdGltZXpvbmUgKGNvbXBvbmVudC1iYXNlZCkgKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3FsZGJMb2NhbERhdGVUaW1lIHtcbiAgX3R5cGU6ICdsb2NhbERhdGV0aW1lJztcbiAgeWVhcjogbnVtYmVyO1xuICBtb250aDogbnVtYmVyOyAgIC8vIDEtMTJcbiAgZGF5OiBudW1iZXI7ICAgICAvLyAxLTMxXG4gIGhvdXI6IG51bWJlcjsgICAgLy8gMC0yM1xuICBtaW51dGU6IG51bWJlcjsgIC8vIDAtNTlcbiAgc2Vjb25kOiBudW1iZXI7ICAvLyAwLTU5XG4gIG5hbm9zZWNvbmQ6IG51bWJlcjsgLy8gMC05OTk5OTk5OTlcbn1cblxuLyoqIEhlbHBlcjogQ3JlYXRlIGEgR3FsZGJMb2NhbERhdGVUaW1lIGZyb20gY29tcG9uZW50IHZhbHVlcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxvY2FsRGF0ZVRpbWUoeWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyLCBkYXk6IG51bWJlciwgaG91cjogbnVtYmVyLCBtaW51dGU6IG51bWJlciwgc2Vjb25kOiBudW1iZXIsIG5hbm9zZWNvbmQ6IG51bWJlciA9IDApOiBHcWxkYkxvY2FsRGF0ZVRpbWUge1xuICByZXR1cm4geyBfdHlwZTogJ2xvY2FsRGF0ZXRpbWUnLCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbmFub3NlY29uZCB9O1xufVxuXG4vKiogSGVscGVyOiBDb252ZXJ0IGEgR3FsZGJMb2NhbERhdGVUaW1lIHRvIGEgSmF2YVNjcmlwdCBEYXRlIChpbnRlcnByZXRlZCBhcyBVVEMpICovXG5leHBvcnQgZnVuY3Rpb24gbG9jYWxEYXRlVGltZVRvRGF0ZShsZHQ6IEdxbGRiTG9jYWxEYXRlVGltZSk6IERhdGUge1xuICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMobGR0LnllYXIsIGxkdC5tb250aCAtIDEsIGxkdC5kYXksIGxkdC5ob3VyLCBsZHQubWludXRlLCBsZHQuc2Vjb25kLCBNYXRoLmZsb29yKGxkdC5uYW5vc2Vjb25kIC8gMTAwMDAwMCkpKTtcbn1cblxuLyoqIEhlbHBlcjogQ29udmVydCBhIEdxbGRiTG9jYWxEYXRlVGltZSB0byBJU08gODYwMSBzdHJpbmcgd2l0aG91dCB0aW1lem9uZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvY2FsRGF0ZVRpbWVUb1N0cmluZyhsZHQ6IEdxbGRiTG9jYWxEYXRlVGltZSk6IHN0cmluZyB7XG4gIGNvbnN0IHkgPSBsZHQueWVhci50b1N0cmluZygpLnBhZFN0YXJ0KDQsICcwJyk7XG4gIGNvbnN0IG0gPSBsZHQubW9udGgudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICBjb25zdCBkID0gbGR0LmRheS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gIGNvbnN0IGggPSBsZHQuaG91ci50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gIGNvbnN0IG1pbiA9IGxkdC5taW51dGUudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICBjb25zdCBzID0gbGR0LnNlY29uZC50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gIGNvbnN0IG1zID0gTWF0aC5mbG9vcihsZHQubmFub3NlY29uZCAvIDEwMDAwMDApO1xuICBpZiAobXMgIT09IDApIHtcbiAgICByZXR1cm4gYCR7eX0tJHttfS0ke2R9VCR7aH06JHttaW59OiR7c30uJHttcy50b1N0cmluZygpLnBhZFN0YXJ0KDMsICcwJyl9YDtcbiAgfVxuICByZXR1cm4gYCR7eX0tJHttfS0ke2R9VCR7aH06JHttaW59OiR7c31gO1xufVxuXG4vKiogRGF0ZSB3aXRob3V0IHRpbWUgKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3FsZGJEYXRlIHtcbiAgeWVhcjogbnVtYmVyO1xuICBtb250aDogbnVtYmVyOyAgLy8gMS0xMlxuICBkYXk6IG51bWJlcjsgICAgLy8gMS0zMVxufVxuXG4vKiogRGF0ZS10aW1lIHdpdGggdGltZXpvbmUgb2Zmc2V0IChjb21wb25lbnQtYmFzZWQpICovXG5leHBvcnQgaW50ZXJmYWNlIEdxbGRiWm9uZWREYXRlVGltZSB7XG4gIHllYXI6IG51bWJlcjtcbiAgbW9udGg6IG51bWJlcjsgICAvLyAxLTEyXG4gIGRheTogbnVtYmVyOyAgICAgLy8gMS0zMVxuICBob3VyOiBudW1iZXI7ICAgIC8vIDAtMjNcbiAgbWludXRlOiBudW1iZXI7ICAvLyAwLTU5XG4gIHNlY29uZDogbnVtYmVyOyAgLy8gMC01OVxuICBuYW5vc2Vjb25kOiBudW1iZXI7IC8vIDAtOTk5OTk5OTk5XG4gIG9mZnNldE1pbnV0ZXM6IG51bWJlcjsgLy8gc2lnbmVkIG9mZnNldCBpbiBtaW51dGVzXG59XG5cbi8qKiBMb2NhbCB0aW1lIHdpdGhvdXQgdGltZXpvbmUgKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3FsZGJMb2NhbFRpbWUge1xuICBob3VyOiBudW1iZXI7XG4gIG1pbnV0ZTogbnVtYmVyO1xuICBzZWNvbmQ6IG51bWJlcjtcbiAgbmFub3NlY29uZDogbnVtYmVyO1xufVxuXG4vKiogVGltZSB3aXRoIHRpbWV6b25lIG9mZnNldCAqL1xuZXhwb3J0IGludGVyZmFjZSBHcWxkYlpvbmVkVGltZSB7XG4gIGhvdXI6IG51bWJlcjtcbiAgbWludXRlOiBudW1iZXI7XG4gIHNlY29uZDogbnVtYmVyO1xuICBuYW5vc2Vjb25kOiBudW1iZXI7XG4gIG9mZnNldE1pbnV0ZXM6IG51bWJlcjtcbn1cblxuLyoqIFllYXItbW9udGggaW50ZXJ2YWwgKi9cbmV4cG9ydCBpbnRlcmZhY2UgWWVhclRvTW9udGgge1xuICBtb250aHM6IG51bWJlcjtcbn1cblxuLyoqIERheS1zZWNvbmQgaW50ZXJ2YWwgKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF5VG9TZWNvbmQge1xuICBzZWNvbmRzOiBudW1iZXI7XG4gIG5hbm9zZWNvbmRzOiBudW1iZXI7XG59XG5cbi8qKiBGbG9hdDMyIHZlY3RvciBmb3IgZW1iZWRkaW5ncyAqL1xuZXhwb3J0IGludGVyZmFjZSBWZWN0b3Ige1xuICB2YWx1ZXM6IG51bWJlcltdO1xufVxuXG4vKiogVGFibGUgZGF0YSB3aXRoIGNvbHVtbnMgYW5kIHJvd3MgKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3FsZGJUYWJsZSB7XG4gIGNvbHVtbnM6IHN0cmluZ1tdO1xuICByb3dzOiBhbnlbXVtdO1xufVxuXG4vKiogVHlwZSBndWFyZHMgZm9yIGRhdGEgdHlwZXMgKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BvaW50KHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBQb2ludCB7XG4gIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICdsYXRpdHVkZScgaW4gdmFsdWUgJiYgJ2xvbmdpdHVkZScgaW4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BvaW50M0QodmFsdWU6IGFueSk6IHZhbHVlIGlzIFBvaW50M0Qge1xuICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAneCcgaW4gdmFsdWUgJiYgJ3knIGluIHZhbHVlICYmICd6JyBpbiB2YWx1ZSAmJiAhKCdsYXRpdHVkZScgaW4gdmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNHcWxkYkRlY2ltYWwodmFsdWU6IGFueSk6IHZhbHVlIGlzIEdxbGRiRGVjaW1hbCB7XG4gIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICd2YWx1ZScgaW4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlLnZhbHVlID09PSAnc3RyaW5nJyAmJiAhKCdsYXRpdHVkZScgaW4gdmFsdWUpICYmICEoJ3gnIGluIHZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzR3FsZGJUaW1lc3RhbXAodmFsdWU6IGFueSk6IHZhbHVlIGlzIEdxbGRiVGltZXN0YW1wIHtcbiAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAmJiAneWVhcicgaW4gdmFsdWUgJiYgJ21vbnRoJyBpbiB2YWx1ZSAmJiAnZGF5JyBpbiB2YWx1ZVxuICAgICYmICdob3VyJyBpbiB2YWx1ZSAmJiAnbWludXRlJyBpbiB2YWx1ZSAmJiAnc2Vjb25kJyBpbiB2YWx1ZVxuICAgICYmICduYW5vc2Vjb25kJyBpbiB2YWx1ZSAmJiAhKCdvZmZzZXRNaW51dGVzJyBpbiB2YWx1ZSlcbiAgICAmJiB0eXBlb2YgdmFsdWUueWVhciA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHZhbHVlLmhvdXIgPT09ICdudW1iZXInXG4gICAgJiYgdmFsdWUuX3R5cGUgPT09ICd0aW1lc3RhbXAnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNHcWxkYkxvY2FsRGF0ZVRpbWUodmFsdWU6IGFueSk6IHZhbHVlIGlzIEdxbGRiTG9jYWxEYXRlVGltZSB7XG4gIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnXG4gICAgJiYgJ3llYXInIGluIHZhbHVlICYmICdtb250aCcgaW4gdmFsdWUgJiYgJ2RheScgaW4gdmFsdWVcbiAgICAmJiAnaG91cicgaW4gdmFsdWUgJiYgJ21pbnV0ZScgaW4gdmFsdWUgJiYgJ3NlY29uZCcgaW4gdmFsdWVcbiAgICAmJiAnbmFub3NlY29uZCcgaW4gdmFsdWUgJiYgISgnb2Zmc2V0TWludXRlcycgaW4gdmFsdWUpXG4gICAgJiYgdHlwZW9mIHZhbHVlLnllYXIgPT09ICdudW1iZXInICYmIHR5cGVvZiB2YWx1ZS5ob3VyID09PSAnbnVtYmVyJ1xuICAgICYmIHZhbHVlLl90eXBlID09PSAnbG9jYWxEYXRldGltZSc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0dxbGRiRGF0ZSh2YWx1ZTogYW55KTogdmFsdWUgaXMgR3FsZGJEYXRlIHtcbiAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgJ3llYXInIGluIHZhbHVlICYmICdtb250aCcgaW4gdmFsdWUgJiYgJ2RheScgaW4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlLnllYXIgPT09ICdudW1iZXInICYmICEoJ2hvdXInIGluIHZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzR3FsZGJab25lZERhdGVUaW1lKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBHcWxkYlpvbmVkRGF0ZVRpbWUge1xuICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgICYmICd5ZWFyJyBpbiB2YWx1ZSAmJiAnbW9udGgnIGluIHZhbHVlICYmICdkYXknIGluIHZhbHVlXG4gICAgJiYgJ2hvdXInIGluIHZhbHVlICYmICdtaW51dGUnIGluIHZhbHVlICYmICdzZWNvbmQnIGluIHZhbHVlXG4gICAgJiYgJ25hbm9zZWNvbmQnIGluIHZhbHVlICYmICdvZmZzZXRNaW51dGVzJyBpbiB2YWx1ZVxuICAgICYmIHR5cGVvZiB2YWx1ZS55ZWFyID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgdmFsdWUuaG91ciA9PT0gJ251bWJlcic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0dxbGRiTG9jYWxUaW1lKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBHcWxkYkxvY2FsVGltZSB7XG4gIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICdob3VyJyBpbiB2YWx1ZSAmJiAnbWludXRlJyBpbiB2YWx1ZSAmJiAnc2Vjb25kJyBpbiB2YWx1ZSAmJiAnbmFub3NlY29uZCcgaW4gdmFsdWUgJiYgISgnb2Zmc2V0TWludXRlcycgaW4gdmFsdWUpICYmICEoJ3llYXInIGluIHZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzR3FsZGJab25lZFRpbWUodmFsdWU6IGFueSk6IHZhbHVlIGlzIEdxbGRiWm9uZWRUaW1lIHtcbiAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgJ2hvdXInIGluIHZhbHVlICYmICdtaW51dGUnIGluIHZhbHVlICYmICdzZWNvbmQnIGluIHZhbHVlICYmICduYW5vc2Vjb25kJyBpbiB2YWx1ZSAmJiAnb2Zmc2V0TWludXRlcycgaW4gdmFsdWUgJiYgISgneWVhcicgaW4gdmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNZZWFyVG9Nb250aCh2YWx1ZTogYW55KTogdmFsdWUgaXMgWWVhclRvTW9udGgge1xuICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAnbW9udGhzJyBpbiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUubW9udGhzID09PSAnbnVtYmVyJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF5VG9TZWNvbmQodmFsdWU6IGFueSk6IHZhbHVlIGlzIERheVRvU2Vjb25kIHtcbiAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgJ3NlY29uZHMnIGluIHZhbHVlICYmICduYW5vc2Vjb25kcycgaW4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlLnNlY29uZHMgPT09ICdudW1iZXInO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWZWN0b3IodmFsdWU6IGFueSk6IHZhbHVlIGlzIFZlY3RvciB7XG4gIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICd2YWx1ZXMnIGluIHZhbHVlICYmIEFycmF5LmlzQXJyYXkodmFsdWUudmFsdWVzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzR3FsZGJTZXQodmFsdWU6IGFueSk6IHZhbHVlIGlzIFNldDxhbnk+IHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgU2V0O1xufVxuIl19
|
|
210
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YV90eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9kYXRhX3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7O0FBK0RILDBDQUVDO0FBR0QsMENBRUM7QUFHRCw4Q0FXQztBQWVELGtEQUVDO0FBR0Qsa0RBRUM7QUFHRCxzREFZQztBQStFRCwwQkFLQztBQUVELDhCQUtDO0FBRUQsd0NBR0M7QUFFRCw0Q0FPQztBQUVELG9EQU9DO0FBRUQsa0NBRUM7QUFFRCxvREFNQztBQUVELDRDQUVDO0FBRUQsNENBRUM7QUFFRCxzQ0FFQztBQUVELHNDQUVDO0FBRUQsNEJBRUM7QUFFRCxnQ0FFQztBQTdRRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQWEsS0FBSztJQUNZO0lBQWtDO0lBQTlELFlBQTRCLFFBQWdCLEVBQWtCLFNBQWlCO1FBQW5ELGFBQVEsR0FBUixRQUFRLENBQVE7UUFBa0IsY0FBUyxHQUFULFNBQVMsQ0FBUTtJQUFHLENBQUM7SUFFbkYsb0VBQW9FO0lBQ3BFLElBQUksQ0FBQyxLQUFhLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFFMUMsbUVBQW1FO0lBQ25FLElBQUksQ0FBQyxLQUFhLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Q0FDMUM7QUFSRCxzQkFRQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFhLE9BQU87SUFDVTtJQUEyQjtJQUEyQjtJQUFsRixZQUE0QixDQUFTLEVBQWtCLENBQVMsRUFBa0IsQ0FBUztRQUEvRCxNQUFDLEdBQUQsQ0FBQyxDQUFRO1FBQWtCLE1BQUMsR0FBRCxDQUFDLENBQVE7UUFBa0IsTUFBQyxHQUFELENBQUMsQ0FBUTtJQUFHLENBQUM7SUFFL0Ysb0RBQW9EO0lBQ3BELElBQUksU0FBUyxLQUFhLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFMUMsb0RBQW9EO0lBQ3BE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USxJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDO0FBQ3JHLENBQUM7QUFFRCxTQUFnQixhQUFhLENBQUMsS0FBVTtJQUN0QyxPQUFPLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksU0FBUyxJQUFJLEtBQUssSUFBSSxhQUFhLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxDQUFDLE9BQU8sS0FBSyxRQUFRLENBQUM7QUFDakksQ0FBQztBQUVELFNBQWdCLFFBQVEsQ0FBQyxLQUFVO0lBQ2pDLE9BQU8sS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxRQUFRLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hHLENBQUM7QUFFRCxTQUFnQixVQUFVLENBQUMsS0FBVTtJQUNuQyxPQUFPLEtBQUssWUFBWSxHQUFHLENBQUM7QUFDOUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU3BlY2lhbGl6ZWQgZGF0YSB0eXBlcyBmb3IgR1FMREIgTm9kZS5qcyBkcml2ZXIuXG4gKi9cblxuLyoqXG4gKiAyRCBnZW9ncmFwaGljIHBvaW50IChXR1MtODQg4oCUIHNlcnZlciBlbmZvcmNlc1xuICogbG9uZ2l0dWRlIOKIiCBbLTE4MCwgMTgwXSwgbGF0aXR1ZGUg4oiIIFstOTAsIDkwXSkuXG4gKlxuICogUHJpbWFyeSBmaWVsZHMgYXJlIGBsYXRpdHVkZWAgYW5kIGBsb25naXR1ZGVgLiBGb3Igc3ltbWV0cnkgd2l0aFxuICogYFBvaW50M0RgIGFuZCBjYXJ0ZXNpYW4tc3R5bGUgY29kZSwgYC54YCAoPSBsb25naXR1ZGUpIGFuZCBgLnlgXG4gKiAoPSBsYXRpdHVkZSkgYXJlIGV4cG9zZWQgYXMgcmVhZC1vbmx5IGFsaWFzIGdldHRlcnMuXG4gKlxuICogQ29uc3RydWN0ZWQgaW5zdGFuY2VzIGV4cG9zZSB0aGUgYWxpYXNlcy4gUGxhaW4gb2JqZWN0IGxpdGVyYWxzXG4gKiBgeyBsYXRpdHVkZSwgbG9uZ2l0dWRlIH1gIHN0aWxsIHBhc3Mge0BsaW5rIGlzUG9pbnR9OyBjb25zdW1lcnMgdGhhdFxuICogd2FudCBgLnhgIC8gYC55YCBzaG91bGQgY29uc3RydWN0IHZpYSBgbmV3IFBvaW50KC4uLilgLlxuICovXG5leHBvcnQgY2xhc3MgUG9pbnQge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgbGF0aXR1ZGU6IG51bWJlciwgcHVibGljIHJlYWRvbmx5IGxvbmdpdHVkZTogbnVtYmVyKSB7fVxuXG4gIC8qKiBBbGlhcyBmb3IgYGxvbmdpdHVkZWAg4oCUIG1hdGNoZXMgdGhlIFBvaW50M0QgeC95L3ogY29udmVudGlvbi4gKi9cbiAgZ2V0IHgoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMubG9uZ2l0dWRlOyB9XG5cbiAgLyoqIEFsaWFzIGZvciBgbGF0aXR1ZGVgIOKAlCBtYXRjaGVzIHRoZSBQb2ludDNEIHgveS96IGNvbnZlbnRpb24uICovXG4gIGdldCB5KCk6IG51bWJlciB7IHJldHVybiB0aGlzLmxhdGl0dWRlOyB9XG59XG5cbi8qKlxuICogM0QgcG9pbnQgKGNhcnRlc2lhbiBzZW1hbnRpY3Mg4oCUIHNlcnZlciBkb2VzIE5PVCBlbmZvcmNlIGdlb2dyYXBoaWNcbiAqIGJvdW5kcywgc28gYHhgIGFuZCBgeWAgbWF5IGxlZ2l0aW1hdGVseSBleGNlZWQgbG9uL2xhdCByYW5nZXMpLlxuICpcbiAqIFByaW1hcnkgZmllbGRzIGFyZSBgeGAsIGB5YCwgYHpgLiBGb3Igc3ltbWV0cnkgd2l0aCB0aGUgZ2VvZ3JhcGhpY1xuICogYFBvaW50YCwgYC5sb25naXR1ZGVgICg9IHgpLCBgLmxhdGl0dWRlYCAoPSB5KSwgYC5oZWlnaHRgICg9IHopIGFyZVxuICogZXhwb3NlZCBhcyByZWFkLW9ubHkgYWxpYXMgZ2V0dGVycyBmb3IgZ2VvZ3JhcGhpYy1zdHlsZSByZWFkZXJzLlxuICovXG5leHBvcnQgY2xhc3MgUG9pbnQzRCB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSB4OiBudW1iZXIsIHB1YmxpYyByZWFkb25seSB5OiBudW1iZXIsIHB1YmxpYyByZWFkb25seSB6OiBudW1iZXIpIHt9XG5cbiAgLyoqIEFsaWFzIGZvciBgeGAg4oCUIGZvciBnZW9ncmFwaGljLXN0eWxlIHJlYWRlcnMuICovXG4gIGdldCBsb25naXR1ZGUoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMueDsgfVxuXG4gIC8qKiBBbGlhcyBmb3IgYHlgIOKAlCBmb3IgZ2VvZ3JhcGhpYy1zdHlsZSByZWFkZXJzLiAqL1xuICBnZXQgbGF0aXR1ZGUoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMueTsgfVxuXG4gIC8qKiBBbGlhcyBmb3IgYHpgIOKAlCBmb3IgZ2VvZ3JhcGhpYy0zRCAobG9uL2xhdC9hbHRpdHVkZSkgcmVhZGVycy4gKi9cbiAgZ2V0IGhlaWdodCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy56OyB9XG59XG5cbi8qKiBIaWdoLXByZWNpc2lvbiBkZWNpbWFsIG51bWJlciAqL1xuZXhwb3J0IGludGVyZmFjZSBHcWxkYkRlY2ltYWwge1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG4vKiogVGltZXN0YW1wIHdpdGggY29tcG9uZW50LWJhc2VkIGZpZWxkcyAoVVRDKSAqL1xuZXhwb3J0IGludGVyZmFjZSBHcWxkYlRpbWVzdGFtcCB7XG4gIF90eXBlOiAndGltZXN0YW1wJztcbiAgeWVhcjogbnVtYmVyO1xuICBtb250aDogbnVtYmVyOyAgIC8vIDEtMTJcbiAgZGF5OiBudW1iZXI7ICAgICAvLyAxLTMxXG4gIGhvdXI6IG51bWJlcjsgICAgLy8gMC0yM1xuICBtaW51dGU6IG51bWJlcjsgIC8vIDAtNTlcbiAgc2Vjb25kOiBudW1iZXI7ICAvLyAwLTU5XG4gIG5hbm9zZWNvbmQ6IG51bWJlcjsgLy8gMC05OTk5OTk5OTlcbn1cblxuLyoqIEhlbHBlcjogQ3JlYXRlIGEgR3FsZGJUaW1lc3RhbXAgZnJvbSBjb21wb25lbnQgdmFsdWVzICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGltZXN0YW1wKHllYXI6IG51bWJlciwgbW9udGg6IG51bWJlciwgZGF5OiBudW1iZXIsIGhvdXI6IG51bWJlciwgbWludXRlOiBudW1iZXIsIHNlY29uZDogbnVtYmVyLCBuYW5vc2Vjb25kOiBudW1iZXIgPSAwKTogR3FsZGJUaW1lc3RhbXAge1xuICByZXR1cm4geyBfdHlwZTogJ3RpbWVzdGFtcCcsIHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBuYW5vc2Vjb25kIH07XG59XG5cbi8qKiBIZWxwZXI6IENvbnZlcnQgYSBHcWxkYlRpbWVzdGFtcCB0byBhIEphdmFTY3JpcHQgRGF0ZSAobWlsbGlzZWNvbmQgcHJlY2lzaW9uKSAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRpbWVzdGFtcFRvRGF0ZSh0czogR3FsZGJUaW1lc3RhbXApOiBEYXRlIHtcbiAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHRzLnllYXIsIHRzLm1vbnRoIC0gMSwgdHMuZGF5LCB0cy5ob3VyLCB0cy5taW51dGUsIHRzLnNlY29uZCwgTWF0aC5mbG9vcih0cy5uYW5vc2Vjb25kIC8gMTAwMDAwMCkpKTtcbn1cblxuLyoqIEhlbHBlcjogQ3JlYXRlIGEgR3FsZGJUaW1lc3RhbXAgZnJvbSBhIEphdmFTY3JpcHQgRGF0ZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRpbWVzdGFtcEZyb21EYXRlKGRhdGU6IERhdGUpOiBHcWxkYlRpbWVzdGFtcCB7XG4gIHJldHVybiB7XG4gICAgX3R5cGU6ICd0aW1lc3RhbXAnLFxuICAgIHllYXI6IGRhdGUuZ2V0VVRDRnVsbFllYXIoKSxcbiAgICBtb250aDogZGF0ZS5nZXRVVENNb250aCgpICsgMSxcbiAgICBkYXk6IGRhdGUuZ2V0VVRDRGF0ZSgpLFxuICAgIGhvdXI6IGRhdGUuZ2V0VVRDSG91cnMoKSxcbiAgICBtaW51dGU6IGRhdGUuZ2V0VVRDTWludXRlcygpLFxuICAgIHNlY29uZDogZGF0ZS5nZXRVVENTZWNvbmRzKCksXG4gICAgbmFub3NlY29uZDogZGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKSAqIDEwMDAwMDAsXG4gIH07XG59XG5cbi8qKiBMb2NhbCBkYXRlLXRpbWUgd2l0aG91dCB0aW1lem9uZSAoY29tcG9uZW50LWJhc2VkKSAqL1xuZXhwb3J0IGludGVyZmFjZSBHcWxkYkxvY2FsRGF0ZVRpbWUge1xuICBfdHlwZTogJ2xvY2FsRGF0ZXRpbWUnO1xuICB5ZWFyOiBudW1iZXI7XG4gIG1vbnRoOiBudW1iZXI7ICAgLy8gMS0xMlxuICBkYXk6IG51bWJlcjsgICAgIC8vIDEtMzFcbiAgaG91cjogbnVtYmVyOyAgICAvLyAwLTIzXG4gIG1pbnV0ZTogbnVtYmVyOyAgLy8gMC01OVxuICBzZWNvbmQ6IG51bWJlcjsgIC8vIDAtNTlcbiAgbmFub3NlY29uZDogbnVtYmVyOyAvLyAwLTk5OTk5OTk5OVxufVxuXG4vKiogSGVscGVyOiBDcmVhdGUgYSBHcWxkYkxvY2FsRGF0ZVRpbWUgZnJvbSBjb21wb25lbnQgdmFsdWVzICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTG9jYWxEYXRlVGltZSh5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXIsIGRheTogbnVtYmVyLCBob3VyOiBudW1iZXIsIG1pbnV0ZTogbnVtYmVyLCBzZWNvbmQ6IG51bWJlciwgbmFub3NlY29uZDogbnVtYmVyID0gMCk6IEdxbGRiTG9jYWxEYXRlVGltZSB7XG4gIHJldHVybiB7IF90eXBlOiAnbG9jYWxEYXRldGltZScsIHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBuYW5vc2Vjb25kIH07XG59XG5cbi8qKiBIZWxwZXI6IENvbnZlcnQgYSBHcWxkYkxvY2FsRGF0ZVRpbWUgdG8gYSBKYXZhU2NyaXB0IERhdGUgKGludGVycHJldGVkIGFzIFVUQykgKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2NhbERhdGVUaW1lVG9EYXRlKGxkdDogR3FsZGJMb2NhbERhdGVUaW1lKTogRGF0ZSB7XG4gIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhsZHQueWVhciwgbGR0Lm1vbnRoIC0gMSwgbGR0LmRheSwgbGR0LmhvdXIsIGxkdC5taW51dGUsIGxkdC5zZWNvbmQsIE1hdGguZmxvb3IobGR0Lm5hbm9zZWNvbmQgLyAxMDAwMDAwKSkpO1xufVxuXG4vKiogSGVscGVyOiBDb252ZXJ0IGEgR3FsZGJMb2NhbERhdGVUaW1lIHRvIElTTyA4NjAxIHN0cmluZyB3aXRob3V0IHRpbWV6b25lICovXG5leHBvcnQgZnVuY3Rpb24gbG9jYWxEYXRlVGltZVRvU3RyaW5nKGxkdDogR3FsZGJMb2NhbERhdGVUaW1lKTogc3RyaW5nIHtcbiAgY29uc3QgeSA9IGxkdC55ZWFyLnRvU3RyaW5nKCkucGFkU3RhcnQoNCwgJzAnKTtcbiAgY29uc3QgbSA9IGxkdC5tb250aC50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gIGNvbnN0IGQgPSBsZHQuZGF5LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgY29uc3QgaCA9IGxkdC5ob3VyLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgY29uc3QgbWluID0gbGR0Lm1pbnV0ZS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gIGNvbnN0IHMgPSBsZHQuc2Vjb25kLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgY29uc3QgbXMgPSBNYXRoLmZsb29yKGxkdC5uYW5vc2Vjb25kIC8gMTAwMDAwMCk7XG4gIGlmIChtcyAhPT0gMCkge1xuICAgIHJldHVybiBgJHt5fS0ke219LSR7ZH1UJHtofToke21pbn06JHtzfS4ke21zLnRvU3RyaW5nKCkucGFkU3RhcnQoMywgJzAnKX1gO1xuICB9XG4gIHJldHVybiBgJHt5fS0ke219LSR7ZH1UJHtofToke21pbn06JHtzfWA7XG59XG5cbi8qKiBEYXRlIHdpdGhvdXQgdGltZSAqL1xuZXhwb3J0IGludGVyZmFjZSBHcWxkYkRhdGUge1xuICB5ZWFyOiBudW1iZXI7XG4gIG1vbnRoOiBudW1iZXI7ICAvLyAxLTEyXG4gIGRheTogbnVtYmVyOyAgICAvLyAxLTMxXG59XG5cbi8qKiBEYXRlLXRpbWUgd2l0aCB0aW1lem9uZSBvZmZzZXQgKGNvbXBvbmVudC1iYXNlZCkgKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3FsZGJab25lZERhdGVUaW1lIHtcbiAgeWVhcjogbnVtYmVyO1xuICBtb250aDogbnVtYmVyOyAgIC8vIDEtMTJcbiAgZGF5OiBudW1iZXI7ICAgICAvLyAxLTMxXG4gIGhvdXI6IG51bWJlcjsgICAgLy8gMC0yM1xuICBtaW51dGU6IG51bWJlcjsgIC8vIDAtNTlcbiAgc2Vjb25kOiBudW1iZXI7ICAvLyAwLTU5XG4gIG5hbm9zZWNvbmQ6IG51bWJlcjsgLy8gMC05OTk5OTk5OTlcbiAgb2Zmc2V0TWludXRlczogbnVtYmVyOyAvLyBzaWduZWQgb2Zmc2V0IGluIG1pbnV0ZXNcbn1cblxuLyoqIExvY2FsIHRpbWUgd2l0aG91dCB0aW1lem9uZSAqL1xuZXhwb3J0IGludGVyZmFjZSBHcWxkYkxvY2FsVGltZSB7XG4gIGhvdXI6IG51bWJlcjtcbiAgbWludXRlOiBudW1iZXI7XG4gIHNlY29uZDogbnVtYmVyO1xuICBuYW5vc2Vjb25kOiBudW1iZXI7XG59XG5cbi8qKiBUaW1lIHdpdGggdGltZXpvbmUgb2Zmc2V0ICovXG5leHBvcnQgaW50ZXJmYWNlIEdxbGRiWm9uZWRUaW1lIHtcbiAgaG91cjogbnVtYmVyO1xuICBtaW51dGU6IG51bWJlcjtcbiAgc2Vjb25kOiBudW1iZXI7XG4gIG5hbm9zZWNvbmQ6IG51bWJlcjtcbiAgb2Zmc2V0TWludXRlczogbnVtYmVyO1xufVxuXG4vKiogWWVhci1tb250aCBpbnRlcnZhbCAqL1xuZXhwb3J0IGludGVyZmFjZSBZZWFyVG9Nb250aCB7XG4gIG1vbnRoczogbnVtYmVyO1xufVxuXG4vKiogRGF5LXNlY29uZCBpbnRlcnZhbCAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXlUb1NlY29uZCB7XG4gIHNlY29uZHM6IG51bWJlcjtcbiAgbmFub3NlY29uZHM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBGbG9hdDMyIHZlY3RvciBmb3IgZW1iZWRkaW5ncy5cbiAqXG4gKiBJbXBsZW1lbnRzIHtAbGluayBJdGVyYWJsZX0gc28gYGZvciAoY29uc3QgdiBvZiB2ZWMpYCB3YWxrcyB0aGVcbiAqIGVsZW1lbnRzLiBgdmVjLmxlbmd0aGAgcmV0dXJucyB0aGUgZGltZW5zaW9uIGNvdW50IOKAlCBtaXJyb3JzIHRoZVxuICogUHl0aG9uIGRyaXZlcidzIGBsZW4odmVjKWAgLyBgZm9yIHggaW4gdmVjYCBlcmdvbm9taWNzLlxuICpcbiAqIENvbnN0cnVjdGVkIHZpYSBgbmV3IFZlY3RvcihbLi4uXSlgLiBQbGFpbiBvYmplY3QgbGl0ZXJhbHNcbiAqIGB7IHZhbHVlczogWy4uLl0gfWAgc3RpbGwgcGFzcyB7QGxpbmsgaXNWZWN0b3J9OyBjb25zdW1lcnMgdGhhdCB3YW50XG4gKiB0aGUgaXRlcmF0b3IgLyBsZW5ndGggZ2V0dGVyIHNob3VsZCBjb25zdHJ1Y3QgdmlhIHRoZSBjbGFzcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFZlY3RvciBpbXBsZW1lbnRzIEl0ZXJhYmxlPG51bWJlcj4ge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgdmFsdWVzOiBudW1iZXJbXSkge31cblxuICAvKiogTnVtYmVyIG9mIGRpbWVuc2lvbnMgaW4gdGhlIHZlY3Rvci4gKi9cbiAgZ2V0IGxlbmd0aCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy52YWx1ZXMubGVuZ3RoOyB9XG5cbiAgLyoqIEl0ZXJhdGUgb3ZlciB0aGUgdmVjdG9yIGVsZW1lbnRzLiAqL1xuICAqW1N5bWJvbC5pdGVyYXRvcl0oKTogSXRlcmFibGVJdGVyYXRvcjxudW1iZXI+IHtcbiAgICBmb3IgKGNvbnN0IHYgb2YgdGhpcy52YWx1ZXMpIHlpZWxkIHY7XG4gIH1cbn1cblxuLyoqIFRhYmxlIGRhdGEgd2l0aCBjb2x1bW5zIGFuZCByb3dzICovXG5leHBvcnQgaW50ZXJmYWNlIEdxbGRiVGFibGUge1xuICBjb2x1bW5zOiBzdHJpbmdbXTtcbiAgcm93czogYW55W11bXTtcbn1cblxuLyoqIFR5cGUgZ3VhcmRzIGZvciBkYXRhIHR5cGVzICovXG5leHBvcnQgZnVuY3Rpb24gaXNQb2ludCh2YWx1ZTogYW55KTogdmFsdWUgaXMgUG9pbnQge1xuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBQb2ludCkgcmV0dXJuIHRydWU7XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFBvaW50M0QpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAmJiAnbGF0aXR1ZGUnIGluIHZhbHVlICYmICdsb25naXR1ZGUnIGluIHZhbHVlICYmICEoJ3onIGluIHZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUG9pbnQzRCh2YWx1ZTogYW55KTogdmFsdWUgaXMgUG9pbnQzRCB7XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFBvaW50M0QpIHJldHVybiB0cnVlO1xuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBQb2ludCkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgICYmICd4JyBpbiB2YWx1ZSAmJiAneScgaW4gdmFsdWUgJiYgJ3onIGluIHZhbHVlICYmICEoJ2xhdGl0dWRlJyBpbiB2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0dxbGRiRGVjaW1hbCh2YWx1ZTogYW55KTogdmFsdWUgaXMgR3FsZGJEZWNpbWFsIHtcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgUG9pbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBQb2ludDNEKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICd2YWx1ZScgaW4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlLnZhbHVlID09PSAnc3RyaW5nJyAmJiAhKCdsYXRpdHVkZScgaW4gdmFsdWUpICYmICEoJ3gnIGluIHZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzR3FsZGJUaW1lc3RhbXAodmFsdWU6IGFueSk6IHZhbHVlIGlzIEdxbGRiVGltZXN0YW1wIHtcbiAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAmJiAneWVhcicgaW4gdmFsdWUgJiYgJ21vbnRoJyBpbiB2YWx1ZSAmJiAnZGF5JyBpbiB2YWx1ZVxuICAgICYmICdob3VyJyBpbiB2YWx1ZSAmJiAnbWludXRlJyBpbiB2YWx1ZSAmJiAnc2Vjb25kJyBpbiB2YWx1ZVxuICAgICYmICduYW5vc2Vjb25kJyBpbiB2YWx1ZSAmJiAhKCdvZmZzZXRNaW51dGVzJyBpbiB2YWx1ZSlcbiAgICAmJiB0eXBlb2YgdmFsdWUueWVhciA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHZhbHVlLmhvdXIgPT09ICdudW1iZXInXG4gICAgJiYgdmFsdWUuX3R5cGUgPT09ICd0aW1lc3RhbXAnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNHcWxkYkxvY2FsRGF0ZVRpbWUodmFsdWU6IGFueSk6IHZhbHVlIGlzIEdxbGRiTG9jYWxEYXRlVGltZSB7XG4gIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnXG4gICAgJiYgJ3llYXInIGluIHZhbHVlICYmICdtb250aCcgaW4gdmFsdWUgJiYgJ2RheScgaW4gdmFsdWVcbiAgICAmJiAnaG91cicgaW4gdmFsdWUgJiYgJ21pbnV0ZScgaW4gdmFsdWUgJiYgJ3NlY29uZCcgaW4gdmFsdWVcbiAgICAmJiAnbmFub3NlY29uZCcgaW4gdmFsdWUgJiYgISgnb2Zmc2V0TWludXRlcycgaW4gdmFsdWUpXG4gICAgJiYgdHlwZW9mIHZhbHVlLnllYXIgPT09ICdudW1iZXInICYmIHR5cGVvZiB2YWx1ZS5ob3VyID09PSAnbnVtYmVyJ1xuICAgICYmIHZhbHVlLl90eXBlID09PSAnbG9jYWxEYXRldGltZSc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0dxbGRiRGF0ZSh2YWx1ZTogYW55KTogdmFsdWUgaXMgR3FsZGJEYXRlIHtcbiAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgJ3llYXInIGluIHZhbHVlICYmICdtb250aCcgaW4gdmFsdWUgJiYgJ2RheScgaW4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlLnllYXIgPT09ICdudW1iZXInICYmICEoJ2hvdXInIGluIHZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzR3FsZGJab25lZERhdGVUaW1lKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBHcWxkYlpvbmVkRGF0ZVRpbWUge1xuICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgICYmICd5ZWFyJyBpbiB2YWx1ZSAmJiAnbW9udGgnIGluIHZhbHVlICYmICdkYXknIGluIHZhbHVlXG4gICAgJiYgJ2hvdXInIGluIHZhbHVlICYmICdtaW51dGUnIGluIHZhbHVlICYmICdzZWNvbmQnIGluIHZhbHVlXG4gICAgJiYgJ25hbm9zZWNvbmQnIGluIHZhbHVlICYmICdvZmZzZXRNaW51dGVzJyBpbiB2YWx1ZVxuICAgICYmIHR5cGVvZiB2YWx1ZS55ZWFyID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgdmFsdWUuaG91ciA9PT0gJ251bWJlcic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0dxbGRiTG9jYWxUaW1lKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBHcWxkYkxvY2FsVGltZSB7XG4gIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICdob3VyJyBpbiB2YWx1ZSAmJiAnbWludXRlJyBpbiB2YWx1ZSAmJiAnc2Vjb25kJyBpbiB2YWx1ZSAmJiAnbmFub3NlY29uZCcgaW4gdmFsdWUgJiYgISgnb2Zmc2V0TWludXRlcycgaW4gdmFsdWUpICYmICEoJ3llYXInIGluIHZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzR3FsZGJab25lZFRpbWUodmFsdWU6IGFueSk6IHZhbHVlIGlzIEdxbGRiWm9uZWRUaW1lIHtcbiAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgJ2hvdXInIGluIHZhbHVlICYmICdtaW51dGUnIGluIHZhbHVlICYmICdzZWNvbmQnIGluIHZhbHVlICYmICduYW5vc2Vjb25kJyBpbiB2YWx1ZSAmJiAnb2Zmc2V0TWludXRlcycgaW4gdmFsdWUgJiYgISgneWVhcicgaW4gdmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNZZWFyVG9Nb250aCh2YWx1ZTogYW55KTogdmFsdWUgaXMgWWVhclRvTW9udGgge1xuICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAnbW9udGhzJyBpbiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUubW9udGhzID09PSAnbnVtYmVyJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF5VG9TZWNvbmQodmFsdWU6IGFueSk6IHZhbHVlIGlzIERheVRvU2Vjb25kIHtcbiAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgJ3NlY29uZHMnIGluIHZhbHVlICYmICduYW5vc2Vjb25kcycgaW4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlLnNlY29uZHMgPT09ICdudW1iZXInO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWZWN0b3IodmFsdWU6IGFueSk6IHZhbHVlIGlzIFZlY3RvciB7XG4gIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICd2YWx1ZXMnIGluIHZhbHVlICYmIEFycmF5LmlzQXJyYXkodmFsdWUudmFsdWVzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzR3FsZGJTZXQodmFsdWU6IGFueSk6IHZhbHVlIGlzIFNldDxhbnk+IHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgU2V0O1xufVxuIl19
|