obsidian-integration-testing 2.0.0 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/cjs/global-setup-core.cjs +12 -11
- package/dist/lib/cjs/log.cjs +32 -0
- package/dist/lib/cjs/log.d.cts +11 -0
- package/dist/lib/cjs/transport-appium.cjs +12 -11
- package/dist/lib/cjs/transport-desktop-cdp.cjs +15 -13
- package/dist/lib/cjs/transport-desktop-cli.cjs +15 -13
- package/dist/lib/cjs/transport-factory.cjs +15 -14
- package/dist/lib/esm/global-setup-core.mjs +12 -11
- package/dist/lib/esm/log.d.mts +11 -0
- package/dist/lib/esm/log.mjs +8 -0
- package/dist/lib/esm/transport-appium.mjs +12 -11
- package/dist/lib/esm/transport-desktop-cdp.mjs +15 -13
- package/dist/lib/esm/transport-desktop-cli.mjs +15 -13
- package/dist/lib/esm/transport-factory.mjs +15 -14
- package/dist/obsidian-integration-testing-2.0.2.tgz +0 -0
- package/package.json +1 -1
- package/dist/obsidian-integration-testing-2.0.0.tgz +0 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import process from "node:process";
|
|
2
2
|
import { exec } from "./exec.mjs";
|
|
3
|
+
import { log } from "./log.mjs";
|
|
3
4
|
import {
|
|
4
5
|
getVaultId,
|
|
5
6
|
isCliEnabled,
|
|
@@ -56,7 +57,7 @@ class DesktopCliTransport {
|
|
|
56
57
|
* @param vaultPath - The absolute path to the vault folder.
|
|
57
58
|
*/
|
|
58
59
|
async preflightCheck(vaultPath) {
|
|
59
|
-
|
|
60
|
+
log(`[cli-transport] Running preflight check for vault: ${vaultPath}`);
|
|
60
61
|
if (!isVaultRegistered(vaultPath)) {
|
|
61
62
|
throw new Error(
|
|
62
63
|
`Vault is not registered in Obsidian: ${vaultPath}. Register the vault first with registerVault() or TempVault.register().`
|
|
@@ -66,7 +67,7 @@ class DesktopCliTransport {
|
|
|
66
67
|
throw new Error("Obsidian CLI is disabled. Enable it in Obsidian Settings \u2192 General \u2192 CLI.");
|
|
67
68
|
}
|
|
68
69
|
await this.assertCliAvailable();
|
|
69
|
-
|
|
70
|
+
log("[cli-transport] Preflight check passed.");
|
|
70
71
|
}
|
|
71
72
|
/**
|
|
72
73
|
* Registers a vault in the running Obsidian instance via Electron IPC.
|
|
@@ -77,7 +78,7 @@ class DesktopCliTransport {
|
|
|
77
78
|
* @param vaultPath - The absolute path to the vault folder.
|
|
78
79
|
*/
|
|
79
80
|
async registerVault(vaultPath) {
|
|
80
|
-
|
|
81
|
+
log(`[cli-transport] Registering vault: ${vaultPath}`);
|
|
81
82
|
const registerExpr = buildIpcExpression(
|
|
82
83
|
`window.electron.ipcRenderer.sendSync('vault-open', ${JSON.stringify(vaultPath)}, false);`
|
|
83
84
|
);
|
|
@@ -86,13 +87,13 @@ class DesktopCliTransport {
|
|
|
86
87
|
const pollExpr = buildSimpleExpression(
|
|
87
88
|
"return JSON.stringify(app.vault.adapter.getBasePath());"
|
|
88
89
|
);
|
|
89
|
-
|
|
90
|
+
log(`[cli-transport] Polling for vault readiness (timeout=${String(VAULT_POLL_TIMEOUT_IN_MILLISECONDS)}ms)...`);
|
|
90
91
|
const deadline = Date.now() + VAULT_POLL_TIMEOUT_IN_MILLISECONDS;
|
|
91
92
|
while (Date.now() < deadline) {
|
|
92
93
|
try {
|
|
93
94
|
const basePath = await this.evaluate(pollExpr, { cwd: vaultPath });
|
|
94
95
|
if (JSON.parse(basePath) === vaultPath) {
|
|
95
|
-
|
|
96
|
+
log("[cli-transport] Vault is ready.");
|
|
96
97
|
return;
|
|
97
98
|
}
|
|
98
99
|
} catch {
|
|
@@ -151,14 +152,14 @@ class DesktopCliTransport {
|
|
|
151
152
|
async enablePluginsInLocalStorage(vaultPath) {
|
|
152
153
|
const vaultId = getVaultId(vaultPath);
|
|
153
154
|
if (!vaultId) {
|
|
154
|
-
|
|
155
|
+
log("[cli-transport] Could not find vault ID \u2014 skipping localStorage trust flag.");
|
|
155
156
|
return;
|
|
156
157
|
}
|
|
157
158
|
const enableExpr = buildSimpleExpression(
|
|
158
159
|
`localStorage.setItem(${JSON.stringify(`enable-plugin-${vaultId}`)}, 'true');`
|
|
159
160
|
);
|
|
160
161
|
await this.evaluate(enableExpr, { cwd: process.cwd() });
|
|
161
|
-
|
|
162
|
+
log(`[cli-transport] Set enable-plugin-${vaultId} in localStorage.`);
|
|
162
163
|
}
|
|
163
164
|
/**
|
|
164
165
|
* Launches Obsidian binary and retries the eval until it responds.
|
|
@@ -168,25 +169,25 @@ class DesktopCliTransport {
|
|
|
168
169
|
* @returns The result string from the successful eval.
|
|
169
170
|
*/
|
|
170
171
|
async ensureObsidianRunningAndRetry(command, cwd) {
|
|
171
|
-
|
|
172
|
+
log("[cli-transport] Obsidian is not running. Starting Obsidian...");
|
|
172
173
|
try {
|
|
173
174
|
await exec(getObsidianLaunchCommand(), { isQuiet: true });
|
|
174
175
|
} catch {
|
|
175
176
|
}
|
|
176
|
-
|
|
177
|
+
log(`[cli-transport] Polling for Obsidian CLI (timeout=${String(AUTO_START_TIMEOUT_IN_MILLISECONDS)}ms)...`);
|
|
177
178
|
const deadline = Date.now() + AUTO_START_TIMEOUT_IN_MILLISECONDS;
|
|
178
179
|
while (Date.now() < deadline) {
|
|
179
180
|
await delay(AUTO_START_POLL_INTERVAL_IN_MILLISECONDS);
|
|
180
181
|
try {
|
|
181
182
|
const result = await exec(command, { cwd, isQuiet: true });
|
|
182
|
-
|
|
183
|
+
log("[cli-transport] Obsidian CLI responded.");
|
|
183
184
|
return result;
|
|
184
185
|
} catch (error) {
|
|
185
186
|
const message = error instanceof Error ? error.message : String(error);
|
|
186
187
|
if (!message.includes(UNABLE_TO_FIND_OBSIDIAN)) {
|
|
187
188
|
throw error;
|
|
188
189
|
}
|
|
189
|
-
|
|
190
|
+
log("[cli-transport] Obsidian not ready yet, retrying...");
|
|
190
191
|
}
|
|
191
192
|
}
|
|
192
193
|
throw new Error(`Obsidian did not start within ${String(AUTO_START_TIMEOUT_IN_MILLISECONDS)}ms.`);
|
|
@@ -210,7 +211,8 @@ function delay(ms) {
|
|
|
210
211
|
}
|
|
211
212
|
function getObsidianLaunchCommand() {
|
|
212
213
|
if (process.platform === "win32") {
|
|
213
|
-
|
|
214
|
+
const localAppData = process.env["LOCALAPPDATA"] ?? "";
|
|
215
|
+
return `start "" "${localAppData}\\Programs\\Obsidian\\Obsidian.exe"`;
|
|
214
216
|
}
|
|
215
217
|
if (process.platform === "darwin") {
|
|
216
218
|
return "/Applications/Obsidian.app/Contents/MacOS/Obsidian &";
|
|
@@ -220,4 +222,4 @@ function getObsidianLaunchCommand() {
|
|
|
220
222
|
export {
|
|
221
223
|
DesktopCliTransport
|
|
222
224
|
};
|
|
223
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC1kZXNrdG9wLWNsaS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIERlc2t0b3AgQ0xJIHRyYW5zcG9ydCBcdTIwMTQgZXZhbHVhdGVzIGV4cHJlc3Npb25zIHZpYSBgb2JzaWRpYW4gZXZhbGAgYW5kIG1hbmFnZXNcbiAqIHZhdWx0cyB2aWEgRWxlY3Ryb24gSVBDLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGNvZGUgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5UcmFuc3BvcnQsXG4gIFRyYW5zcG9ydEV2YWxPcHRpb25zXG59IGZyb20gJy4vdHJhbnNwb3J0Lm1qcyc7XG5cbmltcG9ydCB7IGV4ZWMgfSBmcm9tICcuL2V4ZWMubWpzJztcbmltcG9ydCB7XG4gIGdldFZhdWx0SWQsXG4gIGlzQ2xpRW5hYmxlZCxcbiAgaXNWYXVsdFJlZ2lzdGVyZWRcbn0gZnJvbSAnLi9vYnNpZGlhbi1jb25maWcubWpzJztcblxuY29uc3QgVU5BQkxFX1RPX0ZJTkRfT0JTSURJQU4gPSAndW5hYmxlIHRvIGZpbmQgT2JzaWRpYW4nO1xuY29uc3QgQVVUT19TVEFSVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDIwMDA7XG5jb25zdCBBVVRPX1NUQVJUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMzAwMDA7XG5jb25zdCBWQVVMVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDUwMDtcbmNvbnN0IFZBVUxUX1BPTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMDAwMDtcbmNvbnN0IFZBVUxUX0NMT1NFX0RFTEFZX0lOX01JTExJU0VDT05EUyA9IDEwMDA7XG5cbi8qKlxuICogVHJhbnNwb3J0IHRoYXQgY29tbXVuaWNhdGVzIHdpdGggRGVza3RvcCBPYnNpZGlhbiB2aWEgdGhlIGBvYnNpZGlhbiBldmFsYCBDTEkgY29tbWFuZFxuICogYW5kIG1hbmFnZXMgdmF1bHRzIHZpYSBFbGVjdHJvbiBJUEMuXG4gKi9cbmV4cG9ydCBjbGFzcyBEZXNrdG9wQ2xpVHJhbnNwb3J0IGltcGxlbWVudHMgT2JzaWRpYW5UcmFuc3BvcnQge1xuICAvKiogKi9cbiAgcHVibGljIHJlYWRvbmx5IGlzTW9iaWxlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEV2YWx1YXRlcyBhIEphdmFTY3JpcHQgZXhwcmVzc2lvbiBpbnNpZGUgT2JzaWRpYW4gdmlhIGBvYnNpZGlhbiBldmFsYC5cbiAgICpcbiAgICogSGFuZGxlcyBhdXRvLXN0YXJ0OiBpZiBPYnNpZGlhbiBpcyBub3QgcnVubmluZywgbGF1bmNoZXMgaXQgdmlhIFVSSSBwcm90b2NvbFxuICAgKiBhbmQgcmV0cmllcyB1bnRpbCBpdCBiZWNvbWVzIGF2YWlsYWJsZS5cbiAgICpcbiAgICogQHBhcmFtIGV4cHJlc3Npb24gLSBUaGUgSmF2YVNjcmlwdCBleHByZXNzaW9uIHRvIGV2YWx1YXRlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEV2YWx1YXRpb24gb3B0aW9ucy5cbiAgICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgcmVzdWx0IHN0cmluZyAodHJhbnNwb3J0LXNwZWNpZmljIHByZWZpeGVzIHN0cmlwcGVkKS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBldmFsdWF0ZShleHByZXNzaW9uOiBzdHJpbmcsIG9wdGlvbnM6IFRyYW5zcG9ydEV2YWxPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBjb21tYW5kID0gWydvYnNpZGlhbicsICdldmFsJywgYGNvZGU9JHtleHByZXNzaW9ufWBdO1xuXG4gICAgbGV0IHJlc3VsdFN0cjogc3RyaW5nO1xuICAgIHRyeSB7XG4gICAgICByZXN1bHRTdHIgPSBhd2FpdCBleGVjKGNvbW1hbmQsIHsgY3dkOiBvcHRpb25zLmN3ZCwgaXNRdWlldDogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKFVOQUJMRV9UT19GSU5EX09CU0lESUFOKSkge1xuICAgICAgICByZXN1bHRTdHIgPSBhd2FpdCB0aGlzLmVuc3VyZU9ic2lkaWFuUnVubmluZ0FuZFJldHJ5KGNvbW1hbmQsIG9wdGlvbnMuY3dkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZXN1bHRTdHIgPT09ICcnIHx8IHJlc3VsdFN0ciA9PT0gJ1ZhdWx0IG5vdCBmb3VuZC4nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgZW1wdHkgcmVzcG9uc2UgZnJvbSBPYnNpZGlhbiBmb3IgcGF0aDogJHtvcHRpb25zLmN3ZH1gKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgQ0xJIG1heSBwcmVwZW5kIGVycm9yL3dhcm5pbmcgbGluZXMgYmVmb3JlIHRoZSByZXN1bHQuXG4gICAgLy8gRmluZCB0aGUgbGFzdCBgPT4gYCBsaW5lIHdoaWNoIGNvbnRhaW5zIHRoZSBhY3R1YWwgcmVzdWx0LlxuICAgIGNvbnN0IGxpbmVzID0gcmVzdWx0U3RyLnNwbGl0KCdcXG4nKTtcbiAgICBjb25zdCByZXN1bHRMaW5lID0gbGluZXMuZmluZExhc3QoKGxpbmUpID0+IGxpbmUuc3RhcnRzV2l0aCgnPT4gJykpO1xuICAgIGlmIChyZXN1bHRMaW5lKSB7XG4gICAgICByZXR1cm4gcmVzdWx0TGluZS5zbGljZSgnPT4gJy5sZW5ndGgpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRTdHI7XG4gIH1cblxuICAvKipcbiAgICogUnVucyBDTEktc3BlY2lmaWMgcHJlZmxpZ2h0IGNoZWNrcy5cbiAgICpcbiAgICogVmVyaWZpZXMgdGhhdCB0aGUgdmF1bHQgaXMgcmVnaXN0ZXJlZCwgQ0xJIGlzIGVuYWJsZWQgaW4gT2JzaWRpYW4gc2V0dGluZ3MsXG4gICAqIGFuZCB0aGUgYG9ic2lkaWFuYCBDTEkgYmluYXJ5IGlzIGF2YWlsYWJsZSBpbiBQQVRILlxuICAgKlxuICAgKiBAcGFyYW0gdmF1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IGZvbGRlci5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBwcmVmbGlnaHRDaGVjayh2YXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUud2FybihgW2NsaS10cmFuc3BvcnRdIFJ1bm5pbmcgcHJlZmxpZ2h0IGNoZWNrIGZvciB2YXVsdDogJHt2YXVsdFBhdGh9YCk7XG4gICAgaWYgKCFpc1ZhdWx0UmVnaXN0ZXJlZCh2YXVsdFBhdGgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBWYXVsdCBpcyBub3QgcmVnaXN0ZXJlZCBpbiBPYnNpZGlhbjogJHt2YXVsdFBhdGh9LiBSZWdpc3RlciB0aGUgdmF1bHQgZmlyc3Qgd2l0aCByZWdpc3RlclZhdWx0KCkgb3IgVGVtcFZhdWx0LnJlZ2lzdGVyKCkuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzQ2xpRW5hYmxlZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09ic2lkaWFuIENMSSBpcyBkaXNhYmxlZC4gRW5hYmxlIGl0IGluIE9ic2lkaWFuIFNldHRpbmdzIFxcdTIxOTIgR2VuZXJhbCBcXHUyMTkyIENMSS4nKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmFzc2VydENsaUF2YWlsYWJsZSgpO1xuICAgIGNvbnNvbGUud2FybignW2NsaS10cmFuc3BvcnRdIFByZWZsaWdodCBjaGVjayBwYXNzZWQuJyk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgdmF1bHQgaW4gdGhlIHJ1bm5pbmcgT2JzaWRpYW4gaW5zdGFuY2UgdmlhIEVsZWN0cm9uIElQQy5cbiAgICpcbiAgICogVXNlcyBgdmF1bHQtb3BlbmAgSVBDIHRvIHJlZ2lzdGVyIGFuZCBvcGVuIHRoZSB2YXVsdCwgdGhlbiBwb2xscyB1bnRpbFxuICAgKiB0aGUgdmF1bHQncyBDTEkgaXMgcmVhZHkgYW5kIGBnZXRCYXNlUGF0aCgpYCBtYXRjaGVzIGB2YXVsdFBhdGhgLlxuICAgKlxuICAgKiBAcGFyYW0gdmF1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IGZvbGRlci5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZWdpc3RlclZhdWx0KHZhdWx0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc29sZS53YXJuKGBbY2xpLXRyYW5zcG9ydF0gUmVnaXN0ZXJpbmcgdmF1bHQ6ICR7dmF1bHRQYXRofWApO1xuICAgIGNvbnN0IHJlZ2lzdGVyRXhwciA9IGJ1aWxkSXBjRXhwcmVzc2lvbihcbiAgICAgIGB3aW5kb3cuZWxlY3Ryb24uaXBjUmVuZGVyZXIuc2VuZFN5bmMoJ3ZhdWx0LW9wZW4nLCAke0pTT04uc3RyaW5naWZ5KHZhdWx0UGF0aCl9LCBmYWxzZSk7YFxuICAgICk7XG4gICAgYXdhaXQgdGhpcy5ldmFsdWF0ZShyZWdpc3RlckV4cHIsIHsgY3dkOiBwcm9jZXNzLmN3ZCgpIH0pO1xuXG4gICAgYXdhaXQgdGhpcy5lbmFibGVQbHVnaW5zSW5Mb2NhbFN0b3JhZ2UodmF1bHRQYXRoKTtcblxuICAgIGNvbnN0IHBvbGxFeHByID0gYnVpbGRTaW1wbGVFeHByZXNzaW9uKFxuICAgICAgJ3JldHVybiBKU09OLnN0cmluZ2lmeShhcHAudmF1bHQuYWRhcHRlci5nZXRCYXNlUGF0aCgpKTsnXG4gICAgKTtcblxuICAgIGNvbnNvbGUud2FybihgW2NsaS10cmFuc3BvcnRdIFBvbGxpbmcgZm9yIHZhdWx0IHJlYWRpbmVzcyAodGltZW91dD0ke1N0cmluZyhWQVVMVF9QT0xMX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tcykuLi5gKTtcbiAgICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyBWQVVMVF9QT0xMX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xuICAgIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGJhc2VQYXRoID0gYXdhaXQgdGhpcy5ldmFsdWF0ZShwb2xsRXhwciwgeyBjd2Q6IHZhdWx0UGF0aCB9KTtcbiAgICAgICAgaWYgKEpTT04ucGFyc2UoYmFzZVBhdGgpID09PSB2YXVsdFBhdGgpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1tjbGktdHJhbnNwb3J0XSBWYXVsdCBpcyByZWFkeS4nKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBWYXVsdCBub3QgcmVhZHkgeWV0LlxuICAgICAgfVxuICAgICAgYXdhaXQgZGVsYXkoVkFVTFRfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFZhdWx0IGF0ICR7dmF1bHRQYXRofSBkaWQgbm90IGJlY29tZSByZWFkeSB3aXRoaW4gJHtTdHJpbmcoVkFVTFRfUE9MTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXNgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnJlZ2lzdGVycyBhIHZhdWx0IGZyb20gdGhlIHJ1bm5pbmcgT2JzaWRpYW4gaW5zdGFuY2UuXG4gICAqXG4gICAqIFNjaGVkdWxlcyB0aGUgdmF1bHQgd2luZG93IHRvIGNsb3NlLCB3YWl0cywgdGhlbiByZW1vdmVzIHRoZSB2YXVsdFxuICAgKiBmcm9tIHRoZSByZWdpc3RyeSB2aWEgYHZhdWx0LXJlbW92ZWAgSVBDLlxuICAgKlxuICAgKiBAcGFyYW0gdmF1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IGZvbGRlci5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB1bnJlZ2lzdGVyVmF1bHQodmF1bHRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBkZXN0cm95RXhwciA9IGJ1aWxkU2ltcGxlRXhwcmVzc2lvbihgXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHdpbmRvdy5lbGVjdHJvbiAmJiB3aW5kb3cuZWxlY3Ryb24ucmVtb3RlKSB7XG4gICAgICAgICAgd2luZG93LmVsZWN0cm9uLnJlbW90ZS5nZXRDdXJyZW50V2luZG93KCkuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICB9LCAwKTtcbiAgICBgKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5ldmFsdWF0ZShkZXN0cm95RXhwciwgeyBjd2Q6IHZhdWx0UGF0aCB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFRoZSB3aW5kb3cgbWF5IGhhdmUgY2xvc2VkIGJlZm9yZSB0aGUgcmVzcG9uc2Ugd2FzIHNlbnQgXHUyMDE0IHRoYXQncyBPSy5cbiAgICB9XG5cbiAgICBhd2FpdCBkZWxheShWQVVMVF9DTE9TRV9ERUxBWV9JTl9NSUxMSVNFQ09ORFMpO1xuXG4gICAgY29uc3QgcmVtb3ZlRXhwciA9IGJ1aWxkSXBjRXhwcmVzc2lvbihcbiAgICAgIGB3aW5kb3cuZWxlY3Ryb24uaXBjUmVuZGVyZXIuc2VuZFN5bmMoJ3ZhdWx0LXJlbW92ZScsICR7SlNPTi5zdHJpbmdpZnkodmF1bHRQYXRoKX0pO2BcbiAgICApO1xuICAgIGF3YWl0IHRoaXMuZXZhbHVhdGUocmVtb3ZlRXhwciwgeyBjd2Q6IHByb2Nlc3MuY3dkKCkgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIE9ic2lkaWFuIENMSSBiaW5hcnkgaXMgYXZhaWxhYmxlIGluIHRoZSBzeXN0ZW0gUEFUSC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgYXNzZXJ0Q2xpQXZhaWxhYmxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNvbW1hbmQgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gJ3doZXJlLmV4ZSBvYnNpZGlhbicgOiAnd2hpY2ggb2JzaWRpYW4nO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleGVjKGNvbW1hbmQsIHsgaXNRdWlldDogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT2JzaWRpYW4gQ0xJIGlzIG5vdCBhdmFpbGFibGUuIEVuc3VyZSBPYnNpZGlhbiBpcyBpbnN0YWxsZWQgYW5kIGl0cyBDTEkgaXMgaW4geW91ciBQQVRILicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGBlbmFibGUtcGx1Z2luLTx2YXVsdElkPmAgaW4gT2JzaWRpYW4ncyBsb2NhbFN0b3JhZ2UgdG8gcHJldmVudFxuICAgKiB0aGUgXCJEbyB5b3UgdHJ1c3QgdGhlIGF1dGhvciBvZiB0aGlzIHZhdWx0P1wiIGRpYWxvZyBmcm9tIGFwcGVhcmluZ1xuICAgKiB3aGVuIGEgdmF1bHQgd2l0aCBjb21tdW5pdHkgcGx1Z2lucyBpcyBvcGVuZWQgZm9yIHRoZSBmaXJzdCB0aW1lLlxuICAgKlxuICAgKiBNdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgYHZhdWx0LW9wZW5gIElQQyAoc28gdGhlIHZhdWx0IElEIGV4aXN0cyBpblxuICAgKiBgb2JzaWRpYW4uanNvbmApIGFuZCBiZWZvcmUgdGhlIG5ldyB2YXVsdCB3aW5kb3cgZmluaXNoZXMgbG9hZGluZy5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGVuYWJsZVBsdWdpbnNJbkxvY2FsU3RvcmFnZSh2YXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZhdWx0SWQgPSBnZXRWYXVsdElkKHZhdWx0UGF0aCk7XG4gICAgaWYgKCF2YXVsdElkKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tjbGktdHJhbnNwb3J0XSBDb3VsZCBub3QgZmluZCB2YXVsdCBJRCBcdTIwMTQgc2tpcHBpbmcgbG9jYWxTdG9yYWdlIHRydXN0IGZsYWcuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZW5hYmxlRXhwciA9IGJ1aWxkU2ltcGxlRXhwcmVzc2lvbihcbiAgICAgIGBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgke0pTT04uc3RyaW5naWZ5KGBlbmFibGUtcGx1Z2luLSR7dmF1bHRJZH1gKX0sICd0cnVlJyk7YFxuICAgICk7XG4gICAgYXdhaXQgdGhpcy5ldmFsdWF0ZShlbmFibGVFeHByLCB7IGN3ZDogcHJvY2Vzcy5jd2QoKSB9KTtcbiAgICBjb25zb2xlLndhcm4oYFtjbGktdHJhbnNwb3J0XSBTZXQgZW5hYmxlLXBsdWdpbi0ke3ZhdWx0SWR9IGluIGxvY2FsU3RvcmFnZS5gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMYXVuY2hlcyBPYnNpZGlhbiBiaW5hcnkgYW5kIHJldHJpZXMgdGhlIGV2YWwgdW50aWwgaXQgcmVzcG9uZHMuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIENMSSBjb21tYW5kIGFycmF5IHRvIHJldHJ5LlxuICAgKiBAcGFyYW0gY3dkIC0gVGhlIHdvcmtpbmcgZGlyZWN0b3J5LlxuICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IHN0cmluZyBmcm9tIHRoZSBzdWNjZXNzZnVsIGV2YWwuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGVuc3VyZU9ic2lkaWFuUnVubmluZ0FuZFJldHJ5KGNvbW1hbmQ6IHN0cmluZ1tdLCBjd2Q6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc29sZS53YXJuKCdbY2xpLXRyYW5zcG9ydF0gT2JzaWRpYW4gaXMgbm90IHJ1bm5pbmcuIFN0YXJ0aW5nIE9ic2lkaWFuLi4uJyk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlYyhnZXRPYnNpZGlhbkxhdW5jaENvbW1hbmQoKSwgeyBpc1F1aWV0OiB0cnVlIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gVGhlIGxhdW5jaCBjb21tYW5kIG1heSBmYWlsIG9uIHNvbWUgc3lzdGVtcyBcdTIwMTQgd2UnbGwgc3RpbGwgdHJ5IHBvbGxpbmcuXG4gICAgfVxuXG4gICAgY29uc29sZS53YXJuKGBbY2xpLXRyYW5zcG9ydF0gUG9sbGluZyBmb3IgT2JzaWRpYW4gQ0xJICh0aW1lb3V0PSR7U3RyaW5nKEFVVE9fU1RBUlRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zKS4uLmApO1xuICAgIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIEFVVE9fU1RBUlRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFM7XG4gICAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xuICAgICAgYXdhaXQgZGVsYXkoQVVUT19TVEFSVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBleGVjKGNvbW1hbmQsIHsgY3dkLCBpc1F1aWV0OiB0cnVlIH0pO1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tjbGktdHJhbnNwb3J0XSBPYnNpZGlhbiBDTEkgcmVzcG9uZGVkLicpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgICAgaWYgKCFtZXNzYWdlLmluY2x1ZGVzKFVOQUJMRV9UT19GSU5EX09CU0lESUFOKSkge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUud2FybignW2NsaS10cmFuc3BvcnRdIE9ic2lkaWFuIG5vdCByZWFkeSB5ZXQsIHJldHJ5aW5nLi4uJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBPYnNpZGlhbiBkaWQgbm90IHN0YXJ0IHdpdGhpbiAke1N0cmluZyhBVVRPX1NUQVJUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tcy5gKTtcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhbiBhc3luYyBJSUZFIHRoYXQgd2FpdHMgZm9yIGxheW91dCByZWFkeSBhbmQgZXhlY3V0ZXMgYW4gSVBDIGNhbGwuXG4gKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGBKU09OLnN0cmluZ2lmeSh1bmRlZmluZWQpYCBzbyB0aGUgQ0xJIHByb2R1Y2VzIGAobm8gb3V0cHV0KWAuXG4gKlxuICogQHBhcmFtIGlwY1N0YXRlbWVudCAtIFRoZSBJUEMgc3RhdGVtZW50IHRvIGV4ZWN1dGUuXG4gKiBAcmV0dXJucyBUaGUgSUlGRSBleHByZXNzaW9uIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYnVpbGRJcGNFeHByZXNzaW9uKGlwY1N0YXRlbWVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGJ1aWxkU2ltcGxlRXhwcmVzc2lvbihpcGNTdGF0ZW1lbnQpO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhIHNpbXBsZSBhc3luYyBJSUZFIGV4cHJlc3Npb24gdGhhdCB3YWl0cyBmb3IgbGF5b3V0IHJlYWR5LlxuICpcbiAqIEBwYXJhbSBib2R5IC0gVGhlIEphdmFTY3JpcHQgc3RhdGVtZW50cyB0byBleGVjdXRlLlxuICogQHJldHVybnMgVGhlIElJRkUgZXhwcmVzc2lvbiBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkU2ltcGxlRXhwcmVzc2lvbihib2R5OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYChhc3luYyAoKSA9PiB7XG4gIGlmICghYXBwLndvcmtzcGFjZS5sYXlvdXRSZWFkeSkge1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBhcHAud29ya3NwYWNlLm9uTGF5b3V0UmVhZHkocmVzb2x2ZSkpO1xuICB9XG4gICR7Ym9keX1cbn0pKClgO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIGdpdmVuIGRlbGF5LlxuICpcbiAqIEBwYXJhbSBtcyAtIFRoZSBkZWxheSBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciB0aGUgZGVsYXkuXG4gKi9cbmZ1bmN0aW9uIGRlbGF5KG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCBtcyk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGNvbW1hbmQgdG8gbGF1bmNoIHRoZSBPYnNpZGlhbiBiaW5hcnkuXG4gKlxuICogQHJldHVybnMgVGhlIHNoZWxsIGNvbW1hbmQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBnZXRPYnNpZGlhbkxhdW5jaENvbW1hbmQoKTogc3RyaW5nIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICByZXR1cm4gJ3N0YXJ0IFwiXCIgXCIlTE9DQUxBUFBEQVRBJVxcXFxQcm9ncmFtc1xcXFxPYnNpZGlhblxcXFxPYnNpZGlhbi5leGVcIic7XG4gIH1cblxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcbiAgICByZXR1cm4gJy9BcHBsaWNhdGlvbnMvT2JzaWRpYW4uYXBwL0NvbnRlbnRzL01hY09TL09ic2lkaWFuICYnO1xuICB9XG5cbiAgcmV0dXJuICdvYnNpZGlhbiAmJztcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICJBQVNBLE9BQU8sYUFBYTtBQU9wQixTQUFTLFlBQVk7QUFDckI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxP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
|
|
225
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC1kZXNrdG9wLWNsaS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIERlc2t0b3AgQ0xJIHRyYW5zcG9ydCBcdTIwMTQgZXZhbHVhdGVzIGV4cHJlc3Npb25zIHZpYSBgb2JzaWRpYW4gZXZhbGAgYW5kIG1hbmFnZXNcbiAqIHZhdWx0cyB2aWEgRWxlY3Ryb24gSVBDLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGNvZGUgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5UcmFuc3BvcnQsXG4gIFRyYW5zcG9ydEV2YWxPcHRpb25zXG59IGZyb20gJy4vdHJhbnNwb3J0Lm1qcyc7XG5cbmltcG9ydCB7IGV4ZWMgfSBmcm9tICcuL2V4ZWMubWpzJztcbmltcG9ydCB7IGxvZyB9IGZyb20gJy4vbG9nLm1qcyc7XG5pbXBvcnQge1xuICBnZXRWYXVsdElkLFxuICBpc0NsaUVuYWJsZWQsXG4gIGlzVmF1bHRSZWdpc3RlcmVkXG59IGZyb20gJy4vb2JzaWRpYW4tY29uZmlnLm1qcyc7XG5cbmNvbnN0IFVOQUJMRV9UT19GSU5EX09CU0lESUFOID0gJ3VuYWJsZSB0byBmaW5kIE9ic2lkaWFuJztcbmNvbnN0IEFVVE9fU1RBUlRfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMgPSAyMDAwO1xuY29uc3QgQVVUT19TVEFSVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDMwMDAwO1xuY29uc3QgVkFVTFRfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMgPSA1MDA7XG5jb25zdCBWQVVMVF9QT0xMX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMzAwMDA7XG5jb25zdCBWQVVMVF9DTE9TRV9ERUxBWV9JTl9NSUxMSVNFQ09ORFMgPSAxMDAwO1xuXG4vKipcbiAqIFRyYW5zcG9ydCB0aGF0IGNvbW11bmljYXRlcyB3aXRoIERlc2t0b3AgT2JzaWRpYW4gdmlhIHRoZSBgb2JzaWRpYW4gZXZhbGAgQ0xJIGNvbW1hbmRcbiAqIGFuZCBtYW5hZ2VzIHZhdWx0cyB2aWEgRWxlY3Ryb24gSVBDLlxuICovXG5leHBvcnQgY2xhc3MgRGVza3RvcENsaVRyYW5zcG9ydCBpbXBsZW1lbnRzIE9ic2lkaWFuVHJhbnNwb3J0IHtcbiAgLyoqICovXG4gIHB1YmxpYyByZWFkb25seSBpc01vYmlsZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZXMgYSBKYXZhU2NyaXB0IGV4cHJlc3Npb24gaW5zaWRlIE9ic2lkaWFuIHZpYSBgb2JzaWRpYW4gZXZhbGAuXG4gICAqXG4gICAqIEhhbmRsZXMgYXV0by1zdGFydDogaWYgT2JzaWRpYW4gaXMgbm90IHJ1bm5pbmcsIGxhdW5jaGVzIGl0IHZpYSBVUkkgcHJvdG9jb2xcbiAgICogYW5kIHJldHJpZXMgdW50aWwgaXQgYmVjb21lcyBhdmFpbGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSBleHByZXNzaW9uIC0gVGhlIEphdmFTY3JpcHQgZXhwcmVzc2lvbiB0byBldmFsdWF0ZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBFdmFsdWF0aW9uIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIHJlc3VsdCBzdHJpbmcgKHRyYW5zcG9ydC1zcGVjaWZpYyBwcmVmaXhlcyBzdHJpcHBlZCkuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZXZhbHVhdGUoZXhwcmVzc2lvbjogc3RyaW5nLCBvcHRpb25zOiBUcmFuc3BvcnRFdmFsT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgY29tbWFuZCA9IFsnb2JzaWRpYW4nLCAnZXZhbCcsIGBjb2RlPSR7ZXhwcmVzc2lvbn1gXTtcblxuICAgIGxldCByZXN1bHRTdHI6IHN0cmluZztcbiAgICB0cnkge1xuICAgICAgcmVzdWx0U3RyID0gYXdhaXQgZXhlYyhjb21tYW5kLCB7IGN3ZDogb3B0aW9ucy5jd2QsIGlzUXVpZXQ6IHRydWUgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICBpZiAobWVzc2FnZS5pbmNsdWRlcyhVTkFCTEVfVE9fRklORF9PQlNJRElBTikpIHtcbiAgICAgICAgcmVzdWx0U3RyID0gYXdhaXQgdGhpcy5lbnN1cmVPYnNpZGlhblJ1bm5pbmdBbmRSZXRyeShjb21tYW5kLCBvcHRpb25zLmN3ZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVzdWx0U3RyID09PSAnJyB8fCByZXN1bHRTdHIgPT09ICdWYXVsdCBub3QgZm91bmQuJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGVtcHR5IHJlc3BvbnNlIGZyb20gT2JzaWRpYW4gZm9yIHBhdGg6ICR7b3B0aW9ucy5jd2R9YCk7XG4gICAgfVxuXG4gICAgLy8gVGhlIENMSSBtYXkgcHJlcGVuZCBlcnJvci93YXJuaW5nIGxpbmVzIGJlZm9yZSB0aGUgcmVzdWx0LlxuICAgIC8vIEZpbmQgdGhlIGxhc3QgYD0+IGAgbGluZSB3aGljaCBjb250YWlucyB0aGUgYWN0dWFsIHJlc3VsdC5cbiAgICBjb25zdCBsaW5lcyA9IHJlc3VsdFN0ci5zcGxpdCgnXFxuJyk7XG4gICAgY29uc3QgcmVzdWx0TGluZSA9IGxpbmVzLmZpbmRMYXN0KChsaW5lKSA9PiBsaW5lLnN0YXJ0c1dpdGgoJz0+ICcpKTtcbiAgICBpZiAocmVzdWx0TGluZSkge1xuICAgICAgcmV0dXJuIHJlc3VsdExpbmUuc2xpY2UoJz0+ICcubGVuZ3RoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0U3RyO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgQ0xJLXNwZWNpZmljIHByZWZsaWdodCBjaGVja3MuXG4gICAqXG4gICAqIFZlcmlmaWVzIHRoYXQgdGhlIHZhdWx0IGlzIHJlZ2lzdGVyZWQsIENMSSBpcyBlbmFibGVkIGluIE9ic2lkaWFuIHNldHRpbmdzLFxuICAgKiBhbmQgdGhlIGBvYnNpZGlhbmAgQ0xJIGJpbmFyeSBpcyBhdmFpbGFibGUgaW4gUEFUSC5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcHJlZmxpZ2h0Q2hlY2sodmF1bHRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2coYFtjbGktdHJhbnNwb3J0XSBSdW5uaW5nIHByZWZsaWdodCBjaGVjayBmb3IgdmF1bHQ6ICR7dmF1bHRQYXRofWApO1xuICAgIGlmICghaXNWYXVsdFJlZ2lzdGVyZWQodmF1bHRQYXRoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVmF1bHQgaXMgbm90IHJlZ2lzdGVyZWQgaW4gT2JzaWRpYW46ICR7dmF1bHRQYXRofS4gUmVnaXN0ZXIgdGhlIHZhdWx0IGZpcnN0IHdpdGggcmVnaXN0ZXJWYXVsdCgpIG9yIFRlbXBWYXVsdC5yZWdpc3RlcigpLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFpc0NsaUVuYWJsZWQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPYnNpZGlhbiBDTEkgaXMgZGlzYWJsZWQuIEVuYWJsZSBpdCBpbiBPYnNpZGlhbiBTZXR0aW5ncyBcXHUyMTkyIEdlbmVyYWwgXFx1MjE5MiBDTEkuJyk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5hc3NlcnRDbGlBdmFpbGFibGUoKTtcbiAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBQcmVmbGlnaHQgY2hlY2sgcGFzc2VkLicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHZhdWx0IGluIHRoZSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlIHZpYSBFbGVjdHJvbiBJUEMuXG4gICAqXG4gICAqIFVzZXMgYHZhdWx0LW9wZW5gIElQQyB0byByZWdpc3RlciBhbmQgb3BlbiB0aGUgdmF1bHQsIHRoZW4gcG9sbHMgdW50aWxcbiAgICogdGhlIHZhdWx0J3MgQ0xJIGlzIHJlYWR5IGFuZCBgZ2V0QmFzZVBhdGgoKWAgbWF0Y2hlcyBgdmF1bHRQYXRoYC5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVnaXN0ZXJWYXVsdCh2YXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZyhgW2NsaS10cmFuc3BvcnRdIFJlZ2lzdGVyaW5nIHZhdWx0OiAke3ZhdWx0UGF0aH1gKTtcbiAgICBjb25zdCByZWdpc3RlckV4cHIgPSBidWlsZElwY0V4cHJlc3Npb24oXG4gICAgICBgd2luZG93LmVsZWN0cm9uLmlwY1JlbmRlcmVyLnNlbmRTeW5jKCd2YXVsdC1vcGVuJywgJHtKU09OLnN0cmluZ2lmeSh2YXVsdFBhdGgpfSwgZmFsc2UpO2BcbiAgICApO1xuICAgIGF3YWl0IHRoaXMuZXZhbHVhdGUocmVnaXN0ZXJFeHByLCB7IGN3ZDogcHJvY2Vzcy5jd2QoKSB9KTtcblxuICAgIGF3YWl0IHRoaXMuZW5hYmxlUGx1Z2luc0luTG9jYWxTdG9yYWdlKHZhdWx0UGF0aCk7XG5cbiAgICBjb25zdCBwb2xsRXhwciA9IGJ1aWxkU2ltcGxlRXhwcmVzc2lvbihcbiAgICAgICdyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXBwLnZhdWx0LmFkYXB0ZXIuZ2V0QmFzZVBhdGgoKSk7J1xuICAgICk7XG5cbiAgICBsb2coYFtjbGktdHJhbnNwb3J0XSBQb2xsaW5nIGZvciB2YXVsdCByZWFkaW5lc3MgKHRpbWVvdXQ9JHtTdHJpbmcoVkFVTFRfUE9MTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXMpLi4uYCk7XG4gICAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgVkFVTFRfUE9MTF9USU1FT1VUX0lOX01JTExJU0VDT05EUztcbiAgICB3aGlsZSAoRGF0ZS5ub3coKSA8IGRlYWRsaW5lKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBiYXNlUGF0aCA9IGF3YWl0IHRoaXMuZXZhbHVhdGUocG9sbEV4cHIsIHsgY3dkOiB2YXVsdFBhdGggfSk7XG4gICAgICAgIGlmIChKU09OLnBhcnNlKGJhc2VQYXRoKSA9PT0gdmF1bHRQYXRoKSB7XG4gICAgICAgICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gVmF1bHQgaXMgcmVhZHkuJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gVmF1bHQgbm90IHJlYWR5IHlldC5cbiAgICAgIH1cbiAgICAgIGF3YWl0IGRlbGF5KFZBVUxUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWYXVsdCBhdCAke3ZhdWx0UGF0aH0gZGlkIG5vdCBiZWNvbWUgcmVhZHkgd2l0aGluICR7U3RyaW5nKFZBVUxUX1BPTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zYCk7XG4gIH1cblxuICAvKipcbiAgICogVW5yZWdpc3RlcnMgYSB2YXVsdCBmcm9tIHRoZSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlLlxuICAgKlxuICAgKiBTY2hlZHVsZXMgdGhlIHZhdWx0IHdpbmRvdyB0byBjbG9zZSwgd2FpdHMsIHRoZW4gcmVtb3ZlcyB0aGUgdmF1bHRcbiAgICogZnJvbSB0aGUgcmVnaXN0cnkgdmlhIGB2YXVsdC1yZW1vdmVgIElQQy5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdW5yZWdpc3RlclZhdWx0KHZhdWx0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZGVzdHJveUV4cHIgPSBidWlsZFNpbXBsZUV4cHJlc3Npb24oYFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh3aW5kb3cuZWxlY3Ryb24gJiYgd2luZG93LmVsZWN0cm9uLnJlbW90ZSkge1xuICAgICAgICAgIHdpbmRvdy5lbGVjdHJvbi5yZW1vdGUuZ2V0Q3VycmVudFdpbmRvdygpLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgfSwgMCk7XG4gICAgYCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZXZhbHVhdGUoZGVzdHJveUV4cHIsIHsgY3dkOiB2YXVsdFBhdGggfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBUaGUgd2luZG93IG1heSBoYXZlIGNsb3NlZCBiZWZvcmUgdGhlIHJlc3BvbnNlIHdhcyBzZW50IFx1MjAxNCB0aGF0J3MgT0suXG4gICAgfVxuXG4gICAgYXdhaXQgZGVsYXkoVkFVTFRfQ0xPU0VfREVMQVlfSU5fTUlMTElTRUNPTkRTKTtcblxuICAgIGNvbnN0IHJlbW92ZUV4cHIgPSBidWlsZElwY0V4cHJlc3Npb24oXG4gICAgICBgd2luZG93LmVsZWN0cm9uLmlwY1JlbmRlcmVyLnNlbmRTeW5jKCd2YXVsdC1yZW1vdmUnLCAke0pTT04uc3RyaW5naWZ5KHZhdWx0UGF0aCl9KTtgXG4gICAgKTtcbiAgICBhd2FpdCB0aGlzLmV2YWx1YXRlKHJlbW92ZUV4cHIsIHsgY3dkOiBwcm9jZXNzLmN3ZCgpIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBPYnNpZGlhbiBDTEkgYmluYXJ5IGlzIGF2YWlsYWJsZSBpbiB0aGUgc3lzdGVtIFBBVEguXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGFzc2VydENsaUF2YWlsYWJsZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjb21tYW5kID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/ICd3aGVyZS5leGUgb2JzaWRpYW4nIDogJ3doaWNoIG9ic2lkaWFuJztcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlYyhjb21tYW5kLCB7IGlzUXVpZXQ6IHRydWUgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09ic2lkaWFuIENMSSBpcyBub3QgYXZhaWxhYmxlLiBFbnN1cmUgT2JzaWRpYW4gaXMgaW5zdGFsbGVkIGFuZCBpdHMgQ0xJIGlzIGluIHlvdXIgUEFUSC4nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBgZW5hYmxlLXBsdWdpbi08dmF1bHRJZD5gIGluIE9ic2lkaWFuJ3MgbG9jYWxTdG9yYWdlIHRvIHByZXZlbnRcbiAgICogdGhlIFwiRG8geW91IHRydXN0IHRoZSBhdXRob3Igb2YgdGhpcyB2YXVsdD9cIiBkaWFsb2cgZnJvbSBhcHBlYXJpbmdcbiAgICogd2hlbiBhIHZhdWx0IHdpdGggY29tbXVuaXR5IHBsdWdpbnMgaXMgb3BlbmVkIGZvciB0aGUgZmlyc3QgdGltZS5cbiAgICpcbiAgICogTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIGB2YXVsdC1vcGVuYCBJUEMgKHNvIHRoZSB2YXVsdCBJRCBleGlzdHMgaW5cbiAgICogYG9ic2lkaWFuLmpzb25gKSBhbmQgYmVmb3JlIHRoZSBuZXcgdmF1bHQgd2luZG93IGZpbmlzaGVzIGxvYWRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB2YXVsdFBhdGggLSBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdmF1bHQgZm9sZGVyLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBlbmFibGVQbHVnaW5zSW5Mb2NhbFN0b3JhZ2UodmF1bHRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB2YXVsdElkID0gZ2V0VmF1bHRJZCh2YXVsdFBhdGgpO1xuICAgIGlmICghdmF1bHRJZCkge1xuICAgICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gQ291bGQgbm90IGZpbmQgdmF1bHQgSUQgXHUyMDE0IHNraXBwaW5nIGxvY2FsU3RvcmFnZSB0cnVzdCBmbGFnLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVuYWJsZUV4cHIgPSBidWlsZFNpbXBsZUV4cHJlc3Npb24oXG4gICAgICBgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJHtKU09OLnN0cmluZ2lmeShgZW5hYmxlLXBsdWdpbi0ke3ZhdWx0SWR9YCl9LCAndHJ1ZScpO2BcbiAgICApO1xuICAgIGF3YWl0IHRoaXMuZXZhbHVhdGUoZW5hYmxlRXhwciwgeyBjd2Q6IHByb2Nlc3MuY3dkKCkgfSk7XG4gICAgbG9nKGBbY2xpLXRyYW5zcG9ydF0gU2V0IGVuYWJsZS1wbHVnaW4tJHt2YXVsdElkfSBpbiBsb2NhbFN0b3JhZ2UuYCk7XG4gIH1cblxuICAvKipcbiAgICogTGF1bmNoZXMgT2JzaWRpYW4gYmluYXJ5IGFuZCByZXRyaWVzIHRoZSBldmFsIHVudGlsIGl0IHJlc3BvbmRzLlxuICAgKlxuICAgKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBDTEkgY29tbWFuZCBhcnJheSB0byByZXRyeS5cbiAgICogQHBhcmFtIGN3ZCAtIFRoZSB3b3JraW5nIGRpcmVjdG9yeS5cbiAgICogQHJldHVybnMgVGhlIHJlc3VsdCBzdHJpbmcgZnJvbSB0aGUgc3VjY2Vzc2Z1bCBldmFsLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBlbnN1cmVPYnNpZGlhblJ1bm5pbmdBbmRSZXRyeShjb21tYW5kOiBzdHJpbmdbXSwgY3dkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGxvZygnW2NsaS10cmFuc3BvcnRdIE9ic2lkaWFuIGlzIG5vdCBydW5uaW5nLiBTdGFydGluZyBPYnNpZGlhbi4uLicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGV4ZWMoZ2V0T2JzaWRpYW5MYXVuY2hDb21tYW5kKCksIHsgaXNRdWlldDogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFRoZSBsYXVuY2ggY29tbWFuZCBtYXkgZmFpbCBvbiBzb21lIHN5c3RlbXMgXHUyMDE0IHdlJ2xsIHN0aWxsIHRyeSBwb2xsaW5nLlxuICAgIH1cblxuICAgIGxvZyhgW2NsaS10cmFuc3BvcnRdIFBvbGxpbmcgZm9yIE9ic2lkaWFuIENMSSAodGltZW91dD0ke1N0cmluZyhBVVRPX1NUQVJUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tcykuLi5gKTtcbiAgICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyBBVVRPX1NUQVJUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xuICAgIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICAgIGF3YWl0IGRlbGF5KEFVVE9fU1RBUlRfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlYyhjb21tYW5kLCB7IGN3ZCwgaXNRdWlldDogdHJ1ZSB9KTtcbiAgICAgICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gT2JzaWRpYW4gQ0xJIHJlc3BvbmRlZC4nKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICAgIGlmICghbWVzc2FnZS5pbmNsdWRlcyhVTkFCTEVfVE9fRklORF9PQlNJRElBTikpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBPYnNpZGlhbiBub3QgcmVhZHkgeWV0LCByZXRyeWluZy4uLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgT2JzaWRpYW4gZGlkIG5vdCBzdGFydCB3aXRoaW4gJHtTdHJpbmcoQVVUT19TVEFSVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXMuYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW4gYXN5bmMgSUlGRSB0aGF0IHdhaXRzIGZvciBsYXlvdXQgcmVhZHkgYW5kIGV4ZWN1dGVzIGFuIElQQyBjYWxsLlxuICogVGhlIHJldHVybiB2YWx1ZSBpcyBgSlNPTi5zdHJpbmdpZnkodW5kZWZpbmVkKWAgc28gdGhlIENMSSBwcm9kdWNlcyBgKG5vIG91dHB1dClgLlxuICpcbiAqIEBwYXJhbSBpcGNTdGF0ZW1lbnQgLSBUaGUgSVBDIHN0YXRlbWVudCB0byBleGVjdXRlLlxuICogQHJldHVybnMgVGhlIElJRkUgZXhwcmVzc2lvbiBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkSXBjRXhwcmVzc2lvbihpcGNTdGF0ZW1lbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBidWlsZFNpbXBsZUV4cHJlc3Npb24oaXBjU3RhdGVtZW50KTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSBzaW1wbGUgYXN5bmMgSUlGRSBleHByZXNzaW9uIHRoYXQgd2FpdHMgZm9yIGxheW91dCByZWFkeS5cbiAqXG4gKiBAcGFyYW0gYm9keSAtIFRoZSBKYXZhU2NyaXB0IHN0YXRlbWVudHMgdG8gZXhlY3V0ZS5cbiAqIEByZXR1cm5zIFRoZSBJSUZFIGV4cHJlc3Npb24gc3RyaW5nLlxuICovXG5mdW5jdGlvbiBidWlsZFNpbXBsZUV4cHJlc3Npb24oYm9keTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAoYXN5bmMgKCkgPT4ge1xuICBpZiAoIWFwcC53b3Jrc3BhY2UubGF5b3V0UmVhZHkpIHtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gYXBwLndvcmtzcGFjZS5vbkxheW91dFJlYWR5KHJlc29sdmUpKTtcbiAgfVxuICAke2JvZHl9XG59KSgpYDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGFmdGVyIHRoZSBnaXZlbiBkZWxheS5cbiAqXG4gKiBAcGFyYW0gbXMgLSBUaGUgZGVsYXkgaW4gbWlsbGlzZWNvbmRzLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIGRlbGF5LlxuICovXG5mdW5jdGlvbiBkZWxheShtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBjb21tYW5kIHRvIGxhdW5jaCB0aGUgT2JzaWRpYW4gYmluYXJ5LlxuICpcbiAqIEByZXR1cm5zIFRoZSBzaGVsbCBjb21tYW5kIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZ2V0T2JzaWRpYW5MYXVuY2hDb21tYW5kKCk6IHN0cmluZyB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgY29uc3QgbG9jYWxBcHBEYXRhID0gcHJvY2Vzcy5lbnZbJ0xPQ0FMQVBQREFUQSddID8/ICcnO1xuICAgIHJldHVybiBgc3RhcnQgXCJcIiBcIiR7bG9jYWxBcHBEYXRhfVxcXFxQcm9ncmFtc1xcXFxPYnNpZGlhblxcXFxPYnNpZGlhbi5leGVcImA7XG4gIH1cblxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcbiAgICByZXR1cm4gJy9BcHBsaWNhdGlvbnMvT2JzaWRpYW4uYXBwL0NvbnRlbnRzL01hY09TL09ic2lkaWFuICYnO1xuICB9XG5cbiAgcmV0dXJuICdvYnNpZGlhbiAmJztcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICJBQVNBLE9BQU8sYUFBYTtBQU9wQixTQUFTLFlBQVk7QUFDckIsU0FBUyxXQUFXO0FBQ3BCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFB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
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
2
|
import http from "node:http";
|
|
3
3
|
import { remote } from "webdriverio";
|
|
4
|
+
import { log } from "./log.mjs";
|
|
4
5
|
import { AppiumTransport } from "./transport-appium.mjs";
|
|
5
6
|
import { DesktopCdpTransport } from "./transport-desktop-cdp.mjs";
|
|
6
7
|
import { DesktopCliTransport } from "./transport-desktop-cli.mjs";
|
|
@@ -10,25 +11,25 @@ const APPIUM_CONNECTION_RETRY_COUNT = 1;
|
|
|
10
11
|
const APPIUM_CONNECTION_RETRY_TIMEOUT_IN_MILLISECONDS = 1e4;
|
|
11
12
|
const APPIUM_PREFLIGHT_TIMEOUT_IN_MILLISECONDS = 5e3;
|
|
12
13
|
const APPIUM_START_POLL_INTERVAL_IN_MILLISECONDS = 500;
|
|
13
|
-
const APPIUM_START_TIMEOUT_IN_MILLISECONDS =
|
|
14
|
+
const APPIUM_START_TIMEOUT_IN_MILLISECONDS = 6e4;
|
|
14
15
|
const CDP_DEFAULT_PORT = 8315;
|
|
15
16
|
const COMMAND_TIMEOUT_IN_MILLISECONDS = 300;
|
|
16
17
|
const SERVER_LAUNCH_TIMEOUT_IN_MILLISECONDS = 3e4;
|
|
17
18
|
let cachedTransport;
|
|
18
19
|
async function createTransportFromOptions(options) {
|
|
19
20
|
if (!options || options.type === "obsidian-cli") {
|
|
20
|
-
|
|
21
|
+
log("[transport-factory] Creating DesktopCliTransport (no options or type=obsidian-cli)");
|
|
21
22
|
return new DesktopCliTransport();
|
|
22
23
|
}
|
|
23
24
|
if (options.type === "obsidian-cdp") {
|
|
24
|
-
|
|
25
|
+
log(`[transport-factory] Creating DesktopCdpTransport (host=${options.host ?? "localhost"}, port=${String(options.port ?? CDP_DEFAULT_PORT)})`);
|
|
25
26
|
return new DesktopCdpTransport({
|
|
26
27
|
...options.host !== void 0 && { cdpHost: options.host },
|
|
27
28
|
...options.port !== void 0 && { cdpPort: options.port },
|
|
28
29
|
...options.commandTimeoutInMilliseconds !== void 0 && { commandTimeoutInMilliseconds: options.commandTimeoutInMilliseconds }
|
|
29
30
|
});
|
|
30
31
|
}
|
|
31
|
-
|
|
32
|
+
log(`[transport-factory] Creating AppiumTransport (url=${options.appiumUrl}, device=${options.deviceId})`);
|
|
32
33
|
return createAppiumTransport(options);
|
|
33
34
|
}
|
|
34
35
|
async function getOrCreateTransport(options) {
|
|
@@ -70,21 +71,21 @@ async function createAppiumTransport(options) {
|
|
|
70
71
|
throw new Error(`Invalid port in appiumUrl: ${url.port}`);
|
|
71
72
|
}
|
|
72
73
|
const appId = options.appId ?? APP_PACKAGE;
|
|
73
|
-
|
|
74
|
+
log(`[transport-factory] Checking Appium server at ${options.appiumUrl}...`);
|
|
74
75
|
let appiumProcess;
|
|
75
76
|
try {
|
|
76
77
|
await checkAppiumReachable(url);
|
|
77
|
-
|
|
78
|
+
log("[transport-factory] Appium server is reachable.");
|
|
78
79
|
} catch (error) {
|
|
79
80
|
if (options.shouldAutoStartAppium === false) {
|
|
80
81
|
throw error;
|
|
81
82
|
}
|
|
82
|
-
|
|
83
|
+
log(`[transport-factory] Appium not reachable, auto-starting on port ${String(port)}...`);
|
|
83
84
|
appiumProcess = startAppiumServer(port);
|
|
84
85
|
await waitForAppiumReady(url);
|
|
85
|
-
|
|
86
|
+
log("[transport-factory] Auto-started Appium server is ready.");
|
|
86
87
|
}
|
|
87
|
-
|
|
88
|
+
log(`[transport-factory] Connecting to Appium (device=${options.deviceId}, app=${appId})...`);
|
|
88
89
|
const browser = await remote({
|
|
89
90
|
capabilities: {
|
|
90
91
|
"appium:appActivity": APP_ACTIVITY,
|
|
@@ -107,7 +108,7 @@ async function createAppiumTransport(options) {
|
|
|
107
108
|
path: url.pathname,
|
|
108
109
|
port
|
|
109
110
|
});
|
|
110
|
-
|
|
111
|
+
log("[transport-factory] Appium session established.");
|
|
111
112
|
const transport = new AppiumTransport({
|
|
112
113
|
appId,
|
|
113
114
|
browser,
|
|
@@ -119,16 +120,16 @@ async function createAppiumTransport(options) {
|
|
|
119
120
|
transport.dispose = async () => {
|
|
120
121
|
await originalDispose();
|
|
121
122
|
appiumProcess.kill();
|
|
122
|
-
|
|
123
|
+
log("[transport-factory] Auto-started Appium server stopped.");
|
|
123
124
|
};
|
|
124
125
|
}
|
|
125
126
|
return transport;
|
|
126
127
|
}
|
|
127
128
|
function startAppiumServer(port) {
|
|
128
|
-
const child = spawn(
|
|
129
|
+
const child = spawn(`npx appium --log-timestamp --port ${String(port)}`, {
|
|
129
130
|
detached: true,
|
|
130
131
|
shell: true,
|
|
131
|
-
stdio: "
|
|
132
|
+
stdio: "inherit"
|
|
132
133
|
});
|
|
133
134
|
child.unref();
|
|
134
135
|
return child;
|
|
@@ -153,4 +154,4 @@ export {
|
|
|
153
154
|
createTransportFromOptions,
|
|
154
155
|
getOrCreateTransport
|
|
155
156
|
};
|
|
156
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC1mYWN0b3J5LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRmFjdG9yeSBmb3IgY3JlYXRpbmcgdHJhbnNwb3J0IGluc3RhbmNlcyBmcm9tIHtAbGluayBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnN9LlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGZhY3RvcnkgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcblxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IGh0dHAgZnJvbSAnbm9kZTpodHRwJztcbmltcG9ydCB7IHJlbW90ZSB9IGZyb20gJ3dlYmRyaXZlcmlvJztcblxuaW1wb3J0IHR5cGUge1xuICBPYnNpZGlhbkFuZHJvaWRBcHBpdW1UcmFuc3BvcnRPcHRpb25zLFxuICBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnNcbn0gZnJvbSAnLi90cmFuc3BvcnQtb3B0aW9ucy5tanMnO1xuaW1wb3J0IHR5cGUgeyBPYnNpZGlhblRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0Lm1qcyc7XG5cbmltcG9ydCB7IEFwcGl1bVRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWFwcGl1bS5tanMnO1xuaW1wb3J0IHsgRGVza3RvcENkcFRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWRlc2t0b3AtY2RwLm1qcyc7XG5pbXBvcnQgeyBEZXNrdG9wQ2xpVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQtZGVza3RvcC1jbGkubWpzJztcblxuY29uc3QgQVBQX1BBQ0tBR0UgPSAnbWQub2JzaWRpYW4nO1xuY29uc3QgQVBQX0FDVElWSVRZID0gYCR7QVBQX1BBQ0tBR0V9Lk1haW5BY3Rpdml0eWA7XG5jb25zdCBBUFBJVU1fQ09OTkVDVElPTl9SRVRSWV9DT1VOVCA9IDE7XG5jb25zdCBBUFBJVU1fQ09OTkVDVElPTl9SRVRSWV9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDEwMDAwO1xuY29uc3QgQVBQSVVNX1BSRUZMSUdIVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDUwMDA7XG5jb25zdCBBUFBJVU1fU1RBUlRfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMgPSA1MDA7XG5jb25zdCBBUFBJVU1fU1RBUlRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMDAwMDtcbmNvbnN0IENEUF9ERUZBVUxUX1BPUlQgPSA4MzE1O1xuY29uc3QgQ09NTUFORF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDMwMDtcbmNvbnN0IFNFUlZFUl9MQVVOQ0hfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMDAwMDtcblxubGV0IGNhY2hlZFRyYW5zcG9ydDogT2JzaWRpYW5UcmFuc3BvcnQgfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB0cmFuc3BvcnQgaW5zdGFuY2UgZnJvbSB0aGUgZ2l2ZW4gb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRyYW5zcG9ydCBjb25maWd1cmF0aW9uLiBEZWZhdWx0cyB0byBDTEkgdHJhbnNwb3J0LlxuICogQHJldHVybnMgQSBuZXcgdHJhbnNwb3J0IGluc3RhbmNlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVHJhbnNwb3J0RnJvbU9wdGlvbnMob3B0aW9ucz86IE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9ucyk6IFByb21pc2U8T2JzaWRpYW5UcmFuc3BvcnQ+IHtcbiAgaWYgKCFvcHRpb25zIHx8IG9wdGlvbnMudHlwZSA9PT0gJ29ic2lkaWFuLWNsaScpIHtcbiAgICBjb25zb2xlLndhcm4oJ1t0cmFuc3BvcnQtZmFjdG9yeV0gQ3JlYXRpbmcgRGVza3RvcENsaVRyYW5zcG9ydCAobm8gb3B0aW9ucyBvciB0eXBlPW9ic2lkaWFuLWNsaSknKTtcbiAgICByZXR1cm4gbmV3IERlc2t0b3BDbGlUcmFuc3BvcnQoKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnR5cGUgPT09ICdvYnNpZGlhbi1jZHAnKSB7XG4gICAgY29uc29sZS53YXJuKGBbdHJhbnNwb3J0LWZhY3RvcnldIENyZWF0aW5nIERlc2t0b3BDZHBUcmFuc3BvcnQgKGhvc3Q9JHtvcHRpb25zLmhvc3QgPz8gJ2xvY2FsaG9zdCd9LCBwb3J0PSR7U3RyaW5nKG9wdGlvbnMucG9ydCA/PyBDRFBfREVGQVVMVF9QT1JUKX0pYCk7XG4gICAgcmV0dXJuIG5ldyBEZXNrdG9wQ2RwVHJhbnNwb3J0KHtcbiAgICAgIC4uLihvcHRpb25zLmhvc3QgIT09IHVuZGVmaW5lZCAmJiB7IGNkcEhvc3Q6IG9wdGlvbnMuaG9zdCB9KSxcbiAgICAgIC4uLihvcHRpb25zLnBvcnQgIT09IHVuZGVmaW5lZCAmJiB7IGNkcFBvcnQ6IG9wdGlvbnMucG9ydCB9KSxcbiAgICAgIC4uLihvcHRpb25zLmNvbW1hbmRUaW1lb3V0SW5NaWxsaXNlY29uZHMgIT09IHVuZGVmaW5lZCAmJiB7IGNvbW1hbmRUaW1lb3V0SW5NaWxsaXNlY29uZHM6IG9wdGlvbnMuY29tbWFuZFRpbWVvdXRJbk1pbGxpc2Vjb25kcyB9KVxuICAgIH0pO1xuICB9XG5cbiAgY29uc29sZS53YXJuKGBbdHJhbnNwb3J0LWZhY3RvcnldIENyZWF0aW5nIEFwcGl1bVRyYW5zcG9ydCAodXJsPSR7b3B0aW9ucy5hcHBpdW1Vcmx9LCBkZXZpY2U9JHtvcHRpb25zLmRldmljZUlkfSlgKTtcbiAgcmV0dXJuIGNyZWF0ZUFwcGl1bVRyYW5zcG9ydChvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgY2FjaGVkIHRyYW5zcG9ydCBpbnN0YW5jZSwgY3JlYXRpbmcgb25lIGZyb20gdGhlIGdpdmVuIG9wdGlvbnNcbiAqIGlmIG5vdCBhbHJlYWR5IGNhY2hlZC5cbiAqXG4gKiBUaGUgdHJhbnNwb3J0IGlzIGNhY2hlZCBwZXIgd29ya2VyIHByb2Nlc3Mgc28gV2ViU29ja2V0L0FwcGl1bSBzZXNzaW9uc1xuICogYXJlIHJldXNlZCBhY3Jvc3MgY2FsbHMgd2l0aGluIHRoZSBzYW1lIHRlc3Qgd29ya2VyLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVHJhbnNwb3J0IGNvbmZpZ3VyYXRpb24uIERlZmF1bHRzIHRvIENMSSB0cmFuc3BvcnQuXG4gKiBAcmV0dXJucyBUaGUgY2FjaGVkIG9yIG5ld2x5IGNyZWF0ZWQgdHJhbnNwb3J0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0T3JDcmVhdGVUcmFuc3BvcnQob3B0aW9ucz86IE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9ucyk6IFByb21pc2U8T2JzaWRpYW5UcmFuc3BvcnQ+IHtcbiAgaWYgKGNhY2hlZFRyYW5zcG9ydCkge1xuICAgIHJldHVybiBjYWNoZWRUcmFuc3BvcnQ7XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyhvcHRpb25zKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXRvbWljLXVwZGF0ZXMgLS0gU2luZ2xlLXRocmVhZGVkIHdvcmtlcjsgbm8gY29uY3VycmVudCB3cml0ZXMuXG4gIGNhY2hlZFRyYW5zcG9ydCA9IHJlc3VsdDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBQZXJmb3JtcyBhIHF1aWNrIEhUVFAgY2hlY2sgYWdhaW5zdCB0aGUgQXBwaXVtIHNlcnZlcidzIHN0YXR1cyBlbmRwb2ludC5cbiAqXG4gKiBGYWlscyBmYXN0ICh3aXRoaW4ge0BsaW5rIEFQUElVTV9QUkVGTElHSFRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFN9KSB3aXRoXG4gKiBhIGNsZWFyIGVycm9yIG1lc3NhZ2UgaW5zdGVhZCBvZiBsZXR0aW5nIFdlYkRyaXZlcklPIHJldHJ5IHNpbGVudGx5IGZvciBtaW51dGVzLlxuICpcbiAqIEBwYXJhbSB1cmwgLSBUaGUgcGFyc2VkIEFwcGl1bSBVUkwuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrQXBwaXVtUmVhY2hhYmxlKHVybDogVVJMKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgc3RhdHVzVXJsID0gbmV3IFVSTCgnL3N0YXR1cycsIHVybCk7XG4gICAgY29uc3QgcmVxID0gaHR0cC5nZXQoc3RhdHVzVXJsLCB7IHRpbWVvdXQ6IEFQUElVTV9QUkVGTElHSFRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgfSwgKHJlcykgPT4ge1xuICAgICAgcmVzLnJlc3VtZSgpO1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0pO1xuICAgIHJlcS5vbigndGltZW91dCcsICgpID0+IHtcbiAgICAgIHJlcS5kZXN0cm95KCk7XG4gICAgICByZWplY3QoXG4gICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICBgQXBwaXVtIHNlcnZlciBhdCAke3VybC5vcmlnaW59IGRpZCBub3QgcmVzcG9uZCB3aXRoaW4gJHtTdHJpbmcoQVBQSVVNX1BSRUZMSUdIVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXMuIElzIHRoZSBBcHBpdW0gc2VydmVyIHJ1bm5pbmc/YFxuICAgICAgICApXG4gICAgICApO1xuICAgIH0pO1xuICAgIHJlcS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICByZWplY3QoXG4gICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2Fubm90IHJlYWNoIEFwcGl1bSBzZXJ2ZXIgYXQgJHt1cmwub3JpZ2lufTogJHtlcnIubWVzc2FnZX0uIElzIHRoZSBBcHBpdW0gc2VydmVyIHJ1bm5pbmc/YFxuICAgICAgICApXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIEFwcGl1bSB0cmFuc3BvcnQgYnkgZXN0YWJsaXNoaW5nIGEgV2ViRHJpdmVySU8gc2Vzc2lvbi5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuZHJvaWQgQXBwaXVtIHRyYW5zcG9ydCBvcHRpb25zLlxuICogQHJldHVybnMgQSBjb25maWd1cmVkIEFwcGl1bSB0cmFuc3BvcnQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUFwcGl1bVRyYW5zcG9ydChvcHRpb25zOiBPYnNpZGlhbkFuZHJvaWRBcHBpdW1UcmFuc3BvcnRPcHRpb25zKTogUHJvbWlzZTxBcHBpdW1UcmFuc3BvcnQ+IHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChvcHRpb25zLmFwcGl1bVVybCk7XG5cbiAgY29uc3QgcG9ydCA9IE51bWJlcih1cmwucG9ydCk7XG4gIGlmIChpc05hTihwb3J0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwb3J0IGluIGFwcGl1bVVybDogJHt1cmwucG9ydH1gKTtcbiAgfVxuXG4gIGNvbnN0IGFwcElkID0gb3B0aW9ucy5hcHBJZCA/PyBBUFBfUEFDS0FHRTtcblxuICBjb25zb2xlLndhcm4oYFt0cmFuc3BvcnQtZmFjdG9yeV0gQ2hlY2tpbmcgQXBwaXVtIHNlcnZlciBhdCAke29wdGlvbnMuYXBwaXVtVXJsfS4uLmApO1xuICBsZXQgYXBwaXVtUHJvY2VzczogQ2hpbGRQcm9jZXNzIHwgdW5kZWZpbmVkO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgY2hlY2tBcHBpdW1SZWFjaGFibGUodXJsKTtcbiAgICBjb25zb2xlLndhcm4oJ1t0cmFuc3BvcnQtZmFjdG9yeV0gQXBwaXVtIHNlcnZlciBpcyByZWFjaGFibGUuJyk7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgaWYgKG9wdGlvbnMuc2hvdWxkQXV0b1N0YXJ0QXBwaXVtID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgY29uc29sZS53YXJuKGBbdHJhbnNwb3J0LWZhY3RvcnldIEFwcGl1bSBub3QgcmVhY2hhYmxlLCBhdXRvLXN0YXJ0aW5nIG9uIHBvcnQgJHtTdHJpbmcocG9ydCl9Li4uYCk7XG4gICAgYXBwaXVtUHJvY2VzcyA9IHN0YXJ0QXBwaXVtU2VydmVyKHBvcnQpO1xuICAgIGF3YWl0IHdhaXRGb3JBcHBpdW1SZWFkeSh1cmwpO1xuICAgIGNvbnNvbGUud2FybignW3RyYW5zcG9ydC1mYWN0b3J5XSBBdXRvLXN0YXJ0ZWQgQXBwaXVtIHNlcnZlciBpcyByZWFkeS4nKTtcbiAgfVxuXG4gIGNvbnNvbGUud2FybihgW3RyYW5zcG9ydC1mYWN0b3J5XSBDb25uZWN0aW5nIHRvIEFwcGl1bSAoZGV2aWNlPSR7b3B0aW9ucy5kZXZpY2VJZH0sIGFwcD0ke2FwcElkfSkuLi5gKTtcbiAgY29uc3QgYnJvd3NlciA9IGF3YWl0IHJlbW90ZSh7XG4gICAgY2FwYWJpbGl0aWVzOiB7XG4gICAgICAnYXBwaXVtOmFwcEFjdGl2aXR5JzogQVBQX0FDVElWSVRZLFxuICAgICAgJ2FwcGl1bTphcHBQYWNrYWdlJzogYXBwSWQsXG4gICAgICAnYXBwaXVtOmF1dG9HcmFudFBlcm1pc3Npb25zJzogdHJ1ZSxcbiAgICAgICdhcHBpdW06YXV0b21hdGlvbk5hbWUnOiAnVWlBdXRvbWF0b3IyJyxcbiAgICAgICdhcHBpdW06bmV3Q29tbWFuZFRpbWVvdXQnOiBDT01NQU5EX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTLFxuICAgICAgJ2FwcGl1bTpub1Jlc2V0JzogdHJ1ZSxcbiAgICAgICdhcHBpdW06c2V0dGluZ3MnOiB7XG4gICAgICAgICdhcHBpdW06Y2hyb21lZHJpdmVyQXV0b2Rvd25sb2FkJzogdHJ1ZVxuICAgICAgfSxcbiAgICAgICdhcHBpdW06c2tpcFNlcnZlckluc3RhbGxhdGlvbic6IHRydWUsXG4gICAgICAnYXBwaXVtOnVkaWQnOiBvcHRpb25zLmRldmljZUlkLFxuICAgICAgJ2FwcGl1bTp1aWF1dG9tYXRvcjJTZXJ2ZXJMYXVuY2hUaW1lb3V0JzogU0VSVkVSX0xBVU5DSF9USU1FT1VUX0lOX01JTExJU0VDT05EUyxcbiAgICAgICdwbGF0Zm9ybU5hbWUnOiAnQW5kcm9pZCdcbiAgICB9LFxuICAgIGNvbm5lY3Rpb25SZXRyeUNvdW50OiBBUFBJVU1fQ09OTkVDVElPTl9SRVRSWV9DT1VOVCxcbiAgICBjb25uZWN0aW9uUmV0cnlUaW1lb3V0OiBBUFBJVU1fQ09OTkVDVElPTl9SRVRSWV9USU1FT1VUX0lOX01JTExJU0VDT05EUyxcbiAgICBob3N0bmFtZTogdXJsLmhvc3RuYW1lLFxuICAgIHBhdGg6IHVybC5wYXRobmFtZSxcbiAgICBwb3J0XG4gIH0pO1xuXG4gIGNvbnNvbGUud2FybignW3RyYW5zcG9ydC1mYWN0b3J5XSBBcHBpdW0gc2Vzc2lvbiBlc3RhYmxpc2hlZC4nKTtcbiAgY29uc3QgdHJhbnNwb3J0ID0gbmV3IEFwcGl1bVRyYW5zcG9ydCh7XG4gICAgYXBwSWQsXG4gICAgYnJvd3NlcixcbiAgICBwbGF0Zm9ybTogJ2FuZHJvaWQnLFxuICAgIC4uLihvcHRpb25zLnZhdWx0QmFzZVBhdGggIT09IHVuZGVmaW5lZCAmJiB7IHZhdWx0QmFzZVBhdGg6IG9wdGlvbnMudmF1bHRCYXNlUGF0aCB9KVxuICB9KTtcblxuICBpZiAoYXBwaXVtUHJvY2Vzcykge1xuICAgIGNvbnN0IG9yaWdpbmFsRGlzcG9zZSA9IHRyYW5zcG9ydC5kaXNwb3NlLmJpbmQodHJhbnNwb3J0KTtcbiAgICB0cmFuc3BvcnQuZGlzcG9zZSA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgIGF3YWl0IG9yaWdpbmFsRGlzcG9zZSgpO1xuICAgICAgYXBwaXVtUHJvY2Vzcy5raWxsKCk7XG4gICAgICBjb25zb2xlLndhcm4oJ1t0cmFuc3BvcnQtZmFjdG9yeV0gQXV0by1zdGFydGVkIEFwcGl1bSBzZXJ2ZXIgc3RvcHBlZC4nKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHRyYW5zcG9ydDtcbn1cblxuLyoqXG4gKiBTcGF3bnMgYW4gQXBwaXVtIHNlcnZlciBhcyBhIGRldGFjaGVkIGJhY2tncm91bmQgcHJvY2Vzcy5cbiAqXG4gKiBAcGFyYW0gcG9ydCAtIFRoZSBwb3J0IHRvIHN0YXJ0IEFwcGl1bSBvbi5cbiAqIEByZXR1cm5zIFRoZSBzcGF3bmVkIGNoaWxkIHByb2Nlc3MuXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0QXBwaXVtU2VydmVyKHBvcnQ6IG51bWJlcik6IENoaWxkUHJvY2VzcyB7XG4gIGNvbnN0IGNoaWxkID0gc3Bhd24oJ25weCcsIFsnYXBwaXVtJywgJy0tcG9ydCcsIFN0cmluZyhwb3J0KV0sIHtcbiAgICBkZXRhY2hlZDogdHJ1ZSxcbiAgICBzaGVsbDogdHJ1ZSxcbiAgICBzdGRpbzogJ2lnbm9yZSdcbiAgfSk7XG5cbiAgY2hpbGQudW5yZWYoKTtcbiAgcmV0dXJuIGNoaWxkO1xufVxuXG4vKipcbiAqIFBvbGxzIHRoZSBBcHBpdW0gc2VydmVyIHVudGlsIGl0IHJlc3BvbmRzIHRvIGAvc3RhdHVzYC5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gVGhlIEFwcGl1bSBzZXJ2ZXIgVVJMLlxuICovXG5hc3luYyBmdW5jdGlvbiB3YWl0Rm9yQXBwaXVtUmVhZHkodXJsOiBVUkwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgQVBQSVVNX1NUQVJUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xuXG4gIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY2hlY2tBcHBpdW1SZWFjaGFibGUodXJsKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgQVBQSVVNX1NUQVJUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgQXV0by1zdGFydGVkIEFwcGl1bSBzZXJ2ZXIgZGlkIG5vdCBiZWNvbWUgcmVhZHkgd2l0aGluICR7U3RyaW5nKEFQUElVTV9TVEFSVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXNgXG4gICk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiQUFVQSxTQUFTLGFBQWE7QUFDdEIsT0FBTyxVQUFVO0FBQ2pCLFNBQVMsY0FBYztBQVF2QixTQUFTLHVCQUF1QjtBQUNoQyxTQUFTLDJCQUEyQjtBQUNwQyxTQUFTLDJCQUEyQjtBQUVwQyxNQUFNLGNBQWM7QUFDcEIsTUFBTSxlQUFlLEdBQUcsV0FBVztBQUNuQyxNQUFNLGdDQUFnQztBQUN0QyxNQUFNLGtEQUFrRDtBQUN4RCxNQUFNLDJDQUEyQztBQUNqRCxNQUFNLDZDQUE2QztBQUNuRCxNQUFNLHVDQUF1QztBQUM3QyxNQUFNLG1CQUFtQjtBQUN6QixNQUFNLGtDQUFrQztBQUN4QyxNQUFNLHdDQUF3QztBQUU5QyxJQUFJO0FBUUosZUFBc0IsMkJBQTJCLFNBQWdFO0FBQy9HLE1BQUksQ0FBQyxXQUFXLFFBQVEsU0FBUyxnQkFBZ0I7QUFDL0MsWUFBUSxLQUFLLG9GQUFvRjtBQUNqRyxXQUFPLElBQUksb0JBQW9CO0FBQUEsRUFDakM7QUFFQSxNQUFJLFFBQVEsU0FBUyxnQkFBZ0I7QUFDbkMsWUFBUSxLQUFLLDBEQUEwRCxRQUFRLFFBQVEsV0FBVyxVQUFVLE9BQU8sUUFBUSxRQUFRLGdCQUFnQixDQUFDLEdBQUc7QUFDdkosV0FBTyxJQUFJLG9CQUFvQjtBQUFBLE1BQzdCLEdBQUksUUFBUSxTQUFTLFVBQWEsRUFBRSxTQUFTLFFBQVEsS0FBSztBQUFBLE1BQzFELEdBQUksUUFBUSxTQUFTLFVBQWEsRUFBRSxTQUFTLFFBQVEsS0FBSztBQUFBLE1BQzFELEdBQUksUUFBUSxpQ0FBaUMsVUFBYSxFQUFFLDhCQUE4QixRQUFRLDZCQUE2QjtBQUFBLElBQ2pJLENBQUM7QUFBQSxFQUNIO0FBRUEsVUFBUSxLQUFLLHFEQUFxRCxRQUFRLFNBQVMsWUFBWSxR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
|
|
157
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC1mYWN0b3J5LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRmFjdG9yeSBmb3IgY3JlYXRpbmcgdHJhbnNwb3J0IGluc3RhbmNlcyBmcm9tIHtAbGluayBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnN9LlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGZhY3RvcnkgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcblxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IGh0dHAgZnJvbSAnbm9kZTpodHRwJztcbmltcG9ydCB7IHJlbW90ZSB9IGZyb20gJ3dlYmRyaXZlcmlvJztcblxuaW1wb3J0IHR5cGUge1xuICBPYnNpZGlhbkFuZHJvaWRBcHBpdW1UcmFuc3BvcnRPcHRpb25zLFxuICBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnNcbn0gZnJvbSAnLi90cmFuc3BvcnQtb3B0aW9ucy5tanMnO1xuaW1wb3J0IHR5cGUgeyBPYnNpZGlhblRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0Lm1qcyc7XG5cbmltcG9ydCB7IGxvZyB9IGZyb20gJy4vbG9nLm1qcyc7XG5pbXBvcnQgeyBBcHBpdW1UcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1hcHBpdW0ubWpzJztcbmltcG9ydCB7IERlc2t0b3BDZHBUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1kZXNrdG9wLWNkcC5tanMnO1xuaW1wb3J0IHsgRGVza3RvcENsaVRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWRlc2t0b3AtY2xpLm1qcyc7XG5cbmNvbnN0IEFQUF9QQUNLQUdFID0gJ21kLm9ic2lkaWFuJztcbmNvbnN0IEFQUF9BQ1RJVklUWSA9IGAke0FQUF9QQUNLQUdFfS5NYWluQWN0aXZpdHlgO1xuY29uc3QgQVBQSVVNX0NPTk5FQ1RJT05fUkVUUllfQ09VTlQgPSAxO1xuY29uc3QgQVBQSVVNX0NPTk5FQ1RJT05fUkVUUllfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAxMDAwMDtcbmNvbnN0IEFQUElVTV9QUkVGTElHSFRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSA1MDAwO1xuY29uc3QgQVBQSVVNX1NUQVJUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gNTAwO1xuY29uc3QgQVBQSVVNX1NUQVJUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gNjAwMDA7XG5jb25zdCBDRFBfREVGQVVMVF9QT1JUID0gODMxNTtcbmNvbnN0IENPTU1BTkRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMDA7XG5jb25zdCBTRVJWRVJfTEFVTkNIX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMzAwMDA7XG5cbmxldCBjYWNoZWRUcmFuc3BvcnQ6IE9ic2lkaWFuVHJhbnNwb3J0IHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgdHJhbnNwb3J0IGluc3RhbmNlIGZyb20gdGhlIGdpdmVuIG9wdGlvbnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUcmFuc3BvcnQgY29uZmlndXJhdGlvbi4gRGVmYXVsdHMgdG8gQ0xJIHRyYW5zcG9ydC5cbiAqIEByZXR1cm5zIEEgbmV3IHRyYW5zcG9ydCBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVRyYW5zcG9ydEZyb21PcHRpb25zKG9wdGlvbnM/OiBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnMpOiBQcm9taXNlPE9ic2lkaWFuVHJhbnNwb3J0PiB7XG4gIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLnR5cGUgPT09ICdvYnNpZGlhbi1jbGknKSB7XG4gICAgbG9nKCdbdHJhbnNwb3J0LWZhY3RvcnldIENyZWF0aW5nIERlc2t0b3BDbGlUcmFuc3BvcnQgKG5vIG9wdGlvbnMgb3IgdHlwZT1vYnNpZGlhbi1jbGkpJyk7XG4gICAgcmV0dXJuIG5ldyBEZXNrdG9wQ2xpVHJhbnNwb3J0KCk7XG4gIH1cblxuICBpZiAob3B0aW9ucy50eXBlID09PSAnb2JzaWRpYW4tY2RwJykge1xuICAgIGxvZyhgW3RyYW5zcG9ydC1mYWN0b3J5XSBDcmVhdGluZyBEZXNrdG9wQ2RwVHJhbnNwb3J0IChob3N0PSR7b3B0aW9ucy5ob3N0ID8/ICdsb2NhbGhvc3QnfSwgcG9ydD0ke1N0cmluZyhvcHRpb25zLnBvcnQgPz8gQ0RQX0RFRkFVTFRfUE9SVCl9KWApO1xuICAgIHJldHVybiBuZXcgRGVza3RvcENkcFRyYW5zcG9ydCh7XG4gICAgICAuLi4ob3B0aW9ucy5ob3N0ICE9PSB1bmRlZmluZWQgJiYgeyBjZHBIb3N0OiBvcHRpb25zLmhvc3QgfSksXG4gICAgICAuLi4ob3B0aW9ucy5wb3J0ICE9PSB1bmRlZmluZWQgJiYgeyBjZHBQb3J0OiBvcHRpb25zLnBvcnQgfSksXG4gICAgICAuLi4ob3B0aW9ucy5jb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzICE9PSB1bmRlZmluZWQgJiYgeyBjb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzOiBvcHRpb25zLmNvbW1hbmRUaW1lb3V0SW5NaWxsaXNlY29uZHMgfSlcbiAgICB9KTtcbiAgfVxuXG4gIGxvZyhgW3RyYW5zcG9ydC1mYWN0b3J5XSBDcmVhdGluZyBBcHBpdW1UcmFuc3BvcnQgKHVybD0ke29wdGlvbnMuYXBwaXVtVXJsfSwgZGV2aWNlPSR7b3B0aW9ucy5kZXZpY2VJZH0pYCk7XG4gIHJldHVybiBjcmVhdGVBcHBpdW1UcmFuc3BvcnQob3B0aW9ucyk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGNhY2hlZCB0cmFuc3BvcnQgaW5zdGFuY2UsIGNyZWF0aW5nIG9uZSBmcm9tIHRoZSBnaXZlbiBvcHRpb25zXG4gKiBpZiBub3QgYWxyZWFkeSBjYWNoZWQuXG4gKlxuICogVGhlIHRyYW5zcG9ydCBpcyBjYWNoZWQgcGVyIHdvcmtlciBwcm9jZXNzIHNvIFdlYlNvY2tldC9BcHBpdW0gc2Vzc2lvbnNcbiAqIGFyZSByZXVzZWQgYWNyb3NzIGNhbGxzIHdpdGhpbiB0aGUgc2FtZSB0ZXN0IHdvcmtlci5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRyYW5zcG9ydCBjb25maWd1cmF0aW9uLiBEZWZhdWx0cyB0byBDTEkgdHJhbnNwb3J0LlxuICogQHJldHVybnMgVGhlIGNhY2hlZCBvciBuZXdseSBjcmVhdGVkIHRyYW5zcG9ydC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE9yQ3JlYXRlVHJhbnNwb3J0KG9wdGlvbnM/OiBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnMpOiBQcm9taXNlPE9ic2lkaWFuVHJhbnNwb3J0PiB7XG4gIGlmIChjYWNoZWRUcmFuc3BvcnQpIHtcbiAgICByZXR1cm4gY2FjaGVkVHJhbnNwb3J0O1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY3JlYXRlVHJhbnNwb3J0RnJvbU9wdGlvbnMob3B0aW9ucyk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZXF1aXJlLWF0b21pYy11cGRhdGVzIC0tIFNpbmdsZS10aHJlYWRlZCB3b3JrZXI7IG5vIGNvbmN1cnJlbnQgd3JpdGVzLlxuICBjYWNoZWRUcmFuc3BvcnQgPSByZXN1bHQ7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogUGVyZm9ybXMgYSBxdWljayBIVFRQIGNoZWNrIGFnYWluc3QgdGhlIEFwcGl1bSBzZXJ2ZXIncyBzdGF0dXMgZW5kcG9pbnQuXG4gKlxuICogRmFpbHMgZmFzdCAod2l0aGluIHtAbGluayBBUFBJVU1fUFJFRkxJR0hUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTfSkgd2l0aFxuICogYSBjbGVhciBlcnJvciBtZXNzYWdlIGluc3RlYWQgb2YgbGV0dGluZyBXZWJEcml2ZXJJTyByZXRyeSBzaWxlbnRseSBmb3IgbWludXRlcy5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gVGhlIHBhcnNlZCBBcHBpdW0gVVJMLlxuICovXG5mdW5jdGlvbiBjaGVja0FwcGl1bVJlYWNoYWJsZSh1cmw6IFVSTCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHN0YXR1c1VybCA9IG5ldyBVUkwoJy9zdGF0dXMnLCB1cmwpO1xuICAgIGNvbnN0IHJlcSA9IGh0dHAuZ2V0KHN0YXR1c1VybCwgeyB0aW1lb3V0OiBBUFBJVU1fUFJFRkxJR0hUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTIH0sIChyZXMpID0+IHtcbiAgICAgIHJlcy5yZXN1bWUoKTtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgICByZXEub24oJ3RpbWVvdXQnLCAoKSA9PiB7XG4gICAgICByZXEuZGVzdHJveSgpO1xuICAgICAgcmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgYEFwcGl1bSBzZXJ2ZXIgYXQgJHt1cmwub3JpZ2lufSBkaWQgbm90IHJlc3BvbmQgd2l0aGluICR7U3RyaW5nKEFQUElVTV9QUkVGTElHSFRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zLiBJcyB0aGUgQXBwaXVtIHNlcnZlciBydW5uaW5nP2BcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9KTtcbiAgICByZXEub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgcmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgYENhbm5vdCByZWFjaCBBcHBpdW0gc2VydmVyIGF0ICR7dXJsLm9yaWdpbn06ICR7ZXJyLm1lc3NhZ2V9LiBJcyB0aGUgQXBwaXVtIHNlcnZlciBydW5uaW5nP2BcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBBcHBpdW0gdHJhbnNwb3J0IGJ5IGVzdGFibGlzaGluZyBhIFdlYkRyaXZlcklPIHNlc3Npb24uXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBBbmRyb2lkIEFwcGl1bSB0cmFuc3BvcnQgb3B0aW9ucy5cbiAqIEByZXR1cm5zIEEgY29uZmlndXJlZCBBcHBpdW0gdHJhbnNwb3J0LlxuICovXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVBcHBpdW1UcmFuc3BvcnQob3B0aW9uczogT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9ucyk6IFByb21pc2U8QXBwaXVtVHJhbnNwb3J0PiB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwob3B0aW9ucy5hcHBpdW1VcmwpO1xuXG4gIGNvbnN0IHBvcnQgPSBOdW1iZXIodXJsLnBvcnQpO1xuICBpZiAoaXNOYU4ocG9ydCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcG9ydCBpbiBhcHBpdW1Vcmw6ICR7dXJsLnBvcnR9YCk7XG4gIH1cblxuICBjb25zdCBhcHBJZCA9IG9wdGlvbnMuYXBwSWQgPz8gQVBQX1BBQ0tBR0U7XG5cbiAgbG9nKGBbdHJhbnNwb3J0LWZhY3RvcnldIENoZWNraW5nIEFwcGl1bSBzZXJ2ZXIgYXQgJHtvcHRpb25zLmFwcGl1bVVybH0uLi5gKTtcbiAgbGV0IGFwcGl1bVByb2Nlc3M6IENoaWxkUHJvY2VzcyB8IHVuZGVmaW5lZDtcblxuICB0cnkge1xuICAgIGF3YWl0IGNoZWNrQXBwaXVtUmVhY2hhYmxlKHVybCk7XG4gICAgbG9nKCdbdHJhbnNwb3J0LWZhY3RvcnldIEFwcGl1bSBzZXJ2ZXIgaXMgcmVhY2hhYmxlLicpO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGlmIChvcHRpb25zLnNob3VsZEF1dG9TdGFydEFwcGl1bSA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIGxvZyhgW3RyYW5zcG9ydC1mYWN0b3J5XSBBcHBpdW0gbm90IHJlYWNoYWJsZSwgYXV0by1zdGFydGluZyBvbiBwb3J0ICR7U3RyaW5nKHBvcnQpfS4uLmApO1xuICAgIGFwcGl1bVByb2Nlc3MgPSBzdGFydEFwcGl1bVNlcnZlcihwb3J0KTtcbiAgICBhd2FpdCB3YWl0Rm9yQXBwaXVtUmVhZHkodXJsKTtcbiAgICBsb2coJ1t0cmFuc3BvcnQtZmFjdG9yeV0gQXV0by1zdGFydGVkIEFwcGl1bSBzZXJ2ZXIgaXMgcmVhZHkuJyk7XG4gIH1cblxuICBsb2coYFt0cmFuc3BvcnQtZmFjdG9yeV0gQ29ubmVjdGluZyB0byBBcHBpdW0gKGRldmljZT0ke29wdGlvbnMuZGV2aWNlSWR9LCBhcHA9JHthcHBJZH0pLi4uYCk7XG4gIGNvbnN0IGJyb3dzZXIgPSBhd2FpdCByZW1vdGUoe1xuICAgIGNhcGFiaWxpdGllczoge1xuICAgICAgJ2FwcGl1bTphcHBBY3Rpdml0eSc6IEFQUF9BQ1RJVklUWSxcbiAgICAgICdhcHBpdW06YXBwUGFja2FnZSc6IGFwcElkLFxuICAgICAgJ2FwcGl1bTphdXRvR3JhbnRQZXJtaXNzaW9ucyc6IHRydWUsXG4gICAgICAnYXBwaXVtOmF1dG9tYXRpb25OYW1lJzogJ1VpQXV0b21hdG9yMicsXG4gICAgICAnYXBwaXVtOm5ld0NvbW1hbmRUaW1lb3V0JzogQ09NTUFORF9USU1FT1VUX0lOX01JTExJU0VDT05EUyxcbiAgICAgICdhcHBpdW06bm9SZXNldCc6IHRydWUsXG4gICAgICAnYXBwaXVtOnNldHRpbmdzJzoge1xuICAgICAgICAnYXBwaXVtOmNocm9tZWRyaXZlckF1dG9kb3dubG9hZCc6IHRydWVcbiAgICAgIH0sXG4gICAgICAnYXBwaXVtOnNraXBTZXJ2ZXJJbnN0YWxsYXRpb24nOiB0cnVlLFxuICAgICAgJ2FwcGl1bTp1ZGlkJzogb3B0aW9ucy5kZXZpY2VJZCxcbiAgICAgICdhcHBpdW06dWlhdXRvbWF0b3IyU2VydmVyTGF1bmNoVGltZW91dCc6IFNFUlZFUl9MQVVOQ0hfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMsXG4gICAgICAncGxhdGZvcm1OYW1lJzogJ0FuZHJvaWQnXG4gICAgfSxcbiAgICBjb25uZWN0aW9uUmV0cnlDb3VudDogQVBQSVVNX0NPTk5FQ1RJT05fUkVUUllfQ09VTlQsXG4gICAgY29ubmVjdGlvblJldHJ5VGltZW91dDogQVBQSVVNX0NPTk5FQ1RJT05fUkVUUllfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMsXG4gICAgaG9zdG5hbWU6IHVybC5ob3N0bmFtZSxcbiAgICBwYXRoOiB1cmwucGF0aG5hbWUsXG4gICAgcG9ydFxuICB9KTtcblxuICBsb2coJ1t0cmFuc3BvcnQtZmFjdG9yeV0gQXBwaXVtIHNlc3Npb24gZXN0YWJsaXNoZWQuJyk7XG4gIGNvbnN0IHRyYW5zcG9ydCA9IG5ldyBBcHBpdW1UcmFuc3BvcnQoe1xuICAgIGFwcElkLFxuICAgIGJyb3dzZXIsXG4gICAgcGxhdGZvcm06ICdhbmRyb2lkJyxcbiAgICAuLi4ob3B0aW9ucy52YXVsdEJhc2VQYXRoICE9PSB1bmRlZmluZWQgJiYgeyB2YXVsdEJhc2VQYXRoOiBvcHRpb25zLnZhdWx0QmFzZVBhdGggfSlcbiAgfSk7XG5cbiAgaWYgKGFwcGl1bVByb2Nlc3MpIHtcbiAgICBjb25zdCBvcmlnaW5hbERpc3Bvc2UgPSB0cmFuc3BvcnQuZGlzcG9zZS5iaW5kKHRyYW5zcG9ydCk7XG4gICAgdHJhbnNwb3J0LmRpc3Bvc2UgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBhd2FpdCBvcmlnaW5hbERpc3Bvc2UoKTtcbiAgICAgIGFwcGl1bVByb2Nlc3Mua2lsbCgpO1xuICAgICAgbG9nKCdbdHJhbnNwb3J0LWZhY3RvcnldIEF1dG8tc3RhcnRlZCBBcHBpdW0gc2VydmVyIHN0b3BwZWQuJyk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB0cmFuc3BvcnQ7XG59XG5cbi8qKlxuICogU3Bhd25zIGFuIEFwcGl1bSBzZXJ2ZXIgYXMgYSBkZXRhY2hlZCBiYWNrZ3JvdW5kIHByb2Nlc3MuXG4gKlxuICogQHBhcmFtIHBvcnQgLSBUaGUgcG9ydCB0byBzdGFydCBBcHBpdW0gb24uXG4gKiBAcmV0dXJucyBUaGUgc3Bhd25lZCBjaGlsZCBwcm9jZXNzLlxuICovXG5mdW5jdGlvbiBzdGFydEFwcGl1bVNlcnZlcihwb3J0OiBudW1iZXIpOiBDaGlsZFByb2Nlc3Mge1xuICBjb25zdCBjaGlsZCA9IHNwYXduKGBucHggYXBwaXVtIC0tbG9nLXRpbWVzdGFtcCAtLXBvcnQgJHtTdHJpbmcocG9ydCl9YCwge1xuICAgIGRldGFjaGVkOiB0cnVlLFxuICAgIHNoZWxsOiB0cnVlLFxuICAgIHN0ZGlvOiAnaW5oZXJpdCdcbiAgfSk7XG5cbiAgY2hpbGQudW5yZWYoKTtcbiAgcmV0dXJuIGNoaWxkO1xufVxuXG4vKipcbiAqIFBvbGxzIHRoZSBBcHBpdW0gc2VydmVyIHVudGlsIGl0IHJlc3BvbmRzIHRvIGAvc3RhdHVzYC5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gVGhlIEFwcGl1bSBzZXJ2ZXIgVVJMLlxuICovXG5hc3luYyBmdW5jdGlvbiB3YWl0Rm9yQXBwaXVtUmVhZHkodXJsOiBVUkwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgQVBQSVVNX1NUQVJUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xuXG4gIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY2hlY2tBcHBpdW1SZWFjaGFibGUodXJsKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgQVBQSVVNX1NUQVJUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgQXV0by1zdGFydGVkIEFwcGl1bSBzZXJ2ZXIgZGlkIG5vdCBiZWNvbWUgcmVhZHkgd2l0aGluICR7U3RyaW5nKEFQUElVTV9TVEFSVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXNgXG4gICk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiQUFVQSxTQUFTLGFBQWE7QUFDdEIsT0FBTyxVQUFVO0FBQ2pCLFNBQVMsY0FBYztBQVF2QixTQUFTLFdBQVc7QUFDcEIsU0FBUyx1QkFBdUI7QUFDaEMsU0FBUywyQkFBMkI7QUFDcEMsU0FBUywyQkFBMkI7QUFFcEMsTUFBTSxjQUFjO0FBQ3BCLE1BQU0sZUFBZSxHQUFHLFdBQVc7QUFDbkMsTUFBTSxnQ0FBZ0M7QUFDdEMsTUFBTSxrREFBa0Q7QUFDeEQsTUFBTSwyQ0FBMkM7QUFDakQsTUFBTSw2Q0FBNkM7QUFDbkQsTUFBTSx1Q0FBdUM7QUFDN0MsTUFBTSxtQkFBbUI7QUFDekIsTUFBTSxrQ0FBa0M7QUFDeEMsTUFBTSx3Q0FBd0M7QUFFOUMsSUFBSTtBQVFKLGVBQXNCLDJCQUEyQixTQUFnRTtBQUMvRyxNQUFJLENBQUMsV0FBVyxRQUFRLFNBQVMsZ0JBQWdCO0FBQy9DLFFBQUksb0ZBQW9GO0FBQ3hGLFdBQU8sSUFBSSxvQkFBb0I7QUFBQSxFQUNqQztBQUVBLE1BQUksUUFBUSxTQUFTLGdCQUFnQjtBQUNuQyxRQUFJLDBEQUEwRCxRQUFRLFFBQVEsV0FBVyxVQUFVLE9BQU8sUUFBUSxRQUFRLGdCQUFnQixDQUFDLEdBQUc7QUFDOUksV0FBTyxJQUFJLG9CQUFvQjtBQUFBLE1BQzdCLEdBQUksUUFBUSxTQUFTLFVBQWEsRUFBRSxTQUFTLFFBQVEsS0FBSztBQUFBLE1BQzFELEdBQUksUUFBUSxTQUFTLFVBQWEsRUFBRSxTQUFTLFFBQVEsS0FBSztBQUFBLE1BQzFELEdBQUksUUFBUSxpQ0FBaUMsVUFBYSxFQUFFLDhCQUE4QixRQUFRLDZCQUE2QjtBQUFBLElBQ2pJLENBQUM7QUFBQSxFQUNIO0FBRUEsTUFBSSxxREFBcUQsUUFBUSxTQUFTLFlBQVksUUFBUSxRQUFRLEdBQUc7QUFDekcsU0FBTyxzQkFBc0IsT0FBTztBQUN0QztB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
|
|
Binary file
|
package/package.json
CHANGED
|
Binary file
|