obsidian-integration-testing 10.4.0 → 12.0.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/README.md +1 -1
- package/dist/lib/cjs/appium-server-marker.cjs +115 -0
- package/dist/lib/cjs/appium-server-marker.d.cts +81 -0
- package/dist/lib/cjs/cli.cjs +104 -19
- package/dist/lib/cjs/cli.d.cts +16 -8
- package/dist/lib/cjs/community-plugin-registry.cjs +52 -0
- package/dist/lib/cjs/community-plugin-registry.d.cts +116 -0
- package/dist/lib/cjs/context-provider.cjs +12 -1
- package/dist/lib/cjs/context-provider.d.cts +26 -3
- package/dist/lib/cjs/demo-vault-bootstrap.cjs +148 -0
- package/dist/lib/cjs/demo-vault-bootstrap.d.cts +113 -0
- package/dist/lib/cjs/demo-vault-populate.cjs +36 -9
- package/dist/lib/cjs/demo-vault-populate.d.cts +70 -0
- package/dist/lib/cjs/eval-in-obsidian.cjs +1 -1
- package/dist/lib/cjs/eval-in-obsidian.d.cts +97 -15
- package/dist/lib/cjs/index.cjs +16 -1
- package/dist/lib/cjs/index.d.cts +15 -8
- package/dist/lib/cjs/installer-asset.cjs +1 -1
- package/dist/lib/cjs/installer-asset.d.cts +1 -1
- package/dist/lib/cjs/integration-setup-failed-error.cjs +62 -0
- package/dist/lib/cjs/integration-setup-failed-error.d.cts +66 -0
- package/dist/lib/cjs/jest/global-setup.cjs +2 -2
- package/dist/lib/cjs/jest/global-setup.d.cts +5 -1
- package/dist/lib/cjs/kill-process-tree.cjs +18 -7
- package/dist/lib/cjs/kill-process-tree.d.cts +10 -2
- package/dist/lib/cjs/library.cjs +1 -1
- package/dist/lib/cjs/mobile-input.cjs +161 -0
- package/dist/lib/cjs/mobile-input.d.cts +160 -0
- package/dist/lib/cjs/namespace-bootstrap.cjs +136 -10
- package/dist/lib/cjs/obsidian-installer.cjs +1 -1
- package/dist/lib/cjs/obsidian-metadata.cjs +1257 -348
- package/dist/lib/cjs/obsidian-metadata.d.cts +74 -12
- package/dist/lib/cjs/obsidian-version-switch.cjs +3 -3
- package/dist/lib/cjs/open-obsidian-settings-tab.cjs +51 -0
- package/dist/lib/cjs/open-obsidian-settings-tab.d.cts +49 -0
- package/dist/lib/cjs/release-catalog.cjs +73 -0
- package/dist/lib/cjs/release-catalog.d.cts +125 -0
- package/dist/lib/cjs/transport-appium.cjs +122 -1
- package/dist/lib/cjs/transport-appium.d.cts +51 -0
- package/dist/lib/cjs/transport-desktop-cdp.cjs +7 -1
- package/dist/lib/cjs/transport-desktop-cdp.d.cts +2 -2
- package/dist/lib/cjs/transport-factory.cjs +237 -32
- package/dist/lib/cjs/transport-factory.d.cts +10 -1
- package/dist/lib/cjs/vitest/global-setup.cjs +13 -7
- package/dist/lib/cjs/vitest/global-setup.d.cts +5 -1
- package/dist/lib/cjs/vitest/setup.cjs +2 -1
- package/dist/lib/cjs/vitest/setup.d.cts +5 -0
- package/dist/lib/cjs/vitest/typings.d.cts +6 -4
- package/dist/lib/cjs/webview-cdp.cjs +264 -0
- package/dist/lib/cjs/webview-cdp.d.cts +152 -0
- package/dist/lib/cjs/wedged-appium-server.cjs +113 -0
- package/dist/lib/cjs/wedged-appium-server.d.cts +187 -0
- package/dist/lib/esm/appium-server-marker.d.mts +81 -0
- package/dist/lib/esm/appium-server-marker.mjs +83 -0
- package/dist/lib/esm/cli.d.mts +16 -8
- package/dist/lib/esm/cli.mjs +110 -19
- package/dist/lib/esm/community-plugin-registry.d.mts +116 -0
- package/dist/lib/esm/community-plugin-registry.mjs +23 -0
- package/dist/lib/esm/context-provider.d.mts +26 -3
- package/dist/lib/esm/context-provider.mjs +10 -1
- package/dist/lib/esm/demo-vault-bootstrap.d.mts +113 -0
- package/dist/lib/esm/demo-vault-bootstrap.mjs +127 -0
- package/dist/lib/esm/demo-vault-populate.d.mts +70 -0
- package/dist/lib/esm/demo-vault-populate.mjs +33 -8
- package/dist/lib/esm/eval-in-obsidian.d.mts +97 -15
- package/dist/lib/esm/eval-in-obsidian.mjs +1 -1
- package/dist/lib/esm/index.d.mts +15 -8
- package/dist/lib/esm/index.mjs +18 -2
- package/dist/lib/esm/installer-asset.d.mts +1 -1
- package/dist/lib/esm/installer-asset.mjs +1 -1
- package/dist/lib/esm/integration-setup-failed-error.d.mts +66 -0
- package/dist/lib/esm/integration-setup-failed-error.mjs +38 -0
- package/dist/lib/esm/jest/global-setup.d.mts +5 -1
- package/dist/lib/esm/jest/global-setup.mjs +2 -2
- package/dist/lib/esm/kill-process-tree.d.mts +10 -2
- package/dist/lib/esm/kill-process-tree.mjs +16 -6
- package/dist/lib/esm/library.mjs +1 -1
- package/dist/lib/esm/mobile-input.d.mts +160 -0
- package/dist/lib/esm/mobile-input.mjs +132 -0
- package/dist/lib/esm/namespace-bootstrap.mjs +139 -10
- package/dist/lib/esm/obsidian-installer.mjs +1 -1
- package/dist/lib/esm/obsidian-metadata.d.mts +74 -12
- package/dist/lib/esm/obsidian-metadata.mjs +1257 -348
- package/dist/lib/esm/obsidian-version-switch.mjs +3 -3
- package/dist/lib/esm/open-obsidian-settings-tab.d.mts +49 -0
- package/dist/lib/esm/open-obsidian-settings-tab.mjs +27 -0
- package/dist/lib/esm/release-catalog.d.mts +125 -0
- package/dist/lib/esm/release-catalog.mjs +46 -0
- package/dist/lib/esm/transport-appium.d.mts +51 -0
- package/dist/lib/esm/transport-appium.mjs +126 -1
- package/dist/lib/esm/transport-desktop-cdp.d.mts +2 -2
- package/dist/lib/esm/transport-desktop-cdp.mjs +7 -1
- package/dist/lib/esm/transport-factory.d.mts +10 -1
- package/dist/lib/esm/transport-factory.mjs +249 -35
- package/dist/lib/esm/vitest/global-setup.d.mts +5 -1
- package/dist/lib/esm/vitest/global-setup.mjs +14 -7
- package/dist/lib/esm/vitest/setup.d.mts +5 -0
- package/dist/lib/esm/vitest/setup.mjs +3 -1
- package/dist/lib/esm/vitest/typings.d.mts +6 -4
- package/dist/lib/esm/webview-cdp.d.mts +152 -0
- package/dist/lib/esm/webview-cdp.mjs +236 -0
- package/dist/lib/esm/wedged-appium-server.d.mts +187 -0
- package/dist/lib/esm/wedged-appium-server.mjs +86 -0
- package/package.json +13 -12
|
@@ -203,4 +203,4 @@ export {
|
|
|
203
203
|
ensureShellCached,
|
|
204
204
|
getCachedShellDirectory
|
|
205
205
|
};
|
|
206
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWluc3RhbGxlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEludGVncmF0aW9uLXRpbWUgaGVscGVycyBmb3IgcmVzb2x2aW5nIHRoZSBPYnNpZGlhbiAqKnNoZWxsKiogKHRoZSBFbGVjdHJvblxuICogcnVudGltZSAvIGluc3RhbGxlciBidWlsZCkgdG8gbGF1bmNoLlxuICpcbiAqIEJ5IGRlZmF1bHQgdGhlIGhhcm5lc3MgdXNlcyB0aGUgaW5zdGFsbGVkIHNoZWxsLiBXaGVuIGEgc3BlY2lmaWMgaW5zdGFsbGVyXG4gKiB2ZXJzaW9uIGlzIHJlcXVlc3RlZCwgaXQgZG93bmxvYWRzIHRoYXQgdmVyc2lvbidzIEdpdEh1YiByZWxlYXNlIGFzc2V0IGFuZFxuICogZXh0cmFjdHMgYSBwb3J0YWJsZSBzaGVsbCBpbnRvIGEgY2FjaGUsIHJldHVybmluZyB0aGUgZXhlY3V0YWJsZSB0byBsYXVuY2guXG4gKlxuICogR2l0SHViIHJlbGVhc2UgYXNzZXRzIGV4aXN0IGZvciAqKnB1YmxpYyoqIHJlbGVhc2VzIG9ubHk7IGNhdGFseXN0IChiZXRhKVxuICogYnVpbGRzIHB1Ymxpc2ggb25seSB0aGUgYXNhciwgc28gaW5zdGFsbGVyLXBpbm5pbmcgc3VwcG9ydHMgcHVibGljIHZlcnNpb25zLlxuICogVGhlIGV4dHJhY3RlZCBzaGVsbCdzIGJ1bmRsZWQgYHJlc291cmNlcy9vYnNpZGlhbi5hc2FyYCBpcyB0aGF0IHZlcnNpb24sIHNvXG4gKiBwaW5uaW5nIHRoZSBpbnN0YWxsZXIgaXMgaG93IHlvdSBydW4gYSB2ZXJzaW9uICoqb2xkZXIqKiB0aGFuIHRoZSBpbnN0YWxsZWRcbiAqIHNoZWxsIChhc2FyLXN3YXAgaXMgdXBncmFkZS1vbmx5IFx1MjAxNCBzZWUgYG9ic2lkaWFuLXZlcnNpb24tc3dpdGNoLnRzYCkuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEludGVncmF0aW9uLXRpbWUgZG93bmxvYWQvZXh0cmFjdGlvbiBnbHVlIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQge1xuICBleGVjRmlsZVN5bmMsXG4gIHNwYXduU3luY1xufSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHtcbiAgZXhpc3RzU3luYyxcbiAgbWtkaXJTeW5jLFxuICByZWFkRmlsZVN5bmMsXG4gIHJtU3luYyxcbiAgd3JpdGVGaWxlU3luY1xufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHtcbiAgYmFzZW5hbWUsXG4gIGRpcm5hbWUsXG4gIGpvaW5cbn0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB7XG4gIGJ1aWxkSW5zdGFsbGVyQXNzZXROYW1lQ2FuZGlkYXRlcyxcbiAgc2VsZWN0SW5zdGFsbGVyQXNzZXROYW1lLFxuICBzZWxlY3RJbnN0YWxsZXJEb3dubG9hZFVybFxufSBmcm9tICcuL2luc3RhbGxlci1hc3NldC5tanMnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cubWpzJztcbmltcG9ydCB7IGdldFZlcnNpb25NZXRhZGF0YSB9IGZyb20gJy4vb2JzaWRpYW4tbWV0YWRhdGEubWpzJztcblxuLyoqXG4gKiBCcm93c2VyIFVzZXItQWdlbnQgZm9yIGRvd25sb2FkaW5nIHJlbGVhc2UgYXNzZXRzIChDbG91ZGZsYXJlLWdhdGVkKS5cbiAqL1xuY29uc3QgRE9XTkxPQURfVVNFUl9BR0VOVCA9ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvODYuMC40MjQwLjE4MyBTYWZhcmkvNTM3LjM2JztcblxuLyoqXG5CYXNlIFVSTCBmb3IgYG9ic2lkaWFuLXJlbGVhc2VzYCByZWxlYXNlIGFzc2V0cyAoYC4uLi9kb3dubG9hZC92PHZlcj4vPGFzc2V0PmApLlxuICovXG5jb25zdCBSRUxFQVNFX0RPV05MT0FEX0JBU0VfVVJMID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9vYnNpZGlhbm1kL29ic2lkaWFuLXJlbGVhc2VzL3JlbGVhc2VzL2Rvd25sb2FkJztcblxuLyoqXG5HaXRIdWIgUkVTVCBlbmRwb2ludCBsaXN0aW5nIGEgcmVsZWFzZSdzIGFzc2V0cyBieSB0YWcgKGAuLi4vcmVsZWFzZXMvdGFncy92PHZlcj5gKS5cbiAqL1xuY29uc3QgUkVMRUFTRV9BUElfVEFHX1VSTCA9ICdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL29ic2lkaWFubWQvb2JzaWRpYW4tcmVsZWFzZXMvcmVsZWFzZXMvdGFncyc7XG5cbi8qKlxuVGhlIHN1YnNldCBvZiB0aGUgR2l0SHViIHJlbGVhc2UgQVBJIHJlc3BvbnNlIHRoaXMgbW9kdWxlIHJlYWRzLlxuICovXG5pbnRlcmZhY2UgR2l0SHViUmVsZWFzZSB7XG4gIC8qKlxuICBUaGUgcmVsZWFzZSdzIGRvd25sb2FkYWJsZSBhc3NldHMuXG4gICAqL1xuICByZWFkb25seSBhc3NldHM6IHJlYWRvbmx5IEdpdEh1YlJlbGVhc2VBc3NldFtdO1xufVxuXG4vKipcblRoZSBzdWJzZXQgb2YgYSBHaXRIdWIgcmVsZWFzZSdzIGFzc2V0IG9iamVjdCB0aGlzIG1vZHVsZSByZWFkcy5cbiAqL1xuaW50ZXJmYWNlIEdpdEh1YlJlbGVhc2VBc3NldCB7XG4gIC8qKlxuICBUaGUgYXNzZXQgZmlsZSBuYW1lLCBlLmcuIGBPYnNpZGlhbi4wLjE0LjUuZXhlYC5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbn1cblxuY29uc3QgQ0FDSEVfUk9PVCA9IGpvaW4odG1wZGlyKCksICdvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nJyk7XG5jb25zdCBTSEVMTF9DQUNIRV9ESVIgPSBqb2luKENBQ0hFX1JPT1QsICdzaGVsbC1jYWNoZScpO1xuY29uc3QgTUFDX1BMSVNUX1ZFUlNJT05fUEFUVEVSTiA9IC88a2V5PkNGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nPFxcL2tleT5cXHMqPHN0cmluZz4oPzx2ZXJzaW9uPltePF0rKTxcXC9zdHJpbmc+LztcblxuLyoqXG4gKiBBIHJlc29sdmVkIE9ic2lkaWFuIHNoZWxsIGV4ZWN1dGFibGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRTaGVsbCB7XG4gIC8qKlxuICBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBPYnNpZGlhbiBleGVjdXRhYmxlIHRvIGxhdW5jaC5cbiAgICovXG4gIHJlYWRvbmx5IGV4ZVBhdGg6IHN0cmluZztcblxuICAvKipcbiAgVGhlIHNoZWxsJ3MgdmVyc2lvbiwgb3IgYHVuZGVmaW5lZGAgaWYgaXQgY291bGQgbm90IGJlIGRldGVjdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIERldGVjdHMgdGhlIHZlcnNpb24gb2YgYW4gaW5zdGFsbGVkIE9ic2lkaWFuIHNoZWxsIGZyb20gaXRzIGV4ZWN1dGFibGUuXG4gKlxuICogLSBXaW5kb3dzOiB0aGUgZXhlY3V0YWJsZSdzIFBFIGBGaWxlVmVyc2lvbmAuXG4gKiAtIG1hY09TOiBgQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmdgIGZyb20gdGhlIGFwcCBidW5kbGUncyBgSW5mby5wbGlzdGAuXG4gKiAtIExpbnV4OiBiZXN0LWVmZm9ydCBwYXJzZSBmcm9tIHRoZSBleGVjdXRhYmxlIHBhdGggKG9mdGVuIGB1bmRlZmluZWRgKS5cbiAqXG4gKiBAcGFyYW0gZXhlUGF0aCAtIEFic29sdXRlIHBhdGggdG8gdGhlIE9ic2lkaWFuIGV4ZWN1dGFibGUuXG4gKiBAcmV0dXJucyBUaGUgYHgueS56YCB2ZXJzaW9uLCBvciBgdW5kZWZpbmVkYCBpZiBpdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdEluc3RhbGxlZFNoZWxsVmVyc2lvbihleGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIHJldHVybiBkZXRlY3RXaW5kb3dzRmlsZVZlcnNpb24oZXhlUGF0aCk7XG4gIH1cblxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcbiAgICByZXR1cm4gZGV0ZWN0TWFjQnVuZGxlVmVyc2lvbihleGVQYXRoKTtcbiAgfVxuXG4gIHJldHVybiBkZXRlY3RWZXJzaW9uRnJvbVBhdGgoZXhlUGF0aCk7XG59XG5cbi8qKlxuICogRW5zdXJlcyBhIHBvcnRhYmxlIE9ic2lkaWFuIHNoZWxsIGZvciB0aGUgZ2l2ZW4gdmVyc2lvbiBpcyBleHRyYWN0ZWQgaW50byB0aGVcbiAqIGNhY2hlLCBkb3dubG9hZGluZyBhbmQgZXh0cmFjdGluZyBpdHMgR2l0SHViIHJlbGVhc2UgYXNzZXQgaWYgbmVjZXNzYXJ5LlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gQSBjb25jcmV0ZSBwdWJsaWMgYHgueS56YCB2ZXJzaW9uLlxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGNhY2hlZCBzaGVsbCBleGVjdXRhYmxlLlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgYXNzZXQgY2Fubm90IGJlIGRvd25sb2FkZWQgb3IgZXh0cmFjdGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlU2hlbGxDYWNoZWQodmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qgc2hlbGxEaXJlY3RvcnkgPSBnZXRDYWNoZWRTaGVsbERpcmVjdG9yeSh2ZXJzaW9uKTtcbiAgY29uc3QgZXhlUGF0aCA9IGdldENhY2hlZFNoZWxsRXhlUGF0aChzaGVsbERpcmVjdG9yeSk7XG4gIGlmIChleGlzdHNTeW5jKGV4ZVBhdGgpKSB7XG4gICAgbG9nKGBbaW5zdGFsbGVyXSBVc2luZyBjYWNoZWQgc2hlbGwgZm9yICR7dmVyc2lvbn0uYCk7XG4gICAgcmV0dXJuIGV4ZVBhdGg7XG4gIH1cblxuICBta2RpclN5bmMoc2hlbGxEaXJlY3RvcnksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBjb25zdCBhc3NldFVybHMgPSBhd2FpdCByZXNvbHZlSW5zdGFsbGVyQXNzZXRVcmxzKHZlcnNpb24pO1xuICBjb25zdCBhc3NldFBhdGggPSBhd2FpdCBkb3dubG9hZEluc3RhbGxlckFzc2V0KGFzc2V0VXJscywgc2hlbGxEaXJlY3RvcnksIHZlcnNpb24pO1xuICBleHRyYWN0U2hlbGwoYXNzZXRQYXRoLCBzaGVsbERpcmVjdG9yeSk7XG4gIHJtU3luYyhhc3NldFBhdGgsIHsgZm9yY2U6IHRydWUgfSk7XG5cbiAgaWYgKCFleGlzdHNTeW5jKGV4ZVBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHRyYWN0ZWQgT2JzaWRpYW4gc2hlbGwgJHt2ZXJzaW9ufSBidXQgZXhlY3V0YWJsZSBub3QgZm91bmQgYXQgJHtleGVQYXRofS5gKTtcbiAgfVxuICBsb2coYFtpbnN0YWxsZXJdIEV4dHJhY3RlZCBzaGVsbCAke3ZlcnNpb259IC0+ICR7ZXhlUGF0aH1gKTtcbiAgcmV0dXJuIGV4ZVBhdGg7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2FjaGUgZGlyZWN0b3J5IGEgdmVyc2lvbidzIGV4dHJhY3RlZCBzaGVsbCBsaXZlcyBpbiAodGhlXG4gKiBkaXJlY3RvcnkgbWF5IG5vdCB5ZXQgZXhpc3QpLlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gQSBjb25jcmV0ZSBwdWJsaWMgYHgueS56YCB2ZXJzaW9uLlxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHNoZWxsIGNhY2hlIGRpcmVjdG9yeSBmb3IgdGhlIHZlcnNpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDYWNoZWRTaGVsbERpcmVjdG9yeSh2ZXJzaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihTSEVMTF9DQUNIRV9ESVIsIHZlcnNpb24pO1xufVxuXG4vKipcbiAqIFRocm93cyBhIGRlc2NyaXB0aXZlIGVycm9yIGlmIGEgcmVxdWlyZWQgY29tbWFuZCBpcyBub3Qgb24gYFBBVEhgLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgbmFtZS5cbiAqIEBwYXJhbSBoaW50IC0gQWN0aW9uYWJsZSBndWlkYW5jZSBhcHBlbmRlZCB0byB0aGUgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydENvbW1hbmRBdmFpbGFibGUoY29tbWFuZDogc3RyaW5nLCBoaW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgcHJvYmUgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gJ3doZXJlLmV4ZScgOiAnd2hpY2gnO1xuICBjb25zdCByZXN1bHQgPSBzcGF3blN5bmMocHJvYmUsIFtjb21tYW5kXSwgeyBzdGRpbzogJ2lnbm9yZScgfSk7XG4gIGlmIChyZXN1bHQuc3RhdHVzICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSZXF1aXJlZCBjb21tYW5kIFwiJHtjb21tYW5kfVwiIHdhcyBub3QgZm91bmQgb24gUEFUSC4gJHtoaW50fWApO1xuICB9XG59XG5cbi8qKlxuICogUmVhZHMgYENGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nYCBmcm9tIGEgbWFjT1MgYXBwIGJ1bmRsZSdzIGBJbmZvLnBsaXN0YC5cbiAqXG4gKiBAcGFyYW0gZXhlUGF0aCAtIFBhdGggdG8gYC4uLi9PYnNpZGlhbi5hcHAvQ29udGVudHMvTWFjT1MvT2JzaWRpYW5gLlxuICogQHJldHVybnMgVGhlIGB4LnkuemAgdmVyc2lvbiwgb3IgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGRldGVjdE1hY0J1bmRsZVZlcnNpb24oZXhlUGF0aDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjb250ZW50c0RpcmVjdG9yeSA9IGRpcm5hbWUoZGlybmFtZShleGVQYXRoKSk7XG4gICAgY29uc3QgcGxpc3QgPSByZWFkRmlsZVN5bmMoam9pbihjb250ZW50c0RpcmVjdG9yeSwgJ0luZm8ucGxpc3QnKSwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgbWF0Y2ggPSBNQUNfUExJU1RfVkVSU0lPTl9QQVRURVJOLmV4ZWMocGxpc3QpO1xuICAgIHJldHVybiBtYXRjaD8uZ3JvdXBzPy5bJ3ZlcnNpb24nXTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIEJlc3QtZWZmb3J0IHBhcnNlIG9mIGFuIGB4LnkuemAgdmVyc2lvbiBlbWJlZGRlZCBpbiBhIHBhdGguXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHBhdGggb3Igc3RyaW5nIHRvIHNjYW4uXG4gKiBAcmV0dXJucyBUaGUgZmlyc3QgYHgueS56YCBtYXRjaCwgb3IgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGRldGVjdFZlcnNpb25Gcm9tUGF0aCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbWF0Y2ggPSAvKD88dmVyc2lvbj5cXGQrXFwuXFxkK1xcLlxcZCspLy5leGVjKHZhbHVlKTtcbiAgcmV0dXJuIG1hdGNoPy5ncm91cHM/LlsndmVyc2lvbiddO1xufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBQRSBgRmlsZVZlcnNpb25gIG9mIGEgV2luZG93cyBleGVjdXRhYmxlIHZpYSBQb3dlclNoZWxsLlxuICpcbiAqIEBwYXJhbSBleGVQYXRoIC0gQWJzb2x1dGUgcGF0aCB0byB0aGUgZXhlY3V0YWJsZS5cbiAqIEByZXR1cm5zIFRoZSBgeC55LnpgIHZlcnNpb24sIG9yIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBkZXRlY3RXaW5kb3dzRmlsZVZlcnNpb24oZXhlUGF0aDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBvdXRwdXQgPSBleGVjRmlsZVN5bmMoXG4gICAgICAncG93ZXJzaGVsbCcsXG4gICAgICBbJy1Ob1Byb2ZpbGUnLCAnLUNvbW1hbmQnLCBgKEdldC1JdGVtIC1MaXRlcmFsUGF0aCAke0pTT04uc3RyaW5naWZ5KGV4ZVBhdGgpfSkuVmVyc2lvbkluZm8uRmlsZVZlcnNpb25gXSxcbiAgICAgIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfVxuICAgICk7XG4gICAgY29uc3QgdmVyc2lvbiA9IG91dHB1dC50cmltKCk7XG4gICAgcmV0dXJuIHZlcnNpb24ubGVuZ3RoID4gMCA/IHZlcnNpb24gOiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBEb3dubG9hZHMgYSBzaW5nbGUgcmVsZWFzZSBhc3NldCBmb3IgYSB2ZXJzaW9uIHRvIGEgZGVzdGluYXRpb24gZmlsZS5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gVGhlIGFzc2V0IGRvd25sb2FkIFVSTC5cbiAqIEBwYXJhbSBkZXN0aW5hdGlvbiAtIERlc3RpbmF0aW9uIGZpbGUgcGF0aC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIHJlcXVlc3QgZmFpbHMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkQXNzZXQodXJsOiBzdHJpbmcsIGRlc3RpbmF0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgbG9nKGBbaW5zdGFsbGVyXSBEb3dubG9hZGluZyBpbnN0YWxsZXIgZnJvbSAke3VybH0gLi4uYCk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7IGhlYWRlcnM6IHsgJ1VzZXItQWdlbnQnOiBET1dOTE9BRF9VU0VSX0FHRU5UIH0gfSk7XG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtTdHJpbmcocmVzcG9uc2Uuc3RhdHVzKX1gKTtcbiAgfVxuICB3cml0ZUZpbGVTeW5jKGRlc3RpbmF0aW9uLCBCdWZmZXIuZnJvbShhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpKSk7XG59XG5cbi8qKlxuICogRG93bmxvYWRzIHRoZSBmaXJzdCByZWFjaGFibGUgaW5zdGFsbGVyIGFzc2V0IGZyb20gYW4gb3JkZXJlZCBsaXN0IG9mXG4gKiBjYW5kaWRhdGUgVVJMcywgcmV0dXJuaW5nIHRoZSBwYXRoIGl0IHdhcyBzYXZlZCB0by5cbiAqXG4gKiBAcGFyYW0gdXJscyAtIENhbmRpZGF0ZSBhc3NldCBVUkxzLCBpbiBwcmlvcml0eSBvcmRlci5cbiAqIEBwYXJhbSBzaGVsbERpcmVjdG9yeSAtIFRoZSBkZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKiBAcGFyYW0gdmVyc2lvbiAtIFRoZSByZWxlYXNlIHZlcnNpb24gKGZvciBlcnJvciBtZXNzYWdlcykuXG4gKiBAcmV0dXJucyBUaGUgZG93bmxvYWRlZCBhc3NldCdzIHBhdGguXG4gKiBAdGhyb3dzIEVycm9yIGlmIG5vbmUgb2YgdGhlIGNhbmRpZGF0ZXMgY2FuIGJlIGRvd25sb2FkZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkSW5zdGFsbGVyQXNzZXQodXJsczogc3RyaW5nW10sIHNoZWxsRGlyZWN0b3J5OiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCB1cmwgb2YgdXJscykge1xuICAgIGNvbnN0IGFzc2V0UGF0aCA9IGpvaW4oc2hlbGxEaXJlY3RvcnksIGJhc2VuYW1lKHVybCkpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBkb3dubG9hZEFzc2V0KHVybCwgYXNzZXRQYXRoKTtcbiAgICAgIHJldHVybiBhc3NldFBhdGg7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9ycy5wdXNoKGAke3VybH06ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWApO1xuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgRmFpbGVkIHRvIGRvd25sb2FkIE9ic2lkaWFuIGluc3RhbGxlciAke3ZlcnNpb259LiBBdHRlbXB0czogJHtlcnJvcnMuam9pbignOyAnKX0uIGBcbiAgICAgICsgJ0NhdGFseXN0L2JldGEgdmVyc2lvbnMgaGF2ZSBubyBwdWJsaWMgaW5zdGFsbGVyIFx1MjAxNCBwaW4gYW4gYXNhciB2ZXJzaW9uIG9uIGEgcHVibGljL2luc3RhbGxlZCBzaGVsbCBpbnN0ZWFkLidcbiAgKTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBhIExpbnV4IGAudGFyLmd6YCBwb3J0YWJsZSBidWlsZC5cbiAqXG4gKiBAcGFyYW0gYXNzZXRQYXRoIC0gUGF0aCB0byB0aGUgZG93bmxvYWRlZCBgLnRhci5nemAuXG4gKiBAcGFyYW0gc2hlbGxEaXJlY3RvcnkgLSBEZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RMaW51eFNoZWxsKGFzc2V0UGF0aDogc3RyaW5nLCBzaGVsbERpcmVjdG9yeTogc3RyaW5nKTogdm9pZCB7XG4gIHJ1bigndGFyJywgWyd4emYnLCBhc3NldFBhdGgsICctQycsIHNoZWxsRGlyZWN0b3J5LCAnLS1zdHJpcC1jb21wb25lbnRzPTEnXSk7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgYSBtYWNPUyBgLmRtZ2AgYnkgbW91bnRpbmcgaXQgYW5kIGNvcHlpbmcgdGhlIGFwcCBidW5kbGUuXG4gKlxuICogQHBhcmFtIGFzc2V0UGF0aCAtIFBhdGggdG8gdGhlIGRvd25sb2FkZWQgYC5kbWdgLlxuICogQHBhcmFtIHNoZWxsRGlyZWN0b3J5IC0gRGVzdGluYXRpb24gc2hlbGwgZGlyZWN0b3J5LlxuICovXG5mdW5jdGlvbiBleHRyYWN0TWFjU2hlbGwoYXNzZXRQYXRoOiBzdHJpbmcsIHNoZWxsRGlyZWN0b3J5OiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgbW91bnRQb2ludCA9IGpvaW4oc2hlbGxEaXJlY3RvcnksICdfX21udCcpO1xuICBta2RpclN5bmMobW91bnRQb2ludCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIHJ1bignaGRpdXRpbCcsIFsnYXR0YWNoJywgJy1ub2Jyb3dzZScsICctbW91bnRwb2ludCcsIG1vdW50UG9pbnQsIGFzc2V0UGF0aF0pO1xuICB0cnkge1xuICAgIHJ1bignY3AnLCBbJy1SJywgam9pbihtb3VudFBvaW50LCAnT2JzaWRpYW4uYXBwJyksIHNoZWxsRGlyZWN0b3J5XSk7XG4gIH0gZmluYWxseSB7XG4gICAgcnVuKCdoZGl1dGlsJywgWydkZXRhY2gnLCBtb3VudFBvaW50XSk7XG4gIH1cbiAgcm1TeW5jKG1vdW50UG9pbnQsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBhIGRvd25sb2FkZWQgaW5zdGFsbGVyIGFzc2V0IGludG8gYSBzaGVsbCBkaXJlY3RvcnksIHBlciBwbGF0Zm9ybS5cbiAqXG4gKiBAcGFyYW0gYXNzZXRQYXRoIC0gVGhlIGRvd25sb2FkZWQgYXNzZXQgcGF0aC5cbiAqIEBwYXJhbSBzaGVsbERpcmVjdG9yeSAtIFRoZSBkZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RTaGVsbChhc3NldFBhdGg6IHN0cmluZywgc2hlbGxEaXJlY3Rvcnk6IHN0cmluZyk6IHZvaWQge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIGV4dHJhY3RXaW5kb3dzU2hlbGwoYXNzZXRQYXRoLCBzaGVsbERpcmVjdG9yeSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgZXh0cmFjdE1hY1NoZWxsKGFzc2V0UGF0aCwgc2hlbGxEaXJlY3RvcnkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGV4dHJhY3RMaW51eFNoZWxsKGFzc2V0UGF0aCwgc2hlbGxEaXJlY3RvcnkpO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIGEgV2luZG93cyBOU0lTIGluc3RhbGxlcidzIGlubmVyIGFwcCBwYXlsb2FkIHZpYSA3LVppcC5cbiAqXG4gKiBUaGUgTlNJUyBpbnN0YWxsZXIgYC5leGVgIGNvbnRhaW5zIGAkUExVR0lOU0RJUi9hcHAtNjQuN3pgLCB3aGljaCBob2xkcyB0aGVcbiAqIHBvcnRhYmxlIGFwcCAobWlycm9ycyBob3cgdGhlIHNjb29wIG1hbmlmZXN0IGluc3RhbGxzIE9ic2lkaWFuKS5cbiAqXG4gKiBAcGFyYW0gYXNzZXRQYXRoIC0gUGF0aCB0byB0aGUgZG93bmxvYWRlZCBgLmV4ZWAuXG4gKiBAcGFyYW0gc2hlbGxEaXJlY3RvcnkgLSBEZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RXaW5kb3dzU2hlbGwoYXNzZXRQYXRoOiBzdHJpbmcsIHNoZWxsRGlyZWN0b3J5OiBzdHJpbmcpOiB2b2lkIHtcbiAgYXNzZXJ0Q29tbWFuZEF2YWlsYWJsZSgnN3onLCAnSW5zdGFsbCA3LVppcCAoZS5nLiBgc2Nvb3AgaW5zdGFsbCA3emlwYCkgdG8gZXh0cmFjdCBhIHBpbm5lZCBPYnNpZGlhbiBpbnN0YWxsZXIuJyk7XG4gIGNvbnN0IG5zaXNFeHRyYWN0RGlyZWN0b3J5ID0gam9pbihzaGVsbERpcmVjdG9yeSwgJ19fbnNpcycpO1xuICBydW4oJzd6JywgWyd4JywgJy15JywgYC1vJHtuc2lzRXh0cmFjdERpcmVjdG9yeX1gLCBhc3NldFBhdGhdKTtcbiAgY29uc3QgaW5uZXJBcmNoaXZlID0gam9pbihuc2lzRXh0cmFjdERpcmVjdG9yeSwgJyRQTFVHSU5TRElSJywgJ2FwcC02NC43eicpO1xuICBydW4oJzd6JywgWyd4JywgJy15JywgYC1vJHtzaGVsbERpcmVjdG9yeX1gLCBpbm5lckFyY2hpdmVdKTtcbiAgcm1TeW5jKG5zaXNFeHRyYWN0RGlyZWN0b3J5LCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG59XG5cbi8qKlxuICogRmV0Y2hlcyBhIHJlbGVhc2UncyBhc3NldCBuYW1lcyBmcm9tIHRoZSBHaXRIdWIgQVBJLlxuICpcbiAqIFJlYWRzIGEgYEdJVEhVQl9UT0tFTmAgKG9yIGBHSF9UT0tFTmApIGZyb20gdGhlIGVudmlyb25tZW50IGFuZCBzZW5kcyBpdCBhcyBhXG4gKiBiZWFyZXIgdG9rZW4gd2hlbiBwcmVzZW50LCB0byBsaWZ0IHRoZSBhbm9ueW1vdXMgcmF0ZSBsaW1pdCB0aGF0IG90aGVyd2lzZVxuICogcmV0dXJucyBIVFRQIDQwMyBvbiBzaGFyZWQgQ0kgcnVubmVyIElQcy5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiAtIFRoZSByZWxlYXNlIHZlcnNpb24gKHRhZyBgdjx2ZXJzaW9uPmApLlxuICogQHJldHVybnMgVGhlIGFzc2V0IG5hbWVzLCBvciBgdW5kZWZpbmVkYCBpZiB0aGUgQVBJIGlzIHVuYXZhaWxhYmxlLlxuICovXG5hc3luYyBmdW5jdGlvbiBmZXRjaFJlbGVhc2VBc3NldE5hbWVzKHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10gfCB1bmRlZmluZWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoeyAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIranNvbicsICdVc2VyLUFnZW50JzogRE9XTkxPQURfVVNFUl9BR0VOVCB9KTtcbiAgICAvLyBTZW5kIGEgYmVhcmVyIHRva2VuIHdoZW4gb25lIGlzIGF2YWlsYWJsZSAoZS5nLiBHSVRIVUJfVE9LRU4gb24gQ0kpLlxuICAgIC8vIFdpdGhvdXQgaXQgdGhlIGFzc2V0LWxpc3QgQVBJIGlzIGxpbWl0ZWQgdG8gdGhlIGFub255bW91cyBxdW90YS5cbiAgICAvLyBUaGF0IHF1b3RhIHJldHVybnMgSFRUUCA0MDMgb24gc2hhcmVkIENJIHJ1bm5lciBJUHMgYW5kIGZvcmNlcyB0aGUgZmFsbGJhY2suXG4gICAgY29uc3QgdG9rZW4gPSBwcm9jZXNzLmVudlsnR0lUSFVCX1RPS0VOJ10gPz8gcHJvY2Vzcy5lbnZbJ0dIX1RPS0VOJ107XG4gICAgaWYgKHRva2VuKSB7XG4gICAgICBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIGBCZWFyZXIgJHt0b2tlbn1gKTtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtSRUxFQVNFX0FQSV9UQUdfVVJMfS92JHt2ZXJzaW9ufWAsIHsgaGVhZGVycyB9KTtcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICBsb2coYFtpbnN0YWxsZXJdIFJlbGVhc2UgQVBJIGZvciAke3ZlcnNpb259IHJldHVybmVkIEhUVFAgJHtTdHJpbmcocmVzcG9uc2Uuc3RhdHVzKX07IGZhbGxpbmcgYmFjayB0byB0ZW1wbGF0ZWQgYXNzZXQgbmFtZXMuYCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCByZWxlYXNlID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIEdpdEh1YlJlbGVhc2U7XG4gICAgcmV0dXJuIHJlbGVhc2UuYXNzZXRzLm1hcCgoYXNzZXQpID0+IGFzc2V0Lm5hbWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZyhgW2luc3RhbGxlcl0gUmVsZWFzZSBBUEkgZm9yICR7dmVyc2lvbn0gdW5hdmFpbGFibGUgKCR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfSk7IGZhbGxpbmcgYmFjayB0byB0ZW1wbGF0ZWQgYXNzZXQgbmFtZXMuYCk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGV4cGVjdGVkIGNhY2hlZCBzaGVsbCBleGVjdXRhYmxlIHBhdGggZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtLlxuICpcbiAqIEBwYXJhbSBzaGVsbERpcmVjdG9yeSAtIFRoZSBzaGVsbCBjYWNoZSBkaXJlY3RvcnkgZm9yIGEgdmVyc2lvbi5cbiAqIEByZXR1cm5zIFRoZSBleGVjdXRhYmxlIHBhdGguXG4gKi9cbmZ1bmN0aW9uIGdldENhY2hlZFNoZWxsRXhlUGF0aChzaGVsbERpcmVjdG9yeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICByZXR1cm4gam9pbihzaGVsbERpcmVjdG9yeSwgJ09ic2lkaWFuLmV4ZScpO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgcmV0dXJuIGpvaW4oc2hlbGxEaXJlY3RvcnksICdPYnNpZGlhbi5hcHAnLCAnQ29udGVudHMnLCAnTWFjT1MnLCAnT2JzaWRpYW4nKTtcbiAgfVxuXG4gIHJldHVybiBqb2luKHNoZWxsRGlyZWN0b3J5LCAnb2JzaWRpYW4nKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgb3JkZXJlZCBpbnN0YWxsZXIgYXNzZXQgZG93bmxvYWQgVVJMcyB0byB0cnkgZm9yIGEgdmVyc2lvbi5cbiAqXG4gKiBUaGUgdmVyc2lvbidzIGV4YWN0IGluc3RhbGxlciBVUkwgYmFrZWQgaW50byB0aGUgYG1ldGFkYXRhLmpzb25gIGNhdGFsb2dcbiAqIChmcm9tIHVwc3RyZWFtIGBvYnNpZGlhbi12ZXJzaW9ucy5qc29uYCkgaXMgdXNlZCBkaXJlY3RseSB3aGVuIHByZXNlbnQsXG4gKiBhdm9pZGluZyBhbnkgbmV0d29yayBsb29rdXAuIE90aGVyd2lzZSB0aGUgcmVsZWFzZSdzIHJlYWwgYXNzZXQgbGlzdCBpc1xuICogcXVlcmllZCBzbyB0aGUgcGxhdGZvcm0tY29ycmVjdCBhc3NldCBpcyBwaWNrZWQgcmVnYXJkbGVzcyBvZiB0aGUgaGlzdG9yaWNhbFxuICogZG90LXZzLWh5cGhlbiBuYW1pbmc7IGlmIHRoYXQgY2FsbCB0b28gaXMgdW5hdmFpbGFibGUgaXQgZmFsbHMgYmFjayB0byB0cnlpbmdcbiAqIGJvdGggdGVtcGxhdGVkIHNlcGFyYXRvciBmb3Jtcy5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiAtIFRoZSBjb25jcmV0ZSBgeC55LnpgIHZlcnNpb24uXG4gKiBAcmV0dXJucyBDYW5kaWRhdGUgYXNzZXQgVVJMcywgaW4gcHJpb3JpdHkgb3JkZXIuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVJbnN0YWxsZXJBc3NldFVybHModmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBiYWtlZFVybCA9IHNlbGVjdEluc3RhbGxlckRvd25sb2FkVXJsKHsgZG93bmxvYWRzOiBnZXRWZXJzaW9uTWV0YWRhdGEodmVyc2lvbik/LmRvd25sb2FkcywgcGxhdGZvcm06IHByb2Nlc3MucGxhdGZvcm0gfSk7XG4gIGlmIChiYWtlZFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIFtiYWtlZFVybF07XG4gIH1cblxuICBjb25zdCBhc3NldE5hbWVzID0gYXdhaXQgZmV0Y2hSZWxlYXNlQXNzZXROYW1lcyh2ZXJzaW9uKTtcbiAgaWYgKGFzc2V0TmFtZXMpIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHNlbGVjdEluc3RhbGxlckFzc2V0TmFtZSh7IGFzc2V0TmFtZXMsIHBsYXRmb3JtOiBwcm9jZXNzLnBsYXRmb3JtLCB2ZXJzaW9uIH0pO1xuICAgIGlmIChzZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gW2Ake1JFTEVBU0VfRE9XTkxPQURfQkFTRV9VUkx9L3Yke3ZlcnNpb259LyR7c2VsZWN0ZWR9YF07XG4gICAgfVxuICAgIGxvZyhgW2luc3RhbGxlcl0gTm8gaW5zdGFsbGVyIGFzc2V0IG1hdGNoZWQgZm9yICR7dmVyc2lvbn07IGZhbGxpbmcgYmFjayB0byB0ZW1wbGF0ZWQgYXNzZXQgbmFtZXMuYCk7XG4gIH1cblxuICByZXR1cm4gYnVpbGRJbnN0YWxsZXJBc3NldE5hbWVDYW5kaWRhdGVzKHsgcGxhdGZvcm06IHByb2Nlc3MucGxhdGZvcm0sIHZlcnNpb24gfSlcbiAgICAubWFwKChuYW1lKSA9PiBgJHtSRUxFQVNFX0RPV05MT0FEX0JBU0VfVVJMfS92JHt2ZXJzaW9ufS8ke25hbWV9YCk7XG59XG5cbi8qKlxuICogUnVucyBhIGNvbW1hbmQgc3luY2hyb25vdXNseSwgdGhyb3dpbmcgb24gYSBub24temVybyBleGl0LlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQuXG4gKiBAcGFyYW0gY29tbWFuZEFyZ3VtZW50cyAtIFRoZSBhcmd1bWVudHMuXG4gKi9cbmZ1bmN0aW9uIHJ1bihjb21tYW5kOiBzdHJpbmcsIGNvbW1hbmRBcmd1bWVudHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gIGNvbnN0IHJlc3VsdCA9IHNwYXduU3luYyhjb21tYW5kLCBjb21tYW5kQXJndW1lbnRzLCB7IHN0ZGlvOiAnaWdub3JlJyB9KTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvbW1hbmQgZmFpbGVkOiAke2NvbW1hbmR9ICR7Y29tbWFuZEFyZ3VtZW50cy5tYXAoKGFyZ3VtZW50KSA9PiBiYXNlbmFtZShhcmd1bWVudCkpLmpvaW4oJyAnKX0gKGV4aXQgJHtTdHJpbmcocmVzdWx0LnN0YXR1cyl9KWApO1xuICB9XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiQUFtQkE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsY0FBYztBQUN2QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxPQUFPLGFBQWE7QUFFcEI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxXQUFXO0FBQ3BCLFNBQVMsMEJBQTBCO0FBS25DLE1BQU0sc0JBQXNCO0FBSzVCLE1BQU0sNEJBQTRCO0FBS2xDLE1BQU0sc0JBQXNCO0FB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
|
|
206
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWluc3RhbGxlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEludGVncmF0aW9uLXRpbWUgaGVscGVycyBmb3IgcmVzb2x2aW5nIHRoZSBPYnNpZGlhbiAqKnNoZWxsKiogKHRoZSBFbGVjdHJvblxuICogcnVudGltZSAvIGluc3RhbGxlciBidWlsZCkgdG8gbGF1bmNoLlxuICpcbiAqIEJ5IGRlZmF1bHQgdGhlIGhhcm5lc3MgdXNlcyB0aGUgaW5zdGFsbGVkIHNoZWxsLiBXaGVuIGEgc3BlY2lmaWMgaW5zdGFsbGVyXG4gKiB2ZXJzaW9uIGlzIHJlcXVlc3RlZCwgaXQgZG93bmxvYWRzIHRoYXQgdmVyc2lvbidzIEdpdEh1YiByZWxlYXNlIGFzc2V0IGFuZFxuICogZXh0cmFjdHMgYSBwb3J0YWJsZSBzaGVsbCBpbnRvIGEgY2FjaGUsIHJldHVybmluZyB0aGUgZXhlY3V0YWJsZSB0byBsYXVuY2guXG4gKlxuICogR2l0SHViIHJlbGVhc2UgYXNzZXRzIGV4aXN0IGZvciAqKnB1YmxpYyoqIHJlbGVhc2VzIG9ubHk7IGNhdGFseXN0IChiZXRhKVxuICogYnVpbGRzIHB1Ymxpc2ggb25seSB0aGUgYXNhciwgc28gaW5zdGFsbGVyLXBpbm5pbmcgc3VwcG9ydHMgcHVibGljIHZlcnNpb25zLlxuICogVGhlIGV4dHJhY3RlZCBzaGVsbCdzIGJ1bmRsZWQgYHJlc291cmNlcy9vYnNpZGlhbi5hc2FyYCBpcyB0aGF0IHZlcnNpb24sIHNvXG4gKiBwaW5uaW5nIHRoZSBpbnN0YWxsZXIgaXMgaG93IHlvdSBydW4gYSB2ZXJzaW9uICoqb2xkZXIqKiB0aGFuIHRoZSBpbnN0YWxsZWRcbiAqIHNoZWxsIChhc2FyLXN3YXAgaXMgdXBncmFkZS1vbmx5IFx1MjAxNCBzZWUgYG9ic2lkaWFuLXZlcnNpb24tc3dpdGNoLnRzYCkuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEludGVncmF0aW9uLXRpbWUgZG93bmxvYWQvZXh0cmFjdGlvbiBnbHVlIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQge1xuICBleGVjRmlsZVN5bmMsXG4gIHNwYXduU3luY1xufSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHtcbiAgZXhpc3RzU3luYyxcbiAgbWtkaXJTeW5jLFxuICByZWFkRmlsZVN5bmMsXG4gIHJtU3luYyxcbiAgd3JpdGVGaWxlU3luY1xufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHtcbiAgYmFzZW5hbWUsXG4gIGRpcm5hbWUsXG4gIGpvaW5cbn0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB7XG4gIGJ1aWxkSW5zdGFsbGVyQXNzZXROYW1lQ2FuZGlkYXRlcyxcbiAgc2VsZWN0SW5zdGFsbGVyQXNzZXROYW1lLFxuICBzZWxlY3RJbnN0YWxsZXJEb3dubG9hZFVybFxufSBmcm9tICcuL2luc3RhbGxlci1hc3NldC5tanMnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cubWpzJztcbmltcG9ydCB7IGdldFZlcnNpb25NZXRhZGF0YSB9IGZyb20gJy4vb2JzaWRpYW4tbWV0YWRhdGEubWpzJztcblxuLyoqXG4gKiBCcm93c2VyIFVzZXItQWdlbnQgZm9yIGRvd25sb2FkaW5nIHJlbGVhc2UgYXNzZXRzIChDbG91ZGZsYXJlLWdhdGVkKS5cbiAqL1xuY29uc3QgRE9XTkxPQURfVVNFUl9BR0VOVCA9ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvODYuMC40MjQwLjE4MyBTYWZhcmkvNTM3LjM2JztcblxuLyoqXG5CYXNlIFVSTCBmb3IgYG9ic2lkaWFuLXJlbGVhc2VzYCByZWxlYXNlIGFzc2V0cyAoYC4uLi9kb3dubG9hZC92PHZlcj4vPGFzc2V0PmApLlxuICovXG5jb25zdCBSRUxFQVNFX0RPV05MT0FEX0JBU0VfVVJMID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9vYnNpZGlhbm1kL29ic2lkaWFuLXJlbGVhc2VzL3JlbGVhc2VzL2Rvd25sb2FkJztcblxuLyoqXG5HaXRIdWIgUkVTVCBlbmRwb2ludCBsaXN0aW5nIGEgcmVsZWFzZSdzIGFzc2V0cyBieSB0YWcgKGAuLi4vcmVsZWFzZXMvdGFncy92PHZlcj5gKS5cbiAqL1xuY29uc3QgUkVMRUFTRV9BUElfVEFHX1VSTCA9ICdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL29ic2lkaWFubWQvb2JzaWRpYW4tcmVsZWFzZXMvcmVsZWFzZXMvdGFncyc7XG5cbi8qKlxuVGhlIHN1YnNldCBvZiB0aGUgR2l0SHViIHJlbGVhc2UgQVBJIHJlc3BvbnNlIHRoaXMgbW9kdWxlIHJlYWRzLlxuICovXG5pbnRlcmZhY2UgR2l0SHViUmVsZWFzZSB7XG4gIC8qKlxuICBUaGUgcmVsZWFzZSdzIGRvd25sb2FkYWJsZSBhc3NldHMuXG4gICAqL1xuICByZWFkb25seSBhc3NldHM6IHJlYWRvbmx5IEdpdEh1YlJlbGVhc2VBc3NldFtdO1xufVxuXG4vKipcblRoZSBzdWJzZXQgb2YgYSBHaXRIdWIgcmVsZWFzZSdzIGFzc2V0IG9iamVjdCB0aGlzIG1vZHVsZSByZWFkcy5cbiAqL1xuaW50ZXJmYWNlIEdpdEh1YlJlbGVhc2VBc3NldCB7XG4gIC8qKlxuICBUaGUgYXNzZXQgZmlsZSBuYW1lLCBlLmcuIGBPYnNpZGlhbi4wLjE0LjUuZXhlYC5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbn1cblxuY29uc3QgQ0FDSEVfUk9PVCA9IGpvaW4odG1wZGlyKCksICdvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nJyk7XG5jb25zdCBTSEVMTF9DQUNIRV9ESVIgPSBqb2luKENBQ0hFX1JPT1QsICdzaGVsbC1jYWNoZScpO1xuY29uc3QgTUFDX1BMSVNUX1ZFUlNJT05fUEFUVEVSTiA9IC88a2V5PkNGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nPFxcL2tleT5cXHMqPHN0cmluZz4oPzx2ZXJzaW9uPltePF0rKTxcXC9zdHJpbmc+LztcblxuLyoqXG4gKiBBIHJlc29sdmVkIE9ic2lkaWFuIHNoZWxsIGV4ZWN1dGFibGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRTaGVsbCB7XG4gIC8qKlxuICBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBPYnNpZGlhbiBleGVjdXRhYmxlIHRvIGxhdW5jaC5cbiAgICovXG4gIHJlYWRvbmx5IGV4ZVBhdGg6IHN0cmluZztcblxuICAvKipcbiAgVGhlIHNoZWxsJ3MgdmVyc2lvbiwgb3IgYHVuZGVmaW5lZGAgaWYgaXQgY291bGQgbm90IGJlIGRldGVjdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIERldGVjdHMgdGhlIHZlcnNpb24gb2YgYW4gaW5zdGFsbGVkIE9ic2lkaWFuIHNoZWxsIGZyb20gaXRzIGV4ZWN1dGFibGUuXG4gKlxuICogLSBXaW5kb3dzOiB0aGUgZXhlY3V0YWJsZSdzIFBFIGBGaWxlVmVyc2lvbmAuXG4gKiAtIG1hY09TOiBgQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmdgIGZyb20gdGhlIGFwcCBidW5kbGUncyBgSW5mby5wbGlzdGAuXG4gKiAtIExpbnV4OiBiZXN0LWVmZm9ydCBwYXJzZSBmcm9tIHRoZSBleGVjdXRhYmxlIHBhdGggKG9mdGVuIGB1bmRlZmluZWRgKS5cbiAqXG4gKiBAcGFyYW0gZXhlUGF0aCAtIEFic29sdXRlIHBhdGggdG8gdGhlIE9ic2lkaWFuIGV4ZWN1dGFibGUuXG4gKiBAcmV0dXJucyBUaGUgYHgueS56YCB2ZXJzaW9uLCBvciBgdW5kZWZpbmVkYCBpZiBpdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdEluc3RhbGxlZFNoZWxsVmVyc2lvbihleGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIHJldHVybiBkZXRlY3RXaW5kb3dzRmlsZVZlcnNpb24oZXhlUGF0aCk7XG4gIH1cblxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcbiAgICByZXR1cm4gZGV0ZWN0TWFjQnVuZGxlVmVyc2lvbihleGVQYXRoKTtcbiAgfVxuXG4gIHJldHVybiBkZXRlY3RWZXJzaW9uRnJvbVBhdGgoZXhlUGF0aCk7XG59XG5cbi8qKlxuICogRW5zdXJlcyBhIHBvcnRhYmxlIE9ic2lkaWFuIHNoZWxsIGZvciB0aGUgZ2l2ZW4gdmVyc2lvbiBpcyBleHRyYWN0ZWQgaW50byB0aGVcbiAqIGNhY2hlLCBkb3dubG9hZGluZyBhbmQgZXh0cmFjdGluZyBpdHMgR2l0SHViIHJlbGVhc2UgYXNzZXQgaWYgbmVjZXNzYXJ5LlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gQSBjb25jcmV0ZSBwdWJsaWMgYHgueS56YCB2ZXJzaW9uLlxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGNhY2hlZCBzaGVsbCBleGVjdXRhYmxlLlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgYXNzZXQgY2Fubm90IGJlIGRvd25sb2FkZWQgb3IgZXh0cmFjdGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlU2hlbGxDYWNoZWQodmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qgc2hlbGxEaXJlY3RvcnkgPSBnZXRDYWNoZWRTaGVsbERpcmVjdG9yeSh2ZXJzaW9uKTtcbiAgY29uc3QgZXhlUGF0aCA9IGdldENhY2hlZFNoZWxsRXhlUGF0aChzaGVsbERpcmVjdG9yeSk7XG4gIGlmIChleGlzdHNTeW5jKGV4ZVBhdGgpKSB7XG4gICAgbG9nKGBbaW5zdGFsbGVyXSBVc2luZyBjYWNoZWQgc2hlbGwgZm9yICR7dmVyc2lvbn0uYCk7XG4gICAgcmV0dXJuIGV4ZVBhdGg7XG4gIH1cblxuICBta2RpclN5bmMoc2hlbGxEaXJlY3RvcnksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBjb25zdCBhc3NldFVybHMgPSBhd2FpdCByZXNvbHZlSW5zdGFsbGVyQXNzZXRVcmxzKHZlcnNpb24pO1xuICBjb25zdCBhc3NldFBhdGggPSBhd2FpdCBkb3dubG9hZEluc3RhbGxlckFzc2V0KGFzc2V0VXJscywgc2hlbGxEaXJlY3RvcnksIHZlcnNpb24pO1xuICBleHRyYWN0U2hlbGwoYXNzZXRQYXRoLCBzaGVsbERpcmVjdG9yeSk7XG4gIHJtU3luYyhhc3NldFBhdGgsIHsgZm9yY2U6IHRydWUgfSk7XG5cbiAgaWYgKCFleGlzdHNTeW5jKGV4ZVBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHRyYWN0ZWQgT2JzaWRpYW4gc2hlbGwgJHt2ZXJzaW9ufSBidXQgZXhlY3V0YWJsZSBub3QgZm91bmQgYXQgJHtleGVQYXRofS5gKTtcbiAgfVxuICBsb2coYFtpbnN0YWxsZXJdIEV4dHJhY3RlZCBzaGVsbCAke3ZlcnNpb259IC0+ICR7ZXhlUGF0aH1gKTtcbiAgcmV0dXJuIGV4ZVBhdGg7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2FjaGUgZGlyZWN0b3J5IGEgdmVyc2lvbidzIGV4dHJhY3RlZCBzaGVsbCBsaXZlcyBpbiAodGhlXG4gKiBkaXJlY3RvcnkgbWF5IG5vdCB5ZXQgZXhpc3QpLlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gQSBjb25jcmV0ZSBwdWJsaWMgYHgueS56YCB2ZXJzaW9uLlxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHNoZWxsIGNhY2hlIGRpcmVjdG9yeSBmb3IgdGhlIHZlcnNpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDYWNoZWRTaGVsbERpcmVjdG9yeSh2ZXJzaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihTSEVMTF9DQUNIRV9ESVIsIHZlcnNpb24pO1xufVxuXG4vKipcbiAqIFRocm93cyBhIGRlc2NyaXB0aXZlIGVycm9yIGlmIGEgcmVxdWlyZWQgY29tbWFuZCBpcyBub3Qgb24gYFBBVEhgLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgbmFtZS5cbiAqIEBwYXJhbSBoaW50IC0gQWN0aW9uYWJsZSBndWlkYW5jZSBhcHBlbmRlZCB0byB0aGUgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydENvbW1hbmRBdmFpbGFibGUoY29tbWFuZDogc3RyaW5nLCBoaW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgcHJvYmUgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gJ3doZXJlLmV4ZScgOiAnd2hpY2gnO1xuICBjb25zdCByZXN1bHQgPSBzcGF3blN5bmMocHJvYmUsIFtjb21tYW5kXSwgeyBzdGRpbzogJ2lnbm9yZScgfSk7XG4gIGlmIChyZXN1bHQuc3RhdHVzICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSZXF1aXJlZCBjb21tYW5kIFwiJHtjb21tYW5kfVwiIHdhcyBub3QgZm91bmQgb24gUEFUSC4gJHtoaW50fWApO1xuICB9XG59XG5cbi8qKlxuICogUmVhZHMgYENGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nYCBmcm9tIGEgbWFjT1MgYXBwIGJ1bmRsZSdzIGBJbmZvLnBsaXN0YC5cbiAqXG4gKiBAcGFyYW0gZXhlUGF0aCAtIFBhdGggdG8gYC4uLi9PYnNpZGlhbi5hcHAvQ29udGVudHMvTWFjT1MvT2JzaWRpYW5gLlxuICogQHJldHVybnMgVGhlIGB4LnkuemAgdmVyc2lvbiwgb3IgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGRldGVjdE1hY0J1bmRsZVZlcnNpb24oZXhlUGF0aDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjb250ZW50c0RpcmVjdG9yeSA9IGRpcm5hbWUoZGlybmFtZShleGVQYXRoKSk7XG4gICAgY29uc3QgcGxpc3QgPSByZWFkRmlsZVN5bmMoam9pbihjb250ZW50c0RpcmVjdG9yeSwgJ0luZm8ucGxpc3QnKSwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgbWF0Y2ggPSBNQUNfUExJU1RfVkVSU0lPTl9QQVRURVJOLmV4ZWMocGxpc3QpO1xuICAgIHJldHVybiBtYXRjaD8uZ3JvdXBzPy5bJ3ZlcnNpb24nXTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIEJlc3QtZWZmb3J0IHBhcnNlIG9mIGFuIGB4LnkuemAgdmVyc2lvbiBlbWJlZGRlZCBpbiBhIHBhdGguXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHBhdGggb3Igc3RyaW5nIHRvIHNjYW4uXG4gKiBAcmV0dXJucyBUaGUgZmlyc3QgYHgueS56YCBtYXRjaCwgb3IgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGRldGVjdFZlcnNpb25Gcm9tUGF0aCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbWF0Y2ggPSAvKD88dmVyc2lvbj5cXGQrXFwuXFxkK1xcLlxcZCspLy5leGVjKHZhbHVlKTtcbiAgcmV0dXJuIG1hdGNoPy5ncm91cHM/LlsndmVyc2lvbiddO1xufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBQRSBgRmlsZVZlcnNpb25gIG9mIGEgV2luZG93cyBleGVjdXRhYmxlIHZpYSBQb3dlclNoZWxsLlxuICpcbiAqIEBwYXJhbSBleGVQYXRoIC0gQWJzb2x1dGUgcGF0aCB0byB0aGUgZXhlY3V0YWJsZS5cbiAqIEByZXR1cm5zIFRoZSBgeC55LnpgIHZlcnNpb24sIG9yIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBkZXRlY3RXaW5kb3dzRmlsZVZlcnNpb24oZXhlUGF0aDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBvdXRwdXQgPSBleGVjRmlsZVN5bmMoXG4gICAgICAncG93ZXJzaGVsbCcsXG4gICAgICBbJy1Ob1Byb2ZpbGUnLCAnLUNvbW1hbmQnLCBgKEdldC1JdGVtIC1MaXRlcmFsUGF0aCAke0pTT04uc3RyaW5naWZ5KGV4ZVBhdGgpfSkuVmVyc2lvbkluZm8uRmlsZVZlcnNpb25gXSxcbiAgICAgIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfVxuICAgICk7XG4gICAgY29uc3QgdmVyc2lvbiA9IG91dHB1dC50cmltKCk7XG4gICAgcmV0dXJuIHZlcnNpb24ubGVuZ3RoID4gMCA/IHZlcnNpb24gOiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBEb3dubG9hZHMgYSBzaW5nbGUgcmVsZWFzZSBhc3NldCBmb3IgYSB2ZXJzaW9uIHRvIGEgZGVzdGluYXRpb24gZmlsZS5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gVGhlIGFzc2V0IGRvd25sb2FkIFVSTC5cbiAqIEBwYXJhbSBkZXN0aW5hdGlvbiAtIERlc3RpbmF0aW9uIGZpbGUgcGF0aC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIHJlcXVlc3QgZmFpbHMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkQXNzZXQodXJsOiBzdHJpbmcsIGRlc3RpbmF0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgbG9nKGBbaW5zdGFsbGVyXSBEb3dubG9hZGluZyBpbnN0YWxsZXIgZnJvbSAke3VybH0gLi4uYCk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7IGhlYWRlcnM6IHsgJ1VzZXItQWdlbnQnOiBET1dOTE9BRF9VU0VSX0FHRU5UIH0gfSk7XG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtTdHJpbmcocmVzcG9uc2Uuc3RhdHVzKX1gKTtcbiAgfVxuICB3cml0ZUZpbGVTeW5jKGRlc3RpbmF0aW9uLCBCdWZmZXIuZnJvbShhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpKSk7XG59XG5cbi8qKlxuICogRG93bmxvYWRzIHRoZSBmaXJzdCByZWFjaGFibGUgaW5zdGFsbGVyIGFzc2V0IGZyb20gYW4gb3JkZXJlZCBsaXN0IG9mXG4gKiBjYW5kaWRhdGUgVVJMcywgcmV0dXJuaW5nIHRoZSBwYXRoIGl0IHdhcyBzYXZlZCB0by5cbiAqXG4gKiBAcGFyYW0gdXJscyAtIENhbmRpZGF0ZSBhc3NldCBVUkxzLCBpbiBwcmlvcml0eSBvcmRlci5cbiAqIEBwYXJhbSBzaGVsbERpcmVjdG9yeSAtIFRoZSBkZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKiBAcGFyYW0gdmVyc2lvbiAtIFRoZSByZWxlYXNlIHZlcnNpb24gKGZvciBlcnJvciBtZXNzYWdlcykuXG4gKiBAcmV0dXJucyBUaGUgZG93bmxvYWRlZCBhc3NldCdzIHBhdGguXG4gKiBAdGhyb3dzIEVycm9yIGlmIG5vbmUgb2YgdGhlIGNhbmRpZGF0ZXMgY2FuIGJlIGRvd25sb2FkZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkSW5zdGFsbGVyQXNzZXQodXJsczogc3RyaW5nW10sIHNoZWxsRGlyZWN0b3J5OiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCB1cmwgb2YgdXJscykge1xuICAgIGNvbnN0IGFzc2V0UGF0aCA9IGpvaW4oc2hlbGxEaXJlY3RvcnksIGJhc2VuYW1lKHVybCkpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBkb3dubG9hZEFzc2V0KHVybCwgYXNzZXRQYXRoKTtcbiAgICAgIHJldHVybiBhc3NldFBhdGg7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9ycy5wdXNoKGAke3VybH06ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWApO1xuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgRmFpbGVkIHRvIGRvd25sb2FkIE9ic2lkaWFuIGluc3RhbGxlciAke3ZlcnNpb259LiBBdHRlbXB0czogJHtlcnJvcnMuam9pbignOyAnKX0uIGBcbiAgICAgICsgJ0NhdGFseXN0L2JldGEgdmVyc2lvbnMgaGF2ZSBubyBwdWJsaWMgaW5zdGFsbGVyIFx1MjAxNCBwaW4gYW4gYXNhciB2ZXJzaW9uIG9uIGEgcHVibGljL2luc3RhbGxlZCBzaGVsbCBpbnN0ZWFkLidcbiAgKTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBhIExpbnV4IGAudGFyLmd6YCBwb3J0YWJsZSBidWlsZC5cbiAqXG4gKiBAcGFyYW0gYXNzZXRQYXRoIC0gUGF0aCB0byB0aGUgZG93bmxvYWRlZCBgLnRhci5nemAuXG4gKiBAcGFyYW0gc2hlbGxEaXJlY3RvcnkgLSBEZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RMaW51eFNoZWxsKGFzc2V0UGF0aDogc3RyaW5nLCBzaGVsbERpcmVjdG9yeTogc3RyaW5nKTogdm9pZCB7XG4gIHJ1bigndGFyJywgWyd4emYnLCBhc3NldFBhdGgsICctQycsIHNoZWxsRGlyZWN0b3J5LCAnLS1zdHJpcC1jb21wb25lbnRzPTEnXSk7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgYSBtYWNPUyBgLmRtZ2AgYnkgbW91bnRpbmcgaXQgYW5kIGNvcHlpbmcgdGhlIGFwcCBidW5kbGUuXG4gKlxuICogQHBhcmFtIGFzc2V0UGF0aCAtIFBhdGggdG8gdGhlIGRvd25sb2FkZWQgYC5kbWdgLlxuICogQHBhcmFtIHNoZWxsRGlyZWN0b3J5IC0gRGVzdGluYXRpb24gc2hlbGwgZGlyZWN0b3J5LlxuICovXG5mdW5jdGlvbiBleHRyYWN0TWFjU2hlbGwoYXNzZXRQYXRoOiBzdHJpbmcsIHNoZWxsRGlyZWN0b3J5OiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgbW91bnRQb2ludCA9IGpvaW4oc2hlbGxEaXJlY3RvcnksICdfX21udCcpO1xuICBta2RpclN5bmMobW91bnRQb2ludCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIHJ1bignaGRpdXRpbCcsIFsnYXR0YWNoJywgJy1ub2Jyb3dzZScsICctbW91bnRwb2ludCcsIG1vdW50UG9pbnQsIGFzc2V0UGF0aF0pO1xuICB0cnkge1xuICAgIHJ1bignY3AnLCBbJy1SJywgam9pbihtb3VudFBvaW50LCAnT2JzaWRpYW4uYXBwJyksIHNoZWxsRGlyZWN0b3J5XSk7XG4gIH0gZmluYWxseSB7XG4gICAgcnVuKCdoZGl1dGlsJywgWydkZXRhY2gnLCBtb3VudFBvaW50XSk7XG4gIH1cbiAgcm1TeW5jKG1vdW50UG9pbnQsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBhIGRvd25sb2FkZWQgaW5zdGFsbGVyIGFzc2V0IGludG8gYSBzaGVsbCBkaXJlY3RvcnksIHBlciBwbGF0Zm9ybS5cbiAqXG4gKiBAcGFyYW0gYXNzZXRQYXRoIC0gVGhlIGRvd25sb2FkZWQgYXNzZXQgcGF0aC5cbiAqIEBwYXJhbSBzaGVsbERpcmVjdG9yeSAtIFRoZSBkZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RTaGVsbChhc3NldFBhdGg6IHN0cmluZywgc2hlbGxEaXJlY3Rvcnk6IHN0cmluZyk6IHZvaWQge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIGV4dHJhY3RXaW5kb3dzU2hlbGwoYXNzZXRQYXRoLCBzaGVsbERpcmVjdG9yeSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgZXh0cmFjdE1hY1NoZWxsKGFzc2V0UGF0aCwgc2hlbGxEaXJlY3RvcnkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGV4dHJhY3RMaW51eFNoZWxsKGFzc2V0UGF0aCwgc2hlbGxEaXJlY3RvcnkpO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIGEgV2luZG93cyBOU0lTIGluc3RhbGxlcidzIGlubmVyIGFwcCBwYXlsb2FkIHZpYSA3LVppcC5cbiAqXG4gKiBUaGUgTlNJUyBpbnN0YWxsZXIgYC5leGVgIGNvbnRhaW5zIGAkUExVR0lOU0RJUi9hcHAtNjQuN3pgLCB3aGljaCBob2xkcyB0aGVcbiAqIHBvcnRhYmxlIGFwcCAobWlycm9ycyBob3cgdGhlIHNjb29wIG1hbmlmZXN0IGluc3RhbGxzIE9ic2lkaWFuKS5cbiAqXG4gKiBAcGFyYW0gYXNzZXRQYXRoIC0gUGF0aCB0byB0aGUgZG93bmxvYWRlZCBgLmV4ZWAuXG4gKiBAcGFyYW0gc2hlbGxEaXJlY3RvcnkgLSBEZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RXaW5kb3dzU2hlbGwoYXNzZXRQYXRoOiBzdHJpbmcsIHNoZWxsRGlyZWN0b3J5OiBzdHJpbmcpOiB2b2lkIHtcbiAgYXNzZXJ0Q29tbWFuZEF2YWlsYWJsZSgnN3onLCAnSW5zdGFsbCA3LVppcCAoZS5nLiBgc2Nvb3AgaW5zdGFsbCA3emlwYCkgdG8gZXh0cmFjdCBhIHBpbm5lZCBPYnNpZGlhbiBpbnN0YWxsZXIuJyk7XG4gIGNvbnN0IG5zaXNFeHRyYWN0RGlyZWN0b3J5ID0gam9pbihzaGVsbERpcmVjdG9yeSwgJ19fbnNpcycpO1xuICBydW4oJzd6JywgWyd4JywgJy15JywgYC1vJHtuc2lzRXh0cmFjdERpcmVjdG9yeX1gLCBhc3NldFBhdGhdKTtcbiAgY29uc3QgaW5uZXJBcmNoaXZlID0gam9pbihuc2lzRXh0cmFjdERpcmVjdG9yeSwgJyRQTFVHSU5TRElSJywgJ2FwcC02NC43eicpO1xuICBydW4oJzd6JywgWyd4JywgJy15JywgYC1vJHtzaGVsbERpcmVjdG9yeX1gLCBpbm5lckFyY2hpdmVdKTtcbiAgcm1TeW5jKG5zaXNFeHRyYWN0RGlyZWN0b3J5LCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG59XG5cbi8qKlxuICogRmV0Y2hlcyBhIHJlbGVhc2UncyBhc3NldCBuYW1lcyBmcm9tIHRoZSBHaXRIdWIgQVBJLlxuICpcbiAqIFJlYWRzIGEgYEdJVEhVQl9UT0tFTmAgKG9yIGBHSF9UT0tFTmApIGZyb20gdGhlIGVudmlyb25tZW50IGFuZCBzZW5kcyBpdCBhcyBhXG4gKiBiZWFyZXIgdG9rZW4gd2hlbiBwcmVzZW50LCB0byBsaWZ0IHRoZSBhbm9ueW1vdXMgcmF0ZSBsaW1pdCB0aGF0IG90aGVyd2lzZVxuICogcmV0dXJucyBIVFRQIDQwMyBvbiBzaGFyZWQgQ0kgcnVubmVyIElQcy5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiAtIFRoZSByZWxlYXNlIHZlcnNpb24gKHRhZyBgdjx2ZXJzaW9uPmApLlxuICogQHJldHVybnMgVGhlIGFzc2V0IG5hbWVzLCBvciBgdW5kZWZpbmVkYCBpZiB0aGUgQVBJIGlzIHVuYXZhaWxhYmxlLlxuICovXG5hc3luYyBmdW5jdGlvbiBmZXRjaFJlbGVhc2VBc3NldE5hbWVzKHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10gfCB1bmRlZmluZWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoeyAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIranNvbicsICdVc2VyLUFnZW50JzogRE9XTkxPQURfVVNFUl9BR0VOVCB9KTtcbiAgICAvLyBTZW5kIGEgYmVhcmVyIHRva2VuIHdoZW4gb25lIGlzIGF2YWlsYWJsZSAoZS5nLiBHSVRIVUJfVE9LRU4gb24gQ0kpLlxuICAgIC8vIFdpdGhvdXQgaXQgdGhlIGFzc2V0LWxpc3QgQVBJIGlzIGxpbWl0ZWQgdG8gdGhlIGFub255bW91cyBxdW90YS5cbiAgICAvLyBUaGF0IHF1b3RhIHJldHVybnMgSFRUUCA0MDMgb24gc2hhcmVkIENJIHJ1bm5lciBJUHMgYW5kIGZvcmNlcyB0aGUgZmFsbGJhY2suXG4gICAgY29uc3QgdG9rZW4gPSBwcm9jZXNzLmVudlsnR0lUSFVCX1RPS0VOJ10gPz8gcHJvY2Vzcy5lbnZbJ0dIX1RPS0VOJ107XG4gICAgaWYgKHRva2VuKSB7XG4gICAgICBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIGBCZWFyZXIgJHt0b2tlbn1gKTtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtSRUxFQVNFX0FQSV9UQUdfVVJMfS92JHt2ZXJzaW9ufWAsIHsgaGVhZGVycyB9KTtcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICBsb2coYFtpbnN0YWxsZXJdIFJlbGVhc2UgQVBJIGZvciAke3ZlcnNpb259IHJldHVybmVkIEhUVFAgJHtTdHJpbmcocmVzcG9uc2Uuc3RhdHVzKX07IGZhbGxpbmcgYmFjayB0byB0ZW1wbGF0ZWQgYXNzZXQgbmFtZXMuYCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCByZWxlYXNlID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIEdpdEh1YlJlbGVhc2U7XG4gICAgcmV0dXJuIHJlbGVhc2UuYXNzZXRzLm1hcCgoYXNzZXQpID0+IGFzc2V0Lm5hbWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZyhgW2luc3RhbGxlcl0gUmVsZWFzZSBBUEkgZm9yICR7dmVyc2lvbn0gdW5hdmFpbGFibGUgKCR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfSk7IGZhbGxpbmcgYmFjayB0byB0ZW1wbGF0ZWQgYXNzZXQgbmFtZXMuYCk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGV4cGVjdGVkIGNhY2hlZCBzaGVsbCBleGVjdXRhYmxlIHBhdGggZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtLlxuICpcbiAqIEBwYXJhbSBzaGVsbERpcmVjdG9yeSAtIFRoZSBzaGVsbCBjYWNoZSBkaXJlY3RvcnkgZm9yIGEgdmVyc2lvbi5cbiAqIEByZXR1cm5zIFRoZSBleGVjdXRhYmxlIHBhdGguXG4gKi9cbmZ1bmN0aW9uIGdldENhY2hlZFNoZWxsRXhlUGF0aChzaGVsbERpcmVjdG9yeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICByZXR1cm4gam9pbihzaGVsbERpcmVjdG9yeSwgJ09ic2lkaWFuLmV4ZScpO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgcmV0dXJuIGpvaW4oc2hlbGxEaXJlY3RvcnksICdPYnNpZGlhbi5hcHAnLCAnQ29udGVudHMnLCAnTWFjT1MnLCAnT2JzaWRpYW4nKTtcbiAgfVxuXG4gIHJldHVybiBqb2luKHNoZWxsRGlyZWN0b3J5LCAnb2JzaWRpYW4nKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgb3JkZXJlZCBpbnN0YWxsZXIgYXNzZXQgZG93bmxvYWQgVVJMcyB0byB0cnkgZm9yIGEgdmVyc2lvbi5cbiAqXG4gKiBUaGUgdmVyc2lvbidzIGV4YWN0IGluc3RhbGxlciBVUkwgYmFrZWQgaW50byB0aGUgYG1ldGFkYXRhLmpzb25gIGNhdGFsb2dcbiAqIChmcm9tIHRoZSBgb2JzaWRpYW5tZC9vYnNpZGlhbi1yZWxlYXNlc2AgYXNzZXRzKSBpcyB1c2VkIGRpcmVjdGx5IHdoZW4gcHJlc2VudCxcbiAqIGF2b2lkaW5nIGFueSBuZXR3b3JrIGxvb2t1cC4gT3RoZXJ3aXNlIHRoZSByZWxlYXNlJ3MgcmVhbCBhc3NldCBsaXN0IGlzXG4gKiBxdWVyaWVkIHNvIHRoZSBwbGF0Zm9ybS1jb3JyZWN0IGFzc2V0IGlzIHBpY2tlZCByZWdhcmRsZXNzIG9mIHRoZSBoaXN0b3JpY2FsXG4gKiBkb3QtdnMtaHlwaGVuIG5hbWluZzsgaWYgdGhhdCBjYWxsIHRvbyBpcyB1bmF2YWlsYWJsZSBpdCBmYWxscyBiYWNrIHRvIHRyeWluZ1xuICogYm90aCB0ZW1wbGF0ZWQgc2VwYXJhdG9yIGZvcm1zLlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gVGhlIGNvbmNyZXRlIGB4LnkuemAgdmVyc2lvbi5cbiAqIEByZXR1cm5zIENhbmRpZGF0ZSBhc3NldCBVUkxzLCBpbiBwcmlvcml0eSBvcmRlci5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUluc3RhbGxlckFzc2V0VXJscyh2ZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IGJha2VkVXJsID0gc2VsZWN0SW5zdGFsbGVyRG93bmxvYWRVcmwoeyBkb3dubG9hZHM6IGdldFZlcnNpb25NZXRhZGF0YSh2ZXJzaW9uKT8uZG93bmxvYWRzLCBwbGF0Zm9ybTogcHJvY2Vzcy5wbGF0Zm9ybSB9KTtcbiAgaWYgKGJha2VkVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gW2Jha2VkVXJsXTtcbiAgfVxuXG4gIGNvbnN0IGFzc2V0TmFtZXMgPSBhd2FpdCBmZXRjaFJlbGVhc2VBc3NldE5hbWVzKHZlcnNpb24pO1xuICBpZiAoYXNzZXROYW1lcykge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0SW5zdGFsbGVyQXNzZXROYW1lKHsgYXNzZXROYW1lcywgcGxhdGZvcm06IHByb2Nlc3MucGxhdGZvcm0sIHZlcnNpb24gfSk7XG4gICAgaWYgKHNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBbYCR7UkVMRUFTRV9ET1dOTE9BRF9CQVNFX1VSTH0vdiR7dmVyc2lvbn0vJHtzZWxlY3RlZH1gXTtcbiAgICB9XG4gICAgbG9nKGBbaW5zdGFsbGVyXSBObyBpbnN0YWxsZXIgYXNzZXQgbWF0Y2hlZCBmb3IgJHt2ZXJzaW9ufTsgZmFsbGluZyBiYWNrIHRvIHRlbXBsYXRlZCBhc3NldCBuYW1lcy5gKTtcbiAgfVxuXG4gIHJldHVybiBidWlsZEluc3RhbGxlckFzc2V0TmFtZUNhbmRpZGF0ZXMoeyBwbGF0Zm9ybTogcHJvY2Vzcy5wbGF0Zm9ybSwgdmVyc2lvbiB9KVxuICAgIC5tYXAoKG5hbWUpID0+IGAke1JFTEVBU0VfRE9XTkxPQURfQkFTRV9VUkx9L3Yke3ZlcnNpb259LyR7bmFtZX1gKTtcbn1cblxuLyoqXG4gKiBSdW5zIGEgY29tbWFuZCBzeW5jaHJvbm91c2x5LCB0aHJvd2luZyBvbiBhIG5vbi16ZXJvIGV4aXQuXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZC5cbiAqIEBwYXJhbSBjb21tYW5kQXJndW1lbnRzIC0gVGhlIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gcnVuKGNvbW1hbmQ6IHN0cmluZywgY29tbWFuZEFyZ3VtZW50czogc3RyaW5nW10pOiB2b2lkIHtcbiAgY29uc3QgcmVzdWx0ID0gc3Bhd25TeW5jKGNvbW1hbmQsIGNvbW1hbmRBcmd1bWVudHMsIHsgc3RkaW86ICdpZ25vcmUnIH0pO1xuICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ29tbWFuZCBmYWlsZWQ6ICR7Y29tbWFuZH0gJHtjb21tYW5kQXJndW1lbnRzLm1hcCgoYXJndW1lbnQpID0+IGJhc2VuYW1lKGFyZ3VtZW50KSkuam9pbignICcpfSAoZXhpdCAke1N0cmluZyhyZXN1bHQuc3RhdHVzKX0pYCk7XG4gIH1cbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICJBQW1CQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxjQUFjO0FBQ3ZCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLE9BQU8sYUFBYTtBQUVwQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLFdBQVc7QUFDcEIsU0FBUywwQkFBMEI7QUFLbkMsTUFBTSxzQkFBc0I7QUFLNUIsTUFBTSw0QkFBNEI7QUFLbEMsTUFBTSxz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
|
|
@@ -20,9 +20,19 @@
|
|
|
20
20
|
* The concrete JS runtime versions an installer's Electron shell ships — the
|
|
21
21
|
* **entire** `process.versions` object, read empirically by booting that
|
|
22
22
|
* installer over CDP (see `scripts/collect-runtime-versions.ts`). Absent for
|
|
23
|
-
* versions not yet collected (or that could not be booted).
|
|
24
|
-
*
|
|
25
|
-
*
|
|
23
|
+
* versions not yet collected (or that could not be booted).
|
|
24
|
+
*
|
|
25
|
+
* **These are the WINDOWS (`.exe`) values, and that matters.** A given Electron
|
|
26
|
+
* version does bundle the same Node / V8 / Chromium everywhere — but the Electron
|
|
27
|
+
* version itself is a property of the *installer*, not of the release, and two
|
|
28
|
+
* installers of the same Obsidian version can differ: `1.12.4` shipped Electron
|
|
29
|
+
* `39.6.0` in its `.exe` and `39.7.0` in every other installer, and `1.8.10`
|
|
30
|
+
* shipped `34.2.0` vs `34.5.2`. This field carries one flat value, measured on
|
|
31
|
+
* the `.exe` — the installer that, with the `.dmg`, is published for all 106
|
|
32
|
+
* installer-bearing releases. So a consumer pinning a macOS or Linux installer
|
|
33
|
+
* should treat `electron` as accurate to the patch only for the 104 releases
|
|
34
|
+
* where the platforms agree. The collection workflow boots all three platforms
|
|
35
|
+
* and reports any new divergence.
|
|
26
36
|
*
|
|
27
37
|
* The index signature carries every key `process.versions` exposes for that
|
|
28
38
|
* Electron build — beyond the four well-known ones below, that typically includes
|
|
@@ -53,20 +63,70 @@ export interface ObsidianRuntimeVersions {
|
|
|
53
63
|
*/
|
|
54
64
|
readonly v8: string;
|
|
55
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* The changelog page URLs for a version, one per publication target, baked into
|
|
68
|
+
* `metadata.json` from Obsidian's own changelog feed (`obsidian.md/changelog.xml`
|
|
69
|
+
* — see the `metadata.json` section in `CLAUDE.md`).
|
|
70
|
+
*
|
|
71
|
+
* Obsidian publishes a *separate* changelog page per platform (desktop / mobile)
|
|
72
|
+
* and per channel (public / catalyst "early access"), each at its own dated slug
|
|
73
|
+
* — the catalyst page typically predates the public one by about a day. Every
|
|
74
|
+
* key is optional: a version carries only the pages the feed actually published
|
|
75
|
+
* for it (a catalyst-only build has no `desktop`, a desktop-only release has no
|
|
76
|
+
* `mobile`, and the oldest versions predate the mobile app entirely).
|
|
77
|
+
*
|
|
78
|
+
* Caveat for the mobile keys: before **1.4.8** (2023-09-05) the mobile app ran
|
|
79
|
+
* its own version line, so a same-keyed mobile page documents a *different*
|
|
80
|
+
* release than the desktop page beside it (mobile `1.4.5` shipped 2023-05-23,
|
|
81
|
+
* desktop `1.4.5` 2023-08-31). From 1.4.8 on the two lines track within days.
|
|
82
|
+
*/
|
|
83
|
+
export interface ObsidianVersionChangelogUrls {
|
|
84
|
+
/**
|
|
85
|
+
The public desktop changelog page URL.
|
|
86
|
+
*/
|
|
87
|
+
readonly desktop?: string;
|
|
88
|
+
/**
|
|
89
|
+
The catalyst ("early access") desktop changelog page URL.
|
|
90
|
+
*/
|
|
91
|
+
readonly desktopCatalyst?: string;
|
|
92
|
+
/**
|
|
93
|
+
The public mobile changelog page URL.
|
|
94
|
+
*/
|
|
95
|
+
readonly mobile?: string;
|
|
96
|
+
/**
|
|
97
|
+
The catalyst ("early access") mobile changelog page URL.
|
|
98
|
+
*/
|
|
99
|
+
readonly mobileCatalyst?: string;
|
|
100
|
+
}
|
|
56
101
|
/**
|
|
57
102
|
* The pre-resolved asset download URLs for a version, baked into `metadata.json`
|
|
58
|
-
* from the
|
|
59
|
-
*
|
|
103
|
+
* from the `obsidianmd/obsidian-releases` release assets — plus, for catalyst
|
|
104
|
+
* builds, the `releases.obsidian.md` CDN, which publishes no listing and so is
|
|
105
|
+
* probed (see the `metadata.json` section in `CLAUDE.md`).
|
|
60
106
|
*
|
|
61
107
|
* These are the exact URLs the version's assets are published at, so the
|
|
62
108
|
* integration-time download paths can skip the GitHub release-API lookup and the
|
|
63
109
|
* historical dot-vs-hyphen asset-name guessing. Only the assets this library
|
|
64
|
-
* actually downloads are carried: the app `asar
|
|
65
|
-
* A field is absent when the version publishes no such
|
|
66
|
-
* build ships only the `asar`), in which case the caller
|
|
67
|
-
* hand-rolled resolution.
|
|
110
|
+
* actually downloads are carried: the app `asar`, the x64 desktop installers,
|
|
111
|
+
* and the Android `apk`. A field is absent when the version publishes no such
|
|
112
|
+
* asset (e.g. a catalyst build ships only the `asar`), in which case the caller
|
|
113
|
+
* falls back to its hand-rolled resolution.
|
|
68
114
|
*/
|
|
69
115
|
export interface ObsidianVersionDownloads {
|
|
116
|
+
/**
|
|
117
|
+
* The public Android `.apk` URL. Published as a GitHub release asset named
|
|
118
|
+
* uniformly `Obsidian-<version>.apk` — the asset first appears at 1.5.8 and is
|
|
119
|
+
* hyphenated from the start, so it has no dot-separator era to guess around
|
|
120
|
+
* (unlike the desktop installers `installer-asset.ts` handles).
|
|
121
|
+
*
|
|
122
|
+
* There is deliberately no catalyst counterpart. Unlike the desktop catalyst
|
|
123
|
+
* asar, the mobile catalyst build is not published at a URL at all: Obsidian
|
|
124
|
+
* distributes it through a Discord-gated channel, per
|
|
125
|
+
* https://obsidian.md/help/early-access. What this table can carry for a
|
|
126
|
+
* catalyst mobile build is its changelog —
|
|
127
|
+
* {@link ObsidianVersionChangelogUrls.mobileCatalyst}.
|
|
128
|
+
*/
|
|
129
|
+
readonly apk?: string;
|
|
70
130
|
/**
|
|
71
131
|
The `obsidian-<version>.asar.gz` package URL.
|
|
72
132
|
*/
|
|
@@ -96,16 +156,18 @@ export interface ObsidianVersionMetadata {
|
|
|
96
156
|
*/
|
|
97
157
|
readonly available?: boolean;
|
|
98
158
|
/**
|
|
99
|
-
|
|
159
|
+
* The version's changelog page URLs, one per publication target (desktop /
|
|
160
|
+
* mobile × public / catalyst), baked from Obsidian's changelog feed. Absent
|
|
161
|
+
* for the few versions the feed never published a page for.
|
|
100
162
|
*/
|
|
101
|
-
readonly changelogUrl?:
|
|
163
|
+
readonly changelogUrl?: ObsidianVersionChangelogUrls;
|
|
102
164
|
/**
|
|
103
165
|
The release channel: `'public'`, `'catalyst'`, or `'public+catalyst'`.
|
|
104
166
|
*/
|
|
105
167
|
readonly channel?: string;
|
|
106
168
|
/**
|
|
107
169
|
* The pre-resolved asset download URLs for the version, baked from the
|
|
108
|
-
*
|
|
170
|
+
* `obsidianmd/obsidian-releases` release assets. Absent for versions not present
|
|
109
171
|
* in the catalog (the caller then falls back to hand-rolled resolution).
|
|
110
172
|
*/
|
|
111
173
|
readonly downloads?: ObsidianVersionDownloads;
|