obsidian-dev-utils 26.27.2 → 26.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/dist/lib/cjs/Async.cjs +5 -5
- package/dist/lib/cjs/Async.d.cts +2 -1
- package/dist/lib/cjs/Library.cjs +1 -1
- package/dist/lib/cjs/obsidian/Link.cjs +6 -1
- package/dist/lib/cjs/obsidian/Queue.cjs +4 -2
- package/dist/lib/esm/Async.d.mts +2 -1
- package/dist/lib/esm/Async.mjs +5 -5
- package/dist/lib/esm/Library.mjs +1 -1
- package/dist/lib/esm/obsidian/Link.mjs +6 -1
- package/dist/lib/esm/obsidian/Queue.mjs +4 -2
- package/package.json +11 -11
package/CHANGELOG.md
CHANGED
package/dist/lib/cjs/Async.cjs
CHANGED
@@ -138,9 +138,9 @@ async function retryWithTimeout(fn, retryOptions, stackTrace) {
|
|
138
138
|
retryWithTimeoutDebugger.printStackTrace(stackTrace);
|
139
139
|
await sleep(fullOptions.retryDelayInMilliseconds);
|
140
140
|
}
|
141
|
-
});
|
141
|
+
}, { retryFn: fn });
|
142
142
|
}
|
143
|
-
async function runWithTimeout(timeoutInMilliseconds, fn) {
|
143
|
+
async function runWithTimeout(timeoutInMilliseconds, fn, context) {
|
144
144
|
let isTimedOut = true;
|
145
145
|
let result = null;
|
146
146
|
const startTime = performance.now();
|
@@ -153,7 +153,7 @@ async function runWithTimeout(timeoutInMilliseconds, fn) {
|
|
153
153
|
result = await fn();
|
154
154
|
isTimedOut = false;
|
155
155
|
const duration = performance.now() - startTime;
|
156
|
-
(0, import_Debug.getLibDebugger)("Async:runWithTimeout")(`Execution time: ${duration.toString()} milliseconds`, { fn });
|
156
|
+
(0, import_Debug.getLibDebugger)("Async:runWithTimeout")(`Execution time: ${duration.toString()} milliseconds`, { context, fn });
|
157
157
|
}
|
158
158
|
async function innerTimeout() {
|
159
159
|
if (!isTimedOut) {
|
@@ -164,7 +164,7 @@ async function runWithTimeout(timeoutInMilliseconds, fn) {
|
|
164
164
|
return;
|
165
165
|
}
|
166
166
|
const duration = performance.now() - startTime;
|
167
|
-
console.warn(`Timed out in ${duration.toString()} milliseconds`, { fn });
|
167
|
+
console.warn(`Timed out in ${duration.toString()} milliseconds`, { context, fn });
|
168
168
|
const _debugger = (0, import_Debug.getLibDebugger)("Async:runWithTimeout:timeout");
|
169
169
|
if (_debugger.enabled) {
|
170
170
|
_debugger(
|
@@ -227,4 +227,4 @@ async function toArray(iter) {
|
|
227
227
|
timeout,
|
228
228
|
toArray
|
229
229
|
});
|
230
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL0FzeW5jLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBhc3luY2hyb25vdXMgb3BlcmF0aW9ucy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBnZXRMaWJEZWJ1Z2dlciB9IGZyb20gJy4vRGVidWcudHMnO1xuaW1wb3J0IHtcbiAgQVNZTkNfRVJST1JfV1JBUFBFUl9NRVNTQUdFLFxuICBlbWl0QXN5bmNFcnJvckV2ZW50LFxuICBnZXRTdGFja1RyYWNlLFxuICBwcmludEVycm9yXG59IGZyb20gJy4vRXJyb3IudHMnO1xuXG4vKipcbiAqIEEgdHlwZSByZXByZXNlbnRpbmcgYSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIGEge0BsaW5rIFByb21pc2V9LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZS5cbiAqL1xuZXhwb3J0IHR5cGUgUHJvbWlzZVJlc29sdmU8VD4gPSB1bmRlZmluZWQgZXh0ZW5kcyBUID8gKHZhbHVlPzogUHJvbWlzZUxpa2U8VD4gfCBUKSA9PiB2b2lkXG4gIDogKHZhbHVlOiBQcm9taXNlTGlrZTxUPiB8IFQpID0+IHZvaWQ7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgdGhlIHJldHJ5IGJlaGF2aW9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYWJvcnQgc2lnbmFsIHRvIGNhbmNlbCB0aGUgcmV0cnkgb3BlcmF0aW9uLlxuICAgKi9cbiAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDtcblxuICAvKipcbiAgICogVGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHJldHJ5IGF0dGVtcHRzLlxuICAgKi9cbiAgcmV0cnlEZWxheUluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJldHJ5IHRoZSBmdW5jdGlvbiBvbiBlcnJvci5cbiAgICovXG4gIHNob3VsZFJldHJ5T25FcnJvcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIGdpdmluZyB1cCBvbiByZXRyeWluZy5cbiAgICovXG4gIHRpbWVvdXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBIG1hcmtlciBpbnRlcmZhY2UgdG8gaW5kaWNhdGUgdGhhdCBhbiBlcnJvciBzaG91bGQgdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlcm1pbmF0ZVJldHJ5IHtcbiAgLyoqXG4gICAqIEEgbWFya2VyIHByb3BlcnR5IHRvIGluZGljYXRlIHRoYXQgYW4gZXJyb3Igc2hvdWxkIHRlcm1pbmF0ZSByZXRyeSBsb2dpYy5cbiAgICovXG4gIF9fdGVybWluYXRlUmV0cnk6IHRydWU7XG59XG5cbi8qKlxuICogQWRkcyBhbiBlcnJvciBoYW5kbGVyIHRvIGEge0BsaW5rIFByb21pc2V9IHRoYXQgY2F0Y2hlcyBhbnkgZXJyb3JzIGFuZCBlbWl0cyBhbiBhc3luYyBlcnJvciBldmVudC5cbiAqXG4gKiBAcGFyYW0gYXN5bmNGbiAtIFRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gYWRkIGFuIGVycm9yIGhhbmRsZXIgdG8uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBjb21wbGV0ZXMgb3IgZW1pdHMgYXN5bmMgZXJyb3IgZXZlbnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZGRFcnJvckhhbmRsZXIoYXN5bmNGbjogKCkgPT4gUHJvbWlzZTx1bmtub3duPik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBhc3luY0Vycm9yV3JhcHBlciA9IG5ldyBFcnJvcihBU1lOQ19FUlJPUl9XUkFQUEVSX01FU1NBR0UpO1xuICB0cnkge1xuICAgIGF3YWl0IGFzeW5jRm4oKTtcbiAgfSBjYXRjaCAoYXN5bmNFcnJvcikge1xuICAgIGFzeW5jRXJyb3JXcmFwcGVyLmNhdXNlID0gYXN5bmNFcnJvcjtcbiAgICBlbWl0QXN5bmNFcnJvckV2ZW50KGFzeW5jRXJyb3JXcmFwcGVyKTtcbiAgfVxufVxuXG4vKipcbiAqIEZpbHRlcnMgYW4gYXJyYXkgYXN5bmNocm9ub3VzbHksIGtlZXBpbmcgb25seSB0aGUgZWxlbWVudHMgdGhhdCBzYXRpc2Z5IHRoZSBwcm92aWRlZCBwcmVkaWNhdGUgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgZWxlbWVudHMgaW4gdGhlIGlucHV0IGFycmF5LlxuICogQHBhcmFtIGFyciAtIFRoZSBhcnJheSB0byBmaWx0ZXIuXG4gKiBAcGFyYW0gcHJlZGljYXRlIC0gVGhlIHByZWRpY2F0ZSBmdW5jdGlvbiB0byB0ZXN0IGVhY2ggZWxlbWVudC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiBlbGVtZW50cyB0aGF0IHNhdGlzZnkgdGhlIHByZWRpY2F0ZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzeW5jRmlsdGVyPFQ+KGFycjogVFtdLCBwcmVkaWNhdGU6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFRbXSkgPT4gUHJvbWlzYWJsZTxib29sZWFuPik6IFByb21pc2U8VFtdPiB7XG4gIGNvbnN0IHByZWRpY2F0ZVJlc3VsdHMgPSBhd2FpdCBhc3luY01hcChhcnIsIHByZWRpY2F0ZSk7XG4gIHJldHVybiBhcnIuZmlsdGVyKChfLCBpbmRleCkgPT4gcHJlZGljYXRlUmVzdWx0c1tpbmRleF0gPz8gZmFsc2UpO1xufVxuXG4vKipcbiAqIE1hcHMgb3ZlciBhbiBhcnJheSBhc3luY2hyb25vdXNseSwgYXBwbHlpbmcgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGVhY2ggZWxlbWVudCwgYW5kIHRoZW4gZmxhdHRlbnMgdGhlIHJlc3VsdHMgaW50byBhIHNpbmdsZSBhcnJheS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgaW5wdXQgYXJyYXkuXG4gKiBAdHlwZVBhcmFtIFUgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgb3V0cHV0IGFycmF5LlxuICogQHBhcmFtIGFyciAtIFRoZSBhcnJheSB0byBtYXAgb3ZlciBhbmQgZmxhdHRlbi5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGVsZW1lbnQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggYSBmbGF0dGVuZWQgYXJyYXkgb2YgdGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXN5bmNGbGF0TWFwPFQsIFU+KGFycjogVFtdLCBjYWxsYmFjazogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogVFtdKSA9PiBQcm9taXNhYmxlPFVbXT4pOiBQcm9taXNlPFVbXT4ge1xuICByZXR1cm4gKGF3YWl0IGFzeW5jTWFwKGFyciwgY2FsbGJhY2spKS5mbGF0KCk7XG59XG5cbi8qKlxuICogTWFwcyBvdmVyIGFuIGFycmF5IGFzeW5jaHJvbm91c2x5LCBhcHBseWluZyB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZWFjaCBlbGVtZW50LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBpbnB1dCBhcnJheS5cbiAqIEB0eXBlUGFyYW0gVSAtIFRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBvdXRwdXQgYXJyYXkuXG4gKiBAcGFyYW0gYXJyIC0gVGhlIGFycmF5IHRvIG1hcCBvdmVyLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggZWxlbWVudC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3luY01hcDxULCBVPihhcnI6IFRbXSwgY2FsbGJhY2s6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFRbXSkgPT4gUHJvbWlzYWJsZTxVPik6IFByb21pc2U8VVtdPiB7XG4gIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChhcnIubWFwKGNhbGxiYWNrKSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGEgc3luY2hyb25vdXMgb25lIGJ5IGF1dG9tYXRpY2FsbHkgaGFuZGxpbmcgdGhlIFByb21pc2UgcmVqZWN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gQXJncyAtIFRoZSB0eXBlcyBvZiB0aGUgYXJndW1lbnRzIHRoZSBmdW5jdGlvbiBhY2NlcHRzLlxuICogQHBhcmFtIGFzeW5jRnVuYyAtIFRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCB3cmFwcyB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGluIGEgc3luY2hyb25vdXMgaW50ZXJmYWNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEFzeW5jVG9TeW5jPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10+KGFzeW5jRnVuYzogKC4uLmFyZ3M6IEFyZ3MpID0+IFByb21pc2U8dW5rbm93bj4pOiAoLi4uYXJnczogQXJncykgPT4gdm9pZCB7XG4gIHJldHVybiAoLi4uYXJnczogQXJncyk6IHZvaWQgPT4ge1xuICAgIGludm9rZUFzeW5jU2FmZWx5KCgpID0+IGFzeW5jRnVuYyguLi5hcmdzKSk7XG4gIH07XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzeW5jaHJvbm91cyBmdW5jdGlvbiB0byBhbiBhc3luY2hyb25vdXMgb25lIGJ5IHdyYXBwaW5nIGl0IGluIGEge0BsaW5rIFByb21pc2V9LlxuICpcbiAqIEB0eXBlUGFyYW0gQXJncyAtIFRoZSB0eXBlcyBvZiB0aGUgYXJndW1lbnRzIHRoZSBmdW5jdGlvbiBhY2NlcHRzLlxuICogQHR5cGVQYXJhbSBSZXN1bHQgLSBUaGUgdHlwZSBvZiB0aGUgZnVuY3Rpb24ncyByZXR1cm4gdmFsdWUuXG4gKiBAcGFyYW0gc3luY0ZuIC0gVGhlIHN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQgd3JhcHMgdGhlIHN5bmNocm9ub3VzIGZ1bmN0aW9uIGluIGFuIGFzeW5jaHJvbm91cyBpbnRlcmZhY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0U3luY1RvQXN5bmM8QXJncyBleHRlbmRzIHVua25vd25bXSwgUmVzdWx0PihzeW5jRm46ICguLi5hcmdzOiBBcmdzKSA9PiBSZXN1bHQpOiAoLi4uYXJnczogQXJncykgPT4gUHJvbWlzZTxSZXN1bHQ+IHtcbiAgcmV0dXJuICguLi5hcmdzOiBBcmdzKTogUHJvbWlzZTxSZXN1bHQ+ID0+IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gc3luY0ZuKC4uLmFyZ3MpKTtcbn1cblxuLyoqXG4gKiBJZ25vcmVzIGFuIGVycm9yIHRoYXQgaXMgdGhyb3duIGJ5IGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gcHJvbWlzZSAtIFRoZSBwcm9taXNlIHRvIGlnbm9yZSB0aGUgZXJyb3Igb2YuXG4gKiBAcGFyYW0gZmFsbGJhY2tWYWx1ZSAtIEFsd2F5cyBgdW5kZWZpbmVkYC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGNvbXBsZXRlcyBvciBmYWlscy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlnbm9yZUVycm9yKHByb21pc2U6IFByb21pc2U8dW5rbm93bj4sIGZhbGxiYWNrVmFsdWU/OiB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+O1xuXG4vKipcbiAqIEludm9rZXMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGFuZCByZXR1cm5zIGEgZmFsbGJhY2sgdmFsdWUgaWYgYW4gZXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHByb21pc2UgLSBUaGUgcHJvbWlzZSB0byBpZ25vcmUgdGhlIGVycm9yIG9mLlxuICogQHBhcmFtIGZhbGxiYWNrVmFsdWUgLSBUaGUgdmFsdWUgdG8gcmV0dXJuIGlmIGFuIGVycm9yIGlzIHRocm93bi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBvciB0aGUgZmFsbGJhY2sgdmFsdWUgaWYgYW4gZXJyb3IgaXMgdGhyb3duLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaWdub3JlRXJyb3I8VD4ocHJvbWlzZTogUHJvbWlzZTxUPiwgZmFsbGJhY2tWYWx1ZTogVCk6IFByb21pc2U8VD4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBwcm9taXNlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsbGJhY2tWYWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEludm9rZXMgYSB7QGxpbmsgUHJvbWlzZX0gYW5kIHNhZmVseSBoYW5kbGVzIGFueSBlcnJvcnMgYnkgY2F0Y2hpbmcgdGhlbSBhbmQgZW1pdHRpbmcgYW4gYXN5bmMgZXJyb3IgZXZlbnQuXG4gKlxuICogQHBhcmFtIGFzeW5jRm4gLSBUaGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGludm9rZSBzYWZlbHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZva2VBc3luY1NhZmVseShhc3luY0ZuOiAoKSA9PiBQcm9taXNlPHVua25vd24+KTogdm9pZCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gIHZvaWQgYWRkRXJyb3JIYW5kbGVyKGFzeW5jRm4pO1xufVxuXG4vKipcbiAqIEludm9rZXMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGFmdGVyIGEgZGVsYXkuXG4gKlxuICogQHBhcmFtIGFzeW5jRm4gLSBUaGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSBkZWxheUluTWlsbGlzZWNvbmRzIC0gVGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludm9rZUFzeW5jU2FmZWx5QWZ0ZXJEZWxheShhc3luY0ZuOiAoKSA9PiBQcm9taXNhYmxlPHVua25vd24+LCBkZWxheUluTWlsbGlzZWNvbmRzID0gMCk6IHZvaWQge1xuICBzZXRUaW1lb3V0KGNvbnZlcnRBc3luY1RvU3luYyhhc3luYyAoKSA9PiBhd2FpdCBhc3luY0ZuKCkpLCBkZWxheUluTWlsbGlzZWNvbmRzKTtcbn1cblxuLyoqXG4gKiBNYXJrcyBhbiBlcnJvciB0byB0ZXJtaW5hdGUgcmV0cnkgbG9naWMuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIG1hcmsgdG8gdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICogQHJldHVybnMgQW4gZXJyb3IgdGhhdCBzaG91bGQgdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFya3NBc1Rlcm1pbmF0ZVJldHJ5PFRFcnJvciBleHRlbmRzIEVycm9yPihlcnJvcjogVEVycm9yKTogVGVybWluYXRlUmV0cnkgJiBURXJyb3Ige1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihlcnJvciwgeyBfX3Rlcm1pbmF0ZVJldHJ5OiB0cnVlIH0pIGFzIFRlcm1pbmF0ZVJldHJ5ICYgVEVycm9yO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIG5leHQgcmVxdWVzdCBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbmV4dCByZXF1ZXN0IGFuaW1hdGlvbiBmcmFtZSBpcyBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWVBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0cmllcyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gdW50aWwgaXQgcmV0dXJucyB0cnVlIG9yIHRoZSB0aW1lb3V0IGlzIHJlYWNoZWQuXG4gKlxuICogQHBhcmFtIGZuIC0gVGhlIGZ1bmN0aW9uIHRvIHJldHJ5LlxuICogQHBhcmFtIHJldHJ5T3B0aW9ucyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMgdG8gY29uZmlndXJlIHRoZSByZXRyeSBiZWhhdmlvci5cbiAqIEBwYXJhbSBzdGFja1RyYWNlIC0gT3B0aW9uYWwgc3RhY2sgdHJhY2UuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBvciByZWplY3RzIHdoZW4gdGhlIHRpbWVvdXQgaXMgcmVhY2hlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJldHJ5V2l0aFRpbWVvdXQoZm46ICgpID0+IFByb21pc2FibGU8Ym9vbGVhbj4sIHJldHJ5T3B0aW9ucz86IFJldHJ5T3B0aW9ucywgc3RhY2tUcmFjZT86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByZXRyeVdpdGhUaW1lb3V0RGVidWdnZXIgPSBnZXRMaWJEZWJ1Z2dlcignQXN5bmM6cmV0cnlXaXRoVGltZW91dCcpO1xuICBzdGFja1RyYWNlID8/PSBnZXRTdGFja1RyYWNlKDEpO1xuICBjb25zdCBERUZBVUxUX1JFVFJZX09QVElPTlMgPSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnNcbiAgICByZXRyeURlbGF5SW5NaWxsaXNlY29uZHM6IDEwMCxcbiAgICBzaG91bGRSZXRyeU9uRXJyb3I6IGZhbHNlLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gICAgdGltZW91dEluTWlsbGlzZWNvbmRzOiA1MDAwXG4gIH07XG4gIGNvbnN0IGZ1bGxPcHRpb25zID0geyAuLi5ERUZBVUxUX1JFVFJZX09QVElPTlMsIC4uLnJldHJ5T3B0aW9ucyB9O1xuICBhd2FpdCBydW5XaXRoVGltZW91dChmdWxsT3B0aW9ucy50aW1lb3V0SW5NaWxsaXNlY29uZHMsIGFzeW5jICgpID0+IHtcbiAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb25cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgZnVsbE9wdGlvbnMuYWJvcnRTaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgICBhdHRlbXB0Kys7XG4gICAgICBsZXQgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaXNTdWNjZXNzID0gYXdhaXQgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghZnVsbE9wdGlvbnMuc2hvdWxkUmV0cnlPbkVycm9yIHx8IChlcnJvciBhcyBQYXJ0aWFsPFRlcm1pbmF0ZVJldHJ5PikuX190ZXJtaW5hdGVSZXRyeSkge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHByaW50RXJyb3IoZXJyb3IpO1xuICAgICAgICBpc1N1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1N1Y2Nlc3MpIHtcbiAgICAgICAgaWYgKGF0dGVtcHQgPiAxKSB7XG4gICAgICAgICAgcmV0cnlXaXRoVGltZW91dERlYnVnZ2VyKGBSZXRyeSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IGFmdGVyICR7YXR0ZW1wdC50b1N0cmluZygpfSBhdHRlbXB0c2ApO1xuICAgICAgICAgIHJldHJ5V2l0aFRpbWVvdXREZWJ1Z2dlci5wcmludFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZXRyeVdpdGhUaW1lb3V0RGVidWdnZXIoXG4gICAgICAgIGBSZXRyeSBhdHRlbXB0ICR7YXR0ZW1wdC50b1N0cmluZygpfSBjb21wbGV0ZWQgdW5zdWNjZXNzZnVsbHkuIFRyeWluZyBhZ2FpbiBpbiAke2Z1bGxPcHRpb25zLnJldHJ5RGVsYXlJbk1pbGxpc2Vjb25kcy50b1N0cmluZygpfSBtaWxsaXNlY29uZHNgLFxuICAgICAgICB7XG4gICAgICAgICAgZm5cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHJldHJ5V2l0aFRpbWVvdXREZWJ1Z2dlci5wcmludFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSk7XG4gICAgICBhd2FpdCBzbGVlcChmdWxsT3B0aW9ucy5yZXRyeURlbGF5SW5NaWxsaXNlY29uZHMpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogRXhlY3V0ZXMgYSBmdW5jdGlvbiB3aXRoIGEgdGltZW91dC4gSWYgdGhlIGZ1bmN0aW9uIGRvZXMgbm90IGNvbXBsZXRlIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHRpbWUsIGl0IGlzIGNvbnNpZGVyZWQgdG8gaGF2ZSB0aW1lZCBvdXQuXG4gKlxuICogSWYgYERFQlVHPW9ic2lkaWFuLWRldi11dGlsczpBc3luYzpydW5XaXRoVGltZW91dGAgaXMgc2V0LCB0aGUgZXhlY3V0aW9uIGlzIG5vdCB0ZXJtaW5hdGVkIGFmdGVyIHRoZSB0aW1lb3V0IGFuZCB0aGUgZnVuY3Rpb24gaXMgYWxsb3dlZCB0byBydW4gaW5kZWZpbml0ZWx5LlxuICpcbiAqIEB0eXBlUGFyYW0gUiAtIFRoZSB0eXBlIG9mIHRoZSByZXN1bHQgZnJvbSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHRpbWVvdXRJbk1pbGxpc2Vjb25kcyAtIFRoZSBtYXhpbXVtIHRpbWUgdG8gd2FpdCBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcGFyYW0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gZXhlY3V0ZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gb3IgcmVqZWN0cyBpZiBpdCB0aW1lcyBvdXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5XaXRoVGltZW91dDxSPih0aW1lb3V0SW5NaWxsaXNlY29uZHM6IG51bWJlciwgZm46ICgpID0+IFByb21pc2FibGU8Uj4pOiBQcm9taXNlPFI+IHtcbiAgbGV0IGlzVGltZWRPdXQgPSB0cnVlO1xuICBsZXQgcmVzdWx0OiBSID0gbnVsbCBhcyBSO1xuICBjb25zdCBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgYXdhaXQgUHJvbWlzZS5yYWNlKFtydW4oKSwgaW5uZXJUaW1lb3V0KCldKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb25cbiAgaWYgKGlzVGltZWRPdXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RpbWVkIG91dCcpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG5cbiAgYXN5bmMgZnVuY3Rpb24gcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJlc3VsdCA9IGF3YWl0IGZuKCk7XG4gICAgaXNUaW1lZE91dCA9IGZhbHNlO1xuICAgIGNvbnN0IGR1cmF0aW9uID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWU7XG4gICAgZ2V0TGliRGVidWdnZXIoJ0FzeW5jOnJ1bldpdGhUaW1lb3V0JykoYEV4ZWN1dGlvbiB0aW1lOiAke2R1cmF0aW9uLnRvU3RyaW5nKCl9IG1pbGxpc2Vjb25kc2AsIHsgZm4gfSk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBpbm5lclRpbWVvdXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFpc1RpbWVkT3V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHNsZWVwKHRpbWVvdXRJbk1pbGxpc2Vjb25kcyk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb25cbiAgICBpZiAoIWlzVGltZWRPdXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZHVyYXRpb24gPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICBjb25zb2xlLndhcm4oYFRpbWVkIG91dCBpbiAke2R1cmF0aW9uLnRvU3RyaW5nKCl9IG1pbGxpc2Vjb25kc2AsIHsgZm4gfSk7XG4gICAgY29uc3QgX2RlYnVnZ2VyID0gZ2V0TGliRGVidWdnZXIoJ0FzeW5jOnJ1bldpdGhUaW1lb3V0OnRpbWVvdXQnKTtcbiAgICBpZiAoX2RlYnVnZ2VyLmVuYWJsZWQpIHtcbiAgICAgIF9kZWJ1Z2dlcihcbiAgICAgICAgYFRoZSBleGVjdXRpb24gaXMgbm90IHRlcm1pbmF0ZWQgYmVjYXVzZSBkZWJ1Z2dlciAke19kZWJ1Z2dlci5uYW1lc3BhY2V9IGlzIGVuYWJsZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW5hb3Vtb3Yvb2JzaWRpYW4tZGV2LXV0aWxzL2Jsb2IvbWFpbi9kb2NzL2RlYnVnZ2luZy5tZCBmb3IgbW9yZSBpbmZvcm1hdGlvbmBcbiAgICAgICk7XG4gICAgICBhd2FpdCBpbm5lclRpbWVvdXQoKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBEZWxheXMgZXhlY3V0aW9uIGZvciBhIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwYXJhbSBtaWxsaXNlY29uZHMgLSBUaGUgdGltZSB0byB3YWl0IGluIG1pbGxpc2Vjb25kcy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIHNwZWNpZmllZCBkZWxheS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNsZWVwKG1pbGxpc2Vjb25kczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCBtaWxsaXNlY29uZHMpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVqZWN0cyB3aGVuIHRoZSBhYm9ydCBzaWduYWwgaXMgYWJvcnRlZC5cbiAqXG4gKiBAcGFyYW0gYWJvcnRTaWduYWwgLSBUaGUgYWJvcnQgc2lnbmFsIHRvIGxpc3RlbiB0by5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVqZWN0cyB3aGVuIHRoZSBhYm9ydCBzaWduYWwgaXMgYWJvcnRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRocm93T25BYm9ydChhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChfcmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgaWYgKGhhbmRsZUFib3J0KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYWJvcnRTaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBoYW5kbGVBYm9ydCwgeyBvbmNlOiB0cnVlIH0pO1xuXG4gICAgZnVuY3Rpb24gaGFuZGxlQWJvcnQoKTogYm9vbGVhbiB7XG4gICAgICB0cnkge1xuICAgICAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJlamVjdChlIGFzIEVycm9yKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVqZWN0cyBhZnRlciB0aGUgc3BlY2lmaWVkIHRpbWVvdXQgcGVyaW9kLlxuICpcbiAqIEBwYXJhbSB0aW1lb3V0SW5NaWxsaXNlY29uZHMgLSBUaGUgdGltZW91dCBwZXJpb2QgaW4gbWlsbGlzZWNvbmRzLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCBhbHdheXMgcmVqZWN0cyB3aXRoIGEgdGltZW91dCBlcnJvci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRpbWVvdXQodGltZW91dEluTWlsbGlzZWNvbmRzOiBudW1iZXIpOiBQcm9taXNlPG5ldmVyPiB7XG4gIGF3YWl0IHNsZWVwKHRpbWVvdXRJbk1pbGxpc2Vjb25kcyk7XG4gIHRocm93IG5ldyBFcnJvcihgVGltZWQgb3V0IGluICR7dGltZW91dEluTWlsbGlzZWNvbmRzLnRvU3RyaW5nKCl9IG1pbGxpc2Vjb25kc2ApO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0byBhbiBhcnJheSBieSBjb25zdW1pbmcgYWxsIGl0cyBlbGVtZW50cy5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBwcm9kdWNlZCBieSB0aGUgQXN5bmNJdGVyYWJsZUl0ZXJhdG9yLlxuICogQHBhcmFtIGl0ZXIgLSBUaGUgQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggYW4gYXJyYXkgb2YgYWxsIHRoZSBlbGVtZW50cyBpbiB0aGUgQXN5bmNJdGVyYWJsZUl0ZXJhdG9yLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdG9BcnJheTxUPihpdGVyOiBBc3luY0l0ZXJhYmxlSXRlcmF0b3I8VD4pOiBQcm9taXNlPFRbXT4ge1xuICBjb25zdCBhcnI6IFRbXSA9IFtdO1xuICBmb3IgYXdhaXQgKGNvbnN0IGl0ZW0gb2YgaXRlcikge1xuICAgIGFyci5wdXNoKGl0ZW0pO1xuICB9XG4gIHJldHVybiBhcnI7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUUEsbUJBQStCO0FBQy9CLG1CQUtPO0FBbURQLGVBQXNCLGdCQUFnQixTQUFnRDtBQUNwRixRQUFNLG9CQUFvQixJQUFJLE1BQU0sd0NBQTJCO0FBQy9ELE1BQUk7QUFDRixVQUFNLFFBQVE7QUFBQSxFQUNoQixTQUFTLFlBQVk7QUFDbkIsc0JBQWtCLFFBQVE7QUFDMUIsMENBQW9CLGlCQUFpQjtBQUFBLEVBQ3ZDO0FBQ0Y7QUFVQSxlQUFzQixZQUFlLEtBQVUsV0FBdUY7QUFDcEksUUFBTSxtQkFBbUIsTUFBTSxTQUFTLEtBQUssU0FBUztBQUN0RCxTQUFPLElBQUksT0FBTyxDQUFDLEdBQUcsVUFBVSxpQkFBaUIsS0FBSyxLQUFLLEtBQUs7QUFDbEU7QUFXQSxlQUFzQixhQUFt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aUJBQWE7QUFDYixVQUFNLFdBQVcsWUFBWSxJQUFJLElBQUk7QUFDckMscUNBQWUsc0JBQXNCLEVBQUUsbUJBQW1CLFNBQVMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQztBQUFBLEVBQ3RHO0FBRUEsaUJBQWUsZUFBOEI7QUFDM0MsUUFBSSxDQUFDLFlBQVk7QUFDZjtBQUFBLElBQ0Y7QUFDQSxVQUFNLE1BQU0scUJBQXFCO0FBRWpDLFFBQUksQ0FBQyxZQUFZO0FBQ2Y7QUFBQSxJQUNGO0FBQ0EsVUFBTSxXQUFXLFlBQVksSUFBSSxJQUFJO0FBQ3JDLFlBQVEsS0FBSyxnQkFBZ0IsU0FBUyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDO0FBQ3ZFLFVBQU0sZ0JBQVksNkJBQWUsOEJBQThCO0FBQy9ELFFBQUksVUFBVSxTQUFTO0FBQ3JCO0FBQUEsUUFDRSxvREFBb0QsVUFBVSxTQUFTO0FBQUEsTUFDekU7QUFDQSxZQUFNLGFBQWE7QUFBQSxJQUNyQjtBQUFBLEVBQ0Y7QUFDRjtBQVFBLGVBQXNCLE1BQU0sY0FBcUM7QUFDL0QsUUFBTSxJQUFJLFFBQVEsQ0FBQyxZQUFZO0FBQzdCLGVBQVcsU0FBUyxZQUFZO0FBQUEsRUFDbEMsQ0FBQztBQUNIO0FBUU8sU0FBUyxhQUFhLGFBQXlDO0FBQ3BFLFNBQU8sSUFBSSxRQUFRLENBQUMsVUFBVSxXQUFXO0FBQ3ZDLFFBQUksWUFBWSxHQUFHO0FBQ2pCO0FBQUEsSUFDRjtBQUNBLGdCQUFZLGlCQUFpQixTQUFTLGFBQWEsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUVqRSxhQUFTLGNBQXVCO0FBQzlCLFVBQUk7QUFDRixvQkFBWSxlQUFlO0FBQzNCLGVBQU87QUFBQSxNQUNULFNBQVMsR0FBRztBQUNWLGVBQU8sQ0FBVTtBQUNqQixlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUM7QUFDSDtBQVFBLGVBQXNCLFFBQVEsdUJBQStDO0FBQzNFLFFBQU0sTUFBTSxxQkFBcUI7QUFDakMsUUFBTSxJQUFJLE1BQU0sZ0JBQWdCLHNCQUFzQixTQUFTLENBQUMsZUFBZTtBQUNqRjtBQVNBLGVBQXNCLFFBQVcsTUFBOEM7QUFDN0UsUUFBTSxNQUFXLENBQUM7QUFDbEIsbUJBQWlCLFFBQVEsTUFBTTtBQUM3QixRQUFJLEtBQUssSUFBSTtBQUFBLEVBQ2Y7QUFDQSxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
230
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL0FzeW5jLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBhc3luY2hyb25vdXMgb3BlcmF0aW9ucy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBnZXRMaWJEZWJ1Z2dlciB9IGZyb20gJy4vRGVidWcudHMnO1xuaW1wb3J0IHtcbiAgQVNZTkNfRVJST1JfV1JBUFBFUl9NRVNTQUdFLFxuICBlbWl0QXN5bmNFcnJvckV2ZW50LFxuICBnZXRTdGFja1RyYWNlLFxuICBwcmludEVycm9yXG59IGZyb20gJy4vRXJyb3IudHMnO1xuXG4vKipcbiAqIEEgdHlwZSByZXByZXNlbnRpbmcgYSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIGEge0BsaW5rIFByb21pc2V9LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZS5cbiAqL1xuZXhwb3J0IHR5cGUgUHJvbWlzZVJlc29sdmU8VD4gPSB1bmRlZmluZWQgZXh0ZW5kcyBUID8gKHZhbHVlPzogUHJvbWlzZUxpa2U8VD4gfCBUKSA9PiB2b2lkXG4gIDogKHZhbHVlOiBQcm9taXNlTGlrZTxUPiB8IFQpID0+IHZvaWQ7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgdGhlIHJldHJ5IGJlaGF2aW9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYWJvcnQgc2lnbmFsIHRvIGNhbmNlbCB0aGUgcmV0cnkgb3BlcmF0aW9uLlxuICAgKi9cbiAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDtcblxuICAvKipcbiAgICogVGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHJldHJ5IGF0dGVtcHRzLlxuICAgKi9cbiAgcmV0cnlEZWxheUluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJldHJ5IHRoZSBmdW5jdGlvbiBvbiBlcnJvci5cbiAgICovXG4gIHNob3VsZFJldHJ5T25FcnJvcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIGdpdmluZyB1cCBvbiByZXRyeWluZy5cbiAgICovXG4gIHRpbWVvdXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBIG1hcmtlciBpbnRlcmZhY2UgdG8gaW5kaWNhdGUgdGhhdCBhbiBlcnJvciBzaG91bGQgdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlcm1pbmF0ZVJldHJ5IHtcbiAgLyoqXG4gICAqIEEgbWFya2VyIHByb3BlcnR5IHRvIGluZGljYXRlIHRoYXQgYW4gZXJyb3Igc2hvdWxkIHRlcm1pbmF0ZSByZXRyeSBsb2dpYy5cbiAgICovXG4gIF9fdGVybWluYXRlUmV0cnk6IHRydWU7XG59XG5cbi8qKlxuICogQWRkcyBhbiBlcnJvciBoYW5kbGVyIHRvIGEge0BsaW5rIFByb21pc2V9IHRoYXQgY2F0Y2hlcyBhbnkgZXJyb3JzIGFuZCBlbWl0cyBhbiBhc3luYyBlcnJvciBldmVudC5cbiAqXG4gKiBAcGFyYW0gYXN5bmNGbiAtIFRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gYWRkIGFuIGVycm9yIGhhbmRsZXIgdG8uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBjb21wbGV0ZXMgb3IgZW1pdHMgYXN5bmMgZXJyb3IgZXZlbnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZGRFcnJvckhhbmRsZXIoYXN5bmNGbjogKCkgPT4gUHJvbWlzZTx1bmtub3duPik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBhc3luY0Vycm9yV3JhcHBlciA9IG5ldyBFcnJvcihBU1lOQ19FUlJPUl9XUkFQUEVSX01FU1NBR0UpO1xuICB0cnkge1xuICAgIGF3YWl0IGFzeW5jRm4oKTtcbiAgfSBjYXRjaCAoYXN5bmNFcnJvcikge1xuICAgIGFzeW5jRXJyb3JXcmFwcGVyLmNhdXNlID0gYXN5bmNFcnJvcjtcbiAgICBlbWl0QXN5bmNFcnJvckV2ZW50KGFzeW5jRXJyb3JXcmFwcGVyKTtcbiAgfVxufVxuXG4vKipcbiAqIEZpbHRlcnMgYW4gYXJyYXkgYXN5bmNocm9ub3VzbHksIGtlZXBpbmcgb25seSB0aGUgZWxlbWVudHMgdGhhdCBzYXRpc2Z5IHRoZSBwcm92aWRlZCBwcmVkaWNhdGUgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgZWxlbWVudHMgaW4gdGhlIGlucHV0IGFycmF5LlxuICogQHBhcmFtIGFyciAtIFRoZSBhcnJheSB0byBmaWx0ZXIuXG4gKiBAcGFyYW0gcHJlZGljYXRlIC0gVGhlIHByZWRpY2F0ZSBmdW5jdGlvbiB0byB0ZXN0IGVhY2ggZWxlbWVudC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiBlbGVtZW50cyB0aGF0IHNhdGlzZnkgdGhlIHByZWRpY2F0ZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzeW5jRmlsdGVyPFQ+KGFycjogVFtdLCBwcmVkaWNhdGU6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFRbXSkgPT4gUHJvbWlzYWJsZTxib29sZWFuPik6IFByb21pc2U8VFtdPiB7XG4gIGNvbnN0IHByZWRpY2F0ZVJlc3VsdHMgPSBhd2FpdCBhc3luY01hcChhcnIsIHByZWRpY2F0ZSk7XG4gIHJldHVybiBhcnIuZmlsdGVyKChfLCBpbmRleCkgPT4gcHJlZGljYXRlUmVzdWx0c1tpbmRleF0gPz8gZmFsc2UpO1xufVxuXG4vKipcbiAqIE1hcHMgb3ZlciBhbiBhcnJheSBhc3luY2hyb25vdXNseSwgYXBwbHlpbmcgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGVhY2ggZWxlbWVudCwgYW5kIHRoZW4gZmxhdHRlbnMgdGhlIHJlc3VsdHMgaW50byBhIHNpbmdsZSBhcnJheS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgaW5wdXQgYXJyYXkuXG4gKiBAdHlwZVBhcmFtIFUgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgb3V0cHV0IGFycmF5LlxuICogQHBhcmFtIGFyciAtIFRoZSBhcnJheSB0byBtYXAgb3ZlciBhbmQgZmxhdHRlbi5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGVsZW1lbnQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggYSBmbGF0dGVuZWQgYXJyYXkgb2YgdGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXN5bmNGbGF0TWFwPFQsIFU+KGFycjogVFtdLCBjYWxsYmFjazogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogVFtdKSA9PiBQcm9taXNhYmxlPFVbXT4pOiBQcm9taXNlPFVbXT4ge1xuICByZXR1cm4gKGF3YWl0IGFzeW5jTWFwKGFyciwgY2FsbGJhY2spKS5mbGF0KCk7XG59XG5cbi8qKlxuICogTWFwcyBvdmVyIGFuIGFycmF5IGFzeW5jaHJvbm91c2x5LCBhcHBseWluZyB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZWFjaCBlbGVtZW50LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBpbnB1dCBhcnJheS5cbiAqIEB0eXBlUGFyYW0gVSAtIFRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBvdXRwdXQgYXJyYXkuXG4gKiBAcGFyYW0gYXJyIC0gVGhlIGFycmF5IHRvIG1hcCBvdmVyLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggZWxlbWVudC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3luY01hcDxULCBVPihhcnI6IFRbXSwgY2FsbGJhY2s6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFRbXSkgPT4gUHJvbWlzYWJsZTxVPik6IFByb21pc2U8VVtdPiB7XG4gIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChhcnIubWFwKGNhbGxiYWNrKSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGEgc3luY2hyb25vdXMgb25lIGJ5IGF1dG9tYXRpY2FsbHkgaGFuZGxpbmcgdGhlIFByb21pc2UgcmVqZWN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gQXJncyAtIFRoZSB0eXBlcyBvZiB0aGUgYXJndW1lbnRzIHRoZSBmdW5jdGlvbiBhY2NlcHRzLlxuICogQHBhcmFtIGFzeW5jRnVuYyAtIFRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCB3cmFwcyB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGluIGEgc3luY2hyb25vdXMgaW50ZXJmYWNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEFzeW5jVG9TeW5jPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10+KGFzeW5jRnVuYzogKC4uLmFyZ3M6IEFyZ3MpID0+IFByb21pc2U8dW5rbm93bj4pOiAoLi4uYXJnczogQXJncykgPT4gdm9pZCB7XG4gIHJldHVybiAoLi4uYXJnczogQXJncyk6IHZvaWQgPT4ge1xuICAgIGludm9rZUFzeW5jU2FmZWx5KCgpID0+IGFzeW5jRnVuYyguLi5hcmdzKSk7XG4gIH07XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzeW5jaHJvbm91cyBmdW5jdGlvbiB0byBhbiBhc3luY2hyb25vdXMgb25lIGJ5IHdyYXBwaW5nIGl0IGluIGEge0BsaW5rIFByb21pc2V9LlxuICpcbiAqIEB0eXBlUGFyYW0gQXJncyAtIFRoZSB0eXBlcyBvZiB0aGUgYXJndW1lbnRzIHRoZSBmdW5jdGlvbiBhY2NlcHRzLlxuICogQHR5cGVQYXJhbSBSZXN1bHQgLSBUaGUgdHlwZSBvZiB0aGUgZnVuY3Rpb24ncyByZXR1cm4gdmFsdWUuXG4gKiBAcGFyYW0gc3luY0ZuIC0gVGhlIHN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQgd3JhcHMgdGhlIHN5bmNocm9ub3VzIGZ1bmN0aW9uIGluIGFuIGFzeW5jaHJvbm91cyBpbnRlcmZhY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0U3luY1RvQXN5bmM8QXJncyBleHRlbmRzIHVua25vd25bXSwgUmVzdWx0PihzeW5jRm46ICguLi5hcmdzOiBBcmdzKSA9PiBSZXN1bHQpOiAoLi4uYXJnczogQXJncykgPT4gUHJvbWlzZTxSZXN1bHQ+IHtcbiAgcmV0dXJuICguLi5hcmdzOiBBcmdzKTogUHJvbWlzZTxSZXN1bHQ+ID0+IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gc3luY0ZuKC4uLmFyZ3MpKTtcbn1cblxuLyoqXG4gKiBJZ25vcmVzIGFuIGVycm9yIHRoYXQgaXMgdGhyb3duIGJ5IGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gcHJvbWlzZSAtIFRoZSBwcm9taXNlIHRvIGlnbm9yZSB0aGUgZXJyb3Igb2YuXG4gKiBAcGFyYW0gZmFsbGJhY2tWYWx1ZSAtIEFsd2F5cyBgdW5kZWZpbmVkYC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGNvbXBsZXRlcyBvciBmYWlscy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlnbm9yZUVycm9yKHByb21pc2U6IFByb21pc2U8dW5rbm93bj4sIGZhbGxiYWNrVmFsdWU/OiB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+O1xuXG4vKipcbiAqIEludm9rZXMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGFuZCByZXR1cm5zIGEgZmFsbGJhY2sgdmFsdWUgaWYgYW4gZXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHByb21pc2UgLSBUaGUgcHJvbWlzZSB0byBpZ25vcmUgdGhlIGVycm9yIG9mLlxuICogQHBhcmFtIGZhbGxiYWNrVmFsdWUgLSBUaGUgdmFsdWUgdG8gcmV0dXJuIGlmIGFuIGVycm9yIGlzIHRocm93bi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBvciB0aGUgZmFsbGJhY2sgdmFsdWUgaWYgYW4gZXJyb3IgaXMgdGhyb3duLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaWdub3JlRXJyb3I8VD4ocHJvbWlzZTogUHJvbWlzZTxUPiwgZmFsbGJhY2tWYWx1ZTogVCk6IFByb21pc2U8VD4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBwcm9taXNlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsbGJhY2tWYWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEludm9rZXMgYSB7QGxpbmsgUHJvbWlzZX0gYW5kIHNhZmVseSBoYW5kbGVzIGFueSBlcnJvcnMgYnkgY2F0Y2hpbmcgdGhlbSBhbmQgZW1pdHRpbmcgYW4gYXN5bmMgZXJyb3IgZXZlbnQuXG4gKlxuICogQHBhcmFtIGFzeW5jRm4gLSBUaGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGludm9rZSBzYWZlbHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZva2VBc3luY1NhZmVseShhc3luY0ZuOiAoKSA9PiBQcm9taXNlPHVua25vd24+KTogdm9pZCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gIHZvaWQgYWRkRXJyb3JIYW5kbGVyKGFzeW5jRm4pO1xufVxuXG4vKipcbiAqIEludm9rZXMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGFmdGVyIGEgZGVsYXkuXG4gKlxuICogQHBhcmFtIGFzeW5jRm4gLSBUaGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSBkZWxheUluTWlsbGlzZWNvbmRzIC0gVGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludm9rZUFzeW5jU2FmZWx5QWZ0ZXJEZWxheShhc3luY0ZuOiAoKSA9PiBQcm9taXNhYmxlPHVua25vd24+LCBkZWxheUluTWlsbGlzZWNvbmRzID0gMCk6IHZvaWQge1xuICBzZXRUaW1lb3V0KGNvbnZlcnRBc3luY1RvU3luYyhhc3luYyAoKSA9PiBhd2FpdCBhc3luY0ZuKCkpLCBkZWxheUluTWlsbGlzZWNvbmRzKTtcbn1cblxuLyoqXG4gKiBNYXJrcyBhbiBlcnJvciB0byB0ZXJtaW5hdGUgcmV0cnkgbG9naWMuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIG1hcmsgdG8gdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICogQHJldHVybnMgQW4gZXJyb3IgdGhhdCBzaG91bGQgdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFya3NBc1Rlcm1pbmF0ZVJldHJ5PFRFcnJvciBleHRlbmRzIEVycm9yPihlcnJvcjogVEVycm9yKTogVGVybWluYXRlUmV0cnkgJiBURXJyb3Ige1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihlcnJvciwgeyBfX3Rlcm1pbmF0ZVJldHJ5OiB0cnVlIH0pIGFzIFRlcm1pbmF0ZVJldHJ5ICYgVEVycm9yO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIG5leHQgcmVxdWVzdCBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbmV4dCByZXF1ZXN0IGFuaW1hdGlvbiBmcmFtZSBpcyBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWVBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0cmllcyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gdW50aWwgaXQgcmV0dXJucyB0cnVlIG9yIHRoZSB0aW1lb3V0IGlzIHJlYWNoZWQuXG4gKlxuICogQHBhcmFtIGZuIC0gVGhlIGZ1bmN0aW9uIHRvIHJldHJ5LlxuICogQHBhcmFtIHJldHJ5T3B0aW9ucyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMgdG8gY29uZmlndXJlIHRoZSByZXRyeSBiZWhhdmlvci5cbiAqIEBwYXJhbSBzdGFja1RyYWNlIC0gT3B0aW9uYWwgc3RhY2sgdHJhY2UuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBvciByZWplY3RzIHdoZW4gdGhlIHRpbWVvdXQgaXMgcmVhY2hlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJldHJ5V2l0aFRpbWVvdXQoZm46ICgpID0+IFByb21pc2FibGU8Ym9vbGVhbj4sIHJldHJ5T3B0aW9ucz86IFJldHJ5T3B0aW9ucywgc3RhY2tUcmFjZT86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByZXRyeVdpdGhUaW1lb3V0RGVidWdnZXIgPSBnZXRMaWJEZWJ1Z2dlcignQXN5bmM6cmV0cnlXaXRoVGltZW91dCcpO1xuICBzdGFja1RyYWNlID8/PSBnZXRTdGFja1RyYWNlKDEpO1xuICBjb25zdCBERUZBVUxUX1JFVFJZX09QVElPTlMgPSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnNcbiAgICByZXRyeURlbGF5SW5NaWxsaXNlY29uZHM6IDEwMCxcbiAgICBzaG91bGRSZXRyeU9uRXJyb3I6IGZhbHNlLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gICAgdGltZW91dEluTWlsbGlzZWNvbmRzOiA1MDAwXG4gIH07XG4gIGNvbnN0IGZ1bGxPcHRpb25zID0geyAuLi5ERUZBVUxUX1JFVFJZX09QVElPTlMsIC4uLnJldHJ5T3B0aW9ucyB9O1xuICBhd2FpdCBydW5XaXRoVGltZW91dChmdWxsT3B0aW9ucy50aW1lb3V0SW5NaWxsaXNlY29uZHMsIGFzeW5jICgpID0+IHtcbiAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb25cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgZnVsbE9wdGlvbnMuYWJvcnRTaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgICBhdHRlbXB0Kys7XG4gICAgICBsZXQgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaXNTdWNjZXNzID0gYXdhaXQgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghZnVsbE9wdGlvbnMuc2hvdWxkUmV0cnlPbkVycm9yIHx8IChlcnJvciBhcyBQYXJ0aWFsPFRlcm1pbmF0ZVJldHJ5PikuX190ZXJtaW5hdGVSZXRyeSkge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHByaW50RXJyb3IoZXJyb3IpO1xuICAgICAgICBpc1N1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1N1Y2Nlc3MpIHtcbiAgICAgICAgaWYgKGF0dGVtcHQgPiAxKSB7XG4gICAgICAgICAgcmV0cnlXaXRoVGltZW91dERlYnVnZ2VyKGBSZXRyeSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IGFmdGVyICR7YXR0ZW1wdC50b1N0cmluZygpfSBhdHRlbXB0c2ApO1xuICAgICAgICAgIHJldHJ5V2l0aFRpbWVvdXREZWJ1Z2dlci5wcmludFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZXRyeVdpdGhUaW1lb3V0RGVidWdnZXIoXG4gICAgICAgIGBSZXRyeSBhdHRlbXB0ICR7YXR0ZW1wdC50b1N0cmluZygpfSBjb21wbGV0ZWQgdW5zdWNjZXNzZnVsbHkuIFRyeWluZyBhZ2FpbiBpbiAke2Z1bGxPcHRpb25zLnJldHJ5RGVsYXlJbk1pbGxpc2Vjb25kcy50b1N0cmluZygpfSBtaWxsaXNlY29uZHNgLFxuICAgICAgICB7XG4gICAgICAgICAgZm5cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHJldHJ5V2l0aFRpbWVvdXREZWJ1Z2dlci5wcmludFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSk7XG4gICAgICBhd2FpdCBzbGVlcChmdWxsT3B0aW9ucy5yZXRyeURlbGF5SW5NaWxsaXNlY29uZHMpO1xuICAgIH1cbiAgfSwgeyByZXRyeUZuOiBmbiB9KTtcbn1cblxuLyoqXG4gKiBFeGVjdXRlcyBhIGZ1bmN0aW9uIHdpdGggYSB0aW1lb3V0LiBJZiB0aGUgZnVuY3Rpb24gZG9lcyBub3QgY29tcGxldGUgd2l0aGluIHRoZSBzcGVjaWZpZWQgdGltZSwgaXQgaXMgY29uc2lkZXJlZCB0byBoYXZlIHRpbWVkIG91dC5cbiAqXG4gKiBJZiBgREVCVUc9b2JzaWRpYW4tZGV2LXV0aWxzOkFzeW5jOnJ1bldpdGhUaW1lb3V0YCBpcyBzZXQsIHRoZSBleGVjdXRpb24gaXMgbm90IHRlcm1pbmF0ZWQgYWZ0ZXIgdGhlIHRpbWVvdXQgYW5kIHRoZSBmdW5jdGlvbiBpcyBhbGxvd2VkIHRvIHJ1biBpbmRlZmluaXRlbHkuXG4gKlxuICogQHR5cGVQYXJhbSBSIC0gVGhlIHR5cGUgb2YgdGhlIHJlc3VsdCBmcm9tIHRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24uXG4gKiBAcGFyYW0gdGltZW91dEluTWlsbGlzZWNvbmRzIC0gVGhlIG1heGltdW0gdGltZSB0byB3YWl0IGluIG1pbGxpc2Vjb25kcy5cbiAqIEBwYXJhbSBmbiAtIFRoZSBmdW5jdGlvbiB0byBleGVjdXRlLlxuICogQHBhcmFtIGNvbnRleHQgLSBUaGUgY29udGV4dCBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIG9yIHJlamVjdHMgaWYgaXQgdGltZXMgb3V0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuV2l0aFRpbWVvdXQ8Uj4odGltZW91dEluTWlsbGlzZWNvbmRzOiBudW1iZXIsIGZuOiAoKSA9PiBQcm9taXNhYmxlPFI+LCBjb250ZXh0PzogdW5rbm93bik6IFByb21pc2U8Uj4ge1xuICBsZXQgaXNUaW1lZE91dCA9IHRydWU7XG4gIGxldCByZXN1bHQ6IFIgPSBudWxsIGFzIFI7XG4gIGNvbnN0IHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICBhd2FpdCBQcm9taXNlLnJhY2UoW3J1bigpLCBpbm5lclRpbWVvdXQoKV0pO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvblxuICBpZiAoaXNUaW1lZE91dCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGltZWQgb3V0Jyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcblxuICBhc3luYyBmdW5jdGlvbiBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmVzdWx0ID0gYXdhaXQgZm4oKTtcbiAgICBpc1RpbWVkT3V0ID0gZmFsc2U7XG4gICAgY29uc3QgZHVyYXRpb24gPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICBnZXRMaWJEZWJ1Z2dlcignQXN5bmM6cnVuV2l0aFRpbWVvdXQnKShgRXhlY3V0aW9uIHRpbWU6ICR7ZHVyYXRpb24udG9TdHJpbmcoKX0gbWlsbGlzZWNvbmRzYCwgeyBjb250ZXh0LCBmbiB9KTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGlubmVyVGltZW91dCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIWlzVGltZWRPdXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgc2xlZXAodGltZW91dEluTWlsbGlzZWNvbmRzKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvblxuICAgIGlmICghaXNUaW1lZE91dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkdXJhdGlvbiA9IHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgIGNvbnNvbGUud2FybihgVGltZWQgb3V0IGluICR7ZHVyYXRpb24udG9TdHJpbmcoKX0gbWlsbGlzZWNvbmRzYCwgeyBjb250ZXh0LCBmbiB9KTtcbiAgICBjb25zdCBfZGVidWdnZXIgPSBnZXRMaWJEZWJ1Z2dlcignQXN5bmM6cnVuV2l0aFRpbWVvdXQ6dGltZW91dCcpO1xuICAgIGlmIChfZGVidWdnZXIuZW5hYmxlZCkge1xuICAgICAgX2RlYnVnZ2VyKFxuICAgICAgICBgVGhlIGV4ZWN1dGlvbiBpcyBub3QgdGVybWluYXRlZCBiZWNhdXNlIGRlYnVnZ2VyICR7X2RlYnVnZ2VyLm5hbWVzcGFjZX0gaXMgZW5hYmxlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tbmFvdW1vdi9vYnNpZGlhbi1kZXYtdXRpbHMvYmxvYi9tYWluL2RvY3MvZGVidWdnaW5nLm1kIGZvciBtb3JlIGluZm9ybWF0aW9uYFxuICAgICAgKTtcbiAgICAgIGF3YWl0IGlubmVyVGltZW91dCgpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIERlbGF5cyBleGVjdXRpb24gZm9yIGEgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHBhcmFtIG1pbGxpc2Vjb25kcyAtIFRoZSB0aW1lIHRvIHdhaXQgaW4gbWlsbGlzZWNvbmRzLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBhZnRlciB0aGUgc3BlY2lmaWVkIGRlbGF5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2xlZXAobWlsbGlzZWNvbmRzOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIG1pbGxpc2Vjb25kcyk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZWplY3RzIHdoZW4gdGhlIGFib3J0IHNpZ25hbCBpcyBhYm9ydGVkLlxuICpcbiAqIEBwYXJhbSBhYm9ydFNpZ25hbCAtIFRoZSBhYm9ydCBzaWduYWwgdG8gbGlzdGVuIHRvLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZWplY3RzIHdoZW4gdGhlIGFib3J0IHNpZ25hbCBpcyBhYm9ydGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdGhyb3dPbkFib3J0KGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKF9yZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBpZiAoaGFuZGxlQWJvcnQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhYm9ydFNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGhhbmRsZUFib3J0LCB7IG9uY2U6IHRydWUgfSk7XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVBYm9ydCgpOiBib29sZWFuIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUgYXMgRXJyb3IpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZWplY3RzIGFmdGVyIHRoZSBzcGVjaWZpZWQgdGltZW91dCBwZXJpb2QuXG4gKlxuICogQHBhcmFtIHRpbWVvdXRJbk1pbGxpc2Vjb25kcyAtIFRoZSB0aW1lb3V0IHBlcmlvZCBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IGFsd2F5cyByZWplY3RzIHdpdGggYSB0aW1lb3V0IGVycm9yLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGltZW91dCh0aW1lb3V0SW5NaWxsaXNlY29uZHM6IG51bWJlcik6IFByb21pc2U8bmV2ZXI+IHtcbiAgYXdhaXQgc2xlZXAodGltZW91dEluTWlsbGlzZWNvbmRzKTtcbiAgdGhyb3cgbmV3IEVycm9yKGBUaW1lZCBvdXQgaW4gJHt0aW1lb3V0SW5NaWxsaXNlY29uZHMudG9TdHJpbmcoKX0gbWlsbGlzZWNvbmRzYCk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRvIGFuIGFycmF5IGJ5IGNvbnN1bWluZyBhbGwgaXRzIGVsZW1lbnRzLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIGVsZW1lbnRzIHByb2R1Y2VkIGJ5IHRoZSBBc3luY0l0ZXJhYmxlSXRlcmF0b3IuXG4gKiBAcGFyYW0gaXRlciAtIFRoZSBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiBhbGwgdGhlIGVsZW1lbnRzIGluIHRoZSBBc3luY0l0ZXJhYmxlSXRlcmF0b3IuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0b0FycmF5PFQ+KGl0ZXI6IEFzeW5jSXRlcmFibGVJdGVyYXRvcjxUPik6IFByb21pc2U8VFtdPiB7XG4gIGNvbnN0IGFycjogVFtdID0gW107XG4gIGZvciBhd2FpdCAoY29uc3QgaXRlbSBvZiBpdGVyKSB7XG4gICAgYXJyLnB1c2goaXRlbSk7XG4gIH1cbiAgcmV0dXJuIGFycjtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFRQSxtQkFBK0I7QUFDL0IsbUJBS087QUFtRFAsZUFBc0IsZ0JBQWdCLFNBQWdEO0FBQ3BGLFFBQU0sb0JBQW9CLElBQUksTUFBTSx3Q0FBMkI7QUFDL0QsTUFBSTtBQUNGLFVBQU0sUUFBUTtBQUFBLEVBQ2hCLFNBQVMsWUFBWTtBQUNuQixzQkFBa0IsUUFBUTtBQUMxQiwwQ0FBb0IsaUJBQWlCO0FBQUEsRUFDdkM7QUFDRjtBQVVBLGVBQXNCLFlBQWUsS0FBVSxXQUF1RjtBQUNwSSxRQUFNLG1C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
|
package/dist/lib/cjs/Async.d.cts
CHANGED
@@ -144,9 +144,10 @@ export declare function retryWithTimeout(fn: () => Promisable<boolean>, retryOpt
|
|
144
144
|
* @typeParam R - The type of the result from the asynchronous function.
|
145
145
|
* @param timeoutInMilliseconds - The maximum time to wait in milliseconds.
|
146
146
|
* @param fn - The function to execute.
|
147
|
+
* @param context - The context of the function.
|
147
148
|
* @returns A {@link Promise} that resolves with the result of the asynchronous function or rejects if it times out.
|
148
149
|
*/
|
149
|
-
export declare function runWithTimeout<R>(timeoutInMilliseconds: number, fn: () => Promisable<R
|
150
|
+
export declare function runWithTimeout<R>(timeoutInMilliseconds: number, fn: () => Promisable<R>, context?: unknown): Promise<R>;
|
150
151
|
/**
|
151
152
|
* Delays execution for a specified number of milliseconds.
|
152
153
|
*
|
package/dist/lib/cjs/Library.cjs
CHANGED
@@ -30,7 +30,7 @@ __export(Library_exports, {
|
|
30
30
|
LIBRARY_VERSION: () => LIBRARY_VERSION
|
31
31
|
});
|
32
32
|
module.exports = __toCommonJS(Library_exports);
|
33
|
-
const LIBRARY_VERSION = "26.
|
33
|
+
const LIBRARY_VERSION = "26.28.0";
|
34
34
|
const LIBRARY_NAME = "obsidian-dev-utils";
|
35
35
|
const LIBRARY_STYLES = ".obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component pre, .obsidian-dev-utils.code-highlighter-component code {\n font-family: var(--font-monospace);\n line-height: var(--line-height-normal);\n margin: 0;\n}\n.obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component code {\n font-size: var(--code-size);\n}\n.obsidian-dev-utils.code-highlighter-component textarea {\n background: transparent;\n color: transparent;\n z-index: 2;\n width: 20em;\n height: 10em;\n}\n.obsidian-dev-utils.code-highlighter-component pre {\n position: absolute;\n pointer-events: none;\n border: var(--input-border-width) solid transparent;\n overflow: auto;\n inset: 0;\n padding: var(--size-4-1) var(--size-4-2);\n z-index: 1;\n}\n.obsidian-dev-utils.code-highlighter-component pre.is-placeholder {\n opacity: 0.6;\n}\n.obsidian-dev-utils.code-highlighter-component code {\n display: block;\n padding: 0;\n}\n\n.obsidian-dev-utils input[type=url] {\n height: var(--input-height);\n}\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=tel],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=url],\n.obsidian-dev-utils input[type=week] {\n -webkit-app-region: no-drag;\n background: var(--background-modifier-form-field);\n border: var(--input-border-width) solid var(--background-modifier-border);\n color: var(--text-normal);\n font-family: inherit;\n padding: var(--size-4-1) var(--size-4-2);\n font-size: var(--font-ui-small);\n border-radius: var(--input-radius);\n outline: none;\n}\n@media (hover: hover) {\n .obsidian-dev-utils input[type=month]:hover,\n .obsidian-dev-utils input[type=tel]:hover,\n .obsidian-dev-utils input[type=time]:hover,\n .obsidian-dev-utils input[type=url]:hover,\n .obsidian-dev-utils input[type=week]:hover {\n border-color: var(--background-modifier-border-hover);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n }\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus {\n border-color: var(--background-modifier-border-focus);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus, .obsidian-dev-utils input[type=month]:focus-visible,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=tel]:focus-visible,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=time]:focus-visible,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=url]:focus-visible,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus,\n.obsidian-dev-utils input[type=week]:focus-visible {\n box-shadow: 0 0 0 2px var(--background-modifier-border-focus);\n}\n.obsidian-dev-utils input[type=month]::placeholder,\n.obsidian-dev-utils input[type=tel]::placeholder,\n.obsidian-dev-utils input[type=time]::placeholder,\n.obsidian-dev-utils input[type=url]::placeholder,\n.obsidian-dev-utils input[type=week]::placeholder {\n color: var(--text-faint);\n}\n.mod-rtl input[type=month],\n.mod-rtl input[type=time],\n.mod-rtl input[type=week],\n.is-rtl input[type=month],\n.is-rtl input[type=time],\n.is-rtl input[type=week],\n.rtl input[type=month],\n.rtl input[type=time],\n.rtl input[type=week] {\n direction: rtl;\n}\n.mod-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.rtl input[type=month]::-webkit-calendar-picker-indicator,\n.rtl input[type=time]::-webkit-calendar-picker-indicator,\n.rtl input[type=week]::-webkit-calendar-picker-indicator {\n right: var(--size-4-1);\n left: auto;\n}\n\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=week] {\n font-variant-numeric: tabular-nums;\n position: relative;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-text {\n color: var(--text-faint);\n padding-inline-end: 0;\n}\n.obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n position: absolute;\n left: var(--size-4-1);\n right: auto;\n opacity: 0.5;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:focus {\n background-color: var(--text-selection);\n color: var(--text-normal);\n cursor: text;\n}\n.mod-rtl .obsidian-dev-utils input[type=month], .is-rtl .obsidian-dev-utils input[type=month], .rtl .obsidian-dev-utils input[type=month],\n.mod-rtl .obsidian-dev-utils input[type=time],\n.is-rtl .obsidian-dev-utils input[type=time],\n.rtl .obsidian-dev-utils input[type=time],\n.mod-rtl .obsidian-dev-utils input[type=week],\n.is-rtl .obsidian-dev-utils input[type=week],\n.rtl .obsidian-dev-utils input[type=week] {\n direction: rtl;\n}\n.mod-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .is-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n left: auto;\n right: var(--size-4-1);\n}\n\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=month],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=time],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=week] {\n padding-inline-start: var(--size-4-6);\n}\n\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator {\n margin-inline-start: 0;\n}\n\n.obsidian-dev-utils.modal-container .ok-button {\n margin-right: 10px;\n margin-top: 20px;\n}\n\n.obsidian-dev-utils .multiple-dropdown-component select,\n.obsidian-dev-utils .multiple-dropdown-component select:focus,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown {\n height: auto;\n padding-top: 3px;\n}\n.obsidian-dev-utils .multiple-dropdown-component select option:checked,\n.obsidian-dev-utils .multiple-dropdown-component select:focus option:checked,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown option:checked {\n background-color: #1967d2;\n color: #fff;\n}\n\n.obsidian-dev-utils.prompt-modal .text-box {\n width: 100%;\n}\n\n.obsidian-dev-utils.tri-state-checkbox-component input[type=checkbox]:indeterminate {\n appearance: checkbox;\n}\n\n.obsidian-dev-utils :invalid {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils input.metadata-input-text:active:invalid, .obsidian-dev-utils input.metadata-input-text:focus-visible:invalid, .obsidian-dev-utils input.metadata-input-text:focus:invalid,\n.obsidian-dev-utils input[type=date]:active:invalid,\n.obsidian-dev-utils input[type=date]:focus-visible:invalid,\n.obsidian-dev-utils input[type=date]:focus:invalid,\n.obsidian-dev-utils input[type=datetime-local]:active:invalid,\n.obsidian-dev-utils input[type=datetime-local]:focus-visible:invalid,\n.obsidian-dev-utils input[type=datetime-local]:focus:invalid,\n.obsidian-dev-utils input[type=email]:active:invalid,\n.obsidian-dev-utils input[type=email]:focus-visible:invalid,\n.obsidian-dev-utils input[type=email]:focus:invalid,\n.obsidian-dev-utils input[type=number]:active:invalid,\n.obsidian-dev-utils input[type=number]:focus-visible:invalid,\n.obsidian-dev-utils input[type=number]:focus:invalid,\n.obsidian-dev-utils input[type=password]:active:invalid,\n.obsidian-dev-utils input[type=password]:focus-visible:invalid,\n.obsidian-dev-utils input[type=password]:focus:invalid,\n.obsidian-dev-utils input[type=search]:active:invalid,\n.obsidian-dev-utils input[type=search]:focus-visible:invalid,\n.obsidian-dev-utils input[type=search]:focus:invalid,\n.obsidian-dev-utils input[type=text]:active:invalid,\n.obsidian-dev-utils input[type=text]:focus-visible:invalid,\n.obsidian-dev-utils input[type=text]:focus:invalid,\n.obsidian-dev-utils textarea:active:invalid,\n.obsidian-dev-utils textarea:focus-visible:invalid,\n.obsidian-dev-utils textarea:focus:invalid {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils.setting-component-wrapper {\n position: relative;\n display: inline-flex;\n}\n.obsidian-dev-utils.overlay-validator {\n caret-color: transparent;\n cursor: default;\n position: absolute;\n background-color: transparent;\n border: none;\n outline: none;\n pointer-events: none;\n z-index: 9999;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n}\n.obsidian-dev-utils.tooltip.tooltip-validator {\n position: absolute;\n top: calc(100% + 8px);\n width: max-content;\n}\n\n/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../src/styles/code-highlighter-component.scss%22,%22../src/styles/input.scss%22,%22../src/styles/input-time.scss%22,%22../src/styles/modal-container.scss%22,%22../src/styles/multiple-dropdown-component.scss%22,%22../src/styles/prompt-modal.scss%22,%22../src/styles/tri-state-checkbox-component.scss%22,%22../src/styles/validation.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAEI;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;;ACnCJ;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGE;EACE;AAAA;AAAA;AAAA;AAAA;IACE;IACA,YACE;;;AAMR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA,YACE;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAGF;AAAA;AAAA;AAAA;AAAA;EACE;;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AC7DV;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;;AAIK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGP;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AAKF;AAAA;AAAA;EACE;;;AAMJ;EACE;;;AChDF;EACE;EACA;;;ACFF;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;;ACRJ;EACE;;;ACDF;EACE;;;ACEJ;EAJA;;AAoBI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EApBJ;;AA0BA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA%22,%22file%22:%22styles.css%22,%22sourcesContent%22:%5B%22.obsidian-dev-utils%20%7B%5Cn%20%20&.code-highlighter-component%20%7B%5Cn%20%20%20%20textarea,%20pre,%20code%20%7B%5Cn%20%20%20%20%20%20font-family:%20var(--font-monospace);%5Cn%20%20%20%20%20%20line-height:%20var(--line-height-normal);%5Cn%20%20%20%20%20%20margin:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea,%20code%20%7B%5Cn%20%20%20%20%20%20font-size:%20var(--code-size);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea%20%7B%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20transparent;%5Cn%20%20%20%20%20%20z-index:%202;%5Cn%20%20%20%20%20%20width:%2020em;%5Cn%20%20%20%20%20%20height:%2010em;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20%20%20border:%20var(--input-border-width)%20solid%20transparent;%5Cn%20%20%20%20%20%20overflow:%20auto;%5Cn%20%20%20%20%20%20inset:%200;%5Cn%20%20%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20%20%20z-index:%201;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre.is-placeholder%20%7B%5Cn%20%20%20%20%20%20opacity:%200.6;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20code%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20padding:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='url'%5D%20%7B%5Cn%20%20%20%20height:%20var(--input-height)%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='tel'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='url'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20-webkit-app-region:%20no-drag;%5Cn%20%20%20%20background:%20var(--background-modifier-form-field);%5Cn%20%20%20%20border:%20var(--input-border-width)%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20font-family:%20inherit;%5Cn%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20font-size:%20var(--font-ui-small);%5Cn%20%20%20%20border-radius:%20var(--input-radius);%5Cn%20%20%20%20outline:%20none;%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20@media%20(hover:%20hover)%20%7B%5Cn%20%20%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20border-color:%20var(--background-modifier-border-hover);%5Cn%20%20%20%20%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20border-color:%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus,%5Cn%20%20%20%20&:focus-visible%20%7B%5Cn%20%20%20%20%20%20box-shadow:%200%200%200%202px%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::placeholder%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20@at-root%20%7B%5Cn%20%20%20%20.mod-rtl,%5Cn%20%20%20%20.is-rtl,%5Cn%20%20%20%20.rtl%20%7B%5Cn%20%20%20%20%20%20&%20%7B%5Cn%20%20%20%20%20%20%20%20input%5Btype='month'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='time'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20font-variant-numeric:%20tabular-nums;%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-text%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%20%20padding-inline-end:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20left:%20var(--size-4-1);%5Cn%20%20%20%20%20%20right:%20auto;%5Cn%20%20%20%20%20%20opacity:%200.5;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-month-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-day-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-year-field%20%7B%5Cn%20%20%20%20%20%20&:active,%5Cn%20%20%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20var(--text-selection);%5Cn%20%20%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%20%20%20%20cursor:%20text;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20.mod-rtl%20&,%5Cn%20%20%20%20%20%20.is-rtl%20&,%5Cn%20%20%20%20%20%20.rtl%20&%20%7B%5Cn%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20body:not(.is-ios):not(.is-android)%20&%20%7B%5Cn%20%20%20%20%20%20%20%20padding-inline-start:%20var(--size-4-6);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='time'%5D%20%7B%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20margin-inline-start:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.modal-container%20%7B%5Cn%20%20%20%20.ok-button%20%7B%5Cn%20%20%20%20%20%20margin-right:%2010px;%5Cn%20%20%20%20%20%20margin-top:%2020px;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20.multiple-dropdown-component%20%7B%5Cn%20%20%20%20select,%5Cn%20%20%20%20select:focus,%5Cn%20%20%20%20.dropdown%20%7B%5Cn%20%20%20%20%20%20height:%20auto;%5Cn%20%20%20%20%20%20padding-top:%203px;%5Cn%5Cn%20%20%20%20%20%20option:checked%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20%231967d2;%5Cn%20%20%20%20%20%20%20%20color:%20%23fff;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.prompt-modal%20%7B%5Cn%20%20%20%20.text-box%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cr%5Cn%20%20&.tri-state-checkbox-component%20%7B%5Cr%5Cn%20%20%20%20input%5Btype='checkbox'%5D:indeterminate%20%7B%5Cr%5Cn%20%20%20%20%20%20appearance:%20checkbox;%5Cr%5Cn%20%20%20%20%7D%5Cr%5Cn%20%20%7D%5Cr%5Cn%7D%5Cr%5Cn%22,%22@mixin%20invalid%20%7B%5Cn%20%20box-shadow:%200%200%200%202px%20var(--text-error);%5Cn%7D%5Cn%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20:invalid%20%7B%5Cn%20%20%20%20@include%20invalid;%5Cn%20%20%7D%5Cn%5Cn%20%20input.metadata-input-text,%5Cn%20%20input%5Btype='date'%5D,%5Cn%20%20input%5Btype='datetime-local'%5D,%5Cn%20%20input%5Btype='email'%5D,%5Cn%20%20input%5Btype='number'%5D,%5Cn%20%20input%5Btype='password'%5D,%5Cn%20%20input%5Btype='search'%5D,%5Cn%20%20input%5Btype='text'%5D,%5Cn%20%20textarea%20%7B%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus-visible,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20&:invalid%20%7B%5Cn%20%20%20%20%20%20%20%20@include%20invalid;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20&.setting-component-wrapper%20%7B%5Cn%20%20%20%20position:%20relative;%5Cn%20%20%20%20display:%20inline-flex;%5Cn%20%20%7D%5Cn%5Cn%20%20&.overlay-validator%20%7B%5Cn%20%20%20%20caret-color:%20transparent;%5Cn%20%20%20%20cursor:%20default;%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20background-color:%20transparent;%5Cn%20%20%20%20border:%20none;%5Cn%20%20%20%20outline:%20none;%5Cn%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20z-index:%209999;%5Cn%20%20%20%20left:%200;%5Cn%20%20%20%20top:%200;%5Cn%20%20%20%20width:%20100%25;%5Cn%20%20%20%20height:%20100%25;%5Cn%20%20%7D%5Cn%5Cn%20%20&.tooltip.tooltip-validator%20%7B%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20top:%20calc(100%25%20+%208px);%5Cn%20%20%20%20width:%20max-content;%5Cn%20%20%7D%5Cn%7D%5Cn%22%5D%7D */\n";
|
36
36
|
// Annotate the CommonJS export names for ESM import in node:
|
@@ -506,11 +506,16 @@ function parseLinkNode(node, str, isEmbed) {
|
|
506
506
|
});
|
507
507
|
}
|
508
508
|
function parseLinkUrl(str) {
|
509
|
+
const hasAngleBrackets = str.startsWith("<") && str.endsWith(">");
|
510
|
+
if (hasAngleBrackets) {
|
511
|
+
str = str.slice(1, -1);
|
512
|
+
}
|
509
513
|
if (!(0, import_url.isUrl)(str)) {
|
510
514
|
return null;
|
511
515
|
}
|
512
516
|
return {
|
513
517
|
encodedUrl: encodeUrl(str),
|
518
|
+
hasAngleBrackets,
|
514
519
|
isEmbed: false,
|
515
520
|
isExternal: true,
|
516
521
|
isWikilink: false,
|
@@ -556,4 +561,4 @@ function shouldEscapeWikilinkDivider(fileChange, tablePositions) {
|
|
556
561
|
updateLinksInContent,
|
557
562
|
updateLinksInFile
|
558
563
|
});
|
559
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL0xpbmsudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0aWVzIGZvciBoYW5kbGluZyBhbmQgdXBkYXRpbmcgbGlua3Mgd2l0aGluIE9ic2lkaWFuIHZhdWx0cy4gSXQgaW5jbHVkZXNcbiAqIGZ1bmN0aW9ucyB0byBzcGxpdCBwYXRocywgdXBkYXRlIGxpbmtzIGluIGZpbGVzLCBhbmQgZ2VuZXJhdGUgbWFya2Rvd24gbGlua3Mgd2l0aCB2YXJpb3VzIG9wdGlvbnMuXG4gKiBUaGUgZnVuY3Rpb25zIGludGVncmF0ZSB3aXRoIE9ic2lkaWFuJ3MgQVBJIHRvIGVuc3VyZSB0aGF0IGxpbmtzIGFyZSBtYW5hZ2VkIGNvcnJlY3RseSB3aXRoaW4gdGhlIHZhdWx0LlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgTGluayxcbiAgVGV4dFxufSBmcm9tICdtZGFzdCc7XG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgQ2FjaGVkTWV0YWRhdGEsXG4gIFJlZmVyZW5jZSxcbiAgVEZpbGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHtcbiAgbm9ybWFsaXplUGF0aCxcbiAgcGFyc2VMaW5rdGV4dFxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgeyBJbnRlcm5hbFBsdWdpbk5hbWUgfSBmcm9tICdvYnNpZGlhbi10eXBpbmdzL2ltcGxlbWVudGF0aW9ucyc7XG5pbXBvcnQgeyByZW1hcmsgfSBmcm9tICdyZW1hcmsnO1xuaW1wb3J0IHJlbWFya1BhcnNlIGZyb20gJ3JlbWFyay1wYXJzZSc7XG5pbXBvcnQgeyB3aWtpTGlua1BsdWdpbiB9IGZyb20gJ3JlbWFyay13aWtpLWxpbmsnO1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNPYmplY3QgfSBmcm9tICcuLi9PYmplY3QudHMnO1xuaW1wb3J0IHR5cGUgeyBNYXliZVJldHVybiB9IGZyb20gJy4uL1R5cGUudHMnO1xuaW1wb3J0IHR5cGUgeyBGaWxlQ2hhbmdlIH0gZnJvbSAnLi9GaWxlQ2hhbmdlLnRzJztcbmltcG9ydCB0eXBlIHsgUGF0aE9yRmlsZSB9IGZyb20gJy4vRmlsZVN5c3RlbS50cyc7XG5pbXBvcnQgdHlwZSB7IFByb2Nlc3NPcHRpb25zIH0gZnJvbSAnLi9WYXVsdC50cyc7XG5cbmltcG9ydCB7XG4gIG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllcyxcbiAgdG9Kc29uXG59IGZyb20gJy4uL09iamVjdC50cyc7XG5pbXBvcnQge1xuICBiYXNlbmFtZSxcbiAgZGlybmFtZSxcbiAgZXh0bmFtZSxcbiAgam9pbixcbiAgcmVsYXRpdmVcbn0gZnJvbSAnLi4vUGF0aC50cyc7XG5pbXBvcnQge1xuICBub3JtYWxpemUsXG4gIHJlcGxhY2VBbGwsXG4gIHRyaW1TdGFydFxufSBmcm9tICcuLi9TdHJpbmcudHMnO1xuaW1wb3J0IHsgaXNVcmwgfSBmcm9tICcuLi91cmwudHMnO1xuaW1wb3J0IHtcbiAgYXBwbHlDb250ZW50Q2hhbmdlcyxcbiAgYXBwbHlGaWxlQ2hhbmdlcyxcbiAgaXNDYW52YXNDaGFuZ2UsXG4gIGlzQ29udGVudENoYW5nZVxufSBmcm9tICcuL0ZpbGVDaGFuZ2UudHMnO1xuaW1wb3J0IHtcbiAgZ2V0RmlsZSxcbiAgZ2V0UGF0aCxcbiAgaXNDYW52YXNGaWxlLFxuICBpc01hcmtkb3duRmlsZSxcbiAgdHJpbU1hcmtkb3duRXh0ZW5zaW9uXG59IGZyb20gJy4vRmlsZVN5c3RlbS50cyc7XG5pbXBvcnQge1xuICBnZXRBbGxMaW5rcyxcbiAgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmUsXG4gIGdldENhY2hlU2FmZSxcbiAgcGFyc2VNZXRhZGF0YSxcbiAgdGVtcFJlZ2lzdGVyRmlsZUFuZFJ1blxufSBmcm9tICcuL01ldGFkYXRhQ2FjaGUudHMnO1xuaW1wb3J0IHtcbiAgc2hvdWxkVXNlUmVsYXRpdmVMaW5rcyxcbiAgc2hvdWxkVXNlV2lraWxpbmtzXG59IGZyb20gJy4vT2JzaWRpYW5TZXR0aW5ncy50cyc7XG5pbXBvcnQge1xuICBpc0NhbnZhc0ZpbGVOb2RlUmVmZXJlbmNlLFxuICByZWZlcmVuY2VUb0ZpbGVDaGFuZ2Vcbn0gZnJvbSAnLi9SZWZlcmVuY2UudHMnO1xuXG5jb25zdCBFU0NBUEVEX1dJS0lMSU5LX0RJVklERVIgPSAnXFxcXHwnO1xuXG4vKipcbiAqIFJlZ3VsYXIgZXhwcmVzc2lvbiBmb3Igc3BlY2lhbCBsaW5rIHN5bWJvbHMuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5jb25zdCBTUEVDSUFMX0xJTktfU1lNQk9MU19SRUdFWFAgPSAvW1xcXFxcXHgwMFxceDA4XFx4MEJcXHgwQ1xceDBFLVxceDFGIF0vZztcblxuLyoqXG4gKiBSZWd1bGFyIGV4cHJlc3Npb24gZm9yIHNwZWNpYWwgbWFya2Rvd24gbGluayBzeW1ib2xzLlxuICovXG5jb25zdCBTUEVDSUFMX01BUktET1dOX0xJTktfU1lNQk9MU19SRUdFWCA9IC9bXFxcXFtcXF08Pl8qfj1gJF0vZztcblxuLyoqXG4gKiBSZWd1bGFyIGV4cHJlc3Npb24gZm9yIHVuZXNjYXBlZCBwaXBlcy5cbiAqL1xuY29uc3QgVU5FU0NBUEVEX1dJS0lMSU5LX0RJVklERVJfUkVHRVhQID0gLyg/PCFcXFxcKVxcfC9nO1xuXG5jb25zdCBXSUtJTElOS19ESVZJREVSID0gJ3wnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNvbnZlcnRpbmcgYSBsaW5rLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnZlcnRMaW5rT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSByZWZlcmVuY2UgZm9yIHRoZSBsaW5rLlxuICAgKi9cbiAgbGluazogUmVmZXJlbmNlO1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIGZpbGUgY29udGFpbmluZyB0aGUgbGluay5cbiAgICovXG4gIG5ld1NvdXJjZVBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGQgcGF0aCBvZiB0aGUgbGluay5cbiAgICovXG4gIG9sZFNvdXJjZVBhdGhPckZpbGU/OiBQYXRoT3JGaWxlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGZvcmNlIG1hcmtkb3duIGxpbmtzLlxuICAgKi9cbiAgc2hvdWxkRm9yY2VNYXJrZG93bkxpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byB1cGRhdGUgZmlsZW5hbWUgYWxpYXMuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIHNob3VsZFVwZGF0ZUZpbGVuYW1lQWxpYXM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFdyYXBwZXIgZm9yIGRlZmF1bHQgb3B0aW9ucyBmb3IgZ2VuZXJhdGluZyBtYXJrZG93biBsaW5rcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZU1hcmtkb3duTGlua0RlZmF1bHRPcHRpb25zV3JhcHBlciB7XG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBvcHRpb25zIGZvciBnZW5lcmF0aW5nIG1hcmtkb3duIGxpbmtzLlxuICAgKi9cbiAgZGVmYXVsdE9wdGlvbnNGbjogKCkgPT4gUGFydGlhbDxHZW5lcmF0ZU1hcmtkb3duTGlua09wdGlvbnM+O1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGdlbmVyYXRpbmcgYSBtYXJrZG93biBsaW5rLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlTWFya2Rvd25MaW5rT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYWxpYXMgZm9yIHRoZSBsaW5rLlxuICAgKi9cbiAgYWxpYXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBhcHA6IEFwcDtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBsaW5rIHNob3VsZCBiZSBlbWJlZGRlZC4gSWYgbm90IHByb3ZpZGVkLCBpdCB3aWxsIGJlIGluZmVycmVkIGJhc2VkIG9uIHRoZSBmaWxlIHR5cGUuXG4gICAqL1xuICBpc0VtYmVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhbGxvdyBhbiBlbXB0eSBhbGlhcyBmb3IgZW1iZWRzLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAqL1xuICBpc0VtcHR5RW1iZWRBbGlhc0FsbG93ZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFsbG93IG5vbi1leGlzdGluZyBmaWxlcy4gSWYgYGZhbHNlYCBhbmQgYHBhdGhPckZpbGVgIGlzIGEgbm9uLWV4aXN0aW5nIGZpbGUsIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duLiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgKi9cbiAgaXNOb25FeGlzdGluZ0ZpbGVBbGxvd2VkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBsaW5rIHNob3VsZCBiZSBhIHdpa2lsaW5rLiBJZiBub3QgcHJvdmlkZWQsIGl0IHdpbGwgYmUgaW5mZXJyZWQgYmFzZWQgb24gdGhlIE9ic2lkaWFuIHNldHRpbmdzLlxuICAgKi9cbiAgaXNXaWtpbGluaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBvcmlnaW5hbCBsaW5rIHRleHQuIElmIHByb3ZpZGVkLCBpdCB3aWxsIGJlIHVzZWQgdG8gaW5mZXIgdGhlIHZhbHVlcyBvZiBgaXNFbWJlZGAsIGBpc1dpa2lsaW5rYCwgYHVzZUxlYWRpbmdEb3RgLCBhbmQgYHVzZUFuZ2xlQnJhY2tldHNgLlxuICAgKiBUaGVzZSBpbmZlcnJlZCB2YWx1ZXMgd2lsbCBiZSBvdmVycmlkZGVuIGJ5IGNvcnJlc3BvbmRpbmcgc2V0dGluZ3MgaWYgc3BlY2lmaWVkLlxuICAgKi9cbiAgb3JpZ2luYWxMaW5rPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGxpbmsgc2hvdWxkIGJlIHJlbGF0aXZlLiBJZiBub3QgcHJvdmlkZWQgb3IgYGZhbHNlYCwgaXQgd2lsbCBiZSBpbmZlcnJlZCBiYXNlZCBvbiB0aGUgT2JzaWRpYW4gc2V0dGluZ3MuXG4gICAqL1xuICBzaG91bGRGb3JjZVJlbGF0aXZlUGF0aD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgYXR0YWNobWVudCBleHRlbnNpb24gaW4gdGhlIGVtYmVkIGFsaWFzLiBIYXMgbm8gZWZmZWN0IGlmIGBhbGxvd0VtcHR5RW1iZWRBbGlhc2AgaXMgYHRydWVgLiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgKi9cbiAgc2hvdWxkSW5jbHVkZUF0dGFjaG1lbnRFeHRlbnNpb25Ub0VtYmVkQWxpYXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGxpbmsgc2hvdWxkIHVzZSBhbmdsZSBicmFja2V0cy4gRGVmYXVsdHMgdG8gYGZhbHNlYC4gSGFzIG5vIGVmZmVjdCBpZiBgaXNXaWtpbGlua2AgaXMgYHRydWVgXG4gICAqL1xuICBzaG91bGRVc2VBbmdsZUJyYWNrZXRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBsaW5rIHNob3VsZCB1c2UgYSBsZWFkaW5nIGRvdC4gRGVmYXVsdHMgdG8gYGZhbHNlYC4gSGFzIG5vIGVmZmVjdCBpZiBgaXNXaWtpbGlua2AgaXMgYHRydWVgIG9yIGBpc1JlbGF0aXZlYCBpcyBgZmFsc2VgLlxuICAgKi9cbiAgc2hvdWxkVXNlTGVhZGluZ0RvdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgcGF0aCBvZiB0aGUgbGluay5cbiAgICovXG4gIHNvdXJjZVBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBzdWJwYXRoIG9mIHRoZSBsaW5rLlxuICAgKi9cbiAgc3VicGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRhcmdldCBwYXRoIG9yIGZpbGUuXG4gICAqL1xuICB0YXJnZXRQYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIFRoZSByZXN1bHQgb2YgcGFyc2luZyBhIGxpbmsuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VMaW5rUmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBhbGlhcyBvZiB0aGUgbGluay5cbiAgICovXG4gIGFsaWFzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZW5jb2RlZCBVUkwgb2YgdGhlIGxpbmsuXG4gICAqL1xuICBlbmNvZGVkVXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGxpbmsgaGFzIGFuZ2xlIGJyYWNrZXRzLlxuICAgKi9cbiAgaGFzQW5nbGVCcmFja2V0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgbGluayBpcyBhbiBlbWJlZCBsaW5rLlxuICAgKi9cbiAgaXNFbWJlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBsaW5rIGlzIGV4dGVybmFsLlxuICAgKi9cbiAgaXNFeHRlcm5hbDogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBsaW5rIGlzIGEgd2lraWxpbmsuXG4gICAqL1xuICBpc1dpa2lsaW5rOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgdGl0bGUgb2YgdGhlIGxpbmsuXG4gICAqL1xuICB0aXRsZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFVSTCBvZiB0aGUgbGluay5cbiAgICovXG4gIHVybDogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGRldGVybWluaW5nIGlmIHRoZSBhbGlhcyBvZiBhIGxpbmsgc2hvdWxkIGJlIHJlc2V0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNob3VsZFJlc2V0QWxpYXNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGRpc3BsYXkgdGV4dCBvZiB0aGUgbGluay5cbiAgICovXG4gIGRpc3BsYXlUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgbGluayBpcyBhIHdpa2lsaW5rLlxuICAgKi9cbiAgaXNXaWtpbGluaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgcGF0aCBvZiB0aGUgbGluay5cbiAgICovXG4gIG5ld1NvdXJjZVBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGQgc291cmNlIGZpbGUgY29udGFpbmluZyB0aGUgbGluay5cbiAgICovXG4gIG9sZFNvdXJjZVBhdGhPckZpbGU/OiBQYXRoT3JGaWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgb2xkIHRhcmdldCBwYXRoIG9mIHRoZSBsaW5rLlxuICAgKi9cbiAgb2xkVGFyZ2V0UGF0aDogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogVGhlIHRhcmdldCBwYXRoIG9yIGZpbGUuXG4gICAqL1xuICB0YXJnZXRQYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIFNwbGl0cyBhIGxpbmsgaW50byBpdHMgbGluayBwYXRoIGFuZCBzdWJwYXRoLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwbGl0U3VicGF0aFJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgbGluayBwYXRoLlxuICAgKi9cbiAgbGlua1BhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN1YnBhdGguXG4gICAqL1xuICBzdWJwYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdXBkYXRpbmcgYSBsaW5rLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZUxpbmtPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIHJlZmVyZW5jZSBmb3IgdGhlIGxpbmsuXG4gICAqL1xuICBsaW5rOiBSZWZlcmVuY2U7XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgZmlsZSBjb250YWluaW5nIHRoZSBsaW5rLlxuICAgKi9cbiAgbmV3U291cmNlUGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogVGhlIGZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBsaW5rLlxuICAgKi9cbiAgbmV3VGFyZ2V0UGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogVGhlIG9sZCBzb3VyY2UgZmlsZSBjb250YWluaW5nIHRoZSBsaW5rLlxuICAgKi9cbiAgb2xkU291cmNlUGF0aE9yRmlsZT86IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGQgcGF0aCBvZiB0aGUgZmlsZS5cbiAgICovXG4gIG9sZFRhcmdldFBhdGhPckZpbGU/OiBQYXRoT3JGaWxlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGZvcmNlIG1hcmtkb3duIGxpbmtzLlxuICAgKi9cbiAgc2hvdWxkRm9yY2VNYXJrZG93bkxpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byB1cGRhdGUgZmlsZW5hbWUgYWxpYXMuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIHNob3VsZFVwZGF0ZUZpbGVuYW1lQWxpYXM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHVwZGF0aW5nIGxpbmtzIGluIGEgZmlsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVMaW5rc0luRmlsZU9wdGlvbnMgZXh0ZW5kcyBQcm9jZXNzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgb2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBmaWxlIHRvIHVwZGF0ZSB0aGUgbGlua3MgaW4uXG4gICAqL1xuICBuZXdTb3VyY2VQYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgb2xkIHBhdGggb2YgdGhlIGZpbGUuXG4gICAqL1xuICBvbGRTb3VyY2VQYXRoT3JGaWxlPzogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBmb3JjZSB0aGUgbGlua3MgdG8gYmUgaW4gTWFya2Rvd24gZm9ybWF0LlxuICAgKi9cbiAgc2hvdWxkRm9yY2VNYXJrZG93bkxpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byB1cGRhdGUgb25seSBlbWJlZGRlZCBsaW5rcy5cbiAgICovXG4gIHNob3VsZFVwZGF0ZUVtYmVkT25seUxpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byB1cGRhdGUgZmlsZW5hbWUgYWxpYXMuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIHNob3VsZFVwZGF0ZUZpbGVuYW1lQWxpYXM/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgTGlua0NvbmZpZyB7XG4gIGlzRW1iZWQ6IGJvb2xlYW47XG4gIGlzV2lraWxpbms6IGJvb2xlYW47XG4gIHNob3VsZEZvcmNlUmVsYXRpdmVQYXRoOiBib29sZWFuO1xuICBzaG91bGRVc2VBbmdsZUJyYWNrZXRzOiBib29sZWFuO1xuICBzaG91bGRVc2VMZWFkaW5nRG90OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgVGFibGVQb3NpdGlvbiB7XG4gIGVuZDogbnVtYmVyO1xuICBzdGFydDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSBvcHRpb25zIGZvciB1cGRhdGluZyB0aGUgbGlua3MgaW4gYSBjb250ZW50IHN0cmluZy5cbiAqL1xuaW50ZXJmYWNlIFVwZGF0ZUxpbmtzSW5Db250ZW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgdG8gdXBkYXRlIHRoZSBsaW5rcyBpbi5cbiAgICovXG4gIGNvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5ldyBzb3VyY2UgcGF0aCBvciBmaWxlLlxuICAgKi9cbiAgbmV3U291cmNlUGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogVGhlIG9sZCBzb3VyY2UgcGF0aCBvciBmaWxlLlxuICAgKi9cbiAgb2xkU291cmNlUGF0aE9yRmlsZT86IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZm9yY2UgbWFya2Rvd24gbGlua3MuXG4gICAqL1xuICBzaG91bGRGb3JjZU1hcmtkb3duTGlua3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHVwZGF0ZSBvbmx5IGVtYmVkZGVkIGxpbmtzLlxuICAgKi9cbiAgc2hvdWxkVXBkYXRlRW1iZWRPbmx5TGlua3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHVwZGF0ZSBmaWxlbmFtZSBhbGlhcy5cbiAgICovXG4gIHNob3VsZFVwZGF0ZUZpbGVuYW1lQWxpYXM/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgV2lraUxpbmtOb2RlIHtcbiAgZGF0YToge1xuICAgIGFsaWFzOiBzdHJpbmc7XG4gIH07XG4gIHZhbHVlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBsaW5rIHRvIGEgbmV3IHBhdGguXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgY29udmVydGluZyB0aGUgbGluay5cbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgbGluay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRMaW5rKG9wdGlvbnM6IENvbnZlcnRMaW5rT3B0aW9ucyk6IHN0cmluZyB7XG4gIGNvbnN0IHRhcmdldEZpbGUgPSBleHRyYWN0TGlua0ZpbGUob3B0aW9ucy5hcHAsIG9wdGlvbnMubGluaywgb3B0aW9ucy5vbGRTb3VyY2VQYXRoT3JGaWxlID8/IG9wdGlvbnMubmV3U291cmNlUGF0aE9yRmlsZSk7XG4gIGlmICghdGFyZ2V0RmlsZSkge1xuICAgIHJldHVybiBvcHRpb25zLmxpbmsub3JpZ2luYWw7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlTGluayhub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8VXBkYXRlTGlua09wdGlvbnM+KHtcbiAgICBhcHA6IG9wdGlvbnMuYXBwLFxuICAgIGxpbms6IG9wdGlvbnMubGluayxcbiAgICBuZXdTb3VyY2VQYXRoT3JGaWxlOiBvcHRpb25zLm5ld1NvdXJjZVBhdGhPckZpbGUsXG4gICAgbmV3VGFyZ2V0UGF0aE9yRmlsZTogdGFyZ2V0RmlsZSxcbiAgICBvbGRTb3VyY2VQYXRoT3JGaWxlOiBvcHRpb25zLm9sZFNvdXJjZVBhdGhPckZpbGUsXG4gICAgc2hvdWxkRm9yY2VNYXJrZG93bkxpbmtzOiBvcHRpb25zLnNob3VsZEZvcmNlTWFya2Rvd25MaW5rcyxcbiAgICBzaG91bGRVcGRhdGVGaWxlbmFtZUFsaWFzOiBvcHRpb25zLnNob3VsZFVwZGF0ZUZpbGVuYW1lQWxpYXNcbiAgfSkpO1xufVxuXG4vKipcbiAqIEVkaXRzIHRoZSBiYWNrbGlua3MgZm9yIGEgZmlsZSBvciBwYXRoLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgdG8gZWRpdCB0aGUgYmFja2xpbmtzIGZvci5cbiAqIEBwYXJhbSBsaW5rQ29udmVydGVyIC0gVGhlIGZ1bmN0aW9uIHRoYXQgY29udmVydHMgZWFjaCBsaW5rLlxuICogQHBhcmFtIHByb2Nlc3NPcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyBmb3IgcmV0cnlpbmcgdGhlIG9wZXJhdGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgYmFja2xpbmtzIGhhdmUgYmVlbiBlZGl0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlZGl0QmFja2xpbmtzKFxuICBhcHA6IEFwcCxcbiAgcGF0aE9yRmlsZTogUGF0aE9yRmlsZSxcbiAgbGlua0NvbnZlcnRlcjogKGxpbms6IFJlZmVyZW5jZSkgPT4gUHJvbWlzYWJsZTxNYXliZVJldHVybjxzdHJpbmc+PixcbiAgcHJvY2Vzc09wdGlvbnM6IFByb2Nlc3NPcHRpb25zID0ge31cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBiYWNrbGlua3MgPSBhd2FpdCBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZShhcHAsIHBhdGhPckZpbGUsIHByb2Nlc3NPcHRpb25zKTtcbiAgZm9yIChjb25zdCBiYWNrbGlua05vdGVQYXRoIG9mIGJhY2tsaW5rcy5rZXlzKCkpIHtcbiAgICBjb25zdCBjdXJyZW50TGlua3MgPSBiYWNrbGlua3MuZ2V0KGJhY2tsaW5rTm90ZVBhdGgpID8/IFtdO1xuICAgIGNvbnN0IGxpbmtKc29ucyA9IG5ldyBTZXQ8c3RyaW5nPihjdXJyZW50TGlua3MubWFwKChsaW5rKSA9PiB0b0pzb24obGluaykpKTtcbiAgICBhd2FpdCBlZGl0TGlua3MoYXBwLCBiYWNrbGlua05vdGVQYXRoLCAobGluaykgPT4ge1xuICAgICAgY29uc3QgbGlua0pzb24gPSB0b0pzb24obGluayk7XG4gICAgICBpZiAoIWxpbmtKc29ucy5oYXMobGlua0pzb24pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxpbmtDb252ZXJ0ZXIobGluayk7XG4gICAgfSwgcHJvY2Vzc09wdGlvbnMpO1xuICB9XG59XG5cbi8qKlxuICogRWRpdHMgdGhlIGJhY2tsaW5rcyBmb3IgYSBmaWxlIG9yIHBhdGguXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSB0byBlZGl0IHRoZSBiYWNrbGlua3MgZm9yLlxuICogQHBhcmFtIGxpbmtDb252ZXJ0ZXIgLSBUaGUgZnVuY3Rpb24gdGhhdCBjb252ZXJ0cyBlYWNoIGxpbmsuXG4gKiBAcGFyYW0gcHJvY2Vzc09wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIGZvciByZXRyeWluZyB0aGUgb3BlcmF0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBiYWNrbGlua3MgaGF2ZSBiZWVuIGVkaXRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVkaXRMaW5rcyhcbiAgYXBwOiBBcHAsXG4gIHBhdGhPckZpbGU6IFBhdGhPckZpbGUsXG4gIGxpbmtDb252ZXJ0ZXI6IChsaW5rOiBSZWZlcmVuY2UpID0+IFByb21pc2FibGU8TWF5YmVSZXR1cm48c3RyaW5nPj4sXG4gIHByb2Nlc3NPcHRpb25zOiBQcm9jZXNzT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgYXBwbHlGaWxlQ2hhbmdlcyhhcHAsIHBhdGhPckZpbGUsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjYWNoZSA9IGF3YWl0IGdldENhY2hlU2FmZShhcHAsIHBhdGhPckZpbGUpO1xuICAgIHJldHVybiBhd2FpdCBnZXRGaWxlQ2hhbmdlcyhjYWNoZSwgaXNDYW52YXNGaWxlKGFwcCwgcGF0aE9yRmlsZSksIGxpbmtDb252ZXJ0ZXIpO1xuICB9LCBwcm9jZXNzT3B0aW9ucyk7XG59XG5cbi8qKlxuICogRWRpdHMgdGhlIGxpbmtzIGluIGEgY29udGVudCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBjb250ZW50IC0gVGhlIGNvbnRlbnQgdG8gZWRpdCB0aGUgbGlua3MgaW4uXG4gKiBAcGFyYW0gbGlua0NvbnZlcnRlciAtIFRoZSBmdW5jdGlvbiB0aGF0IGNvbnZlcnRzIGVhY2ggbGluay5cbiAqIEByZXR1cm5zIFRoZSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHVwZGF0ZWQgY29udGVudC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVkaXRMaW5rc0luQ29udGVudChcbiAgYXBwOiBBcHAsXG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgbGlua0NvbnZlcnRlcjogKGxpbms6IFJlZmVyZW5jZSkgPT4gUHJvbWlzYWJsZTxNYXliZVJldHVybjxzdHJpbmc+PlxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgbmV3Q29udGVudCA9IGF3YWl0IGFwcGx5Q29udGVudENoYW5nZXMoY29udGVudCwgJycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjYWNoZSA9IGF3YWl0IHBhcnNlTWV0YWRhdGEoYXBwLCBjb250ZW50KTtcbiAgICByZXR1cm4gYXdhaXQgZ2V0RmlsZUNoYW5nZXMoY2FjaGUsIGZhbHNlLCBsaW5rQ29udmVydGVyKTtcbiAgfSk7XG5cbiAgaWYgKG5ld0NvbnRlbnQgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byB1cGRhdGUgbGlua3MgaW4gY29udGVudCcpO1xuICB9XG5cbiAgcmV0dXJuIG5ld0NvbnRlbnQ7XG59XG5cbi8qKlxuICogRW5jb2RlcyBhIFVSTC5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gVGhlIFVSTCB0byBlbmNvZGUuXG4gKiBAcmV0dXJucyBUaGUgZW5jb2RlZCBVUkwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmVwbGFjZUFsbCh1cmwsIFNQRUNJQUxfTElOS19TWU1CT0xTX1JFR0VYUCwgKHsgc3Vic3RyaW5nOiBzcGVjaWFsTGlua1N5bWJvbCB9KSA9PiBlbmNvZGVVUklDb21wb25lbnQoc3BlY2lhbExpbmtTeW1ib2wpKTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgZmlsZSBhc3NvY2lhdGVkIHdpdGggYSBsaW5rLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gbGluayAtIFRoZSByZWZlcmVuY2UgY2FjaGUgZm9yIHRoZSBsaW5rLlxuICogQHBhcmFtIHNvdXJjZVBhdGhPckZpbGUgLSBUaGUgc291cmNlIHBhdGggb3IgZmlsZS5cbiAqIEByZXR1cm5zIFRoZSBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGluaywgb3IgbnVsbCBpZiBub3QgZm91bmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0TGlua0ZpbGUoYXBwOiBBcHAsIGxpbms6IFJlZmVyZW5jZSwgc291cmNlUGF0aE9yRmlsZTogUGF0aE9yRmlsZSk6IG51bGwgfCBURmlsZSB7XG4gIGNvbnN0IHsgbGlua1BhdGggfSA9IHNwbGl0U3VicGF0aChsaW5rLmxpbmspO1xuICByZXR1cm4gYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0Rmlyc3RMaW5rcGF0aERlc3QobGlua1BhdGgsIGdldFBhdGgoYXBwLCBzb3VyY2VQYXRoT3JGaWxlKSk7XG59XG5cbi8qKlxuICogRml4ZXMgdGhlIGZyb250bWF0dGVyIG1hcmtkb3duIGxpbmtzIGluIHRoZSBwcm92aWRlZCBtZXRhZGF0YSBjYWNoZS5cbiAqXG4gKiBAcGFyYW0gY2FjaGUgLSBUaGUgbWV0YWRhdGEgY2FjaGUgdG8gZml4IHRoZSBmcm9udG1hdHRlciBtYXJrZG93biBsaW5rcyBpbi5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGZyb250bWF0dGVyIG1hcmtkb3duIGxpbmtzIHdlcmUgZml4ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaXhGcm9udG1hdHRlck1hcmtkb3duTGlua3MoY2FjaGU6IENhY2hlZE1ldGFkYXRhKTogYm9vbGVhbiB7XG4gIHJldHVybiBfZml4RnJvbnRtYXR0ZXJNYXJrZG93bkxpbmtzKGNhY2hlLmZyb250bWF0dGVyLCAnJywgY2FjaGUpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIG1hcmtkb3duIGxpbmsgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHBhcmFtZXRlcnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgZ2VuZXJhdGluZyB0aGUgbWFya2Rvd24gbGluay5cbiAqIEByZXR1cm5zIFRoZSBnZW5lcmF0ZWQgbWFya2Rvd24gbGluay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlTWFya2Rvd25MaW5rKG9wdGlvbnM6IEdlbmVyYXRlTWFya2Rvd25MaW5rT3B0aW9ucyk6IHN0cmluZyB7XG4gIGNvbnN0IHsgYXBwIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IGNvbmZpZ3VyYWJsZURlZmF1bHRPcHRpb25zRm4gPSAoYXBwLmZpbGVNYW5hZ2VyLmdlbmVyYXRlTWFya2Rvd25MaW5rIGFzIFBhcnRpYWw8R2VuZXJhdGVNYXJrZG93bkxpbmtEZWZhdWx0T3B0aW9uc1dyYXBwZXI+KS5kZWZhdWx0T3B0aW9uc0ZuXG4gICAgPz8gKCgpOiBQYXJ0aWFsPEdlbmVyYXRlTWFya2Rvd25MaW5rT3B0aW9ucz4gPT4gKHt9KSk7XG4gIGNvbnN0IGNvbmZpZ3VyYWJsZURlZmF1bHRPcHRpb25zID0gY29uZmlndXJhYmxlRGVmYXVsdE9wdGlvbnNGbigpO1xuXG4gIGNvbnN0IERFRkFVTFRfT1BUSU9OUzogUGFydGlhbDxHZW5lcmF0ZU1hcmtkb3duTGlua09wdGlvbnM+ID0ge1xuICAgIGlzRW1wdHlFbWJlZEFsaWFzQWxsb3dlZDogdHJ1ZVxuICB9O1xuXG4gIG9wdGlvbnMgPSB7IC4uLkRFRkFVTFRfT1BUSU9OUywgLi4uY29uZmlndXJhYmxlRGVmYXVsdE9wdGlvbnMsIC4uLm9wdGlvbnMgfTtcblxuICBjb25zdCB0YXJnZXRGaWxlID0gZ2V0RmlsZShhcHAsIG9wdGlvbnMudGFyZ2V0UGF0aE9yRmlsZSwgb3B0aW9ucy5pc05vbkV4aXN0aW5nRmlsZUFsbG93ZWQpO1xuXG4gIHJldHVybiB0ZW1wUmVnaXN0ZXJGaWxlQW5kUnVuKGFwcCwgdGFyZ2V0RmlsZSwgKCkgPT4gZ2VuZXJhdGVNYXJrZG93bkxpbmtJbXBsKG9wdGlvbnMpKTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYSBsaW5rIGludG8gaXRzIGNvbXBvbmVudHMuXG4gKlxuICogQHBhcmFtIHN0ciAtIFRoZSBsaW5rIHRvIHBhcnNlLlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBsaW5rLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VMaW5rKHN0cjogc3RyaW5nKTogbnVsbCB8IFBhcnNlTGlua1Jlc3VsdCB7XG4gIGNvbnN0IHJlc3VsdCA9IHBhcnNlTGlua1VybChzdHIpO1xuICBpZiAocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGNvbnN0IEVNQkVEX1BSRUZJWCA9ICchJztcblxuICBjb25zdCBpc0VtYmVkID0gc3RyLnN0YXJ0c1dpdGgoRU1CRURfUFJFRklYKTtcbiAgaWYgKGlzRW1iZWQpIHtcbiAgICBzdHIgPSB0cmltU3RhcnQoc3RyLCBFTUJFRF9QUkVGSVgpO1xuICB9XG4gIGNvbnN0IHByb2Nlc3NvciA9IHJlbWFyaygpLnVzZShyZW1hcmtQYXJzZSkudXNlKHdpa2lMaW5rUGx1Z2luLCB7IGFsaWFzRGl2aWRlcjogV0lLSUxJTktfRElWSURFUiB9KTtcbiAgY29uc3Qgcm9vdCA9IHByb2Nlc3Nvci5wYXJzZShzdHIpO1xuXG4gIGlmIChyb290LmNoaWxkcmVuLmxlbmd0aCAhPT0gMSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgcGFyYWdyYXBoID0gcm9vdC5jaGlsZHJlblswXTtcblxuICBpZiAocGFyYWdyYXBoPy50eXBlICE9PSAncGFyYWdyYXBoJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHBhcmFncmFwaC5jaGlsZHJlbi5sZW5ndGggIT09IDEpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG5vZGUgPSBwYXJhZ3JhcGguY2hpbGRyZW5bMF07XG5cbiAgaWYgKG5vZGU/LnBvc2l0aW9uPy5zdGFydC5vZmZzZXQgIT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChub2RlLnBvc2l0aW9uLmVuZC5vZmZzZXQgIT09IHN0ci5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN3aXRjaCAobm9kZS50eXBlIGFzIHN0cmluZykge1xuICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgcmV0dXJuIHBhcnNlTGlua05vZGUobm9kZSBhcyBMaW5rLCBzdHIsIGlzRW1iZWQpO1xuICAgIGNhc2UgJ3dpa2lMaW5rJzpcbiAgICAgIHJldHVybiBwYXJzZVdpa2lsaW5rTm9kZShub2RlIGFzIHVua25vd24gYXMgV2lraUxpbmtOb2RlLCBzdHIsIGlzRW1iZWQpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGFsaWFzIG9mIGEgbGluayBzaG91bGQgYmUgcmVzZXQuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgZGV0ZXJtaW5pbmcgaWYgdGhlIGFsaWFzIHNob3VsZCBiZSByZXNldC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFsaWFzIHNob3VsZCBiZSByZXNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZFJlc2V0QWxpYXMob3B0aW9uczogU2hvdWxkUmVzZXRBbGlhc09wdGlvbnMpOiBib29sZWFuIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBkaXNwbGF5VGV4dCxcbiAgICBpc1dpa2lsaW5rLFxuICAgIG5ld1NvdXJjZVBhdGhPckZpbGUsXG4gICAgb2xkU291cmNlUGF0aE9yRmlsZSxcbiAgICBvbGRUYXJnZXRQYXRoLFxuICAgIHRhcmdldFBhdGhPckZpbGVcbiAgfSA9IG9wdGlvbnM7XG4gIGlmIChpc1dpa2lsaW5rID09PSBmYWxzZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghZGlzcGxheVRleHQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IHRhcmdldEZpbGUgPSBnZXRGaWxlKGFwcCwgdGFyZ2V0UGF0aE9yRmlsZSwgdHJ1ZSk7XG4gIGNvbnN0IG5ld1NvdXJjZVBhdGggPSBnZXRQYXRoKGFwcCwgbmV3U291cmNlUGF0aE9yRmlsZSk7XG4gIGNvbnN0IG9sZFNvdXJjZVBhdGggPSBnZXRQYXRoKGFwcCwgb2xkU291cmNlUGF0aE9yRmlsZSA/PyBuZXdTb3VyY2VQYXRoT3JGaWxlKTtcbiAgY29uc3QgbmV3U291cmNlRm9sZGVyID0gZGlybmFtZShuZXdTb3VyY2VQYXRoKTtcbiAgY29uc3Qgb2xkU291cmNlRm9sZGVyID0gZGlybmFtZShvbGRTb3VyY2VQYXRoKTtcbiAgY29uc3QgYWxpYXNlc1RvUmVzZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBmb3IgKGNvbnN0IHBhdGhPckZpbGUgb2YgW3RhcmdldEZpbGUucGF0aCwgb2xkVGFyZ2V0UGF0aF0pIHtcbiAgICBpZiAoIXBhdGhPckZpbGUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHBhdGggPSBnZXRQYXRoKGFwcCwgcGF0aE9yRmlsZSk7XG4gICAgYWxpYXNlc1RvUmVzZXQuYWRkKHBhdGgpO1xuICAgIGFsaWFzZXNUb1Jlc2V0LmFkZChiYXNlbmFtZShwYXRoKSk7XG4gICAgYWxpYXNlc1RvUmVzZXQuYWRkKHJlbGF0aXZlKG5ld1NvdXJjZUZvbGRlciwgcGF0aCkpO1xuICAgIGFsaWFzZXNUb1Jlc2V0LmFkZChyZWxhdGl2ZShvbGRTb3VyY2VGb2xkZXIsIHBhdGgpKTtcbiAgfVxuXG4gIGZvciAoY29uc3Qgc291cmNlUGF0aCBvZiBbb2xkU291cmNlUGF0aCwgbmV3U291cmNlUGF0aF0pIHtcbiAgICBhbGlhc2VzVG9SZXNldC5hZGQoYXBwLm1ldGFkYXRhQ2FjaGUuZmlsZVRvTGlua3RleHQodGFyZ2V0RmlsZSwgc291cmNlUGF0aCwgZmFsc2UpKTtcbiAgfVxuXG4gIGNvbnN0IGNsZWFuRGlzcGxheVRleHQgPSByZXBsYWNlQWxsKG5vcm1hbGl6ZVBhdGgoZGlzcGxheVRleHQuc3BsaXQoJyA+ICcpWzBdID8/ICcnKSwgL15cXC5cXC8vZywgJycpLnRvTG93ZXJDYXNlKCk7XG5cbiAgZm9yIChjb25zdCBhbGlhcyBvZiBhbGlhc2VzVG9SZXNldCkge1xuICAgIGlmIChhbGlhcy50b0xvd2VyQ2FzZSgpID09PSBjbGVhbkRpc3BsYXlUZXh0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBmb2xkZXIgPSBkaXJuYW1lKGFsaWFzKTtcbiAgICBjb25zdCBiYXNlID0gYmFzZW5hbWUoYWxpYXMsIGV4dG5hbWUoYWxpYXMpKTtcbiAgICBpZiAoam9pbihmb2xkZXIsIGJhc2UpLnRvTG93ZXJDYXNlKCkgPT09IGNsZWFuRGlzcGxheVRleHQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBTcGxpdHMgYSBsaW5rIGludG8gaXRzIGxpbmsgcGF0aCBhbmQgc3VicGF0aC5cbiAqXG4gKiBAcGFyYW0gbGluayAtIFRoZSBsaW5rIHRvIHNwbGl0LlxuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGxpbmsgcGF0aCBhbmQgc3VicGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0U3VicGF0aChsaW5rOiBzdHJpbmcpOiBTcGxpdFN1YnBhdGhSZXN1bHQge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZUxpbmt0ZXh0KG5vcm1hbGl6ZShsaW5rKSk7XG4gIHJldHVybiB7XG4gICAgbGlua1BhdGg6IHBhcnNlZC5wYXRoLFxuICAgIHN1YnBhdGg6IHBhcnNlZC5zdWJwYXRoXG4gIH07XG59XG5cbi8qKlxuICogVGVzdHMgd2hldGhlciBhIGxpbmsgdXNlcyBhbmdsZSBicmFja2V0cywgcG9zc2libHkgZW1iZWQ6XG4gKiBgW3RpdGxlXSg8bGluaz4pYCwgYCFbdGl0bGVdKDxsaW5rPilgLlxuICpcbiAqIEBwYXJhbSBsaW5rIC0gTGluayB0byB0ZXN0XG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBsaW5rIHVzZXMgYW5nbGUgYnJhY2tldHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRlc3RBbmdsZUJyYWNrZXRzKGxpbms6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBwYXJzZUxpbmtSZXN1bHQgPSBwYXJzZUxpbmsobGluayk7XG4gIHJldHVybiBwYXJzZUxpbmtSZXN1bHQ/Lmhhc0FuZ2xlQnJhY2tldHMgPz8gZmFsc2U7XG59XG5cbi8qKlxuICogVGVzdHMgd2hldGhlciBhIGxpbmsgaXMgYW4gZW1iZWQgbGluazpcbiAqIGAhW1tsaW5rXV1gLCBgIVt0aXRsZV0obGluaylgLlxuICpcbiAqIEBwYXJhbSBsaW5rIC0gTGluayB0byB0ZXN0XG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBsaW5rIGlzIGFuIGVtYmVkIGxpbmtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRlc3RFbWJlZChsaW5rOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgcGFyc2VMaW5rUmVzdWx0ID0gcGFyc2VMaW5rKGxpbmspO1xuICByZXR1cm4gcGFyc2VMaW5rUmVzdWx0Py5pc0VtYmVkID8/IGZhbHNlO1xufVxuXG4vKipcbiAqIFRlc3RzIHdoZXRoZXIgYSBsaW5rIGhhcyBhIGxlYWRpbmcgZG90LCBwb3NzaWJseSBlbWJlZDpcbiAqIGBbWy4vbGlua11dYCwgYFt0aXRsZV0oLi9saW5rKWAsIGBbdGl0bGVdKDwuL2xpbms+KWAsXG4gKiBgIVtbLi9saW5rXV1gLCBgIVt0aXRsZV0oLi9saW5rKWAsIGAhW3RpdGxlXSg8Li9saW5rPilgLlxuICpcbiAqIEBwYXJhbSBsaW5rIC0gTGluayB0byB0ZXN0XG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBsaW5rIGhhcyBhIGxlYWRpbmcgZG90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0TGVhZGluZ0RvdChsaW5rOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgcGFyc2VMaW5rUmVzdWx0ID0gcGFyc2VMaW5rKGxpbmspO1xuICByZXR1cm4gcGFyc2VMaW5rUmVzdWx0Py51cmwuc3RhcnRzV2l0aCgnLi8nKSA/PyBmYWxzZTtcbn1cblxuLyoqXG4gKiBUZXN0cyB3aGV0aGVyIGEgbGluayBpcyBhIHdpa2lsaW5rLCBwb3NzaWJseSBlbWJlZDpcbiAqIGBbW2xpbmtdXWAsIGAhW1tsaW5rXV1gLlxuICpcbiAqIEBwYXJhbSBsaW5rIC0gTGluayB0byB0ZXN0XG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBsaW5rIGlzIGEgd2lraWxpbmtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRlc3RXaWtpbGluayhsaW5rOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgcGFyc2VMaW5rUmVzdWx0ID0gcGFyc2VMaW5rKGxpbmspO1xuICByZXR1cm4gcGFyc2VMaW5rUmVzdWx0Py5pc1dpa2lsaW5rID8/IGZhbHNlO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgYSBsaW5rIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHVwZGF0aW5nIHRoZSBsaW5rLlxuICogQHJldHVybnMgVGhlIHVwZGF0ZWQgbGluay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUxpbmsob3B0aW9uczogVXBkYXRlTGlua09wdGlvbnMpOiBzdHJpbmcge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGxpbmssXG4gICAgbmV3U291cmNlUGF0aE9yRmlsZSxcbiAgICBuZXdUYXJnZXRQYXRoT3JGaWxlLFxuICAgIG9sZFNvdXJjZVBhdGhPckZpbGUsXG4gICAgb2xkVGFyZ2V0UGF0aE9yRmlsZSxcbiAgICBzaG91bGRGb3JjZU1hcmtkb3duTGlua3MsXG4gICAgc2hvdWxkVXBkYXRlRmlsZW5hbWVBbGlhc1xuICB9ID0gb3B0aW9ucztcbiAgaWYgKCFuZXdUYXJnZXRQYXRoT3JGaWxlKSB7XG4gICAgcmV0dXJuIGxpbmsub3JpZ2luYWw7XG4gIH1cbiAgY29uc3QgdGFyZ2V0RmlsZSA9IGdldEZpbGUoYXBwLCBuZXdUYXJnZXRQYXRoT3JGaWxlLCB0cnVlKTtcbiAgY29uc3Qgb2xkVGFyZ2V0UGF0aCA9IGdldFBhdGgoYXBwLCBvbGRUYXJnZXRQYXRoT3JGaWxlID8/IG5ld1RhcmdldFBhdGhPckZpbGUpO1xuICBjb25zdCBpc1dpa2lsaW5rID0gdGVzdFdpa2lsaW5rKGxpbmsub3JpZ2luYWwpICYmIHNob3VsZEZvcmNlTWFya2Rvd25MaW5rcyAhPT0gdHJ1ZTtcbiAgY29uc3QgeyBzdWJwYXRoIH0gPSBzcGxpdFN1YnBhdGgobGluay5saW5rKTtcbiAgbGV0IHNob3VsZEtlZXBBbGlhcyA9ICFzaG91bGRVcGRhdGVGaWxlbmFtZUFsaWFzO1xuXG4gIGlmIChpc0NhbnZhc0ZpbGUoYXBwLCBuZXdTb3VyY2VQYXRoT3JGaWxlKSkge1xuICAgIGlmIChpc0NhbnZhc0ZpbGVOb2RlUmVmZXJlbmNlKGxpbmspKSB7XG4gICAgICByZXR1cm4gdGFyZ2V0RmlsZS5wYXRoICsgc3VicGF0aDtcbiAgICB9XG4gIH1cblxuICBsZXQgYWxpYXM6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBpZiAoaXNXaWtpbGluaykge1xuICAgIGNvbnN0IHBhcnNlTGlua1Jlc3VsdCA9IHBhcnNlTGluayhsaW5rLm9yaWdpbmFsKTtcbiAgICBpZiAocGFyc2VMaW5rUmVzdWx0Py5hbGlhcykge1xuICAgICAgYWxpYXMgPSBwYXJzZUxpbmtSZXN1bHQuYWxpYXM7XG4gICAgICBzaG91bGRLZWVwQWxpYXMgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGFsaWFzID8/PSBzaG91bGRSZXNldEFsaWFzKG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxTaG91bGRSZXNldEFsaWFzT3B0aW9ucz4oe1xuICAgICAgYXBwLFxuICAgICAgZGlzcGxheVRleHQ6IGxpbmsuZGlzcGxheVRleHQsXG4gICAgICBpc1dpa2lsaW5rLFxuICAgICAgbmV3U291cmNlUGF0aE9yRmlsZSxcbiAgICAgIG9sZFNvdXJjZVBhdGhPckZpbGUsXG4gICAgICBvbGRUYXJnZXRQYXRoLFxuICAgICAgdGFyZ2V0UGF0aE9yRmlsZTogdGFyZ2V0RmlsZVxuICAgIH0pKVxuICAgID8gdW5kZWZpbmVkXG4gICAgOiBsaW5rLmRpc3BsYXlUZXh0O1xuXG4gIGlmICghc2hvdWxkS2VlcEFsaWFzKSB7XG4gICAgaWYgKGFsaWFzID09PSBiYXNlbmFtZShvbGRUYXJnZXRQYXRoLCBleHRuYW1lKG9sZFRhcmdldFBhdGgpKSkge1xuICAgICAgYWxpYXMgPSB0YXJnZXRGaWxlLmJhc2VuYW1lO1xuICAgIH0gZWxzZSBpZiAoYWxpYXMgPT09IGJhc2VuYW1lKG9sZFRhcmdldFBhdGgpKSB7XG4gICAgICBhbGlhcyA9IHRhcmdldEZpbGUubmFtZTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBuZXdMaW5rID0gZ2VuZXJhdGVNYXJrZG93bkxpbmsobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPEdlbmVyYXRlTWFya2Rvd25MaW5rT3B0aW9ucz4oe1xuICAgIGFsaWFzLFxuICAgIGFwcCxcbiAgICBpc1dpa2lsaW5rOiBzaG91bGRGb3JjZU1hcmtkb3duTGlua3MgPyBmYWxzZSA6IHVuZGVmaW5lZCxcbiAgICBvcmlnaW5hbExpbms6IGxpbmsub3JpZ2luYWwsXG4gICAgc291cmNlUGF0aE9yRmlsZTogbmV3U291cmNlUGF0aE9yRmlsZSxcbiAgICBzdWJwYXRoLFxuICAgIHRhcmdldFBhdGhPckZpbGU6IHRhcmdldEZpbGVcbiAgfSkpO1xuICByZXR1cm4gbmV3TGluaztcbn1cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBsaW5rcyBpbiBhIGNvbnRlbnQgc3RyaW5nIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHVwZGF0aW5nIHRoZSBsaW5rcy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGNvbnRlbnQgd2l0aCB1cGRhdGVkIGxpbmtzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlTGlua3NJbkNvbnRlbnQob3B0aW9uczogVXBkYXRlTGlua3NJbkNvbnRlbnRPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBjb250ZW50LFxuICAgIG5ld1NvdXJjZVBhdGhPckZpbGUsXG4gICAgb2xkU291cmNlUGF0aE9yRmlsZSxcbiAgICBzaG91bGRGb3JjZU1hcmtkb3duTGlua3MsXG4gICAgc2hvdWxkVXBkYXRlRW1iZWRPbmx5TGlua3MsXG4gICAgc2hvdWxkVXBkYXRlRmlsZW5hbWVBbGlhc1xuICB9ID0gb3B0aW9ucztcblxuICByZXR1cm4gYXdhaXQgZWRpdExpbmtzSW5Db250ZW50KGFwcCwgY29udGVudCwgKGxpbmspID0+IHtcbiAgICBjb25zdCBpc0VtYmVkTGluayA9IHRlc3RFbWJlZChsaW5rLm9yaWdpbmFsKTtcbiAgICBpZiAoc2hvdWxkVXBkYXRlRW1iZWRPbmx5TGlua3MgIT09IHVuZGVmaW5lZCAmJiBzaG91bGRVcGRhdGVFbWJlZE9ubHlMaW5rcyAhPT0gaXNFbWJlZExpbmspIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnZlcnRMaW5rKG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxDb252ZXJ0TGlua09wdGlvbnM+KHtcbiAgICAgIGFwcCxcbiAgICAgIGxpbmssXG4gICAgICBuZXdTb3VyY2VQYXRoT3JGaWxlLFxuICAgICAgb2xkU291cmNlUGF0aE9yRmlsZSxcbiAgICAgIHNob3VsZEZvcmNlTWFya2Rvd25MaW5rcyxcbiAgICAgIHNob3VsZFVwZGF0ZUZpbGVuYW1lQWxpYXNcbiAgICB9KSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGxpbmtzIGluIGEgZmlsZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcGFyYW1ldGVycy5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB1cGRhdGluZyB0aGUgbGlua3MuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGxpbmtzIGFyZSB1cGRhdGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlTGlua3NJbkZpbGUob3B0aW9uczogVXBkYXRlTGlua3NJbkZpbGVPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgbmV3U291cmNlUGF0aE9yRmlsZSxcbiAgICBvbGRTb3VyY2VQYXRoT3JGaWxlLFxuICAgIHNob3VsZEZvcmNlTWFya2Rvd25MaW5rcyxcbiAgICBzaG91bGRVcGRhdGVFbWJlZE9ubHlMaW5rcyxcbiAgICBzaG91bGRVcGRhdGVGaWxlbmFtZUFsaWFzXG4gIH0gPSBvcHRpb25zO1xuXG4gIGlmIChpc0NhbnZhc0ZpbGUoYXBwLCBuZXdTb3VyY2VQYXRoT3JGaWxlKSAmJiAhYXBwLmludGVybmFsUGx1Z2lucy5nZXRFbmFibGVkUGx1Z2luQnlJZChJbnRlcm5hbFBsdWdpbk5hbWUuQ2FudmFzKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IGVkaXRMaW5rcyhhcHAsIG5ld1NvdXJjZVBhdGhPckZpbGUsIChsaW5rKSA9PiB7XG4gICAgY29uc3QgaXNFbWJlZExpbmsgPSB0ZXN0RW1iZWQobGluay5vcmlnaW5hbCk7XG4gICAgaWYgKHNob3VsZFVwZGF0ZUVtYmVkT25seUxpbmtzICE9PSB1bmRlZmluZWQgJiYgc2hvdWxkVXBkYXRlRW1iZWRPbmx5TGlua3MgIT09IGlzRW1iZWRMaW5rKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiBjb252ZXJ0TGluayhub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8Q29udmVydExpbmtPcHRpb25zPih7XG4gICAgICBhcHAsXG4gICAgICBsaW5rLFxuICAgICAgbmV3U291cmNlUGF0aE9yRmlsZSxcbiAgICAgIG9sZFNvdXJjZVBhdGhPckZpbGUsXG4gICAgICBzaG91bGRGb3JjZU1hcmtkb3duTGlua3MsXG4gICAgICBzaG91bGRVcGRhdGVGaWxlbmFtZUFsaWFzXG4gICAgfSkpO1xuICB9LCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gX2ZpeEZyb250bWF0dGVyTWFya2Rvd25MaW5rcyh2YWx1ZTogdW5rbm93biwga2V5OiBzdHJpbmcsIGNhY2hlOiBDYWNoZWRNZXRhZGF0YSk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IHBhcnNlTGlua1Jlc3VsdCA9IHBhcnNlTGluayh2YWx1ZSk7XG4gICAgaWYgKCFwYXJzZUxpbmtSZXN1bHQgfHwgcGFyc2VMaW5rUmVzdWx0LmlzV2lraWxpbmsgfHwgcGFyc2VMaW5rUmVzdWx0LmlzRXh0ZXJuYWwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjYWNoZS5mcm9udG1hdHRlckxpbmtzID8/PSBbXTtcbiAgICBsZXQgbGluayA9IGNhY2hlLmZyb250bWF0dGVyTGlua3MuZmluZCgoZnJvbnRtYXR0ZXJMaW5rKSA9PiBmcm9udG1hdHRlckxpbmsua2V5ID09PSBrZXkpO1xuXG4gICAgaWYgKCFsaW5rKSB7XG4gICAgICBsaW5rID0ge1xuICAgICAgICBrZXksXG4gICAgICAgIGxpbms6ICcnLFxuICAgICAgICBvcmlnaW5hbDogJydcbiAgICAgIH07XG4gICAgICBjYWNoZS5mcm9udG1hdHRlckxpbmtzLnB1c2gobGluayk7XG4gICAgfVxuXG4gICAgbGluay5saW5rID0gcGFyc2VMaW5rUmVzdWx0LnVybDtcbiAgICBsaW5rLm9yaWdpbmFsID0gdmFsdWU7XG4gICAgaWYgKHBhcnNlTGlua1Jlc3VsdC5hbGlhcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaW5rLmRpc3BsYXlUZXh0ID0gcGFyc2VMaW5rUmVzdWx0LmFsaWFzO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBsZXQgaGFzRnJvbnRtYXR0ZXJMaW5rcyA9IGZhbHNlO1xuXG4gIGZvciAoY29uc3QgW2NoaWxkS2V5LCBjaGlsZFZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSBhcyBHZW5lcmljT2JqZWN0KSkge1xuICAgIGNvbnN0IGhhc0NoaWxkRnJvbnRtYXR0ZXJMaW5rcyA9IF9maXhGcm9udG1hdHRlck1hcmtkb3duTGlua3MoY2hpbGRWYWx1ZSwga2V5ID8gYCR7a2V5fS4ke2NoaWxkS2V5fWAgOiBjaGlsZEtleSwgY2FjaGUpO1xuICAgIGhhc0Zyb250bWF0dGVyTGlua3MgfHw9IGhhc0NoaWxkRnJvbnRtYXR0ZXJMaW5rcztcbiAgfVxuXG4gIHJldHVybiBoYXNGcm9udG1hdHRlckxpbmtzO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUxpbmtUZXh0KGFwcDogQXBwLCB0YXJnZXRGaWxlOiBURmlsZSwgc291cmNlUGF0aDogc3RyaW5nLCBzdWJwYXRoOiBzdHJpbmcsIGNvbmZpZzogTGlua0NvbmZpZyk6IHN0cmluZyB7XG4gIGxldCBsaW5rVGV4dDogc3RyaW5nO1xuXG4gIGlmICh0YXJnZXRGaWxlLnBhdGggPT09IHNvdXJjZVBhdGggJiYgc3VicGF0aCkge1xuICAgIGxpbmtUZXh0ID0gc3VicGF0aDtcbiAgfSBlbHNlIGlmIChjb25maWcuc2hvdWxkRm9yY2VSZWxhdGl2ZVBhdGgpIHtcbiAgICBsaW5rVGV4dCA9IHJlbGF0aXZlKGRpcm5hbWUoc291cmNlUGF0aCksIGNvbmZpZy5pc1dpa2lsaW5rID8gdHJpbU1hcmtkb3duRXh0ZW5zaW9uKGFwcCwgdGFyZ2V0RmlsZSkgOiB0YXJnZXRGaWxlLnBhdGgpICsgc3VicGF0aDtcbiAgfSBlbHNlIHtcbiAgICBsaW5rVGV4dCA9IGFwcC5tZXRhZGF0YUNhY2hlLmZpbGVUb0xpbmt0ZXh0KHRhcmdldEZpbGUsIHNvdXJjZVBhdGgsIGNvbmZpZy5pc1dpa2lsaW5rKSArIHN1YnBhdGg7XG4gIH1cblxuICBpZiAoY29uZmlnLnNob3VsZEZvcmNlUmVsYXRpdmVQYXRoICYmIGNvbmZpZy5zaG91bGRVc2VMZWFkaW5nRG90ICYmICFsaW5rVGV4dC5zdGFydHNXaXRoKCcuJykgJiYgIWxpbmtUZXh0LnN0YXJ0c1dpdGgoJyMnKSkge1xuICAgIGxpbmtUZXh0ID0gYC4vJHtsaW5rVGV4dH1gO1xuICB9XG5cbiAgcmV0dXJuIGxpbmtUZXh0O1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZU1hcmtkb3duTGlua0ltcGwob3B0aW9uczogR2VuZXJhdGVNYXJrZG93bkxpbmtPcHRpb25zKTogc3RyaW5nIHtcbiAgY29uc3QgeyBhcHAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHRhcmdldEZpbGUgPSBnZXRGaWxlKGFwcCwgb3B0aW9ucy50YXJnZXRQYXRoT3JGaWxlLCBvcHRpb25zLmlzTm9uRXhpc3RpbmdGaWxlQWxsb3dlZCk7XG4gIGNvbnN0IHNvdXJjZVBhdGggPSBnZXRQYXRoKGFwcCwgb3B0aW9ucy5zb3VyY2VQYXRoT3JGaWxlKTtcbiAgY29uc3Qgc3VicGF0aCA9IG9wdGlvbnMuc3VicGF0aCA/PyAnJztcblxuICBjb25zdCBsaW5rQ29uZmlnID0gZ2V0TGlua0NvbmZpZyhvcHRpb25zLCB0YXJnZXRGaWxlKTtcbiAgY29uc3QgbGlua1RleHQgPSBnZW5lcmF0ZUxpbmtUZXh0KGFwcCwgdGFyZ2V0RmlsZSwgc291cmNlUGF0aCwgc3VicGF0aCwgbGlua0NvbmZpZyk7XG5cbiAgcmV0dXJuIGxpbmtDb25maWcuaXNXaWtpbGlua1xuICAgID8gZ2VuZXJhdGVXaWtpTGluayhsaW5rVGV4dCwgb3B0aW9ucy5hbGlhcywgbGlua0NvbmZpZy5pc0VtYmVkKVxuICAgIDogZ2VuZXJhdGVNYXJrZG93blN0eWxlTGluayhsaW5rVGV4dCwgdGFyZ2V0RmlsZSwgb3B0aW9ucywgbGlua0NvbmZpZyk7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlTWFya2Rvd25TdHlsZUxpbmsobGlua1RleHQ6IHN0cmluZywgdGFyZ2V0RmlsZTogVEZpbGUsIG9wdGlvbnM6IEdlbmVyYXRlTWFya2Rvd25MaW5rT3B0aW9ucywgY29uZmlnOiBMaW5rQ29uZmlnKTogc3RyaW5nIHtcbiAgY29uc3QgeyBhcHAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGVtYmVkUHJlZml4ID0gY29uZmlnLmlzRW1iZWQgPyAnIScgOiAnJztcblxuICBjb25zdCBwcm9jZXNzZWRMaW5rVGV4dCA9IGNvbmZpZy5zaG91bGRVc2VBbmdsZUJyYWNrZXRzXG4gICAgPyBgPCR7bGlua1RleHR9PmBcbiAgICA6IGVuY29kZVVybChsaW5rVGV4dCk7XG5cbiAgbGV0IGFsaWFzID0gb3B0aW9ucy5hbGlhcyA/PyAnJztcbiAgaWYgKCFhbGlhcyAmJiAoIWNvbmZpZy5pc0VtYmVkIHx8ICFvcHRpb25zLmlzRW1wdHlFbWJlZEFsaWFzQWxsb3dlZCkpIHtcbiAgICBhbGlhcyA9ICFvcHRpb25zLnNob3VsZEluY2x1ZGVBdHRhY2htZW50RXh0ZW5zaW9uVG9FbWJlZEFsaWFzIHx8IGlzTWFya2Rvd25GaWxlKGFwcCwgdGFyZ2V0RmlsZSlcbiAgICAgID8gdGFyZ2V0RmlsZS5iYXNlbmFtZVxuICAgICAgOiB0YXJnZXRGaWxlLm5hbWU7XG4gIH1cblxuICBjb25zdCBlc2NhcGVkQWxpYXMgPSByZXBsYWNlQWxsKGFsaWFzLCBTUEVDSUFMX01BUktET1dOX0xJTktfU1lNQk9MU19SRUdFWCwgJ1xcXFwkJicpO1xuICByZXR1cm4gYCR7ZW1iZWRQcmVmaXh9WyR7ZXNjYXBlZEFsaWFzfV0oJHtwcm9jZXNzZWRMaW5rVGV4dH0pYDtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVXaWtpTGluayhsaW5rVGV4dDogc3RyaW5nLCBhbGlhczogc3RyaW5nIHwgdW5kZWZpbmVkLCBpc0VtYmVkOiBib29sZWFuKTogc3RyaW5nIHtcbiAgY29uc3QgZW1iZWRQcmVmaXggPSBpc0VtYmVkID8gJyEnIDogJyc7XG4gIGNvbnN0IG5vcm1hbGl6ZWRBbGlhcyA9IGFsaWFzID8/ICcnO1xuXG4gIGlmIChub3JtYWxpemVkQWxpYXMgJiYgbm9ybWFsaXplZEFsaWFzLnRvTG93ZXJDYXNlKCkgPT09IGxpbmtUZXh0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICByZXR1cm4gYCR7ZW1iZWRQcmVmaXh9W1ske25vcm1hbGl6ZWRBbGlhc31dXWA7XG4gIH1cblxuICBjb25zdCBhbGlhc1BhcnQgPSBub3JtYWxpemVkQWxpYXMgPyBgfCR7bm9ybWFsaXplZEFsaWFzfWAgOiAnJztcbiAgcmV0dXJuIGAke2VtYmVkUHJlZml4fVtbJHtsaW5rVGV4dH0ke2FsaWFzUGFydH1dXWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEZpbGVDaGFuZ2VzKFxuICBjYWNoZTogQ2FjaGVkTWV0YWRhdGEgfCBudWxsLFxuICBpc0NhbnZhc0ZpbGVDYWNoZTogYm9vbGVhbixcbiAgbGlua0NvbnZlcnRlcjogKGxpbms6IFJlZmVyZW5jZSkgPT4gUHJvbWlzYWJsZTxNYXliZVJldHVybjxzdHJpbmc+PlxuKTogUHJvbWlzZTxGaWxlQ2hhbmdlW10+IHtcbiAgaWYgKCFjYWNoZSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGNoYW5nZXM6IEZpbGVDaGFuZ2VbXSA9IFtdO1xuXG4gIGNvbnN0IHRhYmxlUG9zaXRpb25zOiBUYWJsZVBvc2l0aW9uW10gPSAoY2FjaGUuc2VjdGlvbnMgPz8gW10pLmZpbHRlcigoc2VjdGlvbikgPT4gc2VjdGlvbi50eXBlID09PSAndGFibGUnKS5tYXAoKHNlY3Rpb24pID0+ICh7XG4gICAgZW5kOiBzZWN0aW9uLnBvc2l0aW9uLmVuZC5vZmZzZXQsXG4gICAgc3RhcnQ6IHNlY3Rpb24ucG9zaXRpb24uc3RhcnQub2Zmc2V0XG4gIH0pKTtcblxuICBmb3IgKGNvbnN0IGxpbmsgb2YgZ2V0QWxsTGlua3MoY2FjaGUpKSB7XG4gICAgY29uc3QgbmV3Q29udGVudCA9IGF3YWl0IGxpbmtDb252ZXJ0ZXIobGluayk7XG4gICAgaWYgKG5ld0NvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZUNoYW5nZSA9IHJlZmVyZW5jZVRvRmlsZUNoYW5nZShsaW5rLCBuZXdDb250ZW50KTtcblxuICAgIGlmIChpc0NhbnZhc0ZpbGVDYWNoZSkge1xuICAgICAgaWYgKGlzQ2FudmFzQ2hhbmdlKGZpbGVDaGFuZ2UpKSB7XG4gICAgICAgIGNoYW5nZXMucHVzaChmaWxlQ2hhbmdlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybignVW5zdXBwb3J0ZWQgZmlsZSBjaGFuZ2UnLCBmaWxlQ2hhbmdlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNob3VsZEVzY2FwZVdpa2lsaW5rRGl2aWRlcihmaWxlQ2hhbmdlLCB0YWJsZVBvc2l0aW9ucykpIHtcbiAgICAgICAgZmlsZUNoYW5nZS5uZXdDb250ZW50ID0gZmlsZUNoYW5nZS5uZXdDb250ZW50LnJlcGxhY2VBbGwoVU5FU0NBUEVEX1dJS0lMSU5LX0RJVklERVJfUkVHRVhQLCBFU0NBUEVEX1dJS0lMSU5LX0RJVklERVIpO1xuICAgICAgfVxuXG4gICAgICBjaGFuZ2VzLnB1c2goZmlsZUNoYW5nZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBjaGFuZ2VzO1xufVxuXG5mdW5jdGlvbiBnZXRMaW5rQ29uZmlnKG9wdGlvbnM6IEdlbmVyYXRlTWFya2Rvd25MaW5rT3B0aW9ucywgdGFyZ2V0RmlsZTogVEZpbGUpOiBMaW5rQ29uZmlnIHtcbiAgY29uc3QgeyBhcHAgfSA9IG9wdGlvbnM7XG4gIHJldHVybiB7XG4gICAgaXNFbWJlZDogb3B0aW9ucy5pc0VtYmVkID8/IChvcHRpb25zLm9yaWdpbmFsTGluayA/IHRlc3RFbWJlZChvcHRpb25zLm9yaWdpbmFsTGluaykgOiB1bmRlZmluZWQpID8/ICFpc01hcmtkb3duRmlsZShhcHAsIHRhcmdldEZpbGUpLFxuICAgIGlzV2lraWxpbms6IG9wdGlvbnMuaXNXaWtpbGluayA/PyAob3B0aW9ucy5vcmlnaW5hbExpbmsgPyB0ZXN0V2lraWxpbmsob3B0aW9ucy5vcmlnaW5hbExpbmspIDogdW5kZWZpbmVkKSA/PyBzaG91bGRVc2VXaWtpbGlua3MoYXBwKSxcbiAgICBzaG91bGRGb3JjZVJlbGF0aXZlUGF0aDogb3B0aW9ucy5zaG91bGRGb3JjZVJlbGF0aXZlUGF0aCA/PyBzaG91bGRVc2VSZWxhdGl2ZUxpbmtzKGFwcCksXG4gICAgc2hvdWxkVXNlQW5nbGVCcmFja2V0czogb3B0aW9ucy5zaG91bGRVc2VBbmdsZUJyYWNrZXRzID8/IChvcHRpb25zLm9yaWdpbmFsTGluayA/IHRlc3RBbmdsZUJyYWNrZXRzKG9wdGlvbnMub3JpZ2luYWxMaW5rKSA6IHVuZGVmaW5lZCkgPz8gZmFsc2UsXG4gICAgc2hvdWxkVXNlTGVhZGluZ0RvdDogb3B0aW9ucy5zaG91bGRVc2VMZWFkaW5nRG90ID8/IChvcHRpb25zLm9yaWdpbmFsTGluayA/IHRlc3RMZWFkaW5nRG90KG9wdGlvbnMub3JpZ2luYWxMaW5rKSA6IHVuZGVmaW5lZCkgPz8gZmFsc2VcbiAgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VMaW5rTm9kZShub2RlOiBMaW5rLCBzdHI6IHN0cmluZywgaXNFbWJlZDogYm9vbGVhbik6IFBhcnNlTGlua1Jlc3VsdCB7XG4gIGNvbnN0IE9QRU5fQU5HTEVfQlJBQ0tFVCA9ICc8JztcbiAgY29uc3QgTElOS19BTElBU19TVUZGSVggPSAnXSgnO1xuICBjb25zdCBMSU5LX1NVRkZJWCA9ICcpJztcblxuICBjb25zdCBhbGlhc05vZGUgPSBub2RlLmNoaWxkcmVuWzBdIGFzIFRleHQgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHJhd1VybCA9IHN0ci5zbGljZSgoYWxpYXNOb2RlPy5wb3NpdGlvbj8uZW5kLm9mZnNldCA/PyAxKSArIExJTktfQUxJQVNfU1VGRklYLmxlbmd0aCwgKG5vZGUucG9zaXRpb24/LmVuZC5vZmZzZXQgPz8gMCkgLSBMSU5LX1NVRkZJWC5sZW5ndGgpO1xuICBjb25zdCBoYXNBbmdsZUJyYWNrZXRzID0gc3RyLnN0YXJ0c1dpdGgoT1BFTl9BTkdMRV9CUkFDS0VUKSB8fCByYXdVcmwuc3RhcnRzV2l0aChPUEVOX0FOR0xFX0JSQUNLRVQpO1xuICBjb25zdCBpc0V4dGVybmFsID0gaXNVcmwobm9kZS51cmwpO1xuICBsZXQgdXJsID0gbm9kZS51cmw7XG4gIGlmICghaXNFeHRlcm5hbCkge1xuICAgIGlmICghaGFzQW5nbGVCcmFja2V0cykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdXJsID0gZGVjb2RlVVJJQ29tcG9uZW50KHVybCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZGVjb2RlIFVSTCAke3VybH1gLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8UGFyc2VMaW5rUmVzdWx0Pih7XG4gICAgYWxpYXM6IGFsaWFzTm9kZT8udmFsdWUsXG4gICAgZW5jb2RlZFVybDogaXNFeHRlcm5hbCA/IGVuY29kZVVybCh1cmwpIDogdW5kZWZpbmVkLFxuICAgIGhhc0FuZ2xlQnJhY2tldHMsXG4gICAgaXNFbWJlZCxcbiAgICBpc0V4dGVybmFsLFxuICAgIGlzV2lraWxpbms6IGZhbHNlLFxuICAgIHRpdGxlOiBub2RlLnRpdGxlID8/IHVuZGVmaW5lZCxcbiAgICB1cmxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTGlua1VybChzdHI6IHN0cmluZyk6IG51bGwgfCBQYXJzZUxpbmtSZXN1bHQge1xuICBpZiAoIWlzVXJsKHN0cikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZW5jb2RlZFVybDogZW5jb2RlVXJsKHN0ciksXG4gICAgaXNFbWJlZDogZmFsc2UsXG4gICAgaXNFeHRlcm5hbDogdHJ1ZSxcbiAgICBpc1dpa2lsaW5rOiBmYWxzZSxcbiAgICB1cmw6IHN0clxuICB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZVdpa2lsaW5rTm9kZShub2RlOiBXaWtpTGlua05vZGUsIHN0cjogc3RyaW5nLCBpc0VtYmVkOiBib29sZWFuKTogUGFyc2VMaW5rUmVzdWx0IHtcbiAgcmV0dXJuIG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxQYXJzZUxpbmtSZXN1bHQ+KHtcbiAgICBhbGlhczogc3RyLmluY2x1ZGVzKFdJS0lMSU5LX0RJVklERVIpID8gbm9kZS5kYXRhLmFsaWFzIDogdW5kZWZpbmVkLFxuICAgIGlzRW1iZWQsXG4gICAgaXNFeHRlcm5hbDogZmFsc2UsXG4gICAgaXNXaWtpbGluazogdHJ1ZSxcbiAgICB1cmw6IG5vZGUudmFsdWVcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZEVzY2FwZVdpa2lsaW5rRGl2aWRlcihmaWxlQ2hhbmdlOiBGaWxlQ2hhbmdlLCB0YWJsZVBvc2l0aW9uczogVGFibGVQb3NpdGlvbltdKTogYm9vbGVhbiB7XG4gIGlmICghaXNDb250ZW50Q2hhbmdlKGZpbGVDaGFuZ2UpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFVTkVTQ0FQRURfV0lLSUxJTktfRElWSURFUl9SRUdFWFAudGVzdChmaWxlQ2hhbmdlLm5ld0NvbnRlbnQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRhYmxlUG9zaXRpb25zLnNvbWUoKHRhYmxlUG9zaXRpb24pID0+IHRhYmxlUG9zaXRpb24uc3RhcnQgPD0gZmlsZUNoYW5nZS5zdGFydEluZGV4ICYmIGZpbGVDaGFuZ2UuZW5kSW5kZXggPD0gdGFibGVQb3NpdGlv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QUFNO0FBQ2pKLFFBQU0sbUJBQW1CLElBQUksV0FBVyxrQkFBa0IsS0FBSyxPQUFPLFdBQVcsa0JBQWtCO0FBQ25HLFFBQU0saUJBQWEsa0JBQU0sS0FBSyxHQUFHO0FBQ2pDLE1BQUksTUFBTSxLQUFLO0FBQ2YsTUFBSSxDQUFDLFlBQVk7QUFDZixRQUFJLENBQUMsa0JBQWtCO0FBQ3JCLFVBQUk7QUFDRixjQUFNLG1CQUFtQixHQUFHO0FBQUEsTUFDOUIsU0FBUyxPQUFPO0FBQ2QsZ0JBQVEsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLEtBQUs7QUFBQSxNQUNwRDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0EsYUFBTywyQ0FBNkM7QUFBQSxJQUNsRCxPQUFPLFdBQVc7QUFBQSxJQUNsQixZQUFZLGFBQWEsVUFBVSxHQUFHLElBQUk7QUFBQSxJQUMxQztBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxZQUFZO0FBQUEsSUFDWixPQUFPLEtBQUssU0FBUztBQUFBLElBQ3JCO0FBQUEsRUFDRixDQUFDO0FBQ0g7QUFFQSxTQUFTLGFBQWEsS0FBcUM7QUFDekQsTUFBSSxLQUFDLGtCQUFNLEdBQUcsR0FBRztBQUNmLFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBTztBQUFBLElBQ0wsWUFBWSxVQUFVLEdBQUc7QUFBQSxJQUN6QixTQUFTO0FBQUEsSUFDVCxZQUFZO0FBQUEsSUFDWixZQUFZO0FBQUEsSUFDWixLQUFLO0FBQUEsRUFDUDtBQUNGO0FBRUEsU0FBUyxrQkFBa0IsTUFBb0IsS0FBYSxTQUFtQztBQUM3RixhQUFPLDJDQUE2QztBQUFBLElBQ2xELE9BQU8sSUFBSSxTQUFTLGdCQUFnQixJQUFJLEtBQUssS0FBSyxRQUFRO0FBQUEsSUFDMUQ7QUFBQSxJQUNBLFlBQVk7QUFBQSxJQUNaLFlBQVk7QUFBQSxJQUNaLEtBQUssS0FBSztBQUFBLEVBQ1osQ0FBQztBQUNIO0FBRUEsU0FBUyw0QkFBNEIsWUFBd0IsZ0JBQTBDO0FBQ3JHLE1BQUksS0FBQyxtQ0FBZ0IsVUFBVSxHQUFHO0FBQ2hDLFdBQU87QUFBQSxFQUNUO0FBRUEsTUFBSSxDQUFDLGtDQUFrQyxLQUFLLFdBQVcsVUFBVSxHQUFHO0FBQ2xFLFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBTyxlQUFlLEtBQUssQ0FBQyxrQkFBa0IsY0FBYyxTQUFTLFdBQVcsY0FBYyxXQUFXLFlBQVksY0FBYyxHQUFHO0FBQ3hJOyIsCiAgIm5hbWVzIjogWyJyZW1hcmtQYXJzZSJdCn0K
|
564
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL0xpbmsudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0aWVzIGZvciBoYW5kbGluZyBhbmQgdXBkYXRpbmcgbGlua3Mgd2l0aGluIE9ic2lkaWFuIHZhdWx0cy4gSXQgaW5jbHVkZXNcbiAqIGZ1bmN0aW9ucyB0byBzcGxpdCBwYXRocywgdXBkYXRlIGxpbmtzIGluIGZpbGVzLCBhbmQgZ2VuZXJhdGUgbWFya2Rvd24gbGlua3Mgd2l0aCB2YXJpb3VzIG9wdGlvbnMuXG4gKiBUaGUgZnVuY3Rpb25zIGludGVncmF0ZSB3aXRoIE9ic2lkaWFuJ3MgQVBJIHRvIGVuc3VyZSB0aGF0IGxpbmtzIGFyZSBtYW5hZ2VkIGNvcnJlY3RseSB3aXRoaW4gdGhlIHZhdWx0LlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgTGluayxcbiAgVGV4dFxufSBmcm9tICdtZGFzdCc7XG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgQ2FjaGVkTWV0YWRhdGEsXG4gIFJlZmVyZW5jZSxcbiAgVEZpbGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHtcbiAgbm9ybWFsaXplUGF0aCxcbiAgcGFyc2VMaW5rdGV4dFxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgeyBJbnRlcm5hbFBsdWdpbk5hbWUgfSBmcm9tICdvYnNpZGlhbi10eXBpbmdzL2ltcGxlbWVudGF0aW9ucyc7XG5pbXBvcnQgeyByZW1hcmsgfSBmcm9tICdyZW1hcmsnO1xuaW1wb3J0IHJlbWFya1BhcnNlIGZyb20gJ3JlbWFyay1wYXJzZSc7XG5pbXBvcnQgeyB3aWtpTGlua1BsdWdpbiB9IGZyb20gJ3JlbWFyay13aWtpLWxpbmsnO1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNPYmplY3QgfSBmcm9tICcuLi9PYmplY3QudHMnO1xuaW1wb3J0IHR5cGUgeyBNYXliZVJldHVybiB9IGZyb20gJy4uL1R5cGUudHMnO1xuaW1wb3J0IHR5cGUgeyBGaWxlQ2hhbmdlIH0gZnJvbSAnLi9GaWxlQ2hhbmdlLnRzJztcbmltcG9ydCB0eXBlIHsgUGF0aE9yRmlsZSB9IGZyb20gJy4vRmlsZVN5c3RlbS50cyc7XG5pbXBvcnQgdHlwZSB7IFByb2Nlc3NPcHRpb25zIH0gZnJvbSAnLi9WYXVsdC50cyc7XG5cbmltcG9ydCB7XG4gIG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllcyxcbiAgdG9Kc29uXG59IGZyb20gJy4uL09iamVjdC50cyc7XG5pbXBvcnQge1xuICBiYXNlbmFtZSxcbiAgZGlybmFtZSxcbiAgZXh0bmFtZSxcbiAgam9pbixcbiAgcmVsYXRpdmVcbn0gZnJvbSAnLi4vUGF0aC50cyc7XG5pbXBvcnQge1xuICBub3JtYWxpemUsXG4gIHJlcGxhY2VBbGwsXG4gIHRyaW1TdGFydFxufSBmcm9tICcuLi9TdHJpbmcudHMnO1xuaW1wb3J0IHsgaXNVcmwgfSBmcm9tICcuLi91cmwudHMnO1xuaW1wb3J0IHtcbiAgYXBwbHlDb250ZW50Q2hhbmdlcyxcbiAgYXBwbHlGaWxlQ2hhbmdlcyxcbiAgaXNDYW52YXNDaGFuZ2UsXG4gIGlzQ29udGVudENoYW5nZVxufSBmcm9tICcuL0ZpbGVDaGFuZ2UudHMnO1xuaW1wb3J0IHtcbiAgZ2V0RmlsZSxcbiAgZ2V0UGF0aCxcbiAgaXNDYW52YXNGaWxlLFxuICBpc01hcmtkb3duRmlsZSxcbiAgdHJpbU1hcmtkb3duRXh0ZW5zaW9uXG59IGZyb20gJy4vRmlsZVN5c3RlbS50cyc7XG5pbXBvcnQge1xuICBnZXRBbGxMaW5rcyxcbiAgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmUsXG4gIGdldENhY2hlU2FmZSxcbiAgcGFyc2VNZXRhZGF0YSxcbiAgdGVtcFJlZ2lzdGVyRmlsZUFuZFJ1blxufSBmcm9tICcuL01ldGFkYXRhQ2FjaGUudHMnO1xuaW1wb3J0IHtcbiAgc2hvdWxkVXNlUmVsYXRpdmVMaW5rcyxcbiAgc2hvdWxkVXNlV2lraWxpbmtzXG59IGZyb20gJy4vT2JzaWRpYW5TZXR0aW5ncy50cyc7XG5pbXBvcnQge1xuICBpc0NhbnZhc0ZpbGVOb2RlUmVmZXJlbmNlLFxuICByZWZlcmVuY2VUb0ZpbGVDaGFuZ2Vcbn0gZnJvbSAnLi9SZWZlcmVuY2UudHMnO1xuXG5jb25zdCBFU0NBUEVEX1dJS0lMSU5LX0RJVklERVIgPSAnXFxcXHwnO1xuXG4vKipcbiAqIFJlZ3VsYXIgZXhwcmVzc2lvbiBmb3Igc3BlY2lhbCBsaW5rIHN5bWJvbHMuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5jb25zdCBTUEVDSUFMX0xJTktfU1lNQk9MU19SRUdFWFAgPSAvW1xcXFxcXHgwMFxceDA4XFx4MEJcXHgwQ1xceDBFLVxceDFGIF0vZztcblxuLyoqXG4gKiBSZWd1bGFyIGV4cHJlc3Npb24gZm9yIHNwZWNpYWwgbWFya2Rvd24gbGluayBzeW1ib2xzLlxuICovXG5jb25zdCBTUEVDSUFMX01BUktET1dOX0xJTktfU1lNQk9MU19SRUdFWCA9IC9bXFxcXFtcXF08Pl8qfj1gJF0vZztcblxuLyoqXG4gKiBSZWd1bGFyIGV4cHJlc3Npb24gZm9yIHVuZXNjYXBlZCBwaXBlcy5cbiAqL1xuY29uc3QgVU5FU0NBUEVEX1dJS0lMSU5LX0RJVklERVJfUkVHRVhQID0gLyg/PCFcXFxcKVxcfC9nO1xuXG5jb25zdCBXSUtJTElOS19ESVZJREVSID0gJ3wnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNvbnZlcnRpbmcgYSBsaW5rLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnZlcnRMaW5rT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSByZWZlcmVuY2UgZm9yIHRoZSBsaW5rLlxuICAgKi9cbiAgbGluazogUmVmZXJlbmNlO1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIGZpbGUgY29udGFpbmluZyB0aGUgbGluay5cbiAgICovXG4gIG5ld1NvdXJjZVBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGQgcGF0aCBvZiB0aGUgbGluay5cbiAgICovXG4gIG9sZFNvdXJjZVBhdGhPckZpbGU/OiBQYXRoT3JGaWxlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGZvcmNlIG1hcmtkb3duIGxpbmtzLlxuICAgKi9cbiAgc2hvdWxkRm9yY2VNYXJrZG93bkxpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byB1cGRhdGUgZmlsZW5hbWUgYWxpYXMuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIHNob3VsZFVwZGF0ZUZpbGVuYW1lQWxpYXM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFdyYXBwZXIgZm9yIGRlZmF1bHQgb3B0aW9ucyBmb3IgZ2VuZXJhdGluZyBtYXJrZG93biBsaW5rcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZU1hcmtkb3duTGlua0RlZmF1bHRPcHRpb25zV3JhcHBlciB7XG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBvcHRpb25zIGZvciBnZW5lcmF0aW5nIG1hcmtkb3duIGxpbmtzLlxuICAgKi9cbiAgZGVmYXVsdE9wdGlvbnNGbjogKCkgPT4gUGFydGlhbDxHZW5lcmF0ZU1hcmtkb3duTGlua09wdGlvbnM+O1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGdlbmVyYXRpbmcgYSBtYXJrZG93biBsaW5rLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlTWFya2Rvd25MaW5rT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYWxpYXMgZm9yIHRoZSBsaW5rLlxuICAgKi9cbiAgYWxpYXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBhcHA6IEFwcDtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBsaW5rIHNob3VsZCBiZSBlbWJlZGRlZC4gSWYgbm90IHByb3ZpZGVkLCBpdCB3aWxsIGJlIGluZmVycmVkIGJhc2VkIG9uIHRoZSBmaWxlIHR5cGUuXG4gICAqL1xuICBpc0VtYmVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhbGxvdyBhbiBlbXB0eSBhbGlhcyBmb3IgZW1iZWRzLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAqL1xuICBpc0VtcHR5RW1iZWRBbGlhc0FsbG93ZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFsbG93IG5vbi1leGlzdGluZyBmaWxlcy4gSWYgYGZhbHNlYCBhbmQgYHBhdGhPckZpbGVgIGlzIGEgbm9uLWV4aXN0aW5nIGZpbGUsIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duLiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgKi9cbiAgaXNOb25FeGlzdGluZ0ZpbGVBbGxvd2VkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBsaW5rIHNob3VsZCBiZSBhIHdpa2lsaW5rLiBJZiBub3QgcHJvdmlkZWQsIGl0IHdpbGwgYmUgaW5mZXJyZWQgYmFzZWQgb24gdGhlIE9ic2lkaWFuIHNldHRpbmdzLlxuICAgKi9cbiAgaXNXaWtpbGluaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBvcmlnaW5hbCBsaW5rIHRleHQuIElmIHByb3ZpZGVkLCBpdCB3aWxsIGJlIHVzZWQgdG8gaW5mZXIgdGhlIHZhbHVlcyBvZiBgaXNFbWJlZGAsIGBpc1dpa2lsaW5rYCwgYHVzZUxlYWRpbmdEb3RgLCBhbmQgYHVzZUFuZ2xlQnJhY2tldHNgLlxuICAgKiBUaGVzZSBpbmZlcnJlZCB2YWx1ZXMgd2lsbCBiZSBvdmVycmlkZGVuIGJ5IGNvcnJlc3BvbmRpbmcgc2V0dGluZ3MgaWYgc3BlY2lmaWVkLlxuICAgKi9cbiAgb3JpZ2luYWxMaW5rPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGxpbmsgc2hvdWxkIGJlIHJlbGF0aXZlLiBJZiBub3QgcHJvdmlkZWQgb3IgYGZhbHNlYCwgaXQgd2lsbCBiZSBpbmZlcnJlZCBiYXNlZCBvbiB0aGUgT2JzaWRpYW4gc2V0dGluZ3MuXG4gICAqL1xuICBzaG91bGRGb3JjZVJlbGF0aXZlUGF0aD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgYXR0YWNobWVudCBleHRlbnNpb24gaW4gdGhlIGVtYmVkIGFsaWFzLiBIYXMgbm8gZWZmZWN0IGlmIGBhbGxvd0VtcHR5RW1iZWRBbGlhc2AgaXMgYHRydWVgLiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgKi9cbiAgc2hvdWxkSW5jbHVkZUF0dGFjaG1lbnRFeHRlbnNpb25Ub0VtYmVkQWxpYXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGxpbmsgc2hvdWxkIHVzZSBhbmdsZSBicmFja2V0cy4gRGVmYXVsdHMgdG8gYGZhbHNlYC4gSGFzIG5vIGVmZmVjdCBpZiBgaXNXaWtpbGlua2AgaXMgYHRydWVgXG4gICAqL1xuICBzaG91bGRVc2VBbmdsZUJyYWNrZXRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBsaW5rIHNob3VsZCB1c2UgYSBsZWFkaW5nIGRvdC4gRGVmYXVsdHMgdG8gYGZhbHNlYC4gSGFzIG5vIGVmZmVjdCBpZiBgaXNXaWtpbGlua2AgaXMgYHRydWVgIG9yIGBpc1JlbGF0aXZlYCBpcyBgZmFsc2VgLlxuICAgKi9cbiAgc2hvdWxkVXNlTGVhZGluZ0RvdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgcGF0aCBvZiB0aGUgbGluay5cbiAgICovXG4gIHNvdXJjZVBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBzdWJwYXRoIG9mIHRoZSBsaW5rLlxuICAgKi9cbiAgc3VicGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRhcmdldCBwYXRoIG9yIGZpbGUuXG4gICAqL1xuICB0YXJnZXRQYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIFRoZSByZXN1bHQgb2YgcGFyc2luZyBhIGxpbmsuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VMaW5rUmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBhbGlhcyBvZiB0aGUgbGluay5cbiAgICovXG4gIGFsaWFzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZW5jb2RlZCBVUkwgb2YgdGhlIGxpbmsuXG4gICAqL1xuICBlbmNvZGVkVXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGxpbmsgaGFzIGFuZ2xlIGJyYWNrZXRzLlxuICAgKi9cbiAgaGFzQW5nbGVCcmFja2V0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgbGluayBpcyBhbiBlbWJlZCBsaW5rLlxuICAgKi9cbiAgaXNFbWJlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBsaW5rIGlzIGV4dGVybmFsLlxuICAgKi9cbiAgaXNFeHRlcm5hbDogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBsaW5rIGlzIGEgd2lraWxpbmsuXG4gICAqL1xuICBpc1dpa2lsaW5rOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgdGl0bGUgb2YgdGhlIGxpbmsuXG4gICAqL1xuICB0aXRsZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFVSTCBvZiB0aGUgbGluay5cbiAgICovXG4gIHVybDogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGRldGVybWluaW5nIGlmIHRoZSBhbGlhcyBvZiBhIGxpbmsgc2hvdWxkIGJlIHJlc2V0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNob3VsZFJlc2V0QWxpYXNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGRpc3BsYXkgdGV4dCBvZiB0aGUgbGluay5cbiAgICovXG4gIGRpc3BsYXlUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgbGluayBpcyBhIHdpa2lsaW5rLlxuICAgKi9cbiAgaXNXaWtpbGluaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgcGF0aCBvZiB0aGUgbGluay5cbiAgICovXG4gIG5ld1NvdXJjZVBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGQgc291cmNlIGZpbGUgY29udGFpbmluZyB0aGUgbGluay5cbiAgICovXG4gIG9sZFNvdXJjZVBhdGhPckZpbGU/OiBQYXRoT3JGaWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgb2xkIHRhcmdldCBwYXRoIG9mIHRoZSBsaW5rLlxuICAgKi9cbiAgb2xkVGFyZ2V0UGF0aDogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogVGhlIHRhcmdldCBwYXRoIG9yIGZpbGUuXG4gICAqL1xuICB0YXJnZXRQYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIFNwbGl0cyBhIGxpbmsgaW50byBpdHMgbGluayBwYXRoIGFuZCBzdWJwYXRoLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwbGl0U3VicGF0aFJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgbGluayBwYXRoLlxuICAgKi9cbiAgbGlua1BhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN1YnBhdGguXG4gICAqL1xuICBzdWJwYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdXBkYXRpbmcgYSBsaW5rLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZUxpbmtPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIHJlZmVyZW5jZSBmb3IgdGhlIGxpbmsuXG4gICAqL1xuICBsaW5rOiBSZWZlcmVuY2U7XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgZmlsZSBjb250YWluaW5nIHRoZSBsaW5rLlxuICAgKi9cbiAgbmV3U291cmNlUGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogVGhlIGZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBsaW5rLlxuICAgKi9cbiAgbmV3VGFyZ2V0UGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogVGhlIG9sZCBzb3VyY2UgZmlsZSBjb250YWluaW5nIHRoZSBsaW5rLlxuICAgKi9cbiAgb2xkU291cmNlUGF0aE9yRmlsZT86IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGQgcGF0aCBvZiB0aGUgZmlsZS5cbiAgICovXG4gIG9sZFRhcmdldFBhdGhPckZpbGU/OiBQYXRoT3JGaWxlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGZvcmNlIG1hcmtkb3duIGxpbmtzLlxuICAgKi9cbiAgc2hvdWxkRm9yY2VNYXJrZG93bkxpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byB1cGRhdGUgZmlsZW5hbWUgYWxpYXMuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIHNob3VsZFVwZGF0ZUZpbGVuYW1lQWxpYXM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHVwZGF0aW5nIGxpbmtzIGluIGEgZmlsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVMaW5rc0luRmlsZU9wdGlvbnMgZXh0ZW5kcyBQcm9jZXNzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgb2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBmaWxlIHRvIHVwZGF0ZSB0aGUgbGlua3MgaW4uXG4gICAqL1xuICBuZXdTb3VyY2VQYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgb2xkIHBhdGggb2YgdGhlIGZpbGUuXG4gICAqL1xuICBvbGRTb3VyY2VQYXRoT3JGaWxlPzogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBmb3JjZSB0aGUgbGlua3MgdG8gYmUgaW4gTWFya2Rvd24gZm9ybWF0LlxuICAgKi9cbiAgc2hvdWxkRm9yY2VNYXJrZG93bkxpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byB1cGRhdGUgb25seSBlbWJlZGRlZCBsaW5rcy5cbiAgICovXG4gIHNob3VsZFVwZGF0ZUVtYmVkT25seUxpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byB1cGRhdGUgZmlsZW5hbWUgYWxpYXMuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIHNob3VsZFVwZGF0ZUZpbGVuYW1lQWxpYXM/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgTGlua0NvbmZpZyB7XG4gIGlzRW1iZWQ6IGJvb2xlYW47XG4gIGlzV2lraWxpbms6IGJvb2xlYW47XG4gIHNob3VsZEZvcmNlUmVsYXRpdmVQYXRoOiBib29sZWFuO1xuICBzaG91bGRVc2VBbmdsZUJyYWNrZXRzOiBib29sZWFuO1xuICBzaG91bGRVc2VMZWFkaW5nRG90OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgVGFibGVQb3NpdGlvbiB7XG4gIGVuZDogbnVtYmVyO1xuICBzdGFydDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSBvcHRpb25zIGZvciB1cGRhdGluZyB0aGUgbGlua3MgaW4gYSBjb250ZW50IHN0cmluZy5cbiAqL1xuaW50ZXJmYWNlIFVwZGF0ZUxpbmtzSW5Db250ZW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgdG8gdXBkYXRlIHRoZSBsaW5rcyBpbi5cbiAgICovXG4gIGNvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5ldyBzb3VyY2UgcGF0aCBvciBmaWxlLlxuICAgKi9cbiAgbmV3U291cmNlUGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogVGhlIG9sZCBzb3VyY2UgcGF0aCBvciBmaWxlLlxuICAgKi9cbiAgb2xkU291cmNlUGF0aE9yRmlsZT86IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZm9yY2UgbWFya2Rvd24gbGlua3MuXG4gICAqL1xuICBzaG91bGRGb3JjZU1hcmtkb3duTGlua3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHVwZGF0ZSBvbmx5IGVtYmVkZGVkIGxpbmtzLlxuICAgKi9cbiAgc2hvdWxkVXBkYXRlRW1iZWRPbmx5TGlua3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHVwZGF0ZSBmaWxlbmFtZSBhbGlhcy5cbiAgICovXG4gIHNob3VsZFVwZGF0ZUZpbGVuYW1lQWxpYXM/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgV2lraUxpbmtOb2RlIHtcbiAgZGF0YToge1xuICAgIGFsaWFzOiBzdHJpbmc7XG4gIH07XG4gIHZhbHVlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBsaW5rIHRvIGEgbmV3IHBhdGguXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgY29udmVydGluZyB0aGUgbGluay5cbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgbGluay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRMaW5rKG9wdGlvbnM6IENvbnZlcnRMaW5rT3B0aW9ucyk6IHN0cmluZyB7XG4gIGNvbnN0IHRhcmdldEZpbGUgPSBleHRyYWN0TGlua0ZpbGUob3B0aW9ucy5hcHAsIG9wdGlvbnMubGluaywgb3B0aW9ucy5vbGRTb3VyY2VQYXRoT3JGaWxlID8/IG9wdGlvbnMubmV3U291cmNlUGF0aE9yRmlsZSk7XG4gIGlmICghdGFyZ2V0RmlsZSkge1xuICAgIHJldHVybiBvcHRpb25zLmxpbmsub3JpZ2luYWw7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlTGluayhub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8VXBkYXRlTGlua09wdGlvbnM+KHtcbiAgICBhcHA6IG9wdGlvbnMuYXBwLFxuICAgIGxpbms6IG9wdGlvbnMubGluayxcbiAgICBuZXdTb3VyY2VQYXRoT3JGaWxlOiBvcHRpb25zLm5ld1NvdXJjZVBhdGhPckZpbGUsXG4gICAgbmV3VGFyZ2V0UGF0aE9yRmlsZTogdGFyZ2V0RmlsZSxcbiAgICBvbGRTb3VyY2VQYXRoT3JGaWxlOiBvcHRpb25zLm9sZFNvdXJjZVBhdGhPckZpbGUsXG4gICAgc2hvdWxkRm9yY2VNYXJrZG93bkxpbmtzOiBvcHRpb25zLnNob3VsZEZvcmNlTWFya2Rvd25MaW5rcyxcbiAgICBzaG91bGRVcGRhdGVGaWxlbmFtZUFsaWFzOiBvcHRpb25zLnNob3VsZFVwZGF0ZUZpbGVuYW1lQWxpYXNcbiAgfSkpO1xufVxuXG4vKipcbiAqIEVkaXRzIHRoZSBiYWNrbGlua3MgZm9yIGEgZmlsZSBvciBwYXRoLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgdG8gZWRpdCB0aGUgYmFja2xpbmtzIGZvci5cbiAqIEBwYXJhbSBsaW5rQ29udmVydGVyIC0gVGhlIGZ1bmN0aW9uIHRoYXQgY29udmVydHMgZWFjaCBsaW5rLlxuICogQHBhcmFtIHByb2Nlc3NPcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyBmb3IgcmV0cnlpbmcgdGhlIG9wZXJhdGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgYmFja2xpbmtzIGhhdmUgYmVlbiBlZGl0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlZGl0QmFja2xpbmtzKFxuICBhcHA6IEFwcCxcbiAgcGF0aE9yRmlsZTogUGF0aE9yRmlsZSxcbiAgbGlua0NvbnZlcnRlcjogKGxpbms6IFJlZmVyZW5jZSkgPT4gUHJvbWlzYWJsZTxNYXliZVJldHVybjxzdHJpbmc+PixcbiAgcHJvY2Vzc09wdGlvbnM6IFByb2Nlc3NPcHRpb25zID0ge31cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBiYWNrbGlua3MgPSBhd2FpdCBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZShhcHAsIHBhdGhPckZpbGUsIHByb2Nlc3NPcHRpb25zKTtcbiAgZm9yIChjb25zdCBiYWNrbGlua05vdGVQYXRoIG9mIGJhY2tsaW5rcy5rZXlzKCkpIHtcbiAgICBjb25zdCBjdXJyZW50TGlua3MgPSBiYWNrbGlua3MuZ2V0KGJhY2tsaW5rTm90ZVBhdGgpID8/IFtdO1xuICAgIGNvbnN0IGxpbmtKc29ucyA9IG5ldyBTZXQ8c3RyaW5nPihjdXJyZW50TGlua3MubWFwKChsaW5rKSA9PiB0b0pzb24obGluaykpKTtcbiAgICBhd2FpdCBlZGl0TGlua3MoYXBwLCBiYWNrbGlua05vdGVQYXRoLCAobGluaykgPT4ge1xuICAgICAgY29uc3QgbGlua0pzb24gPSB0b0pzb24obGluayk7XG4gICAgICBpZiAoIWxpbmtKc29ucy5oYXMobGlua0pzb24pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxpbmtDb252ZXJ0ZXIobGluayk7XG4gICAgfSwgcHJvY2Vzc09wdGlvbnMpO1xuICB9XG59XG5cbi8qKlxuICogRWRpdHMgdGhlIGJhY2tsaW5rcyBmb3IgYSBmaWxlIG9yIHBhdGguXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSB0byBlZGl0IHRoZSBiYWNrbGlua3MgZm9yLlxuICogQHBhcmFtIGxpbmtDb252ZXJ0ZXIgLSBUaGUgZnVuY3Rpb24gdGhhdCBjb252ZXJ0cyBlYWNoIGxpbmsuXG4gKiBAcGFyYW0gcHJvY2Vzc09wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIGZvciByZXRyeWluZyB0aGUgb3BlcmF0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBiYWNrbGlua3MgaGF2ZSBiZWVuIGVkaXRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVkaXRMaW5rcyhcbiAgYXBwOiBBcHAsXG4gIHBhdGhPckZpbGU6IFBhdGhPckZpbGUsXG4gIGxpbmtDb252ZXJ0ZXI6IChsaW5rOiBSZWZlcmVuY2UpID0+IFByb21pc2FibGU8TWF5YmVSZXR1cm48c3RyaW5nPj4sXG4gIHByb2Nlc3NPcHRpb25zOiBQcm9jZXNzT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgYXBwbHlGaWxlQ2hhbmdlcyhhcHAsIHBhdGhPckZpbGUsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjYWNoZSA9IGF3YWl0IGdldENhY2hlU2FmZShhcHAsIHBhdGhPckZpbGUpO1xuICAgIHJldHVybiBhd2FpdCBnZXRGaWxlQ2hhbmdlcyhjYWNoZSwgaXNDYW52YXNGaWxlKGFwcCwgcGF0aE9yRmlsZSksIGxpbmtDb252ZXJ0ZXIpO1xuICB9LCBwcm9jZXNzT3B0aW9ucyk7XG59XG5cbi8qKlxuICogRWRpdHMgdGhlIGxpbmtzIGluIGEgY29udGVudCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBjb250ZW50IC0gVGhlIGNvbnRlbnQgdG8gZWRpdCB0aGUgbGlua3MgaW4uXG4gKiBAcGFyYW0gbGlua0NvbnZlcnRlciAtIFRoZSBmdW5jdGlvbiB0aGF0IGNvbnZlcnRzIGVhY2ggbGluay5cbiAqIEByZXR1cm5zIFRoZSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHVwZGF0ZWQgY29udGVudC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVkaXRMaW5rc0luQ29udGVudChcbiAgYXBwOiBBcHAsXG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgbGlua0NvbnZlcnRlcjogKGxpbms6IFJlZmVyZW5jZSkgPT4gUHJvbWlzYWJsZTxNYXliZVJldHVybjxzdHJpbmc+PlxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgbmV3Q29udGVudCA9IGF3YWl0IGFwcGx5Q29udGVudENoYW5nZXMoY29udGVudCwgJycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjYWNoZSA9IGF3YWl0IHBhcnNlTWV0YWRhdGEoYXBwLCBjb250ZW50KTtcbiAgICByZXR1cm4gYXdhaXQgZ2V0RmlsZUNoYW5nZXMoY2FjaGUsIGZhbHNlLCBsaW5rQ29udmVydGVyKTtcbiAgfSk7XG5cbiAgaWYgKG5ld0NvbnRlbnQgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byB1cGRhdGUgbGlua3MgaW4gY29udGVudCcpO1xuICB9XG5cbiAgcmV0dXJuIG5ld0NvbnRlbnQ7XG59XG5cbi8qKlxuICogRW5jb2RlcyBhIFVSTC5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gVGhlIFVSTCB0byBlbmNvZGUuXG4gKiBAcmV0dXJucyBUaGUgZW5jb2RlZCBVUkwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmVwbGFjZUFsbCh1cmwsIFNQRUNJQUxfTElOS19TWU1CT0xTX1JFR0VYUCwgKHsgc3Vic3RyaW5nOiBzcGVjaWFsTGlua1N5bWJvbCB9KSA9PiBlbmNvZGVVUklDb21wb25lbnQoc3BlY2lhbExpbmtTeW1ib2wpKTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgZmlsZSBhc3NvY2lhdGVkIHdpdGggYSBsaW5rLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gbGluayAtIFRoZSByZWZlcmVuY2UgY2FjaGUgZm9yIHRoZSBsaW5rLlxuICogQHBhcmFtIHNvdXJjZVBhdGhPckZpbGUgLSBUaGUgc291cmNlIHBhdGggb3IgZmlsZS5cbiAqIEByZXR1cm5zIFRoZSBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGluaywgb3IgbnVsbCBpZiBub3QgZm91bmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0TGlua0ZpbGUoYXBwOiBBcHAsIGxpbms6IFJlZmVyZW5jZSwgc291cmNlUGF0aE9yRmlsZTogUGF0aE9yRmlsZSk6IG51bGwgfCBURmlsZSB7XG4gIGNvbnN0IHsgbGlua1BhdGggfSA9IHNwbGl0U3VicGF0aChsaW5rLmxpbmspO1xuICByZXR1cm4gYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0Rmlyc3RMaW5rcGF0aERlc3QobGlua1BhdGgsIGdldFBhdGgoYXBwLCBzb3VyY2VQYXRoT3JGaWxlKSk7XG59XG5cbi8qKlxuICogRml4ZXMgdGhlIGZyb250bWF0dGVyIG1hcmtkb3duIGxpbmtzIGluIHRoZSBwcm92aWRlZCBtZXRhZGF0YSBjYWNoZS5cbiAqXG4gKiBAcGFyYW0gY2FjaGUgLSBUaGUgbWV0YWRhdGEgY2FjaGUgdG8gZml4IHRoZSBmcm9udG1hdHRlciBtYXJrZG93biBsaW5rcyBpbi5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGZyb250bWF0dGVyIG1hcmtkb3duIGxpbmtzIHdlcmUgZml4ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaXhGcm9udG1hdHRlck1hcmtkb3duTGlua3MoY2FjaGU6IENhY2hlZE1ldGFkYXRhKTogYm9vbGVhbiB7XG4gIHJldHVybiBfZml4RnJvbnRtYXR0ZXJNYXJrZG93bkxpbmtzKGNhY2hlLmZyb250bWF0dGVyLCAnJywgY2FjaGUpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIG1hcmtkb3duIGxpbmsgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHBhcmFtZXRlcnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgZ2VuZXJhdGluZyB0aGUgbWFya2Rvd24gbGluay5cbiAqIEByZXR1cm5zIFRoZSBnZW5lcmF0ZWQgbWFya2Rvd24gbGluay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlTWFya2Rvd25MaW5rKG9wdGlvbnM6IEdlbmVyYXRlTWFya2Rvd25MaW5rT3B0aW9ucyk6IHN0cmluZyB7XG4gIGNvbnN0IHsgYXBwIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IGNvbmZpZ3VyYWJsZURlZmF1bHRPcHRpb25zRm4gPSAoYXBwLmZpbGVNYW5hZ2VyLmdlbmVyYXRlTWFya2Rvd25MaW5rIGFzIFBhcnRpYWw8R2VuZXJhdGVNYXJrZG93bkxpbmtEZWZhdWx0T3B0aW9uc1dyYXBwZXI+KS5kZWZhdWx0T3B0aW9uc0ZuXG4gICAgPz8gKCgpOiBQYXJ0aWFsPEdlbmVyYXRlTWFya2Rvd25MaW5rT3B0aW9ucz4gPT4gKHt9KSk7XG4gIGNvbnN0IGNvbmZpZ3VyYWJsZURlZmF1bHRPcHRpb25zID0gY29uZmlndXJhYmxlRGVmYXVsdE9wdGlvbnNGbigpO1xuXG4gIGNvbnN0IERFRkFVTFRfT1BUSU9OUzogUGFydGlhbDxHZW5lcmF0ZU1hcmtkb3duTGlua09wdGlvbnM+ID0ge1xuICAgIGlzRW1wdHlFbWJlZEFsaWFzQWxsb3dlZDogdHJ1ZVxuICB9O1xuXG4gIG9wdGlvbnMgPSB7IC4uLkRFRkFVTFRfT1BUSU9OUywgLi4uY29uZmlndXJhYmxlRGVmYXVsdE9wdGlvbnMsIC4uLm9wdGlvbnMgfTtcblxuICBjb25zdCB0YXJnZXRGaWxlID0gZ2V0RmlsZShhcHAsIG9wdGlvbnMudGFyZ2V0UGF0aE9yRmlsZSwgb3B0aW9ucy5pc05vbkV4aXN0aW5nRmlsZUFsbG93ZWQpO1xuXG4gIHJldHVybiB0ZW1wUmVnaXN0ZXJGaWxlQW5kUnVuKGFwcCwgdGFyZ2V0RmlsZSwgKCkgPT4gZ2VuZXJhdGVNYXJrZG93bkxpbmtJbXBsKG9wdGlvbnMpKTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYSBsaW5rIGludG8gaXRzIGNvbXBvbmVudHMuXG4gKlxuICogQHBhcmFtIHN0ciAtIFRoZSBsaW5rIHRvIHBhcnNlLlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBsaW5rLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VMaW5rKHN0cjogc3RyaW5nKTogbnVsbCB8IFBhcnNlTGlua1Jlc3VsdCB7XG4gIGNvbnN0IHJlc3VsdCA9IHBhcnNlTGlua1VybChzdHIpO1xuICBpZiAocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGNvbnN0IEVNQkVEX1BSRUZJWCA9ICchJztcblxuICBjb25zdCBpc0VtYmVkID0gc3RyLnN0YXJ0c1dpdGgoRU1CRURfUFJFRklYKTtcbiAgaWYgKGlzRW1iZWQpIHtcbiAgICBzdHIgPSB0cmltU3RhcnQoc3RyLCBFTUJFRF9QUkVGSVgpO1xuICB9XG4gIGNvbnN0IHByb2Nlc3NvciA9IHJlbWFyaygpLnVzZShyZW1hcmtQYXJzZSkudXNlKHdpa2lMaW5rUGx1Z2luLCB7IGFsaWFzRGl2aWRlcjogV0lLSUxJTktfRElWSURFUiB9KTtcbiAgY29uc3Qgcm9vdCA9IHByb2Nlc3Nvci5wYXJzZShzdHIpO1xuXG4gIGlmIChyb290LmNoaWxkcmVuLmxlbmd0aCAhPT0gMSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgcGFyYWdyYXBoID0gcm9vdC5jaGlsZHJlblswXTtcblxuICBpZiAocGFyYWdyYXBoPy50eXBlICE9PSAncGFyYWdyYXBoJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHBhcmFncmFwaC5jaGlsZHJlbi5sZW5ndGggIT09IDEpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG5vZGUgPSBwYXJhZ3JhcGguY2hpbGRyZW5bMF07XG5cbiAgaWYgKG5vZGU/LnBvc2l0aW9uPy5zdGFydC5vZmZzZXQgIT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChub2RlLnBvc2l0aW9uLmVuZC5vZmZzZXQgIT09IHN0ci5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN3aXRjaCAobm9kZS50eXBlIGFzIHN0cmluZykge1xuICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgcmV0dXJuIHBhcnNlTGlua05vZGUobm9kZSBhcyBMaW5rLCBzdHIsIGlzRW1iZWQpO1xuICAgIGNhc2UgJ3dpa2lMaW5rJzpcbiAgICAgIHJldHVybiBwYXJzZVdpa2lsaW5rTm9kZShub2RlIGFzIHVua25vd24gYXMgV2lraUxpbmtOb2RlLCBzdHIsIGlzRW1iZWQpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGFsaWFzIG9mIGEgbGluayBzaG91bGQgYmUgcmVzZXQuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgZGV0ZXJtaW5pbmcgaWYgdGhlIGFsaWFzIHNob3VsZCBiZSByZXNldC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFsaWFzIHNob3VsZCBiZSByZXNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZFJlc2V0QWxpYXMob3B0aW9uczogU2hvdWxkUmVzZXRBbGlhc09wdGlvbnMpOiBib29sZWFuIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBkaXNwbGF5VGV4dCxcbiAgICBpc1dpa2lsaW5rLFxuICAgIG5ld1NvdXJjZVBhdGhPckZpbGUsXG4gICAgb2xkU291cmNlUGF0aE9yRmlsZSxcbiAgICBvbGRUYXJnZXRQYXRoLFxuICAgIHRhcmdldFBhdGhPckZpbGVcbiAgfSA9IG9wdGlvbnM7XG4gIGlmIChpc1dpa2lsaW5rID09PSBmYWxzZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghZGlzcGxheVRleHQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IHRhcmdldEZpbGUgPSBnZXRGaWxlKGFwcCwgdGFyZ2V0UGF0aE9yRmlsZSwgdHJ1ZSk7XG4gIGNvbnN0IG5ld1NvdXJjZVBhdGggPSBnZXRQYXRoKGFwcCwgbmV3U291cmNlUGF0aE9yRmlsZSk7XG4gIGNvbnN0IG9sZFNvdXJjZVBhdGggPSBnZXRQYXRoKGFwcCwgb2xkU291cmNlUGF0aE9yRmlsZSA/PyBuZXdTb3VyY2VQYXRoT3JGaWxlKTtcbiAgY29uc3QgbmV3U291cmNlRm9sZGVyID0gZGlybmFtZShuZXdTb3VyY2VQYXRoKTtcbiAgY29uc3Qgb2xkU291cmNlRm9sZGVyID0gZGlybmFtZShvbGRTb3VyY2VQYXRoKTtcbiAgY29uc3QgYWxpYXNlc1RvUmVzZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBmb3IgKGNvbnN0IHBhdGhPckZpbGUgb2YgW3RhcmdldEZpbGUucGF0aCwgb2xkVGFyZ2V0UGF0aF0pIHtcbiAgICBpZiAoIXBhdGhPckZpbGUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHBhdGggPSBnZXRQYXRoKGFwcCwgcGF0aE9yRmlsZSk7XG4gICAgYWxpYXNlc1RvUmVzZXQuYWRkKHBhdGgpO1xuICAgIGFsaWFzZXNUb1Jlc2V0LmFkZChiYXNlbmFtZShwYXRoKSk7XG4gICAgYWxpYXNlc1RvUmVzZXQuYWRkKHJlbGF0aXZlKG5ld1NvdXJjZUZvbGRlciwgcGF0aCkpO1xuICAgIGFsaWFzZXNUb1Jlc2V0LmFkZChyZWxhdGl2ZShvbGRTb3VyY2VGb2xkZXIsIHBhdGgpKTtcbiAgfVxuXG4gIGZvciAoY29uc3Qgc291cmNlUGF0aCBvZiBbb2xkU291cmNlUGF0aCwgbmV3U291cmNlUGF0aF0pIHtcbiAgICBhbGlhc2VzVG9SZXNldC5hZGQoYXBwLm1ldGFkYXRhQ2FjaGUuZmlsZVRvTGlua3RleHQodGFyZ2V0RmlsZSwgc291cmNlUGF0aCwgZmFsc2UpKTtcbiAgfVxuXG4gIGNvbnN0IGNsZWFuRGlzcGxheVRleHQgPSByZXBsYWNlQWxsKG5vcm1hbGl6ZVBhdGgoZGlzcGxheVRleHQuc3BsaXQoJyA+ICcpWzBdID8/ICcnKSwgL15cXC5cXC8vZywgJycpLnRvTG93ZXJDYXNlKCk7XG5cbiAgZm9yIChjb25zdCBhbGlhcyBvZiBhbGlhc2VzVG9SZXNldCkge1xuICAgIGlmIChhbGlhcy50b0xvd2VyQ2FzZSgpID09PSBjbGVhbkRpc3BsYXlUZXh0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBmb2xkZXIgPSBkaXJuYW1lKGFsaWFzKTtcbiAgICBjb25zdCBiYXNlID0gYmFzZW5hbWUoYWxpYXMsIGV4dG5hbWUoYWxpYXMpKTtcbiAgICBpZiAoam9pbihmb2xkZXIsIGJhc2UpLnRvTG93ZXJDYXNlKCkgPT09IGNsZWFuRGlzcGxheVRleHQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBTcGxpdHMgYSBsaW5rIGludG8gaXRzIGxpbmsgcGF0aCBhbmQgc3VicGF0aC5cbiAqXG4gKiBAcGFyYW0gbGluayAtIFRoZSBsaW5rIHRvIHNwbGl0LlxuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGxpbmsgcGF0aCBhbmQgc3VicGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0U3VicGF0aChsaW5rOiBzdHJpbmcpOiBTcGxpdFN1YnBhdGhSZXN1bHQge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZUxpbmt0ZXh0KG5vcm1hbGl6ZShsaW5rKSk7XG4gIHJldHVybiB7XG4gICAgbGlua1BhdGg6IHBhcnNlZC5wYXRoLFxuICAgIHN1YnBhdGg6IHBhcnNlZC5zdWJwYXRoXG4gIH07XG59XG5cbi8qKlxuICogVGVzdHMgd2hldGhlciBhIGxpbmsgdXNlcyBhbmdsZSBicmFja2V0cywgcG9zc2libHkgZW1iZWQ6XG4gKiBgW3RpdGxlXSg8bGluaz4pYCwgYCFbdGl0bGVdKDxsaW5rPilgLlxuICpcbiAqIEBwYXJhbSBsaW5rIC0gTGluayB0byB0ZXN0XG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBsaW5rIHVzZXMgYW5nbGUgYnJhY2tldHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRlc3RBbmdsZUJyYWNrZXRzKGxpbms6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBwYXJzZUxpbmtSZXN1bHQgPSBwYXJzZUxpbmsobGluayk7XG4gIHJldHVybiBwYXJzZUxpbmtSZXN1bHQ/Lmhhc0FuZ2xlQnJhY2tldHMgPz8gZmFsc2U7XG59XG5cbi8qKlxuICogVGVzdHMgd2hldGhlciBhIGxpbmsgaXMgYW4gZW1iZWQgbGluazpcbiAqIGAhW1tsaW5rXV1gLCBgIVt0aXRsZV0obGluaylgLlxuICpcbiAqIEBwYXJhbSBsaW5rIC0gTGluayB0byB0ZXN0XG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBsaW5rIGlzIGFuIGVtYmVkIGxpbmtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRlc3RFbWJlZChsaW5rOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgcGFyc2VMaW5rUmVzdWx0ID0gcGFyc2VMaW5rKGxpbmspO1xuICByZXR1cm4gcGFyc2VMaW5rUmVzdWx0Py5pc0VtYmVkID8/IGZhbHNlO1xufVxuXG4vKipcbiAqIFRlc3RzIHdoZXRoZXIgYSBsaW5rIGhhcyBhIGxlYWRpbmcgZG90LCBwb3NzaWJseSBlbWJlZDpcbiAqIGBbWy4vbGlua11dYCwgYFt0aXRsZV0oLi9saW5rKWAsIGBbdGl0bGVdKDwuL2xpbms+KWAsXG4gKiBgIVtbLi9saW5rXV1gLCBgIVt0aXRsZV0oLi9saW5rKWAsIGAhW3RpdGxlXSg8Li9saW5rPilgLlxuICpcbiAqIEBwYXJhbSBsaW5rIC0gTGluayB0byB0ZXN0XG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBsaW5rIGhhcyBhIGxlYWRpbmcgZG90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0TGVhZGluZ0RvdChsaW5rOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgcGFyc2VMaW5rUmVzdWx0ID0gcGFyc2VMaW5rKGxpbmspO1xuICByZXR1cm4gcGFyc2VMaW5rUmVzdWx0Py51cmwuc3RhcnRzV2l0aCgnLi8nKSA/PyBmYWxzZTtcbn1cblxuLyoqXG4gKiBUZXN0cyB3aGV0aGVyIGEgbGluayBpcyBhIHdpa2lsaW5rLCBwb3NzaWJseSBlbWJlZDpcbiAqIGBbW2xpbmtdXWAsIGAhW1tsaW5rXV1gLlxuICpcbiAqIEBwYXJhbSBsaW5rIC0gTGluayB0byB0ZXN0XG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBsaW5rIGlzIGEgd2lraWxpbmtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRlc3RXaWtpbGluayhsaW5rOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgcGFyc2VMaW5rUmVzdWx0ID0gcGFyc2VMaW5rKGxpbmspO1xuICByZXR1cm4gcGFyc2VMaW5rUmVzdWx0Py5pc1dpa2lsaW5rID8/IGZhbHNlO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgYSBsaW5rIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHVwZGF0aW5nIHRoZSBsaW5rLlxuICogQHJldHVybnMgVGhlIHVwZGF0ZWQgbGluay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUxpbmsob3B0aW9uczogVXBkYXRlTGlua09wdGlvbnMpOiBzdHJpbmcge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGxpbmssXG4gICAgbmV3U291cmNlUGF0aE9yRmlsZSxcbiAgICBuZXdUYXJnZXRQYXRoT3JGaWxlLFxuICAgIG9sZFNvdXJjZVBhdGhPckZpbGUsXG4gICAgb2xkVGFyZ2V0UGF0aE9yRmlsZSxcbiAgICBzaG91bGRGb3JjZU1hcmtkb3duTGlua3MsXG4gICAgc2hvdWxkVXBkYXRlRmlsZW5hbWVBbGlhc1xuICB9ID0gb3B0aW9ucztcbiAgaWYgKCFuZXdUYXJnZXRQYXRoT3JGaWxlKSB7XG4gICAgcmV0dXJuIGxpbmsub3JpZ2luYWw7XG4gIH1cbiAgY29uc3QgdGFyZ2V0RmlsZSA9IGdldEZpbGUoYXBwLCBuZXdUYXJnZXRQYXRoT3JGaWxlLCB0cnVlKTtcbiAgY29uc3Qgb2xkVGFyZ2V0UGF0aCA9IGdldFBhdGgoYXBwLCBvbGRUYXJnZXRQYXRoT3JGaWxlID8/IG5ld1RhcmdldFBhdGhPckZpbGUpO1xuICBjb25zdCBpc1dpa2lsaW5rID0gdGVzdFdpa2lsaW5rKGxpbmsub3JpZ2luYWwpICYmIHNob3VsZEZvcmNlTWFya2Rvd25MaW5rcyAhPT0gdHJ1ZTtcbiAgY29uc3QgeyBzdWJwYXRoIH0gPSBzcGxpdFN1YnBhdGgobGluay5saW5rKTtcbiAgbGV0IHNob3VsZEtlZXBBbGlhcyA9ICFzaG91bGRVcGRhdGVGaWxlbmFtZUFsaWFzO1xuXG4gIGlmIChpc0NhbnZhc0ZpbGUoYXBwLCBuZXdTb3VyY2VQYXRoT3JGaWxlKSkge1xuICAgIGlmIChpc0NhbnZhc0ZpbGVOb2RlUmVmZXJlbmNlKGxpbmspKSB7XG4gICAgICByZXR1cm4gdGFyZ2V0RmlsZS5wYXRoICsgc3VicGF0aDtcbiAgICB9XG4gIH1cblxuICBsZXQgYWxpYXM6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBpZiAoaXNXaWtpbGluaykge1xuICAgIGNvbnN0IHBhcnNlTGlua1Jlc3VsdCA9IHBhcnNlTGluayhsaW5rLm9yaWdpbmFsKTtcbiAgICBpZiAocGFyc2VMaW5rUmVzdWx0Py5hbGlhcykge1xuICAgICAgYWxpYXMgPSBwYXJzZUxpbmtSZXN1bHQuYWxpYXM7XG4gICAgICBzaG91bGRLZWVwQWxpYXMgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGFsaWFzID8/PSBzaG91bGRSZXNldEFsaWFzKG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxTaG91bGRSZXNldEFsaWFzT3B0aW9ucz4oe1xuICAgICAgYXBwLFxuICAgICAgZGlzcGxheVRleHQ6IGxpbmsuZGlzcGxheVRleHQsXG4gICAgICBpc1dpa2lsaW5rLFxuICAgICAgbmV3U291cmNlUGF0aE9yRmlsZSxcbiAgICAgIG9sZFNvdXJjZVBhdGhPckZpbGUsXG4gICAgICBvbGRUYXJnZXRQYXRoLFxuICAgICAgdGFyZ2V0UGF0aE9yRmlsZTogdGFyZ2V0RmlsZVxuICAgIH0pKVxuICAgID8gdW5kZWZpbmVkXG4gICAgOiBsaW5rLmRpc3BsYXlUZXh0O1xuXG4gIGlmICghc2hvdWxkS2VlcEFsaWFzKSB7XG4gICAgaWYgKGFsaWFzID09PSBiYXNlbmFtZShvbGRUYXJnZXRQYXRoLCBleHRuYW1lKG9sZFRhcmdldFBhdGgpKSkge1xuICAgICAgYWxpYXMgPSB0YXJnZXRGaWxlLmJhc2VuYW1lO1xuICAgIH0gZWxzZSBpZiAoYWxpYXMgPT09IGJhc2VuYW1lKG9sZFRhcmdldFBhdGgpKSB7XG4gICAgICBhbGlhcyA9IHRhcmdldEZpbGUubmFtZTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBuZXdMaW5rID0gZ2VuZXJhdGVNYXJrZG93bkxpbmsobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPEdlbmVyYXRlTWFya2Rvd25MaW5rT3B0aW9ucz4oe1xuICAgIGFsaWFzLFxuICAgIGFwcCxcbiAgICBpc1dpa2lsaW5rOiBzaG91bGRGb3JjZU1hcmtkb3duTGlua3MgPyBmYWxzZSA6IHVuZGVmaW5lZCxcbiAgICBvcmlnaW5hbExpbms6IGxpbmsub3JpZ2luYWwsXG4gICAgc291cmNlUGF0aE9yRmlsZTogbmV3U291cmNlUGF0aE9yRmlsZSxcbiAgICBzdWJwYXRoLFxuICAgIHRhcmdldFBhdGhPckZpbGU6IHRhcmdldEZpbGVcbiAgfSkpO1xuICByZXR1cm4gbmV3TGluaztcbn1cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBsaW5rcyBpbiBhIGNvbnRlbnQgc3RyaW5nIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHVwZGF0aW5nIHRoZSBsaW5rcy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGNvbnRlbnQgd2l0aCB1cGRhdGVkIGxpbmtzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlTGlua3NJbkNvbnRlbnQob3B0aW9uczogVXBkYXRlTGlua3NJbkNvbnRlbnRPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBjb250ZW50LFxuICAgIG5ld1NvdXJjZVBhdGhPckZpbGUsXG4gICAgb2xkU291cmNlUGF0aE9yRmlsZSxcbiAgICBzaG91bGRGb3JjZU1hcmtkb3duTGlua3MsXG4gICAgc2hvdWxkVXBkYXRlRW1iZWRPbmx5TGlua3MsXG4gICAgc2hvdWxkVXBkYXRlRmlsZW5hbWVBbGlhc1xuICB9ID0gb3B0aW9ucztcblxuICByZXR1cm4gYXdhaXQgZWRpdExpbmtzSW5Db250ZW50KGFwcCwgY29udGVudCwgKGxpbmspID0+IHtcbiAgICBjb25zdCBpc0VtYmVkTGluayA9IHRlc3RFbWJlZChsaW5rLm9yaWdpbmFsKTtcbiAgICBpZiAoc2hvdWxkVXBkYXRlRW1iZWRPbmx5TGlua3MgIT09IHVuZGVmaW5lZCAmJiBzaG91bGRVcGRhdGVFbWJlZE9ubHlMaW5rcyAhPT0gaXNFbWJlZExpbmspIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnZlcnRMaW5rKG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxDb252ZXJ0TGlua09wdGlvbnM+KHtcbiAgICAgIGFwcCxcbiAgICAgIGxpbmssXG4gICAgICBuZXdTb3VyY2VQYXRoT3JGaWxlLFxuICAgICAgb2xkU291cmNlUGF0aE9yRmlsZSxcbiAgICAgIHNob3VsZEZvcmNlTWFya2Rvd25MaW5rcyxcbiAgICAgIHNob3VsZFVwZGF0ZUZpbGVuYW1lQWxpYXNcbiAgICB9KSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGxpbmtzIGluIGEgZmlsZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcGFyYW1ldGVycy5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB1cGRhdGluZyB0aGUgbGlua3MuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGxpbmtzIGFyZSB1cGRhdGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlTGlua3NJbkZpbGUob3B0aW9uczogVXBkYXRlTGlua3NJbkZpbGVPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgbmV3U291cmNlUGF0aE9yRmlsZSxcbiAgICBvbGRTb3VyY2VQYXRoT3JGaWxlLFxuICAgIHNob3VsZEZvcmNlTWFya2Rvd25MaW5rcyxcbiAgICBzaG91bGRVcGRhdGVFbWJlZE9ubHlMaW5rcyxcbiAgICBzaG91bGRVcGRhdGVGaWxlbmFtZUFsaWFzXG4gIH0gPSBvcHRpb25zO1xuXG4gIGlmIChpc0NhbnZhc0ZpbGUoYXBwLCBuZXdTb3VyY2VQYXRoT3JGaWxlKSAmJiAhYXBwLmludGVybmFsUGx1Z2lucy5nZXRFbmFibGVkUGx1Z2luQnlJZChJbnRlcm5hbFBsdWdpbk5hbWUuQ2FudmFzKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IGVkaXRMaW5rcyhhcHAsIG5ld1NvdXJjZVBhdGhPckZpbGUsIChsaW5rKSA9PiB7XG4gICAgY29uc3QgaXNFbWJlZExpbmsgPSB0ZXN0RW1iZWQobGluay5vcmlnaW5hbCk7XG4gICAgaWYgKHNob3VsZFVwZGF0ZUVtYmVkT25seUxpbmtzICE9PSB1bmRlZmluZWQgJiYgc2hvdWxkVXBkYXRlRW1iZWRPbmx5TGlua3MgIT09IGlzRW1iZWRMaW5rKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiBjb252ZXJ0TGluayhub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8Q29udmVydExpbmtPcHRpb25zPih7XG4gICAgICBhcHAsXG4gICAgICBsaW5rLFxuICAgICAgbmV3U291cmNlUGF0aE9yRmlsZSxcbiAgICAgIG9sZFNvdXJjZVBhdGhPckZpbGUsXG4gICAgICBzaG91bGRGb3JjZU1hcmtkb3duTGlua3MsXG4gICAgICBzaG91bGRVcGRhdGVGaWxlbmFtZUFsaWFzXG4gICAgfSkpO1xuICB9LCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gX2ZpeEZyb250bWF0dGVyTWFya2Rvd25MaW5rcyh2YWx1ZTogdW5rbm93biwga2V5OiBzdHJpbmcsIGNhY2hlOiBDYWNoZWRNZXRhZGF0YSk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IHBhcnNlTGlua1Jlc3VsdCA9IHBhcnNlTGluayh2YWx1ZSk7XG4gICAgaWYgKCFwYXJzZUxpbmtSZXN1bHQgfHwgcGFyc2VMaW5rUmVzdWx0LmlzV2lraWxpbmsgfHwgcGFyc2VMaW5rUmVzdWx0LmlzRXh0ZXJuYWwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjYWNoZS5mcm9udG1hdHRlckxpbmtzID8/PSBbXTtcbiAgICBsZXQgbGluayA9IGNhY2hlLmZyb250bWF0dGVyTGlua3MuZmluZCgoZnJvbnRtYXR0ZXJMaW5rKSA9PiBmcm9udG1hdHRlckxpbmsua2V5ID09PSBrZXkpO1xuXG4gICAgaWYgKCFsaW5rKSB7XG4gICAgICBsaW5rID0ge1xuICAgICAgICBrZXksXG4gICAgICAgIGxpbms6ICcnLFxuICAgICAgICBvcmlnaW5hbDogJydcbiAgICAgIH07XG4gICAgICBjYWNoZS5mcm9udG1hdHRlckxpbmtzLnB1c2gobGluayk7XG4gICAgfVxuXG4gICAgbGluay5saW5rID0gcGFyc2VMaW5rUmVzdWx0LnVybDtcbiAgICBsaW5rLm9yaWdpbmFsID0gdmFsdWU7XG4gICAgaWYgKHBhcnNlTGlua1Jlc3VsdC5hbGlhcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaW5rLmRpc3BsYXlUZXh0ID0gcGFyc2VMaW5rUmVzdWx0LmFsaWFzO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBsZXQgaGFzRnJvbnRtYXR0ZXJMaW5rcyA9IGZhbHNlO1xuXG4gIGZvciAoY29uc3QgW2NoaWxkS2V5LCBjaGlsZFZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSBhcyBHZW5lcmljT2JqZWN0KSkge1xuICAgIGNvbnN0IGhhc0NoaWxkRnJvbnRtYXR0ZXJMaW5rcyA9IF9maXhGcm9udG1hdHRlck1hcmtkb3duTGlua3MoY2hpbGRWYWx1ZSwga2V5ID8gYCR7a2V5fS4ke2NoaWxkS2V5fWAgOiBjaGlsZEtleSwgY2FjaGUpO1xuICAgIGhhc0Zyb250bWF0dGVyTGlua3MgfHw9IGhhc0NoaWxkRnJvbnRtYXR0ZXJMaW5rcztcbiAgfVxuXG4gIHJldHVybiBoYXNGcm9udG1hdHRlckxpbmtzO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUxpbmtUZXh0KGFwcDogQXBwLCB0YXJnZXRGaWxlOiBURmlsZSwgc291cmNlUGF0aDogc3RyaW5nLCBzdWJwYXRoOiBzdHJpbmcsIGNvbmZpZzogTGlua0NvbmZpZyk6IHN0cmluZyB7XG4gIGxldCBsaW5rVGV4dDogc3RyaW5nO1xuXG4gIGlmICh0YXJnZXRGaWxlLnBhdGggPT09IHNvdXJjZVBhdGggJiYgc3VicGF0aCkge1xuICAgIGxpbmtUZXh0ID0gc3VicGF0aDtcbiAgfSBlbHNlIGlmIChjb25maWcuc2hvdWxkRm9yY2VSZWxhdGl2ZVBhdGgpIHtcbiAgICBsaW5rVGV4dCA9IHJlbGF0aXZlKGRpcm5hbWUoc291cmNlUGF0aCksIGNvbmZpZy5pc1dpa2lsaW5rID8gdHJpbU1hcmtkb3duRXh0ZW5zaW9uKGFwcCwgdGFyZ2V0RmlsZSkgOiB0YXJnZXRGaWxlLnBhdGgpICsgc3VicGF0aDtcbiAgfSBlbHNlIHtcbiAgICBsaW5rVGV4dCA9IGFwcC5tZXRhZGF0YUNhY2hlLmZpbGVUb0xpbmt0ZXh0KHRhcmdldEZpbGUsIHNvdXJjZVBhdGgsIGNvbmZpZy5pc1dpa2lsaW5rKSArIHN1YnBhdGg7XG4gIH1cblxuICBpZiAoY29uZmlnLnNob3VsZEZvcmNlUmVsYXRpdmVQYXRoICYmIGNvbmZpZy5zaG91bGRVc2VMZWFkaW5nRG90ICYmICFsaW5rVGV4dC5zdGFydHNXaXRoKCcuJykgJiYgIWxpbmtUZXh0LnN0YXJ0c1dpdGgoJyMnKSkge1xuICAgIGxpbmtUZXh0ID0gYC4vJHtsaW5rVGV4dH1gO1xuICB9XG5cbiAgcmV0dXJuIGxpbmtUZXh0O1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZU1hcmtkb3duTGlua0ltcGwob3B0aW9uczogR2VuZXJhdGVNYXJrZG93bkxpbmtPcHRpb25zKTogc3RyaW5nIHtcbiAgY29uc3QgeyBhcHAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHRhcmdldEZpbGUgPSBnZXRGaWxlKGFwcCwgb3B0aW9ucy50YXJnZXRQYXRoT3JGaWxlLCBvcHRpb25zLmlzTm9uRXhpc3RpbmdGaWxlQWxsb3dlZCk7XG4gIGNvbnN0IHNvdXJjZVBhdGggPSBnZXRQYXRoKGFwcCwgb3B0aW9ucy5zb3VyY2VQYXRoT3JGaWxlKTtcbiAgY29uc3Qgc3VicGF0aCA9IG9wdGlvbnMuc3VicGF0aCA/PyAnJztcblxuICBjb25zdCBsaW5rQ29uZmlnID0gZ2V0TGlua0NvbmZpZyhvcHRpb25zLCB0YXJnZXRGaWxlKTtcbiAgY29uc3QgbGlua1RleHQgPSBnZW5lcmF0ZUxpbmtUZXh0KGFwcCwgdGFyZ2V0RmlsZSwgc291cmNlUGF0aCwgc3VicGF0aCwgbGlua0NvbmZpZyk7XG5cbiAgcmV0dXJuIGxpbmtDb25maWcuaXNXaWtpbGlua1xuICAgID8gZ2VuZXJhdGVXaWtpTGluayhsaW5rVGV4dCwgb3B0aW9ucy5hbGlhcywgbGlua0NvbmZpZy5pc0VtYmVkKVxuICAgIDogZ2VuZXJhdGVNYXJrZG93blN0eWxlTGluayhsaW5rVGV4dCwgdGFyZ2V0RmlsZSwgb3B0aW9ucywgbGlua0NvbmZpZyk7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlTWFya2Rvd25TdHlsZUxpbmsobGlua1RleHQ6IHN0cmluZywgdGFyZ2V0RmlsZTogVEZpbGUsIG9wdGlvbnM6IEdlbmVyYXRlTWFya2Rvd25MaW5rT3B0aW9ucywgY29uZmlnOiBMaW5rQ29uZmlnKTogc3RyaW5nIHtcbiAgY29uc3QgeyBhcHAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGVtYmVkUHJlZml4ID0gY29uZmlnLmlzRW1iZWQgPyAnIScgOiAnJztcblxuICBjb25zdCBwcm9jZXNzZWRMaW5rVGV4dCA9IGNvbmZpZy5zaG91bGRVc2VBbmdsZUJyYWNrZXRzXG4gICAgPyBgPCR7bGlua1RleHR9PmBcbiAgICA6IGVuY29kZVVybChsaW5rVGV4dCk7XG5cbiAgbGV0IGFsaWFzID0gb3B0aW9ucy5hbGlhcyA/PyAnJztcbiAgaWYgKCFhbGlhcyAmJiAoIWNvbmZpZy5pc0VtYmVkIHx8ICFvcHRpb25zLmlzRW1wdHlFbWJlZEFsaWFzQWxsb3dlZCkpIHtcbiAgICBhbGlhcyA9ICFvcHRpb25zLnNob3VsZEluY2x1ZGVBdHRhY2htZW50RXh0ZW5zaW9uVG9FbWJlZEFsaWFzIHx8IGlzTWFya2Rvd25GaWxlKGFwcCwgdGFyZ2V0RmlsZSlcbiAgICAgID8gdGFyZ2V0RmlsZS5iYXNlbmFtZVxuICAgICAgOiB0YXJnZXRGaWxlLm5hbWU7XG4gIH1cblxuICBjb25zdCBlc2NhcGVkQWxpYXMgPSByZXBsYWNlQWxsKGFsaWFzLCBTUEVDSUFMX01BUktET1dOX0xJTktfU1lNQk9MU19SRUdFWCwgJ1xcXFwkJicpO1xuICByZXR1cm4gYCR7ZW1iZWRQcmVmaXh9WyR7ZXNjYXBlZEFsaWFzfV0oJHtwcm9jZXNzZWRMaW5rVGV4dH0pYDtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVXaWtpTGluayhsaW5rVGV4dDogc3RyaW5nLCBhbGlhczogc3RyaW5nIHwgdW5kZWZpbmVkLCBpc0VtYmVkOiBib29sZWFuKTogc3RyaW5nIHtcbiAgY29uc3QgZW1iZWRQcmVmaXggPSBpc0VtYmVkID8gJyEnIDogJyc7XG4gIGNvbnN0IG5vcm1hbGl6ZWRBbGlhcyA9IGFsaWFzID8/ICcnO1xuXG4gIGlmIChub3JtYWxpemVkQWxpYXMgJiYgbm9ybWFsaXplZEFsaWFzLnRvTG93ZXJDYXNlKCkgPT09IGxpbmtUZXh0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICByZXR1cm4gYCR7ZW1iZWRQcmVmaXh9W1ske25vcm1hbGl6ZWRBbGlhc31dXWA7XG4gIH1cblxuICBjb25zdCBhbGlhc1BhcnQgPSBub3JtYWxpemVkQWxpYXMgPyBgfCR7bm9ybWFsaXplZEFsaWFzfWAgOiAnJztcbiAgcmV0dXJuIGAke2VtYmVkUHJlZml4fVtbJHtsaW5rVGV4dH0ke2FsaWFzUGFydH1dXWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEZpbGVDaGFuZ2VzKFxuICBjYWNoZTogQ2FjaGVkTWV0YWRhdGEgfCBudWxsLFxuICBpc0NhbnZhc0ZpbGVDYWNoZTogYm9vbGVhbixcbiAgbGlua0NvbnZlcnRlcjogKGxpbms6IFJlZmVyZW5jZSkgPT4gUHJvbWlzYWJsZTxNYXliZVJldHVybjxzdHJpbmc+PlxuKTogUHJvbWlzZTxGaWxlQ2hhbmdlW10+IHtcbiAgaWYgKCFjYWNoZSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGNoYW5nZXM6IEZpbGVDaGFuZ2VbXSA9IFtdO1xuXG4gIGNvbnN0IHRhYmxlUG9zaXRpb25zOiBUYWJsZVBvc2l0aW9uW10gPSAoY2FjaGUuc2VjdGlvbnMgPz8gW10pLmZpbHRlcigoc2VjdGlvbikgPT4gc2VjdGlvbi50eXBlID09PSAndGFibGUnKS5tYXAoKHNlY3Rpb24pID0+ICh7XG4gICAgZW5kOiBzZWN0aW9uLnBvc2l0aW9uLmVuZC5vZmZzZXQsXG4gICAgc3RhcnQ6IHNlY3Rpb24ucG9zaXRpb24uc3RhcnQub2Zmc2V0XG4gIH0pKTtcblxuICBmb3IgKGNvbnN0IGxpbmsgb2YgZ2V0QWxsTGlua3MoY2FjaGUpKSB7XG4gICAgY29uc3QgbmV3Q29udGVudCA9IGF3YWl0IGxpbmtDb252ZXJ0ZXIobGluayk7XG4gICAgaWYgKG5ld0NvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZUNoYW5nZSA9IHJlZmVyZW5jZVRvRmlsZUNoYW5nZShsaW5rLCBuZXdDb250ZW50KTtcblxuICAgIGlmIChpc0NhbnZhc0ZpbGVDYWNoZSkge1xuICAgICAgaWYgKGlzQ2FudmFzQ2hhbmdlKGZpbGVDaGFuZ2UpKSB7XG4gICAgICAgIGNoYW5nZXMucHVzaChmaWxlQ2hhbmdlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybignVW5zdXBwb3J0ZWQgZmlsZSBjaGFuZ2UnLCBmaWxlQ2hhbmdlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNob3VsZEVzY2FwZVdpa2lsaW5rRGl2aWRlcihmaWxlQ2hhbmdlLCB0YWJsZVBvc2l0aW9ucykpIHtcbiAgICAgICAgZmlsZUNoYW5nZS5uZXdDb250ZW50ID0gZmlsZUNoYW5nZS5uZXdDb250ZW50LnJlcGxhY2VBbGwoVU5FU0NBUEVEX1dJS0lMSU5LX0RJVklERVJfUkVHRVhQLCBFU0NBUEVEX1dJS0lMSU5LX0RJVklERVIpO1xuICAgICAgfVxuXG4gICAgICBjaGFuZ2VzLnB1c2goZmlsZUNoYW5nZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBjaGFuZ2VzO1xufVxuXG5mdW5jdGlvbiBnZXRMaW5rQ29uZmlnKG9wdGlvbnM6IEdlbmVyYXRlTWFya2Rvd25MaW5rT3B0aW9ucywgdGFyZ2V0RmlsZTogVEZpbGUpOiBMaW5rQ29uZmlnIHtcbiAgY29uc3QgeyBhcHAgfSA9IG9wdGlvbnM7XG4gIHJldHVybiB7XG4gICAgaXNFbWJlZDogb3B0aW9ucy5pc0VtYmVkID8/IChvcHRpb25zLm9yaWdpbmFsTGluayA/IHRlc3RFbWJlZChvcHRpb25zLm9yaWdpbmFsTGluaykgOiB1bmRlZmluZWQpID8/ICFpc01hcmtkb3duRmlsZShhcHAsIHRhcmdldEZpbGUpLFxuICAgIGlzV2lraWxpbms6IG9wdGlvbnMuaXNXaWtpbGluayA/PyAob3B0aW9ucy5vcmlnaW5hbExpbmsgPyB0ZXN0V2lraWxpbmsob3B0aW9ucy5vcmlnaW5hbExpbmspIDogdW5kZWZpbmVkKSA/PyBzaG91bGRVc2VXaWtpbGlua3MoYXBwKSxcbiAgICBzaG91bGRGb3JjZVJlbGF0aXZlUGF0aDogb3B0aW9ucy5zaG91bGRGb3JjZVJlbGF0aXZlUGF0aCA/PyBzaG91bGRVc2VSZWxhdGl2ZUxpbmtzKGFwcCksXG4gICAgc2hvdWxkVXNlQW5nbGVCcmFja2V0czogb3B0aW9ucy5zaG91bGRVc2VBbmdsZUJyYWNrZXRzID8/IChvcHRpb25zLm9yaWdpbmFsTGluayA/IHRlc3RBbmdsZUJyYWNrZXRzKG9wdGlvbnMub3JpZ2luYWxMaW5rKSA6IHVuZGVmaW5lZCkgPz8gZmFsc2UsXG4gICAgc2hvdWxkVXNlTGVhZGluZ0RvdDogb3B0aW9ucy5zaG91bGRVc2VMZWFkaW5nRG90ID8/IChvcHRpb25zLm9yaWdpbmFsTGluayA/IHRlc3RMZWFkaW5nRG90KG9wdGlvbnMub3JpZ2luYWxMaW5rKSA6IHVuZGVmaW5lZCkgPz8gZmFsc2VcbiAgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VMaW5rTm9kZShub2RlOiBMaW5rLCBzdHI6IHN0cmluZywgaXNFbWJlZDogYm9vbGVhbik6IFBhcnNlTGlua1Jlc3VsdCB7XG4gIGNvbnN0IE9QRU5fQU5HTEVfQlJBQ0tFVCA9ICc8JztcbiAgY29uc3QgTElOS19BTElBU19TVUZGSVggPSAnXSgnO1xuICBjb25zdCBMSU5LX1NVRkZJWCA9ICcpJztcblxuICBjb25zdCBhbGlhc05vZGUgPSBub2RlLmNoaWxkcmVuWzBdIGFzIFRleHQgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHJhd1VybCA9IHN0ci5zbGljZSgoYWxpYXNOb2RlPy5wb3NpdGlvbj8uZW5kLm9mZnNldCA/PyAxKSArIExJTktfQUxJQVNfU1VGRklYLmxlbmd0aCwgKG5vZGUucG9zaXRpb24/LmVuZC5vZmZzZXQgPz8gMCkgLSBMSU5LX1NVRkZJWC5sZW5ndGgpO1xuICBjb25zdCBoYXNBbmdsZUJyYWNrZXRzID0gc3RyLnN0YXJ0c1dpdGgoT1BFTl9BTkdMRV9CUkFDS0VUKSB8fCByYXdVcmwuc3RhcnRzV2l0aChPUEVOX0FOR0xFX0JSQUNLRVQpO1xuICBjb25zdCBpc0V4dGVybmFsID0gaXNVcmwobm9kZS51cmwpO1xuICBsZXQgdXJsID0gbm9kZS51cmw7XG4gIGlmICghaXNFeHRlcm5hbCkge1xuICAgIGlmICghaGFzQW5nbGVCcmFja2V0cykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdXJsID0gZGVjb2RlVVJJQ29tcG9uZW50KHVybCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZGVjb2RlIFVSTCAke3VybH1gLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8UGFyc2VMaW5rUmVzdWx0Pih7XG4gICAgYWxpYXM6IGFsaWFzTm9kZT8udmFsdWUsXG4gICAgZW5jb2RlZFVybDogaXNFeHRlcm5hbCA/IGVuY29kZVVybCh1cmwpIDogdW5kZWZpbmVkLFxuICAgIGhhc0FuZ2xlQnJhY2tldHMsXG4gICAgaXNFbWJlZCxcbiAgICBpc0V4dGVybmFsLFxuICAgIGlzV2lraWxpbms6IGZhbHNlLFxuICAgIHRpdGxlOiBub2RlLnRpdGxlID8/IHVuZGVmaW5lZCxcbiAgICB1cmxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTGlua1VybChzdHI6IHN0cmluZyk6IG51bGwgfCBQYXJzZUxpbmtSZXN1bHQge1xuICBjb25zdCBoYXNBbmdsZUJyYWNrZXRzID0gc3RyLnN0YXJ0c1dpdGgoJzwnKSAmJiBzdHIuZW5kc1dpdGgoJz4nKTtcbiAgaWYgKGhhc0FuZ2xlQnJhY2tldHMpIHtcbiAgICBzdHIgPSBzdHIuc2xpY2UoMSwgLTEpO1xuICB9XG5cbiAgaWYgKCFpc1VybChzdHIpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGVuY29kZWRVcmw6IGVuY29kZVVybChzdHIpLFxuICAgIGhhc0FuZ2xlQnJhY2tldHMsXG4gICAgaXNFbWJlZDogZmFsc2UsXG4gICAgaXNFeHRlcm5hbDogdHJ1ZSxcbiAgICBpc1dpa2lsaW5rOiBmYWxzZSxcbiAgICB1cmw6IHN0clxuICB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZVdpa2lsaW5rTm9kZShub2RlOiBXaWtpTGlua05vZGUsIHN0cjogc3RyaW5nLCBpc0VtYmVkOiBib29sZWFuKTogUGFyc2VMaW5rUmVzdWx0IHtcbiAgcmV0dXJuIG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxQYXJzZUxpbmtSZXN1bHQ+KHtcbiAgICBhbGlhczogc3RyLmluY2x1ZGVzKFdJS0lMSU5LX0RJVklERVIpID8gbm9kZS5kYXRhLmFsaWFzIDogdW5kZWZpbmVkLFxuICAgIGlzRW1iZWQsXG4gICAgaXNFeHRlcm5hbDogZmFsc2UsXG4gICAgaXNXaWtpbGluazogdHJ1ZSxcbiAgICB1cmw6IG5vZGUudmFsdWVcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZEVzY2FwZVdpa2lsaW5rRGl2aWRlcihmaWxlQ2hhbmdlOiBGaWxlQ2hhbmdlLCB0YWJsZVBvc2l0aW9uczogVGFibGVQb3NpdGlvbltdKTogYm9vbGVhbiB7XG4gIGlmICghaXNDb250ZW50Q2hhbmdlKGZpbGVDaGFuZ2UpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFVTkVTQ0FQRURfV0lLSUxJTktfRElWSURFUl9SRUdFWFAudGVzdChmaWxlQ2hhbmdlLm5ld0NvbnRlbnQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRhYmxlUG9zaXRpb25zLnNvbWUoKHRhYmxlUG9zaXRpb24pID0+IHRhYmxlUG9zaXRpb24uc3RhcnQgPD0gZmlsZUNoYW5nZS5zdGFydEluZGV4ICYmIGZpbGVDaGFuZ2UuZW5kSW5kZXggPD0gdGFibGVQb3NpdGlvbi5lbmQpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW9CQSxzQkFHTztBQUNQLDZCQUFtQztBQUNuQyxvQkFBdUI7QUFDdkIsMEJBQXdCO0FBQ3hCLDhCQUErQjtBQVEvQixvQkFHTztBQUNQLGtCQU1PO0FBQ1Asb0JBSU87QUFDUCxpQkFBc0I7QUFDdEIsd0JBS087QUFDUCx3QkFNTztBQUNQLDJCQU1PO0FBQ1AsOEJBR087QUFDUCx1QkFHTztBQUVQLE1BQU0sMkJBQTJCO0FBTWpDLE1BQU0sOEJBQThCO0FBS3BDLE1BQU0sc0NBQXNDO0FBSzVDLE1BQU0sb0NBQW9DO0FBRTFDLE1BQU0sbUJBQW1CO0FBaVhsQixTQUFTLFlBQVksU0FBcUM7QUFDL0QsUUFBTSxhQUFhLGdCQUFnQixRQUFRLEtBQUssUUFBUSxNQUFNLFFBQVEsdUJBQXVCLFFBQVEsbUJBQW1CO0FBQ3hILE1BQUksQ0FBQyxZQUFZO0FBQ2YsV0FBTyxRQUFRLEtBQUs7QUFBQSxFQUN0QjtBQUVBLFNBQU8sZUFBVywyQ0FBK0M7QUFBQSxJQUMvRCxLQUFLLFFBQVE7QUFBQSxJQUNiLE1BQU0sUUFBUTtBQUFBLElBQ2QscUJBQXFCLFFBQVE7QUFBQSxJQUM3QixxQkFBcUI7QUFBQSxJQUNyQixxQkFBcUIsUUFBUTtBQUFBLElBQzdCLDBCQUEwQixRQUFRO0FBQUEsSUFDbEMsMkJBQTJCLFFBQVE7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
|
@@ -60,7 +60,9 @@ async function processNextQueueItem(app) {
|
|
60
60
|
if (!item) {
|
61
61
|
return;
|
62
62
|
}
|
63
|
-
await (0, import_Async.addErrorHandler)(
|
63
|
+
await (0, import_Async.addErrorHandler)(
|
64
|
+
() => (0, import_Async.runWithTimeout)(item.timeoutInMilliseconds, () => (0, import_Logger.invokeAsyncAndLog)(processNextQueueItem.name, item.fn, item.stackTrace), { queuedFn: item.fn })
|
65
|
+
);
|
64
66
|
queue.items.shift();
|
65
67
|
}
|
66
68
|
// Annotate the CommonJS export names for ESM import in node:
|
@@ -69,4 +71,4 @@ async function processNextQueueItem(app) {
|
|
69
71
|
addToQueueAndWait,
|
70
72
|
flushQueue
|
71
73
|
});
|
72
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL1F1ZXVlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBlbnF1ZXVpbmcgYW5kIHByb2Nlc3NpbmcgZnVuY3Rpb25zIGluIE9ic2lkaWFuLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHR5cGUgeyBWYWx1ZVdyYXBwZXIgfSBmcm9tICcuL0FwcC50cyc7XG5cbmltcG9ydCB7XG4gIGFkZEVycm9ySGFuZGxlcixcbiAgaW52b2tlQXN5bmNTYWZlbHksXG4gIHJ1bldpdGhUaW1lb3V0XG59IGZyb20gJy4uL0FzeW5jLnRzJztcbmltcG9ydCB7IGdldFN0YWNrVHJhY2UgfSBmcm9tICcuLi9FcnJvci50cyc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vRnVuY3Rpb24udHMnO1xuaW1wb3J0IHsgZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlIH0gZnJvbSAnLi9BcHAudHMnO1xuaW1wb3J0IHsgaW52b2tlQXN5bmNBbmRMb2cgfSBmcm9tICcuL0xvZ2dlci50cyc7XG5cbmludGVyZmFjZSBRdWV1ZSB7XG4gIGl0ZW1zOiBRdWV1ZUl0ZW1bXTtcbiAgcHJvbWlzZTogUHJvbWlzZTx2b2lkPjtcbn1cblxuaW50ZXJmYWNlIFF1ZXVlSXRlbSB7XG4gIGZuKHRoaXM6IHZvaWQpOiBQcm9taXNhYmxlPHZvaWQ+O1xuICBzdGFja1RyYWNlOiBzdHJpbmc7XG4gIHRpbWVvdXRJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xufVxuXG4vKipcbiAqIEFkZHMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSBwcmV2aW91cyBmdW5jdGlvbiBjb21wbGV0ZXMuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBmbiAtIFRoZSBmdW5jdGlvbiB0byBhZGQuXG4gKiBAcGFyYW0gdGltZW91dEluTWlsbGlzZWNvbmRzIC0gVGhlIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLlxuICogQHBhcmFtIHN0YWNrVHJhY2UgLSBPcHRpb25hbCBzdGFjayB0cmFjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFRvUXVldWUoYXBwOiBBcHAsIGZuOiAoKSA9PiBQcm9taXNhYmxlPHZvaWQ+LCB0aW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXIsIHN0YWNrVHJhY2U/OiBzdHJpbmcpOiB2b2lkIHtcbiAgc3RhY2tUcmFjZSA/Pz0gZ2V0U3RhY2tUcmFjZSgxKTtcbiAgaW52b2tlQXN5bmNTYWZlbHkoKCkgPT4gYWRkVG9RdWV1ZUFuZFdhaXQoYXBwLCBmbiwgdGltZW91dEluTWlsbGlzZWNvbmRzLCBzdGFja1RyYWNlKSk7XG59XG5cbi8qKlxuICogQWRkcyBhbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHByZXZpb3VzIGZ1bmN0aW9uIGNvbXBsZXRlcyBhbmQgcmV0dXJucyBhIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZ1bmN0aW9uIGNvbXBsZXRlcy5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGFkZC5cbiAqIEBwYXJhbSB0aW1lb3V0SW5NaWxsaXNlY29uZHMgLSBUaGUgdGltZW91dCBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcGFyYW0gc3RhY2tUcmFjZSAtIE9wdGlvbmFsIHN0YWNrIHRyYWNlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWRkVG9RdWV1ZUFuZFdhaXQoYXBwOiBBcHAsIGZuOiAoKSA9PiBQcm9taXNhYmxlPHZvaWQ+LCB0aW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXIsIHN0YWNrVHJhY2U/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgREVGQVVMVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDYwMDAwO1xuICB0aW1lb3V0SW5NaWxsaXNlY29uZHMgPz89IERFRkFVTFRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFM7XG4gIHN0YWNrVHJhY2UgPz89IGdldFN0YWNrVHJhY2UoMSk7XG4gIGNvbnN0IHF1ZXVlID0gZ2V0UXVldWUoYXBwKS52YWx1ZTtcbiAgcXVldWUuaXRlbXMucHVzaCh7IGZuLCBzdGFja1RyYWNlLCB0aW1lb3V0SW5NaWxsaXNlY29uZHMgfSk7XG4gIHF1ZXVlLnByb21pc2UgPSBxdWV1ZS5wcm9taXNlLnRoZW4oKCkgPT4gcHJvY2Vzc05leHRRdWV1ZUl0ZW0oYXBwKSk7XG4gIGF3YWl0IHF1ZXVlLnByb21pc2U7XG59XG5cbi8qKlxuICogRmx1c2hlcyB0aGUgcXVldWU7XG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZsdXNoUXVldWUoYXBwOiBBcHApOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgYWRkVG9RdWV1ZUFuZFdhaXQoYXBwLCBub29wKTtcbn1cblxuZnVuY3Rpb24gZ2V0UXVldWUoYXBwOiBBcHApOiBWYWx1ZVdyYXBwZXI8UXVldWU+IHtcbiAgcmV0dXJuIGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZShhcHAsICdxdWV1ZScsIHsgaXRlbXM6IFtdLCBwcm9taXNlOiBQcm9taXNlLnJlc29sdmUoKSB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc05leHRRdWV1ZUl0ZW0oYXBwOiBBcHApOiBQcm9taXNlPHZvaWQ+
|
74
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL1F1ZXVlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBlbnF1ZXVpbmcgYW5kIHByb2Nlc3NpbmcgZnVuY3Rpb25zIGluIE9ic2lkaWFuLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHR5cGUgeyBWYWx1ZVdyYXBwZXIgfSBmcm9tICcuL0FwcC50cyc7XG5cbmltcG9ydCB7XG4gIGFkZEVycm9ySGFuZGxlcixcbiAgaW52b2tlQXN5bmNTYWZlbHksXG4gIHJ1bldpdGhUaW1lb3V0XG59IGZyb20gJy4uL0FzeW5jLnRzJztcbmltcG9ydCB7IGdldFN0YWNrVHJhY2UgfSBmcm9tICcuLi9FcnJvci50cyc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vRnVuY3Rpb24udHMnO1xuaW1wb3J0IHsgZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlIH0gZnJvbSAnLi9BcHAudHMnO1xuaW1wb3J0IHsgaW52b2tlQXN5bmNBbmRMb2cgfSBmcm9tICcuL0xvZ2dlci50cyc7XG5cbmludGVyZmFjZSBRdWV1ZSB7XG4gIGl0ZW1zOiBRdWV1ZUl0ZW1bXTtcbiAgcHJvbWlzZTogUHJvbWlzZTx2b2lkPjtcbn1cblxuaW50ZXJmYWNlIFF1ZXVlSXRlbSB7XG4gIGZuKHRoaXM6IHZvaWQpOiBQcm9taXNhYmxlPHZvaWQ+O1xuICBzdGFja1RyYWNlOiBzdHJpbmc7XG4gIHRpbWVvdXRJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xufVxuXG4vKipcbiAqIEFkZHMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSBwcmV2aW91cyBmdW5jdGlvbiBjb21wbGV0ZXMuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBmbiAtIFRoZSBmdW5jdGlvbiB0byBhZGQuXG4gKiBAcGFyYW0gdGltZW91dEluTWlsbGlzZWNvbmRzIC0gVGhlIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLlxuICogQHBhcmFtIHN0YWNrVHJhY2UgLSBPcHRpb25hbCBzdGFjayB0cmFjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFRvUXVldWUoYXBwOiBBcHAsIGZuOiAoKSA9PiBQcm9taXNhYmxlPHZvaWQ+LCB0aW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXIsIHN0YWNrVHJhY2U/OiBzdHJpbmcpOiB2b2lkIHtcbiAgc3RhY2tUcmFjZSA/Pz0gZ2V0U3RhY2tUcmFjZSgxKTtcbiAgaW52b2tlQXN5bmNTYWZlbHkoKCkgPT4gYWRkVG9RdWV1ZUFuZFdhaXQoYXBwLCBmbiwgdGltZW91dEluTWlsbGlzZWNvbmRzLCBzdGFja1RyYWNlKSk7XG59XG5cbi8qKlxuICogQWRkcyBhbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHByZXZpb3VzIGZ1bmN0aW9uIGNvbXBsZXRlcyBhbmQgcmV0dXJucyBhIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZ1bmN0aW9uIGNvbXBsZXRlcy5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGFkZC5cbiAqIEBwYXJhbSB0aW1lb3V0SW5NaWxsaXNlY29uZHMgLSBUaGUgdGltZW91dCBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcGFyYW0gc3RhY2tUcmFjZSAtIE9wdGlvbmFsIHN0YWNrIHRyYWNlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWRkVG9RdWV1ZUFuZFdhaXQoYXBwOiBBcHAsIGZuOiAoKSA9PiBQcm9taXNhYmxlPHZvaWQ+LCB0aW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXIsIHN0YWNrVHJhY2U/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgREVGQVVMVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDYwMDAwO1xuICB0aW1lb3V0SW5NaWxsaXNlY29uZHMgPz89IERFRkFVTFRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFM7XG4gIHN0YWNrVHJhY2UgPz89IGdldFN0YWNrVHJhY2UoMSk7XG4gIGNvbnN0IHF1ZXVlID0gZ2V0UXVldWUoYXBwKS52YWx1ZTtcbiAgcXVldWUuaXRlbXMucHVzaCh7IGZuLCBzdGFja1RyYWNlLCB0aW1lb3V0SW5NaWxsaXNlY29uZHMgfSk7XG4gIHF1ZXVlLnByb21pc2UgPSBxdWV1ZS5wcm9taXNlLnRoZW4oKCkgPT4gcHJvY2Vzc05leHRRdWV1ZUl0ZW0oYXBwKSk7XG4gIGF3YWl0IHF1ZXVlLnByb21pc2U7XG59XG5cbi8qKlxuICogRmx1c2hlcyB0aGUgcXVldWU7XG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZsdXNoUXVldWUoYXBwOiBBcHApOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgYWRkVG9RdWV1ZUFuZFdhaXQoYXBwLCBub29wKTtcbn1cblxuZnVuY3Rpb24gZ2V0UXVldWUoYXBwOiBBcHApOiBWYWx1ZVdyYXBwZXI8UXVldWU+IHtcbiAgcmV0dXJuIGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZShhcHAsICdxdWV1ZScsIHsgaXRlbXM6IFtdLCBwcm9taXNlOiBQcm9taXNlLnJlc29sdmUoKSB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc05leHRRdWV1ZUl0ZW0oYXBwOiBBcHApOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcXVldWUgPSBnZXRRdWV1ZShhcHApLnZhbHVlO1xuICBjb25zdCBpdGVtID0gcXVldWUuaXRlbXNbMF07XG4gIGlmICghaXRlbSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IGFkZEVycm9ySGFuZGxlcigoKSA9PlxuICAgIHJ1bldpdGhUaW1lb3V0KGl0ZW0udGltZW91dEluTWlsbGlzZWNvbmRzLCAoKSA9PiBpbnZva2VBc3luY0FuZExvZyhwcm9jZXNzTmV4dFF1ZXVlSXRlbS5uYW1lLCBpdGVtLmZuLCBpdGVtLnN0YWNrVHJhY2UpLCB7IHF1ZXVlZEZuOiBpdGVtLmZuIH0pXG4gICk7XG4gIHF1ZXVlLml0ZW1zLnNoaWZ0KCk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFXQSxtQkFJTztBQUNQLG1CQUE4QjtBQUM5QixzQkFBcUI7QUFDckIsaUJBQXlDO0FBQ3pDLG9CQUFrQztBQXFCM0IsU0FBUyxXQUFXLEtBQVUsSUFBNEIsdUJBQWdDLFlBQTJCO0FBQzFILHFCQUFlLDRCQUFjLENBQUM7QUFDOUIsc0NBQWtCLE1BQU0sa0JBQWtCLEtBQUssSUFBSSx1QkFBdUIsVUFBVSxDQUFDO0FBQ3ZGO0FBVUEsZUFBc0Isa0JBQWtCLEtBQVUsSUFBNEIsdUJBQWdDLFlBQW9DO0FBQ2hKLFFBQU0sa0NBQWtDO0FBQ3hDLDRCQUEwQjtBQUMxQixxQkFBZSw0QkFBYyxDQUFDO0FBQzlCLFFBQU0sUUFBUSxTQUFTLEdBQUcsRUFBRTtBQUM1QixRQUFNLE1BQU0sS0FBSyxFQUFFLElBQUksWUFBWSxzQkFBc0IsQ0FBQztBQUMxRCxRQUFNLFVBQVUsTUFBTSxRQUFRLEtBQUssTUFBTSxxQkFBcUIsR0FBRyxDQUFDO0FBQ2xFLFFBQU0sTUFBTTtBQUNkO0FBT0EsZUFBc0IsV0FBVyxLQUF5QjtBQUN4RCxRQUFNLGtCQUFrQixLQUFLLG9CQUFJO0FBQ25DO0FBRUEsU0FBUyxTQUFTLEtBQStCO0FBQy9DLGFBQU8scUNBQXlCLEtBQUssU0FBUyxFQUFFLE9BQU8sQ0FBQyxHQUFHLFNBQVMsUUFBUSxRQUFRLEVBQUUsQ0FBQztBQUN6RjtBQUVBLGVBQWUscUJBQXFCLEtBQXlCO0FBQzNELFFBQU0sUUFBUSxTQUFTLEdBQUcsRUFBRTtBQUM1QixRQUFNLE9BQU8sTUFBTSxNQUFNLENBQUM7QUFDMUIsTUFBSSxDQUFDLE1BQU07QUFDVDtBQUFBLEVBQ0Y7QUFFQSxZQUFNO0FBQUEsSUFBZ0IsVUFDcEIsNkJBQWUsS0FBSyx1QkFBdUIsVUFBTSxpQ0FBa0IscUJBQXFCLE1BQU0sS0FBSyxJQUFJLEtBQUssVUFBVSxHQUFHLEVBQUUsVUFBVSxLQUFLLEdBQUcsQ0FBQztBQUFBLEVBQ2hKO0FBQ0EsUUFBTSxNQUFNLE1BQU07QUFDcEI7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
package/dist/lib/esm/Async.d.mts
CHANGED
@@ -144,9 +144,10 @@ export declare function retryWithTimeout(fn: () => Promisable<boolean>, retryOpt
|
|
144
144
|
* @typeParam R - The type of the result from the asynchronous function.
|
145
145
|
* @param timeoutInMilliseconds - The maximum time to wait in milliseconds.
|
146
146
|
* @param fn - The function to execute.
|
147
|
+
* @param context - The context of the function.
|
147
148
|
* @returns A {@link Promise} that resolves with the result of the asynchronous function or rejects if it times out.
|
148
149
|
*/
|
149
|
-
export declare function runWithTimeout<R>(timeoutInMilliseconds: number, fn: () => Promisable<R
|
150
|
+
export declare function runWithTimeout<R>(timeoutInMilliseconds: number, fn: () => Promisable<R>, context?: unknown): Promise<R>;
|
150
151
|
/**
|
151
152
|
* Delays execution for a specified number of milliseconds.
|
152
153
|
*
|
package/dist/lib/esm/Async.mjs
CHANGED
@@ -104,9 +104,9 @@ async function retryWithTimeout(fn, retryOptions, stackTrace) {
|
|
104
104
|
retryWithTimeoutDebugger.printStackTrace(stackTrace);
|
105
105
|
await sleep(fullOptions.retryDelayInMilliseconds);
|
106
106
|
}
|
107
|
-
});
|
107
|
+
}, { retryFn: fn });
|
108
108
|
}
|
109
|
-
async function runWithTimeout(timeoutInMilliseconds, fn) {
|
109
|
+
async function runWithTimeout(timeoutInMilliseconds, fn, context) {
|
110
110
|
let isTimedOut = true;
|
111
111
|
let result = null;
|
112
112
|
const startTime = performance.now();
|
@@ -119,7 +119,7 @@ async function runWithTimeout(timeoutInMilliseconds, fn) {
|
|
119
119
|
result = await fn();
|
120
120
|
isTimedOut = false;
|
121
121
|
const duration = performance.now() - startTime;
|
122
|
-
getLibDebugger("Async:runWithTimeout")(`Execution time: ${duration.toString()} milliseconds`, { fn });
|
122
|
+
getLibDebugger("Async:runWithTimeout")(`Execution time: ${duration.toString()} milliseconds`, { context, fn });
|
123
123
|
}
|
124
124
|
async function innerTimeout() {
|
125
125
|
if (!isTimedOut) {
|
@@ -130,7 +130,7 @@ async function runWithTimeout(timeoutInMilliseconds, fn) {
|
|
130
130
|
return;
|
131
131
|
}
|
132
132
|
const duration = performance.now() - startTime;
|
133
|
-
console.warn(`Timed out in ${duration.toString()} milliseconds`, { fn });
|
133
|
+
console.warn(`Timed out in ${duration.toString()} milliseconds`, { context, fn });
|
134
134
|
const _debugger = getLibDebugger("Async:runWithTimeout:timeout");
|
135
135
|
if (_debugger.enabled) {
|
136
136
|
_debugger(
|
@@ -192,4 +192,4 @@ export {
|
|
192
192
|
timeout,
|
193
193
|
toArray
|
194
194
|
};
|
195
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL0FzeW5jLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBhc3luY2hyb25vdXMgb3BlcmF0aW9ucy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBnZXRMaWJEZWJ1Z2dlciB9IGZyb20gJy4vRGVidWcudHMnO1xuaW1wb3J0IHtcbiAgQVNZTkNfRVJST1JfV1JBUFBFUl9NRVNTQUdFLFxuICBlbWl0QXN5bmNFcnJvckV2ZW50LFxuICBnZXRTdGFja1RyYWNlLFxuICBwcmludEVycm9yXG59IGZyb20gJy4vRXJyb3IudHMnO1xuXG4vKipcbiAqIEEgdHlwZSByZXByZXNlbnRpbmcgYSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIGEge0BsaW5rIFByb21pc2V9LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZS5cbiAqL1xuZXhwb3J0IHR5cGUgUHJvbWlzZVJlc29sdmU8VD4gPSB1bmRlZmluZWQgZXh0ZW5kcyBUID8gKHZhbHVlPzogUHJvbWlzZUxpa2U8VD4gfCBUKSA9PiB2b2lkXG4gIDogKHZhbHVlOiBQcm9taXNlTGlrZTxUPiB8IFQpID0+IHZvaWQ7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgdGhlIHJldHJ5IGJlaGF2aW9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYWJvcnQgc2lnbmFsIHRvIGNhbmNlbCB0aGUgcmV0cnkgb3BlcmF0aW9uLlxuICAgKi9cbiAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDtcblxuICAvKipcbiAgICogVGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHJldHJ5IGF0dGVtcHRzLlxuICAgKi9cbiAgcmV0cnlEZWxheUluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJldHJ5IHRoZSBmdW5jdGlvbiBvbiBlcnJvci5cbiAgICovXG4gIHNob3VsZFJldHJ5T25FcnJvcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIGdpdmluZyB1cCBvbiByZXRyeWluZy5cbiAgICovXG4gIHRpbWVvdXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBIG1hcmtlciBpbnRlcmZhY2UgdG8gaW5kaWNhdGUgdGhhdCBhbiBlcnJvciBzaG91bGQgdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlcm1pbmF0ZVJldHJ5IHtcbiAgLyoqXG4gICAqIEEgbWFya2VyIHByb3BlcnR5IHRvIGluZGljYXRlIHRoYXQgYW4gZXJyb3Igc2hvdWxkIHRlcm1pbmF0ZSByZXRyeSBsb2dpYy5cbiAgICovXG4gIF9fdGVybWluYXRlUmV0cnk6IHRydWU7XG59XG5cbi8qKlxuICogQWRkcyBhbiBlcnJvciBoYW5kbGVyIHRvIGEge0BsaW5rIFByb21pc2V9IHRoYXQgY2F0Y2hlcyBhbnkgZXJyb3JzIGFuZCBlbWl0cyBhbiBhc3luYyBlcnJvciBldmVudC5cbiAqXG4gKiBAcGFyYW0gYXN5bmNGbiAtIFRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gYWRkIGFuIGVycm9yIGhhbmRsZXIgdG8uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBjb21wbGV0ZXMgb3IgZW1pdHMgYXN5bmMgZXJyb3IgZXZlbnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZGRFcnJvckhhbmRsZXIoYXN5bmNGbjogKCkgPT4gUHJvbWlzZTx1bmtub3duPik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBhc3luY0Vycm9yV3JhcHBlciA9IG5ldyBFcnJvcihBU1lOQ19FUlJPUl9XUkFQUEVSX01FU1NBR0UpO1xuICB0cnkge1xuICAgIGF3YWl0IGFzeW5jRm4oKTtcbiAgfSBjYXRjaCAoYXN5bmNFcnJvcikge1xuICAgIGFzeW5jRXJyb3JXcmFwcGVyLmNhdXNlID0gYXN5bmNFcnJvcjtcbiAgICBlbWl0QXN5bmNFcnJvckV2ZW50KGFzeW5jRXJyb3JXcmFwcGVyKTtcbiAgfVxufVxuXG4vKipcbiAqIEZpbHRlcnMgYW4gYXJyYXkgYXN5bmNocm9ub3VzbHksIGtlZXBpbmcgb25seSB0aGUgZWxlbWVudHMgdGhhdCBzYXRpc2Z5IHRoZSBwcm92aWRlZCBwcmVkaWNhdGUgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgZWxlbWVudHMgaW4gdGhlIGlucHV0IGFycmF5LlxuICogQHBhcmFtIGFyciAtIFRoZSBhcnJheSB0byBmaWx0ZXIuXG4gKiBAcGFyYW0gcHJlZGljYXRlIC0gVGhlIHByZWRpY2F0ZSBmdW5jdGlvbiB0byB0ZXN0IGVhY2ggZWxlbWVudC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiBlbGVtZW50cyB0aGF0IHNhdGlzZnkgdGhlIHByZWRpY2F0ZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzeW5jRmlsdGVyPFQ+KGFycjogVFtdLCBwcmVkaWNhdGU6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFRbXSkgPT4gUHJvbWlzYWJsZTxib29sZWFuPik6IFByb21pc2U8VFtdPiB7XG4gIGNvbnN0IHByZWRpY2F0ZVJlc3VsdHMgPSBhd2FpdCBhc3luY01hcChhcnIsIHByZWRpY2F0ZSk7XG4gIHJldHVybiBhcnIuZmlsdGVyKChfLCBpbmRleCkgPT4gcHJlZGljYXRlUmVzdWx0c1tpbmRleF0gPz8gZmFsc2UpO1xufVxuXG4vKipcbiAqIE1hcHMgb3ZlciBhbiBhcnJheSBhc3luY2hyb25vdXNseSwgYXBwbHlpbmcgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGVhY2ggZWxlbWVudCwgYW5kIHRoZW4gZmxhdHRlbnMgdGhlIHJlc3VsdHMgaW50byBhIHNpbmdsZSBhcnJheS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgaW5wdXQgYXJyYXkuXG4gKiBAdHlwZVBhcmFtIFUgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgb3V0cHV0IGFycmF5LlxuICogQHBhcmFtIGFyciAtIFRoZSBhcnJheSB0byBtYXAgb3ZlciBhbmQgZmxhdHRlbi5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGVsZW1lbnQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggYSBmbGF0dGVuZWQgYXJyYXkgb2YgdGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXN5bmNGbGF0TWFwPFQsIFU+KGFycjogVFtdLCBjYWxsYmFjazogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogVFtdKSA9PiBQcm9taXNhYmxlPFVbXT4pOiBQcm9taXNlPFVbXT4ge1xuICByZXR1cm4gKGF3YWl0IGFzeW5jTWFwKGFyciwgY2FsbGJhY2spKS5mbGF0KCk7XG59XG5cbi8qKlxuICogTWFwcyBvdmVyIGFuIGFycmF5IGFzeW5jaHJvbm91c2x5LCBhcHBseWluZyB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZWFjaCBlbGVtZW50LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBpbnB1dCBhcnJheS5cbiAqIEB0eXBlUGFyYW0gVSAtIFRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBvdXRwdXQgYXJyYXkuXG4gKiBAcGFyYW0gYXJyIC0gVGhlIGFycmF5IHRvIG1hcCBvdmVyLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggZWxlbWVudC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3luY01hcDxULCBVPihhcnI6IFRbXSwgY2FsbGJhY2s6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFRbXSkgPT4gUHJvbWlzYWJsZTxVPik6IFByb21pc2U8VVtdPiB7XG4gIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChhcnIubWFwKGNhbGxiYWNrKSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGEgc3luY2hyb25vdXMgb25lIGJ5IGF1dG9tYXRpY2FsbHkgaGFuZGxpbmcgdGhlIFByb21pc2UgcmVqZWN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gQXJncyAtIFRoZSB0eXBlcyBvZiB0aGUgYXJndW1lbnRzIHRoZSBmdW5jdGlvbiBhY2NlcHRzLlxuICogQHBhcmFtIGFzeW5jRnVuYyAtIFRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCB3cmFwcyB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGluIGEgc3luY2hyb25vdXMgaW50ZXJmYWNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEFzeW5jVG9TeW5jPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10+KGFzeW5jRnVuYzogKC4uLmFyZ3M6IEFyZ3MpID0+IFByb21pc2U8dW5rbm93bj4pOiAoLi4uYXJnczogQXJncykgPT4gdm9pZCB7XG4gIHJldHVybiAoLi4uYXJnczogQXJncyk6IHZvaWQgPT4ge1xuICAgIGludm9rZUFzeW5jU2FmZWx5KCgpID0+IGFzeW5jRnVuYyguLi5hcmdzKSk7XG4gIH07XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzeW5jaHJvbm91cyBmdW5jdGlvbiB0byBhbiBhc3luY2hyb25vdXMgb25lIGJ5IHdyYXBwaW5nIGl0IGluIGEge0BsaW5rIFByb21pc2V9LlxuICpcbiAqIEB0eXBlUGFyYW0gQXJncyAtIFRoZSB0eXBlcyBvZiB0aGUgYXJndW1lbnRzIHRoZSBmdW5jdGlvbiBhY2NlcHRzLlxuICogQHR5cGVQYXJhbSBSZXN1bHQgLSBUaGUgdHlwZSBvZiB0aGUgZnVuY3Rpb24ncyByZXR1cm4gdmFsdWUuXG4gKiBAcGFyYW0gc3luY0ZuIC0gVGhlIHN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQgd3JhcHMgdGhlIHN5bmNocm9ub3VzIGZ1bmN0aW9uIGluIGFuIGFzeW5jaHJvbm91cyBpbnRlcmZhY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0U3luY1RvQXN5bmM8QXJncyBleHRlbmRzIHVua25vd25bXSwgUmVzdWx0PihzeW5jRm46ICguLi5hcmdzOiBBcmdzKSA9PiBSZXN1bHQpOiAoLi4uYXJnczogQXJncykgPT4gUHJvbWlzZTxSZXN1bHQ+IHtcbiAgcmV0dXJuICguLi5hcmdzOiBBcmdzKTogUHJvbWlzZTxSZXN1bHQ+ID0+IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gc3luY0ZuKC4uLmFyZ3MpKTtcbn1cblxuLyoqXG4gKiBJZ25vcmVzIGFuIGVycm9yIHRoYXQgaXMgdGhyb3duIGJ5IGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gcHJvbWlzZSAtIFRoZSBwcm9taXNlIHRvIGlnbm9yZSB0aGUgZXJyb3Igb2YuXG4gKiBAcGFyYW0gZmFsbGJhY2tWYWx1ZSAtIEFsd2F5cyBgdW5kZWZpbmVkYC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGNvbXBsZXRlcyBvciBmYWlscy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlnbm9yZUVycm9yKHByb21pc2U6IFByb21pc2U8dW5rbm93bj4sIGZhbGxiYWNrVmFsdWU/OiB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+O1xuXG4vKipcbiAqIEludm9rZXMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGFuZCByZXR1cm5zIGEgZmFsbGJhY2sgdmFsdWUgaWYgYW4gZXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHByb21pc2UgLSBUaGUgcHJvbWlzZSB0byBpZ25vcmUgdGhlIGVycm9yIG9mLlxuICogQHBhcmFtIGZhbGxiYWNrVmFsdWUgLSBUaGUgdmFsdWUgdG8gcmV0dXJuIGlmIGFuIGVycm9yIGlzIHRocm93bi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBvciB0aGUgZmFsbGJhY2sgdmFsdWUgaWYgYW4gZXJyb3IgaXMgdGhyb3duLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaWdub3JlRXJyb3I8VD4ocHJvbWlzZTogUHJvbWlzZTxUPiwgZmFsbGJhY2tWYWx1ZTogVCk6IFByb21pc2U8VD4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBwcm9taXNlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsbGJhY2tWYWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEludm9rZXMgYSB7QGxpbmsgUHJvbWlzZX0gYW5kIHNhZmVseSBoYW5kbGVzIGFueSBlcnJvcnMgYnkgY2F0Y2hpbmcgdGhlbSBhbmQgZW1pdHRpbmcgYW4gYXN5bmMgZXJyb3IgZXZlbnQuXG4gKlxuICogQHBhcmFtIGFzeW5jRm4gLSBUaGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGludm9rZSBzYWZlbHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZva2VBc3luY1NhZmVseShhc3luY0ZuOiAoKSA9PiBQcm9taXNlPHVua25vd24+KTogdm9pZCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gIHZvaWQgYWRkRXJyb3JIYW5kbGVyKGFzeW5jRm4pO1xufVxuXG4vKipcbiAqIEludm9rZXMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGFmdGVyIGEgZGVsYXkuXG4gKlxuICogQHBhcmFtIGFzeW5jRm4gLSBUaGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSBkZWxheUluTWlsbGlzZWNvbmRzIC0gVGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludm9rZUFzeW5jU2FmZWx5QWZ0ZXJEZWxheShhc3luY0ZuOiAoKSA9PiBQcm9taXNhYmxlPHVua25vd24+LCBkZWxheUluTWlsbGlzZWNvbmRzID0gMCk6IHZvaWQge1xuICBzZXRUaW1lb3V0KGNvbnZlcnRBc3luY1RvU3luYyhhc3luYyAoKSA9PiBhd2FpdCBhc3luY0ZuKCkpLCBkZWxheUluTWlsbGlzZWNvbmRzKTtcbn1cblxuLyoqXG4gKiBNYXJrcyBhbiBlcnJvciB0byB0ZXJtaW5hdGUgcmV0cnkgbG9naWMuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIG1hcmsgdG8gdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICogQHJldHVybnMgQW4gZXJyb3IgdGhhdCBzaG91bGQgdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFya3NBc1Rlcm1pbmF0ZVJldHJ5PFRFcnJvciBleHRlbmRzIEVycm9yPihlcnJvcjogVEVycm9yKTogVGVybWluYXRlUmV0cnkgJiBURXJyb3Ige1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihlcnJvciwgeyBfX3Rlcm1pbmF0ZVJldHJ5OiB0cnVlIH0pIGFzIFRlcm1pbmF0ZVJldHJ5ICYgVEVycm9yO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIG5leHQgcmVxdWVzdCBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbmV4dCByZXF1ZXN0IGFuaW1hdGlvbiBmcmFtZSBpcyBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWVBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0cmllcyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gdW50aWwgaXQgcmV0dXJucyB0cnVlIG9yIHRoZSB0aW1lb3V0IGlzIHJlYWNoZWQuXG4gKlxuICogQHBhcmFtIGZuIC0gVGhlIGZ1bmN0aW9uIHRvIHJldHJ5LlxuICogQHBhcmFtIHJldHJ5T3B0aW9ucyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMgdG8gY29uZmlndXJlIHRoZSByZXRyeSBiZWhhdmlvci5cbiAqIEBwYXJhbSBzdGFja1RyYWNlIC0gT3B0aW9uYWwgc3RhY2sgdHJhY2UuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBvciByZWplY3RzIHdoZW4gdGhlIHRpbWVvdXQgaXMgcmVhY2hlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJldHJ5V2l0aFRpbWVvdXQoZm46ICgpID0+IFByb21pc2FibGU8Ym9vbGVhbj4sIHJldHJ5T3B0aW9ucz86IFJldHJ5T3B0aW9ucywgc3RhY2tUcmFjZT86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByZXRyeVdpdGhUaW1lb3V0RGVidWdnZXIgPSBnZXRMaWJEZWJ1Z2dlcignQXN5bmM6cmV0cnlXaXRoVGltZW91dCcpO1xuICBzdGFja1RyYWNlID8/PSBnZXRTdGFja1RyYWNlKDEpO1xuICBjb25zdCBERUZBVUxUX1JFVFJZX09QVElPTlMgPSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnNcbiAgICByZXRyeURlbGF5SW5NaWxsaXNlY29uZHM6IDEwMCxcbiAgICBzaG91bGRSZXRyeU9uRXJyb3I6IGZhbHNlLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gICAgdGltZW91dEluTWlsbGlzZWNvbmRzOiA1MDAwXG4gIH07XG4gIGNvbnN0IGZ1bGxPcHRpb25zID0geyAuLi5ERUZBVUxUX1JFVFJZX09QVElPTlMsIC4uLnJldHJ5T3B0aW9ucyB9O1xuICBhd2FpdCBydW5XaXRoVGltZW91dChmdWxsT3B0aW9ucy50aW1lb3V0SW5NaWxsaXNlY29uZHMsIGFzeW5jICgpID0+IHtcbiAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb25cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgZnVsbE9wdGlvbnMuYWJvcnRTaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgICBhdHRlbXB0Kys7XG4gICAgICBsZXQgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaXNTdWNjZXNzID0gYXdhaXQgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghZnVsbE9wdGlvbnMuc2hvdWxkUmV0cnlPbkVycm9yIHx8IChlcnJvciBhcyBQYXJ0aWFsPFRlcm1pbmF0ZVJldHJ5PikuX190ZXJtaW5hdGVSZXRyeSkge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHByaW50RXJyb3IoZXJyb3IpO1xuICAgICAgICBpc1N1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1N1Y2Nlc3MpIHtcbiAgICAgICAgaWYgKGF0dGVtcHQgPiAxKSB7XG4gICAgICAgICAgcmV0cnlXaXRoVGltZW91dERlYnVnZ2VyKGBSZXRyeSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IGFmdGVyICR7YXR0ZW1wdC50b1N0cmluZygpfSBhdHRlbXB0c2ApO1xuICAgICAgICAgIHJldHJ5V2l0aFRpbWVvdXREZWJ1Z2dlci5wcmludFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZXRyeVdpdGhUaW1lb3V0RGVidWdnZXIoXG4gICAgICAgIGBSZXRyeSBhdHRlbXB0ICR7YXR0ZW1wdC50b1N0cmluZygpfSBjb21wbGV0ZWQgdW5zdWNjZXNzZnVsbHkuIFRyeWluZyBhZ2FpbiBpbiAke2Z1bGxPcHRpb25zLnJldHJ5RGVsYXlJbk1pbGxpc2Vjb25kcy50b1N0cmluZygpfSBtaWxsaXNlY29uZHNgLFxuICAgICAgICB7XG4gICAgICAgICAgZm5cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHJldHJ5V2l0aFRpbWVvdXREZWJ1Z2dlci5wcmludFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSk7XG4gICAgICBhd2FpdCBzbGVlcChmdWxsT3B0aW9ucy5yZXRyeURlbGF5SW5NaWxsaXNlY29uZHMpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogRXhlY3V0ZXMgYSBmdW5jdGlvbiB3aXRoIGEgdGltZW91dC4gSWYgdGhlIGZ1bmN0aW9uIGRvZXMgbm90IGNvbXBsZXRlIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHRpbWUsIGl0IGlzIGNvbnNpZGVyZWQgdG8gaGF2ZSB0aW1lZCBvdXQuXG4gKlxuICogSWYgYERFQlVHPW9ic2lkaWFuLWRldi11dGlsczpBc3luYzpydW5XaXRoVGltZW91dGAgaXMgc2V0LCB0aGUgZXhlY3V0aW9uIGlzIG5vdCB0ZXJtaW5hdGVkIGFmdGVyIHRoZSB0aW1lb3V0IGFuZCB0aGUgZnVuY3Rpb24gaXMgYWxsb3dlZCB0byBydW4gaW5kZWZpbml0ZWx5LlxuICpcbiAqIEB0eXBlUGFyYW0gUiAtIFRoZSB0eXBlIG9mIHRoZSByZXN1bHQgZnJvbSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHRpbWVvdXRJbk1pbGxpc2Vjb25kcyAtIFRoZSBtYXhpbXVtIHRpbWUgdG8gd2FpdCBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcGFyYW0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gZXhlY3V0ZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gb3IgcmVqZWN0cyBpZiBpdCB0aW1lcyBvdXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5XaXRoVGltZW91dDxSPih0aW1lb3V0SW5NaWxsaXNlY29uZHM6IG51bWJlciwgZm46ICgpID0+IFByb21pc2FibGU8Uj4pOiBQcm9taXNlPFI+IHtcbiAgbGV0IGlzVGltZWRPdXQgPSB0cnVlO1xuICBsZXQgcmVzdWx0OiBSID0gbnVsbCBhcyBSO1xuICBjb25zdCBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgYXdhaXQgUHJvbWlzZS5yYWNlKFtydW4oKSwgaW5uZXJUaW1lb3V0KCldKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb25cbiAgaWYgKGlzVGltZWRPdXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RpbWVkIG91dCcpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG5cbiAgYXN5bmMgZnVuY3Rpb24gcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJlc3VsdCA9IGF3YWl0IGZuKCk7XG4gICAgaXNUaW1lZE91dCA9IGZhbHNlO1xuICAgIGNvbnN0IGR1cmF0aW9uID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWU7XG4gICAgZ2V0TGliRGVidWdnZXIoJ0FzeW5jOnJ1bldpdGhUaW1lb3V0JykoYEV4ZWN1dGlvbiB0aW1lOiAke2R1cmF0aW9uLnRvU3RyaW5nKCl9IG1pbGxpc2Vjb25kc2AsIHsgZm4gfSk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBpbm5lclRpbWVvdXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFpc1RpbWVkT3V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHNsZWVwKHRpbWVvdXRJbk1pbGxpc2Vjb25kcyk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb25cbiAgICBpZiAoIWlzVGltZWRPdXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZHVyYXRpb24gPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICBjb25zb2xlLndhcm4oYFRpbWVkIG91dCBpbiAke2R1cmF0aW9uLnRvU3RyaW5nKCl9IG1pbGxpc2Vjb25kc2AsIHsgZm4gfSk7XG4gICAgY29uc3QgX2RlYnVnZ2VyID0gZ2V0TGliRGVidWdnZXIoJ0FzeW5jOnJ1bldpdGhUaW1lb3V0OnRpbWVvdXQnKTtcbiAgICBpZiAoX2RlYnVnZ2VyLmVuYWJsZWQpIHtcbiAgICAgIF9kZWJ1Z2dlcihcbiAgICAgICAgYFRoZSBleGVjdXRpb24gaXMgbm90IHRlcm1pbmF0ZWQgYmVjYXVzZSBkZWJ1Z2dlciAke19kZWJ1Z2dlci5uYW1lc3BhY2V9IGlzIGVuYWJsZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW5hb3Vtb3Yvb2JzaWRpYW4tZGV2LXV0aWxzL2Jsb2IvbWFpbi9kb2NzL2RlYnVnZ2luZy5tZCBmb3IgbW9yZSBpbmZvcm1hdGlvbmBcbiAgICAgICk7XG4gICAgICBhd2FpdCBpbm5lclRpbWVvdXQoKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBEZWxheXMgZXhlY3V0aW9uIGZvciBhIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwYXJhbSBtaWxsaXNlY29uZHMgLSBUaGUgdGltZSB0byB3YWl0IGluIG1pbGxpc2Vjb25kcy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIHNwZWNpZmllZCBkZWxheS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNsZWVwKG1pbGxpc2Vjb25kczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCBtaWxsaXNlY29uZHMpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVqZWN0cyB3aGVuIHRoZSBhYm9ydCBzaWduYWwgaXMgYWJvcnRlZC5cbiAqXG4gKiBAcGFyYW0gYWJvcnRTaWduYWwgLSBUaGUgYWJvcnQgc2lnbmFsIHRvIGxpc3RlbiB0by5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVqZWN0cyB3aGVuIHRoZSBhYm9ydCBzaWduYWwgaXMgYWJvcnRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRocm93T25BYm9ydChhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChfcmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgaWYgKGhhbmRsZUFib3J0KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYWJvcnRTaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBoYW5kbGVBYm9ydCwgeyBvbmNlOiB0cnVlIH0pO1xuXG4gICAgZnVuY3Rpb24gaGFuZGxlQWJvcnQoKTogYm9vbGVhbiB7XG4gICAgICB0cnkge1xuICAgICAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJlamVjdChlIGFzIEVycm9yKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVqZWN0cyBhZnRlciB0aGUgc3BlY2lmaWVkIHRpbWVvdXQgcGVyaW9kLlxuICpcbiAqIEBwYXJhbSB0aW1lb3V0SW5NaWxsaXNlY29uZHMgLSBUaGUgdGltZW91dCBwZXJpb2QgaW4gbWlsbGlzZWNvbmRzLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCBhbHdheXMgcmVqZWN0cyB3aXRoIGEgdGltZW91dCBlcnJvci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRpbWVvdXQodGltZW91dEluTWlsbGlzZWNvbmRzOiBudW1iZXIpOiBQcm9taXNlPG5ldmVyPiB7XG4gIGF3YWl0IHNsZWVwKHRpbWVvdXRJbk1pbGxpc2Vjb25kcyk7XG4gIHRocm93IG5ldyBFcnJvcihgVGltZWQgb3V0IGluICR7dGltZW91dEluTWlsbGlzZWNvbmRzLnRvU3RyaW5nKCl9IG1pbGxpc2Vjb25kc2ApO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0byBhbiBhcnJheSBieSBjb25zdW1pbmcgYWxsIGl0cyBlbGVtZW50cy5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBwcm9kdWNlZCBieSB0aGUgQXN5bmNJdGVyYWJsZUl0ZXJhdG9yLlxuICogQHBhcmFtIGl0ZXIgLSBUaGUgQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggYW4gYXJyYXkgb2YgYWxsIHRoZSBlbGVtZW50cyBpbiB0aGUgQXN5bmNJdGVyYWJsZUl0ZXJhdG9yLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdG9BcnJheTxUPihpdGVyOiBBc3luY0l0ZXJhYmxlSXRlcmF0b3I8VD4pOiBQcm9taXNlPFRbXT4ge1xuICBjb25zdCBhcnI6IFRbXSA9IFtdO1xuICBmb3IgYXdhaXQgKGNvbnN0IGl0ZW0gb2YgaXRlcikge1xuICAgIGFyci5wdXNoKGl0ZW0pO1xuICB9XG4gIHJldHVybiBhcnI7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7O0FBUUEsU0FBUyxzQkFBc0I7QUFDL0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQW1EUCxlQUFzQixnQkFBZ0IsU0FBZ0Q7QUFDcEYsUUFBTSxvQkFBb0IsSUFBSSxNQUFNLDJCQUEyQjtBQUMvRCxNQUFJO0FBQ0YsVUFBTSxRQUFRO0FBQUEsRUFDaEIsU0FBUyxZQUFZO0FBQ25CLHNCQUFrQixRQUFRO0FBQzFCLHdCQUFvQixpQkFBaUI7QUFBQSxFQUN2QztBQUNGO0FBVUEsZUFBc0IsWUFBZSxLQUFVLFdBQXVGO0FBQ3BJLFFBQU0sbUJBQW1CLE1BQU0sU0FBUyxLQUFLLFNBQVM7QUFDdEQsU0FBTyxJQUFJLE9BQU8sQ0FBQyxHQUFHLFVBQVUsaUJBQWlCLEtBQUssS0FBSyxLQUFLO0FBQ2xFO0FBV0EsZUFBc0IsYUFBbUIsS0FBVSxVQUFrRjtBQUNuSSxVQUFRLE1BQU0sU0FBUyxLQUFLLFFBQVEsR0FBRyxLQUFLO0FBQzlDO0FBV0EsZUFBc0IsU0FB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
|
195
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL0FzeW5jLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBhc3luY2hyb25vdXMgb3BlcmF0aW9ucy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBnZXRMaWJEZWJ1Z2dlciB9IGZyb20gJy4vRGVidWcudHMnO1xuaW1wb3J0IHtcbiAgQVNZTkNfRVJST1JfV1JBUFBFUl9NRVNTQUdFLFxuICBlbWl0QXN5bmNFcnJvckV2ZW50LFxuICBnZXRTdGFja1RyYWNlLFxuICBwcmludEVycm9yXG59IGZyb20gJy4vRXJyb3IudHMnO1xuXG4vKipcbiAqIEEgdHlwZSByZXByZXNlbnRpbmcgYSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIGEge0BsaW5rIFByb21pc2V9LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZS5cbiAqL1xuZXhwb3J0IHR5cGUgUHJvbWlzZVJlc29sdmU8VD4gPSB1bmRlZmluZWQgZXh0ZW5kcyBUID8gKHZhbHVlPzogUHJvbWlzZUxpa2U8VD4gfCBUKSA9PiB2b2lkXG4gIDogKHZhbHVlOiBQcm9taXNlTGlrZTxUPiB8IFQpID0+IHZvaWQ7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgdGhlIHJldHJ5IGJlaGF2aW9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYWJvcnQgc2lnbmFsIHRvIGNhbmNlbCB0aGUgcmV0cnkgb3BlcmF0aW9uLlxuICAgKi9cbiAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDtcblxuICAvKipcbiAgICogVGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHJldHJ5IGF0dGVtcHRzLlxuICAgKi9cbiAgcmV0cnlEZWxheUluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJldHJ5IHRoZSBmdW5jdGlvbiBvbiBlcnJvci5cbiAgICovXG4gIHNob3VsZFJldHJ5T25FcnJvcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIGdpdmluZyB1cCBvbiByZXRyeWluZy5cbiAgICovXG4gIHRpbWVvdXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBIG1hcmtlciBpbnRlcmZhY2UgdG8gaW5kaWNhdGUgdGhhdCBhbiBlcnJvciBzaG91bGQgdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlcm1pbmF0ZVJldHJ5IHtcbiAgLyoqXG4gICAqIEEgbWFya2VyIHByb3BlcnR5IHRvIGluZGljYXRlIHRoYXQgYW4gZXJyb3Igc2hvdWxkIHRlcm1pbmF0ZSByZXRyeSBsb2dpYy5cbiAgICovXG4gIF9fdGVybWluYXRlUmV0cnk6IHRydWU7XG59XG5cbi8qKlxuICogQWRkcyBhbiBlcnJvciBoYW5kbGVyIHRvIGEge0BsaW5rIFByb21pc2V9IHRoYXQgY2F0Y2hlcyBhbnkgZXJyb3JzIGFuZCBlbWl0cyBhbiBhc3luYyBlcnJvciBldmVudC5cbiAqXG4gKiBAcGFyYW0gYXN5bmNGbiAtIFRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gYWRkIGFuIGVycm9yIGhhbmRsZXIgdG8uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBjb21wbGV0ZXMgb3IgZW1pdHMgYXN5bmMgZXJyb3IgZXZlbnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZGRFcnJvckhhbmRsZXIoYXN5bmNGbjogKCkgPT4gUHJvbWlzZTx1bmtub3duPik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBhc3luY0Vycm9yV3JhcHBlciA9IG5ldyBFcnJvcihBU1lOQ19FUlJPUl9XUkFQUEVSX01FU1NBR0UpO1xuICB0cnkge1xuICAgIGF3YWl0IGFzeW5jRm4oKTtcbiAgfSBjYXRjaCAoYXN5bmNFcnJvcikge1xuICAgIGFzeW5jRXJyb3JXcmFwcGVyLmNhdXNlID0gYXN5bmNFcnJvcjtcbiAgICBlbWl0QXN5bmNFcnJvckV2ZW50KGFzeW5jRXJyb3JXcmFwcGVyKTtcbiAgfVxufVxuXG4vKipcbiAqIEZpbHRlcnMgYW4gYXJyYXkgYXN5bmNocm9ub3VzbHksIGtlZXBpbmcgb25seSB0aGUgZWxlbWVudHMgdGhhdCBzYXRpc2Z5IHRoZSBwcm92aWRlZCBwcmVkaWNhdGUgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgZWxlbWVudHMgaW4gdGhlIGlucHV0IGFycmF5LlxuICogQHBhcmFtIGFyciAtIFRoZSBhcnJheSB0byBmaWx0ZXIuXG4gKiBAcGFyYW0gcHJlZGljYXRlIC0gVGhlIHByZWRpY2F0ZSBmdW5jdGlvbiB0byB0ZXN0IGVhY2ggZWxlbWVudC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiBlbGVtZW50cyB0aGF0IHNhdGlzZnkgdGhlIHByZWRpY2F0ZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzeW5jRmlsdGVyPFQ+KGFycjogVFtdLCBwcmVkaWNhdGU6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFRbXSkgPT4gUHJvbWlzYWJsZTxib29sZWFuPik6IFByb21pc2U8VFtdPiB7XG4gIGNvbnN0IHByZWRpY2F0ZVJlc3VsdHMgPSBhd2FpdCBhc3luY01hcChhcnIsIHByZWRpY2F0ZSk7XG4gIHJldHVybiBhcnIuZmlsdGVyKChfLCBpbmRleCkgPT4gcHJlZGljYXRlUmVzdWx0c1tpbmRleF0gPz8gZmFsc2UpO1xufVxuXG4vKipcbiAqIE1hcHMgb3ZlciBhbiBhcnJheSBhc3luY2hyb25vdXNseSwgYXBwbHlpbmcgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGVhY2ggZWxlbWVudCwgYW5kIHRoZW4gZmxhdHRlbnMgdGhlIHJlc3VsdHMgaW50byBhIHNpbmdsZSBhcnJheS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgaW5wdXQgYXJyYXkuXG4gKiBAdHlwZVBhcmFtIFUgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgb3V0cHV0IGFycmF5LlxuICogQHBhcmFtIGFyciAtIFRoZSBhcnJheSB0byBtYXAgb3ZlciBhbmQgZmxhdHRlbi5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGVsZW1lbnQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggYSBmbGF0dGVuZWQgYXJyYXkgb2YgdGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXN5bmNGbGF0TWFwPFQsIFU+KGFycjogVFtdLCBjYWxsYmFjazogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogVFtdKSA9PiBQcm9taXNhYmxlPFVbXT4pOiBQcm9taXNlPFVbXT4ge1xuICByZXR1cm4gKGF3YWl0IGFzeW5jTWFwKGFyciwgY2FsbGJhY2spKS5mbGF0KCk7XG59XG5cbi8qKlxuICogTWFwcyBvdmVyIGFuIGFycmF5IGFzeW5jaHJvbm91c2x5LCBhcHBseWluZyB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZWFjaCBlbGVtZW50LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBpbnB1dCBhcnJheS5cbiAqIEB0eXBlUGFyYW0gVSAtIFRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBvdXRwdXQgYXJyYXkuXG4gKiBAcGFyYW0gYXJyIC0gVGhlIGFycmF5IHRvIG1hcCBvdmVyLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggZWxlbWVudC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3luY01hcDxULCBVPihhcnI6IFRbXSwgY2FsbGJhY2s6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFRbXSkgPT4gUHJvbWlzYWJsZTxVPik6IFByb21pc2U8VVtdPiB7XG4gIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChhcnIubWFwKGNhbGxiYWNrKSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGEgc3luY2hyb25vdXMgb25lIGJ5IGF1dG9tYXRpY2FsbHkgaGFuZGxpbmcgdGhlIFByb21pc2UgcmVqZWN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gQXJncyAtIFRoZSB0eXBlcyBvZiB0aGUgYXJndW1lbnRzIHRoZSBmdW5jdGlvbiBhY2NlcHRzLlxuICogQHBhcmFtIGFzeW5jRnVuYyAtIFRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCB3cmFwcyB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGluIGEgc3luY2hyb25vdXMgaW50ZXJmYWNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEFzeW5jVG9TeW5jPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10+KGFzeW5jRnVuYzogKC4uLmFyZ3M6IEFyZ3MpID0+IFByb21pc2U8dW5rbm93bj4pOiAoLi4uYXJnczogQXJncykgPT4gdm9pZCB7XG4gIHJldHVybiAoLi4uYXJnczogQXJncyk6IHZvaWQgPT4ge1xuICAgIGludm9rZUFzeW5jU2FmZWx5KCgpID0+IGFzeW5jRnVuYyguLi5hcmdzKSk7XG4gIH07XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzeW5jaHJvbm91cyBmdW5jdGlvbiB0byBhbiBhc3luY2hyb25vdXMgb25lIGJ5IHdyYXBwaW5nIGl0IGluIGEge0BsaW5rIFByb21pc2V9LlxuICpcbiAqIEB0eXBlUGFyYW0gQXJncyAtIFRoZSB0eXBlcyBvZiB0aGUgYXJndW1lbnRzIHRoZSBmdW5jdGlvbiBhY2NlcHRzLlxuICogQHR5cGVQYXJhbSBSZXN1bHQgLSBUaGUgdHlwZSBvZiB0aGUgZnVuY3Rpb24ncyByZXR1cm4gdmFsdWUuXG4gKiBAcGFyYW0gc3luY0ZuIC0gVGhlIHN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQgd3JhcHMgdGhlIHN5bmNocm9ub3VzIGZ1bmN0aW9uIGluIGFuIGFzeW5jaHJvbm91cyBpbnRlcmZhY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0U3luY1RvQXN5bmM8QXJncyBleHRlbmRzIHVua25vd25bXSwgUmVzdWx0PihzeW5jRm46ICguLi5hcmdzOiBBcmdzKSA9PiBSZXN1bHQpOiAoLi4uYXJnczogQXJncykgPT4gUHJvbWlzZTxSZXN1bHQ+IHtcbiAgcmV0dXJuICguLi5hcmdzOiBBcmdzKTogUHJvbWlzZTxSZXN1bHQ+ID0+IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gc3luY0ZuKC4uLmFyZ3MpKTtcbn1cblxuLyoqXG4gKiBJZ25vcmVzIGFuIGVycm9yIHRoYXQgaXMgdGhyb3duIGJ5IGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gcHJvbWlzZSAtIFRoZSBwcm9taXNlIHRvIGlnbm9yZSB0aGUgZXJyb3Igb2YuXG4gKiBAcGFyYW0gZmFsbGJhY2tWYWx1ZSAtIEFsd2F5cyBgdW5kZWZpbmVkYC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGNvbXBsZXRlcyBvciBmYWlscy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlnbm9yZUVycm9yKHByb21pc2U6IFByb21pc2U8dW5rbm93bj4sIGZhbGxiYWNrVmFsdWU/OiB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+O1xuXG4vKipcbiAqIEludm9rZXMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGFuZCByZXR1cm5zIGEgZmFsbGJhY2sgdmFsdWUgaWYgYW4gZXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHByb21pc2UgLSBUaGUgcHJvbWlzZSB0byBpZ25vcmUgdGhlIGVycm9yIG9mLlxuICogQHBhcmFtIGZhbGxiYWNrVmFsdWUgLSBUaGUgdmFsdWUgdG8gcmV0dXJuIGlmIGFuIGVycm9yIGlzIHRocm93bi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBvciB0aGUgZmFsbGJhY2sgdmFsdWUgaWYgYW4gZXJyb3IgaXMgdGhyb3duLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaWdub3JlRXJyb3I8VD4ocHJvbWlzZTogUHJvbWlzZTxUPiwgZmFsbGJhY2tWYWx1ZTogVCk6IFByb21pc2U8VD4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBwcm9taXNlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsbGJhY2tWYWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEludm9rZXMgYSB7QGxpbmsgUHJvbWlzZX0gYW5kIHNhZmVseSBoYW5kbGVzIGFueSBlcnJvcnMgYnkgY2F0Y2hpbmcgdGhlbSBhbmQgZW1pdHRpbmcgYW4gYXN5bmMgZXJyb3IgZXZlbnQuXG4gKlxuICogQHBhcmFtIGFzeW5jRm4gLSBUaGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGludm9rZSBzYWZlbHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZva2VBc3luY1NhZmVseShhc3luY0ZuOiAoKSA9PiBQcm9taXNlPHVua25vd24+KTogdm9pZCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gIHZvaWQgYWRkRXJyb3JIYW5kbGVyKGFzeW5jRm4pO1xufVxuXG4vKipcbiAqIEludm9rZXMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGFmdGVyIGEgZGVsYXkuXG4gKlxuICogQHBhcmFtIGFzeW5jRm4gLSBUaGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSBkZWxheUluTWlsbGlzZWNvbmRzIC0gVGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludm9rZUFzeW5jU2FmZWx5QWZ0ZXJEZWxheShhc3luY0ZuOiAoKSA9PiBQcm9taXNhYmxlPHVua25vd24+LCBkZWxheUluTWlsbGlzZWNvbmRzID0gMCk6IHZvaWQge1xuICBzZXRUaW1lb3V0KGNvbnZlcnRBc3luY1RvU3luYyhhc3luYyAoKSA9PiBhd2FpdCBhc3luY0ZuKCkpLCBkZWxheUluTWlsbGlzZWNvbmRzKTtcbn1cblxuLyoqXG4gKiBNYXJrcyBhbiBlcnJvciB0byB0ZXJtaW5hdGUgcmV0cnkgbG9naWMuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIG1hcmsgdG8gdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICogQHJldHVybnMgQW4gZXJyb3IgdGhhdCBzaG91bGQgdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFya3NBc1Rlcm1pbmF0ZVJldHJ5PFRFcnJvciBleHRlbmRzIEVycm9yPihlcnJvcjogVEVycm9yKTogVGVybWluYXRlUmV0cnkgJiBURXJyb3Ige1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihlcnJvciwgeyBfX3Rlcm1pbmF0ZVJldHJ5OiB0cnVlIH0pIGFzIFRlcm1pbmF0ZVJldHJ5ICYgVEVycm9yO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIG5leHQgcmVxdWVzdCBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbmV4dCByZXF1ZXN0IGFuaW1hdGlvbiBmcmFtZSBpcyBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWVBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0cmllcyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gdW50aWwgaXQgcmV0dXJucyB0cnVlIG9yIHRoZSB0aW1lb3V0IGlzIHJlYWNoZWQuXG4gKlxuICogQHBhcmFtIGZuIC0gVGhlIGZ1bmN0aW9uIHRvIHJldHJ5LlxuICogQHBhcmFtIHJldHJ5T3B0aW9ucyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMgdG8gY29uZmlndXJlIHRoZSByZXRyeSBiZWhhdmlvci5cbiAqIEBwYXJhbSBzdGFja1RyYWNlIC0gT3B0aW9uYWwgc3RhY2sgdHJhY2UuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBvciByZWplY3RzIHdoZW4gdGhlIHRpbWVvdXQgaXMgcmVhY2hlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJldHJ5V2l0aFRpbWVvdXQoZm46ICgpID0+IFByb21pc2FibGU8Ym9vbGVhbj4sIHJldHJ5T3B0aW9ucz86IFJldHJ5T3B0aW9ucywgc3RhY2tUcmFjZT86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByZXRyeVdpdGhUaW1lb3V0RGVidWdnZXIgPSBnZXRMaWJEZWJ1Z2dlcignQXN5bmM6cmV0cnlXaXRoVGltZW91dCcpO1xuICBzdGFja1RyYWNlID8/PSBnZXRTdGFja1RyYWNlKDEpO1xuICBjb25zdCBERUZBVUxUX1JFVFJZX09QVElPTlMgPSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnNcbiAgICByZXRyeURlbGF5SW5NaWxsaXNlY29uZHM6IDEwMCxcbiAgICBzaG91bGRSZXRyeU9uRXJyb3I6IGZhbHNlLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gICAgdGltZW91dEluTWlsbGlzZWNvbmRzOiA1MDAwXG4gIH07XG4gIGNvbnN0IGZ1bGxPcHRpb25zID0geyAuLi5ERUZBVUxUX1JFVFJZX09QVElPTlMsIC4uLnJldHJ5T3B0aW9ucyB9O1xuICBhd2FpdCBydW5XaXRoVGltZW91dChmdWxsT3B0aW9ucy50aW1lb3V0SW5NaWxsaXNlY29uZHMsIGFzeW5jICgpID0+IHtcbiAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb25cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgZnVsbE9wdGlvbnMuYWJvcnRTaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgICBhdHRlbXB0Kys7XG4gICAgICBsZXQgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaXNTdWNjZXNzID0gYXdhaXQgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghZnVsbE9wdGlvbnMuc2hvdWxkUmV0cnlPbkVycm9yIHx8IChlcnJvciBhcyBQYXJ0aWFsPFRlcm1pbmF0ZVJldHJ5PikuX190ZXJtaW5hdGVSZXRyeSkge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHByaW50RXJyb3IoZXJyb3IpO1xuICAgICAgICBpc1N1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1N1Y2Nlc3MpIHtcbiAgICAgICAgaWYgKGF0dGVtcHQgPiAxKSB7XG4gICAgICAgICAgcmV0cnlXaXRoVGltZW91dERlYnVnZ2VyKGBSZXRyeSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IGFmdGVyICR7YXR0ZW1wdC50b1N0cmluZygpfSBhdHRlbXB0c2ApO1xuICAgICAgICAgIHJldHJ5V2l0aFRpbWVvdXREZWJ1Z2dlci5wcmludFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZXRyeVdpdGhUaW1lb3V0RGVidWdnZXIoXG4gICAgICAgIGBSZXRyeSBhdHRlbXB0ICR7YXR0ZW1wdC50b1N0cmluZygpfSBjb21wbGV0ZWQgdW5zdWNjZXNzZnVsbHkuIFRyeWluZyBhZ2FpbiBpbiAke2Z1bGxPcHRpb25zLnJldHJ5RGVsYXlJbk1pbGxpc2Vjb25kcy50b1N0cmluZygpfSBtaWxsaXNlY29uZHNgLFxuICAgICAgICB7XG4gICAgICAgICAgZm5cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHJldHJ5V2l0aFRpbWVvdXREZWJ1Z2dlci5wcmludFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSk7XG4gICAgICBhd2FpdCBzbGVlcChmdWxsT3B0aW9ucy5yZXRyeURlbGF5SW5NaWxsaXNlY29uZHMpO1xuICAgIH1cbiAgfSwgeyByZXRyeUZuOiBmbiB9KTtcbn1cblxuLyoqXG4gKiBFeGVjdXRlcyBhIGZ1bmN0aW9uIHdpdGggYSB0aW1lb3V0LiBJZiB0aGUgZnVuY3Rpb24gZG9lcyBub3QgY29tcGxldGUgd2l0aGluIHRoZSBzcGVjaWZpZWQgdGltZSwgaXQgaXMgY29uc2lkZXJlZCB0byBoYXZlIHRpbWVkIG91dC5cbiAqXG4gKiBJZiBgREVCVUc9b2JzaWRpYW4tZGV2LXV0aWxzOkFzeW5jOnJ1bldpdGhUaW1lb3V0YCBpcyBzZXQsIHRoZSBleGVjdXRpb24gaXMgbm90IHRlcm1pbmF0ZWQgYWZ0ZXIgdGhlIHRpbWVvdXQgYW5kIHRoZSBmdW5jdGlvbiBpcyBhbGxvd2VkIHRvIHJ1biBpbmRlZmluaXRlbHkuXG4gKlxuICogQHR5cGVQYXJhbSBSIC0gVGhlIHR5cGUgb2YgdGhlIHJlc3VsdCBmcm9tIHRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24uXG4gKiBAcGFyYW0gdGltZW91dEluTWlsbGlzZWNvbmRzIC0gVGhlIG1heGltdW0gdGltZSB0byB3YWl0IGluIG1pbGxpc2Vjb25kcy5cbiAqIEBwYXJhbSBmbiAtIFRoZSBmdW5jdGlvbiB0byBleGVjdXRlLlxuICogQHBhcmFtIGNvbnRleHQgLSBUaGUgY29udGV4dCBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIG9yIHJlamVjdHMgaWYgaXQgdGltZXMgb3V0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuV2l0aFRpbWVvdXQ8Uj4odGltZW91dEluTWlsbGlzZWNvbmRzOiBudW1iZXIsIGZuOiAoKSA9PiBQcm9taXNhYmxlPFI+LCBjb250ZXh0PzogdW5rbm93bik6IFByb21pc2U8Uj4ge1xuICBsZXQgaXNUaW1lZE91dCA9IHRydWU7XG4gIGxldCByZXN1bHQ6IFIgPSBudWxsIGFzIFI7XG4gIGNvbnN0IHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICBhd2FpdCBQcm9taXNlLnJhY2UoW3J1bigpLCBpbm5lclRpbWVvdXQoKV0pO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvblxuICBpZiAoaXNUaW1lZE91dCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGltZWQgb3V0Jyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcblxuICBhc3luYyBmdW5jdGlvbiBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmVzdWx0ID0gYXdhaXQgZm4oKTtcbiAgICBpc1RpbWVkT3V0ID0gZmFsc2U7XG4gICAgY29uc3QgZHVyYXRpb24gPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICBnZXRMaWJEZWJ1Z2dlcignQXN5bmM6cnVuV2l0aFRpbWVvdXQnKShgRXhlY3V0aW9uIHRpbWU6ICR7ZHVyYXRpb24udG9TdHJpbmcoKX0gbWlsbGlzZWNvbmRzYCwgeyBjb250ZXh0LCBmbiB9KTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGlubmVyVGltZW91dCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIWlzVGltZWRPdXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgc2xlZXAodGltZW91dEluTWlsbGlzZWNvbmRzKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvblxuICAgIGlmICghaXNUaW1lZE91dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkdXJhdGlvbiA9IHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgIGNvbnNvbGUud2FybihgVGltZWQgb3V0IGluICR7ZHVyYXRpb24udG9TdHJpbmcoKX0gbWlsbGlzZWNvbmRzYCwgeyBjb250ZXh0LCBmbiB9KTtcbiAgICBjb25zdCBfZGVidWdnZXIgPSBnZXRMaWJEZWJ1Z2dlcignQXN5bmM6cnVuV2l0aFRpbWVvdXQ6dGltZW91dCcpO1xuICAgIGlmIChfZGVidWdnZXIuZW5hYmxlZCkge1xuICAgICAgX2RlYnVnZ2VyKFxuICAgICAgICBgVGhlIGV4ZWN1dGlvbiBpcyBub3QgdGVybWluYXRlZCBiZWNhdXNlIGRlYnVnZ2VyICR7X2RlYnVnZ2VyLm5hbWVzcGFjZX0gaXMgZW5hYmxlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tbmFvdW1vdi9vYnNpZGlhbi1kZXYtdXRpbHMvYmxvYi9tYWluL2RvY3MvZGVidWdnaW5nLm1kIGZvciBtb3JlIGluZm9ybWF0aW9uYFxuICAgICAgKTtcbiAgICAgIGF3YWl0IGlubmVyVGltZW91dCgpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIERlbGF5cyBleGVjdXRpb24gZm9yIGEgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHBhcmFtIG1pbGxpc2Vjb25kcyAtIFRoZSB0aW1lIHRvIHdhaXQgaW4gbWlsbGlzZWNvbmRzLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBhZnRlciB0aGUgc3BlY2lmaWVkIGRlbGF5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2xlZXAobWlsbGlzZWNvbmRzOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIG1pbGxpc2Vjb25kcyk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZWplY3RzIHdoZW4gdGhlIGFib3J0IHNpZ25hbCBpcyBhYm9ydGVkLlxuICpcbiAqIEBwYXJhbSBhYm9ydFNpZ25hbCAtIFRoZSBhYm9ydCBzaWduYWwgdG8gbGlzdGVuIHRvLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZWplY3RzIHdoZW4gdGhlIGFib3J0IHNpZ25hbCBpcyBhYm9ydGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdGhyb3dPbkFib3J0KGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKF9yZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBpZiAoaGFuZGxlQWJvcnQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhYm9ydFNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGhhbmRsZUFib3J0LCB7IG9uY2U6IHRydWUgfSk7XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVBYm9ydCgpOiBib29sZWFuIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUgYXMgRXJyb3IpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZWplY3RzIGFmdGVyIHRoZSBzcGVjaWZpZWQgdGltZW91dCBwZXJpb2QuXG4gKlxuICogQHBhcmFtIHRpbWVvdXRJbk1pbGxpc2Vjb25kcyAtIFRoZSB0aW1lb3V0IHBlcmlvZCBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IGFsd2F5cyByZWplY3RzIHdpdGggYSB0aW1lb3V0IGVycm9yLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGltZW91dCh0aW1lb3V0SW5NaWxsaXNlY29uZHM6IG51bWJlcik6IFByb21pc2U8bmV2ZXI+IHtcbiAgYXdhaXQgc2xlZXAodGltZW91dEluTWlsbGlzZWNvbmRzKTtcbiAgdGhyb3cgbmV3IEVycm9yKGBUaW1lZCBvdXQgaW4gJHt0aW1lb3V0SW5NaWxsaXNlY29uZHMudG9TdHJpbmcoKX0gbWlsbGlzZWNvbmRzYCk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRvIGFuIGFycmF5IGJ5IGNvbnN1bWluZyBhbGwgaXRzIGVsZW1lbnRzLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIGVsZW1lbnRzIHByb2R1Y2VkIGJ5IHRoZSBBc3luY0l0ZXJhYmxlSXRlcmF0b3IuXG4gKiBAcGFyYW0gaXRlciAtIFRoZSBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiBhbGwgdGhlIGVsZW1lbnRzIGluIHRoZSBBc3luY0l0ZXJhYmxlSXRlcmF0b3IuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0b0FycmF5PFQ+KGl0ZXI6IEFzeW5jSXRlcmFibGVJdGVyYXRvcjxUPik6IFByb21pc2U8VFtdPiB7XG4gIGNvbnN0IGFycjogVFtdID0gW107XG4gIGZvciBhd2FpdCAoY29uc3QgaXRlbSBvZiBpdGVyKSB7XG4gICAgYXJyLnB1c2goaXRlbSk7XG4gIH1cbiAgcmV0dXJuIGFycjtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7QUFRQSxTQUFTLHNCQUFzQjtBQUMvQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBbURQLGVBQXNCLGdCQUFnQixTQUFnRDtBQUNwRixRQUFNLG9CQUFvQixJQUFJLE1BQU0sMkJBQTJCO0FBQy9ELE1BQUk7QUFDRixVQUFNLFFBQVE7QUFBQSxFQUNoQixTQUFTLFlBQVk7QUFDbkIsc0JBQWtCLFFBQVE7QUFDMUIsd0JBQW9CLGlCQUFpQjtBQUFBLEVBQ3ZDO0FBQ0Y7QUFVQSxlQUFzQixZQUFlLEtBQVUsV0FBdUY7QUFDcEksUUFBTSxtQkFBbUIsTUFBTSxTQUFTLEtBQUssU0FBUztBQUN0RCxTQUFPLElBQUksT0FBTyxDQUFDLEdBQUcsVUFBVSxpQkFBaUIsS0FBSyxL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O0FBQ0EsU0FBTztBQUVQLGlCQUFlLE1BQXFCO0FBQ2xDLGFBQVMsTUFBTSxHQUFHO0FBQ2xCLGlCQUFhO0FBQ2IsVUFBTSxXQUFXLFlBQVksSUFBSSxJQUFJO0FBQ3JDLG1CQUFlLHNCQUFzQixFQUFFLG1CQUFtQixTQUFTLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxTQUFTLEdBQUcsQ0FBQztBQUFBLEVBQy9HO0FBRUEsaUJBQWUsZUFBOEI7QUFDM0MsUUFBSSxDQUFDLFlBQVk7QUFDZjtBQUFBLElBQ0Y7QUFDQSxVQUFNLE1BQU0scUJBQXFCO0FBRWpDLFFBQUksQ0FBQyxZQUFZO0FBQ2Y7QUFBQSxJQUNGO0FBQ0EsVUFBTSxXQUFXLFlBQVksSUFBSSxJQUFJO0FBQ3JDLFlBQVEsS0FBSyxnQkFBZ0IsU0FBUyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsU0FBUyxHQUFHLENBQUM7QUFDaEYsVUFBTSxZQUFZLGVBQWUsOEJBQThCO0FBQy9ELFFBQUksVUFBVSxTQUFTO0FBQ3JCO0FBQUEsUUFDRSxvREFBb0QsVUFBVSxTQUFTO0FBQUEsTUFDekU7QUFDQSxZQUFNLGFBQWE7QUFBQSxJQUNyQjtBQUFBLEVBQ0Y7QUFDRjtBQVFBLGVBQXNCLE1BQU0sY0FBcUM7QUFDL0QsUUFBTSxJQUFJLFFBQVEsQ0FBQyxZQUFZO0FBQzdCLGVBQVcsU0FBUyxZQUFZO0FBQUEsRUFDbEMsQ0FBQztBQUNIO0FBUU8sU0FBUyxhQUFhLGFBQXlDO0FBQ3BFLFNBQU8sSUFBSSxRQUFRLENBQUMsVUFBVSxXQUFXO0FBQ3ZDLFFBQUksWUFBWSxHQUFHO0FBQ2pCO0FBQUEsSUFDRjtBQUNBLGdCQUFZLGlCQUFpQixTQUFTLGFBQWEsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUVqRSxhQUFTLGNBQXVCO0FBQzlCLFVBQUk7QUFDRixvQkFBWSxlQUFlO0FBQzNCLGVBQU87QUFBQSxNQUNULFNBQVMsR0FBRztBQUNWLGVBQU8sQ0FBVTtBQUNqQixlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUM7QUFDSDtBQVFBLGVBQXNCLFFBQVEsdUJBQStDO0FBQzNFLFFBQU0sTUFBTSxxQkFBcUI7QUFDakMsUUFBTSxJQUFJLE1BQU0sZ0JBQWdCLHNCQUFzQixTQUFTLENBQUMsZUFBZTtBQUNqRjtBQVNBLGVBQXNCLFFBQVcsTUFBOEM7QUFDN0UsUUFBTSxNQUFXLENBQUM7QUFDbEIsbUJBQWlCLFFBQVEsTUFBTTtBQUM3QixRQUFJLEtBQUssSUFBSTtBQUFBLEVBQ2Y7QUFDQSxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
package/dist/lib/esm/Library.mjs
CHANGED
@@ -5,7 +5,7 @@ if you want to view the source, please visit the github repository of this plugi
|
|
5
5
|
|
6
6
|
(function initEsm(){if(globalThis.process){return}const browserProcess={browser:true,cwd:__name(()=>"/","cwd"),env:{},platform:"android"};globalThis.process=browserProcess})();
|
7
7
|
|
8
|
-
const LIBRARY_VERSION = "26.
|
8
|
+
const LIBRARY_VERSION = "26.28.0";
|
9
9
|
const LIBRARY_NAME = "obsidian-dev-utils";
|
10
10
|
const LIBRARY_STYLES = ".obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component pre, .obsidian-dev-utils.code-highlighter-component code {\n font-family: var(--font-monospace);\n line-height: var(--line-height-normal);\n margin: 0;\n}\n.obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component code {\n font-size: var(--code-size);\n}\n.obsidian-dev-utils.code-highlighter-component textarea {\n background: transparent;\n color: transparent;\n z-index: 2;\n width: 20em;\n height: 10em;\n}\n.obsidian-dev-utils.code-highlighter-component pre {\n position: absolute;\n pointer-events: none;\n border: var(--input-border-width) solid transparent;\n overflow: auto;\n inset: 0;\n padding: var(--size-4-1) var(--size-4-2);\n z-index: 1;\n}\n.obsidian-dev-utils.code-highlighter-component pre.is-placeholder {\n opacity: 0.6;\n}\n.obsidian-dev-utils.code-highlighter-component code {\n display: block;\n padding: 0;\n}\n\n.obsidian-dev-utils input[type=url] {\n height: var(--input-height);\n}\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=tel],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=url],\n.obsidian-dev-utils input[type=week] {\n -webkit-app-region: no-drag;\n background: var(--background-modifier-form-field);\n border: var(--input-border-width) solid var(--background-modifier-border);\n color: var(--text-normal);\n font-family: inherit;\n padding: var(--size-4-1) var(--size-4-2);\n font-size: var(--font-ui-small);\n border-radius: var(--input-radius);\n outline: none;\n}\n@media (hover: hover) {\n .obsidian-dev-utils input[type=month]:hover,\n .obsidian-dev-utils input[type=tel]:hover,\n .obsidian-dev-utils input[type=time]:hover,\n .obsidian-dev-utils input[type=url]:hover,\n .obsidian-dev-utils input[type=week]:hover {\n border-color: var(--background-modifier-border-hover);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n }\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus {\n border-color: var(--background-modifier-border-focus);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus, .obsidian-dev-utils input[type=month]:focus-visible,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=tel]:focus-visible,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=time]:focus-visible,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=url]:focus-visible,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus,\n.obsidian-dev-utils input[type=week]:focus-visible {\n box-shadow: 0 0 0 2px var(--background-modifier-border-focus);\n}\n.obsidian-dev-utils input[type=month]::placeholder,\n.obsidian-dev-utils input[type=tel]::placeholder,\n.obsidian-dev-utils input[type=time]::placeholder,\n.obsidian-dev-utils input[type=url]::placeholder,\n.obsidian-dev-utils input[type=week]::placeholder {\n color: var(--text-faint);\n}\n.mod-rtl input[type=month],\n.mod-rtl input[type=time],\n.mod-rtl input[type=week],\n.is-rtl input[type=month],\n.is-rtl input[type=time],\n.is-rtl input[type=week],\n.rtl input[type=month],\n.rtl input[type=time],\n.rtl input[type=week] {\n direction: rtl;\n}\n.mod-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.rtl input[type=month]::-webkit-calendar-picker-indicator,\n.rtl input[type=time]::-webkit-calendar-picker-indicator,\n.rtl input[type=week]::-webkit-calendar-picker-indicator {\n right: var(--size-4-1);\n left: auto;\n}\n\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=week] {\n font-variant-numeric: tabular-nums;\n position: relative;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-text {\n color: var(--text-faint);\n padding-inline-end: 0;\n}\n.obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n position: absolute;\n left: var(--size-4-1);\n right: auto;\n opacity: 0.5;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:focus {\n background-color: var(--text-selection);\n color: var(--text-normal);\n cursor: text;\n}\n.mod-rtl .obsidian-dev-utils input[type=month], .is-rtl .obsidian-dev-utils input[type=month], .rtl .obsidian-dev-utils input[type=month],\n.mod-rtl .obsidian-dev-utils input[type=time],\n.is-rtl .obsidian-dev-utils input[type=time],\n.rtl .obsidian-dev-utils input[type=time],\n.mod-rtl .obsidian-dev-utils input[type=week],\n.is-rtl .obsidian-dev-utils input[type=week],\n.rtl .obsidian-dev-utils input[type=week] {\n direction: rtl;\n}\n.mod-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .is-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n left: auto;\n right: var(--size-4-1);\n}\n\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=month],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=time],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=week] {\n padding-inline-start: var(--size-4-6);\n}\n\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator {\n margin-inline-start: 0;\n}\n\n.obsidian-dev-utils.modal-container .ok-button {\n margin-right: 10px;\n margin-top: 20px;\n}\n\n.obsidian-dev-utils .multiple-dropdown-component select,\n.obsidian-dev-utils .multiple-dropdown-component select:focus,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown {\n height: auto;\n padding-top: 3px;\n}\n.obsidian-dev-utils .multiple-dropdown-component select option:checked,\n.obsidian-dev-utils .multiple-dropdown-component select:focus option:checked,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown option:checked {\n background-color: #1967d2;\n color: #fff;\n}\n\n.obsidian-dev-utils.prompt-modal .text-box {\n width: 100%;\n}\n\n.obsidian-dev-utils.tri-state-checkbox-component input[type=checkbox]:indeterminate {\n appearance: checkbox;\n}\n\n.obsidian-dev-utils :invalid {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils input.metadata-input-text:active:invalid, .obsidian-dev-utils input.metadata-input-text:focus-visible:invalid, .obsidian-dev-utils input.metadata-input-text:focus:invalid,\n.obsidian-dev-utils input[type=date]:active:invalid,\n.obsidian-dev-utils input[type=date]:focus-visible:invalid,\n.obsidian-dev-utils input[type=date]:focus:invalid,\n.obsidian-dev-utils input[type=datetime-local]:active:invalid,\n.obsidian-dev-utils input[type=datetime-local]:focus-visible:invalid,\n.obsidian-dev-utils input[type=datetime-local]:focus:invalid,\n.obsidian-dev-utils input[type=email]:active:invalid,\n.obsidian-dev-utils input[type=email]:focus-visible:invalid,\n.obsidian-dev-utils input[type=email]:focus:invalid,\n.obsidian-dev-utils input[type=number]:active:invalid,\n.obsidian-dev-utils input[type=number]:focus-visible:invalid,\n.obsidian-dev-utils input[type=number]:focus:invalid,\n.obsidian-dev-utils input[type=password]:active:invalid,\n.obsidian-dev-utils input[type=password]:focus-visible:invalid,\n.obsidian-dev-utils input[type=password]:focus:invalid,\n.obsidian-dev-utils input[type=search]:active:invalid,\n.obsidian-dev-utils input[type=search]:focus-visible:invalid,\n.obsidian-dev-utils input[type=search]:focus:invalid,\n.obsidian-dev-utils input[type=text]:active:invalid,\n.obsidian-dev-utils input[type=text]:focus-visible:invalid,\n.obsidian-dev-utils input[type=text]:focus:invalid,\n.obsidian-dev-utils textarea:active:invalid,\n.obsidian-dev-utils textarea:focus-visible:invalid,\n.obsidian-dev-utils textarea:focus:invalid {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils.setting-component-wrapper {\n position: relative;\n display: inline-flex;\n}\n.obsidian-dev-utils.overlay-validator {\n caret-color: transparent;\n cursor: default;\n position: absolute;\n background-color: transparent;\n border: none;\n outline: none;\n pointer-events: none;\n z-index: 9999;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n}\n.obsidian-dev-utils.tooltip.tooltip-validator {\n position: absolute;\n top: calc(100% + 8px);\n width: max-content;\n}\n\n/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../src/styles/code-highlighter-component.scss%22,%22../src/styles/input.scss%22,%22../src/styles/input-time.scss%22,%22../src/styles/modal-container.scss%22,%22../src/styles/multiple-dropdown-component.scss%22,%22../src/styles/prompt-modal.scss%22,%22../src/styles/tri-state-checkbox-component.scss%22,%22../src/styles/validation.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAEI;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;;ACnCJ;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGE;EACE;AAAA;AAAA;AAAA;AAAA;IACE;IACA,YACE;;;AAMR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA,YACE;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAGF;AAAA;AAAA;AAAA;AAAA;EACE;;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AC7DV;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;;AAIK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGP;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AAKF;AAAA;AAAA;EACE;;;AAMJ;EACE;;;AChDF;EACE;EACA;;;ACFF;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;;ACRJ;EACE;;;ACDF;EACE;;;ACEJ;EAJA;;AAoBI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EApBJ;;AA0BA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA%22,%22file%22:%22styles.css%22,%22sourcesContent%22:%5B%22.obsidian-dev-utils%20%7B%5Cn%20%20&.code-highlighter-component%20%7B%5Cn%20%20%20%20textarea,%20pre,%20code%20%7B%5Cn%20%20%20%20%20%20font-family:%20var(--font-monospace);%5Cn%20%20%20%20%20%20line-height:%20var(--line-height-normal);%5Cn%20%20%20%20%20%20margin:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea,%20code%20%7B%5Cn%20%20%20%20%20%20font-size:%20var(--code-size);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea%20%7B%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20transparent;%5Cn%20%20%20%20%20%20z-index:%202;%5Cn%20%20%20%20%20%20width:%2020em;%5Cn%20%20%20%20%20%20height:%2010em;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20%20%20border:%20var(--input-border-width)%20solid%20transparent;%5Cn%20%20%20%20%20%20overflow:%20auto;%5Cn%20%20%20%20%20%20inset:%200;%5Cn%20%20%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20%20%20z-index:%201;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre.is-placeholder%20%7B%5Cn%20%20%20%20%20%20opacity:%200.6;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20code%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20padding:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='url'%5D%20%7B%5Cn%20%20%20%20height:%20var(--input-height)%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='tel'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='url'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20-webkit-app-region:%20no-drag;%5Cn%20%20%20%20background:%20var(--background-modifier-form-field);%5Cn%20%20%20%20border:%20var(--input-border-width)%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20font-family:%20inherit;%5Cn%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20font-size:%20var(--font-ui-small);%5Cn%20%20%20%20border-radius:%20var(--input-radius);%5Cn%20%20%20%20outline:%20none;%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20@media%20(hover:%20hover)%20%7B%5Cn%20%20%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20border-color:%20var(--background-modifier-border-hover);%5Cn%20%20%20%20%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20border-color:%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus,%5Cn%20%20%20%20&:focus-visible%20%7B%5Cn%20%20%20%20%20%20box-shadow:%200%200%200%202px%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::placeholder%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20@at-root%20%7B%5Cn%20%20%20%20.mod-rtl,%5Cn%20%20%20%20.is-rtl,%5Cn%20%20%20%20.rtl%20%7B%5Cn%20%20%20%20%20%20&%20%7B%5Cn%20%20%20%20%20%20%20%20input%5Btype='month'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='time'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20font-variant-numeric:%20tabular-nums;%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-text%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%20%20padding-inline-end:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20left:%20var(--size-4-1);%5Cn%20%20%20%20%20%20right:%20auto;%5Cn%20%20%20%20%20%20opacity:%200.5;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-month-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-day-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-year-field%20%7B%5Cn%20%20%20%20%20%20&:active,%5Cn%20%20%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20var(--text-selection);%5Cn%20%20%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%20%20%20%20cursor:%20text;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20.mod-rtl%20&,%5Cn%20%20%20%20%20%20.is-rtl%20&,%5Cn%20%20%20%20%20%20.rtl%20&%20%7B%5Cn%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20body:not(.is-ios):not(.is-android)%20&%20%7B%5Cn%20%20%20%20%20%20%20%20padding-inline-start:%20var(--size-4-6);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='time'%5D%20%7B%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20margin-inline-start:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.modal-container%20%7B%5Cn%20%20%20%20.ok-button%20%7B%5Cn%20%20%20%20%20%20margin-right:%2010px;%5Cn%20%20%20%20%20%20margin-top:%2020px;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20.multiple-dropdown-component%20%7B%5Cn%20%20%20%20select,%5Cn%20%20%20%20select:focus,%5Cn%20%20%20%20.dropdown%20%7B%5Cn%20%20%20%20%20%20height:%20auto;%5Cn%20%20%20%20%20%20padding-top:%203px;%5Cn%5Cn%20%20%20%20%20%20option:checked%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20%231967d2;%5Cn%20%20%20%20%20%20%20%20color:%20%23fff;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.prompt-modal%20%7B%5Cn%20%20%20%20.text-box%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cr%5Cn%20%20&.tri-state-checkbox-component%20%7B%5Cr%5Cn%20%20%20%20input%5Btype='checkbox'%5D:indeterminate%20%7B%5Cr%5Cn%20%20%20%20%20%20appearance:%20checkbox;%5Cr%5Cn%20%20%20%20%7D%5Cr%5Cn%20%20%7D%5Cr%5Cn%7D%5Cr%5Cn%22,%22@mixin%20invalid%20%7B%5Cn%20%20box-shadow:%200%200%200%202px%20var(--text-error);%5Cn%7D%5Cn%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20:invalid%20%7B%5Cn%20%20%20%20@include%20invalid;%5Cn%20%20%7D%5Cn%5Cn%20%20input.metadata-input-text,%5Cn%20%20input%5Btype='date'%5D,%5Cn%20%20input%5Btype='datetime-local'%5D,%5Cn%20%20input%5Btype='email'%5D,%5Cn%20%20input%5Btype='number'%5D,%5Cn%20%20input%5Btype='password'%5D,%5Cn%20%20input%5Btype='search'%5D,%5Cn%20%20input%5Btype='text'%5D,%5Cn%20%20textarea%20%7B%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus-visible,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20&:invalid%20%7B%5Cn%20%20%20%20%20%20%20%20@include%20invalid;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20&.setting-component-wrapper%20%7B%5Cn%20%20%20%20position:%20relative;%5Cn%20%20%20%20display:%20inline-flex;%5Cn%20%20%7D%5Cn%5Cn%20%20&.overlay-validator%20%7B%5Cn%20%20%20%20caret-color:%20transparent;%5Cn%20%20%20%20cursor:%20default;%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20background-color:%20transparent;%5Cn%20%20%20%20border:%20none;%5Cn%20%20%20%20outline:%20none;%5Cn%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20z-index:%209999;%5Cn%20%20%20%20left:%200;%5Cn%20%20%20%20top:%200;%5Cn%20%20%20%20width:%20100%25;%5Cn%20%20%20%20height:%20100%25;%5Cn%20%20%7D%5Cn%5Cn%20%20&.tooltip.tooltip-validator%20%7B%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20top:%20calc(100%25%20+%208px);%5Cn%20%20%20%20width:%20max-content;%5Cn%20%20%7D%5Cn%7D%5Cn%22%5D%7D */\n";
|
11
11
|
export {
|
@@ -495,11 +495,16 @@ function parseLinkNode(node, str, isEmbed) {
|
|
495
495
|
});
|
496
496
|
}
|
497
497
|
function parseLinkUrl(str) {
|
498
|
+
const hasAngleBrackets = str.startsWith("<") && str.endsWith(">");
|
499
|
+
if (hasAngleBrackets) {
|
500
|
+
str = str.slice(1, -1);
|
501
|
+
}
|
498
502
|
if (!isUrl(str)) {
|
499
503
|
return null;
|
500
504
|
}
|
501
505
|
return {
|
502
506
|
encodedUrl: encodeUrl(str),
|
507
|
+
hasAngleBrackets,
|
503
508
|
isEmbed: false,
|
504
509
|
isExternal: true,
|
505
510
|
isWikilink: false,
|
@@ -544,4 +549,4 @@ export {
|
|
544
549
|
updateLinksInContent,
|
545
550
|
updateLinksInFile
|
546
551
|
};
|
547
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL0xpbmsudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0aWVzIGZvciBoYW5kbGluZyBhbmQgdXBkYXRpbmcgbGlua3Mgd2l0aGluIE9ic2lkaWFuIHZhdWx0cy4gSXQgaW5jbHVkZXNcbiAqIGZ1bmN0aW9ucyB0byBzcGxpdCBwYXRocywgdXBkYXRlIGxpbmtzIGluIGZpbGVzLCBhbmQgZ2VuZXJhdGUgbWFya2Rvd24gbGlua3Mgd2l0aCB2YXJpb3VzIG9wdGlvbnMuXG4gKiBUaGUgZnVuY3Rpb25zIGludGVncmF0ZSB3aXRoIE9ic2lkaWFuJ3MgQVBJIHRvIGVuc3VyZSB0aGF0IGxpbmtzIGFyZSBtYW5hZ2VkIGNvcnJlY3RseSB3aXRoaW4gdGhlIHZhdWx0LlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgTGluayxcbiAgVGV4dFxufSBmcm9tICdtZGFzdCc7XG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgQ2FjaGVkTWV0YWRhdGEsXG4gIFJlZmVyZW5jZSxcbiAgVEZpbGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHtcbiAgbm9ybWFsaXplUGF0aCxcbiAgcGFyc2VMaW5rdGV4dFxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgeyBJbnRlcm5hbFBsdWdpbk5hbWUgfSBmcm9tICdvYnNpZGlhbi10eXBpbmdzL2ltcGxlbWVudGF0aW9ucyc7XG5pbXBvcnQgeyByZW1hcmsgfSBmcm9tICdyZW1hcmsnO1xuaW1wb3J0IHJlbWFya1BhcnNlIGZyb20gJ3JlbWFyay1wYXJzZSc7XG5pbXBvcnQgeyB3aWtpTGlua1BsdWdpbiB9IGZyb20gJ3JlbWFyay13aWtpLWxpbmsnO1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNPYmplY3QgfSBmcm9tICcuLi9PYmplY3QudHMnO1xuaW1wb3J0IHR5cGUgeyBNYXliZVJldHVybiB9IGZyb20gJy4uL1R5cGUudHMnO1xuaW1wb3J0IHR5cGUgeyBGaWxlQ2hhbmdlIH0gZnJvbSAnLi9GaWxlQ2hhbmdlLnRzJztcbmltcG9ydCB0eXBlIHsgUGF0aE9yRmlsZSB9IGZyb20gJy4vRmlsZVN5c3RlbS50cyc7XG5pbXBvcnQgdHlwZSB7IFByb2Nlc3NPcHRpb25zIH0gZnJvbSAnLi9WYXVsdC50cyc7XG5cbmltcG9ydCB7XG4gIG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllcyxcbiAgdG9Kc29uXG59IGZyb20gJy4uL09iamVjdC50cyc7XG5pbXBvcnQge1xuICBiYXNlbmFtZSxcbiAgZGlybmFtZSxcbiAgZXh0bmFtZSxcbiAgam9pbixcbiAgcmVsYXRpdmVcbn0gZnJvbSAnLi4vUGF0aC50cyc7XG5pbXBvcnQge1xuICBub3JtYWxpemUsXG4gIHJlcGxhY2VBbGwsXG4gIHRyaW1TdGFydFxufSBmcm9tICcuLi9TdHJpbmcudHMnO1xuaW1wb3J0IHsgaXNVcmwgfSBmcm9tICcuLi91cmwudHMnO1xuaW1wb3J0IHtcbiAgYXBwbHlDb250ZW50Q2hhbmdlcyxcbiAgYXBwbHlGaWxlQ2hhbmdlcyxcbiAgaXNDYW52YXNDaGFuZ2UsXG4gIGlzQ29udGVudENoYW5nZVxufSBmcm9tICcuL0ZpbGVDaGFuZ2UudHMnO1xuaW1wb3J0IHtcbiAgZ2V0RmlsZSxcbiAgZ2V0UGF0aCxcbiAgaXNDYW52YXNGaWxlLFxuICBpc01hcmtkb3duRmlsZSxcbiAgdHJpbU1hcmtkb3duRXh0ZW5zaW9uXG59IGZyb20gJy4vRmlsZVN5c3RlbS50cyc7XG5pbXBvcnQge1xuICBnZXRBbGxMaW5rcyxcbiAgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmUsXG4gIGdldENhY2hlU2FmZSxcbiAgcGFyc2VNZXRhZGF0YSxcbiAgdGVtcFJlZ2lzdGVyRmlsZUFuZFJ1blxufSBmcm9tICcuL01ldGFkYXRhQ2FjaGUudHMnO1xuaW1wb3J0IHtcbiAgc2hvdWxkVXNlUmVsYXRpdmVMaW5rcyxcbiAgc2hvdWxkVXNlV2lraWxpbmtzXG59IGZyb20gJy4vT2JzaWRpYW5TZXR0aW5ncy50cyc7XG5pbXBvcnQge1xuICBpc0NhbnZhc0ZpbGVOb2RlUmVmZXJlbmNlLFxuICByZWZlcmVuY2VUb0ZpbGVDaGFuZ2Vcbn0gZnJvbSAnLi9SZWZlcmVuY2UudHMnO1xuXG5jb25zdCBFU0NBUEVEX1dJS0lMSU5LX0RJVklERVIgPSAnXFxcXHwnO1xuXG4vKipcbiAqIFJlZ3VsYXIgZXhwcmVzc2lvbiBmb3Igc3BlY2lhbCBsaW5rIHN5bWJvbHMuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5jb25zdCBTUEVDSUFMX0xJTktfU1lNQk9MU19SRUdFWFAgPSAvW1xcXFxcXHgwMFxceDA4XFx4MEJcXHgwQ1xceDBFLVxceDFGIF0vZztcblxuLyoqXG4gKiBSZWd1bGFyIGV4cHJlc3Npb24gZm9yIHNwZWNpYWwgbWFya2Rvd24gbGluayBzeW1ib2xzLlxuICovXG5jb25zdCBTUEVDSUFMX01BUktET1dOX0xJTktfU1lNQk9MU19SRUdFWCA9IC9bXFxcXFtcXF08Pl8qfj1gJF0vZztcblxuLyoqXG4gKiBSZWd1bGFyIGV4cHJlc3Npb24gZm9yIHVuZXNjYXBlZCBwaXBlcy5cbiAqL1xuY29uc3QgVU5FU0NBUEVEX1dJS0lMSU5LX0RJVklERVJfUkVHRVhQID0gLyg/PCFcXFxcKVxcfC9nO1xuXG5jb25zdCBXSUtJTElOS19ESVZJREVSID0gJ3wnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNvbnZlcnRpbmcgYSBsaW5rLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnZlcnRMaW5rT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSByZWZlcmVuY2UgZm9yIHRoZSBsaW5rLlxuICAgKi9cbiAgbGluazogUmVmZXJlbmNlO1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIGZpbGUgY29udGFpbmluZyB0aGUgbGluay5cbiAgICovXG4gIG5ld1NvdXJjZVBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGQgcGF0aCBvZiB0aGUgbGluay5cbiAgICovXG4gIG9sZFNvdXJjZVBhdGhPckZpbGU/OiBQYXRoT3JGaWxlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGZvcmNlIG1hcmtkb3duIGxpbmtzLlxuICAgKi9cbiAgc2hvdWxkRm9yY2VNYXJrZG93bkxpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byB1cGRhdGUgZmlsZW5hbWUgYWxpYXMuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIHNob3VsZFVwZGF0ZUZpbGVuYW1lQWxpYXM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFdyYXBwZXIgZm9yIGRlZmF1bHQgb3B0aW9ucyBmb3IgZ2VuZXJhdGluZyBtYXJrZG93biBsaW5rcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZU1hcmtkb3duTGlua0RlZmF1bHRPcHRpb25zV3JhcHBlciB7XG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBvcHRpb25zIGZvciBnZW5lcmF0aW5nIG1hcmtkb3duIGxpbmtzLlxuICAgKi9cbiAgZGVmYXVsdE9wdGlvbnNGbjogKCkgPT4gUGFydGlhbDxHZW5lcmF0ZU1hcmtkb3duTGlua09wdGlvbnM+O1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGdlbmVyYXRpbmcgYSBtYXJrZG93biBsaW5rLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlTWFya2Rvd25MaW5rT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYWxpYXMgZm9yIHRoZSBsaW5rLlxuICAgKi9cbiAgYWxpYXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBhcHA6IEFwcDtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBsaW5rIHNob3VsZCBiZSBlbWJlZGRlZC4gSWYgbm90IHByb3ZpZGVkLCBpdCB3aWxsIGJlIGluZmVycmVkIGJhc2VkIG9uIHRoZSBmaWxlIHR5cGUuXG4gICAqL1xuICBpc0VtYmVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhbGxvdyBhbiBlbXB0eSBhbGlhcyBmb3IgZW1iZWRzLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAqL1xuICBpc0VtcHR5RW1iZWRBbGlhc0FsbG93ZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFsbG93IG5vbi1leGlzdGluZyBmaWxlcy4gSWYgYGZhbHNlYCBhbmQgYHBhdGhPckZpbGVgIGlzIGEgbm9uLWV4aXN0aW5nIGZpbGUsIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duLiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgKi9cbiAgaXNOb25FeGlzdGluZ0ZpbGVBbGxvd2VkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBsaW5rIHNob3VsZCBiZSBhIHdpa2lsaW5rLiBJZiBub3QgcHJvdmlkZWQsIGl0IHdpbGwgYmUgaW5mZXJyZWQgYmFzZWQgb24gdGhlIE9ic2lkaWFuIHNldHRpbmdzLlxuICAgKi9cbiAgaXNXaWtpbGluaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBvcmlnaW5hbCBsaW5rIHRleHQuIElmIHByb3ZpZGVkLCBpdCB3aWxsIGJlIHVzZWQgdG8gaW5mZXIgdGhlIHZhbHVlcyBvZiBgaXNFbWJlZGAsIGBpc1dpa2lsaW5rYCwgYHVzZUxlYWRpbmdEb3RgLCBhbmQgYHVzZUFuZ2xlQnJhY2tldHNgLlxuICAgKiBUaGVzZSBpbmZlcnJlZCB2YWx1ZXMgd2lsbCBiZSBvdmVycmlkZGVuIGJ5IGNvcnJlc3BvbmRpbmcgc2V0dGluZ3MgaWYgc3BlY2lmaWVkLlxuICAgKi9cbiAgb3JpZ2luYWxMaW5rPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGxpbmsgc2hvdWxkIGJlIHJlbGF0aXZlLiBJZiBub3QgcHJvdmlkZWQgb3IgYGZhbHNlYCwgaXQgd2lsbCBiZSBpbmZlcnJlZCBiYXNlZCBvbiB0aGUgT2JzaWRpYW4gc2V0dGluZ3MuXG4gICAqL1xuICBzaG91bGRGb3JjZVJlbGF0aXZlUGF0aD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgYXR0YWNobWVudCBleHRlbnNpb24gaW4gdGhlIGVtYmVkIGFsaWFzLiBIYXMgbm8gZWZmZWN0IGlmIGBhbGxvd0VtcHR5RW1iZWRBbGlhc2AgaXMgYHRydWVgLiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgKi9cbiAgc2hvdWxkSW5jbHVkZUF0dGFjaG1lbnRFeHRlbnNpb25Ub0VtYmVkQWxpYXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGxpbmsgc2hvdWxkIHVzZSBhbmdsZSBicmFja2V0cy4gRGVmYXVsdHMgdG8gYGZhbHNlYC4gSGFzIG5vIGVmZmVjdCBpZiBgaXNXaWtpbGlua2AgaXMgYHRydWVgXG4gICAqL1xuICBzaG91bGRVc2VBbmdsZUJyYWNrZXRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBsaW5rIHNob3VsZCB1c2UgYSBsZWFkaW5nIGRvdC4gRGVmYXVsdHMgdG8gYGZhbHNlYC4gSGFzIG5vIGVmZmVjdCBpZiBgaXNXaWtpbGlua2AgaXMgYHRydWVgIG9yIGBpc1JlbGF0aXZlYCBpcyBgZmFsc2VgLlxuICAgKi9cbiAgc2hvdWxkVXNlTGVhZGluZ0RvdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgcGF0aCBvZiB0aGUgbGluay5cbiAgICovXG4gIHNvdXJjZVBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBzdWJwYXRoIG9mIHRoZSBsaW5rLlxuICAgKi9cbiAgc3VicGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRhcmdldCBwYXRoIG9yIGZpbGUuXG4gICAqL1xuICB0YXJnZXRQYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIFRoZSByZXN1bHQgb2YgcGFyc2luZyBhIGxpbmsuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VMaW5rUmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBhbGlhcyBvZiB0aGUgbGluay5cbiAgICovXG4gIGFsaWFzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZW5jb2RlZCBVUkwgb2YgdGhlIGxpbmsuXG4gICAqL1xuICBlbmNvZGVkVXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGxpbmsgaGFzIGFuZ2xlIGJyYWNrZXRzLlxuICAgKi9cbiAgaGFzQW5nbGVCcmFja2V0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgbGluayBpcyBhbiBlbWJlZCBsaW5rLlxuICAgKi9cbiAgaXNFbWJlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBsaW5rIGlzIGV4dGVybmFsLlxuICAgKi9cbiAgaXNFeHRlcm5hbDogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBsaW5rIGlzIGEgd2lraWxpbmsuXG4gICAqL1xuICBpc1dpa2lsaW5rOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgdGl0bGUgb2YgdGhlIGxpbmsuXG4gICAqL1xuICB0aXRsZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFVSTCBvZiB0aGUgbGluay5cbiAgICovXG4gIHVybDogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGRldGVybWluaW5nIGlmIHRoZSBhbGlhcyBvZiBhIGxpbmsgc2hvdWxkIGJlIHJlc2V0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNob3VsZFJlc2V0QWxpYXNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGRpc3BsYXkgdGV4dCBvZiB0aGUgbGluay5cbiAgICovXG4gIGRpc3BsYXlUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgbGluayBpcyBhIHdpa2lsaW5rLlxuICAgKi9cbiAgaXNXaWtpbGluaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgcGF0aCBvZiB0aGUgbGluay5cbiAgICovXG4gIG5ld1NvdXJjZVBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGQgc291cmNlIGZpbGUgY29udGFpbmluZyB0aGUgbGluay5cbiAgICovXG4gIG9sZFNvdXJjZVBhdGhPckZpbGU/OiBQYXRoT3JGaWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgb2xkIHRhcmdldCBwYXRoIG9mIHRoZSBsaW5rLlxuICAgKi9cbiAgb2xkVGFyZ2V0UGF0aDogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogVGhlIHRhcmdldCBwYXRoIG9yIGZpbGUuXG4gICAqL1xuICB0YXJnZXRQYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIFNwbGl0cyBhIGxpbmsgaW50byBpdHMgbGluayBwYXRoIGFuZCBzdWJwYXRoLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwbGl0U3VicGF0aFJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgbGluayBwYXRoLlxuICAgKi9cbiAgbGlua1BhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN1YnBhdGguXG4gICAqL1xuICBzdWJwYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdXBkYXRpbmcgYSBsaW5rLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZUxpbmtPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIHJlZmVyZW5jZSBmb3IgdGhlIGxpbmsuXG4gICAqL1xuICBsaW5rOiBSZWZlcmVuY2U7XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgZmlsZSBjb250YWluaW5nIHRoZSBsaW5rLlxuICAgKi9cbiAgbmV3U291cmNlUGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogVGhlIGZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBsaW5rLlxuICAgKi9cbiAgbmV3VGFyZ2V0UGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogVGhlIG9sZCBzb3VyY2UgZmlsZSBjb250YWluaW5nIHRoZSBsaW5rLlxuICAgKi9cbiAgb2xkU291cmNlUGF0aE9yRmlsZT86IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGQgcGF0aCBvZiB0aGUgZmlsZS5cbiAgICovXG4gIG9sZFRhcmdldFBhdGhPckZpbGU/OiBQYXRoT3JGaWxlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGZvcmNlIG1hcmtkb3duIGxpbmtzLlxuICAgKi9cbiAgc2hvdWxkRm9yY2VNYXJrZG93bkxpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byB1cGRhdGUgZmlsZW5hbWUgYWxpYXMuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIHNob3VsZFVwZGF0ZUZpbGVuYW1lQWxpYXM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHVwZGF0aW5nIGxpbmtzIGluIGEgZmlsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVMaW5rc0luRmlsZU9wdGlvbnMgZXh0ZW5kcyBQcm9jZXNzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgb2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBmaWxlIHRvIHVwZGF0ZSB0aGUgbGlua3MgaW4uXG4gICAqL1xuICBuZXdTb3VyY2VQYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgb2xkIHBhdGggb2YgdGhlIGZpbGUuXG4gICAqL1xuICBvbGRTb3VyY2VQYXRoT3JGaWxlPzogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBmb3JjZSB0aGUgbGlua3MgdG8gYmUgaW4gTWFya2Rvd24gZm9ybWF0LlxuICAgKi9cbiAgc2hvdWxkRm9yY2VNYXJrZG93bkxpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byB1cGRhdGUgb25seSBlbWJlZGRlZCBsaW5rcy5cbiAgICovXG4gIHNob3VsZFVwZGF0ZUVtYmVkT25seUxpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byB1cGRhdGUgZmlsZW5hbWUgYWxpYXMuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIHNob3VsZFVwZGF0ZUZpbGVuYW1lQWxpYXM/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgTGlua0NvbmZpZyB7XG4gIGlzRW1iZWQ6IGJvb2xlYW47XG4gIGlzV2lraWxpbms6IGJvb2xlYW47XG4gIHNob3VsZEZvcmNlUmVsYXRpdmVQYXRoOiBib29sZWFuO1xuICBzaG91bGRVc2VBbmdsZUJyYWNrZXRzOiBib29sZWFuO1xuICBzaG91bGRVc2VMZWFkaW5nRG90OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgVGFibGVQb3NpdGlvbiB7XG4gIGVuZDogbnVtYmVyO1xuICBzdGFydDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSBvcHRpb25zIGZvciB1cGRhdGluZyB0aGUgbGlua3MgaW4gYSBjb250ZW50IHN0cmluZy5cbiAqL1xuaW50ZXJmYWNlIFVwZGF0ZUxpbmtzSW5Db250ZW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgdG8gdXBkYXRlIHRoZSBsaW5rcyBpbi5cbiAgICovXG4gIGNvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5ldyBzb3VyY2UgcGF0aCBvciBmaWxlLlxuICAgKi9cbiAgbmV3U291cmNlUGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogVGhlIG9sZCBzb3VyY2UgcGF0aCBvciBmaWxlLlxuICAgKi9cbiAgb2xkU291cmNlUGF0aE9yRmlsZT86IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZm9yY2UgbWFya2Rvd24gbGlua3MuXG4gICAqL1xuICBzaG91bGRGb3JjZU1hcmtkb3duTGlua3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHVwZGF0ZSBvbmx5IGVtYmVkZGVkIGxpbmtzLlxuICAgKi9cbiAgc2hvdWxkVXBkYXRlRW1iZWRPbmx5TGlua3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHVwZGF0ZSBmaWxlbmFtZSBhbGlhcy5cbiAgICovXG4gIHNob3VsZFVwZGF0ZUZpbGVuYW1lQWxpYXM/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgV2lraUxpbmtOb2RlIHtcbiAgZGF0YToge1xuICAgIGFsaWFzOiBzdHJpbmc7XG4gIH07XG4gIHZhbHVlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBsaW5rIHRvIGEgbmV3IHBhdGguXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgY29udmVydGluZyB0aGUgbGluay5cbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgbGluay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRMaW5rKG9wdGlvbnM6IENvbnZlcnRMaW5rT3B0aW9ucyk6IHN0cmluZyB7XG4gIGNvbnN0IHRhcmdldEZpbGUgPSBleHRyYWN0TGlua0ZpbGUob3B0aW9ucy5hcHAsIG9wdGlvbnMubGluaywgb3B0aW9ucy5vbGRTb3VyY2VQYXRoT3JGaWxlID8/IG9wdGlvbnMubmV3U291cmNlUGF0aE9yRmlsZSk7XG4gIGlmICghdGFyZ2V0RmlsZSkge1xuICAgIHJldHVybiBvcHRpb25zLmxpbmsub3JpZ2luYWw7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlTGluayhub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8VXBkYXRlTGlua09wdGlvbnM+KHtcbiAgICBhcHA6IG9wdGlvbnMuYXBwLFxuICAgIGxpbms6IG9wdGlvbnMubGluayxcbiAgICBuZXdTb3VyY2VQYXRoT3JGaWxlOiBvcHRpb25zLm5ld1NvdXJjZVBhdGhPckZpbGUsXG4gICAgbmV3VGFyZ2V0UGF0aE9yRmlsZTogdGFyZ2V0RmlsZSxcbiAgICBvbGRTb3VyY2VQYXRoT3JGaWxlOiBvcHRpb25zLm9sZFNvdXJjZVBhdGhPckZpbGUsXG4gICAgc2hvdWxkRm9yY2VNYXJrZG93bkxpbmtzOiBvcHRpb25zLnNob3VsZEZvcmNlTWFya2Rvd25MaW5rcyxcbiAgICBzaG91bGRVcGRhdGVGaWxlbmFtZUFsaWFzOiBvcHRpb25zLnNob3VsZFVwZGF0ZUZpbGVuYW1lQWxpYXNcbiAgfSkpO1xufVxuXG4vKipcbiAqIEVkaXRzIHRoZSBiYWNrbGlua3MgZm9yIGEgZmlsZSBvciBwYXRoLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgdG8gZWRpdCB0aGUgYmFja2xpbmtzIGZvci5cbiAqIEBwYXJhbSBsaW5rQ29udmVydGVyIC0gVGhlIGZ1bmN0aW9uIHRoYXQgY29udmVydHMgZWFjaCBsaW5rLlxuICogQHBhcmFtIHByb2Nlc3NPcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyBmb3IgcmV0cnlpbmcgdGhlIG9wZXJhdGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgYmFja2xpbmtzIGhhdmUgYmVlbiBlZGl0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlZGl0QmFja2xpbmtzKFxuICBhcHA6IEFwcCxcbiAgcGF0aE9yRmlsZTogUGF0aE9yRmlsZSxcbiAgbGlua0NvbnZlcnRlcjogKGxpbms6IFJlZmVyZW5jZSkgPT4gUHJvbWlzYWJsZTxNYXliZVJldHVybjxzdHJpbmc+PixcbiAgcHJvY2Vzc09wdGlvbnM6IFByb2Nlc3NPcHRpb25zID0ge31cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBiYWNrbGlua3MgPSBhd2FpdCBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZShhcHAsIHBhdGhPckZpbGUsIHByb2Nlc3NPcHRpb25zKTtcbiAgZm9yIChjb25zdCBiYWNrbGlua05vdGVQYXRoIG9mIGJhY2tsaW5rcy5rZXlzKCkpIHtcbiAgICBjb25zdCBjdXJyZW50TGlua3MgPSBiYWNrbGlua3MuZ2V0KGJhY2tsaW5rTm90ZVBhdGgpID8/IFtdO1xuICAgIGNvbnN0IGxpbmtKc29ucyA9IG5ldyBTZXQ8c3RyaW5nPihjdXJyZW50TGlua3MubWFwKChsaW5rKSA9PiB0b0pzb24obGluaykpKTtcbiAgICBhd2FpdCBlZGl0TGlua3MoYXBwLCBiYWNrbGlua05vdGVQYXRoLCAobGluaykgPT4ge1xuICAgICAgY29uc3QgbGlua0pzb24gPSB0b0pzb24obGluayk7XG4gICAgICBpZiAoIWxpbmtKc29ucy5oYXMobGlua0pzb24pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxpbmtDb252ZXJ0ZXIobGluayk7XG4gICAgfSwgcHJvY2Vzc09wdGlvbnMpO1xuICB9XG59XG5cbi8qKlxuICogRWRpdHMgdGhlIGJhY2tsaW5rcyBmb3IgYSBmaWxlIG9yIHBhdGguXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSB0byBlZGl0IHRoZSBiYWNrbGlua3MgZm9yLlxuICogQHBhcmFtIGxpbmtDb252ZXJ0ZXIgLSBUaGUgZnVuY3Rpb24gdGhhdCBjb252ZXJ0cyBlYWNoIGxpbmsuXG4gKiBAcGFyYW0gcHJvY2Vzc09wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIGZvciByZXRyeWluZyB0aGUgb3BlcmF0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBiYWNrbGlua3MgaGF2ZSBiZWVuIGVkaXRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVkaXRMaW5rcyhcbiAgYXBwOiBBcHAsXG4gIHBhdGhPckZpbGU6IFBhdGhPckZpbGUsXG4gIGxpbmtDb252ZXJ0ZXI6IChsaW5rOiBSZWZlcmVuY2UpID0+IFByb21pc2FibGU8TWF5YmVSZXR1cm48c3RyaW5nPj4sXG4gIHByb2Nlc3NPcHRpb25zOiBQcm9jZXNzT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgYXBwbHlGaWxlQ2hhbmdlcyhhcHAsIHBhdGhPckZpbGUsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjYWNoZSA9IGF3YWl0IGdldENhY2hlU2FmZShhcHAsIHBhdGhPckZpbGUpO1xuICAgIHJldHVybiBhd2FpdCBnZXRGaWxlQ2hhbmdlcyhjYWNoZSwgaXNDYW52YXNGaWxlKGFwcCwgcGF0aE9yRmlsZSksIGxpbmtDb252ZXJ0ZXIpO1xuICB9LCBwcm9jZXNzT3B0aW9ucyk7XG59XG5cbi8qKlxuICogRWRpdHMgdGhlIGxpbmtzIGluIGEgY29udGVudCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBjb250ZW50IC0gVGhlIGNvbnRlbnQgdG8gZWRpdCB0aGUgbGlua3MgaW4uXG4gKiBAcGFyYW0gbGlua0NvbnZlcnRlciAtIFRoZSBmdW5jdGlvbiB0aGF0IGNvbnZlcnRzIGVhY2ggbGluay5cbiAqIEByZXR1cm5zIFRoZSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHVwZGF0ZWQgY29udGVudC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVkaXRMaW5rc0luQ29udGVudChcbiAgYXBwOiBBcHAsXG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgbGlua0NvbnZlcnRlcjogKGxpbms6IFJlZmVyZW5jZSkgPT4gUHJvbWlzYWJsZTxNYXliZVJldHVybjxzdHJpbmc+PlxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgbmV3Q29udGVudCA9IGF3YWl0IGFwcGx5Q29udGVudENoYW5nZXMoY29udGVudCwgJycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjYWNoZSA9IGF3YWl0IHBhcnNlTWV0YWRhdGEoYXBwLCBjb250ZW50KTtcbiAgICByZXR1cm4gYXdhaXQgZ2V0RmlsZUNoYW5nZXMoY2FjaGUsIGZhbHNlLCBsaW5rQ29udmVydGVyKTtcbiAgfSk7XG5cbiAgaWYgKG5ld0NvbnRlbnQgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byB1cGRhdGUgbGlua3MgaW4gY29udGVudCcpO1xuICB9XG5cbiAgcmV0dXJuIG5ld0NvbnRlbnQ7XG59XG5cbi8qKlxuICogRW5jb2RlcyBhIFVSTC5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gVGhlIFVSTCB0byBlbmNvZGUuXG4gKiBAcmV0dXJucyBUaGUgZW5jb2RlZCBVUkwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmVwbGFjZUFsbCh1cmwsIFNQRUNJQUxfTElOS19TWU1CT0xTX1JFR0VYUCwgKHsgc3Vic3RyaW5nOiBzcGVjaWFsTGlua1N5bWJvbCB9KSA9PiBlbmNvZGVVUklDb21wb25lbnQoc3BlY2lhbExpbmtTeW1ib2wpKTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgZmlsZSBhc3NvY2lhdGVkIHdpdGggYSBsaW5rLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gbGluayAtIFRoZSByZWZlcmVuY2UgY2FjaGUgZm9yIHRoZSBsaW5rLlxuICogQHBhcmFtIHNvdXJjZVBhdGhPckZpbGUgLSBUaGUgc291cmNlIHBhdGggb3IgZmlsZS5cbiAqIEByZXR1cm5zIFRoZSBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGluaywgb3IgbnVsbCBpZiBub3QgZm91bmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0TGlua0ZpbGUoYXBwOiBBcHAsIGxpbms6IFJlZmVyZW5jZSwgc291cmNlUGF0aE9yRmlsZTogUGF0aE9yRmlsZSk6IG51bGwgfCBURmlsZSB7XG4gIGNvbnN0IHsgbGlua1BhdGggfSA9IHNwbGl0U3VicGF0aChsaW5rLmxpbmspO1xuICByZXR1cm4gYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0Rmlyc3RMaW5rcGF0aERlc3QobGlua1BhdGgsIGdldFBhdGgoYXBwLCBzb3VyY2VQYXRoT3JGaWxlKSk7XG59XG5cbi8qKlxuICogRml4ZXMgdGhlIGZyb250bWF0dGVyIG1hcmtkb3duIGxpbmtzIGluIHRoZSBwcm92aWRlZCBtZXRhZGF0YSBjYWNoZS5cbiAqXG4gKiBAcGFyYW0gY2FjaGUgLSBUaGUgbWV0YWRhdGEgY2FjaGUgdG8gZml4IHRoZSBmcm9udG1hdHRlciBtYXJrZG93biBsaW5rcyBpbi5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGZyb250bWF0dGVyIG1hcmtkb3duIGxpbmtzIHdlcmUgZml4ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaXhGcm9udG1hdHRlck1hcmtkb3duTGlua3MoY2FjaGU6IENhY2hlZE1ldGFkYXRhKTogYm9vbGVhbiB7XG4gIHJldHVybiBfZml4RnJvbnRtYXR0ZXJNYXJrZG93bkxpbmtzKGNhY2hlLmZyb250bWF0dGVyLCAnJywgY2FjaGUpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIG1hcmtkb3duIGxpbmsgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHBhcmFtZXRlcnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgZ2VuZXJhdGluZyB0aGUgbWFya2Rvd24gbGluay5cbiAqIEByZXR1cm5zIFRoZSBnZW5lcmF0ZWQgbWFya2Rvd24gbGluay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlTWFya2Rvd25MaW5rKG9wdGlvbnM6IEdlbmVyYXRlTWFya2Rvd25MaW5rT3B0aW9ucyk6IHN0cmluZyB7XG4gIGNvbnN0IHsgYXBwIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IGNvbmZpZ3VyYWJsZURlZmF1bHRPcHRpb25zRm4gPSAoYXBwLmZpbGVNYW5hZ2VyLmdlbmVyYXRlTWFya2Rvd25MaW5rIGFzIFBhcnRpYWw8R2VuZXJhdGVNYXJrZG93bkxpbmtEZWZhdWx0T3B0aW9uc1dyYXBwZXI+KS5kZWZhdWx0T3B0aW9uc0ZuXG4gICAgPz8gKCgpOiBQYXJ0aWFsPEdlbmVyYXRlTWFya2Rvd25MaW5rT3B0aW9ucz4gPT4gKHt9KSk7XG4gIGNvbnN0IGNvbmZpZ3VyYWJsZURlZmF1bHRPcHRpb25zID0gY29uZmlndXJhYmxlRGVmYXVsdE9wdGlvbnNGbigpO1xuXG4gIGNvbnN0IERFRkFVTFRfT1BUSU9OUzogUGFydGlhbDxHZW5lcmF0ZU1hcmtkb3duTGlua09wdGlvbnM+ID0ge1xuICAgIGlzRW1wdHlFbWJlZEFsaWFzQWxsb3dlZDogdHJ1ZVxuICB9O1xuXG4gIG9wdGlvbnMgPSB7IC4uLkRFRkFVTFRfT1BUSU9OUywgLi4uY29uZmlndXJhYmxlRGVmYXVsdE9wdGlvbnMsIC4uLm9wdGlvbnMgfTtcblxuICBjb25zdCB0YXJnZXRGaWxlID0gZ2V0RmlsZShhcHAsIG9wdGlvbnMudGFyZ2V0UGF0aE9yRmlsZSwgb3B0aW9ucy5pc05vbkV4aXN0aW5nRmlsZUFsbG93ZWQpO1xuXG4gIHJldHVybiB0ZW1wUmVnaXN0ZXJGaWxlQW5kUnVuKGFwcCwgdGFyZ2V0RmlsZSwgKCkgPT4gZ2VuZXJhdGVNYXJrZG93bkxpbmtJbXBsKG9wdGlvbnMpKTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYSBsaW5rIGludG8gaXRzIGNvbXBvbmVudHMuXG4gKlxuICogQHBhcmFtIHN0ciAtIFRoZSBsaW5rIHRvIHBhcnNlLlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBsaW5rLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VMaW5rKHN0cjogc3RyaW5nKTogbnVsbCB8IFBhcnNlTGlua1Jlc3VsdCB7XG4gIGNvbnN0IHJlc3VsdCA9IHBhcnNlTGlua1VybChzdHIpO1xuICBpZiAocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGNvbnN0IEVNQkVEX1BSRUZJWCA9ICchJztcblxuICBjb25zdCBpc0VtYmVkID0gc3RyLnN0YXJ0c1dpdGgoRU1CRURfUFJFRklYKTtcbiAgaWYgKGlzRW1iZWQpIHtcbiAgICBzdHIgPSB0cmltU3RhcnQoc3RyLCBFTUJFRF9QUkVGSVgpO1xuICB9XG4gIGNvbnN0IHByb2Nlc3NvciA9IHJlbWFyaygpLnVzZShyZW1hcmtQYXJzZSkudXNlKHdpa2lMaW5rUGx1Z2luLCB7IGFsaWFzRGl2aWRlcjogV0lLSUxJTktfRElWSURFUiB9KTtcbiAgY29uc3Qgcm9vdCA9IHByb2Nlc3Nvci5wYXJzZShzdHIpO1xuXG4gIGlmIChyb290LmNoaWxkcmVuLmxlbmd0aCAhPT0gMSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgcGFyYWdyYXBoID0gcm9vdC5jaGlsZHJlblswXTtcblxuICBpZiAocGFyYWdyYXBoPy50eXBlICE9PSAncGFyYWdyYXBoJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHBhcmFncmFwaC5jaGlsZHJlbi5sZW5ndGggIT09IDEpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG5vZGUgPSBwYXJhZ3JhcGguY2hpbGRyZW5bMF07XG5cbiAgaWYgKG5vZGU/LnBvc2l0aW9uPy5zdGFydC5vZmZzZXQgIT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChub2RlLnBvc2l0aW9uLmVuZC5vZmZzZXQgIT09IHN0ci5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN3aXRjaCAobm9kZS50eXBlIGFzIHN0cmluZykge1xuICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgcmV0dXJuIHBhcnNlTGlua05vZGUobm9kZSBhcyBMaW5rLCBzdHIsIGlzRW1iZWQpO1xuICAgIGNhc2UgJ3dpa2lMaW5rJzpcbiAgICAgIHJldHVybiBwYXJzZVdpa2lsaW5rTm9kZShub2RlIGFzIHVua25vd24gYXMgV2lraUxpbmtOb2RlLCBzdHIsIGlzRW1iZWQpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGFsaWFzIG9mIGEgbGluayBzaG91bGQgYmUgcmVzZXQuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgZGV0ZXJtaW5pbmcgaWYgdGhlIGFsaWFzIHNob3VsZCBiZSByZXNldC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFsaWFzIHNob3VsZCBiZSByZXNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZFJlc2V0QWxpYXMob3B0aW9uczogU2hvdWxkUmVzZXRBbGlhc09wdGlvbnMpOiBib29sZWFuIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBkaXNwbGF5VGV4dCxcbiAgICBpc1dpa2lsaW5rLFxuICAgIG5ld1NvdXJjZVBhdGhPckZpbGUsXG4gICAgb2xkU291cmNlUGF0aE9yRmlsZSxcbiAgICBvbGRUYXJnZXRQYXRoLFxuICAgIHRhcmdldFBhdGhPckZpbGVcbiAgfSA9IG9wdGlvbnM7XG4gIGlmIChpc1dpa2lsaW5rID09PSBmYWxzZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghZGlzcGxheVRleHQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IHRhcmdldEZpbGUgPSBnZXRGaWxlKGFwcCwgdGFyZ2V0UGF0aE9yRmlsZSwgdHJ1ZSk7XG4gIGNvbnN0IG5ld1NvdXJjZVBhdGggPSBnZXRQYXRoKGFwcCwgbmV3U291cmNlUGF0aE9yRmlsZSk7XG4gIGNvbnN0IG9sZFNvdXJjZVBhdGggPSBnZXRQYXRoKGFwcCwgb2xkU291cmNlUGF0aE9yRmlsZSA/PyBuZXdTb3VyY2VQYXRoT3JGaWxlKTtcbiAgY29uc3QgbmV3U291cmNlRm9sZGVyID0gZGlybmFtZShuZXdTb3VyY2VQYXRoKTtcbiAgY29uc3Qgb2xkU291cmNlRm9sZGVyID0gZGlybmFtZShvbGRTb3VyY2VQYXRoKTtcbiAgY29uc3QgYWxpYXNlc1RvUmVzZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBmb3IgKGNvbnN0IHBhdGhPckZpbGUgb2YgW3RhcmdldEZpbGUucGF0aCwgb2xkVGFyZ2V0UGF0aF0pIHtcbiAgICBpZiAoIXBhdGhPckZpbGUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHBhdGggPSBnZXRQYXRoKGFwcCwgcGF0aE9yRmlsZSk7XG4gICAgYWxpYXNlc1RvUmVzZXQuYWRkKHBhdGgpO1xuICAgIGFsaWFzZXNUb1Jlc2V0LmFkZChiYXNlbmFtZShwYXRoKSk7XG4gICAgYWxpYXNlc1RvUmVzZXQuYWRkKHJlbGF0aXZlKG5ld1NvdXJjZUZvbGRlciwgcGF0aCkpO1xuICAgIGFsaWFzZXNUb1Jlc2V0LmFkZChyZWxhdGl2ZShvbGRTb3VyY2VGb2xkZXIsIHBhdGgpKTtcbiAgfVxuXG4gIGZvciAoY29uc3Qgc291cmNlUGF0aCBvZiBbb2xkU291cmNlUGF0aCwgbmV3U291cmNlUGF0aF0pIHtcbiAgICBhbGlhc2VzVG9SZXNldC5hZGQoYXBwLm1ldGFkYXRhQ2FjaGUuZmlsZVRvTGlua3RleHQodGFyZ2V0RmlsZSwgc291cmNlUGF0aCwgZmFsc2UpKTtcbiAgfVxuXG4gIGNvbnN0IGNsZWFuRGlzcGxheVRleHQgPSByZXBsYWNlQWxsKG5vcm1hbGl6ZVBhdGgoZGlzcGxheVRleHQuc3BsaXQoJyA+ICcpWzBdID8/ICcnKSwgL15cXC5cXC8vZywgJycpLnRvTG93ZXJDYXNlKCk7XG5cbiAgZm9yIChjb25zdCBhbGlhcyBvZiBhbGlhc2VzVG9SZXNldCkge1xuICAgIGlmIChhbGlhcy50b0xvd2VyQ2FzZSgpID09PSBjbGVhbkRpc3BsYXlUZXh0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBmb2xkZXIgPSBkaXJuYW1lKGFsaWFzKTtcbiAgICBjb25zdCBiYXNlID0gYmFzZW5hbWUoYWxpYXMsIGV4dG5hbWUoYWxpYXMpKTtcbiAgICBpZiAoam9pbihmb2xkZXIsIGJhc2UpLnRvTG93ZXJDYXNlKCkgPT09IGNsZWFuRGlzcGxheVRleHQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBTcGxpdHMgYSBsaW5rIGludG8gaXRzIGxpbmsgcGF0aCBhbmQgc3VicGF0aC5cbiAqXG4gKiBAcGFyYW0gbGluayAtIFRoZSBsaW5rIHRvIHNwbGl0LlxuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGxpbmsgcGF0aCBhbmQgc3VicGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0U3VicGF0aChsaW5rOiBzdHJpbmcpOiBTcGxpdFN1YnBhdGhSZXN1bHQge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZUxpbmt0ZXh0KG5vcm1hbGl6ZShsaW5rKSk7XG4gIHJldHVybiB7XG4gICAgbGlua1BhdGg6IHBhcnNlZC5wYXRoLFxuICAgIHN1YnBhdGg6IHBhcnNlZC5zdWJwYXRoXG4gIH07XG59XG5cbi8qKlxuICogVGVzdHMgd2hldGhlciBhIGxpbmsgdXNlcyBhbmdsZSBicmFja2V0cywgcG9zc2libHkgZW1iZWQ6XG4gKiBgW3RpdGxlXSg8bGluaz4pYCwgYCFbdGl0bGVdKDxsaW5rPilgLlxuICpcbiAqIEBwYXJhbSBsaW5rIC0gTGluayB0byB0ZXN0XG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBsaW5rIHVzZXMgYW5nbGUgYnJhY2tldHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRlc3RBbmdsZUJyYWNrZXRzKGxpbms6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBwYXJzZUxpbmtSZXN1bHQgPSBwYXJzZUxpbmsobGluayk7XG4gIHJldHVybiBwYXJzZUxpbmtSZXN1bHQ/Lmhhc0FuZ2xlQnJhY2tldHMgPz8gZmFsc2U7XG59XG5cbi8qKlxuICogVGVzdHMgd2hldGhlciBhIGxpbmsgaXMgYW4gZW1iZWQgbGluazpcbiAqIGAhW1tsaW5rXV1gLCBgIVt0aXRsZV0obGluaylgLlxuICpcbiAqIEBwYXJhbSBsaW5rIC0gTGluayB0byB0ZXN0XG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBsaW5rIGlzIGFuIGVtYmVkIGxpbmtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRlc3RFbWJlZChsaW5rOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgcGFyc2VMaW5rUmVzdWx0ID0gcGFyc2VMaW5rKGxpbmspO1xuICByZXR1cm4gcGFyc2VMaW5rUmVzdWx0Py5pc0VtYmVkID8/IGZhbHNlO1xufVxuXG4vKipcbiAqIFRlc3RzIHdoZXRoZXIgYSBsaW5rIGhhcyBhIGxlYWRpbmcgZG90LCBwb3NzaWJseSBlbWJlZDpcbiAqIGBbWy4vbGlua11dYCwgYFt0aXRsZV0oLi9saW5rKWAsIGBbdGl0bGVdKDwuL2xpbms+KWAsXG4gKiBgIVtbLi9saW5rXV1gLCBgIVt0aXRsZV0oLi9saW5rKWAsIGAhW3RpdGxlXSg8Li9saW5rPilgLlxuICpcbiAqIEBwYXJhbSBsaW5rIC0gTGluayB0byB0ZXN0XG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBsaW5rIGhhcyBhIGxlYWRpbmcgZG90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0TGVhZGluZ0RvdChsaW5rOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgcGFyc2VMaW5rUmVzdWx0ID0gcGFyc2VMaW5rKGxpbmspO1xuICByZXR1cm4gcGFyc2VMaW5rUmVzdWx0Py51cmwuc3RhcnRzV2l0aCgnLi8nKSA/PyBmYWxzZTtcbn1cblxuLyoqXG4gKiBUZXN0cyB3aGV0aGVyIGEgbGluayBpcyBhIHdpa2lsaW5rLCBwb3NzaWJseSBlbWJlZDpcbiAqIGBbW2xpbmtdXWAsIGAhW1tsaW5rXV1gLlxuICpcbiAqIEBwYXJhbSBsaW5rIC0gTGluayB0byB0ZXN0XG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBsaW5rIGlzIGEgd2lraWxpbmtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRlc3RXaWtpbGluayhsaW5rOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgcGFyc2VMaW5rUmVzdWx0ID0gcGFyc2VMaW5rKGxpbmspO1xuICByZXR1cm4gcGFyc2VMaW5rUmVzdWx0Py5pc1dpa2lsaW5rID8/IGZhbHNlO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgYSBsaW5rIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHVwZGF0aW5nIHRoZSBsaW5rLlxuICogQHJldHVybnMgVGhlIHVwZGF0ZWQgbGluay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUxpbmsob3B0aW9uczogVXBkYXRlTGlua09wdGlvbnMpOiBzdHJpbmcge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGxpbmssXG4gICAgbmV3U291cmNlUGF0aE9yRmlsZSxcbiAgICBuZXdUYXJnZXRQYXRoT3JGaWxlLFxuICAgIG9sZFNvdXJjZVBhdGhPckZpbGUsXG4gICAgb2xkVGFyZ2V0UGF0aE9yRmlsZSxcbiAgICBzaG91bGRGb3JjZU1hcmtkb3duTGlua3MsXG4gICAgc2hvdWxkVXBkYXRlRmlsZW5hbWVBbGlhc1xuICB9ID0gb3B0aW9ucztcbiAgaWYgKCFuZXdUYXJnZXRQYXRoT3JGaWxlKSB7XG4gICAgcmV0dXJuIGxpbmsub3JpZ2luYWw7XG4gIH1cbiAgY29uc3QgdGFyZ2V0RmlsZSA9IGdldEZpbGUoYXBwLCBuZXdUYXJnZXRQYXRoT3JGaWxlLCB0cnVlKTtcbiAgY29uc3Qgb2xkVGFyZ2V0UGF0aCA9IGdldFBhdGgoYXBwLCBvbGRUYXJnZXRQYXRoT3JGaWxlID8/IG5ld1RhcmdldFBhdGhPckZpbGUpO1xuICBjb25zdCBpc1dpa2lsaW5rID0gdGVzdFdpa2lsaW5rKGxpbmsub3JpZ2luYWwpICYmIHNob3VsZEZvcmNlTWFya2Rvd25MaW5rcyAhPT0gdHJ1ZTtcbiAgY29uc3QgeyBzdWJwYXRoIH0gPSBzcGxpdFN1YnBhdGgobGluay5saW5rKTtcbiAgbGV0IHNob3VsZEtlZXBBbGlhcyA9ICFzaG91bGRVcGRhdGVGaWxlbmFtZUFsaWFzO1xuXG4gIGlmIChpc0NhbnZhc0ZpbGUoYXBwLCBuZXdTb3VyY2VQYXRoT3JGaWxlKSkge1xuICAgIGlmIChpc0NhbnZhc0ZpbGVOb2RlUmVmZXJlbmNlKGxpbmspKSB7XG4gICAgICByZXR1cm4gdGFyZ2V0RmlsZS5wYXRoICsgc3VicGF0aDtcbiAgICB9XG4gIH1cblxuICBsZXQgYWxpYXM6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBpZiAoaXNXaWtpbGluaykge1xuICAgIGNvbnN0IHBhcnNlTGlua1Jlc3VsdCA9IHBhcnNlTGluayhsaW5rLm9yaWdpbmFsKTtcbiAgICBpZiAocGFyc2VMaW5rUmVzdWx0Py5hbGlhcykge1xuICAgICAgYWxpYXMgPSBwYXJzZUxpbmtSZXN1bHQuYWxpYXM7XG4gICAgICBzaG91bGRLZWVwQWxpYXMgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGFsaWFzID8/PSBzaG91bGRSZXNldEFsaWFzKG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxTaG91bGRSZXNldEFsaWFzT3B0aW9ucz4oe1xuICAgICAgYXBwLFxuICAgICAgZGlzcGxheVRleHQ6IGxpbmsuZGlzcGxheVRleHQsXG4gICAgICBpc1dpa2lsaW5rLFxuICAgICAgbmV3U291cmNlUGF0aE9yRmlsZSxcbiAgICAgIG9sZFNvdXJjZVBhdGhPckZpbGUsXG4gICAgICBvbGRUYXJnZXRQYXRoLFxuICAgICAgdGFyZ2V0UGF0aE9yRmlsZTogdGFyZ2V0RmlsZVxuICAgIH0pKVxuICAgID8gdW5kZWZpbmVkXG4gICAgOiBsaW5rLmRpc3BsYXlUZXh0O1xuXG4gIGlmICghc2hvdWxkS2VlcEFsaWFzKSB7XG4gICAgaWYgKGFsaWFzID09PSBiYXNlbmFtZShvbGRUYXJnZXRQYXRoLCBleHRuYW1lKG9sZFRhcmdldFBhdGgpKSkge1xuICAgICAgYWxpYXMgPSB0YXJnZXRGaWxlLmJhc2VuYW1lO1xuICAgIH0gZWxzZSBpZiAoYWxpYXMgPT09IGJhc2VuYW1lKG9sZFRhcmdldFBhdGgpKSB7XG4gICAgICBhbGlhcyA9IHRhcmdldEZpbGUubmFtZTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBuZXdMaW5rID0gZ2VuZXJhdGVNYXJrZG93bkxpbmsobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPEdlbmVyYXRlTWFya2Rvd25MaW5rT3B0aW9ucz4oe1xuICAgIGFsaWFzLFxuICAgIGFwcCxcbiAgICBpc1dpa2lsaW5rOiBzaG91bGRGb3JjZU1hcmtkb3duTGlua3MgPyBmYWxzZSA6IHVuZGVmaW5lZCxcbiAgICBvcmlnaW5hbExpbms6IGxpbmsub3JpZ2luYWwsXG4gICAgc291cmNlUGF0aE9yRmlsZTogbmV3U291cmNlUGF0aE9yRmlsZSxcbiAgICBzdWJwYXRoLFxuICAgIHRhcmdldFBhdGhPckZpbGU6IHRhcmdldEZpbGVcbiAgfSkpO1xuICByZXR1cm4gbmV3TGluaztcbn1cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBsaW5rcyBpbiBhIGNvbnRlbnQgc3RyaW5nIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHVwZGF0aW5nIHRoZSBsaW5rcy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGNvbnRlbnQgd2l0aCB1cGRhdGVkIGxpbmtzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlTGlua3NJbkNvbnRlbnQob3B0aW9uczogVXBkYXRlTGlua3NJbkNvbnRlbnRPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBjb250ZW50LFxuICAgIG5ld1NvdXJjZVBhdGhPckZpbGUsXG4gICAgb2xkU291cmNlUGF0aE9yRmlsZSxcbiAgICBzaG91bGRGb3JjZU1hcmtkb3duTGlua3MsXG4gICAgc2hvdWxkVXBkYXRlRW1iZWRPbmx5TGlua3MsXG4gICAgc2hvdWxkVXBkYXRlRmlsZW5hbWVBbGlhc1xuICB9ID0gb3B0aW9ucztcblxuICByZXR1cm4gYXdhaXQgZWRpdExpbmtzSW5Db250ZW50KGFwcCwgY29udGVudCwgKGxpbmspID0+IHtcbiAgICBjb25zdCBpc0VtYmVkTGluayA9IHRlc3RFbWJlZChsaW5rLm9yaWdpbmFsKTtcbiAgICBpZiAoc2hvdWxkVXBkYXRlRW1iZWRPbmx5TGlua3MgIT09IHVuZGVmaW5lZCAmJiBzaG91bGRVcGRhdGVFbWJlZE9ubHlMaW5rcyAhPT0gaXNFbWJlZExpbmspIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnZlcnRMaW5rKG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxDb252ZXJ0TGlua09wdGlvbnM+KHtcbiAgICAgIGFwcCxcbiAgICAgIGxpbmssXG4gICAgICBuZXdTb3VyY2VQYXRoT3JGaWxlLFxuICAgICAgb2xkU291cmNlUGF0aE9yRmlsZSxcbiAgICAgIHNob3VsZEZvcmNlTWFya2Rvd25MaW5rcyxcbiAgICAgIHNob3VsZFVwZGF0ZUZpbGVuYW1lQWxpYXNcbiAgICB9KSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGxpbmtzIGluIGEgZmlsZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcGFyYW1ldGVycy5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB1cGRhdGluZyB0aGUgbGlua3MuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGxpbmtzIGFyZSB1cGRhdGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlTGlua3NJbkZpbGUob3B0aW9uczogVXBkYXRlTGlua3NJbkZpbGVPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgbmV3U291cmNlUGF0aE9yRmlsZSxcbiAgICBvbGRTb3VyY2VQYXRoT3JGaWxlLFxuICAgIHNob3VsZEZvcmNlTWFya2Rvd25MaW5rcyxcbiAgICBzaG91bGRVcGRhdGVFbWJlZE9ubHlMaW5rcyxcbiAgICBzaG91bGRVcGRhdGVGaWxlbmFtZUFsaWFzXG4gIH0gPSBvcHRpb25zO1xuXG4gIGlmIChpc0NhbnZhc0ZpbGUoYXBwLCBuZXdTb3VyY2VQYXRoT3JGaWxlKSAmJiAhYXBwLmludGVybmFsUGx1Z2lucy5nZXRFbmFibGVkUGx1Z2luQnlJZChJbnRlcm5hbFBsdWdpbk5hbWUuQ2FudmFzKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IGVkaXRMaW5rcyhhcHAsIG5ld1NvdXJjZVBhdGhPckZpbGUsIChsaW5rKSA9PiB7XG4gICAgY29uc3QgaXNFbWJlZExpbmsgPSB0ZXN0RW1iZWQobGluay5vcmlnaW5hbCk7XG4gICAgaWYgKHNob3VsZFVwZGF0ZUVtYmVkT25seUxpbmtzICE9PSB1bmRlZmluZWQgJiYgc2hvdWxkVXBkYXRlRW1iZWRPbmx5TGlua3MgIT09IGlzRW1iZWRMaW5rKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiBjb252ZXJ0TGluayhub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8Q29udmVydExpbmtPcHRpb25zPih7XG4gICAgICBhcHAsXG4gICAgICBsaW5rLFxuICAgICAgbmV3U291cmNlUGF0aE9yRmlsZSxcbiAgICAgIG9sZFNvdXJjZVBhdGhPckZpbGUsXG4gICAgICBzaG91bGRGb3JjZU1hcmtkb3duTGlua3MsXG4gICAgICBzaG91bGRVcGRhdGVGaWxlbmFtZUFsaWFzXG4gICAgfSkpO1xuICB9LCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gX2ZpeEZyb250bWF0dGVyTWFya2Rvd25MaW5rcyh2YWx1ZTogdW5rbm93biwga2V5OiBzdHJpbmcsIGNhY2hlOiBDYWNoZWRNZXRhZGF0YSk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IHBhcnNlTGlua1Jlc3VsdCA9IHBhcnNlTGluayh2YWx1ZSk7XG4gICAgaWYgKCFwYXJzZUxpbmtSZXN1bHQgfHwgcGFyc2VMaW5rUmVzdWx0LmlzV2lraWxpbmsgfHwgcGFyc2VMaW5rUmVzdWx0LmlzRXh0ZXJuYWwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjYWNoZS5mcm9udG1hdHRlckxpbmtzID8/PSBbXTtcbiAgICBsZXQgbGluayA9IGNhY2hlLmZyb250bWF0dGVyTGlua3MuZmluZCgoZnJvbnRtYXR0ZXJMaW5rKSA9PiBmcm9udG1hdHRlckxpbmsua2V5ID09PSBrZXkpO1xuXG4gICAgaWYgKCFsaW5rKSB7XG4gICAgICBsaW5rID0ge1xuICAgICAgICBrZXksXG4gICAgICAgIGxpbms6ICcnLFxuICAgICAgICBvcmlnaW5hbDogJydcbiAgICAgIH07XG4gICAgICBjYWNoZS5mcm9udG1hdHRlckxpbmtzLnB1c2gobGluayk7XG4gICAgfVxuXG4gICAgbGluay5saW5rID0gcGFyc2VMaW5rUmVzdWx0LnVybDtcbiAgICBsaW5rLm9yaWdpbmFsID0gdmFsdWU7XG4gICAgaWYgKHBhcnNlTGlua1Jlc3VsdC5hbGlhcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaW5rLmRpc3BsYXlUZXh0ID0gcGFyc2VMaW5rUmVzdWx0LmFsaWFzO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBsZXQgaGFzRnJvbnRtYXR0ZXJMaW5rcyA9IGZhbHNlO1xuXG4gIGZvciAoY29uc3QgW2NoaWxkS2V5LCBjaGlsZFZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSBhcyBHZW5lcmljT2JqZWN0KSkge1xuICAgIGNvbnN0IGhhc0NoaWxkRnJvbnRtYXR0ZXJMaW5rcyA9IF9maXhGcm9udG1hdHRlck1hcmtkb3duTGlua3MoY2hpbGRWYWx1ZSwga2V5ID8gYCR7a2V5fS4ke2NoaWxkS2V5fWAgOiBjaGlsZEtleSwgY2FjaGUpO1xuICAgIGhhc0Zyb250bWF0dGVyTGlua3MgfHw9IGhhc0NoaWxkRnJvbnRtYXR0ZXJMaW5rcztcbiAgfVxuXG4gIHJldHVybiBoYXNGcm9udG1hdHRlckxpbmtzO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUxpbmtUZXh0KGFwcDogQXBwLCB0YXJnZXRGaWxlOiBURmlsZSwgc291cmNlUGF0aDogc3RyaW5nLCBzdWJwYXRoOiBzdHJpbmcsIGNvbmZpZzogTGlua0NvbmZpZyk6IHN0cmluZyB7XG4gIGxldCBsaW5rVGV4dDogc3RyaW5nO1xuXG4gIGlmICh0YXJnZXRGaWxlLnBhdGggPT09IHNvdXJjZVBhdGggJiYgc3VicGF0aCkge1xuICAgIGxpbmtUZXh0ID0gc3VicGF0aDtcbiAgfSBlbHNlIGlmIChjb25maWcuc2hvdWxkRm9yY2VSZWxhdGl2ZVBhdGgpIHtcbiAgICBsaW5rVGV4dCA9IHJlbGF0aXZlKGRpcm5hbWUoc291cmNlUGF0aCksIGNvbmZpZy5pc1dpa2lsaW5rID8gdHJpbU1hcmtkb3duRXh0ZW5zaW9uKGFwcCwgdGFyZ2V0RmlsZSkgOiB0YXJnZXRGaWxlLnBhdGgpICsgc3VicGF0aDtcbiAgfSBlbHNlIHtcbiAgICBsaW5rVGV4dCA9IGFwcC5tZXRhZGF0YUNhY2hlLmZpbGVUb0xpbmt0ZXh0KHRhcmdldEZpbGUsIHNvdXJjZVBhdGgsIGNvbmZpZy5pc1dpa2lsaW5rKSArIHN1YnBhdGg7XG4gIH1cblxuICBpZiAoY29uZmlnLnNob3VsZEZvcmNlUmVsYXRpdmVQYXRoICYmIGNvbmZpZy5zaG91bGRVc2VMZWFkaW5nRG90ICYmICFsaW5rVGV4dC5zdGFydHNXaXRoKCcuJykgJiYgIWxpbmtUZXh0LnN0YXJ0c1dpdGgoJyMnKSkge1xuICAgIGxpbmtUZXh0ID0gYC4vJHtsaW5rVGV4dH1gO1xuICB9XG5cbiAgcmV0dXJuIGxpbmtUZXh0O1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZU1hcmtkb3duTGlua0ltcGwob3B0aW9uczogR2VuZXJhdGVNYXJrZG93bkxpbmtPcHRpb25zKTogc3RyaW5nIHtcbiAgY29uc3QgeyBhcHAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHRhcmdldEZpbGUgPSBnZXRGaWxlKGFwcCwgb3B0aW9ucy50YXJnZXRQYXRoT3JGaWxlLCBvcHRpb25zLmlzTm9uRXhpc3RpbmdGaWxlQWxsb3dlZCk7XG4gIGNvbnN0IHNvdXJjZVBhdGggPSBnZXRQYXRoKGFwcCwgb3B0aW9ucy5zb3VyY2VQYXRoT3JGaWxlKTtcbiAgY29uc3Qgc3VicGF0aCA9IG9wdGlvbnMuc3VicGF0aCA/PyAnJztcblxuICBjb25zdCBsaW5rQ29uZmlnID0gZ2V0TGlua0NvbmZpZyhvcHRpb25zLCB0YXJnZXRGaWxlKTtcbiAgY29uc3QgbGlua1RleHQgPSBnZW5lcmF0ZUxpbmtUZXh0KGFwcCwgdGFyZ2V0RmlsZSwgc291cmNlUGF0aCwgc3VicGF0aCwgbGlua0NvbmZpZyk7XG5cbiAgcmV0dXJuIGxpbmtDb25maWcuaXNXaWtpbGlua1xuICAgID8gZ2VuZXJhdGVXaWtpTGluayhsaW5rVGV4dCwgb3B0aW9ucy5hbGlhcywgbGlua0NvbmZpZy5pc0VtYmVkKVxuICAgIDogZ2VuZXJhdGVNYXJrZG93blN0eWxlTGluayhsaW5rVGV4dCwgdGFyZ2V0RmlsZSwgb3B0aW9ucywgbGlua0NvbmZpZyk7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlTWFya2Rvd25TdHlsZUxpbmsobGlua1RleHQ6IHN0cmluZywgdGFyZ2V0RmlsZTogVEZpbGUsIG9wdGlvbnM6IEdlbmVyYXRlTWFya2Rvd25MaW5rT3B0aW9ucywgY29uZmlnOiBMaW5rQ29uZmlnKTogc3RyaW5nIHtcbiAgY29uc3QgeyBhcHAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGVtYmVkUHJlZml4ID0gY29uZmlnLmlzRW1iZWQgPyAnIScgOiAnJztcblxuICBjb25zdCBwcm9jZXNzZWRMaW5rVGV4dCA9IGNvbmZpZy5zaG91bGRVc2VBbmdsZUJyYWNrZXRzXG4gICAgPyBgPCR7bGlua1RleHR9PmBcbiAgICA6IGVuY29kZVVybChsaW5rVGV4dCk7XG5cbiAgbGV0IGFsaWFzID0gb3B0aW9ucy5hbGlhcyA/PyAnJztcbiAgaWYgKCFhbGlhcyAmJiAoIWNvbmZpZy5pc0VtYmVkIHx8ICFvcHRpb25zLmlzRW1wdHlFbWJlZEFsaWFzQWxsb3dlZCkpIHtcbiAgICBhbGlhcyA9ICFvcHRpb25zLnNob3VsZEluY2x1ZGVBdHRhY2htZW50RXh0ZW5zaW9uVG9FbWJlZEFsaWFzIHx8IGlzTWFya2Rvd25GaWxlKGFwcCwgdGFyZ2V0RmlsZSlcbiAgICAgID8gdGFyZ2V0RmlsZS5iYXNlbmFtZVxuICAgICAgOiB0YXJnZXRGaWxlLm5hbWU7XG4gIH1cblxuICBjb25zdCBlc2NhcGVkQWxpYXMgPSByZXBsYWNlQWxsKGFsaWFzLCBTUEVDSUFMX01BUktET1dOX0xJTktfU1lNQk9MU19SRUdFWCwgJ1xcXFwkJicpO1xuICByZXR1cm4gYCR7ZW1iZWRQcmVmaXh9WyR7ZXNjYXBlZEFsaWFzfV0oJHtwcm9jZXNzZWRMaW5rVGV4dH0pYDtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVXaWtpTGluayhsaW5rVGV4dDogc3RyaW5nLCBhbGlhczogc3RyaW5nIHwgdW5kZWZpbmVkLCBpc0VtYmVkOiBib29sZWFuKTogc3RyaW5nIHtcbiAgY29uc3QgZW1iZWRQcmVmaXggPSBpc0VtYmVkID8gJyEnIDogJyc7XG4gIGNvbnN0IG5vcm1hbGl6ZWRBbGlhcyA9IGFsaWFzID8/ICcnO1xuXG4gIGlmIChub3JtYWxpemVkQWxpYXMgJiYgbm9ybWFsaXplZEFsaWFzLnRvTG93ZXJDYXNlKCkgPT09IGxpbmtUZXh0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICByZXR1cm4gYCR7ZW1iZWRQcmVmaXh9W1ske25vcm1hbGl6ZWRBbGlhc31dXWA7XG4gIH1cblxuICBjb25zdCBhbGlhc1BhcnQgPSBub3JtYWxpemVkQWxpYXMgPyBgfCR7bm9ybWFsaXplZEFsaWFzfWAgOiAnJztcbiAgcmV0dXJuIGAke2VtYmVkUHJlZml4fVtbJHtsaW5rVGV4dH0ke2FsaWFzUGFydH1dXWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEZpbGVDaGFuZ2VzKFxuICBjYWNoZTogQ2FjaGVkTWV0YWRhdGEgfCBudWxsLFxuICBpc0NhbnZhc0ZpbGVDYWNoZTogYm9vbGVhbixcbiAgbGlua0NvbnZlcnRlcjogKGxpbms6IFJlZmVyZW5jZSkgPT4gUHJvbWlzYWJsZTxNYXliZVJldHVybjxzdHJpbmc+PlxuKTogUHJvbWlzZTxGaWxlQ2hhbmdlW10+IHtcbiAgaWYgKCFjYWNoZSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGNoYW5nZXM6IEZpbGVDaGFuZ2VbXSA9IFtdO1xuXG4gIGNvbnN0IHRhYmxlUG9zaXRpb25zOiBUYWJsZVBvc2l0aW9uW10gPSAoY2FjaGUuc2VjdGlvbnMgPz8gW10pLmZpbHRlcigoc2VjdGlvbikgPT4gc2VjdGlvbi50eXBlID09PSAndGFibGUnKS5tYXAoKHNlY3Rpb24pID0+ICh7XG4gICAgZW5kOiBzZWN0aW9uLnBvc2l0aW9uLmVuZC5vZmZzZXQsXG4gICAgc3RhcnQ6IHNlY3Rpb24ucG9zaXRpb24uc3RhcnQub2Zmc2V0XG4gIH0pKTtcblxuICBmb3IgKGNvbnN0IGxpbmsgb2YgZ2V0QWxsTGlua3MoY2FjaGUpKSB7XG4gICAgY29uc3QgbmV3Q29udGVudCA9IGF3YWl0IGxpbmtDb252ZXJ0ZXIobGluayk7XG4gICAgaWYgKG5ld0NvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZUNoYW5nZSA9IHJlZmVyZW5jZVRvRmlsZUNoYW5nZShsaW5rLCBuZXdDb250ZW50KTtcblxuICAgIGlmIChpc0NhbnZhc0ZpbGVDYWNoZSkge1xuICAgICAgaWYgKGlzQ2FudmFzQ2hhbmdlKGZpbGVDaGFuZ2UpKSB7XG4gICAgICAgIGNoYW5nZXMucHVzaChmaWxlQ2hhbmdlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybignVW5zdXBwb3J0ZWQgZmlsZSBjaGFuZ2UnLCBmaWxlQ2hhbmdlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNob3VsZEVzY2FwZVdpa2lsaW5rRGl2aWRlcihmaWxlQ2hhbmdlLCB0YWJsZVBvc2l0aW9ucykpIHtcbiAgICAgICAgZmlsZUNoYW5nZS5uZXdDb250ZW50ID0gZmlsZUNoYW5nZS5uZXdDb250ZW50LnJlcGxhY2VBbGwoVU5FU0NBUEVEX1dJS0lMSU5LX0RJVklERVJfUkVHRVhQLCBFU0NBUEVEX1dJS0lMSU5LX0RJVklERVIpO1xuICAgICAgfVxuXG4gICAgICBjaGFuZ2VzLnB1c2goZmlsZUNoYW5nZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBjaGFuZ2VzO1xufVxuXG5mdW5jdGlvbiBnZXRMaW5rQ29uZmlnKG9wdGlvbnM6IEdlbmVyYXRlTWFya2Rvd25MaW5rT3B0aW9ucywgdGFyZ2V0RmlsZTogVEZpbGUpOiBMaW5rQ29uZmlnIHtcbiAgY29uc3QgeyBhcHAgfSA9IG9wdGlvbnM7XG4gIHJldHVybiB7XG4gICAgaXNFbWJlZDogb3B0aW9ucy5pc0VtYmVkID8/IChvcHRpb25zLm9yaWdpbmFsTGluayA/IHRlc3RFbWJlZChvcHRpb25zLm9yaWdpbmFsTGluaykgOiB1bmRlZmluZWQpID8/ICFpc01hcmtkb3duRmlsZShhcHAsIHRhcmdldEZpbGUpLFxuICAgIGlzV2lraWxpbms6IG9wdGlvbnMuaXNXaWtpbGluayA/PyAob3B0aW9ucy5vcmlnaW5hbExpbmsgPyB0ZXN0V2lraWxpbmsob3B0aW9ucy5vcmlnaW5hbExpbmspIDogdW5kZWZpbmVkKSA/PyBzaG91bGRVc2VXaWtpbGlua3MoYXBwKSxcbiAgICBzaG91bGRGb3JjZVJlbGF0aXZlUGF0aDogb3B0aW9ucy5zaG91bGRGb3JjZVJlbGF0aXZlUGF0aCA/PyBzaG91bGRVc2VSZWxhdGl2ZUxpbmtzKGFwcCksXG4gICAgc2hvdWxkVXNlQW5nbGVCcmFja2V0czogb3B0aW9ucy5zaG91bGRVc2VBbmdsZUJyYWNrZXRzID8/IChvcHRpb25zLm9yaWdpbmFsTGluayA/IHRlc3RBbmdsZUJyYWNrZXRzKG9wdGlvbnMub3JpZ2luYWxMaW5rKSA6IHVuZGVmaW5lZCkgPz8gZmFsc2UsXG4gICAgc2hvdWxkVXNlTGVhZGluZ0RvdDogb3B0aW9ucy5zaG91bGRVc2VMZWFkaW5nRG90ID8/IChvcHRpb25zLm9yaWdpbmFsTGluayA/IHRlc3RMZWFkaW5nRG90KG9wdGlvbnMub3JpZ2luYWxMaW5rKSA6IHVuZGVmaW5lZCkgPz8gZmFsc2VcbiAgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VMaW5rTm9kZShub2RlOiBMaW5rLCBzdHI6IHN0cmluZywgaXNFbWJlZDogYm9vbGVhbik6IFBhcnNlTGlua1Jlc3VsdCB7XG4gIGNvbnN0IE9QRU5fQU5HTEVfQlJBQ0tFVCA9ICc8JztcbiAgY29uc3QgTElOS19BTElBU19TVUZGSVggPSAnXSgnO1xuICBjb25zdCBMSU5LX1NVRkZJWCA9ICcpJztcblxuICBjb25zdCBhbGlhc05vZGUgPSBub2RlLmNoaWxkcmVuWzBdIGFzIFRleHQgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHJhd1VybCA9IHN0ci5zbGljZSgoYWxpYXNOb2RlPy5wb3NpdGlvbj8uZW5kLm9mZnNldCA/PyAxKSArIExJTktfQUxJQVNfU1VGRklYLmxlbmd0aCwgKG5vZGUucG9zaXRpb24/LmVuZC5vZmZzZXQgPz8gMCkgLSBMSU5LX1NVRkZJWC5sZW5ndGgpO1xuICBjb25zdCBoYXNBbmdsZUJyYWNrZXRzID0gc3RyLnN0YXJ0c1dpdGgoT1BFTl9BTkdMRV9CUkFDS0VUKSB8fCByYXdVcmwuc3RhcnRzV2l0aChPUEVOX0FOR0xFX0JSQUNLRVQpO1xuICBjb25zdCBpc0V4dGVybmFsID0gaXNVcmwobm9kZS51cmwpO1xuICBsZXQgdXJsID0gbm9kZS51cmw7XG4gIGlmICghaXNFeHRlcm5hbCkge1xuICAgIGlmICghaGFzQW5nbGVCcmFja2V0cykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdXJsID0gZGVjb2RlVVJJQ29tcG9uZW50KHVybCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZGVjb2RlIFVSTCAke3VybH1gLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8UGFyc2VMaW5rUmVzdWx0Pih7XG4gICAgYWxpYXM6IGFsaWFzTm9kZT8udmFsdWUsXG4gICAgZW5jb2RlZFVybDogaXNFeHRlcm5hbCA/IGVuY29kZVVybCh1cmwpIDogdW5kZWZpbmVkLFxuICAgIGhhc0FuZ2xlQnJhY2tldHMsXG4gICAgaXNFbWJlZCxcbiAgICBpc0V4dGVybmFsLFxuICAgIGlzV2lraWxpbms6IGZhbHNlLFxuICAgIHRpdGxlOiBub2RlLnRpdGxlID8/IHVuZGVmaW5lZCxcbiAgICB1cmxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTGlua1VybChzdHI6IHN0cmluZyk6IG51bGwgfCBQYXJzZUxpbmtSZXN1bHQge1xuICBpZiAoIWlzVXJsKHN0cikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZW5jb2RlZFVybDogZW5jb2RlVXJsKHN0ciksXG4gICAgaXNFbWJlZDogZmFsc2UsXG4gICAgaXNFeHRlcm5hbDogdHJ1ZSxcbiAgICBpc1dpa2lsaW5rOiBmYWxzZSxcbiAgICB1cmw6IHN0clxuICB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZVdpa2lsaW5rTm9kZShub2RlOiBXaWtpTGlua05vZGUsIHN0cjogc3RyaW5nLCBpc0VtYmVkOiBib29sZWFuKTogUGFyc2VMaW5rUmVzdWx0IHtcbiAgcmV0dXJuIG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxQYXJzZUxpbmtSZXN1bHQ+KHtcbiAgICBhbGlhczogc3RyLmluY2x1ZGVzKFdJS0lMSU5LX0RJVklERVIpID8gbm9kZS5kYXRhLmFsaWFzIDogdW5kZWZpbmVkLFxuICAgIGlzRW1iZWQsXG4gICAgaXNFeHRlcm5hbDogZmFsc2UsXG4gICAgaXNXaWtpbGluazogdHJ1ZSxcbiAgICB1cmw6IG5vZGUudmFsdWVcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZEVzY2FwZVdpa2lsaW5rRGl2aWRlcihmaWxlQ2hhbmdlOiBGaWxlQ2hhbmdlLCB0YWJsZVBvc2l0aW9uczogVGFibGVQb3NpdGlvbltdKTogYm9vbGVhbiB7XG4gIGlmICghaXNDb250ZW50Q2hhbmdlKGZpbGVDaGFuZ2UpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFVTkVTQ0FQRURfV0lLSUxJTktfRElWSURFUl9SRUdFWFAudGVzdChmaWxlQ2hhbmdlLm5ld0NvbnRlbnQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRhYmxlUG9zaXRpb25zLnNvbWUoKHRhYmxlUG9zaXRpb24pID0+IHRhYmxlUG9zaXRpb24uc3RhcnQgPD0gZmlsZUNoYW5nZS5zdGFydEluZGV4ICYmIGZpbGVDaGFuZ2UuZW5kSW5kZXggPD0gdGFibGVQb3NpdGlv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
|
552
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL0xpbmsudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0aWVzIGZvciBoYW5kbGluZyBhbmQgdXBkYXRpbmcgbGlua3Mgd2l0aGluIE9ic2lkaWFuIHZhdWx0cy4gSXQgaW5jbHVkZXNcbiAqIGZ1bmN0aW9ucyB0byBzcGxpdCBwYXRocywgdXBkYXRlIGxpbmtzIGluIGZpbGVzLCBhbmQgZ2VuZXJhdGUgbWFya2Rvd24gbGlua3Mgd2l0aCB2YXJpb3VzIG9wdGlvbnMuXG4gKiBUaGUgZnVuY3Rpb25zIGludGVncmF0ZSB3aXRoIE9ic2lkaWFuJ3MgQVBJIHRvIGVuc3VyZSB0aGF0IGxpbmtzIGFyZSBtYW5hZ2VkIGNvcnJlY3RseSB3aXRoaW4gdGhlIHZhdWx0LlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgTGluayxcbiAgVGV4dFxufSBmcm9tICdtZGFzdCc7XG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgQ2FjaGVkTWV0YWRhdGEsXG4gIFJlZmVyZW5jZSxcbiAgVEZpbGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHtcbiAgbm9ybWFsaXplUGF0aCxcbiAgcGFyc2VMaW5rdGV4dFxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgeyBJbnRlcm5hbFBsdWdpbk5hbWUgfSBmcm9tICdvYnNpZGlhbi10eXBpbmdzL2ltcGxlbWVudGF0aW9ucyc7XG5pbXBvcnQgeyByZW1hcmsgfSBmcm9tICdyZW1hcmsnO1xuaW1wb3J0IHJlbWFya1BhcnNlIGZyb20gJ3JlbWFyay1wYXJzZSc7XG5pbXBvcnQgeyB3aWtpTGlua1BsdWdpbiB9IGZyb20gJ3JlbWFyay13aWtpLWxpbmsnO1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNPYmplY3QgfSBmcm9tICcuLi9PYmplY3QudHMnO1xuaW1wb3J0IHR5cGUgeyBNYXliZVJldHVybiB9IGZyb20gJy4uL1R5cGUudHMnO1xuaW1wb3J0IHR5cGUgeyBGaWxlQ2hhbmdlIH0gZnJvbSAnLi9GaWxlQ2hhbmdlLnRzJztcbmltcG9ydCB0eXBlIHsgUGF0aE9yRmlsZSB9IGZyb20gJy4vRmlsZVN5c3RlbS50cyc7XG5pbXBvcnQgdHlwZSB7IFByb2Nlc3NPcHRpb25zIH0gZnJvbSAnLi9WYXVsdC50cyc7XG5cbmltcG9ydCB7XG4gIG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllcyxcbiAgdG9Kc29uXG59IGZyb20gJy4uL09iamVjdC50cyc7XG5pbXBvcnQge1xuICBiYXNlbmFtZSxcbiAgZGlybmFtZSxcbiAgZXh0bmFtZSxcbiAgam9pbixcbiAgcmVsYXRpdmVcbn0gZnJvbSAnLi4vUGF0aC50cyc7XG5pbXBvcnQge1xuICBub3JtYWxpemUsXG4gIHJlcGxhY2VBbGwsXG4gIHRyaW1TdGFydFxufSBmcm9tICcuLi9TdHJpbmcudHMnO1xuaW1wb3J0IHsgaXNVcmwgfSBmcm9tICcuLi91cmwudHMnO1xuaW1wb3J0IHtcbiAgYXBwbHlDb250ZW50Q2hhbmdlcyxcbiAgYXBwbHlGaWxlQ2hhbmdlcyxcbiAgaXNDYW52YXNDaGFuZ2UsXG4gIGlzQ29udGVudENoYW5nZVxufSBmcm9tICcuL0ZpbGVDaGFuZ2UudHMnO1xuaW1wb3J0IHtcbiAgZ2V0RmlsZSxcbiAgZ2V0UGF0aCxcbiAgaXNDYW52YXNGaWxlLFxuICBpc01hcmtkb3duRmlsZSxcbiAgdHJpbU1hcmtkb3duRXh0ZW5zaW9uXG59IGZyb20gJy4vRmlsZVN5c3RlbS50cyc7XG5pbXBvcnQge1xuICBnZXRBbGxMaW5rcyxcbiAgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmUsXG4gIGdldENhY2hlU2FmZSxcbiAgcGFyc2VNZXRhZGF0YSxcbiAgdGVtcFJlZ2lzdGVyRmlsZUFuZFJ1blxufSBmcm9tICcuL01ldGFkYXRhQ2FjaGUudHMnO1xuaW1wb3J0IHtcbiAgc2hvdWxkVXNlUmVsYXRpdmVMaW5rcyxcbiAgc2hvdWxkVXNlV2lraWxpbmtzXG59IGZyb20gJy4vT2JzaWRpYW5TZXR0aW5ncy50cyc7XG5pbXBvcnQge1xuICBpc0NhbnZhc0ZpbGVOb2RlUmVmZXJlbmNlLFxuICByZWZlcmVuY2VUb0ZpbGVDaGFuZ2Vcbn0gZnJvbSAnLi9SZWZlcmVuY2UudHMnO1xuXG5jb25zdCBFU0NBUEVEX1dJS0lMSU5LX0RJVklERVIgPSAnXFxcXHwnO1xuXG4vKipcbiAqIFJlZ3VsYXIgZXhwcmVzc2lvbiBmb3Igc3BlY2lhbCBsaW5rIHN5bWJvbHMuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5jb25zdCBTUEVDSUFMX0xJTktfU1lNQk9MU19SRUdFWFAgPSAvW1xcXFxcXHgwMFxceDA4XFx4MEJcXHgwQ1xceDBFLVxceDFGIF0vZztcblxuLyoqXG4gKiBSZWd1bGFyIGV4cHJlc3Npb24gZm9yIHNwZWNpYWwgbWFya2Rvd24gbGluayBzeW1ib2xzLlxuICovXG5jb25zdCBTUEVDSUFMX01BUktET1dOX0xJTktfU1lNQk9MU19SRUdFWCA9IC9bXFxcXFtcXF08Pl8qfj1gJF0vZztcblxuLyoqXG4gKiBSZWd1bGFyIGV4cHJlc3Npb24gZm9yIHVuZXNjYXBlZCBwaXBlcy5cbiAqL1xuY29uc3QgVU5FU0NBUEVEX1dJS0lMSU5LX0RJVklERVJfUkVHRVhQID0gLyg/PCFcXFxcKVxcfC9nO1xuXG5jb25zdCBXSUtJTElOS19ESVZJREVSID0gJ3wnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNvbnZlcnRpbmcgYSBsaW5rLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnZlcnRMaW5rT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSByZWZlcmVuY2UgZm9yIHRoZSBsaW5rLlxuICAgKi9cbiAgbGluazogUmVmZXJlbmNlO1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIGZpbGUgY29udGFpbmluZyB0aGUgbGluay5cbiAgICovXG4gIG5ld1NvdXJjZVBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGQgcGF0aCBvZiB0aGUgbGluay5cbiAgICovXG4gIG9sZFNvdXJjZVBhdGhPckZpbGU/OiBQYXRoT3JGaWxlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGZvcmNlIG1hcmtkb3duIGxpbmtzLlxuICAgKi9cbiAgc2hvdWxkRm9yY2VNYXJrZG93bkxpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byB1cGRhdGUgZmlsZW5hbWUgYWxpYXMuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIHNob3VsZFVwZGF0ZUZpbGVuYW1lQWxpYXM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFdyYXBwZXIgZm9yIGRlZmF1bHQgb3B0aW9ucyBmb3IgZ2VuZXJhdGluZyBtYXJrZG93biBsaW5rcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZU1hcmtkb3duTGlua0RlZmF1bHRPcHRpb25zV3JhcHBlciB7XG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBvcHRpb25zIGZvciBnZW5lcmF0aW5nIG1hcmtkb3duIGxpbmtzLlxuICAgKi9cbiAgZGVmYXVsdE9wdGlvbnNGbjogKCkgPT4gUGFydGlhbDxHZW5lcmF0ZU1hcmtkb3duTGlua09wdGlvbnM+O1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGdlbmVyYXRpbmcgYSBtYXJrZG93biBsaW5rLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlTWFya2Rvd25MaW5rT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYWxpYXMgZm9yIHRoZSBsaW5rLlxuICAgKi9cbiAgYWxpYXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBhcHA6IEFwcDtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBsaW5rIHNob3VsZCBiZSBlbWJlZGRlZC4gSWYgbm90IHByb3ZpZGVkLCBpdCB3aWxsIGJlIGluZmVycmVkIGJhc2VkIG9uIHRoZSBmaWxlIHR5cGUuXG4gICAqL1xuICBpc0VtYmVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhbGxvdyBhbiBlbXB0eSBhbGlhcyBmb3IgZW1iZWRzLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAqL1xuICBpc0VtcHR5RW1iZWRBbGlhc0FsbG93ZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFsbG93IG5vbi1leGlzdGluZyBmaWxlcy4gSWYgYGZhbHNlYCBhbmQgYHBhdGhPckZpbGVgIGlzIGEgbm9uLWV4aXN0aW5nIGZpbGUsIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duLiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgKi9cbiAgaXNOb25FeGlzdGluZ0ZpbGVBbGxvd2VkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBsaW5rIHNob3VsZCBiZSBhIHdpa2lsaW5rLiBJZiBub3QgcHJvdmlkZWQsIGl0IHdpbGwgYmUgaW5mZXJyZWQgYmFzZWQgb24gdGhlIE9ic2lkaWFuIHNldHRpbmdzLlxuICAgKi9cbiAgaXNXaWtpbGluaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBvcmlnaW5hbCBsaW5rIHRleHQuIElmIHByb3ZpZGVkLCBpdCB3aWxsIGJlIHVzZWQgdG8gaW5mZXIgdGhlIHZhbHVlcyBvZiBgaXNFbWJlZGAsIGBpc1dpa2lsaW5rYCwgYHVzZUxlYWRpbmdEb3RgLCBhbmQgYHVzZUFuZ2xlQnJhY2tldHNgLlxuICAgKiBUaGVzZSBpbmZlcnJlZCB2YWx1ZXMgd2lsbCBiZSBvdmVycmlkZGVuIGJ5IGNvcnJlc3BvbmRpbmcgc2V0dGluZ3MgaWYgc3BlY2lmaWVkLlxuICAgKi9cbiAgb3JpZ2luYWxMaW5rPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGxpbmsgc2hvdWxkIGJlIHJlbGF0aXZlLiBJZiBub3QgcHJvdmlkZWQgb3IgYGZhbHNlYCwgaXQgd2lsbCBiZSBpbmZlcnJlZCBiYXNlZCBvbiB0aGUgT2JzaWRpYW4gc2V0dGluZ3MuXG4gICAqL1xuICBzaG91bGRGb3JjZVJlbGF0aXZlUGF0aD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgYXR0YWNobWVudCBleHRlbnNpb24gaW4gdGhlIGVtYmVkIGFsaWFzLiBIYXMgbm8gZWZmZWN0IGlmIGBhbGxvd0VtcHR5RW1iZWRBbGlhc2AgaXMgYHRydWVgLiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgKi9cbiAgc2hvdWxkSW5jbHVkZUF0dGFjaG1lbnRFeHRlbnNpb25Ub0VtYmVkQWxpYXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGxpbmsgc2hvdWxkIHVzZSBhbmdsZSBicmFja2V0cy4gRGVmYXVsdHMgdG8gYGZhbHNlYC4gSGFzIG5vIGVmZmVjdCBpZiBgaXNXaWtpbGlua2AgaXMgYHRydWVgXG4gICAqL1xuICBzaG91bGRVc2VBbmdsZUJyYWNrZXRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBsaW5rIHNob3VsZCB1c2UgYSBsZWFkaW5nIGRvdC4gRGVmYXVsdHMgdG8gYGZhbHNlYC4gSGFzIG5vIGVmZmVjdCBpZiBgaXNXaWtpbGlua2AgaXMgYHRydWVgIG9yIGBpc1JlbGF0aXZlYCBpcyBgZmFsc2VgLlxuICAgKi9cbiAgc2hvdWxkVXNlTGVhZGluZ0RvdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgcGF0aCBvZiB0aGUgbGluay5cbiAgICovXG4gIHNvdXJjZVBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBzdWJwYXRoIG9mIHRoZSBsaW5rLlxuICAgKi9cbiAgc3VicGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRhcmdldCBwYXRoIG9yIGZpbGUuXG4gICAqL1xuICB0YXJnZXRQYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIFRoZSByZXN1bHQgb2YgcGFyc2luZyBhIGxpbmsuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VMaW5rUmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBhbGlhcyBvZiB0aGUgbGluay5cbiAgICovXG4gIGFsaWFzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZW5jb2RlZCBVUkwgb2YgdGhlIGxpbmsuXG4gICAqL1xuICBlbmNvZGVkVXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGxpbmsgaGFzIGFuZ2xlIGJyYWNrZXRzLlxuICAgKi9cbiAgaGFzQW5nbGVCcmFja2V0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgbGluayBpcyBhbiBlbWJlZCBsaW5rLlxuICAgKi9cbiAgaXNFbWJlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBsaW5rIGlzIGV4dGVybmFsLlxuICAgKi9cbiAgaXNFeHRlcm5hbDogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBsaW5rIGlzIGEgd2lraWxpbmsuXG4gICAqL1xuICBpc1dpa2lsaW5rOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgdGl0bGUgb2YgdGhlIGxpbmsuXG4gICAqL1xuICB0aXRsZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFVSTCBvZiB0aGUgbGluay5cbiAgICovXG4gIHVybDogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGRldGVybWluaW5nIGlmIHRoZSBhbGlhcyBvZiBhIGxpbmsgc2hvdWxkIGJlIHJlc2V0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNob3VsZFJlc2V0QWxpYXNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGRpc3BsYXkgdGV4dCBvZiB0aGUgbGluay5cbiAgICovXG4gIGRpc3BsYXlUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgbGluayBpcyBhIHdpa2lsaW5rLlxuICAgKi9cbiAgaXNXaWtpbGluaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgcGF0aCBvZiB0aGUgbGluay5cbiAgICovXG4gIG5ld1NvdXJjZVBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGQgc291cmNlIGZpbGUgY29udGFpbmluZyB0aGUgbGluay5cbiAgICovXG4gIG9sZFNvdXJjZVBhdGhPckZpbGU/OiBQYXRoT3JGaWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgb2xkIHRhcmdldCBwYXRoIG9mIHRoZSBsaW5rLlxuICAgKi9cbiAgb2xkVGFyZ2V0UGF0aDogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogVGhlIHRhcmdldCBwYXRoIG9yIGZpbGUuXG4gICAqL1xuICB0YXJnZXRQYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIFNwbGl0cyBhIGxpbmsgaW50byBpdHMgbGluayBwYXRoIGFuZCBzdWJwYXRoLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwbGl0U3VicGF0aFJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgbGluayBwYXRoLlxuICAgKi9cbiAgbGlua1BhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN1YnBhdGguXG4gICAqL1xuICBzdWJwYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdXBkYXRpbmcgYSBsaW5rLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZUxpbmtPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIHJlZmVyZW5jZSBmb3IgdGhlIGxpbmsuXG4gICAqL1xuICBsaW5rOiBSZWZlcmVuY2U7XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgZmlsZSBjb250YWluaW5nIHRoZSBsaW5rLlxuICAgKi9cbiAgbmV3U291cmNlUGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogVGhlIGZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBsaW5rLlxuICAgKi9cbiAgbmV3VGFyZ2V0UGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogVGhlIG9sZCBzb3VyY2UgZmlsZSBjb250YWluaW5nIHRoZSBsaW5rLlxuICAgKi9cbiAgb2xkU291cmNlUGF0aE9yRmlsZT86IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGQgcGF0aCBvZiB0aGUgZmlsZS5cbiAgICovXG4gIG9sZFRhcmdldFBhdGhPckZpbGU/OiBQYXRoT3JGaWxlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGZvcmNlIG1hcmtkb3duIGxpbmtzLlxuICAgKi9cbiAgc2hvdWxkRm9yY2VNYXJrZG93bkxpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byB1cGRhdGUgZmlsZW5hbWUgYWxpYXMuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIHNob3VsZFVwZGF0ZUZpbGVuYW1lQWxpYXM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHVwZGF0aW5nIGxpbmtzIGluIGEgZmlsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVMaW5rc0luRmlsZU9wdGlvbnMgZXh0ZW5kcyBQcm9jZXNzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgb2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBmaWxlIHRvIHVwZGF0ZSB0aGUgbGlua3MgaW4uXG4gICAqL1xuICBuZXdTb3VyY2VQYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgb2xkIHBhdGggb2YgdGhlIGZpbGUuXG4gICAqL1xuICBvbGRTb3VyY2VQYXRoT3JGaWxlPzogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBmb3JjZSB0aGUgbGlua3MgdG8gYmUgaW4gTWFya2Rvd24gZm9ybWF0LlxuICAgKi9cbiAgc2hvdWxkRm9yY2VNYXJrZG93bkxpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byB1cGRhdGUgb25seSBlbWJlZGRlZCBsaW5rcy5cbiAgICovXG4gIHNob3VsZFVwZGF0ZUVtYmVkT25seUxpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byB1cGRhdGUgZmlsZW5hbWUgYWxpYXMuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIHNob3VsZFVwZGF0ZUZpbGVuYW1lQWxpYXM/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgTGlua0NvbmZpZyB7XG4gIGlzRW1iZWQ6IGJvb2xlYW47XG4gIGlzV2lraWxpbms6IGJvb2xlYW47XG4gIHNob3VsZEZvcmNlUmVsYXRpdmVQYXRoOiBib29sZWFuO1xuICBzaG91bGRVc2VBbmdsZUJyYWNrZXRzOiBib29sZWFuO1xuICBzaG91bGRVc2VMZWFkaW5nRG90OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgVGFibGVQb3NpdGlvbiB7XG4gIGVuZDogbnVtYmVyO1xuICBzdGFydDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSBvcHRpb25zIGZvciB1cGRhdGluZyB0aGUgbGlua3MgaW4gYSBjb250ZW50IHN0cmluZy5cbiAqL1xuaW50ZXJmYWNlIFVwZGF0ZUxpbmtzSW5Db250ZW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgdG8gdXBkYXRlIHRoZSBsaW5rcyBpbi5cbiAgICovXG4gIGNvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5ldyBzb3VyY2UgcGF0aCBvciBmaWxlLlxuICAgKi9cbiAgbmV3U291cmNlUGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogVGhlIG9sZCBzb3VyY2UgcGF0aCBvciBmaWxlLlxuICAgKi9cbiAgb2xkU291cmNlUGF0aE9yRmlsZT86IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZm9yY2UgbWFya2Rvd24gbGlua3MuXG4gICAqL1xuICBzaG91bGRGb3JjZU1hcmtkb3duTGlua3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHVwZGF0ZSBvbmx5IGVtYmVkZGVkIGxpbmtzLlxuICAgKi9cbiAgc2hvdWxkVXBkYXRlRW1iZWRPbmx5TGlua3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHVwZGF0ZSBmaWxlbmFtZSBhbGlhcy5cbiAgICovXG4gIHNob3VsZFVwZGF0ZUZpbGVuYW1lQWxpYXM/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgV2lraUxpbmtOb2RlIHtcbiAgZGF0YToge1xuICAgIGFsaWFzOiBzdHJpbmc7XG4gIH07XG4gIHZhbHVlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBsaW5rIHRvIGEgbmV3IHBhdGguXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgY29udmVydGluZyB0aGUgbGluay5cbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgbGluay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRMaW5rKG9wdGlvbnM6IENvbnZlcnRMaW5rT3B0aW9ucyk6IHN0cmluZyB7XG4gIGNvbnN0IHRhcmdldEZpbGUgPSBleHRyYWN0TGlua0ZpbGUob3B0aW9ucy5hcHAsIG9wdGlvbnMubGluaywgb3B0aW9ucy5vbGRTb3VyY2VQYXRoT3JGaWxlID8/IG9wdGlvbnMubmV3U291cmNlUGF0aE9yRmlsZSk7XG4gIGlmICghdGFyZ2V0RmlsZSkge1xuICAgIHJldHVybiBvcHRpb25zLmxpbmsub3JpZ2luYWw7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlTGluayhub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8VXBkYXRlTGlua09wdGlvbnM+KHtcbiAgICBhcHA6IG9wdGlvbnMuYXBwLFxuICAgIGxpbms6IG9wdGlvbnMubGluayxcbiAgICBuZXdTb3VyY2VQYXRoT3JGaWxlOiBvcHRpb25zLm5ld1NvdXJjZVBhdGhPckZpbGUsXG4gICAgbmV3VGFyZ2V0UGF0aE9yRmlsZTogdGFyZ2V0RmlsZSxcbiAgICBvbGRTb3VyY2VQYXRoT3JGaWxlOiBvcHRpb25zLm9sZFNvdXJjZVBhdGhPckZpbGUsXG4gICAgc2hvdWxkRm9yY2VNYXJrZG93bkxpbmtzOiBvcHRpb25zLnNob3VsZEZvcmNlTWFya2Rvd25MaW5rcyxcbiAgICBzaG91bGRVcGRhdGVGaWxlbmFtZUFsaWFzOiBvcHRpb25zLnNob3VsZFVwZGF0ZUZpbGVuYW1lQWxpYXNcbiAgfSkpO1xufVxuXG4vKipcbiAqIEVkaXRzIHRoZSBiYWNrbGlua3MgZm9yIGEgZmlsZSBvciBwYXRoLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgdG8gZWRpdCB0aGUgYmFja2xpbmtzIGZvci5cbiAqIEBwYXJhbSBsaW5rQ29udmVydGVyIC0gVGhlIGZ1bmN0aW9uIHRoYXQgY29udmVydHMgZWFjaCBsaW5rLlxuICogQHBhcmFtIHByb2Nlc3NPcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyBmb3IgcmV0cnlpbmcgdGhlIG9wZXJhdGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgYmFja2xpbmtzIGhhdmUgYmVlbiBlZGl0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlZGl0QmFja2xpbmtzKFxuICBhcHA6IEFwcCxcbiAgcGF0aE9yRmlsZTogUGF0aE9yRmlsZSxcbiAgbGlua0NvbnZlcnRlcjogKGxpbms6IFJlZmVyZW5jZSkgPT4gUHJvbWlzYWJsZTxNYXliZVJldHVybjxzdHJpbmc+PixcbiAgcHJvY2Vzc09wdGlvbnM6IFByb2Nlc3NPcHRpb25zID0ge31cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBiYWNrbGlua3MgPSBhd2FpdCBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZShhcHAsIHBhdGhPckZpbGUsIHByb2Nlc3NPcHRpb25zKTtcbiAgZm9yIChjb25zdCBiYWNrbGlua05vdGVQYXRoIG9mIGJhY2tsaW5rcy5rZXlzKCkpIHtcbiAgICBjb25zdCBjdXJyZW50TGlua3MgPSBiYWNrbGlua3MuZ2V0KGJhY2tsaW5rTm90ZVBhdGgpID8/IFtdO1xuICAgIGNvbnN0IGxpbmtKc29ucyA9IG5ldyBTZXQ8c3RyaW5nPihjdXJyZW50TGlua3MubWFwKChsaW5rKSA9PiB0b0pzb24obGluaykpKTtcbiAgICBhd2FpdCBlZGl0TGlua3MoYXBwLCBiYWNrbGlua05vdGVQYXRoLCAobGluaykgPT4ge1xuICAgICAgY29uc3QgbGlua0pzb24gPSB0b0pzb24obGluayk7XG4gICAgICBpZiAoIWxpbmtKc29ucy5oYXMobGlua0pzb24pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxpbmtDb252ZXJ0ZXIobGluayk7XG4gICAgfSwgcHJvY2Vzc09wdGlvbnMpO1xuICB9XG59XG5cbi8qKlxuICogRWRpdHMgdGhlIGJhY2tsaW5rcyBmb3IgYSBmaWxlIG9yIHBhdGguXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSB0byBlZGl0IHRoZSBiYWNrbGlua3MgZm9yLlxuICogQHBhcmFtIGxpbmtDb252ZXJ0ZXIgLSBUaGUgZnVuY3Rpb24gdGhhdCBjb252ZXJ0cyBlYWNoIGxpbmsuXG4gKiBAcGFyYW0gcHJvY2Vzc09wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIGZvciByZXRyeWluZyB0aGUgb3BlcmF0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBiYWNrbGlua3MgaGF2ZSBiZWVuIGVkaXRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVkaXRMaW5rcyhcbiAgYXBwOiBBcHAsXG4gIHBhdGhPckZpbGU6IFBhdGhPckZpbGUsXG4gIGxpbmtDb252ZXJ0ZXI6IChsaW5rOiBSZWZlcmVuY2UpID0+IFByb21pc2FibGU8TWF5YmVSZXR1cm48c3RyaW5nPj4sXG4gIHByb2Nlc3NPcHRpb25zOiBQcm9jZXNzT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgYXBwbHlGaWxlQ2hhbmdlcyhhcHAsIHBhdGhPckZpbGUsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjYWNoZSA9IGF3YWl0IGdldENhY2hlU2FmZShhcHAsIHBhdGhPckZpbGUpO1xuICAgIHJldHVybiBhd2FpdCBnZXRGaWxlQ2hhbmdlcyhjYWNoZSwgaXNDYW52YXNGaWxlKGFwcCwgcGF0aE9yRmlsZSksIGxpbmtDb252ZXJ0ZXIpO1xuICB9LCBwcm9jZXNzT3B0aW9ucyk7XG59XG5cbi8qKlxuICogRWRpdHMgdGhlIGxpbmtzIGluIGEgY29udGVudCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBjb250ZW50IC0gVGhlIGNvbnRlbnQgdG8gZWRpdCB0aGUgbGlua3MgaW4uXG4gKiBAcGFyYW0gbGlua0NvbnZlcnRlciAtIFRoZSBmdW5jdGlvbiB0aGF0IGNvbnZlcnRzIGVhY2ggbGluay5cbiAqIEByZXR1cm5zIFRoZSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHVwZGF0ZWQgY29udGVudC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVkaXRMaW5rc0luQ29udGVudChcbiAgYXBwOiBBcHAsXG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgbGlua0NvbnZlcnRlcjogKGxpbms6IFJlZmVyZW5jZSkgPT4gUHJvbWlzYWJsZTxNYXliZVJldHVybjxzdHJpbmc+PlxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgbmV3Q29udGVudCA9IGF3YWl0IGFwcGx5Q29udGVudENoYW5nZXMoY29udGVudCwgJycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjYWNoZSA9IGF3YWl0IHBhcnNlTWV0YWRhdGEoYXBwLCBjb250ZW50KTtcbiAgICByZXR1cm4gYXdhaXQgZ2V0RmlsZUNoYW5nZXMoY2FjaGUsIGZhbHNlLCBsaW5rQ29udmVydGVyKTtcbiAgfSk7XG5cbiAgaWYgKG5ld0NvbnRlbnQgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byB1cGRhdGUgbGlua3MgaW4gY29udGVudCcpO1xuICB9XG5cbiAgcmV0dXJuIG5ld0NvbnRlbnQ7XG59XG5cbi8qKlxuICogRW5jb2RlcyBhIFVSTC5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gVGhlIFVSTCB0byBlbmNvZGUuXG4gKiBAcmV0dXJucyBUaGUgZW5jb2RlZCBVUkwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmVwbGFjZUFsbCh1cmwsIFNQRUNJQUxfTElOS19TWU1CT0xTX1JFR0VYUCwgKHsgc3Vic3RyaW5nOiBzcGVjaWFsTGlua1N5bWJvbCB9KSA9PiBlbmNvZGVVUklDb21wb25lbnQoc3BlY2lhbExpbmtTeW1ib2wpKTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgZmlsZSBhc3NvY2lhdGVkIHdpdGggYSBsaW5rLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gbGluayAtIFRoZSByZWZlcmVuY2UgY2FjaGUgZm9yIHRoZSBsaW5rLlxuICogQHBhcmFtIHNvdXJjZVBhdGhPckZpbGUgLSBUaGUgc291cmNlIHBhdGggb3IgZmlsZS5cbiAqIEByZXR1cm5zIFRoZSBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGluaywgb3IgbnVsbCBpZiBub3QgZm91bmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0TGlua0ZpbGUoYXBwOiBBcHAsIGxpbms6IFJlZmVyZW5jZSwgc291cmNlUGF0aE9yRmlsZTogUGF0aE9yRmlsZSk6IG51bGwgfCBURmlsZSB7XG4gIGNvbnN0IHsgbGlua1BhdGggfSA9IHNwbGl0U3VicGF0aChsaW5rLmxpbmspO1xuICByZXR1cm4gYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0Rmlyc3RMaW5rcGF0aERlc3QobGlua1BhdGgsIGdldFBhdGgoYXBwLCBzb3VyY2VQYXRoT3JGaWxlKSk7XG59XG5cbi8qKlxuICogRml4ZXMgdGhlIGZyb250bWF0dGVyIG1hcmtkb3duIGxpbmtzIGluIHRoZSBwcm92aWRlZCBtZXRhZGF0YSBjYWNoZS5cbiAqXG4gKiBAcGFyYW0gY2FjaGUgLSBUaGUgbWV0YWRhdGEgY2FjaGUgdG8gZml4IHRoZSBmcm9udG1hdHRlciBtYXJrZG93biBsaW5rcyBpbi5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGZyb250bWF0dGVyIG1hcmtkb3duIGxpbmtzIHdlcmUgZml4ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaXhGcm9udG1hdHRlck1hcmtkb3duTGlua3MoY2FjaGU6IENhY2hlZE1ldGFkYXRhKTogYm9vbGVhbiB7XG4gIHJldHVybiBfZml4RnJvbnRtYXR0ZXJNYXJrZG93bkxpbmtzKGNhY2hlLmZyb250bWF0dGVyLCAnJywgY2FjaGUpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIG1hcmtkb3duIGxpbmsgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHBhcmFtZXRlcnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgZ2VuZXJhdGluZyB0aGUgbWFya2Rvd24gbGluay5cbiAqIEByZXR1cm5zIFRoZSBnZW5lcmF0ZWQgbWFya2Rvd24gbGluay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlTWFya2Rvd25MaW5rKG9wdGlvbnM6IEdlbmVyYXRlTWFya2Rvd25MaW5rT3B0aW9ucyk6IHN0cmluZyB7XG4gIGNvbnN0IHsgYXBwIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IGNvbmZpZ3VyYWJsZURlZmF1bHRPcHRpb25zRm4gPSAoYXBwLmZpbGVNYW5hZ2VyLmdlbmVyYXRlTWFya2Rvd25MaW5rIGFzIFBhcnRpYWw8R2VuZXJhdGVNYXJrZG93bkxpbmtEZWZhdWx0T3B0aW9uc1dyYXBwZXI+KS5kZWZhdWx0T3B0aW9uc0ZuXG4gICAgPz8gKCgpOiBQYXJ0aWFsPEdlbmVyYXRlTWFya2Rvd25MaW5rT3B0aW9ucz4gPT4gKHt9KSk7XG4gIGNvbnN0IGNvbmZpZ3VyYWJsZURlZmF1bHRPcHRpb25zID0gY29uZmlndXJhYmxlRGVmYXVsdE9wdGlvbnNGbigpO1xuXG4gIGNvbnN0IERFRkFVTFRfT1BUSU9OUzogUGFydGlhbDxHZW5lcmF0ZU1hcmtkb3duTGlua09wdGlvbnM+ID0ge1xuICAgIGlzRW1wdHlFbWJlZEFsaWFzQWxsb3dlZDogdHJ1ZVxuICB9O1xuXG4gIG9wdGlvbnMgPSB7IC4uLkRFRkFVTFRfT1BUSU9OUywgLi4uY29uZmlndXJhYmxlRGVmYXVsdE9wdGlvbnMsIC4uLm9wdGlvbnMgfTtcblxuICBjb25zdCB0YXJnZXRGaWxlID0gZ2V0RmlsZShhcHAsIG9wdGlvbnMudGFyZ2V0UGF0aE9yRmlsZSwgb3B0aW9ucy5pc05vbkV4aXN0aW5nRmlsZUFsbG93ZWQpO1xuXG4gIHJldHVybiB0ZW1wUmVnaXN0ZXJGaWxlQW5kUnVuKGFwcCwgdGFyZ2V0RmlsZSwgKCkgPT4gZ2VuZXJhdGVNYXJrZG93bkxpbmtJbXBsKG9wdGlvbnMpKTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYSBsaW5rIGludG8gaXRzIGNvbXBvbmVudHMuXG4gKlxuICogQHBhcmFtIHN0ciAtIFRoZSBsaW5rIHRvIHBhcnNlLlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBsaW5rLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VMaW5rKHN0cjogc3RyaW5nKTogbnVsbCB8IFBhcnNlTGlua1Jlc3VsdCB7XG4gIGNvbnN0IHJlc3VsdCA9IHBhcnNlTGlua1VybChzdHIpO1xuICBpZiAocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGNvbnN0IEVNQkVEX1BSRUZJWCA9ICchJztcblxuICBjb25zdCBpc0VtYmVkID0gc3RyLnN0YXJ0c1dpdGgoRU1CRURfUFJFRklYKTtcbiAgaWYgKGlzRW1iZWQpIHtcbiAgICBzdHIgPSB0cmltU3RhcnQoc3RyLCBFTUJFRF9QUkVGSVgpO1xuICB9XG4gIGNvbnN0IHByb2Nlc3NvciA9IHJlbWFyaygpLnVzZShyZW1hcmtQYXJzZSkudXNlKHdpa2lMaW5rUGx1Z2luLCB7IGFsaWFzRGl2aWRlcjogV0lLSUxJTktfRElWSURFUiB9KTtcbiAgY29uc3Qgcm9vdCA9IHByb2Nlc3Nvci5wYXJzZShzdHIpO1xuXG4gIGlmIChyb290LmNoaWxkcmVuLmxlbmd0aCAhPT0gMSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgcGFyYWdyYXBoID0gcm9vdC5jaGlsZHJlblswXTtcblxuICBpZiAocGFyYWdyYXBoPy50eXBlICE9PSAncGFyYWdyYXBoJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHBhcmFncmFwaC5jaGlsZHJlbi5sZW5ndGggIT09IDEpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG5vZGUgPSBwYXJhZ3JhcGguY2hpbGRyZW5bMF07XG5cbiAgaWYgKG5vZGU/LnBvc2l0aW9uPy5zdGFydC5vZmZzZXQgIT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChub2RlLnBvc2l0aW9uLmVuZC5vZmZzZXQgIT09IHN0ci5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN3aXRjaCAobm9kZS50eXBlIGFzIHN0cmluZykge1xuICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgcmV0dXJuIHBhcnNlTGlua05vZGUobm9kZSBhcyBMaW5rLCBzdHIsIGlzRW1iZWQpO1xuICAgIGNhc2UgJ3dpa2lMaW5rJzpcbiAgICAgIHJldHVybiBwYXJzZVdpa2lsaW5rTm9kZShub2RlIGFzIHVua25vd24gYXMgV2lraUxpbmtOb2RlLCBzdHIsIGlzRW1iZWQpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGFsaWFzIG9mIGEgbGluayBzaG91bGQgYmUgcmVzZXQuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgZGV0ZXJtaW5pbmcgaWYgdGhlIGFsaWFzIHNob3VsZCBiZSByZXNldC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFsaWFzIHNob3VsZCBiZSByZXNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZFJlc2V0QWxpYXMob3B0aW9uczogU2hvdWxkUmVzZXRBbGlhc09wdGlvbnMpOiBib29sZWFuIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBkaXNwbGF5VGV4dCxcbiAgICBpc1dpa2lsaW5rLFxuICAgIG5ld1NvdXJjZVBhdGhPckZpbGUsXG4gICAgb2xkU291cmNlUGF0aE9yRmlsZSxcbiAgICBvbGRUYXJnZXRQYXRoLFxuICAgIHRhcmdldFBhdGhPckZpbGVcbiAgfSA9IG9wdGlvbnM7XG4gIGlmIChpc1dpa2lsaW5rID09PSBmYWxzZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghZGlzcGxheVRleHQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IHRhcmdldEZpbGUgPSBnZXRGaWxlKGFwcCwgdGFyZ2V0UGF0aE9yRmlsZSwgdHJ1ZSk7XG4gIGNvbnN0IG5ld1NvdXJjZVBhdGggPSBnZXRQYXRoKGFwcCwgbmV3U291cmNlUGF0aE9yRmlsZSk7XG4gIGNvbnN0IG9sZFNvdXJjZVBhdGggPSBnZXRQYXRoKGFwcCwgb2xkU291cmNlUGF0aE9yRmlsZSA/PyBuZXdTb3VyY2VQYXRoT3JGaWxlKTtcbiAgY29uc3QgbmV3U291cmNlRm9sZGVyID0gZGlybmFtZShuZXdTb3VyY2VQYXRoKTtcbiAgY29uc3Qgb2xkU291cmNlRm9sZGVyID0gZGlybmFtZShvbGRTb3VyY2VQYXRoKTtcbiAgY29uc3QgYWxpYXNlc1RvUmVzZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBmb3IgKGNvbnN0IHBhdGhPckZpbGUgb2YgW3RhcmdldEZpbGUucGF0aCwgb2xkVGFyZ2V0UGF0aF0pIHtcbiAgICBpZiAoIXBhdGhPckZpbGUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHBhdGggPSBnZXRQYXRoKGFwcCwgcGF0aE9yRmlsZSk7XG4gICAgYWxpYXNlc1RvUmVzZXQuYWRkKHBhdGgpO1xuICAgIGFsaWFzZXNUb1Jlc2V0LmFkZChiYXNlbmFtZShwYXRoKSk7XG4gICAgYWxpYXNlc1RvUmVzZXQuYWRkKHJlbGF0aXZlKG5ld1NvdXJjZUZvbGRlciwgcGF0aCkpO1xuICAgIGFsaWFzZXNUb1Jlc2V0LmFkZChyZWxhdGl2ZShvbGRTb3VyY2VGb2xkZXIsIHBhdGgpKTtcbiAgfVxuXG4gIGZvciAoY29uc3Qgc291cmNlUGF0aCBvZiBbb2xkU291cmNlUGF0aCwgbmV3U291cmNlUGF0aF0pIHtcbiAgICBhbGlhc2VzVG9SZXNldC5hZGQoYXBwLm1ldGFkYXRhQ2FjaGUuZmlsZVRvTGlua3RleHQodGFyZ2V0RmlsZSwgc291cmNlUGF0aCwgZmFsc2UpKTtcbiAgfVxuXG4gIGNvbnN0IGNsZWFuRGlzcGxheVRleHQgPSByZXBsYWNlQWxsKG5vcm1hbGl6ZVBhdGgoZGlzcGxheVRleHQuc3BsaXQoJyA+ICcpWzBdID8/ICcnKSwgL15cXC5cXC8vZywgJycpLnRvTG93ZXJDYXNlKCk7XG5cbiAgZm9yIChjb25zdCBhbGlhcyBvZiBhbGlhc2VzVG9SZXNldCkge1xuICAgIGlmIChhbGlhcy50b0xvd2VyQ2FzZSgpID09PSBjbGVhbkRpc3BsYXlUZXh0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBmb2xkZXIgPSBkaXJuYW1lKGFsaWFzKTtcbiAgICBjb25zdCBiYXNlID0gYmFzZW5hbWUoYWxpYXMsIGV4dG5hbWUoYWxpYXMpKTtcbiAgICBpZiAoam9pbihmb2xkZXIsIGJhc2UpLnRvTG93ZXJDYXNlKCkgPT09IGNsZWFuRGlzcGxheVRleHQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBTcGxpdHMgYSBsaW5rIGludG8gaXRzIGxpbmsgcGF0aCBhbmQgc3VicGF0aC5cbiAqXG4gKiBAcGFyYW0gbGluayAtIFRoZSBsaW5rIHRvIHNwbGl0LlxuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGxpbmsgcGF0aCBhbmQgc3VicGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0U3VicGF0aChsaW5rOiBzdHJpbmcpOiBTcGxpdFN1YnBhdGhSZXN1bHQge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZUxpbmt0ZXh0KG5vcm1hbGl6ZShsaW5rKSk7XG4gIHJldHVybiB7XG4gICAgbGlua1BhdGg6IHBhcnNlZC5wYXRoLFxuICAgIHN1YnBhdGg6IHBhcnNlZC5zdWJwYXRoXG4gIH07XG59XG5cbi8qKlxuICogVGVzdHMgd2hldGhlciBhIGxpbmsgdXNlcyBhbmdsZSBicmFja2V0cywgcG9zc2libHkgZW1iZWQ6XG4gKiBgW3RpdGxlXSg8bGluaz4pYCwgYCFbdGl0bGVdKDxsaW5rPilgLlxuICpcbiAqIEBwYXJhbSBsaW5rIC0gTGluayB0byB0ZXN0XG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBsaW5rIHVzZXMgYW5nbGUgYnJhY2tldHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRlc3RBbmdsZUJyYWNrZXRzKGxpbms6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBwYXJzZUxpbmtSZXN1bHQgPSBwYXJzZUxpbmsobGluayk7XG4gIHJldHVybiBwYXJzZUxpbmtSZXN1bHQ/Lmhhc0FuZ2xlQnJhY2tldHMgPz8gZmFsc2U7XG59XG5cbi8qKlxuICogVGVzdHMgd2hldGhlciBhIGxpbmsgaXMgYW4gZW1iZWQgbGluazpcbiAqIGAhW1tsaW5rXV1gLCBgIVt0aXRsZV0obGluaylgLlxuICpcbiAqIEBwYXJhbSBsaW5rIC0gTGluayB0byB0ZXN0XG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBsaW5rIGlzIGFuIGVtYmVkIGxpbmtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRlc3RFbWJlZChsaW5rOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgcGFyc2VMaW5rUmVzdWx0ID0gcGFyc2VMaW5rKGxpbmspO1xuICByZXR1cm4gcGFyc2VMaW5rUmVzdWx0Py5pc0VtYmVkID8/IGZhbHNlO1xufVxuXG4vKipcbiAqIFRlc3RzIHdoZXRoZXIgYSBsaW5rIGhhcyBhIGxlYWRpbmcgZG90LCBwb3NzaWJseSBlbWJlZDpcbiAqIGBbWy4vbGlua11dYCwgYFt0aXRsZV0oLi9saW5rKWAsIGBbdGl0bGVdKDwuL2xpbms+KWAsXG4gKiBgIVtbLi9saW5rXV1gLCBgIVt0aXRsZV0oLi9saW5rKWAsIGAhW3RpdGxlXSg8Li9saW5rPilgLlxuICpcbiAqIEBwYXJhbSBsaW5rIC0gTGluayB0byB0ZXN0XG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBsaW5rIGhhcyBhIGxlYWRpbmcgZG90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0TGVhZGluZ0RvdChsaW5rOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgcGFyc2VMaW5rUmVzdWx0ID0gcGFyc2VMaW5rKGxpbmspO1xuICByZXR1cm4gcGFyc2VMaW5rUmVzdWx0Py51cmwuc3RhcnRzV2l0aCgnLi8nKSA/PyBmYWxzZTtcbn1cblxuLyoqXG4gKiBUZXN0cyB3aGV0aGVyIGEgbGluayBpcyBhIHdpa2lsaW5rLCBwb3NzaWJseSBlbWJlZDpcbiAqIGBbW2xpbmtdXWAsIGAhW1tsaW5rXV1gLlxuICpcbiAqIEBwYXJhbSBsaW5rIC0gTGluayB0byB0ZXN0XG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBsaW5rIGlzIGEgd2lraWxpbmtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRlc3RXaWtpbGluayhsaW5rOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgcGFyc2VMaW5rUmVzdWx0ID0gcGFyc2VMaW5rKGxpbmspO1xuICByZXR1cm4gcGFyc2VMaW5rUmVzdWx0Py5pc1dpa2lsaW5rID8/IGZhbHNlO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgYSBsaW5rIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHVwZGF0aW5nIHRoZSBsaW5rLlxuICogQHJldHVybnMgVGhlIHVwZGF0ZWQgbGluay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUxpbmsob3B0aW9uczogVXBkYXRlTGlua09wdGlvbnMpOiBzdHJpbmcge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGxpbmssXG4gICAgbmV3U291cmNlUGF0aE9yRmlsZSxcbiAgICBuZXdUYXJnZXRQYXRoT3JGaWxlLFxuICAgIG9sZFNvdXJjZVBhdGhPckZpbGUsXG4gICAgb2xkVGFyZ2V0UGF0aE9yRmlsZSxcbiAgICBzaG91bGRGb3JjZU1hcmtkb3duTGlua3MsXG4gICAgc2hvdWxkVXBkYXRlRmlsZW5hbWVBbGlhc1xuICB9ID0gb3B0aW9ucztcbiAgaWYgKCFuZXdUYXJnZXRQYXRoT3JGaWxlKSB7XG4gICAgcmV0dXJuIGxpbmsub3JpZ2luYWw7XG4gIH1cbiAgY29uc3QgdGFyZ2V0RmlsZSA9IGdldEZpbGUoYXBwLCBuZXdUYXJnZXRQYXRoT3JGaWxlLCB0cnVlKTtcbiAgY29uc3Qgb2xkVGFyZ2V0UGF0aCA9IGdldFBhdGgoYXBwLCBvbGRUYXJnZXRQYXRoT3JGaWxlID8/IG5ld1RhcmdldFBhdGhPckZpbGUpO1xuICBjb25zdCBpc1dpa2lsaW5rID0gdGVzdFdpa2lsaW5rKGxpbmsub3JpZ2luYWwpICYmIHNob3VsZEZvcmNlTWFya2Rvd25MaW5rcyAhPT0gdHJ1ZTtcbiAgY29uc3QgeyBzdWJwYXRoIH0gPSBzcGxpdFN1YnBhdGgobGluay5saW5rKTtcbiAgbGV0IHNob3VsZEtlZXBBbGlhcyA9ICFzaG91bGRVcGRhdGVGaWxlbmFtZUFsaWFzO1xuXG4gIGlmIChpc0NhbnZhc0ZpbGUoYXBwLCBuZXdTb3VyY2VQYXRoT3JGaWxlKSkge1xuICAgIGlmIChpc0NhbnZhc0ZpbGVOb2RlUmVmZXJlbmNlKGxpbmspKSB7XG4gICAgICByZXR1cm4gdGFyZ2V0RmlsZS5wYXRoICsgc3VicGF0aDtcbiAgICB9XG4gIH1cblxuICBsZXQgYWxpYXM6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBpZiAoaXNXaWtpbGluaykge1xuICAgIGNvbnN0IHBhcnNlTGlua1Jlc3VsdCA9IHBhcnNlTGluayhsaW5rLm9yaWdpbmFsKTtcbiAgICBpZiAocGFyc2VMaW5rUmVzdWx0Py5hbGlhcykge1xuICAgICAgYWxpYXMgPSBwYXJzZUxpbmtSZXN1bHQuYWxpYXM7XG4gICAgICBzaG91bGRLZWVwQWxpYXMgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGFsaWFzID8/PSBzaG91bGRSZXNldEFsaWFzKG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxTaG91bGRSZXNldEFsaWFzT3B0aW9ucz4oe1xuICAgICAgYXBwLFxuICAgICAgZGlzcGxheVRleHQ6IGxpbmsuZGlzcGxheVRleHQsXG4gICAgICBpc1dpa2lsaW5rLFxuICAgICAgbmV3U291cmNlUGF0aE9yRmlsZSxcbiAgICAgIG9sZFNvdXJjZVBhdGhPckZpbGUsXG4gICAgICBvbGRUYXJnZXRQYXRoLFxuICAgICAgdGFyZ2V0UGF0aE9yRmlsZTogdGFyZ2V0RmlsZVxuICAgIH0pKVxuICAgID8gdW5kZWZpbmVkXG4gICAgOiBsaW5rLmRpc3BsYXlUZXh0O1xuXG4gIGlmICghc2hvdWxkS2VlcEFsaWFzKSB7XG4gICAgaWYgKGFsaWFzID09PSBiYXNlbmFtZShvbGRUYXJnZXRQYXRoLCBleHRuYW1lKG9sZFRhcmdldFBhdGgpKSkge1xuICAgICAgYWxpYXMgPSB0YXJnZXRGaWxlLmJhc2VuYW1lO1xuICAgIH0gZWxzZSBpZiAoYWxpYXMgPT09IGJhc2VuYW1lKG9sZFRhcmdldFBhdGgpKSB7XG4gICAgICBhbGlhcyA9IHRhcmdldEZpbGUubmFtZTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBuZXdMaW5rID0gZ2VuZXJhdGVNYXJrZG93bkxpbmsobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPEdlbmVyYXRlTWFya2Rvd25MaW5rT3B0aW9ucz4oe1xuICAgIGFsaWFzLFxuICAgIGFwcCxcbiAgICBpc1dpa2lsaW5rOiBzaG91bGRGb3JjZU1hcmtkb3duTGlua3MgPyBmYWxzZSA6IHVuZGVmaW5lZCxcbiAgICBvcmlnaW5hbExpbms6IGxpbmsub3JpZ2luYWwsXG4gICAgc291cmNlUGF0aE9yRmlsZTogbmV3U291cmNlUGF0aE9yRmlsZSxcbiAgICBzdWJwYXRoLFxuICAgIHRhcmdldFBhdGhPckZpbGU6IHRhcmdldEZpbGVcbiAgfSkpO1xuICByZXR1cm4gbmV3TGluaztcbn1cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBsaW5rcyBpbiBhIGNvbnRlbnQgc3RyaW5nIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHVwZGF0aW5nIHRoZSBsaW5rcy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGNvbnRlbnQgd2l0aCB1cGRhdGVkIGxpbmtzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlTGlua3NJbkNvbnRlbnQob3B0aW9uczogVXBkYXRlTGlua3NJbkNvbnRlbnRPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBjb250ZW50LFxuICAgIG5ld1NvdXJjZVBhdGhPckZpbGUsXG4gICAgb2xkU291cmNlUGF0aE9yRmlsZSxcbiAgICBzaG91bGRGb3JjZU1hcmtkb3duTGlua3MsXG4gICAgc2hvdWxkVXBkYXRlRW1iZWRPbmx5TGlua3MsXG4gICAgc2hvdWxkVXBkYXRlRmlsZW5hbWVBbGlhc1xuICB9ID0gb3B0aW9ucztcblxuICByZXR1cm4gYXdhaXQgZWRpdExpbmtzSW5Db250ZW50KGFwcCwgY29udGVudCwgKGxpbmspID0+IHtcbiAgICBjb25zdCBpc0VtYmVkTGluayA9IHRlc3RFbWJlZChsaW5rLm9yaWdpbmFsKTtcbiAgICBpZiAoc2hvdWxkVXBkYXRlRW1iZWRPbmx5TGlua3MgIT09IHVuZGVmaW5lZCAmJiBzaG91bGRVcGRhdGVFbWJlZE9ubHlMaW5rcyAhPT0gaXNFbWJlZExpbmspIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnZlcnRMaW5rKG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxDb252ZXJ0TGlua09wdGlvbnM+KHtcbiAgICAgIGFwcCxcbiAgICAgIGxpbmssXG4gICAgICBuZXdTb3VyY2VQYXRoT3JGaWxlLFxuICAgICAgb2xkU291cmNlUGF0aE9yRmlsZSxcbiAgICAgIHNob3VsZEZvcmNlTWFya2Rvd25MaW5rcyxcbiAgICAgIHNob3VsZFVwZGF0ZUZpbGVuYW1lQWxpYXNcbiAgICB9KSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGxpbmtzIGluIGEgZmlsZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcGFyYW1ldGVycy5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB1cGRhdGluZyB0aGUgbGlua3MuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGxpbmtzIGFyZSB1cGRhdGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlTGlua3NJbkZpbGUob3B0aW9uczogVXBkYXRlTGlua3NJbkZpbGVPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgbmV3U291cmNlUGF0aE9yRmlsZSxcbiAgICBvbGRTb3VyY2VQYXRoT3JGaWxlLFxuICAgIHNob3VsZEZvcmNlTWFya2Rvd25MaW5rcyxcbiAgICBzaG91bGRVcGRhdGVFbWJlZE9ubHlMaW5rcyxcbiAgICBzaG91bGRVcGRhdGVGaWxlbmFtZUFsaWFzXG4gIH0gPSBvcHRpb25zO1xuXG4gIGlmIChpc0NhbnZhc0ZpbGUoYXBwLCBuZXdTb3VyY2VQYXRoT3JGaWxlKSAmJiAhYXBwLmludGVybmFsUGx1Z2lucy5nZXRFbmFibGVkUGx1Z2luQnlJZChJbnRlcm5hbFBsdWdpbk5hbWUuQ2FudmFzKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IGVkaXRMaW5rcyhhcHAsIG5ld1NvdXJjZVBhdGhPckZpbGUsIChsaW5rKSA9PiB7XG4gICAgY29uc3QgaXNFbWJlZExpbmsgPSB0ZXN0RW1iZWQobGluay5vcmlnaW5hbCk7XG4gICAgaWYgKHNob3VsZFVwZGF0ZUVtYmVkT25seUxpbmtzICE9PSB1bmRlZmluZWQgJiYgc2hvdWxkVXBkYXRlRW1iZWRPbmx5TGlua3MgIT09IGlzRW1iZWRMaW5rKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiBjb252ZXJ0TGluayhub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8Q29udmVydExpbmtPcHRpb25zPih7XG4gICAgICBhcHAsXG4gICAgICBsaW5rLFxuICAgICAgbmV3U291cmNlUGF0aE9yRmlsZSxcbiAgICAgIG9sZFNvdXJjZVBhdGhPckZpbGUsXG4gICAgICBzaG91bGRGb3JjZU1hcmtkb3duTGlua3MsXG4gICAgICBzaG91bGRVcGRhdGVGaWxlbmFtZUFsaWFzXG4gICAgfSkpO1xuICB9LCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gX2ZpeEZyb250bWF0dGVyTWFya2Rvd25MaW5rcyh2YWx1ZTogdW5rbm93biwga2V5OiBzdHJpbmcsIGNhY2hlOiBDYWNoZWRNZXRhZGF0YSk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IHBhcnNlTGlua1Jlc3VsdCA9IHBhcnNlTGluayh2YWx1ZSk7XG4gICAgaWYgKCFwYXJzZUxpbmtSZXN1bHQgfHwgcGFyc2VMaW5rUmVzdWx0LmlzV2lraWxpbmsgfHwgcGFyc2VMaW5rUmVzdWx0LmlzRXh0ZXJuYWwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjYWNoZS5mcm9udG1hdHRlckxpbmtzID8/PSBbXTtcbiAgICBsZXQgbGluayA9IGNhY2hlLmZyb250bWF0dGVyTGlua3MuZmluZCgoZnJvbnRtYXR0ZXJMaW5rKSA9PiBmcm9udG1hdHRlckxpbmsua2V5ID09PSBrZXkpO1xuXG4gICAgaWYgKCFsaW5rKSB7XG4gICAgICBsaW5rID0ge1xuICAgICAgICBrZXksXG4gICAgICAgIGxpbms6ICcnLFxuICAgICAgICBvcmlnaW5hbDogJydcbiAgICAgIH07XG4gICAgICBjYWNoZS5mcm9udG1hdHRlckxpbmtzLnB1c2gobGluayk7XG4gICAgfVxuXG4gICAgbGluay5saW5rID0gcGFyc2VMaW5rUmVzdWx0LnVybDtcbiAgICBsaW5rLm9yaWdpbmFsID0gdmFsdWU7XG4gICAgaWYgKHBhcnNlTGlua1Jlc3VsdC5hbGlhcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaW5rLmRpc3BsYXlUZXh0ID0gcGFyc2VMaW5rUmVzdWx0LmFsaWFzO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBsZXQgaGFzRnJvbnRtYXR0ZXJMaW5rcyA9IGZhbHNlO1xuXG4gIGZvciAoY29uc3QgW2NoaWxkS2V5LCBjaGlsZFZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSBhcyBHZW5lcmljT2JqZWN0KSkge1xuICAgIGNvbnN0IGhhc0NoaWxkRnJvbnRtYXR0ZXJMaW5rcyA9IF9maXhGcm9udG1hdHRlck1hcmtkb3duTGlua3MoY2hpbGRWYWx1ZSwga2V5ID8gYCR7a2V5fS4ke2NoaWxkS2V5fWAgOiBjaGlsZEtleSwgY2FjaGUpO1xuICAgIGhhc0Zyb250bWF0dGVyTGlua3MgfHw9IGhhc0NoaWxkRnJvbnRtYXR0ZXJMaW5rcztcbiAgfVxuXG4gIHJldHVybiBoYXNGcm9udG1hdHRlckxpbmtzO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUxpbmtUZXh0KGFwcDogQXBwLCB0YXJnZXRGaWxlOiBURmlsZSwgc291cmNlUGF0aDogc3RyaW5nLCBzdWJwYXRoOiBzdHJpbmcsIGNvbmZpZzogTGlua0NvbmZpZyk6IHN0cmluZyB7XG4gIGxldCBsaW5rVGV4dDogc3RyaW5nO1xuXG4gIGlmICh0YXJnZXRGaWxlLnBhdGggPT09IHNvdXJjZVBhdGggJiYgc3VicGF0aCkge1xuICAgIGxpbmtUZXh0ID0gc3VicGF0aDtcbiAgfSBlbHNlIGlmIChjb25maWcuc2hvdWxkRm9yY2VSZWxhdGl2ZVBhdGgpIHtcbiAgICBsaW5rVGV4dCA9IHJlbGF0aXZlKGRpcm5hbWUoc291cmNlUGF0aCksIGNvbmZpZy5pc1dpa2lsaW5rID8gdHJpbU1hcmtkb3duRXh0ZW5zaW9uKGFwcCwgdGFyZ2V0RmlsZSkgOiB0YXJnZXRGaWxlLnBhdGgpICsgc3VicGF0aDtcbiAgfSBlbHNlIHtcbiAgICBsaW5rVGV4dCA9IGFwcC5tZXRhZGF0YUNhY2hlLmZpbGVUb0xpbmt0ZXh0KHRhcmdldEZpbGUsIHNvdXJjZVBhdGgsIGNvbmZpZy5pc1dpa2lsaW5rKSArIHN1YnBhdGg7XG4gIH1cblxuICBpZiAoY29uZmlnLnNob3VsZEZvcmNlUmVsYXRpdmVQYXRoICYmIGNvbmZpZy5zaG91bGRVc2VMZWFkaW5nRG90ICYmICFsaW5rVGV4dC5zdGFydHNXaXRoKCcuJykgJiYgIWxpbmtUZXh0LnN0YXJ0c1dpdGgoJyMnKSkge1xuICAgIGxpbmtUZXh0ID0gYC4vJHtsaW5rVGV4dH1gO1xuICB9XG5cbiAgcmV0dXJuIGxpbmtUZXh0O1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZU1hcmtkb3duTGlua0ltcGwob3B0aW9uczogR2VuZXJhdGVNYXJrZG93bkxpbmtPcHRpb25zKTogc3RyaW5nIHtcbiAgY29uc3QgeyBhcHAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHRhcmdldEZpbGUgPSBnZXRGaWxlKGFwcCwgb3B0aW9ucy50YXJnZXRQYXRoT3JGaWxlLCBvcHRpb25zLmlzTm9uRXhpc3RpbmdGaWxlQWxsb3dlZCk7XG4gIGNvbnN0IHNvdXJjZVBhdGggPSBnZXRQYXRoKGFwcCwgb3B0aW9ucy5zb3VyY2VQYXRoT3JGaWxlKTtcbiAgY29uc3Qgc3VicGF0aCA9IG9wdGlvbnMuc3VicGF0aCA/PyAnJztcblxuICBjb25zdCBsaW5rQ29uZmlnID0gZ2V0TGlua0NvbmZpZyhvcHRpb25zLCB0YXJnZXRGaWxlKTtcbiAgY29uc3QgbGlua1RleHQgPSBnZW5lcmF0ZUxpbmtUZXh0KGFwcCwgdGFyZ2V0RmlsZSwgc291cmNlUGF0aCwgc3VicGF0aCwgbGlua0NvbmZpZyk7XG5cbiAgcmV0dXJuIGxpbmtDb25maWcuaXNXaWtpbGlua1xuICAgID8gZ2VuZXJhdGVXaWtpTGluayhsaW5rVGV4dCwgb3B0aW9ucy5hbGlhcywgbGlua0NvbmZpZy5pc0VtYmVkKVxuICAgIDogZ2VuZXJhdGVNYXJrZG93blN0eWxlTGluayhsaW5rVGV4dCwgdGFyZ2V0RmlsZSwgb3B0aW9ucywgbGlua0NvbmZpZyk7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlTWFya2Rvd25TdHlsZUxpbmsobGlua1RleHQ6IHN0cmluZywgdGFyZ2V0RmlsZTogVEZpbGUsIG9wdGlvbnM6IEdlbmVyYXRlTWFya2Rvd25MaW5rT3B0aW9ucywgY29uZmlnOiBMaW5rQ29uZmlnKTogc3RyaW5nIHtcbiAgY29uc3QgeyBhcHAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGVtYmVkUHJlZml4ID0gY29uZmlnLmlzRW1iZWQgPyAnIScgOiAnJztcblxuICBjb25zdCBwcm9jZXNzZWRMaW5rVGV4dCA9IGNvbmZpZy5zaG91bGRVc2VBbmdsZUJyYWNrZXRzXG4gICAgPyBgPCR7bGlua1RleHR9PmBcbiAgICA6IGVuY29kZVVybChsaW5rVGV4dCk7XG5cbiAgbGV0IGFsaWFzID0gb3B0aW9ucy5hbGlhcyA/PyAnJztcbiAgaWYgKCFhbGlhcyAmJiAoIWNvbmZpZy5pc0VtYmVkIHx8ICFvcHRpb25zLmlzRW1wdHlFbWJlZEFsaWFzQWxsb3dlZCkpIHtcbiAgICBhbGlhcyA9ICFvcHRpb25zLnNob3VsZEluY2x1ZGVBdHRhY2htZW50RXh0ZW5zaW9uVG9FbWJlZEFsaWFzIHx8IGlzTWFya2Rvd25GaWxlKGFwcCwgdGFyZ2V0RmlsZSlcbiAgICAgID8gdGFyZ2V0RmlsZS5iYXNlbmFtZVxuICAgICAgOiB0YXJnZXRGaWxlLm5hbWU7XG4gIH1cblxuICBjb25zdCBlc2NhcGVkQWxpYXMgPSByZXBsYWNlQWxsKGFsaWFzLCBTUEVDSUFMX01BUktET1dOX0xJTktfU1lNQk9MU19SRUdFWCwgJ1xcXFwkJicpO1xuICByZXR1cm4gYCR7ZW1iZWRQcmVmaXh9WyR7ZXNjYXBlZEFsaWFzfV0oJHtwcm9jZXNzZWRMaW5rVGV4dH0pYDtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVXaWtpTGluayhsaW5rVGV4dDogc3RyaW5nLCBhbGlhczogc3RyaW5nIHwgdW5kZWZpbmVkLCBpc0VtYmVkOiBib29sZWFuKTogc3RyaW5nIHtcbiAgY29uc3QgZW1iZWRQcmVmaXggPSBpc0VtYmVkID8gJyEnIDogJyc7XG4gIGNvbnN0IG5vcm1hbGl6ZWRBbGlhcyA9IGFsaWFzID8/ICcnO1xuXG4gIGlmIChub3JtYWxpemVkQWxpYXMgJiYgbm9ybWFsaXplZEFsaWFzLnRvTG93ZXJDYXNlKCkgPT09IGxpbmtUZXh0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICByZXR1cm4gYCR7ZW1iZWRQcmVmaXh9W1ske25vcm1hbGl6ZWRBbGlhc31dXWA7XG4gIH1cblxuICBjb25zdCBhbGlhc1BhcnQgPSBub3JtYWxpemVkQWxpYXMgPyBgfCR7bm9ybWFsaXplZEFsaWFzfWAgOiAnJztcbiAgcmV0dXJuIGAke2VtYmVkUHJlZml4fVtbJHtsaW5rVGV4dH0ke2FsaWFzUGFydH1dXWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEZpbGVDaGFuZ2VzKFxuICBjYWNoZTogQ2FjaGVkTWV0YWRhdGEgfCBudWxsLFxuICBpc0NhbnZhc0ZpbGVDYWNoZTogYm9vbGVhbixcbiAgbGlua0NvbnZlcnRlcjogKGxpbms6IFJlZmVyZW5jZSkgPT4gUHJvbWlzYWJsZTxNYXliZVJldHVybjxzdHJpbmc+PlxuKTogUHJvbWlzZTxGaWxlQ2hhbmdlW10+IHtcbiAgaWYgKCFjYWNoZSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGNoYW5nZXM6IEZpbGVDaGFuZ2VbXSA9IFtdO1xuXG4gIGNvbnN0IHRhYmxlUG9zaXRpb25zOiBUYWJsZVBvc2l0aW9uW10gPSAoY2FjaGUuc2VjdGlvbnMgPz8gW10pLmZpbHRlcigoc2VjdGlvbikgPT4gc2VjdGlvbi50eXBlID09PSAndGFibGUnKS5tYXAoKHNlY3Rpb24pID0+ICh7XG4gICAgZW5kOiBzZWN0aW9uLnBvc2l0aW9uLmVuZC5vZmZzZXQsXG4gICAgc3RhcnQ6IHNlY3Rpb24ucG9zaXRpb24uc3RhcnQub2Zmc2V0XG4gIH0pKTtcblxuICBmb3IgKGNvbnN0IGxpbmsgb2YgZ2V0QWxsTGlua3MoY2FjaGUpKSB7XG4gICAgY29uc3QgbmV3Q29udGVudCA9IGF3YWl0IGxpbmtDb252ZXJ0ZXIobGluayk7XG4gICAgaWYgKG5ld0NvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZUNoYW5nZSA9IHJlZmVyZW5jZVRvRmlsZUNoYW5nZShsaW5rLCBuZXdDb250ZW50KTtcblxuICAgIGlmIChpc0NhbnZhc0ZpbGVDYWNoZSkge1xuICAgICAgaWYgKGlzQ2FudmFzQ2hhbmdlKGZpbGVDaGFuZ2UpKSB7XG4gICAgICAgIGNoYW5nZXMucHVzaChmaWxlQ2hhbmdlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybignVW5zdXBwb3J0ZWQgZmlsZSBjaGFuZ2UnLCBmaWxlQ2hhbmdlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNob3VsZEVzY2FwZVdpa2lsaW5rRGl2aWRlcihmaWxlQ2hhbmdlLCB0YWJsZVBvc2l0aW9ucykpIHtcbiAgICAgICAgZmlsZUNoYW5nZS5uZXdDb250ZW50ID0gZmlsZUNoYW5nZS5uZXdDb250ZW50LnJlcGxhY2VBbGwoVU5FU0NBUEVEX1dJS0lMSU5LX0RJVklERVJfUkVHRVhQLCBFU0NBUEVEX1dJS0lMSU5LX0RJVklERVIpO1xuICAgICAgfVxuXG4gICAgICBjaGFuZ2VzLnB1c2goZmlsZUNoYW5nZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBjaGFuZ2VzO1xufVxuXG5mdW5jdGlvbiBnZXRMaW5rQ29uZmlnKG9wdGlvbnM6IEdlbmVyYXRlTWFya2Rvd25MaW5rT3B0aW9ucywgdGFyZ2V0RmlsZTogVEZpbGUpOiBMaW5rQ29uZmlnIHtcbiAgY29uc3QgeyBhcHAgfSA9IG9wdGlvbnM7XG4gIHJldHVybiB7XG4gICAgaXNFbWJlZDogb3B0aW9ucy5pc0VtYmVkID8/IChvcHRpb25zLm9yaWdpbmFsTGluayA/IHRlc3RFbWJlZChvcHRpb25zLm9yaWdpbmFsTGluaykgOiB1bmRlZmluZWQpID8/ICFpc01hcmtkb3duRmlsZShhcHAsIHRhcmdldEZpbGUpLFxuICAgIGlzV2lraWxpbms6IG9wdGlvbnMuaXNXaWtpbGluayA/PyAob3B0aW9ucy5vcmlnaW5hbExpbmsgPyB0ZXN0V2lraWxpbmsob3B0aW9ucy5vcmlnaW5hbExpbmspIDogdW5kZWZpbmVkKSA/PyBzaG91bGRVc2VXaWtpbGlua3MoYXBwKSxcbiAgICBzaG91bGRGb3JjZVJlbGF0aXZlUGF0aDogb3B0aW9ucy5zaG91bGRGb3JjZVJlbGF0aXZlUGF0aCA/PyBzaG91bGRVc2VSZWxhdGl2ZUxpbmtzKGFwcCksXG4gICAgc2hvdWxkVXNlQW5nbGVCcmFja2V0czogb3B0aW9ucy5zaG91bGRVc2VBbmdsZUJyYWNrZXRzID8/IChvcHRpb25zLm9yaWdpbmFsTGluayA/IHRlc3RBbmdsZUJyYWNrZXRzKG9wdGlvbnMub3JpZ2luYWxMaW5rKSA6IHVuZGVmaW5lZCkgPz8gZmFsc2UsXG4gICAgc2hvdWxkVXNlTGVhZGluZ0RvdDogb3B0aW9ucy5zaG91bGRVc2VMZWFkaW5nRG90ID8/IChvcHRpb25zLm9yaWdpbmFsTGluayA/IHRlc3RMZWFkaW5nRG90KG9wdGlvbnMub3JpZ2luYWxMaW5rKSA6IHVuZGVmaW5lZCkgPz8gZmFsc2VcbiAgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VMaW5rTm9kZShub2RlOiBMaW5rLCBzdHI6IHN0cmluZywgaXNFbWJlZDogYm9vbGVhbik6IFBhcnNlTGlua1Jlc3VsdCB7XG4gIGNvbnN0IE9QRU5fQU5HTEVfQlJBQ0tFVCA9ICc8JztcbiAgY29uc3QgTElOS19BTElBU19TVUZGSVggPSAnXSgnO1xuICBjb25zdCBMSU5LX1NVRkZJWCA9ICcpJztcblxuICBjb25zdCBhbGlhc05vZGUgPSBub2RlLmNoaWxkcmVuWzBdIGFzIFRleHQgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHJhd1VybCA9IHN0ci5zbGljZSgoYWxpYXNOb2RlPy5wb3NpdGlvbj8uZW5kLm9mZnNldCA/PyAxKSArIExJTktfQUxJQVNfU1VGRklYLmxlbmd0aCwgKG5vZGUucG9zaXRpb24/LmVuZC5vZmZzZXQgPz8gMCkgLSBMSU5LX1NVRkZJWC5sZW5ndGgpO1xuICBjb25zdCBoYXNBbmdsZUJyYWNrZXRzID0gc3RyLnN0YXJ0c1dpdGgoT1BFTl9BTkdMRV9CUkFDS0VUKSB8fCByYXdVcmwuc3RhcnRzV2l0aChPUEVOX0FOR0xFX0JSQUNLRVQpO1xuICBjb25zdCBpc0V4dGVybmFsID0gaXNVcmwobm9kZS51cmwpO1xuICBsZXQgdXJsID0gbm9kZS51cmw7XG4gIGlmICghaXNFeHRlcm5hbCkge1xuICAgIGlmICghaGFzQW5nbGVCcmFja2V0cykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdXJsID0gZGVjb2RlVVJJQ29tcG9uZW50KHVybCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZGVjb2RlIFVSTCAke3VybH1gLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8UGFyc2VMaW5rUmVzdWx0Pih7XG4gICAgYWxpYXM6IGFsaWFzTm9kZT8udmFsdWUsXG4gICAgZW5jb2RlZFVybDogaXNFeHRlcm5hbCA/IGVuY29kZVVybCh1cmwpIDogdW5kZWZpbmVkLFxuICAgIGhhc0FuZ2xlQnJhY2tldHMsXG4gICAgaXNFbWJlZCxcbiAgICBpc0V4dGVybmFsLFxuICAgIGlzV2lraWxpbms6IGZhbHNlLFxuICAgIHRpdGxlOiBub2RlLnRpdGxlID8/IHVuZGVmaW5lZCxcbiAgICB1cmxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTGlua1VybChzdHI6IHN0cmluZyk6IG51bGwgfCBQYXJzZUxpbmtSZXN1bHQge1xuICBjb25zdCBoYXNBbmdsZUJyYWNrZXRzID0gc3RyLnN0YXJ0c1dpdGgoJzwnKSAmJiBzdHIuZW5kc1dpdGgoJz4nKTtcbiAgaWYgKGhhc0FuZ2xlQnJhY2tldHMpIHtcbiAgICBzdHIgPSBzdHIuc2xpY2UoMSwgLTEpO1xuICB9XG5cbiAgaWYgKCFpc1VybChzdHIpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGVuY29kZWRVcmw6IGVuY29kZVVybChzdHIpLFxuICAgIGhhc0FuZ2xlQnJhY2tldHMsXG4gICAgaXNFbWJlZDogZmFsc2UsXG4gICAgaXNFeHRlcm5hbDogdHJ1ZSxcbiAgICBpc1dpa2lsaW5rOiBmYWxzZSxcbiAgICB1cmw6IHN0clxuICB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZVdpa2lsaW5rTm9kZShub2RlOiBXaWtpTGlua05vZGUsIHN0cjogc3RyaW5nLCBpc0VtYmVkOiBib29sZWFuKTogUGFyc2VMaW5rUmVzdWx0IHtcbiAgcmV0dXJuIG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxQYXJzZUxpbmtSZXN1bHQ+KHtcbiAgICBhbGlhczogc3RyLmluY2x1ZGVzKFdJS0lMSU5LX0RJVklERVIpID8gbm9kZS5kYXRhLmFsaWFzIDogdW5kZWZpbmVkLFxuICAgIGlzRW1iZWQsXG4gICAgaXNFeHRlcm5hbDogZmFsc2UsXG4gICAgaXNXaWtpbGluazogdHJ1ZSxcbiAgICB1cmw6IG5vZGUudmFsdWVcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZEVzY2FwZVdpa2lsaW5rRGl2aWRlcihmaWxlQ2hhbmdlOiBGaWxlQ2hhbmdlLCB0YWJsZVBvc2l0aW9uczogVGFibGVQb3NpdGlvbltdKTogYm9vbGVhbiB7XG4gIGlmICghaXNDb250ZW50Q2hhbmdlKGZpbGVDaGFuZ2UpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFVTkVTQ0FQRURfV0lLSUxJTktfRElWSURFUl9SRUdFWFAudGVzdChmaWxlQ2hhbmdlLm5ld0NvbnRlbnQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRhYmxlUG9zaXRpb25zLnNvbWUoKHRhYmxlUG9zaXRpb24pID0+IHRhYmxlUG9zaXRpb24uc3RhcnQgPD0gZmlsZUNoYW5nZS5zdGFydEluZGV4ICYmIGZpbGVDaGFuZ2UuZW5kSW5kZXggPD0gdGFibGVQb3NpdGlvbi5lbmQpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7OztBQW9CQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsMEJBQTBCO0FBQ25DLFNBQVMsY0FBYztBQUN2QixPQUFPLGlCQUFpQjtBQUN4QixTQUFTLHNCQUFzQjtBQVEvQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxhQUFhO0FBQ3RCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLE1BQU0sMkJBQTJCO0FBTWpDLE1BQU0sOEJBQThCO0FBS3BDLE1BQU0sc0NBQXNDO0FBSzVDLE1BQU0sb0NBQW9DO0FBRTFDLE1BQU0sbUJBQW1CO0FBaVhsQixTQUFTLFlBQVksU0FBcUM7QUFDL0QsUUFBTSxhQUFhLGdCQUFnQixRQUFRLEtBQUssUUFBUSxNQUFNLFFBQVEsdUJBQXVCLFFBQVEsbUJBQW1CO0FBQ3hI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
|
@@ -39,7 +39,9 @@ async function processNextQueueItem(app) {
|
|
39
39
|
if (!item) {
|
40
40
|
return;
|
41
41
|
}
|
42
|
-
await addErrorHandler(
|
42
|
+
await addErrorHandler(
|
43
|
+
() => runWithTimeout(item.timeoutInMilliseconds, () => invokeAsyncAndLog(processNextQueueItem.name, item.fn, item.stackTrace), { queuedFn: item.fn })
|
44
|
+
);
|
43
45
|
queue.items.shift();
|
44
46
|
}
|
45
47
|
export {
|
@@ -47,4 +49,4 @@ export {
|
|
47
49
|
addToQueueAndWait,
|
48
50
|
flushQueue
|
49
51
|
};
|
50
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL1F1ZXVlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBlbnF1ZXVpbmcgYW5kIHByb2Nlc3NpbmcgZnVuY3Rpb25zIGluIE9ic2lkaWFuLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHR5cGUgeyBWYWx1ZVdyYXBwZXIgfSBmcm9tICcuL0FwcC50cyc7XG5cbmltcG9ydCB7XG4gIGFkZEVycm9ySGFuZGxlcixcbiAgaW52b2tlQXN5bmNTYWZlbHksXG4gIHJ1bldpdGhUaW1lb3V0XG59IGZyb20gJy4uL0FzeW5jLnRzJztcbmltcG9ydCB7IGdldFN0YWNrVHJhY2UgfSBmcm9tICcuLi9FcnJvci50cyc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vRnVuY3Rpb24udHMnO1xuaW1wb3J0IHsgZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlIH0gZnJvbSAnLi9BcHAudHMnO1xuaW1wb3J0IHsgaW52b2tlQXN5bmNBbmRMb2cgfSBmcm9tICcuL0xvZ2dlci50cyc7XG5cbmludGVyZmFjZSBRdWV1ZSB7XG4gIGl0ZW1zOiBRdWV1ZUl0ZW1bXTtcbiAgcHJvbWlzZTogUHJvbWlzZTx2b2lkPjtcbn1cblxuaW50ZXJmYWNlIFF1ZXVlSXRlbSB7XG4gIGZuKHRoaXM6IHZvaWQpOiBQcm9taXNhYmxlPHZvaWQ+O1xuICBzdGFja1RyYWNlOiBzdHJpbmc7XG4gIHRpbWVvdXRJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xufVxuXG4vKipcbiAqIEFkZHMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSBwcmV2aW91cyBmdW5jdGlvbiBjb21wbGV0ZXMuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBmbiAtIFRoZSBmdW5jdGlvbiB0byBhZGQuXG4gKiBAcGFyYW0gdGltZW91dEluTWlsbGlzZWNvbmRzIC0gVGhlIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLlxuICogQHBhcmFtIHN0YWNrVHJhY2UgLSBPcHRpb25hbCBzdGFjayB0cmFjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFRvUXVldWUoYXBwOiBBcHAsIGZuOiAoKSA9PiBQcm9taXNhYmxlPHZvaWQ+LCB0aW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXIsIHN0YWNrVHJhY2U/OiBzdHJpbmcpOiB2b2lkIHtcbiAgc3RhY2tUcmFjZSA/Pz0gZ2V0U3RhY2tUcmFjZSgxKTtcbiAgaW52b2tlQXN5bmNTYWZlbHkoKCkgPT4gYWRkVG9RdWV1ZUFuZFdhaXQoYXBwLCBmbiwgdGltZW91dEluTWlsbGlzZWNvbmRzLCBzdGFja1RyYWNlKSk7XG59XG5cbi8qKlxuICogQWRkcyBhbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHByZXZpb3VzIGZ1bmN0aW9uIGNvbXBsZXRlcyBhbmQgcmV0dXJucyBhIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZ1bmN0aW9uIGNvbXBsZXRlcy5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGFkZC5cbiAqIEBwYXJhbSB0aW1lb3V0SW5NaWxsaXNlY29uZHMgLSBUaGUgdGltZW91dCBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcGFyYW0gc3RhY2tUcmFjZSAtIE9wdGlvbmFsIHN0YWNrIHRyYWNlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWRkVG9RdWV1ZUFuZFdhaXQoYXBwOiBBcHAsIGZuOiAoKSA9PiBQcm9taXNhYmxlPHZvaWQ+LCB0aW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXIsIHN0YWNrVHJhY2U/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgREVGQVVMVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDYwMDAwO1xuICB0aW1lb3V0SW5NaWxsaXNlY29uZHMgPz89IERFRkFVTFRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFM7XG4gIHN0YWNrVHJhY2UgPz89IGdldFN0YWNrVHJhY2UoMSk7XG4gIGNvbnN0IHF1ZXVlID0gZ2V0UXVldWUoYXBwKS52YWx1ZTtcbiAgcXVldWUuaXRlbXMucHVzaCh7IGZuLCBzdGFja1RyYWNlLCB0aW1lb3V0SW5NaWxsaXNlY29uZHMgfSk7XG4gIHF1ZXVlLnByb21pc2UgPSBxdWV1ZS5wcm9taXNlLnRoZW4oKCkgPT4gcHJvY2Vzc05leHRRdWV1ZUl0ZW0oYXBwKSk7XG4gIGF3YWl0IHF1ZXVlLnByb21pc2U7XG59XG5cbi8qKlxuICogRmx1c2hlcyB0aGUgcXVldWU7XG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZsdXNoUXVldWUoYXBwOiBBcHApOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgYWRkVG9RdWV1ZUFuZFdhaXQoYXBwLCBub29wKTtcbn1cblxuZnVuY3Rpb24gZ2V0UXVldWUoYXBwOiBBcHApOiBWYWx1ZVdyYXBwZXI8UXVldWU+IHtcbiAgcmV0dXJuIGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZShhcHAsICdxdWV1ZScsIHsgaXRlbXM6IFtdLCBwcm9taXNlOiBQcm9taXNlLnJlc29sdmUoKSB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc05leHRRdWV1ZUl0ZW0oYXBwOiBBcHApOiBQcm9taXNlPHZvaWQ+
|
52
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL1F1ZXVlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBlbnF1ZXVpbmcgYW5kIHByb2Nlc3NpbmcgZnVuY3Rpb25zIGluIE9ic2lkaWFuLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHR5cGUgeyBWYWx1ZVdyYXBwZXIgfSBmcm9tICcuL0FwcC50cyc7XG5cbmltcG9ydCB7XG4gIGFkZEVycm9ySGFuZGxlcixcbiAgaW52b2tlQXN5bmNTYWZlbHksXG4gIHJ1bldpdGhUaW1lb3V0XG59IGZyb20gJy4uL0FzeW5jLnRzJztcbmltcG9ydCB7IGdldFN0YWNrVHJhY2UgfSBmcm9tICcuLi9FcnJvci50cyc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vRnVuY3Rpb24udHMnO1xuaW1wb3J0IHsgZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlIH0gZnJvbSAnLi9BcHAudHMnO1xuaW1wb3J0IHsgaW52b2tlQXN5bmNBbmRMb2cgfSBmcm9tICcuL0xvZ2dlci50cyc7XG5cbmludGVyZmFjZSBRdWV1ZSB7XG4gIGl0ZW1zOiBRdWV1ZUl0ZW1bXTtcbiAgcHJvbWlzZTogUHJvbWlzZTx2b2lkPjtcbn1cblxuaW50ZXJmYWNlIFF1ZXVlSXRlbSB7XG4gIGZuKHRoaXM6IHZvaWQpOiBQcm9taXNhYmxlPHZvaWQ+O1xuICBzdGFja1RyYWNlOiBzdHJpbmc7XG4gIHRpbWVvdXRJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xufVxuXG4vKipcbiAqIEFkZHMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSBwcmV2aW91cyBmdW5jdGlvbiBjb21wbGV0ZXMuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBmbiAtIFRoZSBmdW5jdGlvbiB0byBhZGQuXG4gKiBAcGFyYW0gdGltZW91dEluTWlsbGlzZWNvbmRzIC0gVGhlIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLlxuICogQHBhcmFtIHN0YWNrVHJhY2UgLSBPcHRpb25hbCBzdGFjayB0cmFjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFRvUXVldWUoYXBwOiBBcHAsIGZuOiAoKSA9PiBQcm9taXNhYmxlPHZvaWQ+LCB0aW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXIsIHN0YWNrVHJhY2U/OiBzdHJpbmcpOiB2b2lkIHtcbiAgc3RhY2tUcmFjZSA/Pz0gZ2V0U3RhY2tUcmFjZSgxKTtcbiAgaW52b2tlQXN5bmNTYWZlbHkoKCkgPT4gYWRkVG9RdWV1ZUFuZFdhaXQoYXBwLCBmbiwgdGltZW91dEluTWlsbGlzZWNvbmRzLCBzdGFja1RyYWNlKSk7XG59XG5cbi8qKlxuICogQWRkcyBhbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHByZXZpb3VzIGZ1bmN0aW9uIGNvbXBsZXRlcyBhbmQgcmV0dXJucyBhIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZ1bmN0aW9uIGNvbXBsZXRlcy5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGFkZC5cbiAqIEBwYXJhbSB0aW1lb3V0SW5NaWxsaXNlY29uZHMgLSBUaGUgdGltZW91dCBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcGFyYW0gc3RhY2tUcmFjZSAtIE9wdGlvbmFsIHN0YWNrIHRyYWNlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWRkVG9RdWV1ZUFuZFdhaXQoYXBwOiBBcHAsIGZuOiAoKSA9PiBQcm9taXNhYmxlPHZvaWQ+LCB0aW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXIsIHN0YWNrVHJhY2U/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgREVGQVVMVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDYwMDAwO1xuICB0aW1lb3V0SW5NaWxsaXNlY29uZHMgPz89IERFRkFVTFRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFM7XG4gIHN0YWNrVHJhY2UgPz89IGdldFN0YWNrVHJhY2UoMSk7XG4gIGNvbnN0IHF1ZXVlID0gZ2V0UXVldWUoYXBwKS52YWx1ZTtcbiAgcXVldWUuaXRlbXMucHVzaCh7IGZuLCBzdGFja1RyYWNlLCB0aW1lb3V0SW5NaWxsaXNlY29uZHMgfSk7XG4gIHF1ZXVlLnByb21pc2UgPSBxdWV1ZS5wcm9taXNlLnRoZW4oKCkgPT4gcHJvY2Vzc05leHRRdWV1ZUl0ZW0oYXBwKSk7XG4gIGF3YWl0IHF1ZXVlLnByb21pc2U7XG59XG5cbi8qKlxuICogRmx1c2hlcyB0aGUgcXVldWU7XG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZsdXNoUXVldWUoYXBwOiBBcHApOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgYWRkVG9RdWV1ZUFuZFdhaXQoYXBwLCBub29wKTtcbn1cblxuZnVuY3Rpb24gZ2V0UXVldWUoYXBwOiBBcHApOiBWYWx1ZVdyYXBwZXI8UXVldWU+IHtcbiAgcmV0dXJuIGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZShhcHAsICdxdWV1ZScsIHsgaXRlbXM6IFtdLCBwcm9taXNlOiBQcm9taXNlLnJlc29sdmUoKSB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc05leHRRdWV1ZUl0ZW0oYXBwOiBBcHApOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcXVldWUgPSBnZXRRdWV1ZShhcHApLnZhbHVlO1xuICBjb25zdCBpdGVtID0gcXVldWUuaXRlbXNbMF07XG4gIGlmICghaXRlbSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IGFkZEVycm9ySGFuZGxlcigoKSA9PlxuICAgIHJ1bldpdGhUaW1lb3V0KGl0ZW0udGltZW91dEluTWlsbGlzZWNvbmRzLCAoKSA9PiBpbnZva2VBc3luY0FuZExvZyhwcm9jZXNzTmV4dFF1ZXVlSXRlbS5uYW1lLCBpdGVtLmZuLCBpdGVtLnN0YWNrVHJhY2UpLCB7IHF1ZXVlZEZuOiBpdGVtLmZuIH0pXG4gICk7XG4gIHF1ZXVlLml0ZW1zLnNoaWZ0KCk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7O0FBV0E7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxxQkFBcUI7QUFDOUIsU0FBUyxZQUFZO0FBQ3JCLFNBQVMsZ0NBQWdDO0FBQ3pDLFNBQVMseUJBQXlCO0FBcUIzQixTQUFTLFdBQVcsS0FBVSxJQUE0Qix1QkFBZ0MsWUFBMkI7QUFDMUgsaUJBQWUsY0FBYyxDQUFDO0FBQzlCLG9CQUFrQixNQUFNLGtCQUFrQixLQUFLLElBQUksdUJBQXVCLFVBQVUsQ0FBQztBQUN2RjtBQVVBLGVBQXNCLGtCQUFrQixLQUFVLElBQTRCLHVCQUFnQyxZQUFvQztBQUNoSixRQUFNLGtDQUFrQztBQUN4Qyw0QkFBMEI7QUFDMUIsaUJBQWUsY0FBYyxDQUFDO0FBQzlCLFFBQU0sUUFBUSxTQUFTLEdBQUcsRUFBRTtBQUM1QixRQUFNLE1BQU0sS0FBSyxFQUFFLElBQUksWUFBWSxzQkFBc0IsQ0FBQztBQUMxRCxRQUFNLFVBQVUsTUFBTSxRQUFRLEtBQUssTUFBTSxxQkFBcUIsR0FBRyxDQUFDO0FBQ2xFLFFBQU0sTUFBTTtBQUNkO0FBT0EsZUFBc0IsV0FBVyxLQUF5QjtBQUN4RCxRQUFNLGtCQUFrQixLQUFLLElBQUk7QUFDbkM7QUFFQSxTQUFTLFNBQVMsS0FBK0I7QUFDL0MsU0FBTyx5QkFBeUIsS0FBSyxTQUFTLEVBQUUsT0FBTyxDQUFDLEdBQUcsU0FBUyxRQUFRLFFBQVEsRUFBRSxDQUFDO0FBQ3pGO0FBRUEsZUFBZSxxQkFBcUIsS0FBeUI7QUFDM0QsUUFBTSxRQUFRLFNBQVMsR0FBRyxFQUFFO0FBQzVCLFFBQU0sT0FBTyxNQUFNLE1BQU0sQ0FBQztBQUMxQixNQUFJLENBQUMsTUFBTTtBQUNUO0FBQUEsRUFDRjtBQUVBLFFBQU07QUFBQSxJQUFnQixNQUNwQixlQUFlLEtBQUssdUJBQXVCLE1BQU0sa0JBQWtCLHFCQUFxQixNQUFNLEtBQUssSUFBSSxLQUFLLFVBQVUsR0FBRyxFQUFFLFVBQVUsS0FBSyxHQUFHLENBQUM7QUFBQSxFQUNoSjtBQUNBLFFBQU0sTUFBTSxNQUFNO0FBQ3BCOyIsCiAgIm5hbWVzIjogW10KfQo=
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "obsidian-dev-utils",
|
3
|
-
"version": "26.
|
3
|
+
"version": "26.28.0",
|
4
4
|
"description": "This is the collection of useful functions that you can use for your Obsidian plugin development",
|
5
5
|
"keywords": [
|
6
6
|
"obsidian"
|
@@ -442,7 +442,7 @@
|
|
442
442
|
"version": "tsx scripts/version.ts"
|
443
443
|
},
|
444
444
|
"dependencies": {
|
445
|
-
"@eslint/js": "^9.
|
445
|
+
"@eslint/js": "^9.27.0",
|
446
446
|
"@guardian/eslint-plugin-tsdoc-required": "^0.1.3",
|
447
447
|
"@lezer/common": "^1.2.3",
|
448
448
|
"@stylistic/eslint-plugin": "^4.2.0",
|
@@ -452,7 +452,7 @@
|
|
452
452
|
"@types/doctrine": "^0.0.9",
|
453
453
|
"@types/eslint": "^9.6.1",
|
454
454
|
"@types/luxon": "^3.6.2",
|
455
|
-
"@types/node": "^22.15.
|
455
|
+
"@types/node": "^22.15.19",
|
456
456
|
"@types/parsimmon": "^1.10.9",
|
457
457
|
"@types/path-browserify": "^1.0.3",
|
458
458
|
"@types/picomatch": "^4.0.0",
|
@@ -462,20 +462,20 @@
|
|
462
462
|
"@typescript-eslint/eslint-plugin": "^8.32.1",
|
463
463
|
"@typescript-eslint/parser": "^8.32.1",
|
464
464
|
"better-typescript-lib": "^2.11.0",
|
465
|
-
"commander": "^
|
465
|
+
"commander": "^14.0.0",
|
466
466
|
"compare-versions": "^6.1.1",
|
467
467
|
"cspell": "^9.0.1",
|
468
468
|
"debug": "^4.4.1",
|
469
469
|
"dotenv": "^16.5.0",
|
470
|
-
"dprint": "^0.
|
470
|
+
"dprint": "^0.50.0",
|
471
471
|
"enhanced-resolve": "^5.18.1",
|
472
472
|
"esbuild": "^0.25.4",
|
473
473
|
"esbuild-sass-plugin": "^3.3.1",
|
474
474
|
"esbuild-svelte": "^0.9.2",
|
475
|
-
"eslint": "^9.
|
476
|
-
"eslint-import-resolver-typescript": "^4.3.
|
477
|
-
"eslint-plugin-import-x": "^4.
|
478
|
-
"eslint-plugin-jsdoc": "^50.6.
|
475
|
+
"eslint": "^9.27.0",
|
476
|
+
"eslint-import-resolver-typescript": "^4.3.5",
|
477
|
+
"eslint-plugin-import-x": "^4.12.2",
|
478
|
+
"eslint-plugin-jsdoc": "^50.6.17",
|
479
479
|
"eslint-plugin-modules-newlines": "^0.0.7",
|
480
480
|
"eslint-plugin-perfectionist": "^4.13.0",
|
481
481
|
"eslint-plugin-tsdoc": "^0.4.0",
|
@@ -496,9 +496,9 @@
|
|
496
496
|
"remark": "^15.0.1",
|
497
497
|
"remark-parse": "^11.0.0",
|
498
498
|
"remark-wiki-link": "^2.0.1",
|
499
|
-
"sass": "^1.
|
499
|
+
"sass": "^1.89.0",
|
500
500
|
"shell-quote": "^1.8.2",
|
501
|
-
"svelte-check": "^4.1
|
501
|
+
"svelte-check": "^4.2.1",
|
502
502
|
"svelte-preprocess": "^6.0.3",
|
503
503
|
"tsx": "^4.19.4",
|
504
504
|
"type-fest": "^4.41.0",
|