@mnaoumov/obsidian-lib 7.1.0 → 8.1.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 (355) hide show
  1. package/dist/lib/cjs/__merged.cjs +8 -6
  2. package/dist/lib/cjs/__merged.d.cts +1 -1
  3. package/dist/lib/cjs/active-file-provider.cjs +6 -6
  4. package/dist/lib/cjs/active-file-provider.d.cts +1 -1
  5. package/dist/lib/cjs/app.cjs +5 -5
  6. package/dist/lib/cjs/async-with-notice.cjs +5 -5
  7. package/dist/lib/cjs/attachment-path.cjs +6 -6
  8. package/dist/lib/cjs/attachment-unit-folder.cjs +5 -5
  9. package/dist/lib/cjs/backlink-index.cjs +13 -19
  10. package/dist/lib/cjs/backlink-index.d.cts +1 -1
  11. package/dist/lib/cjs/backlink.cjs +5 -5
  12. package/dist/lib/cjs/bases-view-registrar.cjs +6 -6
  13. package/dist/lib/cjs/bases-view-registrar.d.cts +1 -1
  14. package/dist/lib/cjs/callout.cjs +5 -5
  15. package/dist/lib/cjs/canvas.cjs +5 -5
  16. package/dist/lib/cjs/case-insensitive-file-index.cjs +5 -5
  17. package/dist/lib/cjs/code-block-markdown-information.cjs +6 -6
  18. package/dist/lib/cjs/code-block-markdown-information.d.cts +9 -9
  19. package/dist/lib/cjs/code-block-reg-exp.cjs +5 -5
  20. package/dist/lib/cjs/codemirror/index.cjs +5 -5
  21. package/dist/lib/cjs/codemirror/state-field-spec.cjs +6 -6
  22. package/dist/lib/cjs/codemirror/state-field-spec.d.cts +6 -6
  23. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +5 -5
  24. package/dist/lib/cjs/command-handlers/command-handler-component.cjs +5 -5
  25. package/dist/lib/cjs/command-handlers/command-handler.cjs +5 -5
  26. package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +5 -5
  27. package/dist/lib/cjs/command-handlers/file-command-handler.cjs +5 -5
  28. package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +5 -5
  29. package/dist/lib/cjs/command-handlers/global-command-handler.cjs +5 -5
  30. package/dist/lib/cjs/command-handlers/index.cjs +5 -5
  31. package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +5 -5
  32. package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +5 -5
  33. package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +5 -5
  34. package/dist/lib/cjs/command-registrar.cjs +6 -6
  35. package/dist/lib/cjs/command-registrar.d.cts +2 -2
  36. package/dist/lib/cjs/community-plugins.cjs +6 -6
  37. package/dist/lib/cjs/components/abort-signal-component.cjs +5 -5
  38. package/dist/lib/cjs/components/all-windows-event-component.cjs +5 -5
  39. package/dist/lib/cjs/components/async-error-handler-component.cjs +5 -5
  40. package/dist/lib/cjs/components/async-events-component.cjs +5 -5
  41. package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +5 -5
  42. package/dist/lib/cjs/components/component-ex.cjs +5 -5
  43. package/dist/lib/cjs/components/console-debug-component.cjs +5 -5
  44. package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +5 -5
  45. package/dist/lib/cjs/components/disposable-component.cjs +5 -5
  46. package/dist/lib/cjs/components/embed-extensions-component.cjs +5 -5
  47. package/dist/lib/cjs/components/file-explorer-root-menu-component.cjs +13 -16
  48. package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +5 -5
  49. package/dist/lib/cjs/components/incremental-file-index-component.cjs +74 -10
  50. package/dist/lib/cjs/components/incremental-file-index-component.d.cts +16 -1
  51. package/dist/lib/cjs/components/index.cjs +5 -5
  52. package/dist/lib/cjs/components/layout-ready-component.cjs +5 -5
  53. package/dist/lib/cjs/components/menu-event-registrar-component.cjs +5 -5
  54. package/dist/lib/cjs/components/monkey-around-component.cjs +5 -5
  55. package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +5 -5
  56. package/dist/lib/cjs/components/plugin-context-component.cjs +5 -5
  57. package/dist/lib/cjs/components/plugin-gate-component.cjs +5 -5
  58. package/dist/lib/cjs/components/plugin-notice-component.cjs +6 -6
  59. package/dist/lib/cjs/components/plugin-notice-component.d.cts +3 -3
  60. package/dist/lib/cjs/components/plugin-settings-component.cjs +6 -6
  61. package/dist/lib/cjs/components/plugin-settings-component.d.cts +5 -5
  62. package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +5 -5
  63. package/dist/lib/cjs/components/plugin-suggestion-component.cjs +5 -5
  64. package/dist/lib/cjs/components/pointer-position-component.cjs +5 -5
  65. package/dist/lib/cjs/components/registry-component.cjs +5 -5
  66. package/dist/lib/cjs/components/release-notes-component.cjs +5 -5
  67. package/dist/lib/cjs/components/rename-delete-handler-component.cjs +6 -6
  68. package/dist/lib/cjs/components/rename-delete-handler-component.d.cts +10 -10
  69. package/dist/lib/cjs/components/rmdir-guard-component.cjs +5 -5
  70. package/dist/lib/cjs/components/settings-migration-component.cjs +5 -5
  71. package/dist/lib/cjs/components/syntax-highlighting-component.cjs +5 -5
  72. package/dist/lib/cjs/components/templates-language-component.cjs +5 -5
  73. package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +5 -5
  74. package/dist/lib/cjs/constructors/index.cjs +5 -5
  75. package/dist/lib/cjs/css-class.cjs +5 -5
  76. package/dist/lib/cjs/data-handler.cjs +6 -6
  77. package/dist/lib/cjs/data-handler.d.cts +2 -2
  78. package/dist/lib/cjs/data-stores/data-store-replica.cjs +5 -5
  79. package/dist/lib/cjs/data-stores/data-store-seeds.cjs +6 -6
  80. package/dist/lib/cjs/data-stores/data-store-transport.cjs +5 -5
  81. package/dist/lib/cjs/data-stores/index.cjs +5 -5
  82. package/dist/lib/cjs/data-stores/local-data-store.cjs +21 -18
  83. package/dist/lib/cjs/data-stores/local-data-store.d.cts +9 -1
  84. package/dist/lib/cjs/data-stores/shared-data-store.cjs +6 -6
  85. package/dist/lib/cjs/dataview-link.cjs +5 -5
  86. package/dist/lib/cjs/dataview.cjs +12 -12
  87. package/dist/lib/cjs/dataview.d.cts +6 -6
  88. package/dist/lib/cjs/debug.cjs +5 -5
  89. package/dist/lib/cjs/demo-vault-helper-settings.cjs +5 -5
  90. package/dist/lib/cjs/demo-vault-helper.cjs +5 -5
  91. package/dist/lib/cjs/demo-vault-naming.cjs +5 -5
  92. package/dist/lib/cjs/desktop-demo-vault-opener.cjs +5 -5
  93. package/dist/lib/cjs/desktop-trusted-input.cjs +6 -6
  94. package/dist/lib/cjs/desktop-trusted-input.d.cts +1 -1
  95. package/dist/lib/cjs/editor-extension-registrar.cjs +6 -6
  96. package/dist/lib/cjs/editor-extension-registrar.d.cts +1 -1
  97. package/dist/lib/cjs/editor-suggest-registrar.cjs +6 -6
  98. package/dist/lib/cjs/editor-suggest-registrar.d.cts +1 -1
  99. package/dist/lib/cjs/editor.cjs +5 -5
  100. package/dist/lib/cjs/events.cjs +5 -5
  101. package/dist/lib/cjs/extensions-registrar.cjs +6 -6
  102. package/dist/lib/cjs/extensions-registrar.d.cts +1 -1
  103. package/dist/lib/cjs/file-change.cjs +6 -6
  104. package/dist/lib/cjs/file-change.d.cts +3 -3
  105. package/dist/lib/cjs/file-explorer.cjs +5 -5
  106. package/dist/lib/cjs/file-manager.cjs +5 -5
  107. package/dist/lib/cjs/file-system.cjs +5 -5
  108. package/dist/lib/cjs/folder-note.cjs +6 -6
  109. package/dist/lib/cjs/folder-note.d.cts +1 -1
  110. package/dist/lib/cjs/frontmatter-formatting.cjs +5 -5
  111. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +6 -6
  112. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.d.cts +2 -2
  113. package/dist/lib/cjs/frontmatter.cjs +6 -6
  114. package/dist/lib/cjs/frontmatter.d.cts +7 -7
  115. package/dist/lib/cjs/generated-during-build.cjs +7 -7
  116. package/dist/lib/cjs/hover-link-source-registrar.cjs +6 -6
  117. package/dist/lib/cjs/hover-link-source-registrar.d.cts +1 -1
  118. package/dist/lib/cjs/html-element.cjs +5 -5
  119. package/dist/lib/cjs/i18n/custom-type-options.cjs +6 -6
  120. package/dist/lib/cjs/i18n/custom-type-options.d.cts +4 -4
  121. package/dist/lib/cjs/i18n/default-translations.cjs +5 -5
  122. package/dist/lib/cjs/i18n/i18n.cjs +5 -5
  123. package/dist/lib/cjs/i18n/index.cjs +5 -5
  124. package/dist/lib/cjs/i18n/locales/en.cjs +5 -5
  125. package/dist/lib/cjs/i18n/locales/index.cjs +5 -5
  126. package/dist/lib/cjs/i18n/locales/translations-map.cjs +5 -5
  127. package/dist/lib/cjs/index.cjs +5 -5
  128. package/dist/lib/cjs/is-in-obsidian.cjs +5 -5
  129. package/dist/lib/cjs/library-styles.cjs +5 -5
  130. package/dist/lib/cjs/library.cjs +5 -5
  131. package/dist/lib/cjs/link-name.cjs +5 -5
  132. package/dist/lib/cjs/link-update-progress.cjs +5 -5
  133. package/dist/lib/cjs/link.cjs +39 -15
  134. package/dist/lib/cjs/link.d.cts +49 -2
  135. package/dist/lib/cjs/logger.cjs +5 -5
  136. package/dist/lib/cjs/loop.cjs +5 -5
  137. package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +6 -6
  138. package/dist/lib/cjs/markdown-code-block-processor-registrar.d.cts +1 -1
  139. package/dist/lib/cjs/markdown-code-block-processor.cjs +5 -5
  140. package/dist/lib/cjs/markdown-post-processor-registrar.cjs +6 -6
  141. package/dist/lib/cjs/markdown-post-processor-registrar.d.cts +1 -1
  142. package/dist/lib/cjs/markdown-view.cjs +5 -5
  143. package/dist/lib/cjs/markdown.cjs +5 -5
  144. package/dist/lib/cjs/menu-event-registrar.cjs +6 -6
  145. package/dist/lib/cjs/menu-event-registrar.d.cts +4 -4
  146. package/dist/lib/cjs/metadata-cache.cjs +6 -6
  147. package/dist/lib/cjs/mobile-trusted-input.cjs +6 -6
  148. package/dist/lib/cjs/modals/alert.cjs +5 -5
  149. package/dist/lib/cjs/modals/confirm.cjs +5 -5
  150. package/dist/lib/cjs/modals/index.cjs +5 -5
  151. package/dist/lib/cjs/modals/minimizable-modal.cjs +6 -6
  152. package/dist/lib/cjs/modals/modal-command-builder.cjs +6 -6
  153. package/dist/lib/cjs/modals/modal-command-builder.d.cts +12 -12
  154. package/dist/lib/cjs/modals/modal.cjs +5 -5
  155. package/dist/lib/cjs/modals/prompt.cjs +14 -14
  156. package/dist/lib/cjs/modals/select-item.cjs +5 -5
  157. package/dist/lib/cjs/modals/select-option.cjs +5 -5
  158. package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +5 -5
  159. package/dist/lib/cjs/note-priority.cjs +5 -5
  160. package/dist/lib/cjs/notebook-navigator.cjs +6 -6
  161. package/dist/lib/cjs/notebook-navigator.d.cts +3 -3
  162. package/dist/lib/cjs/obsidian-lib-state.cjs +6 -6
  163. package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +6 -6
  164. package/dist/lib/cjs/obsidian-protocol-handler-registrar.d.cts +1 -1
  165. package/dist/lib/cjs/obsidian-settings.cjs +5 -5
  166. package/dist/lib/cjs/obsidian-word-characters.cjs +6 -6
  167. package/dist/lib/cjs/parse-link.cjs +6 -6
  168. package/dist/lib/cjs/parse-link.d.cts +2 -2
  169. package/dist/lib/cjs/path-settings.cjs +6 -6
  170. package/dist/lib/cjs/pdf.cjs +5 -5
  171. package/dist/lib/cjs/plugin/index.cjs +5 -5
  172. package/dist/lib/cjs/plugin/plugin-api.cjs +6 -6
  173. package/dist/lib/cjs/plugin/plugin-api.d.cts +2 -2
  174. package/dist/lib/cjs/plugin/plugin-context.cjs +6 -6
  175. package/dist/lib/cjs/plugin/plugin-event-source.cjs +6 -6
  176. package/dist/lib/cjs/plugin/plugin-event-source.d.cts +1 -1
  177. package/dist/lib/cjs/plugin/plugin-install-state.cjs +5 -5
  178. package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +5 -5
  179. package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +6 -6
  180. package/dist/lib/cjs/plugin/plugin-settings-tab.d.cts +3 -3
  181. package/dist/lib/cjs/plugin/plugin.cjs +6 -6
  182. package/dist/lib/cjs/plugin/settings-migration-api.cjs +6 -6
  183. package/dist/lib/cjs/plugin/settings-migration-api.d.cts +1 -1
  184. package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +6 -6
  185. package/dist/lib/cjs/plugin-cli-handler-registrar.d.cts +1 -1
  186. package/dist/lib/cjs/popovers/field-popover.cjs +5 -5
  187. package/dist/lib/cjs/popovers/index.cjs +5 -5
  188. package/dist/lib/cjs/popovers/popover-anchor.cjs +5 -5
  189. package/dist/lib/cjs/popovers/popover.cjs +5 -5
  190. package/dist/lib/cjs/property-entry.cjs +5 -5
  191. package/dist/lib/cjs/queue.cjs +6 -6
  192. package/dist/lib/cjs/react/app-context.cjs +5 -5
  193. package/dist/lib/cjs/react/index.cjs +5 -5
  194. package/dist/lib/cjs/reference.cjs +18 -6
  195. package/dist/lib/cjs/reference.d.cts +27 -7
  196. package/dist/lib/cjs/resource-lock.cjs +6 -6
  197. package/dist/lib/cjs/resource-url.cjs +5 -5
  198. package/dist/lib/cjs/ribbon-icon-registrar.cjs +6 -6
  199. package/dist/lib/cjs/ribbon-icon-registrar.d.cts +1 -1
  200. package/dist/lib/cjs/setting-components/checkbox-component.cjs +5 -5
  201. package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +5 -5
  202. package/dist/lib/cjs/setting-components/date-component.cjs +5 -5
  203. package/dist/lib/cjs/setting-components/date-time-component.cjs +5 -5
  204. package/dist/lib/cjs/setting-components/email-component.cjs +5 -5
  205. package/dist/lib/cjs/setting-components/file-component.cjs +5 -5
  206. package/dist/lib/cjs/setting-components/index.cjs +5 -5
  207. package/dist/lib/cjs/setting-components/month-component.cjs +6 -6
  208. package/dist/lib/cjs/setting-components/month-component.d.cts +2 -2
  209. package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +5 -5
  210. package/dist/lib/cjs/setting-components/multiple-email-component.cjs +5 -5
  211. package/dist/lib/cjs/setting-components/multiple-file-component.cjs +5 -5
  212. package/dist/lib/cjs/setting-components/multiple-text-component.cjs +5 -5
  213. package/dist/lib/cjs/setting-components/number-component.cjs +5 -5
  214. package/dist/lib/cjs/setting-components/password-component.cjs +5 -5
  215. package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +5 -5
  216. package/dist/lib/cjs/setting-components/telephone-component.cjs +5 -5
  217. package/dist/lib/cjs/setting-components/text-based-component.cjs +6 -6
  218. package/dist/lib/cjs/setting-components/text-based-component.d.cts +3 -3
  219. package/dist/lib/cjs/setting-components/time-component.cjs +5 -5
  220. package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +5 -5
  221. package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +5 -5
  222. package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +5 -5
  223. package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +5 -5
  224. package/dist/lib/cjs/setting-components/typed-text-component.cjs +5 -5
  225. package/dist/lib/cjs/setting-components/url-component.cjs +5 -5
  226. package/dist/lib/cjs/setting-components/validator-component.cjs +5 -5
  227. package/dist/lib/cjs/setting-components/value-component-with-change-tracking.cjs +6 -6
  228. package/dist/lib/cjs/setting-components/week-component.cjs +6 -6
  229. package/dist/lib/cjs/setting-components/week-component.d.cts +2 -2
  230. package/dist/lib/cjs/setting-ex.cjs +5 -5
  231. package/dist/lib/cjs/setting-group-ex.cjs +5 -5
  232. package/dist/lib/cjs/status-bar-item-registrar.cjs +6 -6
  233. package/dist/lib/cjs/status-bar-item-registrar.d.cts +1 -1
  234. package/dist/lib/cjs/templater.cjs +6 -6
  235. package/dist/lib/cjs/templater.d.cts +9 -9
  236. package/dist/lib/cjs/transformers/duration-transformer.cjs +5 -5
  237. package/dist/lib/cjs/transformers/index.cjs +5 -5
  238. package/dist/lib/cjs/trusted-input.cjs +5 -5
  239. package/dist/lib/cjs/validation.cjs +6 -6
  240. package/dist/lib/cjs/validation.d.cts +1 -1
  241. package/dist/lib/cjs/vault-delete.cjs +5 -5
  242. package/dist/lib/cjs/vault-transaction.cjs +6 -6
  243. package/dist/lib/cjs/vault.cjs +5 -5
  244. package/dist/lib/cjs/view-registrar.cjs +6 -6
  245. package/dist/lib/cjs/view-registrar.d.cts +1 -1
  246. package/dist/lib/cjs/workspace.cjs +5 -5
  247. package/dist/lib/esm/__merged.d.mts +1 -1
  248. package/dist/lib/esm/__merged.mjs +3 -1
  249. package/dist/lib/esm/active-file-provider.d.mts +1 -1
  250. package/dist/lib/esm/active-file-provider.mjs +1 -1
  251. package/dist/lib/esm/attachment-path.mjs +1 -1
  252. package/dist/lib/esm/backlink-index.d.mts +1 -1
  253. package/dist/lib/esm/backlink-index.mjs +8 -14
  254. package/dist/lib/esm/bases-view-registrar.d.mts +1 -1
  255. package/dist/lib/esm/bases-view-registrar.mjs +1 -1
  256. package/dist/lib/esm/code-block-markdown-information.d.mts +9 -9
  257. package/dist/lib/esm/codemirror/state-field-spec.d.mts +6 -6
  258. package/dist/lib/esm/command-registrar.d.mts +2 -2
  259. package/dist/lib/esm/command-registrar.mjs +1 -1
  260. package/dist/lib/esm/community-plugins.mjs +1 -1
  261. package/dist/lib/esm/components/file-explorer-root-menu-component.mjs +8 -11
  262. package/dist/lib/esm/components/incremental-file-index-component.d.mts +16 -1
  263. package/dist/lib/esm/components/incremental-file-index-component.mjs +69 -5
  264. package/dist/lib/esm/components/plugin-notice-component.d.mts +3 -3
  265. package/dist/lib/esm/components/plugin-notice-component.mjs +1 -1
  266. package/dist/lib/esm/components/plugin-settings-component.d.mts +5 -5
  267. package/dist/lib/esm/components/plugin-settings-component.mjs +1 -1
  268. package/dist/lib/esm/components/rename-delete-handler-component.d.mts +10 -10
  269. package/dist/lib/esm/components/rename-delete-handler-component.mjs +1 -1
  270. package/dist/lib/esm/data-handler.d.mts +2 -2
  271. package/dist/lib/esm/data-handler.mjs +1 -1
  272. package/dist/lib/esm/data-stores/data-store-seeds.mjs +1 -1
  273. package/dist/lib/esm/data-stores/local-data-store.d.mts +9 -1
  274. package/dist/lib/esm/data-stores/local-data-store.mjs +16 -13
  275. package/dist/lib/esm/data-stores/shared-data-store.mjs +1 -1
  276. package/dist/lib/esm/dataview.d.mts +6 -6
  277. package/dist/lib/esm/dataview.mjs +7 -7
  278. package/dist/lib/esm/desktop-trusted-input.d.mts +1 -1
  279. package/dist/lib/esm/desktop-trusted-input.mjs +1 -1
  280. package/dist/lib/esm/editor-extension-registrar.d.mts +1 -1
  281. package/dist/lib/esm/editor-extension-registrar.mjs +1 -1
  282. package/dist/lib/esm/editor-suggest-registrar.d.mts +1 -1
  283. package/dist/lib/esm/editor-suggest-registrar.mjs +1 -1
  284. package/dist/lib/esm/extensions-registrar.d.mts +1 -1
  285. package/dist/lib/esm/extensions-registrar.mjs +1 -1
  286. package/dist/lib/esm/file-change.d.mts +3 -3
  287. package/dist/lib/esm/file-change.mjs +1 -1
  288. package/dist/lib/esm/folder-note.d.mts +1 -1
  289. package/dist/lib/esm/folder-note.mjs +1 -1
  290. package/dist/lib/esm/frontmatter-link-cache-with-offsets.d.mts +2 -2
  291. package/dist/lib/esm/frontmatter-link-cache-with-offsets.mjs +1 -1
  292. package/dist/lib/esm/frontmatter.d.mts +7 -7
  293. package/dist/lib/esm/frontmatter.mjs +1 -1
  294. package/dist/lib/esm/generated-during-build.mjs +2 -2
  295. package/dist/lib/esm/hover-link-source-registrar.d.mts +1 -1
  296. package/dist/lib/esm/hover-link-source-registrar.mjs +1 -1
  297. package/dist/lib/esm/i18n/custom-type-options.d.mts +4 -4
  298. package/dist/lib/esm/i18n/custom-type-options.mjs +1 -1
  299. package/dist/lib/esm/link.d.mts +49 -2
  300. package/dist/lib/esm/link.mjs +35 -10
  301. package/dist/lib/esm/markdown-code-block-processor-registrar.d.mts +1 -1
  302. package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +1 -1
  303. package/dist/lib/esm/markdown-post-processor-registrar.d.mts +1 -1
  304. package/dist/lib/esm/markdown-post-processor-registrar.mjs +1 -1
  305. package/dist/lib/esm/menu-event-registrar.d.mts +4 -4
  306. package/dist/lib/esm/metadata-cache.mjs +1 -1
  307. package/dist/lib/esm/mobile-trusted-input.mjs +1 -1
  308. package/dist/lib/esm/modals/minimizable-modal.mjs +1 -1
  309. package/dist/lib/esm/modals/modal-command-builder.d.mts +12 -12
  310. package/dist/lib/esm/modals/modal-command-builder.mjs +1 -1
  311. package/dist/lib/esm/modals/prompt.mjs +9 -9
  312. package/dist/lib/esm/notebook-navigator.d.mts +3 -3
  313. package/dist/lib/esm/notebook-navigator.mjs +1 -1
  314. package/dist/lib/esm/obsidian-lib-state.mjs +1 -1
  315. package/dist/lib/esm/obsidian-protocol-handler-registrar.d.mts +1 -1
  316. package/dist/lib/esm/obsidian-protocol-handler-registrar.mjs +1 -1
  317. package/dist/lib/esm/obsidian-word-characters.mjs +1 -1
  318. package/dist/lib/esm/parse-link.d.mts +2 -2
  319. package/dist/lib/esm/parse-link.mjs +1 -1
  320. package/dist/lib/esm/path-settings.mjs +1 -1
  321. package/dist/lib/esm/plugin/plugin-api.d.mts +2 -2
  322. package/dist/lib/esm/plugin/plugin-api.mjs +1 -1
  323. package/dist/lib/esm/plugin/plugin-context.mjs +1 -1
  324. package/dist/lib/esm/plugin/plugin-event-source.d.mts +1 -1
  325. package/dist/lib/esm/plugin/plugin-event-source.mjs +1 -1
  326. package/dist/lib/esm/plugin/plugin-settings-tab.d.mts +3 -3
  327. package/dist/lib/esm/plugin/plugin-settings-tab.mjs +1 -1
  328. package/dist/lib/esm/plugin/plugin.mjs +1 -1
  329. package/dist/lib/esm/plugin/settings-migration-api.d.mts +1 -1
  330. package/dist/lib/esm/plugin/settings-migration-api.mjs +1 -1
  331. package/dist/lib/esm/plugin-cli-handler-registrar.d.mts +1 -1
  332. package/dist/lib/esm/plugin-cli-handler-registrar.mjs +1 -1
  333. package/dist/lib/esm/queue.mjs +1 -1
  334. package/dist/lib/esm/reference.d.mts +27 -7
  335. package/dist/lib/esm/reference.mjs +12 -1
  336. package/dist/lib/esm/resource-lock.mjs +1 -1
  337. package/dist/lib/esm/ribbon-icon-registrar.d.mts +1 -1
  338. package/dist/lib/esm/ribbon-icon-registrar.mjs +1 -1
  339. package/dist/lib/esm/setting-components/month-component.d.mts +2 -2
  340. package/dist/lib/esm/setting-components/month-component.mjs +1 -1
  341. package/dist/lib/esm/setting-components/text-based-component.d.mts +3 -3
  342. package/dist/lib/esm/setting-components/text-based-component.mjs +1 -1
  343. package/dist/lib/esm/setting-components/week-component.d.mts +2 -2
  344. package/dist/lib/esm/setting-components/week-component.mjs +1 -1
  345. package/dist/lib/esm/status-bar-item-registrar.d.mts +1 -1
  346. package/dist/lib/esm/status-bar-item-registrar.mjs +1 -1
  347. package/dist/lib/esm/templater.d.mts +9 -9
  348. package/dist/lib/esm/templater.mjs +1 -1
  349. package/dist/lib/esm/validation.d.mts +1 -1
  350. package/dist/lib/esm/validation.mjs +1 -1
  351. package/dist/lib/esm/vault-transaction.mjs +1 -1
  352. package/dist/lib/esm/view-registrar.d.mts +1 -1
  353. package/dist/lib/esm/view-registrar.mjs +1 -1
  354. package/dist/styles.css +2 -2
  355. package/package.json +6 -3
@@ -41,8 +41,8 @@ ensureBrowserProcess();
41
41
  __isPatched: true
42
42
  }
43
43
  );
44
- function extractDefault(module) {
45
- return module && module.__esModule && "default" in module ? module.default : module;
44
+ function extractDefault($module) {
45
+ return $module && $module.__esModule && "default" in $module ? $module.default : $module;
46
46
  }
47
47
  const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
48
48
  "@codemirror/autocomplete",
@@ -84,9 +84,9 @@ ensureBrowserProcess();
84
84
  return process;
85
85
  }
86
86
  } else {
87
- const module = originalRequire?.(id);
88
- if (module) {
89
- return extractDefault(module);
87
+ const $module = originalRequire?.(id);
88
+ if ($module) {
89
+ return extractDefault($module);
90
90
  }
91
91
  }
92
92
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
@@ -561,4 +561,4 @@ function widenToWholeValue(params) {
561
561
  toParseLinkReference,
562
562
  unescapeAlias
563
563
  });
564
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYXJzZS1saW5rLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUaGlzIG1vZHVsZSBwcm92aWRlcyB1dGlsaXRpZXMgZm9yIHBhcnNpbmcgbWFya2Rvd24gYW5kIHdpa2kgbGlua3MgaW50byBzdHJ1Y3R1cmVkIGRhdGEsIGFuZCBmb3JcbiAqIGVzY2FwaW5nLCB1bmVzY2FwaW5nLCBhbmQgZW5jb2RpbmcgbGluayBjb21wb25lbnRzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgR2VuZXJpY09iamVjdCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQgdHlwZSB7IExpbmsgfSBmcm9tICdtZGFzdCc7XG5pbXBvcnQgdHlwZSB7XG4gIEZyb250bWF0dGVyTGlua0NhY2hlLFxuICBMb2MsXG4gIFJlZmVyZW5jZSxcbiAgUmVmZXJlbmNlQ2FjaGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBOb2RlIH0gZnJvbSAndW5pc3QnO1xuXG5pbXBvcnQgeyBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXMgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvb2JqZWN0LXV0aWxzJztcbmltcG9ydCB7IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcmVnLWV4cCc7XG5pbXBvcnQgeyByZXBsYWNlQWxsIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0cmluZyc7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQge1xuICBlbmNvZGVVcmwsXG4gIGlzRmlsZVVybCxcbiAgaXNVcmxcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3VybCc7XG5pbXBvcnQgeyBpc0Zyb250bWF0dGVyTGlua0NhY2hlIH0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdC9pbXBsZW1lbnRhdGlvbnMnO1xuaW1wb3J0IHsgcmVtYXJrIH0gZnJvbSAncmVtYXJrJztcbmltcG9ydCByZW1hcmtQYXJzZSBmcm9tICdyZW1hcmstcGFyc2UnO1xuaW1wb3J0IHsgd2lraUxpbmtQbHVnaW4gfSBmcm9tICdyZW1hcmstd2lraS1saW5rJztcbmltcG9ydCB7IHZpc2l0IH0gZnJvbSAndW5pc3QtdXRpbC12aXNpdCc7XG5cbi8qKlxuICogUmVndWxhciBleHByZXNzaW9uIGZvciBzcGVjaWFsIG1hcmtkb3duIGxpbmsgc3ltYm9scy5cbiAqL1xuY29uc3QgU1BFQ0lBTF9NQVJLRE9XTl9MSU5LX1NZTUJPTFNfUkVHRVggPSAvW1xcXFxbXFxdPD5fKn49YCRdL2c7XG5cbmNvbnN0IFdJS0lMSU5LX0RJVklERVIgPSAnfCc7XG5cbi8qKlxuICogTWF0Y2hlcyBhIGNhbmRpZGF0ZSBHRk0gZXh0ZW5kZWQgYHd3dy5gIGF1dG9saW5rIGxpdGVyYWw6IGB3d3cuYCBhdCB0aGUgc3RhcnQgb2YgdGhlIHRleHQgb3IgYWZ0ZXJcbiAqIHdoaXRlc3BhY2UsIGAqYCwgYF9gLCBgfmAsIGAoYCBvciBgPGAsIHJ1bm5pbmcgdXAgdG8gdGhlIG5leHQgd2hpdGVzcGFjZSwgYDxgIG9yIGA+YC4gR0ZNIGl0c2VsZlxuICoga2VlcHMgYSBjbG9zaW5nIGA+YCBpbiB0aGUgbGl0ZXJhbCAoT2JzaWRpYW4gcmVuZGVycyBgPHd3dy5leGFtcGxlLmNvbT5gIHdpdGggYW4gaHJlZiBlbmRpbmcgaW5cbiAqIGAlM0VgKTsgc3RvcHBpbmcgYmVmb3JlIGl0IGlzIGRlbGliZXJhdGUsIHNvIHRoZSBicmFja2V0cyBjYW4gYmUgcmVwb3J0ZWQgYXJvdW5kIHRoZSBsaXRlcmFsIGluc3RlYWQuXG4gKlxuICogVGhlIHByZWNlZGluZyBjaGFyYWN0ZXIgaXMgY29uc3VtZWQgYW5kIHRoZSBsaXRlcmFsIGNhcHR1cmVkIGFzIGBMaXRlcmFsYCwgYmVjYXVzZSBhIGxvb2tiZWhpbmQgaXMgYVxuICogc3ludGF4IGVycm9yIG9uIGlPUyBiZWZvcmUgMTYuNCwgYmVsb3cgdGhlIGlPUyAxNSBPYnNpZGlhbiBtb2JpbGUgc3RpbGwgc3VwcG9ydHMuIENvbnN1bWluZyBpdCBsb3NlcyBub1xuICogY2FuZGlkYXRlOiBhIG1hdGNoIGVuZHMgYmVmb3JlIHdoaXRlc3BhY2UsIGA8YCwgYD5gIG9yIHRoZSBlbmQsIHNvIHRoZSBjaGFyYWN0ZXIgYSBmb2xsb3dpbmcgY2FuZGlkYXRlXG4gKiBuZWVkcyBpcyBuZXZlciBwYXJ0IG9mIHRoZSBwcmV2aW91cyBtYXRjaC5cbiAqL1xuY29uc3QgV1dXX0FVVE9MSU5LX0xJVEVSQUxfQ0FORElEQVRFX1JFR19FWFAgPSAvKD86XnxbXFxzKCo8X35dKSg/PExpdGVyYWw+d3d3XFwuW15cXHM8Pl0qKS9nO1xuXG4vKipcbiAqIE1hdGNoZXMgdGhlIGRvbWFpbiBvZiBhIEdGTSBleHRlbmRlZCBgd3d3LmAgYXV0b2xpbmsgbGl0ZXJhbDogc2VnbWVudHMgb2YgbGV0dGVycywgZGlnaXRzLFxuICogdW5kZXJzY29yZXMgYW5kIGh5cGhlbnMgc2VwYXJhdGVkIGJ5IHBlcmlvZHMuXG4gKi9cbmNvbnN0IFdXV19BVVRPTElOS19MSVRFUkFMX0RPTUFJTl9SRUdfRVhQID0gL153d3coPzpcXC5bXFxwe0x9XFxwe059Xy1dKykrL3U7XG5cbi8qKlxuICogVGhlIGNoYXJhY3RlcnMgR0ZNIGRyb3BzIGZyb20gdGhlIGVuZCBvZiBhbiBleHRlbmRlZCBhdXRvbGluay5cbiAqL1xuY29uc3QgV1dXX0FVVE9MSU5LX0xJVEVSQUxfVFJBSUxJTkdfUFVOQ1RVQVRJT04gPSBuZXcgU2V0KFsnXycsICcsJywgJzonLCAnIScsICc/JywgJy4nLCAnKicsICd+J10pO1xuXG4vKipcbiAqIE1hdGNoZXMgYW4gZW50aXR5IHJlZmVyZW5jZSBhdCB0aGUgZW5kIG9mIGFuIGV4dGVuZGVkIGF1dG9saW5rLCB3aGljaCBHRk0gZHJvcHMuXG4gKi9cbmNvbnN0IFRSQUlMSU5HX0VOVElUWV9SRUZFUkVOQ0VfUkVHX0VYUCA9IC8mW1xcZEEtWmEtel0rOyQvO1xuXG4vKipcbiAqIFRoZSBzY2hlbWUgT2JzaWRpYW4gb3BlbnMgYSBHRk0gZXh0ZW5kZWQgYHd3dy5gIGF1dG9saW5rIGxpdGVyYWwgd2l0aC5cbiAqL1xuY29uc3QgV1dXX0FVVE9MSU5LX0xJVEVSQUxfU0NIRU1FID0gJ2h0dHA6Ly8nO1xuXG4vKipcbiAqIFRoZSByZXN1bHQgb2YgcGFyc2luZyB0aGUgbGlua3MgZnJvbSBhIG5vdGUncyBmcm9udG1hdHRlciB2aWEge0BsaW5rIHBhcnNlRnJvbnRtYXR0ZXJMaW5rc30uIEludGVybmFsXG4gKiBzaW5nbGUtbGluayBmcm9udG1hdHRlciB2YWx1ZXMgYXJlIG9taXR0ZWQsIGFzIE9ic2lkaWFuIG5hdGl2ZWx5IGNhY2hlcyB0aGVtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlRnJvbnRtYXR0ZXJMaW5rc1Jlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgZXh0ZXJuYWwgbGlua3MgcGFyc2VkIGZyb20gc2luZ2xlLWxpbmsgKHNpbmdsZS12YWx1ZSkgZnJvbnRtYXR0ZXIgdmFsdWVzLlxuICAgKi9cbiAgcmVhZG9ubHkgZnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzOiBQYXJzZUxpbmtGcm9udG1hdHRlclJlZmVyZW5jZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgZXh0ZXJuYWwgbGlua3MgcGFyc2VkIGZyb20gbXVsdGktbGluayAobXVsdGktdmFsdWUpIGZyb250bWF0dGVyIHZhbHVlcy5cbiAgICovXG4gIHJlYWRvbmx5IG11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3M6IFBhcnNlTGlua0Zyb250bWF0dGVyUmVmZXJlbmNlV2l0aE9mZnNldHNbXTtcblxuICAvKipcbiAgICogVGhlIGludGVybmFsIGxpbmtzIHBhcnNlZCBmcm9tIG11bHRpLWxpbmsgKG11bHRpLXZhbHVlKSBmcm9udG1hdHRlciB2YWx1ZXMuXG4gICAqL1xuICByZWFkb25seSBtdWx0aVZhbHVlRnJvbnRtYXR0ZXJMaW5rczogUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2VXaXRoT2Zmc2V0c1tdO1xufVxuXG4vKipcbiAqIEEge0BsaW5rIEZyb250bWF0dGVyTGlua0NhY2hlfSBmb3IgYSBsaW5rIHBhcnNlZCBmcm9tIGEgc2luZ2xlLWxpbmsgZnJvbnRtYXR0ZXIgdmFsdWUgdmlhXG4gKiB7QGxpbmsgcGFyc2VMaW5rc30uIEl0IGNhcnJpZXMgdGhlIGZ1bGwge0BsaW5rIFBhcnNlTGlua1Jlc3VsdH0gc28gY29uc3VtZXJzIGNhbiBpbnNwZWN0IHRoZSBwYXJzZVxuICogZGV0YWlscyB3aXRob3V0IHJlLXBhcnNpbmcgdGhlIGxpbmsuIFVzZSB0aGlzIHdoZW4gdGhlIHdob2xlIGZyb250bWF0dGVyIHZhbHVlIGlzIGEgc2luZ2xlIGxpbmsuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2UgZXh0ZW5kcyBGcm9udG1hdHRlckxpbmtDYWNoZSB7XG4gIC8qKlxuICAgKiBUaGUgcmVzdWx0IG9mIHBhcnNpbmcgdGhlIGxpbmsuXG4gICAqL1xuICByZWFkb25seSBwYXJzZUxpbmtSZXN1bHQ6IFBhcnNlTGlua1Jlc3VsdDtcbn1cblxuLyoqXG4gKiBBIHtAbGluayBQYXJzZUxpbmtGcm9udG1hdHRlclJlZmVyZW5jZX0gZm9yIGEgbGluayBwYXJzZWQgZnJvbSBhIG11bHRpLWxpbmsgZnJvbnRtYXR0ZXIgdmFsdWUgdmlhXG4gKiB7QGxpbmsgcGFyc2VMaW5rc30sIGFkZGl0aW9uYWxseSBjYXJyeWluZyB0aGUgb2Zmc2V0cyBvZiB0aGUgbGluayB3aXRoaW4gdGhlIGZyb250bWF0dGVyIHZhbHVlLiBVc2VcbiAqIHRoaXMgd2hlbiB0aGUgZnJvbnRtYXR0ZXIgdmFsdWUgaG9sZHMgbXVsdGlwbGUgbGlua3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2VXaXRoT2Zmc2V0cyBleHRlbmRzIFBhcnNlTGlua0Zyb250bWF0dGVyUmVmZXJlbmNlIHtcbiAgLyoqXG4gICAqIEFuIGVuZCBvZmZzZXQgb2YgdGhlIGxpbmsgaW4gdGhlIGZyb250bWF0dGVyIHZhbHVlLlxuICAgKi9cbiAgZW5kT2Zmc2V0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEEgc3RhcnQgb2Zmc2V0IG9mIHRoZSBsaW5rIGluIHRoZSBmcm9udG1hdHRlciB2YWx1ZS5cbiAgICovXG4gIHN0YXJ0T2Zmc2V0OiBudW1iZXI7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHBhcnNlTGlua30uIFRoZSBzYW1lIGFzIHtAbGluayBQYXJzZUxpbmtzT3B0aW9uc30uXG4gKi9cbmV4cG9ydCB0eXBlIFBhcnNlTGlua09wdGlvbnMgPSBQYXJzZUxpbmtzT3B0aW9ucztcblxuLyoqXG4gKiBBIHtAbGluayBSZWZlcmVuY2VDYWNoZX0gZm9yIGEgbGluayBwYXJzZWQgZnJvbSBjb250ZW50IHZpYSB7QGxpbmsgcGFyc2VMaW5rc30uIEl0IGNhcnJpZXMgdGhlIGZ1bGxcbiAqIHtAbGluayBQYXJzZUxpbmtSZXN1bHR9IHNvIGNvbnN1bWVycyBjYW4gaW5zcGVjdCB0aGUgcGFyc2UgZGV0YWlscyB3aXRob3V0IHJlLXBhcnNpbmcgdGhlIGxpbmsuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VMaW5rUmVmZXJlbmNlIGV4dGVuZHMgUmVmZXJlbmNlQ2FjaGUge1xuICAvKipcbiAgICogVGhlIHJlc3VsdCBvZiBwYXJzaW5nIHRoZSBsaW5rLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyc2VMaW5rUmVzdWx0OiBQYXJzZUxpbmtSZXN1bHQ7XG59XG5cbi8qKlxuICogQSByZXN1bHQgb2YgcGFyc2luZyBhIGxpbmsuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VMaW5rUmVzdWx0IHtcbiAgLyoqXG4gICAqIEFuIGFsaWFzIG9mIHRoZSBsaW5rLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBcbiAgICogW1xcKmFsaWFzXFwqXShsaW5rLm1kKSAtPiBcXCphbGlhc1xcKlxuICAgKiBgYGBcbiAgICovXG4gIHJlYWRvbmx5IGFsaWFzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBlbmNvZGVkIFVSTCBvZiB0aGUgbGluay5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgXG4gICAqIFthbGlhc10oPGxpbmsgd2l0aCBzcGFjZS5tZD4pIC0+IGxpbmslMjB3aXRoJTIwc3BhY2UubWRcbiAgICogYGBgXG4gICAqL1xuICByZWFkb25seSBlbmNvZGVkVXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBlbmQgb2Zmc2V0IG9mIHRoZSBsaW5rIGluIHRoZSBvcmlnaW5hbCB0ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgZW5kT2Zmc2V0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgbGluayBoYXMgYW5nbGUgYnJhY2tldHMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYFxuICAgKiBbYWxpYXNdKDxsaW5rLm1kPikgLT4gdHJ1ZVxuICAgKiBbYWxpYXNdKGxpbmsubWQpIC0+IGZhbHNlXG4gICAqIGBgYFxuICAgKi9cbiAgcmVhZG9ubHkgaGFzQW5nbGVCcmFja2V0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgbGluayBpcyBhbiBlbWJlZCBsaW5rLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBcbiAgICogIVtbYWxpYXNdXSAtPiB0cnVlXG4gICAqIFtbYWxpYXNdXSAtPiBmYWxzZVxuICAgKiBgYGBcbiAgICovXG4gIHJlYWRvbmx5IGlzRW1iZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgbGluayBpcyBleHRlcm5hbC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgXG4gICAqIFthbGlhc10oaHR0cHM6Ly9leGFtcGxlLmNvbSkgLT4gdHJ1ZVxuICAgKiBbYWxpYXNdKGZpbGUubWQpIC0+IGZhbHNlXG4gICAqIGBgYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNFeHRlcm5hbDogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBsaW5rIGlzIGEgYGZpbGU6Ly9gIFVSTC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgXG4gICAqIFthbGlhc10oZmlsZTovLy9DOi94LnR4dCkgLT4gdHJ1ZVxuICAgKiBbYWxpYXNdKGh0dHBzOi8vZXhhbXBsZS5jb20pIC0+IGZhbHNlXG4gICAqIGBgYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNGaWxlVXJsOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGxpbmsgaXMgYSB3aWtpbGluay5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgXG4gICAqIFtbYWxpYXNdXSAtPiB0cnVlXG4gICAqIFthbGlhc10obGluay5tZCkgLT4gZmFsc2VcbiAgICogYGBgXG4gICAqL1xuICByZWFkb25seSBpc1dpa2lsaW5rOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIHJhdyBsaW5rIHRleHQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYFxuICAgKiBbYWxpYXNdKGxpbmsubWQpIC0+IFthbGlhc10obGluay5tZClcbiAgICogYGBgXG4gICAqL1xuICByZWFkb25seSByYXc6IHN0cmluZztcblxuICAvKipcbiAgICogQSBzdGFydCBvZmZzZXQgb2YgdGhlIGxpbmsgaW4gdGhlIG9yaWdpbmFsIHRleHQuXG4gICAqL1xuICByZWFkb25seSBzdGFydE9mZnNldDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBIHRpdGxlIG9mIHRoZSBsaW5rLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBcbiAgICogW2FsaWFzXShsaW5rLm1kIFwidGl0bGVcIikgLT4gdGl0bGVcbiAgICogYGBgXG4gICAqL1xuICByZWFkb25seSB0aXRsZT86IHN0cmluZztcblxuICAvKipcbiAgICogQW4gdW5lc2NhcGVkIGFsaWFzIG9mIHRoZSBsaW5rLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBcbiAgICogW1xcKmFsaWFzXFwqXShsaW5rLm1kKSAtPiAqYWxpYXMqXG4gICAqIGBgYFxuICAgKi9cbiAgcmVhZG9ubHkgdW5lc2NhcGVkQWxpYXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFuIFVSTCBvZiB0aGUgbGluay5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgXG4gICAqIFthbGlhc10obGluayUyMHdpdGglMjBzcGFjZS5tZCkgLT4gbGluayB3aXRoIHNwYWNlLm1kXG4gICAqIGBgYFxuICAgKi9cbiAgcmVhZG9ubHkgdXJsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHBhcnNlTGlua3N9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlTGlua3NPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVjb2duaXplIEdGTSBleHRlbmRlZCBgd3d3LmAgYXV0b2xpbmsgbGl0ZXJhbHMgKGB3d3cuZXhhbXBsZS5jb21gLCBhbHNvIGluc2lkZVxuICAgKiBgPC4uLj5gKSBhcyBleHRlcm5hbCBsaW5rcywgYXMgT2JzaWRpYW4gZG9lcyBpbiBhIG5vdGUncyBib2R5LiBPYnNpZGlhbiBkb2VzIG5vdCBsaW5rIHRoZW0gaW5cbiAgICogZnJvbnRtYXR0ZXIgdmFsdWVzLCBzbyB7QGxpbmsgcGFyc2VGcm9udG1hdHRlckxpbmtzfSB0dXJucyB0aGlzIG9mZi5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUmVjb2duaXplV3d3QXV0b2xpbmtMaXRlcmFscz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgdG9QYXJzZUxpbmtSZWZlcmVuY2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRvUGFyc2VMaW5rUmVmZXJlbmNlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IHRoZSBwYXJzZWQgbGluaydzIG9mZnNldHMgaW5kZXggaW50by4gVXNlZCB0byBjb21wdXRlIHRoZSBsaW5lIGFuZCBjb2x1bW4uXG4gICAqL1xuICByZWFkb25seSBjb250ZW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJzZWQgbGluayB0byB3cmFwLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyc2VMaW5rUmVzdWx0OiBQYXJzZUxpbmtSZXN1bHQ7XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgRnJvbnRtYXR0ZXJMaW5rc1BhcnNlci5jYXRlZ29yaXplfS5cbiAqL1xuaW50ZXJmYWNlIENhdGVnb3JpemVGcm9udG1hdHRlckxpbmtQYXJhbXMge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgd2hvbGUgZnJvbnRtYXR0ZXIgdmFsdWUgaXMgYSBzaW5nbGUgbGluay5cbiAgICovXG4gIHJlYWRvbmx5IGlzU2luZ2xlTGluazogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGtleSBwYXRoIG9mIHRoZSBmcm9udG1hdHRlciB2YWx1ZS5cbiAgICovXG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyc2VkIGxpbmsuXG4gICAqL1xuICByZWFkb25seSBwYXJzZUxpbmtSZXN1bHQ6IFBhcnNlTGlua1Jlc3VsdDtcblxuICAvKipcbiAgICogVGhlIGZyb250bWF0dGVyIHZhbHVlIHRoZSBsaW5rIHdhcyBwYXJzZWQgZnJvbS5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgZGVjb2RlVXJsU2FmZWx5fS5cbiAqL1xuaW50ZXJmYWNlIERlY29kZVVybFNhZmVseVBhcmFtcyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBsaW5rIHVzZXMgYW5nbGUgYnJhY2tldHMuXG4gICAqL1xuICByZWFkb25seSBoYXNBbmdsZUJyYWNrZXRzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBsaW5rIGlzIGV4dGVybmFsLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNFeHRlcm5hbDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBVUkwgdG8gZGVjb2RlLlxuICAgKi9cbiAgcmVhZG9ubHkgdXJsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgZXh0cmFjdEFsaWFzfS5cbiAqL1xuaW50ZXJmYWNlIEV4dHJhY3RBbGlhc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBBIHN0cmluZyB0byBleHRyYWN0IHRoZSBhbGlhcyBmcm9tLlxuICAgKi9cbiAgcmVhZG9ubHkgJHN0cmluZzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBlbmQgb2Zmc2V0IG9mIHRoZSBhbGlhcyBpbiB0aGUgc3RyaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgYWxpYXNFbmRPZmZzZXQ6IG51bWJlcjtcblxuICAvKipcbiAgICogQSBzdGFydCBvZmZzZXQgb2YgdGhlIGFsaWFzIGluIHRoZSBzdHJpbmcuXG4gICAqL1xuICByZWFkb25seSBhbGlhc1N0YXJ0T2Zmc2V0OiBudW1iZXI7XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgZXh0cmFjdFRleHRMaW5rc30uXG4gKi9cbmludGVyZmFjZSBFeHRyYWN0VGV4dExpbmtzUGFyYW1zIHtcbiAgLyoqXG4gICAqIEEgc3RyaW5nIHRvIGV4dHJhY3QgdGhlIHRleHQgbGlua3MgZnJvbS5cbiAgICovXG4gIHJlYWRvbmx5ICRzdHJpbmc6IHN0cmluZztcblxuICAvKipcbiAgICogQW4gZW5kIG9mZnNldCBvZiB0aGUgdGV4dCBwYXJ0IGluIHRoZSBzdHJpbmcuXG4gICAqL1xuICByZWFkb25seSBlbmRPZmZzZXQ6IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZWNvZ25pemUgR0ZNIGV4dGVuZGVkIGB3d3cuYCBhdXRvbGluayBsaXRlcmFscy5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFJlY29nbml6ZVd3d0F1dG9saW5rTGl0ZXJhbHM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgc3RhcnQgb2Zmc2V0IG9mIHRoZSB0ZXh0IHBhcnQgaW4gdGhlIHN0cmluZy5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0T2Zmc2V0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBwYXJzZWQgbGlua3MgdG8gYXBwZW5kIHRoZSBleHRyYWN0ZWQgdGV4dCBsaW5rcyB0by5cbiAgICovXG4gIHJlYWRvbmx5IHRleHRMaW5rczogUGFyc2VMaW5rUmVzdWx0W107XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgZ2V0V2hvbGVWYWx1ZUxpbmt9LlxuICovXG5pbnRlcmZhY2UgR2V0V2hvbGVWYWx1ZUxpbmtQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGxpbmtzIHtAbGluayBwYXJzZUxpbmtzfSBmb3VuZCBpbiB0aGUgdmFsdWUuXG4gICAqL1xuICByZWFkb25seSBsaW5rczogcmVhZG9ubHkgUGFyc2VMaW5rUmVzdWx0W107XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJzZSBvcHRpb25zIHRoZSBsaW5rcyB3ZXJlIGZvdW5kIHdpdGguXG4gICAqL1xuICByZWFkb25seSBvcHRpb25zOiBQYXJzZUxpbmtzT3B0aW9ucyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHZhbHVlIHRvIHJlYWQgYXMgb25lIGxpbmsuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtcyBmb3Ige0BsaW5rIGhhc0FuZ2xlQnJhY2tldHNJbkxpbmt9LlxuICovXG5pbnRlcmZhY2UgSGFzQW5nbGVCcmFja2V0c0luTGlua1BhcmFtcyB7XG4gIC8qKlxuICAgKiBBIHJhdyBsaW5rIHRleHQuXG4gICAqL1xuICByZWFkb25seSByYXc6IHN0cmluZztcblxuICAvKipcbiAgICogQSByYXcgVVJMIG9mIHRoZSBsaW5rLlxuICAgKi9cbiAgcmVhZG9ubHkgcmF3VXJsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgd2lkZW5Ub1dob2xlVmFsdWV9LlxuICovXG5pbnRlcmZhY2UgV2lkZW5Ub1dob2xlVmFsdWVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIG9mZnNldCBvZiB0aGUgYF0oYCB0aGF0IGVuZHMgdGhlIGNhcHRpb24uXG4gICAqL1xuICByZWFkb25seSBjYXB0aW9uRW5kT2Zmc2V0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBsaW5rIGZvdW5kIGF0IHRoZSBlbmQgb2YgdGhlIHZhbHVlLlxuICAgKi9cbiAgcmVhZG9ubHkgbGluazogUGFyc2VMaW5rUmVzdWx0O1xuXG4gIC8qKlxuICAgKiBUaGUgd2hvbGUgdmFsdWUuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgV2lraUxpbmtOb2RlIGV4dGVuZHMgTm9kZSB7XG4gIGRhdGE6IFdpa2lMaW5rTm9kZURhdGE7XG4gIHZhbHVlOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBXaWtpTGlua05vZGVEYXRhIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBhbGlhczogc3RyaW5nO1xufVxuXG5jbGFzcyBGcm9udG1hdHRlckxpbmtzUGFyc2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBmcm9udG1hdHRlckV4dGVybmFsTGlua3M6IFBhcnNlTGlua0Zyb250bWF0dGVyUmVmZXJlbmNlW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBtdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzOiBQYXJzZUxpbmtGcm9udG1hdHRlclJlZmVyZW5jZVdpdGhPZmZzZXRzW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBtdWx0aVZhbHVlRnJvbnRtYXR0ZXJMaW5rczogUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2VXaXRoT2Zmc2V0c1tdID0gW107XG5cbiAgcHVibGljIHBhcnNlKGZyb250bWF0dGVyOiB1bmtub3duKTogUGFyc2VGcm9udG1hdHRlckxpbmtzUmVzdWx0IHtcbiAgICB0aGlzLnBhcnNlVmFsdWUoZnJvbnRtYXR0ZXIsICcnKTtcbiAgICByZXR1cm4ge1xuICAgICAgZnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzOiB0aGlzLmZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcyxcbiAgICAgIG11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3M6IHRoaXMubXVsdGlWYWx1ZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcyxcbiAgICAgIG11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzOiB0aGlzLm11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY2F0ZWdvcml6ZShwYXJhbXM6IENhdGVnb3JpemVGcm9udG1hdHRlckxpbmtQYXJhbXMpOiB2b2lkIHtcbiAgICBjb25zdCB7IGlzU2luZ2xlTGluaywga2V5LCBwYXJzZUxpbmtSZXN1bHQsIHZhbHVlIH0gPSBwYXJhbXM7XG4gICAgaWYgKCFwYXJzZUxpbmtSZXN1bHQuaXNFeHRlcm5hbCAmJiBpc1NpbmdsZUxpbmspIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZWZlcmVuY2U6IFBhcnNlTGlua0Zyb250bWF0dGVyUmVmZXJlbmNlID0ge1xuICAgICAgZGlzcGxheVRleHQ6IHBhcnNlTGlua1Jlc3VsdC5hbGlhcyA/PyBwYXJzZUxpbmtSZXN1bHQudXJsLFxuICAgICAga2V5LFxuICAgICAgbGluazogcGFyc2VMaW5rUmVzdWx0LnVybCxcbiAgICAgIG9yaWdpbmFsOiB2YWx1ZSxcbiAgICAgIHBhcnNlTGlua1Jlc3VsdFxuICAgIH07XG5cbiAgICBpZiAoaXNTaW5nbGVMaW5rKSB7XG4gICAgICB0aGlzLmZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcy5wdXNoKHJlZmVyZW5jZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVmZXJlbmNlV2l0aE9mZnNldHM6IFBhcnNlTGlua0Zyb250bWF0dGVyUmVmZXJlbmNlV2l0aE9mZnNldHMgPSB7XG4gICAgICAuLi5yZWZlcmVuY2UsXG4gICAgICBlbmRPZmZzZXQ6IHBhcnNlTGlua1Jlc3VsdC5lbmRPZmZzZXQsXG4gICAgICBzdGFydE9mZnNldDogcGFyc2VMaW5rUmVzdWx0LnN0YXJ0T2Zmc2V0XG4gICAgfTtcblxuICAgIGlmIChwYXJzZUxpbmtSZXN1bHQuaXNFeHRlcm5hbCkge1xuICAgICAgdGhpcy5tdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzLnB1c2gocmVmZXJlbmNlV2l0aE9mZnNldHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzLnB1c2gocmVmZXJlbmNlV2l0aE9mZnNldHMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VWYWx1ZSh2YWx1ZTogdW5rbm93biwga2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gT2JzaWRpYW4gbGlua3MgYSBzY2hlbWUtbGVzcyBgd3d3LmAgbGl0ZXJhbCBpbiB0aGUgYm9keSBvbmx5LCBuZXZlciBpbiBhIGZyb250bWF0dGVyIHZhbHVlLlxuICAgICAgY29uc3Qgb3B0aW9uczogUGFyc2VMaW5rc09wdGlvbnMgPSB7IHNob3VsZFJlY29nbml6ZVd3d0F1dG9saW5rTGl0ZXJhbHM6IGZhbHNlIH07XG4gICAgICBjb25zdCBwYXJzZUxpbmtSZXN1bHRzID0gcGFyc2VMaW5rcyh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICBjb25zdCB3aG9sZVZhbHVlTGluayA9IGdldFdob2xlVmFsdWVMaW5rKHsgbGlua3M6IHBhcnNlTGlua1Jlc3VsdHMsIG9wdGlvbnMsIHZhbHVlIH0pO1xuICAgICAgaWYgKHdob2xlVmFsdWVMaW5rKSB7XG4gICAgICAgIHRoaXMuY2F0ZWdvcml6ZSh7IGlzU2luZ2xlTGluazogdHJ1ZSwga2V5LCBwYXJzZUxpbmtSZXN1bHQ6IHdob2xlVmFsdWVMaW5rLCB2YWx1ZSB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHBhcnNlTGlua1Jlc3VsdCBvZiBwYXJzZUxpbmtSZXN1bHRzKSB7XG4gICAgICAgIHRoaXMuY2F0ZWdvcml6ZSh7IGlzU2luZ2xlTGluazogZmFsc2UsIGtleSwgcGFyc2VMaW5rUmVzdWx0LCB2YWx1ZSB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2NoaWxkS2V5LCBjaGlsZFZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSBhcyBHZW5lcmljT2JqZWN0KSkge1xuICAgICAgdGhpcy5wYXJzZVZhbHVlKGNoaWxkVmFsdWUsIGtleSA/IGAke2tleX0uJHtjaGlsZEtleX1gIDogY2hpbGRLZXkpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEVzY2FwZXMgdGhlIGFsaWFzIG9mIGEgbWFya2Rvd24gbGluay5cbiAqXG4gKiBAcGFyYW0gYWxpYXMgLSBBbiBhbGlhcyBvZiBhIG1hcmtkb3duIGxpbmsuXG4gKiBAcmV0dXJucyBBbiBlc2NhcGVkIGFsaWFzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogZXNjYXBlQWxpYXMoJyoqYWxpYXMqKicpIC8vICdcXFxcKlxcXFwqYWxpYXNcXFxcKlxcXFwqJ1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVBbGlhcyhhbGlhczogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IGFsaWFzLFxuICAgIHJlcGxhY2VyOiBTdHJpbmcucmF3YFxcJCZgLFxuICAgIHNlYXJjaFZhbHVlOiBTUEVDSUFMX01BUktET1dOX0xJTktfU1lNQk9MU19SRUdFWFxuICB9KTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSByZWZlcmVuY2UgaXMgYSB7QGxpbmsgUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2V9LlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2UgLSBUaGUgcmVmZXJlbmNlIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSByZWZlcmVuY2UgaXMgYSB7QGxpbmsgUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2V9LCBvdGhlcndpc2UgYGZhbHNlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2UocmVmZXJlbmNlOiBSZWZlcmVuY2UpOiByZWZlcmVuY2UgaXMgUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2Uge1xuICByZXR1cm4gaXNGcm9udG1hdHRlckxpbmtDYWNoZShyZWZlcmVuY2UpICYmICdwYXJzZUxpbmtSZXN1bHQnIGluIHJlZmVyZW5jZTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSByZWZlcmVuY2UgaXMgYSB7QGxpbmsgUGFyc2VMaW5rUmVmZXJlbmNlfS5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgcmVmZXJlbmNlIGlzIGEge0BsaW5rIFBhcnNlTGlua1JlZmVyZW5jZX0sIG90aGVyd2lzZSBgZmFsc2VgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYXJzZUxpbmtSZWZlcmVuY2UocmVmZXJlbmNlOiBSZWZlcmVuY2UpOiByZWZlcmVuY2UgaXMgUGFyc2VMaW5rUmVmZXJlbmNlIHtcbiAgcmV0dXJuICdwYXJzZUxpbmtSZXN1bHQnIGluIHJlZmVyZW5jZTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIGxpbmtzIGZyb20gYSBub3RlJ3MgZnJvbnRtYXR0ZXIuIEVhY2ggc3RyaW5nIHZhbHVlIGlzIHBhcnNlZCB2aWEge0BsaW5rIHBhcnNlTGlua3N9OiBhIHZhbHVlXG4gKiB0aGF0IGlzIGEgc2luZ2xlIGxpbmsgeWllbGRzIGFuIGVudHJ5IHdpdGhvdXQgb2Zmc2V0cywgYW5kIGEgdmFsdWUgdGhhdCBob2xkcyBtdWx0aXBsZSBsaW5rcyB5aWVsZHNcbiAqIG9mZnNldC1jYXJyeWluZyBlbnRyaWVzLiBBIHZhbHVlIGlzIGEgc2luZ2xlIGxpbmsgdGhlIHdheSBPYnNpZGlhbiByZWFkcyBpdCwgc28gYFtBIFsgQl0odC5tZClgIGlzIG9uZVxuICogbGluayBjYXB0aW9uZWQgYEEgWyBCYCAoc2VlIHtAbGluayBwYXJzZUxpbmt9KS4gSW50ZXJuYWwgc2luZ2xlLWxpbmsgdmFsdWVzIGFyZSBvbWl0dGVkLCBhcyBPYnNpZGlhbiBuYXRpdmVseSBjYWNoZXMgdGhlbS5cbiAqXG4gKiBAcGFyYW0gZnJvbnRtYXR0ZXIgLSBUaGUgZnJvbnRtYXR0ZXIgdG8gcGFyc2UgKGEgdmFsdWUsIG9iamVjdCwgb3IgYXJyYXkpLlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBmcm9udG1hdHRlciBsaW5rcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRnJvbnRtYXR0ZXJMaW5rcyhmcm9udG1hdHRlcjogdW5rbm93bik6IFBhcnNlRnJvbnRtYXR0ZXJMaW5rc1Jlc3VsdCB7XG4gIHJldHVybiBuZXcgRnJvbnRtYXR0ZXJMaW5rc1BhcnNlcigpLnBhcnNlKGZyb250bWF0dGVyKTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYSBsaW5rIGludG8gaXRzIGNvbXBvbmVudHMuXG4gKlxuICogQSBzdHJpbmcgdGhhdCBzdGFydHMgd2l0aCBgW2AgYW5kIGVuZHMgd2l0aCBhIG1hcmtkb3duIGxpbmsgaXMgcmVhZCBhcyBPTkUgbGluayB3aG9zZSBjYXB0aW9uIHJ1bnNcbiAqIGZyb20gdGhlIGxlYWRpbmcgYFtgIHRvIHRoYXQgbGluaydzIGBdKGAsIHRoZSB3YXkgT2JzaWRpYW4gcmVhZHMgYSBmcm9udG1hdHRlciB2YWx1ZTogYFtBIFsgQl0odC5tZClgXG4gKiBoYXMgdGhlIGFsaWFzIGBBIFsgQmAsIHdoZXJlIENvbW1vbk1hcmsgZmluZHMgb25seSBgWyBCXSh0Lm1kKWAuXG4gKlxuICogQHBhcmFtICRzdHJpbmcgLSBUaGUgbGluayB0byBwYXJzZS5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcnNlIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIGxpbmsuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUxpbmsoJHN0cmluZzogc3RyaW5nLCBvcHRpb25zPzogUGFyc2VMaW5rT3B0aW9ucyk6IG51bGwgfCBQYXJzZUxpbmtSZXN1bHQge1xuICByZXR1cm4gZ2V0V2hvbGVWYWx1ZUxpbmsoeyBsaW5rczogcGFyc2VMaW5rcygkc3RyaW5nLCBvcHRpb25zKSwgb3B0aW9ucywgdmFsdWU6ICRzdHJpbmcgfSk7XG59XG5cbi8qKlxuICogUGFyc2VzIGFsbCBsaW5rcyBpbiBhIHN0cmluZy5cbiAqXG4gKiBCZXNpZGVzIG1hcmtkb3duIGxpbmtzLCB3aWtpbGlua3MgYW5kIGF1dG9saW5rcywgdGhlIHBsYWluIHRleHQgYmV0d2VlbiB0aGVtIGlzIHNjYW5uZWQgZm9yIGJhcmVcbiAqIFVSTHMgd2l0aCBhIHNjaGVtZSAoYGh0dHBzOi8vZXhhbXBsZS5jb21gKSBhbmQsIHVubGVzcyB0dXJuZWQgb2ZmIHRocm91Z2hcbiAqIHtAbGluayBQYXJzZUxpbmtzT3B0aW9ucy5zaG91bGRSZWNvZ25pemVXd3dBdXRvbGlua0xpdGVyYWxzfSwgZm9yIEdGTSBleHRlbmRlZCBgd3d3LmAgYXV0b2xpbmtcbiAqIGxpdGVyYWxzIChgd3d3LmV4YW1wbGUuY29tYCkuIFN1Y2ggYSBsaXRlcmFsIGlzIHJlcG9ydGVkIGFzIGFuIGV4dGVybmFsIGxpbmsgd2hvc2UgYHVybGAgY2FycmllcyB0aGVcbiAqIGBodHRwOi8vYCBzY2hlbWUgT2JzaWRpYW4gb3BlbnMgaXQgd2l0aCwgc28gYSBsaW5rIHJlYnVpbHQgZnJvbSBpdCBzdGF5cyBleHRlcm5hbDogYSBzY2hlbWUtbGVzc1xuICogYFthbGlhc10od3d3LmV4YW1wbGUuY29tKWAgaXMgYW4gaW50ZXJuYWwgbGluayBpbiBPYnNpZGlhbi4gQSBsaXRlcmFsIHdyYXBwZWQgaW4gYDwuLi4+YCByZXBvcnRzIHRoZVxuICogYnJhY2tldHMgYXMgcGFydCBvZiBgcmF3YCwgc28gcmVwbGFjaW5nIGByYXdgIGxlYXZlcyBubyBzdHJheSBicmFja2V0IGJlaGluZC5cbiAqXG4gKiBAcGFyYW0gJHN0cmluZyAtIFRoZSBzdHJpbmcgdG8gcGFyc2UgdGhlIGxpbmtzIGluLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyc2Ugb3B0aW9ucy5cbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgbGlua3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUxpbmtzKCRzdHJpbmc6IHN0cmluZywgb3B0aW9ucz86IFBhcnNlTGlua3NPcHRpb25zKTogUGFyc2VMaW5rUmVzdWx0W10ge1xuICBjb25zdCBzaG91bGRSZWNvZ25pemVXd3dBdXRvbGlua0xpdGVyYWxzID0gb3B0aW9ucz8uc2hvdWxkUmVjb2duaXplV3d3QXV0b2xpbmtMaXRlcmFscyA/PyB0cnVlO1xuICBjb25zdCBlbWJlZFN5bWJvbE9mZnNldHMgPSBuZXcgU2V0PG51bWJlcj4oKTtcblxuICBjb25zdCBFTUJFRF9MSU5LX1BSRUZJWCA9ICchWyc7XG4gIGNvbnN0IE5PX0VNQkVEX0xJTktfUFJFRklYID0gJ0BbJztcbiAgY29uc3QgRFVNTVlfQ0hBUkFDVEVSID0gJ0AnO1xuXG4gIGNvbnN0IEVNQkVEX0lOU0lERV9MSU5LX1JFR19FWFAgPSAvXFxbKD88TGlua0FsaWFzPiFcXFsuKj9cXF1cXCguKz9cXCkpXFxdXFwoKD88TGluaz4uKz8pXFwpL2c7XG4gIGNvbnN0IG5vSW5zaWRlRW1iZWRzTGlua3NTdHJpbmcgPSByZXBsYWNlQWxsKHtcbiAgICAkc3RyaW5nLFxuICAgIHJlcGxhY2VyOiAoeyBjYXB0dXJlZEdyb3VwQXJndW1lbnRzOiBbbGlua0FsaWFzID0gJycsIGxpbmsgPSAnJ10gfSkgPT4ge1xuICAgICAgY29uc3QgZHVtbXlBbGlhcyA9IERVTU1ZX0NIQVJBQ1RFUi5yZXBlYXQobGlua0FsaWFzLmxlbmd0aCk7XG4gICAgICByZXR1cm4gYFske2R1bW15QWxpYXN9XSgke2xpbmt9KWA7XG4gICAgfSxcbiAgICBzZWFyY2hWYWx1ZTogRU1CRURfSU5TSURFX0xJTktfUkVHX0VYUFxuICB9KTtcblxuICBjb25zdCBub0VtYmVkU3RyaW5nID0gcmVwbGFjZUFsbCh7XG4gICAgJHN0cmluZzogbm9JbnNpZGVFbWJlZHNMaW5rc1N0cmluZyxcbiAgICByZXBsYWNlcjogKCRhcmd1bWVudHMpID0+IHtcbiAgICAgIGVtYmVkU3ltYm9sT2Zmc2V0cy5hZGQoJGFyZ3VtZW50cy5vZmZzZXQpO1xuICAgICAgcmV0dXJuIE5PX0VNQkVEX0xJTktfUFJFRklYO1xuICAgIH0sXG4gICAgc2VhcmNoVmFsdWU6IEVNQkVEX0xJTktfUFJFRklYXG4gIH0pO1xuXG4gIGNvbnN0IHByb2Nlc3NvciA9IHJlbWFyaygpLnVzZShyZW1hcmtQYXJzZSkudXNlKHdpa2lMaW5rUGx1Z2luLCB7IGFsaWFzRGl2aWRlcjogV0lLSUxJTktfRElWSURFUiB9KTtcbiAgY29uc3Qgcm9vdCA9IHByb2Nlc3Nvci5wYXJzZShub0VtYmVkU3RyaW5nKTtcblxuICBjb25zdCBsaW5rczogUGFyc2VMaW5rUmVzdWx0W10gPSBbXTtcbiAgY29uc3QgdGV4dExpbmtzOiBQYXJzZUxpbmtSZXN1bHRbXSA9IFtdO1xuXG4gIHZpc2l0KHJvb3QsIChub2RlOiBOb2RlKSA9PiB7XG4gICAgbGV0IGxpbms6IFBhcnNlTGlua1Jlc3VsdDtcbiAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgY2FzZSAnbGluayc6IHtcbiAgICAgICAgbGluayA9IHBhcnNlTGlua05vZGUobm9kZSBhcyBMaW5rLCAkc3RyaW5nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICd3aWtpTGluayc6IHtcbiAgICAgICAgbGluayA9IHBhcnNlV2lraWxpbmtOb2RlKG5vZGUgYXMgV2lraUxpbmtOb2RlLCAkc3RyaW5nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZW1iZWRTeW1ib2xPZmZzZXRzLmhhcyhsaW5rLnN0YXJ0T2Zmc2V0IC0gMSkpIHtcbiAgICAgIGxpbmsgPSB7XG4gICAgICAgIC4uLmxpbmssXG4gICAgICAgIGlzRW1iZWQ6IHRydWUsXG4gICAgICAgIHJhdzogYCEke2xpbmsucmF3fWAsXG4gICAgICAgIHN0YXJ0T2Zmc2V0OiBsaW5rLnN0YXJ0T2Zmc2V0IC0gMVxuICAgICAgfTtcbiAgICB9XG4gICAgbGlua3MucHVzaChsaW5rKTtcbiAgfSk7XG5cbiAgbGlua3Muc29ydCgoYSwgYikgPT4gYS5zdGFydE9mZnNldCAtIGIuc3RhcnRPZmZzZXQpO1xuXG4gIGxldCB0ZXh0U3RhcnRPZmZzZXQgPSAwO1xuXG4gIGZvciAoY29uc3QgbGluayBvZiBsaW5rcykge1xuICAgIGV4dHJhY3RUZXh0TGlua3Moe1xuICAgICAgJHN0cmluZyxcbiAgICAgIGVuZE9mZnNldDogbGluay5zdGFydE9mZnNldCAtIDEsXG4gICAgICBzaG91bGRSZWNvZ25pemVXd3dBdXRvbGlua0xpdGVyYWxzLFxuICAgICAgc3RhcnRPZmZzZXQ6IHRleHRTdGFydE9mZnNldCxcbiAgICAgIHRleHRMaW5rc1xuICAgIH0pO1xuICAgIHRleHRTdGFydE9mZnNldCA9IGxpbmsuZW5kT2Zmc2V0ICsgMTtcbiAgfVxuXG4gIGV4dHJhY3RUZXh0TGlua3Moe1xuICAgICRzdHJpbmcsXG4gICAgZW5kT2Zmc2V0OiAkc3RyaW5nLmxlbmd0aCAtIDEsXG4gICAgc2hvdWxkUmVjb2duaXplV3d3QXV0b2xpbmtMaXRlcmFscyxcbiAgICBzdGFydE9mZnNldDogdGV4dFN0YXJ0T2Zmc2V0LFxuICAgIHRleHRMaW5rc1xuICB9KTtcblxuICBsaW5rcy5wdXNoKC4uLnRleHRMaW5rcyk7XG4gIGxpbmtzLnNvcnQoKGEsIGIpID0+IGEuc3RhcnRPZmZzZXQgLSBiLnN0YXJ0T2Zmc2V0KTtcblxuICByZXR1cm4gbGlua3M7XG59XG5cbi8qKlxuICogV3JhcHMgYSB7QGxpbmsgUGFyc2VMaW5rUmVzdWx0fSBpbnRvIGEge0BsaW5rIFBhcnNlTGlua1JlZmVyZW5jZX0gc28gaXQgY2FuIGZsb3cgdGhyb3VnaCB0aGVcbiAqIHJlZmVyZW5jZS1iYXNlZCBmaWxlLWNoYW5nZSBwaXBlbGluZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHdyYXBwaW5nIHRoZSBwYXJzZWQgbGluay5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgUGFyc2VMaW5rUmVmZXJlbmNlfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvUGFyc2VMaW5rUmVmZXJlbmNlKHBhcmFtczogVG9QYXJzZUxpbmtSZWZlcmVuY2VQYXJhbXMpOiBQYXJzZUxpbmtSZWZlcmVuY2Uge1xuICBjb25zdCB7IGNvbnRlbnQsIHBhcnNlTGlua1Jlc3VsdCB9ID0gcGFyYW1zO1xuICByZXR1cm4ge1xuICAgIC4uLihwYXJzZUxpbmtSZXN1bHQuYWxpYXMgIT09IHVuZGVmaW5lZCAmJiB7IGRpc3BsYXlUZXh0OiBwYXJzZUxpbmtSZXN1bHQuYWxpYXMgfSksXG4gICAgbGluazogcGFyc2VMaW5rUmVzdWx0LnVybCxcbiAgICBvcmlnaW5hbDogcGFyc2VMaW5rUmVzdWx0LnJhdyxcbiAgICBwYXJzZUxpbmtSZXN1bHQsXG4gICAgcG9zaXRpb246IHtcbiAgICAgIGVuZDogb2Zmc2V0VG9Mb2MoY29udGVudCwgcGFyc2VMaW5rUmVzdWx0LmVuZE9mZnNldCksXG4gICAgICBzdGFydDogb2Zmc2V0VG9Mb2MoY29udGVudCwgcGFyc2VMaW5rUmVzdWx0LnN0YXJ0T2Zmc2V0KVxuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBVbmVzY2FwZXMgdGhlIGFsaWFzIG9mIGEgbWFya2Rvd24gbGluay5cbiAqXG4gKiBAcGFyYW0gZXNjYXBlZEFsaWFzIC0gQW4gZXNjYXBlZCBhbGlhcy5cbiAqIEByZXR1cm5zIEFuIHVuZXNjYXBlZCBhbGlhcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIHVuZXNjYXBlQWxpYXMoJ1xcXFwqXFxcXCphbGlhc1xcXFwqXFxcXConKSAvLyAnKiphbGlhcyoqJ1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmVzY2FwZUFsaWFzKGVzY2FwZWRBbGlhczogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IGVzY2FwZWRBbGlhcyxcbiAgICByZXBsYWNlcjogKHsgY2FwdHVyZWRHcm91cEFyZ3VtZW50czogW2JhY2tzbGFzaGVzID0gJycsIHNwZWNpYWxDaGFyID0gJyddIH0pID0+IHtcbiAgICAgIGNvbnN0IEVTQ0FQRURfQkFDS1NMQVNIX0xFTkdUSCA9IDI7XG4gICAgICBjb25zdCBiYWNrc2xhc2hDb3VudCA9IGJhY2tzbGFzaGVzLmxlbmd0aDtcbiAgICAgIGNvbnN0IGtlZXBDb3VudCA9IE1hdGguZmxvb3IoYmFja3NsYXNoQ291bnQgLyBFU0NBUEVEX0JBQ0tTTEFTSF9MRU5HVEgpO1xuICAgICAgcmV0dXJuICdcXFxcJy5yZXBlYXQoa2VlcENvdW50KSArIHNwZWNpYWxDaGFyO1xuICAgIH0sXG4gICAgc2VhcmNoVmFsdWU6IC8oPzxCYWNrc2xhc2hlcz5cXFxcKykoPzxTcGVjaWFsQ2hhcmFjdGVyPlshXCIjJCUmJygpKissLS4vOjs8PT4/QFtcXFxcXFxdXl9ge3x9fl0pL2dcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNvdW50T2NjdXJyZW5jZXMoJHN0cmluZzogc3RyaW5nLCBjaGFyYWN0ZXI6IHN0cmluZyk6IG51bWJlciB7XG4gIHJldHVybiAkc3RyaW5nLnNwbGl0KGNoYXJhY3RlcikubGVuZ3RoIC0gMTtcbn1cblxuZnVuY3Rpb24gZGVjb2RlVXJsU2FmZWx5KHBhcmFtczogRGVjb2RlVXJsU2FmZWx5UGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3QgeyBoYXNBbmdsZUJyYWNrZXRzLCBpc0V4dGVybmFsLCB1cmwgfSA9IHBhcmFtcztcbiAgLy8gYGZpbGU6Ly9gIFVSTHMgYXJlIGV4dGVybmFsLCBidXQgdGhlaXIgcGVyY2VudC1lbmNvZGluZyBpcyBwdXJlbHkgY29zbWV0aWMsIHNvIGRlY29kZSB0aGVtIGxpa2VcbiAgLy8gaW50ZXJuYWwgbGlua3MuIEV2ZXJ5IG90aGVyIGV4dGVybmFsIFVSTCBpcyBsZWZ0IHVudG91Y2hlZCAoaXRzIGVuY29kaW5nIG1heSBiZSBzaWduaWZpY2FudCkuXG4gIGlmICgoaXNFeHRlcm5hbCB8fCBoYXNBbmdsZUJyYWNrZXRzKSAmJiAhaXNGaWxlVXJsKHVybCkpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHVybCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGRlY29kZSBVUkwgJHt1cmx9YCwgZXJyb3IpO1xuICAgIHJldHVybiB1cmw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdEFsaWFzKHBhcmFtczogRXh0cmFjdEFsaWFzUGFyYW1zKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgeyAkc3RyaW5nLCBhbGlhc0VuZE9mZnNldCwgYWxpYXNTdGFydE9mZnNldCB9ID0gcGFyYW1zO1xuICByZXR1cm4gYWxpYXNTdGFydE9mZnNldCA8IGFsaWFzRW5kT2Zmc2V0XG4gICAgPyAkc3RyaW5nLnNsaWNlKGFsaWFzU3RhcnRPZmZzZXQsIGFsaWFzRW5kT2Zmc2V0KVxuICAgIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0VGV4dExpbmtzKHBhcmFtczogRXh0cmFjdFRleHRMaW5rc1BhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7ICRzdHJpbmcsIGVuZE9mZnNldCwgc2hvdWxkUmVjb2duaXplV3d3QXV0b2xpbmtMaXRlcmFscywgc3RhcnRPZmZzZXQsIHRleHRMaW5rcyB9ID0gcGFyYW1zO1xuICBpZiAoc3RhcnRPZmZzZXQgPiBlbmRPZmZzZXQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB0ZXh0UGFydCA9ICRzdHJpbmcuc2xpY2Uoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCArIDEpO1xuICBjb25zdCBzY2hlbWVMaW5rczogUGFyc2VMaW5rUmVzdWx0W10gPSBbXTtcbiAgcmVwbGFjZUFsbCh7XG4gICAgJHN0cmluZzogdGV4dFBhcnQsXG4gICAgcmVwbGFjZXI6ICh7IGNhcHR1cmVkR3JvdXBBcmd1bWVudHM6IFtyYXdVcmwgPSAnJ10sIG9mZnNldCB9KSA9PiB7XG4gICAgICBpZiAoIWlzVXJsKHJhd1VybCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBEZWNvZGUgYmFyZSBgZmlsZTovL2AgVVJMcyBsaWtlIHRoZSBicmFja2V0ZWQgcGF0aCAoYHBhcnNlTGlua05vZGVgKSBkb2VzLlxuICAgICAgLy8gT2Zmc2V0cyBhbmQgYHJhd2Agc3RheSBiYXNlZCBvbiB0aGUgb3JpZ2luYWwgKHBvc3NpYmx5IHBlcmNlbnQtZW5jb2RlZCkgdGV4dC5cbiAgICAgIGNvbnN0IHVybCA9IGRlY29kZVVybFNhZmVseSh7XG4gICAgICAgIGhhc0FuZ2xlQnJhY2tldHM6IGZhbHNlLFxuICAgICAgICBpc0V4dGVybmFsOiB0cnVlLFxuICAgICAgICB1cmw6IHJhd1VybFxuICAgICAgfSk7XG4gICAgICBzY2hlbWVMaW5rcy5wdXNoKHtcbiAgICAgICAgZW5jb2RlZFVybDogZW5jb2RlVXJsKHVybCksXG4gICAgICAgIGVuZE9mZnNldDogc3RhcnRPZmZzZXQgKyBvZmZzZXQgKyByYXdVcmwubGVuZ3RoLFxuICAgICAgICBoYXNBbmdsZUJyYWNrZXRzOiBmYWxzZSxcbiAgICAgICAgaXNFbWJlZDogZmFsc2UsXG4gICAgICAgIGlzRXh0ZXJuYWw6IHRydWUsXG4gICAgICAgIGlzRmlsZVVybDogaXNGaWxlVXJsKHVybCksXG4gICAgICAgIGlzV2lraWxpbms6IGZhbHNlLFxuICAgICAgICByYXc6IHJhd1VybCxcbiAgICAgICAgc3RhcnRPZmZzZXQ6IHN0YXJ0T2Zmc2V0ICsgb2Zmc2V0LFxuICAgICAgICB1cmxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgc2VhcmNoVmFsdWU6IC8oPzxVcmw+XFxTKykvZ1xuICB9KTtcbiAgdGV4dExpbmtzLnB1c2goLi4uc2NoZW1lTGlua3MpO1xuXG4gIGlmICghc2hvdWxkUmVjb2duaXplV3d3QXV0b2xpbmtMaXRlcmFscykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvciAoY29uc3QgbWF0Y2ggb2YgdGV4dFBhcnQubWF0Y2hBbGwoV1dXX0FVVE9MSU5LX0xJVEVSQUxfQ0FORElEQVRFX1JFR19FWFApKSB7XG4gICAgY29uc3QgY2FuZGlkYXRlID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ0xpdGVyYWwnKTtcbiAgICBjb25zdCBsaXRlcmFsID0gdHJpbVd3d0F1dG9saW5rTGl0ZXJhbChjYW5kaWRhdGUpO1xuICAgIGlmICghaXNWYWxpZFd3d0F1dG9saW5rTGl0ZXJhbChsaXRlcmFsKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgbGl0ZXJhbFN0YXJ0T2Zmc2V0ID0gc3RhcnRPZmZzZXQgKyBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCAtIGNhbmRpZGF0ZS5sZW5ndGg7XG4gICAgY29uc3QgbGl0ZXJhbEVuZE9mZnNldCA9IGxpdGVyYWxTdGFydE9mZnNldCArIGxpdGVyYWwubGVuZ3RoO1xuICAgIGlmIChzY2hlbWVMaW5rcy5zb21lKChsaW5rKSA9PiBsaW5rLnN0YXJ0T2Zmc2V0IDwgbGl0ZXJhbEVuZE9mZnNldCAmJiBsaXRlcmFsU3RhcnRPZmZzZXQgPCBsaW5rLmVuZE9mZnNldCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGhhc0FuZ2xlQnJhY2tldHMgPSAkc3RyaW5nW2xpdGVyYWxTdGFydE9mZnNldCAtIDFdID09PSAnPCcgJiYgJHN0cmluZ1tsaXRlcmFsRW5kT2Zmc2V0XSA9PT0gJz4nO1xuICAgIGNvbnN0IGxpbmtTdGFydE9mZnNldCA9IGhhc0FuZ2xlQnJhY2tldHMgPyBsaXRlcmFsU3RhcnRPZmZzZXQgLSAxIDogbGl0ZXJhbFN0YXJ0T2Zmc2V0O1xuICAgIGNvbnN0IGxpbmtFbmRPZmZzZXQgPSBoYXNBbmdsZUJyYWNrZXRzID8gbGl0ZXJhbEVuZE9mZnNldCArIDEgOiBsaXRlcmFsRW5kT2Zmc2V0O1xuICAgIGNvbnN0IHVybCA9IFdXV19BVVRPTElOS19MSVRFUkFMX1NDSEVNRSArIGxpdGVyYWw7XG4gICAgdGV4dExpbmtzLnB1c2goe1xuICAgICAgZW5jb2RlZFVybDogZW5jb2RlVXJsKHVybCksXG4gICAgICBlbmRPZmZzZXQ6IGxpbmtFbmRPZmZzZXQsXG4gICAgICBoYXNBbmdsZUJyYWNrZXRzLFxuICAgICAgaXNFbWJlZDogZmFsc2UsXG4gICAgICBpc0V4dGVybmFsOiB0cnVlLFxuICAgICAgaXNGaWxlVXJsOiBmYWxzZSxcbiAgICAgIGlzV2lraWxpbms6IGZhbHNlLFxuICAgICAgcmF3OiAkc3RyaW5nLnNsaWNlKGxpbmtTdGFydE9mZnNldCwgbGlua0VuZE9mZnNldCksXG4gICAgICBzdGFydE9mZnNldDogbGlua1N0YXJ0T2Zmc2V0LFxuICAgICAgdXJsXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UmF3TGluayhub2RlOiBOb2RlLCAkc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwb3MgPSBlbnN1cmVOb25OdWxsYWJsZShub2RlLnBvc2l0aW9uKTtcbiAgcmV0dXJuICRzdHJpbmcuc2xpY2UocG9zLnN0YXJ0Lm9mZnNldCwgcG9zLmVuZC5vZmZzZXQpO1xufVxuXG4vKipcbiAqIFJlYWRzIGEgd2hvbGUgdmFsdWUgYXMgb25lIGxpbmssIGFzIE9ic2lkaWFuIHJlYWRzIGEgZnJvbnRtYXR0ZXIgdmFsdWUuIE9ic2lkaWFuIHRha2VzIGEgdmFsdWUgdGhhdFxuICogc3RhcnRzIHdpdGggYFtgIGFuZCBlbmRzIHdpdGggYF0odXJsKWAgYXMgYSBzaW5nbGUgbGluayBjYXB0aW9uZWQgYnkgZXZlcnl0aGluZyBpbiBiZXR3ZWVuLCBzbyBhIGNhcHRpb25cbiAqIGhvbGRpbmcgYW4gdW5iYWxhbmNlZCBicmFja2V0IChgW0EgWyBCXSh0Lm1kKWAsIGBbYV0gW2JdKGMubWQpYCwgYFthXWJdKGMubWQpYCkgaXMgc3RpbGwgb25lIGxpbmtcbiAqIHRoZXJlLCB3aGVyZSBDb21tb25NYXJrIGZpbmRzIGEgc2hvcnRlciBsaW5rIGF0IHRoZSBpbm5lciBgW2AsIG9yIG5vbmUgYXQgYWxsLiBBIHZhbHVlIENvbW1vbk1hcmsgcmVhZHNcbiAqIGFzIHR3byBvciBtb3JlIGxpbmtzIHN0YXlzIG11bHRpLWxpbmssIGJlY2F1c2Ugd2hhdCBPYnNpZGlhbiBtYWtlcyBvZiB0aG9zZSBpcyBnYXJiYWdlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgdmFsdWUgYW5kIGl0cyBsaW5rcy5cbiAqIEByZXR1cm5zIFRoZSBsaW5rIHNwYW5uaW5nIHRoZSB3aG9sZSB2YWx1ZSwgb3IgYG51bGxgIGlmIHRoZSB2YWx1ZSBpcyBub3QgYSBzaW5nbGUgbGluay5cbiAqL1xuZnVuY3Rpb24gZ2V0V2hvbGVWYWx1ZUxpbmsocGFyYW1zOiBHZXRXaG9sZVZhbHVlTGlua1BhcmFtcyk6IG51bGwgfCBQYXJzZUxpbmtSZXN1bHQge1xuICBjb25zdCB7IGxpbmtzLCBvcHRpb25zLCB2YWx1ZSB9ID0gcGFyYW1zO1xuICBjb25zdCBbZmlyc3RMaW5rXSA9IGxpbmtzO1xuICBpZiAobGlua3MubGVuZ3RoID09PSAxICYmIGZpcnN0TGluaz8ucmF3ID09PSB2YWx1ZSkge1xuICAgIHJldHVybiBmaXJzdExpbms7XG4gIH1cblxuICBpZiAoIXZhbHVlLnN0YXJ0c1dpdGgoJ1snKSB8fCBsaW5rcy5sZW5ndGggPiAxKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoZmlyc3RMaW5rKSB7XG4gICAgLy8gT25seSBhIG1hcmtkb3duIGxpbmsgd2lkZW5zOiBhIHdpa2lsaW5rLCBhbiBlbWJlZCwgYSBiYXJlIFVSTCBvciBhbiBhdXRvbGluayBkb2VzIG5vdC5cbiAgICBpZiAoZmlyc3RMaW5rLmlzV2lraWxpbmsgfHwgIWZpcnN0TGluay5yYXcuc3RhcnRzV2l0aCgnWycpIHx8IGZpcnN0TGluay5lbmRPZmZzZXQgIT09IHZhbHVlLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdpZGVuVG9XaG9sZVZhbHVlKHtcbiAgICAgIGNhcHRpb25FbmRPZmZzZXQ6IGZpcnN0TGluay5zdGFydE9mZnNldCArIDEgKyAoZmlyc3RMaW5rLmFsaWFzPy5sZW5ndGggPz8gMCksXG4gICAgICBsaW5rOiBmaXJzdExpbmssXG4gICAgICB2YWx1ZVxuICAgIH0pO1xuICB9XG5cbiAgLy8gTm8gbGluayBhdCBhbGwsIGFzIGluIGBbYV1iXShjLm1kKWA6IGhpZGUgdGhlIGNhcHRpb24ncyBicmFja2V0cyBzbyBDb21tb25NYXJrIHNlZXMgb25lIGxpbmsuXG4gIGNvbnN0IGNhcHRpb25FbmRPZmZzZXQgPSB2YWx1ZS5sYXN0SW5kZXhPZignXSgnKTtcbiAgaWYgKGNhcHRpb25FbmRPZmZzZXQgPT09IC0xKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBtYXNrZWRWYWx1ZSA9IGBbJHt2YWx1ZS5zbGljZSgxLCBjYXB0aW9uRW5kT2Zmc2V0KS5yZXBsYWNlQWxsKC9bW1xcXV0vZywgJ0AnKX0ke3ZhbHVlLnNsaWNlKGNhcHRpb25FbmRPZmZzZXQpfWA7XG4gIGNvbnN0IG1hc2tlZExpbmtzID0gcGFyc2VMaW5rcyhtYXNrZWRWYWx1ZSwgb3B0aW9ucyk7XG4gIGNvbnN0IFttYXNrZWRMaW5rXSA9IG1hc2tlZExpbmtzO1xuICByZXR1cm4gbWFza2VkTGlua3MubGVuZ3RoID09PSAxICYmIG1hc2tlZExpbms/LnJhdyA9PT0gbWFza2VkVmFsdWVcbiAgICA/IHdpZGVuVG9XaG9sZVZhbHVlKHsgY2FwdGlvbkVuZE9mZnNldCwgbGluazogbWFza2VkTGluaywgdmFsdWUgfSlcbiAgICA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIGhhc0FuZ2xlQnJhY2tldHNJbkxpbmsocGFyYW1zOiBIYXNBbmdsZUJyYWNrZXRzSW5MaW5rUGFyYW1zKTogYm9vbGVhbiB7XG4gIGNvbnN0IHsgcmF3LCByYXdVcmwgfSA9IHBhcmFtcztcbiAgY29uc3QgT1BFTl9BTkdMRV9CUkFDS0VUID0gJzwnO1xuICByZXR1cm4gcmF3LnN0YXJ0c1dpdGgoT1BFTl9BTkdMRV9CUkFDS0VUKSB8fCByYXdVcmwuc3RhcnRzV2l0aChPUEVOX0FOR0xFX0JSQUNLRVQpO1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkV3d3QXV0b2xpbmtMaXRlcmFsKGxpdGVyYWw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBkb21haW4gPSBXV1dfQVVUT0xJTktfTElURVJBTF9ET01BSU5fUkVHX0VYUC5leGVjKGxpdGVyYWwpPy5bMF07XG4gIGlmIChkb21haW4gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEdGTTogbm8gdW5kZXJzY29yZSBpbiB0aGUgbGFzdCB0d28gc2VnbWVudHMgb2YgdGhlIGRvbWFpbi5cbiAgY29uc3QgTEFTVF9TRUdNRU5UU19DT1VOVCA9IDI7XG4gIHJldHVybiBkb21haW4uc3BsaXQoJy4nKS5zbGljZSgtTEFTVF9TRUdNRU5UU19DT1VOVCkuZXZlcnkoKHNlZ21lbnQpID0+ICFzZWdtZW50LmluY2x1ZGVzKCdfJykpO1xufVxuXG5mdW5jdGlvbiBvZmZzZXRUb0xvYyhjb250ZW50OiBzdHJpbmcsIG9mZnNldDogbnVtYmVyKTogTG9jIHtcbiAgY29uc3QgcHJlY2VkaW5nQ29udGVudCA9IGNvbnRlbnQuc2xpY2UoMCwgb2Zmc2V0KTtcbiAgY29uc3QgbGluZSA9IChwcmVjZWRpbmdDb250ZW50Lm1hdGNoKC9cXG4vZykgPz8gW10pLmxlbmd0aDtcbiAgY29uc3QgbGFzdE5ld2xpbmVPZmZzZXQgPSBwcmVjZWRpbmdDb250ZW50Lmxhc3RJbmRleE9mKCdcXG4nKTtcbiAgcmV0dXJuIHtcbiAgICBjb2w6IG9mZnNldCAtIChsYXN0TmV3bGluZU9mZnNldCArIDEpLFxuICAgIGxpbmUsXG4gICAgb2Zmc2V0XG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlTGlua05vZGUobm9kZTogTGluaywgJHN0cmluZzogc3RyaW5nKTogUGFyc2VMaW5rUmVzdWx0IHtcbiAgY29uc3QgTElOS19BTElBU19TVUZGSVggPSAnXSgnO1xuICBjb25zdCBMSU5LX1NVRkZJWCA9ICcpJztcbiAgY29uc3QgcmF3ID0gZ2V0UmF3TGluayhub2RlLCAkc3RyaW5nKTtcbiAgY29uc3QgcG9zaXRpb24gPSBlbnN1cmVOb25OdWxsYWJsZShub2RlLnBvc2l0aW9uKTtcbiAgY29uc3Qgbm9kZUVuZE9mZnNldCA9IGVuc3VyZU5vbk51bGxhYmxlKHBvc2l0aW9uLmVuZC5vZmZzZXQpO1xuICBjb25zdCBub2RlU3RhcnRPZmZzZXQgPSBlbnN1cmVOb25OdWxsYWJsZShwb3NpdGlvbi5zdGFydC5vZmZzZXQpO1xuICAvLyBBbiBlbXB0eSBsYWJlbCAoYFtdKC4uLilgKSBoYXMgbm8gY2hpbGRyZW4sIHNvIGl0IHN0YXJ0cyBhbmQgZW5kcyBqdXN0IGFmdGVyIHRoZSBub2RlJ3Mgb3duIGBbYC4gQW4gZW1iZWQncyBgIWAgaXMgb3V0c2lkZSB0aGUgbm9kZSwgc2luY2UgYHBhcnNlTGlua3NgIG1hc2tzIGl0IGJlZm9yZSBwYXJzaW5nLlxuICBjb25zdCBlbXB0eUFsaWFzT2Zmc2V0ID0gbm9kZVN0YXJ0T2Zmc2V0ICsgMTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vYmV0dGVyLWRvbS10cmF2ZXJzaW5nIC0tIGBub2RlYCBpcyBhbiBtZGFzdCBub2RlLCBub3QgYSBET00gbm9kZS4gSXQgaGFzIG5vIGBmaXJzdEVsZW1lbnRDaGlsZGA7IHRoZSBydWxlIG1hdGNoZXMgdGhlIGAuY2hpbGRyZW5bMF1gIHNoYXBlIHdpdGhvdXQgY2hlY2tpbmcgd2hhdCBpdCBpcyBvbi5cbiAgY29uc3QgYWxpYXNOb2RlU3RhcnRPZmZzZXQgPSBub2RlLmNoaWxkcmVuWzBdPy5wb3NpdGlvbj8uc3RhcnQub2Zmc2V0ID8/IGVtcHR5QWxpYXNPZmZzZXQ7XG4gIGNvbnN0IGFsaWFzTm9kZUVuZE9mZnNldCA9IG5vZGUuY2hpbGRyZW4uYXQoLTEpPy5wb3NpdGlvbj8uZW5kLm9mZnNldCA/PyBlbXB0eUFsaWFzT2Zmc2V0O1xuICBjb25zdCByYXdVcmwgPSAkc3RyaW5nLnNsaWNlKGFsaWFzTm9kZUVuZE9mZnNldCArIExJTktfQUxJQVNfU1VGRklYLmxlbmd0aCwgbm9kZUVuZE9mZnNldCAtIExJTktfU1VGRklYLmxlbmd0aCk7XG4gIGNvbnN0IGhhc0FuZ2xlQnJhY2tldHMgPSBoYXNBbmdsZUJyYWNrZXRzSW5MaW5rKHtcbiAgICByYXcsXG4gICAgcmF3VXJsXG4gIH0pO1xuICBjb25zdCBpc0V4dGVybmFsID0gaXNVcmwobm9kZS51cmwpO1xuICBjb25zdCB1cmwgPSBkZWNvZGVVcmxTYWZlbHkoe1xuICAgIGhhc0FuZ2xlQnJhY2tldHMsXG4gICAgaXNFeHRlcm5hbCxcbiAgICB1cmw6IG5vZGUudXJsXG4gIH0pO1xuICBjb25zdCBhbGlhcyA9IGV4dHJhY3RBbGlhcyh7XG4gICAgJHN0cmluZyxcbiAgICBhbGlhc0VuZE9mZnNldDogYWxpYXNOb2RlRW5kT2Zmc2V0LFxuICAgIGFsaWFzU3RhcnRPZmZzZXQ6IGFsaWFzTm9kZVN0YXJ0T2Zmc2V0XG4gIH0pO1xuICByZXR1cm4gbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFBhcnNlTGlua1Jlc3VsdD4oe1xuICAgIGFsaWFzLFxuICAgIGVuY29kZWRVcmw6IGlzRXh0ZXJuYWwgPyBlbmNvZGVVcmwodXJsKSA6IHVuZGVmaW5lZCxcbiAgICBlbmRPZmZzZXQ6IG5vZGVFbmRPZmZzZXQsXG4gICAgaGFzQW5nbGVCcmFja2V0cyxcbiAgICBpc0VtYmVkOiBmYWxzZSxcbiAgICBpc0V4dGVybmFsLFxuICAgIGlzRmlsZVVybDogaXNGaWxlVXJsKHVybCksXG4gICAgaXNXaWtpbGluazogZmFsc2UsXG4gICAgcmF3LFxuICAgIHN0YXJ0T2Zmc2V0OiBub2RlU3RhcnRPZmZzZXQsXG4gICAgdGl0bGU6IG5vZGUudGl0bGUgPz8gdW5kZWZpbmVkLFxuICAgIHVuZXNjYXBlZEFsaWFzOiBhbGlhcyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdW5lc2NhcGVBbGlhcyhhbGlhcyksXG4gICAgdXJsXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdpa2lsaW5rTm9kZShub2RlOiBXaWtpTGlua05vZGUsICRzdHJpbmc6IHN0cmluZyk6IFBhcnNlTGlua1Jlc3VsdCB7XG4gIGNvbnN0IHBvc2l0aW9uID0gZW5zdXJlTm9uTnVsbGFibGUobm9kZS5wb3NpdGlvbik7XG4gIHJldHVybiBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8UGFyc2VMaW5rUmVzdWx0Pih7XG4gICAgYWxpYXM6ICRzdHJpbmcuaW5jbHVkZXMoV0lLSUxJTktfRElWSURFUikgPyBub2RlLmRhdGEuYWxpYXMgOiB1bmRlZmluZWQsXG4gICAgZW5kT2Zmc2V0OiBlbnN1cmVOb25OdWxsYWJsZShwb3NpdGlvbi5lbmQub2Zmc2V0KSxcbiAgICBpc0VtYmVkOiBmYWxzZSxcbiAgICBpc0V4dGVybmFsOiBmYWxzZSxcbiAgICBpc0ZpbGVVcmw6IGZhbHNlLFxuICAgIGlzV2lraWxpbms6IHRydWUsXG4gICAgcmF3OiBnZXRSYXdMaW5rKG5vZGUsICRzdHJpbmcpLFxuICAgIHN0YXJ0T2Zmc2V0OiBlbnN1cmVOb25OdWxsYWJsZShwb3NpdGlvbi5zdGFydC5vZmZzZXQpLFxuICAgIHVybDogbm9kZS52YWx1ZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gdHJpbVd3d0F1dG9saW5rTGl0ZXJhbChsaXRlcmFsOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB0cmltbWVkID0gdHJpbVd3d0F1dG9saW5rTGl0ZXJhbEVuZChsaXRlcmFsKTtcbiAgcmV0dXJuIHRyaW1tZWQgPT09IGxpdGVyYWwgPyBsaXRlcmFsIDogdHJpbVd3d0F1dG9saW5rTGl0ZXJhbCh0cmltbWVkKTtcbn1cblxuZnVuY3Rpb24gdHJpbVd3d0F1dG9saW5rTGl0ZXJhbEVuZChsaXRlcmFsOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBsYXN0Q2hhcmFjdGVyID0gbGl0ZXJhbC5zbGljZSgtMSk7XG4gIGlmIChXV1dfQVVUT0xJTktfTElURVJBTF9UUkFJTElOR19QVU5DVFVBVElPTi5oYXMobGFzdENoYXJhY3RlcikpIHtcbiAgICByZXR1cm4gbGl0ZXJhbC5zbGljZSgwLCAtMSk7XG4gIH1cblxuICAvLyBHRk06IGEgY2xvc2luZyBwYXJlbnRoZXNpcyB3aXRoIG5vIG9wZW5pbmcgb25lIHRvIG1hdGNoIGlzIG5vdCBwYXJ0IG9mIHRoZSBsaXRlcmFsLlxuICByZXR1cm4gbGFzdENoYXJhY3RlciA9PT0gJyknICYmIGNvdW50T2NjdXJyZW5jZXMobGl0ZXJhbCwgJyknKSA+IGNvdW50T2NjdXJyZW5jZXMobGl0ZXJhbCwgJygnKVxuICAgID8gbGl0ZXJhbC5zbGljZSgwLCAtMSlcbiAgICA6IGxpdGVyYWwucmVwbGFjZShUUkFJTElOR19FTlRJVFlfUkVGRVJFTkNFX1JFR19FWFAsICcnKTtcbn1cblxuZnVuY3Rpb24gd2lkZW5Ub1dob2xlVmFsdWUocGFyYW1zOiBXaWRlblRvV2hvbGVWYWx1ZVBhcmFtcyk6IFBhcnNlTGlua1Jlc3VsdCB7XG4gIGNvbnN0IHsgY2FwdGlvbkVuZE9mZnNldCwgbGluaywgdmFsdWUgfSA9IHBhcmFtcztcbiAgLy8gTmV2ZXIgZW1wdHk6IGEgdmFsdWUgd2hvc2UgY2FwdGlvbiBpcyBlbXB0eSwgYFtdKHVybClgLCBpcyBhIGxpbmsgQ29tbW9uTWFyayBhbHJlYWR5IHNwYW5zIHdob2xlLlxuICBjb25zdCBhbGlhcyA9IHZhbHVlLnNsaWNlKDEsIGNhcHRpb25FbmRPZmZzZXQpO1xuICByZXR1cm4ge1xuICAgIC4uLmxpbmssXG4gICAgYWxpYXMsXG4gICAgZW5kT2Zmc2V0OiB2YWx1ZS5sZW5ndGgsXG4gICAgcmF3OiB2YWx1ZSxcbiAgICBzdGFydE9mZnNldDogMCxcbiAgICB1bmVzY2FwZWRBbGlhczogdW5lc2NhcGVBbGlhcyhhbGlhcylcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWlCQSwwQkFBNEM7QUFDNUMscUJBQXVDO0FBQ3ZDLG9CQUEyQjtBQUMzQix5QkFBa0M7QUFDbEMsaUJBSU87QUFDUCw2QkFBdUM7QUFDdkMsb0JBQXVCO0FBQ3ZCLDBCQUF3QjtBQUN4Qiw4QkFBK0I7QUFDL0IsOEJBQXNCO0FBS3RCLE1BQU0sc0NBQXNDO0FBRTVDLE1BQU0sbUJBQW1CO0FBYXpCLE1BQU0seUNBQXlDO0FBTS9DLE1BQU0sc0NBQXNDO0FBSzVDLE1BQU0sNENBQTRDLG9CQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEdBQUcsQ0FBQztBQUtsRyxNQUFNLG9DQUFvQztBQUsxQyxNQUFNLDhCQUE4QjtBQWtZcEMsTUFBTSx1QkFBdUI7QUFB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
564
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYXJzZS1saW5rLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUaGlzIG1vZHVsZSBwcm92aWRlcyB1dGlsaXRpZXMgZm9yIHBhcnNpbmcgbWFya2Rvd24gYW5kIHdpa2kgbGlua3MgaW50byBzdHJ1Y3R1cmVkIGRhdGEsIGFuZCBmb3JcbiAqIGVzY2FwaW5nLCB1bmVzY2FwaW5nLCBhbmQgZW5jb2RpbmcgbGluayBjb21wb25lbnRzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgR2VuZXJpY09iamVjdCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQgdHlwZSB7IExpbmsgfSBmcm9tICdtZGFzdCc7XG5pbXBvcnQgdHlwZSB7XG4gIEZyb250bWF0dGVyTGlua0NhY2hlLFxuICBMb2MsXG4gIFJlZmVyZW5jZSxcbiAgUmVmZXJlbmNlQ2FjaGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBOb2RlIH0gZnJvbSAndW5pc3QnO1xuXG5pbXBvcnQgeyBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXMgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvb2JqZWN0LXV0aWxzJztcbmltcG9ydCB7IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcmVnLWV4cCc7XG5pbXBvcnQgeyByZXBsYWNlQWxsIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0cmluZyc7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQge1xuICBlbmNvZGVVcmwsXG4gIGlzRmlsZVVybCxcbiAgaXNVcmxcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3VybCc7XG5pbXBvcnQgeyBpc0Zyb250bWF0dGVyTGlua0NhY2hlIH0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdC9pbXBsZW1lbnRhdGlvbnMnO1xuaW1wb3J0IHsgcmVtYXJrIH0gZnJvbSAncmVtYXJrJztcbmltcG9ydCByZW1hcmtQYXJzZSBmcm9tICdyZW1hcmstcGFyc2UnO1xuaW1wb3J0IHsgd2lraUxpbmtQbHVnaW4gfSBmcm9tICdyZW1hcmstd2lraS1saW5rJztcbmltcG9ydCB7IHZpc2l0IH0gZnJvbSAndW5pc3QtdXRpbC12aXNpdCc7XG5cbi8qKlxuICogUmVndWxhciBleHByZXNzaW9uIGZvciBzcGVjaWFsIG1hcmtkb3duIGxpbmsgc3ltYm9scy5cbiAqL1xuY29uc3QgU1BFQ0lBTF9NQVJLRE9XTl9MSU5LX1NZTUJPTFNfUkVHRVggPSAvW1xcXFxbXFxdPD5fKn49YCRdL2c7XG5cbmNvbnN0IFdJS0lMSU5LX0RJVklERVIgPSAnfCc7XG5cbi8qKlxuICogTWF0Y2hlcyBhIGNhbmRpZGF0ZSBHRk0gZXh0ZW5kZWQgYHd3dy5gIGF1dG9saW5rIGxpdGVyYWw6IGB3d3cuYCBhdCB0aGUgc3RhcnQgb2YgdGhlIHRleHQgb3IgYWZ0ZXJcbiAqIHdoaXRlc3BhY2UsIGAqYCwgYF9gLCBgfmAsIGAoYCBvciBgPGAsIHJ1bm5pbmcgdXAgdG8gdGhlIG5leHQgd2hpdGVzcGFjZSwgYDxgIG9yIGA+YC4gR0ZNIGl0c2VsZlxuICoga2VlcHMgYSBjbG9zaW5nIGA+YCBpbiB0aGUgbGl0ZXJhbCAoT2JzaWRpYW4gcmVuZGVycyBgPHd3dy5leGFtcGxlLmNvbT5gIHdpdGggYW4gaHJlZiBlbmRpbmcgaW5cbiAqIGAlM0VgKTsgc3RvcHBpbmcgYmVmb3JlIGl0IGlzIGRlbGliZXJhdGUsIHNvIHRoZSBicmFja2V0cyBjYW4gYmUgcmVwb3J0ZWQgYXJvdW5kIHRoZSBsaXRlcmFsIGluc3RlYWQuXG4gKlxuICogVGhlIHByZWNlZGluZyBjaGFyYWN0ZXIgaXMgY29uc3VtZWQgYW5kIHRoZSBsaXRlcmFsIGNhcHR1cmVkIGFzIGBMaXRlcmFsYCwgYmVjYXVzZSBhIGxvb2tiZWhpbmQgaXMgYVxuICogc3ludGF4IGVycm9yIG9uIGlPUyBiZWZvcmUgMTYuNCwgYmVsb3cgdGhlIGlPUyAxNSBPYnNpZGlhbiBtb2JpbGUgc3RpbGwgc3VwcG9ydHMuIENvbnN1bWluZyBpdCBsb3NlcyBub1xuICogY2FuZGlkYXRlOiBhIG1hdGNoIGVuZHMgYmVmb3JlIHdoaXRlc3BhY2UsIGA8YCwgYD5gIG9yIHRoZSBlbmQsIHNvIHRoZSBjaGFyYWN0ZXIgYSBmb2xsb3dpbmcgY2FuZGlkYXRlXG4gKiBuZWVkcyBpcyBuZXZlciBwYXJ0IG9mIHRoZSBwcmV2aW91cyBtYXRjaC5cbiAqL1xuY29uc3QgV1dXX0FVVE9MSU5LX0xJVEVSQUxfQ0FORElEQVRFX1JFR19FWFAgPSAvKD86XnxbXFxzKCo8X35dKSg/PExpdGVyYWw+d3d3XFwuW15cXHM8Pl0qKS9nO1xuXG4vKipcbiAqIE1hdGNoZXMgdGhlIGRvbWFpbiBvZiBhIEdGTSBleHRlbmRlZCBgd3d3LmAgYXV0b2xpbmsgbGl0ZXJhbDogc2VnbWVudHMgb2YgbGV0dGVycywgZGlnaXRzLFxuICogdW5kZXJzY29yZXMgYW5kIGh5cGhlbnMgc2VwYXJhdGVkIGJ5IHBlcmlvZHMuXG4gKi9cbmNvbnN0IFdXV19BVVRPTElOS19MSVRFUkFMX0RPTUFJTl9SRUdfRVhQID0gL153d3coPzpcXC5bXFxwe0x9XFxwe059Xy1dKykrL3U7XG5cbi8qKlxuICogVGhlIGNoYXJhY3RlcnMgR0ZNIGRyb3BzIGZyb20gdGhlIGVuZCBvZiBhbiBleHRlbmRlZCBhdXRvbGluay5cbiAqL1xuY29uc3QgV1dXX0FVVE9MSU5LX0xJVEVSQUxfVFJBSUxJTkdfUFVOQ1RVQVRJT04gPSBuZXcgU2V0KFsnXycsICcsJywgJzonLCAnIScsICc/JywgJy4nLCAnKicsICd+J10pO1xuXG4vKipcbiAqIE1hdGNoZXMgYW4gZW50aXR5IHJlZmVyZW5jZSBhdCB0aGUgZW5kIG9mIGFuIGV4dGVuZGVkIGF1dG9saW5rLCB3aGljaCBHRk0gZHJvcHMuXG4gKi9cbmNvbnN0IFRSQUlMSU5HX0VOVElUWV9SRUZFUkVOQ0VfUkVHX0VYUCA9IC8mW1xcZEEtWmEtel0rOyQvO1xuXG4vKipcbiAqIFRoZSBzY2hlbWUgT2JzaWRpYW4gb3BlbnMgYSBHRk0gZXh0ZW5kZWQgYHd3dy5gIGF1dG9saW5rIGxpdGVyYWwgd2l0aC5cbiAqL1xuY29uc3QgV1dXX0FVVE9MSU5LX0xJVEVSQUxfU0NIRU1FID0gJ2h0dHA6Ly8nO1xuXG4vKipcbiAqIFRoZSByZXN1bHQgb2YgcGFyc2luZyB0aGUgbGlua3MgZnJvbSBhIG5vdGUncyBmcm9udG1hdHRlciB2aWEge0BsaW5rIHBhcnNlRnJvbnRtYXR0ZXJMaW5rc30uIEludGVybmFsXG4gKiBzaW5nbGUtbGluayBmcm9udG1hdHRlciB2YWx1ZXMgYXJlIG9taXR0ZWQsIGFzIE9ic2lkaWFuIG5hdGl2ZWx5IGNhY2hlcyB0aGVtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlRnJvbnRtYXR0ZXJMaW5rc1Jlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgZXh0ZXJuYWwgbGlua3MgcGFyc2VkIGZyb20gc2luZ2xlLWxpbmsgKHNpbmdsZS12YWx1ZSkgZnJvbnRtYXR0ZXIgdmFsdWVzLlxuICAgKi9cbiAgcmVhZG9ubHkgZnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzOiBQYXJzZUxpbmtGcm9udG1hdHRlclJlZmVyZW5jZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgZXh0ZXJuYWwgbGlua3MgcGFyc2VkIGZyb20gbXVsdGktbGluayAobXVsdGktdmFsdWUpIGZyb250bWF0dGVyIHZhbHVlcy5cbiAgICovXG4gIHJlYWRvbmx5IG11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3M6IFBhcnNlTGlua0Zyb250bWF0dGVyUmVmZXJlbmNlV2l0aE9mZnNldHNbXTtcblxuICAvKipcbiAgICogVGhlIGludGVybmFsIGxpbmtzIHBhcnNlZCBmcm9tIG11bHRpLWxpbmsgKG11bHRpLXZhbHVlKSBmcm9udG1hdHRlciB2YWx1ZXMuXG4gICAqL1xuICByZWFkb25seSBtdWx0aVZhbHVlRnJvbnRtYXR0ZXJMaW5rczogUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2VXaXRoT2Zmc2V0c1tdO1xufVxuXG4vKipcbiAqIEEge0BsaW5rIEZyb250bWF0dGVyTGlua0NhY2hlfSBmb3IgYSBsaW5rIHBhcnNlZCBmcm9tIGEgc2luZ2xlLWxpbmsgZnJvbnRtYXR0ZXIgdmFsdWUgdmlhXG4gKiB7QGxpbmsgcGFyc2VMaW5rc30uIEl0IGNhcnJpZXMgdGhlIGZ1bGwge0BsaW5rIFBhcnNlTGlua1Jlc3VsdH0gc28gY29uc3VtZXJzIGNhbiBpbnNwZWN0IHRoZSBwYXJzZVxuICogZGV0YWlscyB3aXRob3V0IHJlLXBhcnNpbmcgdGhlIGxpbmsuIFVzZSB0aGlzIHdoZW4gdGhlIHdob2xlIGZyb250bWF0dGVyIHZhbHVlIGlzIGEgc2luZ2xlIGxpbmsuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2UgZXh0ZW5kcyBGcm9udG1hdHRlckxpbmtDYWNoZSB7XG4gIC8qKlxuICAgKiBUaGUgcmVzdWx0IG9mIHBhcnNpbmcgdGhlIGxpbmsuXG4gICAqL1xuICByZWFkb25seSBwYXJzZUxpbmtSZXN1bHQ6IFBhcnNlTGlua1Jlc3VsdDtcbn1cblxuLyoqXG4gKiBBIHtAbGluayBQYXJzZUxpbmtGcm9udG1hdHRlclJlZmVyZW5jZX0gZm9yIGEgbGluayBwYXJzZWQgZnJvbSBhIG11bHRpLWxpbmsgZnJvbnRtYXR0ZXIgdmFsdWUgdmlhXG4gKiB7QGxpbmsgcGFyc2VMaW5rc30sIGFkZGl0aW9uYWxseSBjYXJyeWluZyB0aGUgb2Zmc2V0cyBvZiB0aGUgbGluayB3aXRoaW4gdGhlIGZyb250bWF0dGVyIHZhbHVlLiBVc2VcbiAqIHRoaXMgd2hlbiB0aGUgZnJvbnRtYXR0ZXIgdmFsdWUgaG9sZHMgbXVsdGlwbGUgbGlua3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2VXaXRoT2Zmc2V0cyBleHRlbmRzIFBhcnNlTGlua0Zyb250bWF0dGVyUmVmZXJlbmNlIHtcbiAgLyoqXG4gICAqIEFuIGVuZCBvZmZzZXQgb2YgdGhlIGxpbmsgaW4gdGhlIGZyb250bWF0dGVyIHZhbHVlLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5kT2Zmc2V0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEEgc3RhcnQgb2Zmc2V0IG9mIHRoZSBsaW5rIGluIHRoZSBmcm9udG1hdHRlciB2YWx1ZS5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0T2Zmc2V0OiBudW1iZXI7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHBhcnNlTGlua30uIFRoZSBzYW1lIGFzIHtAbGluayBQYXJzZUxpbmtzT3B0aW9uc30uXG4gKi9cbmV4cG9ydCB0eXBlIFBhcnNlTGlua09wdGlvbnMgPSBQYXJzZUxpbmtzT3B0aW9ucztcblxuLyoqXG4gKiBBIHtAbGluayBSZWZlcmVuY2VDYWNoZX0gZm9yIGEgbGluayBwYXJzZWQgZnJvbSBjb250ZW50IHZpYSB7QGxpbmsgcGFyc2VMaW5rc30uIEl0IGNhcnJpZXMgdGhlIGZ1bGxcbiAqIHtAbGluayBQYXJzZUxpbmtSZXN1bHR9IHNvIGNvbnN1bWVycyBjYW4gaW5zcGVjdCB0aGUgcGFyc2UgZGV0YWlscyB3aXRob3V0IHJlLXBhcnNpbmcgdGhlIGxpbmsuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VMaW5rUmVmZXJlbmNlIGV4dGVuZHMgUmVmZXJlbmNlQ2FjaGUge1xuICAvKipcbiAgICogVGhlIHJlc3VsdCBvZiBwYXJzaW5nIHRoZSBsaW5rLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyc2VMaW5rUmVzdWx0OiBQYXJzZUxpbmtSZXN1bHQ7XG59XG5cbi8qKlxuICogQSByZXN1bHQgb2YgcGFyc2luZyBhIGxpbmsuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VMaW5rUmVzdWx0IHtcbiAgLyoqXG4gICAqIEFuIGFsaWFzIG9mIHRoZSBsaW5rLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBcbiAgICogW1xcKmFsaWFzXFwqXShsaW5rLm1kKSAtPiBcXCphbGlhc1xcKlxuICAgKiBgYGBcbiAgICovXG4gIHJlYWRvbmx5IGFsaWFzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBlbmNvZGVkIFVSTCBvZiB0aGUgbGluay5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgXG4gICAqIFthbGlhc10oPGxpbmsgd2l0aCBzcGFjZS5tZD4pIC0+IGxpbmslMjB3aXRoJTIwc3BhY2UubWRcbiAgICogYGBgXG4gICAqL1xuICByZWFkb25seSBlbmNvZGVkVXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBlbmQgb2Zmc2V0IG9mIHRoZSBsaW5rIGluIHRoZSBvcmlnaW5hbCB0ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgZW5kT2Zmc2V0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgbGluayBoYXMgYW5nbGUgYnJhY2tldHMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYFxuICAgKiBbYWxpYXNdKDxsaW5rLm1kPikgLT4gdHJ1ZVxuICAgKiBbYWxpYXNdKGxpbmsubWQpIC0+IGZhbHNlXG4gICAqIGBgYFxuICAgKi9cbiAgcmVhZG9ubHkgaGFzQW5nbGVCcmFja2V0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgbGluayBpcyBhbiBlbWJlZCBsaW5rLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBcbiAgICogIVtbYWxpYXNdXSAtPiB0cnVlXG4gICAqIFtbYWxpYXNdXSAtPiBmYWxzZVxuICAgKiBgYGBcbiAgICovXG4gIHJlYWRvbmx5IGlzRW1iZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgbGluayBpcyBleHRlcm5hbC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgXG4gICAqIFthbGlhc10oaHR0cHM6Ly9leGFtcGxlLmNvbSkgLT4gdHJ1ZVxuICAgKiBbYWxpYXNdKGZpbGUubWQpIC0+IGZhbHNlXG4gICAqIGBgYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNFeHRlcm5hbDogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBsaW5rIGlzIGEgYGZpbGU6Ly9gIFVSTC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgXG4gICAqIFthbGlhc10oZmlsZTovLy9DOi94LnR4dCkgLT4gdHJ1ZVxuICAgKiBbYWxpYXNdKGh0dHBzOi8vZXhhbXBsZS5jb20pIC0+IGZhbHNlXG4gICAqIGBgYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNGaWxlVXJsOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGxpbmsgaXMgYSB3aWtpbGluay5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgXG4gICAqIFtbYWxpYXNdXSAtPiB0cnVlXG4gICAqIFthbGlhc10obGluay5tZCkgLT4gZmFsc2VcbiAgICogYGBgXG4gICAqL1xuICByZWFkb25seSBpc1dpa2lsaW5rOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIHJhdyBsaW5rIHRleHQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYFxuICAgKiBbYWxpYXNdKGxpbmsubWQpIC0+IFthbGlhc10obGluay5tZClcbiAgICogYGBgXG4gICAqL1xuICByZWFkb25seSByYXc6IHN0cmluZztcblxuICAvKipcbiAgICogQSBzdGFydCBvZmZzZXQgb2YgdGhlIGxpbmsgaW4gdGhlIG9yaWdpbmFsIHRleHQuXG4gICAqL1xuICByZWFkb25seSBzdGFydE9mZnNldDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBIHRpdGxlIG9mIHRoZSBsaW5rLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBcbiAgICogW2FsaWFzXShsaW5rLm1kIFwidGl0bGVcIikgLT4gdGl0bGVcbiAgICogYGBgXG4gICAqL1xuICByZWFkb25seSB0aXRsZT86IHN0cmluZztcblxuICAvKipcbiAgICogQW4gdW5lc2NhcGVkIGFsaWFzIG9mIHRoZSBsaW5rLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBcbiAgICogW1xcKmFsaWFzXFwqXShsaW5rLm1kKSAtPiAqYWxpYXMqXG4gICAqIGBgYFxuICAgKi9cbiAgcmVhZG9ubHkgdW5lc2NhcGVkQWxpYXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFuIFVSTCBvZiB0aGUgbGluay5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgXG4gICAqIFthbGlhc10obGluayUyMHdpdGglMjBzcGFjZS5tZCkgLT4gbGluayB3aXRoIHNwYWNlLm1kXG4gICAqIGBgYFxuICAgKi9cbiAgcmVhZG9ubHkgdXJsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHBhcnNlTGlua3N9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlTGlua3NPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVjb2duaXplIEdGTSBleHRlbmRlZCBgd3d3LmAgYXV0b2xpbmsgbGl0ZXJhbHMgKGB3d3cuZXhhbXBsZS5jb21gLCBhbHNvIGluc2lkZVxuICAgKiBgPC4uLj5gKSBhcyBleHRlcm5hbCBsaW5rcywgYXMgT2JzaWRpYW4gZG9lcyBpbiBhIG5vdGUncyBib2R5LiBPYnNpZGlhbiBkb2VzIG5vdCBsaW5rIHRoZW0gaW5cbiAgICogZnJvbnRtYXR0ZXIgdmFsdWVzLCBzbyB7QGxpbmsgcGFyc2VGcm9udG1hdHRlckxpbmtzfSB0dXJucyB0aGlzIG9mZi5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUmVjb2duaXplV3d3QXV0b2xpbmtMaXRlcmFscz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgdG9QYXJzZUxpbmtSZWZlcmVuY2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRvUGFyc2VMaW5rUmVmZXJlbmNlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IHRoZSBwYXJzZWQgbGluaydzIG9mZnNldHMgaW5kZXggaW50by4gVXNlZCB0byBjb21wdXRlIHRoZSBsaW5lIGFuZCBjb2x1bW4uXG4gICAqL1xuICByZWFkb25seSBjb250ZW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJzZWQgbGluayB0byB3cmFwLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyc2VMaW5rUmVzdWx0OiBQYXJzZUxpbmtSZXN1bHQ7XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgRnJvbnRtYXR0ZXJMaW5rc1BhcnNlci5jYXRlZ29yaXplfS5cbiAqL1xuaW50ZXJmYWNlIENhdGVnb3JpemVGcm9udG1hdHRlckxpbmtQYXJhbXMge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgd2hvbGUgZnJvbnRtYXR0ZXIgdmFsdWUgaXMgYSBzaW5nbGUgbGluay5cbiAgICovXG4gIHJlYWRvbmx5IGlzU2luZ2xlTGluazogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGtleSBwYXRoIG9mIHRoZSBmcm9udG1hdHRlciB2YWx1ZS5cbiAgICovXG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyc2VkIGxpbmsuXG4gICAqL1xuICByZWFkb25seSBwYXJzZUxpbmtSZXN1bHQ6IFBhcnNlTGlua1Jlc3VsdDtcblxuICAvKipcbiAgICogVGhlIGZyb250bWF0dGVyIHZhbHVlIHRoZSBsaW5rIHdhcyBwYXJzZWQgZnJvbS5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgZGVjb2RlVXJsU2FmZWx5fS5cbiAqL1xuaW50ZXJmYWNlIERlY29kZVVybFNhZmVseVBhcmFtcyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBsaW5rIHVzZXMgYW5nbGUgYnJhY2tldHMuXG4gICAqL1xuICByZWFkb25seSBoYXNBbmdsZUJyYWNrZXRzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBsaW5rIGlzIGV4dGVybmFsLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNFeHRlcm5hbDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBVUkwgdG8gZGVjb2RlLlxuICAgKi9cbiAgcmVhZG9ubHkgdXJsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgZXh0cmFjdEFsaWFzfS5cbiAqL1xuaW50ZXJmYWNlIEV4dHJhY3RBbGlhc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBBIHN0cmluZyB0byBleHRyYWN0IHRoZSBhbGlhcyBmcm9tLlxuICAgKi9cbiAgcmVhZG9ubHkgJHN0cmluZzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBlbmQgb2Zmc2V0IG9mIHRoZSBhbGlhcyBpbiB0aGUgc3RyaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgYWxpYXNFbmRPZmZzZXQ6IG51bWJlcjtcblxuICAvKipcbiAgICogQSBzdGFydCBvZmZzZXQgb2YgdGhlIGFsaWFzIGluIHRoZSBzdHJpbmcuXG4gICAqL1xuICByZWFkb25seSBhbGlhc1N0YXJ0T2Zmc2V0OiBudW1iZXI7XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgZXh0cmFjdFRleHRMaW5rc30uXG4gKi9cbmludGVyZmFjZSBFeHRyYWN0VGV4dExpbmtzUGFyYW1zIHtcbiAgLyoqXG4gICAqIEEgc3RyaW5nIHRvIGV4dHJhY3QgdGhlIHRleHQgbGlua3MgZnJvbS5cbiAgICovXG4gIHJlYWRvbmx5ICRzdHJpbmc6IHN0cmluZztcblxuICAvKipcbiAgICogQW4gZW5kIG9mZnNldCBvZiB0aGUgdGV4dCBwYXJ0IGluIHRoZSBzdHJpbmcuXG4gICAqL1xuICByZWFkb25seSBlbmRPZmZzZXQ6IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZWNvZ25pemUgR0ZNIGV4dGVuZGVkIGB3d3cuYCBhdXRvbGluayBsaXRlcmFscy5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFJlY29nbml6ZVd3d0F1dG9saW5rTGl0ZXJhbHM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgc3RhcnQgb2Zmc2V0IG9mIHRoZSB0ZXh0IHBhcnQgaW4gdGhlIHN0cmluZy5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0T2Zmc2V0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBwYXJzZWQgbGlua3MgdG8gYXBwZW5kIHRoZSBleHRyYWN0ZWQgdGV4dCBsaW5rcyB0by5cbiAgICovXG4gIHJlYWRvbmx5IHRleHRMaW5rczogUGFyc2VMaW5rUmVzdWx0W107XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgZ2V0V2hvbGVWYWx1ZUxpbmt9LlxuICovXG5pbnRlcmZhY2UgR2V0V2hvbGVWYWx1ZUxpbmtQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGxpbmtzIHtAbGluayBwYXJzZUxpbmtzfSBmb3VuZCBpbiB0aGUgdmFsdWUuXG4gICAqL1xuICByZWFkb25seSBsaW5rczogcmVhZG9ubHkgUGFyc2VMaW5rUmVzdWx0W107XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJzZSBvcHRpb25zIHRoZSBsaW5rcyB3ZXJlIGZvdW5kIHdpdGguXG4gICAqL1xuICByZWFkb25seSBvcHRpb25zOiBQYXJzZUxpbmtzT3B0aW9ucyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHZhbHVlIHRvIHJlYWQgYXMgb25lIGxpbmsuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtcyBmb3Ige0BsaW5rIGhhc0FuZ2xlQnJhY2tldHNJbkxpbmt9LlxuICovXG5pbnRlcmZhY2UgSGFzQW5nbGVCcmFja2V0c0luTGlua1BhcmFtcyB7XG4gIC8qKlxuICAgKiBBIHJhdyBsaW5rIHRleHQuXG4gICAqL1xuICByZWFkb25seSByYXc6IHN0cmluZztcblxuICAvKipcbiAgICogQSByYXcgVVJMIG9mIHRoZSBsaW5rLlxuICAgKi9cbiAgcmVhZG9ubHkgcmF3VXJsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgd2lkZW5Ub1dob2xlVmFsdWV9LlxuICovXG5pbnRlcmZhY2UgV2lkZW5Ub1dob2xlVmFsdWVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIG9mZnNldCBvZiB0aGUgYF0oYCB0aGF0IGVuZHMgdGhlIGNhcHRpb24uXG4gICAqL1xuICByZWFkb25seSBjYXB0aW9uRW5kT2Zmc2V0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBsaW5rIGZvdW5kIGF0IHRoZSBlbmQgb2YgdGhlIHZhbHVlLlxuICAgKi9cbiAgcmVhZG9ubHkgbGluazogUGFyc2VMaW5rUmVzdWx0O1xuXG4gIC8qKlxuICAgKiBUaGUgd2hvbGUgdmFsdWUuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgV2lraUxpbmtOb2RlIGV4dGVuZHMgTm9kZSB7XG4gIHJlYWRvbmx5IGRhdGE6IFdpa2lMaW5rTm9kZURhdGE7XG4gIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBXaWtpTGlua05vZGVEYXRhIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZWFkb25seSBhbGlhczogc3RyaW5nO1xufVxuXG5jbGFzcyBGcm9udG1hdHRlckxpbmtzUGFyc2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBmcm9udG1hdHRlckV4dGVybmFsTGlua3M6IFBhcnNlTGlua0Zyb250bWF0dGVyUmVmZXJlbmNlW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBtdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzOiBQYXJzZUxpbmtGcm9udG1hdHRlclJlZmVyZW5jZVdpdGhPZmZzZXRzW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBtdWx0aVZhbHVlRnJvbnRtYXR0ZXJMaW5rczogUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2VXaXRoT2Zmc2V0c1tdID0gW107XG5cbiAgcHVibGljIHBhcnNlKGZyb250bWF0dGVyOiB1bmtub3duKTogUGFyc2VGcm9udG1hdHRlckxpbmtzUmVzdWx0IHtcbiAgICB0aGlzLnBhcnNlVmFsdWUoZnJvbnRtYXR0ZXIsICcnKTtcbiAgICByZXR1cm4ge1xuICAgICAgZnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzOiB0aGlzLmZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcyxcbiAgICAgIG11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3M6IHRoaXMubXVsdGlWYWx1ZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcyxcbiAgICAgIG11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzOiB0aGlzLm11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY2F0ZWdvcml6ZShwYXJhbXM6IENhdGVnb3JpemVGcm9udG1hdHRlckxpbmtQYXJhbXMpOiB2b2lkIHtcbiAgICBjb25zdCB7IGlzU2luZ2xlTGluaywga2V5LCBwYXJzZUxpbmtSZXN1bHQsIHZhbHVlIH0gPSBwYXJhbXM7XG4gICAgaWYgKCFwYXJzZUxpbmtSZXN1bHQuaXNFeHRlcm5hbCAmJiBpc1NpbmdsZUxpbmspIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZWZlcmVuY2U6IFBhcnNlTGlua0Zyb250bWF0dGVyUmVmZXJlbmNlID0ge1xuICAgICAgZGlzcGxheVRleHQ6IHBhcnNlTGlua1Jlc3VsdC5hbGlhcyA/PyBwYXJzZUxpbmtSZXN1bHQudXJsLFxuICAgICAga2V5LFxuICAgICAgbGluazogcGFyc2VMaW5rUmVzdWx0LnVybCxcbiAgICAgIG9yaWdpbmFsOiB2YWx1ZSxcbiAgICAgIHBhcnNlTGlua1Jlc3VsdFxuICAgIH07XG5cbiAgICBpZiAoaXNTaW5nbGVMaW5rKSB7XG4gICAgICB0aGlzLmZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcy5wdXNoKHJlZmVyZW5jZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVmZXJlbmNlV2l0aE9mZnNldHM6IFBhcnNlTGlua0Zyb250bWF0dGVyUmVmZXJlbmNlV2l0aE9mZnNldHMgPSB7XG4gICAgICAuLi5yZWZlcmVuY2UsXG4gICAgICBlbmRPZmZzZXQ6IHBhcnNlTGlua1Jlc3VsdC5lbmRPZmZzZXQsXG4gICAgICBzdGFydE9mZnNldDogcGFyc2VMaW5rUmVzdWx0LnN0YXJ0T2Zmc2V0XG4gICAgfTtcblxuICAgIGlmIChwYXJzZUxpbmtSZXN1bHQuaXNFeHRlcm5hbCkge1xuICAgICAgdGhpcy5tdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzLnB1c2gocmVmZXJlbmNlV2l0aE9mZnNldHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzLnB1c2gocmVmZXJlbmNlV2l0aE9mZnNldHMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VWYWx1ZSh2YWx1ZTogdW5rbm93biwga2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gT2JzaWRpYW4gbGlua3MgYSBzY2hlbWUtbGVzcyBgd3d3LmAgbGl0ZXJhbCBpbiB0aGUgYm9keSBvbmx5LCBuZXZlciBpbiBhIGZyb250bWF0dGVyIHZhbHVlLlxuICAgICAgY29uc3Qgb3B0aW9uczogUGFyc2VMaW5rc09wdGlvbnMgPSB7IHNob3VsZFJlY29nbml6ZVd3d0F1dG9saW5rTGl0ZXJhbHM6IGZhbHNlIH07XG4gICAgICBjb25zdCBwYXJzZUxpbmtSZXN1bHRzID0gcGFyc2VMaW5rcyh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICBjb25zdCB3aG9sZVZhbHVlTGluayA9IGdldFdob2xlVmFsdWVMaW5rKHsgbGlua3M6IHBhcnNlTGlua1Jlc3VsdHMsIG9wdGlvbnMsIHZhbHVlIH0pO1xuICAgICAgaWYgKHdob2xlVmFsdWVMaW5rKSB7XG4gICAgICAgIHRoaXMuY2F0ZWdvcml6ZSh7IGlzU2luZ2xlTGluazogdHJ1ZSwga2V5LCBwYXJzZUxpbmtSZXN1bHQ6IHdob2xlVmFsdWVMaW5rLCB2YWx1ZSB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHBhcnNlTGlua1Jlc3VsdCBvZiBwYXJzZUxpbmtSZXN1bHRzKSB7XG4gICAgICAgIHRoaXMuY2F0ZWdvcml6ZSh7IGlzU2luZ2xlTGluazogZmFsc2UsIGtleSwgcGFyc2VMaW5rUmVzdWx0LCB2YWx1ZSB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2NoaWxkS2V5LCBjaGlsZFZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSBhcyBHZW5lcmljT2JqZWN0KSkge1xuICAgICAgdGhpcy5wYXJzZVZhbHVlKGNoaWxkVmFsdWUsIGtleSA/IGAke2tleX0uJHtjaGlsZEtleX1gIDogY2hpbGRLZXkpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEVzY2FwZXMgdGhlIGFsaWFzIG9mIGEgbWFya2Rvd24gbGluay5cbiAqXG4gKiBAcGFyYW0gYWxpYXMgLSBBbiBhbGlhcyBvZiBhIG1hcmtkb3duIGxpbmsuXG4gKiBAcmV0dXJucyBBbiBlc2NhcGVkIGFsaWFzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogZXNjYXBlQWxpYXMoJyoqYWxpYXMqKicpIC8vICdcXFxcKlxcXFwqYWxpYXNcXFxcKlxcXFwqJ1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVBbGlhcyhhbGlhczogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IGFsaWFzLFxuICAgIHJlcGxhY2VyOiBTdHJpbmcucmF3YFxcJCZgLFxuICAgIHNlYXJjaFZhbHVlOiBTUEVDSUFMX01BUktET1dOX0xJTktfU1lNQk9MU19SRUdFWFxuICB9KTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSByZWZlcmVuY2UgaXMgYSB7QGxpbmsgUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2V9LlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2UgLSBUaGUgcmVmZXJlbmNlIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSByZWZlcmVuY2UgaXMgYSB7QGxpbmsgUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2V9LCBvdGhlcndpc2UgYGZhbHNlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2UocmVmZXJlbmNlOiBSZWZlcmVuY2UpOiByZWZlcmVuY2UgaXMgUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2Uge1xuICByZXR1cm4gaXNGcm9udG1hdHRlckxpbmtDYWNoZShyZWZlcmVuY2UpICYmICdwYXJzZUxpbmtSZXN1bHQnIGluIHJlZmVyZW5jZTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSByZWZlcmVuY2UgaXMgYSB7QGxpbmsgUGFyc2VMaW5rUmVmZXJlbmNlfS5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgcmVmZXJlbmNlIGlzIGEge0BsaW5rIFBhcnNlTGlua1JlZmVyZW5jZX0sIG90aGVyd2lzZSBgZmFsc2VgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYXJzZUxpbmtSZWZlcmVuY2UocmVmZXJlbmNlOiBSZWZlcmVuY2UpOiByZWZlcmVuY2UgaXMgUGFyc2VMaW5rUmVmZXJlbmNlIHtcbiAgcmV0dXJuICdwYXJzZUxpbmtSZXN1bHQnIGluIHJlZmVyZW5jZTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIGxpbmtzIGZyb20gYSBub3RlJ3MgZnJvbnRtYXR0ZXIuIEVhY2ggc3RyaW5nIHZhbHVlIGlzIHBhcnNlZCB2aWEge0BsaW5rIHBhcnNlTGlua3N9OiBhIHZhbHVlXG4gKiB0aGF0IGlzIGEgc2luZ2xlIGxpbmsgeWllbGRzIGFuIGVudHJ5IHdpdGhvdXQgb2Zmc2V0cywgYW5kIGEgdmFsdWUgdGhhdCBob2xkcyBtdWx0aXBsZSBsaW5rcyB5aWVsZHNcbiAqIG9mZnNldC1jYXJyeWluZyBlbnRyaWVzLiBBIHZhbHVlIGlzIGEgc2luZ2xlIGxpbmsgdGhlIHdheSBPYnNpZGlhbiByZWFkcyBpdCwgc28gYFtBIFsgQl0odC5tZClgIGlzIG9uZVxuICogbGluayBjYXB0aW9uZWQgYEEgWyBCYCAoc2VlIHtAbGluayBwYXJzZUxpbmt9KS4gSW50ZXJuYWwgc2luZ2xlLWxpbmsgdmFsdWVzIGFyZSBvbWl0dGVkLCBhcyBPYnNpZGlhbiBuYXRpdmVseSBjYWNoZXMgdGhlbS5cbiAqXG4gKiBAcGFyYW0gZnJvbnRtYXR0ZXIgLSBUaGUgZnJvbnRtYXR0ZXIgdG8gcGFyc2UgKGEgdmFsdWUsIG9iamVjdCwgb3IgYXJyYXkpLlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBmcm9udG1hdHRlciBsaW5rcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRnJvbnRtYXR0ZXJMaW5rcyhmcm9udG1hdHRlcjogdW5rbm93bik6IFBhcnNlRnJvbnRtYXR0ZXJMaW5rc1Jlc3VsdCB7XG4gIHJldHVybiBuZXcgRnJvbnRtYXR0ZXJMaW5rc1BhcnNlcigpLnBhcnNlKGZyb250bWF0dGVyKTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYSBsaW5rIGludG8gaXRzIGNvbXBvbmVudHMuXG4gKlxuICogQSBzdHJpbmcgdGhhdCBzdGFydHMgd2l0aCBgW2AgYW5kIGVuZHMgd2l0aCBhIG1hcmtkb3duIGxpbmsgaXMgcmVhZCBhcyBPTkUgbGluayB3aG9zZSBjYXB0aW9uIHJ1bnNcbiAqIGZyb20gdGhlIGxlYWRpbmcgYFtgIHRvIHRoYXQgbGluaydzIGBdKGAsIHRoZSB3YXkgT2JzaWRpYW4gcmVhZHMgYSBmcm9udG1hdHRlciB2YWx1ZTogYFtBIFsgQl0odC5tZClgXG4gKiBoYXMgdGhlIGFsaWFzIGBBIFsgQmAsIHdoZXJlIENvbW1vbk1hcmsgZmluZHMgb25seSBgWyBCXSh0Lm1kKWAuXG4gKlxuICogQHBhcmFtICRzdHJpbmcgLSBUaGUgbGluayB0byBwYXJzZS5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcnNlIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIGxpbmsuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUxpbmsoJHN0cmluZzogc3RyaW5nLCBvcHRpb25zPzogUGFyc2VMaW5rT3B0aW9ucyk6IG51bGwgfCBQYXJzZUxpbmtSZXN1bHQge1xuICByZXR1cm4gZ2V0V2hvbGVWYWx1ZUxpbmsoeyBsaW5rczogcGFyc2VMaW5rcygkc3RyaW5nLCBvcHRpb25zKSwgb3B0aW9ucywgdmFsdWU6ICRzdHJpbmcgfSk7XG59XG5cbi8qKlxuICogUGFyc2VzIGFsbCBsaW5rcyBpbiBhIHN0cmluZy5cbiAqXG4gKiBCZXNpZGVzIG1hcmtkb3duIGxpbmtzLCB3aWtpbGlua3MgYW5kIGF1dG9saW5rcywgdGhlIHBsYWluIHRleHQgYmV0d2VlbiB0aGVtIGlzIHNjYW5uZWQgZm9yIGJhcmVcbiAqIFVSTHMgd2l0aCBhIHNjaGVtZSAoYGh0dHBzOi8vZXhhbXBsZS5jb21gKSBhbmQsIHVubGVzcyB0dXJuZWQgb2ZmIHRocm91Z2hcbiAqIHtAbGluayBQYXJzZUxpbmtzT3B0aW9ucy5zaG91bGRSZWNvZ25pemVXd3dBdXRvbGlua0xpdGVyYWxzfSwgZm9yIEdGTSBleHRlbmRlZCBgd3d3LmAgYXV0b2xpbmtcbiAqIGxpdGVyYWxzIChgd3d3LmV4YW1wbGUuY29tYCkuIFN1Y2ggYSBsaXRlcmFsIGlzIHJlcG9ydGVkIGFzIGFuIGV4dGVybmFsIGxpbmsgd2hvc2UgYHVybGAgY2FycmllcyB0aGVcbiAqIGBodHRwOi8vYCBzY2hlbWUgT2JzaWRpYW4gb3BlbnMgaXQgd2l0aCwgc28gYSBsaW5rIHJlYnVpbHQgZnJvbSBpdCBzdGF5cyBleHRlcm5hbDogYSBzY2hlbWUtbGVzc1xuICogYFthbGlhc10od3d3LmV4YW1wbGUuY29tKWAgaXMgYW4gaW50ZXJuYWwgbGluayBpbiBPYnNpZGlhbi4gQSBsaXRlcmFsIHdyYXBwZWQgaW4gYDwuLi4+YCByZXBvcnRzIHRoZVxuICogYnJhY2tldHMgYXMgcGFydCBvZiBgcmF3YCwgc28gcmVwbGFjaW5nIGByYXdgIGxlYXZlcyBubyBzdHJheSBicmFja2V0IGJlaGluZC5cbiAqXG4gKiBAcGFyYW0gJHN0cmluZyAtIFRoZSBzdHJpbmcgdG8gcGFyc2UgdGhlIGxpbmtzIGluLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyc2Ugb3B0aW9ucy5cbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgbGlua3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUxpbmtzKCRzdHJpbmc6IHN0cmluZywgb3B0aW9ucz86IFBhcnNlTGlua3NPcHRpb25zKTogUGFyc2VMaW5rUmVzdWx0W10ge1xuICBjb25zdCBzaG91bGRSZWNvZ25pemVXd3dBdXRvbGlua0xpdGVyYWxzID0gb3B0aW9ucz8uc2hvdWxkUmVjb2duaXplV3d3QXV0b2xpbmtMaXRlcmFscyA/PyB0cnVlO1xuICBjb25zdCBlbWJlZFN5bWJvbE9mZnNldHMgPSBuZXcgU2V0PG51bWJlcj4oKTtcblxuICBjb25zdCBFTUJFRF9MSU5LX1BSRUZJWCA9ICchWyc7XG4gIGNvbnN0IE5PX0VNQkVEX0xJTktfUFJFRklYID0gJ0BbJztcbiAgY29uc3QgRFVNTVlfQ0hBUkFDVEVSID0gJ0AnO1xuXG4gIGNvbnN0IEVNQkVEX0lOU0lERV9MSU5LX1JFR19FWFAgPSAvXFxbKD88TGlua0FsaWFzPiFcXFsuKj9cXF1cXCguKz9cXCkpXFxdXFwoKD88TGluaz4uKz8pXFwpL2c7XG4gIGNvbnN0IG5vSW5zaWRlRW1iZWRzTGlua3NTdHJpbmcgPSByZXBsYWNlQWxsKHtcbiAgICAkc3RyaW5nLFxuICAgIHJlcGxhY2VyOiAoeyBjYXB0dXJlZEdyb3VwQXJndW1lbnRzOiBbbGlua0FsaWFzID0gJycsIGxpbmsgPSAnJ10gfSkgPT4ge1xuICAgICAgY29uc3QgZHVtbXlBbGlhcyA9IERVTU1ZX0NIQVJBQ1RFUi5yZXBlYXQobGlua0FsaWFzLmxlbmd0aCk7XG4gICAgICByZXR1cm4gYFske2R1bW15QWxpYXN9XSgke2xpbmt9KWA7XG4gICAgfSxcbiAgICBzZWFyY2hWYWx1ZTogRU1CRURfSU5TSURFX0xJTktfUkVHX0VYUFxuICB9KTtcblxuICBjb25zdCBub0VtYmVkU3RyaW5nID0gcmVwbGFjZUFsbCh7XG4gICAgJHN0cmluZzogbm9JbnNpZGVFbWJlZHNMaW5rc1N0cmluZyxcbiAgICByZXBsYWNlcjogKCRhcmd1bWVudHMpID0+IHtcbiAgICAgIGVtYmVkU3ltYm9sT2Zmc2V0cy5hZGQoJGFyZ3VtZW50cy5vZmZzZXQpO1xuICAgICAgcmV0dXJuIE5PX0VNQkVEX0xJTktfUFJFRklYO1xuICAgIH0sXG4gICAgc2VhcmNoVmFsdWU6IEVNQkVEX0xJTktfUFJFRklYXG4gIH0pO1xuXG4gIGNvbnN0IHByb2Nlc3NvciA9IHJlbWFyaygpLnVzZShyZW1hcmtQYXJzZSkudXNlKHdpa2lMaW5rUGx1Z2luLCB7IGFsaWFzRGl2aWRlcjogV0lLSUxJTktfRElWSURFUiB9KTtcbiAgY29uc3Qgcm9vdCA9IHByb2Nlc3Nvci5wYXJzZShub0VtYmVkU3RyaW5nKTtcblxuICBjb25zdCBsaW5rczogUGFyc2VMaW5rUmVzdWx0W10gPSBbXTtcbiAgY29uc3QgdGV4dExpbmtzOiBQYXJzZUxpbmtSZXN1bHRbXSA9IFtdO1xuXG4gIHZpc2l0KHJvb3QsIChub2RlOiBOb2RlKSA9PiB7XG4gICAgbGV0IGxpbms6IFBhcnNlTGlua1Jlc3VsdDtcbiAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgY2FzZSAnbGluayc6IHtcbiAgICAgICAgbGluayA9IHBhcnNlTGlua05vZGUobm9kZSBhcyBMaW5rLCAkc3RyaW5nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICd3aWtpTGluayc6IHtcbiAgICAgICAgbGluayA9IHBhcnNlV2lraWxpbmtOb2RlKG5vZGUgYXMgV2lraUxpbmtOb2RlLCAkc3RyaW5nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZW1iZWRTeW1ib2xPZmZzZXRzLmhhcyhsaW5rLnN0YXJ0T2Zmc2V0IC0gMSkpIHtcbiAgICAgIGxpbmsgPSB7XG4gICAgICAgIC4uLmxpbmssXG4gICAgICAgIGlzRW1iZWQ6IHRydWUsXG4gICAgICAgIHJhdzogYCEke2xpbmsucmF3fWAsXG4gICAgICAgIHN0YXJ0T2Zmc2V0OiBsaW5rLnN0YXJ0T2Zmc2V0IC0gMVxuICAgICAgfTtcbiAgICB9XG4gICAgbGlua3MucHVzaChsaW5rKTtcbiAgfSk7XG5cbiAgbGlua3Muc29ydCgoYSwgYikgPT4gYS5zdGFydE9mZnNldCAtIGIuc3RhcnRPZmZzZXQpO1xuXG4gIGxldCB0ZXh0U3RhcnRPZmZzZXQgPSAwO1xuXG4gIGZvciAoY29uc3QgbGluayBvZiBsaW5rcykge1xuICAgIGV4dHJhY3RUZXh0TGlua3Moe1xuICAgICAgJHN0cmluZyxcbiAgICAgIGVuZE9mZnNldDogbGluay5zdGFydE9mZnNldCAtIDEsXG4gICAgICBzaG91bGRSZWNvZ25pemVXd3dBdXRvbGlua0xpdGVyYWxzLFxuICAgICAgc3RhcnRPZmZzZXQ6IHRleHRTdGFydE9mZnNldCxcbiAgICAgIHRleHRMaW5rc1xuICAgIH0pO1xuICAgIHRleHRTdGFydE9mZnNldCA9IGxpbmsuZW5kT2Zmc2V0ICsgMTtcbiAgfVxuXG4gIGV4dHJhY3RUZXh0TGlua3Moe1xuICAgICRzdHJpbmcsXG4gICAgZW5kT2Zmc2V0OiAkc3RyaW5nLmxlbmd0aCAtIDEsXG4gICAgc2hvdWxkUmVjb2duaXplV3d3QXV0b2xpbmtMaXRlcmFscyxcbiAgICBzdGFydE9mZnNldDogdGV4dFN0YXJ0T2Zmc2V0LFxuICAgIHRleHRMaW5rc1xuICB9KTtcblxuICBsaW5rcy5wdXNoKC4uLnRleHRMaW5rcyk7XG4gIGxpbmtzLnNvcnQoKGEsIGIpID0+IGEuc3RhcnRPZmZzZXQgLSBiLnN0YXJ0T2Zmc2V0KTtcblxuICByZXR1cm4gbGlua3M7XG59XG5cbi8qKlxuICogV3JhcHMgYSB7QGxpbmsgUGFyc2VMaW5rUmVzdWx0fSBpbnRvIGEge0BsaW5rIFBhcnNlTGlua1JlZmVyZW5jZX0gc28gaXQgY2FuIGZsb3cgdGhyb3VnaCB0aGVcbiAqIHJlZmVyZW5jZS1iYXNlZCBmaWxlLWNoYW5nZSBwaXBlbGluZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHdyYXBwaW5nIHRoZSBwYXJzZWQgbGluay5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgUGFyc2VMaW5rUmVmZXJlbmNlfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvUGFyc2VMaW5rUmVmZXJlbmNlKHBhcmFtczogVG9QYXJzZUxpbmtSZWZlcmVuY2VQYXJhbXMpOiBQYXJzZUxpbmtSZWZlcmVuY2Uge1xuICBjb25zdCB7IGNvbnRlbnQsIHBhcnNlTGlua1Jlc3VsdCB9ID0gcGFyYW1zO1xuICByZXR1cm4ge1xuICAgIC4uLihwYXJzZUxpbmtSZXN1bHQuYWxpYXMgIT09IHVuZGVmaW5lZCAmJiB7IGRpc3BsYXlUZXh0OiBwYXJzZUxpbmtSZXN1bHQuYWxpYXMgfSksXG4gICAgbGluazogcGFyc2VMaW5rUmVzdWx0LnVybCxcbiAgICBvcmlnaW5hbDogcGFyc2VMaW5rUmVzdWx0LnJhdyxcbiAgICBwYXJzZUxpbmtSZXN1bHQsXG4gICAgcG9zaXRpb246IHtcbiAgICAgIGVuZDogb2Zmc2V0VG9Mb2MoY29udGVudCwgcGFyc2VMaW5rUmVzdWx0LmVuZE9mZnNldCksXG4gICAgICBzdGFydDogb2Zmc2V0VG9Mb2MoY29udGVudCwgcGFyc2VMaW5rUmVzdWx0LnN0YXJ0T2Zmc2V0KVxuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBVbmVzY2FwZXMgdGhlIGFsaWFzIG9mIGEgbWFya2Rvd24gbGluay5cbiAqXG4gKiBAcGFyYW0gZXNjYXBlZEFsaWFzIC0gQW4gZXNjYXBlZCBhbGlhcy5cbiAqIEByZXR1cm5zIEFuIHVuZXNjYXBlZCBhbGlhcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIHVuZXNjYXBlQWxpYXMoJ1xcXFwqXFxcXCphbGlhc1xcXFwqXFxcXConKSAvLyAnKiphbGlhcyoqJ1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmVzY2FwZUFsaWFzKGVzY2FwZWRBbGlhczogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IGVzY2FwZWRBbGlhcyxcbiAgICByZXBsYWNlcjogKHsgY2FwdHVyZWRHcm91cEFyZ3VtZW50czogW2JhY2tzbGFzaGVzID0gJycsIHNwZWNpYWxDaGFyID0gJyddIH0pID0+IHtcbiAgICAgIGNvbnN0IEVTQ0FQRURfQkFDS1NMQVNIX0xFTkdUSCA9IDI7XG4gICAgICBjb25zdCBiYWNrc2xhc2hDb3VudCA9IGJhY2tzbGFzaGVzLmxlbmd0aDtcbiAgICAgIGNvbnN0IGtlZXBDb3VudCA9IE1hdGguZmxvb3IoYmFja3NsYXNoQ291bnQgLyBFU0NBUEVEX0JBQ0tTTEFTSF9MRU5HVEgpO1xuICAgICAgcmV0dXJuICdcXFxcJy5yZXBlYXQoa2VlcENvdW50KSArIHNwZWNpYWxDaGFyO1xuICAgIH0sXG4gICAgc2VhcmNoVmFsdWU6IC8oPzxCYWNrc2xhc2hlcz5cXFxcKykoPzxTcGVjaWFsQ2hhcmFjdGVyPlshXCIjJCUmJygpKissLS4vOjs8PT4/QFtcXFxcXFxdXl9ge3x9fl0pL2dcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNvdW50T2NjdXJyZW5jZXMoJHN0cmluZzogc3RyaW5nLCBjaGFyYWN0ZXI6IHN0cmluZyk6IG51bWJlciB7XG4gIHJldHVybiAkc3RyaW5nLnNwbGl0KGNoYXJhY3RlcikubGVuZ3RoIC0gMTtcbn1cblxuZnVuY3Rpb24gZGVjb2RlVXJsU2FmZWx5KHBhcmFtczogRGVjb2RlVXJsU2FmZWx5UGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3QgeyBoYXNBbmdsZUJyYWNrZXRzLCBpc0V4dGVybmFsLCB1cmwgfSA9IHBhcmFtcztcbiAgLy8gYGZpbGU6Ly9gIFVSTHMgYXJlIGV4dGVybmFsLCBidXQgdGhlaXIgcGVyY2VudC1lbmNvZGluZyBpcyBwdXJlbHkgY29zbWV0aWMsIHNvIGRlY29kZSB0aGVtIGxpa2VcbiAgLy8gaW50ZXJuYWwgbGlua3MuIEV2ZXJ5IG90aGVyIGV4dGVybmFsIFVSTCBpcyBsZWZ0IHVudG91Y2hlZCAoaXRzIGVuY29kaW5nIG1heSBiZSBzaWduaWZpY2FudCkuXG4gIGlmICgoaXNFeHRlcm5hbCB8fCBoYXNBbmdsZUJyYWNrZXRzKSAmJiAhaXNGaWxlVXJsKHVybCkpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHVybCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGRlY29kZSBVUkwgJHt1cmx9YCwgZXJyb3IpO1xuICAgIHJldHVybiB1cmw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdEFsaWFzKHBhcmFtczogRXh0cmFjdEFsaWFzUGFyYW1zKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgeyAkc3RyaW5nLCBhbGlhc0VuZE9mZnNldCwgYWxpYXNTdGFydE9mZnNldCB9ID0gcGFyYW1zO1xuICByZXR1cm4gYWxpYXNTdGFydE9mZnNldCA8IGFsaWFzRW5kT2Zmc2V0XG4gICAgPyAkc3RyaW5nLnNsaWNlKGFsaWFzU3RhcnRPZmZzZXQsIGFsaWFzRW5kT2Zmc2V0KVxuICAgIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0VGV4dExpbmtzKHBhcmFtczogRXh0cmFjdFRleHRMaW5rc1BhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7ICRzdHJpbmcsIGVuZE9mZnNldCwgc2hvdWxkUmVjb2duaXplV3d3QXV0b2xpbmtMaXRlcmFscywgc3RhcnRPZmZzZXQsIHRleHRMaW5rcyB9ID0gcGFyYW1zO1xuICBpZiAoc3RhcnRPZmZzZXQgPiBlbmRPZmZzZXQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB0ZXh0UGFydCA9ICRzdHJpbmcuc2xpY2Uoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCArIDEpO1xuICBjb25zdCBzY2hlbWVMaW5rczogUGFyc2VMaW5rUmVzdWx0W10gPSBbXTtcbiAgcmVwbGFjZUFsbCh7XG4gICAgJHN0cmluZzogdGV4dFBhcnQsXG4gICAgcmVwbGFjZXI6ICh7IGNhcHR1cmVkR3JvdXBBcmd1bWVudHM6IFtyYXdVcmwgPSAnJ10sIG9mZnNldCB9KSA9PiB7XG4gICAgICBpZiAoIWlzVXJsKHJhd1VybCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBEZWNvZGUgYmFyZSBgZmlsZTovL2AgVVJMcyBsaWtlIHRoZSBicmFja2V0ZWQgcGF0aCAoYHBhcnNlTGlua05vZGVgKSBkb2VzLlxuICAgICAgLy8gT2Zmc2V0cyBhbmQgYHJhd2Agc3RheSBiYXNlZCBvbiB0aGUgb3JpZ2luYWwgKHBvc3NpYmx5IHBlcmNlbnQtZW5jb2RlZCkgdGV4dC5cbiAgICAgIGNvbnN0IHVybCA9IGRlY29kZVVybFNhZmVseSh7XG4gICAgICAgIGhhc0FuZ2xlQnJhY2tldHM6IGZhbHNlLFxuICAgICAgICBpc0V4dGVybmFsOiB0cnVlLFxuICAgICAgICB1cmw6IHJhd1VybFxuICAgICAgfSk7XG4gICAgICBzY2hlbWVMaW5rcy5wdXNoKHtcbiAgICAgICAgZW5jb2RlZFVybDogZW5jb2RlVXJsKHVybCksXG4gICAgICAgIGVuZE9mZnNldDogc3RhcnRPZmZzZXQgKyBvZmZzZXQgKyByYXdVcmwubGVuZ3RoLFxuICAgICAgICBoYXNBbmdsZUJyYWNrZXRzOiBmYWxzZSxcbiAgICAgICAgaXNFbWJlZDogZmFsc2UsXG4gICAgICAgIGlzRXh0ZXJuYWw6IHRydWUsXG4gICAgICAgIGlzRmlsZVVybDogaXNGaWxlVXJsKHVybCksXG4gICAgICAgIGlzV2lraWxpbms6IGZhbHNlLFxuICAgICAgICByYXc6IHJhd1VybCxcbiAgICAgICAgc3RhcnRPZmZzZXQ6IHN0YXJ0T2Zmc2V0ICsgb2Zmc2V0LFxuICAgICAgICB1cmxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgc2VhcmNoVmFsdWU6IC8oPzxVcmw+XFxTKykvZ1xuICB9KTtcbiAgdGV4dExpbmtzLnB1c2goLi4uc2NoZW1lTGlua3MpO1xuXG4gIGlmICghc2hvdWxkUmVjb2duaXplV3d3QXV0b2xpbmtMaXRlcmFscykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvciAoY29uc3QgbWF0Y2ggb2YgdGV4dFBhcnQubWF0Y2hBbGwoV1dXX0FVVE9MSU5LX0xJVEVSQUxfQ0FORElEQVRFX1JFR19FWFApKSB7XG4gICAgY29uc3QgY2FuZGlkYXRlID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ0xpdGVyYWwnKTtcbiAgICBjb25zdCBsaXRlcmFsID0gdHJpbVd3d0F1dG9saW5rTGl0ZXJhbChjYW5kaWRhdGUpO1xuICAgIGlmICghaXNWYWxpZFd3d0F1dG9saW5rTGl0ZXJhbChsaXRlcmFsKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgbGl0ZXJhbFN0YXJ0T2Zmc2V0ID0gc3RhcnRPZmZzZXQgKyBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCAtIGNhbmRpZGF0ZS5sZW5ndGg7XG4gICAgY29uc3QgbGl0ZXJhbEVuZE9mZnNldCA9IGxpdGVyYWxTdGFydE9mZnNldCArIGxpdGVyYWwubGVuZ3RoO1xuICAgIGlmIChzY2hlbWVMaW5rcy5zb21lKChsaW5rKSA9PiBsaW5rLnN0YXJ0T2Zmc2V0IDwgbGl0ZXJhbEVuZE9mZnNldCAmJiBsaXRlcmFsU3RhcnRPZmZzZXQgPCBsaW5rLmVuZE9mZnNldCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGhhc0FuZ2xlQnJhY2tldHMgPSAkc3RyaW5nW2xpdGVyYWxTdGFydE9mZnNldCAtIDFdID09PSAnPCcgJiYgJHN0cmluZ1tsaXRlcmFsRW5kT2Zmc2V0XSA9PT0gJz4nO1xuICAgIGNvbnN0IGxpbmtTdGFydE9mZnNldCA9IGhhc0FuZ2xlQnJhY2tldHMgPyBsaXRlcmFsU3RhcnRPZmZzZXQgLSAxIDogbGl0ZXJhbFN0YXJ0T2Zmc2V0O1xuICAgIGNvbnN0IGxpbmtFbmRPZmZzZXQgPSBoYXNBbmdsZUJyYWNrZXRzID8gbGl0ZXJhbEVuZE9mZnNldCArIDEgOiBsaXRlcmFsRW5kT2Zmc2V0O1xuICAgIGNvbnN0IHVybCA9IFdXV19BVVRPTElOS19MSVRFUkFMX1NDSEVNRSArIGxpdGVyYWw7XG4gICAgdGV4dExpbmtzLnB1c2goe1xuICAgICAgZW5jb2RlZFVybDogZW5jb2RlVXJsKHVybCksXG4gICAgICBlbmRPZmZzZXQ6IGxpbmtFbmRPZmZzZXQsXG4gICAgICBoYXNBbmdsZUJyYWNrZXRzLFxuICAgICAgaXNFbWJlZDogZmFsc2UsXG4gICAgICBpc0V4dGVybmFsOiB0cnVlLFxuICAgICAgaXNGaWxlVXJsOiBmYWxzZSxcbiAgICAgIGlzV2lraWxpbms6IGZhbHNlLFxuICAgICAgcmF3OiAkc3RyaW5nLnNsaWNlKGxpbmtTdGFydE9mZnNldCwgbGlua0VuZE9mZnNldCksXG4gICAgICBzdGFydE9mZnNldDogbGlua1N0YXJ0T2Zmc2V0LFxuICAgICAgdXJsXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UmF3TGluayhub2RlOiBOb2RlLCAkc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwb3MgPSBlbnN1cmVOb25OdWxsYWJsZShub2RlLnBvc2l0aW9uKTtcbiAgcmV0dXJuICRzdHJpbmcuc2xpY2UocG9zLnN0YXJ0Lm9mZnNldCwgcG9zLmVuZC5vZmZzZXQpO1xufVxuXG4vKipcbiAqIFJlYWRzIGEgd2hvbGUgdmFsdWUgYXMgb25lIGxpbmssIGFzIE9ic2lkaWFuIHJlYWRzIGEgZnJvbnRtYXR0ZXIgdmFsdWUuIE9ic2lkaWFuIHRha2VzIGEgdmFsdWUgdGhhdFxuICogc3RhcnRzIHdpdGggYFtgIGFuZCBlbmRzIHdpdGggYF0odXJsKWAgYXMgYSBzaW5nbGUgbGluayBjYXB0aW9uZWQgYnkgZXZlcnl0aGluZyBpbiBiZXR3ZWVuLCBzbyBhIGNhcHRpb25cbiAqIGhvbGRpbmcgYW4gdW5iYWxhbmNlZCBicmFja2V0IChgW0EgWyBCXSh0Lm1kKWAsIGBbYV0gW2JdKGMubWQpYCwgYFthXWJdKGMubWQpYCkgaXMgc3RpbGwgb25lIGxpbmtcbiAqIHRoZXJlLCB3aGVyZSBDb21tb25NYXJrIGZpbmRzIGEgc2hvcnRlciBsaW5rIGF0IHRoZSBpbm5lciBgW2AsIG9yIG5vbmUgYXQgYWxsLiBBIHZhbHVlIENvbW1vbk1hcmsgcmVhZHNcbiAqIGFzIHR3byBvciBtb3JlIGxpbmtzIHN0YXlzIG11bHRpLWxpbmssIGJlY2F1c2Ugd2hhdCBPYnNpZGlhbiBtYWtlcyBvZiB0aG9zZSBpcyBnYXJiYWdlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgdmFsdWUgYW5kIGl0cyBsaW5rcy5cbiAqIEByZXR1cm5zIFRoZSBsaW5rIHNwYW5uaW5nIHRoZSB3aG9sZSB2YWx1ZSwgb3IgYG51bGxgIGlmIHRoZSB2YWx1ZSBpcyBub3QgYSBzaW5nbGUgbGluay5cbiAqL1xuZnVuY3Rpb24gZ2V0V2hvbGVWYWx1ZUxpbmsocGFyYW1zOiBHZXRXaG9sZVZhbHVlTGlua1BhcmFtcyk6IG51bGwgfCBQYXJzZUxpbmtSZXN1bHQge1xuICBjb25zdCB7IGxpbmtzLCBvcHRpb25zLCB2YWx1ZSB9ID0gcGFyYW1zO1xuICBjb25zdCBbZmlyc3RMaW5rXSA9IGxpbmtzO1xuICBpZiAobGlua3MubGVuZ3RoID09PSAxICYmIGZpcnN0TGluaz8ucmF3ID09PSB2YWx1ZSkge1xuICAgIHJldHVybiBmaXJzdExpbms7XG4gIH1cblxuICBpZiAoIXZhbHVlLnN0YXJ0c1dpdGgoJ1snKSB8fCBsaW5rcy5sZW5ndGggPiAxKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoZmlyc3RMaW5rKSB7XG4gICAgLy8gT25seSBhIG1hcmtkb3duIGxpbmsgd2lkZW5zOiBhIHdpa2lsaW5rLCBhbiBlbWJlZCwgYSBiYXJlIFVSTCBvciBhbiBhdXRvbGluayBkb2VzIG5vdC5cbiAgICBpZiAoZmlyc3RMaW5rLmlzV2lraWxpbmsgfHwgIWZpcnN0TGluay5yYXcuc3RhcnRzV2l0aCgnWycpIHx8IGZpcnN0TGluay5lbmRPZmZzZXQgIT09IHZhbHVlLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdpZGVuVG9XaG9sZVZhbHVlKHtcbiAgICAgIGNhcHRpb25FbmRPZmZzZXQ6IGZpcnN0TGluay5zdGFydE9mZnNldCArIDEgKyAoZmlyc3RMaW5rLmFsaWFzPy5sZW5ndGggPz8gMCksXG4gICAgICBsaW5rOiBmaXJzdExpbmssXG4gICAgICB2YWx1ZVxuICAgIH0pO1xuICB9XG5cbiAgLy8gTm8gbGluayBhdCBhbGwsIGFzIGluIGBbYV1iXShjLm1kKWA6IGhpZGUgdGhlIGNhcHRpb24ncyBicmFja2V0cyBzbyBDb21tb25NYXJrIHNlZXMgb25lIGxpbmsuXG4gIGNvbnN0IGNhcHRpb25FbmRPZmZzZXQgPSB2YWx1ZS5sYXN0SW5kZXhPZignXSgnKTtcbiAgaWYgKGNhcHRpb25FbmRPZmZzZXQgPT09IC0xKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBtYXNrZWRWYWx1ZSA9IGBbJHt2YWx1ZS5zbGljZSgxLCBjYXB0aW9uRW5kT2Zmc2V0KS5yZXBsYWNlQWxsKC9bW1xcXV0vZywgJ0AnKX0ke3ZhbHVlLnNsaWNlKGNhcHRpb25FbmRPZmZzZXQpfWA7XG4gIGNvbnN0IG1hc2tlZExpbmtzID0gcGFyc2VMaW5rcyhtYXNrZWRWYWx1ZSwgb3B0aW9ucyk7XG4gIGNvbnN0IFttYXNrZWRMaW5rXSA9IG1hc2tlZExpbmtzO1xuICByZXR1cm4gbWFza2VkTGlua3MubGVuZ3RoID09PSAxICYmIG1hc2tlZExpbms/LnJhdyA9PT0gbWFza2VkVmFsdWVcbiAgICA/IHdpZGVuVG9XaG9sZVZhbHVlKHsgY2FwdGlvbkVuZE9mZnNldCwgbGluazogbWFza2VkTGluaywgdmFsdWUgfSlcbiAgICA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIGhhc0FuZ2xlQnJhY2tldHNJbkxpbmsocGFyYW1zOiBIYXNBbmdsZUJyYWNrZXRzSW5MaW5rUGFyYW1zKTogYm9vbGVhbiB7XG4gIGNvbnN0IHsgcmF3LCByYXdVcmwgfSA9IHBhcmFtcztcbiAgY29uc3QgT1BFTl9BTkdMRV9CUkFDS0VUID0gJzwnO1xuICByZXR1cm4gcmF3LnN0YXJ0c1dpdGgoT1BFTl9BTkdMRV9CUkFDS0VUKSB8fCByYXdVcmwuc3RhcnRzV2l0aChPUEVOX0FOR0xFX0JSQUNLRVQpO1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkV3d3QXV0b2xpbmtMaXRlcmFsKGxpdGVyYWw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBkb21haW4gPSBXV1dfQVVUT0xJTktfTElURVJBTF9ET01BSU5fUkVHX0VYUC5leGVjKGxpdGVyYWwpPy5bMF07XG4gIGlmIChkb21haW4gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEdGTTogbm8gdW5kZXJzY29yZSBpbiB0aGUgbGFzdCB0d28gc2VnbWVudHMgb2YgdGhlIGRvbWFpbi5cbiAgY29uc3QgTEFTVF9TRUdNRU5UU19DT1VOVCA9IDI7XG4gIHJldHVybiBkb21haW4uc3BsaXQoJy4nKS5zbGljZSgtTEFTVF9TRUdNRU5UU19DT1VOVCkuZXZlcnkoKHNlZ21lbnQpID0+ICFzZWdtZW50LmluY2x1ZGVzKCdfJykpO1xufVxuXG5mdW5jdGlvbiBvZmZzZXRUb0xvYyhjb250ZW50OiBzdHJpbmcsIG9mZnNldDogbnVtYmVyKTogTG9jIHtcbiAgY29uc3QgcHJlY2VkaW5nQ29udGVudCA9IGNvbnRlbnQuc2xpY2UoMCwgb2Zmc2V0KTtcbiAgY29uc3QgbGluZSA9IChwcmVjZWRpbmdDb250ZW50Lm1hdGNoKC9cXG4vZykgPz8gW10pLmxlbmd0aDtcbiAgY29uc3QgbGFzdE5ld2xpbmVPZmZzZXQgPSBwcmVjZWRpbmdDb250ZW50Lmxhc3RJbmRleE9mKCdcXG4nKTtcbiAgcmV0dXJuIHtcbiAgICBjb2w6IG9mZnNldCAtIChsYXN0TmV3bGluZU9mZnNldCArIDEpLFxuICAgIGxpbmUsXG4gICAgb2Zmc2V0XG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlTGlua05vZGUobm9kZTogTGluaywgJHN0cmluZzogc3RyaW5nKTogUGFyc2VMaW5rUmVzdWx0IHtcbiAgY29uc3QgTElOS19BTElBU19TVUZGSVggPSAnXSgnO1xuICBjb25zdCBMSU5LX1NVRkZJWCA9ICcpJztcbiAgY29uc3QgcmF3ID0gZ2V0UmF3TGluayhub2RlLCAkc3RyaW5nKTtcbiAgY29uc3QgcG9zaXRpb24gPSBlbnN1cmVOb25OdWxsYWJsZShub2RlLnBvc2l0aW9uKTtcbiAgY29uc3Qgbm9kZUVuZE9mZnNldCA9IGVuc3VyZU5vbk51bGxhYmxlKHBvc2l0aW9uLmVuZC5vZmZzZXQpO1xuICBjb25zdCBub2RlU3RhcnRPZmZzZXQgPSBlbnN1cmVOb25OdWxsYWJsZShwb3NpdGlvbi5zdGFydC5vZmZzZXQpO1xuICAvLyBBbiBlbXB0eSBsYWJlbCAoYFtdKC4uLilgKSBoYXMgbm8gY2hpbGRyZW4sIHNvIGl0IHN0YXJ0cyBhbmQgZW5kcyBqdXN0IGFmdGVyIHRoZSBub2RlJ3Mgb3duIGBbYC4gQW4gZW1iZWQncyBgIWAgaXMgb3V0c2lkZSB0aGUgbm9kZSwgc2luY2UgYHBhcnNlTGlua3NgIG1hc2tzIGl0IGJlZm9yZSBwYXJzaW5nLlxuICBjb25zdCBlbXB0eUFsaWFzT2Zmc2V0ID0gbm9kZVN0YXJ0T2Zmc2V0ICsgMTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vYmV0dGVyLWRvbS10cmF2ZXJzaW5nIC0tIGBub2RlYCBpcyBhbiBtZGFzdCBub2RlLCBub3QgYSBET00gbm9kZS4gSXQgaGFzIG5vIGBmaXJzdEVsZW1lbnRDaGlsZGA7IHRoZSBydWxlIG1hdGNoZXMgdGhlIGAuY2hpbGRyZW5bMF1gIHNoYXBlIHdpdGhvdXQgY2hlY2tpbmcgd2hhdCBpdCBpcyBvbi5cbiAgY29uc3QgYWxpYXNOb2RlU3RhcnRPZmZzZXQgPSBub2RlLmNoaWxkcmVuWzBdPy5wb3NpdGlvbj8uc3RhcnQub2Zmc2V0ID8/IGVtcHR5QWxpYXNPZmZzZXQ7XG4gIGNvbnN0IGFsaWFzTm9kZUVuZE9mZnNldCA9IG5vZGUuY2hpbGRyZW4uYXQoLTEpPy5wb3NpdGlvbj8uZW5kLm9mZnNldCA/PyBlbXB0eUFsaWFzT2Zmc2V0O1xuICBjb25zdCByYXdVcmwgPSAkc3RyaW5nLnNsaWNlKGFsaWFzTm9kZUVuZE9mZnNldCArIExJTktfQUxJQVNfU1VGRklYLmxlbmd0aCwgbm9kZUVuZE9mZnNldCAtIExJTktfU1VGRklYLmxlbmd0aCk7XG4gIGNvbnN0IGhhc0FuZ2xlQnJhY2tldHMgPSBoYXNBbmdsZUJyYWNrZXRzSW5MaW5rKHtcbiAgICByYXcsXG4gICAgcmF3VXJsXG4gIH0pO1xuICBjb25zdCBpc0V4dGVybmFsID0gaXNVcmwobm9kZS51cmwpO1xuICBjb25zdCB1cmwgPSBkZWNvZGVVcmxTYWZlbHkoe1xuICAgIGhhc0FuZ2xlQnJhY2tldHMsXG4gICAgaXNFeHRlcm5hbCxcbiAgICB1cmw6IG5vZGUudXJsXG4gIH0pO1xuICBjb25zdCBhbGlhcyA9IGV4dHJhY3RBbGlhcyh7XG4gICAgJHN0cmluZyxcbiAgICBhbGlhc0VuZE9mZnNldDogYWxpYXNOb2RlRW5kT2Zmc2V0LFxuICAgIGFsaWFzU3RhcnRPZmZzZXQ6IGFsaWFzTm9kZVN0YXJ0T2Zmc2V0XG4gIH0pO1xuICByZXR1cm4gbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFBhcnNlTGlua1Jlc3VsdD4oe1xuICAgIGFsaWFzLFxuICAgIGVuY29kZWRVcmw6IGlzRXh0ZXJuYWwgPyBlbmNvZGVVcmwodXJsKSA6IHVuZGVmaW5lZCxcbiAgICBlbmRPZmZzZXQ6IG5vZGVFbmRPZmZzZXQsXG4gICAgaGFzQW5nbGVCcmFja2V0cyxcbiAgICBpc0VtYmVkOiBmYWxzZSxcbiAgICBpc0V4dGVybmFsLFxuICAgIGlzRmlsZVVybDogaXNGaWxlVXJsKHVybCksXG4gICAgaXNXaWtpbGluazogZmFsc2UsXG4gICAgcmF3LFxuICAgIHN0YXJ0T2Zmc2V0OiBub2RlU3RhcnRPZmZzZXQsXG4gICAgdGl0bGU6IG5vZGUudGl0bGUgPz8gdW5kZWZpbmVkLFxuICAgIHVuZXNjYXBlZEFsaWFzOiBhbGlhcyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdW5lc2NhcGVBbGlhcyhhbGlhcyksXG4gICAgdXJsXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdpa2lsaW5rTm9kZShub2RlOiBXaWtpTGlua05vZGUsICRzdHJpbmc6IHN0cmluZyk6IFBhcnNlTGlua1Jlc3VsdCB7XG4gIGNvbnN0IHBvc2l0aW9uID0gZW5zdXJlTm9uTnVsbGFibGUobm9kZS5wb3NpdGlvbik7XG4gIHJldHVybiBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8UGFyc2VMaW5rUmVzdWx0Pih7XG4gICAgYWxpYXM6ICRzdHJpbmcuaW5jbHVkZXMoV0lLSUxJTktfRElWSURFUikgPyBub2RlLmRhdGEuYWxpYXMgOiB1bmRlZmluZWQsXG4gICAgZW5kT2Zmc2V0OiBlbnN1cmVOb25OdWxsYWJsZShwb3NpdGlvbi5lbmQub2Zmc2V0KSxcbiAgICBpc0VtYmVkOiBmYWxzZSxcbiAgICBpc0V4dGVybmFsOiBmYWxzZSxcbiAgICBpc0ZpbGVVcmw6IGZhbHNlLFxuICAgIGlzV2lraWxpbms6IHRydWUsXG4gICAgcmF3OiBnZXRSYXdMaW5rKG5vZGUsICRzdHJpbmcpLFxuICAgIHN0YXJ0T2Zmc2V0OiBlbnN1cmVOb25OdWxsYWJsZShwb3NpdGlvbi5zdGFydC5vZmZzZXQpLFxuICAgIHVybDogbm9kZS52YWx1ZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gdHJpbVd3d0F1dG9saW5rTGl0ZXJhbChsaXRlcmFsOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB0cmltbWVkID0gdHJpbVd3d0F1dG9saW5rTGl0ZXJhbEVuZChsaXRlcmFsKTtcbiAgcmV0dXJuIHRyaW1tZWQgPT09IGxpdGVyYWwgPyBsaXRlcmFsIDogdHJpbVd3d0F1dG9saW5rTGl0ZXJhbCh0cmltbWVkKTtcbn1cblxuZnVuY3Rpb24gdHJpbVd3d0F1dG9saW5rTGl0ZXJhbEVuZChsaXRlcmFsOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBsYXN0Q2hhcmFjdGVyID0gbGl0ZXJhbC5zbGljZSgtMSk7XG4gIGlmIChXV1dfQVVUT0xJTktfTElURVJBTF9UUkFJTElOR19QVU5DVFVBVElPTi5oYXMobGFzdENoYXJhY3RlcikpIHtcbiAgICByZXR1cm4gbGl0ZXJhbC5zbGljZSgwLCAtMSk7XG4gIH1cblxuICAvLyBHRk06IGEgY2xvc2luZyBwYXJlbnRoZXNpcyB3aXRoIG5vIG9wZW5pbmcgb25lIHRvIG1hdGNoIGlzIG5vdCBwYXJ0IG9mIHRoZSBsaXRlcmFsLlxuICByZXR1cm4gbGFzdENoYXJhY3RlciA9PT0gJyknICYmIGNvdW50T2NjdXJyZW5jZXMobGl0ZXJhbCwgJyknKSA+IGNvdW50T2NjdXJyZW5jZXMobGl0ZXJhbCwgJygnKVxuICAgID8gbGl0ZXJhbC5zbGljZSgwLCAtMSlcbiAgICA6IGxpdGVyYWwucmVwbGFjZShUUkFJTElOR19FTlRJVFlfUkVGRVJFTkNFX1JFR19FWFAsICcnKTtcbn1cblxuZnVuY3Rpb24gd2lkZW5Ub1dob2xlVmFsdWUocGFyYW1zOiBXaWRlblRvV2hvbGVWYWx1ZVBhcmFtcyk6IFBhcnNlTGlua1Jlc3VsdCB7XG4gIGNvbnN0IHsgY2FwdGlvbkVuZE9mZnNldCwgbGluaywgdmFsdWUgfSA9IHBhcmFtcztcbiAgLy8gTmV2ZXIgZW1wdHk6IGEgdmFsdWUgd2hvc2UgY2FwdGlvbiBpcyBlbXB0eSwgYFtdKHVybClgLCBpcyBhIGxpbmsgQ29tbW9uTWFyayBhbHJlYWR5IHNwYW5zIHdob2xlLlxuICBjb25zdCBhbGlhcyA9IHZhbHVlLnNsaWNlKDEsIGNhcHRpb25FbmRPZmZzZXQpO1xuICByZXR1cm4ge1xuICAgIC4uLmxpbmssXG4gICAgYWxpYXMsXG4gICAgZW5kT2Zmc2V0OiB2YWx1ZS5sZW5ndGgsXG4gICAgcmF3OiB2YWx1ZSxcbiAgICBzdGFydE9mZnNldDogMCxcbiAgICB1bmVzY2FwZWRBbGlhczogdW5lc2NhcGVBbGlhcyhhbGlhcylcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWlCQSwwQkFBNEM7QUFDNUMscUJBQXVDO0FBQ3ZDLG9CQUEyQjtBQUMzQix5QkFBa0M7QUFDbEMsaUJBSU87QUFDUCw2QkFBdUM7QUFDdkMsb0JBQXVCO0FBQ3ZCLDBCQUF3QjtBQUN4Qiw4QkFBK0I7QUFDL0IsOEJBQXNCO0FBS3RCLE1BQU0sc0NBQXNDO0FBRTVDLE1BQU0sbUJBQW1CO0FBYXpCLE1BQU0seUNBQXlDO0FBTS9DLE1BQU0sc0NBQXNDO0FBSzVDLE1BQU0sNENBQTRDLG9CQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEdBQUcsQ0FBQztBQUtsRyxNQUFNLG9D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
@@ -44,11 +44,11 @@ export interface ParseLinkFrontmatterReferenceWithOffsets extends ParseLinkFront
44
44
  /**
45
45
  * An end offset of the link in the frontmatter value.
46
46
  */
47
- endOffset: number;
47
+ readonly endOffset: number;
48
48
  /**
49
49
  * A start offset of the link in the frontmatter value.
50
50
  */
51
- startOffset: number;
51
+ readonly startOffset: number;
52
52
  }
53
53
  /**
54
54
  * Options for {@link parseLink}. The same as {@link ParseLinksOptions}.
@@ -41,8 +41,8 @@ ensureBrowserProcess();
41
41
  __isPatched: true
42
42
  }
43
43
  );
44
- function extractDefault(module) {
45
- return module && module.__esModule && "default" in module ? module.default : module;
44
+ function extractDefault($module) {
45
+ return $module && $module.__esModule && "default" in $module ? $module.default : $module;
46
46
  }
47
47
  const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
48
48
  "@codemirror/autocomplete",
@@ -84,9 +84,9 @@ ensureBrowserProcess();
84
84
  return process;
85
85
  }
86
86
  } else {
87
- const module = originalRequire?.(id);
88
- if (module) {
89
- return extractDefault(module);
87
+ const $module = originalRequire?.(id);
88
+ if ($module) {
89
+ return extractDefault($module);
90
90
  }
91
91
  }
92
92
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
@@ -427,4 +427,4 @@ function makeMatchers(paths, defaultMatcher) {
427
427
  PathSettings,
428
428
  pathsValidator
429
429
  });
430
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYXRoLXNldHRpbmdzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUaGlzIG1vZHVsZSBwcm92aWRlcyBjbGFzc2VzIGFuZCB2YWxpZGF0b3JzIGZvciBtYW5hZ2luZyBpbmNsdWRlL2V4Y2x1ZGUgcGF0aCBzZXR0aW5ncy5cbiAqXG4gKiBBbiBlbnRyeSB0YWtlcyBvbmUgb2YgdGhyZWUgZm9ybXMsIGFuZCBldmVyeSBmb3JtIG1hdGNoZXMgY2FzZS1pbnNlbnNpdGl2ZWx5OlxuICpcbiAqIC0gQSByZWd1bGFyIGV4cHJlc3Npb24gbGl0ZXJhbCwgYC9wYXR0ZXJuL2ZsYWdzYC4gSXRzIG93biBmbGFncyBhcmUgaG9ub3VyZWQgYW5kIGBpYCBpcyBhbHdheXMgYWRkZWQuIGBnYCBhbmQgYHlgIGFyZVxuICogICBhY2NlcHRlZCBhbmQgZHJvcHBlZCwgc2luY2UgdGhleSBtYWtlIGBSZWdFeHAudGVzdGAgc3RhdGVmdWwgYW5kIHNheSBub3RoaW5nIGFib3V0IHdoaWNoIHBhdGhzIG1hdGNoLlxuICogLSBBIGdsb2IsIGFuIGVudHJ5IGhvbGRpbmcgYW4gdW5lc2NhcGVkIGAqYCwgYD9gIG9yIGBbYC4gYCpgIG1hdGNoZXMgd2l0aGluIG9uZSBwYXRoIHNlZ21lbnQsIGAqKmAgYWNyb3NzIHNlZ21lbnRzLFxuICogICBgP2Agb25lIGNoYXJhY3RlciBhbmQgYFthYmNdYCAvIGBbIWFiY11gIGEgY2hhcmFjdGVyIGNsYXNzLiBBIGdsb2Igd2l0aCBubyBgL2AgbWF0Y2hlcyBhIGZpbGUgb3IgZm9sZGVyIE5BTUUgYXQgYW55XG4gKiAgIGRlcHRoLCBhcyBpbiBgLmdpdGlnbm9yZWAgKGAqLnBkZmAgbWF0Y2hlcyBgYS9iL2MucGRmYCk7IG9uZSB3aXRoIGEgYC9gIGlzIGFuY2hvcmVkIHRvIHRoZSB2YXVsdCByb290XG4gKiAgIChgQXR0YWNobWVudHMvKi5wZGZgKS4gQSB0cmFpbGluZyBgL2AgbWFrZXMgaXQgbWF0Y2ggZm9sZGVycyBvbmx5LlxuICogLSBBIHBsYWluIHBhdGgsIGV2ZXJ5IG90aGVyIGVudHJ5LCB3aGljaCBtYXRjaGVzIHRoYXQgcGF0aCBhbmQgZXZlcnl0aGluZyBpbnNpZGUgaXQuIEEgbGl0ZXJhbCBgKmAsIGA/YCwgYFtgIG9yIGBcXGAgaW5cbiAqICAgYSBwbGFpbiBwYXRoIG9yIGEgZ2xvYiBpcyB3cml0dGVuIGVzY2FwZWQgKGBcXCpgKS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IE1heWJlUmV0dXJuIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUnO1xuXG5pbXBvcnQgeyBlc2NhcGVSZWdFeHAgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcmVnLWV4cCc7XG5pbXBvcnQgeyBhc3NlcnROZXZlciB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5cbmltcG9ydCB7IHQgfSBmcm9tICcuL2kxOG4vaTE4bi50cyc7XG5cbmVudW0gUGF0aFNldHRpbmdUeXBlIHtcbiAgRXhjbHVkZSA9ICdFeGNsdWRlJyxcbiAgSW5jbHVkZSA9ICdJbmNsdWRlJ1xufVxuXG50eXBlIENoYXJhY3RlckNsYXNzU291cmNlUmVzdWx0ID0gSW52YWxpZFNvdXJjZVJlc3VsdCB8IFZhbGlkQ2hhcmFjdGVyQ2xhc3NTb3VyY2VSZXN1bHQ7XG5cbmludGVyZmFjZSBDb21waWxlUmVzdWx0IHtcbiAgcmVhZG9ubHkgZXJyb3I/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1hdGNoZXI/OiBQYXRoTWF0Y2hlcjtcbn1cblxudHlwZSBHbG9iU291cmNlUmVzdWx0ID0gSW52YWxpZFNvdXJjZVJlc3VsdCB8IFZhbGlkR2xvYlNvdXJjZVJlc3VsdDtcblxuaW50ZXJmYWNlIEludmFsaWRTb3VyY2VSZXN1bHQge1xuICByZWFkb25seSBlcnJvcjogc3RyaW5nO1xuICByZWFkb25seSBpc1ZhbGlkOiBmYWxzZTtcbn1cblxuaW50ZXJmYWNlIFBhdGhNYXRjaGVyIHtcbiAgaXNNYXRjaDogKHBhdGg6IHN0cmluZywgaXNGb2xkZXI6IGJvb2xlYW4pID0+IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBWYWxpZENoYXJhY3RlckNsYXNzU291cmNlUmVzdWx0IGV4dGVuZHMgVmFsaWRHbG9iU291cmNlUmVzdWx0IHtcbiAgcmVhZG9ubHkgZW5kSW5kZXg6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFZhbGlkR2xvYlNvdXJjZVJlc3VsdCB7XG4gIHJlYWRvbmx5IGlzVmFsaWQ6IHRydWU7XG4gIHJlYWRvbmx5IHNvdXJjZTogc3RyaW5nO1xufVxuXG5jb25zdCBSRUdfRVhQX0VOVFJZX1JFR19FWFAgPSAvXlxcLy4qXFwvW2Etel0qJC9zO1xuY29uc3QgQ0FTRV9JTlNFTlNJVElWRV9GTEFHID0gJ2knO1xuY29uc3QgU1RBVEVGVUxfRkxBR1NfUkVHX0VYUCA9IC9bZ3ldL2c7XG5jb25zdCBHTE9CX0NIQVJBQ1RFUlMgPSBuZXcgU2V0KFsnPycsICdbJywgJyonXSk7XG5jb25zdCBHTE9CU1RBUiA9ICcqKic7XG5jb25zdCBHTE9CU1RBUl9GT0xERVJTID0gJyoqLyc7XG5cbmNvbnN0IEFMV0FZU19NQVRDSEVSOiBQYXRoTWF0Y2hlciA9IHtcbiAgaXNNYXRjaDogKCkgPT4gdHJ1ZVxufTtcblxuY29uc3QgTkVWRVJfTUFUQ0hFUjogUGF0aE1hdGNoZXIgPSB7XG4gIGlzTWF0Y2g6ICgpID0+IGZhbHNlXG59O1xuXG5jbGFzcyBQYXRoU2V0dGluZyB7XG4gIHB1YmxpYyBnZXQgYXJyYXkoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9hcnJheTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgYXJyYXkodmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5fYXJyYXkgPSB2YWx1ZS5maWx0ZXIoQm9vbGVhbik7XG4gICAgdGhpcy5tYXRjaGVycyA9IG1ha2VNYXRjaGVycyh0aGlzLl9hcnJheSwgdGhpcy5kZWZhdWx0TWF0Y2hlcikgPz8gW3RoaXMuZGVmYXVsdE1hdGNoZXJdO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXJyYXk6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdE1hdGNoZXI6IFBhdGhNYXRjaGVyO1xuICBwcml2YXRlIG1hdGNoZXJzOiBQYXRoTWF0Y2hlcltdO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHR5cGU6IFBhdGhTZXR0aW5nVHlwZSkge1xuICAgIHRoaXMuZGVmYXVsdE1hdGNoZXIgPSBnZXREZWZhdWx0TWF0Y2hlcih0eXBlKTtcbiAgICB0aGlzLm1hdGNoZXJzID0gW3RoaXMuZGVmYXVsdE1hdGNoZXJdO1xuICB9XG5cbiAgcHVibGljIGlzUGF0aElnbm9yZWQocGF0aDogc3RyaW5nLCBpc0ZvbGRlcjogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlzTWF0Y2ggPSB0aGlzLm1hdGNoZXJzLnNvbWUoKG1hdGNoZXIpID0+IG1hdGNoZXIuaXNNYXRjaChwYXRoLCBpc0ZvbGRlcikpO1xuICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBBbGwgYnJhbmNoZXMgY292ZXJlZCBidXQgdjggcmVwb3J0cyBzd2l0Y2ggYXMgcGFydGlhbC4gKi9cbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgICAgIGNhc2UgUGF0aFNldHRpbmdUeXBlLkV4Y2x1ZGU6IHtcbiAgICAgICAgcmV0dXJuIGlzTWF0Y2g7XG4gICAgICB9XG4gICAgICBjYXNlIFBhdGhTZXR0aW5nVHlwZS5JbmNsdWRlOiB7XG4gICAgICAgIHJldHVybiAhaXNNYXRjaDtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIEV4aGF1c3RpdmUgc3dpdGNoIGd1YXJkLiAqL1xuICAgICAgICBhc3NlcnROZXZlcih0aGlzLnR5cGUpO1xuICAgICAgfVxuICAgICAgICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEEgY2xhc3MgZm9yIG1hbmFnaW5nIGluY2x1ZGUvZXhjbHVkZSBwYXRoIHNldHRpbmdzLlxuICpcbiAqIFNlZSB0aGUgbW9kdWxlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBlbnRyeSBzeW50YXg6IHBsYWluIHBhdGhzLCBnbG9icyBhbmQgcmVndWxhciBleHByZXNzaW9uIGxpdGVyYWxzLCBhbGwgbWF0Y2hlZFxuICogY2FzZS1pbnNlbnNpdGl2ZWx5LlxuICovXG5leHBvcnQgY2xhc3MgUGF0aFNldHRpbmdzIHtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGV4Y2x1ZGUgcGF0aHMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBleGNsdWRlIHBhdGhzLlxuICAgKi9cbiAgcHVibGljIGdldCBleGNsdWRlUGF0aHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9leGNsdWRlUGF0aHMuYXJyYXk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgZXhjbHVkZSBwYXRocy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGV4Y2x1ZGUgcGF0aHMuXG4gICAqL1xuICBwdWJsaWMgc2V0IGV4Y2x1ZGVQYXRocyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICB0aGlzLl9leGNsdWRlUGF0aHMuYXJyYXkgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpbmNsdWRlIHBhdGhzLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgaW5jbHVkZSBwYXRocy5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW5jbHVkZVBhdGhzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5faW5jbHVkZVBhdGhzLmFycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGluY2x1ZGUgcGF0aHMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBpbmNsdWRlIHBhdGhzLlxuICAgKi9cbiAgcHVibGljIHNldCBpbmNsdWRlUGF0aHModmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5faW5jbHVkZVBhdGhzLmFycmF5ID0gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9leGNsdWRlUGF0aHMgPSBuZXcgUGF0aFNldHRpbmcoUGF0aFNldHRpbmdUeXBlLkV4Y2x1ZGUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbmNsdWRlUGF0aHMgPSBuZXcgUGF0aFNldHRpbmcoUGF0aFNldHRpbmdUeXBlLkluY2x1ZGUpO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBwYXRoIGlzIGlnbm9yZWQgYnkgdGhlIGluY2x1ZGUvZXhjbHVkZSBwYXRoIHNldHRpbmdzLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIGNoZWNrLlxuICAgKiBAcGFyYW0gaXNGb2xkZXIgLSBXaGV0aGVyIHRoZSBwYXRoIGlzIGEgZm9sZGVyLiBPbmx5IGEgZm9sZGVyLW9ubHkgZ2xvYiAob25lIGVuZGluZyBpbiBgL2ApIHJlYWRzIGl0OiBzdWNoIGEgZ2xvYlxuICAgKiBhbHdheXMgbWF0Y2hlcyB0aGUgY29udGVudHMgb2YgYSBtYXRjaGluZyBmb2xkZXIsIGFuZCBtYXRjaGVzIHRoZSBmb2xkZXIgaXRzZWxmIG9ubHkgd2hlbiB0aGlzIGlzIGB0cnVlYC5cbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBwYXRoIGlzIGlnbm9yZWQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHVibGljIGlzUGF0aElnbm9yZWQocGF0aDogc3RyaW5nLCBpc0ZvbGRlciA9IGZhbHNlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2luY2x1ZGVQYXRocy5pc1BhdGhJZ25vcmVkKHBhdGgsIGlzRm9sZGVyKSB8fCB0aGlzLl9leGNsdWRlUGF0aHMuaXNQYXRoSWdub3JlZChwYXRoLCBpc0ZvbGRlcik7XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgaW5jbHVkZS9leGNsdWRlIHBhdGggZW50cmllcywgcmVwb3J0aW5nIHRoZSBmaXJzdCBlbnRyeSB0aGF0IGlzIG5vdCBhIHZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiBvciBnbG9iLlxuICpcbiAqIEFuIGludmFsaWQgZW50cnkgZG9lcyBub3QgdGhyb3cgd2hlbiBhc3NpZ25lZCB0byB7QGxpbmsgUGF0aFNldHRpbmdzfSDigJQgdGhlIHdob2xlIGxpc3QgZmFsbHMgYmFjayB0byBpdHMgZGVmYXVsdFxuICogcGF0dGVybiBpbnN0ZWFkIOKAlCBzbyB0aGlzIHZhbGlkYXRvciBpcyB3aGF0IHN1cmZhY2VzIHRoZSBwcm9ibGVtIHRvIHRoZSB1c2VyLiBUaGUgbWVzc2FnZSBuYW1lcyB0aGUgZW50cnkgYW5kIHRoZVxuICogcmVhc29uIGl0IGlzIGludmFsaWQuXG4gKlxuICogQHBhcmFtIHBhdGhzIC0gVGhlIHBhdGggZW50cmllcyB0byB2YWxpZGF0ZS5cbiAqIEByZXR1cm5zIEEgbWVzc2FnZSBuYW1pbmcgdGhlIGZpcnN0IGludmFsaWQgZW50cnksIG9yIG5vdGhpbmcgd2hlbiBldmVyeSBlbnRyeSBpcyB2YWxpZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGhzVmFsaWRhdG9yKHBhdGhzOiBzdHJpbmdbXSk6IE1heWJlUmV0dXJuPHN0cmluZz4ge1xuICBmb3IgKGNvbnN0IHBhdGggb2YgcGF0aHMpIHtcbiAgICBjb25zdCB7IGVycm9yIH0gPSBjb21waWxlRW50cnkocGF0aCwgTkVWRVJfTUFUQ0hFUik7XG4gICAgaWYgKGVycm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcGlsZUVudHJ5KGVudHJ5OiBzdHJpbmcsIGRlZmF1bHRNYXRjaGVyOiBQYXRoTWF0Y2hlcik6IENvbXBpbGVSZXN1bHQge1xuICBpZiAoZW50cnkgPT09ICcvJykge1xuICAgIHJldHVybiB7IG1hdGNoZXI6IGRlZmF1bHRNYXRjaGVyIH07XG4gIH1cblxuICBpZiAoUkVHX0VYUF9FTlRSWV9SRUdfRVhQLnRlc3QoZW50cnkpKSB7XG4gICAgY29uc3QgZmxhZ3NTZXBhcmF0b3JJbmRleCA9IGVudHJ5Lmxhc3RJbmRleE9mKCcvJyk7XG4gICAgcmV0dXJuIGNvbXBpbGVSZWdFeHBFbnRyeShlbnRyeSwgZW50cnkuc2xpY2UoMSwgZmxhZ3NTZXBhcmF0b3JJbmRleCksIGVudHJ5LnNsaWNlKGZsYWdzU2VwYXJhdG9ySW5kZXggKyAxKSk7XG4gIH1cblxuICByZXR1cm4gaGFzVW5lc2NhcGVkR2xvYkNoYXJhY3RlcihlbnRyeSkgPyBjb21waWxlR2xvYkVudHJ5KGVudHJ5KSA6IGNvbXBpbGVQbGFpblBhdGhFbnRyeShlbnRyeSk7XG59XG5cbmZ1bmN0aW9uIGNvbXBpbGVHbG9iRW50cnkoZ2xvYjogc3RyaW5nKTogQ29tcGlsZVJlc3VsdCB7XG4gIGNvbnN0IGlzRm9sZGVyT25seSA9IGdsb2IuZW5kc1dpdGgoJy8nKTtcbiAgY29uc3QgYm9keSA9IGdsb2IucmVwbGFjZSgvXFwvKyQvLCAnJyk7XG4gIGNvbnN0IGdsb2JTb3VyY2UgPSBnZXRHbG9iU291cmNlKGJvZHkpO1xuICBpZiAoIWdsb2JTb3VyY2UuaXNWYWxpZCkge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvcjogdCgoJCkgPT4gJC5vYnNpZGlhbkxpYi5wYXRoU2V0dGluZ3MuaW52YWxpZEdsb2IsIHsgZ2xvYiwgcmVhc29uOiBnbG9iU291cmNlLmVycm9yIH0pXG4gICAgfTtcbiAgfVxuICBjb25zdCB7IHNvdXJjZSB9ID0gZ2xvYlNvdXJjZTtcblxuICBjb25zdCBwcmVmaXggPSBib2R5LmluY2x1ZGVzKCcvJykgPyAnXicgOiAnKD86XnwvKSc7XG5cbiAgbGV0IHNlbGZSZWdFeHA6IFJlZ0V4cDtcbiAgbGV0IGNvbnRlbnRzUmVnRXhwOiBSZWdFeHA7XG4gIHRyeSB7XG4gICAgc2VsZlJlZ0V4cCA9IG5ldyBSZWdFeHAoYCR7cHJlZml4fSR7c291cmNlfSRgLCBDQVNFX0lOU0VOU0lUSVZFX0ZMQUcpO1xuICAgIGNvbnRlbnRzUmVnRXhwID0gbmV3IFJlZ0V4cChgJHtwcmVmaXh9JHtzb3VyY2V9L2AsIENBU0VfSU5TRU5TSVRJVkVfRkxBRyk7XG4gIH0gY2F0Y2ggKGVycm9yXykge1xuICAgIC8vIEFuIG91dC1vZi1vcmRlciBjaGFyYWN0ZXIgY2xhc3MgcmFuZ2UgKGBbei1hXWApIGlzIHRoZSBvbmUgaW52YWxpZCBnbG9iIG9ubHkgdGhlIGVuZ2luZSBjYW4gdGVsbC5cbiAgICByZXR1cm4ge1xuICAgICAgZXJyb3I6IHQoKCQpID0+ICQub2JzaWRpYW5MaWIucGF0aFNldHRpbmdzLmludmFsaWRHbG9iLCB7IGdsb2IsIHJlYXNvbjogZ2V0UmVnRXhwRXJyb3JSZWFzb24oZXJyb3JfKSB9KVxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1hdGNoZXI6IHtcbiAgICAgIGlzTWF0Y2g6IChwYXRoLCBpc0ZvbGRlcikgPT4gY29udGVudHNSZWdFeHAudGVzdChwYXRoKSB8fCAoKGlzRm9sZGVyIHx8ICFpc0ZvbGRlck9ubHkpICYmIHNlbGZSZWdFeHAudGVzdChwYXRoKSlcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbXBpbGVQbGFpblBhdGhFbnRyeShwYXRoOiBzdHJpbmcpOiBDb21waWxlUmVzdWx0IHtcbiAgY29uc3QgdW5lc2NhcGVkUGF0aCA9IHBhdGgucmVwbGFjZUFsbCgvXFxcXCg/PGNoYXJhY3Rlcj4uKS9ncywgJyQ8Y2hhcmFjdGVyPicpLnJlcGxhY2UoL1xcLyskLywgJycpO1xuICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKGBeJHtlc2NhcGVSZWdFeHAodW5lc2NhcGVkUGF0aCl9KD86L3wkKWAsIENBU0VfSU5TRU5TSVRJVkVfRkxBRyk7XG4gIHJldHVybiB7XG4gICAgbWF0Y2hlcjoge1xuICAgICAgaXNNYXRjaDogKHBhdGhUb0NoZWNrKSA9PiByZWdFeHAudGVzdChwYXRoVG9DaGVjaylcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbXBpbGVSZWdFeHBFbnRyeShlbnRyeTogc3RyaW5nLCBzb3VyY2U6IHN0cmluZywgZmxhZ3M6IHN0cmluZyk6IENvbXBpbGVSZXN1bHQge1xuICBsZXQgcmVnRXhwOiBSZWdFeHA7XG4gIHRyeSB7XG4gICAgLy8gQ29tcGlsZWQgd2l0aCB0aGUgZmxhZ3MgYXMgd3JpdHRlbiBmaXJzdCwgc28gYW4gdW5rbm93biBvciByZXBlYXRlZCBmbGFnIGlzIHJlcG9ydGVkIHJhdGhlciB0aGFuIGlnbm9yZWQuXG4gICAgbmV3IFJlZ0V4cChzb3VyY2UsIGZsYWdzKTtcbiAgICBjb25zdCBlZmZlY3RpdmVGbGFncyA9IGZsYWdzLnJlcGxhY2VBbGwoU1RBVEVGVUxfRkxBR1NfUkVHX0VYUCwgJycpO1xuICAgIHJlZ0V4cCA9IG5ldyBSZWdFeHAoc291cmNlLCBlZmZlY3RpdmVGbGFncy5pbmNsdWRlcyhDQVNFX0lOU0VOU0lUSVZFX0ZMQUcpID8gZWZmZWN0aXZlRmxhZ3MgOiBgJHtlZmZlY3RpdmVGbGFnc30ke0NBU0VfSU5TRU5TSVRJVkVfRkxBR31gKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBBIHBhcnRpYWxseSB0eXBlZCByZWdleCBsaXRlcmFsIChgL15JbmJveFxcL2ApIGlzIG5vdCBwYXJzZWFibGUuXG4gICAgLy8gUmVwb3J0IGl0IGluc3RlYWQgb2YgdGhyb3dpbmcgZnJvbSBhIHNldHRpbmdzIHNldHRlciwgd2hpY2ggd291bGQgYnJlYWsgYm90aCB0aGUgc2V0dGluZ3MgVUkgYW5kIHRoZSBzYXZlIHBhdGguXG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yOiB0KCgkKSA9PiAkLm9ic2lkaWFuTGliLnBhdGhTZXR0aW5ncy5pbnZhbGlkUmVndWxhckV4cHJlc3Npb24sIHsgcmVhc29uOiBnZXRSZWdFeHBFcnJvclJlYXNvbihlcnJvciksIHJlZ0V4cDogZW50cnkgfSlcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtYXRjaGVyOiB7XG4gICAgICBpc01hdGNoOiAocGF0aCkgPT4gcmVnRXhwLnRlc3QocGF0aClcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGVzY2FwZUNoYXJhY3RlckNsYXNzQ2hhcmFjdGVyKGNoYXJhY3Rlcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIC9bLVxcXFxcXF1eW10vLnRlc3QoY2hhcmFjdGVyKSA/IGBcXFxcJHtjaGFyYWN0ZXJ9YCA6IGNoYXJhY3Rlcjtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hhcmFjdGVyQ2xhc3NTb3VyY2UoZ2xvYjogc3RyaW5nLCBvcGVuSW5kZXg6IG51bWJlcik6IENoYXJhY3RlckNsYXNzU291cmNlUmVzdWx0IHtcbiAgbGV0IGluZGV4ID0gb3BlbkluZGV4ICsgMTtcbiAgbGV0IGlzTmVnYXRlZCA9IGZhbHNlO1xuICBpZiAoZ2xvYltpbmRleF0gPT09ICchJyB8fCBnbG9iW2luZGV4XSA9PT0gJ14nKSB7XG4gICAgaXNOZWdhdGVkID0gdHJ1ZTtcbiAgICBpbmRleCsrO1xuICB9XG5cbiAgbGV0IGNvbnRlbnQgPSAnJztcbiAgaWYgKGdsb2JbaW5kZXhdID09PSAnXScpIHtcbiAgICBjb250ZW50ICs9IFN0cmluZy5yYXdgXFxdYDtcbiAgICBpbmRleCsrO1xuICB9XG5cbiAgd2hpbGUgKGluZGV4IDwgZ2xvYi5sZW5ndGgpIHtcbiAgICBjb25zdCBjaGFyYWN0ZXIgPSBnbG9iLmNoYXJBdChpbmRleCk7XG4gICAgaWYgKGNoYXJhY3RlciA9PT0gJ10nKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbmRJbmRleDogaW5kZXggKyAxLFxuICAgICAgICBpc1ZhbGlkOiB0cnVlLFxuICAgICAgICBzb3VyY2U6IGBbJHtpc05lZ2F0ZWQgPyAnXi8nIDogJyd9JHtjb250ZW50fV1gXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChjaGFyYWN0ZXIgPT09ICdcXFxcJykge1xuICAgICAgaW5kZXgrKztcbiAgICAgIGlmIChpbmRleCA+PSBnbG9iLmxlbmd0aCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNvbnRlbnQgKz0gZXNjYXBlQ2hhcmFjdGVyQ2xhc3NDaGFyYWN0ZXIoZ2xvYi5jaGFyQXQoaW5kZXgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGVudCArPSBjaGFyYWN0ZXIgPT09ICctJyA/IGNoYXJhY3RlciA6IGVzY2FwZUNoYXJhY3RlckNsYXNzQ2hhcmFjdGVyKGNoYXJhY3Rlcik7XG4gICAgfVxuICAgIGluZGV4Kys7XG4gIH1cblxuICByZXR1cm4geyBlcnJvcjogdCgoJCkgPT4gJC5vYnNpZGlhbkxpYi5wYXRoU2V0dGluZ3MudW5jbG9zZWRDaGFyYWN0ZXJDbGFzcyksIGlzVmFsaWQ6IGZhbHNlIH07XG59XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRNYXRjaGVyKHR5cGU6IFBhdGhTZXR0aW5nVHlwZSk6IFBhdGhNYXRjaGVyIHtcbiAgLyogdjggaWdub3JlIHN0YXJ0IC0tIEFsbCBicmFuY2hlcyBjb3ZlcmVkIGJ1dCB2OCByZXBvcnRzIHN3aXRjaCBhcyBwYXJ0aWFsLiAqL1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICAgIGNhc2UgUGF0aFNldHRpbmdUeXBlLkV4Y2x1ZGU6IHtcbiAgICAgIHJldHVybiBORVZFUl9NQVRDSEVSO1xuICAgIH1cbiAgICBjYXNlIFBhdGhTZXR0aW5nVHlwZS5JbmNsdWRlOiB7XG4gICAgICByZXR1cm4gQUxXQVlTX01BVENIRVI7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBFeGhhdXN0aXZlIHN3aXRjaCBndWFyZC4gKi9cbiAgICAgIGFzc2VydE5ldmVyKHR5cGUpO1xuICAgIH1cbiAgICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0R2xvYlNvdXJjZShnbG9iOiBzdHJpbmcpOiBHbG9iU291cmNlUmVzdWx0IHtcbiAgbGV0IHNvdXJjZSA9ICcnO1xuICBsZXQgaW5kZXggPSAwO1xuXG4gIHdoaWxlIChpbmRleCA8IGdsb2IubGVuZ3RoKSB7XG4gICAgY29uc3QgY2hhcmFjdGVyID0gZ2xvYi5jaGFyQXQoaW5kZXgpO1xuICAgIHN3aXRjaCAoY2hhcmFjdGVyKSB7XG4gICAgICBjYXNlICc/Jzoge1xuICAgICAgICBzb3VyY2UgKz0gJ1teL10nO1xuICAgICAgICBpbmRleCsrO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ1snOiB7XG4gICAgICAgIGNvbnN0IGNoYXJhY3RlckNsYXNzID0gZ2V0Q2hhcmFjdGVyQ2xhc3NTb3VyY2UoZ2xvYiwgaW5kZXgpO1xuICAgICAgICBpZiAoIWNoYXJhY3RlckNsYXNzLmlzVmFsaWQpIHtcbiAgICAgICAgICByZXR1cm4gY2hhcmFjdGVyQ2xhc3M7XG4gICAgICAgIH1cbiAgICAgICAgc291cmNlICs9IGNoYXJhY3RlckNsYXNzLnNvdXJjZTtcbiAgICAgICAgaW5kZXggPSBjaGFyYWN0ZXJDbGFzcy5lbmRJbmRleDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICcqJzoge1xuICAgICAgICBpZiAoIWdsb2Iuc3RhcnRzV2l0aChHTE9CU1RBUiwgaW5kZXgpKSB7XG4gICAgICAgICAgc291cmNlICs9ICdbXi9dKic7XG4gICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzU2VnbWVudFN0YXJ0ID0gaW5kZXggPT09IDAgfHwgZ2xvYltpbmRleCAtIDFdID09PSAnLyc7XG4gICAgICAgIGlmIChpc1NlZ21lbnRTdGFydCAmJiBnbG9iLnN0YXJ0c1dpdGgoR0xPQlNUQVJfRk9MREVSUywgaW5kZXgpKSB7XG4gICAgICAgICAgLy8gYCoqL2AgaXMgemVybyBvciBtb3JlIHdob2xlIGZvbGRlcnMuXG4gICAgICAgICAgc291cmNlICs9ICcoPzpbXi9dKi8pKic7XG4gICAgICAgICAgaW5kZXggKz0gR0xPQlNUQVJfRk9MREVSUy5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNTZWdtZW50U3RhcnQgJiYgaW5kZXggKyBHTE9CU1RBUi5sZW5ndGggPT09IGdsb2IubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gQSB0cmFpbGluZyBgLyoqYCBpcyBldmVyeXRoaW5nIGluc2lkZSB0aGUgZm9sZGVyLlxuICAgICAgICAgIHNvdXJjZSArPSAnLionO1xuICAgICAgICAgIGluZGV4ICs9IEdMT0JTVEFSLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBBbnkgb3RoZXIgYCoqYCBpcyBhbiBvcmRpbmFyeSBgKmAsIGFzIGluIGAuZ2l0aWdub3JlYC5cbiAgICAgICAgICBzb3VyY2UgKz0gJ1teL10qJztcbiAgICAgICAgICBpbmRleCArPSBHTE9CU1RBUi5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdcXFxcJzoge1xuICAgICAgICBpbmRleCsrO1xuICAgICAgICBpZiAoaW5kZXggPj0gZ2xvYi5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4geyBlcnJvcjogdCgoJCkgPT4gJC5vYnNpZGlhbkxpYi5wYXRoU2V0dGluZ3MudHJhaWxpbmdFc2NhcGUpLCBpc1ZhbGlkOiBmYWxzZSB9O1xuICAgICAgICB9XG4gICAgICAgIHNvdXJjZSArPSBlc2NhcGVSZWdFeHAoZ2xvYi5jaGFyQXQoaW5kZXgpKTtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHNvdXJjZSArPSBlc2NhcGVSZWdFeHAoY2hhcmFjdGVyKTtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgaXNWYWxpZDogdHJ1ZSwgc291cmNlIH07XG59XG5cbmZ1bmN0aW9uIGdldFJlZ0V4cEVycm9yUmVhc29uKGVycm9yOiB1bmtub3duKTogc3RyaW5nIHtcbiAgLyogdjggaWdub3JlIHN0YXJ0IC0tIFRoZSBSZWdFeHAgY29uc3RydWN0b3Igb25seSBldmVyIHRocm93cyBhIFN5bnRheEVycm9yLiAqL1xuICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICAvLyBWOCBwaHJhc2VzIGl0IGBJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogLzxzb3VyY2U+LzxmbGFncz46IDxyZWFzb24+YDsgdGhlIGVudHJ5IGlzIGFscmVhZHkgbmFtZWQuXG4gIGNvbnN0IG1hdGNoID0gL15JbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogXFwvLipcXC9bYS16XSo6ICg/PHJlYXNvbj4uKikkL3MuZXhlYyhtZXNzYWdlKTtcbiAgcmV0dXJuIG1hdGNoPy5ncm91cHM/LlsncmVhc29uJ10gPz8gbWVzc2FnZTtcbn1cblxuZnVuY3Rpb24gaGFzVW5lc2NhcGVkR2xvYkNoYXJhY3RlcihlbnRyeTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBlbnRyeS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBjaGFyYWN0ZXIgPSBlbnRyeS5jaGFyQXQoaW5kZXgpO1xuICAgIGlmIChjaGFyYWN0ZXIgPT09ICdcXFxcJykge1xuICAgICAgaW5kZXgrKztcbiAgICB9IGVsc2UgaWYgKEdMT0JfQ0hBUkFDVEVSUy5oYXMoY2hhcmFjdGVyKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbWFrZU1hdGNoZXJzKHBhdGhzOiBzdHJpbmdbXSwgZGVmYXVsdE1hdGNoZXI6IFBhdGhNYXRjaGVyKTogbnVsbCB8IFBhdGhNYXRjaGVyW10ge1xuICBpZiAocGF0aHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtkZWZhdWx0TWF0Y2hlcl07XG4gIH1cblxuICBjb25zdCBtYXRjaGVyczogUGF0aE1hdGNoZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHBhdGggb2YgcGF0aHMpIHtcbiAgICBjb25zdCB7IG1hdGNoZXIgfSA9IGNvbXBpbGVFbnRyeShwYXRoLCBkZWZhdWx0TWF0Y2hlcik7XG4gICAgaWYgKCFtYXRjaGVyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgbWF0Y2hlcnMucHVzaChtYXRjaGVyKTtcbiAgfVxuICByZXR1cm4gbWF0Y2hlcnM7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW1CQSxxQkFBNkI7QUFDN0IseUJBQTRCO0FBRTVCLGtCQUFrQjtBQWtDbEIsTUFBTSx3QkFBd0I7QUFDOUIsTUFBTSx3QkFBd0I7QUFDOUIsTUFBTSx5QkFBeUI7QUFDL0IsTUFBTSxrQkFBa0Isb0JBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUM7QUFDL0MsTUFBTSxXQUFXO0FBQ2pCLE1BQU0sbUJBQW1CO0FBRXpCLE1BQU0saUJBQThCO0FBQUEsRUFDbEMsU0FBUyxNQUFNO0FBQ2pCO0FBRUEsTUFBTSxnQkFBNkI7QUFBQSxFQUNqQyxTQUFTLE1BQU07QUFDakI7QUFFQSxNQUFNLFlBQVk7QUFBQSxFQWNULFlBQTZCLE1BQXVCO0FBQXZCO0FBQ2xDLFNBQUssaUJBQWlCLGtCQUFrQixJQUFJO0FBQzVDLFNBQUssV0FBVyxDQUFDLEtBQUssY0FBYztBQUFBLEVBQ3RDO0FBQUEsRUFIb0M7QUFBQSxFQWJwQyxJQUFXLFFBQWtCO0FBQzNCLFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFBQSxFQUVBLElBQVcsTUFBTSxPQUFpQjtBQUNoQyxTQUFLLFNBQVMsTUFBTSxPQUFPLE9BQU87QUFDbEMsU0FBSyxXQUFXLGFB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
430
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYXRoLXNldHRpbmdzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUaGlzIG1vZHVsZSBwcm92aWRlcyBjbGFzc2VzIGFuZCB2YWxpZGF0b3JzIGZvciBtYW5hZ2luZyBpbmNsdWRlL2V4Y2x1ZGUgcGF0aCBzZXR0aW5ncy5cbiAqXG4gKiBBbiBlbnRyeSB0YWtlcyBvbmUgb2YgdGhyZWUgZm9ybXMsIGFuZCBldmVyeSBmb3JtIG1hdGNoZXMgY2FzZS1pbnNlbnNpdGl2ZWx5OlxuICpcbiAqIC0gQSByZWd1bGFyIGV4cHJlc3Npb24gbGl0ZXJhbCwgYC9wYXR0ZXJuL2ZsYWdzYC4gSXRzIG93biBmbGFncyBhcmUgaG9ub3VyZWQgYW5kIGBpYCBpcyBhbHdheXMgYWRkZWQuIGBnYCBhbmQgYHlgIGFyZVxuICogICBhY2NlcHRlZCBhbmQgZHJvcHBlZCwgc2luY2UgdGhleSBtYWtlIGBSZWdFeHAudGVzdGAgc3RhdGVmdWwgYW5kIHNheSBub3RoaW5nIGFib3V0IHdoaWNoIHBhdGhzIG1hdGNoLlxuICogLSBBIGdsb2IsIGFuIGVudHJ5IGhvbGRpbmcgYW4gdW5lc2NhcGVkIGAqYCwgYD9gIG9yIGBbYC4gYCpgIG1hdGNoZXMgd2l0aGluIG9uZSBwYXRoIHNlZ21lbnQsIGAqKmAgYWNyb3NzIHNlZ21lbnRzLFxuICogICBgP2Agb25lIGNoYXJhY3RlciBhbmQgYFthYmNdYCAvIGBbIWFiY11gIGEgY2hhcmFjdGVyIGNsYXNzLiBBIGdsb2Igd2l0aCBubyBgL2AgbWF0Y2hlcyBhIGZpbGUgb3IgZm9sZGVyIE5BTUUgYXQgYW55XG4gKiAgIGRlcHRoLCBhcyBpbiBgLmdpdGlnbm9yZWAgKGAqLnBkZmAgbWF0Y2hlcyBgYS9iL2MucGRmYCk7IG9uZSB3aXRoIGEgYC9gIGlzIGFuY2hvcmVkIHRvIHRoZSB2YXVsdCByb290XG4gKiAgIChgQXR0YWNobWVudHMvKi5wZGZgKS4gQSB0cmFpbGluZyBgL2AgbWFrZXMgaXQgbWF0Y2ggZm9sZGVycyBvbmx5LlxuICogLSBBIHBsYWluIHBhdGgsIGV2ZXJ5IG90aGVyIGVudHJ5LCB3aGljaCBtYXRjaGVzIHRoYXQgcGF0aCBhbmQgZXZlcnl0aGluZyBpbnNpZGUgaXQuIEEgbGl0ZXJhbCBgKmAsIGA/YCwgYFtgIG9yIGBcXGAgaW5cbiAqICAgYSBwbGFpbiBwYXRoIG9yIGEgZ2xvYiBpcyB3cml0dGVuIGVzY2FwZWQgKGBcXCpgKS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IE1heWJlUmV0dXJuIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUnO1xuXG5pbXBvcnQgeyBlc2NhcGVSZWdFeHAgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcmVnLWV4cCc7XG5pbXBvcnQgeyBhc3NlcnROZXZlciB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5cbmltcG9ydCB7IHQgfSBmcm9tICcuL2kxOG4vaTE4bi50cyc7XG5cbmVudW0gUGF0aFNldHRpbmdUeXBlIHtcbiAgRXhjbHVkZSA9ICdFeGNsdWRlJyxcbiAgSW5jbHVkZSA9ICdJbmNsdWRlJ1xufVxuXG50eXBlIENoYXJhY3RlckNsYXNzU291cmNlUmVzdWx0ID0gSW52YWxpZFNvdXJjZVJlc3VsdCB8IFZhbGlkQ2hhcmFjdGVyQ2xhc3NTb3VyY2VSZXN1bHQ7XG5cbmludGVyZmFjZSBDb21waWxlUmVzdWx0IHtcbiAgcmVhZG9ubHkgZXJyb3I/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1hdGNoZXI/OiBQYXRoTWF0Y2hlcjtcbn1cblxudHlwZSBHbG9iU291cmNlUmVzdWx0ID0gSW52YWxpZFNvdXJjZVJlc3VsdCB8IFZhbGlkR2xvYlNvdXJjZVJlc3VsdDtcblxuaW50ZXJmYWNlIEludmFsaWRTb3VyY2VSZXN1bHQge1xuICByZWFkb25seSBlcnJvcjogc3RyaW5nO1xuICByZWFkb25seSBpc1ZhbGlkOiBmYWxzZTtcbn1cblxuaW50ZXJmYWNlIFBhdGhNYXRjaGVyIHtcbiAgcmVhZG9ubHkgaXNNYXRjaDogKHBhdGg6IHN0cmluZywgaXNGb2xkZXI6IGJvb2xlYW4pID0+IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBWYWxpZENoYXJhY3RlckNsYXNzU291cmNlUmVzdWx0IGV4dGVuZHMgVmFsaWRHbG9iU291cmNlUmVzdWx0IHtcbiAgcmVhZG9ubHkgZW5kSW5kZXg6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFZhbGlkR2xvYlNvdXJjZVJlc3VsdCB7XG4gIHJlYWRvbmx5IGlzVmFsaWQ6IHRydWU7XG4gIHJlYWRvbmx5IHNvdXJjZTogc3RyaW5nO1xufVxuXG5jb25zdCBSRUdfRVhQX0VOVFJZX1JFR19FWFAgPSAvXlxcLy4qXFwvW2Etel0qJC9zO1xuY29uc3QgQ0FTRV9JTlNFTlNJVElWRV9GTEFHID0gJ2knO1xuY29uc3QgU1RBVEVGVUxfRkxBR1NfUkVHX0VYUCA9IC9bZ3ldL2c7XG5jb25zdCBHTE9CX0NIQVJBQ1RFUlMgPSBuZXcgU2V0KFsnPycsICdbJywgJyonXSk7XG5jb25zdCBHTE9CU1RBUiA9ICcqKic7XG5jb25zdCBHTE9CU1RBUl9GT0xERVJTID0gJyoqLyc7XG5cbmNvbnN0IEFMV0FZU19NQVRDSEVSOiBQYXRoTWF0Y2hlciA9IHtcbiAgaXNNYXRjaDogKCkgPT4gdHJ1ZVxufTtcblxuY29uc3QgTkVWRVJfTUFUQ0hFUjogUGF0aE1hdGNoZXIgPSB7XG4gIGlzTWF0Y2g6ICgpID0+IGZhbHNlXG59O1xuXG5jbGFzcyBQYXRoU2V0dGluZyB7XG4gIHB1YmxpYyBnZXQgYXJyYXkoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9hcnJheTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgYXJyYXkodmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5fYXJyYXkgPSB2YWx1ZS5maWx0ZXIoQm9vbGVhbik7XG4gICAgdGhpcy5tYXRjaGVycyA9IG1ha2VNYXRjaGVycyh0aGlzLl9hcnJheSwgdGhpcy5kZWZhdWx0TWF0Y2hlcikgPz8gW3RoaXMuZGVmYXVsdE1hdGNoZXJdO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXJyYXk6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdE1hdGNoZXI6IFBhdGhNYXRjaGVyO1xuICBwcml2YXRlIG1hdGNoZXJzOiBQYXRoTWF0Y2hlcltdO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHR5cGU6IFBhdGhTZXR0aW5nVHlwZSkge1xuICAgIHRoaXMuZGVmYXVsdE1hdGNoZXIgPSBnZXREZWZhdWx0TWF0Y2hlcih0eXBlKTtcbiAgICB0aGlzLm1hdGNoZXJzID0gW3RoaXMuZGVmYXVsdE1hdGNoZXJdO1xuICB9XG5cbiAgcHVibGljIGlzUGF0aElnbm9yZWQocGF0aDogc3RyaW5nLCBpc0ZvbGRlcjogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlzTWF0Y2ggPSB0aGlzLm1hdGNoZXJzLnNvbWUoKG1hdGNoZXIpID0+IG1hdGNoZXIuaXNNYXRjaChwYXRoLCBpc0ZvbGRlcikpO1xuICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBBbGwgYnJhbmNoZXMgY292ZXJlZCBidXQgdjggcmVwb3J0cyBzd2l0Y2ggYXMgcGFydGlhbC4gKi9cbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgICAgIGNhc2UgUGF0aFNldHRpbmdUeXBlLkV4Y2x1ZGU6IHtcbiAgICAgICAgcmV0dXJuIGlzTWF0Y2g7XG4gICAgICB9XG4gICAgICBjYXNlIFBhdGhTZXR0aW5nVHlwZS5JbmNsdWRlOiB7XG4gICAgICAgIHJldHVybiAhaXNNYXRjaDtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIEV4aGF1c3RpdmUgc3dpdGNoIGd1YXJkLiAqL1xuICAgICAgICBhc3NlcnROZXZlcih0aGlzLnR5cGUpO1xuICAgICAgfVxuICAgICAgICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEEgY2xhc3MgZm9yIG1hbmFnaW5nIGluY2x1ZGUvZXhjbHVkZSBwYXRoIHNldHRpbmdzLlxuICpcbiAqIFNlZSB0aGUgbW9kdWxlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBlbnRyeSBzeW50YXg6IHBsYWluIHBhdGhzLCBnbG9icyBhbmQgcmVndWxhciBleHByZXNzaW9uIGxpdGVyYWxzLCBhbGwgbWF0Y2hlZFxuICogY2FzZS1pbnNlbnNpdGl2ZWx5LlxuICovXG5leHBvcnQgY2xhc3MgUGF0aFNldHRpbmdzIHtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGV4Y2x1ZGUgcGF0aHMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBleGNsdWRlIHBhdGhzLlxuICAgKi9cbiAgcHVibGljIGdldCBleGNsdWRlUGF0aHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9leGNsdWRlUGF0aHMuYXJyYXk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgZXhjbHVkZSBwYXRocy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGV4Y2x1ZGUgcGF0aHMuXG4gICAqL1xuICBwdWJsaWMgc2V0IGV4Y2x1ZGVQYXRocyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICB0aGlzLl9leGNsdWRlUGF0aHMuYXJyYXkgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpbmNsdWRlIHBhdGhzLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgaW5jbHVkZSBwYXRocy5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW5jbHVkZVBhdGhzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5faW5jbHVkZVBhdGhzLmFycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGluY2x1ZGUgcGF0aHMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBpbmNsdWRlIHBhdGhzLlxuICAgKi9cbiAgcHVibGljIHNldCBpbmNsdWRlUGF0aHModmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5faW5jbHVkZVBhdGhzLmFycmF5ID0gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9leGNsdWRlUGF0aHMgPSBuZXcgUGF0aFNldHRpbmcoUGF0aFNldHRpbmdUeXBlLkV4Y2x1ZGUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbmNsdWRlUGF0aHMgPSBuZXcgUGF0aFNldHRpbmcoUGF0aFNldHRpbmdUeXBlLkluY2x1ZGUpO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBwYXRoIGlzIGlnbm9yZWQgYnkgdGhlIGluY2x1ZGUvZXhjbHVkZSBwYXRoIHNldHRpbmdzLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIGNoZWNrLlxuICAgKiBAcGFyYW0gaXNGb2xkZXIgLSBXaGV0aGVyIHRoZSBwYXRoIGlzIGEgZm9sZGVyLiBPbmx5IGEgZm9sZGVyLW9ubHkgZ2xvYiAob25lIGVuZGluZyBpbiBgL2ApIHJlYWRzIGl0OiBzdWNoIGEgZ2xvYlxuICAgKiBhbHdheXMgbWF0Y2hlcyB0aGUgY29udGVudHMgb2YgYSBtYXRjaGluZyBmb2xkZXIsIGFuZCBtYXRjaGVzIHRoZSBmb2xkZXIgaXRzZWxmIG9ubHkgd2hlbiB0aGlzIGlzIGB0cnVlYC5cbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBwYXRoIGlzIGlnbm9yZWQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHVibGljIGlzUGF0aElnbm9yZWQocGF0aDogc3RyaW5nLCBpc0ZvbGRlciA9IGZhbHNlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2luY2x1ZGVQYXRocy5pc1BhdGhJZ25vcmVkKHBhdGgsIGlzRm9sZGVyKSB8fCB0aGlzLl9leGNsdWRlUGF0aHMuaXNQYXRoSWdub3JlZChwYXRoLCBpc0ZvbGRlcik7XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgaW5jbHVkZS9leGNsdWRlIHBhdGggZW50cmllcywgcmVwb3J0aW5nIHRoZSBmaXJzdCBlbnRyeSB0aGF0IGlzIG5vdCBhIHZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiBvciBnbG9iLlxuICpcbiAqIEFuIGludmFsaWQgZW50cnkgZG9lcyBub3QgdGhyb3cgd2hlbiBhc3NpZ25lZCB0byB7QGxpbmsgUGF0aFNldHRpbmdzfSDigJQgdGhlIHdob2xlIGxpc3QgZmFsbHMgYmFjayB0byBpdHMgZGVmYXVsdFxuICogcGF0dGVybiBpbnN0ZWFkIOKAlCBzbyB0aGlzIHZhbGlkYXRvciBpcyB3aGF0IHN1cmZhY2VzIHRoZSBwcm9ibGVtIHRvIHRoZSB1c2VyLiBUaGUgbWVzc2FnZSBuYW1lcyB0aGUgZW50cnkgYW5kIHRoZVxuICogcmVhc29uIGl0IGlzIGludmFsaWQuXG4gKlxuICogQHBhcmFtIHBhdGhzIC0gVGhlIHBhdGggZW50cmllcyB0byB2YWxpZGF0ZS5cbiAqIEByZXR1cm5zIEEgbWVzc2FnZSBuYW1pbmcgdGhlIGZpcnN0IGludmFsaWQgZW50cnksIG9yIG5vdGhpbmcgd2hlbiBldmVyeSBlbnRyeSBpcyB2YWxpZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGhzVmFsaWRhdG9yKHBhdGhzOiBzdHJpbmdbXSk6IE1heWJlUmV0dXJuPHN0cmluZz4ge1xuICBmb3IgKGNvbnN0IHBhdGggb2YgcGF0aHMpIHtcbiAgICBjb25zdCB7IGVycm9yIH0gPSBjb21waWxlRW50cnkocGF0aCwgTkVWRVJfTUFUQ0hFUik7XG4gICAgaWYgKGVycm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcGlsZUVudHJ5KGVudHJ5OiBzdHJpbmcsIGRlZmF1bHRNYXRjaGVyOiBQYXRoTWF0Y2hlcik6IENvbXBpbGVSZXN1bHQge1xuICBpZiAoZW50cnkgPT09ICcvJykge1xuICAgIHJldHVybiB7IG1hdGNoZXI6IGRlZmF1bHRNYXRjaGVyIH07XG4gIH1cblxuICBpZiAoUkVHX0VYUF9FTlRSWV9SRUdfRVhQLnRlc3QoZW50cnkpKSB7XG4gICAgY29uc3QgZmxhZ3NTZXBhcmF0b3JJbmRleCA9IGVudHJ5Lmxhc3RJbmRleE9mKCcvJyk7XG4gICAgcmV0dXJuIGNvbXBpbGVSZWdFeHBFbnRyeShlbnRyeSwgZW50cnkuc2xpY2UoMSwgZmxhZ3NTZXBhcmF0b3JJbmRleCksIGVudHJ5LnNsaWNlKGZsYWdzU2VwYXJhdG9ySW5kZXggKyAxKSk7XG4gIH1cblxuICByZXR1cm4gaGFzVW5lc2NhcGVkR2xvYkNoYXJhY3RlcihlbnRyeSkgPyBjb21waWxlR2xvYkVudHJ5KGVudHJ5KSA6IGNvbXBpbGVQbGFpblBhdGhFbnRyeShlbnRyeSk7XG59XG5cbmZ1bmN0aW9uIGNvbXBpbGVHbG9iRW50cnkoZ2xvYjogc3RyaW5nKTogQ29tcGlsZVJlc3VsdCB7XG4gIGNvbnN0IGlzRm9sZGVyT25seSA9IGdsb2IuZW5kc1dpdGgoJy8nKTtcbiAgY29uc3QgYm9keSA9IGdsb2IucmVwbGFjZSgvXFwvKyQvLCAnJyk7XG4gIGNvbnN0IGdsb2JTb3VyY2UgPSBnZXRHbG9iU291cmNlKGJvZHkpO1xuICBpZiAoIWdsb2JTb3VyY2UuaXNWYWxpZCkge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvcjogdCgoJCkgPT4gJC5vYnNpZGlhbkxpYi5wYXRoU2V0dGluZ3MuaW52YWxpZEdsb2IsIHsgZ2xvYiwgcmVhc29uOiBnbG9iU291cmNlLmVycm9yIH0pXG4gICAgfTtcbiAgfVxuICBjb25zdCB7IHNvdXJjZSB9ID0gZ2xvYlNvdXJjZTtcblxuICBjb25zdCBwcmVmaXggPSBib2R5LmluY2x1ZGVzKCcvJykgPyAnXicgOiAnKD86XnwvKSc7XG5cbiAgbGV0IHNlbGZSZWdFeHA6IFJlZ0V4cDtcbiAgbGV0IGNvbnRlbnRzUmVnRXhwOiBSZWdFeHA7XG4gIHRyeSB7XG4gICAgc2VsZlJlZ0V4cCA9IG5ldyBSZWdFeHAoYCR7cHJlZml4fSR7c291cmNlfSRgLCBDQVNFX0lOU0VOU0lUSVZFX0ZMQUcpO1xuICAgIGNvbnRlbnRzUmVnRXhwID0gbmV3IFJlZ0V4cChgJHtwcmVmaXh9JHtzb3VyY2V9L2AsIENBU0VfSU5TRU5TSVRJVkVfRkxBRyk7XG4gIH0gY2F0Y2ggKGVycm9yXykge1xuICAgIC8vIEFuIG91dC1vZi1vcmRlciBjaGFyYWN0ZXIgY2xhc3MgcmFuZ2UgKGBbei1hXWApIGlzIHRoZSBvbmUgaW52YWxpZCBnbG9iIG9ubHkgdGhlIGVuZ2luZSBjYW4gdGVsbC5cbiAgICByZXR1cm4ge1xuICAgICAgZXJyb3I6IHQoKCQpID0+ICQub2JzaWRpYW5MaWIucGF0aFNldHRpbmdzLmludmFsaWRHbG9iLCB7IGdsb2IsIHJlYXNvbjogZ2V0UmVnRXhwRXJyb3JSZWFzb24oZXJyb3JfKSB9KVxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1hdGNoZXI6IHtcbiAgICAgIGlzTWF0Y2g6IChwYXRoLCBpc0ZvbGRlcikgPT4gY29udGVudHNSZWdFeHAudGVzdChwYXRoKSB8fCAoKGlzRm9sZGVyIHx8ICFpc0ZvbGRlck9ubHkpICYmIHNlbGZSZWdFeHAudGVzdChwYXRoKSlcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbXBpbGVQbGFpblBhdGhFbnRyeShwYXRoOiBzdHJpbmcpOiBDb21waWxlUmVzdWx0IHtcbiAgY29uc3QgdW5lc2NhcGVkUGF0aCA9IHBhdGgucmVwbGFjZUFsbCgvXFxcXCg/PGNoYXJhY3Rlcj4uKS9ncywgJyQ8Y2hhcmFjdGVyPicpLnJlcGxhY2UoL1xcLyskLywgJycpO1xuICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKGBeJHtlc2NhcGVSZWdFeHAodW5lc2NhcGVkUGF0aCl9KD86L3wkKWAsIENBU0VfSU5TRU5TSVRJVkVfRkxBRyk7XG4gIHJldHVybiB7XG4gICAgbWF0Y2hlcjoge1xuICAgICAgaXNNYXRjaDogKHBhdGhUb0NoZWNrKSA9PiByZWdFeHAudGVzdChwYXRoVG9DaGVjaylcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbXBpbGVSZWdFeHBFbnRyeShlbnRyeTogc3RyaW5nLCBzb3VyY2U6IHN0cmluZywgZmxhZ3M6IHN0cmluZyk6IENvbXBpbGVSZXN1bHQge1xuICBsZXQgcmVnRXhwOiBSZWdFeHA7XG4gIHRyeSB7XG4gICAgLy8gQ29tcGlsZWQgd2l0aCB0aGUgZmxhZ3MgYXMgd3JpdHRlbiBmaXJzdCwgc28gYW4gdW5rbm93biBvciByZXBlYXRlZCBmbGFnIGlzIHJlcG9ydGVkIHJhdGhlciB0aGFuIGlnbm9yZWQuXG4gICAgbmV3IFJlZ0V4cChzb3VyY2UsIGZsYWdzKTtcbiAgICBjb25zdCBlZmZlY3RpdmVGbGFncyA9IGZsYWdzLnJlcGxhY2VBbGwoU1RBVEVGVUxfRkxBR1NfUkVHX0VYUCwgJycpO1xuICAgIHJlZ0V4cCA9IG5ldyBSZWdFeHAoc291cmNlLCBlZmZlY3RpdmVGbGFncy5pbmNsdWRlcyhDQVNFX0lOU0VOU0lUSVZFX0ZMQUcpID8gZWZmZWN0aXZlRmxhZ3MgOiBgJHtlZmZlY3RpdmVGbGFnc30ke0NBU0VfSU5TRU5TSVRJVkVfRkxBR31gKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBBIHBhcnRpYWxseSB0eXBlZCByZWdleCBsaXRlcmFsIChgL15JbmJveFxcL2ApIGlzIG5vdCBwYXJzZWFibGUuXG4gICAgLy8gUmVwb3J0IGl0IGluc3RlYWQgb2YgdGhyb3dpbmcgZnJvbSBhIHNldHRpbmdzIHNldHRlciwgd2hpY2ggd291bGQgYnJlYWsgYm90aCB0aGUgc2V0dGluZ3MgVUkgYW5kIHRoZSBzYXZlIHBhdGguXG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yOiB0KCgkKSA9PiAkLm9ic2lkaWFuTGliLnBhdGhTZXR0aW5ncy5pbnZhbGlkUmVndWxhckV4cHJlc3Npb24sIHsgcmVhc29uOiBnZXRSZWdFeHBFcnJvclJlYXNvbihlcnJvciksIHJlZ0V4cDogZW50cnkgfSlcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtYXRjaGVyOiB7XG4gICAgICBpc01hdGNoOiAocGF0aCkgPT4gcmVnRXhwLnRlc3QocGF0aClcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGVzY2FwZUNoYXJhY3RlckNsYXNzQ2hhcmFjdGVyKGNoYXJhY3Rlcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIC9bLVxcXFxcXF1eW10vLnRlc3QoY2hhcmFjdGVyKSA/IGBcXFxcJHtjaGFyYWN0ZXJ9YCA6IGNoYXJhY3Rlcjtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hhcmFjdGVyQ2xhc3NTb3VyY2UoZ2xvYjogc3RyaW5nLCBvcGVuSW5kZXg6IG51bWJlcik6IENoYXJhY3RlckNsYXNzU291cmNlUmVzdWx0IHtcbiAgbGV0IGluZGV4ID0gb3BlbkluZGV4ICsgMTtcbiAgbGV0IGlzTmVnYXRlZCA9IGZhbHNlO1xuICBpZiAoZ2xvYltpbmRleF0gPT09ICchJyB8fCBnbG9iW2luZGV4XSA9PT0gJ14nKSB7XG4gICAgaXNOZWdhdGVkID0gdHJ1ZTtcbiAgICBpbmRleCsrO1xuICB9XG5cbiAgbGV0IGNvbnRlbnQgPSAnJztcbiAgaWYgKGdsb2JbaW5kZXhdID09PSAnXScpIHtcbiAgICBjb250ZW50ICs9IFN0cmluZy5yYXdgXFxdYDtcbiAgICBpbmRleCsrO1xuICB9XG5cbiAgd2hpbGUgKGluZGV4IDwgZ2xvYi5sZW5ndGgpIHtcbiAgICBjb25zdCBjaGFyYWN0ZXIgPSBnbG9iLmNoYXJBdChpbmRleCk7XG4gICAgaWYgKGNoYXJhY3RlciA9PT0gJ10nKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbmRJbmRleDogaW5kZXggKyAxLFxuICAgICAgICBpc1ZhbGlkOiB0cnVlLFxuICAgICAgICBzb3VyY2U6IGBbJHtpc05lZ2F0ZWQgPyAnXi8nIDogJyd9JHtjb250ZW50fV1gXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChjaGFyYWN0ZXIgPT09ICdcXFxcJykge1xuICAgICAgaW5kZXgrKztcbiAgICAgIGlmIChpbmRleCA+PSBnbG9iLmxlbmd0aCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNvbnRlbnQgKz0gZXNjYXBlQ2hhcmFjdGVyQ2xhc3NDaGFyYWN0ZXIoZ2xvYi5jaGFyQXQoaW5kZXgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGVudCArPSBjaGFyYWN0ZXIgPT09ICctJyA/IGNoYXJhY3RlciA6IGVzY2FwZUNoYXJhY3RlckNsYXNzQ2hhcmFjdGVyKGNoYXJhY3Rlcik7XG4gICAgfVxuICAgIGluZGV4Kys7XG4gIH1cblxuICByZXR1cm4geyBlcnJvcjogdCgoJCkgPT4gJC5vYnNpZGlhbkxpYi5wYXRoU2V0dGluZ3MudW5jbG9zZWRDaGFyYWN0ZXJDbGFzcyksIGlzVmFsaWQ6IGZhbHNlIH07XG59XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRNYXRjaGVyKHR5cGU6IFBhdGhTZXR0aW5nVHlwZSk6IFBhdGhNYXRjaGVyIHtcbiAgLyogdjggaWdub3JlIHN0YXJ0IC0tIEFsbCBicmFuY2hlcyBjb3ZlcmVkIGJ1dCB2OCByZXBvcnRzIHN3aXRjaCBhcyBwYXJ0aWFsLiAqL1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICAgIGNhc2UgUGF0aFNldHRpbmdUeXBlLkV4Y2x1ZGU6IHtcbiAgICAgIHJldHVybiBORVZFUl9NQVRDSEVSO1xuICAgIH1cbiAgICBjYXNlIFBhdGhTZXR0aW5nVHlwZS5JbmNsdWRlOiB7XG4gICAgICByZXR1cm4gQUxXQVlTX01BVENIRVI7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBFeGhhdXN0aXZlIHN3aXRjaCBndWFyZC4gKi9cbiAgICAgIGFzc2VydE5ldmVyKHR5cGUpO1xuICAgIH1cbiAgICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0R2xvYlNvdXJjZShnbG9iOiBzdHJpbmcpOiBHbG9iU291cmNlUmVzdWx0IHtcbiAgbGV0IHNvdXJjZSA9ICcnO1xuICBsZXQgaW5kZXggPSAwO1xuXG4gIHdoaWxlIChpbmRleCA8IGdsb2IubGVuZ3RoKSB7XG4gICAgY29uc3QgY2hhcmFjdGVyID0gZ2xvYi5jaGFyQXQoaW5kZXgpO1xuICAgIHN3aXRjaCAoY2hhcmFjdGVyKSB7XG4gICAgICBjYXNlICc/Jzoge1xuICAgICAgICBzb3VyY2UgKz0gJ1teL10nO1xuICAgICAgICBpbmRleCsrO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ1snOiB7XG4gICAgICAgIGNvbnN0IGNoYXJhY3RlckNsYXNzID0gZ2V0Q2hhcmFjdGVyQ2xhc3NTb3VyY2UoZ2xvYiwgaW5kZXgpO1xuICAgICAgICBpZiAoIWNoYXJhY3RlckNsYXNzLmlzVmFsaWQpIHtcbiAgICAgICAgICByZXR1cm4gY2hhcmFjdGVyQ2xhc3M7XG4gICAgICAgIH1cbiAgICAgICAgc291cmNlICs9IGNoYXJhY3RlckNsYXNzLnNvdXJjZTtcbiAgICAgICAgaW5kZXggPSBjaGFyYWN0ZXJDbGFzcy5lbmRJbmRleDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICcqJzoge1xuICAgICAgICBpZiAoIWdsb2Iuc3RhcnRzV2l0aChHTE9CU1RBUiwgaW5kZXgpKSB7XG4gICAgICAgICAgc291cmNlICs9ICdbXi9dKic7XG4gICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzU2VnbWVudFN0YXJ0ID0gaW5kZXggPT09IDAgfHwgZ2xvYltpbmRleCAtIDFdID09PSAnLyc7XG4gICAgICAgIGlmIChpc1NlZ21lbnRTdGFydCAmJiBnbG9iLnN0YXJ0c1dpdGgoR0xPQlNUQVJfRk9MREVSUywgaW5kZXgpKSB7XG4gICAgICAgICAgLy8gYCoqL2AgaXMgemVybyBvciBtb3JlIHdob2xlIGZvbGRlcnMuXG4gICAgICAgICAgc291cmNlICs9ICcoPzpbXi9dKi8pKic7XG4gICAgICAgICAgaW5kZXggKz0gR0xPQlNUQVJfRk9MREVSUy5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNTZWdtZW50U3RhcnQgJiYgaW5kZXggKyBHTE9CU1RBUi5sZW5ndGggPT09IGdsb2IubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gQSB0cmFpbGluZyBgLyoqYCBpcyBldmVyeXRoaW5nIGluc2lkZSB0aGUgZm9sZGVyLlxuICAgICAgICAgIHNvdXJjZSArPSAnLionO1xuICAgICAgICAgIGluZGV4ICs9IEdMT0JTVEFSLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBBbnkgb3RoZXIgYCoqYCBpcyBhbiBvcmRpbmFyeSBgKmAsIGFzIGluIGAuZ2l0aWdub3JlYC5cbiAgICAgICAgICBzb3VyY2UgKz0gJ1teL10qJztcbiAgICAgICAgICBpbmRleCArPSBHTE9CU1RBUi5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdcXFxcJzoge1xuICAgICAgICBpbmRleCsrO1xuICAgICAgICBpZiAoaW5kZXggPj0gZ2xvYi5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4geyBlcnJvcjogdCgoJCkgPT4gJC5vYnNpZGlhbkxpYi5wYXRoU2V0dGluZ3MudHJhaWxpbmdFc2NhcGUpLCBpc1ZhbGlkOiBmYWxzZSB9O1xuICAgICAgICB9XG4gICAgICAgIHNvdXJjZSArPSBlc2NhcGVSZWdFeHAoZ2xvYi5jaGFyQXQoaW5kZXgpKTtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHNvdXJjZSArPSBlc2NhcGVSZWdFeHAoY2hhcmFjdGVyKTtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgaXNWYWxpZDogdHJ1ZSwgc291cmNlIH07XG59XG5cbmZ1bmN0aW9uIGdldFJlZ0V4cEVycm9yUmVhc29uKGVycm9yOiB1bmtub3duKTogc3RyaW5nIHtcbiAgLyogdjggaWdub3JlIHN0YXJ0IC0tIFRoZSBSZWdFeHAgY29uc3RydWN0b3Igb25seSBldmVyIHRocm93cyBhIFN5bnRheEVycm9yLiAqL1xuICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICAvLyBWOCBwaHJhc2VzIGl0IGBJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogLzxzb3VyY2U+LzxmbGFncz46IDxyZWFzb24+YDsgdGhlIGVudHJ5IGlzIGFscmVhZHkgbmFtZWQuXG4gIGNvbnN0IG1hdGNoID0gL15JbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogXFwvLipcXC9bYS16XSo6ICg/PHJlYXNvbj4uKikkL3MuZXhlYyhtZXNzYWdlKTtcbiAgcmV0dXJuIG1hdGNoPy5ncm91cHM/LlsncmVhc29uJ10gPz8gbWVzc2FnZTtcbn1cblxuZnVuY3Rpb24gaGFzVW5lc2NhcGVkR2xvYkNoYXJhY3RlcihlbnRyeTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBlbnRyeS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBjaGFyYWN0ZXIgPSBlbnRyeS5jaGFyQXQoaW5kZXgpO1xuICAgIGlmIChjaGFyYWN0ZXIgPT09ICdcXFxcJykge1xuICAgICAgaW5kZXgrKztcbiAgICB9IGVsc2UgaWYgKEdMT0JfQ0hBUkFDVEVSUy5oYXMoY2hhcmFjdGVyKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbWFrZU1hdGNoZXJzKHBhdGhzOiBzdHJpbmdbXSwgZGVmYXVsdE1hdGNoZXI6IFBhdGhNYXRjaGVyKTogbnVsbCB8IFBhdGhNYXRjaGVyW10ge1xuICBpZiAocGF0aHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtkZWZhdWx0TWF0Y2hlcl07XG4gIH1cblxuICBjb25zdCBtYXRjaGVyczogUGF0aE1hdGNoZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHBhdGggb2YgcGF0aHMpIHtcbiAgICBjb25zdCB7IG1hdGNoZXIgfSA9IGNvbXBpbGVFbnRyeShwYXRoLCBkZWZhdWx0TWF0Y2hlcik7XG4gICAgaWYgKCFtYXRjaGVyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgbWF0Y2hlcnMucHVzaChtYXRjaGVyKTtcbiAgfVxuICByZXR1cm4gbWF0Y2hlcnM7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW1CQSxxQkFBNkI7QUFDN0IseUJBQTRCO0FBRTVCLGtCQUFrQjtBQWtDbEIsTUFBTSx3QkFBd0I7QUFDOUIsTUFBTSx3QkFBd0I7QUFDOUIsTUFBTSx5QkFBeUI7QUFDL0IsTUFBTSxrQkFBa0Isb0JBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUM7QUFDL0MsTUFBTSxXQUFXO0FBQ2pCLE1BQU0sbUJBQW1CO0FBRXpCLE1BQU0saUJBQThCO0FBQUEsRUFDbEMsU0FBUyxNQUFNO0FBQ2pCO0FBRUEsTUFBTSxnQkFBNkI7QUFBQSxFQUNqQyxTQUFTLE1BQU07QUFDakI7QUFFQSxNQUFNLFlBQVk7QUFBQSxFQWNULFlBQTZCLE1BQXVCO0FBQXZCO0FBQ2xDLFNBQUssaUJBQWlCLGtCQUFrQixJQUFJO0FBQzVDLFNBQUssV0FBVyxDQUFDLEtBQUssY0FBYztBQUFBLEVBQ3RDO0FBQUEsRUFIb0M7QUFBQSxFQWJwQyxJQUFXLFFBQWtCO0FBQzNCLFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFBQSxFQUVBLElBQVcsTUFBTSxPQUFpQjtBQUNoQyxTQUFLLFNBQVMsTUFBTSxPQUFPLE9BQU87QUFDbEMsU0FB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
@@ -41,8 +41,8 @@ ensureBrowserProcess();
41
41
  __isPatched: true
42
42
  }
43
43
  );
44
- function extractDefault(module) {
45
- return module && module.__esModule && "default" in module ? module.default : module;
44
+ function extractDefault($module) {
45
+ return $module && $module.__esModule && "default" in $module ? $module.default : $module;
46
46
  }
47
47
  const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
48
48
  "@codemirror/autocomplete",
@@ -84,9 +84,9 @@ ensureBrowserProcess();
84
84
  return process;
85
85
  }
86
86
  } else {
87
- const module = originalRequire?.(id);
88
- if (module) {
89
- return extractDefault(module);
87
+ const $module = originalRequire?.(id);
88
+ if ($module) {
89
+ return extractDefault($module);
90
90
  }
91
91
  }
92
92
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
@@ -14,8 +14,8 @@ if you want to view the source, please visit the github repository of this plugi
14
14
  __isPatched: true
15
15
  }
16
16
  );
17
- function extractDefault(module) {
18
- return module && module.__esModule && "default" in module ? module.default : module;
17
+ function extractDefault($module) {
18
+ return $module && $module.__esModule && "default" in $module ? $module.default : $module;
19
19
  }
20
20
  const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
21
21
  "@codemirror/autocomplete",
@@ -57,9 +57,9 @@ if you want to view the source, please visit the github repository of this plugi
57
57
  return process;
58
58
  }
59
59
  } else {
60
- const module = originalRequire?.(id);
61
- if (module) {
62
- return extractDefault(module);
60
+ const $module = originalRequire?.(id);
61
+ if ($module) {
62
+ return extractDefault($module);
63
63
  }
64
64
  }
65
65
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);