@workflow/core 5.0.0-beta.46 → 5.0.0-beta.48
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/capabilities.d.ts +6 -5
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +14 -12
- package/dist/classify-error.d.ts.map +1 -1
- package/dist/classify-error.js +13 -3
- package/dist/describe-error.d.ts.map +1 -1
- package/dist/describe-error.js +16 -1
- package/dist/events-consumer.d.ts +29 -6
- package/dist/events-consumer.d.ts.map +1 -1
- package/dist/events-consumer.js +66 -11
- package/dist/private.d.ts +13 -11
- package/dist/private.d.ts.map +1 -1
- package/dist/private.js +57 -29
- package/dist/replay-payload-cache.d.ts +13 -17
- package/dist/replay-payload-cache.d.ts.map +1 -1
- package/dist/replay-payload-cache.js +55 -57
- package/dist/runtime/constants.d.ts +12 -10
- package/dist/runtime/constants.d.ts.map +1 -1
- package/dist/runtime/constants.js +13 -11
- package/dist/runtime/helpers.d.ts +27 -33
- package/dist/runtime/helpers.d.ts.map +1 -1
- package/dist/runtime/helpers.js +31 -43
- package/dist/runtime/quickjs-serde.d.ts.map +1 -1
- package/dist/runtime/quickjs-serde.js +62 -1
- package/dist/runtime/resume-hook.d.ts +19 -26
- package/dist/runtime/resume-hook.d.ts.map +1 -1
- package/dist/runtime/resume-hook.js +201 -255
- package/dist/runtime/resume-latency.d.ts +8 -11
- package/dist/runtime/resume-latency.d.ts.map +1 -1
- package/dist/runtime/resume-latency.js +1 -1
- package/dist/runtime/run.d.ts.map +1 -1
- package/dist/runtime/run.js +9 -13
- package/dist/runtime/runs.d.ts.map +1 -1
- package/dist/runtime/runs.js +8 -4
- package/dist/runtime/start.js +12 -10
- package/dist/runtime/suspension-handler.d.ts +54 -1
- package/dist/runtime/suspension-handler.d.ts.map +1 -1
- package/dist/runtime/suspension-handler.js +83 -20
- package/dist/runtime/vm-mode.d.ts +1 -1
- package/dist/runtime/vm-mode.d.ts.map +1 -1
- package/dist/runtime/vm-mode.js +1 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +318 -119
- package/dist/serialization/reducers/common-vm.d.ts.map +1 -1
- package/dist/serialization/reducers/common-vm.js +38 -1
- package/dist/serialization/reducers/common.d.ts.map +1 -1
- package/dist/serialization/reducers/common.js +26 -2
- package/dist/serialization/types.d.ts +7 -0
- package/dist/serialization/types.d.ts.map +1 -1
- package/dist/serialization/types.js +1 -1
- package/dist/serialization.d.ts +27 -5
- package/dist/serialization.d.ts.map +1 -1
- package/dist/serialization.js +185 -44
- package/dist/telemetry/semantic-conventions.d.ts +41 -7
- package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
- package/dist/telemetry/semantic-conventions.js +30 -6
- package/dist/telemetry.d.ts +12 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +62 -2
- package/dist/version.d.ts +1 -1
- package/dist/version.js +2 -2
- package/dist/vm/script-cache.d.ts +9 -11
- package/dist/vm/script-cache.d.ts.map +1 -1
- package/dist/vm/script-cache.js +25 -40
- package/dist/workflow/sleep.d.ts.map +1 -1
- package/dist/workflow/sleep.js +3 -6
- package/dist/workflow.d.ts +16 -0
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +72 -27
- package/docs/foundations/errors-and-retries.mdx +1 -1
- package/package.json +10 -10
package/dist/telemetry.js
CHANGED
|
@@ -164,6 +164,20 @@ const StepExecutionDurationHistogram = once(async () => {
|
|
|
164
164
|
// OTel registration, which is the whole point of the log. With several copies
|
|
165
165
|
// in a process, each one's view is what is worth seeing.
|
|
166
166
|
let otelDiagLogged = false;
|
|
167
|
+
function describeThrownValue(value) {
|
|
168
|
+
try {
|
|
169
|
+
if (typeof value === 'object' &&
|
|
170
|
+
value !== null &&
|
|
171
|
+
'message' in value &&
|
|
172
|
+
typeof value.message === 'string') {
|
|
173
|
+
return value.message;
|
|
174
|
+
}
|
|
175
|
+
return String(value);
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
return 'Unknown error';
|
|
179
|
+
}
|
|
180
|
+
}
|
|
167
181
|
function logOtelDiagnosticOnce(otel, tracer) {
|
|
168
182
|
const debugEnabled = typeof process !== 'undefined' &&
|
|
169
183
|
typeof process.env.DEBUG === 'string' &&
|
|
@@ -214,7 +228,7 @@ export async function trace(spanName, ...args) {
|
|
|
214
228
|
else {
|
|
215
229
|
span.setStatus({
|
|
216
230
|
code: otel.SpanStatusCode.ERROR,
|
|
217
|
-
message: e
|
|
231
|
+
message: describeThrownValue(e),
|
|
218
232
|
});
|
|
219
233
|
}
|
|
220
234
|
throw e;
|
|
@@ -224,6 +238,52 @@ export async function trace(spanName, ...args) {
|
|
|
224
238
|
}
|
|
225
239
|
});
|
|
226
240
|
}
|
|
241
|
+
/** Starts a child span without installing it as the active context. */
|
|
242
|
+
export async function startTraceSpan(spanName) {
|
|
243
|
+
const [tracer, otel] = await Promise.all([Tracer.value, OtelApi.value]);
|
|
244
|
+
if (!tracer || !otel)
|
|
245
|
+
return { end() { }, fail() { } };
|
|
246
|
+
const span = tracer.startSpan(spanName);
|
|
247
|
+
let ended = false;
|
|
248
|
+
const finish = (status) => {
|
|
249
|
+
if (ended)
|
|
250
|
+
return;
|
|
251
|
+
ended = true;
|
|
252
|
+
span.setStatus(status);
|
|
253
|
+
span.end();
|
|
254
|
+
};
|
|
255
|
+
return {
|
|
256
|
+
end: () => finish({ code: otel.SpanStatusCode.OK }),
|
|
257
|
+
fail: (error) => finish({
|
|
258
|
+
code: otel.SpanStatusCode.ERROR,
|
|
259
|
+
message: describeThrownValue(error),
|
|
260
|
+
}),
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
/** Bind work to the currently active span even when it starts from a child. */
|
|
264
|
+
export async function bindActiveTraceContext(fn) {
|
|
265
|
+
const otel = await OtelApi.value;
|
|
266
|
+
return otel ? otel.context.bind(otel.context.active(), fn) : fn;
|
|
267
|
+
}
|
|
268
|
+
/** Keeps a parked workflow's ambient trace context aligned with each resume. */
|
|
269
|
+
export async function createRefreshableTraceContext() {
|
|
270
|
+
const otel = await OtelApi.value;
|
|
271
|
+
if (!otel) {
|
|
272
|
+
return { refresh() { }, run: (fn) => fn() };
|
|
273
|
+
}
|
|
274
|
+
let current = otel.context.active();
|
|
275
|
+
const context = {
|
|
276
|
+
getValue: (key) => current.getValue(key),
|
|
277
|
+
setValue: (key, value) => current.setValue(key, value),
|
|
278
|
+
deleteValue: (key) => current.deleteValue(key),
|
|
279
|
+
};
|
|
280
|
+
return {
|
|
281
|
+
refresh: () => {
|
|
282
|
+
current = otel.context.active();
|
|
283
|
+
},
|
|
284
|
+
run: (fn) => otel.context.with(context, fn),
|
|
285
|
+
};
|
|
286
|
+
}
|
|
227
287
|
/**
|
|
228
288
|
* Emit a span whose start is back-dated to `startEpochMs` and whose end is now,
|
|
229
289
|
* so its duration reflects an interval only measurable at its end (e.g.
|
|
@@ -364,4 +424,4 @@ export async function getWorkflowBaggage() {
|
|
|
364
424
|
workflowName: name,
|
|
365
425
|
};
|
|
366
426
|
}
|
|
367
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVsZW1ldHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RlbGVtZXRyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sS0FBSyxJQUFJLE1BQU0scUNBQXFDLENBQUM7QUFvQjVEOzs7O0dBSUc7QUFDSCxNQUFNLGlCQUFpQixHQUFHLGVBQWUsQ0FDdkMsbUNBQW1DLEVBQ25DLENBQUMsRUFDRCxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLElBQUksR0FBRyxFQUFVLEVBQUUsQ0FBQyxDQUM1QyxDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsb0JBQW9CO0lBQ2xDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUM7SUFDOUMsSUFBSSxLQUFLLEtBQUssWUFBWTtRQUFFLE9BQU8sWUFBWSxDQUFDO0lBQ2hELElBQ0UsS0FBSztRQUNMLEtBQUssS0FBSyxRQUFRO1FBQ2xCLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFDMUMsQ0FBQztRQUNELGlCQUFpQixDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsYUFBYSxDQUFDLElBQUksQ0FDaEIsMkNBQTJDLEtBQUssaUVBQWlFLENBQ2xILENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FDbEMsT0FBMkM7SUFFM0MsT0FBTyxPQUFPLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxJ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Q2pELENBQUMsQ0FBQztJQUVILDBDQUEwQztJQUMxQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUNwRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUNyQixPQUFPLENBQ1IsQ0FBQztJQUVGLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMzRCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxrQkFBa0I7SUFHdEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQ2pDLElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLElBQUksQ0FBQyxPQUFPO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFL0IsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUN6RCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUV0RCxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRXRDLE9BQU87UUFDTCxhQUFhLEVBQUUsS0FBSztRQUNwQixZQUFZLEVBQUUsSUFBSTtLQUNuQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlICogYXMgYXBpIGZyb20gJ0BvcGVudGVsZW1ldHJ5L2FwaSc7XG5pbXBvcnQgdHlwZSB7IFNwYW4sIFNwYW5LaW5kLCBTcGFuT3B0aW9ucyB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2FwaSc7XG5pbXBvcnQgeyBnbG9iYWxTaW5nbGV0b24sIG9uY2UgfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuaW1wb3J0IHsgV29ya2Zsb3dTdXNwZW5zaW9uIH0gZnJvbSAnLi9nbG9iYWwuanMnO1xuaW1wb3J0IHsgcnVudGltZUxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmltcG9ydCAqIGFzIEF0dHIgZnJvbSAnLi90ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnMuanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRyYWNlIENvbnRleHQgUHJvcGFnYXRpb24gVXRpbGl0aWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBDb250cm9scyBob3cgd29ya2Zsb3cvc3RlcCBxdWV1ZS1oYW5kbGVyIHNwYW5zIHJlbGF0ZSB0byB0aGUgcnVuLW9yaWdpblxuICogdHJhY2UgY29udGV4dCBjYXJyaWVkIGluIHF1ZXVlIG1lc3NhZ2VzOlxuICpcbiAqIC0gYCdsaW5rZWQnYCAoZGVmYXVsdCk6IGVhY2ggaW52b2NhdGlvbiBzdGFydHMgYSBORVcgcm9vdCB0cmFjZTsgdGhlXG4gKiAgIHJ1bi1vcmlnaW4gY29udGV4dCAoYW5kIHRoZSBpbmNvbWluZyBkZWxpdmVyeSBjb250ZXh0KSBhcmUgYXR0YWNoZWQgYXNcbiAqICAgc3BhbiBsaW5rcy4gVGhpcyBrZWVwcyB0cmFjZXMgYm91bmRlZCBwZXIgaW52b2NhdGlvbiBpbnN0ZWFkIG9mXG4gKiAgIHN0aXRjaGluZyBhIGxvbmctbGl2ZWQgcnVuIGludG8gb25lIGdpYW50IHRyYWNlLlxuICogLSBgJ2NvbnRpbnVvdXMnYDogdGhlIHJlc3RvcmVkIHJ1bi1vcmlnaW4gY29udGV4dCBiZWNvbWVzIHRoZSBwYXJlbnQgb2ZcbiAqICAgdGhlIGludm9jYXRpb24gc3BhbiAobGVnYWN5IGJlaGF2aW9yKSwgcHJvZHVjaW5nIGEgc2luZ2xlIHRyYWNlIHRoYXRcbiAqICAgc3BhbnMgdGhlIGVudGlyZSBydW4uXG4gKi9cbmV4cG9ydCB0eXBlIFdvcmtmbG93VHJhY2VNb2RlID0gJ2xpbmtlZCcgfCAnY29udGludW91cyc7XG5cbi8qKlxuICogVW5yZWNvZ25pemVkIGBXT1JLRkxPV19UUkFDRV9NT0RFYCB2YWx1ZXMgd2UgYWxyZWFkeSB3YXJuZWQgYWJvdXQuIE9uXG4gKiBgZ2xvYmFsVGhpc2AgKHNlZSBgZ2xvYmFsU2luZ2xldG9uYCkgc28gdGhlIHdhcm5pbmcgc3RheXMgb25jZSBwZXIgcHJvY2Vzc1xuICogcmF0aGVyIHRoYW4gb25jZSBwZXIgYnVuZGxlciBsYXllci5cbiAqL1xuY29uc3QgdHJhY2VNb2RlV2FybmluZ3MgPSBnbG9iYWxTaW5nbGV0b24oXG4gICdAd29ya2Zsb3cvY29yZS8vdHJhY2VNb2RlV2FybmluZ3MnLFxuICAxLFxuICAoKSA9PiAoeyB1bnJlY29nbml6ZWQ6IG5ldyBTZXQ8c3RyaW5nPigpIH0pXG4pO1xuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBhY3RpdmUgdHJhY2UgbW9kZSBmcm9tIHRoZSBgV09SS0ZMT1dfVFJBQ0VfTU9ERWAgZW52IHZhci5cbiAqIERlZmF1bHRzIHRvIGAnbGlua2VkJ2A7IGFueSB2YWx1ZSBvdGhlciB0aGFuIGAnY29udGludW91cydgIHNlbGVjdHMgaXQuXG4gKiBVbnJlY29nbml6ZWQgbm9uLWVtcHR5IHZhbHVlcyAoZS5nLiB0eXBvcyBsaWtlIGBjb250aW5vdXNgKSBlbWl0IGFcbiAqIG9uZS10aW1lIHdhcm5pbmcgc28gc2lsZW50IGZhbGxiYWNrIHRvIGBsaW5rZWRgIGlzIGF0IGxlYXN0IHZpc2libGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3JrZmxvd1RyYWNlTW9kZSgpOiBXb3JrZmxvd1RyYWNlTW9kZSB7XG4gIGNvbnN0IHZhbHVlID0gcHJvY2Vzcy5lbnYuV09SS0ZMT1dfVFJBQ0VfTU9ERTtcbiAgaWYgKHZhbHVlID09PSAnY29udGludW91cycpIHJldHVybiAnY29udGludW91cyc7XG4gIGlmIChcbiAgICB2YWx1ZSAmJlxuICAgIHZhbHVlICE9PSAnbGlua2VkJyAmJlxuICAgICF0cmFjZU1vZGVXYXJuaW5ncy51bnJlY29nbml6ZWQuaGFzKHZhbHVlKVxuICApIHtcbiAgICB0cmFjZU1vZGVXYXJuaW5ncy51bnJlY29nbml6ZWQuYWRkKHZhbHVlKTtcbiAgICBydW50aW1lTG9nZ2VyLndhcm4oXG4gICAgICBgVW5yZWNvZ25pemVkIFdPUktGTE9XX1RSQUNFX01PREUgdmFsdWUgXCIke3ZhbHVlfVwiOyBleHBlY3RlZCBcImxpbmtlZFwiIG9yIFwiY29udGludW91c1wiLiBGYWxsaW5nIGJhY2sgdG8gXCJsaW5rZWRcIi5gXG4gICAgKTtcbiAgfVxuICByZXR1cm4gJ2xpbmtlZCc7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIGEgc2VyaWFsaXplZCB0cmFjZSBjYXJyaWVyIGlzIHVzYWJsZSwgaS5lLiBwcmVzZW50IGFuZFxuICogbm9uLWVtcHR5LiBgc2VyaWFsaXplVHJhY2VDYXJyaWVyKClgIHJldHVybnMgYHt9YCB3aGVuIG5vIE9URUwgU0RLIGlzXG4gKiByZWdpc3RlcmVkIG9yIG5vIHNwYW4gaXMgYWN0aXZlLCBhbmQgYHN0YXJ0KClgIGFsd2F5cyBhdHRhY2hlcyB0aGVcbiAqIGNhcnJpZXIgdG8gdGhlIGZpcnN0IHF1ZXVlIG1lc3NhZ2UsIHNvIGFuIGVtcHR5IGNhcnJpZXIgbXVzdCBiZSB0cmVhdGVkXG4gKiB0aGUgc2FtZSBhcyBhbiBhYnNlbnQgb25lIHdoZXJldmVyIHRoZSB0cmFjZS1tb2RlIGxvZ2ljIGJyYW5jaGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNVc2FibGVUcmFjZUNhcnJpZXIoXG4gIGNhcnJpZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWRcbik6IGNhcnJpZXIgaXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIHJldHVybiBjYXJyaWVyICE9PSB1bmRlZmluZWQgJiYgT2JqZWN0LmtleXMoY2FycmllcikubGVuZ3RoID4gMDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB0cmFjZSBjYXJyaWVyIHRvIGF0dGFjaCB0byBtZXNzYWdlcyB0aGUgY3VycmVudCBpbnZvY2F0aW9uXG4gKiBlbnF1ZXVlcy4gSW4gYGxpbmtlZGAgbW9kZSB0aGUgT1JJR0lOQUwgcnVuLW9yaWdpbiBjYXJyaWVyIGlzIGZvcndhcmRlZFxuICogdW5jaGFuZ2VkICh3aGVuIHVzYWJsZSkgc28gZXZlcnkgZnV0dXJlIGludm9jYXRpb24gbGlua3MgYmFjayB0byB0aGUgc2FtZVxuICogb3JpZ2luOyBvdGhlcndpc2UgKGBjb250aW51b3VzYCBtb2RlLCBvciBubyB1c2FibGUgaW5jb21pbmcgY2FycmllcilcbiAqIHRoZSBjdXJyZW50IChhY3RpdmUpIGNvbnRleHQgaXMgc2VyaWFsaXplZCwgc28gdGhlIHRyYWNlIGtlZXBzIGNoYWluaW5nXG4gKiAoY29udGludW91cykgb3IgdGhlIGZpcnN0IGluc3RydW1lbnRlZCBpbnZvY2F0aW9uIGJlY29tZXMgdGhlIGRlLWZhY3RvXG4gKiBvcmlnaW4gKGxpbmtlZCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXh0VHJhY2VDYXJyaWVyKFxuICB0cmFjZU1vZGU6IFdvcmtmbG93VHJhY2VNb2RlLFxuICBpbmNvbWluZ0NhcnJpZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWRcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICByZXR1cm4gdHJhY2VNb2RlID09PSAnbGlua2VkJyAmJiBpc1VzYWJsZVRyYWNlQ2FycmllcihpbmNvbWluZ0NhcnJpZXIpXG4gICAgPyBQcm9taXNlLnJlc29sdmUoaW5jb21pbmdDYXJyaWVyKVxuICAgIDogc2VyaWFsaXplVHJhY2VDYXJyaWVyKCk7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBzcGFuIGxpbmtzIGZvciBhIHF1ZXVlLWRlbGl2ZXJlZCBpbnZvY2F0aW9uIHNwYW5cbiAqIChgd29ya2Zsb3cuZXhlY3V0ZWAgLyBgc3RlcC5leGVjdXRlYCk6XG4gKlxuICogLSBJbiBgbGlua2VkYCBtb2RlIHRoZSBpbnZvY2F0aW9uIHNwYW4gaXMgYSBDSElMRCBvZiB0aGUgbG9jYWwgZGVsaXZlcnlcbiAqICAgKGZsb3ctcm91dGUpIGNvbnRleHQsIHNvIHRoZSBvbmx5IGxpbmsgaXMgdG8gdGhlIHJ1bi1vcmlnaW4gY29udGV4dFxuICogICBmcm9tIHRoZSBtZXNzYWdlJ3MgdHJhY2UgY2FycmllciwgY29ubmVjdGluZyB0aGlzIGJvdW5kZWQgcGVyLWludm9jYXRpb25cbiAqICAgdHJhY2UgYmFjayB0byB3aGVyZSB0aGUgcnVuIHdhcyBzdGFydGVkLiBUaGUgcnVuLW9yaWdpbiBjb250ZXh0IGlzIGFcbiAqICAgbGluaywgbmV2ZXIgYSBwYXJlbnQsIGFuZCByZS1lbnF1ZXVlcyBmb3J3YXJkIHRoZSBvcmlnaW5hbCBjYXJyaWVyXG4gKiAgIHVuY2hhbmdlZCwgc28gdGhlIHdob2xlIHJ1biBpcyBuZXZlciBzdGl0Y2hlZCBpbnRvIG9uZSBnaWFudCB0cmFjZS5cbiAqICAgVGhlIGxpbmsgaXMgc2tpcHBlZCB3aGVuIHRoZSBjYXJyaWVyIGlzIGFic2VudCwgZW1wdHksIG9yIGludmFsaWQuXG4gKiAtIEluIGBjb250aW51b3VzYCBtb2RlIHRoZSBydW4tb3JpZ2luIGNvbnRleHQgaXMgcmVzdG9yZWQgYXMgdGhlIHBhcmVudFxuICogICBpbnN0ZWFkLCBhbmQgdGhlIGxpbmsgcG9pbnRzIGF0IHRoZSBpbmNvbWluZyBkZWxpdmVyeSBjb250ZXh0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRJbnZvY2F0aW9uU3BhbkxpbmtzKFxuICB0cmFjZU1vZGU6IFdvcmtmbG93VHJhY2VNb2RlLFxuICBpbmNvbWluZ0NhcnJpZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWRcbik6IFByb21pc2U8YXBpLkxpbmtbXSB8IHVuZGVmaW5lZD4ge1xuICBpZiAodHJhY2VNb2RlICE9PSAnbGlua2VkJykgcmV0dXJuIGxpbmtUb0N1cnJlbnRDb250ZXh0KCk7XG4gIGNvbnN0IG9yaWdpbkxpbmsgPSBhd2FpdCBsaW5rVG9UcmFjZUNhcnJpZXIoXG4gICAgaXNVc2FibGVUcmFjZUNhcnJpZXIoaW5jb21pbmdDYXJyaWVyKSA/IGluY29taW5nQ2FycmllciA6IHVuZGVmaW5lZFxuICApO1xuICByZXR1cm4gb3JpZ2luTGluayA/IFtvcmlnaW5MaW5rXSA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBjdXJyZW50IHRyYWNlIGNvbnRleHQgaW50byBhIGZvcm1hdCB0aGF0IGNhbiBiZSBwYXNzZWQgdGhyb3VnaCBxdWV1ZXNcbiAqIEByZXR1cm5zIEEgcmVjb3JkIG9mIHN0cmluZ3MgcmVwcmVzZW50aW5nIHRoZSB0cmFjZSBjb250ZXh0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXJpYWxpemVUcmFjZUNhcnJpZXIoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XG4gIGNvbnN0IG90ZWwgPSBhd2FpdCBPdGVsQXBpLnZhbHVlO1xuICBpZiAoIW90ZWwpIHJldHVybiB7fTtcbiAgY29uc3QgY2FycmllcjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAvLyBJbmplY3QgdGhlIGN1cnJlbnQgY29udGV4dCBpbnRvIHRoZSBjYXJyaWVyXG4gIG90ZWwucHJvcGFnYXRpb24uaW5qZWN0KG90ZWwuY29udGV4dC5hY3RpdmUoKSwgY2Fycmllcik7XG4gIHJldHVybiBjYXJyaWVyO1xufVxuXG4vKipcbiAqIERlc2VyaWFsaXplcyB0cmFjZSBjb250ZXh0IGFuZCByZXR1cm5zIGEgY29udGV4dCB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbnRpbnVlIHRoZSB0cmFjZVxuICogQHBhcmFtIHRyYWNlQ2FycmllciBUaGUgc2VyaWFsaXplZCB0cmFjZSBjb250ZXh0XG4gKiBAcmV0dXJucyBPcGVuVGVsZW1ldHJ5IGNvbnRleHQgd2l0aCB0aGUgcmVzdG9yZWQgdHJhY2VcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlc2VyaWFsaXplVHJhY2VDYXJyaWVyKFxuICB0cmFjZUNhcnJpZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbikge1xuICBjb25zdCBvdGVsID0gYXdhaXQgT3RlbEFwaS52YWx1ZTtcbiAgaWYgKCFvdGVsKSByZXR1cm47XG4gIC8vIEV4dHJhY3QgdGhlIGNvbnRleHQgZnJvbSB0aGUgY2FycmllclxuICByZXR1cm4gb3RlbC5wcm9wYWdhdGlvbi5leHRyYWN0KG90ZWwuY29udGV4dC5hY3RpdmUoKSwgdHJhY2VDYXJyaWVyKTtcbn1cblxuLyoqXG4gKiBSdW5zIGEgZnVuY3Rpb24gd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgZGVzZXJpYWxpemVkIHRyYWNlXG4gKiBAcGFyYW0gdHJhY2VDYXJyaWVyIFRoZSBzZXJpYWxpemVkIHRyYWNlIGNhcnJpZXIgKG9wdGlvbmFsKVxuICogQHBhcmFtIGZuIFRoZSBmdW5jdGlvbiB0byBydW4gd2l0aGluIHRoZSB0cmFjZSBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvblxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aFRyYWNlQ29udGV4dDxUPihcbiAgdHJhY2VDYXJyaWVyOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkLFxuICBmbjogKCkgPT4gUHJvbWlzZTxUPlxuKTogUHJvbWlzZTxUPiB7XG4gIGlmICghdHJhY2VDYXJyaWVyKSB7XG4gICAgcmV0dXJuIGZuKCk7XG4gIH1cblxuICBjb25zdCBvdGVsID0gYXdhaXQgT3RlbEFwaS52YWx1ZTtcbiAgaWYgKCFvdGVsKSByZXR1cm4gZm4oKTtcblxuICBjb25zdCBleHRyYWN0ZWRDb250ZXh0ID0gYXdhaXQgZGVzZXJpYWxpemVUcmFjZUNhcnJpZXIodHJhY2VDYXJyaWVyKTtcbiAgaWYgKCFleHRyYWN0ZWRDb250ZXh0KSB7XG4gICAgcmV0dXJuIGZuKCk7XG4gIH1cblxuICByZXR1cm4gb3RlbC5jb250ZXh0LndpdGgoZXh0cmFjdGVkQ29udGV4dCwgYXN5bmMgKCkgPT4gYXdhaXQgZm4oKSk7XG59XG5cbmNvbnN0IE90ZWxBcGkgPSBvbmNlKGFzeW5jICgpID0+IHtcbiAgLy8gYEBvcGVudGVsZW1ldHJ5L2FwaWAgaXMgYW4gb3B0aW9uYWwgcGVlciBkZXBlbmRlbmN5LiBUaGUgc3RhdGljIHNwZWNpZmllclxuICAvLyBpcyBpbnRlbnRpb25hbDogZXNidWlsZC1idW5kbGVkIHRhcmdldHMgKHRoZSBDTEknc1xuICAvLyBgdmVyY2VsLWJ1aWxkLW91dHB1dC1hcGlgIGJ1aWxkLCBOaXRybywgQXN0cm8pIHNoaXAgYSBzZWxmLWNvbnRhaW5lZFxuICAvLyBidW5kbGUgd2l0aCBubyBub2RlX21vZHVsZXMsIHNvIHRoZSBwYWNrYWdlIG11c3QgYmUgKmlubGluZWQqIGF0IGJ1aWxkXG4gIC8vIHRpbWUgZm9yIHNwYW5zIHRvIHdvcmsgYXQgcnVudGltZTsgYSBydW50aW1lLWJ1aWx0IHNwZWNpZmllciBpcyBvcGFxdWUgdG9cbiAgLy8gZXNidWlsZCBhbmQgd291bGQgc2lsZW50bHkgZGlzYWJsZSB0cmFjaW5nIHRoZXJlLiBCdW5kbGVycyB0aGF0IHJlamVjdCBhblxuICAvLyB1bnJlc29sdmFibGUgc3RhdGljIGBpbXBvcnQoKWAgd2hlbiB0aGUgcGVlciBpc24ndCBpbnN0YWxsZWQgKFJvbGx1cC9WaXRlLFxuICAvLyBlLmcuIFN2ZWx0ZUtpdCkgaW5zdGVhZCBleHRlcm5hbGl6ZSBgQG9wZW50ZWxlbWV0cnkvYXBpYCBpbiB0aGUgd29ya2Zsb3dcbiAgLy8gZnJhbWV3b3JrIGludGVncmF0aW9uLCB3aGljaCBrZWVwcyB0aGUgYnVpbGQgZ3JlZW4gYW5kIHN0aWxsIGxvYWRzIHJlYWxcbiAgLy8gT1RlbCB3aGVuIHRoZSBwZWVyIGlzIHByZXNlbnQuIFJ1bnRpbWUgc2VtYW50aWNzOiBwcmVzZW50IOKGkiBsb2FkZWQsIGFic2VudFxuICAvLyDihpIgY2F1Z2h0IGFuZCB0cmFjaW5nIGRpc2FibGVkLlxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBpbXBvcnQoJ0BvcGVudGVsZW1ldHJ5L2FwaScpO1xuICB9IGNhdGNoIHtcbiAgICBydW50aW1lTG9nZ2VyLmluZm8oJ09wZW5UZWxlbWV0cnkgbm90IGF2YWlsYWJsZSwgdHJhY2luZyB3aWxsIGJlIGRpc2FibGVkJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn0pO1xuXG5jb25zdCBUcmFjZXIgPSBvbmNlKGFzeW5jICgpID0+IHtcbiAgY29uc3QgYXBpID0gYXdhaXQgT3RlbEFwaS52YWx1ZTtcbiAgaWYgKCFhcGkpIHJldHVybiBudWxsO1xuICBjb25zdCB0cmFjZXIgPSBhcGkudHJhY2UuZ2V0VHJhY2VyKCd3b3JrZmxvdycpO1xuICBsb2dPdGVsRGlhZ25vc3RpY09uY2UoYXBpLCB0cmFjZXIpO1xuICByZXR1cm4gdHJhY2VyO1xufSk7XG5cbmNvbnN0IFN0ZXBFeGVjdXRpb25EdXJhdGlvbkhpc3RvZ3JhbSA9IG9uY2UoYXN5bmMgKCkgPT4ge1xuICBjb25zdCBvdGVsID0gYXdhaXQgT3RlbEFwaS52YWx1ZTtcbiAgaWYgKCFvdGVsKSByZXR1cm4gbnVsbDtcbiAgLy8gc2VydmljZS5uYW1lIGlzIGEgcmVzb3VyY2UgYXR0cmlidXRlLCBhcHBsaWVkIGJ5IHRoZSBjb25maWd1cmVkIHByb3ZpZGVyLlxuICByZXR1cm4gb3RlbC5tZXRyaWNzXG4gICAgLmdldE1ldGVyKCd3b3JrZmxvdycpXG4gICAgLmNyZWF0ZUhpc3RvZ3JhbSgnd29ya2Zsb3cuc3RlcC5leGVjdXRlLmR1cmF0aW9uJywge1xuICAgICAgZGVzY3JpcHRpb246ICdEdXJhdGlvbiBvZiB1c2VyIHN0ZXAgZXhlY3V0aW9uJyxcbiAgICAgIHVuaXQ6ICdtcycsXG4gICAgfSk7XG59KTtcblxuLyoqXG4gKiBPbmUtc2hvdCBydW50aW1lIGRpYWdub3N0aWMgKERFQlVHPXdvcmtmbG93Oiogb25seSksIHNhbWUgc2hhcGUgYXMgdGhlIG9uZVxuICogd29ybGQtdmVyY2VsIGVtaXRzIHRhZ2dlZCBgd29ybGQtdmVyY2VsYDogcHJpbnRzIGhvdyB0aGlzIG1vZHVsZSBpbnN0YW5jZVxuICogb2YgYEBvcGVudGVsZW1ldHJ5L2FwaWAgc2VlcyB0aGUgZ2xvYmFsIHJlZ2lzdHJhdGlvbiwgc28gYSBkZXBsb3ltZW50J3NcbiAqIGxvZ3Mgc2hvdyB0aGUgdHdvIHBhY2thZ2VzJyB2aWV3cyBzaWRlIGJ5IHNpZGUuXG4gKi9cbi8vIHBlci1jb3B5LW9rOiB0aGlzIGRpYWdub3N0aWMgcmVwb3J0cyBob3cgVEhJUyBtb2R1bGUgaW5zdGFuY2Ugc2VlcyB0aGUgZ2xvYmFsXG4vLyBPVGVsIHJlZ2lzdHJhdGlvbiwgd2hpY2ggaXMgdGhlIHdob2xlIHBvaW50IG9mIHRoZSBsb2cuIFdpdGggc2V2ZXJhbCBjb3BpZXNcbi8vIGluIGEgcHJvY2VzcywgZWFjaCBvbmUncyB2aWV3IGlzIHdoYXQgaXMgd29ydGggc2VlaW5nLlxubGV0IG90ZWxEaWFnTG9nZ2VkID0gZmFsc2U7XG5mdW5jdGlvbiBsb2dPdGVsRGlhZ25vc3RpY09uY2Uob3RlbDogdHlwZW9mIGFwaSwgdHJhY2VyOiBhcGkuVHJhY2VyKTogdm9pZCB7XG4gIGNvbnN0IGRlYnVnRW5hYmxlZCA9XG4gICAgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIHByb2Nlc3MuZW52LkRFQlVHID09PSAnc3RyaW5nJyAmJlxuICAgIChwcm9jZXNzLmVudi5ERUJVRy5pbmNsdWRlcygnd29ya2Zsb3c6JykgfHwgcHJvY2Vzcy5lbnYuREVCVUcgPT09ICcqJyk7XG4gIGlmIChvdGVsRGlhZ0xvZ2dlZCB8fCAhZGVidWdFbmFibGVkKSByZXR1cm47XG4gIG90ZWxEaWFnTG9nZ2VkID0gdHJ1ZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBnID0gKGdsb2JhbFRoaXMgYXMgUmVjb3JkPHN5bWJvbCwgdW5rbm93bj4pW1xuICAgICAgU3ltYm9sLmZvcignb3BlbnRlbGVtZXRyeS5qcy5hcGkuMScpXG4gICAgXSBhcyB7IHZlcnNpb24/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwcm92aWRlciA9IG90ZWwudHJhY2UuZ2V0VHJhY2VyUHJvdmlkZXIoKTtcbiAgICBjb25zdCBkZWxlZ2F0ZSA9XG4gICAgICAocHJvdmlkZXIgYXMgeyBnZXREZWxlZ2F0ZT86ICgpID0+IHVua25vd24gfSkuZ2V0RGVsZWdhdGU/LigpID8/IHByb3ZpZGVyO1xuICAgIGNvbnN0IHByb2JlID0gdHJhY2VyLnN0YXJ0U3Bhbignd29ya2Zsb3cub3RlbC5wcm9iZS5jb3JlJyk7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgJ1t3b3JrZmxvdzpvdGVsLWRpYWddIGNvcmUnLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBnbG9iYWxSZWdpc3RyYXRpb25WZXJzaW9uOiBnPy52ZXJzaW9uID8/IG51bGwsXG4gICAgICAgIHByb3ZpZGVyQ3RvcjogcHJvdmlkZXI/LmNvbnN0cnVjdG9yPy5uYW1lID8/IG51bGwsXG4gICAgICAgIGRlbGVnYXRlQ3RvcjogKGRlbGVnYXRlIGFzIG9iamVjdCB8IG51bGwpPy5jb25zdHJ1Y3Rvcj8ubmFtZSA/PyBudWxsLFxuICAgICAgICB0cmFjZXJDdG9yOiB0cmFjZXI/LmNvbnN0cnVjdG9yPy5uYW1lID8/IG51bGwsXG4gICAgICAgIHByb2JlQ3RvcjogcHJvYmU/LmNvbnN0cnVjdG9yPy5uYW1lID8/IG51bGwsXG4gICAgICAgIHByb2JlUmVjb3JkaW5nOiBwcm9iZS5pc1JlY29yZGluZygpLFxuICAgICAgfSlcbiAgICApO1xuICAgIHByb2JlLmVuZCgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgICdbd29ya2Zsb3c6b3RlbC1kaWFnXSBjb3JlIGZhaWxlZDonLFxuICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBlcnJvclxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRyYWNlPFQ+KFxuICBzcGFuTmFtZTogc3RyaW5nLFxuICAuLi5hcmdzOlxuICAgIHwgW2ZuOiAoc3Bhbj86IFNwYW4pID0+IFByb21pc2U8VD5dXG4gICAgfCBbb3B0czogU3Bhbk9wdGlvbnMsIGZuOiAoc3Bhbj86IFNwYW4pID0+IFByb21pc2U8VD5dXG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgW3RyYWNlciwgb3RlbF0gPSBhd2FpdCBQcm9taXNlLmFsbChbVHJhY2VyLnZhbHVlLCBPdGVsQXBpLnZhbHVlXSk7XG4gIGNvbnN0IHsgZm4sIG9wdHMgfSA9XG4gICAgdHlwZW9mIGFyZ3NbMF0gPT09ICdmdW5jdGlvbidcbiAgICAgID8geyBmbjogYXJnc1swXSwgb3B0czoge30gfVxuICAgICAgOiB7IGZuOiBhcmdzWzFdLCBvcHRzOiBhcmdzWzBdIH07XG4gIGlmICghZm4pIHRocm93IG5ldyBFcnJvcignRnVuY3Rpb24gdG8gdHJhY2UgbXVzdCBiZSBwcm92aWRlZCcpO1xuXG4gIGlmICghdHJhY2VyIHx8ICFvdGVsKSB7XG4gICAgcmV0dXJuIGF3YWl0IGZuKCk7XG4gIH1cblxuICByZXR1cm4gdHJhY2VyLnN0YXJ0QWN0aXZlU3BhbihzcGFuTmFtZSwgb3B0cywgYXN5bmMgKHNwYW4pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZm4oc3Bhbik7XG4gICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IG90ZWwuU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChXb3JrZmxvd1N1c3BlbnNpb24uaXMoZSkpIHtcbiAgICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBvdGVsLlNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuICAgICAgICBhcHBseVdvcmtmbG93U3VzcGVuc2lvblRvU3BhbihlLCBzcGFuKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICBjb2RlOiBvdGVsLlNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICAgIG1lc3NhZ2U6IChlIGFzIEVycm9yKS5tZXNzYWdlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNwYW4uZW5kKCk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBFbWl0IGEgc3BhbiB3aG9zZSBzdGFydCBpcyBiYWNrLWRhdGVkIHRvIGBzdGFydEVwb2NoTXNgIGFuZCB3aG9zZSBlbmQgaXMgbm93LFxuICogc28gaXRzIGR1cmF0aW9uIHJlZmxlY3RzIGFuIGludGVydmFsIG9ubHkgbWVhc3VyYWJsZSBhdCBpdHMgZW5kIChlLmcuXG4gKiB0aW1lLXRvLWZpcnN0LWNodW5rLCBrbm93biB3aGVuIHRoZSBmaXJzdCBjaHVuayBhcnJpdmVzKS4gVW5saWtlIGB0cmFjZSgpYCxcbiAqIHRoaXMgcmVjb3JkcyBhbiBhbHJlYWR5LWVsYXBzZWQgc3BhbiBpbiBvbmUgc2hvdCByYXRoZXIgdGhhbiB3cmFwcGluZyBhXG4gKiBjYWxsYmFjay4gTm8tb3Agd2hlbiBPcGVuVGVsZW1ldHJ5IGlzIG5vdCBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWNvcmRFbGFwc2VkU3BhbihcbiAgc3Bhbk5hbWU6IHN0cmluZyxcbiAgc3RhcnRFcG9jaE1zOiBudW1iZXIsXG4gIG9wdHM/OiBTcGFuT3B0aW9uc1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHRyYWNlciA9IGF3YWl0IFRyYWNlci52YWx1ZTtcbiAgaWYgKCF0cmFjZXIpIHJldHVybjtcbiAgdHJhY2VyLnN0YXJ0U3BhbihzcGFuTmFtZSwgeyAuLi5vcHRzLCBzdGFydFRpbWU6IHN0YXJ0RXBvY2hNcyB9KS5lbmQoKTtcbn1cblxuLyoqXG4gKiBSZWNvcmRzIHRoZSBzYW1lIHVzZXItY29kZSBpbnRlcnZhbCBhcyB0aGUgaW5uZXIgYHN0ZXAuZXhlY3V0ZWAgc3Bhbi4gVGhlXG4gKiBjb25maWd1cmVkIE9wZW5UZWxlbWV0cnkgbWV0ZXIgcHJvdmlkZXIgYXR0YWNoZXMgcmVzb3VyY2UgZGltZW5zaW9ucyBzdWNoIGFzXG4gKiBzZXJ2aWNlLm5hbWUsIHNvIHRoaXMgYXZvaWRzIGFjY2VwdGluZyBhIGNhbGxlci1jb250cm9sbGVkIHNlcnZpY2UgdGFnLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVjb3JkU3RlcEV4ZWN1dGlvbkR1cmF0aW9uKFxuICBkdXJhdGlvbk1zOiBudW1iZXIsXG4gIHN0YXR1czogJ29rJyB8ICdlcnJvcidcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBoaXN0b2dyYW0gPSBhd2FpdCBTdGVwRXhlY3V0aW9uRHVyYXRpb25IaXN0b2dyYW0udmFsdWU7XG4gIGhpc3RvZ3JhbT8ucmVjb3JkKGR1cmF0aW9uTXMsIHsgJ3dvcmtmbG93LnN0ZXAuc3RhdHVzJzogc3RhdHVzIH0pO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgdGhlIHdvcmtmbG93IHN1c3BlbnNpb24gYWxnZWJyYWljIGVmZmVjdCB0byBhbiBhY3RpdmUgc3Bhbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5V29ya2Zsb3dTdXNwZW5zaW9uVG9TcGFuKFxuICBlcnJvcjogV29ya2Zsb3dTdXNwZW5zaW9uLFxuICBzcGFuOiBhcGkuU3BhblxuKTogdm9pZCB7XG4gIHNwYW4uc2V0QXR0cmlidXRlcyh7XG4gICAgLi4uQXR0ci5Xb3JrZmxvd1N1c3BlbnNpb25TdGF0ZSgnc3VzcGVuZGVkJyksXG4gICAgLi4uQXR0ci5Xb3JrZmxvd1N1c3BlbnNpb25TdGVwQ291bnQoZXJyb3Iuc3RlcENvdW50KSxcbiAgICAuLi5BdHRyLldvcmtmbG93U3VzcGVuc2lvbkhvb2tDb3VudChlcnJvci5ob29rQ291bnQpLFxuICAgIC4uLkF0dHIuV29ya2Zsb3dTdXNwZW5zaW9uV2FpdENvdW50KGVycm9yLndhaXRDb3VudCksXG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U3BhbkNvbnRleHRGb3JUcmFjZUNhcnJpZXIoXG4gIGNhcnJpZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbikge1xuICBjb25zdCBbZGVzZXJpYWxpemVkLCBvdGVsXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBkZXNlcmlhbGl6ZVRyYWNlQ2FycmllcihjYXJyaWVyKSxcbiAgICBPdGVsQXBpLnZhbHVlLFxuICBdKTtcbiAgaWYgKCFkZXNlcmlhbGl6ZWQgfHwgIW90ZWwpIHJldHVybjtcbiAgcmV0dXJuIG90ZWwudHJhY2UuZ2V0U3BhbkNvbnRleHQoZGVzZXJpYWxpemVkKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEFjdGl2ZVNwYW4oKSB7XG4gIHJldHVybiBhd2FpdCB3aXRoT3RlbCgob3RlbCkgPT4gb3RlbC50cmFjZS5nZXRBY3RpdmVTcGFuKCkpO1xufVxuXG4vKipcbiAqIFdyYXBzIGFsbCBtZXRob2RzIG9mIGFuIG9iamVjdCB3aXRoIHRyYWNpbmcgc3BhbnMuXG4gKiBAcGFyYW0gcHJlZml4IC0gUHJlZml4IGZvciBzcGFuIG5hbWVzIChlLmcuLCBcIldPUkxELnJ1bnNcIilcbiAqIEBwYXJhbSBvIC0gT2JqZWN0IHdpdGggbWV0aG9kcyB0byBpbnN0cnVtZW50XG4gKiBAcmV0dXJucyBJbnN0cnVtZW50ZWQgb2JqZWN0IHdpdGggc2FtZSBpbnRlcmZhY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3RydW1lbnRPYmplY3Q8VCBleHRlbmRzIG9iamVjdD4ocHJlZml4OiBzdHJpbmcsIG86IFQpOiBUIHtcbiAgY29uc3QgaGFuZGxlcnMgPSB7fSBhcyBUO1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvKSBhcyAoa2V5b2YgVClbXSkge1xuICAgIGlmICh0eXBlb2Ygb1trZXldICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBoYW5kbGVyc1trZXldID0gb1trZXldO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmID0gb1trZXldO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgaGFuZGxlcnNba2V5XSA9IGFzeW5jICguLi5hcmdzOiBhbnlbXSkgPT5cbiAgICAgICAgdHJhY2UoYCR7cHJlZml4fS4ke1N0cmluZyhrZXkpfWAsIHt9LCAoKSA9PiBmKC4uLmFyZ3MpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGhhbmRsZXJzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U3BhbktpbmQoZmllbGQ6IGtleW9mIHR5cGVvZiBTcGFuS2luZCkge1xuICByZXR1cm4gd2l0aE90ZWwoKHgpID0+IHguU3BhbktpbmRbZmllbGRdKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdpdGhPdGVsPFQ+KFxuICBmbjogKG90ZWw6IHR5cGVvZiBhcGkpID0+IFRcbik6IFByb21pc2U8QXdhaXRlZDxUPiB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBvdGVsID0gYXdhaXQgT3RlbEFwaS52YWx1ZTtcbiAgaWYgKCFvdGVsKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gYXdhaXQgZm4ob3RlbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5rVG9DdXJyZW50Q29udGV4dCgpOiBQcm9taXNlPFthcGkuTGlua10gfCB1bmRlZmluZWQ+IHtcbiAgcmV0dXJuIHdpdGhPdGVsKChvdGVsKTogW2FwaS5MaW5rXSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3QgY29udGV4dCA9IG90ZWwudHJhY2UuZ2V0QWN0aXZlU3BhbigpPy5zcGFuQ29udGV4dCgpO1xuICAgIGlmICghY29udGV4dCkgcmV0dXJuO1xuICAgIHJldHVybiBbeyBjb250ZXh0IH1dO1xuICB9KTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSBzcGFuIGxpbmsgcG9pbnRpbmcgYXQgdGhlIHNwYW4gY29udGV4dCBlbWJlZGRlZCBpbiBhIHNlcmlhbGl6ZWRcbiAqIHRyYWNlIGNhcnJpZXIgKGUuZy4gdGhlIHJ1bi1vcmlnaW4gY29udGV4dCBmbG93aW5nIHRocm91Z2ggcXVldWVcbiAqIG1lc3NhZ2VzKS4gUmV0dXJucyBgdW5kZWZpbmVkYCB3aGVuIE9URUwgaXMgdW5hdmFpbGFibGUsIHRoZSBjYXJyaWVyIGlzXG4gKiBhYnNlbnQsIG9yIGl0IGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBzcGFuIGNvbnRleHQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaW5rVG9UcmFjZUNhcnJpZXIoXG4gIGNhcnJpZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWRcbik6IFByb21pc2U8YXBpLkxpbmsgfCB1bmRlZmluZWQ+IHtcbiAgaWYgKCFjYXJyaWVyKSByZXR1cm47XG4gIGNvbnN0IFtjb250ZXh0LCBvdGVsXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBnZXRTcGFuQ29udGV4dEZvclRyYWNlQ2FycmllcihjYXJyaWVyKSxcbiAgICBPdGVsQXBpLnZhbHVlLFxuICBdKTtcbiAgaWYgKCFjb250ZXh0IHx8ICFvdGVsKSByZXR1cm47XG4gIGlmICghb3RlbC50cmFjZS5pc1NwYW5Db250ZXh0VmFsaWQoY29udGV4dCkpIHJldHVybjtcbiAgcmV0dXJuIHsgY29udGV4dCB9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEJhZ2dhZ2UgUHJvcGFnYXRpb24gVXRpbGl0aWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBXb3JrZmxvdyBjb250ZXh0IHRvIHByb3BhZ2F0ZSB2aWEgYmFnZ2FnZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93QmFnZ2FnZUNvbnRleHQge1xuICB3b3JrZmxvd1J1bklkOiBzdHJpbmc7XG4gIHdvcmtmbG93TmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNldHMgd29ya2Zsb3cgY29udGV4dCBhcyBPVEVMIGJhZ2dhZ2UgZm9yIGF1dG9tYXRpYyBwcm9wYWdhdGlvbi5cbiAqIEJhZ2dhZ2UgaXMgcHJvcGFnYXRlZCBhY3Jvc3Mgc2VydmljZSBib3VuZGFyaWVzIHZpYSBIVFRQIGhlYWRlcnMuXG4gKiBAcGFyYW0gY29udGV4dCAtIFdvcmtmbG93IGNvbnRleHQgdG8gc2V0IGFzIGJhZ2dhZ2VcbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdG8gcnVuIHdpdGhpbiB0aGUgYmFnZ2FnZSBjb250ZXh0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXRoV29ya2Zsb3dCYWdnYWdlPFQ+KFxuICBjb250ZXh0OiBXb3JrZmxvd0JhZ2dhZ2VDb250ZXh0LFxuICBmbjogKCkgPT4gUHJvbWlzZTxUPlxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IG90ZWwgPSBhd2FpdCBPdGVsQXBpLnZhbHVlO1xuICBpZiAoIW90ZWwpIHJldHVybiBmbigpO1xuXG4gIC8vIENyZWF0ZSBiYWdnYWdlIHdpdGggd29ya2Zsb3cgY29udGV4dFxuICBjb25zdCBiYWdnYWdlID0gb3RlbC5wcm9wYWdhdGlvbi5jcmVhdGVCYWdnYWdlKHtcbiAgICAnd29ya2Zsb3cucnVuX2lkJzogeyB2YWx1ZTogY29udGV4dC53b3JrZmxvd1J1bklkIH0sXG4gICAgJ3dvcmtmbG93Lm5hbWUnOiB7IHZhbHVlOiBjb250ZXh0LndvcmtmbG93TmFtZSB9LFxuICB9KTtcblxuICAvLyBTZXQgYmFnZ2FnZSBpbiBjb250ZXh0IGFuZCBydW4gZnVuY3Rpb25cbiAgY29uc3QgY29udGV4dFdpdGhCYWdnYWdlID0gb3RlbC5wcm9wYWdhdGlvbi5zZXRCYWdnYWdlKFxuICAgIG90ZWwuY29udGV4dC5hY3RpdmUoKSxcbiAgICBiYWdnYWdlXG4gICk7XG5cbiAgcmV0dXJuIG90ZWwuY29udGV4dC53aXRoKGNvbnRleHRXaXRoQmFnZ2FnZSwgKCkgPT4gZm4oKSk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHdvcmtmbG93IGNvbnRleHQgZnJvbSBPVEVMIGJhZ2dhZ2UuXG4gKiBAcmV0dXJucyBXb3JrZmxvdyBjb250ZXh0IGlmIHByZXNlbnQgaW4gYmFnZ2FnZSwgdW5kZWZpbmVkIG90aGVyd2lzZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0V29ya2Zsb3dCYWdnYWdlKCk6IFByb21pc2U8XG4gIFdvcmtmbG93QmFnZ2FnZUNvbnRleHQgfCB1bmRlZmluZWRcbj4ge1xuICBjb25zdCBvdGVsID0gYXdhaXQgT3RlbEFwaS52YWx1ZTtcbiAgaWYgKCFvdGVsKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGJhZ2dhZ2UgPSBvdGVsLnByb3BhZ2F0aW9uLmdldEJhZ2dhZ2Uob3RlbC5jb250ZXh0LmFjdGl2ZSgpKTtcbiAgaWYgKCFiYWdnYWdlKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHJ1bklkID0gYmFnZ2FnZS5nZXRFbnRyeSgnd29ya2Zsb3cucnVuX2lkJyk/LnZhbHVlO1xuICBjb25zdCBuYW1lID0gYmFnZ2FnZS5nZXRFbnRyeSgnd29ya2Zsb3cubmFtZScpPy52YWx1ZTtcblxuICBpZiAoIXJ1bklkIHx8ICFuYW1lKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIHJldHVybiB7XG4gICAgd29ya2Zsb3dSdW5JZDogcnVuSWQsXG4gICAgd29ya2Zsb3dOYW1lOiBuYW1lLFxuICB9O1xufVxuIl19
|
|
427
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVsZW1ldHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RlbGVtZXRyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sS0FBSyxJQUFJLE1BQU0scUNBQXFDLENBQUM7QUFvQjVEOzs7O0dBSUc7QUFDSCxNQUFNLGlCQUFpQixHQUFHLGVBQWUsQ0FDdkMsbUNBQW1DLEVBQ25DLENBQUMsRUFDRCxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLElBQUksR0FBRyxFQUFVLEVBQUUsQ0FBQyxDQUM1QyxDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsb0JBQW9CO0lBQ2xDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUM7SUFDOUMsSUFBSSxLQUFLLEtBQUssWUFBWTtRQUFFLE9BQU8sWUFBWSxDQUFDO0lBQ2hELElBQ0UsS0FBSztRQUNMLEtBQUssS0FBSyxRQUFRO1FBQ2xCLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFDMUMsQ0FBQztRQUNELGlCQUFpQixDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsYUFBYSxDQUFDLElBQUksQ0FDaEIsMkNBQTJDLEtBQUssaUVBQWlFLENBQ2xILENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FDbEMsT0FBMkM7SUFFM0MsT0FBTyxPQUFPLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxJ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USxDQUFDLGVBQWUsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUV0RCxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRXRDLE9BQU87UUFDTCxhQUFhLEVBQUUsS0FBSztRQUNwQixZQUFZLEVBQUUsSUFBSTtLQUNuQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlICogYXMgYXBpIGZyb20gJ0BvcGVudGVsZW1ldHJ5L2FwaSc7XG5pbXBvcnQgdHlwZSB7IFNwYW4sIFNwYW5LaW5kLCBTcGFuT3B0aW9ucyB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2FwaSc7XG5pbXBvcnQgeyBnbG9iYWxTaW5nbGV0b24sIG9uY2UgfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuaW1wb3J0IHsgV29ya2Zsb3dTdXNwZW5zaW9uIH0gZnJvbSAnLi9nbG9iYWwuanMnO1xuaW1wb3J0IHsgcnVudGltZUxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmltcG9ydCAqIGFzIEF0dHIgZnJvbSAnLi90ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnMuanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRyYWNlIENvbnRleHQgUHJvcGFnYXRpb24gVXRpbGl0aWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBDb250cm9scyBob3cgd29ya2Zsb3cvc3RlcCBxdWV1ZS1oYW5kbGVyIHNwYW5zIHJlbGF0ZSB0byB0aGUgcnVuLW9yaWdpblxuICogdHJhY2UgY29udGV4dCBjYXJyaWVkIGluIHF1ZXVlIG1lc3NhZ2VzOlxuICpcbiAqIC0gYCdsaW5rZWQnYCAoZGVmYXVsdCk6IGVhY2ggaW52b2NhdGlvbiBzdGFydHMgYSBORVcgcm9vdCB0cmFjZTsgdGhlXG4gKiAgIHJ1bi1vcmlnaW4gY29udGV4dCAoYW5kIHRoZSBpbmNvbWluZyBkZWxpdmVyeSBjb250ZXh0KSBhcmUgYXR0YWNoZWQgYXNcbiAqICAgc3BhbiBsaW5rcy4gVGhpcyBrZWVwcyB0cmFjZXMgYm91bmRlZCBwZXIgaW52b2NhdGlvbiBpbnN0ZWFkIG9mXG4gKiAgIHN0aXRjaGluZyBhIGxvbmctbGl2ZWQgcnVuIGludG8gb25lIGdpYW50IHRyYWNlLlxuICogLSBgJ2NvbnRpbnVvdXMnYDogdGhlIHJlc3RvcmVkIHJ1bi1vcmlnaW4gY29udGV4dCBiZWNvbWVzIHRoZSBwYXJlbnQgb2ZcbiAqICAgdGhlIGludm9jYXRpb24gc3BhbiAobGVnYWN5IGJlaGF2aW9yKSwgcHJvZHVjaW5nIGEgc2luZ2xlIHRyYWNlIHRoYXRcbiAqICAgc3BhbnMgdGhlIGVudGlyZSBydW4uXG4gKi9cbmV4cG9ydCB0eXBlIFdvcmtmbG93VHJhY2VNb2RlID0gJ2xpbmtlZCcgfCAnY29udGludW91cyc7XG5cbi8qKlxuICogVW5yZWNvZ25pemVkIGBXT1JLRkxPV19UUkFDRV9NT0RFYCB2YWx1ZXMgd2UgYWxyZWFkeSB3YXJuZWQgYWJvdXQuIE9uXG4gKiBgZ2xvYmFsVGhpc2AgKHNlZSBgZ2xvYmFsU2luZ2xldG9uYCkgc28gdGhlIHdhcm5pbmcgc3RheXMgb25jZSBwZXIgcHJvY2Vzc1xuICogcmF0aGVyIHRoYW4gb25jZSBwZXIgYnVuZGxlciBsYXllci5cbiAqL1xuY29uc3QgdHJhY2VNb2RlV2FybmluZ3MgPSBnbG9iYWxTaW5nbGV0b24oXG4gICdAd29ya2Zsb3cvY29yZS8vdHJhY2VNb2RlV2FybmluZ3MnLFxuICAxLFxuICAoKSA9PiAoeyB1bnJlY29nbml6ZWQ6IG5ldyBTZXQ8c3RyaW5nPigpIH0pXG4pO1xuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBhY3RpdmUgdHJhY2UgbW9kZSBmcm9tIHRoZSBgV09SS0ZMT1dfVFJBQ0VfTU9ERWAgZW52IHZhci5cbiAqIERlZmF1bHRzIHRvIGAnbGlua2VkJ2A7IGFueSB2YWx1ZSBvdGhlciB0aGFuIGAnY29udGludW91cydgIHNlbGVjdHMgaXQuXG4gKiBVbnJlY29nbml6ZWQgbm9uLWVtcHR5IHZhbHVlcyAoZS5nLiB0eXBvcyBsaWtlIGBjb250aW5vdXNgKSBlbWl0IGFcbiAqIG9uZS10aW1lIHdhcm5pbmcgc28gc2lsZW50IGZhbGxiYWNrIHRvIGBsaW5rZWRgIGlzIGF0IGxlYXN0IHZpc2libGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3JrZmxvd1RyYWNlTW9kZSgpOiBXb3JrZmxvd1RyYWNlTW9kZSB7XG4gIGNvbnN0IHZhbHVlID0gcHJvY2Vzcy5lbnYuV09SS0ZMT1dfVFJBQ0VfTU9ERTtcbiAgaWYgKHZhbHVlID09PSAnY29udGludW91cycpIHJldHVybiAnY29udGludW91cyc7XG4gIGlmIChcbiAgICB2YWx1ZSAmJlxuICAgIHZhbHVlICE9PSAnbGlua2VkJyAmJlxuICAgICF0cmFjZU1vZGVXYXJuaW5ncy51bnJlY29nbml6ZWQuaGFzKHZhbHVlKVxuICApIHtcbiAgICB0cmFjZU1vZGVXYXJuaW5ncy51bnJlY29nbml6ZWQuYWRkKHZhbHVlKTtcbiAgICBydW50aW1lTG9nZ2VyLndhcm4oXG4gICAgICBgVW5yZWNvZ25pemVkIFdPUktGTE9XX1RSQUNFX01PREUgdmFsdWUgXCIke3ZhbHVlfVwiOyBleHBlY3RlZCBcImxpbmtlZFwiIG9yIFwiY29udGludW91c1wiLiBGYWxsaW5nIGJhY2sgdG8gXCJsaW5rZWRcIi5gXG4gICAgKTtcbiAgfVxuICByZXR1cm4gJ2xpbmtlZCc7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIGEgc2VyaWFsaXplZCB0cmFjZSBjYXJyaWVyIGlzIHVzYWJsZSwgaS5lLiBwcmVzZW50IGFuZFxuICogbm9uLWVtcHR5LiBgc2VyaWFsaXplVHJhY2VDYXJyaWVyKClgIHJldHVybnMgYHt9YCB3aGVuIG5vIE9URUwgU0RLIGlzXG4gKiByZWdpc3RlcmVkIG9yIG5vIHNwYW4gaXMgYWN0aXZlLCBhbmQgYHN0YXJ0KClgIGFsd2F5cyBhdHRhY2hlcyB0aGVcbiAqIGNhcnJpZXIgdG8gdGhlIGZpcnN0IHF1ZXVlIG1lc3NhZ2UsIHNvIGFuIGVtcHR5IGNhcnJpZXIgbXVzdCBiZSB0cmVhdGVkXG4gKiB0aGUgc2FtZSBhcyBhbiBhYnNlbnQgb25lIHdoZXJldmVyIHRoZSB0cmFjZS1tb2RlIGxvZ2ljIGJyYW5jaGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNVc2FibGVUcmFjZUNhcnJpZXIoXG4gIGNhcnJpZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWRcbik6IGNhcnJpZXIgaXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIHJldHVybiBjYXJyaWVyICE9PSB1bmRlZmluZWQgJiYgT2JqZWN0LmtleXMoY2FycmllcikubGVuZ3RoID4gMDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB0cmFjZSBjYXJyaWVyIHRvIGF0dGFjaCB0byBtZXNzYWdlcyB0aGUgY3VycmVudCBpbnZvY2F0aW9uXG4gKiBlbnF1ZXVlcy4gSW4gYGxpbmtlZGAgbW9kZSB0aGUgT1JJR0lOQUwgcnVuLW9yaWdpbiBjYXJyaWVyIGlzIGZvcndhcmRlZFxuICogdW5jaGFuZ2VkICh3aGVuIHVzYWJsZSkgc28gZXZlcnkgZnV0dXJlIGludm9jYXRpb24gbGlua3MgYmFjayB0byB0aGUgc2FtZVxuICogb3JpZ2luOyBvdGhlcndpc2UgKGBjb250aW51b3VzYCBtb2RlLCBvciBubyB1c2FibGUgaW5jb21pbmcgY2FycmllcilcbiAqIHRoZSBjdXJyZW50IChhY3RpdmUpIGNvbnRleHQgaXMgc2VyaWFsaXplZCwgc28gdGhlIHRyYWNlIGtlZXBzIGNoYWluaW5nXG4gKiAoY29udGludW91cykgb3IgdGhlIGZpcnN0IGluc3RydW1lbnRlZCBpbnZvY2F0aW9uIGJlY29tZXMgdGhlIGRlLWZhY3RvXG4gKiBvcmlnaW4gKGxpbmtlZCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXh0VHJhY2VDYXJyaWVyKFxuICB0cmFjZU1vZGU6IFdvcmtmbG93VHJhY2VNb2RlLFxuICBpbmNvbWluZ0NhcnJpZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWRcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICByZXR1cm4gdHJhY2VNb2RlID09PSAnbGlua2VkJyAmJiBpc1VzYWJsZVRyYWNlQ2FycmllcihpbmNvbWluZ0NhcnJpZXIpXG4gICAgPyBQcm9taXNlLnJlc29sdmUoaW5jb21pbmdDYXJyaWVyKVxuICAgIDogc2VyaWFsaXplVHJhY2VDYXJyaWVyKCk7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBzcGFuIGxpbmtzIGZvciBhIHF1ZXVlLWRlbGl2ZXJlZCBpbnZvY2F0aW9uIHNwYW5cbiAqIChgd29ya2Zsb3cuZXhlY3V0ZWAgLyBgc3RlcC5leGVjdXRlYCk6XG4gKlxuICogLSBJbiBgbGlua2VkYCBtb2RlIHRoZSBpbnZvY2F0aW9uIHNwYW4gaXMgYSBDSElMRCBvZiB0aGUgbG9jYWwgZGVsaXZlcnlcbiAqICAgKGZsb3ctcm91dGUpIGNvbnRleHQsIHNvIHRoZSBvbmx5IGxpbmsgaXMgdG8gdGhlIHJ1bi1vcmlnaW4gY29udGV4dFxuICogICBmcm9tIHRoZSBtZXNzYWdlJ3MgdHJhY2UgY2FycmllciwgY29ubmVjdGluZyB0aGlzIGJvdW5kZWQgcGVyLWludm9jYXRpb25cbiAqICAgdHJhY2UgYmFjayB0byB3aGVyZSB0aGUgcnVuIHdhcyBzdGFydGVkLiBUaGUgcnVuLW9yaWdpbiBjb250ZXh0IGlzIGFcbiAqICAgbGluaywgbmV2ZXIgYSBwYXJlbnQsIGFuZCByZS1lbnF1ZXVlcyBmb3J3YXJkIHRoZSBvcmlnaW5hbCBjYXJyaWVyXG4gKiAgIHVuY2hhbmdlZCwgc28gdGhlIHdob2xlIHJ1biBpcyBuZXZlciBzdGl0Y2hlZCBpbnRvIG9uZSBnaWFudCB0cmFjZS5cbiAqICAgVGhlIGxpbmsgaXMgc2tpcHBlZCB3aGVuIHRoZSBjYXJyaWVyIGlzIGFic2VudCwgZW1wdHksIG9yIGludmFsaWQuXG4gKiAtIEluIGBjb250aW51b3VzYCBtb2RlIHRoZSBydW4tb3JpZ2luIGNvbnRleHQgaXMgcmVzdG9yZWQgYXMgdGhlIHBhcmVudFxuICogICBpbnN0ZWFkLCBhbmQgdGhlIGxpbmsgcG9pbnRzIGF0IHRoZSBpbmNvbWluZyBkZWxpdmVyeSBjb250ZXh0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRJbnZvY2F0aW9uU3BhbkxpbmtzKFxuICB0cmFjZU1vZGU6IFdvcmtmbG93VHJhY2VNb2RlLFxuICBpbmNvbWluZ0NhcnJpZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWRcbik6IFByb21pc2U8YXBpLkxpbmtbXSB8IHVuZGVmaW5lZD4ge1xuICBpZiAodHJhY2VNb2RlICE9PSAnbGlua2VkJykgcmV0dXJuIGxpbmtUb0N1cnJlbnRDb250ZXh0KCk7XG4gIGNvbnN0IG9yaWdpbkxpbmsgPSBhd2FpdCBsaW5rVG9UcmFjZUNhcnJpZXIoXG4gICAgaXNVc2FibGVUcmFjZUNhcnJpZXIoaW5jb21pbmdDYXJyaWVyKSA/IGluY29taW5nQ2FycmllciA6IHVuZGVmaW5lZFxuICApO1xuICByZXR1cm4gb3JpZ2luTGluayA/IFtvcmlnaW5MaW5rXSA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBjdXJyZW50IHRyYWNlIGNvbnRleHQgaW50byBhIGZvcm1hdCB0aGF0IGNhbiBiZSBwYXNzZWQgdGhyb3VnaCBxdWV1ZXNcbiAqIEByZXR1cm5zIEEgcmVjb3JkIG9mIHN0cmluZ3MgcmVwcmVzZW50aW5nIHRoZSB0cmFjZSBjb250ZXh0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXJpYWxpemVUcmFjZUNhcnJpZXIoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XG4gIGNvbnN0IG90ZWwgPSBhd2FpdCBPdGVsQXBpLnZhbHVlO1xuICBpZiAoIW90ZWwpIHJldHVybiB7fTtcbiAgY29uc3QgY2FycmllcjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAvLyBJbmplY3QgdGhlIGN1cnJlbnQgY29udGV4dCBpbnRvIHRoZSBjYXJyaWVyXG4gIG90ZWwucHJvcGFnYXRpb24uaW5qZWN0KG90ZWwuY29udGV4dC5hY3RpdmUoKSwgY2Fycmllcik7XG4gIHJldHVybiBjYXJyaWVyO1xufVxuXG4vKipcbiAqIERlc2VyaWFsaXplcyB0cmFjZSBjb250ZXh0IGFuZCByZXR1cm5zIGEgY29udGV4dCB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbnRpbnVlIHRoZSB0cmFjZVxuICogQHBhcmFtIHRyYWNlQ2FycmllciBUaGUgc2VyaWFsaXplZCB0cmFjZSBjb250ZXh0XG4gKiBAcmV0dXJucyBPcGVuVGVsZW1ldHJ5IGNvbnRleHQgd2l0aCB0aGUgcmVzdG9yZWQgdHJhY2VcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlc2VyaWFsaXplVHJhY2VDYXJyaWVyKFxuICB0cmFjZUNhcnJpZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbikge1xuICBjb25zdCBvdGVsID0gYXdhaXQgT3RlbEFwaS52YWx1ZTtcbiAgaWYgKCFvdGVsKSByZXR1cm47XG4gIC8vIEV4dHJhY3QgdGhlIGNvbnRleHQgZnJvbSB0aGUgY2FycmllclxuICByZXR1cm4gb3RlbC5wcm9wYWdhdGlvbi5leHRyYWN0KG90ZWwuY29udGV4dC5hY3RpdmUoKSwgdHJhY2VDYXJyaWVyKTtcbn1cblxuLyoqXG4gKiBSdW5zIGEgZnVuY3Rpb24gd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgZGVzZXJpYWxpemVkIHRyYWNlXG4gKiBAcGFyYW0gdHJhY2VDYXJyaWVyIFRoZSBzZXJpYWxpemVkIHRyYWNlIGNhcnJpZXIgKG9wdGlvbmFsKVxuICogQHBhcmFtIGZuIFRoZSBmdW5jdGlvbiB0byBydW4gd2l0aGluIHRoZSB0cmFjZSBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvblxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aFRyYWNlQ29udGV4dDxUPihcbiAgdHJhY2VDYXJyaWVyOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkLFxuICBmbjogKCkgPT4gUHJvbWlzZTxUPlxuKTogUHJvbWlzZTxUPiB7XG4gIGlmICghdHJhY2VDYXJyaWVyKSB7XG4gICAgcmV0dXJuIGZuKCk7XG4gIH1cblxuICBjb25zdCBvdGVsID0gYXdhaXQgT3RlbEFwaS52YWx1ZTtcbiAgaWYgKCFvdGVsKSByZXR1cm4gZm4oKTtcblxuICBjb25zdCBleHRyYWN0ZWRDb250ZXh0ID0gYXdhaXQgZGVzZXJpYWxpemVUcmFjZUNhcnJpZXIodHJhY2VDYXJyaWVyKTtcbiAgaWYgKCFleHRyYWN0ZWRDb250ZXh0KSB7XG4gICAgcmV0dXJuIGZuKCk7XG4gIH1cblxuICByZXR1cm4gb3RlbC5jb250ZXh0LndpdGgoZXh0cmFjdGVkQ29udGV4dCwgYXN5bmMgKCkgPT4gYXdhaXQgZm4oKSk7XG59XG5cbmNvbnN0IE90ZWxBcGkgPSBvbmNlKGFzeW5jICgpID0+IHtcbiAgLy8gYEBvcGVudGVsZW1ldHJ5L2FwaWAgaXMgYW4gb3B0aW9uYWwgcGVlciBkZXBlbmRlbmN5LiBUaGUgc3RhdGljIHNwZWNpZmllclxuICAvLyBpcyBpbnRlbnRpb25hbDogZXNidWlsZC1idW5kbGVkIHRhcmdldHMgKHRoZSBDTEknc1xuICAvLyBgdmVyY2VsLWJ1aWxkLW91dHB1dC1hcGlgIGJ1aWxkLCBOaXRybywgQXN0cm8pIHNoaXAgYSBzZWxmLWNvbnRhaW5lZFxuICAvLyBidW5kbGUgd2l0aCBubyBub2RlX21vZHVsZXMsIHNvIHRoZSBwYWNrYWdlIG11c3QgYmUgKmlubGluZWQqIGF0IGJ1aWxkXG4gIC8vIHRpbWUgZm9yIHNwYW5zIHRvIHdvcmsgYXQgcnVudGltZTsgYSBydW50aW1lLWJ1aWx0IHNwZWNpZmllciBpcyBvcGFxdWUgdG9cbiAgLy8gZXNidWlsZCBhbmQgd291bGQgc2lsZW50bHkgZGlzYWJsZSB0cmFjaW5nIHRoZXJlLiBCdW5kbGVycyB0aGF0IHJlamVjdCBhblxuICAvLyB1bnJlc29sdmFibGUgc3RhdGljIGBpbXBvcnQoKWAgd2hlbiB0aGUgcGVlciBpc24ndCBpbnN0YWxsZWQgKFJvbGx1cC9WaXRlLFxuICAvLyBlLmcuIFN2ZWx0ZUtpdCkgaW5zdGVhZCBleHRlcm5hbGl6ZSBgQG9wZW50ZWxlbWV0cnkvYXBpYCBpbiB0aGUgd29ya2Zsb3dcbiAgLy8gZnJhbWV3b3JrIGludGVncmF0aW9uLCB3aGljaCBrZWVwcyB0aGUgYnVpbGQgZ3JlZW4gYW5kIHN0aWxsIGxvYWRzIHJlYWxcbiAgLy8gT1RlbCB3aGVuIHRoZSBwZWVyIGlzIHByZXNlbnQuIFJ1bnRpbWUgc2VtYW50aWNzOiBwcmVzZW50IOKGkiBsb2FkZWQsIGFic2VudFxuICAvLyDihpIgY2F1Z2h0IGFuZCB0cmFjaW5nIGRpc2FibGVkLlxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBpbXBvcnQoJ0BvcGVudGVsZW1ldHJ5L2FwaScpO1xuICB9IGNhdGNoIHtcbiAgICBydW50aW1lTG9nZ2VyLmluZm8oJ09wZW5UZWxlbWV0cnkgbm90IGF2YWlsYWJsZSwgdHJhY2luZyB3aWxsIGJlIGRpc2FibGVkJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn0pO1xuXG5jb25zdCBUcmFjZXIgPSBvbmNlKGFzeW5jICgpID0+IHtcbiAgY29uc3QgYXBpID0gYXdhaXQgT3RlbEFwaS52YWx1ZTtcbiAgaWYgKCFhcGkpIHJldHVybiBudWxsO1xuICBjb25zdCB0cmFjZXIgPSBhcGkudHJhY2UuZ2V0VHJhY2VyKCd3b3JrZmxvdycpO1xuICBsb2dPdGVsRGlhZ25vc3RpY09uY2UoYXBpLCB0cmFjZXIpO1xuICByZXR1cm4gdHJhY2VyO1xufSk7XG5cbmNvbnN0IFN0ZXBFeGVjdXRpb25EdXJhdGlvbkhpc3RvZ3JhbSA9IG9uY2UoYXN5bmMgKCkgPT4ge1xuICBjb25zdCBvdGVsID0gYXdhaXQgT3RlbEFwaS52YWx1ZTtcbiAgaWYgKCFvdGVsKSByZXR1cm4gbnVsbDtcbiAgLy8gc2VydmljZS5uYW1lIGlzIGEgcmVzb3VyY2UgYXR0cmlidXRlLCBhcHBsaWVkIGJ5IHRoZSBjb25maWd1cmVkIHByb3ZpZGVyLlxuICByZXR1cm4gb3RlbC5tZXRyaWNzXG4gICAgLmdldE1ldGVyKCd3b3JrZmxvdycpXG4gICAgLmNyZWF0ZUhpc3RvZ3JhbSgnd29ya2Zsb3cuc3RlcC5leGVjdXRlLmR1cmF0aW9uJywge1xuICAgICAgZGVzY3JpcHRpb246ICdEdXJhdGlvbiBvZiB1c2VyIHN0ZXAgZXhlY3V0aW9uJyxcbiAgICAgIHVuaXQ6ICdtcycsXG4gICAgfSk7XG59KTtcblxuLyoqXG4gKiBPbmUtc2hvdCBydW50aW1lIGRpYWdub3N0aWMgKERFQlVHPXdvcmtmbG93Oiogb25seSksIHNhbWUgc2hhcGUgYXMgdGhlIG9uZVxuICogd29ybGQtdmVyY2VsIGVtaXRzIHRhZ2dlZCBgd29ybGQtdmVyY2VsYDogcHJpbnRzIGhvdyB0aGlzIG1vZHVsZSBpbnN0YW5jZVxuICogb2YgYEBvcGVudGVsZW1ldHJ5L2FwaWAgc2VlcyB0aGUgZ2xvYmFsIHJlZ2lzdHJhdGlvbiwgc28gYSBkZXBsb3ltZW50J3NcbiAqIGxvZ3Mgc2hvdyB0aGUgdHdvIHBhY2thZ2VzJyB2aWV3cyBzaWRlIGJ5IHNpZGUuXG4gKi9cbi8vIHBlci1jb3B5LW9rOiB0aGlzIGRpYWdub3N0aWMgcmVwb3J0cyBob3cgVEhJUyBtb2R1bGUgaW5zdGFuY2Ugc2VlcyB0aGUgZ2xvYmFsXG4vLyBPVGVsIHJlZ2lzdHJhdGlvbiwgd2hpY2ggaXMgdGhlIHdob2xlIHBvaW50IG9mIHRoZSBsb2cuIFdpdGggc2V2ZXJhbCBjb3BpZXNcbi8vIGluIGEgcHJvY2VzcywgZWFjaCBvbmUncyB2aWV3IGlzIHdoYXQgaXMgd29ydGggc2VlaW5nLlxubGV0IG90ZWxEaWFnTG9nZ2VkID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGRlc2NyaWJlVGhyb3duVmFsdWUodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuICB0cnkge1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgICAnbWVzc2FnZScgaW4gdmFsdWUgJiZcbiAgICAgIHR5cGVvZiB2YWx1ZS5tZXNzYWdlID09PSAnc3RyaW5nJ1xuICAgICkge1xuICAgICAgcmV0dXJuIHZhbHVlLm1lc3NhZ2U7XG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gJ1Vua25vd24gZXJyb3InO1xuICB9XG59XG5cbmZ1bmN0aW9uIGxvZ090ZWxEaWFnbm9zdGljT25jZShvdGVsOiB0eXBlb2YgYXBpLCB0cmFjZXI6IGFwaS5UcmFjZXIpOiB2b2lkIHtcbiAgY29uc3QgZGVidWdFbmFibGVkID1cbiAgICB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5lbnYuREVCVUcgPT09ICdzdHJpbmcnICYmXG4gICAgKHByb2Nlc3MuZW52LkRFQlVHLmluY2x1ZGVzKCd3b3JrZmxvdzonKSB8fCBwcm9jZXNzLmVudi5ERUJVRyA9PT0gJyonKTtcbiAgaWYgKG90ZWxEaWFnTG9nZ2VkIHx8ICFkZWJ1Z0VuYWJsZWQpIHJldHVybjtcbiAgb3RlbERpYWdMb2dnZWQgPSB0cnVlO1xuICB0cnkge1xuICAgIGNvbnN0IGcgPSAoZ2xvYmFsVGhpcyBhcyBSZWNvcmQ8c3ltYm9sLCB1bmtub3duPilbXG4gICAgICBTeW1ib2wuZm9yKCdvcGVudGVsZW1ldHJ5LmpzLmFwaS4xJylcbiAgICBdIGFzIHsgdmVyc2lvbj86IHN0cmluZyB9IHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHByb3ZpZGVyID0gb3RlbC50cmFjZS5nZXRUcmFjZXJQcm92aWRlcigpO1xuICAgIGNvbnN0IGRlbGVnYXRlID1cbiAgICAgIChwcm92aWRlciBhcyB7IGdldERlbGVnYXRlPzogKCkgPT4gdW5rbm93biB9KS5nZXREZWxlZ2F0ZT8uKCkgPz8gcHJvdmlkZXI7XG4gICAgY29uc3QgcHJvYmUgPSB0cmFjZXIuc3RhcnRTcGFuKCd3b3JrZmxvdy5vdGVsLnByb2JlLmNvcmUnKTtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICAnW3dvcmtmbG93Om90ZWwtZGlhZ10gY29yZScsXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGdsb2JhbFJlZ2lzdHJhdGlvblZlcnNpb246IGc/LnZlcnNpb24gPz8gbnVsbCxcbiAgICAgICAgcHJvdmlkZXJDdG9yOiBwcm92aWRlcj8uY29uc3RydWN0b3I/Lm5hbWUgPz8gbnVsbCxcbiAgICAgICAgZGVsZWdhdGVDdG9yOiAoZGVsZWdhdGUgYXMgb2JqZWN0IHwgbnVsbCk/LmNvbnN0cnVjdG9yPy5uYW1lID8/IG51bGwsXG4gICAgICAgIHRyYWNlckN0b3I6IHRyYWNlcj8uY29uc3RydWN0b3I/Lm5hbWUgPz8gbnVsbCxcbiAgICAgICAgcHJvYmVDdG9yOiBwcm9iZT8uY29uc3RydWN0b3I/Lm5hbWUgPz8gbnVsbCxcbiAgICAgICAgcHJvYmVSZWNvcmRpbmc6IHByb2JlLmlzUmVjb3JkaW5nKCksXG4gICAgICB9KVxuICAgICk7XG4gICAgcHJvYmUuZW5kKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgJ1t3b3JrZmxvdzpvdGVsLWRpYWddIGNvcmUgZmFpbGVkOicsXG4gICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IGVycm9yXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdHJhY2U8VD4oXG4gIHNwYW5OYW1lOiBzdHJpbmcsXG4gIC4uLmFyZ3M6XG4gICAgfCBbZm46IChzcGFuPzogU3BhbikgPT4gUHJvbWlzZTxUPl1cbiAgICB8IFtvcHRzOiBTcGFuT3B0aW9ucywgZm46IChzcGFuPzogU3BhbikgPT4gUHJvbWlzZTxUPl1cbik6IFByb21pc2U8VD4ge1xuICBjb25zdCBbdHJhY2VyLCBvdGVsXSA9IGF3YWl0IFByb21pc2UuYWxsKFtUcmFjZXIudmFsdWUsIE90ZWxBcGkudmFsdWVdKTtcbiAgY29uc3QgeyBmbiwgb3B0cyB9ID1cbiAgICB0eXBlb2YgYXJnc1swXSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyB7IGZuOiBhcmdzWzBdLCBvcHRzOiB7fSB9XG4gICAgICA6IHsgZm46IGFyZ3NbMV0sIG9wdHM6IGFyZ3NbMF0gfTtcbiAgaWYgKCFmbikgdGhyb3cgbmV3IEVycm9yKCdGdW5jdGlvbiB0byB0cmFjZSBtdXN0IGJlIHByb3ZpZGVkJyk7XG5cbiAgaWYgKCF0cmFjZXIgfHwgIW90ZWwpIHtcbiAgICByZXR1cm4gYXdhaXQgZm4oKTtcbiAgfVxuXG4gIHJldHVybiB0cmFjZXIuc3RhcnRBY3RpdmVTcGFuKHNwYW5OYW1lLCBvcHRzLCBhc3luYyAoc3BhbikgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmbihzcGFuKTtcbiAgICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogb3RlbC5TcGFuU3RhdHVzQ29kZS5PSyB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKFdvcmtmbG93U3VzcGVuc2lvbi5pcyhlKSkge1xuICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IG90ZWwuU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgICAgIGFwcGx5V29ya2Zsb3dTdXNwZW5zaW9uVG9TcGFuKGUsIHNwYW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3Bhbi5zZXRTdGF0dXMoe1xuICAgICAgICAgIGNvZGU6IG90ZWwuU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgICAgbWVzc2FnZTogZGVzY3JpYmVUaHJvd25WYWx1ZShlKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzcGFuLmVuZCgpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKiBTdGFydHMgYSBjaGlsZCBzcGFuIHdpdGhvdXQgaW5zdGFsbGluZyBpdCBhcyB0aGUgYWN0aXZlIGNvbnRleHQuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRUcmFjZVNwYW4oc3Bhbk5hbWU6IHN0cmluZykge1xuICBjb25zdCBbdHJhY2VyLCBvdGVsXSA9IGF3YWl0IFByb21pc2UuYWxsKFtUcmFjZXIudmFsdWUsIE90ZWxBcGkudmFsdWVdKTtcbiAgaWYgKCF0cmFjZXIgfHwgIW90ZWwpIHJldHVybiB7IGVuZCgpIHt9LCBmYWlsKCkge30gfTtcblxuICBjb25zdCBzcGFuID0gdHJhY2VyLnN0YXJ0U3BhbihzcGFuTmFtZSk7XG4gIGxldCBlbmRlZCA9IGZhbHNlO1xuICBjb25zdCBmaW5pc2ggPSAoc3RhdHVzOiBhcGkuU3BhblN0YXR1cykgPT4ge1xuICAgIGlmIChlbmRlZCkgcmV0dXJuO1xuICAgIGVuZGVkID0gdHJ1ZTtcbiAgICBzcGFuLnNldFN0YXR1cyhzdGF0dXMpO1xuICAgIHNwYW4uZW5kKCk7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBlbmQ6ICgpID0+IGZpbmlzaCh7IGNvZGU6IG90ZWwuU3BhblN0YXR1c0NvZGUuT0sgfSksXG4gICAgZmFpbDogKGVycm9yOiB1bmtub3duKSA9PlxuICAgICAgZmluaXNoKHtcbiAgICAgICAgY29kZTogb3RlbC5TcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgbWVzc2FnZTogZGVzY3JpYmVUaHJvd25WYWx1ZShlcnJvciksXG4gICAgICB9KSxcbiAgfTtcbn1cblxuLyoqIEJpbmQgd29yayB0byB0aGUgY3VycmVudGx5IGFjdGl2ZSBzcGFuIGV2ZW4gd2hlbiBpdCBzdGFydHMgZnJvbSBhIGNoaWxkLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJpbmRBY3RpdmVUcmFjZUNvbnRleHQ8QXJncyBleHRlbmRzIHVua25vd25bXSwgUmVzdWx0PihcbiAgZm46ICguLi5hcmdzOiBBcmdzKSA9PiBSZXN1bHRcbik6IFByb21pc2U8KC4uLmFyZ3M6IEFyZ3MpID0+IFJlc3VsdD4ge1xuICBjb25zdCBvdGVsID0gYXdhaXQgT3RlbEFwaS52YWx1ZTtcbiAgcmV0dXJuIG90ZWwgPyBvdGVsLmNvbnRleHQuYmluZChvdGVsLmNvbnRleHQuYWN0aXZlKCksIGZuKSA6IGZuO1xufVxuXG4vKiogS2VlcHMgYSBwYXJrZWQgd29ya2Zsb3cncyBhbWJpZW50IHRyYWNlIGNvbnRleHQgYWxpZ25lZCB3aXRoIGVhY2ggcmVzdW1lLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVJlZnJlc2hhYmxlVHJhY2VDb250ZXh0KCkge1xuICBjb25zdCBvdGVsID0gYXdhaXQgT3RlbEFwaS52YWx1ZTtcbiAgaWYgKCFvdGVsKSB7XG4gICAgcmV0dXJuIHsgcmVmcmVzaCgpIHt9LCBydW46IDxUPihmbjogKCkgPT4gVCk6IFQgPT4gZm4oKSB9O1xuICB9XG5cbiAgbGV0IGN1cnJlbnQgPSBvdGVsLmNvbnRleHQuYWN0aXZlKCk7XG4gIGNvbnN0IGNvbnRleHQ6IGFwaS5Db250ZXh0ID0ge1xuICAgIGdldFZhbHVlOiAoa2V5KSA9PiBjdXJyZW50LmdldFZhbHVlKGtleSksXG4gICAgc2V0VmFsdWU6IChrZXksIHZhbHVlKSA9PiBjdXJyZW50LnNldFZhbHVlKGtleSwgdmFsdWUpLFxuICAgIGRlbGV0ZVZhbHVlOiAoa2V5KSA9PiBjdXJyZW50LmRlbGV0ZVZhbHVlKGtleSksXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICByZWZyZXNoOiAoKSA9PiB7XG4gICAgICBjdXJyZW50ID0gb3RlbC5jb250ZXh0LmFjdGl2ZSgpO1xuICAgIH0sXG4gICAgcnVuOiA8VD4oZm46ICgpID0+IFQpOiBUID0+IG90ZWwuY29udGV4dC53aXRoKGNvbnRleHQsIGZuKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBFbWl0IGEgc3BhbiB3aG9zZSBzdGFydCBpcyBiYWNrLWRhdGVkIHRvIGBzdGFydEVwb2NoTXNgIGFuZCB3aG9zZSBlbmQgaXMgbm93LFxuICogc28gaXRzIGR1cmF0aW9uIHJlZmxlY3RzIGFuIGludGVydmFsIG9ubHkgbWVhc3VyYWJsZSBhdCBpdHMgZW5kIChlLmcuXG4gKiB0aW1lLXRvLWZpcnN0LWNodW5rLCBrbm93biB3aGVuIHRoZSBmaXJzdCBjaHVuayBhcnJpdmVzKS4gVW5saWtlIGB0cmFjZSgpYCxcbiAqIHRoaXMgcmVjb3JkcyBhbiBhbHJlYWR5LWVsYXBzZWQgc3BhbiBpbiBvbmUgc2hvdCByYXRoZXIgdGhhbiB3cmFwcGluZyBhXG4gKiBjYWxsYmFjay4gTm8tb3Agd2hlbiBPcGVuVGVsZW1ldHJ5IGlzIG5vdCBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWNvcmRFbGFwc2VkU3BhbihcbiAgc3Bhbk5hbWU6IHN0cmluZyxcbiAgc3RhcnRFcG9jaE1zOiBudW1iZXIsXG4gIG9wdHM/OiBTcGFuT3B0aW9uc1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHRyYWNlciA9IGF3YWl0IFRyYWNlci52YWx1ZTtcbiAgaWYgKCF0cmFjZXIpIHJldHVybjtcbiAgdHJhY2VyLnN0YXJ0U3BhbihzcGFuTmFtZSwgeyAuLi5vcHRzLCBzdGFydFRpbWU6IHN0YXJ0RXBvY2hNcyB9KS5lbmQoKTtcbn1cblxuLyoqXG4gKiBSZWNvcmRzIHRoZSBzYW1lIHVzZXItY29kZSBpbnRlcnZhbCBhcyB0aGUgaW5uZXIgYHN0ZXAuZXhlY3V0ZWAgc3Bhbi4gVGhlXG4gKiBjb25maWd1cmVkIE9wZW5UZWxlbWV0cnkgbWV0ZXIgcHJvdmlkZXIgYXR0YWNoZXMgcmVzb3VyY2UgZGltZW5zaW9ucyBzdWNoIGFzXG4gKiBzZXJ2aWNlLm5hbWUsIHNvIHRoaXMgYXZvaWRzIGFjY2VwdGluZyBhIGNhbGxlci1jb250cm9sbGVkIHNlcnZpY2UgdGFnLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVjb3JkU3RlcEV4ZWN1dGlvbkR1cmF0aW9uKFxuICBkdXJhdGlvbk1zOiBudW1iZXIsXG4gIHN0YXR1czogJ29rJyB8ICdlcnJvcidcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBoaXN0b2dyYW0gPSBhd2FpdCBTdGVwRXhlY3V0aW9uRHVyYXRpb25IaXN0b2dyYW0udmFsdWU7XG4gIGhpc3RvZ3JhbT8ucmVjb3JkKGR1cmF0aW9uTXMsIHsgJ3dvcmtmbG93LnN0ZXAuc3RhdHVzJzogc3RhdHVzIH0pO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgdGhlIHdvcmtmbG93IHN1c3BlbnNpb24gYWxnZWJyYWljIGVmZmVjdCB0byBhbiBhY3RpdmUgc3Bhbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5V29ya2Zsb3dTdXNwZW5zaW9uVG9TcGFuKFxuICBlcnJvcjogV29ya2Zsb3dTdXNwZW5zaW9uLFxuICBzcGFuOiBhcGkuU3BhblxuKTogdm9pZCB7XG4gIHNwYW4uc2V0QXR0cmlidXRlcyh7XG4gICAgLi4uQXR0ci5Xb3JrZmxvd1N1c3BlbnNpb25TdGF0ZSgnc3VzcGVuZGVkJyksXG4gICAgLi4uQXR0ci5Xb3JrZmxvd1N1c3BlbnNpb25TdGVwQ291bnQoZXJyb3Iuc3RlcENvdW50KSxcbiAgICAuLi5BdHRyLldvcmtmbG93U3VzcGVuc2lvbkhvb2tDb3VudChlcnJvci5ob29rQ291bnQpLFxuICAgIC4uLkF0dHIuV29ya2Zsb3dTdXNwZW5zaW9uV2FpdENvdW50KGVycm9yLndhaXRDb3VudCksXG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U3BhbkNvbnRleHRGb3JUcmFjZUNhcnJpZXIoXG4gIGNhcnJpZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbikge1xuICBjb25zdCBbZGVzZXJpYWxpemVkLCBvdGVsXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBkZXNlcmlhbGl6ZVRyYWNlQ2FycmllcihjYXJyaWVyKSxcbiAgICBPdGVsQXBpLnZhbHVlLFxuICBdKTtcbiAgaWYgKCFkZXNlcmlhbGl6ZWQgfHwgIW90ZWwpIHJldHVybjtcbiAgcmV0dXJuIG90ZWwudHJhY2UuZ2V0U3BhbkNvbnRleHQoZGVzZXJpYWxpemVkKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEFjdGl2ZVNwYW4oKSB7XG4gIHJldHVybiBhd2FpdCB3aXRoT3RlbCgob3RlbCkgPT4gb3RlbC50cmFjZS5nZXRBY3RpdmVTcGFuKCkpO1xufVxuXG4vKipcbiAqIFdyYXBzIGFsbCBtZXRob2RzIG9mIGFuIG9iamVjdCB3aXRoIHRyYWNpbmcgc3BhbnMuXG4gKiBAcGFyYW0gcHJlZml4IC0gUHJlZml4IGZvciBzcGFuIG5hbWVzIChlLmcuLCBcIldPUkxELnJ1bnNcIilcbiAqIEBwYXJhbSBvIC0gT2JqZWN0IHdpdGggbWV0aG9kcyB0byBpbnN0cnVtZW50XG4gKiBAcmV0dXJucyBJbnN0cnVtZW50ZWQgb2JqZWN0IHdpdGggc2FtZSBpbnRlcmZhY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3RydW1lbnRPYmplY3Q8VCBleHRlbmRzIG9iamVjdD4ocHJlZml4OiBzdHJpbmcsIG86IFQpOiBUIHtcbiAgY29uc3QgaGFuZGxlcnMgPSB7fSBhcyBUO1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvKSBhcyAoa2V5b2YgVClbXSkge1xuICAgIGlmICh0eXBlb2Ygb1trZXldICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBoYW5kbGVyc1trZXldID0gb1trZXldO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmID0gb1trZXldO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgaGFuZGxlcnNba2V5XSA9IGFzeW5jICguLi5hcmdzOiBhbnlbXSkgPT5cbiAgICAgICAgdHJhY2UoYCR7cHJlZml4fS4ke1N0cmluZyhrZXkpfWAsIHt9LCAoKSA9PiBmKC4uLmFyZ3MpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGhhbmRsZXJzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U3BhbktpbmQoZmllbGQ6IGtleW9mIHR5cGVvZiBTcGFuS2luZCkge1xuICByZXR1cm4gd2l0aE90ZWwoKHgpID0+IHguU3BhbktpbmRbZmllbGRdKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdpdGhPdGVsPFQ+KFxuICBmbjogKG90ZWw6IHR5cGVvZiBhcGkpID0+IFRcbik6IFByb21pc2U8QXdhaXRlZDxUPiB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBvdGVsID0gYXdhaXQgT3RlbEFwaS52YWx1ZTtcbiAgaWYgKCFvdGVsKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gYXdhaXQgZm4ob3RlbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5rVG9DdXJyZW50Q29udGV4dCgpOiBQcm9taXNlPFthcGkuTGlua10gfCB1bmRlZmluZWQ+IHtcbiAgcmV0dXJuIHdpdGhPdGVsKChvdGVsKTogW2FwaS5MaW5rXSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3QgY29udGV4dCA9IG90ZWwudHJhY2UuZ2V0QWN0aXZlU3BhbigpPy5zcGFuQ29udGV4dCgpO1xuICAgIGlmICghY29udGV4dCkgcmV0dXJuO1xuICAgIHJldHVybiBbeyBjb250ZXh0IH1dO1xuICB9KTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSBzcGFuIGxpbmsgcG9pbnRpbmcgYXQgdGhlIHNwYW4gY29udGV4dCBlbWJlZGRlZCBpbiBhIHNlcmlhbGl6ZWRcbiAqIHRyYWNlIGNhcnJpZXIgKGUuZy4gdGhlIHJ1bi1vcmlnaW4gY29udGV4dCBmbG93aW5nIHRocm91Z2ggcXVldWVcbiAqIG1lc3NhZ2VzKS4gUmV0dXJucyBgdW5kZWZpbmVkYCB3aGVuIE9URUwgaXMgdW5hdmFpbGFibGUsIHRoZSBjYXJyaWVyIGlzXG4gKiBhYnNlbnQsIG9yIGl0IGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBzcGFuIGNvbnRleHQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaW5rVG9UcmFjZUNhcnJpZXIoXG4gIGNhcnJpZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWRcbik6IFByb21pc2U8YXBpLkxpbmsgfCB1bmRlZmluZWQ+IHtcbiAgaWYgKCFjYXJyaWVyKSByZXR1cm47XG4gIGNvbnN0IFtjb250ZXh0LCBvdGVsXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBnZXRTcGFuQ29udGV4dEZvclRyYWNlQ2FycmllcihjYXJyaWVyKSxcbiAgICBPdGVsQXBpLnZhbHVlLFxuICBdKTtcbiAgaWYgKCFjb250ZXh0IHx8ICFvdGVsKSByZXR1cm47XG4gIGlmICghb3RlbC50cmFjZS5pc1NwYW5Db250ZXh0VmFsaWQoY29udGV4dCkpIHJldHVybjtcbiAgcmV0dXJuIHsgY29udGV4dCB9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEJhZ2dhZ2UgUHJvcGFnYXRpb24gVXRpbGl0aWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBXb3JrZmxvdyBjb250ZXh0IHRvIHByb3BhZ2F0ZSB2aWEgYmFnZ2FnZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93QmFnZ2FnZUNvbnRleHQge1xuICB3b3JrZmxvd1J1bklkOiBzdHJpbmc7XG4gIHdvcmtmbG93TmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNldHMgd29ya2Zsb3cgY29udGV4dCBhcyBPVEVMIGJhZ2dhZ2UgZm9yIGF1dG9tYXRpYyBwcm9wYWdhdGlvbi5cbiAqIEJhZ2dhZ2UgaXMgcHJvcGFnYXRlZCBhY3Jvc3Mgc2VydmljZSBib3VuZGFyaWVzIHZpYSBIVFRQIGhlYWRlcnMuXG4gKiBAcGFyYW0gY29udGV4dCAtIFdvcmtmbG93IGNvbnRleHQgdG8gc2V0IGFzIGJhZ2dhZ2VcbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdG8gcnVuIHdpdGhpbiB0aGUgYmFnZ2FnZSBjb250ZXh0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXRoV29ya2Zsb3dCYWdnYWdlPFQ+KFxuICBjb250ZXh0OiBXb3JrZmxvd0JhZ2dhZ2VDb250ZXh0LFxuICBmbjogKCkgPT4gUHJvbWlzZTxUPlxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IG90ZWwgPSBhd2FpdCBPdGVsQXBpLnZhbHVlO1xuICBpZiAoIW90ZWwpIHJldHVybiBmbigpO1xuXG4gIC8vIENyZWF0ZSBiYWdnYWdlIHdpdGggd29ya2Zsb3cgY29udGV4dFxuICBjb25zdCBiYWdnYWdlID0gb3RlbC5wcm9wYWdhdGlvbi5jcmVhdGVCYWdnYWdlKHtcbiAgICAnd29ya2Zsb3cucnVuX2lkJzogeyB2YWx1ZTogY29udGV4dC53b3JrZmxvd1J1bklkIH0sXG4gICAgJ3dvcmtmbG93Lm5hbWUnOiB7IHZhbHVlOiBjb250ZXh0LndvcmtmbG93TmFtZSB9LFxuICB9KTtcblxuICAvLyBTZXQgYmFnZ2FnZSBpbiBjb250ZXh0IGFuZCBydW4gZnVuY3Rpb25cbiAgY29uc3QgY29udGV4dFdpdGhCYWdnYWdlID0gb3RlbC5wcm9wYWdhdGlvbi5zZXRCYWdnYWdlKFxuICAgIG90ZWwuY29udGV4dC5hY3RpdmUoKSxcbiAgICBiYWdnYWdlXG4gICk7XG5cbiAgcmV0dXJuIG90ZWwuY29udGV4dC53aXRoKGNvbnRleHRXaXRoQmFnZ2FnZSwgKCkgPT4gZm4oKSk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHdvcmtmbG93IGNvbnRleHQgZnJvbSBPVEVMIGJhZ2dhZ2UuXG4gKiBAcmV0dXJucyBXb3JrZmxvdyBjb250ZXh0IGlmIHByZXNlbnQgaW4gYmFnZ2FnZSwgdW5kZWZpbmVkIG90aGVyd2lzZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0V29ya2Zsb3dCYWdnYWdlKCk6IFByb21pc2U8XG4gIFdvcmtmbG93QmFnZ2FnZUNvbnRleHQgfCB1bmRlZmluZWRcbj4ge1xuICBjb25zdCBvdGVsID0gYXdhaXQgT3RlbEFwaS52YWx1ZTtcbiAgaWYgKCFvdGVsKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGJhZ2dhZ2UgPSBvdGVsLnByb3BhZ2F0aW9uLmdldEJhZ2dhZ2Uob3RlbC5jb250ZXh0LmFjdGl2ZSgpKTtcbiAgaWYgKCFiYWdnYWdlKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHJ1bklkID0gYmFnZ2FnZS5nZXRFbnRyeSgnd29ya2Zsb3cucnVuX2lkJyk/LnZhbHVlO1xuICBjb25zdCBuYW1lID0gYmFnZ2FnZS5nZXRFbnRyeSgnd29ya2Zsb3cubmFtZScpPy52YWx1ZTtcblxuICBpZiAoIXJ1bklkIHx8ICFuYW1lKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIHJldHVybiB7XG4gICAgd29ya2Zsb3dSdW5JZDogcnVuSWQsXG4gICAgd29ya2Zsb3dOYW1lOiBuYW1lLFxuICB9O1xufVxuIl19
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "5.0.0-beta.
|
|
1
|
+
export declare const version = "5.0.0-beta.48";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// Generated by genversion.
|
|
2
|
-
export const version = '5.0.0-beta.
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
export const version = '5.0.0-beta.48';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJCQUEyQjtBQUMzQixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR2VuZXJhdGVkIGJ5IGdlbnZlcnNpb24uXG5leHBvcnQgY29uc3QgdmVyc2lvbiA9ICc1LjAuMC1iZXRhLjQ4J1xuIl19
|
|
@@ -1,27 +1,25 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Script } from 'node:vm';
|
|
2
2
|
/**
|
|
3
|
-
* Returns a compiled `vm.Script` for the given
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
* Returns a compiled `vm.Script` for the given source code and filename,
|
|
4
|
+
* compiling and caching it on first use. Subsequent calls with the same
|
|
5
|
+
* `(code, filename)` return the cached `Script`.
|
|
6
6
|
*
|
|
7
7
|
* The returned `Script` is not yet bound to any context; the caller runs it
|
|
8
8
|
* against a specific VM context via `script.runInContext(context)`. This is
|
|
9
9
|
* equivalent to `vm.runInContext(code, context, { filename })` but skips the
|
|
10
10
|
* recompile.
|
|
11
11
|
*/
|
|
12
|
-
export declare function getCachedWorkflowScript(code: string, filename: string):
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
*/
|
|
17
|
-
export declare function runCachedWorkflowScript(code: string, filename: string, context: Context): unknown;
|
|
12
|
+
export declare function getCachedWorkflowScript(code: string, filename: string): {
|
|
13
|
+
script: Script;
|
|
14
|
+
cacheHit: boolean;
|
|
15
|
+
};
|
|
18
16
|
/**
|
|
19
17
|
* Clears the compiled-script cache. Intended for tests that want to assert
|
|
20
18
|
* compile-vs-cache behaviour in isolation; not used on the hot path.
|
|
21
19
|
*/
|
|
22
20
|
export declare function clearWorkflowScriptCache(): void;
|
|
23
21
|
/**
|
|
24
|
-
* Number of distinct
|
|
22
|
+
* Number of distinct script source strings currently retained. Exposed for
|
|
25
23
|
* tests asserting the LRU bound; not used on the hot path.
|
|
26
24
|
*/
|
|
27
25
|
export declare function workflowScriptCacheSize(): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"script-cache.d.ts","sourceRoot":"","sources":["../../src/vm/script-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"script-cache.d.ts","sourceRoot":"","sources":["../../src/vm/script-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAuFjC;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAsBvC;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD"}
|
package/dist/vm/script-cache.js
CHANGED
|
@@ -38,27 +38,21 @@ import { globalSingleton } from '@workflow/utils';
|
|
|
38
38
|
* function bodies the duplicated work is the (cheap) top-level parse, not full
|
|
39
39
|
* per-workflow codegen.
|
|
40
40
|
*
|
|
41
|
-
* We use a nested Map (code -> filename -> Script) so that evicting a
|
|
42
|
-
*
|
|
43
|
-
*
|
|
41
|
+
* We use a nested Map (code -> filename -> Script) so that evicting a source
|
|
42
|
+
* string drops all of its per-filename scripts together. Most entries are full
|
|
43
|
+
* workflow bundles; `compileWorkflowBundle` also caches its tiny workflow-name
|
|
44
|
+
* lookup snippets here.
|
|
44
45
|
*
|
|
45
46
|
* Bounding
|
|
46
47
|
* --------
|
|
47
48
|
* The top-level (`code`-keyed) map is an insertion-ordered LRU capped at
|
|
48
|
-
* `
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
* growing monotonically with edit count). The dev path only ever needs the
|
|
56
|
-
* latest bundle, so an LRU that keeps the few most-recent bundles and evicts
|
|
57
|
-
* the rest preserves the pre-cache GC behaviour while still serving the
|
|
58
|
-
* steady-state single-bundle case for free. The per-`filename` inner map is not
|
|
59
|
-
* separately bounded: it is naturally bounded by the (small) number of workflow
|
|
60
|
-
* source files in a bundle and is dropped wholesale when its parent `code`
|
|
61
|
-
* entry is evicted.
|
|
49
|
+
* `MAX_SCRIPT_SOURCES` entries. A production deployment has one large bundle
|
|
50
|
+
* source plus small lookup sources; the bundle is touched immediately before
|
|
51
|
+
* its lookup on every compilation, so lookup churn cannot evict the expensive
|
|
52
|
+
* entry in normal use. The bound primarily protects dev/watch mode, where every
|
|
53
|
+
* edit produces a new bundle string that would otherwise pin all historical
|
|
54
|
+
* versions. The per-`filename` inner map is naturally bounded by the workflows
|
|
55
|
+
* compiled from that source and is dropped wholesale with its parent entry.
|
|
62
56
|
*/
|
|
63
57
|
// On `globalThis` (see `globalSingleton`): compiling a bundle is the expensive
|
|
64
58
|
// part this cache exists to skip, and per-copy caches would pay it once per
|
|
@@ -67,20 +61,17 @@ const scripts = globalSingleton('@workflow/core//vmScriptCache', 1, () => ({
|
|
|
67
61
|
byCode: new Map(),
|
|
68
62
|
}));
|
|
69
63
|
/**
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
* churn within a single long-lived process (e.g. a watch session or a test
|
|
73
|
-
* file) without unbounded growth. Kept deliberately small: there is no value
|
|
74
|
-
* in retaining stale bundles, only a memory cost.
|
|
64
|
+
* Maximum number of distinct script source strings to retain. Kept deliberately
|
|
65
|
+
* small because stale bundles and one-off lookup snippets have no lasting value.
|
|
75
66
|
*/
|
|
76
|
-
const
|
|
67
|
+
const MAX_SCRIPT_SOURCES = 8;
|
|
77
68
|
/**
|
|
78
69
|
* Looks up the per-filename map for `code`, marking it most-recently-used.
|
|
79
70
|
* Relies on `Map` preserving insertion order: deleting and re-inserting an
|
|
80
71
|
* existing key moves it to the end (newest), so the first key is always the
|
|
81
72
|
* least-recently-used eviction candidate.
|
|
82
73
|
*/
|
|
83
|
-
function
|
|
74
|
+
function touchScriptSource(code) {
|
|
84
75
|
const byFilename = scripts.byCode.get(code);
|
|
85
76
|
if (byFilename === undefined) {
|
|
86
77
|
return undefined;
|
|
@@ -91,9 +82,9 @@ function touchBundle(code) {
|
|
|
91
82
|
return byFilename;
|
|
92
83
|
}
|
|
93
84
|
/**
|
|
94
|
-
* Returns a compiled `vm.Script` for the given
|
|
95
|
-
*
|
|
96
|
-
*
|
|
85
|
+
* Returns a compiled `vm.Script` for the given source code and filename,
|
|
86
|
+
* compiling and caching it on first use. Subsequent calls with the same
|
|
87
|
+
* `(code, filename)` return the cached `Script`.
|
|
97
88
|
*
|
|
98
89
|
* The returned `Script` is not yet bound to any context; the caller runs it
|
|
99
90
|
* against a specific VM context via `script.runInContext(context)`. This is
|
|
@@ -101,13 +92,13 @@ function touchBundle(code) {
|
|
|
101
92
|
* recompile.
|
|
102
93
|
*/
|
|
103
94
|
export function getCachedWorkflowScript(code, filename) {
|
|
104
|
-
let byFilename =
|
|
95
|
+
let byFilename = touchScriptSource(code);
|
|
105
96
|
if (byFilename === undefined) {
|
|
106
97
|
byFilename = new Map();
|
|
107
98
|
scripts.byCode.set(code, byFilename);
|
|
108
|
-
// Evict the least-recently-used
|
|
99
|
+
// Evict the least-recently-used source(s) when over the cap. New sources
|
|
109
100
|
// are appended at the end, so the oldest live at the front.
|
|
110
|
-
while (scripts.byCode.size >
|
|
101
|
+
while (scripts.byCode.size > MAX_SCRIPT_SOURCES) {
|
|
111
102
|
const oldest = scripts.byCode.keys().next().value;
|
|
112
103
|
if (oldest === undefined) {
|
|
113
104
|
break;
|
|
@@ -116,18 +107,12 @@ export function getCachedWorkflowScript(code, filename) {
|
|
|
116
107
|
}
|
|
117
108
|
}
|
|
118
109
|
let script = byFilename.get(filename);
|
|
110
|
+
const cacheHit = script !== undefined;
|
|
119
111
|
if (script === undefined) {
|
|
120
112
|
script = new Script(code, { filename });
|
|
121
113
|
byFilename.set(filename, script);
|
|
122
114
|
}
|
|
123
|
-
return script;
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Runs the cached workflow-bundle `Script` against `context`. Compiles and
|
|
127
|
-
* caches the `Script` on first use for the given `(code, filename)`.
|
|
128
|
-
*/
|
|
129
|
-
export function runCachedWorkflowScript(code, filename, context) {
|
|
130
|
-
return getCachedWorkflowScript(code, filename).runInContext(context);
|
|
115
|
+
return { script, cacheHit };
|
|
131
116
|
}
|
|
132
117
|
/**
|
|
133
118
|
* Clears the compiled-script cache. Intended for tests that want to assert
|
|
@@ -137,10 +122,10 @@ export function clearWorkflowScriptCache() {
|
|
|
137
122
|
scripts.byCode.clear();
|
|
138
123
|
}
|
|
139
124
|
/**
|
|
140
|
-
* Number of distinct
|
|
125
|
+
* Number of distinct script source strings currently retained. Exposed for
|
|
141
126
|
* tests asserting the LRU bound; not used on the hot path.
|
|
142
127
|
*/
|
|
143
128
|
export function workflowScriptCacheSize() {
|
|
144
129
|
return scripts.byCode.size;
|
|
145
130
|
}
|
|
146
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyaXB0LWNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ZtL3NjcmlwdC1jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFbEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkRHO0FBQ0gsK0VBQStFO0FBQy9FLDRFQUE0RTtBQUM1RSwwQ0FBMEM7QUFDMUMsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLCtCQUErQixFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBK0I7Q0FDL0MsQ0FBQyxDQUFDLENBQUM7QUFFSjs7Ozs7O0dBTUc7QUFDSCxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFFdEI7Ozs7O0dBS0c7QUFDSCxTQUFTLFdBQVcsQ0FBQyxJQUFZO0lBQy9CLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVDLElBQUksVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzdCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxvRUFBb0U7SUFDcEUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3JDLE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLElBQVksRUFDWixRQUFnQjtJQUVoQixJQUFJLFVBQVUsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDN0IsVUFBVSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO1FBQ3ZDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNyQyx5RUFBeUU7UUFDekUsNERBQTREO1FBQzVELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsV0FBVyxFQUFFLENBQUM7WUFDekMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDbEQsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3pCLE1BQU07WUFDUixDQUFDO1lBQ0QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7SUFDRCxJQUFJLE1BQU0sR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3RDLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUNyQyxJQUFZLEVBQ1osUUFBZ0IsRUFDaEIsT0FBZ0I7SUFFaEIsT0FBTyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsd0JBQXdCO0lBQ3RDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDekIsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSx1QkFBdUI7SUFDckMsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztBQUM3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBDb250ZXh0LCBTY3JpcHQgfSBmcm9tICdub2RlOnZtJztcbmltcG9ydCB7IGdsb2JhbFNpbmdsZXRvbiB9IGZyb20gJ0B3b3JrZmxvdy91dGlscyc7XG5cbi8qKlxuICogTW9kdWxlLWxldmVsIGNhY2hlIG9mIGNvbXBpbGVkIHdvcmtmbG93LWJ1bmRsZSBgdm0uU2NyaXB0YCBvYmplY3RzLlxuICpcbiAqIFdoeSB0aGlzIGV4aXN0c1xuICogLS0tLS0tLS0tLS0tLS0tXG4gKiBSZXBsYXlpbmcgYSB3b3JrZmxvdyByZS1ldmFsdWF0ZXMgdGhlIHdvcmtmbG93IGJ1bmRsZSBhZ2FpbnN0IGEgZnJlc2ggVk1cbiAqIGNvbnRleHQgb24gZXZlcnkgaXRlcmF0aW9uIG9mIHRoZSBpbmxpbmUgcmVwbGF5IGxvb3AgKHNlZVxuICogYHJ1bldvcmtmbG93YCBpbiBgLi4vd29ya2Zsb3cudHNgKS4gVGhlIGJ1bmRsZSBpcyBhIHNpbmdsZSBzdHJpbmcgdGhhdFxuICogY29udGFpbnMgZXZlcnkgd29ya2Zsb3cgZnVuY3Rpb24gaW4gdGhlIGFwcCBhbmQgcmVnaXN0ZXJzIHRoZW0gb25cbiAqIGBnbG9iYWxUaGlzLl9fcHJpdmF0ZV93b3JrZmxvd3NgLiBQcmV2aW91c2x5IGVhY2ggcmVwbGF5IGNhbGxlZFxuICogYHZtLnJ1bkluQ29udGV4dCh3b3JrZmxvd0NvZGUsIGNvbnRleHQsIHsgZmlsZW5hbWUgfSlgLCB3aGljaCBSRS1QQVJTRVMgYW5kXG4gKiBSRS1DT01QSUxFUyB0aGUgZW50aXJlIGJ1bmRsZSBldmVyeSB0aW1lOiBPKE4pIGZ1bGwgcmUtcGFyc2VzIGZvciBhXG4gKiBzZXF1ZW50aWFsIHdvcmtmbG93IG9mIE4gc3RlcHMsIHBsdXMgdGhlIHNhbWUgcGFyc2UgY29zdCByZXBlYXRlZCBhY3Jvc3NcbiAqIGV2ZXJ5IGludm9jYXRpb24gaW4gdGhlIHByb2Nlc3MuXG4gKlxuICogQ29tcGlsYXRpb24gaXMgYSBwdXJlIGZ1bmN0aW9uIG9mIGAoY29kZSwgZmlsZW5hbWUpYDogYSBgdm0uU2NyaXB0YCBjYXJyaWVzXG4gKiBubyByZWFsbS9jb250ZXh0IHN0YXRlOyBpdCBpcyBvbmx5IGJvdW5kIHRvIGEgY29udGV4dCBhdCBgcnVuSW5Db250ZXh0YFxuICogdGltZS4gU28gYSBzaW5nbGUgY29tcGlsZWQgYFNjcmlwdGAgY2FuIGJlIHJldXNlZCBhY3Jvc3MgcmVwbGF5cyBBTkQgYWNyb3NzXG4gKiB3b3JrZmxvdyBpbnZvY2F0aW9ucyBpbiB0aGUgc2FtZSBwcm9jZXNzIHdpdGhvdXQgYWZmZWN0aW5nIGRldGVybWluaXNtOiB0aGVcbiAqIHByb2R1Y2VkIHdvcmtmbG93IGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byB0aGUgcHJldmlvdXMgcmUtcGFyc2UtZXZlcnktdGltZVxuICogYmVoYXZpb3VyLCB3aXRoIGlkZW50aWNhbCBgZmlsZW5hbWVgIHNvdXJjZSBhdHRyaWJ1dGlvbiAoc2VlIHRoZSBwcmVjaXNlXG4gKiBjbGFpbSwgYW5kIGl0cyBvbmUgY2F2ZWF0LCBpbiBgcnVuV29ya2Zsb3dgKS5cbiAqXG4gKiBLZXlpbmdcbiAqIC0tLS0tLVxuICogS2V5ZWQgYnkgYGNvZGVgIHRoZW4gYGZpbGVuYW1lYC4gVGhlIGBmaWxlbmFtZWAgaXMgcGFydCBvZiB0aGUga2V5IG9uXG4gKiBwdXJwb3NlLCBOT1QgYXMgYSBkZWR1cGUga2V5OiBpdCBpcyBiYWtlZCBpbnRvIHRoZSBjb21waWxlZCBzY3JpcHQncyBzb3VyY2VcbiAqIGF0dHJpYnV0aW9uIGFuZCBzdXJmYWNlcyBpbiBzdGFjayB0cmFjZXMsIHdoZXJlIGByZW1hcEVycm9yU3RhY2tgIGtleXMgb24gaXRcbiAqIHRvIG1hcCBmcmFtZXMgYmFjayB0byB0aGUgdXNlcidzIHNvdXJjZS4gVHdvIHdvcmtmbG93cyBpbiB0aGUgc2FtZSBidW5kbGVcbiAqIHNoYXJlIHRoZSBzYW1lIGBjb2RlYCBidXQgaGF2ZSBkaWZmZXJlbnQgYGZpbGVuYW1lYHMsIHNvIHRoZXkgaW50ZW50aW9uYWxseVxuICogY29tcGlsZSB0byBkaXN0aW5jdCBgU2NyaXB0YHM7IGNvbGxhcHNpbmcgdGhlbSBvbnRvIGEgc2luZ2xlIHNoYXJlZCBgU2NyaXB0YFxuICogd291bGQgbWlzYXR0cmlidXRlIG9uZSB3b3JrZmxvdydzIHN0YWNrIGZyYW1lcyB0byBhbm90aGVyIGZpbGUuIFRoZSBjb3N0IG9mXG4gKiBrZWVwaW5nIHRoZW0gZGlzdGluY3QgaXMgdGhhdCB0aGUgd2hvbGUgYnVuZGxlIGlzIGNvbXBpbGVkIG9uY2UgcGVyIGRpc3RpbmN0XG4gKiBgZmlsZW5hbWVgIChub3Qgb25jZSBwZXIgYnVuZGxlKTsgaW4gcHJhY3RpY2UgdGhhdCBpcyBib3VuZGVkIGJ5IHRoZSBudW1iZXJcbiAqIG9mIHNvdXJjZSBmaWxlcyB0aGF0IGRlZmluZSBhIHdvcmtmbG93LCBhbmQgYmVjYXVzZSBWOCBsYXppbHkgY29tcGlsZXNcbiAqIGZ1bmN0aW9uIGJvZGllcyB0aGUgZHVwbGljYXRlZCB3b3JrIGlzIHRoZSAoY2hlYXApIHRvcC1sZXZlbCBwYXJzZSwgbm90IGZ1bGxcbiAqIHBlci13b3JrZmxvdyBjb2RlZ2VuLlxuICpcbiAqIFdlIHVzZSBhIG5lc3RlZCBNYXAgKGNvZGUgLT4gZmlsZW5hbWUgLT4gU2NyaXB0KSBzbyB0aGF0IGV2aWN0aW5nIGEgYnVuZGxlXG4gKiAoZS5nLiBhIG5ldyBkZXBsb3ltZW50L2hvdC1yZWxvYWQgcHJvZHVjaW5nIGEgZGlmZmVyZW50IGBjb2RlYCkgZHJvcHMgdGhlIG9sZFxuICogY29kZSBzdHJpbmcgYW5kIGFsbCBvZiBpdHMgcGVyLWZpbGVuYW1lIHNjcmlwdHMgdG9nZXRoZXIuXG4gKlxuICogQm91bmRpbmdcbiAqIC0tLS0tLS0tXG4gKiBUaGUgdG9wLWxldmVsIChgY29kZWAta2V5ZWQpIG1hcCBpcyBhbiBpbnNlcnRpb24tb3JkZXJlZCBMUlUgY2FwcGVkIGF0XG4gKiBgTUFYX0JVTkRMRVNgIGVudHJpZXMuIEluIHByb2R1Y3Rpb24gdGhpcyBib3VuZCBpcyBuZXZlciByZWFjaGVkOiBhXG4gKiBkZXBsb3ltZW50IGlzIGl0cyBvd24gcHJvY2VzcyBzZXJ2aW5nIGV4YWN0bHkgb25lIGJ1aWxkLXRpbWUgYnVuZGxlIGxpdGVyYWxcbiAqIChza2V3IHByb3RlY3Rpb24gcnVucyBvbGQgdmVyc2lvbnMgYXMgc2VwYXJhdGUgcHJvY2Vzc2VzKSwgc28gdGhlcmUgaXMgYVxuICogc2luZ2xlIGBjb2RlYCBrZXkgZm9yIHRoZSBwcm9jZXNzIGxpZmV0aW1lLiBUaGUgYm91bmQgZXhpc3RzIGZvciBkZXYvd2F0Y2hcbiAqIG1vZGUsIHdoZXJlIHRoZSBkZXYgcm91dGUgcmUtcmVhZHMgYHdvcmtmbG93Q29kZWAgZnJvbSBkaXNrIGFuZCByZS1pbnZva2VzXG4gKiB0aGUgZW50cnlwb2ludCBvbiBldmVyeSBlZGl0OiBlYWNoIGVkaXQgcHJvZHVjZXMgYSBORVcgYnVuZGxlIHN0cmluZywgd2hpY2hcbiAqIHdpdGhvdXQgYSBib3VuZCB3b3VsZCBwaW4gZXZlcnkgaGlzdG9yaWNhbCB2ZXJzaW9uIGZvcmV2ZXIgKH4wLjhNQiBwZXIgZWRpdCxcbiAqIGdyb3dpbmcgbW9ub3RvbmljYWxseSB3aXRoIGVkaXQgY291bnQpLiBUaGUgZGV2IHBhdGggb25seSBldmVyIG5lZWRzIHRoZVxuICogbGF0ZXN0IGJ1bmRsZSwgc28gYW4gTFJVIHRoYXQga2VlcHMgdGhlIGZldyBtb3N0LXJlY2VudCBidW5kbGVzIGFuZCBldmljdHNcbiAqIHRoZSByZXN0IHByZXNlcnZlcyB0aGUgcHJlLWNhY2hlIEdDIGJlaGF2aW91ciB3aGlsZSBzdGlsbCBzZXJ2aW5nIHRoZVxuICogc3RlYWR5LXN0YXRlIHNpbmdsZS1idW5kbGUgY2FzZSBmb3IgZnJlZS4gVGhlIHBlci1gZmlsZW5hbWVgIGlubmVyIG1hcCBpcyBub3RcbiAqIHNlcGFyYXRlbHkgYm91bmRlZDogaXQgaXMgbmF0dXJhbGx5IGJvdW5kZWQgYnkgdGhlIChzbWFsbCkgbnVtYmVyIG9mIHdvcmtmbG93XG4gKiBzb3VyY2UgZmlsZXMgaW4gYSBidW5kbGUgYW5kIGlzIGRyb3BwZWQgd2hvbGVzYWxlIHdoZW4gaXRzIHBhcmVudCBgY29kZWBcbiAqIGVudHJ5IGlzIGV2aWN0ZWQuXG4gKi9cbi8vIE9uIGBnbG9iYWxUaGlzYCAoc2VlIGBnbG9iYWxTaW5nbGV0b25gKTogY29tcGlsaW5nIGEgYnVuZGxlIGlzIHRoZSBleHBlbnNpdmVcbi8vIHBhcnQgdGhpcyBjYWNoZSBleGlzdHMgdG8gc2tpcCwgYW5kIHBlci1jb3B5IGNhY2hlcyB3b3VsZCBwYXkgaXQgb25jZSBwZXJcbi8vIGJ1bmRsZXIgbGF5ZXIgdGhhdCBjb21waWxlcyBhIHdvcmtmbG93LlxuY29uc3Qgc2NyaXB0cyA9IGdsb2JhbFNpbmdsZXRvbignQHdvcmtmbG93L2NvcmUvL3ZtU2NyaXB0Q2FjaGUnLCAxLCAoKSA9PiAoe1xuICBieUNvZGU6IG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBTY3JpcHQ+PigpLFxufSkpO1xuXG4vKipcbiAqIE1heCBudW1iZXIgb2YgZGlzdGluY3QgYnVuZGxlIChgY29kZWApIHZlcnNpb25zIHRvIHJldGFpbi4gT25lIGlzIGVub3VnaCBmb3JcbiAqIHByb2R1Y3Rpb247IGEgaGFuZGZ1bCBjb3ZlcnMgcGF0aG9sb2dpY2FsIGRldiBob3QtcmVsb2FkIC8gcmVwZWF0ZWQtcmVidWlsZFxuICogY2h1cm4gd2l0aGluIGEgc2luZ2xlIGxvbmctbGl2ZWQgcHJvY2VzcyAoZS5nLiBhIHdhdGNoIHNlc3Npb24gb3IgYSB0ZXN0XG4gKiBmaWxlKSB3aXRob3V0IHVuYm91bmRlZCBncm93dGguIEtlcHQgZGVsaWJlcmF0ZWx5IHNtYWxsOiB0aGVyZSBpcyBubyB2YWx1ZVxuICogaW4gcmV0YWluaW5nIHN0YWxlIGJ1bmRsZXMsIG9ubHkgYSBtZW1vcnkgY29zdC5cbiAqL1xuY29uc3QgTUFYX0JVTkRMRVMgPSA4O1xuXG4vKipcbiAqIExvb2tzIHVwIHRoZSBwZXItZmlsZW5hbWUgbWFwIGZvciBgY29kZWAsIG1hcmtpbmcgaXQgbW9zdC1yZWNlbnRseS11c2VkLlxuICogUmVsaWVzIG9uIGBNYXBgIHByZXNlcnZpbmcgaW5zZXJ0aW9uIG9yZGVyOiBkZWxldGluZyBhbmQgcmUtaW5zZXJ0aW5nIGFuXG4gKiBleGlzdGluZyBrZXkgbW92ZXMgaXQgdG8gdGhlIGVuZCAobmV3ZXN0KSwgc28gdGhlIGZpcnN0IGtleSBpcyBhbHdheXMgdGhlXG4gKiBsZWFzdC1yZWNlbnRseS11c2VkIGV2aWN0aW9uIGNhbmRpZGF0ZS5cbiAqL1xuZnVuY3Rpb24gdG91Y2hCdW5kbGUoY29kZTogc3RyaW5nKTogTWFwPHN0cmluZywgU2NyaXB0PiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGJ5RmlsZW5hbWUgPSBzY3JpcHRzLmJ5Q29kZS5nZXQoY29kZSk7XG4gIGlmIChieUZpbGVuYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIC8vIE1vdmUgdG8gdGhlIG1vc3QtcmVjZW50bHktdXNlZCBwb3NpdGlvbiAoZW5kIG9mIGluc2VydGlvbiBvcmRlcikuXG4gIHNjcmlwdHMuYnlDb2RlLmRlbGV0ZShjb2RlKTtcbiAgc2NyaXB0cy5ieUNvZGUuc2V0KGNvZGUsIGJ5RmlsZW5hbWUpO1xuICByZXR1cm4gYnlGaWxlbmFtZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgY29tcGlsZWQgYHZtLlNjcmlwdGAgZm9yIHRoZSBnaXZlbiB3b3JrZmxvdyBidW5kbGUgY29kZSBhbmRcbiAqIGZpbGVuYW1lLCBjb21waWxpbmcgYW5kIGNhY2hpbmcgaXQgb24gZmlyc3QgdXNlLiBTdWJzZXF1ZW50IGNhbGxzIHdpdGggdGhlXG4gKiBzYW1lIGAoY29kZSwgZmlsZW5hbWUpYCByZXR1cm4gdGhlIGNhY2hlZCBgU2NyaXB0YC5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgYFNjcmlwdGAgaXMgbm90IHlldCBib3VuZCB0byBhbnkgY29udGV4dDsgdGhlIGNhbGxlciBydW5zIGl0XG4gKiBhZ2FpbnN0IGEgc3BlY2lmaWMgVk0gY29udGV4dCB2aWEgYHNjcmlwdC5ydW5JbkNvbnRleHQoY29udGV4dClgLiBUaGlzIGlzXG4gKiBlcXVpdmFsZW50IHRvIGB2bS5ydW5JbkNvbnRleHQoY29kZSwgY29udGV4dCwgeyBmaWxlbmFtZSB9KWAgYnV0IHNraXBzIHRoZVxuICogcmVjb21waWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FjaGVkV29ya2Zsb3dTY3JpcHQoXG4gIGNvZGU6IHN0cmluZyxcbiAgZmlsZW5hbWU6IHN0cmluZ1xuKTogU2NyaXB0IHtcbiAgbGV0IGJ5RmlsZW5hbWUgPSB0b3VjaEJ1bmRsZShjb2RlKTtcbiAgaWYgKGJ5RmlsZW5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgIGJ5RmlsZW5hbWUgPSBuZXcgTWFwPHN0cmluZywgU2NyaXB0PigpO1xuICAgIHNjcmlwdHMuYnlDb2RlLnNldChjb2RlLCBieUZpbGVuYW1lKTtcbiAgICAvLyBFdmljdCB0aGUgbGVhc3QtcmVjZW50bHktdXNlZCBidW5kbGUocykgd2hlbiBvdmVyIHRoZSBjYXAuIE5ldyBidW5kbGVzXG4gICAgLy8gYXJlIGFwcGVuZGVkIGF0IHRoZSBlbmQsIHNvIHRoZSBvbGRlc3QgbGl2ZSBhdCB0aGUgZnJvbnQuXG4gICAgd2hpbGUgKHNjcmlwdHMuYnlDb2RlLnNpemUgPiBNQVhfQlVORExFUykge1xuICAgICAgY29uc3Qgb2xkZXN0ID0gc2NyaXB0cy5ieUNvZGUua2V5cygpLm5leHQoKS52YWx1ZTtcbiAgICAgIGlmIChvbGRlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHNjcmlwdHMuYnlDb2RlLmRlbGV0ZShvbGRlc3QpO1xuICAgIH1cbiAgfVxuICBsZXQgc2NyaXB0ID0gYnlGaWxlbmFtZS5nZXQoZmlsZW5hbWUpO1xuICBpZiAoc2NyaXB0ID09PSB1bmRlZmluZWQpIHtcbiAgICBzY3JpcHQgPSBuZXcgU2NyaXB0KGNvZGUsIHsgZmlsZW5hbWUgfSk7XG4gICAgYnlGaWxlbmFtZS5zZXQoZmlsZW5hbWUsIHNjcmlwdCk7XG4gIH1cbiAgcmV0dXJuIHNjcmlwdDtcbn1cblxuLyoqXG4gKiBSdW5zIHRoZSBjYWNoZWQgd29ya2Zsb3ctYnVuZGxlIGBTY3JpcHRgIGFnYWluc3QgYGNvbnRleHRgLiBDb21waWxlcyBhbmRcbiAqIGNhY2hlcyB0aGUgYFNjcmlwdGAgb24gZmlyc3QgdXNlIGZvciB0aGUgZ2l2ZW4gYChjb2RlLCBmaWxlbmFtZSlgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuQ2FjaGVkV29ya2Zsb3dTY3JpcHQoXG4gIGNvZGU6IHN0cmluZyxcbiAgZmlsZW5hbWU6IHN0cmluZyxcbiAgY29udGV4dDogQ29udGV4dFxuKTogdW5rbm93biB7XG4gIHJldHVybiBnZXRDYWNoZWRXb3JrZmxvd1NjcmlwdChjb2RlLCBmaWxlbmFtZSkucnVuSW5Db250ZXh0KGNvbnRleHQpO1xufVxuXG4vKipcbiAqIENsZWFycyB0aGUgY29tcGlsZWQtc2NyaXB0IGNhY2hlLiBJbnRlbmRlZCBmb3IgdGVzdHMgdGhhdCB3YW50IHRvIGFzc2VydFxuICogY29tcGlsZS12cy1jYWNoZSBiZWhhdmlvdXIgaW4gaXNvbGF0aW9uOyBub3QgdXNlZCBvbiB0aGUgaG90IHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhcldvcmtmbG93U2NyaXB0Q2FjaGUoKTogdm9pZCB7XG4gIHNjcmlwdHMuYnlDb2RlLmNsZWFyKCk7XG59XG5cbi8qKlxuICogTnVtYmVyIG9mIGRpc3RpbmN0IGJ1bmRsZSAoYGNvZGVgKSB2ZXJzaW9ucyBjdXJyZW50bHkgcmV0YWluZWQuIEV4cG9zZWQgZm9yXG4gKiB0ZXN0cyBhc3NlcnRpbmcgdGhlIExSVSBib3VuZDsgbm90IHVzZWQgb24gdGhlIGhvdCBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd29ya2Zsb3dTY3JpcHRDYWNoZVNpemUoKTogbnVtYmVyIHtcbiAgcmV0dXJuIHNjcmlwdHMuYnlDb2RlLnNpemU7XG59XG4iXX0=
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyaXB0LWNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ZtL3NjcmlwdC1jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVsRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxREc7QUFDSCwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLDBDQUEwQztBQUMxQyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsK0JBQStCLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDekUsTUFBTSxFQUFFLElBQUksR0FBRyxFQUErQjtDQUMvQyxDQUFDLENBQUMsQ0FBQztBQUVKOzs7R0FHRztBQUNILE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO0FBRTdCOzs7OztHQUtHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxJQUFZO0lBQ3JDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVDLElBQUksVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzdCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxvRUFBb0U7SUFDcEUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3JDLE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLElBQVksRUFDWixRQUFnQjtJQUVoQixJQUFJLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxJQUFJLFVBQVUsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM3QixVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7UUFDdkMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3JDLHlFQUF5RTtRQUN6RSw0REFBNEQ7UUFDNUQsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxrQkFBa0IsRUFBRSxDQUFDO1lBQ2hELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ2xELElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN6QixNQUFNO1lBQ1IsQ0FBQztZQUNELE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLENBQUM7SUFDSCxDQUFDO0lBQ0QsSUFBSSxNQUFNLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN0QyxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssU0FBUyxDQUFDO0lBQ3RDLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFDRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDO0FBQzlCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsd0JBQXdCO0lBQ3RDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDekIsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSx1QkFBdUI7SUFDckMsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztBQUM3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2NyaXB0IH0gZnJvbSAnbm9kZTp2bSc7XG5pbXBvcnQgeyBnbG9iYWxTaW5nbGV0b24gfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuXG4vKipcbiAqIE1vZHVsZS1sZXZlbCBjYWNoZSBvZiBjb21waWxlZCB3b3JrZmxvdy1idW5kbGUgYHZtLlNjcmlwdGAgb2JqZWN0cy5cbiAqXG4gKiBXaHkgdGhpcyBleGlzdHNcbiAqIC0tLS0tLS0tLS0tLS0tLVxuICogUmVwbGF5aW5nIGEgd29ya2Zsb3cgcmUtZXZhbHVhdGVzIHRoZSB3b3JrZmxvdyBidW5kbGUgYWdhaW5zdCBhIGZyZXNoIFZNXG4gKiBjb250ZXh0IG9uIGV2ZXJ5IGl0ZXJhdGlvbiBvZiB0aGUgaW5saW5lIHJlcGxheSBsb29wIChzZWVcbiAqIGBydW5Xb3JrZmxvd2AgaW4gYC4uL3dvcmtmbG93LnRzYCkuIFRoZSBidW5kbGUgaXMgYSBzaW5nbGUgc3RyaW5nIHRoYXRcbiAqIGNvbnRhaW5zIGV2ZXJ5IHdvcmtmbG93IGZ1bmN0aW9uIGluIHRoZSBhcHAgYW5kIHJlZ2lzdGVycyB0aGVtIG9uXG4gKiBgZ2xvYmFsVGhpcy5fX3ByaXZhdGVfd29ya2Zsb3dzYC4gUHJldmlvdXNseSBlYWNoIHJlcGxheSBjYWxsZWRcbiAqIGB2bS5ydW5JbkNvbnRleHQod29ya2Zsb3dDb2RlLCBjb250ZXh0LCB7IGZpbGVuYW1lIH0pYCwgd2hpY2ggUkUtUEFSU0VTIGFuZFxuICogUkUtQ09NUElMRVMgdGhlIGVudGlyZSBidW5kbGUgZXZlcnkgdGltZTogTyhOKSBmdWxsIHJlLXBhcnNlcyBmb3IgYVxuICogc2VxdWVudGlhbCB3b3JrZmxvdyBvZiBOIHN0ZXBzLCBwbHVzIHRoZSBzYW1lIHBhcnNlIGNvc3QgcmVwZWF0ZWQgYWNyb3NzXG4gKiBldmVyeSBpbnZvY2F0aW9uIGluIHRoZSBwcm9jZXNzLlxuICpcbiAqIENvbXBpbGF0aW9uIGlzIGEgcHVyZSBmdW5jdGlvbiBvZiBgKGNvZGUsIGZpbGVuYW1lKWA6IGEgYHZtLlNjcmlwdGAgY2Fycmllc1xuICogbm8gcmVhbG0vY29udGV4dCBzdGF0ZTsgaXQgaXMgb25seSBib3VuZCB0byBhIGNvbnRleHQgYXQgYHJ1bkluQ29udGV4dGBcbiAqIHRpbWUuIFNvIGEgc2luZ2xlIGNvbXBpbGVkIGBTY3JpcHRgIGNhbiBiZSByZXVzZWQgYWNyb3NzIHJlcGxheXMgQU5EIGFjcm9zc1xuICogd29ya2Zsb3cgaW52b2NhdGlvbnMgaW4gdGhlIHNhbWUgcHJvY2VzcyB3aXRob3V0IGFmZmVjdGluZyBkZXRlcm1pbmlzbTogdGhlXG4gKiBwcm9kdWNlZCB3b3JrZmxvdyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gdGhlIHByZXZpb3VzIHJlLXBhcnNlLWV2ZXJ5LXRpbWVcbiAqIGJlaGF2aW91ciwgd2l0aCBpZGVudGljYWwgYGZpbGVuYW1lYCBzb3VyY2UgYXR0cmlidXRpb24gKHNlZSB0aGUgcHJlY2lzZVxuICogY2xhaW0sIGFuZCBpdHMgb25lIGNhdmVhdCwgaW4gYHJ1bldvcmtmbG93YCkuXG4gKlxuICogS2V5aW5nXG4gKiAtLS0tLS1cbiAqIEtleWVkIGJ5IGBjb2RlYCB0aGVuIGBmaWxlbmFtZWAuIFRoZSBgZmlsZW5hbWVgIGlzIHBhcnQgb2YgdGhlIGtleSBvblxuICogcHVycG9zZSwgTk9UIGFzIGEgZGVkdXBlIGtleTogaXQgaXMgYmFrZWQgaW50byB0aGUgY29tcGlsZWQgc2NyaXB0J3Mgc291cmNlXG4gKiBhdHRyaWJ1dGlvbiBhbmQgc3VyZmFjZXMgaW4gc3RhY2sgdHJhY2VzLCB3aGVyZSBgcmVtYXBFcnJvclN0YWNrYCBrZXlzIG9uIGl0XG4gKiB0byBtYXAgZnJhbWVzIGJhY2sgdG8gdGhlIHVzZXIncyBzb3VyY2UuIFR3byB3b3JrZmxvd3MgaW4gdGhlIHNhbWUgYnVuZGxlXG4gKiBzaGFyZSB0aGUgc2FtZSBgY29kZWAgYnV0IGhhdmUgZGlmZmVyZW50IGBmaWxlbmFtZWBzLCBzbyB0aGV5IGludGVudGlvbmFsbHlcbiAqIGNvbXBpbGUgdG8gZGlzdGluY3QgYFNjcmlwdGBzOyBjb2xsYXBzaW5nIHRoZW0gb250byBhIHNpbmdsZSBzaGFyZWQgYFNjcmlwdGBcbiAqIHdvdWxkIG1pc2F0dHJpYnV0ZSBvbmUgd29ya2Zsb3cncyBzdGFjayBmcmFtZXMgdG8gYW5vdGhlciBmaWxlLiBUaGUgY29zdCBvZlxuICoga2VlcGluZyB0aGVtIGRpc3RpbmN0IGlzIHRoYXQgdGhlIHdob2xlIGJ1bmRsZSBpcyBjb21waWxlZCBvbmNlIHBlciBkaXN0aW5jdFxuICogYGZpbGVuYW1lYCAobm90IG9uY2UgcGVyIGJ1bmRsZSk7IGluIHByYWN0aWNlIHRoYXQgaXMgYm91bmRlZCBieSB0aGUgbnVtYmVyXG4gKiBvZiBzb3VyY2UgZmlsZXMgdGhhdCBkZWZpbmUgYSB3b3JrZmxvdywgYW5kIGJlY2F1c2UgVjggbGF6aWx5IGNvbXBpbGVzXG4gKiBmdW5jdGlvbiBib2RpZXMgdGhlIGR1cGxpY2F0ZWQgd29yayBpcyB0aGUgKGNoZWFwKSB0b3AtbGV2ZWwgcGFyc2UsIG5vdCBmdWxsXG4gKiBwZXItd29ya2Zsb3cgY29kZWdlbi5cbiAqXG4gKiBXZSB1c2UgYSBuZXN0ZWQgTWFwIChjb2RlIC0+IGZpbGVuYW1lIC0+IFNjcmlwdCkgc28gdGhhdCBldmljdGluZyBhIHNvdXJjZVxuICogc3RyaW5nIGRyb3BzIGFsbCBvZiBpdHMgcGVyLWZpbGVuYW1lIHNjcmlwdHMgdG9nZXRoZXIuIE1vc3QgZW50cmllcyBhcmUgZnVsbFxuICogd29ya2Zsb3cgYnVuZGxlczsgYGNvbXBpbGVXb3JrZmxvd0J1bmRsZWAgYWxzbyBjYWNoZXMgaXRzIHRpbnkgd29ya2Zsb3ctbmFtZVxuICogbG9va3VwIHNuaXBwZXRzIGhlcmUuXG4gKlxuICogQm91bmRpbmdcbiAqIC0tLS0tLS0tXG4gKiBUaGUgdG9wLWxldmVsIChgY29kZWAta2V5ZWQpIG1hcCBpcyBhbiBpbnNlcnRpb24tb3JkZXJlZCBMUlUgY2FwcGVkIGF0XG4gKiBgTUFYX1NDUklQVF9TT1VSQ0VTYCBlbnRyaWVzLiBBIHByb2R1Y3Rpb24gZGVwbG95bWVudCBoYXMgb25lIGxhcmdlIGJ1bmRsZVxuICogc291cmNlIHBsdXMgc21hbGwgbG9va3VwIHNvdXJjZXM7IHRoZSBidW5kbGUgaXMgdG91Y2hlZCBpbW1lZGlhdGVseSBiZWZvcmVcbiAqIGl0cyBsb29rdXAgb24gZXZlcnkgY29tcGlsYXRpb24sIHNvIGxvb2t1cCBjaHVybiBjYW5ub3QgZXZpY3QgdGhlIGV4cGVuc2l2ZVxuICogZW50cnkgaW4gbm9ybWFsIHVzZS4gVGhlIGJvdW5kIHByaW1hcmlseSBwcm90ZWN0cyBkZXYvd2F0Y2ggbW9kZSwgd2hlcmUgZXZlcnlcbiAqIGVkaXQgcHJvZHVjZXMgYSBuZXcgYnVuZGxlIHN0cmluZyB0aGF0IHdvdWxkIG90aGVyd2lzZSBwaW4gYWxsIGhpc3RvcmljYWxcbiAqIHZlcnNpb25zLiBUaGUgcGVyLWBmaWxlbmFtZWAgaW5uZXIgbWFwIGlzIG5hdHVyYWxseSBib3VuZGVkIGJ5IHRoZSB3b3JrZmxvd3NcbiAqIGNvbXBpbGVkIGZyb20gdGhhdCBzb3VyY2UgYW5kIGlzIGRyb3BwZWQgd2hvbGVzYWxlIHdpdGggaXRzIHBhcmVudCBlbnRyeS5cbiAqL1xuLy8gT24gYGdsb2JhbFRoaXNgIChzZWUgYGdsb2JhbFNpbmdsZXRvbmApOiBjb21waWxpbmcgYSBidW5kbGUgaXMgdGhlIGV4cGVuc2l2ZVxuLy8gcGFydCB0aGlzIGNhY2hlIGV4aXN0cyB0byBza2lwLCBhbmQgcGVyLWNvcHkgY2FjaGVzIHdvdWxkIHBheSBpdCBvbmNlIHBlclxuLy8gYnVuZGxlciBsYXllciB0aGF0IGNvbXBpbGVzIGEgd29ya2Zsb3cuXG5jb25zdCBzY3JpcHRzID0gZ2xvYmFsU2luZ2xldG9uKCdAd29ya2Zsb3cvY29yZS8vdm1TY3JpcHRDYWNoZScsIDEsICgpID0+ICh7XG4gIGJ5Q29kZTogbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIFNjcmlwdD4+KCksXG59KSk7XG5cbi8qKlxuICogTWF4aW11bSBudW1iZXIgb2YgZGlzdGluY3Qgc2NyaXB0IHNvdXJjZSBzdHJpbmdzIHRvIHJldGFpbi4gS2VwdCBkZWxpYmVyYXRlbHlcbiAqIHNtYWxsIGJlY2F1c2Ugc3RhbGUgYnVuZGxlcyBhbmQgb25lLW9mZiBsb29rdXAgc25pcHBldHMgaGF2ZSBubyBsYXN0aW5nIHZhbHVlLlxuICovXG5jb25zdCBNQVhfU0NSSVBUX1NPVVJDRVMgPSA4O1xuXG4vKipcbiAqIExvb2tzIHVwIHRoZSBwZXItZmlsZW5hbWUgbWFwIGZvciBgY29kZWAsIG1hcmtpbmcgaXQgbW9zdC1yZWNlbnRseS11c2VkLlxuICogUmVsaWVzIG9uIGBNYXBgIHByZXNlcnZpbmcgaW5zZXJ0aW9uIG9yZGVyOiBkZWxldGluZyBhbmQgcmUtaW5zZXJ0aW5nIGFuXG4gKiBleGlzdGluZyBrZXkgbW92ZXMgaXQgdG8gdGhlIGVuZCAobmV3ZXN0KSwgc28gdGhlIGZpcnN0IGtleSBpcyBhbHdheXMgdGhlXG4gKiBsZWFzdC1yZWNlbnRseS11c2VkIGV2aWN0aW9uIGNhbmRpZGF0ZS5cbiAqL1xuZnVuY3Rpb24gdG91Y2hTY3JpcHRTb3VyY2UoY29kZTogc3RyaW5nKTogTWFwPHN0cmluZywgU2NyaXB0PiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGJ5RmlsZW5hbWUgPSBzY3JpcHRzLmJ5Q29kZS5nZXQoY29kZSk7XG4gIGlmIChieUZpbGVuYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIC8vIE1vdmUgdG8gdGhlIG1vc3QtcmVjZW50bHktdXNlZCBwb3NpdGlvbiAoZW5kIG9mIGluc2VydGlvbiBvcmRlcikuXG4gIHNjcmlwdHMuYnlDb2RlLmRlbGV0ZShjb2RlKTtcbiAgc2NyaXB0cy5ieUNvZGUuc2V0KGNvZGUsIGJ5RmlsZW5hbWUpO1xuICByZXR1cm4gYnlGaWxlbmFtZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgY29tcGlsZWQgYHZtLlNjcmlwdGAgZm9yIHRoZSBnaXZlbiBzb3VyY2UgY29kZSBhbmQgZmlsZW5hbWUsXG4gKiBjb21waWxpbmcgYW5kIGNhY2hpbmcgaXQgb24gZmlyc3QgdXNlLiBTdWJzZXF1ZW50IGNhbGxzIHdpdGggdGhlIHNhbWVcbiAqIGAoY29kZSwgZmlsZW5hbWUpYCByZXR1cm4gdGhlIGNhY2hlZCBgU2NyaXB0YC5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgYFNjcmlwdGAgaXMgbm90IHlldCBib3VuZCB0byBhbnkgY29udGV4dDsgdGhlIGNhbGxlciBydW5zIGl0XG4gKiBhZ2FpbnN0IGEgc3BlY2lmaWMgVk0gY29udGV4dCB2aWEgYHNjcmlwdC5ydW5JbkNvbnRleHQoY29udGV4dClgLiBUaGlzIGlzXG4gKiBlcXVpdmFsZW50IHRvIGB2bS5ydW5JbkNvbnRleHQoY29kZSwgY29udGV4dCwgeyBmaWxlbmFtZSB9KWAgYnV0IHNraXBzIHRoZVxuICogcmVjb21waWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FjaGVkV29ya2Zsb3dTY3JpcHQoXG4gIGNvZGU6IHN0cmluZyxcbiAgZmlsZW5hbWU6IHN0cmluZ1xuKTogeyBzY3JpcHQ6IFNjcmlwdDsgY2FjaGVIaXQ6IGJvb2xlYW4gfSB7XG4gIGxldCBieUZpbGVuYW1lID0gdG91Y2hTY3JpcHRTb3VyY2UoY29kZSk7XG4gIGlmIChieUZpbGVuYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICBieUZpbGVuYW1lID0gbmV3IE1hcDxzdHJpbmcsIFNjcmlwdD4oKTtcbiAgICBzY3JpcHRzLmJ5Q29kZS5zZXQoY29kZSwgYnlGaWxlbmFtZSk7XG4gICAgLy8gRXZpY3QgdGhlIGxlYXN0LXJlY2VudGx5LXVzZWQgc291cmNlKHMpIHdoZW4gb3ZlciB0aGUgY2FwLiBOZXcgc291cmNlc1xuICAgIC8vIGFyZSBhcHBlbmRlZCBhdCB0aGUgZW5kLCBzbyB0aGUgb2xkZXN0IGxpdmUgYXQgdGhlIGZyb250LlxuICAgIHdoaWxlIChzY3JpcHRzLmJ5Q29kZS5zaXplID4gTUFYX1NDUklQVF9TT1VSQ0VTKSB7XG4gICAgICBjb25zdCBvbGRlc3QgPSBzY3JpcHRzLmJ5Q29kZS5rZXlzKCkubmV4dCgpLnZhbHVlO1xuICAgICAgaWYgKG9sZGVzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgc2NyaXB0cy5ieUNvZGUuZGVsZXRlKG9sZGVzdCk7XG4gICAgfVxuICB9XG4gIGxldCBzY3JpcHQgPSBieUZpbGVuYW1lLmdldChmaWxlbmFtZSk7XG4gIGNvbnN0IGNhY2hlSGl0ID0gc2NyaXB0ICE9PSB1bmRlZmluZWQ7XG4gIGlmIChzY3JpcHQgPT09IHVuZGVmaW5lZCkge1xuICAgIHNjcmlwdCA9IG5ldyBTY3JpcHQoY29kZSwgeyBmaWxlbmFtZSB9KTtcbiAgICBieUZpbGVuYW1lLnNldChmaWxlbmFtZSwgc2NyaXB0KTtcbiAgfVxuICByZXR1cm4geyBzY3JpcHQsIGNhY2hlSGl0IH07XG59XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBjb21waWxlZC1zY3JpcHQgY2FjaGUuIEludGVuZGVkIGZvciB0ZXN0cyB0aGF0IHdhbnQgdG8gYXNzZXJ0XG4gKiBjb21waWxlLXZzLWNhY2hlIGJlaGF2aW91ciBpbiBpc29sYXRpb247IG5vdCB1c2VkIG9uIHRoZSBob3QgcGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyV29ya2Zsb3dTY3JpcHRDYWNoZSgpOiB2b2lkIHtcbiAgc2NyaXB0cy5ieUNvZGUuY2xlYXIoKTtcbn1cblxuLyoqXG4gKiBOdW1iZXIgb2YgZGlzdGluY3Qgc2NyaXB0IHNvdXJjZSBzdHJpbmdzIGN1cnJlbnRseSByZXRhaW5lZC4gRXhwb3NlZCBmb3JcbiAqIHRlc3RzIGFzc2VydGluZyB0aGUgTFJVIGJvdW5kOyBub3QgdXNlZCBvbiB0aGUgaG90IHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3b3JrZmxvd1NjcmlwdENhY2hlU2l6ZSgpOiBudW1iZXIge1xuICByZXR1cm4gc2NyaXB0cy5ieUNvZGUuc2l6ZTtcbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sleep.d.ts","sourceRoot":"","sources":["../../src/workflow/sleep.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAGtC,OAAO,EAIL,KAAK,2BAA2B,EACjC,MAAM,eAAe,CAAC;AAEvB,wBAAgB,WAAW,CAAC,GAAG,EAAE,2BAA2B,IAExD,OAAO,WAAW,GAAG,IAAI,GAAG,MAAM,KACjC,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"sleep.d.ts","sourceRoot":"","sources":["../../src/workflow/sleep.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAGtC,OAAO,EAIL,KAAK,2BAA2B,EACjC,MAAM,eAAe,CAAC;AAEvB,wBAAgB,WAAW,CAAC,GAAG,EAAE,2BAA2B,IAExD,OAAO,WAAW,GAAG,IAAI,GAAG,MAAM,KACjC,OAAO,CAAC,IAAI,CAAC,CAgIjB"}
|
package/dist/workflow/sleep.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { ReplayDivergenceError } from '@workflow/errors';
|
|
2
2
|
import { parseDurationToDate, withResolvers } from '@workflow/utils';
|
|
3
3
|
import { EventConsumerResult } from '../events-consumer.js';
|
|
4
|
-
import {
|
|
5
|
-
import { awaitEarlierDeliveries, registerDeliveryBarrier, scheduleWhenIdle, } from '../private.js';
|
|
4
|
+
import { awaitEarlierDeliveries, registerDeliveryBarrier, scheduleWorkflowSuspension, } from '../private.js';
|
|
6
5
|
export function createSleep(ctx) {
|
|
7
6
|
return async function sleepImpl(param) {
|
|
8
7
|
const { promise, resolve } = withResolvers();
|
|
@@ -20,9 +19,7 @@ export function createSleep(ctx) {
|
|
|
20
19
|
// If there are no events and we're waiting for wait_completed,
|
|
21
20
|
// suspend the workflow until the wait fires
|
|
22
21
|
if (!event) {
|
|
23
|
-
|
|
24
|
-
ctx.onWorkflowError(new WorkflowSuspension(ctx.invocationsQueue, ctx.globalThis));
|
|
25
|
-
});
|
|
22
|
+
scheduleWorkflowSuspension(ctx);
|
|
26
23
|
return EventConsumerResult.NotConsumed;
|
|
27
24
|
}
|
|
28
25
|
if (event.correlationId !== correlationId) {
|
|
@@ -109,4 +106,4 @@ export function createSleep(ctx) {
|
|
|
109
106
|
return promise;
|
|
110
107
|
};
|
|
111
108
|
}
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xlZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ya2Zsb3cvc2xlZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXJFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBZ0Msa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEYsT0FBTyxFQUNMLHNCQUFzQixFQUN0Qix1QkFBdUIsRUFDdkIsZ0JBQWdCLEdBRWpCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE1BQU0sVUFBVSxXQUFXLENBQUMsR0FBZ0M7SUFDMUQsT0FBTyxLQUFLLFVBQVUsU0FBUyxDQUM3QixLQUFrQztRQUVsQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLGFBQWEsRUFBUSxDQUFDO1FBQ25ELE1BQU0sYUFBYSxHQUFHLFFBQVEsR0FBRyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7UUFFbkQsNEJBQTRCO1FBQzVCLE1BQU0sUUFBUSxHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTVDLGdFQUFnRTtRQUNoRSxNQUFNLFFBQVEsR0FBNEI7WUFDeEMsSUFBSSxFQUFFLE1BQU07WUFDWixhQUFhO1lBQ2IsUUFBUTtTQUNULENBQUM7UUFDRixHQUFHLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVsRCxHQUFHLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3JDLCtEQUErRDtZQUMvRCw0Q0FBNEM7WUFDNUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNYLGdCQUFnQixDQUFDLEdBQUcsRUFB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LENBQUMsQ0FBQztZQUNILE9BQU8sbUJBQW1CLENBQUMsUUFBUSxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlcGxheURpdmVyZ2VuY2VFcnJvciB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHsgcGFyc2VEdXJhdGlvblRvRGF0ZSwgd2l0aFJlc29sdmVycyB9IGZyb20gJ0B3b3JrZmxvdy91dGlscyc7XG5pbXBvcnQgdHlwZSB7IFN0cmluZ1ZhbHVlIH0gZnJvbSAnbXMnO1xuaW1wb3J0IHsgRXZlbnRDb25zdW1lclJlc3VsdCB9IGZyb20gJy4uL2V2ZW50cy1jb25zdW1lci5qcyc7XG5pbXBvcnQgeyB0eXBlIFdhaXRJbnZvY2F0aW9uUXVldWVJdGVtLCBXb3JrZmxvd1N1c3BlbnNpb24gfSBmcm9tICcuLi9nbG9iYWwuanMnO1xuaW1wb3J0IHtcbiAgYXdhaXRFYXJsaWVyRGVsaXZlcmllcyxcbiAgcmVnaXN0ZXJEZWxpdmVyeUJhcnJpZXIsXG4gIHNjaGVkdWxlV2hlbklkbGUsXG4gIHR5cGUgV29ya2Zsb3dPcmNoZXN0cmF0b3JDb250ZXh0LFxufSBmcm9tICcuLi9wcml2YXRlLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNsZWVwKGN0eDogV29ya2Zsb3dPcmNoZXN0cmF0b3JDb250ZXh0KSB7XG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiBzbGVlcEltcGwoXG4gICAgcGFyYW06IFN0cmluZ1ZhbHVlIHwgRGF0ZSB8IG51bWJlclxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHByb21pc2UsIHJlc29sdmUgfSA9IHdpdGhSZXNvbHZlcnM8dm9pZD4oKTtcbiAgICBjb25zdCBjb3JyZWxhdGlvbklkID0gYHdhaXRfJHtjdHguZ2VuZXJhdGVVbGlkKCl9YDtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgcmVzdW1lIHRpbWVcbiAgICBjb25zdCByZXN1bWVBdCA9IHBhcnNlRHVyYXRpb25Ub0RhdGUocGFyYW0pO1xuXG4gICAgLy8gQWRkIHdhaXQgdG8gaW52b2NhdGlvbnMgcXVldWUgKHVzaW5nIE1hcCBmb3IgTygxKSBvcGVyYXRpb25zKVxuICAgIGNvbnN0IHdhaXRJdGVtOiBXYWl0SW52b2NhdGlvblF1ZXVlSXRlbSA9IHtcbiAgICAgIHR5cGU6ICd3YWl0JyxcbiAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICByZXN1bWVBdCxcbiAgICB9O1xuICAgIGN0eC5pbnZvY2F0aW9uc1F1ZXVlLnNldChjb3JyZWxhdGlvbklkLCB3YWl0SXRlbSk7XG5cbiAgICBjdHguZXZlbnRzQ29uc3VtZXIuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIGV2ZW50cyBhbmQgd2UncmUgd2FpdGluZyBmb3Igd2FpdF9jb21wbGV0ZWQsXG4gICAgICAvLyBzdXNwZW5kIHRoZSB3b3JrZmxvdyB1bnRpbCB0aGUgd2FpdCBmaXJlc1xuICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICBzY2hlZHVsZVdoZW5JZGxlKGN0eCwgKCkgPT4ge1xuICAgICAgICAgIGN0eC5vbldvcmtmbG93RXJyb3IoXG4gICAgICAgICAgICBuZXcgV29ya2Zsb3dTdXNwZW5zaW9uKGN0eC5pbnZvY2F0aW9uc1F1ZXVlLCBjdHguZ2xvYmFsVGhpcylcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuTm90Q29uc3VtZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5jb3JyZWxhdGlvbklkICE9PSBjb3JyZWxhdGlvbklkKSB7XG4gICAgICAgIC8vIFdlJ3JlIG5vdCBpbnRlcmVzdGVkIGluIHRoaXMgZXZlbnQgLSB0aGUgY29ycmVsYXRpb25JZCBiZWxvbmdzIHRvIGEgZGlmZmVyZW50IGVudGl0eVxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Ob3RDb25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIHdhaXRfY3JlYXRlZCBldmVudCB0byBtYXJrIHRoaXMgd2FpdCBhcyBoYXZpbmcgdGhlIGV2ZW50IGNyZWF0ZWRcbiAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICd3YWl0X2NyZWF0ZWQnKSB7XG4gICAgICAgIC8vIE1hcmsgdGhpcyB3YWl0IGFzIGhhdmluZyB0aGUgY3JlYXRlZCBldmVudCwgYnV0IGtlZXAgaXQgaW4gdGhlIHF1ZXVlXG4gICAgICAgIC8vIE8oMSkgbG9va3VwIHVzaW5nIE1hcFxuICAgICAgICBjb25zdCBxdWV1ZUl0ZW0gPSBjdHguaW52b2NhdGlvbnNRdWV1ZS5nZXQoY29ycmVsYXRpb25JZCk7XG4gICAgICAgIGlmIChxdWV1ZUl0ZW0gJiYgcXVldWVJdGVtLnR5cGUgPT09ICd3YWl0Jykge1xuICAgICAgICAgIHF1ZXVlSXRlbS5oYXNDcmVhdGVkRXZlbnQgPSB0cnVlO1xuICAgICAgICAgIHF1ZXVlSXRlbS5yZXN1bWVBdCA9IGV2ZW50LmV2ZW50RGF0YS5yZXN1bWVBdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Db25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIHdhaXRfY29tcGxldGVkIGV2ZW50XG4gICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09PSAnd2FpdF9jb21wbGV0ZWQnKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50UmVzdW1lQXQgPSBldmVudC5ldmVudERhdGE/LnJlc3VtZUF0O1xuICAgICAgICBpZiAoZXZlbnRSZXN1bWVBdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgcXVldWVJdGVtID0gY3R4Lmludm9jYXRpb25zUXVldWUuZ2V0KGNvcnJlbGF0aW9uSWQpO1xuICAgICAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdW1lQXQgPVxuICAgICAgICAgICAgcXVldWVJdGVtICYmIHF1ZXVlSXRlbS50eXBlID09PSAnd2FpdCdcbiAgICAgICAgICAgICAgPyBxdWV1ZUl0ZW0ucmVzdW1lQXRcbiAgICAgICAgICAgICAgOiByZXN1bWVBdDtcbiAgICAgICAgICBjb25zdCBldmVudFJlc3VtZUF0RGF0ZSA9IG5ldyBEYXRlKGV2ZW50UmVzdW1lQXQpO1xuICAgICAgICAgIGNvbnN0IGV2ZW50UmVzdW1lQXRNcyA9IGV2ZW50UmVzdW1lQXREYXRlLmdldFRpbWUoKTtcbiAgICAgICAgICBjb25zdCBleHBlY3RlZFJlc3VtZUF0TXMgPSBleHBlY3RlZFJlc3VtZUF0LmdldFRpbWUoKTtcbiAgICAgICAgICBjb25zdCBldmVudFJlc3VtZUF0Rm9yTWVzc2FnZSA9IE51bWJlci5pc0Zpbml0ZShldmVudFJlc3VtZUF0TXMpXG4gICAgICAgICAgICA/IGV2ZW50UmVzdW1lQXREYXRlLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgIDogU3RyaW5nKGV2ZW50UmVzdW1lQXQpO1xuXG4gICAgICAgICAgaWYgKGV2ZW50UmVzdW1lQXRNcyAhPT0gZXhwZWN0ZWRSZXN1bWVBdE1zKSB7XG4gICAgICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgICAgICBuZXcgUmVwbGF5RGl2ZXJnZW5jZUVycm9yKFxuICAgICAgICAgICAgICAgICAgYFJlcGxheSBkaXZlcmdlbmNlOiB3YWl0X2NvbXBsZXRlZCBldmVudCBmb3IgJHtjb3JyZWxhdGlvbklkfSBoYXMgcmVzdW1lQXQgXCIke2V2ZW50UmVzdW1lQXRGb3JNZXNzYWdlfVwiLCBidXQgdGhlIGN1cnJlbnQgd2FpdCBjb25zdW1lciBleHBlY3RzIFwiJHtleHBlY3RlZFJlc3VtZUF0LnRvSVNPU3RyaW5nKCl9XCJgLFxuICAgICAgICAgICAgICAgICAgeyBldmVudElkOiBldmVudC5ldmVudElkIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkZpbmlzaGVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlbW92ZSB0aGlzIHdhaXQgZnJvbSB0aGUgaW52b2NhdGlvbnMgcXVldWUgKE8oMSkgZGVsZXRlIHVzaW5nIE1hcClcbiAgICAgICAgY3R4Lmludm9jYXRpb25zUXVldWUuZGVsZXRlKGNvcnJlbGF0aW9uSWQpO1xuXG4gICAgICAgIC8vIFRoaXMgYHdhaXRfY29tcGxldGVkYCBpcyBhIGJyYW5jaC1kZWNpZGluZyByZXNvbHV0aW9uIHRoZSB3b3JrZmxvd1xuICAgICAgICAvLyBtYXkgYFByb21pc2UucmFjZWAgYWdhaW5zdCBhIGhvb2sgcGF5bG9hZCwgb3IgYXdhaXQgb24gYSBicmFuY2hcbiAgICAgICAgLy8gcGFyYWxsZWwgdG8gb25lIGF3YWl0aW5nIGEgc3RlcC4gT3JkZXIgaXQgZGV0ZXJtaW5pc3RpY2FsbHkgYnlcbiAgICAgICAgLy8gZXZlbnQtbG9nIHBvc2l0aW9uIChzZWUgYHBlbmRpbmdEZWxpdmVyeUJhcnJpZXJzYCk6XG4gICAgICAgIC8vICAtIFJlZ2lzdGVyIGEgJ3dhaXQnIGJhcnJpZXIgYXQgdGhpcyBldmVudCdzIGluZGV4IHNvIGEgTEFURVItaW4tbG9nXG4gICAgICAgIC8vICAgIGhvb2sgcGF5bG9hZCBvciBzdGVwIHJlc3VsdCBpcyBkZWxpdmVyZWQgb25seSBhZnRlciB0aGlzIHdhaXQuXG4gICAgICAgIC8vICAtIEJlZm9yZSByZXNvbHZpbmcsIGRlZmVyIGJlaGluZCBldmVyeSBFQVJMSUVSLWluLWxvZyBIT09LIGFuZCBTVEVQXG4gICAgICAgIC8vICAgIGRlbGl2ZXJ5IHNvIHRoaXMgd2FpdCBkb2VzIG5vdCBwcmVlbXB0IG9uZSB0aGUgY29tbWl0dGVkIGxvZ1xuICAgICAgICAvLyAgICBvcmRlcmVkIGZpcnN0LiBUaGVuIG1hcmsgdGhpcyB3YWl0IGRlbGl2ZXJlZCB0byByZWxlYXNlIHRoZSBsYXRlclxuICAgICAgICAvLyAgICBkZWxpdmVyaWVzIGdhdGVkIG9uIGl0LlxuICAgICAgICBjb25zdCBldmVudEluZGV4ID0gY3R4LmV2ZW50c0NvbnN1bWVyLmV2ZW50SW5kZXg7XG4gICAgICAgIGNvbnN0IGJhcnJpZXIgPSByZWdpc3RlckRlbGl2ZXJ5QmFycmllcihjdHgsIGV2ZW50SW5kZXgsICd3YWl0Jyk7XG4gICAgICAgIC8vIFRoZSBkZWZlcnJhbCBpcyBjYXB0dXJlZCBIRVJFLCB3aGlsZSBjb25zdW1pbmcgdGhlIGV2ZW50LCBhbmQgbm90XG4gICAgICAgIC8vIGFmdGVyIHRoZSBxdWV1ZSB0YWlsIGJlbG93OiBzYW1lIHJlYXNvbmluZyBhcyBzdGVwLnRzLiBBbiBlYXJsaWVyXG4gICAgICAgIC8vIHN0ZXAgb3IgaG9vayB3aG9zZSBoeWRyYXRpb24gc2xvdCBzaXRzIGluIHRoYXQgdGFpbCBoYXMgdXN1YWxseVxuICAgICAgICAvLyBkZWxpdmVyZWQsIGFuZCBzbyBkZXJlZ2lzdGVyZWQgaXRzIGJhcnJpZXIsIGJ5IHRoZSB0aW1lIHRoZSB0YWlsXG4gICAgICAgIC8vIHJlc29sdmVzLiBSZWFkIHRoZW4sIGl0IHdvdWxkIGJlIGludmlzaWJsZSBhbmQgdGhpcyB3YWl0IHdvdWxkIHNraXBcbiAgICAgICAgLy8gYm90aCB0aGUgZ2F0ZSBBTkQgYGF3YWl0RWFybGllckRlbGl2ZXJpZXNgJyBtYWNyb3Rhc2sgeWllbGQsIGxldHRpbmdcbiAgICAgICAgLy8gaXQgb3ZlcnRha2UgdGhlIGJyYW5jaCB0aGF0IGVhcmxpZXIgZGVsaXZlcnkganVzdCB3b2tlLiBFdmVyeSBldmVudFxuICAgICAgICAvLyBpbiBvbmUgZHJhaW4gd2luZG93IGlzIGNvbnN1bWVkIGJlZm9yZSBhbnkgc2xvdCBydW5zLCBzbyBjYXB0dXJpbmdcbiAgICAgICAgLy8gYXQgY29uc3VtcHRpb24gdGltZSBzZWVzIGFsbCBvZiB0aGVtLlxuICAgICAgICBjb25zdCBlYXJsaWVyRGVsaXZlcmVkID0gYXdhaXRFYXJsaWVyRGVsaXZlcmllcyhcbiAgICAgICAgICBjdHgsXG4gICAgICAgICAgZXZlbnRJbmRleCxcbiAgICAgICAgICAnd2FpdCdcbiAgICAgICAgKTtcbiAgICAgICAgLy8gRGVmZXIgKyByZXNvbHZlIGluIGEgREVUQUNIRUQgcHJvbWlzZSAobm90IGNoYWluZWQgb250byB0aGUgc2VyaWFsXG4gICAgICAgIC8vIGBwcm9taXNlUXVldWVgKS4gYGF3YWl0RWFybGllckRlbGl2ZXJpZXNgIG1heSB3YWl0IG9uIGFuIGVhcmxpZXJcbiAgICAgICAgLy8gaG9vayBvciBzdGVwIGRlbGl2ZXJ5IHdob3NlIG93biByZXNvbHV0aW9uIGlzIGl0c2VsZiBkcml2ZW4gYnkgdGhlXG4gICAgICAgIC8vIHByb21pc2VRdWV1ZTsgYmxvY2tpbmcgYSBxdWV1ZSBzbG90IG9uIGl0IHdvdWxkIGRlYWRsb2NrIHRoZSBzZXJpYWxcbiAgICAgICAgLy8gcXVldWUuIFdlIHN0aWxsIGFuY2hvciB0byB0aGUgcXVldWUgdGFpbCBmaXJzdCBzbyBwcmlvciBxdWV1ZWRcbiAgICAgICAgLy8gaHlkcmF0aW9uL29yZGVyaW5nIHdvcmsgcnVucyBpbiBldmVudC1sb2cgb3JkZXIuXG4gICAgICAgIGNvbnN0IHF1ZXVlQXRDb21wbGV0aW9uID0gY3R4LnByb21pc2VRdWV1ZTtcbiAgICAgICAgdm9pZCBxdWV1ZUF0Q29tcGxldGlvblxuICAgICAgICAgIC50aGVuKCgpID0+IGVhcmxpZXJEZWxpdmVyZWQpXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgYmFycmllci5tYXJrRGVsaXZlcmVkKCk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkZpbmlzaGVkO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGlzIHJlcGxheSBpbnN0YWxsZWQgYSBkaWZmZXJlbnQgY29uc3VtZXIgdGhhbiB0aGUgc3RvcmVkIGV2ZW50IG5lZWRzLlxuICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbigoKSA9PiB7XG4gICAgICAgIGN0eC5vbldvcmtmbG93RXJyb3IoXG4gICAgICAgICAgbmV3IFJlcGxheURpdmVyZ2VuY2VFcnJvcihcbiAgICAgICAgICAgIGBSZXBsYXkgZGl2ZXJnZW5jZTogVW5leHBlY3RlZCBldmVudCB0eXBlIGZvciB3YWl0ICR7Y29ycmVsYXRpb25JZH0gXCIke2V2ZW50LmV2ZW50VHlwZX1cImAsXG4gICAgICAgICAgICB7IGV2ZW50SWQ6IGV2ZW50LmV2ZW50SWQgfVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfTtcbn1cbiJdfQ==
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xlZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ya2Zsb3cvc2xlZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXJFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTVELE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLDBCQUEwQixHQUUzQixNQUFNLGVBQWUsQ0FBQztBQUV2QixNQUFNLFVBQVUsV0FBVyxDQUFDLEdBQWdDO0lBQzFELE9BQU8sS0FBSyxVQUFVLFNBQVMsQ0FDN0IsS0FBa0M7UUFFbEMsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxhQUFhLEVBQVEsQ0FBQztRQUNuRCxNQUFNLGFBQWEsR0FBRyxRQUFRLEdBQUcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO1FBRW5ELDRCQUE0QjtRQUM1QixNQUFNLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU1QyxnRUFBZ0U7UUFDaEUsTUFBTSxRQUFRLEdBQTRCO1lBQ3hDLElBQUksRUFBRSxNQUFNO1lBQ1osYUFBYTtZQUNiLFFBQVE7U0FDVCxDQUFDO1FBQ0YsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFbEQsR0FBRyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNyQywrREFBK0Q7WUFDL0QsNENBQTRDO1lBQzVDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDWCwwQkFBMEIsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDaEMsT0FBTyxtQkFBbUIsQ0FBQyxXQUFXLENBQUM7WUFDekMsQ0FBQztZQUVELElBQUksS0FBSyxDQUFDLGFBQWEsS0FBSyxhQUFhLEVBQUUsQ0FBQztnQkFDMUMsdUZBQXVGO2dCQUN2RixPQUFPLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztZQUN6QyxDQUFDO1lBRUQsNkVBQTZFO1lBQzdFLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxjQUFjLEVBQUUsQ0FBQztnQkFDdkMsdUVBQXVFO2dCQUN2RSx3QkFBd0I7Z0JBQ3hCLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzFELElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7b0JBQzNDLFNBQVMsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO29CQUNqQyxTQUFTLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO2dCQUNoRCxDQUFDO2dCQUNELE9BQU8sbUJBQW1CLENBQUMsUUFBUSxDQUFDO1lBQ3RDLENBQUM7WUFFRCxpQ0FBaUM7WUFDakMsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3pDLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDO2dCQUNoRCxJQUFJLGFBQWEsS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDaEMsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDMUQsTUFBTSxnQkFBZ0IsR0FDcEIsU0FBUyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssTUFBTTt3QkFDcEMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRO3dCQUNwQixDQUFDLENBQUMsUUFBUSxDQUFDO29CQUNmLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQ2xELE1BQU0sZUFBZSxHQUFHLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNwRCxNQUFNLGtCQUFrQixHQUFHLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUN0RCxNQUFNLHVCQUF1QixHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDO3dCQUM5RCxDQUFDLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFO3dCQUNqQyxDQUFDLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUUxQixJQUFJLGVBQWUsS0FBSyxrQkFBa0IsRUFBRSxDQUFDO3dCQUMzQyxHQUFHLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTs0QkFDNUMsR0FBRyxDQUFDLGVBQWUsQ0FDakIsSUFBSSxxQkFBcUIsQ0FDdkIsK0NBQStDLGFBQWEsa0JBQWtCLHVCQUF1Qiw2Q0FBNkMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFDbkwsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUMzQixDQUNGLENBQUM7d0JBQ0osQ0FBQyxDQUFDLENBQUM7d0JBQ0gsT0FBTyxtQkFBbUIsQ0FBQyxRQUFRLENBQUM7b0JBQ3RDLENBQUM7Z0JBQ0gsQ0FBQztnQkFFRCxzRUFBc0U7Z0JBQ3RFLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBRTNDLHFFQUFxRTtnQkFDckUsa0VBQWtFO2dCQUNsRSxpRUFBaUU7Z0JBQ2pFLHNEQUFzRDtnQkFDdEQsdUVBQXVFO2dCQUN2RSxvRUFBb0U7Z0JBQ3BFLHVFQUF1RTtnQkFDdkUsa0VBQWtFO2dCQUNsRSx1RUFBdUU7Z0JBQ3ZFLDZCQUE2QjtnQkFDN0IsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7Z0JBQ2pELE1BQU0sT0FBTyxHQUFHLHVCQUF1QixDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ2pFLG9FQUFvRTtnQkFDcEUsb0VBQW9FO2dCQUNwRSxrRUFBa0U7Z0JBQ2xFLG1FQUFtRTtnQkFDbkUsc0VBQXNFO2dCQUN0RSx1RUFBdUU7Z0JBQ3ZFLHNFQUFzRTtnQkFDdEUscUVBQXFFO2dCQUNyRSx3Q0FBd0M7Z0JBQ3hDLE1BQU0sZ0JBQWdCLEdBQUcsc0JBQXNCLENBQzdDLEdBQUcsRUFDSCxVQUFVLEVBQ1YsTUFBTSxDQUNQLENBQUM7Z0JBQ0YscUVBQXFFO2dCQUNyRSxtRUFBbUU7Z0JBQ25FLHFFQUFxRTtnQkFDckUsc0VBQXNFO2dCQUN0RSxpRUFBaUU7Z0JBQ2pFLG1EQUFtRDtnQkFDbkQsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDO2dCQUMzQyxLQUFLLGlCQUFpQjtxQkFDbkIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDO3FCQUM1QixJQUFJLENBQUMsR0FBRyxFQUFFO29CQUNULE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDeEIsT0FBTyxFQUFFLENBQUM7Z0JBQ1osQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsT0FBTyxtQkFBbUIsQ0FBQyxRQUFRLENBQUM7WUFDdEMsQ0FBQztZQUVELDBFQUEwRTtZQUMxRSxHQUFHLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDNUMsR0FBRyxDQUFDLGVBQWUsQ0FDakIsSUFBSSxxQkFBcUIsQ0FDdkIscURBQXFELGFBQWEsS0FBSyxLQUFLLENBQUMsU0FBUyxHQUFHLEVBQ3pGLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FDM0IsQ0FDRixDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXBsYXlEaXZlcmdlbmNlRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB7IHBhcnNlRHVyYXRpb25Ub0RhdGUsIHdpdGhSZXNvbHZlcnMgfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBTdHJpbmdWYWx1ZSB9IGZyb20gJ21zJztcbmltcG9ydCB7IEV2ZW50Q29uc3VtZXJSZXN1bHQgfSBmcm9tICcuLi9ldmVudHMtY29uc3VtZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBXYWl0SW52b2NhdGlvblF1ZXVlSXRlbSB9IGZyb20gJy4uL2dsb2JhbC5qcyc7XG5pbXBvcnQge1xuICBhd2FpdEVhcmxpZXJEZWxpdmVyaWVzLFxuICByZWdpc3RlckRlbGl2ZXJ5QmFycmllcixcbiAgc2NoZWR1bGVXb3JrZmxvd1N1c3BlbnNpb24sXG4gIHR5cGUgV29ya2Zsb3dPcmNoZXN0cmF0b3JDb250ZXh0LFxufSBmcm9tICcuLi9wcml2YXRlLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNsZWVwKGN0eDogV29ya2Zsb3dPcmNoZXN0cmF0b3JDb250ZXh0KSB7XG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiBzbGVlcEltcGwoXG4gICAgcGFyYW06IFN0cmluZ1ZhbHVlIHwgRGF0ZSB8IG51bWJlclxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHByb21pc2UsIHJlc29sdmUgfSA9IHdpdGhSZXNvbHZlcnM8dm9pZD4oKTtcbiAgICBjb25zdCBjb3JyZWxhdGlvbklkID0gYHdhaXRfJHtjdHguZ2VuZXJhdGVVbGlkKCl9YDtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgcmVzdW1lIHRpbWVcbiAgICBjb25zdCByZXN1bWVBdCA9IHBhcnNlRHVyYXRpb25Ub0RhdGUocGFyYW0pO1xuXG4gICAgLy8gQWRkIHdhaXQgdG8gaW52b2NhdGlvbnMgcXVldWUgKHVzaW5nIE1hcCBmb3IgTygxKSBvcGVyYXRpb25zKVxuICAgIGNvbnN0IHdhaXRJdGVtOiBXYWl0SW52b2NhdGlvblF1ZXVlSXRlbSA9IHtcbiAgICAgIHR5cGU6ICd3YWl0JyxcbiAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICByZXN1bWVBdCxcbiAgICB9O1xuICAgIGN0eC5pbnZvY2F0aW9uc1F1ZXVlLnNldChjb3JyZWxhdGlvbklkLCB3YWl0SXRlbSk7XG5cbiAgICBjdHguZXZlbnRzQ29uc3VtZXIuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIGV2ZW50cyBhbmQgd2UncmUgd2FpdGluZyBmb3Igd2FpdF9jb21wbGV0ZWQsXG4gICAgICAvLyBzdXNwZW5kIHRoZSB3b3JrZmxvdyB1bnRpbCB0aGUgd2FpdCBmaXJlc1xuICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICBzY2hlZHVsZVdvcmtmbG93U3VzcGVuc2lvbihjdHgpO1xuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Ob3RDb25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmNvcnJlbGF0aW9uSWQgIT09IGNvcnJlbGF0aW9uSWQpIHtcbiAgICAgICAgLy8gV2UncmUgbm90IGludGVyZXN0ZWQgaW4gdGhpcyBldmVudCAtIHRoZSBjb3JyZWxhdGlvbklkIGJlbG9uZ3MgdG8gYSBkaWZmZXJlbnQgZW50aXR5XG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0Lk5vdENvbnN1bWVkO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3Igd2FpdF9jcmVhdGVkIGV2ZW50IHRvIG1hcmsgdGhpcyB3YWl0IGFzIGhhdmluZyB0aGUgZXZlbnQgY3JlYXRlZFxuICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3dhaXRfY3JlYXRlZCcpIHtcbiAgICAgICAgLy8gTWFyayB0aGlzIHdhaXQgYXMgaGF2aW5nIHRoZSBjcmVhdGVkIGV2ZW50LCBidXQga2VlcCBpdCBpbiB0aGUgcXVldWVcbiAgICAgICAgLy8gTygxKSBsb29rdXAgdXNpbmcgTWFwXG4gICAgICAgIGNvbnN0IHF1ZXVlSXRlbSA9IGN0eC5pbnZvY2F0aW9uc1F1ZXVlLmdldChjb3JyZWxhdGlvbklkKTtcbiAgICAgICAgaWYgKHF1ZXVlSXRlbSAmJiBxdWV1ZUl0ZW0udHlwZSA9PT0gJ3dhaXQnKSB7XG4gICAgICAgICAgcXVldWVJdGVtLmhhc0NyZWF0ZWRFdmVudCA9IHRydWU7XG4gICAgICAgICAgcXVldWVJdGVtLnJlc3VtZUF0ID0gZXZlbnQuZXZlbnREYXRhLnJlc3VtZUF0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkNvbnN1bWVkO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3Igd2FpdF9jb21wbGV0ZWQgZXZlbnRcbiAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICd3YWl0X2NvbXBsZXRlZCcpIHtcbiAgICAgICAgY29uc3QgZXZlbnRSZXN1bWVBdCA9IGV2ZW50LmV2ZW50RGF0YT8ucmVzdW1lQXQ7XG4gICAgICAgIGlmIChldmVudFJlc3VtZUF0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBxdWV1ZUl0ZW0gPSBjdHguaW52b2NhdGlvbnNRdWV1ZS5nZXQoY29ycmVsYXRpb25JZCk7XG4gICAgICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bWVBdCA9XG4gICAgICAgICAgICBxdWV1ZUl0ZW0gJiYgcXVldWVJdGVtLnR5cGUgPT09ICd3YWl0J1xuICAgICAgICAgICAgICA/IHF1ZXVlSXRlbS5yZXN1bWVBdFxuICAgICAgICAgICAgICA6IHJlc3VtZUF0O1xuICAgICAgICAgIGNvbnN0IGV2ZW50UmVzdW1lQXREYXRlID0gbmV3IERhdGUoZXZlbnRSZXN1bWVBdCk7XG4gICAgICAgICAgY29uc3QgZXZlbnRSZXN1bWVBdE1zID0gZXZlbnRSZXN1bWVBdERhdGUuZ2V0VGltZSgpO1xuICAgICAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdW1lQXRNcyA9IGV4cGVjdGVkUmVzdW1lQXQuZ2V0VGltZSgpO1xuICAgICAgICAgIGNvbnN0IGV2ZW50UmVzdW1lQXRGb3JNZXNzYWdlID0gTnVtYmVyLmlzRmluaXRlKGV2ZW50UmVzdW1lQXRNcylcbiAgICAgICAgICAgID8gZXZlbnRSZXN1bWVBdERhdGUudG9JU09TdHJpbmcoKVxuICAgICAgICAgICAgOiBTdHJpbmcoZXZlbnRSZXN1bWVBdCk7XG5cbiAgICAgICAgICBpZiAoZXZlbnRSZXN1bWVBdE1zICE9PSBleHBlY3RlZFJlc3VtZUF0TXMpIHtcbiAgICAgICAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBjdHgub25Xb3JrZmxvd0Vycm9yKFxuICAgICAgICAgICAgICAgIG5ldyBSZXBsYXlEaXZlcmdlbmNlRXJyb3IoXG4gICAgICAgICAgICAgICAgICBgUmVwbGF5IGRpdmVyZ2VuY2U6IHdhaXRfY29tcGxldGVkIGV2ZW50IGZvciAke2NvcnJlbGF0aW9uSWR9IGhhcyByZXN1bWVBdCBcIiR7ZXZlbnRSZXN1bWVBdEZvck1lc3NhZ2V9XCIsIGJ1dCB0aGUgY3VycmVudCB3YWl0IGNvbnN1bWVyIGV4cGVjdHMgXCIke2V4cGVjdGVkUmVzdW1lQXQudG9JU09TdHJpbmcoKX1cImAsXG4gICAgICAgICAgICAgICAgICB7IGV2ZW50SWQ6IGV2ZW50LmV2ZW50SWQgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoaXMgd2FpdCBmcm9tIHRoZSBpbnZvY2F0aW9ucyBxdWV1ZSAoTygxKSBkZWxldGUgdXNpbmcgTWFwKVxuICAgICAgICBjdHguaW52b2NhdGlvbnNRdWV1ZS5kZWxldGUoY29ycmVsYXRpb25JZCk7XG5cbiAgICAgICAgLy8gVGhpcyBgd2FpdF9jb21wbGV0ZWRgIGlzIGEgYnJhbmNoLWRlY2lkaW5nIHJlc29sdXRpb24gdGhlIHdvcmtmbG93XG4gICAgICAgIC8vIG1heSBgUHJvbWlzZS5yYWNlYCBhZ2FpbnN0IGEgaG9vayBwYXlsb2FkLCBvciBhd2FpdCBvbiBhIGJyYW5jaFxuICAgICAgICAvLyBwYXJhbGxlbCB0byBvbmUgYXdhaXRpbmcgYSBzdGVwLiBPcmRlciBpdCBkZXRlcm1pbmlzdGljYWxseSBieVxuICAgICAgICAvLyBldmVudC1sb2cgcG9zaXRpb24gKHNlZSBgcGVuZGluZ0RlbGl2ZXJ5QmFycmllcnNgKTpcbiAgICAgICAgLy8gIC0gUmVnaXN0ZXIgYSAnd2FpdCcgYmFycmllciBhdCB0aGlzIGV2ZW50J3MgaW5kZXggc28gYSBMQVRFUi1pbi1sb2dcbiAgICAgICAgLy8gICAgaG9vayBwYXlsb2FkIG9yIHN0ZXAgcmVzdWx0IGlzIGRlbGl2ZXJlZCBvbmx5IGFmdGVyIHRoaXMgd2FpdC5cbiAgICAgICAgLy8gIC0gQmVmb3JlIHJlc29sdmluZywgZGVmZXIgYmVoaW5kIGV2ZXJ5IEVBUkxJRVItaW4tbG9nIEhPT0sgYW5kIFNURVBcbiAgICAgICAgLy8gICAgZGVsaXZlcnkgc28gdGhpcyB3YWl0IGRvZXMgbm90IHByZWVtcHQgb25lIHRoZSBjb21taXR0ZWQgbG9nXG4gICAgICAgIC8vICAgIG9yZGVyZWQgZmlyc3QuIFRoZW4gbWFyayB0aGlzIHdhaXQgZGVsaXZlcmVkIHRvIHJlbGVhc2UgdGhlIGxhdGVyXG4gICAgICAgIC8vICAgIGRlbGl2ZXJpZXMgZ2F0ZWQgb24gaXQuXG4gICAgICAgIGNvbnN0IGV2ZW50SW5kZXggPSBjdHguZXZlbnRzQ29uc3VtZXIuZXZlbnRJbmRleDtcbiAgICAgICAgY29uc3QgYmFycmllciA9IHJlZ2lzdGVyRGVsaXZlcnlCYXJyaWVyKGN0eCwgZXZlbnRJbmRleCwgJ3dhaXQnKTtcbiAgICAgICAgLy8gVGhlIGRlZmVycmFsIGlzIGNhcHR1cmVkIEhFUkUsIHdoaWxlIGNvbnN1bWluZyB0aGUgZXZlbnQsIGFuZCBub3RcbiAgICAgICAgLy8gYWZ0ZXIgdGhlIHF1ZXVlIHRhaWwgYmVsb3c6IHNhbWUgcmVhc29uaW5nIGFzIHN0ZXAudHMuIEFuIGVhcmxpZXJcbiAgICAgICAgLy8gc3RlcCBvciBob29rIHdob3NlIGh5ZHJhdGlvbiBzbG90IHNpdHMgaW4gdGhhdCB0YWlsIGhhcyB1c3VhbGx5XG4gICAgICAgIC8vIGRlbGl2ZXJlZCwgYW5kIHNvIGRlcmVnaXN0ZXJlZCBpdHMgYmFycmllciwgYnkgdGhlIHRpbWUgdGhlIHRhaWxcbiAgICAgICAgLy8gcmVzb2x2ZXMuIFJlYWQgdGhlbiwgaXQgd291bGQgYmUgaW52aXNpYmxlIGFuZCB0aGlzIHdhaXQgd291bGQgc2tpcFxuICAgICAgICAvLyBib3RoIHRoZSBnYXRlIEFORCBgYXdhaXRFYXJsaWVyRGVsaXZlcmllc2AnIG1hY3JvdGFzayB5aWVsZCwgbGV0dGluZ1xuICAgICAgICAvLyBpdCBvdmVydGFrZSB0aGUgYnJhbmNoIHRoYXQgZWFybGllciBkZWxpdmVyeSBqdXN0IHdva2UuIEV2ZXJ5IGV2ZW50XG4gICAgICAgIC8vIGluIG9uZSBkcmFpbiB3aW5kb3cgaXMgY29uc3VtZWQgYmVmb3JlIGFueSBzbG90IHJ1bnMsIHNvIGNhcHR1cmluZ1xuICAgICAgICAvLyBhdCBjb25zdW1wdGlvbiB0aW1lIHNlZXMgYWxsIG9mIHRoZW0uXG4gICAgICAgIGNvbnN0IGVhcmxpZXJEZWxpdmVyZWQgPSBhd2FpdEVhcmxpZXJEZWxpdmVyaWVzKFxuICAgICAgICAgIGN0eCxcbiAgICAgICAgICBldmVudEluZGV4LFxuICAgICAgICAgICd3YWl0J1xuICAgICAgICApO1xuICAgICAgICAvLyBEZWZlciArIHJlc29sdmUgaW4gYSBERVRBQ0hFRCBwcm9taXNlIChub3QgY2hhaW5lZCBvbnRvIHRoZSBzZXJpYWxcbiAgICAgICAgLy8gYHByb21pc2VRdWV1ZWApLiBgYXdhaXRFYXJsaWVyRGVsaXZlcmllc2AgbWF5IHdhaXQgb24gYW4gZWFybGllclxuICAgICAgICAvLyBob29rIG9yIHN0ZXAgZGVsaXZlcnkgd2hvc2Ugb3duIHJlc29sdXRpb24gaXMgaXRzZWxmIGRyaXZlbiBieSB0aGVcbiAgICAgICAgLy8gcHJvbWlzZVF1ZXVlOyBibG9ja2luZyBhIHF1ZXVlIHNsb3Qgb24gaXQgd291bGQgZGVhZGxvY2sgdGhlIHNlcmlhbFxuICAgICAgICAvLyBxdWV1ZS4gV2Ugc3RpbGwgYW5jaG9yIHRvIHRoZSBxdWV1ZSB0YWlsIGZpcnN0IHNvIHByaW9yIHF1ZXVlZFxuICAgICAgICAvLyBoeWRyYXRpb24vb3JkZXJpbmcgd29yayBydW5zIGluIGV2ZW50LWxvZyBvcmRlci5cbiAgICAgICAgY29uc3QgcXVldWVBdENvbXBsZXRpb24gPSBjdHgucHJvbWlzZVF1ZXVlO1xuICAgICAgICB2b2lkIHF1ZXVlQXRDb21wbGV0aW9uXG4gICAgICAgICAgLnRoZW4oKCkgPT4gZWFybGllckRlbGl2ZXJlZClcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBiYXJyaWVyLm1hcmtEZWxpdmVyZWQoKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoaXMgcmVwbGF5IGluc3RhbGxlZCBhIGRpZmZlcmVudCBjb25zdW1lciB0aGFuIHRoZSBzdG9yZWQgZXZlbnQgbmVlZHMuXG4gICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICBuZXcgUmVwbGF5RGl2ZXJnZW5jZUVycm9yKFxuICAgICAgICAgICAgYFJlcGxheSBkaXZlcmdlbmNlOiBVbmV4cGVjdGVkIGV2ZW50IHR5cGUgZm9yIHdhaXQgJHtjb3JyZWxhdGlvbklkfSBcIiR7ZXZlbnQuZXZlbnRUeXBlfVwiYCxcbiAgICAgICAgICAgIHsgZXZlbnRJZDogZXZlbnQuZXZlbnRJZCB9XG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5GaW5pc2hlZDtcbiAgICB9KTtcblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9O1xufVxuIl19
|