velocious 1.0.684 → 1.0.685
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/README.md +1 -1
- package/build/background-jobs/pooled-runner-child.js +29 -1
- package/build/background-jobs/types.js +1 -0
- package/build/background-jobs/worker.js +8 -2
- package/build/configuration-types.js +1 -1
- package/build/src/background-jobs/pooled-runner-child.js +31 -2
- package/build/src/background-jobs/types.d.ts +5 -0
- package/build/src/background-jobs/types.d.ts.map +1 -1
- package/build/src/background-jobs/types.js +2 -1
- package/build/src/background-jobs/worker.d.ts.map +1 -1
- package/build/src/background-jobs/worker.js +9 -3
- package/build/src/configuration-types.d.ts +2 -2
- package/build/src/configuration-types.js +2 -2
- package/package.json +4 -4
- package/src/background-jobs/pooled-runner-child.js +29 -1
- package/src/background-jobs/types.js +1 -0
- package/src/background-jobs/worker.js +8 -2
- package/src/configuration-types.js +1 -1
package/README.md
CHANGED
|
@@ -2642,7 +2642,7 @@ actual state sources must still agree.
|
|
|
2642
2642
|
|
|
2643
2643
|
`maxConcurrentInlineJobs` (default: `4`) caps how many `executionMode: "inline"` jobs a single `background-jobs-worker` process runs in parallel. Concurrency is at the JS event-loop level: every job in flight shares the worker's process and DB connection pool, so the cap should fit the pool, not the CPU count. Forking remains the right tool when you need memory isolation across long-running jobs or want to use more cores; select it with `executionMode: "forked"`.
|
|
2644
2644
|
|
|
2645
|
-
New jobs default to `executionMode: "pooled"`: a worker runs them in warm, reusable Node child runners. `pooledRunnerCount` (default: `4`) bounds this independent per-worker pool, and `pooledRunnerConcurrency` (default: `1`) sets how many jobs each child runs at once on its own event loop, so total pooled capacity is `pooledRunnerCount × pooledRunnerConcurrency` — raise concurrency for I/O-bound jobs to get high throughput from a bounded, isolated set of processes. Workers advertise that exact free-slot count and the main consumes one slot per durable handoff, allowing one readiness notification to fill the pool. If an initialized child exits unexpectedly, the worker immediately advertises the freed capacity while failure reports retry; the replacement is spawned lazily by the next dispatch, and a pre-startup crash does not trigger a respawn loop. `pooledRunnerCount`, `pooledRunnerConcurrency`, and `pooledRunnerMaxJobs` must be finite positive integers; the RSS and lifetime limits must be finite positive numbers. A child is recycled after an acknowledged job when it reaches `pooledRunnerMaxJobs` (default: `100`), `pooledRunnerMaxRssBytes` (default: `536870912`, or 512 MiB), or `pooledRunnerMaxLifetimeMs` (default: `3600000`, or one hour). Drained recycling records `parent_retire_drained` and refuses to signal while any job remains tracked; timeout and bounded worker-stop paths retain `job_timeout` and `worker_stop` across SIGKILL escalation. Before resource teardown the child attempts one bounded lifecycle observation over IPC. `execution_mode` is the single source of truth for a job's runtime — pooled rows persist as `execution_mode = "pooled"` directly. Pooled jobs also persist acceptance evidence (`child_received_at_ms`, `child_started_at_ms`, `child_instance_id`, `child_pid`) so a handed-off job can be told apart from one whose runner never picked it up. See [execution modes and pooled runners](docs/background-jobs.md#execution-modes-and-pooled-runners).
|
|
2645
|
+
New jobs default to `executionMode: "pooled"`: a worker runs them in warm, reusable Node child runners. `pooledRunnerCount` (default: `4`) bounds this independent per-worker pool, and `pooledRunnerConcurrency` (default: `1`) sets how many jobs each child runs at once on its own event loop, so total pooled capacity is `pooledRunnerCount × pooledRunnerConcurrency` — raise concurrency for I/O-bound jobs to get high throughput from a bounded, isolated set of processes. Workers advertise that exact free-slot count and the main consumes one slot per durable handoff, allowing one readiness notification to fill the pool. If an initialized child exits unexpectedly, the worker immediately advertises the freed capacity while failure reports retry; the replacement is spawned lazily by the next dispatch, and a pre-startup crash does not trigger a respawn loop. `pooledRunnerCount`, `pooledRunnerConcurrency`, and `pooledRunnerMaxJobs` must be finite positive integers; the RSS and lifetime limits must be finite positive numbers. A child is recycled after an acknowledged job when it reaches `pooledRunnerMaxJobs` (default: `100`), its peak RSS (the child-reported kernel `VmHWM` high-water mark) crosses `pooledRunnerMaxRssBytes` (default: `536870912`, or 512 MiB), or `pooledRunnerMaxLifetimeMs` (default: `3600000`, or one hour). The RSS trigger uses the child's monotonic peak, not its settled RSS at job-outcome time, so a burst working-set that garbage-collects before the outcome still retires the child. Drained recycling records `parent_retire_drained` and refuses to signal while any job remains tracked; timeout and bounded worker-stop paths retain `job_timeout` and `worker_stop` across SIGKILL escalation. Before resource teardown the child attempts one bounded lifecycle observation over IPC. `execution_mode` is the single source of truth for a job's runtime — pooled rows persist as `execution_mode = "pooled"` directly. Pooled jobs also persist acceptance evidence (`child_received_at_ms`, `child_started_at_ms`, `child_instance_id`, `child_pid`) so a handed-off job can be told apart from one whose runner never picked it up. See [execution modes and pooled runners](docs/background-jobs.md#execution-modes-and-pooled-runners).
|
|
2646
2646
|
|
|
2647
2647
|
Cold pooled jobs share one atomic model-bootstrap phase. If that phase fails, all
|
|
2648
2648
|
waiting jobs receive the failure; a later job in the surviving child cannot run
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// @ts-check
|
|
2
2
|
|
|
3
3
|
import { randomUUID } from "node:crypto"
|
|
4
|
+
import { readFileSync } from "node:fs"
|
|
4
5
|
import v8 from "node:v8"
|
|
5
6
|
import timeout from "awaitery/build/timeout.js"
|
|
6
7
|
import runJobPayload, { BackgroundJobPerformedFailure } from "./job-runner.js"
|
|
@@ -20,6 +21,31 @@ const MEMORY_OBSERVATION_INTERVAL_MS = 10000
|
|
|
20
21
|
/** Bound on in-flight job ids carried in a memory observation. */
|
|
21
22
|
const MEMORY_OBSERVATION_JOB_ID_LIMIT = 32
|
|
22
23
|
|
|
24
|
+
/**
|
|
25
|
+
* Reads this process's peak resident set size (the kernel high-water mark,
|
|
26
|
+
* `VmHWM` in `/proc/self/status`). Unlike a point-in-time RSS sample, this is
|
|
27
|
+
* monotonic for the life of the process: once a burst ratchets the working set
|
|
28
|
+
* up, `VmHWM` remembers it even after garbage collection returns the pages.
|
|
29
|
+
* That makes it the honest signal for recycling a pooled child — a child that
|
|
30
|
+
* spiked to several gigabytes during a build burst keeps its ratcheted floor
|
|
31
|
+
* and must be replaced, even though its settled RSS at job-outcome time looks
|
|
32
|
+
* modest. A read failure (no `/proc`) degrades to the current RSS sample so the
|
|
33
|
+
* observation is never blocked on it.
|
|
34
|
+
* @returns {number} Peak RSS in bytes, or the current RSS sample when unreadable.
|
|
35
|
+
*/
|
|
36
|
+
function readPeakRssBytes() {
|
|
37
|
+
const fallbackBytes = process.memoryUsage().rss
|
|
38
|
+
try {
|
|
39
|
+
const status = readFileSync("/proc/self/status", "utf8")
|
|
40
|
+
const match = /^VmHWM:\s+(\d+)\s+kB$/m.exec(status)
|
|
41
|
+
if (!match) return fallbackBytes
|
|
42
|
+
const kibibytes = Number(match[1])
|
|
43
|
+
return Number.isFinite(kibibytes) && kibibytes > 0 ? kibibytes * 1024 : fallbackBytes
|
|
44
|
+
} catch {
|
|
45
|
+
return fallbackBytes
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
23
49
|
setRunnerProcessTitle()
|
|
24
50
|
|
|
25
51
|
/** @type {Promise<void> | undefined} */
|
|
@@ -162,7 +188,7 @@ function sendChildAcceptance(type, payload, observedAtMs) {
|
|
|
162
188
|
* child runs 25 concurrent jobs) distinguishes a V8 heap-growth leak from
|
|
163
189
|
* external/array-buffer (native resource) growth, and the in-flight job ids
|
|
164
190
|
* tie the observation to the work that was running.
|
|
165
|
-
* @returns {{activeJobIds: string[], activeJobIdsTruncatedCount: number, childInstanceId: string, childPid: number, childUptimeMs: number, heapStatistics: ReturnType<typeof v8.getHeapStatistics>, jobCount: number, memoryUsage: ReturnType<typeof process.memoryUsage>, observedAtMs: number, rssBytes: number, type: "pooled-child-memory", uptimeMs: number}} - Bounded memory observation for this child.
|
|
191
|
+
* @returns {{activeJobIds: string[], activeJobIdsTruncatedCount: number, childInstanceId: string, childPid: number, childUptimeMs: number, heapStatistics: ReturnType<typeof v8.getHeapStatistics>, jobCount: number, memoryUsage: ReturnType<typeof process.memoryUsage>, observedAtMs: number, peakRssBytes: number, rssBytes: number, type: "pooled-child-memory", uptimeMs: number}} - Bounded memory observation for this child.
|
|
166
192
|
*/
|
|
167
193
|
function collectMemoryObservation() {
|
|
168
194
|
const jobIds = [...runningJobIds]
|
|
@@ -179,6 +205,7 @@ function collectMemoryObservation() {
|
|
|
179
205
|
jobCount: jobIds.length,
|
|
180
206
|
memoryUsage,
|
|
181
207
|
observedAtMs: Date.now(),
|
|
208
|
+
peakRssBytes: readPeakRssBytes(),
|
|
182
209
|
rssBytes: memoryUsage.rss,
|
|
183
210
|
type: "pooled-child-memory",
|
|
184
211
|
uptimeMs: Math.floor(process.uptime() * 1000)
|
|
@@ -289,6 +316,7 @@ function sendOutcome({jobId, acknowledged, status, error}) {
|
|
|
289
316
|
jobId,
|
|
290
317
|
acknowledged,
|
|
291
318
|
status,
|
|
319
|
+
peakRssBytes: readPeakRssBytes(),
|
|
292
320
|
rssBytes: process.memoryUsage().rss,
|
|
293
321
|
error: error?.message
|
|
294
322
|
}, () => resolve(undefined))
|
|
@@ -90,6 +90,7 @@
|
|
|
90
90
|
* @property {number} jobCount - In-flight job count.
|
|
91
91
|
* @property {ReturnType<typeof import("node:process").memoryUsage>} memoryUsage - Process memory breakdown at the sample.
|
|
92
92
|
* @property {number} observedAtMs - Epoch ms the child sampled.
|
|
93
|
+
* @property {number} peakRssBytes - Child-reported peak RSS (kernel `VmHWM` high-water mark) in bytes, monotonic for the child's life.
|
|
93
94
|
* @property {number} rssBytes - Resident set size in bytes at the sample.
|
|
94
95
|
* @property {"pooled-child-memory"} type - Discriminator.
|
|
95
96
|
* @property {number} uptimeMs - Process uptime in ms.
|
|
@@ -1404,7 +1404,7 @@ export default class BackgroundJobsWorker {
|
|
|
1404
1404
|
*/
|
|
1405
1405
|
_handlePooledChildMessage({child, message}) {
|
|
1406
1406
|
if (!message || typeof message !== "object") return
|
|
1407
|
-
const record = /** @type {{type?: ReturnType<typeof JSON.parse>, childInstanceId?: ReturnType<typeof JSON.parse>, jobId?: ReturnType<typeof JSON.parse>, acknowledged?: ReturnType<typeof JSON.parse>, rssBytes?: ReturnType<typeof JSON.parse>, error?: ReturnType<typeof JSON.parse>}} */ (message)
|
|
1407
|
+
const record = /** @type {{type?: ReturnType<typeof JSON.parse>, childInstanceId?: ReturnType<typeof JSON.parse>, jobId?: ReturnType<typeof JSON.parse>, acknowledged?: ReturnType<typeof JSON.parse>, rssBytes?: ReturnType<typeof JSON.parse>, peakRssBytes?: ReturnType<typeof JSON.parse>, error?: ReturnType<typeof JSON.parse>}} */ (message)
|
|
1408
1408
|
const state = this.pooledChildStates.get(child)
|
|
1409
1409
|
if (record.type === "ready") {
|
|
1410
1410
|
if (state) {
|
|
@@ -1458,8 +1458,13 @@ export default class BackgroundJobsWorker {
|
|
|
1458
1458
|
}
|
|
1459
1459
|
|
|
1460
1460
|
const rssBytes = typeof record.rssBytes === "number" ? record.rssBytes : Number.POSITIVE_INFINITY
|
|
1461
|
+
// The child's peak RSS (VmHWM) is monotonic and outlives the settled
|
|
1462
|
+
// sample: a ratcheted burst working-set must recycle the child even when
|
|
1463
|
+
// settled RSS at outcome time looks modest. A child without peak support
|
|
1464
|
+
// falls back to the settled sample.
|
|
1465
|
+
const peakRssBytes = typeof record.peakRssBytes === "number" ? record.peakRssBytes : rssBytes
|
|
1461
1466
|
const runnerAgeMs = Date.now() - state.createdAtMs
|
|
1462
|
-
if (!state.retiring && (state.jobsRun >= this.pooledRunnerMaxJobs ||
|
|
1467
|
+
if (!state.retiring && (state.jobsRun >= this.pooledRunnerMaxJobs || peakRssBytes >= this.pooledRunnerMaxRssBytes || runnerAgeMs >= this.pooledRunnerMaxLifetimeMs || this.shouldStop)) {
|
|
1463
1468
|
this._beginRetirePooledChild(child)
|
|
1464
1469
|
}
|
|
1465
1470
|
this._terminateIfDrained(child)
|
|
@@ -1524,6 +1529,7 @@ export default class BackgroundJobsWorker {
|
|
|
1524
1529
|
childPid: message.childPid,
|
|
1525
1530
|
childUptimeS: Math.round(message.childUptimeMs / 1000),
|
|
1526
1531
|
rssMb: Math.round(message.rssBytes / (1024 * 1024)),
|
|
1532
|
+
peakRssMb: Math.round((typeof message.peakRssBytes === "number" ? message.peakRssBytes : message.rssBytes) / (1024 * 1024)),
|
|
1527
1533
|
heapUsedMb: Math.round(heap.used_heap_size / (1024 * 1024)),
|
|
1528
1534
|
heapTotalMb: Math.round(heap.total_heap_size / (1024 * 1024)),
|
|
1529
1535
|
heapLimitMb: Math.round(heap.heap_size_limit / (1024 * 1024)),
|
|
@@ -194,7 +194,7 @@
|
|
|
194
194
|
* @property {number} [pooledRunnerCount] - Number of warm, reusable child runners owned by each worker. Pooled capacity is separate from inline and forked/spawned capacity. Default: `4`.
|
|
195
195
|
* @property {number} [pooledRunnerConcurrency] - Number of jobs each pooled child runs concurrently on its own event loop. Total per-worker pooled capacity is `pooledRunnerCount × pooledRunnerConcurrency`. `1` (default) keeps each child serial; raise it for I/O-bound jobs so a bounded set of isolated processes handles high concurrency (like the inline lane) without one process per concurrent job. Default: `1`.
|
|
196
196
|
* @property {number} [pooledRunnerMaxJobs] - Number of sequential jobs a pooled child runs before it is replaced, bounding process-level resource accumulation. Default: `100`.
|
|
197
|
-
* @property {number} [pooledRunnerMaxRssBytes] - RSS
|
|
197
|
+
* @property {number} [pooledRunnerMaxRssBytes] - Peak RSS (the kernel `VmHWM` high-water mark reported by the child) at which a pooled child is replaced after an acknowledged job. The child's peak, not its settled RSS at job-outcome time, is the trigger, so a burst working-set that reclaims before the outcome still retires the child. Default: `536870912` (512 MiB).
|
|
198
198
|
* @property {number} [pooledRunnerMaxLifetimeMs] - Age after an acknowledged job at which a pooled child is replaced. Default: `3600000` (one hour).
|
|
199
199
|
* @property {Record<string, {maxConcurrent?: number, priority?: number}>} [queues] - Per-queue
|
|
200
200
|
* concurrency caps and dispatch priorities, Sidekiq-style. A job declares its queue (static
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// @ts-check
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
|
+
import { readFileSync } from "node:fs";
|
|
3
4
|
import v8 from "node:v8";
|
|
4
5
|
import timeout from "awaitery/build/timeout.js";
|
|
5
6
|
import runJobPayload, { BackgroundJobPerformedFailure } from "./job-runner.js";
|
|
@@ -17,6 +18,32 @@ const childInstanceId = randomUUID();
|
|
|
17
18
|
const MEMORY_OBSERVATION_INTERVAL_MS = 10000;
|
|
18
19
|
/** Bound on in-flight job ids carried in a memory observation. */
|
|
19
20
|
const MEMORY_OBSERVATION_JOB_ID_LIMIT = 32;
|
|
21
|
+
/**
|
|
22
|
+
* Reads this process's peak resident set size (the kernel high-water mark,
|
|
23
|
+
* `VmHWM` in `/proc/self/status`). Unlike a point-in-time RSS sample, this is
|
|
24
|
+
* monotonic for the life of the process: once a burst ratchets the working set
|
|
25
|
+
* up, `VmHWM` remembers it even after garbage collection returns the pages.
|
|
26
|
+
* That makes it the honest signal for recycling a pooled child — a child that
|
|
27
|
+
* spiked to several gigabytes during a build burst keeps its ratcheted floor
|
|
28
|
+
* and must be replaced, even though its settled RSS at job-outcome time looks
|
|
29
|
+
* modest. A read failure (no `/proc`) degrades to the current RSS sample so the
|
|
30
|
+
* observation is never blocked on it.
|
|
31
|
+
* @returns {number} Peak RSS in bytes, or the current RSS sample when unreadable.
|
|
32
|
+
*/
|
|
33
|
+
function readPeakRssBytes() {
|
|
34
|
+
const fallbackBytes = process.memoryUsage().rss;
|
|
35
|
+
try {
|
|
36
|
+
const status = readFileSync("/proc/self/status", "utf8");
|
|
37
|
+
const match = /^VmHWM:\s+(\d+)\s+kB$/m.exec(status);
|
|
38
|
+
if (!match)
|
|
39
|
+
return fallbackBytes;
|
|
40
|
+
const kibibytes = Number(match[1]);
|
|
41
|
+
return Number.isFinite(kibibytes) && kibibytes > 0 ? kibibytes * 1024 : fallbackBytes;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return fallbackBytes;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
20
47
|
setRunnerProcessTitle();
|
|
21
48
|
/** @type {Promise<void> | undefined} */
|
|
22
49
|
let shutdownPromise;
|
|
@@ -152,7 +179,7 @@ function sendChildAcceptance(type, payload, observedAtMs) {
|
|
|
152
179
|
* child runs 25 concurrent jobs) distinguishes a V8 heap-growth leak from
|
|
153
180
|
* external/array-buffer (native resource) growth, and the in-flight job ids
|
|
154
181
|
* tie the observation to the work that was running.
|
|
155
|
-
* @returns {{activeJobIds: string[], activeJobIdsTruncatedCount: number, childInstanceId: string, childPid: number, childUptimeMs: number, heapStatistics: ReturnType<typeof v8.getHeapStatistics>, jobCount: number, memoryUsage: ReturnType<typeof process.memoryUsage>, observedAtMs: number, rssBytes: number, type: "pooled-child-memory", uptimeMs: number}} - Bounded memory observation for this child.
|
|
182
|
+
* @returns {{activeJobIds: string[], activeJobIdsTruncatedCount: number, childInstanceId: string, childPid: number, childUptimeMs: number, heapStatistics: ReturnType<typeof v8.getHeapStatistics>, jobCount: number, memoryUsage: ReturnType<typeof process.memoryUsage>, observedAtMs: number, peakRssBytes: number, rssBytes: number, type: "pooled-child-memory", uptimeMs: number}} - Bounded memory observation for this child.
|
|
156
183
|
*/
|
|
157
184
|
function collectMemoryObservation() {
|
|
158
185
|
const jobIds = [...runningJobIds];
|
|
@@ -168,6 +195,7 @@ function collectMemoryObservation() {
|
|
|
168
195
|
jobCount: jobIds.length,
|
|
169
196
|
memoryUsage,
|
|
170
197
|
observedAtMs: Date.now(),
|
|
198
|
+
peakRssBytes: readPeakRssBytes(),
|
|
171
199
|
rssBytes: memoryUsage.rss,
|
|
172
200
|
type: "pooled-child-memory",
|
|
173
201
|
uptimeMs: Math.floor(process.uptime() * 1000)
|
|
@@ -270,6 +298,7 @@ function sendOutcome({ jobId, acknowledged, status, error }) {
|
|
|
270
298
|
jobId,
|
|
271
299
|
acknowledged,
|
|
272
300
|
status,
|
|
301
|
+
peakRssBytes: readPeakRssBytes(),
|
|
273
302
|
rssBytes: process.memoryUsage().rss,
|
|
274
303
|
error: error?.message
|
|
275
304
|
}, () => resolve(undefined));
|
|
@@ -351,4 +380,4 @@ process.once("SIGTERM", () => void shutdownRunner({ exitCode: 1, reason: "signal
|
|
|
351
380
|
process.once("SIGINT", () => void shutdownRunner({ exitCode: 1, reason: "signal_sigint", signal: "SIGINT" }));
|
|
352
381
|
if (process.send)
|
|
353
382
|
process.send({ childInstanceId, childPid: process.pid, type: "ready" });
|
|
354
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9vbGVkLXJ1bm5lci1jaGlsZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZ3JvdW5kLWpvYnMvcG9vbGVkLXJ1bm5lci1jaGlsZC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFDeEIsT0FBTyxPQUFPLE1BQU0sMkJBQTJCLENBQUE7QUFDL0MsT0FBTyxhQUFhLEVBQUUsRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzlFLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSwyQkFBMkIsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDZCQUE2QixDQUFBO0FBQ3pJLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSwrQkFBK0IsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLCtCQUErQixDQUFBO0FBQ25JLE9BQU8scUJBQXFCLE1BQU0sMkJBQTJCLENBQUE7QUFDN0QsT0FBTywwQkFBMEIsTUFBTSxvQ0FBb0MsQ0FBQTtBQUMzRSxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQTtBQUVwRyxNQUFNLGtCQUFrQixHQUFHLGtDQUFrQyxDQUFBO0FBQzdELHlGQUF5RjtBQUN6RixNQUFNLG9DQUFvQyxHQUFHLEdBQUcsQ0FBQTtBQUNoRCxnRkFBZ0Y7QUFDaEYsTUFBTSxlQUFlLEdBQUcsVUFBVSxFQUFFLENBQUE7QUFDcEMsMkRBQTJEO0FBQzNELE1BQU0sOEJBQThCLEdBQUcsS0FBSyxDQUFBO0FBQzVDLGtFQUFrRTtBQUNsRSxNQUFNLCtCQUErQixHQUFHLEVBQUUsQ0FBQTtBQUUxQyxxQkFBcUIsRUFBRSxDQUFBO0FBRXZCLHdDQUF3QztBQUN4QyxJQUFJLGVBQWUsQ0FBQTtBQUVuQjs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBUyxjQUFjLENBQUMsRUFBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixHQUFHLElBQUksRUFBRSxNQUFNLEdBQUcsSUFBSSxFQUFDO0lBQ3JGLElBQUksZUFBZTtRQUFFLE9BQU8sZUFBZSxDQUFBO0lBRTNDLGVBQWUsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQzVCLE1BQU0sdUJBQXVCLENBQUMsRUFBQyxNQUFNLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtRQUN0RSxNQUFNLHNCQUFzQixDQUFDLDBCQUEwQixFQUFFLENBQUMsQ0FBQTtRQUMxRCxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ3hCLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFFSixPQUFPLGVBQWUsQ0FBQTtBQUN4QixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtBQUMvQixNQUFNLGNBQWMsR0FBRyxJQUFJLDBCQUEwQixDQUFDO0lBQ3BELGdCQUFnQixFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsTUFBTSwrQkFBK0IsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO0NBQ2xHLENBQUMsQ0FBQTtBQUVGOzs7Ozs7O0dBT0c7QUFDSCxTQUFTLGtCQUFrQjtJQUN6QixNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFBO0lBRWhDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxrQkFBa0IsS0FBSyxLQUFLLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUE7QUFDcEgsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILEtBQUssVUFBVSx1QkFBdUIsQ0FBQyxFQUFDLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLEVBQUM7SUFDNUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUztRQUFFLE9BQU07SUFFL0MsTUFBTSxlQUFlLEdBQUcsaUNBQWlDLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDeEUsbUdBQW1HO0lBQ25HLE1BQU0sT0FBTyxHQUFHO1FBQ2QsZUFBZTtRQUNmLEdBQUcsZUFBZTtRQUNsQixNQUFNO1FBQ04sb0JBQW9CLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNoQyxxQkFBcUI7UUFDckIsTUFBTTtRQUNOLElBQUksRUFBRSxzQkFBc0I7S0FDN0IsQ0FBQTtJQUVELElBQUksQ0FBQztRQUNILE1BQU0sT0FBTyxDQUFDLEVBQUMsT0FBTyxFQUFFLG9DQUFvQyxFQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDeEUsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDcEMsSUFBSSxDQUFDO29CQUNILE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTt3QkFDaEMsSUFBSSxLQUFLLEVBQUUsQ0FBQzs0QkFDVixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7d0JBQ2YsQ0FBQzs2QkFBTSxDQUFDOzRCQUNOLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQTt3QkFDcEIsQ0FBQztvQkFDSCxDQUFDLENBQUMsQ0FBQTtnQkFDSixDQUFDO2dCQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7b0JBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUNmLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLHVFQUF1RSxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQy9GLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFTLG1CQUFtQixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsWUFBWTtJQUN0RCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUk7UUFBRSxPQUFNO0lBRXpCLE1BQU0sT0FBTyxHQUFHO1FBQ2QsZUFBZTtRQUNmLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRztRQUNyQixhQUFhLEVBQUUsT0FBTyxDQUFDLGFBQWE7UUFDcEMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1FBQzVCLEtBQUssRUFBRSxPQUFPLENBQUMsRUFBRTtRQUNqQixJQUFJO1FBQ0osUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1FBQzFCLEdBQUcsQ0FBQyxJQUFJLEtBQUssY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFDLFlBQVksRUFBRSxZQUFZLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxXQUFXLEVBQUUsWUFBWSxFQUFDLENBQUM7S0FDMUYsQ0FBQTtJQUVELElBQUksQ0FBQztRQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDdkIsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLHlFQUF5RTtJQUMzRSxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFTLHdCQUF3QjtJQUMvQixNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUE7SUFDakMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsK0JBQStCLENBQUMsQ0FBQTtJQUNyRSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUE7SUFFekMsT0FBTztRQUNMLFlBQVk7UUFDWiwwQkFBMEIsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUM7UUFDNUUsZUFBZTtRQUNmLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRztRQUNyQixhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ2xELGNBQWMsRUFBRSxFQUFFLENBQUMsaUJBQWlCLEVBQUU7UUFDdEMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1FBQ3ZCLFdBQVc7UUFDWCxZQUFZLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUN4QixRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUc7UUFDekIsSUFBSSxFQUFFLHFCQUFxQjtRQUMzQixRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDO0tBQzlDLENBQUE7QUFDSCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxxQkFBcUI7SUFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksYUFBYSxDQUFDLElBQUksS0FBSyxDQUFDO1FBQUUsT0FBTTtJQUVyRCxJQUFJLENBQUM7UUFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsQ0FBQTtJQUMxQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AseUVBQXlFO0lBQzNFLENBQUM7QUFDSCxDQUFDO0FBRUQseURBQXlEO0FBQ3pELElBQUksc0JBQXNCLENBQUE7QUFFMUI7Ozs7R0FJRztBQUNILFNBQVMsaUNBQWlDLENBQUMsT0FBTztJQUNoRCxPQUFPLE9BQU8sS0FBSyxJQUFJO1dBQ2xCLE9BQU8sT0FBTyxLQUFLLFFBQVE7V0FDM0IsT0FBTyxDQUFDLElBQUksS0FBSyw0QkFBNEIsQ0FBQTtBQUNwRCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyw4QkFBOEI7SUFDckMsSUFBSSxzQkFBc0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJO1FBQUUsT0FBTTtJQUVuRCxzQkFBc0IsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFO1FBQ3hDLHFCQUFxQixFQUFFLENBQUE7SUFDekIsQ0FBQyxFQUFFLDhCQUE4QixDQUFDLENBQUE7SUFDbEMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLENBQUE7QUFDaEMsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsNkJBQTZCO0lBQ3BDLElBQUksQ0FBQyxzQkFBc0I7UUFBRSxPQUFNO0lBRW5DLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO0lBQ3JDLHNCQUFzQixHQUFHLFNBQVMsQ0FBQTtBQUNwQyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsWUFBWSxDQUFDLE9BQU87SUFDM0IsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUE7SUFDekQsTUFBTSxNQUFNLEdBQUcsdUpBQXVKLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUVoTCxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLE9BQU8sTUFBTSxDQUFDLE9BQU8sS0FBSyxRQUFRLElBQUksT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUE7QUFDakksQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLHdCQUF3QixDQUFDLE9BQU87SUFDdkMsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUE7SUFDekQsTUFBTSxNQUFNLEdBQUcsNExBQTRMLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUVyTixPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssa0JBQWtCO1dBQ3BDLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7V0FDMUMsT0FBTyxNQUFNLENBQUMscUJBQXFCLEtBQUssUUFBUTtXQUNoRCxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQztXQUM3QywyQkFBMkIsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDakQsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxXQUFXLENBQUMsRUFBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUM7SUFDdkQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBQ2xCLE9BQU07UUFDUixDQUFDO1FBRUQsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNYLElBQUksRUFBRSxhQUFhO1lBQ25CLEtBQUs7WUFDTCxZQUFZO1lBQ1osTUFBTTtZQUNOLFFBQVEsRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRztZQUNuQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU87U0FDdEIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtJQUM5QixDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsS0FBSyxVQUFVLE1BQU0sQ0FBQyxPQUFPLEVBQUUsdUJBQXVCO0lBQ3BELElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sb0NBQW9DLENBQUMsdUJBQXVCLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDNUYsT0FBTyxNQUFNLGNBQWMsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQ2xFLE9BQU8sTUFBTSxhQUFhLENBQUMsT0FBTyxFQUFFO29CQUNsQyxnQkFBZ0IsRUFBRSxLQUFLO29CQUN2QixrQkFBa0IsRUFBRSxLQUFLO29CQUN6QixjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzdFLFdBQVcsRUFBRSwrQkFBK0I7aUJBQzdDLENBQUMsQ0FBQTtZQUNKLENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUFDLENBQUE7UUFDRixNQUFNLFdBQVcsQ0FBQyxFQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtJQUNwRSxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLElBQUksS0FBSyxZQUFZLDZCQUE2QixFQUFFLENBQUM7WUFDbkQsTUFBTSxXQUFXLENBQUMsRUFBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFBO1FBQzlFLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxXQUFXLEdBQUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtZQUM3RSxPQUFPLENBQUMsS0FBSyxDQUFDLHNFQUFzRSxFQUFFLFdBQVcsQ0FBQyxDQUFBO1lBQ2xHLE1BQU0sV0FBVyxDQUFDLEVBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFDLENBQUMsQ0FBQTtRQUNqRixDQUFDO0lBQ0gsQ0FBQztZQUFTLENBQUM7UUFDVCxhQUFhLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNoQyxrQkFBa0IsRUFBRSxDQUFBO1FBRXBCLElBQUksYUFBYSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM3Qiw2QkFBNkIsRUFBRSxDQUFBO1FBQ2pDLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGFBQWEsQ0FBQyxPQUFPO0lBQzVCLElBQUksd0JBQXdCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN0QyxLQUFLLGNBQWMsQ0FBQztZQUNsQixRQUFRLEVBQUUsT0FBTyxDQUFDLE1BQU0sS0FBSyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVELE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtZQUN0QixxQkFBcUIsRUFBRSxPQUFPLENBQUMscUJBQXFCO1lBQ3BELE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtTQUN2QixDQUFDLENBQUE7UUFDRixPQUFNO0lBQ1IsQ0FBQztJQUVELElBQUksaUNBQWlDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUMvQyxxQkFBcUIsRUFBRSxDQUFBO1FBQ3ZCLE9BQU07SUFDUixDQUFDO0lBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQUUsT0FBTTtJQUUzRSxhQUFhLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDckMsa0JBQWtCLEVBQUUsQ0FBQTtJQUNwQixtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQTtJQUNoRSw4QkFBOEIsRUFBRSxDQUFBO0lBQ2hDLEtBQUssTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLHVCQUF1QixJQUFJLEVBQUMsUUFBUSxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUE7QUFDcEYsQ0FBQztBQUVELE9BQU8sQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtBQUMxRCxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLGNBQWMsQ0FBQyxFQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixFQUFDLENBQUMsQ0FBQyxDQUFBO0FBQzlGLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssY0FBYyxDQUFDLEVBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBQyxDQUFDLENBQUMsQ0FBQTtBQUM5RyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLGNBQWMsQ0FBQyxFQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFDLENBQUMsQ0FBQyxDQUFBO0FBQzNHLElBQUksT0FBTyxDQUFDLElBQUk7SUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUMsZUFBZSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tIFwibm9kZTpjcnlwdG9cIlxuaW1wb3J0IHY4IGZyb20gXCJub2RlOnY4XCJcbmltcG9ydCB0aW1lb3V0IGZyb20gXCJhd2FpdGVyeS9idWlsZC90aW1lb3V0LmpzXCJcbmltcG9ydCBydW5Kb2JQYXlsb2FkLCB7IEJhY2tncm91bmRKb2JQZXJmb3JtZWRGYWlsdXJlIH0gZnJvbSBcIi4vam9iLXJ1bm5lci5qc1wiXG5pbXBvcnQgeyBib3VuZGVkUG9vbGVkUnVubmVySW5mbGlnaHRKb2JJZHMsIGlzUG9vbGVkQ2hpbGRTaHV0ZG93blJlYXNvbiwgaXNQb29sZWRDaGlsZFNodXRkb3duU2lnbmFsIH0gZnJvbSBcIi4vcG9vbGVkLXJ1bm5lci1zaHV0ZG93bi5qc1wiXG5pbXBvcnQgeyBjbG9zZVJ1bm5lckNvbm5lY3Rpb25zLCBjbG9zZVJ1bm5lckZyYW1ld29ya0Nvbm5lY3Rpb25zLCBjdXJyZW50Q29uZmlndXJhdGlvbk9yTnVsbCB9IGZyb20gXCIuL3J1bm5lci1ncmFjZWZ1bC1zaHV0ZG93bi5qc1wiXG5pbXBvcnQgc2V0UnVubmVyUHJvY2Vzc1RpdGxlIGZyb20gXCIuL3J1bm5lci1wcm9jZXNzLXRpdGxlLmpzXCJcbmltcG9ydCBQb29sZWRSdW5uZXJCcm9rZXJJZGVudGl0eSBmcm9tIFwiLi9wb29sZWQtcnVubmVyLWJyb2tlci1pZGVudGl0eS5qc1wiXG5pbXBvcnQgeyBydW5XaXRoU2hhcmVkVHJhbnNhY3Rpb25Ccm9rZXJDb25maWcgfSBmcm9tIFwiLi4vdGVzdGluZy9zaGFyZWQtdHJhbnNhY3Rpb24tcHJveHktZHJpdmVyLmpzXCJcblxuY29uc3QgQkFTRV9QUk9DRVNTX1RJVExFID0gXCJ2ZWxvY2lvdXMgYmFja2dyb3VuZC1qb2JzLXJ1bm5lclwiXG4vKiogQSBzaHV0ZG93biBvYnNlcnZhdGlvbiBtYXkgZGVsYXkgcmVzb3VyY2UgdGVhcmRvd24gb25seSBmb3IgdGhpcyBib3VuZGVkIElQQyBzZW5kLiAqL1xuY29uc3QgU0hVVERPV05fT0JTRVJWQVRJT05fU0VORF9USU1FT1VUX01TID0gMTAwXG4vKiogU3RhYmxlIGlkZW50aXR5IG9mIHRoaXMgcG9vbGVkIGNoaWxkIHByb2Nlc3MgZm9yIHRoZSBsaWZlIG9mIHRoZSBwcm9jZXNzLiAqL1xuY29uc3QgY2hpbGRJbnN0YW5jZUlkID0gcmFuZG9tVVVJRCgpXG4vKiogU2FtcGxpbmcgY2FkZW5jZSBmb3IgdGhlIG1lbW9yeSBvYnNlcnZhdGlvbiBzYW1wbGVyLiAqL1xuY29uc3QgTUVNT1JZX09CU0VSVkFUSU9OX0lOVEVSVkFMX01TID0gMTAwMDBcbi8qKiBCb3VuZCBvbiBpbi1mbGlnaHQgam9iIGlkcyBjYXJyaWVkIGluIGEgbWVtb3J5IG9ic2VydmF0aW9uLiAqL1xuY29uc3QgTUVNT1JZX09CU0VSVkFUSU9OX0pPQl9JRF9MSU1JVCA9IDMyXG5cbnNldFJ1bm5lclByb2Nlc3NUaXRsZSgpXG5cbi8qKiBAdHlwZSB7UHJvbWlzZTx2b2lkPiB8IHVuZGVmaW5lZH0gKi9cbmxldCBzaHV0ZG93blByb21pc2VcblxuLyoqXG4gKiBDbG9zZXMgdGhlIHJ1bm5lcidzIGNvbm5lY3Rpb25zIOKAlCByZWxlYXNpbmcgYW55IGFkdmlzb3J5IGxvY2sgYSBraWxsZWQtbWlkLXBhc3NcbiAqIGpvYiBzdGlsbCBob2xkcyDigJQgYmVmb3JlIGV4aXRpbmcsIGluc3RlYWQgb2YgbGVhdmluZyBhIGhhbGYtb3BlbiBzZXNzaW9uIHRoYXRcbiAqIGtlZXBzIHRoZSBsb2NrIHVudGlsIHRoZSBEQiBzZXJ2ZXIncyBgd2FpdF90aW1lb3V0YC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gU2h1dGRvd24gb2JzZXJ2YXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gYXJncy5leGl0Q29kZSAtIFByb2Nlc3MgZXhpdCBjb2RlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlBvb2xlZENoaWxkU2h1dGRvd25SZWFzb259IGFyZ3MucmVhc29uIC0gRXhhY3Qgc2h1dGRvd24gcmVhc29uIG9ic2VydmVkIGJ5IHRoZSBjaGlsZC5cbiAqIEBwYXJhbSB7bnVtYmVyIHwgbnVsbH0gW2FyZ3Muc2h1dGRvd25SZXF1ZXN0ZWRBdE1zXSAtIFBhcmVudCByZXF1ZXN0IHRpbWVzdGFtcCB3aGVuIHN1cHBsaWVkIG92ZXIgSVBDLlxuICogQHBhcmFtIHtpbXBvcnQoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIikuQ2hpbGRQcm9jZXNzW1wic2lnbmFsQ29kZVwiXX0gW2FyZ3Muc2lnbmFsXSAtIFJlcXVlc3RlZCBvciBvYnNlcnZlZCBzaWduYWwuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAqL1xuZnVuY3Rpb24gc2h1dGRvd25SdW5uZXIoe2V4aXRDb2RlLCByZWFzb24sIHNodXRkb3duUmVxdWVzdGVkQXRNcyA9IG51bGwsIHNpZ25hbCA9IG51bGx9KSB7XG4gIGlmIChzaHV0ZG93blByb21pc2UpIHJldHVybiBzaHV0ZG93blByb21pc2VcblxuICBzaHV0ZG93blByb21pc2UgPSAoYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHNlbmRTaHV0ZG93bk9ic2VydmF0aW9uKHtyZWFzb24sIHNodXRkb3duUmVxdWVzdGVkQXRNcywgc2lnbmFsfSlcbiAgICBhd2FpdCBjbG9zZVJ1bm5lckNvbm5lY3Rpb25zKGN1cnJlbnRDb25maWd1cmF0aW9uT3JOdWxsKCkpXG4gICAgcHJvY2Vzcy5leGl0KGV4aXRDb2RlKVxuICB9KSgpXG5cbiAgcmV0dXJuIHNodXRkb3duUHJvbWlzZVxufVxuXG4vKipcbiAqIElkcyBvZiBqb2JzIGN1cnJlbnRseSBydW5uaW5nIGluIHRoaXMgY2hpbGQuIEEgcG9vbGVkIGNoaWxkIHJ1bnMgdXAgdG9cbiAqIGBwb29sZWRSdW5uZXJDb25jdXJyZW5jeWAgam9icyBhdCBvbmNlICh0aGUgd29ya2VyIG9ubHkgZGlzcGF0Y2hlcyB3aXRoaW4gdGhhdFxuICogYm91bmQpOyB0aGUgc2V0IGRlZHVwZXMgYSByZWRlbGl2ZXJlZCBqb2IgaWQgYW5kIGxldHMgZWFjaCBqb2Igc2V0dGxlXG4gKiBpbmRlcGVuZGVudGx5LlxuICogQHR5cGUge1NldDxzdHJpbmc+fVxuICovXG5jb25zdCBydW5uaW5nSm9iSWRzID0gbmV3IFNldCgpXG5jb25zdCBicm9rZXJJZGVudGl0eSA9IG5ldyBQb29sZWRSdW5uZXJCcm9rZXJJZGVudGl0eSh7XG4gIGNsb3NlQ29ubmVjdGlvbnM6IGFzeW5jICgpID0+IGF3YWl0IGNsb3NlUnVubmVyRnJhbWV3b3JrQ29ubmVjdGlvbnMoY3VycmVudENvbmZpZ3VyYXRpb25Pck51bGwoKSlcbn0pXG5cbi8qKlxuICogU2V0cyBhbiBhZ2dyZWdhdGUgcHJvY2VzcyB0aXRsZSBmcm9tIHRoZSBjdXJyZW50IGluLWZsaWdodCBjb3VudC4gQSBjaGlsZCBydW5zXG4gKiBqb2JzIGNvbmN1cnJlbnRseSwgc28gYSBwZXItam9iIHRpdGxlICh3aGljaCBgcnVuSm9iUGF5bG9hZGAgd291bGQgc25hcHNob3QgYW5kXG4gKiByZXN0b3JlIGFyb3VuZCBhIHNpbmdsZSBqb2IpIGNhbm5vdCByZXByZXNlbnQgdGhlIHByb2Nlc3Mg4oCUIGludGVybGVhdmVkXG4gKiBjb21wbGV0aW9ucyB3b3VsZCBsZWF2ZSBhIHN0YWxlIGxhYmVsLiBSZWNvbXB1dGluZyBmcm9tIGBydW5uaW5nSm9iSWRzLnNpemVgIGlzXG4gKiBjb25jdXJyZW5jeS1zYWZlIGFuZCBob25lc3Q6IGBwc2AvYHRvcGAgc2hvdyBob3cgbWFueSBqb2JzIHRoZSBjaGlsZCBpcyBydW5uaW5nLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVByb2Nlc3NUaXRsZSgpIHtcbiAgY29uc3QgY291bnQgPSBydW5uaW5nSm9iSWRzLnNpemVcblxuICBwcm9jZXNzLnRpdGxlID0gY291bnQgPiAwID8gYCR7QkFTRV9QUk9DRVNTX1RJVExFfTogJHtjb3VudH0gJHtjb3VudCA9PT0gMSA/IFwiam9iXCIgOiBcImpvYnNcIn1gIDogQkFTRV9QUk9DRVNTX1RJVExFXG59XG5cbi8qKlxuICogU2VuZHMgb25lIGJvdW5kZWQgbGlmZWN5Y2xlIG9ic2VydmF0aW9uIGJlZm9yZSBhcHBsaWNhdGlvbi9mcmFtZXdvcmsgdGVhcmRvd24uXG4gKiBBIGNsb3NlZCBJUEMgY2hhbm5lbCBpcyBleHBlY3RlZCBmb3IgYGlwY19kaXNjb25uZWN0YDsgb3RoZXIgc2VuZCBmYWlsdXJlcyBhcmVcbiAqIHN1cmZhY2VkIG9uIHN0ZGVyciBidXQgbmV2ZXIgaG9sZCBjb25uZWN0aW9uIGNsZWFudXAgcGFzdCB0aGUgZml4ZWQgYm91bmQuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIFNodXRkb3duIG9ic2VydmF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlBvb2xlZENoaWxkU2h1dGRvd25SZWFzb259IGFyZ3MucmVhc29uIC0gU2h1dGRvd24gcmVhc29uLlxuICogQHBhcmFtIHtudW1iZXIgfCBudWxsfSBhcmdzLnNodXRkb3duUmVxdWVzdGVkQXRNcyAtIFBhcmVudCByZXF1ZXN0IHRpbWVzdGFtcC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwibm9kZTpjaGlsZF9wcm9jZXNzXCIpLkNoaWxkUHJvY2Vzc1tcInNpZ25hbENvZGVcIl19IGFyZ3Muc2lnbmFsIC0gUmVxdWVzdGVkIG9yIG9ic2VydmVkIHNpZ25hbC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIGFmdGVyIElQQyBhY2NlcHRzIHRoZSBvYnNlcnZhdGlvbiBvciB0aGUgYm91bmQgZXhwaXJlcy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2VuZFNodXRkb3duT2JzZXJ2YXRpb24oe3JlYXNvbiwgc2h1dGRvd25SZXF1ZXN0ZWRBdE1zLCBzaWduYWx9KSB7XG4gIGlmICghcHJvY2Vzcy5zZW5kIHx8ICFwcm9jZXNzLmNvbm5lY3RlZCkgcmV0dXJuXG5cbiAgY29uc3QgYm91bmRlZEluZmxpZ2h0ID0gYm91bmRlZFBvb2xlZFJ1bm5lckluZmxpZ2h0Sm9iSWRzKHJ1bm5pbmdKb2JJZHMpXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5Qb29sZWRDaGlsZFNodXRkb3duT2JzZXJ2YXRpb24gJiB7dHlwZTogXCJzaHV0ZG93bi1vYnNlcnZhdGlvblwifX0gKi9cbiAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICBjaGlsZEluc3RhbmNlSWQsXG4gICAgLi4uYm91bmRlZEluZmxpZ2h0LFxuICAgIHJlYXNvbixcbiAgICBzaHV0ZG93bk9ic2VydmVkQXRNczogRGF0ZS5ub3coKSxcbiAgICBzaHV0ZG93blJlcXVlc3RlZEF0TXMsXG4gICAgc2lnbmFsLFxuICAgIHR5cGU6IFwic2h1dGRvd24tb2JzZXJ2YXRpb25cIlxuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCB0aW1lb3V0KHt0aW1lb3V0OiBTSFVURE9XTl9PQlNFUlZBVElPTl9TRU5EX1RJTUVPVVRfTVN9LCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcHJvY2Vzcy5zZW5kPy4obWVzc2FnZSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiUG9vbGVkIGJhY2tncm91bmQgam9iIHJ1bm5lciBjb3VsZCBub3Qgc2VuZCBpdHMgc2h1dGRvd24gb2JzZXJ2YXRpb246XCIsIGVycm9yKVxuICB9XG59XG5cbi8qKlxuICogUmVwb3J0cyBvbmUgYWNjZXB0YW5jZSBvYnNlcnZhdGlvbiAoam9iIHJlY2VpdmVkIC8gcGVyZm9ybSBzdGFydGVkKSB0byB0aGVcbiAqIHdvcmtlciBvdmVyIElQQy4gVGhlIG1lc3NhZ2UgY2FycmllcyB0aGUgam9iJ3MgZXhhY3QgaGFuZG9mZiBsZWFzZSBzbyB0aGVcbiAqIHdvcmtlciBjYW4gcGVyc2lzdCBpdCBmZW5jZWQgd2l0aG91dCBhbnkgb3RoZXIgbG9va3VwLiBTZW5kIGZhaWx1cmVzIGFyZVxuICogc3dhbGxvd2VkOiBhIGRlYWQgSVBDIGNoYW5uZWwgaXMgdGVybWluYWwgZm9yIHRoaXMgY2hpbGQgKHRoZSBkaXNjb25uZWN0XG4gKiBoYW5kbGVyIG93bnMgc2h1dGRvd24pLCBhbmQgbG9zaW5nIGFjY2VwdGFuY2UgZXZpZGVuY2UgbXVzdCBuZXZlciBmYWlsIHRoZVxuICogam9iIGl0c2VsZi5cbiAqIEBwYXJhbSB7XCJqb2ItcmVjZWl2ZWRcIiB8IFwiam9iLXN0YXJ0ZWRcIn0gdHlwZSAtIE9ic2VydmF0aW9uIGtpbmQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYlBheWxvYWQgJiB7aWQ6IHN0cmluZ319IHBheWxvYWQgLSBKb2IgcGF5bG9hZCBjYXJyeWluZyB0aGUgaGFuZG9mZiBsZWFzZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBvYnNlcnZlZEF0TXMgLSBFcG9jaCBtcyBvZiB0aGUgb2JzZXJ2YXRpb24uXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gc2VuZENoaWxkQWNjZXB0YW5jZSh0eXBlLCBwYXlsb2FkLCBvYnNlcnZlZEF0TXMpIHtcbiAgaWYgKCFwcm9jZXNzLnNlbmQpIHJldHVyblxuXG4gIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgY2hpbGRJbnN0YW5jZUlkLFxuICAgIGNoaWxkUGlkOiBwcm9jZXNzLnBpZCxcbiAgICBoYW5kZWRPZmZBdE1zOiBwYXlsb2FkLmhhbmRlZE9mZkF0TXMsXG4gICAgaGFuZG9mZklkOiBwYXlsb2FkLmhhbmRvZmZJZCxcbiAgICBqb2JJZDogcGF5bG9hZC5pZCxcbiAgICB0eXBlLFxuICAgIHdvcmtlcklkOiBwYXlsb2FkLndvcmtlcklkLFxuICAgIC4uLih0eXBlID09PSBcImpvYi1yZWNlaXZlZFwiID8ge3JlY2VpdmVkQXRNczogb2JzZXJ2ZWRBdE1zfSA6IHtzdGFydGVkQXRNczogb2JzZXJ2ZWRBdE1zfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgcHJvY2Vzcy5zZW5kKG1lc3NhZ2UpXG4gIH0gY2F0Y2gge1xuICAgIC8vIFRoZSBJUEMgY2hhbm5lbCBpcyBhbHJlYWR5IGdvbmU7IHRoZSBkaXNjb25uZWN0IGhhbmRsZXIgb3ducyBzaHV0ZG93bi5cbiAgfVxufVxuXG4vKipcbiAqIENvbGxlY3RzIGEgYm91bmRlZCBkaWFnbm9zdGljIHNuYXBzaG90IG9mIHRoaXMgY2hpbGQncyBtZW1vcnkgc3RhdGUuIFRoZVxuICogcG9vbGVkIGNoaWxkJ3Mgc3RkaW8gaXMgaWdub3JlZCBieSB0aGUgd29ya2VyIGZvcmssIHNvIElQQyBpcyB0aGUgb25seSBjaGFubmVsXG4gKiB0byB0aGUgd29ya2VyJ3MgbG9nIHN1cmZhY2Ug4oCUIHRoaXMgc25hcHNob3QgKHNlbnQgcGVyaW9kaWNhbGx5IGFuZCBvbiBkZW1hbmQpXG4gKiBpcyBob3cgYSBtZW1vcnkgcHJvYmxlbSBuYW1lcyBpdHNlbGYgaW4gcHJvZHVjdGlvbi4gVGhlIFY4IGhlYXAtc3RhdFxuICogYnJlYWtkb3duIChub3QgYSBmdWxsIGhlYXAgc25hcHNob3QsIHdoaWNoIHdvdWxkIGJlIGZhciB0b28gZXhwZW5zaXZlIHdoaWxlIGFcbiAqIGNoaWxkIHJ1bnMgMjUgY29uY3VycmVudCBqb2JzKSBkaXN0aW5ndWlzaGVzIGEgVjggaGVhcC1ncm93dGggbGVhayBmcm9tXG4gKiBleHRlcm5hbC9hcnJheS1idWZmZXIgKG5hdGl2ZSByZXNvdXJjZSkgZ3Jvd3RoLCBhbmQgdGhlIGluLWZsaWdodCBqb2IgaWRzXG4gKiB0aWUgdGhlIG9ic2VydmF0aW9uIHRvIHRoZSB3b3JrIHRoYXQgd2FzIHJ1bm5pbmcuXG4gKiBAcmV0dXJucyB7e2FjdGl2ZUpvYklkczogc3RyaW5nW10sIGFjdGl2ZUpvYklkc1RydW5jYXRlZENvdW50OiBudW1iZXIsIGNoaWxkSW5zdGFuY2VJZDogc3RyaW5nLCBjaGlsZFBpZDogbnVtYmVyLCBjaGlsZFVwdGltZU1zOiBudW1iZXIsIGhlYXBTdGF0aXN0aWNzOiBSZXR1cm5UeXBlPHR5cGVvZiB2OC5nZXRIZWFwU3RhdGlzdGljcz4sIGpvYkNvdW50OiBudW1iZXIsIG1lbW9yeVVzYWdlOiBSZXR1cm5UeXBlPHR5cGVvZiBwcm9jZXNzLm1lbW9yeVVzYWdlPiwgb2JzZXJ2ZWRBdE1zOiBudW1iZXIsIHJzc0J5dGVzOiBudW1iZXIsIHR5cGU6IFwicG9vbGVkLWNoaWxkLW1lbW9yeVwiLCB1cHRpbWVNczogbnVtYmVyfX0gLSBCb3VuZGVkIG1lbW9yeSBvYnNlcnZhdGlvbiBmb3IgdGhpcyBjaGlsZC5cbiAqL1xuZnVuY3Rpb24gY29sbGVjdE1lbW9yeU9ic2VydmF0aW9uKCkge1xuICBjb25zdCBqb2JJZHMgPSBbLi4ucnVubmluZ0pvYklkc11cbiAgY29uc3QgYWN0aXZlSm9iSWRzID0gam9iSWRzLnNsaWNlKDAsIE1FTU9SWV9PQlNFUlZBVElPTl9KT0JfSURfTElNSVQpXG4gIGNvbnN0IG1lbW9yeVVzYWdlID0gcHJvY2Vzcy5tZW1vcnlVc2FnZSgpXG5cbiAgcmV0dXJuIHtcbiAgICBhY3RpdmVKb2JJZHMsXG4gICAgYWN0aXZlSm9iSWRzVHJ1bmNhdGVkQ291bnQ6IE1hdGgubWF4KDAsIGpvYklkcy5sZW5ndGggLSBhY3RpdmVKb2JJZHMubGVuZ3RoKSxcbiAgICBjaGlsZEluc3RhbmNlSWQsXG4gICAgY2hpbGRQaWQ6IHByb2Nlc3MucGlkLFxuICAgIGNoaWxkVXB0aW1lTXM6IE1hdGguZmxvb3IocHJvY2Vzcy51cHRpbWUoKSAqIDEwMDApLFxuICAgIGhlYXBTdGF0aXN0aWNzOiB2OC5nZXRIZWFwU3RhdGlzdGljcygpLFxuICAgIGpvYkNvdW50OiBqb2JJZHMubGVuZ3RoLFxuICAgIG1lbW9yeVVzYWdlLFxuICAgIG9ic2VydmVkQXRNczogRGF0ZS5ub3coKSxcbiAgICByc3NCeXRlczogbWVtb3J5VXNhZ2UucnNzLFxuICAgIHR5cGU6IFwicG9vbGVkLWNoaWxkLW1lbW9yeVwiLFxuICAgIHVwdGltZU1zOiBNYXRoLmZsb29yKHByb2Nlc3MudXB0aW1lKCkgKiAxMDAwKVxuICB9XG59XG5cbi8qKlxuICogU2VuZHMgYSBtZW1vcnkgb2JzZXJ2YXRpb24gdG8gdGhlIHdvcmtlci4gU2FtcGxpbmcgaXMgY2hlYXAgKHByb2Nlc3MgKyBWOFxuICogaGVhcCBzdGF0cykgYW5kIG9ubHkgcnVucyB3aGlsZSBqb2JzIGFyZSBpbiBmbGlnaHQ7IGEgY2xvc2VkIElQQyBjaGFubmVsIGlzXG4gKiB0ZXJtaW5hbCBmb3IgdGhpcyBjaGlsZCAodGhlIGRpc2Nvbm5lY3QgaGFuZGxlciBvd25zIHNodXRkb3duKSwgc28gYSBmYWlsZWRcbiAqIHNlbmQgaXMgc3dhbGxvd2VkLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHNlbmRNZW1vcnlPYnNlcnZhdGlvbigpIHtcbiAgaWYgKCFwcm9jZXNzLnNlbmQgfHwgcnVubmluZ0pvYklkcy5zaXplID09PSAwKSByZXR1cm5cblxuICB0cnkge1xuICAgIHByb2Nlc3Muc2VuZChjb2xsZWN0TWVtb3J5T2JzZXJ2YXRpb24oKSlcbiAgfSBjYXRjaCB7XG4gICAgLy8gVGhlIElQQyBjaGFubmVsIGlzIGFscmVhZHkgZ29uZTsgdGhlIGRpc2Nvbm5lY3QgaGFuZGxlciBvd25zIHNodXRkb3duLlxuICB9XG59XG5cbi8qKiBAdHlwZSB7UmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgdW5kZWZpbmVkfSAqL1xubGV0IG1lbW9yeU9ic2VydmF0aW9uVGltZXJcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhbiBJUEMgdmFsdWUgcmVxdWVzdHMgdGhpcyBjaGlsZCB0byBzZW5kIGEgbWVtb3J5IG9ic2VydmF0aW9uLlxuICogQHBhcmFtIHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gbWVzc2FnZSAtIElQQyBtZXNzYWdlLlxuICogQHJldHVybnMge21lc3NhZ2UgaXMge3R5cGU6IFwibWVtb3J5LW9ic2VydmF0aW9uLXJlcXVlc3RcIn19IC0gV2hldGhlciB0aGUgbWVzc2FnZSByZXF1ZXN0cyBvbmUuXG4gKi9cbmZ1bmN0aW9uIGlzTWVtb3J5T2JzZXJ2YXRpb25SZXF1ZXN0TWVzc2FnZShtZXNzYWdlKSB7XG4gIHJldHVybiBtZXNzYWdlICE9PSBudWxsXG4gICAgJiYgdHlwZW9mIG1lc3NhZ2UgPT09IFwib2JqZWN0XCJcbiAgICAmJiBtZXNzYWdlLnR5cGUgPT09IFwibWVtb3J5LW9ic2VydmF0aW9uLXJlcXVlc3RcIlxufVxuXG4vKipcbiAqIFN0YXJ0cyB0aGUgcGVyaW9kaWMgbWVtb3J5IG9ic2VydmF0aW9uIHNhbXBsZXIgaWYgaXQgaXMgbm90IGFscmVhZHkgcnVubmluZy5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBzdGFydE1lbW9yeU9ic2VydmF0aW9uU2FtcGxpbmcoKSB7XG4gIGlmIChtZW1vcnlPYnNlcnZhdGlvblRpbWVyIHx8ICFwcm9jZXNzLnNlbmQpIHJldHVyblxuXG4gIG1lbW9yeU9ic2VydmF0aW9uVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgc2VuZE1lbW9yeU9ic2VydmF0aW9uKClcbiAgfSwgTUVNT1JZX09CU0VSVkFUSU9OX0lOVEVSVkFMX01TKVxuICBtZW1vcnlPYnNlcnZhdGlvblRpbWVyLnVucmVmKClcbn1cblxuLyoqXG4gKiBTdG9wcyB0aGUgcGVyaW9kaWMgbWVtb3J5IG9ic2VydmF0aW9uIHNhbXBsZXIuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gc3RvcE1lbW9yeU9ic2VydmF0aW9uU2FtcGxpbmcoKSB7XG4gIGlmICghbWVtb3J5T2JzZXJ2YXRpb25UaW1lcikgcmV0dXJuXG5cbiAgY2xlYXJJbnRlcnZhbChtZW1vcnlPYnNlcnZhdGlvblRpbWVyKVxuICBtZW1vcnlPYnNlcnZhdGlvblRpbWVyID0gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYW4gSVBDIHZhbHVlIGlzIGEgcnVubmFibGUgcG9vbGVkIGpvYiBtZXNzYWdlLlxuICogQHBhcmFtIHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gbWVzc2FnZSAtIElQQyBtZXNzYWdlLlxuICogQHJldHVybnMge21lc3NhZ2UgaXMge3R5cGU6IFwiam9iXCIsIHBheWxvYWQ6IGltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYlBheWxvYWQgJiB7aWQ6IHN0cmluZ30sIHNoYXJlZFRyYW5zYWN0aW9uQnJva2VyPzogaW1wb3J0KFwiLi4vdGVzdGluZy9zaGFyZWQtdHJhbnNhY3Rpb24tcHJveHktZHJpdmVyLmpzXCIpLlNoYXJlZFRyYW5zYWN0aW9uQnJva2VySm9iQ29uZmlnfX0gLSBXaGV0aGVyIHRoaXMgaXMgYSB2YWxpZCBqb2IgbWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gaXNKb2JNZXNzYWdlKG1lc3NhZ2UpIHtcbiAgaWYgKCFtZXNzYWdlIHx8IHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiKSByZXR1cm4gZmFsc2VcbiAgY29uc3QgcmVjb3JkID0gLyoqIEB0eXBlIHt7dHlwZT86IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+LCBwYXlsb2FkPzogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4sIHNoYXJlZFRyYW5zYWN0aW9uQnJva2VyPzogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59fSAqLyAobWVzc2FnZSlcblxuICByZXR1cm4gcmVjb3JkLnR5cGUgPT09IFwiam9iXCIgJiYgISFyZWNvcmQucGF5bG9hZCAmJiB0eXBlb2YgcmVjb3JkLnBheWxvYWQgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJlY29yZC5wYXlsb2FkLmlkID09PSBcInN0cmluZ1wiXG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYW4gSVBDIHZhbHVlIHJlcXVlc3RzIGEgdHlwZWQgcG9vbGVkLWNoaWxkIHNodXRkb3duLlxuICogQHBhcmFtIHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gbWVzc2FnZSAtIElQQyBtZXNzYWdlLlxuICogQHJldHVybnMge21lc3NhZ2UgaXMge3R5cGU6IFwic2h1dGRvd24tcmVxdWVzdFwiLCByZWFzb246IGltcG9ydChcIi4vdHlwZXMuanNcIikuUG9vbGVkQ2hpbGRTaHV0ZG93blJlYXNvbiwgc2h1dGRvd25SZXF1ZXN0ZWRBdE1zOiBudW1iZXIsIHNpZ25hbDogaW1wb3J0KFwibm9kZTpjaGlsZF9wcm9jZXNzXCIpLkNoaWxkUHJvY2Vzc1tcInNpZ25hbENvZGVcIl19fSAtIFdoZXRoZXIgdGhpcyBpcyBhIHZhbGlkIHBhcmVudCBzaHV0ZG93biByZXF1ZXN0LlxuICovXG5mdW5jdGlvbiBpc1NodXRkb3duUmVxdWVzdE1lc3NhZ2UobWVzc2FnZSkge1xuICBpZiAoIW1lc3NhZ2UgfHwgdHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZVxuICBjb25zdCByZWNvcmQgPSAvKiogQHR5cGUge3t0eXBlPzogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4sIHJlYXNvbj86IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+LCBzaHV0ZG93blJlcXVlc3RlZEF0TXM/OiBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPiwgc2lnbmFsPzogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59fSAqLyAobWVzc2FnZSlcblxuICByZXR1cm4gcmVjb3JkLnR5cGUgPT09IFwic2h1dGRvd24tcmVxdWVzdFwiXG4gICAgJiYgaXNQb29sZWRDaGlsZFNodXRkb3duUmVhc29uKHJlY29yZC5yZWFzb24pXG4gICAgJiYgdHlwZW9mIHJlY29yZC5zaHV0ZG93blJlcXVlc3RlZEF0TXMgPT09IFwibnVtYmVyXCJcbiAgICAmJiBOdW1iZXIuaXNGaW5pdGUocmVjb3JkLnNodXRkb3duUmVxdWVzdGVkQXRNcylcbiAgICAmJiBpc1Bvb2xlZENoaWxkU2h1dGRvd25TaWduYWwocmVjb3JkLnNpZ25hbClcbn1cblxuLyoqXG4gKiBTZW5kcyB0aGUgdGVybWluYWwgb3V0Y29tZSBhZnRlciB0aGUgbWFpbi9EQiByZXBvcnQgaGFzIGJlZW4gYWNrbm93bGVkZ2VkIG9yIHJlamVjdGVkLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPdXRjb21lLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3Muam9iSWQgLSBKb2IgaWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGFyZ3MuYWNrbm93bGVkZ2VkIC0gV2hldGhlciB0aGUgdGVybWluYWwgcmVwb3J0IHdhcyBhY2tub3dsZWRnZWQuXG4gKiBAcGFyYW0ge1wiY29tcGxldGVkXCIgfCBcImZhaWxlZFwiIHwgXCJyZXNjaGVkdWxlZFwifSBbYXJncy5zdGF0dXNdIC0gQWNrbm93bGVkZ2VkIG91dGNvbWUuXG4gKiBAcGFyYW0ge0Vycm9yfSBbYXJncy5lcnJvcl0gLSBSZXBvcnRpbmcgZXJyb3Igd2hlbiBhY2tub3dsZWRnZW1lbnQgd2FzIG5vdCBvYnRhaW5lZC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIGFmdGVyIElQQyBhY2NlcHRzIHRoZSBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBzZW5kT3V0Y29tZSh7am9iSWQsIGFja25vd2xlZGdlZCwgc3RhdHVzLCBlcnJvcn0pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgaWYgKCFwcm9jZXNzLnNlbmQpIHtcbiAgICAgIHJlc29sdmUodW5kZWZpbmVkKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgcHJvY2Vzcy5zZW5kKHtcbiAgICAgIHR5cGU6IFwiam9iLW91dGNvbWVcIixcbiAgICAgIGpvYklkLFxuICAgICAgYWNrbm93bGVkZ2VkLFxuICAgICAgc3RhdHVzLFxuICAgICAgcnNzQnl0ZXM6IHByb2Nlc3MubWVtb3J5VXNhZ2UoKS5yc3MsXG4gICAgICBlcnJvcjogZXJyb3I/Lm1lc3NhZ2VcbiAgICB9LCAoKSA9PiByZXNvbHZlKHVuZGVmaW5lZCkpXG4gIH0pXG59XG5cbi8qKlxuICogUnVucyBvbmUgam9iIGNvbmN1cnJlbnRseSB3aXRoIGFueSBzaWJsaW5ncyBhbmQgcmVwb3J0cyBpdHMgb3duIHRlcm1pbmFsXG4gKiBvdXRjb21lLiBBIHNpbmdsZSBqb2IncyB1bmV4cGVjdGVkIGZhaWx1cmUgcmVwb3J0cyB0aGF0IGpvYiBmb3IgcmVjbGFtYXRpb25cbiAqIChgYWNrbm93bGVkZ2VkOiBmYWxzZWApIGJ1dCBkb2VzIE5PVCB0YWtlIGRvd24gdGhlIGNoaWxkIOKAlCBpdHMgY29uY3VycmVudFxuICogc2libGluZ3Mga2VlcCBydW5uaW5nLiBPbmx5IGEgcHJvY2Vzcy1sZXZlbCBmYXVsdCAod2hpY2ggZXNjYXBlcyBldmVyeVxuICogcGVyLWpvYiB0cnkvY2F0Y2gpIGVuZHMgdGhlIGNoaWxkLCB3aGljaCB0aGUgd29ya2VyIHNlZXMgYXMgYW4gZXhpdCBhbmRcbiAqIHJlY2xhaW1zIGZvciB0aGUgd2hvbGUgaW4tZmxpZ2h0IHNldC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9iUGF5bG9hZCAmIHtpZDogc3RyaW5nfX0gcGF5bG9hZCAtIEpvYiBwYXlsb2FkLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi90ZXN0aW5nL3NoYXJlZC10cmFuc2FjdGlvbi1wcm94eS1kcml2ZXIuanNcIikuU2hhcmVkVHJhbnNhY3Rpb25Ccm9rZXJKb2JDb25maWd9IHNoYXJlZFRyYW5zYWN0aW9uQnJva2VyIC0gUGVyLWpvYiBicm9rZXIgY29uZmlndXJhdGlvbi5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIGFmdGVyIHJlcG9ydGluZy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcnVuSm9iKHBheWxvYWQsIHNoYXJlZFRyYW5zYWN0aW9uQnJva2VyKSB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgcnVuV2l0aFNoYXJlZFRyYW5zYWN0aW9uQnJva2VyQ29uZmlnKHNoYXJlZFRyYW5zYWN0aW9uQnJva2VyLCBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gYXdhaXQgYnJva2VySWRlbnRpdHkucnVuKHNoYXJlZFRyYW5zYWN0aW9uQnJva2VyLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCBydW5Kb2JQYXlsb2FkKHBheWxvYWQsIHtcbiAgICAgICAgICBjbG9zZUNvbm5lY3Rpb25zOiBmYWxzZSxcbiAgICAgICAgICBtYW5hZ2VQcm9jZXNzVGl0bGU6IGZhbHNlLFxuICAgICAgICAgIG9uUGVyZm9ybVN0YXJ0OiAoKSA9PiBzZW5kQ2hpbGRBY2NlcHRhbmNlKFwiam9iLXN0YXJ0ZWRcIiwgcGF5bG9hZCwgRGF0ZS5ub3coKSksXG4gICAgICAgICAgcHJvY2Vzc1R5cGU6IFwiYmFja2dyb3VuZC1qb2JzLXBvb2xlZC1ydW5uZXJcIlxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9KVxuICAgIGF3YWl0IHNlbmRPdXRjb21lKHtqb2JJZDogcGF5bG9hZC5pZCwgYWNrbm93bGVkZ2VkOiB0cnVlLCBzdGF0dXN9KVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEJhY2tncm91bmRKb2JQZXJmb3JtZWRGYWlsdXJlKSB7XG4gICAgICBhd2FpdCBzZW5kT3V0Y29tZSh7am9iSWQ6IHBheWxvYWQuaWQsIGFja25vd2xlZGdlZDogdHJ1ZSwgc3RhdHVzOiBcImZhaWxlZFwifSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcmVwb3J0RXJyb3IgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSlcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJQb29sZWQgYmFja2dyb3VuZCBqb2IgcnVubmVyIGZhaWxlZCBiZWZvcmUgdGVybWluYWwgYWNrbm93bGVkZ2VtZW50OlwiLCByZXBvcnRFcnJvcilcbiAgICAgIGF3YWl0IHNlbmRPdXRjb21lKHtqb2JJZDogcGF5bG9hZC5pZCwgYWNrbm93bGVkZ2VkOiBmYWxzZSwgZXJyb3I6IHJlcG9ydEVycm9yfSlcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgcnVubmluZ0pvYklkcy5kZWxldGUocGF5bG9hZC5pZClcbiAgICB1cGRhdGVQcm9jZXNzVGl0bGUoKVxuXG4gICAgaWYgKHJ1bm5pbmdKb2JJZHMuc2l6ZSA9PT0gMCkge1xuICAgICAgc3RvcE1lbW9yeU9ic2VydmF0aW9uU2FtcGxpbmcoKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEhhbmRsZXMgYSBqb2IgbWVzc2FnZSwgc3RhcnRpbmcgaXQgYWxvbmdzaWRlIGFueSBjb25jdXJyZW50IHNpYmxpbmdzLlxuICogQHBhcmFtIHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gbWVzc2FnZSAtIElQQyBtZXNzYWdlLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGhhbmRsZU1lc3NhZ2UobWVzc2FnZSkge1xuICBpZiAoaXNTaHV0ZG93blJlcXVlc3RNZXNzYWdlKG1lc3NhZ2UpKSB7XG4gICAgdm9pZCBzaHV0ZG93blJ1bm5lcih7XG4gICAgICBleGl0Q29kZTogbWVzc2FnZS5yZWFzb24gPT09IFwicGFyZW50X3JldGlyZV9kcmFpbmVkXCIgPyAwIDogMSxcbiAgICAgIHJlYXNvbjogbWVzc2FnZS5yZWFzb24sXG4gICAgICBzaHV0ZG93blJlcXVlc3RlZEF0TXM6IG1lc3NhZ2Uuc2h1dGRvd25SZXF1ZXN0ZWRBdE1zLFxuICAgICAgc2lnbmFsOiBtZXNzYWdlLnNpZ25hbFxuICAgIH0pXG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoaXNNZW1vcnlPYnNlcnZhdGlvblJlcXVlc3RNZXNzYWdlKG1lc3NhZ2UpKSB7XG4gICAgc2VuZE1lbW9yeU9ic2VydmF0aW9uKClcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmICghaXNKb2JNZXNzYWdlKG1lc3NhZ2UpIHx8IHJ1bm5pbmdKb2JJZHMuaGFzKG1lc3NhZ2UucGF5bG9hZC5pZCkpIHJldHVyblxuXG4gIHJ1bm5pbmdKb2JJZHMuYWRkKG1lc3NhZ2UucGF5bG9hZC5pZClcbiAgdXBkYXRlUHJvY2Vzc1RpdGxlKClcbiAgc2VuZENoaWxkQWNjZXB0YW5jZShcImpvYi1yZWNlaXZlZFwiLCBtZXNzYWdlLnBheWxvYWQsIERhdGUubm93KCkpXG4gIHN0YXJ0TWVtb3J5T2JzZXJ2YXRpb25TYW1wbGluZygpXG4gIHZvaWQgcnVuSm9iKG1lc3NhZ2UucGF5bG9hZCwgbWVzc2FnZS5zaGFyZWRUcmFuc2FjdGlvbkJyb2tlciB8fCB7ZXhwZWN0ZWQ6IGZhbHNlfSlcbn1cblxucHJvY2Vzcy5vbihcIm1lc3NhZ2VcIiwgKG1lc3NhZ2UpID0+IGhhbmRsZU1lc3NhZ2UobWVzc2FnZSkpXG5wcm9jZXNzLm9uY2UoXCJkaXNjb25uZWN0XCIsICgpID0+IHZvaWQgc2h1dGRvd25SdW5uZXIoe2V4aXRDb2RlOiAwLCByZWFzb246IFwiaXBjX2Rpc2Nvbm5lY3RcIn0pKVxucHJvY2Vzcy5vbmNlKFwiU0lHVEVSTVwiLCAoKSA9PiB2b2lkIHNodXRkb3duUnVubmVyKHtleGl0Q29kZTogMSwgcmVhc29uOiBcInNpZ25hbF9zaWd0ZXJtXCIsIHNpZ25hbDogXCJTSUdURVJNXCJ9KSlcbnByb2Nlc3Mub25jZShcIlNJR0lOVFwiLCAoKSA9PiB2b2lkIHNodXRkb3duUnVubmVyKHtleGl0Q29kZTogMSwgcmVhc29uOiBcInNpZ25hbF9zaWdpbnRcIiwgc2lnbmFsOiBcIlNJR0lOVFwifSkpXG5pZiAocHJvY2Vzcy5zZW5kKSBwcm9jZXNzLnNlbmQoe2NoaWxkSW5zdGFuY2VJZCwgY2hpbGRQaWQ6IHByb2Nlc3MucGlkLCB0eXBlOiBcInJlYWR5XCJ9KVxuIl19
|
|
383
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9vbGVkLXJ1bm5lci1jaGlsZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZ3JvdW5kLWpvYnMvcG9vbGVkLXJ1bm5lci1jaGlsZC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQ3RDLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUN4QixPQUFPLE9BQU8sTUFBTSwyQkFBMkIsQ0FBQTtBQUMvQyxPQUFPLGFBQWEsRUFBRSxFQUFFLDZCQUE2QixFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDOUUsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLE1BQU0sNkJBQTZCLENBQUE7QUFDekksT0FBTyxFQUFFLHNCQUFzQixFQUFFLCtCQUErQixFQUFFLDBCQUEwQixFQUFFLE1BQU0sK0JBQStCLENBQUE7QUFDbkksT0FBTyxxQkFBcUIsTUFBTSwyQkFBMkIsQ0FBQTtBQUM3RCxPQUFPLDBCQUEwQixNQUFNLG9DQUFvQyxDQUFBO0FBQzNFLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLCtDQUErQyxDQUFBO0FBRXBHLE1BQU0sa0JBQWtCLEdBQUcsa0NBQWtDLENBQUE7QUFDN0QseUZBQXlGO0FBQ3pGLE1BQU0sb0NBQW9DLEdBQUcsR0FBRyxDQUFBO0FBQ2hELGdGQUFnRjtBQUNoRixNQUFNLGVBQWUsR0FBRyxVQUFVLEVBQUUsQ0FBQTtBQUNwQywyREFBMkQ7QUFDM0QsTUFBTSw4QkFBOEIsR0FBRyxLQUFLLENBQUE7QUFDNUMsa0VBQWtFO0FBQ2xFLE1BQU0sK0JBQStCLEdBQUcsRUFBRSxDQUFBO0FBRTFDOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBUyxnQkFBZ0I7SUFDdkIsTUFBTSxhQUFhLEdBQUcsT0FBTyxD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LElBQUksRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tIFwibm9kZTpjcnlwdG9cIlxuaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIlxuaW1wb3J0IHY4IGZyb20gXCJub2RlOnY4XCJcbmltcG9ydCB0aW1lb3V0IGZyb20gXCJhd2FpdGVyeS9idWlsZC90aW1lb3V0LmpzXCJcbmltcG9ydCBydW5Kb2JQYXlsb2FkLCB7IEJhY2tncm91bmRKb2JQZXJmb3JtZWRGYWlsdXJlIH0gZnJvbSBcIi4vam9iLXJ1bm5lci5qc1wiXG5pbXBvcnQgeyBib3VuZGVkUG9vbGVkUnVubmVySW5mbGlnaHRKb2JJZHMsIGlzUG9vbGVkQ2hpbGRTaHV0ZG93blJlYXNvbiwgaXNQb29sZWRDaGlsZFNodXRkb3duU2lnbmFsIH0gZnJvbSBcIi4vcG9vbGVkLXJ1bm5lci1zaHV0ZG93bi5qc1wiXG5pbXBvcnQgeyBjbG9zZVJ1bm5lckNvbm5lY3Rpb25zLCBjbG9zZVJ1bm5lckZyYW1ld29ya0Nvbm5lY3Rpb25zLCBjdXJyZW50Q29uZmlndXJhdGlvbk9yTnVsbCB9IGZyb20gXCIuL3J1bm5lci1ncmFjZWZ1bC1zaHV0ZG93bi5qc1wiXG5pbXBvcnQgc2V0UnVubmVyUHJvY2Vzc1RpdGxlIGZyb20gXCIuL3J1bm5lci1wcm9jZXNzLXRpdGxlLmpzXCJcbmltcG9ydCBQb29sZWRSdW5uZXJCcm9rZXJJZGVudGl0eSBmcm9tIFwiLi9wb29sZWQtcnVubmVyLWJyb2tlci1pZGVudGl0eS5qc1wiXG5pbXBvcnQgeyBydW5XaXRoU2hhcmVkVHJhbnNhY3Rpb25Ccm9rZXJDb25maWcgfSBmcm9tIFwiLi4vdGVzdGluZy9zaGFyZWQtdHJhbnNhY3Rpb24tcHJveHktZHJpdmVyLmpzXCJcblxuY29uc3QgQkFTRV9QUk9DRVNTX1RJVExFID0gXCJ2ZWxvY2lvdXMgYmFja2dyb3VuZC1qb2JzLXJ1bm5lclwiXG4vKiogQSBzaHV0ZG93biBvYnNlcnZhdGlvbiBtYXkgZGVsYXkgcmVzb3VyY2UgdGVhcmRvd24gb25seSBmb3IgdGhpcyBib3VuZGVkIElQQyBzZW5kLiAqL1xuY29uc3QgU0hVVERPV05fT0JTRVJWQVRJT05fU0VORF9USU1FT1VUX01TID0gMTAwXG4vKiogU3RhYmxlIGlkZW50aXR5IG9mIHRoaXMgcG9vbGVkIGNoaWxkIHByb2Nlc3MgZm9yIHRoZSBsaWZlIG9mIHRoZSBwcm9jZXNzLiAqL1xuY29uc3QgY2hpbGRJbnN0YW5jZUlkID0gcmFuZG9tVVVJRCgpXG4vKiogU2FtcGxpbmcgY2FkZW5jZSBmb3IgdGhlIG1lbW9yeSBvYnNlcnZhdGlvbiBzYW1wbGVyLiAqL1xuY29uc3QgTUVNT1JZX09CU0VSVkFUSU9OX0lOVEVSVkFMX01TID0gMTAwMDBcbi8qKiBCb3VuZCBvbiBpbi1mbGlnaHQgam9iIGlkcyBjYXJyaWVkIGluIGEgbWVtb3J5IG9ic2VydmF0aW9uLiAqL1xuY29uc3QgTUVNT1JZX09CU0VSVkFUSU9OX0pPQl9JRF9MSU1JVCA9IDMyXG5cbi8qKlxuICogUmVhZHMgdGhpcyBwcm9jZXNzJ3MgcGVhayByZXNpZGVudCBzZXQgc2l6ZSAodGhlIGtlcm5lbCBoaWdoLXdhdGVyIG1hcmssXG4gKiBgVm1IV01gIGluIGAvcHJvYy9zZWxmL3N0YXR1c2ApLiBVbmxpa2UgYSBwb2ludC1pbi10aW1lIFJTUyBzYW1wbGUsIHRoaXMgaXNcbiAqIG1vbm90b25pYyBmb3IgdGhlIGxpZmUgb2YgdGhlIHByb2Nlc3M6IG9uY2UgYSBidXJzdCByYXRjaGV0cyB0aGUgd29ya2luZyBzZXRcbiAqIHVwLCBgVm1IV01gIHJlbWVtYmVycyBpdCBldmVuIGFmdGVyIGdhcmJhZ2UgY29sbGVjdGlvbiByZXR1cm5zIHRoZSBwYWdlcy5cbiAqIFRoYXQgbWFrZXMgaXQgdGhlIGhvbmVzdCBzaWduYWwgZm9yIHJlY3ljbGluZyBhIHBvb2xlZCBjaGlsZCDigJQgYSBjaGlsZCB0aGF0XG4gKiBzcGlrZWQgdG8gc2V2ZXJhbCBnaWdhYnl0ZXMgZHVyaW5nIGEgYnVpbGQgYnVyc3Qga2VlcHMgaXRzIHJhdGNoZXRlZCBmbG9vclxuICogYW5kIG11c3QgYmUgcmVwbGFjZWQsIGV2ZW4gdGhvdWdoIGl0cyBzZXR0bGVkIFJTUyBhdCBqb2Itb3V0Y29tZSB0aW1lIGxvb2tzXG4gKiBtb2Rlc3QuIEEgcmVhZCBmYWlsdXJlIChubyBgL3Byb2NgKSBkZWdyYWRlcyB0byB0aGUgY3VycmVudCBSU1Mgc2FtcGxlIHNvIHRoZVxuICogb2JzZXJ2YXRpb24gaXMgbmV2ZXIgYmxvY2tlZCBvbiBpdC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFBlYWsgUlNTIGluIGJ5dGVzLCBvciB0aGUgY3VycmVudCBSU1Mgc2FtcGxlIHdoZW4gdW5yZWFkYWJsZS5cbiAqL1xuZnVuY3Rpb24gcmVhZFBlYWtSc3NCeXRlcygpIHtcbiAgY29uc3QgZmFsbGJhY2tCeXRlcyA9IHByb2Nlc3MubWVtb3J5VXNhZ2UoKS5yc3NcbiAgdHJ5IHtcbiAgICBjb25zdCBzdGF0dXMgPSByZWFkRmlsZVN5bmMoXCIvcHJvYy9zZWxmL3N0YXR1c1wiLCBcInV0ZjhcIilcbiAgICBjb25zdCBtYXRjaCA9IC9eVm1IV006XFxzKyhcXGQrKVxccytrQiQvbS5leGVjKHN0YXR1cylcbiAgICBpZiAoIW1hdGNoKSByZXR1cm4gZmFsbGJhY2tCeXRlc1xuICAgIGNvbnN0IGtpYmlieXRlcyA9IE51bWJlcihtYXRjaFsxXSlcbiAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKGtpYmlieXRlcykgJiYga2liaWJ5dGVzID4gMCA/IGtpYmlieXRlcyAqIDEwMjQgOiBmYWxsYmFja0J5dGVzXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxsYmFja0J5dGVzXG4gIH1cbn1cblxuc2V0UnVubmVyUHJvY2Vzc1RpdGxlKClcblxuLyoqIEB0eXBlIHtQcm9taXNlPHZvaWQ+IHwgdW5kZWZpbmVkfSAqL1xubGV0IHNodXRkb3duUHJvbWlzZVxuXG4vKipcbiAqIENsb3NlcyB0aGUgcnVubmVyJ3MgY29ubmVjdGlvbnMg4oCUIHJlbGVhc2luZyBhbnkgYWR2aXNvcnkgbG9jayBhIGtpbGxlZC1taWQtcGFzc1xuICogam9iIHN0aWxsIGhvbGRzIOKAlCBiZWZvcmUgZXhpdGluZywgaW5zdGVhZCBvZiBsZWF2aW5nIGEgaGFsZi1vcGVuIHNlc3Npb24gdGhhdFxuICoga2VlcHMgdGhlIGxvY2sgdW50aWwgdGhlIERCIHNlcnZlcidzIGB3YWl0X3RpbWVvdXRgLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBTaHV0ZG93biBvYnNlcnZhdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBhcmdzLmV4aXRDb2RlIC0gUHJvY2VzcyBleGl0IGNvZGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuUG9vbGVkQ2hpbGRTaHV0ZG93blJlYXNvbn0gYXJncy5yZWFzb24gLSBFeGFjdCBzaHV0ZG93biByZWFzb24gb2JzZXJ2ZWQgYnkgdGhlIGNoaWxkLlxuICogQHBhcmFtIHtudW1iZXIgfCBudWxsfSBbYXJncy5zaHV0ZG93blJlcXVlc3RlZEF0TXNdIC0gUGFyZW50IHJlcXVlc3QgdGltZXN0YW1wIHdoZW4gc3VwcGxpZWQgb3ZlciBJUEMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiKS5DaGlsZFByb2Nlc3NbXCJzaWduYWxDb2RlXCJdfSBbYXJncy5zaWduYWxdIC0gUmVxdWVzdGVkIG9yIG9ic2VydmVkIHNpZ25hbC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICovXG5mdW5jdGlvbiBzaHV0ZG93blJ1bm5lcih7ZXhpdENvZGUsIHJlYXNvbiwgc2h1dGRvd25SZXF1ZXN0ZWRBdE1zID0gbnVsbCwgc2lnbmFsID0gbnVsbH0pIHtcbiAgaWYgKHNodXRkb3duUHJvbWlzZSkgcmV0dXJuIHNodXRkb3duUHJvbWlzZVxuXG4gIHNodXRkb3duUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgc2VuZFNodXRkb3duT2JzZXJ2YXRpb24oe3JlYXNvbiwgc2h1dGRvd25SZXF1ZXN0ZWRBdE1zLCBzaWduYWx9KVxuICAgIGF3YWl0IGNsb3NlUnVubmVyQ29ubmVjdGlvbnMoY3VycmVudENvbmZpZ3VyYXRpb25Pck51bGwoKSlcbiAgICBwcm9jZXNzLmV4aXQoZXhpdENvZGUpXG4gIH0pKClcblxuICByZXR1cm4gc2h1dGRvd25Qcm9taXNlXG59XG5cbi8qKlxuICogSWRzIG9mIGpvYnMgY3VycmVudGx5IHJ1bm5pbmcgaW4gdGhpcyBjaGlsZC4gQSBwb29sZWQgY2hpbGQgcnVucyB1cCB0b1xuICogYHBvb2xlZFJ1bm5lckNvbmN1cnJlbmN5YCBqb2JzIGF0IG9uY2UgKHRoZSB3b3JrZXIgb25seSBkaXNwYXRjaGVzIHdpdGhpbiB0aGF0XG4gKiBib3VuZCk7IHRoZSBzZXQgZGVkdXBlcyBhIHJlZGVsaXZlcmVkIGpvYiBpZCBhbmQgbGV0cyBlYWNoIGpvYiBzZXR0bGVcbiAqIGluZGVwZW5kZW50bHkuXG4gKiBAdHlwZSB7U2V0PHN0cmluZz59XG4gKi9cbmNvbnN0IHJ1bm5pbmdKb2JJZHMgPSBuZXcgU2V0KClcbmNvbnN0IGJyb2tlcklkZW50aXR5ID0gbmV3IFBvb2xlZFJ1bm5lckJyb2tlcklkZW50aXR5KHtcbiAgY2xvc2VDb25uZWN0aW9uczogYXN5bmMgKCkgPT4gYXdhaXQgY2xvc2VSdW5uZXJGcmFtZXdvcmtDb25uZWN0aW9ucyhjdXJyZW50Q29uZmlndXJhdGlvbk9yTnVsbCgpKVxufSlcblxuLyoqXG4gKiBTZXRzIGFuIGFnZ3JlZ2F0ZSBwcm9jZXNzIHRpdGxlIGZyb20gdGhlIGN1cnJlbnQgaW4tZmxpZ2h0IGNvdW50LiBBIGNoaWxkIHJ1bnNcbiAqIGpvYnMgY29uY3VycmVudGx5LCBzbyBhIHBlci1qb2IgdGl0bGUgKHdoaWNoIGBydW5Kb2JQYXlsb2FkYCB3b3VsZCBzbmFwc2hvdCBhbmRcbiAqIHJlc3RvcmUgYXJvdW5kIGEgc2luZ2xlIGpvYikgY2Fubm90IHJlcHJlc2VudCB0aGUgcHJvY2VzcyDigJQgaW50ZXJsZWF2ZWRcbiAqIGNvbXBsZXRpb25zIHdvdWxkIGxlYXZlIGEgc3RhbGUgbGFiZWwuIFJlY29tcHV0aW5nIGZyb20gYHJ1bm5pbmdKb2JJZHMuc2l6ZWAgaXNcbiAqIGNvbmN1cnJlbmN5LXNhZmUgYW5kIGhvbmVzdDogYHBzYC9gdG9wYCBzaG93IGhvdyBtYW55IGpvYnMgdGhlIGNoaWxkIGlzIHJ1bm5pbmcuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdXBkYXRlUHJvY2Vzc1RpdGxlKCkge1xuICBjb25zdCBjb3VudCA9IHJ1bm5pbmdKb2JJZHMuc2l6ZVxuXG4gIHByb2Nlc3MudGl0bGUgPSBjb3VudCA+IDAgPyBgJHtCQVNFX1BST0NFU1NfVElUTEV9OiAke2NvdW50fSAke2NvdW50ID09PSAxID8gXCJqb2JcIiA6IFwiam9ic1wifWAgOiBCQVNFX1BST0NFU1NfVElUTEVcbn1cblxuLyoqXG4gKiBTZW5kcyBvbmUgYm91bmRlZCBsaWZlY3ljbGUgb2JzZXJ2YXRpb24gYmVmb3JlIGFwcGxpY2F0aW9uL2ZyYW1ld29yayB0ZWFyZG93bi5cbiAqIEEgY2xvc2VkIElQQyBjaGFubmVsIGlzIGV4cGVjdGVkIGZvciBgaXBjX2Rpc2Nvbm5lY3RgOyBvdGhlciBzZW5kIGZhaWx1cmVzIGFyZVxuICogc3VyZmFjZWQgb24gc3RkZXJyIGJ1dCBuZXZlciBob2xkIGNvbm5lY3Rpb24gY2xlYW51cCBwYXN0IHRoZSBmaXhlZCBib3VuZC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gU2h1dGRvd24gb2JzZXJ2YXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuUG9vbGVkQ2hpbGRTaHV0ZG93blJlYXNvbn0gYXJncy5yZWFzb24gLSBTaHV0ZG93biByZWFzb24uXG4gKiBAcGFyYW0ge251bWJlciB8IG51bGx9IGFyZ3Muc2h1dGRvd25SZXF1ZXN0ZWRBdE1zIC0gUGFyZW50IHJlcXVlc3QgdGltZXN0YW1wLlxuICogQHBhcmFtIHtpbXBvcnQoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIikuQ2hpbGRQcm9jZXNzW1wic2lnbmFsQ29kZVwiXX0gYXJncy5zaWduYWwgLSBSZXF1ZXN0ZWQgb3Igb2JzZXJ2ZWQgc2lnbmFsLlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgYWZ0ZXIgSVBDIGFjY2VwdHMgdGhlIG9ic2VydmF0aW9uIG9yIHRoZSBib3VuZCBleHBpcmVzLlxuICovXG5hc3luYyBmdW5jdGlvbiBzZW5kU2h1dGRvd25PYnNlcnZhdGlvbih7cmVhc29uLCBzaHV0ZG93blJlcXVlc3RlZEF0TXMsIHNpZ25hbH0pIHtcbiAgaWYgKCFwcm9jZXNzLnNlbmQgfHwgIXByb2Nlc3MuY29ubmVjdGVkKSByZXR1cm5cblxuICBjb25zdCBib3VuZGVkSW5mbGlnaHQgPSBib3VuZGVkUG9vbGVkUnVubmVySW5mbGlnaHRKb2JJZHMocnVubmluZ0pvYklkcylcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlBvb2xlZENoaWxkU2h1dGRvd25PYnNlcnZhdGlvbiAmIHt0eXBlOiBcInNodXRkb3duLW9ic2VydmF0aW9uXCJ9fSAqL1xuICBjb25zdCBtZXNzYWdlID0ge1xuICAgIGNoaWxkSW5zdGFuY2VJZCxcbiAgICAuLi5ib3VuZGVkSW5mbGlnaHQsXG4gICAgcmVhc29uLFxuICAgIHNodXRkb3duT2JzZXJ2ZWRBdE1zOiBEYXRlLm5vdygpLFxuICAgIHNodXRkb3duUmVxdWVzdGVkQXRNcyxcbiAgICBzaWduYWwsXG4gICAgdHlwZTogXCJzaHV0ZG93bi1vYnNlcnZhdGlvblwiXG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IHRpbWVvdXQoe3RpbWVvdXQ6IFNIVVRET1dOX09CU0VSVkFUSU9OX1NFTkRfVElNRU9VVF9NU30sIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwcm9jZXNzLnNlbmQ/LihtZXNzYWdlLCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXNvbHZlKHVuZGVmaW5lZClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJQb29sZWQgYmFja2dyb3VuZCBqb2IgcnVubmVyIGNvdWxkIG5vdCBzZW5kIGl0cyBzaHV0ZG93biBvYnNlcnZhdGlvbjpcIiwgZXJyb3IpXG4gIH1cbn1cblxuLyoqXG4gKiBSZXBvcnRzIG9uZSBhY2NlcHRhbmNlIG9ic2VydmF0aW9uIChqb2IgcmVjZWl2ZWQgLyBwZXJmb3JtIHN0YXJ0ZWQpIHRvIHRoZVxuICogd29ya2VyIG92ZXIgSVBDLiBUaGUgbWVzc2FnZSBjYXJyaWVzIHRoZSBqb2IncyBleGFjdCBoYW5kb2ZmIGxlYXNlIHNvIHRoZVxuICogd29ya2VyIGNhbiBwZXJzaXN0IGl0IGZlbmNlZCB3aXRob3V0IGFueSBvdGhlciBsb29rdXAuIFNlbmQgZmFpbHVyZXMgYXJlXG4gKiBzd2FsbG93ZWQ6IGEgZGVhZCBJUEMgY2hhbm5lbCBpcyB0ZXJtaW5hbCBmb3IgdGhpcyBjaGlsZCAodGhlIGRpc2Nvbm5lY3RcbiAqIGhhbmRsZXIgb3ducyBzaHV0ZG93biksIGFuZCBsb3NpbmcgYWNjZXB0YW5jZSBldmlkZW5jZSBtdXN0IG5ldmVyIGZhaWwgdGhlXG4gKiBqb2IgaXRzZWxmLlxuICogQHBhcmFtIHtcImpvYi1yZWNlaXZlZFwiIHwgXCJqb2Itc3RhcnRlZFwifSB0eXBlIC0gT2JzZXJ2YXRpb24ga2luZC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9iUGF5bG9hZCAmIHtpZDogc3RyaW5nfX0gcGF5bG9hZCAtIEpvYiBwYXlsb2FkIGNhcnJ5aW5nIHRoZSBoYW5kb2ZmIGxlYXNlLlxuICogQHBhcmFtIHtudW1iZXJ9IG9ic2VydmVkQXRNcyAtIEVwb2NoIG1zIG9mIHRoZSBvYnNlcnZhdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBzZW5kQ2hpbGRBY2NlcHRhbmNlKHR5cGUsIHBheWxvYWQsIG9ic2VydmVkQXRNcykge1xuICBpZiAoIXByb2Nlc3Muc2VuZCkgcmV0dXJuXG5cbiAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICBjaGlsZEluc3RhbmNlSWQsXG4gICAgY2hpbGRQaWQ6IHByb2Nlc3MucGlkLFxuICAgIGhhbmRlZE9mZkF0TXM6IHBheWxvYWQuaGFuZGVkT2ZmQXRNcyxcbiAgICBoYW5kb2ZmSWQ6IHBheWxvYWQuaGFuZG9mZklkLFxuICAgIGpvYklkOiBwYXlsb2FkLmlkLFxuICAgIHR5cGUsXG4gICAgd29ya2VySWQ6IHBheWxvYWQud29ya2VySWQsXG4gICAgLi4uKHR5cGUgPT09IFwiam9iLXJlY2VpdmVkXCIgPyB7cmVjZWl2ZWRBdE1zOiBvYnNlcnZlZEF0TXN9IDoge3N0YXJ0ZWRBdE1zOiBvYnNlcnZlZEF0TXN9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICBwcm9jZXNzLnNlbmQobWVzc2FnZSlcbiAgfSBjYXRjaCB7XG4gICAgLy8gVGhlIElQQyBjaGFubmVsIGlzIGFscmVhZHkgZ29uZTsgdGhlIGRpc2Nvbm5lY3QgaGFuZGxlciBvd25zIHNodXRkb3duLlxuICB9XG59XG5cbi8qKlxuICogQ29sbGVjdHMgYSBib3VuZGVkIGRpYWdub3N0aWMgc25hcHNob3Qgb2YgdGhpcyBjaGlsZCdzIG1lbW9yeSBzdGF0ZS4gVGhlXG4gKiBwb29sZWQgY2hpbGQncyBzdGRpbyBpcyBpZ25vcmVkIGJ5IHRoZSB3b3JrZXIgZm9yaywgc28gSVBDIGlzIHRoZSBvbmx5IGNoYW5uZWxcbiAqIHRvIHRoZSB3b3JrZXIncyBsb2cgc3VyZmFjZSDigJQgdGhpcyBzbmFwc2hvdCAoc2VudCBwZXJpb2RpY2FsbHkgYW5kIG9uIGRlbWFuZClcbiAqIGlzIGhvdyBhIG1lbW9yeSBwcm9ibGVtIG5hbWVzIGl0c2VsZiBpbiBwcm9kdWN0aW9uLiBUaGUgVjggaGVhcC1zdGF0XG4gKiBicmVha2Rvd24gKG5vdCBhIGZ1bGwgaGVhcCBzbmFwc2hvdCwgd2hpY2ggd291bGQgYmUgZmFyIHRvbyBleHBlbnNpdmUgd2hpbGUgYVxuICogY2hpbGQgcnVucyAyNSBjb25jdXJyZW50IGpvYnMpIGRpc3Rpbmd1aXNoZXMgYSBWOCBoZWFwLWdyb3d0aCBsZWFrIGZyb21cbiAqIGV4dGVybmFsL2FycmF5LWJ1ZmZlciAobmF0aXZlIHJlc291cmNlKSBncm93dGgsIGFuZCB0aGUgaW4tZmxpZ2h0IGpvYiBpZHNcbiAqIHRpZSB0aGUgb2JzZXJ2YXRpb24gdG8gdGhlIHdvcmsgdGhhdCB3YXMgcnVubmluZy5cbiAqIEByZXR1cm5zIHt7YWN0aXZlSm9iSWRzOiBzdHJpbmdbXSwgYWN0aXZlSm9iSWRzVHJ1bmNhdGVkQ291bnQ6IG51bWJlciwgY2hpbGRJbnN0YW5jZUlkOiBzdHJpbmcsIGNoaWxkUGlkOiBudW1iZXIsIGNoaWxkVXB0aW1lTXM6IG51bWJlciwgaGVhcFN0YXRpc3RpY3M6IFJldHVyblR5cGU8dHlwZW9mIHY4LmdldEhlYXBTdGF0aXN0aWNzPiwgam9iQ291bnQ6IG51bWJlciwgbWVtb3J5VXNhZ2U6IFJldHVyblR5cGU8dHlwZW9mIHByb2Nlc3MubWVtb3J5VXNhZ2U+LCBvYnNlcnZlZEF0TXM6IG51bWJlciwgcGVha1Jzc0J5dGVzOiBudW1iZXIsIHJzc0J5dGVzOiBudW1iZXIsIHR5cGU6IFwicG9vbGVkLWNoaWxkLW1lbW9yeVwiLCB1cHRpbWVNczogbnVtYmVyfX0gLSBCb3VuZGVkIG1lbW9yeSBvYnNlcnZhdGlvbiBmb3IgdGhpcyBjaGlsZC5cbiAqL1xuZnVuY3Rpb24gY29sbGVjdE1lbW9yeU9ic2VydmF0aW9uKCkge1xuICBjb25zdCBqb2JJZHMgPSBbLi4ucnVubmluZ0pvYklkc11cbiAgY29uc3QgYWN0aXZlSm9iSWRzID0gam9iSWRzLnNsaWNlKDAsIE1FTU9SWV9PQlNFUlZBVElPTl9KT0JfSURfTElNSVQpXG4gIGNvbnN0IG1lbW9yeVVzYWdlID0gcHJvY2Vzcy5tZW1vcnlVc2FnZSgpXG5cbiAgcmV0dXJuIHtcbiAgICBhY3RpdmVKb2JJZHMsXG4gICAgYWN0aXZlSm9iSWRzVHJ1bmNhdGVkQ291bnQ6IE1hdGgubWF4KDAsIGpvYklkcy5sZW5ndGggLSBhY3RpdmVKb2JJZHMubGVuZ3RoKSxcbiAgICBjaGlsZEluc3RhbmNlSWQsXG4gICAgY2hpbGRQaWQ6IHByb2Nlc3MucGlkLFxuICAgIGNoaWxkVXB0aW1lTXM6IE1hdGguZmxvb3IocHJvY2Vzcy51cHRpbWUoKSAqIDEwMDApLFxuICAgIGhlYXBTdGF0aXN0aWNzOiB2OC5nZXRIZWFwU3RhdGlzdGljcygpLFxuICAgIGpvYkNvdW50OiBqb2JJZHMubGVuZ3RoLFxuICAgIG1lbW9yeVVzYWdlLFxuICAgIG9ic2VydmVkQXRNczogRGF0ZS5ub3coKSxcbiAgICBwZWFrUnNzQnl0ZXM6IHJlYWRQZWFrUnNzQnl0ZXMoKSxcbiAgICByc3NCeXRlczogbWVtb3J5VXNhZ2UucnNzLFxuICAgIHR5cGU6IFwicG9vbGVkLWNoaWxkLW1lbW9yeVwiLFxuICAgIHVwdGltZU1zOiBNYXRoLmZsb29yKHByb2Nlc3MudXB0aW1lKCkgKiAxMDAwKVxuICB9XG59XG5cbi8qKlxuICogU2VuZHMgYSBtZW1vcnkgb2JzZXJ2YXRpb24gdG8gdGhlIHdvcmtlci4gU2FtcGxpbmcgaXMgY2hlYXAgKHByb2Nlc3MgKyBWOFxuICogaGVhcCBzdGF0cykgYW5kIG9ubHkgcnVucyB3aGlsZSBqb2JzIGFyZSBpbiBmbGlnaHQ7IGEgY2xvc2VkIElQQyBjaGFubmVsIGlzXG4gKiB0ZXJtaW5hbCBmb3IgdGhpcyBjaGlsZCAodGhlIGRpc2Nvbm5lY3QgaGFuZGxlciBvd25zIHNodXRkb3duKSwgc28gYSBmYWlsZWRcbiAqIHNlbmQgaXMgc3dhbGxvd2VkLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHNlbmRNZW1vcnlPYnNlcnZhdGlvbigpIHtcbiAgaWYgKCFwcm9jZXNzLnNlbmQgfHwgcnVubmluZ0pvYklkcy5zaXplID09PSAwKSByZXR1cm5cblxuICB0cnkge1xuICAgIHByb2Nlc3Muc2VuZChjb2xsZWN0TWVtb3J5T2JzZXJ2YXRpb24oKSlcbiAgfSBjYXRjaCB7XG4gICAgLy8gVGhlIElQQyBjaGFubmVsIGlzIGFscmVhZHkgZ29uZTsgdGhlIGRpc2Nvbm5lY3QgaGFuZGxlciBvd25zIHNodXRkb3duLlxuICB9XG59XG5cbi8qKiBAdHlwZSB7UmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgdW5kZWZpbmVkfSAqL1xubGV0IG1lbW9yeU9ic2VydmF0aW9uVGltZXJcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhbiBJUEMgdmFsdWUgcmVxdWVzdHMgdGhpcyBjaGlsZCB0byBzZW5kIGEgbWVtb3J5IG9ic2VydmF0aW9uLlxuICogQHBhcmFtIHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gbWVzc2FnZSAtIElQQyBtZXNzYWdlLlxuICogQHJldHVybnMge21lc3NhZ2UgaXMge3R5cGU6IFwibWVtb3J5LW9ic2VydmF0aW9uLXJlcXVlc3RcIn19IC0gV2hldGhlciB0aGUgbWVzc2FnZSByZXF1ZXN0cyBvbmUuXG4gKi9cbmZ1bmN0aW9uIGlzTWVtb3J5T2JzZXJ2YXRpb25SZXF1ZXN0TWVzc2FnZShtZXNzYWdlKSB7XG4gIHJldHVybiBtZXNzYWdlICE9PSBudWxsXG4gICAgJiYgdHlwZW9mIG1lc3NhZ2UgPT09IFwib2JqZWN0XCJcbiAgICAmJiBtZXNzYWdlLnR5cGUgPT09IFwibWVtb3J5LW9ic2VydmF0aW9uLXJlcXVlc3RcIlxufVxuXG4vKipcbiAqIFN0YXJ0cyB0aGUgcGVyaW9kaWMgbWVtb3J5IG9ic2VydmF0aW9uIHNhbXBsZXIgaWYgaXQgaXMgbm90IGFscmVhZHkgcnVubmluZy5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBzdGFydE1lbW9yeU9ic2VydmF0aW9uU2FtcGxpbmcoKSB7XG4gIGlmIChtZW1vcnlPYnNlcnZhdGlvblRpbWVyIHx8ICFwcm9jZXNzLnNlbmQpIHJldHVyblxuXG4gIG1lbW9yeU9ic2VydmF0aW9uVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgc2VuZE1lbW9yeU9ic2VydmF0aW9uKClcbiAgfSwgTUVNT1JZX09CU0VSVkFUSU9OX0lOVEVSVkFMX01TKVxuICBtZW1vcnlPYnNlcnZhdGlvblRpbWVyLnVucmVmKClcbn1cblxuLyoqXG4gKiBTdG9wcyB0aGUgcGVyaW9kaWMgbWVtb3J5IG9ic2VydmF0aW9uIHNhbXBsZXIuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gc3RvcE1lbW9yeU9ic2VydmF0aW9uU2FtcGxpbmcoKSB7XG4gIGlmICghbWVtb3J5T2JzZXJ2YXRpb25UaW1lcikgcmV0dXJuXG5cbiAgY2xlYXJJbnRlcnZhbChtZW1vcnlPYnNlcnZhdGlvblRpbWVyKVxuICBtZW1vcnlPYnNlcnZhdGlvblRpbWVyID0gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYW4gSVBDIHZhbHVlIGlzIGEgcnVubmFibGUgcG9vbGVkIGpvYiBtZXNzYWdlLlxuICogQHBhcmFtIHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gbWVzc2FnZSAtIElQQyBtZXNzYWdlLlxuICogQHJldHVybnMge21lc3NhZ2UgaXMge3R5cGU6IFwiam9iXCIsIHBheWxvYWQ6IGltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYlBheWxvYWQgJiB7aWQ6IHN0cmluZ30sIHNoYXJlZFRyYW5zYWN0aW9uQnJva2VyPzogaW1wb3J0KFwiLi4vdGVzdGluZy9zaGFyZWQtdHJhbnNhY3Rpb24tcHJveHktZHJpdmVyLmpzXCIpLlNoYXJlZFRyYW5zYWN0aW9uQnJva2VySm9iQ29uZmlnfX0gLSBXaGV0aGVyIHRoaXMgaXMgYSB2YWxpZCBqb2IgbWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gaXNKb2JNZXNzYWdlKG1lc3NhZ2UpIHtcbiAgaWYgKCFtZXNzYWdlIHx8IHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiKSByZXR1cm4gZmFsc2VcbiAgY29uc3QgcmVjb3JkID0gLyoqIEB0eXBlIHt7dHlwZT86IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+LCBwYXlsb2FkPzogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4sIHNoYXJlZFRyYW5zYWN0aW9uQnJva2VyPzogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59fSAqLyAobWVzc2FnZSlcblxuICByZXR1cm4gcmVjb3JkLnR5cGUgPT09IFwiam9iXCIgJiYgISFyZWNvcmQucGF5bG9hZCAmJiB0eXBlb2YgcmVjb3JkLnBheWxvYWQgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJlY29yZC5wYXlsb2FkLmlkID09PSBcInN0cmluZ1wiXG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYW4gSVBDIHZhbHVlIHJlcXVlc3RzIGEgdHlwZWQgcG9vbGVkLWNoaWxkIHNodXRkb3duLlxuICogQHBhcmFtIHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gbWVzc2FnZSAtIElQQyBtZXNzYWdlLlxuICogQHJldHVybnMge21lc3NhZ2UgaXMge3R5cGU6IFwic2h1dGRvd24tcmVxdWVzdFwiLCByZWFzb246IGltcG9ydChcIi4vdHlwZXMuanNcIikuUG9vbGVkQ2hpbGRTaHV0ZG93blJlYXNvbiwgc2h1dGRvd25SZXF1ZXN0ZWRBdE1zOiBudW1iZXIsIHNpZ25hbDogaW1wb3J0KFwibm9kZTpjaGlsZF9wcm9jZXNzXCIpLkNoaWxkUHJvY2Vzc1tcInNpZ25hbENvZGVcIl19fSAtIFdoZXRoZXIgdGhpcyBpcyBhIHZhbGlkIHBhcmVudCBzaHV0ZG93biByZXF1ZXN0LlxuICovXG5mdW5jdGlvbiBpc1NodXRkb3duUmVxdWVzdE1lc3NhZ2UobWVzc2FnZSkge1xuICBpZiAoIW1lc3NhZ2UgfHwgdHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZVxuICBjb25zdCByZWNvcmQgPSAvKiogQHR5cGUge3t0eXBlPzogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4sIHJlYXNvbj86IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+LCBzaHV0ZG93blJlcXVlc3RlZEF0TXM/OiBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPiwgc2lnbmFsPzogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59fSAqLyAobWVzc2FnZSlcblxuICByZXR1cm4gcmVjb3JkLnR5cGUgPT09IFwic2h1dGRvd24tcmVxdWVzdFwiXG4gICAgJiYgaXNQb29sZWRDaGlsZFNodXRkb3duUmVhc29uKHJlY29yZC5yZWFzb24pXG4gICAgJiYgdHlwZW9mIHJlY29yZC5zaHV0ZG93blJlcXVlc3RlZEF0TXMgPT09IFwibnVtYmVyXCJcbiAgICAmJiBOdW1iZXIuaXNGaW5pdGUocmVjb3JkLnNodXRkb3duUmVxdWVzdGVkQXRNcylcbiAgICAmJiBpc1Bvb2xlZENoaWxkU2h1dGRvd25TaWduYWwocmVjb3JkLnNpZ25hbClcbn1cblxuLyoqXG4gKiBTZW5kcyB0aGUgdGVybWluYWwgb3V0Y29tZSBhZnRlciB0aGUgbWFpbi9EQiByZXBvcnQgaGFzIGJlZW4gYWNrbm93bGVkZ2VkIG9yIHJlamVjdGVkLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPdXRjb21lLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3Muam9iSWQgLSBKb2IgaWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGFyZ3MuYWNrbm93bGVkZ2VkIC0gV2hldGhlciB0aGUgdGVybWluYWwgcmVwb3J0IHdhcyBhY2tub3dsZWRnZWQuXG4gKiBAcGFyYW0ge1wiY29tcGxldGVkXCIgfCBcImZhaWxlZFwiIHwgXCJyZXNjaGVkdWxlZFwifSBbYXJncy5zdGF0dXNdIC0gQWNrbm93bGVkZ2VkIG91dGNvbWUuXG4gKiBAcGFyYW0ge0Vycm9yfSBbYXJncy5lcnJvcl0gLSBSZXBvcnRpbmcgZXJyb3Igd2hlbiBhY2tub3dsZWRnZW1lbnQgd2FzIG5vdCBvYnRhaW5lZC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIGFmdGVyIElQQyBhY2NlcHRzIHRoZSBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBzZW5kT3V0Y29tZSh7am9iSWQsIGFja25vd2xlZGdlZCwgc3RhdHVzLCBlcnJvcn0pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgaWYgKCFwcm9jZXNzLnNlbmQpIHtcbiAgICAgIHJlc29sdmUodW5kZWZpbmVkKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgcHJvY2Vzcy5zZW5kKHtcbiAgICAgIHR5cGU6IFwiam9iLW91dGNvbWVcIixcbiAgICAgIGpvYklkLFxuICAgICAgYWNrbm93bGVkZ2VkLFxuICAgICAgc3RhdHVzLFxuICAgICAgcGVha1Jzc0J5dGVzOiByZWFkUGVha1Jzc0J5dGVzKCksXG4gICAgICByc3NCeXRlczogcHJvY2Vzcy5tZW1vcnlVc2FnZSgpLnJzcyxcbiAgICAgIGVycm9yOiBlcnJvcj8ubWVzc2FnZVxuICAgIH0sICgpID0+IHJlc29sdmUodW5kZWZpbmVkKSlcbiAgfSlcbn1cblxuLyoqXG4gKiBSdW5zIG9uZSBqb2IgY29uY3VycmVudGx5IHdpdGggYW55IHNpYmxpbmdzIGFuZCByZXBvcnRzIGl0cyBvd24gdGVybWluYWxcbiAqIG91dGNvbWUuIEEgc2luZ2xlIGpvYidzIHVuZXhwZWN0ZWQgZmFpbHVyZSByZXBvcnRzIHRoYXQgam9iIGZvciByZWNsYW1hdGlvblxuICogKGBhY2tub3dsZWRnZWQ6IGZhbHNlYCkgYnV0IGRvZXMgTk9UIHRha2UgZG93biB0aGUgY2hpbGQg4oCUIGl0cyBjb25jdXJyZW50XG4gKiBzaWJsaW5ncyBrZWVwIHJ1bm5pbmcuIE9ubHkgYSBwcm9jZXNzLWxldmVsIGZhdWx0ICh3aGljaCBlc2NhcGVzIGV2ZXJ5XG4gKiBwZXItam9iIHRyeS9jYXRjaCkgZW5kcyB0aGUgY2hpbGQsIHdoaWNoIHRoZSB3b3JrZXIgc2VlcyBhcyBhbiBleGl0IGFuZFxuICogcmVjbGFpbXMgZm9yIHRoZSB3aG9sZSBpbi1mbGlnaHQgc2V0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkJhY2tncm91bmRKb2JQYXlsb2FkICYge2lkOiBzdHJpbmd9fSBwYXlsb2FkIC0gSm9iIHBheWxvYWQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3Rlc3Rpbmcvc2hhcmVkLXRyYW5zYWN0aW9uLXByb3h5LWRyaXZlci5qc1wiKS5TaGFyZWRUcmFuc2FjdGlvbkJyb2tlckpvYkNvbmZpZ30gc2hhcmVkVHJhbnNhY3Rpb25Ccm9rZXIgLSBQZXItam9iIGJyb2tlciBjb25maWd1cmF0aW9uLlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgYWZ0ZXIgcmVwb3J0aW5nLlxuICovXG5hc3luYyBmdW5jdGlvbiBydW5Kb2IocGF5bG9hZCwgc2hhcmVkVHJhbnNhY3Rpb25Ccm9rZXIpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCBydW5XaXRoU2hhcmVkVHJhbnNhY3Rpb25Ccm9rZXJDb25maWcoc2hhcmVkVHJhbnNhY3Rpb25Ccm9rZXIsIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBhd2FpdCBicm9rZXJJZGVudGl0eS5ydW4oc2hhcmVkVHJhbnNhY3Rpb25Ccm9rZXIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJ1bkpvYlBheWxvYWQocGF5bG9hZCwge1xuICAgICAgICAgIGNsb3NlQ29ubmVjdGlvbnM6IGZhbHNlLFxuICAgICAgICAgIG1hbmFnZVByb2Nlc3NUaXRsZTogZmFsc2UsXG4gICAgICAgICAgb25QZXJmb3JtU3RhcnQ6ICgpID0+IHNlbmRDaGlsZEFjY2VwdGFuY2UoXCJqb2Itc3RhcnRlZFwiLCBwYXlsb2FkLCBEYXRlLm5vdygpKSxcbiAgICAgICAgICBwcm9jZXNzVHlwZTogXCJiYWNrZ3JvdW5kLWpvYnMtcG9vbGVkLXJ1bm5lclwiXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0pXG4gICAgYXdhaXQgc2VuZE91dGNvbWUoe2pvYklkOiBwYXlsb2FkLmlkLCBhY2tub3dsZWRnZWQ6IHRydWUsIHN0YXR1c30pXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQmFja2dyb3VuZEpvYlBlcmZvcm1lZEZhaWx1cmUpIHtcbiAgICAgIGF3YWl0IHNlbmRPdXRjb21lKHtqb2JJZDogcGF5bG9hZC5pZCwgYWNrbm93bGVkZ2VkOiB0cnVlLCBzdGF0dXM6IFwiZmFpbGVkXCJ9KVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZXBvcnRFcnJvciA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKVxuICAgICAgY29uc29sZS5lcnJvcihcIlBvb2xlZCBiYWNrZ3JvdW5kIGpvYiBydW5uZXIgZmFpbGVkIGJlZm9yZSB0ZXJtaW5hbCBhY2tub3dsZWRnZW1lbnQ6XCIsIHJlcG9ydEVycm9yKVxuICAgICAgYXdhaXQgc2VuZE91dGNvbWUoe2pvYklkOiBwYXlsb2FkLmlkLCBhY2tub3dsZWRnZWQ6IGZhbHNlLCBlcnJvcjogcmVwb3J0RXJyb3J9KVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBydW5uaW5nSm9iSWRzLmRlbGV0ZShwYXlsb2FkLmlkKVxuICAgIHVwZGF0ZVByb2Nlc3NUaXRsZSgpXG5cbiAgICBpZiAocnVubmluZ0pvYklkcy5zaXplID09PSAwKSB7XG4gICAgICBzdG9wTWVtb3J5T2JzZXJ2YXRpb25TYW1wbGluZygpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogSGFuZGxlcyBhIGpvYiBtZXNzYWdlLCBzdGFydGluZyBpdCBhbG9uZ3NpZGUgYW55IGNvbmN1cnJlbnQgc2libGluZ3MuXG4gKiBAcGFyYW0ge1JldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSBtZXNzYWdlIC0gSVBDIG1lc3NhZ2UuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gaGFuZGxlTWVzc2FnZShtZXNzYWdlKSB7XG4gIGlmIChpc1NodXRkb3duUmVxdWVzdE1lc3NhZ2UobWVzc2FnZSkpIHtcbiAgICB2b2lkIHNodXRkb3duUnVubmVyKHtcbiAgICAgIGV4aXRDb2RlOiBtZXNzYWdlLnJlYXNvbiA9PT0gXCJwYXJlbnRfcmV0aXJlX2RyYWluZWRcIiA/IDAgOiAxLFxuICAgICAgcmVhc29uOiBtZXNzYWdlLnJlYXNvbixcbiAgICAgIHNodXRkb3duUmVxdWVzdGVkQXRNczogbWVzc2FnZS5zaHV0ZG93blJlcXVlc3RlZEF0TXMsXG4gICAgICBzaWduYWw6IG1lc3NhZ2Uuc2lnbmFsXG4gICAgfSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChpc01lbW9yeU9ic2VydmF0aW9uUmVxdWVzdE1lc3NhZ2UobWVzc2FnZSkpIHtcbiAgICBzZW5kTWVtb3J5T2JzZXJ2YXRpb24oKVxuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKCFpc0pvYk1lc3NhZ2UobWVzc2FnZSkgfHwgcnVubmluZ0pvYklkcy5oYXMobWVzc2FnZS5wYXlsb2FkLmlkKSkgcmV0dXJuXG5cbiAgcnVubmluZ0pvYklkcy5hZGQobWVzc2FnZS5wYXlsb2FkLmlkKVxuICB1cGRhdGVQcm9jZXNzVGl0bGUoKVxuICBzZW5kQ2hpbGRBY2NlcHRhbmNlKFwiam9iLXJlY2VpdmVkXCIsIG1lc3NhZ2UucGF5bG9hZCwgRGF0ZS5ub3coKSlcbiAgc3RhcnRNZW1vcnlPYnNlcnZhdGlvblNhbXBsaW5nKClcbiAgdm9pZCBydW5Kb2IobWVzc2FnZS5wYXlsb2FkLCBtZXNzYWdlLnNoYXJlZFRyYW5zYWN0aW9uQnJva2VyIHx8IHtleHBlY3RlZDogZmFsc2V9KVxufVxuXG5wcm9jZXNzLm9uKFwibWVzc2FnZVwiLCAobWVzc2FnZSkgPT4gaGFuZGxlTWVzc2FnZShtZXNzYWdlKSlcbnByb2Nlc3Mub25jZShcImRpc2Nvbm5lY3RcIiwgKCkgPT4gdm9pZCBzaHV0ZG93blJ1bm5lcih7ZXhpdENvZGU6IDAsIHJlYXNvbjogXCJpcGNfZGlzY29ubmVjdFwifSkpXG5wcm9jZXNzLm9uY2UoXCJTSUdURVJNXCIsICgpID0+IHZvaWQgc2h1dGRvd25SdW5uZXIoe2V4aXRDb2RlOiAxLCByZWFzb246IFwic2lnbmFsX3NpZ3Rlcm1cIiwgc2lnbmFsOiBcIlNJR1RFUk1cIn0pKVxucHJvY2Vzcy5vbmNlKFwiU0lHSU5UXCIsICgpID0+IHZvaWQgc2h1dGRvd25SdW5uZXIoe2V4aXRDb2RlOiAxLCByZWFzb246IFwic2lnbmFsX3NpZ2ludFwiLCBzaWduYWw6IFwiU0lHSU5UXCJ9KSlcbmlmIChwcm9jZXNzLnNlbmQpIHByb2Nlc3Muc2VuZCh7Y2hpbGRJbnN0YW5jZUlkLCBjaGlsZFBpZDogcHJvY2Vzcy5waWQsIHR5cGU6IFwicmVhZHlcIn0pXG4iXX0=
|
|
@@ -215,6 +215,10 @@ export type PooledChildMemoryObservation = {
|
|
|
215
215
|
* - Epoch ms the child sampled.
|
|
216
216
|
*/
|
|
217
217
|
observedAtMs: number;
|
|
218
|
+
/**
|
|
219
|
+
* - Child-reported peak RSS (kernel `VmHWM` high-water mark) in bytes, monotonic for the child's life.
|
|
220
|
+
*/
|
|
221
|
+
peakRssBytes: number;
|
|
218
222
|
/**
|
|
219
223
|
* - Resident set size in bytes at the sample.
|
|
220
224
|
*/
|
|
@@ -953,6 +957,7 @@ export type BackgroundJobSocketMessage = BackgroundJobHelloMessage | BackgroundJ
|
|
|
953
957
|
* @property {number} jobCount - In-flight job count.
|
|
954
958
|
* @property {ReturnType<typeof import("node:process").memoryUsage>} memoryUsage - Process memory breakdown at the sample.
|
|
955
959
|
* @property {number} observedAtMs - Epoch ms the child sampled.
|
|
960
|
+
* @property {number} peakRssBytes - Child-reported peak RSS (kernel `VmHWM` high-water mark) in bytes, monotonic for the child's life.
|
|
956
961
|
* @property {number} rssBytes - Resident set size in bytes at the sample.
|
|
957
962
|
* @property {"pooled-child-memory"} type - Discriminator.
|
|
958
963
|
* @property {number} uptimeMs - Process uptime in ms.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/background-jobs/types.js"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/background-jobs/types.js"],"names":[],"mappings":"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"}
|