obsidian-integration-testing 9.2.2 → 10.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.
Files changed (253) hide show
  1. package/README.md +45 -45
  2. package/dist/lib/cjs/appium-dependencies.cjs +5 -5
  3. package/dist/lib/cjs/appium-dependencies.d.cts +4 -2
  4. package/dist/lib/cjs/appium-session-config.cjs +1 -1
  5. package/dist/lib/cjs/asar-fallback-detection.cjs +4 -4
  6. package/dist/lib/cjs/asar-fallback-detection.d.cts +15 -7
  7. package/dist/lib/cjs/avd-list.cjs +1 -1
  8. package/dist/lib/cjs/avd-list.d.cts +6 -2
  9. package/dist/lib/cjs/cli.cjs +4 -4
  10. package/dist/lib/cjs/compatibility-options.cjs +13 -13
  11. package/dist/lib/cjs/compatibility-options.d.cts +24 -12
  12. package/dist/lib/cjs/connect-to-cdp.cjs +4 -4
  13. package/dist/lib/cjs/connect-to-cdp.d.cts +6 -6
  14. package/dist/lib/cjs/context-id.cjs +5 -5
  15. package/dist/lib/cjs/context-id.d.cts +1 -1
  16. package/dist/lib/cjs/context-provider.cjs +5 -5
  17. package/dist/lib/cjs/context-provider.d.cts +4 -4
  18. package/dist/lib/cjs/demo-vault-populate.cjs +5 -5
  19. package/dist/lib/cjs/demo-vault-populate.d.cts +4 -4
  20. package/dist/lib/cjs/demo-vault-tree.cjs +4 -4
  21. package/dist/lib/cjs/demo-vault-tree.d.cts +3 -3
  22. package/dist/lib/cjs/device-readiness.cjs +3 -3
  23. package/dist/lib/cjs/device-readiness.d.cts +7 -3
  24. package/dist/lib/cjs/ecmascript-version.cjs +1 -1
  25. package/dist/lib/cjs/electron-compatibility.cjs +4 -4
  26. package/dist/lib/cjs/electron-compatibility.d.cts +33 -17
  27. package/dist/lib/cjs/emulator-arguments.cjs +36 -0
  28. package/dist/lib/{esm/emulator-args.d.mts → cjs/emulator-arguments.d.cts} +6 -4
  29. package/dist/lib/cjs/enable-plugin.cjs +29 -29
  30. package/dist/lib/cjs/enable-plugin.d.cts +6 -6
  31. package/dist/lib/cjs/eval-in-obsidian.cjs +9 -9
  32. package/dist/lib/cjs/eval-in-obsidian.d.cts +23 -23
  33. package/dist/lib/cjs/exec.cjs +49 -53
  34. package/dist/lib/cjs/exec.d.cts +9 -9
  35. package/dist/lib/cjs/function-expression.cjs +8 -8
  36. package/dist/lib/cjs/function-expression.d.cts +4 -4
  37. package/dist/lib/cjs/generate-function-call.cjs +6 -6
  38. package/dist/lib/cjs/generate-function-call.d.cts +15 -9
  39. package/dist/lib/cjs/global-setup-core.cjs +43 -43
  40. package/dist/lib/cjs/global-setup-core.d.cts +19 -9
  41. package/dist/lib/cjs/incompatible-installer-version-error.cjs +10 -4
  42. package/dist/lib/cjs/incompatible-installer-version-error.d.cts +18 -6
  43. package/dist/lib/cjs/index.cjs +10 -10
  44. package/dist/lib/cjs/index.d.cts +8 -8
  45. package/dist/lib/cjs/installer-asset.cjs +4 -4
  46. package/dist/lib/cjs/installer-asset.d.cts +21 -7
  47. package/dist/lib/cjs/installer-compatibility.cjs +4 -4
  48. package/dist/lib/cjs/installer-compatibility.d.cts +36 -18
  49. package/dist/lib/cjs/jest/global-setup-no-plugin.cjs +3 -3
  50. package/dist/lib/cjs/jest/global-setup-no-plugin.d.cts +1 -1
  51. package/dist/lib/cjs/jest/global-setup.cjs +11 -11
  52. package/dist/lib/cjs/jest/global-setup.d.cts +12 -8
  53. package/dist/lib/cjs/jest/global-teardown-no-plugin.cjs +2 -3
  54. package/dist/lib/cjs/jest/global-teardown-no-plugin.d.cts +1 -2
  55. package/dist/lib/cjs/jest/global-teardown.cjs +2 -3
  56. package/dist/lib/cjs/jest/global-teardown.d.cts +1 -2
  57. package/dist/lib/cjs/jest/setup.cjs +2 -2
  58. package/dist/lib/cjs/jest/setup.d.cts +1 -1
  59. package/dist/lib/cjs/json-with-functions.cjs +7 -7
  60. package/dist/lib/cjs/leftover-cleanup.cjs +14 -14
  61. package/dist/lib/cjs/leftover-cleanup.d.cts +42 -20
  62. package/dist/lib/cjs/library.cjs +2 -2
  63. package/dist/lib/cjs/namespace-bootstrap.cjs +46 -40
  64. package/dist/lib/cjs/native-dialog-monitor.cjs +15 -13
  65. package/dist/lib/cjs/normalize-optional-properties.cjs +3 -3
  66. package/dist/lib/cjs/normalize-optional-properties.d.cts +2 -2
  67. package/dist/lib/cjs/obsidian-config.cjs +30 -31
  68. package/dist/lib/cjs/obsidian-config.d.cts +8 -8
  69. package/dist/lib/cjs/obsidian-executable.cjs +2 -2
  70. package/dist/lib/cjs/obsidian-installer.cjs +37 -37
  71. package/dist/lib/cjs/obsidian-installer.d.cts +7 -3
  72. package/dist/lib/cjs/obsidian-instance.cjs +3 -3
  73. package/dist/lib/cjs/obsidian-instance.d.cts +18 -8
  74. package/dist/lib/cjs/obsidian-metadata.cjs +1 -1
  75. package/dist/lib/cjs/obsidian-metadata.d.cts +36 -12
  76. package/dist/lib/cjs/obsidian-namespace.cjs +1 -1
  77. package/dist/lib/cjs/obsidian-namespace.d.cts +25 -11
  78. package/dist/lib/cjs/obsidian-version-switch.cjs +9 -9
  79. package/dist/lib/cjs/obsidian-version-switch.d.cts +14 -10
  80. package/dist/lib/cjs/obsidian-version.cjs +3 -3
  81. package/dist/lib/cjs/obsidian-version.d.cts +15 -5
  82. package/dist/lib/cjs/owned-vault-seed.cjs +1 -1
  83. package/dist/lib/cjs/owned-vault-seed.d.cts +24 -8
  84. package/dist/lib/cjs/parent-liveness.cjs +4 -4
  85. package/dist/lib/cjs/parent-liveness.d.cts +7 -3
  86. package/dist/lib/cjs/poll-in-obsidian.cjs +5 -5
  87. package/dist/lib/cjs/poll-in-obsidian.d.cts +12 -12
  88. package/dist/lib/cjs/poll-until.cjs +1 -1
  89. package/dist/lib/cjs/poll-until.d.cts +21 -7
  90. package/dist/lib/cjs/process-exit-message.cjs +1 -1
  91. package/dist/lib/cjs/process-exit-message.d.cts +21 -7
  92. package/dist/lib/cjs/renderer-boot-detection.cjs +9 -9
  93. package/dist/lib/cjs/renderer-boot-detection.d.cts +31 -27
  94. package/dist/lib/cjs/renderer-failed-to-initialize-error.cjs +1 -1
  95. package/dist/lib/cjs/renderer-failed-to-initialize-error.d.cts +1 -1
  96. package/dist/lib/cjs/setup-lock.cjs +26 -26
  97. package/dist/lib/cjs/setup-lock.d.cts +6 -2
  98. package/dist/lib/cjs/silent-asar-fallback-error.cjs +7 -3
  99. package/dist/lib/cjs/silent-asar-fallback-error.d.cts +12 -4
  100. package/dist/lib/cjs/spawn-options.cjs +1 -1
  101. package/dist/lib/cjs/spawn-options.d.cts +3 -1
  102. package/dist/lib/cjs/strict-proxy.cjs +25 -25
  103. package/dist/lib/cjs/strict-proxy.d.cts +3 -3
  104. package/dist/lib/cjs/temporary-vault.cjs +166 -0
  105. package/dist/lib/cjs/{temp-vault.d.cts → temporary-vault.d.cts} +3 -3
  106. package/dist/lib/cjs/transport-appium.cjs +7 -7
  107. package/dist/lib/cjs/transport-appium.d.cts +7 -3
  108. package/dist/lib/cjs/transport-desktop-cdp.cjs +57 -57
  109. package/dist/lib/cjs/transport-desktop-cdp.d.cts +29 -17
  110. package/dist/lib/cjs/transport-factory.cjs +62 -63
  111. package/dist/lib/cjs/type-guards.cjs +3 -3
  112. package/dist/lib/cjs/type-guards.d.cts +2 -2
  113. package/dist/lib/cjs/vault-path-match.cjs +9 -9
  114. package/dist/lib/cjs/vault-path-match.d.cts +11 -11
  115. package/dist/lib/cjs/version-matrix.cjs +1 -1
  116. package/dist/lib/cjs/version-matrix.d.cts +51 -17
  117. package/dist/lib/cjs/visibility.cjs +7 -7
  118. package/dist/lib/cjs/visibility.d.cts +5 -5
  119. package/dist/lib/cjs/vitest/global-setup-no-plugin.cjs +3 -3
  120. package/dist/lib/cjs/vitest/global-setup-no-plugin.d.cts +2 -2
  121. package/dist/lib/cjs/vitest/global-setup.cjs +9 -9
  122. package/dist/lib/cjs/vitest/global-setup.d.cts +4 -4
  123. package/dist/lib/cjs/vitest/setup.cjs +2 -2
  124. package/dist/lib/cjs/vitest/typings.d.cts +2 -2
  125. package/dist/lib/esm/appium-dependencies.d.mts +4 -2
  126. package/dist/lib/esm/appium-dependencies.mjs +4 -4
  127. package/dist/lib/esm/appium-session-config.mjs +1 -1
  128. package/dist/lib/esm/asar-fallback-detection.d.mts +15 -7
  129. package/dist/lib/esm/asar-fallback-detection.mjs +3 -3
  130. package/dist/lib/esm/avd-list.d.mts +6 -2
  131. package/dist/lib/esm/avd-list.mjs +1 -1
  132. package/dist/lib/esm/cli.mjs +4 -4
  133. package/dist/lib/esm/compatibility-options.d.mts +24 -12
  134. package/dist/lib/esm/compatibility-options.mjs +10 -10
  135. package/dist/lib/esm/connect-to-cdp.d.mts +6 -6
  136. package/dist/lib/esm/connect-to-cdp.mjs +6 -6
  137. package/dist/lib/esm/context-id.d.mts +1 -1
  138. package/dist/lib/esm/context-id.mjs +5 -5
  139. package/dist/lib/esm/context-provider.d.mts +4 -4
  140. package/dist/lib/esm/context-provider.mjs +5 -5
  141. package/dist/lib/esm/demo-vault-populate.d.mts +4 -4
  142. package/dist/lib/esm/demo-vault-populate.mjs +5 -5
  143. package/dist/lib/esm/demo-vault-tree.d.mts +3 -3
  144. package/dist/lib/esm/demo-vault-tree.mjs +4 -4
  145. package/dist/lib/esm/device-readiness.d.mts +7 -3
  146. package/dist/lib/esm/device-readiness.mjs +3 -3
  147. package/dist/lib/esm/ecmascript-version.mjs +1 -1
  148. package/dist/lib/esm/electron-compatibility.d.mts +33 -17
  149. package/dist/lib/esm/electron-compatibility.mjs +3 -3
  150. package/dist/lib/{cjs/emulator-args.d.cts → esm/emulator-arguments.d.mts} +6 -4
  151. package/dist/lib/esm/emulator-arguments.mjs +12 -0
  152. package/dist/lib/esm/enable-plugin.d.mts +6 -6
  153. package/dist/lib/esm/enable-plugin.mjs +29 -29
  154. package/dist/lib/esm/eval-in-obsidian.d.mts +23 -23
  155. package/dist/lib/esm/eval-in-obsidian.mjs +9 -9
  156. package/dist/lib/esm/exec.d.mts +9 -9
  157. package/dist/lib/esm/exec.mjs +49 -53
  158. package/dist/lib/esm/function-expression.d.mts +4 -4
  159. package/dist/lib/esm/function-expression.mjs +8 -8
  160. package/dist/lib/esm/generate-function-call.d.mts +15 -9
  161. package/dist/lib/esm/generate-function-call.mjs +6 -6
  162. package/dist/lib/esm/global-setup-core.d.mts +19 -9
  163. package/dist/lib/esm/global-setup-core.mjs +45 -45
  164. package/dist/lib/esm/incompatible-installer-version-error.d.mts +18 -6
  165. package/dist/lib/esm/incompatible-installer-version-error.mjs +10 -4
  166. package/dist/lib/esm/index.d.mts +8 -8
  167. package/dist/lib/esm/index.mjs +9 -9
  168. package/dist/lib/esm/installer-asset.d.mts +21 -7
  169. package/dist/lib/esm/installer-asset.mjs +4 -4
  170. package/dist/lib/esm/installer-compatibility.d.mts +36 -18
  171. package/dist/lib/esm/installer-compatibility.mjs +3 -3
  172. package/dist/lib/esm/jest/global-setup-no-plugin.d.mts +1 -1
  173. package/dist/lib/esm/jest/global-setup-no-plugin.mjs +3 -3
  174. package/dist/lib/esm/jest/global-setup.d.mts +12 -8
  175. package/dist/lib/esm/jest/global-setup.mjs +10 -10
  176. package/dist/lib/esm/jest/global-teardown-no-plugin.d.mts +1 -2
  177. package/dist/lib/esm/jest/global-teardown-no-plugin.mjs +2 -3
  178. package/dist/lib/esm/jest/global-teardown.d.mts +1 -2
  179. package/dist/lib/esm/jest/global-teardown.mjs +2 -3
  180. package/dist/lib/esm/jest/setup.d.mts +1 -1
  181. package/dist/lib/esm/jest/setup.mjs +2 -2
  182. package/dist/lib/esm/json-with-functions.mjs +7 -7
  183. package/dist/lib/esm/leftover-cleanup.d.mts +42 -20
  184. package/dist/lib/esm/leftover-cleanup.mjs +12 -12
  185. package/dist/lib/esm/library.mjs +2 -2
  186. package/dist/lib/esm/namespace-bootstrap.mjs +46 -40
  187. package/dist/lib/esm/native-dialog-monitor.mjs +15 -13
  188. package/dist/lib/esm/normalize-optional-properties.d.mts +2 -2
  189. package/dist/lib/esm/normalize-optional-properties.mjs +3 -3
  190. package/dist/lib/esm/obsidian-config.d.mts +8 -8
  191. package/dist/lib/esm/obsidian-config.mjs +27 -28
  192. package/dist/lib/esm/obsidian-executable.mjs +2 -2
  193. package/dist/lib/esm/obsidian-installer.d.mts +7 -3
  194. package/dist/lib/esm/obsidian-installer.mjs +36 -36
  195. package/dist/lib/esm/obsidian-instance.d.mts +18 -8
  196. package/dist/lib/esm/obsidian-instance.mjs +3 -3
  197. package/dist/lib/esm/obsidian-metadata.d.mts +36 -12
  198. package/dist/lib/esm/obsidian-metadata.mjs +1 -1
  199. package/dist/lib/esm/obsidian-namespace.d.mts +25 -11
  200. package/dist/lib/esm/obsidian-version-switch.d.mts +14 -10
  201. package/dist/lib/esm/obsidian-version-switch.mjs +9 -9
  202. package/dist/lib/esm/obsidian-version.d.mts +15 -5
  203. package/dist/lib/esm/obsidian-version.mjs +3 -3
  204. package/dist/lib/esm/owned-vault-seed.d.mts +24 -8
  205. package/dist/lib/esm/owned-vault-seed.mjs +1 -1
  206. package/dist/lib/esm/parent-liveness.d.mts +7 -3
  207. package/dist/lib/esm/parent-liveness.mjs +3 -3
  208. package/dist/lib/esm/poll-in-obsidian.d.mts +12 -12
  209. package/dist/lib/esm/poll-in-obsidian.mjs +5 -5
  210. package/dist/lib/esm/poll-until.d.mts +21 -7
  211. package/dist/lib/esm/poll-until.mjs +1 -1
  212. package/dist/lib/esm/process-exit-message.d.mts +21 -7
  213. package/dist/lib/esm/process-exit-message.mjs +1 -1
  214. package/dist/lib/esm/renderer-boot-detection.d.mts +31 -27
  215. package/dist/lib/esm/renderer-boot-detection.mjs +7 -7
  216. package/dist/lib/esm/renderer-failed-to-initialize-error.d.mts +1 -1
  217. package/dist/lib/esm/renderer-failed-to-initialize-error.mjs +1 -1
  218. package/dist/lib/esm/setup-lock.d.mts +6 -2
  219. package/dist/lib/esm/setup-lock.mjs +26 -26
  220. package/dist/lib/esm/silent-asar-fallback-error.d.mts +12 -4
  221. package/dist/lib/esm/silent-asar-fallback-error.mjs +7 -3
  222. package/dist/lib/esm/spawn-options.d.mts +3 -1
  223. package/dist/lib/esm/spawn-options.mjs +1 -1
  224. package/dist/lib/esm/strict-proxy.d.mts +3 -3
  225. package/dist/lib/esm/strict-proxy.mjs +25 -25
  226. package/dist/lib/esm/{temp-vault.d.mts → temporary-vault.d.mts} +3 -3
  227. package/dist/lib/esm/temporary-vault.mjs +157 -0
  228. package/dist/lib/esm/transport-appium.d.mts +7 -3
  229. package/dist/lib/esm/transport-appium.mjs +7 -7
  230. package/dist/lib/esm/transport-desktop-cdp.d.mts +29 -17
  231. package/dist/lib/esm/transport-desktop-cdp.mjs +67 -67
  232. package/dist/lib/esm/transport-factory.mjs +71 -72
  233. package/dist/lib/esm/type-guards.d.mts +2 -2
  234. package/dist/lib/esm/type-guards.mjs +3 -3
  235. package/dist/lib/esm/vault-path-match.d.mts +11 -11
  236. package/dist/lib/esm/vault-path-match.mjs +7 -7
  237. package/dist/lib/esm/version-matrix.d.mts +51 -17
  238. package/dist/lib/esm/version-matrix.mjs +1 -1
  239. package/dist/lib/esm/visibility.d.mts +5 -5
  240. package/dist/lib/esm/visibility.mjs +5 -5
  241. package/dist/lib/esm/vitest/global-setup-no-plugin.d.mts +2 -2
  242. package/dist/lib/esm/vitest/global-setup-no-plugin.mjs +3 -3
  243. package/dist/lib/esm/vitest/global-setup.d.mts +4 -4
  244. package/dist/lib/esm/vitest/global-setup.mjs +8 -8
  245. package/dist/lib/esm/vitest/setup.mjs +2 -2
  246. package/dist/lib/esm/vitest/typings.d.mts +2 -2
  247. package/dist/obsidian-integration-testing-10.0.0.tgz +0 -0
  248. package/package.json +15 -13
  249. package/dist/lib/cjs/emulator-args.cjs +0 -36
  250. package/dist/lib/cjs/temp-vault.cjs +0 -166
  251. package/dist/lib/esm/emulator-args.mjs +0 -12
  252. package/dist/lib/esm/temp-vault.mjs +0 -157
  253. package/dist/obsidian-integration-testing-9.2.2.tgz +0 -0
@@ -8,14 +8,32 @@ import {
8
8
  resolve
9
9
  } from "node:path";
10
10
  import process from "node:process";
11
- function getObsidianConfigDir() {
11
+ function didRemoveVaultFromConfig(vaultPath) {
12
+ const config = readObsidianJson();
13
+ if (!config) {
14
+ return false;
15
+ }
16
+ const normalizedTarget = normalizePath(vaultPath);
17
+ let wasFound = false;
18
+ for (const [id, entry] of Object.entries(config.vaults)) {
19
+ if (normalizePath(entry.path) === normalizedTarget) {
20
+ delete config.vaults[id];
21
+ wasFound = true;
22
+ break;
23
+ }
24
+ }
25
+ if (wasFound) {
26
+ writeObsidianJson(config);
27
+ }
28
+ return wasFound;
29
+ }
30
+ function getObsidianConfigDirectory() {
12
31
  if (process.platform === "win32") {
13
32
  const appData = process.env["APPDATA"];
14
33
  if (appData) {
15
34
  return join(appData, "obsidian");
16
35
  }
17
- }
18
- if (process.platform === "darwin") {
36
+ } else if (process.platform === "darwin") {
19
37
  return join(homedir(), "Library", "Application Support", "obsidian");
20
38
  }
21
39
  return join(process.env["XDG_CONFIG_HOME"] ?? join(homedir(), ".config"), "obsidian");
@@ -36,31 +54,12 @@ function getVaultId(vaultPath) {
36
54
  function isVaultRegistered(vaultPath) {
37
55
  return getVaultId(vaultPath) !== void 0;
38
56
  }
39
- function removeVaultFromConfig(vaultPath) {
40
- const config = readObsidianJson();
41
- if (!config) {
42
- return false;
43
- }
44
- const normalizedTarget = normalizePath(vaultPath);
45
- let wasFound = false;
46
- for (const [id, entry] of Object.entries(config.vaults)) {
47
- if (normalizePath(entry.path) === normalizedTarget) {
48
- delete config.vaults[id];
49
- wasFound = true;
50
- break;
51
- }
52
- }
53
- if (wasFound) {
54
- writeObsidianJson(config);
55
- }
56
- return wasFound;
57
- }
58
57
  function normalizePath(vaultPath) {
59
58
  const resolved = resolve(vaultPath);
60
59
  return process.platform === "win32" ? resolved.toLowerCase() : resolved;
61
60
  }
62
61
  function readObsidianJson() {
63
- const configPath = join(getObsidianConfigDir(), "obsidian.json");
62
+ const configPath = join(getObsidianConfigDirectory(), "obsidian.json");
64
63
  try {
65
64
  const content = readFileSync(configPath, "utf-8");
66
65
  return JSON.parse(content);
@@ -69,13 +68,13 @@ function readObsidianJson() {
69
68
  }
70
69
  }
71
70
  function writeObsidianJson(config) {
72
- const configPath = join(getObsidianConfigDir(), "obsidian.json");
71
+ const configPath = join(getObsidianConfigDirectory(), "obsidian.json");
73
72
  writeFileSync(configPath, JSON.stringify(config));
74
73
  }
75
74
  export {
76
- getObsidianConfigDir,
75
+ didRemoveVaultFromConfig,
76
+ getObsidianConfigDirectory,
77
77
  getVaultId,
78
- isVaultRegistered,
79
- removeVaultFromConfig
78
+ isVaultRegistered
80
79
  };
81
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWNvbmZpZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFJlYWRzIGFuZCBxdWVyaWVzIHRoZSB1c2VyJ3MgT2JzaWRpYW4gbG9jYWwgY29uZmlndXJhdGlvbiAoYG9ic2lkaWFuLmpzb25gKS5cbiAqXG4gKiBVc2VkIGJ5IHRoZSBDRFAgdHJhbnNwb3J0J3MgKiphdHRhY2gqKiBtb2RlICh0YXJnZXRpbmcgYW4gYWxyZWFkeS1ydW5uaW5nLFxuICogdXNlci1zY29wZSBPYnNpZGlhbikuIEhhcm5lc3Mtb3duZWQgaXNvbGF0ZWQgaW5zdGFuY2VzIHdyaXRlIHRoZWlyIG93blxuICogYG9ic2lkaWFuLmpzb25gIGRpcmVjdGx5IGludG8gYSB0ZW1wb3JhcnkgdXNlci1kYXRhIGRpciBhbmQgZG8gbm90IHVzZSB0aGVzZVxuICogaGVscGVycy5cbiAqL1xuXG5pbXBvcnQge1xuICByZWFkRmlsZVN5bmMsXG4gIHdyaXRlRmlsZVN5bmNcbn0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQge1xuICBqb2luLFxuICByZXNvbHZlXG59IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG4vKipcbiAqIFRoZSB0b3AtbGV2ZWwgc3RydWN0dXJlIG9mIE9ic2lkaWFuJ3MgYG9ic2lkaWFuLmpzb25gIGNvbmZpZyBmaWxlLlxuICovXG5pbnRlcmZhY2UgT2JzaWRpYW5Kc29uIHtcbiAgLyoqXG4gICAqIE1hcCBvZiB2YXVsdCBJRHMgdG8gdmF1bHQgZW50cmllcy5cbiAgICovXG4gIHZhdWx0czogUmVjb3JkPHN0cmluZywgT2JzaWRpYW5WYXVsdEVudHJ5Pjtcbn1cblxuLyoqXG4gKiBBIHNpbmdsZSB2YXVsdCBlbnRyeSBpbiBgb2JzaWRpYW4uanNvbmAuXG4gKi9cbmludGVyZmFjZSBPYnNpZGlhblZhdWx0RW50cnkge1xuICAvKipcbiAgICogVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IGZvbGRlci5cbiAgICovXG4gIHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGltZXN0YW1wIG9mIHRoZSBsYXN0IGFjY2Vzcy5cbiAgICovXG4gIHRzOiBudW1iZXI7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgcGF0aCB0byB0aGUgKip1c2VyJ3MqKiBPYnNpZGlhbiBjb25maWcgKHVzZXItZGF0YSlcbiAqIGRpcmVjdG9yeSBcdTIwMTQgYCVBUFBEQVRBJVxcb2JzaWRpYW5gIG9uIFdpbmRvd3MsIGB+L0xpYnJhcnkvQXBwbGljYXRpb24gU3VwcG9ydC9vYnNpZGlhbmBcbiAqIG9uIG1hY09TLCBgJFhER19DT05GSUdfSE9NRS9vYnNpZGlhbmAgKG9yIGB+Ly5jb25maWcvb2JzaWRpYW5gKSBvbiBMaW51eC5cbiAqXG4gKiBUaGlzIGlzIHRoZSB1c2VyLXNjb3BlIGRpcmVjdG9yeTsgaGFybmVzcy1vd25lZCBpc29sYXRlZCBpbnN0YW5jZXMgdXNlIHRoZWlyXG4gKiBvd24gdGVtcG9yYXJ5IHVzZXItZGF0YSBkaXIgaW5zdGVhZC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgYG9ic2lkaWFuL2AgY29uZmlnIGRpcmVjdG9yeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9ic2lkaWFuQ29uZmlnRGlyKCk6IHN0cmluZyB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgY29uc3QgYXBwRGF0YSA9IHByb2Nlc3MuZW52WydBUFBEQVRBJ107XG4gICAgaWYgKGFwcERhdGEpIHtcbiAgICAgIHJldHVybiBqb2luKGFwcERhdGEsICdvYnNpZGlhbicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgIHJldHVybiBqb2luKGhvbWVkaXIoKSwgJ0xpYnJhcnknLCAnQXBwbGljYXRpb24gU3VwcG9ydCcsICdvYnNpZGlhbicpO1xuICB9XG5cbiAgcmV0dXJuIGpvaW4ocHJvY2Vzcy5lbnZbJ1hER19DT05GSUdfSE9NRSddID8/IGpvaW4oaG9tZWRpcigpLCAnLmNvbmZpZycpLCAnb2JzaWRpYW4nKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBoZXggdmF1bHQgSUQgZm9yIGEgZ2l2ZW4gdmF1bHQgcGF0aCBmcm9tIE9ic2lkaWFuJ3MgcmVnaXN0cnkuXG4gKlxuICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gKiBAcmV0dXJucyBUaGUgdmF1bHQgSUQsIG9yIGB1bmRlZmluZWRgIGlmIHRoZSB2YXVsdCBpcyBub3QgcmVnaXN0ZXJlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZhdWx0SWQodmF1bHRQYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBjb25maWcgPSByZWFkT2JzaWRpYW5Kc29uKCk7XG4gIGlmICghY29uZmlnKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWRUYXJnZXQgPSBub3JtYWxpemVQYXRoKHZhdWx0UGF0aCk7XG5cbiAgZm9yIChjb25zdCBbaWQsIGVudHJ5XSBvZiBPYmplY3QuZW50cmllcyhjb25maWcudmF1bHRzKSkge1xuICAgIGlmIChub3JtYWxpemVQYXRoKGVudHJ5LnBhdGgpID09PSBub3JtYWxpemVkVGFyZ2V0KSB7XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIHZhdWx0IHBhdGggaXMgcmVnaXN0ZXJlZCBpbiBPYnNpZGlhbidzIHZhdWx0IHJlZ2lzdHJ5LlxuICpcbiAqIEBwYXJhbSB2YXVsdFBhdGggLSBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdmF1bHQgZm9sZGVyLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB2YXVsdCBpcyByZWdpc3RlcmVkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmF1bHRSZWdpc3RlcmVkKHZhdWx0UGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBnZXRWYXVsdElkKHZhdWx0UGF0aCkgIT09IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGEgdmF1bHQgZW50cnkgZnJvbSBPYnNpZGlhbidzIGBvYnNpZGlhbi5qc29uYCBjb25maWcgZmlsZS5cbiAqXG4gKiBAcGFyYW0gdmF1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IGZvbGRlci5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmF1bHQgd2FzIGZvdW5kIGFuZCByZW1vdmVkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVZhdWx0RnJvbUNvbmZpZyh2YXVsdFBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBjb25maWcgPSByZWFkT2JzaWRpYW5Kc29uKCk7XG4gIGlmICghY29uZmlnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZFRhcmdldCA9IG5vcm1hbGl6ZVBhdGgodmF1bHRQYXRoKTtcbiAgbGV0IHdhc0ZvdW5kID0gZmFsc2U7XG5cbiAgZm9yIChjb25zdCBbaWQsIGVudHJ5XSBvZiBPYmplY3QuZW50cmllcyhjb25maWcudmF1bHRzKSkge1xuICAgIGlmIChub3JtYWxpemVQYXRoKGVudHJ5LnBhdGgpID09PSBub3JtYWxpemVkVGFyZ2V0KSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlIC0tIFJlbW92aW5nIGEgdmF1bHQgZW50cnkgYnkgaXRzIGR5bmFtaWMga2V5LlxuICAgICAgZGVsZXRlIGNvbmZpZy52YXVsdHNbaWRdO1xuICAgICAgd2FzRm91bmQgPSB0cnVlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKHdhc0ZvdW5kKSB7XG4gICAgd3JpdGVPYnNpZGlhbkpzb24oY29uZmlnKTtcbiAgfVxuXG4gIHJldHVybiB3YXNGb3VuZDtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgdmF1bHQgcGF0aCBmb3IgY29tcGFyaXNvbi5cbiAqIE9uIFdpbmRvd3MsIHBhdGhzIGFyZSBjYXNlLWluc2Vuc2l0aXZlIGFuZCBzZXBhcmF0b3JzIG1heSB2YXJ5LlxuICpcbiAqIEBwYXJhbSB2YXVsdFBhdGggLSBUaGUgcGF0aCB0byBub3JtYWxpemUuXG4gKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCBwYXRoLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVQYXRoKHZhdWx0UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlKHZhdWx0UGF0aCk7XG4gIHJldHVybiBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gcmVzb2x2ZWQudG9Mb3dlckNhc2UoKSA6IHJlc29sdmVkO1xufVxuXG4vKipcbiAqIFJlYWRzIGFuZCBwYXJzZXMgT2JzaWRpYW4ncyBgb2JzaWRpYW4uanNvbmAgY29uZmlnIGZpbGUuXG4gKlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBjb25maWcsIG9yIGB1bmRlZmluZWRgIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3Qgb3IgY2FuJ3QgYmUgcGFyc2VkLlxuICovXG5mdW5jdGlvbiByZWFkT2JzaWRpYW5Kc29uKCk6IE9ic2lkaWFuSnNvbiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGNvbmZpZ1BhdGggPSBqb2luKGdldE9ic2lkaWFuQ29uZmlnRGlyKCksICdvYnNpZGlhbi5qc29uJyk7XG4gIHRyeSB7XG4gICAgY29uc3QgY29udGVudCA9IHJlYWRGaWxlU3luYyhjb25maWdQYXRoLCAndXRmLTgnKTtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShjb250ZW50KSBhcyBPYnNpZGlhbkpzb247XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBXcml0ZXMgdGhlIGdpdmVuIGNvbmZpZyBvYmplY3QgdG8gT2JzaWRpYW4ncyBgb2JzaWRpYW4uanNvbmAgZmlsZS5cbiAqXG4gKiBAcGFyYW0gY29uZmlnIC0gVGhlIGNvbmZpZyB0byB3cml0ZS5cbiAqL1xuZnVuY3Rpb24gd3JpdGVPYnNpZGlhbkpzb24oY29uZmlnOiBPYnNpZGlhbkpzb24pOiB2b2lkIHtcbiAgY29uc3QgY29uZmlnUGF0aCA9IGpvaW4oZ2V0T2JzaWRpYW5Db25maWdEaXIoKSwgJ29ic2lkaWFuLmpzb24nKTtcbiAgd3JpdGVGaWxlU3luYyhjb25maWdQYXRoLCBKU09OLnN0cmluZ2lmeShjb25maWcpKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQVdBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxlQUFlO0FBQ3hCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsT0FBTyxhQUFhO0FBcUNiLFNBQVMsdUJBQStCO0FBQzdDLE1BQUksUUFBUSxhQUFhLFNBQVM7QUFDaEMsVUFBTSxVQUFVLFFBQVEsSUFBSSxTQUFTO0FBQ3JDLFFBQUksU0FBUztBQUNYLGFBQU8sS0FBSyxTQUFTLFVBQVU7QUFBQSxJQUNqQztBQUFBLEVBQ0Y7QUFFQSxNQUFJLFFBQVEsYUFBYSxVQUFVO0FBQ2pDLFdBQU8sS0FBSyxRQUFRLEdBQUcsV0FBVyx1QkFBdUIsVUFBVTtBQUFBLEVBQ3JFO0FBRUEsU0FBTyxLQUFLLFFBQVEsSUFBSSxpQkFBaUIsS0FBSyxLQUFLLFFBQVEsR0FBRyxTQUFTLEdBQUcsVUFBVTtBQUN0RjtBQVFPLFNBQVMsV0FBVyxXQUF1QztBQUNoRSxRQUFNLFNBQVMsaUJBQWlCO0FBQ2hDLE1BQUksQ0FBQyxRQUFRO0FBQ1gsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLG1CQUFtQixjQUFjLFNBQVM7QUFFaEQsYUFBVyxDQUFDLElBQUksS0FBSyxLQUFLLE9BQU8sUUFBUSxPQUFPLE1BQU0sR0FBRztBQUN2RCxRQUFJLGNBQWMsTUFBTSxJQUFJLE1BQU0sa0JBQWtCO0FBQ2xELGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDtBQVFPLFNBQVMsa0JBQWtCLFdBQTRCO0FBQzVELFNBQU8sV0FBVyxTQUFTLE1BQU07QUFDbkM7QUFRTyxTQUFTLHNCQUFzQixXQUE0QjtBQUNoRSxRQUFNLFNBQVMsaUJBQWlCO0FBQ2hDLE1BQUksQ0FBQyxRQUFRO0FBQ1gsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLG1CQUFtQixjQUFjLFNBQVM7QUFDaEQsTUFBSSxXQUFXO0FBRWYsYUFBVyxDQUFDLElBQUksS0FBSyxLQUFLLE9BQU8sUUFBUSxPQUFPLE1BQU0sR0FBRztBQUN2RCxRQUFJLGNBQWMsTUFBTSxJQUFJLE1BQU0sa0JBQWtCO0FBRWxELGFBQU8sT0FBTyxPQUFPLEVBQUU7QUFDdkIsaUJBQVc7QUFDWDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsTUFBSSxVQUFVO0FBQ1osc0JBQWtCLE1BQU07QUFBQSxFQUMxQjtBQUVBLFNBQU87QUFDVDtBQVNBLFNBQVMsY0FBYyxXQUEyQjtBQUNoRCxRQUFNLFdBQVcsUUFBUSxTQUFTO0FBQ2xDLFNBQU8sUUFBUSxhQUFhLFVBQVUsU0FBUyxZQUFZLElBQUk7QUFDakU7QUFPQSxTQUFTLG1CQUE2QztBQUNwRCxRQUFNLGFBQWEsS0FBSyxxQkFBcUIsR0FBRyxlQUFlO0FBQy9ELE1BQUk7QUFDRixVQUFNLFVBQVUsYUFBYSxZQUFZLE9BQU87QUFDaEQsV0FBTyxLQUFLLE1BQU0sT0FBTztBQUFBLEVBQzNCLFFBQVE7QUFDTixXQUFPO0FBQUEsRUFDVDtBQUNGO0FBT0EsU0FBUyxrQkFBa0IsUUFBNEI7QUFDckQsUUFBTSxhQUFhLEtBQUsscUJBQXFCLEdBQUcsZUFBZTtBQUMvRCxnQkFBYyxZQUFZLEtBQUssVUFBVSxNQUFNLENBQUM7QUFDbEQ7IiwKICAibmFtZXMiOiBbXQp9Cg==
80
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWNvbmZpZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFJlYWRzIGFuZCBxdWVyaWVzIHRoZSB1c2VyJ3MgT2JzaWRpYW4gbG9jYWwgY29uZmlndXJhdGlvbiAoYG9ic2lkaWFuLmpzb25gKS5cbiAqXG4gKiBVc2VkIGJ5IHRoZSBDRFAgdHJhbnNwb3J0J3MgKiphdHRhY2gqKiBtb2RlICh0YXJnZXRpbmcgYW4gYWxyZWFkeS1ydW5uaW5nLFxuICogdXNlci1zY29wZSBPYnNpZGlhbikuIEhhcm5lc3Mtb3duZWQgaXNvbGF0ZWQgaW5zdGFuY2VzIHdyaXRlIHRoZWlyIG93blxuICogYG9ic2lkaWFuLmpzb25gIGRpcmVjdGx5IGludG8gYSB0ZW1wb3JhcnkgdXNlci1kYXRhIGRpciBhbmQgZG8gbm90IHVzZSB0aGVzZVxuICogaGVscGVycy5cbiAqL1xuXG5pbXBvcnQge1xuICByZWFkRmlsZVN5bmMsXG4gIHdyaXRlRmlsZVN5bmNcbn0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQge1xuICBqb2luLFxuICByZXNvbHZlXG59IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG4vKipcbiAqIFRoZSB0b3AtbGV2ZWwgc3RydWN0dXJlIG9mIE9ic2lkaWFuJ3MgYG9ic2lkaWFuLmpzb25gIGNvbmZpZyBmaWxlLlxuICovXG5pbnRlcmZhY2UgT2JzaWRpYW5Kc29uIHtcbiAgLyoqXG4gICAqIE1hcCBvZiB2YXVsdCBJRHMgdG8gdmF1bHQgZW50cmllcy5cbiAgICovXG4gIHZhdWx0czogUmVjb3JkPHN0cmluZywgT2JzaWRpYW5WYXVsdEVudHJ5Pjtcbn1cblxuLyoqXG4gKiBBIHNpbmdsZSB2YXVsdCBlbnRyeSBpbiBgb2JzaWRpYW4uanNvbmAuXG4gKi9cbmludGVyZmFjZSBPYnNpZGlhblZhdWx0RW50cnkge1xuICAvKipcbiAgICogVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IGZvbGRlci5cbiAgICovXG4gIHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGltZXN0YW1wIG9mIHRoZSBsYXN0IGFjY2Vzcy5cbiAgICovXG4gIHRzOiBudW1iZXI7XG59XG5cbi8qKlxuICogUmVtb3ZlcyBhIHZhdWx0IGVudHJ5IGZyb20gT2JzaWRpYW4ncyBgb2JzaWRpYW4uanNvbmAgY29uZmlnIGZpbGUuXG4gKlxuICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhdWx0IHdhcyBmb3VuZCBhbmQgcmVtb3ZlZCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWRSZW1vdmVWYXVsdEZyb21Db25maWcodmF1bHRQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgY29uZmlnID0gcmVhZE9ic2lkaWFuSnNvbigpO1xuICBpZiAoIWNvbmZpZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWRUYXJnZXQgPSBub3JtYWxpemVQYXRoKHZhdWx0UGF0aCk7XG4gIGxldCB3YXNGb3VuZCA9IGZhbHNlO1xuXG4gIGZvciAoY29uc3QgW2lkLCBlbnRyeV0gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnLnZhdWx0cykpIHtcbiAgICBpZiAobm9ybWFsaXplUGF0aChlbnRyeS5wYXRoKSA9PT0gbm9ybWFsaXplZFRhcmdldCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZSAtLSBSZW1vdmluZyBhIHZhdWx0IGVudHJ5IGJ5IGl0cyBkeW5hbWljIGtleS5cbiAgICAgIGRlbGV0ZSBjb25maWcudmF1bHRzW2lkXTtcbiAgICAgIHdhc0ZvdW5kID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmICh3YXNGb3VuZCkge1xuICAgIHdyaXRlT2JzaWRpYW5Kc29uKGNvbmZpZyk7XG4gIH1cblxuICByZXR1cm4gd2FzRm91bmQ7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgcGF0aCB0byB0aGUgKip1c2VyJ3MqKiBPYnNpZGlhbiBjb25maWcgKHVzZXItZGF0YSlcbiAqIGRpcmVjdG9yeSBcdTIwMTQgYCVBUFBEQVRBJVxcb2JzaWRpYW5gIG9uIFdpbmRvd3MsIGB+L0xpYnJhcnkvQXBwbGljYXRpb24gU3VwcG9ydC9vYnNpZGlhbmBcbiAqIG9uIG1hY09TLCBgJFhER19DT05GSUdfSE9NRS9vYnNpZGlhbmAgKG9yIGB+Ly5jb25maWcvb2JzaWRpYW5gKSBvbiBMaW51eC5cbiAqXG4gKiBUaGlzIGlzIHRoZSB1c2VyLXNjb3BlIGRpcmVjdG9yeTsgaGFybmVzcy1vd25lZCBpc29sYXRlZCBpbnN0YW5jZXMgdXNlIHRoZWlyXG4gKiBvd24gdGVtcG9yYXJ5IHVzZXItZGF0YSBkaXIgaW5zdGVhZC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgYG9ic2lkaWFuL2AgY29uZmlnIGRpcmVjdG9yeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9ic2lkaWFuQ29uZmlnRGlyZWN0b3J5KCk6IHN0cmluZyB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgY29uc3QgYXBwRGF0YSA9IHByb2Nlc3MuZW52WydBUFBEQVRBJ107XG4gICAgaWYgKGFwcERhdGEpIHtcbiAgICAgIHJldHVybiBqb2luKGFwcERhdGEsICdvYnNpZGlhbicpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgIHJldHVybiBqb2luKGhvbWVkaXIoKSwgJ0xpYnJhcnknLCAnQXBwbGljYXRpb24gU3VwcG9ydCcsICdvYnNpZGlhbicpO1xuICB9XG5cbiAgcmV0dXJuIGpvaW4ocHJvY2Vzcy5lbnZbJ1hER19DT05GSUdfSE9NRSddID8/IGpvaW4oaG9tZWRpcigpLCAnLmNvbmZpZycpLCAnb2JzaWRpYW4nKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBoZXggdmF1bHQgSUQgZm9yIGEgZ2l2ZW4gdmF1bHQgcGF0aCBmcm9tIE9ic2lkaWFuJ3MgcmVnaXN0cnkuXG4gKlxuICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gKiBAcmV0dXJucyBUaGUgdmF1bHQgSUQsIG9yIGB1bmRlZmluZWRgIGlmIHRoZSB2YXVsdCBpcyBub3QgcmVnaXN0ZXJlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZhdWx0SWQodmF1bHRQYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBjb25maWcgPSByZWFkT2JzaWRpYW5Kc29uKCk7XG4gIGlmICghY29uZmlnKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWRUYXJnZXQgPSBub3JtYWxpemVQYXRoKHZhdWx0UGF0aCk7XG5cbiAgZm9yIChjb25zdCBbaWQsIGVudHJ5XSBvZiBPYmplY3QuZW50cmllcyhjb25maWcudmF1bHRzKSkge1xuICAgIGlmIChub3JtYWxpemVQYXRoKGVudHJ5LnBhdGgpID09PSBub3JtYWxpemVkVGFyZ2V0KSB7XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIHZhdWx0IHBhdGggaXMgcmVnaXN0ZXJlZCBpbiBPYnNpZGlhbidzIHZhdWx0IHJlZ2lzdHJ5LlxuICpcbiAqIEBwYXJhbSB2YXVsdFBhdGggLSBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdmF1bHQgZm9sZGVyLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB2YXVsdCBpcyByZWdpc3RlcmVkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmF1bHRSZWdpc3RlcmVkKHZhdWx0UGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBnZXRWYXVsdElkKHZhdWx0UGF0aCkgIT09IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgdmF1bHQgcGF0aCBmb3IgY29tcGFyaXNvbi5cbiAqIE9uIFdpbmRvd3MsIHBhdGhzIGFyZSBjYXNlLWluc2Vuc2l0aXZlIGFuZCBzZXBhcmF0b3JzIG1heSB2YXJ5LlxuICpcbiAqIEBwYXJhbSB2YXVsdFBhdGggLSBUaGUgcGF0aCB0byBub3JtYWxpemUuXG4gKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCBwYXRoLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVQYXRoKHZhdWx0UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlKHZhdWx0UGF0aCk7XG4gIHJldHVybiBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gcmVzb2x2ZWQudG9Mb3dlckNhc2UoKSA6IHJlc29sdmVkO1xufVxuXG4vKipcbiAqIFJlYWRzIGFuZCBwYXJzZXMgT2JzaWRpYW4ncyBgb2JzaWRpYW4uanNvbmAgY29uZmlnIGZpbGUuXG4gKlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBjb25maWcsIG9yIGB1bmRlZmluZWRgIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3Qgb3IgY2FuJ3QgYmUgcGFyc2VkLlxuICovXG5mdW5jdGlvbiByZWFkT2JzaWRpYW5Kc29uKCk6IE9ic2lkaWFuSnNvbiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGNvbmZpZ1BhdGggPSBqb2luKGdldE9ic2lkaWFuQ29uZmlnRGlyZWN0b3J5KCksICdvYnNpZGlhbi5qc29uJyk7XG4gIHRyeSB7XG4gICAgY29uc3QgY29udGVudCA9IHJlYWRGaWxlU3luYyhjb25maWdQYXRoLCAndXRmLTgnKTtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShjb250ZW50KSBhcyBPYnNpZGlhbkpzb247XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBXcml0ZXMgdGhlIGdpdmVuIGNvbmZpZyBvYmplY3QgdG8gT2JzaWRpYW4ncyBgb2JzaWRpYW4uanNvbmAgZmlsZS5cbiAqXG4gKiBAcGFyYW0gY29uZmlnIC0gVGhlIGNvbmZpZyB0byB3cml0ZS5cbiAqL1xuZnVuY3Rpb24gd3JpdGVPYnNpZGlhbkpzb24oY29uZmlnOiBPYnNpZGlhbkpzb24pOiB2b2lkIHtcbiAgY29uc3QgY29uZmlnUGF0aCA9IGpvaW4oZ2V0T2JzaWRpYW5Db25maWdEaXJlY3RvcnkoKSwgJ29ic2lkaWFuLmpzb24nKTtcbiAgd3JpdGVGaWxlU3luYyhjb25maWdQYXRoLCBKU09OLnN0cmluZ2lmeShjb25maWcpKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQVdBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxlQUFlO0FBQ3hCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsT0FBTyxhQUFhO0FBaUNiLFNBQVMseUJBQXlCLFdBQTRCO0FBQ25FLFFBQU0sU0FBUyxpQkFBaUI7QUFDaEMsTUFBSSxDQUFDLFFBQVE7QUFDWCxXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sbUJBQW1CLGNBQWMsU0FBUztBQUNoRCxNQUFJLFdBQVc7QUFFZixhQUFXLENBQUMsSUFBSSxLQUFLLEtBQUssT0FBTyxRQUFRLE9BQU8sTUFBTSxHQUFHO0FBQ3ZELFFBQUksY0FBYyxNQUFNLElBQUksTUFBTSxrQkFBa0I7QUFFbEQsYUFBTyxPQUFPLE9BQU8sRUFBRTtBQUN2QixpQkFBVztBQUNYO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxNQUFJLFVBQVU7QUFDWixzQkFBa0IsTUFBTTtBQUFBLEVBQzFCO0FBRUEsU0FBTztBQUNUO0FBWU8sU0FBUyw2QkFBcUM7QUFDbkQsTUFBSSxRQUFRLGFBQWEsU0FBUztBQUNoQyxVQUFNLFVBQVUsUUFBUSxJQUFJLFNBQVM7QUFDckMsUUFBSSxTQUFTO0FBQ1gsYUFBTyxLQUFLLFNBQVMsVUFBVTtBQUFBLElBQ2pDO0FBQUEsRUFDRixXQUFXLFFBQVEsYUFBYSxVQUFVO0FBQ3hDLFdBQU8sS0FBSyxRQUFRLEdBQUcsV0FBVyx1QkFBdUIsVUFBVTtBQUFBLEVBQ3JFO0FBRUEsU0FBTyxLQUFLLFFBQVEsSUFBSSxpQkFBaUIsS0FBSyxLQUFLLFFBQVEsR0FBRyxTQUFTLEdBQUcsVUFBVTtBQUN0RjtBQVFPLFNBQVMsV0FBVyxXQUF1QztBQUNoRSxRQUFNLFNBQVMsaUJBQWlCO0FBQ2hDLE1BQUksQ0FBQyxRQUFRO0FBQ1gsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLG1CQUFtQixjQUFjLFNBQVM7QUFFaEQsYUFBVyxDQUFDLElBQUksS0FBSyxLQUFLLE9BQU8sUUFBUSxPQUFPLE1BQU0sR0FBRztBQUN2RCxRQUFJLGNBQWMsTUFBTSxJQUFJLE1BQU0sa0JBQWtCO0FBQ2xELGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDtBQVFPLFNBQVMsa0JBQWtCLFdBQTRCO0FBQzVELFNBQU8sV0FBVyxTQUFTLE1BQU07QUFDbkM7QUFTQSxTQUFTLGNBQWMsV0FBMkI7QUFDaEQsUUFBTSxXQUFXLFFBQVEsU0FBUztBQUNsQyxTQUFPLFFBQVEsYUFBYSxVQUFVLFNBQVMsWUFBWSxJQUFJO0FBQ2pFO0FBT0EsU0FBUyxtQkFBNkM7QUFDcEQsUUFBTSxhQUFhLEtBQUssMkJBQTJCLEdBQUcsZUFBZTtBQUNyRSxNQUFJO0FBQ0YsVUFBTSxVQUFVLGFBQWEsWUFBWSxPQUFPO0FBQ2hELFdBQU8sS0FBSyxNQUFNLE9BQU87QUFBQSxFQUMzQixRQUFRO0FBQ04sV0FBTztBQUFBLEVBQ1Q7QUFDRjtBQU9BLFNBQVMsa0JBQWtCLFFBQTRCO0FBQ3JELFFBQU0sYUFBYSxLQUFLLDJCQUEyQixHQUFHLGVBQWU7QUFDckUsZ0JBQWMsWUFBWSxLQUFLLFVBQVUsTUFBTSxDQUFDO0FBQ2xEOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -49,7 +49,7 @@ async function resolveOnWindows() {
49
49
  return fromPath;
50
50
  }
51
51
  const localAppData = process.env["LOCALAPPDATA"] ?? "";
52
- const installerPath = `${localAppData}\\Programs\\Obsidian\\Obsidian.exe`;
52
+ const installerPath = String.raw`${localAppData}\Programs\Obsidian\Obsidian.exe`;
53
53
  if (existsSync(installerPath)) {
54
54
  return installerPath;
55
55
  }
@@ -60,4 +60,4 @@ async function resolveOnWindows() {
60
60
  export {
61
61
  resolveObsidianExecutable
62
62
  };
63
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWV4ZWN1dGFibGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBSZXNvbHZlcyB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgaW5zdGFsbGVkIE9ic2lkaWFuIGV4ZWN1dGFibGUgb24gdGhlIGhvc3QgbWFjaGluZS5cbiAqXG4gKiBVc2VkIGJ5IGRlc2t0b3AgdHJhbnNwb3J0cyAoYENMSWAsIGBDRFBgKSB0byBhdXRvLWxhdW5jaCBPYnNpZGlhbiB3aGVuIGl0IGlzXG4gKiBub3QgYWxyZWFkeSBydW5uaW5nLiBTdXBwb3J0cyBpbnN0YWxsZXItYmFzZWQgaW5zdGFsbHMgKGUuZy5cbiAqIGAlTE9DQUxBUFBEQVRBJVxcUHJvZ3JhbXNcXE9ic2lkaWFuXFxPYnNpZGlhbi5leGVgIG9uIFdpbmRvd3MsXG4gKiBgL0FwcGxpY2F0aW9ucy9PYnNpZGlhbi5hcHBgIG9uIG1hY09TKSBhbmQgYFBBVEhgLWJhc2VkIGluc3RhbGxzIChlLmcuXG4gKiBgc2Nvb3BgIHNoaW1zIG9uIFdpbmRvd3MsIHBhY2thZ2UgbWFuYWdlciBpbnN0YWxscyBvbiBMaW51eCkuXG4gKlxuICogVGhlIHBhdGggaXMgdmVyaWZpZWQgdG8gZXhpc3Qgb24gZGlzayBiZWZvcmUgYmVpbmcgcmV0dXJuZWQuIElmIE9ic2lkaWFuXG4gKiBjYW5ub3QgYmUgbG9jYXRlZCwgYSBkZXNjcmlwdGl2ZSBgRXJyb3JgIGlzIHRocm93biBzbyB0aGUgY2FsbGVyIGNhbiBzdXJmYWNlXG4gKiBhbiBhY3Rpb25hYmxlIG1lc3NhZ2UgaW5zdGVhZCBvZiBzcGF3bmluZyBhIG5vbi1leGlzdGVudCBiaW5hcnkgKHdoaWNoIG9uXG4gKiBXaW5kb3dzIGNhdXNlcyBgc3RhcnRgIHRvIHNob3cgYSBgU2hlbGxFeGVjdXRlYCBkaWFsb2cgYm94IHJhdGhlciB0aGFuXG4gKiBmYWlsaW5nIHdpdGggYW4gZXhpdCBjb2RlKS5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gSW50ZWdyYXRpb24tdGltZSBjb2RlIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQgeyBleGVjIH0gZnJvbSAnLi9leGVjLm1qcyc7XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIE9ic2lkaWFuIGV4ZWN1dGFibGUgb24gdGhlIGhvc3QgbWFjaGluZS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgT2JzaWRpYW4gZXhlY3V0YWJsZS5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgT2JzaWRpYW4gY2Fubm90IGJlIGxvY2F0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlT2JzaWRpYW5FeGVjdXRhYmxlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgcmV0dXJuIGF3YWl0IHJlc29sdmVPbldpbmRvd3MoKTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgIHJldHVybiByZXNvbHZlT25NYWNPcygpO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IHJlc29sdmVPbkxpbnV4KCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpbmRJblBhdGgobG9va3VwQ29tbWFuZDogc3RyaW5nLCBleGVjdXRhYmxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgbGV0IG91dHB1dDogc3RyaW5nO1xuICB0cnkge1xuICAgIG91dHB1dCA9IGF3YWl0IGV4ZWMoYCR7bG9va3VwQ29tbWFuZH0gJHtleGVjdXRhYmxlTmFtZX1gLCB7IGlzUXVpZXQ6IHRydWUgfSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBjYW5kaWRhdGVzID0gb3V0cHV0XG4gICAgLnNwbGl0KC9cXHI/XFxuLylcbiAgICAubWFwKChsaW5lKSA9PiBsaW5lLnRyaW0oKSlcbiAgICAuZmlsdGVyKChsaW5lKSA9PiBsaW5lLmxlbmd0aCA+IDAgJiYgZXhpc3RzU3luYyhsaW5lKSk7XG5cbiAgLypcbiAgICogUHJlZmVyIGEgcmVhbCBleGVjdXRhYmxlIG92ZXIgYSBsYXVuY2hlciBzaGltLiBgc2Nvb3BgIGluc3RhbGxzIGNyZWF0ZSBhXG4gICAqIGA8bmFtZT4uZXhlYCBzaGltIGluIGBzY29vcFxcc2hpbXNcXGAgdGhhdCBmb3J3YXJkcyB0byB0aGUgYC5jb21gIGNvbnNvbGVcbiAgICogYmluYXJ5OyBsYXVuY2hpbmcgaXQgcnVucyB0aGUgQ0xJICh3aGljaCBleGl0cyBpbW1lZGlhdGVseSkgaW5zdGVhZCBvZiB0aGVcbiAgICogR1VJLCBzbyBhdXRvLWxhdW5jaCB3b3VsZCBuZXZlciBzdGFydCBPYnNpZGlhbi4gYHdoZXJlLmV4ZWAgbGlzdHMgdGhlIHNoaW1cbiAgICogYmVmb3JlIHRoZSBhY3R1YWwgYHNjb29wXFxhcHBzXFw8YXBwPlxcY3VycmVudFxcPG5hbWU+LmV4ZWAsIHNvIHNraXAgYW55IHNoaW0uXG4gICAqL1xuICBjb25zdCBub25TaGltID0gY2FuZGlkYXRlcy5maW5kKChjYW5kaWRhdGUpID0+ICFpc1NoaW0oY2FuZGlkYXRlKSk7XG4gIHJldHVybiBub25TaGltID8/IGNhbmRpZGF0ZXNbMF07XG59XG5cbi8qKlxuICogRGV0ZWN0cyB3aGV0aGVyIGFuIGV4ZWN1dGFibGUgcGF0aCBpcyBhIGBzY29vcGAgc2hpbSByYXRoZXIgdGhhbiB0aGUgcmVhbFxuICogYmluYXJ5LiBTY29vcCBzaGltcyBoYXZlIGEgc2libGluZyBgPG5hbWU+LnNoaW1gIGZpbGUgZGVzY3JpYmluZyB0aGUgZm9yd2FyZFxuICogdGFyZ2V0OyB0aGUgcmVhbCBleGVjdXRhYmxlIGhhcyBubyBzdWNoIGNvbXBhbmlvbi5cbiAqXG4gKiBAcGFyYW0gZXhlY3V0YWJsZVBhdGggLSBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgZXhlY3V0YWJsZS5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgcGF0aCBpcyBhIHNjb29wIHNoaW0uXG4gKi9cbmZ1bmN0aW9uIGlzU2hpbShleGVjdXRhYmxlUGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IHNoaW1NYXJrZXJQYXRoID0gZXhlY3V0YWJsZVBhdGgucmVwbGFjZSgvXFwuW14uXFxcXC9dKyQvLCAnLnNoaW0nKTtcbiAgcmV0dXJuIHNoaW1NYXJrZXJQYXRoICE9PSBleGVjdXRhYmxlUGF0aCAmJiBleGlzdHNTeW5jKHNoaW1NYXJrZXJQYXRoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZU9uTGludXgoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZnJvbVBhdGggPSBhd2FpdCBmaW5kSW5QYXRoKCd3aGljaCcsICdvYnNpZGlhbicpO1xuICBpZiAoZnJvbVBhdGgpIHtcbiAgICByZXR1cm4gZnJvbVBhdGg7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgJ1VuYWJsZSB0byBsb2NhdGUgT2JzaWRpYW4gZXhlY3V0YWJsZS4gSW5zdGFsbCBPYnNpZGlhbiBhbmQgZW5zdXJlIGBvYnNpZGlhbmAgaXMgb24gUEFUSC4nXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVPbk1hY09zKCk6IHN0cmluZyB7XG4gIGNvbnN0IHN0YW5kYXJkUGF0aCA9ICcvQXBwbGljYXRpb25zL09ic2lkaWFuLmFwcC9Db250ZW50cy9NYWNPUy9PYnNpZGlhbic7XG4gIGlmIChleGlzdHNTeW5jKHN0YW5kYXJkUGF0aCkpIHtcbiAgICByZXR1cm4gc3RhbmRhcmRQYXRoO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIGBVbmFibGUgdG8gbG9jYXRlIE9ic2lkaWFuIGV4ZWN1dGFibGUgYXQgXFxgJHtzdGFuZGFyZFBhdGh9XFxgLiBJbnN0YWxsIE9ic2lkaWFuIGZyb20gaHR0cHM6Ly9vYnNpZGlhbi5tZC9kb3dubG9hZC5gXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVPbldpbmRvd3MoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZnJvbVBhdGggPSBhd2FpdCBmaW5kSW5QYXRoKCd3aGVyZS5leGUnLCAnT2JzaWRpYW4uZXhlJyk7XG4gIGlmIChmcm9tUGF0aCkge1xuICAgIHJldHVybiBmcm9tUGF0aDtcbiAgfVxuXG4gIGNvbnN0IGxvY2FsQXBwRGF0YSA9IHByb2Nlc3MuZW52WydMT0NBTEFQUERBVEEnXSA/PyAnJztcbiAgY29uc3QgaW5zdGFsbGVyUGF0aCA9IGAke2xvY2FsQXBwRGF0YX1cXFxcUHJvZ3JhbXNcXFxcT2JzaWRpYW5cXFxcT2JzaWRpYW4uZXhlYDtcbiAgaWYgKGV4aXN0c1N5bmMoaW5zdGFsbGVyUGF0aCkpIHtcbiAgICByZXR1cm4gaW5zdGFsbGVyUGF0aDtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgVW5hYmxlIHRvIGxvY2F0ZSBPYnNpZGlhbiBleGVjdXRhYmxlLiBJbnN0YWxsIE9ic2lkaWFuIChlLmcuIGZyb20gaHR0cHM6Ly9vYnNpZGlhbi5tZC9kb3dubG9hZCBvciB2aWEgXFxgc2Nvb3AgaW5zdGFsbCBvYnNpZGlhblxcYCkgYW5kIGVuc3VyZSBpdCBpcyBvbiBQQVRIIG9yIGluc3RhbGxlZCB0byBcXGAke2luc3RhbGxlclBhdGh9XFxgLmBcbiAgKTtcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICJBQW9CQSxTQUFTLGtCQUFrQjtBQUMzQixPQUFPLGFBQWE7QUFFcEIsU0FBUyxZQUFZO0FBUXJCLGVBQXNCLDRCQUE2QztBQUNqRSxNQUFJLFFBQVEsYUFBYSxTQUFTO0FBQ2hDLFdBQU8sTUFBTSxpQkFBaUI7QUFBQSxFQUNoQztBQUVBLE1BQUksUUFBUSxhQUFhLFVBQVU7QUFDakMsV0FBTyxlQUFlO0FBQUEsRUFDeEI7QUFFQSxTQUFPLE1BQU0sZUFBZTtBQUM5QjtBQUVBLGVBQWUsV0FBVyxlQUF1QixnQkFBcUQ7QUFDcEcsTUFBSTtBQUNKLE1BQUk7QUFDRixhQUFTLE1BQU0sS0FBSyxHQUFHLGFBQWEsSUFBSSxjQUFjLElBQUksRUFBRSxTQUFTLEtBQUssQ0FBQztBQUFBLEVBQzdFLFFBQVE7QUFDTixXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sYUFBYSxPQUNoQixNQUFNLE9BQU8sRUFDYixJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxFQUN6QixPQUFPLENBQUMsU0FBUyxLQUFLLFNBQVMsS0FBSyxXQUFXLElBQUksQ0FBQztBQVN2RCxRQUFNLFVBQVUsV0FBVyxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sU0FBUyxDQUFDO0FBQ2pFLFNBQU8sV0FBVyxXQUFXLENBQUM7QUFDaEM7QUFVQSxTQUFTLE9BQU8sZ0JBQWlDO0FBQy9DLFFBQU0saUJBQWlCLGVBQWUsUUFBUSxlQUFlLE9BQU87QUFDcEUsU0FBTyxtQkFBbUIsa0JBQWtCLFdBQVcsY0FBYztBQUN2RTtBQUVBLGVBQWUsaUJBQWtDO0FBQy9DLFFBQU0sV0FBVyxNQUFNLFdBQVcsU0FBUyxVQUFVO0FBQ3JELE1BQUksVUFBVTtBQUNaLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxJQUFJO0FBQUEsSUFDUjtBQUFBLEVBQ0Y7QUFDRjtBQUVBLFNBQVMsaUJBQXlCO0FBQ2hDLFFBQU0sZUFBZTtBQUNyQixNQUFJLFdBQVcsWUFBWSxHQUFHO0FBQzVCLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxJQUFJO0FBQUEsSUFDUiw2Q0FBNkMsWUFBWTtBQUFBLEVBQzNEO0FBQ0Y7QUFFQSxlQUFlLG1CQUFvQztBQUNqRCxRQUFNLFdBQVcsTUFBTSxXQUFXLGFBQWEsY0FBYztBQUM3RCxNQUFJLFVBQVU7QUFDWixXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sZUFBZSxRQUFRLElBQUksY0FBYyxLQUFLO0FBQ3BELFFBQU0sZ0JBQWdCLEdBQUcsWUFBWTtBQUNyQyxNQUFJLFdBQVcsYUFBYSxHQUFHO0FBQzdCLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxJQUFJO0FBQUEsSUFDUixnTEFBZ0wsYUFBYTtBQUFBLEVBQy9MO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
63
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWV4ZWN1dGFibGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBSZXNvbHZlcyB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgaW5zdGFsbGVkIE9ic2lkaWFuIGV4ZWN1dGFibGUgb24gdGhlIGhvc3QgbWFjaGluZS5cbiAqXG4gKiBVc2VkIGJ5IGRlc2t0b3AgdHJhbnNwb3J0cyAoYENMSWAsIGBDRFBgKSB0byBhdXRvLWxhdW5jaCBPYnNpZGlhbiB3aGVuIGl0IGlzXG4gKiBub3QgYWxyZWFkeSBydW5uaW5nLiBTdXBwb3J0cyBpbnN0YWxsZXItYmFzZWQgaW5zdGFsbHMgKGUuZy5cbiAqIGAlTE9DQUxBUFBEQVRBJVxcUHJvZ3JhbXNcXE9ic2lkaWFuXFxPYnNpZGlhbi5leGVgIG9uIFdpbmRvd3MsXG4gKiBgL0FwcGxpY2F0aW9ucy9PYnNpZGlhbi5hcHBgIG9uIG1hY09TKSBhbmQgYFBBVEhgLWJhc2VkIGluc3RhbGxzIChlLmcuXG4gKiBgc2Nvb3BgIHNoaW1zIG9uIFdpbmRvd3MsIHBhY2thZ2UgbWFuYWdlciBpbnN0YWxscyBvbiBMaW51eCkuXG4gKlxuICogVGhlIHBhdGggaXMgdmVyaWZpZWQgdG8gZXhpc3Qgb24gZGlzayBiZWZvcmUgYmVpbmcgcmV0dXJuZWQuIElmIE9ic2lkaWFuXG4gKiBjYW5ub3QgYmUgbG9jYXRlZCwgYSBkZXNjcmlwdGl2ZSBgRXJyb3JgIGlzIHRocm93biBzbyB0aGUgY2FsbGVyIGNhbiBzdXJmYWNlXG4gKiBhbiBhY3Rpb25hYmxlIG1lc3NhZ2UgaW5zdGVhZCBvZiBzcGF3bmluZyBhIG5vbi1leGlzdGVudCBiaW5hcnkgKHdoaWNoIG9uXG4gKiBXaW5kb3dzIGNhdXNlcyBgc3RhcnRgIHRvIHNob3cgYSBgU2hlbGxFeGVjdXRlYCBkaWFsb2cgYm94IHJhdGhlciB0aGFuXG4gKiBmYWlsaW5nIHdpdGggYW4gZXhpdCBjb2RlKS5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gSW50ZWdyYXRpb24tdGltZSBjb2RlIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQgeyBleGVjIH0gZnJvbSAnLi9leGVjLm1qcyc7XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIE9ic2lkaWFuIGV4ZWN1dGFibGUgb24gdGhlIGhvc3QgbWFjaGluZS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgT2JzaWRpYW4gZXhlY3V0YWJsZS5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgT2JzaWRpYW4gY2Fubm90IGJlIGxvY2F0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlT2JzaWRpYW5FeGVjdXRhYmxlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgcmV0dXJuIGF3YWl0IHJlc29sdmVPbldpbmRvd3MoKTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgIHJldHVybiByZXNvbHZlT25NYWNPcygpO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IHJlc29sdmVPbkxpbnV4KCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpbmRJblBhdGgobG9va3VwQ29tbWFuZDogc3RyaW5nLCBleGVjdXRhYmxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgbGV0IG91dHB1dDogc3RyaW5nO1xuICB0cnkge1xuICAgIG91dHB1dCA9IGF3YWl0IGV4ZWMoYCR7bG9va3VwQ29tbWFuZH0gJHtleGVjdXRhYmxlTmFtZX1gLCB7IGlzUXVpZXQ6IHRydWUgfSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBjYW5kaWRhdGVzID0gb3V0cHV0XG4gICAgLnNwbGl0KC9cXHI/XFxuLylcbiAgICAubWFwKChsaW5lKSA9PiBsaW5lLnRyaW0oKSlcbiAgICAuZmlsdGVyKChsaW5lKSA9PiBsaW5lLmxlbmd0aCA+IDAgJiYgZXhpc3RzU3luYyhsaW5lKSk7XG5cbiAgLypcbiAgICogUHJlZmVyIGEgcmVhbCBleGVjdXRhYmxlIG92ZXIgYSBsYXVuY2hlciBzaGltLiBgc2Nvb3BgIGluc3RhbGxzIGNyZWF0ZSBhXG4gICAqIGA8bmFtZT4uZXhlYCBzaGltIGluIGBzY29vcFxcc2hpbXNcXGAgdGhhdCBmb3J3YXJkcyB0byB0aGUgYC5jb21gIGNvbnNvbGVcbiAgICogYmluYXJ5OyBsYXVuY2hpbmcgaXQgcnVucyB0aGUgQ0xJICh3aGljaCBleGl0cyBpbW1lZGlhdGVseSkgaW5zdGVhZCBvZiB0aGVcbiAgICogR1VJLCBzbyBhdXRvLWxhdW5jaCB3b3VsZCBuZXZlciBzdGFydCBPYnNpZGlhbi4gYHdoZXJlLmV4ZWAgbGlzdHMgdGhlIHNoaW1cbiAgICogYmVmb3JlIHRoZSBhY3R1YWwgYHNjb29wXFxhcHBzXFw8YXBwPlxcY3VycmVudFxcPG5hbWU+LmV4ZWAsIHNvIHNraXAgYW55IHNoaW0uXG4gICAqL1xuICBjb25zdCBub25TaGltID0gY2FuZGlkYXRlcy5maW5kKChjYW5kaWRhdGUpID0+ICFpc1NoaW0oY2FuZGlkYXRlKSk7XG4gIHJldHVybiBub25TaGltID8/IGNhbmRpZGF0ZXNbMF07XG59XG5cbi8qKlxuICogRGV0ZWN0cyB3aGV0aGVyIGFuIGV4ZWN1dGFibGUgcGF0aCBpcyBhIGBzY29vcGAgc2hpbSByYXRoZXIgdGhhbiB0aGUgcmVhbFxuICogYmluYXJ5LiBTY29vcCBzaGltcyBoYXZlIGEgc2libGluZyBgPG5hbWU+LnNoaW1gIGZpbGUgZGVzY3JpYmluZyB0aGUgZm9yd2FyZFxuICogdGFyZ2V0OyB0aGUgcmVhbCBleGVjdXRhYmxlIGhhcyBubyBzdWNoIGNvbXBhbmlvbi5cbiAqXG4gKiBAcGFyYW0gZXhlY3V0YWJsZVBhdGggLSBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgZXhlY3V0YWJsZS5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgcGF0aCBpcyBhIHNjb29wIHNoaW0uXG4gKi9cbmZ1bmN0aW9uIGlzU2hpbShleGVjdXRhYmxlUGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IHNoaW1NYXJrZXJQYXRoID0gZXhlY3V0YWJsZVBhdGgucmVwbGFjZSgvXFwuW14uXFxcXC9dKyQvLCAnLnNoaW0nKTtcbiAgcmV0dXJuIHNoaW1NYXJrZXJQYXRoICE9PSBleGVjdXRhYmxlUGF0aCAmJiBleGlzdHNTeW5jKHNoaW1NYXJrZXJQYXRoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZU9uTGludXgoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZnJvbVBhdGggPSBhd2FpdCBmaW5kSW5QYXRoKCd3aGljaCcsICdvYnNpZGlhbicpO1xuICBpZiAoZnJvbVBhdGgpIHtcbiAgICByZXR1cm4gZnJvbVBhdGg7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgJ1VuYWJsZSB0byBsb2NhdGUgT2JzaWRpYW4gZXhlY3V0YWJsZS4gSW5zdGFsbCBPYnNpZGlhbiBhbmQgZW5zdXJlIGBvYnNpZGlhbmAgaXMgb24gUEFUSC4nXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVPbk1hY09zKCk6IHN0cmluZyB7XG4gIGNvbnN0IHN0YW5kYXJkUGF0aCA9ICcvQXBwbGljYXRpb25zL09ic2lkaWFuLmFwcC9Db250ZW50cy9NYWNPUy9PYnNpZGlhbic7XG4gIGlmIChleGlzdHNTeW5jKHN0YW5kYXJkUGF0aCkpIHtcbiAgICByZXR1cm4gc3RhbmRhcmRQYXRoO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIGBVbmFibGUgdG8gbG9jYXRlIE9ic2lkaWFuIGV4ZWN1dGFibGUgYXQgXFxgJHtzdGFuZGFyZFBhdGh9XFxgLiBJbnN0YWxsIE9ic2lkaWFuIGZyb20gaHR0cHM6Ly9vYnNpZGlhbi5tZC9kb3dubG9hZC5gXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVPbldpbmRvd3MoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZnJvbVBhdGggPSBhd2FpdCBmaW5kSW5QYXRoKCd3aGVyZS5leGUnLCAnT2JzaWRpYW4uZXhlJyk7XG4gIGlmIChmcm9tUGF0aCkge1xuICAgIHJldHVybiBmcm9tUGF0aDtcbiAgfVxuXG4gIGNvbnN0IGxvY2FsQXBwRGF0YSA9IHByb2Nlc3MuZW52WydMT0NBTEFQUERBVEEnXSA/PyAnJztcbiAgY29uc3QgaW5zdGFsbGVyUGF0aCA9IFN0cmluZy5yYXdgJHtsb2NhbEFwcERhdGF9XFxQcm9ncmFtc1xcT2JzaWRpYW5cXE9ic2lkaWFuLmV4ZWA7XG4gIGlmIChleGlzdHNTeW5jKGluc3RhbGxlclBhdGgpKSB7XG4gICAgcmV0dXJuIGluc3RhbGxlclBhdGg7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgYFVuYWJsZSB0byBsb2NhdGUgT2JzaWRpYW4gZXhlY3V0YWJsZS4gSW5zdGFsbCBPYnNpZGlhbiAoZS5nLiBmcm9tIGh0dHBzOi8vb2JzaWRpYW4ubWQvZG93bmxvYWQgb3IgdmlhIFxcYHNjb29wIGluc3RhbGwgb2JzaWRpYW5cXGApIGFuZCBlbnN1cmUgaXQgaXMgb24gUEFUSCBvciBpbnN0YWxsZWQgdG8gXFxgJHtpbnN0YWxsZXJQYXRofVxcYC5gXG4gICk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiQUFvQkEsU0FBUyxrQkFBa0I7QUFDM0IsT0FBTyxhQUFhO0FBRXBCLFNBQVMsWUFBWTtBQVFyQixlQUFzQiw0QkFBNkM7QUFDakUsTUFBSSxRQUFRLGFBQWEsU0FBUztBQUNoQyxXQUFPLE1BQU0saUJBQWlCO0FBQUEsRUFDaEM7QUFFQSxNQUFJLFFBQVEsYUFBYSxVQUFVO0FBQ2pDLFdBQU8sZUFBZTtBQUFBLEVBQ3hCO0FBRUEsU0FBTyxNQUFNLGVBQWU7QUFDOUI7QUFFQSxlQUFlLFdBQVcsZUFBdUIsZ0JBQXFEO0FBQ3BHLE1BQUk7QUFDSixNQUFJO0FBQ0YsYUFBUyxNQUFNLEtBQUssR0FBRyxhQUFhLElBQUksY0FBYyxJQUFJLEVBQUUsU0FBUyxLQUFLLENBQUM7QUFBQSxFQUM3RSxRQUFRO0FBQ04sV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLGFBQWEsT0FDaEIsTUFBTSxPQUFPLEVBQ2IsSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsRUFDekIsT0FBTyxDQUFDLFNBQVMsS0FBSyxTQUFTLEtBQUssV0FBVyxJQUFJLENBQUM7QUFTdkQsUUFBTSxVQUFVLFdBQVcsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLFNBQVMsQ0FBQztBQUNqRSxTQUFPLFdBQVcsV0FBVyxDQUFDO0FBQ2hDO0FBVUEsU0FBUyxPQUFPLGdCQUFpQztBQUMvQyxRQUFNLGlCQUFpQixlQUFlLFFBQVEsZUFBZSxPQUFPO0FBQ3BFLFNBQU8sbUJBQW1CLGtCQUFrQixXQUFXLGNBQWM7QUFDdkU7QUFFQSxlQUFlLGlCQUFrQztBQUMvQyxRQUFNLFdBQVcsTUFBTSxXQUFXLFNBQVMsVUFBVTtBQUNyRCxNQUFJLFVBQVU7QUFDWixXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sSUFBSTtBQUFBLElBQ1I7QUFBQSxFQUNGO0FBQ0Y7QUFFQSxTQUFTLGlCQUF5QjtBQUNoQyxRQUFNLGVBQWU7QUFDckIsTUFBSSxXQUFXLFlBQVksR0FBRztBQUM1QixXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sSUFBSTtBQUFBLElBQ1IsNkNBQTZDLFlBQVk7QUFBQSxFQUMzRDtBQUNGO0FBRUEsZUFBZSxtQkFBb0M7QUFDakQsUUFBTSxXQUFXLE1BQU0sV0FBVyxhQUFhLGNBQWM7QUFDN0QsTUFBSSxVQUFVO0FBQ1osV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLGVBQWUsUUFBUSxJQUFJLGNBQWMsS0FBSztBQUNwRCxRQUFNLGdCQUFnQixPQUFPLE1BQU0sWUFBWTtBQUMvQyxNQUFJLFdBQVcsYUFBYSxHQUFHO0FBQzdCLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxJQUFJO0FBQUEsSUFDUixnTEFBZ0wsYUFBYTtBQUFBLEVBQy9MO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -18,9 +18,13 @@
18
18
  * A resolved Obsidian shell executable.
19
19
  */
20
20
  export interface ResolvedShell {
21
- /** Absolute path to the Obsidian executable to launch. */
21
+ /**
22
+ Absolute path to the Obsidian executable to launch.
23
+ */
22
24
  readonly exePath: string;
23
- /** The shell's version, or `undefined` if it could not be detected. */
25
+ /**
26
+ The shell's version, or `undefined` if it could not be detected.
27
+ */
24
28
  readonly version: string | undefined;
25
29
  }
26
30
  /**
@@ -50,4 +54,4 @@ export declare function ensureShellCached(version: string): Promise<string>;
50
54
  * @param version - A concrete public `x.y.z` version.
51
55
  * @returns The absolute shell cache directory for the version.
52
56
  */
53
- export declare function getCachedShellDir(version: string): string;
57
+ export declare function getCachedShellDirectory(version: string): string;
@@ -39,16 +39,16 @@ function detectInstalledShellVersion(exePath) {
39
39
  return detectVersionFromPath(exePath);
40
40
  }
41
41
  async function ensureShellCached(version) {
42
- const shellDir = getCachedShellDir(version);
43
- const exePath = getCachedShellExePath(shellDir);
42
+ const shellDirectory = getCachedShellDirectory(version);
43
+ const exePath = getCachedShellExePath(shellDirectory);
44
44
  if (existsSync(exePath)) {
45
45
  log(`[installer] Using cached shell for ${version}.`);
46
46
  return exePath;
47
47
  }
48
- mkdirSync(shellDir, { recursive: true });
48
+ mkdirSync(shellDirectory, { recursive: true });
49
49
  const assetUrls = await resolveInstallerAssetUrls(version);
50
- const assetPath = await downloadInstallerAsset(assetUrls, shellDir, version);
51
- extractShell(assetPath, shellDir);
50
+ const assetPath = await downloadInstallerAsset(assetUrls, shellDirectory, version);
51
+ extractShell(assetPath, shellDirectory);
52
52
  rmSync(assetPath, { force: true });
53
53
  if (!existsSync(exePath)) {
54
54
  throw new Error(`Extracted Obsidian shell ${version} but executable not found at ${exePath}.`);
@@ -56,7 +56,7 @@ async function ensureShellCached(version) {
56
56
  log(`[installer] Extracted shell ${version} -> ${exePath}`);
57
57
  return exePath;
58
58
  }
59
- function getCachedShellDir(version) {
59
+ function getCachedShellDirectory(version) {
60
60
  return join(SHELL_CACHE_DIR, version);
61
61
  }
62
62
  function assertCommandAvailable(command, hint) {
@@ -68,8 +68,8 @@ function assertCommandAvailable(command, hint) {
68
68
  }
69
69
  function detectMacBundleVersion(exePath) {
70
70
  try {
71
- const contentsDir = dirname(dirname(exePath));
72
- const plist = readFileSync(join(contentsDir, "Info.plist"), "utf-8");
71
+ const contentsDirectory = dirname(dirname(exePath));
72
+ const plist = readFileSync(join(contentsDirectory, "Info.plist"), "utf-8");
73
73
  const match = MAC_PLIST_VERSION_PATTERN.exec(plist);
74
74
  return match?.groups?.["version"];
75
75
  } catch {
@@ -93,18 +93,18 @@ function detectWindowsFileVersion(exePath) {
93
93
  return void 0;
94
94
  }
95
95
  }
96
- async function downloadAsset(url, dest) {
96
+ async function downloadAsset(url, destination) {
97
97
  log(`[installer] Downloading installer from ${url} ...`);
98
98
  const response = await fetch(url, { headers: { "User-Agent": DOWNLOAD_USER_AGENT } });
99
99
  if (!response.ok) {
100
100
  throw new Error(`HTTP ${String(response.status)}`);
101
101
  }
102
- writeFileSync(dest, Buffer.from(await response.arrayBuffer()));
102
+ writeFileSync(destination, Buffer.from(await response.arrayBuffer()));
103
103
  }
104
- async function downloadInstallerAsset(urls, shellDir, version) {
104
+ async function downloadInstallerAsset(urls, shellDirectory, version) {
105
105
  const errors = [];
106
106
  for (const url of urls) {
107
- const assetPath = join(shellDir, basename(url));
107
+ const assetPath = join(shellDirectory, basename(url));
108
108
  try {
109
109
  await downloadAsset(url, assetPath);
110
110
  return assetPath;
@@ -116,38 +116,38 @@ async function downloadInstallerAsset(urls, shellDir, version) {
116
116
  `Failed to download Obsidian installer ${version}. Attempts: ${errors.join("; ")}. Catalyst/beta versions have no public installer \u2014 pin an asar version on a public/installed shell instead.`
117
117
  );
118
118
  }
119
- function extractLinuxShell(assetPath, shellDir) {
120
- run("tar", ["xzf", assetPath, "-C", shellDir, "--strip-components=1"]);
119
+ function extractLinuxShell(assetPath, shellDirectory) {
120
+ run("tar", ["xzf", assetPath, "-C", shellDirectory, "--strip-components=1"]);
121
121
  }
122
- function extractMacShell(assetPath, shellDir) {
123
- const mountPoint = join(shellDir, "__mnt");
122
+ function extractMacShell(assetPath, shellDirectory) {
123
+ const mountPoint = join(shellDirectory, "__mnt");
124
124
  mkdirSync(mountPoint, { recursive: true });
125
125
  run("hdiutil", ["attach", "-nobrowse", "-mountpoint", mountPoint, assetPath]);
126
126
  try {
127
- run("cp", ["-R", join(mountPoint, "Obsidian.app"), shellDir]);
127
+ run("cp", ["-R", join(mountPoint, "Obsidian.app"), shellDirectory]);
128
128
  } finally {
129
129
  run("hdiutil", ["detach", mountPoint]);
130
130
  }
131
131
  rmSync(mountPoint, { force: true, recursive: true });
132
132
  }
133
- function extractShell(assetPath, shellDir) {
133
+ function extractShell(assetPath, shellDirectory) {
134
134
  if (process.platform === "win32") {
135
- extractWindowsShell(assetPath, shellDir);
135
+ extractWindowsShell(assetPath, shellDirectory);
136
136
  return;
137
137
  }
138
138
  if (process.platform === "darwin") {
139
- extractMacShell(assetPath, shellDir);
139
+ extractMacShell(assetPath, shellDirectory);
140
140
  return;
141
141
  }
142
- extractLinuxShell(assetPath, shellDir);
142
+ extractLinuxShell(assetPath, shellDirectory);
143
143
  }
144
- function extractWindowsShell(assetPath, shellDir) {
144
+ function extractWindowsShell(assetPath, shellDirectory) {
145
145
  assertCommandAvailable("7z", "Install 7-Zip (e.g. `scoop install 7zip`) to extract a pinned Obsidian installer.");
146
- const nsisExtractDir = join(shellDir, "__nsis");
147
- run("7z", ["x", "-y", `-o${nsisExtractDir}`, assetPath]);
148
- const innerArchive = join(nsisExtractDir, "$PLUGINSDIR", "app-64.7z");
149
- run("7z", ["x", "-y", `-o${shellDir}`, innerArchive]);
150
- rmSync(nsisExtractDir, { force: true, recursive: true });
146
+ const nsisExtractDirectory = join(shellDirectory, "__nsis");
147
+ run("7z", ["x", "-y", `-o${nsisExtractDirectory}`, assetPath]);
148
+ const innerArchive = join(nsisExtractDirectory, "$PLUGINSDIR", "app-64.7z");
149
+ run("7z", ["x", "-y", `-o${shellDirectory}`, innerArchive]);
150
+ rmSync(nsisExtractDirectory, { force: true, recursive: true });
151
151
  }
152
152
  async function fetchReleaseAssetNames(version) {
153
153
  try {
@@ -168,14 +168,14 @@ async function fetchReleaseAssetNames(version) {
168
168
  return void 0;
169
169
  }
170
170
  }
171
- function getCachedShellExePath(shellDir) {
171
+ function getCachedShellExePath(shellDirectory) {
172
172
  if (process.platform === "win32") {
173
- return join(shellDir, "Obsidian.exe");
173
+ return join(shellDirectory, "Obsidian.exe");
174
174
  }
175
175
  if (process.platform === "darwin") {
176
- return join(shellDir, "Obsidian.app", "Contents", "MacOS", "Obsidian");
176
+ return join(shellDirectory, "Obsidian.app", "Contents", "MacOS", "Obsidian");
177
177
  }
178
- return join(shellDir, "obsidian");
178
+ return join(shellDirectory, "obsidian");
179
179
  }
180
180
  async function resolveInstallerAssetUrls(version) {
181
181
  const bakedUrl = selectInstallerDownloadUrl({ downloads: getVersionMetadata(version)?.downloads, platform: process.platform });
@@ -192,15 +192,15 @@ async function resolveInstallerAssetUrls(version) {
192
192
  }
193
193
  return buildInstallerAssetNameCandidates({ platform: process.platform, version }).map((name) => `${RELEASE_DOWNLOAD_BASE_URL}/v${version}/${name}`);
194
194
  }
195
- function run(command, args) {
196
- const result = spawnSync(command, args, { stdio: "ignore" });
195
+ function run(command, commandArguments) {
196
+ const result = spawnSync(command, commandArguments, { stdio: "ignore" });
197
197
  if (result.status !== 0) {
198
- throw new Error(`Command failed: ${command} ${args.map((arg) => basename(arg)).join(" ")} (exit ${String(result.status)})`);
198
+ throw new Error(`Command failed: ${command} ${commandArguments.map((argument) => basename(argument)).join(" ")} (exit ${String(result.status)})`);
199
199
  }
200
200
  }
201
201
  export {
202
202
  detectInstalledShellVersion,
203
203
  ensureShellCached,
204
- getCachedShellDir
204
+ getCachedShellDirectory
205
205
  };
206
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWluc3RhbGxlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEludGVncmF0aW9uLXRpbWUgaGVscGVycyBmb3IgcmVzb2x2aW5nIHRoZSBPYnNpZGlhbiAqKnNoZWxsKiogKHRoZSBFbGVjdHJvblxuICogcnVudGltZSAvIGluc3RhbGxlciBidWlsZCkgdG8gbGF1bmNoLlxuICpcbiAqIEJ5IGRlZmF1bHQgdGhlIGhhcm5lc3MgdXNlcyB0aGUgaW5zdGFsbGVkIHNoZWxsLiBXaGVuIGEgc3BlY2lmaWMgaW5zdGFsbGVyXG4gKiB2ZXJzaW9uIGlzIHJlcXVlc3RlZCwgaXQgZG93bmxvYWRzIHRoYXQgdmVyc2lvbidzIEdpdEh1YiByZWxlYXNlIGFzc2V0IGFuZFxuICogZXh0cmFjdHMgYSBwb3J0YWJsZSBzaGVsbCBpbnRvIGEgY2FjaGUsIHJldHVybmluZyB0aGUgZXhlY3V0YWJsZSB0byBsYXVuY2guXG4gKlxuICogR2l0SHViIHJlbGVhc2UgYXNzZXRzIGV4aXN0IGZvciAqKnB1YmxpYyoqIHJlbGVhc2VzIG9ubHk7IGNhdGFseXN0IChiZXRhKVxuICogYnVpbGRzIHB1Ymxpc2ggb25seSB0aGUgYXNhciwgc28gaW5zdGFsbGVyLXBpbm5pbmcgc3VwcG9ydHMgcHVibGljIHZlcnNpb25zLlxuICogVGhlIGV4dHJhY3RlZCBzaGVsbCdzIGJ1bmRsZWQgYHJlc291cmNlcy9vYnNpZGlhbi5hc2FyYCBpcyB0aGF0IHZlcnNpb24sIHNvXG4gKiBwaW5uaW5nIHRoZSBpbnN0YWxsZXIgaXMgaG93IHlvdSBydW4gYSB2ZXJzaW9uICoqb2xkZXIqKiB0aGFuIHRoZSBpbnN0YWxsZWRcbiAqIHNoZWxsIChhc2FyLXN3YXAgaXMgdXBncmFkZS1vbmx5IFx1MjAxNCBzZWUgYG9ic2lkaWFuLXZlcnNpb24tc3dpdGNoLnRzYCkuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEludGVncmF0aW9uLXRpbWUgZG93bmxvYWQvZXh0cmFjdGlvbiBnbHVlIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQge1xuICBleGVjRmlsZVN5bmMsXG4gIHNwYXduU3luY1xufSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHtcbiAgZXhpc3RzU3luYyxcbiAgbWtkaXJTeW5jLFxuICByZWFkRmlsZVN5bmMsXG4gIHJtU3luYyxcbiAgd3JpdGVGaWxlU3luY1xufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHtcbiAgYmFzZW5hbWUsXG4gIGRpcm5hbWUsXG4gIGpvaW5cbn0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB7XG4gIGJ1aWxkSW5zdGFsbGVyQXNzZXROYW1lQ2FuZGlkYXRlcyxcbiAgc2VsZWN0SW5zdGFsbGVyQXNzZXROYW1lLFxuICBzZWxlY3RJbnN0YWxsZXJEb3dubG9hZFVybFxufSBmcm9tICcuL2luc3RhbGxlci1hc3NldC5tanMnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cubWpzJztcbmltcG9ydCB7IGdldFZlcnNpb25NZXRhZGF0YSB9IGZyb20gJy4vb2JzaWRpYW4tbWV0YWRhdGEubWpzJztcblxuLyoqXG4gKiBCcm93c2VyIFVzZXItQWdlbnQgZm9yIGRvd25sb2FkaW5nIHJlbGVhc2UgYXNzZXRzIChDbG91ZGZsYXJlLWdhdGVkKS5cbiAqL1xuY29uc3QgRE9XTkxPQURfVVNFUl9BR0VOVCA9ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvODYuMC40MjQwLjE4MyBTYWZhcmkvNTM3LjM2JztcblxuLyoqIEJhc2UgVVJMIGZvciBgb2JzaWRpYW4tcmVsZWFzZXNgIHJlbGVhc2UgYXNzZXRzIChgLi4uL2Rvd25sb2FkL3Y8dmVyPi88YXNzZXQ+YCkuICovXG5jb25zdCBSRUxFQVNFX0RPV05MT0FEX0JBU0VfVVJMID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9vYnNpZGlhbm1kL29ic2lkaWFuLXJlbGVhc2VzL3JlbGVhc2VzL2Rvd25sb2FkJztcblxuLyoqIEdpdEh1YiBSRVNUIGVuZHBvaW50IGxpc3RpbmcgYSByZWxlYXNlJ3MgYXNzZXRzIGJ5IHRhZyAoYC4uLi9yZWxlYXNlcy90YWdzL3Y8dmVyPmApLiAqL1xuY29uc3QgUkVMRUFTRV9BUElfVEFHX1VSTCA9ICdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL29ic2lkaWFubWQvb2JzaWRpYW4tcmVsZWFzZXMvcmVsZWFzZXMvdGFncyc7XG5cbi8qKiBUaGUgc3Vic2V0IG9mIHRoZSBHaXRIdWIgcmVsZWFzZSBBUEkgcmVzcG9uc2UgdGhpcyBtb2R1bGUgcmVhZHMuICovXG5pbnRlcmZhY2UgR2l0SHViUmVsZWFzZSB7XG4gIC8qKiBUaGUgcmVsZWFzZSdzIGRvd25sb2FkYWJsZSBhc3NldHMuICovXG4gIHJlYWRvbmx5IGFzc2V0czogcmVhZG9ubHkgR2l0SHViUmVsZWFzZUFzc2V0W107XG59XG5cbi8qKiBUaGUgc3Vic2V0IG9mIGEgR2l0SHViIHJlbGVhc2UncyBhc3NldCBvYmplY3QgdGhpcyBtb2R1bGUgcmVhZHMuICovXG5pbnRlcmZhY2UgR2l0SHViUmVsZWFzZUFzc2V0IHtcbiAgLyoqIFRoZSBhc3NldCBmaWxlIG5hbWUsIGUuZy4gYE9ic2lkaWFuLjAuMTQuNS5leGVgLiAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbmNvbnN0IENBQ0hFX1JPT1QgPSBqb2luKHRtcGRpcigpLCAnb2JzaWRpYW4taW50ZWdyYXRpb24tdGVzdGluZycpO1xuY29uc3QgU0hFTExfQ0FDSEVfRElSID0gam9pbihDQUNIRV9ST09ULCAnc2hlbGwtY2FjaGUnKTtcbmNvbnN0IE1BQ19QTElTVF9WRVJTSU9OX1BBVFRFUk4gPSAvPGtleT5DRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZzxcXC9rZXk+XFxzKjxzdHJpbmc+KD88dmVyc2lvbj5bXjxdKyk8XFwvc3RyaW5nPi87XG5cbi8qKlxuICogQSByZXNvbHZlZCBPYnNpZGlhbiBzaGVsbCBleGVjdXRhYmxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkU2hlbGwge1xuICAvKiogQWJzb2x1dGUgcGF0aCB0byB0aGUgT2JzaWRpYW4gZXhlY3V0YWJsZSB0byBsYXVuY2guICovXG4gIHJlYWRvbmx5IGV4ZVBhdGg6IHN0cmluZztcblxuICAvKiogVGhlIHNoZWxsJ3MgdmVyc2lvbiwgb3IgYHVuZGVmaW5lZGAgaWYgaXQgY291bGQgbm90IGJlIGRldGVjdGVkLiAqL1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogRGV0ZWN0cyB0aGUgdmVyc2lvbiBvZiBhbiBpbnN0YWxsZWQgT2JzaWRpYW4gc2hlbGwgZnJvbSBpdHMgZXhlY3V0YWJsZS5cbiAqXG4gKiAtIFdpbmRvd3M6IHRoZSBleGVjdXRhYmxlJ3MgUEUgYEZpbGVWZXJzaW9uYC5cbiAqIC0gbWFjT1M6IGBDRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZ2AgZnJvbSB0aGUgYXBwIGJ1bmRsZSdzIGBJbmZvLnBsaXN0YC5cbiAqIC0gTGludXg6IGJlc3QtZWZmb3J0IHBhcnNlIGZyb20gdGhlIGV4ZWN1dGFibGUgcGF0aCAob2Z0ZW4gYHVuZGVmaW5lZGApLlxuICpcbiAqIEBwYXJhbSBleGVQYXRoIC0gQWJzb2x1dGUgcGF0aCB0byB0aGUgT2JzaWRpYW4gZXhlY3V0YWJsZS5cbiAqIEByZXR1cm5zIFRoZSBgeC55LnpgIHZlcnNpb24sIG9yIGB1bmRlZmluZWRgIGlmIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0SW5zdGFsbGVkU2hlbGxWZXJzaW9uKGV4ZVBhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgcmV0dXJuIGRldGVjdFdpbmRvd3NGaWxlVmVyc2lvbihleGVQYXRoKTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgIHJldHVybiBkZXRlY3RNYWNCdW5kbGVWZXJzaW9uKGV4ZVBhdGgpO1xuICB9XG5cbiAgcmV0dXJuIGRldGVjdFZlcnNpb25Gcm9tUGF0aChleGVQYXRoKTtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIGEgcG9ydGFibGUgT2JzaWRpYW4gc2hlbGwgZm9yIHRoZSBnaXZlbiB2ZXJzaW9uIGlzIGV4dHJhY3RlZCBpbnRvIHRoZVxuICogY2FjaGUsIGRvd25sb2FkaW5nIGFuZCBleHRyYWN0aW5nIGl0cyBHaXRIdWIgcmVsZWFzZSBhc3NldCBpZiBuZWNlc3NhcnkuXG4gKlxuICogQHBhcmFtIHZlcnNpb24gLSBBIGNvbmNyZXRlIHB1YmxpYyBgeC55LnpgIHZlcnNpb24uXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgY2FjaGVkIHNoZWxsIGV4ZWN1dGFibGUuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBhc3NldCBjYW5ub3QgYmUgZG93bmxvYWRlZCBvciBleHRyYWN0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbnN1cmVTaGVsbENhY2hlZCh2ZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBzaGVsbERpciA9IGdldENhY2hlZFNoZWxsRGlyKHZlcnNpb24pO1xuICBjb25zdCBleGVQYXRoID0gZ2V0Q2FjaGVkU2hlbGxFeGVQYXRoKHNoZWxsRGlyKTtcbiAgaWYgKGV4aXN0c1N5bmMoZXhlUGF0aCkpIHtcbiAgICBsb2coYFtpbnN0YWxsZXJdIFVzaW5nIGNhY2hlZCBzaGVsbCBmb3IgJHt2ZXJzaW9ufS5gKTtcbiAgICByZXR1cm4gZXhlUGF0aDtcbiAgfVxuXG4gIG1rZGlyU3luYyhzaGVsbERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGNvbnN0IGFzc2V0VXJscyA9IGF3YWl0IHJlc29sdmVJbnN0YWxsZXJBc3NldFVybHModmVyc2lvbik7XG4gIGNvbnN0IGFzc2V0UGF0aCA9IGF3YWl0IGRvd25sb2FkSW5zdGFsbGVyQXNzZXQoYXNzZXRVcmxzLCBzaGVsbERpciwgdmVyc2lvbik7XG4gIGV4dHJhY3RTaGVsbChhc3NldFBhdGgsIHNoZWxsRGlyKTtcbiAgcm1TeW5jKGFzc2V0UGF0aCwgeyBmb3JjZTogdHJ1ZSB9KTtcblxuICBpZiAoIWV4aXN0c1N5bmMoZXhlUGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4dHJhY3RlZCBPYnNpZGlhbiBzaGVsbCAke3ZlcnNpb259IGJ1dCBleGVjdXRhYmxlIG5vdCBmb3VuZCBhdCAke2V4ZVBhdGh9LmApO1xuICB9XG4gIGxvZyhgW2luc3RhbGxlcl0gRXh0cmFjdGVkIHNoZWxsICR7dmVyc2lvbn0gLT4gJHtleGVQYXRofWApO1xuICByZXR1cm4gZXhlUGF0aDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjYWNoZSBkaXJlY3RvcnkgYSB2ZXJzaW9uJ3MgZXh0cmFjdGVkIHNoZWxsIGxpdmVzIGluICh0aGVcbiAqIGRpcmVjdG9yeSBtYXkgbm90IHlldCBleGlzdCkuXG4gKlxuICogQHBhcmFtIHZlcnNpb24gLSBBIGNvbmNyZXRlIHB1YmxpYyBgeC55LnpgIHZlcnNpb24uXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgc2hlbGwgY2FjaGUgZGlyZWN0b3J5IGZvciB0aGUgdmVyc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhY2hlZFNoZWxsRGlyKHZlcnNpb246IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBqb2luKFNIRUxMX0NBQ0hFX0RJUiwgdmVyc2lvbik7XG59XG5cbi8qKlxuICogVGhyb3dzIGEgZGVzY3JpcHRpdmUgZXJyb3IgaWYgYSByZXF1aXJlZCBjb21tYW5kIGlzIG5vdCBvbiBgUEFUSGAuXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZCBuYW1lLlxuICogQHBhcmFtIGhpbnQgLSBBY3Rpb25hYmxlIGd1aWRhbmNlIGFwcGVuZGVkIHRvIHRoZSBlcnJvci5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Q29tbWFuZEF2YWlsYWJsZShjb21tYW5kOiBzdHJpbmcsIGhpbnQ6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBwcm9iZSA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyAnd2hlcmUuZXhlJyA6ICd3aGljaCc7XG4gIGNvbnN0IHJlc3VsdCA9IHNwYXduU3luYyhwcm9iZSwgW2NvbW1hbmRdLCB7IHN0ZGlvOiAnaWdub3JlJyB9KTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFJlcXVpcmVkIGNvbW1hbmQgXCIke2NvbW1hbmR9XCIgd2FzIG5vdCBmb3VuZCBvbiBQQVRILiAke2hpbnR9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWFkcyBgQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmdgIGZyb20gYSBtYWNPUyBhcHAgYnVuZGxlJ3MgYEluZm8ucGxpc3RgLlxuICpcbiAqIEBwYXJhbSBleGVQYXRoIC0gUGF0aCB0byBgLi4uL09ic2lkaWFuLmFwcC9Db250ZW50cy9NYWNPUy9PYnNpZGlhbmAuXG4gKiBAcmV0dXJucyBUaGUgYHgueS56YCB2ZXJzaW9uLCBvciBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZGV0ZWN0TWFjQnVuZGxlVmVyc2lvbihleGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIGNvbnN0IGNvbnRlbnRzRGlyID0gZGlybmFtZShkaXJuYW1lKGV4ZVBhdGgpKTtcbiAgICBjb25zdCBwbGlzdCA9IHJlYWRGaWxlU3luYyhqb2luKGNvbnRlbnRzRGlyLCAnSW5mby5wbGlzdCcpLCAndXRmLTgnKTtcbiAgICBjb25zdCBtYXRjaCA9IE1BQ19QTElTVF9WRVJTSU9OX1BBVFRFUk4uZXhlYyhwbGlzdCk7XG4gICAgcmV0dXJuIG1hdGNoPy5ncm91cHM/LlsndmVyc2lvbiddO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogQmVzdC1lZmZvcnQgcGFyc2Ugb2YgYW4gYHgueS56YCB2ZXJzaW9uIGVtYmVkZGVkIGluIGEgcGF0aC5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgcGF0aCBvciBzdHJpbmcgdG8gc2Nhbi5cbiAqIEByZXR1cm5zIFRoZSBmaXJzdCBgeC55LnpgIG1hdGNoLCBvciBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZGV0ZWN0VmVyc2lvbkZyb21QYXRoKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBtYXRjaCA9IC8oPzx2ZXJzaW9uPlxcZCtcXC5cXGQrXFwuXFxkKykvLmV4ZWModmFsdWUpO1xuICByZXR1cm4gbWF0Y2g/Lmdyb3Vwcz8uWyd2ZXJzaW9uJ107XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIFBFIGBGaWxlVmVyc2lvbmAgb2YgYSBXaW5kb3dzIGV4ZWN1dGFibGUgdmlhIFBvd2VyU2hlbGwuXG4gKlxuICogQHBhcmFtIGV4ZVBhdGggLSBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBleGVjdXRhYmxlLlxuICogQHJldHVybnMgVGhlIGB4LnkuemAgdmVyc2lvbiwgb3IgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGRldGVjdFdpbmRvd3NGaWxlVmVyc2lvbihleGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIGNvbnN0IG91dHB1dCA9IGV4ZWNGaWxlU3luYyhcbiAgICAgICdwb3dlcnNoZWxsJyxcbiAgICAgIFsnLU5vUHJvZmlsZScsICctQ29tbWFuZCcsIGAoR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICR7SlNPTi5zdHJpbmdpZnkoZXhlUGF0aCl9KS5WZXJzaW9uSW5mby5GaWxlVmVyc2lvbmBdLFxuICAgICAgeyBlbmNvZGluZzogJ3V0Zi04JyB9XG4gICAgKTtcbiAgICBjb25zdCB2ZXJzaW9uID0gb3V0cHV0LnRyaW0oKTtcbiAgICByZXR1cm4gdmVyc2lvbi5sZW5ndGggPiAwID8gdmVyc2lvbiA6IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIERvd25sb2FkcyBhIHNpbmdsZSByZWxlYXNlIGFzc2V0IGZvciBhIHZlcnNpb24gdG8gYSBkZXN0aW5hdGlvbiBmaWxlLlxuICpcbiAqIEBwYXJhbSB1cmwgLSBUaGUgYXNzZXQgZG93bmxvYWQgVVJMLlxuICogQHBhcmFtIGRlc3QgLSBEZXN0aW5hdGlvbiBmaWxlIHBhdGguXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSByZXF1ZXN0IGZhaWxzLlxuICovXG5hc3luYyBmdW5jdGlvbiBkb3dubG9hZEFzc2V0KHVybDogc3RyaW5nLCBkZXN0OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgbG9nKGBbaW5zdGFsbGVyXSBEb3dubG9hZGluZyBpbnN0YWxsZXIgZnJvbSAke3VybH0gLi4uYCk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7IGhlYWRlcnM6IHsgJ1VzZXItQWdlbnQnOiBET1dOTE9BRF9VU0VSX0FHRU5UIH0gfSk7XG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtTdHJpbmcocmVzcG9uc2Uuc3RhdHVzKX1gKTtcbiAgfVxuICB3cml0ZUZpbGVTeW5jKGRlc3QsIEJ1ZmZlci5mcm9tKGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKCkpKTtcbn1cblxuLyoqXG4gKiBEb3dubG9hZHMgdGhlIGZpcnN0IHJlYWNoYWJsZSBpbnN0YWxsZXIgYXNzZXQgZnJvbSBhbiBvcmRlcmVkIGxpc3Qgb2ZcbiAqIGNhbmRpZGF0ZSBVUkxzLCByZXR1cm5pbmcgdGhlIHBhdGggaXQgd2FzIHNhdmVkIHRvLlxuICpcbiAqIEBwYXJhbSB1cmxzIC0gQ2FuZGlkYXRlIGFzc2V0IFVSTHMsIGluIHByaW9yaXR5IG9yZGVyLlxuICogQHBhcmFtIHNoZWxsRGlyIC0gVGhlIGRlc3RpbmF0aW9uIHNoZWxsIGRpcmVjdG9yeS5cbiAqIEBwYXJhbSB2ZXJzaW9uIC0gVGhlIHJlbGVhc2UgdmVyc2lvbiAoZm9yIGVycm9yIG1lc3NhZ2VzKS5cbiAqIEByZXR1cm5zIFRoZSBkb3dubG9hZGVkIGFzc2V0J3MgcGF0aC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBjYW4gYmUgZG93bmxvYWRlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZG93bmxvYWRJbnN0YWxsZXJBc3NldCh1cmxzOiBzdHJpbmdbXSwgc2hlbGxEaXI6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHVybCBvZiB1cmxzKSB7XG4gICAgY29uc3QgYXNzZXRQYXRoID0gam9pbihzaGVsbERpciwgYmFzZW5hbWUodXJsKSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGRvd25sb2FkQXNzZXQodXJsLCBhc3NldFBhdGgpO1xuICAgICAgcmV0dXJuIGFzc2V0UGF0aDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyb3JzLnB1c2goYCR7dXJsfTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YCk7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIGBGYWlsZWQgdG8gZG93bmxvYWQgT2JzaWRpYW4gaW5zdGFsbGVyICR7dmVyc2lvbn0uIEF0dGVtcHRzOiAke2Vycm9ycy5qb2luKCc7ICcpfS4gYFxuICAgICAgKyAnQ2F0YWx5c3QvYmV0YSB2ZXJzaW9ucyBoYXZlIG5vIHB1YmxpYyBpbnN0YWxsZXIgXHUyMDE0IHBpbiBhbiBhc2FyIHZlcnNpb24gb24gYSBwdWJsaWMvaW5zdGFsbGVkIHNoZWxsIGluc3RlYWQuJ1xuICApO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIGEgTGludXggYC50YXIuZ3pgIHBvcnRhYmxlIGJ1aWxkLlxuICpcbiAqIEBwYXJhbSBhc3NldFBhdGggLSBQYXRoIHRvIHRoZSBkb3dubG9hZGVkIGAudGFyLmd6YC5cbiAqIEBwYXJhbSBzaGVsbERpciAtIERlc3RpbmF0aW9uIHNoZWxsIGRpcmVjdG9yeS5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdExpbnV4U2hlbGwoYXNzZXRQYXRoOiBzdHJpbmcsIHNoZWxsRGlyOiBzdHJpbmcpOiB2b2lkIHtcbiAgcnVuKCd0YXInLCBbJ3h6ZicsIGFzc2V0UGF0aCwgJy1DJywgc2hlbGxEaXIsICctLXN0cmlwLWNvbXBvbmVudHM9MSddKTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBhIG1hY09TIGAuZG1nYCBieSBtb3VudGluZyBpdCBhbmQgY29weWluZyB0aGUgYXBwIGJ1bmRsZS5cbiAqXG4gKiBAcGFyYW0gYXNzZXRQYXRoIC0gUGF0aCB0byB0aGUgZG93bmxvYWRlZCBgLmRtZ2AuXG4gKiBAcGFyYW0gc2hlbGxEaXIgLSBEZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RNYWNTaGVsbChhc3NldFBhdGg6IHN0cmluZywgc2hlbGxEaXI6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBtb3VudFBvaW50ID0gam9pbihzaGVsbERpciwgJ19fbW50Jyk7XG4gIG1rZGlyU3luYyhtb3VudFBvaW50LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgcnVuKCdoZGl1dGlsJywgWydhdHRhY2gnLCAnLW5vYnJvd3NlJywgJy1tb3VudHBvaW50JywgbW91bnRQb2ludCwgYXNzZXRQYXRoXSk7XG4gIHRyeSB7XG4gICAgcnVuKCdjcCcsIFsnLVInLCBqb2luKG1vdW50UG9pbnQsICdPYnNpZGlhbi5hcHAnKSwgc2hlbGxEaXJdKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBydW4oJ2hkaXV0aWwnLCBbJ2RldGFjaCcsIG1vdW50UG9pbnRdKTtcbiAgfVxuICBybVN5bmMobW91bnRQb2ludCwgeyBmb3JjZTogdHJ1ZSwgcmVjdXJzaXZlOiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIGEgZG93bmxvYWRlZCBpbnN0YWxsZXIgYXNzZXQgaW50byBhIHNoZWxsIGRpcmVjdG9yeSwgcGVyIHBsYXRmb3JtLlxuICpcbiAqIEBwYXJhbSBhc3NldFBhdGggLSBUaGUgZG93bmxvYWRlZCBhc3NldCBwYXRoLlxuICogQHBhcmFtIHNoZWxsRGlyIC0gVGhlIGRlc3RpbmF0aW9uIHNoZWxsIGRpcmVjdG9yeS5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFNoZWxsKGFzc2V0UGF0aDogc3RyaW5nLCBzaGVsbERpcjogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgZXh0cmFjdFdpbmRvd3NTaGVsbChhc3NldFBhdGgsIHNoZWxsRGlyKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcbiAgICBleHRyYWN0TWFjU2hlbGwoYXNzZXRQYXRoLCBzaGVsbERpcik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZXh0cmFjdExpbnV4U2hlbGwoYXNzZXRQYXRoLCBzaGVsbERpcik7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgYSBXaW5kb3dzIE5TSVMgaW5zdGFsbGVyJ3MgaW5uZXIgYXBwIHBheWxvYWQgdmlhIDctWmlwLlxuICpcbiAqIFRoZSBOU0lTIGluc3RhbGxlciBgLmV4ZWAgY29udGFpbnMgYCRQTFVHSU5TRElSL2FwcC02NC43emAsIHdoaWNoIGhvbGRzIHRoZVxuICogcG9ydGFibGUgYXBwIChtaXJyb3JzIGhvdyB0aGUgc2Nvb3AgbWFuaWZlc3QgaW5zdGFsbHMgT2JzaWRpYW4pLlxuICpcbiAqIEBwYXJhbSBhc3NldFBhdGggLSBQYXRoIHRvIHRoZSBkb3dubG9hZGVkIGAuZXhlYC5cbiAqIEBwYXJhbSBzaGVsbERpciAtIERlc3RpbmF0aW9uIHNoZWxsIGRpcmVjdG9yeS5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFdpbmRvd3NTaGVsbChhc3NldFBhdGg6IHN0cmluZywgc2hlbGxEaXI6IHN0cmluZyk6IHZvaWQge1xuICBhc3NlcnRDb21tYW5kQXZhaWxhYmxlKCc3eicsICdJbnN0YWxsIDctWmlwIChlLmcuIGBzY29vcCBpbnN0YWxsIDd6aXBgKSB0byBleHRyYWN0IGEgcGlubmVkIE9ic2lkaWFuIGluc3RhbGxlci4nKTtcbiAgY29uc3QgbnNpc0V4dHJhY3REaXIgPSBqb2luKHNoZWxsRGlyLCAnX19uc2lzJyk7XG4gIHJ1bignN3onLCBbJ3gnLCAnLXknLCBgLW8ke25zaXNFeHRyYWN0RGlyfWAsIGFzc2V0UGF0aF0pO1xuICBjb25zdCBpbm5lckFyY2hpdmUgPSBqb2luKG5zaXNFeHRyYWN0RGlyLCAnJFBMVUdJTlNESVInLCAnYXBwLTY0Ljd6Jyk7XG4gIHJ1bignN3onLCBbJ3gnLCAnLXknLCBgLW8ke3NoZWxsRGlyfWAsIGlubmVyQXJjaGl2ZV0pO1xuICBybVN5bmMobnNpc0V4dHJhY3REaXIsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBGZXRjaGVzIGEgcmVsZWFzZSdzIGFzc2V0IG5hbWVzIGZyb20gdGhlIEdpdEh1YiBBUEkuXG4gKlxuICogUmVhZHMgYSBgR0lUSFVCX1RPS0VOYCAob3IgYEdIX1RPS0VOYCkgZnJvbSB0aGUgZW52aXJvbm1lbnQgYW5kIHNlbmRzIGl0IGFzIGFcbiAqIGJlYXJlciB0b2tlbiB3aGVuIHByZXNlbnQsIHRvIGxpZnQgdGhlIGFub255bW91cyByYXRlIGxpbWl0IHRoYXQgb3RoZXJ3aXNlXG4gKiByZXR1cm5zIEhUVFAgNDAzIG9uIHNoYXJlZCBDSSBydW5uZXIgSVBzLlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gVGhlIHJlbGVhc2UgdmVyc2lvbiAodGFnIGB2PHZlcnNpb24+YCkuXG4gKiBAcmV0dXJucyBUaGUgYXNzZXQgbmFtZXMsIG9yIGB1bmRlZmluZWRgIGlmIHRoZSBBUEkgaXMgdW5hdmFpbGFibGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZldGNoUmVsZWFzZUFzc2V0TmFtZXModmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXSB8IHVuZGVmaW5lZD4ge1xuICB0cnkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyh7ICdBY2NlcHQnOiAnYXBwbGljYXRpb24vdm5kLmdpdGh1Yitqc29uJywgJ1VzZXItQWdlbnQnOiBET1dOTE9BRF9VU0VSX0FHRU5UIH0pO1xuICAgIC8vIFNlbmQgYSBiZWFyZXIgdG9rZW4gd2hlbiBvbmUgaXMgYXZhaWxhYmxlIChlLmcuIEdJVEhVQl9UT0tFTiBvbiBDSSkuXG4gICAgLy8gV2l0aG91dCBpdCB0aGUgYXNzZXQtbGlzdCBBUEkgaXMgbGltaXRlZCB0byB0aGUgYW5vbnltb3VzIHF1b3RhLlxuICAgIC8vIFRoYXQgcXVvdGEgcmV0dXJucyBIVFRQIDQwMyBvbiBzaGFyZWQgQ0kgcnVubmVyIElQcyBhbmQgZm9yY2VzIHRoZSBmYWxsYmFjay5cbiAgICBjb25zdCB0b2tlbiA9IHByb2Nlc3MuZW52WydHSVRIVUJfVE9LRU4nXSA/PyBwcm9jZXNzLmVudlsnR0hfVE9LRU4nXTtcbiAgICBpZiAodG9rZW4pIHtcbiAgICAgIGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgYEJlYXJlciAke3Rva2VufWApO1xuICAgIH1cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke1JFTEVBU0VfQVBJX1RBR19VUkx9L3Yke3ZlcnNpb259YCwgeyBoZWFkZXJzIH0pO1xuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIGxvZyhgW2luc3RhbGxlcl0gUmVsZWFzZSBBUEkgZm9yICR7dmVyc2lvbn0gcmV0dXJuZWQgSFRUUCAke1N0cmluZyhyZXNwb25zZS5zdGF0dXMpfTsgZmFsbGluZyBiYWNrIHRvIHRlbXBsYXRlZCBhc3NldCBuYW1lcy5gKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHJlbGVhc2UgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgR2l0SHViUmVsZWFzZTtcbiAgICByZXR1cm4gcmVsZWFzZS5hc3NldHMubWFwKChhc3NldCkgPT4gYXNzZXQubmFtZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nKGBbaW5zdGFsbGVyXSBSZWxlYXNlIEFQSSBmb3IgJHt2ZXJzaW9ufSB1bmF2YWlsYWJsZSAoJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9KTsgZmFsbGluZyBiYWNrIHRvIHRlbXBsYXRlZCBhc3NldCBuYW1lcy5gKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZXhwZWN0ZWQgY2FjaGVkIHNoZWxsIGV4ZWN1dGFibGUgcGF0aCBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0uXG4gKlxuICogQHBhcmFtIHNoZWxsRGlyIC0gVGhlIHNoZWxsIGNhY2hlIGRpcmVjdG9yeSBmb3IgYSB2ZXJzaW9uLlxuICogQHJldHVybnMgVGhlIGV4ZWN1dGFibGUgcGF0aC5cbiAqL1xuZnVuY3Rpb24gZ2V0Q2FjaGVkU2hlbGxFeGVQYXRoKHNoZWxsRGlyOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIHJldHVybiBqb2luKHNoZWxsRGlyLCAnT2JzaWRpYW4uZXhlJyk7XG4gIH1cblxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcbiAgICByZXR1cm4gam9pbihzaGVsbERpciwgJ09ic2lkaWFuLmFwcCcsICdDb250ZW50cycsICdNYWNPUycsICdPYnNpZGlhbicpO1xuICB9XG5cbiAgcmV0dXJuIGpvaW4oc2hlbGxEaXIsICdvYnNpZGlhbicpO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBvcmRlcmVkIGluc3RhbGxlciBhc3NldCBkb3dubG9hZCBVUkxzIHRvIHRyeSBmb3IgYSB2ZXJzaW9uLlxuICpcbiAqIFRoZSB2ZXJzaW9uJ3MgZXhhY3QgaW5zdGFsbGVyIFVSTCBiYWtlZCBpbnRvIHRoZSBgbWV0YWRhdGEuanNvbmAgY2F0YWxvZ1xuICogKGZyb20gdXBzdHJlYW0gYG9ic2lkaWFuLXZlcnNpb25zLmpzb25gKSBpcyB1c2VkIGRpcmVjdGx5IHdoZW4gcHJlc2VudCxcbiAqIGF2b2lkaW5nIGFueSBuZXR3b3JrIGxvb2t1cC4gT3RoZXJ3aXNlIHRoZSByZWxlYXNlJ3MgcmVhbCBhc3NldCBsaXN0IGlzXG4gKiBxdWVyaWVkIHNvIHRoZSBwbGF0Zm9ybS1jb3JyZWN0IGFzc2V0IGlzIHBpY2tlZCByZWdhcmRsZXNzIG9mIHRoZSBoaXN0b3JpY2FsXG4gKiBkb3QtdnMtaHlwaGVuIG5hbWluZzsgaWYgdGhhdCBjYWxsIHRvbyBpcyB1bmF2YWlsYWJsZSBpdCBmYWxscyBiYWNrIHRvIHRyeWluZ1xuICogYm90aCB0ZW1wbGF0ZWQgc2VwYXJhdG9yIGZvcm1zLlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gVGhlIGNvbmNyZXRlIGB4LnkuemAgdmVyc2lvbi5cbiAqIEByZXR1cm5zIENhbmRpZGF0ZSBhc3NldCBVUkxzLCBpbiBwcmlvcml0eSBvcmRlci5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUluc3RhbGxlckFzc2V0VXJscyh2ZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IGJha2VkVXJsID0gc2VsZWN0SW5zdGFsbGVyRG93bmxvYWRVcmwoeyBkb3dubG9hZHM6IGdldFZlcnNpb25NZXRhZGF0YSh2ZXJzaW9uKT8uZG93bmxvYWRzLCBwbGF0Zm9ybTogcHJvY2Vzcy5wbGF0Zm9ybSB9KTtcbiAgaWYgKGJha2VkVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gW2Jha2VkVXJsXTtcbiAgfVxuXG4gIGNvbnN0IGFzc2V0TmFtZXMgPSBhd2FpdCBmZXRjaFJlbGVhc2VBc3NldE5hbWVzKHZlcnNpb24pO1xuICBpZiAoYXNzZXROYW1lcykge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0SW5zdGFsbGVyQXNzZXROYW1lKHsgYXNzZXROYW1lcywgcGxhdGZvcm06IHByb2Nlc3MucGxhdGZvcm0sIHZlcnNpb24gfSk7XG4gICAgaWYgKHNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBbYCR7UkVMRUFTRV9ET1dOTE9BRF9CQVNFX1VSTH0vdiR7dmVyc2lvbn0vJHtzZWxlY3RlZH1gXTtcbiAgICB9XG4gICAgbG9nKGBbaW5zdGFsbGVyXSBObyBpbnN0YWxsZXIgYXNzZXQgbWF0Y2hlZCBmb3IgJHt2ZXJzaW9ufTsgZmFsbGluZyBiYWNrIHRvIHRlbXBsYXRlZCBhc3NldCBuYW1lcy5gKTtcbiAgfVxuXG4gIHJldHVybiBidWlsZEluc3RhbGxlckFzc2V0TmFtZUNhbmRpZGF0ZXMoeyBwbGF0Zm9ybTogcHJvY2Vzcy5wbGF0Zm9ybSwgdmVyc2lvbiB9KVxuICAgIC5tYXAoKG5hbWUpID0+IGAke1JFTEVBU0VfRE9XTkxPQURfQkFTRV9VUkx9L3Yke3ZlcnNpb259LyR7bmFtZX1gKTtcbn1cblxuLyoqXG4gKiBSdW5zIGEgY29tbWFuZCBzeW5jaHJvbm91c2x5LCB0aHJvd2luZyBvbiBhIG5vbi16ZXJvIGV4aXQuXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZC5cbiAqIEBwYXJhbSBhcmdzIC0gVGhlIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gcnVuKGNvbW1hbmQ6IHN0cmluZywgYXJnczogc3RyaW5nW10pOiB2b2lkIHtcbiAgY29uc3QgcmVzdWx0ID0gc3Bhd25TeW5jKGNvbW1hbmQsIGFyZ3MsIHsgc3RkaW86ICdpZ25vcmUnIH0pO1xuICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ29tbWFuZCBmYWlsZWQ6ICR7Y29tbWFuZH0gJHthcmdzLm1hcCgoYXJnKSA9PiBiYXNlbmFtZShhcmcpKS5qb2luKCcgJyl9IChleGl0ICR7U3RyaW5nKHJlc3VsdC5zdGF0dXMpfSlgKTtcbiAgfVxufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIkFBbUJBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLGNBQWM7QUFDdkI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsT0FBTyxhQUFhO0FBRXBCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsV0FBVztBQUNwQixTQUFTLDBCQUEwQjtBQUtuQyxNQUFNLHNCQUFzQjtBQUc1QixNQUFNLDRCQUE0QjtBQUdsQyxNQUFNLHNCQUFzQjtBQWM1QixNQUFNLGFBQWEsS0FBSyxPQUFPLEdBQUcsOEJBQThCO0FBQ2hFLE1BQU0sa0JBQWtCLEtBQUssWUFBWSxhQUFhO0FBQ3RELE1BQU0sNEJBQTRCO0FBdUIzQixTQUFTLDRCQUE0QixTQUFxQztBQUMvRSxNQUFJLFFBQVEsYUFBYSxTQUFTO0FBQ2hDLFdBQU8seUJBQXlCLE9BQU87QUFBQSxFQUN6QztBQUVBLE1BQUksUUFBUSxhQUFhLFVBQVU7QUFDakMsV0FBTyx1QkFBdUIsT0FBTztBQUFBLEVBQ3ZDO0FBRUEsU0FBTyxzQkFBc0IsT0FBTztBQUN0QztBQVVBLGVBQXNCLGtCQUFrQixTQUFrQztBQUN4RSxRQUFNLFdBQVcsa0JBQWtCLE9BQU87QUFDMUMsUUFBTSxVQUFVLHNCQUFzQixRQUFRO0FBQzlDLE1BQUksV0FBVyxPQUFPLEdBQUc7QUFDdkIsUUFBSSxzQ0FBc0MsT0FBTyxHQUFHO0FBQ3BELFdBQU87QUFBQSxFQUNUO0FBRUEsWUFBVSxVQUFVLEVBQUUsV0FBVyxLQUFLLENBQUM7QUFDdkMsUUFBTSxZQUFZLE1BQU0sMEJBQTBCLE9BQU87QUFDekQsUUFBTSxZQUFZLE1BQU0sdUJBQXVCLFdBQVcsVUFBVSxPQUFPO0FBQzNFLGVBQWEsV0FBVyxRQUFRO0FBQ2hDLFNBQU8sV0FBVyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBRWpDLE1BQUksQ0FBQyxXQUFXLE9BQU8sR0FBRztBQUN4QixVQUFNLElBQUksTUFBTSw0QkFBNEIsT0FBTyxnQ0FBZ0MsT0FBTyxHQUFHO0FBQUEsRUFDL0Y7QUFDQSxNQUFJLCtCQUErQixPQUFPLE9BQU8sT0FBTyxFQUFFO0FBQzFELFNBQU87QUFDVDtBQVNPLFNBQVMsa0JBQWtCLFNBQXlCO0FBQ3pELFNBQU8sS0FBSyxpQkFBaUIsT0FBTztBQUN0QztBQVFBLFNBQVMsdUJBQXVCLFNBQWlCLE1BQW9CO0FBQ25FLFFBQU0sUUFBUSxRQUFRLGFBQWEsVUFBVSxjQUFjO0FBQzNELFFBQU0sU0FBUyxVQUFVLE9BQU8sQ0FBQyxPQUFPLEdBQUcsRUFBRSxPQUFPLFNBQVMsQ0FBQztBQUM5RCxNQUFJLE9BQU8sV0FBVyxHQUFHO0FBQ3ZCLFVBQU0sSUFBSSxNQUFNLHFCQUFxQixPQUFPLDRCQUE0QixJQUFJLEVBQUU7QUFBQSxFQUNoRjtBQUNGO0FBUUEsU0FBUyx1QkFBdUIsU0FBcUM7QUFDbkUsTUFBSTtBQUNGLFVBQU0sY0FBYyxRQUFRLFFBQVEsT0FBTyxDQUFDO0FBQzVDLFVBQU0sUUFBUSxhQUFhLEtBQUssYUFBYSxZQUFZLEdBQUcsT0FBTztBQUNuRSxVQUFNLFFBQVEsMEJBQTBCLEtBQUssS0FBSztBQUNsRCxXQUFPLE9BQU8sU0FBUyxTQUFTO0FBQUEsRUFDbEMsUUFBUTtBQUNOLFdBQU87QUFBQSxFQUNUO0FBQ0Y7QUFRQSxTQUFTLHNCQUFzQixPQUFtQztBQUNoRSxRQUFNLFFBQVEsNEJBQTRCLEtBQUssS0FBSztBQUNwRCxTQUFPLE9BQU8sU0FBUyxTQUFTO0FBQ2xDO0FBUUEsU0FBUyx5QkFBeUIsU0FBcUM7QUFDckUsTUFBSTtBQUNGLFVBQU0sU0FBUztBQUFBLE1BQ2I7QUFBQSxNQUNBLENBQUMsY0FBYyxZQUFZLDBCQUEwQixLQUFLLFVBQVUsT0FBTyxDQUFDLDJCQUEyQjtBQUFBLE1BQ3ZHLEVBQUUsVUFBVSxRQUFRO0FBQUEsSUFDdEI7QUFDQSxVQUFNLFVBQVUsT0FBTyxLQUFLO0FBQzVCLFdBQU8sUUFBUSxTQUFTLElBQUksVUFBVTtBQUFBLEVBQ3hDLFFBQVE7QUFDTixXQUFPO0FBQUEsRUFDVDtBQUNGO0FBU0EsZUFBZSxjQUFjLEtBQWEsTUFBNkI7QUFDckUsTUFBSSwwQ0FBMEMsR0FBRyxNQUFNO0FBQ3ZELFFBQU0sV0FBVyxNQUFNLE1BQU0sS0FBSyxFQUFFLFNBQVMsRUFBRSxjQUFjLG9CQUFvQixFQUFFLENBQUM7QUFDcEYsTUFBSSxDQUFDLFNBQVMsSUFBSTtBQUNoQixVQUFNLElBQUksTUFBTSxRQUFRLE9BQU8sU0FBUyxNQUFNLENBQUMsRUFBRTtBQUFBLEVBQ25EO0FBQ0EsZ0JBQWMsTUFBTSxPQUFPLEtBQUssTUFBTSxTQUFTLFlBQVksQ0FBQyxDQUFDO0FBQy9EO0FBWUEsZUFBZSx1QkFBdUIsTUFBZ0IsVUFBa0IsU0FBa0M7QUFDeEcsUUFBTSxTQUFtQixDQUFDO0FBQzFCLGFBQVcsT0FBTyxNQUFNO0FBQ3RCLFVBQU0sWUFBWSxLQUFLLFVBQVUsU0FBUyxHQUFHLENBQUM7QUFDOUMsUUFBSTtBQUNGLFlBQU0sY0FBYyxLQUFLLFNBQVM7QUFDbEMsYUFBTztBQUFBLElBQ1QsU0FBUyxPQUFPO0FBQ2QsYUFBTyxLQUFLLEdBQUcsR0FBRyxLQUFLLGlCQUFpQixRQUFRLE1BQU0sVUFBVSxPQUFPLEtBQUssQ0FBQyxFQUFFO0FBQUEsSUFDakY7QUFBQSxFQUNGO0FBRUEsUUFBTSxJQUFJO0FBQUEsSUFDUix5Q0FBeUMsT0FBTyxlQUFlLE9BQU8sS0FBSyxJQUFJLENBQUM7QUFBQSxFQUVsRjtBQUNGO0FBUUEsU0FBUyxrQkFBa0IsV0FBbUIsVUFBd0I7QUFDcEUsTUFBSSxPQUFPLENBQUMsT0FBTyxXQUFXLE1BQU0sVUFBVSxzQkFBc0IsQ0FBQztBQUN2RTtBQVFBLFNBQVMsZ0JBQWdCLFdBQW1CLFVBQXdCO0FBQ2xFLFFBQU0sYUFBYSxLQUFLLFVBQVUsT0FBTztBQUN6QyxZQUFVLFlBQVksRUFBRSxXQUFXLEtBQUssQ0FBQztBQUN6QyxNQUFJLFdBQVcsQ0FBQyxVQUFVLGFBQWEsZUFBZSxZQUFZLFNBQVMsQ0FBQztBQUM1RSxNQUFJO0FBQ0YsUUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFlBQVksY0FBYyxHQUFHLFFBQVEsQ0FBQztBQUFBLEVBQzlELFVBQUU7QUFDQSxRQUFJLFdBQVcsQ0FBQyxVQUFVLFVBQVUsQ0FBQztBQUFBLEVBQ3ZDO0FBQ0EsU0FBTyxZQUFZLEVBQUUsT0FBTyxNQUFNLFdBQVcsS0FBSyxDQUFDO0FBQ3JEO0FBUUEsU0FBUyxhQUFhLFdBQW1CLFVBQXdCO0FBQy9ELE1BQUksUUFBUSxhQUFhLFNBQVM7QUFDaEMsd0JBQW9CLFdBQVcsUUFBUTtBQUN2QztBQUFBLEVBQ0Y7QUFFQSxNQUFJLFFBQVEsYUFBYSxVQUFVO0FBQ2pDLG9CQUFnQixXQUFXLFFBQVE7QUFDbkM7QUFBQSxFQUNGO0FBRUEsb0JBQWtCLFdBQVcsUUFBUTtBQUN2QztBQVdBLFNBQVMsb0JBQW9CLFdBQW1CLFVBQXdCO0FBQ3RFLHlCQUF1QixNQUFNLG1GQUFtRjtBQUNoSCxRQUFNLGlCQUFpQixLQUFLLFVBQVUsUUFBUTtBQUM5QyxNQUFJLE1BQU0sQ0FBQyxLQUFLLE1BQU0sS0FBSyxjQUFjLElBQUksU0FBUyxDQUFDO0FBQ3ZELFFBQU0sZUFBZSxLQUFLLGdCQUFnQixlQUFlLFdBQVc7QUFDcEUsTUFBSSxNQUFNLENBQUMsS0FBSyxNQUFNLEtBQUssUUFBUSxJQUFJLFlBQVksQ0FBQztBQUNwRCxTQUFPLGdCQUFnQixFQUFFLE9BQU8sTUFBTSxXQUFXLEtBQUssQ0FBQztBQUN6RDtBQVlBLGVBQWUsdUJBQXVCLFNBQWdEO0FBQ3BGLE1BQUk7QUFDRixVQUFNLFVBQVUsSUFBSSxRQUFRLEVBQUUsVUFBVSwrQkFBK0IsY0FBYyxvQkFBb0IsQ0FBQztBQUkxRyxVQUFNLFFBQVEsUUFBUSxJQUFJLGNBQWMsS0FBSyxRQUFRLElBQUksVUFBVTtBQUNuRSxRQUFJLE9BQU87QUFDVCxjQUFRLElBQUksaUJBQWlCLFVBQVUsS0FBSyxFQUFFO0FBQUEsSUFDaEQ7QUFDQSxVQUFNLFdBQVcsTUFBTSxNQUFNLEdBQUcsbUJBQW1CLEtBQUssT0FBTyxJQUFJLEVBQUUsUUFBUSxDQUFDO0FBQzlFLFFBQUksQ0FBQyxTQUFTLElBQUk7QUFDaEIsVUFBSSwrQkFBK0IsT0FBTyxrQkFBa0IsT0FBTyxTQUFTLE1BQU0sQ0FBQywwQ0FBMEM7QUFDN0gsYUFBTztBQUFBLElBQ1Q7QUFDQSxVQUFNLFVBQVUsTUFBTSxTQUFTLEtBQUs7QUFDcEMsV0FBTyxRQUFRLE9BQU8sSUFBSSxDQUFDLFVBQVUsTUFBTSxJQUFJO0FBQUEsRUFDakQsU0FBUyxPQUFPO0FBQ2QsUUFBSSwrQkFBK0IsT0FBTyxpQkFBaUIsaUJBQWlCLFFBQVEsTUFBTSxVQUFVLE9BQU8sS0FBSyxDQUFDLDJDQUEyQztBQUM1SixXQUFPO0FBQUEsRUFDVDtBQUNGO0FBUUEsU0FBUyxzQkFBc0IsVUFBMEI7QUFDdkQsTUFBSSxRQUFRLGFBQWEsU0FBUztBQUNoQyxXQUFPLEtBQUssVUFBVSxjQUFjO0FBQUEsRUFDdEM7QUFFQSxNQUFJLFFBQVEsYUFBYSxVQUFVO0FBQ2pDLFdBQU8sS0FBSyxVQUFVLGdCQUFnQixZQUFZLFNBQVMsVUFBVTtBQUFBLEVBQ3ZFO0FBRUEsU0FBTyxLQUFLLFVBQVUsVUFBVTtBQUNsQztBQWVBLGVBQWUsMEJBQTBCLFNBQW9DO0FBQzNFLFFBQU0sV0FBVywyQkFBMkIsRUFBRSxXQUFXLG1CQUFtQixPQUFPLEdBQUcsV0FBVyxVQUFVLFFBQVEsU0FBUyxDQUFDO0FBQzdILE1BQUksYUFBYSxRQUFXO0FBQzFCLFdBQU8sQ0FBQyxRQUFRO0FBQUEsRUFDbEI7QUFFQSxRQUFNLGFBQWEsTUFBTSx1QkFBdUIsT0FBTztBQUN2RCxNQUFJLFlBQVk7QUFDZCxVQUFNLFdBQVcseUJBQXlCLEVBQUUsWUFBWSxVQUFVLFFBQVEsVUFBVSxRQUFRLENBQUM7QUFDN0YsUUFBSSxhQUFhLFFBQVc7QUFDMUIsYUFBTyxDQUFDLEdBQUcseUJBQXlCLEtBQUssT0FBTyxJQUFJLFFBQVEsRUFBRTtBQUFBLElBQ2hFO0FBQ0EsUUFBSSw4Q0FBOEMsT0FBTywwQ0FBMEM7QUFBQSxFQUNyRztBQUVBLFNBQU8sa0NBQWtDLEVBQUUsVUFBVSxRQUFRLFVBQVUsUUFBUSxDQUFDLEVBQzdFLElBQUksQ0FBQyxTQUFTLEdBQUcseUJBQXlCLEtBQUssT0FBTyxJQUFJLElBQUksRUFBRTtBQUNyRTtBQVFBLFNBQVMsSUFBSSxTQUFpQixNQUFzQjtBQUNsRCxRQUFNLFNBQVMsVUFBVSxTQUFTLE1BQU0sRUFBRSxPQUFPLFNBQVMsQ0FBQztBQUMzRCxNQUFJLE9BQU8sV0FBVyxHQUFHO0FBQ3ZCLFVBQU0sSUFBSSxNQUFNLG1CQUFtQixPQUFPLElBQUksS0FBSyxJQUFJLENBQUMsUUFBUSxTQUFTLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLFVBQVUsT0FBTyxPQUFPLE1BQU0sQ0FBQyxHQUFHO0FBQUEsRUFDNUg7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
206
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWluc3RhbGxlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEludGVncmF0aW9uLXRpbWUgaGVscGVycyBmb3IgcmVzb2x2aW5nIHRoZSBPYnNpZGlhbiAqKnNoZWxsKiogKHRoZSBFbGVjdHJvblxuICogcnVudGltZSAvIGluc3RhbGxlciBidWlsZCkgdG8gbGF1bmNoLlxuICpcbiAqIEJ5IGRlZmF1bHQgdGhlIGhhcm5lc3MgdXNlcyB0aGUgaW5zdGFsbGVkIHNoZWxsLiBXaGVuIGEgc3BlY2lmaWMgaW5zdGFsbGVyXG4gKiB2ZXJzaW9uIGlzIHJlcXVlc3RlZCwgaXQgZG93bmxvYWRzIHRoYXQgdmVyc2lvbidzIEdpdEh1YiByZWxlYXNlIGFzc2V0IGFuZFxuICogZXh0cmFjdHMgYSBwb3J0YWJsZSBzaGVsbCBpbnRvIGEgY2FjaGUsIHJldHVybmluZyB0aGUgZXhlY3V0YWJsZSB0byBsYXVuY2guXG4gKlxuICogR2l0SHViIHJlbGVhc2UgYXNzZXRzIGV4aXN0IGZvciAqKnB1YmxpYyoqIHJlbGVhc2VzIG9ubHk7IGNhdGFseXN0IChiZXRhKVxuICogYnVpbGRzIHB1Ymxpc2ggb25seSB0aGUgYXNhciwgc28gaW5zdGFsbGVyLXBpbm5pbmcgc3VwcG9ydHMgcHVibGljIHZlcnNpb25zLlxuICogVGhlIGV4dHJhY3RlZCBzaGVsbCdzIGJ1bmRsZWQgYHJlc291cmNlcy9vYnNpZGlhbi5hc2FyYCBpcyB0aGF0IHZlcnNpb24sIHNvXG4gKiBwaW5uaW5nIHRoZSBpbnN0YWxsZXIgaXMgaG93IHlvdSBydW4gYSB2ZXJzaW9uICoqb2xkZXIqKiB0aGFuIHRoZSBpbnN0YWxsZWRcbiAqIHNoZWxsIChhc2FyLXN3YXAgaXMgdXBncmFkZS1vbmx5IFx1MjAxNCBzZWUgYG9ic2lkaWFuLXZlcnNpb24tc3dpdGNoLnRzYCkuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEludGVncmF0aW9uLXRpbWUgZG93bmxvYWQvZXh0cmFjdGlvbiBnbHVlIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQge1xuICBleGVjRmlsZVN5bmMsXG4gIHNwYXduU3luY1xufSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHtcbiAgZXhpc3RzU3luYyxcbiAgbWtkaXJTeW5jLFxuICByZWFkRmlsZVN5bmMsXG4gIHJtU3luYyxcbiAgd3JpdGVGaWxlU3luY1xufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHtcbiAgYmFzZW5hbWUsXG4gIGRpcm5hbWUsXG4gIGpvaW5cbn0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB7XG4gIGJ1aWxkSW5zdGFsbGVyQXNzZXROYW1lQ2FuZGlkYXRlcyxcbiAgc2VsZWN0SW5zdGFsbGVyQXNzZXROYW1lLFxuICBzZWxlY3RJbnN0YWxsZXJEb3dubG9hZFVybFxufSBmcm9tICcuL2luc3RhbGxlci1hc3NldC5tanMnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cubWpzJztcbmltcG9ydCB7IGdldFZlcnNpb25NZXRhZGF0YSB9IGZyb20gJy4vb2JzaWRpYW4tbWV0YWRhdGEubWpzJztcblxuLyoqXG4gKiBCcm93c2VyIFVzZXItQWdlbnQgZm9yIGRvd25sb2FkaW5nIHJlbGVhc2UgYXNzZXRzIChDbG91ZGZsYXJlLWdhdGVkKS5cbiAqL1xuY29uc3QgRE9XTkxPQURfVVNFUl9BR0VOVCA9ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvODYuMC40MjQwLjE4MyBTYWZhcmkvNTM3LjM2JztcblxuLyoqXG5CYXNlIFVSTCBmb3IgYG9ic2lkaWFuLXJlbGVhc2VzYCByZWxlYXNlIGFzc2V0cyAoYC4uLi9kb3dubG9hZC92PHZlcj4vPGFzc2V0PmApLlxuICovXG5jb25zdCBSRUxFQVNFX0RPV05MT0FEX0JBU0VfVVJMID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9vYnNpZGlhbm1kL29ic2lkaWFuLXJlbGVhc2VzL3JlbGVhc2VzL2Rvd25sb2FkJztcblxuLyoqXG5HaXRIdWIgUkVTVCBlbmRwb2ludCBsaXN0aW5nIGEgcmVsZWFzZSdzIGFzc2V0cyBieSB0YWcgKGAuLi4vcmVsZWFzZXMvdGFncy92PHZlcj5gKS5cbiAqL1xuY29uc3QgUkVMRUFTRV9BUElfVEFHX1VSTCA9ICdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL29ic2lkaWFubWQvb2JzaWRpYW4tcmVsZWFzZXMvcmVsZWFzZXMvdGFncyc7XG5cbi8qKlxuVGhlIHN1YnNldCBvZiB0aGUgR2l0SHViIHJlbGVhc2UgQVBJIHJlc3BvbnNlIHRoaXMgbW9kdWxlIHJlYWRzLlxuICovXG5pbnRlcmZhY2UgR2l0SHViUmVsZWFzZSB7XG4gIC8qKlxuICBUaGUgcmVsZWFzZSdzIGRvd25sb2FkYWJsZSBhc3NldHMuXG4gICAqL1xuICByZWFkb25seSBhc3NldHM6IHJlYWRvbmx5IEdpdEh1YlJlbGVhc2VBc3NldFtdO1xufVxuXG4vKipcblRoZSBzdWJzZXQgb2YgYSBHaXRIdWIgcmVsZWFzZSdzIGFzc2V0IG9iamVjdCB0aGlzIG1vZHVsZSByZWFkcy5cbiAqL1xuaW50ZXJmYWNlIEdpdEh1YlJlbGVhc2VBc3NldCB7XG4gIC8qKlxuICBUaGUgYXNzZXQgZmlsZSBuYW1lLCBlLmcuIGBPYnNpZGlhbi4wLjE0LjUuZXhlYC5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbn1cblxuY29uc3QgQ0FDSEVfUk9PVCA9IGpvaW4odG1wZGlyKCksICdvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nJyk7XG5jb25zdCBTSEVMTF9DQUNIRV9ESVIgPSBqb2luKENBQ0hFX1JPT1QsICdzaGVsbC1jYWNoZScpO1xuY29uc3QgTUFDX1BMSVNUX1ZFUlNJT05fUEFUVEVSTiA9IC88a2V5PkNGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nPFxcL2tleT5cXHMqPHN0cmluZz4oPzx2ZXJzaW9uPltePF0rKTxcXC9zdHJpbmc+LztcblxuLyoqXG4gKiBBIHJlc29sdmVkIE9ic2lkaWFuIHNoZWxsIGV4ZWN1dGFibGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRTaGVsbCB7XG4gIC8qKlxuICBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBPYnNpZGlhbiBleGVjdXRhYmxlIHRvIGxhdW5jaC5cbiAgICovXG4gIHJlYWRvbmx5IGV4ZVBhdGg6IHN0cmluZztcblxuICAvKipcbiAgVGhlIHNoZWxsJ3MgdmVyc2lvbiwgb3IgYHVuZGVmaW5lZGAgaWYgaXQgY291bGQgbm90IGJlIGRldGVjdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIERldGVjdHMgdGhlIHZlcnNpb24gb2YgYW4gaW5zdGFsbGVkIE9ic2lkaWFuIHNoZWxsIGZyb20gaXRzIGV4ZWN1dGFibGUuXG4gKlxuICogLSBXaW5kb3dzOiB0aGUgZXhlY3V0YWJsZSdzIFBFIGBGaWxlVmVyc2lvbmAuXG4gKiAtIG1hY09TOiBgQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmdgIGZyb20gdGhlIGFwcCBidW5kbGUncyBgSW5mby5wbGlzdGAuXG4gKiAtIExpbnV4OiBiZXN0LWVmZm9ydCBwYXJzZSBmcm9tIHRoZSBleGVjdXRhYmxlIHBhdGggKG9mdGVuIGB1bmRlZmluZWRgKS5cbiAqXG4gKiBAcGFyYW0gZXhlUGF0aCAtIEFic29sdXRlIHBhdGggdG8gdGhlIE9ic2lkaWFuIGV4ZWN1dGFibGUuXG4gKiBAcmV0dXJucyBUaGUgYHgueS56YCB2ZXJzaW9uLCBvciBgdW5kZWZpbmVkYCBpZiBpdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdEluc3RhbGxlZFNoZWxsVmVyc2lvbihleGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIHJldHVybiBkZXRlY3RXaW5kb3dzRmlsZVZlcnNpb24oZXhlUGF0aCk7XG4gIH1cblxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcbiAgICByZXR1cm4gZGV0ZWN0TWFjQnVuZGxlVmVyc2lvbihleGVQYXRoKTtcbiAgfVxuXG4gIHJldHVybiBkZXRlY3RWZXJzaW9uRnJvbVBhdGgoZXhlUGF0aCk7XG59XG5cbi8qKlxuICogRW5zdXJlcyBhIHBvcnRhYmxlIE9ic2lkaWFuIHNoZWxsIGZvciB0aGUgZ2l2ZW4gdmVyc2lvbiBpcyBleHRyYWN0ZWQgaW50byB0aGVcbiAqIGNhY2hlLCBkb3dubG9hZGluZyBhbmQgZXh0cmFjdGluZyBpdHMgR2l0SHViIHJlbGVhc2UgYXNzZXQgaWYgbmVjZXNzYXJ5LlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gQSBjb25jcmV0ZSBwdWJsaWMgYHgueS56YCB2ZXJzaW9uLlxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGNhY2hlZCBzaGVsbCBleGVjdXRhYmxlLlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgYXNzZXQgY2Fubm90IGJlIGRvd25sb2FkZWQgb3IgZXh0cmFjdGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlU2hlbGxDYWNoZWQodmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qgc2hlbGxEaXJlY3RvcnkgPSBnZXRDYWNoZWRTaGVsbERpcmVjdG9yeSh2ZXJzaW9uKTtcbiAgY29uc3QgZXhlUGF0aCA9IGdldENhY2hlZFNoZWxsRXhlUGF0aChzaGVsbERpcmVjdG9yeSk7XG4gIGlmIChleGlzdHNTeW5jKGV4ZVBhdGgpKSB7XG4gICAgbG9nKGBbaW5zdGFsbGVyXSBVc2luZyBjYWNoZWQgc2hlbGwgZm9yICR7dmVyc2lvbn0uYCk7XG4gICAgcmV0dXJuIGV4ZVBhdGg7XG4gIH1cblxuICBta2RpclN5bmMoc2hlbGxEaXJlY3RvcnksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBjb25zdCBhc3NldFVybHMgPSBhd2FpdCByZXNvbHZlSW5zdGFsbGVyQXNzZXRVcmxzKHZlcnNpb24pO1xuICBjb25zdCBhc3NldFBhdGggPSBhd2FpdCBkb3dubG9hZEluc3RhbGxlckFzc2V0KGFzc2V0VXJscywgc2hlbGxEaXJlY3RvcnksIHZlcnNpb24pO1xuICBleHRyYWN0U2hlbGwoYXNzZXRQYXRoLCBzaGVsbERpcmVjdG9yeSk7XG4gIHJtU3luYyhhc3NldFBhdGgsIHsgZm9yY2U6IHRydWUgfSk7XG5cbiAgaWYgKCFleGlzdHNTeW5jKGV4ZVBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHRyYWN0ZWQgT2JzaWRpYW4gc2hlbGwgJHt2ZXJzaW9ufSBidXQgZXhlY3V0YWJsZSBub3QgZm91bmQgYXQgJHtleGVQYXRofS5gKTtcbiAgfVxuICBsb2coYFtpbnN0YWxsZXJdIEV4dHJhY3RlZCBzaGVsbCAke3ZlcnNpb259IC0+ICR7ZXhlUGF0aH1gKTtcbiAgcmV0dXJuIGV4ZVBhdGg7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2FjaGUgZGlyZWN0b3J5IGEgdmVyc2lvbidzIGV4dHJhY3RlZCBzaGVsbCBsaXZlcyBpbiAodGhlXG4gKiBkaXJlY3RvcnkgbWF5IG5vdCB5ZXQgZXhpc3QpLlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gQSBjb25jcmV0ZSBwdWJsaWMgYHgueS56YCB2ZXJzaW9uLlxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHNoZWxsIGNhY2hlIGRpcmVjdG9yeSBmb3IgdGhlIHZlcnNpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDYWNoZWRTaGVsbERpcmVjdG9yeSh2ZXJzaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihTSEVMTF9DQUNIRV9ESVIsIHZlcnNpb24pO1xufVxuXG4vKipcbiAqIFRocm93cyBhIGRlc2NyaXB0aXZlIGVycm9yIGlmIGEgcmVxdWlyZWQgY29tbWFuZCBpcyBub3Qgb24gYFBBVEhgLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgbmFtZS5cbiAqIEBwYXJhbSBoaW50IC0gQWN0aW9uYWJsZSBndWlkYW5jZSBhcHBlbmRlZCB0byB0aGUgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydENvbW1hbmRBdmFpbGFibGUoY29tbWFuZDogc3RyaW5nLCBoaW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgcHJvYmUgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gJ3doZXJlLmV4ZScgOiAnd2hpY2gnO1xuICBjb25zdCByZXN1bHQgPSBzcGF3blN5bmMocHJvYmUsIFtjb21tYW5kXSwgeyBzdGRpbzogJ2lnbm9yZScgfSk7XG4gIGlmIChyZXN1bHQuc3RhdHVzICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSZXF1aXJlZCBjb21tYW5kIFwiJHtjb21tYW5kfVwiIHdhcyBub3QgZm91bmQgb24gUEFUSC4gJHtoaW50fWApO1xuICB9XG59XG5cbi8qKlxuICogUmVhZHMgYENGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nYCBmcm9tIGEgbWFjT1MgYXBwIGJ1bmRsZSdzIGBJbmZvLnBsaXN0YC5cbiAqXG4gKiBAcGFyYW0gZXhlUGF0aCAtIFBhdGggdG8gYC4uLi9PYnNpZGlhbi5hcHAvQ29udGVudHMvTWFjT1MvT2JzaWRpYW5gLlxuICogQHJldHVybnMgVGhlIGB4LnkuemAgdmVyc2lvbiwgb3IgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGRldGVjdE1hY0J1bmRsZVZlcnNpb24oZXhlUGF0aDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjb250ZW50c0RpcmVjdG9yeSA9IGRpcm5hbWUoZGlybmFtZShleGVQYXRoKSk7XG4gICAgY29uc3QgcGxpc3QgPSByZWFkRmlsZVN5bmMoam9pbihjb250ZW50c0RpcmVjdG9yeSwgJ0luZm8ucGxpc3QnKSwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgbWF0Y2ggPSBNQUNfUExJU1RfVkVSU0lPTl9QQVRURVJOLmV4ZWMocGxpc3QpO1xuICAgIHJldHVybiBtYXRjaD8uZ3JvdXBzPy5bJ3ZlcnNpb24nXTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIEJlc3QtZWZmb3J0IHBhcnNlIG9mIGFuIGB4LnkuemAgdmVyc2lvbiBlbWJlZGRlZCBpbiBhIHBhdGguXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHBhdGggb3Igc3RyaW5nIHRvIHNjYW4uXG4gKiBAcmV0dXJucyBUaGUgZmlyc3QgYHgueS56YCBtYXRjaCwgb3IgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGRldGVjdFZlcnNpb25Gcm9tUGF0aCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbWF0Y2ggPSAvKD88dmVyc2lvbj5cXGQrXFwuXFxkK1xcLlxcZCspLy5leGVjKHZhbHVlKTtcbiAgcmV0dXJuIG1hdGNoPy5ncm91cHM/LlsndmVyc2lvbiddO1xufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBQRSBgRmlsZVZlcnNpb25gIG9mIGEgV2luZG93cyBleGVjdXRhYmxlIHZpYSBQb3dlclNoZWxsLlxuICpcbiAqIEBwYXJhbSBleGVQYXRoIC0gQWJzb2x1dGUgcGF0aCB0byB0aGUgZXhlY3V0YWJsZS5cbiAqIEByZXR1cm5zIFRoZSBgeC55LnpgIHZlcnNpb24sIG9yIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBkZXRlY3RXaW5kb3dzRmlsZVZlcnNpb24oZXhlUGF0aDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBvdXRwdXQgPSBleGVjRmlsZVN5bmMoXG4gICAgICAncG93ZXJzaGVsbCcsXG4gICAgICBbJy1Ob1Byb2ZpbGUnLCAnLUNvbW1hbmQnLCBgKEdldC1JdGVtIC1MaXRlcmFsUGF0aCAke0pTT04uc3RyaW5naWZ5KGV4ZVBhdGgpfSkuVmVyc2lvbkluZm8uRmlsZVZlcnNpb25gXSxcbiAgICAgIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfVxuICAgICk7XG4gICAgY29uc3QgdmVyc2lvbiA9IG91dHB1dC50cmltKCk7XG4gICAgcmV0dXJuIHZlcnNpb24ubGVuZ3RoID4gMCA/IHZlcnNpb24gOiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBEb3dubG9hZHMgYSBzaW5nbGUgcmVsZWFzZSBhc3NldCBmb3IgYSB2ZXJzaW9uIHRvIGEgZGVzdGluYXRpb24gZmlsZS5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gVGhlIGFzc2V0IGRvd25sb2FkIFVSTC5cbiAqIEBwYXJhbSBkZXN0aW5hdGlvbiAtIERlc3RpbmF0aW9uIGZpbGUgcGF0aC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIHJlcXVlc3QgZmFpbHMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkQXNzZXQodXJsOiBzdHJpbmcsIGRlc3RpbmF0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgbG9nKGBbaW5zdGFsbGVyXSBEb3dubG9hZGluZyBpbnN0YWxsZXIgZnJvbSAke3VybH0gLi4uYCk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7IGhlYWRlcnM6IHsgJ1VzZXItQWdlbnQnOiBET1dOTE9BRF9VU0VSX0FHRU5UIH0gfSk7XG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtTdHJpbmcocmVzcG9uc2Uuc3RhdHVzKX1gKTtcbiAgfVxuICB3cml0ZUZpbGVTeW5jKGRlc3RpbmF0aW9uLCBCdWZmZXIuZnJvbShhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpKSk7XG59XG5cbi8qKlxuICogRG93bmxvYWRzIHRoZSBmaXJzdCByZWFjaGFibGUgaW5zdGFsbGVyIGFzc2V0IGZyb20gYW4gb3JkZXJlZCBsaXN0IG9mXG4gKiBjYW5kaWRhdGUgVVJMcywgcmV0dXJuaW5nIHRoZSBwYXRoIGl0IHdhcyBzYXZlZCB0by5cbiAqXG4gKiBAcGFyYW0gdXJscyAtIENhbmRpZGF0ZSBhc3NldCBVUkxzLCBpbiBwcmlvcml0eSBvcmRlci5cbiAqIEBwYXJhbSBzaGVsbERpcmVjdG9yeSAtIFRoZSBkZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKiBAcGFyYW0gdmVyc2lvbiAtIFRoZSByZWxlYXNlIHZlcnNpb24gKGZvciBlcnJvciBtZXNzYWdlcykuXG4gKiBAcmV0dXJucyBUaGUgZG93bmxvYWRlZCBhc3NldCdzIHBhdGguXG4gKiBAdGhyb3dzIEVycm9yIGlmIG5vbmUgb2YgdGhlIGNhbmRpZGF0ZXMgY2FuIGJlIGRvd25sb2FkZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkSW5zdGFsbGVyQXNzZXQodXJsczogc3RyaW5nW10sIHNoZWxsRGlyZWN0b3J5OiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCB1cmwgb2YgdXJscykge1xuICAgIGNvbnN0IGFzc2V0UGF0aCA9IGpvaW4oc2hlbGxEaXJlY3RvcnksIGJhc2VuYW1lKHVybCkpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBkb3dubG9hZEFzc2V0KHVybCwgYXNzZXRQYXRoKTtcbiAgICAgIHJldHVybiBhc3NldFBhdGg7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9ycy5wdXNoKGAke3VybH06ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWApO1xuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgRmFpbGVkIHRvIGRvd25sb2FkIE9ic2lkaWFuIGluc3RhbGxlciAke3ZlcnNpb259LiBBdHRlbXB0czogJHtlcnJvcnMuam9pbignOyAnKX0uIGBcbiAgICAgICsgJ0NhdGFseXN0L2JldGEgdmVyc2lvbnMgaGF2ZSBubyBwdWJsaWMgaW5zdGFsbGVyIFx1MjAxNCBwaW4gYW4gYXNhciB2ZXJzaW9uIG9uIGEgcHVibGljL2luc3RhbGxlZCBzaGVsbCBpbnN0ZWFkLidcbiAgKTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBhIExpbnV4IGAudGFyLmd6YCBwb3J0YWJsZSBidWlsZC5cbiAqXG4gKiBAcGFyYW0gYXNzZXRQYXRoIC0gUGF0aCB0byB0aGUgZG93bmxvYWRlZCBgLnRhci5nemAuXG4gKiBAcGFyYW0gc2hlbGxEaXJlY3RvcnkgLSBEZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RMaW51eFNoZWxsKGFzc2V0UGF0aDogc3RyaW5nLCBzaGVsbERpcmVjdG9yeTogc3RyaW5nKTogdm9pZCB7XG4gIHJ1bigndGFyJywgWyd4emYnLCBhc3NldFBhdGgsICctQycsIHNoZWxsRGlyZWN0b3J5LCAnLS1zdHJpcC1jb21wb25lbnRzPTEnXSk7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgYSBtYWNPUyBgLmRtZ2AgYnkgbW91bnRpbmcgaXQgYW5kIGNvcHlpbmcgdGhlIGFwcCBidW5kbGUuXG4gKlxuICogQHBhcmFtIGFzc2V0UGF0aCAtIFBhdGggdG8gdGhlIGRvd25sb2FkZWQgYC5kbWdgLlxuICogQHBhcmFtIHNoZWxsRGlyZWN0b3J5IC0gRGVzdGluYXRpb24gc2hlbGwgZGlyZWN0b3J5LlxuICovXG5mdW5jdGlvbiBleHRyYWN0TWFjU2hlbGwoYXNzZXRQYXRoOiBzdHJpbmcsIHNoZWxsRGlyZWN0b3J5OiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgbW91bnRQb2ludCA9IGpvaW4oc2hlbGxEaXJlY3RvcnksICdfX21udCcpO1xuICBta2RpclN5bmMobW91bnRQb2ludCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIHJ1bignaGRpdXRpbCcsIFsnYXR0YWNoJywgJy1ub2Jyb3dzZScsICctbW91bnRwb2ludCcsIG1vdW50UG9pbnQsIGFzc2V0UGF0aF0pO1xuICB0cnkge1xuICAgIHJ1bignY3AnLCBbJy1SJywgam9pbihtb3VudFBvaW50LCAnT2JzaWRpYW4uYXBwJyksIHNoZWxsRGlyZWN0b3J5XSk7XG4gIH0gZmluYWxseSB7XG4gICAgcnVuKCdoZGl1dGlsJywgWydkZXRhY2gnLCBtb3VudFBvaW50XSk7XG4gIH1cbiAgcm1TeW5jKG1vdW50UG9pbnQsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBhIGRvd25sb2FkZWQgaW5zdGFsbGVyIGFzc2V0IGludG8gYSBzaGVsbCBkaXJlY3RvcnksIHBlciBwbGF0Zm9ybS5cbiAqXG4gKiBAcGFyYW0gYXNzZXRQYXRoIC0gVGhlIGRvd25sb2FkZWQgYXNzZXQgcGF0aC5cbiAqIEBwYXJhbSBzaGVsbERpcmVjdG9yeSAtIFRoZSBkZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RTaGVsbChhc3NldFBhdGg6IHN0cmluZywgc2hlbGxEaXJlY3Rvcnk6IHN0cmluZyk6IHZvaWQge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIGV4dHJhY3RXaW5kb3dzU2hlbGwoYXNzZXRQYXRoLCBzaGVsbERpcmVjdG9yeSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgZXh0cmFjdE1hY1NoZWxsKGFzc2V0UGF0aCwgc2hlbGxEaXJlY3RvcnkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGV4dHJhY3RMaW51eFNoZWxsKGFzc2V0UGF0aCwgc2hlbGxEaXJlY3RvcnkpO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIGEgV2luZG93cyBOU0lTIGluc3RhbGxlcidzIGlubmVyIGFwcCBwYXlsb2FkIHZpYSA3LVppcC5cbiAqXG4gKiBUaGUgTlNJUyBpbnN0YWxsZXIgYC5leGVgIGNvbnRhaW5zIGAkUExVR0lOU0RJUi9hcHAtNjQuN3pgLCB3aGljaCBob2xkcyB0aGVcbiAqIHBvcnRhYmxlIGFwcCAobWlycm9ycyBob3cgdGhlIHNjb29wIG1hbmlmZXN0IGluc3RhbGxzIE9ic2lkaWFuKS5cbiAqXG4gKiBAcGFyYW0gYXNzZXRQYXRoIC0gUGF0aCB0byB0aGUgZG93bmxvYWRlZCBgLmV4ZWAuXG4gKiBAcGFyYW0gc2hlbGxEaXJlY3RvcnkgLSBEZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RXaW5kb3dzU2hlbGwoYXNzZXRQYXRoOiBzdHJpbmcsIHNoZWxsRGlyZWN0b3J5OiBzdHJpbmcpOiB2b2lkIHtcbiAgYXNzZXJ0Q29tbWFuZEF2YWlsYWJsZSgnN3onLCAnSW5zdGFsbCA3LVppcCAoZS5nLiBgc2Nvb3AgaW5zdGFsbCA3emlwYCkgdG8gZXh0cmFjdCBhIHBpbm5lZCBPYnNpZGlhbiBpbnN0YWxsZXIuJyk7XG4gIGNvbnN0IG5zaXNFeHRyYWN0RGlyZWN0b3J5ID0gam9pbihzaGVsbERpcmVjdG9yeSwgJ19fbnNpcycpO1xuICBydW4oJzd6JywgWyd4JywgJy15JywgYC1vJHtuc2lzRXh0cmFjdERpcmVjdG9yeX1gLCBhc3NldFBhdGhdKTtcbiAgY29uc3QgaW5uZXJBcmNoaXZlID0gam9pbihuc2lzRXh0cmFjdERpcmVjdG9yeSwgJyRQTFVHSU5TRElSJywgJ2FwcC02NC43eicpO1xuICBydW4oJzd6JywgWyd4JywgJy15JywgYC1vJHtzaGVsbERpcmVjdG9yeX1gLCBpbm5lckFyY2hpdmVdKTtcbiAgcm1TeW5jKG5zaXNFeHRyYWN0RGlyZWN0b3J5LCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG59XG5cbi8qKlxuICogRmV0Y2hlcyBhIHJlbGVhc2UncyBhc3NldCBuYW1lcyBmcm9tIHRoZSBHaXRIdWIgQVBJLlxuICpcbiAqIFJlYWRzIGEgYEdJVEhVQl9UT0tFTmAgKG9yIGBHSF9UT0tFTmApIGZyb20gdGhlIGVudmlyb25tZW50IGFuZCBzZW5kcyBpdCBhcyBhXG4gKiBiZWFyZXIgdG9rZW4gd2hlbiBwcmVzZW50LCB0byBsaWZ0IHRoZSBhbm9ueW1vdXMgcmF0ZSBsaW1pdCB0aGF0IG90aGVyd2lzZVxuICogcmV0dXJucyBIVFRQIDQwMyBvbiBzaGFyZWQgQ0kgcnVubmVyIElQcy5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiAtIFRoZSByZWxlYXNlIHZlcnNpb24gKHRhZyBgdjx2ZXJzaW9uPmApLlxuICogQHJldHVybnMgVGhlIGFzc2V0IG5hbWVzLCBvciBgdW5kZWZpbmVkYCBpZiB0aGUgQVBJIGlzIHVuYXZhaWxhYmxlLlxuICovXG5hc3luYyBmdW5jdGlvbiBmZXRjaFJlbGVhc2VBc3NldE5hbWVzKHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10gfCB1bmRlZmluZWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoeyAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIranNvbicsICdVc2VyLUFnZW50JzogRE9XTkxPQURfVVNFUl9BR0VOVCB9KTtcbiAgICAvLyBTZW5kIGEgYmVhcmVyIHRva2VuIHdoZW4gb25lIGlzIGF2YWlsYWJsZSAoZS5nLiBHSVRIVUJfVE9LRU4gb24gQ0kpLlxuICAgIC8vIFdpdGhvdXQgaXQgdGhlIGFzc2V0LWxpc3QgQVBJIGlzIGxpbWl0ZWQgdG8gdGhlIGFub255bW91cyBxdW90YS5cbiAgICAvLyBUaGF0IHF1b3RhIHJldHVybnMgSFRUUCA0MDMgb24gc2hhcmVkIENJIHJ1bm5lciBJUHMgYW5kIGZvcmNlcyB0aGUgZmFsbGJhY2suXG4gICAgY29uc3QgdG9rZW4gPSBwcm9jZXNzLmVudlsnR0lUSFVCX1RPS0VOJ10gPz8gcHJvY2Vzcy5lbnZbJ0dIX1RPS0VOJ107XG4gICAgaWYgKHRva2VuKSB7XG4gICAgICBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIGBCZWFyZXIgJHt0b2tlbn1gKTtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtSRUxFQVNFX0FQSV9UQUdfVVJMfS92JHt2ZXJzaW9ufWAsIHsgaGVhZGVycyB9KTtcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICBsb2coYFtpbnN0YWxsZXJdIFJlbGVhc2UgQVBJIGZvciAke3ZlcnNpb259IHJldHVybmVkIEhUVFAgJHtTdHJpbmcocmVzcG9uc2Uuc3RhdHVzKX07IGZhbGxpbmcgYmFjayB0byB0ZW1wbGF0ZWQgYXNzZXQgbmFtZXMuYCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCByZWxlYXNlID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIEdpdEh1YlJlbGVhc2U7XG4gICAgcmV0dXJuIHJlbGVhc2UuYXNzZXRzLm1hcCgoYXNzZXQpID0+IGFzc2V0Lm5hbWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZyhgW2luc3RhbGxlcl0gUmVsZWFzZSBBUEkgZm9yICR7dmVyc2lvbn0gdW5hdmFpbGFibGUgKCR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfSk7IGZhbGxpbmcgYmFjayB0byB0ZW1wbGF0ZWQgYXNzZXQgbmFtZXMuYCk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGV4cGVjdGVkIGNhY2hlZCBzaGVsbCBleGVjdXRhYmxlIHBhdGggZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtLlxuICpcbiAqIEBwYXJhbSBzaGVsbERpcmVjdG9yeSAtIFRoZSBzaGVsbCBjYWNoZSBkaXJlY3RvcnkgZm9yIGEgdmVyc2lvbi5cbiAqIEByZXR1cm5zIFRoZSBleGVjdXRhYmxlIHBhdGguXG4gKi9cbmZ1bmN0aW9uIGdldENhY2hlZFNoZWxsRXhlUGF0aChzaGVsbERpcmVjdG9yeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICByZXR1cm4gam9pbihzaGVsbERpcmVjdG9yeSwgJ09ic2lkaWFuLmV4ZScpO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgcmV0dXJuIGpvaW4oc2hlbGxEaXJlY3RvcnksICdPYnNpZGlhbi5hcHAnLCAnQ29udGVudHMnLCAnTWFjT1MnLCAnT2JzaWRpYW4nKTtcbiAgfVxuXG4gIHJldHVybiBqb2luKHNoZWxsRGlyZWN0b3J5LCAnb2JzaWRpYW4nKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgb3JkZXJlZCBpbnN0YWxsZXIgYXNzZXQgZG93bmxvYWQgVVJMcyB0byB0cnkgZm9yIGEgdmVyc2lvbi5cbiAqXG4gKiBUaGUgdmVyc2lvbidzIGV4YWN0IGluc3RhbGxlciBVUkwgYmFrZWQgaW50byB0aGUgYG1ldGFkYXRhLmpzb25gIGNhdGFsb2dcbiAqIChmcm9tIHVwc3RyZWFtIGBvYnNpZGlhbi12ZXJzaW9ucy5qc29uYCkgaXMgdXNlZCBkaXJlY3RseSB3aGVuIHByZXNlbnQsXG4gKiBhdm9pZGluZyBhbnkgbmV0d29yayBsb29rdXAuIE90aGVyd2lzZSB0aGUgcmVsZWFzZSdzIHJlYWwgYXNzZXQgbGlzdCBpc1xuICogcXVlcmllZCBzbyB0aGUgcGxhdGZvcm0tY29ycmVjdCBhc3NldCBpcyBwaWNrZWQgcmVnYXJkbGVzcyBvZiB0aGUgaGlzdG9yaWNhbFxuICogZG90LXZzLWh5cGhlbiBuYW1pbmc7IGlmIHRoYXQgY2FsbCB0b28gaXMgdW5hdmFpbGFibGUgaXQgZmFsbHMgYmFjayB0byB0cnlpbmdcbiAqIGJvdGggdGVtcGxhdGVkIHNlcGFyYXRvciBmb3Jtcy5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiAtIFRoZSBjb25jcmV0ZSBgeC55LnpgIHZlcnNpb24uXG4gKiBAcmV0dXJucyBDYW5kaWRhdGUgYXNzZXQgVVJMcywgaW4gcHJpb3JpdHkgb3JkZXIuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVJbnN0YWxsZXJBc3NldFVybHModmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBiYWtlZFVybCA9IHNlbGVjdEluc3RhbGxlckRvd25sb2FkVXJsKHsgZG93bmxvYWRzOiBnZXRWZXJzaW9uTWV0YWRhdGEodmVyc2lvbik/LmRvd25sb2FkcywgcGxhdGZvcm06IHByb2Nlc3MucGxhdGZvcm0gfSk7XG4gIGlmIChiYWtlZFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIFtiYWtlZFVybF07XG4gIH1cblxuICBjb25zdCBhc3NldE5hbWVzID0gYXdhaXQgZmV0Y2hSZWxlYXNlQXNzZXROYW1lcyh2ZXJzaW9uKTtcbiAgaWYgKGFzc2V0TmFtZXMpIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHNlbGVjdEluc3RhbGxlckFzc2V0TmFtZSh7IGFzc2V0TmFtZXMsIHBsYXRmb3JtOiBwcm9jZXNzLnBsYXRmb3JtLCB2ZXJzaW9uIH0pO1xuICAgIGlmIChzZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gW2Ake1JFTEVBU0VfRE9XTkxPQURfQkFTRV9VUkx9L3Yke3ZlcnNpb259LyR7c2VsZWN0ZWR9YF07XG4gICAgfVxuICAgIGxvZyhgW2luc3RhbGxlcl0gTm8gaW5zdGFsbGVyIGFzc2V0IG1hdGNoZWQgZm9yICR7dmVyc2lvbn07IGZhbGxpbmcgYmFjayB0byB0ZW1wbGF0ZWQgYXNzZXQgbmFtZXMuYCk7XG4gIH1cblxuICByZXR1cm4gYnVpbGRJbnN0YWxsZXJBc3NldE5hbWVDYW5kaWRhdGVzKHsgcGxhdGZvcm06IHByb2Nlc3MucGxhdGZvcm0sIHZlcnNpb24gfSlcbiAgICAubWFwKChuYW1lKSA9PiBgJHtSRUxFQVNFX0RPV05MT0FEX0JBU0VfVVJMfS92JHt2ZXJzaW9ufS8ke25hbWV9YCk7XG59XG5cbi8qKlxuICogUnVucyBhIGNvbW1hbmQgc3luY2hyb25vdXNseSwgdGhyb3dpbmcgb24gYSBub24temVybyBleGl0LlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQuXG4gKiBAcGFyYW0gY29tbWFuZEFyZ3VtZW50cyAtIFRoZSBhcmd1bWVudHMuXG4gKi9cbmZ1bmN0aW9uIHJ1bihjb21tYW5kOiBzdHJpbmcsIGNvbW1hbmRBcmd1bWVudHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gIGNvbnN0IHJlc3VsdCA9IHNwYXduU3luYyhjb21tYW5kLCBjb21tYW5kQXJndW1lbnRzLCB7IHN0ZGlvOiAnaWdub3JlJyB9KTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvbW1hbmQgZmFpbGVkOiAke2NvbW1hbmR9ICR7Y29tbWFuZEFyZ3VtZW50cy5tYXAoKGFyZ3VtZW50KSA9PiBiYXNlbmFtZShhcmd1bWVudCkpLmpvaW4oJyAnKX0gKGV4aXQgJHtTdHJpbmcocmVzdWx0LnN0YXR1cyl9KWApO1xuICB9XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiQUFtQkE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsY0FBYztBQUN2QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxPQUFPLGFBQWE7QUFFcEI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxXQUFXO0FBQ3BCLFNBQVMsMEJBQTBCO0FBS25DLE1BQU0sc0JBQXNCO0FBSzVCLE1BQU0sNEJBQTRCO0FBS2xDLE1BQU0sc0JBQXNCO0FB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
@@ -19,24 +19,32 @@ export interface LaunchOwnedObsidianInstanceParams {
19
19
  * @default `'127.0.0.1'`
20
20
  */
21
21
  readonly cdpHost?: string;
22
- /** Absolute path to the Obsidian executable (shell) to launch. */
22
+ /**
23
+ Absolute path to the Obsidian executable (shell) to launch.
24
+ */
23
25
  readonly exePath: string;
24
26
  /**
25
- * Extra command-line args appended after `--user-data-dir` and
27
+ * Extra command-line arguments appended after `--user-data-dir` and
26
28
  * `--remote-debugging-port` — used to pass the keep-alive Chromium flags when
27
29
  * the instance is launched hidden (off-screen). Empty by default.
28
30
  */
29
- readonly extraArgs?: readonly string[];
30
- /** Absolute path to the isolated user-data dir to pass via `--user-data-dir`. */
31
- readonly userDataDir: string;
31
+ readonly extraArguments?: readonly string[];
32
+ /**
33
+ Absolute path to the isolated user-data dir to pass via `--user-data-dir`.
34
+ */
35
+ readonly userDataDirectory: string;
32
36
  }
33
37
  /**
34
38
  * A running, harness-owned Obsidian instance.
35
39
  */
36
40
  export interface OwnedObsidianInstance {
37
- /** Base CDP URL, e.g. `http://127.0.0.1:51888`. */
41
+ /**
42
+ Base CDP URL, e.g. `http://127.0.0.1:51888`.
43
+ */
38
44
  readonly cdpUrl: string;
39
- /** Kills the instance and its entire process tree. */
45
+ /**
46
+ Kills the instance and its entire process tree.
47
+ */
40
48
  kill(): void;
41
49
  /**
42
50
  * Loopback port the instance's renderer connects back to so it destroys
@@ -45,7 +53,9 @@ export interface OwnedObsidianInstance {
45
53
  * enough.
46
54
  */
47
55
  readonly parentLivenessPort: number;
48
- /** The CDP remote-debugging port the instance was launched with. */
56
+ /**
57
+ The CDP remote-debugging port the instance was launched with.
58
+ */
49
59
  readonly port: number;
50
60
  }
51
61
  /**
@@ -11,10 +11,10 @@ async function launchOwnedObsidianInstance(params) {
11
11
  const port = await pickFreePort();
12
12
  const cdpUrl = `http://${cdpHost}:${String(port)}`;
13
13
  const livenessServer = await startParentLivenessServer();
14
- log(`[obsidian-instance] Launching owned Obsidian: userData=${params.userDataDir}, cdpPort=${String(port)}`);
14
+ log(`[obsidian-instance] Launching owned Obsidian: userData=${params.userDataDirectory}, cdpPort=${String(port)}`);
15
15
  const child = spawn(
16
16
  params.exePath,
17
- [`--user-data-dir=${params.userDataDir}`, `--remote-debugging-port=${String(port)}`, ...params.extraArgs ?? []],
17
+ [`--user-data-dir=${params.userDataDirectory}`, `--remote-debugging-port=${String(port)}`, ...params.extraArguments ?? []],
18
18
  { detached: true, stdio: "ignore" }
19
19
  );
20
20
  child.unref();
@@ -75,4 +75,4 @@ export {
75
75
  launchOwnedObsidianInstance,
76
76
  pickFreePort
77
77
  };
78
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWluc3RhbmNlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogTGF1bmNoZXMgYW5kIG1hbmFnZXMgYSBoYXJuZXNzLW93bmVkLCBpc29sYXRlZCBPYnNpZGlhbiBkZXNrdG9wIGluc3RhbmNlLlxuICpcbiAqIFRoZSBpbnN0YW5jZSBydW5zIGFnYWluc3QgYSBkZWRpY2F0ZWQgYC0tdXNlci1kYXRhLWRpcmAgKHNvIGl0IG5ldmVyIHRvdWNoZXNcbiAqIHRoZSB1c2VyJ3MgT2JzaWRpYW4gY29uZmlnLCByZWdpc3RyeSwgb3IgcnVubmluZyB3aW5kb3cpIGFuZCBleHBvc2VzIENEUCBvbiBhXG4gKiBkZWRpY2F0ZWQgYC0tcmVtb3RlLWRlYnVnZ2luZy1wb3J0YC4gQmVjYXVzZSBFbGVjdHJvbidzIHNpbmdsZS1pbnN0YW5jZSBsb2NrXG4gKiBpcyBrZXllZCB0byB0aGUgdXNlci1kYXRhIGRpciwgdGhlIG93bmVkIGluc3RhbmNlIHJ1bnMgaW4gcGFyYWxsZWwgd2l0aCB0aGVcbiAqIHVzZXIncyBvd24gT2JzaWRpYW4uIENvbmZpcm1lZCBieSB0aGUgUGhhc2UgMCBzcGlrZSAoc2VlIHRoZSBwcm9qZWN0IHBsYW4pLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIHByb2Nlc3MgbWFuYWdlbWVudCBjb3ZlcmVkIGJ5IGludGVncmF0aW9uIHRlc3RzLCBub3QgdW5pdCB0ZXN0cy4gKi9cblxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgY3JlYXRlU2VydmVyIH0gZnJvbSAnbm9kZTpuZXQnO1xuXG5pbXBvcnQgeyBraWxsUHJvY2Vzc1RyZWUgfSBmcm9tICcuL2tpbGwtcHJvY2Vzcy10cmVlLm1qcyc7XG5pbXBvcnQgeyBsb2cgfSBmcm9tICcuL2xvZy5tanMnO1xuaW1wb3J0IHsgc3RhcnRQYXJlbnRMaXZlbmVzc1NlcnZlciB9IGZyb20gJy4vcGFyZW50LWxpdmVuZXNzLm1qcyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGxhdW5jaE93bmVkT2JzaWRpYW5JbnN0YW5jZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGF1bmNoT3duZWRPYnNpZGlhbkluc3RhbmNlUGFyYW1zIHtcbiAgLyoqXG4gICAqIENEUCBob3N0IHRvIGJpbmQvcG9sbC5cbiAgICpcbiAgICogQGRlZmF1bHQgYCcxMjcuMC4wLjEnYFxuICAgKi9cbiAgcmVhZG9ubHkgY2RwSG9zdD86IHN0cmluZztcblxuICAvKiogQWJzb2x1dGUgcGF0aCB0byB0aGUgT2JzaWRpYW4gZXhlY3V0YWJsZSAoc2hlbGwpIHRvIGxhdW5jaC4gKi9cbiAgcmVhZG9ubHkgZXhlUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFeHRyYSBjb21tYW5kLWxpbmUgYXJncyBhcHBlbmRlZCBhZnRlciBgLS11c2VyLWRhdGEtZGlyYCBhbmRcbiAgICogYC0tcmVtb3RlLWRlYnVnZ2luZy1wb3J0YCBcdTIwMTQgdXNlZCB0byBwYXNzIHRoZSBrZWVwLWFsaXZlIENocm9taXVtIGZsYWdzIHdoZW5cbiAgICogdGhlIGluc3RhbmNlIGlzIGxhdW5jaGVkIGhpZGRlbiAob2ZmLXNjcmVlbikuIEVtcHR5IGJ5IGRlZmF1bHQuXG4gICAqL1xuICByZWFkb25seSBleHRyYUFyZ3M/OiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKiogQWJzb2x1dGUgcGF0aCB0byB0aGUgaXNvbGF0ZWQgdXNlci1kYXRhIGRpciB0byBwYXNzIHZpYSBgLS11c2VyLWRhdGEtZGlyYC4gKi9cbiAgcmVhZG9ubHkgdXNlckRhdGFEaXI6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHJ1bm5pbmcsIGhhcm5lc3Mtb3duZWQgT2JzaWRpYW4gaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3duZWRPYnNpZGlhbkluc3RhbmNlIHtcbiAgLyoqIEJhc2UgQ0RQIFVSTCwgZS5nLiBgaHR0cDovLzEyNy4wLjAuMTo1MTg4OGAuICovXG4gIHJlYWRvbmx5IGNkcFVybDogc3RyaW5nO1xuXG4gIC8qKiBLaWxscyB0aGUgaW5zdGFuY2UgYW5kIGl0cyBlbnRpcmUgcHJvY2VzcyB0cmVlLiAqL1xuICBraWxsKCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIExvb3BiYWNrIHBvcnQgdGhlIGluc3RhbmNlJ3MgcmVuZGVyZXIgY29ubmVjdHMgYmFjayB0byBzbyBpdCBkZXN0cm95c1xuICAgKiBpdHNlbGYgaWYgdGhpcyBoYXJuZXNzIHByb2Nlc3MgZGllcyB3aXRob3V0IGNsZWFuaW5nIHVwLiBTZWVcbiAgICogYHBhcmVudC1saXZlbmVzcy50c2AgZm9yIHdoeSB0aGUgcGFyZW50L2NoaWxkIHJlbGF0aW9uc2hpcCBhbG9uZSBpcyBub3RcbiAgICogZW5vdWdoLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyZW50TGl2ZW5lc3NQb3J0OiBudW1iZXI7XG5cbiAgLyoqIFRoZSBDRFAgcmVtb3RlLWRlYnVnZ2luZyBwb3J0IHRoZSBpbnN0YW5jZSB3YXMgbGF1bmNoZWQgd2l0aC4gKi9cbiAgcmVhZG9ubHkgcG9ydDogbnVtYmVyO1xufVxuXG5jb25zdCBERUZBVUxUX0NEUF9IT1NUID0gJzEyNy4wLjAuMSc7XG5jb25zdCBDRFBfUkVBRFlfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMgPSAxMDAwO1xuY29uc3QgQ0RQX1JFQURZX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gNjAwMDA7XG5cbmludGVyZmFjZSBDZHBUYXJnZXQge1xuICB0eXBlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogTGF1bmNoZXMgYW4gaXNvbGF0ZWQsIGhhcm5lc3Mtb3duZWQgT2JzaWRpYW4gaW5zdGFuY2UgYW5kIHdhaXRzIHVudGlsIGl0cyBDRFBcbiAqIGVuZHBvaW50IGlzIHNlcnZpbmcgcGFnZSB0YXJnZXRzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBMYXVuY2ggcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIFRoZSBydW5uaW5nIG93bmVkIGluc3RhbmNlLlxuICogQHRocm93cyBFcnJvciBpZiBDRFAgZG9lcyBub3QgYmVjb21lIHJlYWNoYWJsZSB3aXRoaW4gdGhlIHRpbWVvdXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsYXVuY2hPd25lZE9ic2lkaWFuSW5zdGFuY2UoXG4gIHBhcmFtczogTGF1bmNoT3duZWRPYnNpZGlhbkluc3RhbmNlUGFyYW1zXG4pOiBQcm9taXNlPE93bmVkT2JzaWRpYW5JbnN0YW5jZT4ge1xuICBjb25zdCBjZHBIb3N0ID0gcGFyYW1zLmNkcEhvc3QgPz8gREVGQVVMVF9DRFBfSE9TVDtcbiAgY29uc3QgcG9ydCA9IGF3YWl0IHBpY2tGcmVlUG9ydCgpO1xuICBjb25zdCBjZHBVcmwgPSBgaHR0cDovLyR7Y2RwSG9zdH06JHtTdHJpbmcocG9ydCl9YDtcblxuICAvLyBMaXN0ZW4gQkVGT1JFIHNwYXduaW5nLCBzbyB0aGUgcmVuZGVyZXIgd2F0Y2hkb2cgY2FuIG5ldmVyIHJhY2UgdGhlIHNlcnZlclxuICAvLyBJbnRvIGEgZmFpbGVkIGNvbm5lY3QgKHdoaWNoIGl0IHRyZWF0cyBhcyBcIm5vIHdhdGNoZG9nXCIsIGxlYXZpbmcgdGhlIGluc3RhbmNlIGFsaXZlKS5cbiAgY29uc3QgbGl2ZW5lc3NTZXJ2ZXIgPSBhd2FpdCBzdGFydFBhcmVudExpdmVuZXNzU2VydmVyKCk7XG5cbiAgbG9nKGBbb2JzaWRpYW4taW5zdGFuY2VdIExhdW5jaGluZyBvd25lZCBPYnNpZGlhbjogdXNlckRhdGE9JHtwYXJhbXMudXNlckRhdGFEaXJ9LCBjZHBQb3J0PSR7U3RyaW5nKHBvcnQpfWApO1xuICBjb25zdCBjaGlsZCA9IHNwYXduKFxuICAgIHBhcmFtcy5leGVQYXRoLFxuICAgIFtgLS11c2VyLWRhdGEtZGlyPSR7cGFyYW1zLnVzZXJEYXRhRGlyfWAsIGAtLXJlbW90ZS1kZWJ1Z2dpbmctcG9ydD0ke1N0cmluZyhwb3J0KX1gLCAuLi4ocGFyYW1zLmV4dHJhQXJncyA/PyBbXSldLFxuICAgIHsgZGV0YWNoZWQ6IHRydWUsIHN0ZGlvOiAnaWdub3JlJyB9XG4gICk7XG4gIGNoaWxkLnVucmVmKCk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCB3YWl0Rm9yQ2RwUmVhZHkoY2RwVXJsKTtcbiAgICBsb2coYFtvYnNpZGlhbi1pbnN0YW5jZV0gT3duZWQgT2JzaWRpYW4gaXMgc2VydmluZyBDRFAgYXQgJHtjZHBVcmx9LmApO1xuICAgIHJldHVybiB7IGNkcFVybCwga2lsbCwgcGFyZW50TGl2ZW5lc3NQb3J0OiBsaXZlbmVzc1NlcnZlci5wb3J0LCBwb3J0IH07XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAga2lsbCgpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG5cbiAgZnVuY3Rpb24ga2lsbCgpOiB2b2lkIHtcbiAgICBsaXZlbmVzc1NlcnZlci5jbG9zZSgpO1xuICAgIGtpbGxQcm9jZXNzVHJlZShjaGlsZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBQaWNrcyBhIGZyZWUgVENQIHBvcnQgYnkgYmluZGluZyB0byBwb3J0IGAwYCBhbmQgcmVhZGluZyB0aGUgYXNzaWduZWQgcG9ydC5cbiAqXG4gKiBUaGVyZSBpcyBhIHNtYWxsIHRpbWUtb2YtY2hlY2svdGltZS1vZi11c2Ugd2luZG93IGJldHdlZW4gcmVsZWFzaW5nIHRoZSBwb3J0XG4gKiBoZXJlIGFuZCBPYnNpZGlhbiBiaW5kaW5nIGl0OyBpbiBwcmFjdGljZSBpdCBpcyBuZWdsaWdpYmxlIGZvciB0ZXN0IHJ1bnMuXG4gKlxuICogQHJldHVybnMgQSBmcmVlIFRDUCBwb3J0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGlja0ZyZWVQb3J0KCk6IFByb21pc2U8bnVtYmVyPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgc2VydmVyID0gY3JlYXRlU2VydmVyKCk7XG4gICAgc2VydmVyLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICBzZXJ2ZXIubGlzdGVuKDAsIERFRkFVTFRfQ0RQX0hPU1QsICgpID0+IHtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBzZXJ2ZXIuYWRkcmVzcygpO1xuICAgICAgaWYgKGFkZHJlc3MgPT09IG51bGwgfHwgdHlwZW9mIGFkZHJlc3MgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHNlcnZlci5jbG9zZSgpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKCdGYWlsZWQgdG8gZGV0ZXJtaW5lIGEgZnJlZSBwb3J0LicpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgeyBwb3J0IH0gPSBhZGRyZXNzO1xuICAgICAgc2VydmVyLmNsb3NlKCgpID0+IHtcbiAgICAgICAgcmVzb2x2ZShwb3J0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGFmdGVyIHRoZSBnaXZlbiBkZWxheS5cbiAqXG4gKiBAcGFyYW0gbXMgLSBUaGUgZGVsYXkgaW4gbWlsbGlzZWNvbmRzLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIGRlbGF5LlxuICovXG5mdW5jdGlvbiBkZWxheShtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBQb2xscyB0aGUgQ0RQIGAvanNvbmAgZW5kcG9pbnQgdW50aWwgYXQgbGVhc3Qgb25lIHBhZ2UgdGFyZ2V0IGFwcGVhcnMuXG4gKlxuICogQHBhcmFtIGNkcFVybCAtIFRoZSBiYXNlIENEUCBVUkwuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JDZHBSZWFkeShjZHBVcmw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyBDRFBfUkVBRFlfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFM7XG4gIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtjZHBVcmx9L2pzb25gKTtcbiAgICAgIGNvbnN0IHRhcmdldHMgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgQ2RwVGFyZ2V0W107XG4gICAgICBpZiAodGFyZ2V0cy5zb21lKCh0YXJnZXQpID0+IHRhcmdldC50eXBlID09PSAncGFnZScpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEVuZHBvaW50IG5vdCB1cCB5ZXQgXHUyMDE0IGtlZXAgcG9sbGluZy5cbiAgICB9XG4gICAgYXdhaXQgZGVsYXkoQ0RQX1JFQURZX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgYE93bmVkIE9ic2lkaWFuIGluc3RhbmNlIGRpZCBub3QgZXhwb3NlIENEUCBhdCAke2NkcFVybH0gd2l0aGluICR7U3RyaW5nKENEUF9SRUFEWV9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXMuYFxuICApO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIkFBY0EsU0FBUyxhQUFhO0FBQ3RCLFNBQVMsb0JBQW9CO0FBRTdCLFNBQVMsdUJBQXVCO0FBQ2hDLFNBQVMsV0FBVztBQUNwQixTQUFTLGlDQUFpQztBQWlEMUMsTUFBTSxtQkFBbUI7QUFDekIsTUFBTSwwQ0FBMEM7QUFDaEQsTUFBTSxvQ0FBb0M7QUFjMUMsZUFBc0IsNEJBQ3BCLFFBQ2dDO0FBQ2hDLFFBQU0sVUFBVSxPQUFPLFdBQVc7QUFDbEMsUUFBTSxPQUFPLE1BQU0sYUFBYTtBQUNoQyxRQUFNLFNBQVMsVUFBVSxPQUFPLElBQUksT0FBTyxJQUFJLENBQUM7QUFJaEQsUUFBTSxpQkFBaUIsTUFBTSwwQkFBMEI7QUFFdkQsTUFBSSwwREFBMEQsT0FBTyxXQUFXLGFBQWEsT0FBTyxJQUFJLENBQUMsRUFBRTtBQUMzRyxRQUFNLFFBQVE7QUFBQSxJQUNaLE9BQU87QUFBQSxJQUNQLENBQUMsbUJBQW1CLE9BQU8sV0FBVyxJQUFJLDJCQUEyQixPQUFPLElBQUksQ0FBQyxJQUFJLEdBQUksT0FBTyxhQUFhLENBQUMsQ0FBRTtBQUFBLElBQ2hILEVBQUUsVUFBVSxNQUFNLE9BQU8sU0FBUztBQUFBLEVBQ3BDO0FBQ0EsUUFBTSxNQUFNO0FBRVosTUFBSTtBQUNGLFVBQU0sZ0JBQWdCLE1BQU07QUFDNUIsUUFBSSx3REFBd0QsTUFBTSxHQUFHO0FBQ3JFLFdBQU8sRUFBRSxRQUFRLE1BQU0sb0JBQW9CLGVBQWUsTUFBTSxLQUFLO0FBQUEsRUFDdkUsU0FBUyxPQUFnQjtBQUN2QixTQUFLO0FBQ0wsVUFBTTtBQUFBLEVBQ1I7QUFFQSxXQUFTLE9BQWE7QUFDcEIsbUJBQWUsTUFBTTtBQUNyQixvQkFBZ0IsS0FBSztBQUFBLEVBQ3ZCO0FBQ0Y7QUFVTyxTQUFTLGVBQWdDO0FBQzlDLFNBQU8sSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQ3RDLFVBQU0sU0FBUyxhQUFhO0FBQzVCLFdBQU8sS0FBSyxTQUFTLE1BQU07QUFDM0IsV0FBTyxPQUFPLEdBQUcsa0JBQWtCLE1BQU07QUFDdkMsWUFBTSxVQUFVLE9BQU8sUUFBUTtBQUMvQixVQUFJLFlBQVksUUFBUSxPQUFPLFlBQVksVUFBVTtBQUNuRCxlQUFPLE1BQU07QUFDYixlQUFPLElBQUksTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRDtBQUFBLE1BQ0Y7QUFDQSxZQUFNLEVBQUUsS0FBSyxJQUFJO0FBQ2pCLGFBQU8sTUFBTSxNQUFNO0FBQ2pCLGdCQUFRLElBQUk7QUFBQSxNQUNkLENBQUM7QUFBQSxJQUNILENBQUM7QUFBQSxFQUNILENBQUM7QUFDSDtBQVFBLFNBQVMsTUFBTSxJQUEyQjtBQUN4QyxTQUFPLElBQUksUUFBUSxDQUFDLFlBQVk7QUFDOUIsZUFBVyxTQUFTLEVBQUU7QUFBQSxFQUN4QixDQUFDO0FBQ0g7QUFPQSxlQUFlLGdCQUFnQixRQUErQjtBQUM1RCxRQUFNLFdBQVcsS0FBSyxJQUFJLElBQUk7QUFDOUIsU0FBTyxLQUFLLElBQUksSUFBSSxVQUFVO0FBQzVCLFFBQUk7QUFDRixZQUFNLFdBQVcsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPO0FBQzdDLFlBQU0sVUFBVSxNQUFNLFNBQVMsS0FBSztBQUNwQyxVQUFJLFFBQVEsS0FBSyxDQUFDLFdBQVcsT0FBTyxTQUFTLE1BQU0sR0FBRztBQUNwRDtBQUFBLE1BQ0Y7QUFBQSxJQUNGLFFBQVE7QUFBQSxJQUVSO0FBQ0EsVUFBTSxNQUFNLHVDQUF1QztBQUFBLEVBQ3JEO0FBQ0EsUUFBTSxJQUFJO0FBQUEsSUFDUixpREFBaUQsTUFBTSxXQUFXLE9BQU8saUNBQWlDLENBQUM7QUFBQSxFQUM3RztBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
78
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWluc3RhbmNlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogTGF1bmNoZXMgYW5kIG1hbmFnZXMgYSBoYXJuZXNzLW93bmVkLCBpc29sYXRlZCBPYnNpZGlhbiBkZXNrdG9wIGluc3RhbmNlLlxuICpcbiAqIFRoZSBpbnN0YW5jZSBydW5zIGFnYWluc3QgYSBkZWRpY2F0ZWQgYC0tdXNlci1kYXRhLWRpcmAgKHNvIGl0IG5ldmVyIHRvdWNoZXNcbiAqIHRoZSB1c2VyJ3MgT2JzaWRpYW4gY29uZmlnLCByZWdpc3RyeSwgb3IgcnVubmluZyB3aW5kb3cpIGFuZCBleHBvc2VzIENEUCBvbiBhXG4gKiBkZWRpY2F0ZWQgYC0tcmVtb3RlLWRlYnVnZ2luZy1wb3J0YC4gQmVjYXVzZSBFbGVjdHJvbidzIHNpbmdsZS1pbnN0YW5jZSBsb2NrXG4gKiBpcyBrZXllZCB0byB0aGUgdXNlci1kYXRhIGRpciwgdGhlIG93bmVkIGluc3RhbmNlIHJ1bnMgaW4gcGFyYWxsZWwgd2l0aCB0aGVcbiAqIHVzZXIncyBvd24gT2JzaWRpYW4uIENvbmZpcm1lZCBieSB0aGUgUGhhc2UgMCBzcGlrZSAoc2VlIHRoZSBwcm9qZWN0IHBsYW4pLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIHByb2Nlc3MgbWFuYWdlbWVudCBjb3ZlcmVkIGJ5IGludGVncmF0aW9uIHRlc3RzLCBub3QgdW5pdCB0ZXN0cy4gKi9cblxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgY3JlYXRlU2VydmVyIH0gZnJvbSAnbm9kZTpuZXQnO1xuXG5pbXBvcnQgeyBraWxsUHJvY2Vzc1RyZWUgfSBmcm9tICcuL2tpbGwtcHJvY2Vzcy10cmVlLm1qcyc7XG5pbXBvcnQgeyBsb2cgfSBmcm9tICcuL2xvZy5tanMnO1xuaW1wb3J0IHsgc3RhcnRQYXJlbnRMaXZlbmVzc1NlcnZlciB9IGZyb20gJy4vcGFyZW50LWxpdmVuZXNzLm1qcyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGxhdW5jaE93bmVkT2JzaWRpYW5JbnN0YW5jZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGF1bmNoT3duZWRPYnNpZGlhbkluc3RhbmNlUGFyYW1zIHtcbiAgLyoqXG4gICAqIENEUCBob3N0IHRvIGJpbmQvcG9sbC5cbiAgICpcbiAgICogQGRlZmF1bHQgYCcxMjcuMC4wLjEnYFxuICAgKi9cbiAgcmVhZG9ubHkgY2RwSG9zdD86IHN0cmluZztcblxuICAvKipcbiAgQWJzb2x1dGUgcGF0aCB0byB0aGUgT2JzaWRpYW4gZXhlY3V0YWJsZSAoc2hlbGwpIHRvIGxhdW5jaC5cbiAgICovXG4gIHJlYWRvbmx5IGV4ZVBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogRXh0cmEgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBhcHBlbmRlZCBhZnRlciBgLS11c2VyLWRhdGEtZGlyYCBhbmRcbiAgICogYC0tcmVtb3RlLWRlYnVnZ2luZy1wb3J0YCBcdTIwMTQgdXNlZCB0byBwYXNzIHRoZSBrZWVwLWFsaXZlIENocm9taXVtIGZsYWdzIHdoZW5cbiAgICogdGhlIGluc3RhbmNlIGlzIGxhdW5jaGVkIGhpZGRlbiAob2ZmLXNjcmVlbikuIEVtcHR5IGJ5IGRlZmF1bHQuXG4gICAqL1xuICByZWFkb25seSBleHRyYUFyZ3VtZW50cz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBpc29sYXRlZCB1c2VyLWRhdGEgZGlyIHRvIHBhc3MgdmlhIGAtLXVzZXItZGF0YS1kaXJgLlxuICAgKi9cblxuICByZWFkb25seSB1c2VyRGF0YURpcmVjdG9yeTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgcnVubmluZywgaGFybmVzcy1vd25lZCBPYnNpZGlhbiBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPd25lZE9ic2lkaWFuSW5zdGFuY2Uge1xuICAvKipcbiAgQmFzZSBDRFAgVVJMLCBlLmcuIGBodHRwOi8vMTI3LjAuMC4xOjUxODg4YC5cbiAgICovXG4gIHJlYWRvbmx5IGNkcFVybDogc3RyaW5nO1xuXG4gIC8qKlxuICBLaWxscyB0aGUgaW5zdGFuY2UgYW5kIGl0cyBlbnRpcmUgcHJvY2VzcyB0cmVlLlxuICAgKi9cbiAga2lsbCgpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBMb29wYmFjayBwb3J0IHRoZSBpbnN0YW5jZSdzIHJlbmRlcmVyIGNvbm5lY3RzIGJhY2sgdG8gc28gaXQgZGVzdHJveXNcbiAgICogaXRzZWxmIGlmIHRoaXMgaGFybmVzcyBwcm9jZXNzIGRpZXMgd2l0aG91dCBjbGVhbmluZyB1cC4gU2VlXG4gICAqIGBwYXJlbnQtbGl2ZW5lc3MudHNgIGZvciB3aHkgdGhlIHBhcmVudC9jaGlsZCByZWxhdGlvbnNoaXAgYWxvbmUgaXMgbm90XG4gICAqIGVub3VnaC5cbiAgICovXG4gIHJlYWRvbmx5IHBhcmVudExpdmVuZXNzUG9ydDogbnVtYmVyO1xuXG4gIC8qKlxuICBUaGUgQ0RQIHJlbW90ZS1kZWJ1Z2dpbmcgcG9ydCB0aGUgaW5zdGFuY2Ugd2FzIGxhdW5jaGVkIHdpdGguXG4gICAqL1xuICByZWFkb25seSBwb3J0OiBudW1iZXI7XG59XG5cbmNvbnN0IERFRkFVTFRfQ0RQX0hPU1QgPSAnMTI3LjAuMC4xJztcbmNvbnN0IENEUF9SRUFEWV9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDEwMDA7XG5jb25zdCBDRFBfUkVBRFlfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSA2MF8wMDA7XG5cbmludGVyZmFjZSBDZHBUYXJnZXQge1xuICB0eXBlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogTGF1bmNoZXMgYW4gaXNvbGF0ZWQsIGhhcm5lc3Mtb3duZWQgT2JzaWRpYW4gaW5zdGFuY2UgYW5kIHdhaXRzIHVudGlsIGl0cyBDRFBcbiAqIGVuZHBvaW50IGlzIHNlcnZpbmcgcGFnZSB0YXJnZXRzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBMYXVuY2ggcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIFRoZSBydW5uaW5nIG93bmVkIGluc3RhbmNlLlxuICogQHRocm93cyBFcnJvciBpZiBDRFAgZG9lcyBub3QgYmVjb21lIHJlYWNoYWJsZSB3aXRoaW4gdGhlIHRpbWVvdXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsYXVuY2hPd25lZE9ic2lkaWFuSW5zdGFuY2UoXG4gIHBhcmFtczogTGF1bmNoT3duZWRPYnNpZGlhbkluc3RhbmNlUGFyYW1zXG4pOiBQcm9taXNlPE93bmVkT2JzaWRpYW5JbnN0YW5jZT4ge1xuICBjb25zdCBjZHBIb3N0ID0gcGFyYW1zLmNkcEhvc3QgPz8gREVGQVVMVF9DRFBfSE9TVDtcbiAgY29uc3QgcG9ydCA9IGF3YWl0IHBpY2tGcmVlUG9ydCgpO1xuICBjb25zdCBjZHBVcmwgPSBgaHR0cDovLyR7Y2RwSG9zdH06JHtTdHJpbmcocG9ydCl9YDtcblxuICAvLyBMaXN0ZW4gQkVGT1JFIHNwYXduaW5nLCBzbyB0aGUgcmVuZGVyZXIgd2F0Y2hkb2cgY2FuIG5ldmVyIHJhY2UgdGhlIHNlcnZlclxuICAvLyBJbnRvIGEgZmFpbGVkIGNvbm5lY3QgKHdoaWNoIGl0IHRyZWF0cyBhcyBcIm5vIHdhdGNoZG9nXCIsIGxlYXZpbmcgdGhlIGluc3RhbmNlIGFsaXZlKS5cbiAgY29uc3QgbGl2ZW5lc3NTZXJ2ZXIgPSBhd2FpdCBzdGFydFBhcmVudExpdmVuZXNzU2VydmVyKCk7XG5cbiAgbG9nKGBbb2JzaWRpYW4taW5zdGFuY2VdIExhdW5jaGluZyBvd25lZCBPYnNpZGlhbjogdXNlckRhdGE9JHtwYXJhbXMudXNlckRhdGFEaXJlY3Rvcnl9LCBjZHBQb3J0PSR7U3RyaW5nKHBvcnQpfWApO1xuICBjb25zdCBjaGlsZCA9IHNwYXduKFxuICAgIHBhcmFtcy5leGVQYXRoLFxuICAgIFtgLS11c2VyLWRhdGEtZGlyPSR7cGFyYW1zLnVzZXJEYXRhRGlyZWN0b3J5fWAsIGAtLXJlbW90ZS1kZWJ1Z2dpbmctcG9ydD0ke1N0cmluZyhwb3J0KX1gLCAuLi4ocGFyYW1zLmV4dHJhQXJndW1lbnRzID8/IFtdKV0sXG4gICAgeyBkZXRhY2hlZDogdHJ1ZSwgc3RkaW86ICdpZ25vcmUnIH1cbiAgKTtcbiAgY2hpbGQudW5yZWYoKTtcblxuICB0cnkge1xuICAgIGF3YWl0IHdhaXRGb3JDZHBSZWFkeShjZHBVcmwpO1xuICAgIGxvZyhgW29ic2lkaWFuLWluc3RhbmNlXSBPd25lZCBPYnNpZGlhbiBpcyBzZXJ2aW5nIENEUCBhdCAke2NkcFVybH0uYCk7XG4gICAgcmV0dXJuIHsgY2RwVXJsLCBraWxsLCBwYXJlbnRMaXZlbmVzc1BvcnQ6IGxpdmVuZXNzU2VydmVyLnBvcnQsIHBvcnQgfTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBraWxsKCk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cblxuICBmdW5jdGlvbiBraWxsKCk6IHZvaWQge1xuICAgIGxpdmVuZXNzU2VydmVyLmNsb3NlKCk7XG4gICAga2lsbFByb2Nlc3NUcmVlKGNoaWxkKTtcbiAgfVxufVxuXG4vKipcbiAqIFBpY2tzIGEgZnJlZSBUQ1AgcG9ydCBieSBiaW5kaW5nIHRvIHBvcnQgYDBgIGFuZCByZWFkaW5nIHRoZSBhc3NpZ25lZCBwb3J0LlxuICpcbiAqIFRoZXJlIGlzIGEgc21hbGwgdGltZS1vZi1jaGVjay90aW1lLW9mLXVzZSB3aW5kb3cgYmV0d2VlbiByZWxlYXNpbmcgdGhlIHBvcnRcbiAqIGhlcmUgYW5kIE9ic2lkaWFuIGJpbmRpbmcgaXQ7IGluIHByYWN0aWNlIGl0IGlzIG5lZ2xpZ2libGUgZm9yIHRlc3QgcnVucy5cbiAqXG4gKiBAcmV0dXJucyBBIGZyZWUgVENQIHBvcnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwaWNrRnJlZVBvcnQoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzZXJ2ZXIgPSBjcmVhdGVTZXJ2ZXIoKTtcbiAgICBzZXJ2ZXIub25jZSgnZXJyb3InLCByZWplY3QpO1xuICAgIHNlcnZlci5saXN0ZW4oMCwgREVGQVVMVF9DRFBfSE9TVCwgKCkgPT4ge1xuICAgICAgY29uc3QgYWRkcmVzcyA9IHNlcnZlci5hZGRyZXNzKCk7XG4gICAgICBpZiAoYWRkcmVzcyA9PT0gbnVsbCB8fCB0eXBlb2YgYWRkcmVzcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgc2VydmVyLmNsb3NlKCk7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0ZhaWxlZCB0byBkZXRlcm1pbmUgYSBmcmVlIHBvcnQuJykpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB7IHBvcnQgfSA9IGFkZHJlc3M7XG4gICAgICBzZXJ2ZXIuY2xvc2UoKCkgPT4ge1xuICAgICAgICByZXNvbHZlKHBvcnQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIGdpdmVuIGRlbGF5LlxuICpcbiAqIEBwYXJhbSBtcyAtIFRoZSBkZWxheSBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciB0aGUgZGVsYXkuXG4gKi9cbmZ1bmN0aW9uIGRlbGF5KG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCBtcyk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFBvbGxzIHRoZSBDRFAgYC9qc29uYCBlbmRwb2ludCB1bnRpbCBhdCBsZWFzdCBvbmUgcGFnZSB0YXJnZXQgYXBwZWFycy5cbiAqXG4gKiBAcGFyYW0gY2RwVXJsIC0gVGhlIGJhc2UgQ0RQIFVSTC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gd2FpdEZvckNkcFJlYWR5KGNkcFVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIENEUF9SRUFEWV9USU1FT1VUX0lOX01JTExJU0VDT05EUztcbiAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2NkcFVybH0vanNvbmApO1xuICAgICAgY29uc3QgdGFyZ2V0cyA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBDZHBUYXJnZXRbXTtcbiAgICAgIGlmICh0YXJnZXRzLnNvbWUoKHRhcmdldCkgPT4gdGFyZ2V0LnR5cGUgPT09ICdwYWdlJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gRW5kcG9pbnQgbm90IHVwIHlldCBcdTIwMTQga2VlcCBwb2xsaW5nLlxuICAgIH1cbiAgICBhd2FpdCBkZWxheShDRFBfUkVBRFlfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgT3duZWQgT2JzaWRpYW4gaW5zdGFuY2UgZGlkIG5vdCBleHBvc2UgQ0RQIGF0ICR7Y2RwVXJsfSB3aXRoaW4gJHtTdHJpbmcoQ0RQX1JFQURZX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tcy5gXG4gICk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiQUFjQSxTQUFTLGFBQWE7QUFDdEIsU0FBUyxvQkFBb0I7QUFFN0IsU0FBUyx1QkFBdUI7QUFDaEMsU0FBUyxXQUFXO0FBQ3BCLFNBQVMsaUNBQWlDO0FBNEQxQyxNQUFNLG1CQUFtQjtBQUN6QixNQUFNLDBDQUEwQztBQUNoRCxNQUFNLG9DQUFvQztBQWMxQyxlQUFzQiw0QkFDcEIsUUFDZ0M7QUFDaEMsUUFBTSxVQUFVLE9BQU8sV0FBVztBQUNsQyxRQUFNLE9BQU8sTUFBTSxhQUFhO0FBQ2hDLFFBQU0sU0FBUyxVQUFVLE9BQU8sSUFBSSxPQUFPLElBQUksQ0FBQztBQUloRCxRQUFNLGlCQUFpQixNQUFNLDBCQUEwQjtBQUV2RCxNQUFJLDBEQUEwRCxPQUFPLGlCQUFpQixhQUFhLE9BQU8sSUFBSSxDQUFDLEVBQUU7QUFDakgsUUFBTSxRQUFRO0FBQUEsSUFDWixPQUFPO0FBQUEsSUFDUCxDQUFDLG1CQUFtQixPQUFPLGlCQUFpQixJQUFJLDJCQUEyQixPQUFPLElBQUksQ0FBQyxJQUFJLEdBQUksT0FBTyxrQkFBa0IsQ0FBQyxDQUFFO0FBQUEsSUFDM0gsRUFBRSxVQUFVLE1BQU0sT0FBTyxTQUFTO0FBQUEsRUFDcEM7QUFDQSxRQUFNLE1BQU07QUFFWixNQUFJO0FBQ0YsVUFBTSxnQkFBZ0IsTUFBTTtBQUM1QixRQUFJLHdEQUF3RCxNQUFNLEdBQUc7QUFDckUsV0FBTyxFQUFFLFFBQVEsTUFBTSxvQkFBb0IsZUFBZSxNQUFNLEtBQUs7QUFBQSxFQUN2RSxTQUFTLE9BQWdCO0FBQ3ZCLFNBQUs7QUFDTCxVQUFNO0FBQUEsRUFDUjtBQUVBLFdBQVMsT0FBYTtBQUNwQixtQkFBZSxNQUFNO0FBQ3JCLG9CQUFnQixLQUFLO0FBQUEsRUFDdkI7QUFDRjtBQVVPLFNBQVMsZUFBZ0M7QUFDOUMsU0FBTyxJQUFJLFFBQVEsQ0FBQyxTQUFTLFdBQVc7QUFDdEMsVUFBTSxTQUFTLGFBQWE7QUFDNUIsV0FBTyxLQUFLLFNBQVMsTUFBTTtBQUMzQixXQUFPLE9BQU8sR0FBRyxrQkFBa0IsTUFBTTtBQUN2QyxZQUFNLFVBQVUsT0FBTyxRQUFRO0FBQy9CLFVBQUksWUFBWSxRQUFRLE9BQU8sWUFBWSxVQUFVO0FBQ25ELGVBQU8sTUFBTTtBQUNiLGVBQU8sSUFBSSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BEO0FBQUEsTUFDRjtBQUNBLFlBQU0sRUFBRSxLQUFLLElBQUk7QUFDakIsYUFBTyxNQUFNLE1BQU07QUFDakIsZ0JBQVEsSUFBSTtBQUFBLE1BQ2QsQ0FBQztBQUFBLElBQ0gsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUNIO0FBUUEsU0FBUyxNQUFNLElBQTJCO0FBQ3hDLFNBQU8sSUFBSSxRQUFRLENBQUMsWUFBWTtBQUM5QixlQUFXLFNBQVMsRUFBRTtBQUFBLEVBQ3hCLENBQUM7QUFDSDtBQU9BLGVBQWUsZ0JBQWdCLFFBQStCO0FBQzVELFFBQU0sV0FBVyxLQUFLLElBQUksSUFBSTtBQUM5QixTQUFPLEtBQUssSUFBSSxJQUFJLFVBQVU7QUFDNUIsUUFBSTtBQUNGLFlBQU0sV0FBVyxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU87QUFDN0MsWUFBTSxVQUFVLE1BQU0sU0FBUyxLQUFLO0FBQ3BDLFVBQUksUUFBUSxLQUFLLENBQUMsV0FBVyxPQUFPLFNBQVMsTUFBTSxHQUFHO0FBQ3BEO0FBQUEsTUFDRjtBQUFBLElBQ0YsUUFBUTtBQUFBLElBRVI7QUFDQSxVQUFNLE1BQU0sdUNBQXVDO0FBQUEsRUFDckQ7QUFDQSxRQUFNLElBQUk7QUFBQSxJQUNSLGlEQUFpRCxNQUFNLFdBQVcsT0FBTyxpQ0FBaUMsQ0FBQztBQUFBLEVBQzdHO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==