@mnaoumov/obsidian-lib 1.0.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (412) hide show
  1. package/README.md +9 -1
  2. package/dist/lib/cjs/__merged.cjs +54 -64
  3. package/dist/lib/cjs/__merged.d.cts +5 -3
  4. package/dist/lib/cjs/active-file-provider.cjs +40 -64
  5. package/dist/lib/cjs/app.cjs +40 -64
  6. package/dist/lib/cjs/async-with-notice.cjs +40 -64
  7. package/dist/lib/cjs/attachment-path.cjs +101 -72
  8. package/dist/lib/cjs/attachment-path.d.cts +21 -43
  9. package/dist/lib/cjs/attachment-unit-folder.cjs +40 -64
  10. package/dist/lib/cjs/attachment-unit-folder.d.cts +8 -9
  11. package/dist/lib/cjs/backlink-index.cjs +41 -65
  12. package/dist/lib/cjs/backlink.cjs +40 -64
  13. package/dist/lib/cjs/bases-view-registrar.cjs +40 -64
  14. package/dist/lib/cjs/callout.cjs +40 -64
  15. package/dist/lib/cjs/canvas.cjs +40 -64
  16. package/dist/lib/cjs/case-insensitive-file-index.cjs +40 -64
  17. package/dist/lib/cjs/code-block-markdown-information.cjs +40 -64
  18. package/dist/lib/cjs/code-block-reg-exp.cjs +40 -64
  19. package/dist/lib/cjs/codemirror/index.cjs +40 -64
  20. package/dist/lib/cjs/codemirror/state-field-spec.cjs +40 -64
  21. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +40 -64
  22. package/dist/lib/cjs/command-handlers/command-handler-component.cjs +40 -64
  23. package/dist/lib/cjs/command-handlers/command-handler.cjs +40 -64
  24. package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +40 -64
  25. package/dist/lib/cjs/command-handlers/file-command-handler.cjs +40 -64
  26. package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +40 -64
  27. package/dist/lib/cjs/command-handlers/global-command-handler.cjs +40 -64
  28. package/dist/lib/cjs/command-handlers/index.cjs +40 -64
  29. package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +40 -64
  30. package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +40 -64
  31. package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +40 -64
  32. package/dist/lib/cjs/command-registrar.cjs +40 -64
  33. package/dist/lib/cjs/community-plugins.cjs +40 -64
  34. package/dist/lib/cjs/components/abort-signal-component.cjs +40 -64
  35. package/dist/lib/cjs/components/all-windows-event-component.cjs +40 -64
  36. package/dist/lib/cjs/components/async-error-handler-component.cjs +40 -64
  37. package/dist/lib/cjs/components/async-events-component.cjs +40 -64
  38. package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +40 -64
  39. package/dist/lib/cjs/components/component-ex.cjs +41 -65
  40. package/dist/lib/cjs/components/console-debug-component.cjs +40 -64
  41. package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +40 -64
  42. package/dist/lib/cjs/components/disposable-component.cjs +40 -64
  43. package/dist/lib/cjs/components/embed-extensions-component.cjs +40 -64
  44. package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +40 -64
  45. package/dist/lib/cjs/components/index.cjs +40 -64
  46. package/dist/lib/cjs/components/layout-ready-component.cjs +40 -64
  47. package/dist/lib/cjs/components/menu-event-registrar-component.cjs +40 -64
  48. package/dist/lib/cjs/components/monkey-around-component.cjs +40 -64
  49. package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +40 -64
  50. package/dist/lib/cjs/components/plugin-context-component.cjs +40 -64
  51. package/dist/lib/cjs/components/plugin-gate-component.cjs +41 -65
  52. package/dist/lib/cjs/components/plugin-notice-component.cjs +46 -65
  53. package/dist/lib/cjs/components/plugin-notice-component.d.cts +3 -0
  54. package/dist/lib/cjs/components/plugin-settings-component.cjs +41 -65
  55. package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +40 -64
  56. package/dist/lib/cjs/components/plugin-suggestion-component.cjs +40 -64
  57. package/dist/lib/cjs/components/pointer-position-component.cjs +40 -64
  58. package/dist/lib/cjs/components/registry-component.cjs +40 -64
  59. package/dist/lib/cjs/components/release-notes-component.cjs +42 -65
  60. package/dist/lib/cjs/components/rename-delete-handler-component.cjs +40 -64
  61. package/dist/lib/cjs/components/rmdir-guard-component.cjs +40 -64
  62. package/dist/lib/cjs/components/settings-migration-component.cjs +44 -68
  63. package/dist/lib/cjs/components/settings-migration-component.d.cts +6 -4
  64. package/dist/lib/cjs/components/syntax-highlighting-component.cjs +40 -64
  65. package/dist/lib/cjs/components/templates-language-component.cjs +40 -64
  66. package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +40 -64
  67. package/dist/lib/cjs/constructors/index.cjs +40 -64
  68. package/dist/lib/cjs/css-class.cjs +40 -64
  69. package/dist/lib/cjs/data-handler.cjs +40 -64
  70. package/dist/lib/cjs/dataview-link.cjs +40 -64
  71. package/dist/lib/cjs/dataview.cjs +40 -64
  72. package/dist/lib/cjs/debug.cjs +40 -64
  73. package/dist/lib/cjs/demo-vault-helper-settings.cjs +40 -64
  74. package/dist/lib/cjs/demo-vault-helper.cjs +42 -65
  75. package/dist/lib/cjs/demo-vault-naming.cjs +40 -64
  76. package/dist/lib/cjs/desktop-demo-vault-opener.cjs +48 -71
  77. package/dist/lib/cjs/desktop-trusted-input.cjs +40 -64
  78. package/dist/lib/cjs/editor-extension-registrar.cjs +40 -64
  79. package/dist/lib/cjs/editor-suggest-registrar.cjs +40 -64
  80. package/dist/lib/cjs/editor.cjs +40 -64
  81. package/dist/lib/cjs/events.cjs +40 -64
  82. package/dist/lib/cjs/extensions-registrar.cjs +40 -64
  83. package/dist/lib/cjs/file-change.cjs +40 -64
  84. package/dist/lib/cjs/file-explorer.cjs +40 -64
  85. package/dist/lib/cjs/file-manager.cjs +40 -64
  86. package/dist/lib/cjs/file-system.cjs +45 -64
  87. package/dist/lib/cjs/file-system.d.cts +7 -0
  88. package/dist/lib/cjs/folder-note.cjs +40 -64
  89. package/dist/lib/cjs/frontmatter-formatting.cjs +41 -65
  90. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +40 -64
  91. package/dist/lib/cjs/frontmatter.cjs +40 -64
  92. package/dist/lib/cjs/generated-during-build.cjs +42 -66
  93. package/dist/lib/cjs/generated-during-build.d.cts +8 -2
  94. package/dist/lib/cjs/hover-link-source-registrar.cjs +40 -64
  95. package/dist/lib/cjs/html-element.cjs +40 -64
  96. package/dist/lib/cjs/i18n/custom-type-options.cjs +40 -64
  97. package/dist/lib/cjs/i18n/default-translations.cjs +40 -64
  98. package/dist/lib/cjs/i18n/i18n.cjs +40 -64
  99. package/dist/lib/cjs/i18n/index.cjs +40 -64
  100. package/dist/lib/cjs/i18n/locales/en.cjs +40 -64
  101. package/dist/lib/cjs/i18n/locales/index.cjs +40 -64
  102. package/dist/lib/cjs/i18n/locales/translations-map.cjs +40 -64
  103. package/dist/lib/cjs/index.cjs +40 -64
  104. package/dist/lib/cjs/is-in-obsidian.cjs +40 -64
  105. package/dist/lib/cjs/library-styles.cjs +40 -64
  106. package/dist/lib/cjs/library.cjs +40 -64
  107. package/dist/lib/cjs/link-name.cjs +40 -64
  108. package/dist/lib/cjs/link-update-progress.cjs +40 -64
  109. package/dist/lib/cjs/link.cjs +40 -64
  110. package/dist/lib/cjs/logger.cjs +40 -64
  111. package/dist/lib/cjs/loop.cjs +40 -64
  112. package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +40 -64
  113. package/dist/lib/cjs/markdown-code-block-processor.cjs +40 -64
  114. package/dist/lib/cjs/markdown-post-processor-registrar.cjs +40 -64
  115. package/dist/lib/cjs/markdown-view.cjs +40 -64
  116. package/dist/lib/cjs/markdown.cjs +40 -64
  117. package/dist/lib/cjs/menu-event-registrar.cjs +40 -64
  118. package/dist/lib/cjs/metadata-cache.cjs +64 -70
  119. package/dist/lib/cjs/metadata-cache.d.cts +8 -19
  120. package/dist/lib/cjs/mobile-trusted-input.cjs +40 -64
  121. package/dist/lib/cjs/modals/alert.cjs +40 -64
  122. package/dist/lib/cjs/modals/confirm.cjs +40 -64
  123. package/dist/lib/cjs/modals/index.cjs +40 -64
  124. package/dist/lib/cjs/modals/minimizable-modal.cjs +40 -64
  125. package/dist/lib/cjs/modals/modal-command-builder.cjs +40 -64
  126. package/dist/lib/cjs/modals/modal.cjs +40 -64
  127. package/dist/lib/cjs/modals/prompt.cjs +40 -64
  128. package/dist/lib/cjs/modals/select-item.cjs +40 -64
  129. package/dist/lib/cjs/modals/select-option.cjs +40 -64
  130. package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +40 -64
  131. package/dist/lib/cjs/note-priority.cjs +41 -65
  132. package/dist/lib/cjs/notebook-navigator.cjs +40 -64
  133. package/dist/lib/cjs/obsidian-dev-utils-state.cjs +40 -64
  134. package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +40 -64
  135. package/dist/lib/cjs/obsidian-settings.cjs +40 -64
  136. package/dist/lib/cjs/parse-link.cjs +40 -64
  137. package/dist/lib/cjs/path-settings.cjs +40 -64
  138. package/dist/lib/cjs/pdf.cjs +40 -64
  139. package/dist/lib/cjs/plugin/index.cjs +43 -64
  140. package/dist/lib/cjs/plugin/index.d.cts +1 -0
  141. package/dist/lib/cjs/plugin/plugin-api-schema.cjs +171 -0
  142. package/dist/lib/cjs/plugin/plugin-api-schema.d.cts +59 -0
  143. package/dist/lib/cjs/plugin/plugin-api.cjs +46 -64
  144. package/dist/lib/cjs/plugin/plugin-api.d.cts +83 -10
  145. package/dist/lib/cjs/plugin/plugin-context.cjs +40 -64
  146. package/dist/lib/cjs/plugin/plugin-event-source.cjs +40 -64
  147. package/dist/lib/cjs/plugin/plugin-install-state.cjs +40 -64
  148. package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +40 -64
  149. package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +41 -65
  150. package/dist/lib/cjs/plugin/plugin.cjs +41 -65
  151. package/dist/lib/cjs/plugin/settings-migration-api.cjs +69 -64
  152. package/dist/lib/cjs/plugin/settings-migration-api.d.cts +16 -3
  153. package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +40 -64
  154. package/dist/lib/cjs/popovers/field-popover.cjs +40 -64
  155. package/dist/lib/cjs/popovers/index.cjs +40 -64
  156. package/dist/lib/cjs/popovers/popover-anchor.cjs +40 -64
  157. package/dist/lib/cjs/popovers/popover.cjs +40 -64
  158. package/dist/lib/cjs/property-entry.cjs +40 -64
  159. package/dist/lib/cjs/queue.cjs +40 -64
  160. package/dist/lib/cjs/react/app-context.cjs +40 -64
  161. package/dist/lib/cjs/react/index.cjs +40 -64
  162. package/dist/lib/cjs/reference.cjs +40 -64
  163. package/dist/lib/cjs/resource-lock.cjs +40 -64
  164. package/dist/lib/cjs/resource-url.cjs +40 -64
  165. package/dist/lib/cjs/ribbon-icon-registrar.cjs +40 -64
  166. package/dist/lib/cjs/setting-components/checkbox-component.cjs +40 -64
  167. package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +40 -64
  168. package/dist/lib/cjs/setting-components/date-component.cjs +40 -64
  169. package/dist/lib/cjs/setting-components/date-time-component.cjs +40 -64
  170. package/dist/lib/cjs/setting-components/email-component.cjs +40 -64
  171. package/dist/lib/cjs/setting-components/file-component.cjs +40 -64
  172. package/dist/lib/cjs/setting-components/index.cjs +40 -64
  173. package/dist/lib/cjs/setting-components/month-component.cjs +40 -64
  174. package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +41 -65
  175. package/dist/lib/cjs/setting-components/multiple-email-component.cjs +40 -64
  176. package/dist/lib/cjs/setting-components/multiple-file-component.cjs +40 -64
  177. package/dist/lib/cjs/setting-components/multiple-text-component.cjs +40 -64
  178. package/dist/lib/cjs/setting-components/number-component.cjs +40 -64
  179. package/dist/lib/cjs/setting-components/password-component.cjs +40 -64
  180. package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +40 -64
  181. package/dist/lib/cjs/setting-components/telephone-component.cjs +40 -64
  182. package/dist/lib/cjs/setting-components/text-based-component.cjs +40 -64
  183. package/dist/lib/cjs/setting-components/time-component.cjs +40 -64
  184. package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +40 -64
  185. package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +40 -64
  186. package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +40 -64
  187. package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +40 -64
  188. package/dist/lib/cjs/setting-components/typed-text-component.cjs +41 -65
  189. package/dist/lib/cjs/setting-components/url-component.cjs +40 -64
  190. package/dist/lib/cjs/setting-components/validator-component.cjs +41 -65
  191. package/dist/lib/cjs/setting-components/value-component-with-change-tracking.cjs +40 -64
  192. package/dist/lib/cjs/setting-components/week-component.cjs +40 -64
  193. package/dist/lib/cjs/setting-ex.cjs +40 -64
  194. package/dist/lib/cjs/setting-group-ex.cjs +40 -64
  195. package/dist/lib/cjs/status-bar-item-registrar.cjs +40 -64
  196. package/dist/lib/cjs/templater.cjs +40 -64
  197. package/dist/lib/cjs/transformers/duration-transformer.cjs +40 -64
  198. package/dist/lib/cjs/transformers/index.cjs +40 -64
  199. package/dist/lib/cjs/trusted-input.cjs +40 -64
  200. package/dist/lib/cjs/validation.cjs +40 -64
  201. package/dist/lib/cjs/vault-delete.cjs +40 -64
  202. package/dist/lib/cjs/vault-transaction.cjs +40 -64
  203. package/dist/lib/cjs/vault.cjs +41 -65
  204. package/dist/lib/cjs/view-registrar.cjs +40 -64
  205. package/dist/lib/cjs/workspace.cjs +40 -64
  206. package/dist/lib/esm/__merged.d.mts +5 -3
  207. package/dist/lib/esm/__merged.mjs +20 -14
  208. package/dist/lib/esm/active-file-provider.mjs +6 -14
  209. package/dist/lib/esm/app.mjs +6 -14
  210. package/dist/lib/esm/async-with-notice.mjs +6 -14
  211. package/dist/lib/esm/attachment-path.d.mts +21 -43
  212. package/dist/lib/esm/attachment-path.mjs +70 -22
  213. package/dist/lib/esm/attachment-unit-folder.d.mts +8 -9
  214. package/dist/lib/esm/attachment-unit-folder.mjs +6 -14
  215. package/dist/lib/esm/backlink-index.mjs +6 -14
  216. package/dist/lib/esm/backlink.mjs +6 -14
  217. package/dist/lib/esm/bases-view-registrar.mjs +6 -14
  218. package/dist/lib/esm/callout.mjs +6 -14
  219. package/dist/lib/esm/canvas.mjs +6 -14
  220. package/dist/lib/esm/case-insensitive-file-index.mjs +6 -14
  221. package/dist/lib/esm/code-block-markdown-information.mjs +5 -13
  222. package/dist/lib/esm/code-block-reg-exp.mjs +6 -14
  223. package/dist/lib/esm/codemirror/index.mjs +6 -14
  224. package/dist/lib/esm/codemirror/state-field-spec.mjs +5 -13
  225. package/dist/lib/esm/command-handlers/abstract-file-command-handler.mjs +6 -14
  226. package/dist/lib/esm/command-handlers/command-handler-component.mjs +6 -14
  227. package/dist/lib/esm/command-handlers/command-handler.mjs +6 -14
  228. package/dist/lib/esm/command-handlers/editor-command-handler.mjs +6 -14
  229. package/dist/lib/esm/command-handlers/file-command-handler.mjs +6 -14
  230. package/dist/lib/esm/command-handlers/folder-command-handler.mjs +6 -14
  231. package/dist/lib/esm/command-handlers/global-command-handler.mjs +6 -14
  232. package/dist/lib/esm/command-handlers/index.mjs +6 -14
  233. package/dist/lib/esm/command-handlers/open-demo-vault-command-handler.mjs +6 -14
  234. package/dist/lib/esm/command-handlers/open-settings-command-handler.mjs +6 -14
  235. package/dist/lib/esm/command-handlers/unlock-active-note-command-handler.mjs +6 -14
  236. package/dist/lib/esm/command-registrar.mjs +6 -14
  237. package/dist/lib/esm/community-plugins.mjs +6 -14
  238. package/dist/lib/esm/components/abort-signal-component.mjs +6 -14
  239. package/dist/lib/esm/components/all-windows-event-component.mjs +6 -14
  240. package/dist/lib/esm/components/async-error-handler-component.mjs +6 -14
  241. package/dist/lib/esm/components/async-events-component.mjs +6 -14
  242. package/dist/lib/esm/components/case-insensitive-file-index-component.mjs +6 -14
  243. package/dist/lib/esm/components/component-ex.mjs +6 -14
  244. package/dist/lib/esm/components/console-debug-component.mjs +6 -14
  245. package/dist/lib/esm/components/core-plugin-toggle-component.mjs +6 -14
  246. package/dist/lib/esm/components/disposable-component.mjs +6 -14
  247. package/dist/lib/esm/components/embed-extensions-component.mjs +6 -14
  248. package/dist/lib/esm/components/generate-markdown-link-default-params-component.mjs +6 -14
  249. package/dist/lib/esm/components/index.mjs +6 -14
  250. package/dist/lib/esm/components/layout-ready-component.mjs +6 -14
  251. package/dist/lib/esm/components/menu-event-registrar-component.mjs +6 -14
  252. package/dist/lib/esm/components/monkey-around-component.mjs +6 -14
  253. package/dist/lib/esm/components/notebook-navigator-menu-event-registrar-component.mjs +6 -14
  254. package/dist/lib/esm/components/plugin-context-component.mjs +6 -14
  255. package/dist/lib/esm/components/plugin-gate-component.mjs +6 -14
  256. package/dist/lib/esm/components/plugin-notice-component.d.mts +3 -0
  257. package/dist/lib/esm/components/plugin-notice-component.mjs +12 -15
  258. package/dist/lib/esm/components/plugin-settings-component.mjs +6 -14
  259. package/dist/lib/esm/components/plugin-settings-tab-component.mjs +6 -14
  260. package/dist/lib/esm/components/plugin-suggestion-component.mjs +6 -14
  261. package/dist/lib/esm/components/pointer-position-component.mjs +6 -14
  262. package/dist/lib/esm/components/registry-component.mjs +6 -14
  263. package/dist/lib/esm/components/release-notes-component.mjs +11 -15
  264. package/dist/lib/esm/components/rename-delete-handler-component.mjs +6 -14
  265. package/dist/lib/esm/components/rmdir-guard-component.mjs +6 -14
  266. package/dist/lib/esm/components/settings-migration-component.d.mts +6 -4
  267. package/dist/lib/esm/components/settings-migration-component.mjs +10 -18
  268. package/dist/lib/esm/components/syntax-highlighting-component.mjs +6 -14
  269. package/dist/lib/esm/components/templates-language-component.mjs +6 -14
  270. package/dist/lib/esm/constructors/get-dom-events-handlers-constructor.mjs +6 -14
  271. package/dist/lib/esm/constructors/index.mjs +6 -14
  272. package/dist/lib/esm/css-class.mjs +6 -14
  273. package/dist/lib/esm/data-handler.mjs +6 -14
  274. package/dist/lib/esm/dataview-link.mjs +6 -14
  275. package/dist/lib/esm/dataview.mjs +6 -14
  276. package/dist/lib/esm/debug.mjs +6 -14
  277. package/dist/lib/esm/demo-vault-helper-settings.mjs +5 -13
  278. package/dist/lib/esm/demo-vault-helper.mjs +8 -15
  279. package/dist/lib/esm/demo-vault-naming.mjs +6 -14
  280. package/dist/lib/esm/desktop-demo-vault-opener.mjs +17 -21
  281. package/dist/lib/esm/desktop-trusted-input.mjs +6 -14
  282. package/dist/lib/esm/editor-extension-registrar.mjs +6 -14
  283. package/dist/lib/esm/editor-suggest-registrar.mjs +6 -14
  284. package/dist/lib/esm/editor.mjs +6 -14
  285. package/dist/lib/esm/events.mjs +6 -14
  286. package/dist/lib/esm/extensions-registrar.mjs +6 -14
  287. package/dist/lib/esm/file-change.mjs +6 -14
  288. package/dist/lib/esm/file-explorer.mjs +6 -14
  289. package/dist/lib/esm/file-manager.mjs +6 -14
  290. package/dist/lib/esm/file-system.d.mts +7 -0
  291. package/dist/lib/esm/file-system.mjs +10 -14
  292. package/dist/lib/esm/folder-note.mjs +6 -14
  293. package/dist/lib/esm/frontmatter-formatting.mjs +6 -14
  294. package/dist/lib/esm/frontmatter-link-cache-with-offsets.mjs +6 -14
  295. package/dist/lib/esm/frontmatter.mjs +6 -14
  296. package/dist/lib/esm/generated-during-build.d.mts +8 -2
  297. package/dist/lib/esm/generated-during-build.mjs +8 -16
  298. package/dist/lib/esm/hover-link-source-registrar.mjs +6 -14
  299. package/dist/lib/esm/html-element.mjs +6 -14
  300. package/dist/lib/esm/i18n/custom-type-options.mjs +6 -14
  301. package/dist/lib/esm/i18n/default-translations.mjs +6 -14
  302. package/dist/lib/esm/i18n/i18n.mjs +6 -14
  303. package/dist/lib/esm/i18n/index.mjs +6 -14
  304. package/dist/lib/esm/i18n/locales/en.mjs +6 -14
  305. package/dist/lib/esm/i18n/locales/index.mjs +6 -14
  306. package/dist/lib/esm/i18n/locales/translations-map.mjs +6 -14
  307. package/dist/lib/esm/index.mjs +6 -14
  308. package/dist/lib/esm/is-in-obsidian.mjs +6 -14
  309. package/dist/lib/esm/library-styles.mjs +6 -14
  310. package/dist/lib/esm/library.mjs +6 -14
  311. package/dist/lib/esm/link-name.mjs +6 -14
  312. package/dist/lib/esm/link-update-progress.mjs +5 -13
  313. package/dist/lib/esm/link.mjs +6 -14
  314. package/dist/lib/esm/logger.mjs +6 -14
  315. package/dist/lib/esm/loop.mjs +6 -14
  316. package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +6 -14
  317. package/dist/lib/esm/markdown-code-block-processor.mjs +6 -14
  318. package/dist/lib/esm/markdown-post-processor-registrar.mjs +6 -14
  319. package/dist/lib/esm/markdown-view.mjs +6 -14
  320. package/dist/lib/esm/markdown.mjs +6 -14
  321. package/dist/lib/esm/menu-event-registrar.mjs +5 -13
  322. package/dist/lib/esm/metadata-cache.d.mts +8 -19
  323. package/dist/lib/esm/metadata-cache.mjs +35 -21
  324. package/dist/lib/esm/mobile-trusted-input.mjs +6 -14
  325. package/dist/lib/esm/modals/alert.mjs +6 -14
  326. package/dist/lib/esm/modals/confirm.mjs +6 -14
  327. package/dist/lib/esm/modals/index.mjs +6 -14
  328. package/dist/lib/esm/modals/minimizable-modal.mjs +6 -14
  329. package/dist/lib/esm/modals/modal-command-builder.mjs +6 -14
  330. package/dist/lib/esm/modals/modal.mjs +6 -14
  331. package/dist/lib/esm/modals/prompt.mjs +6 -14
  332. package/dist/lib/esm/modals/select-item.mjs +6 -14
  333. package/dist/lib/esm/modals/select-option.mjs +6 -14
  334. package/dist/lib/esm/modals/suggest-modal-command-builder.mjs +6 -14
  335. package/dist/lib/esm/note-priority.mjs +6 -14
  336. package/dist/lib/esm/notebook-navigator.mjs +6 -14
  337. package/dist/lib/esm/obsidian-dev-utils-state.mjs +6 -14
  338. package/dist/lib/esm/obsidian-protocol-handler-registrar.mjs +6 -14
  339. package/dist/lib/esm/obsidian-settings.mjs +6 -14
  340. package/dist/lib/esm/parse-link.mjs +6 -14
  341. package/dist/lib/esm/path-settings.mjs +6 -14
  342. package/dist/lib/esm/pdf.mjs +6 -14
  343. package/dist/lib/esm/plugin/index.d.mts +1 -0
  344. package/dist/lib/esm/plugin/index.mjs +8 -14
  345. package/dist/lib/esm/plugin/plugin-api-schema.d.mts +59 -0
  346. package/dist/lib/esm/plugin/plugin-api-schema.mjs +73 -0
  347. package/dist/lib/esm/plugin/plugin-api.d.mts +83 -10
  348. package/dist/lib/esm/plugin/plugin-api.mjs +11 -14
  349. package/dist/lib/esm/plugin/plugin-context.mjs +6 -14
  350. package/dist/lib/esm/plugin/plugin-event-source.mjs +6 -14
  351. package/dist/lib/esm/plugin/plugin-install-state.mjs +6 -14
  352. package/dist/lib/esm/plugin/plugin-lifecycle-events.mjs +6 -14
  353. package/dist/lib/esm/plugin/plugin-settings-tab.mjs +6 -14
  354. package/dist/lib/esm/plugin/plugin.mjs +6 -14
  355. package/dist/lib/esm/plugin/settings-migration-api.d.mts +16 -3
  356. package/dist/lib/esm/plugin/settings-migration-api.mjs +30 -14
  357. package/dist/lib/esm/plugin-cli-handler-registrar.mjs +6 -14
  358. package/dist/lib/esm/popovers/field-popover.mjs +6 -14
  359. package/dist/lib/esm/popovers/index.mjs +6 -14
  360. package/dist/lib/esm/popovers/popover-anchor.mjs +6 -14
  361. package/dist/lib/esm/popovers/popover.mjs +6 -14
  362. package/dist/lib/esm/property-entry.mjs +6 -14
  363. package/dist/lib/esm/queue.mjs +6 -14
  364. package/dist/lib/esm/react/app-context.mjs +6 -14
  365. package/dist/lib/esm/react/index.mjs +6 -14
  366. package/dist/lib/esm/reference.mjs +6 -14
  367. package/dist/lib/esm/resource-lock.mjs +6 -14
  368. package/dist/lib/esm/resource-url.mjs +6 -14
  369. package/dist/lib/esm/ribbon-icon-registrar.mjs +6 -14
  370. package/dist/lib/esm/setting-components/checkbox-component.mjs +6 -14
  371. package/dist/lib/esm/setting-components/code-highlighter-component.mjs +6 -14
  372. package/dist/lib/esm/setting-components/date-component.mjs +6 -14
  373. package/dist/lib/esm/setting-components/date-time-component.mjs +6 -14
  374. package/dist/lib/esm/setting-components/email-component.mjs +6 -14
  375. package/dist/lib/esm/setting-components/file-component.mjs +6 -14
  376. package/dist/lib/esm/setting-components/index.mjs +6 -14
  377. package/dist/lib/esm/setting-components/month-component.mjs +6 -14
  378. package/dist/lib/esm/setting-components/multiple-dropdown-component.mjs +6 -14
  379. package/dist/lib/esm/setting-components/multiple-email-component.mjs +6 -14
  380. package/dist/lib/esm/setting-components/multiple-file-component.mjs +6 -14
  381. package/dist/lib/esm/setting-components/multiple-text-component.mjs +6 -14
  382. package/dist/lib/esm/setting-components/number-component.mjs +6 -14
  383. package/dist/lib/esm/setting-components/password-component.mjs +6 -14
  384. package/dist/lib/esm/setting-components/setting-component-wrapper.mjs +6 -14
  385. package/dist/lib/esm/setting-components/telephone-component.mjs +6 -14
  386. package/dist/lib/esm/setting-components/text-based-component.mjs +6 -14
  387. package/dist/lib/esm/setting-components/time-component.mjs +6 -14
  388. package/dist/lib/esm/setting-components/tri-state-checkbox-component.mjs +6 -14
  389. package/dist/lib/esm/setting-components/typed-dropdown-component.mjs +6 -14
  390. package/dist/lib/esm/setting-components/typed-multiple-dropdown-component.mjs +6 -14
  391. package/dist/lib/esm/setting-components/typed-range-text-component.mjs +6 -14
  392. package/dist/lib/esm/setting-components/typed-text-component.mjs +6 -14
  393. package/dist/lib/esm/setting-components/url-component.mjs +6 -14
  394. package/dist/lib/esm/setting-components/validator-component.mjs +6 -14
  395. package/dist/lib/esm/setting-components/value-component-with-change-tracking.mjs +5 -13
  396. package/dist/lib/esm/setting-components/week-component.mjs +6 -14
  397. package/dist/lib/esm/setting-ex.mjs +6 -14
  398. package/dist/lib/esm/setting-group-ex.mjs +6 -14
  399. package/dist/lib/esm/status-bar-item-registrar.mjs +6 -14
  400. package/dist/lib/esm/templater.mjs +6 -14
  401. package/dist/lib/esm/transformers/duration-transformer.mjs +6 -14
  402. package/dist/lib/esm/transformers/index.mjs +6 -14
  403. package/dist/lib/esm/trusted-input.mjs +6 -14
  404. package/dist/lib/esm/validation.mjs +6 -14
  405. package/dist/lib/esm/vault-delete.mjs +6 -14
  406. package/dist/lib/esm/vault-transaction.mjs +6 -14
  407. package/dist/lib/esm/vault.mjs +6 -14
  408. package/dist/lib/esm/view-registrar.mjs +6 -14
  409. package/dist/lib/esm/workspace.mjs +6 -14
  410. package/dist/styles.css +4 -1
  411. package/package.json +69 -24
  412. package/plugin/plugin-api-schema/package.json +6 -0
@@ -5,40 +5,32 @@ if you want to view the source, please visit the github repository of this plugi
5
5
 
6
6
  (function () {
7
7
  function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
- symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
- symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
8
+ symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
9
+ symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
10
10
  }
11
11
 
12
12
  function ensureBrowserProcess() {
13
13
  const browserProcess = {
14
14
  browser: true,
15
15
  cwd() {
16
- return '/';
16
+ return "/";
17
17
  },
18
18
  env: {},
19
- platform: 'android'
19
+ platform: "android"
20
20
  };
21
-
22
- // eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
23
21
  const existingProcess = globalThis.process;
24
-
25
22
  if (!existingProcess) {
26
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
27
23
  globalThis.process = browserProcess;
28
24
  return;
29
25
  }
30
-
31
26
  if (existingProcess.versions?.node) {
32
27
  return;
33
28
  }
34
-
35
29
  const existingProcessRecord = existingProcess;
36
-
37
30
  for (const [key, value] of Object.entries(browserProcess)) {
38
31
  existingProcessRecord[key] ??= value;
39
32
  }
40
-
41
- existingProcessRecord['browser'] = true;
33
+ existingProcessRecord["browser"] = true;
42
34
  }
43
35
 
44
36
  function keepName($unknown) {
@@ -46,17 +38,13 @@ function keepName($unknown) {
46
38
  }
47
39
 
48
40
  (function initCjs() {
49
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
50
41
  const globalThisRecord = globalThis;
51
42
  ensureDisposeSymbols();
52
- globalThisRecord['__name'] ??= keepName;
53
- globalThisRecord['__extractDefault'] ??= extractDefault;
54
-
43
+ globalThisRecord["__name"] ??= keepName;
44
+ globalThisRecord["__extractDefault"] ??= extractDefault;
55
45
  ensureBrowserProcess();
56
-
57
- // eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized with initCjs into the banner; at module scope it would be left out of it.
58
46
  function extractDefault(module) {
59
- return module && module.__esModule && 'default' in module ? module.default : module;
47
+ return module && module.__esModule && "default" in module ? module.default : module;
60
48
  }
61
49
  })();
62
50
  })();
@@ -65,8 +53,6 @@ function keepName($unknown) {
65
53
  if (!originalRequire || originalRequire.__isPatched) {
66
54
  return;
67
55
  }
68
-
69
- // eslint-disable-next-line no-global-assign, no-implicit-globals -- We need to patch the `require()` function.
70
56
  require = Object.assign(
71
57
  (id) => requirePatched(id),
72
58
  originalRequire,
@@ -74,53 +60,45 @@ function keepName($unknown) {
74
60
  __isPatched: true
75
61
  }
76
62
  );
77
-
78
63
  function extractDefault(module) {
79
- return module && module.__esModule && 'default' in module ? module.default : module;
64
+ return module && module.__esModule && "default" in module ? module.default : module;
80
65
  }
81
-
82
- const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
83
- '@codemirror/autocomplete',
84
- '@codemirror/collab',
85
- '@codemirror/commands',
86
- '@codemirror/language',
87
- '@codemirror/lint',
88
- '@codemirror/search',
89
- '@codemirror/state',
90
- '@codemirror/text',
91
- '@codemirror/view',
92
- '@lezer/common',
93
- '@lezer/highlight',
94
- '@lezer/lr',
95
- 'obsidian']
96
- );
97
-
98
- const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
99
- '@codemirror/closebrackets',
100
- '@codemirror/comment',
101
- '@codemirror/fold',
102
- '@codemirror/gutter',
103
- '@codemirror/highlight',
104
- '@codemirror/history',
105
- '@codemirror/matchbrackets',
106
- '@codemirror/panel',
107
- '@codemirror/rangeset',
108
- '@codemirror/rectangular-selection',
109
- '@codemirror/stream-parser',
110
- '@codemirror/tooltip']
111
- );
112
-
66
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
67
+ "@codemirror/autocomplete",
68
+ "@codemirror/collab",
69
+ "@codemirror/commands",
70
+ "@codemirror/language",
71
+ "@codemirror/lint",
72
+ "@codemirror/search",
73
+ "@codemirror/state",
74
+ "@codemirror/text",
75
+ "@codemirror/view",
76
+ "@lezer/common",
77
+ "@lezer/highlight",
78
+ "@lezer/lr",
79
+ "obsidian"
80
+ ]);
81
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
82
+ "@codemirror/closebrackets",
83
+ "@codemirror/comment",
84
+ "@codemirror/fold",
85
+ "@codemirror/gutter",
86
+ "@codemirror/highlight",
87
+ "@codemirror/history",
88
+ "@codemirror/matchbrackets",
89
+ "@codemirror/panel",
90
+ "@codemirror/rangeset",
91
+ "@codemirror/rectangular-selection",
92
+ "@codemirror/stream-parser",
93
+ "@codemirror/tooltip"
94
+ ]);
113
95
  function requirePatched(id) {
114
96
  if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
115
97
  return originalRequire?.(id);
116
98
  }
117
-
118
- // eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
119
99
  if (globalThis.app.isMobile) {
120
- if (id === 'process' || id === 'node:process') {
121
- // eslint-disable-next-line no-console -- Valid usage.
100
+ if (id === "process" || id === "node:process") {
122
101
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
123
-
124
102
  return process;
125
103
  }
126
104
  } else {
@@ -129,8 +107,6 @@ function keepName($unknown) {
129
107
  return extractDefault(module);
130
108
  }
131
109
  }
132
-
133
- // eslint-disable-next-line no-console -- Valid usage.
134
110
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
135
111
  return {};
136
112
  }
@@ -400,4 +376,4 @@ async function renderPaginated(params) {
400
376
  renderPaginatedList,
401
377
  renderPaginatedTable
402
378
  });
403
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RhdGF2aWV3LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCBEYXRhdmlldyBpbiBPYnNpZGlhbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBjb252ZXJ0QXN5bmNUb1N5bmMgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXN5bmMnO1xuaW1wb3J0IHsgZXJyb3JUb1N0cmluZyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9lcnJvcic7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5cbmltcG9ydCB0eXBlIHsgRGF0YXZpZXdJbmxpbmVBcGkgYXMgRGF0YXZpZXdJbmxpbmVBcGlPcmlnaW5hbCB9IGZyb20gJy4vQHR5cGVzL2RhdGF2aWV3L2FwaS9pbmxpbmUtYXBpLmQudHMnO1xuaW1wb3J0IHR5cGUge1xuICBEYXRhQXJyYXksXG4gIERhdGF2aWV3QXBpLFxuICBTTWFya2Rvd25QYWdlXG59IGZyb20gJy4vQHR5cGVzL2RhdGF2aWV3L2luZGV4LmQudHMnO1xuaW1wb3J0IHR5cGUgeyBQYXRoT3JGaWxlIH0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkRnJvbnRtYXR0ZXIgfSBmcm9tICcuL2Zyb250bWF0dGVyLnRzJztcblxuaW1wb3J0IHtcbiAgZ2V0RmlsZSxcbiAgZ2V0UGF0aFxufSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcbmltcG9ydCB7IHQgfSBmcm9tICcuL2kxOG4vaTE4bi50cyc7XG5pbXBvcnQgeyByZWxhdGl2ZVBhdGhUb1Jlc291cmNlVXJsIH0gZnJvbSAnLi9yZXNvdXJjZS11cmwudHMnO1xuXG4vKipcbiAqIEV4cG9ydCBEYXRlVGltZSBhbmQgTGluayB0eXBlcyBmcm9tIHRoZSBEYXRhdmlldyBBUEkuXG4gKi9cbmV4cG9ydCB0eXBlIHtcbiAgRGF0ZVRpbWUsXG4gIExpbmtcbn0gZnJvbSAnLi9AdHlwZXMvZGF0YXZpZXcvaW5kZXguZC50cyc7XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgLyoqXG4gICAqIEEge0BsaW5rIERhdGF2aWV3QXBpfSBvYmplY3QgcmVwcmVzZW50cyB0aGUgQVBJIGZvciBpbnRlcmFjdGluZyB3aXRoIERhdGF2aWV3IGluIE9ic2lkaWFuLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZhcnMtb24tdG9wIC0tIEl0IGlzIGEgYHZhcmAgaW4gbW9kdWxlIGRlY2xhcmF0aW9uLiBFU0xpbnQgbWlzdGFrZW5seSBjb25mdXNlcyBpdCB3aXRoIGB2YXJgIGFzIGEgdmFyaWFibGUgZGVjbGFyYXRpb24uXG4gIHZhciBEYXRhdmlld0FQSTogRGF0YXZpZXdBcGkgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQSBjb21iaW5lZCBwYWdlIHR5cGUsIHdoaWNoIGluY2x1ZGVzIHRoZSBmcm9udCBtYXR0ZXIgYW5kIHRoZSBTTWFya2Rvd25QYWdlLlxuICpcbiAqIEB0eXBlUGFyYW0gQ3VzdG9tRnJvbnRtYXR0ZXIgLSBUaGUgdHlwZSBvZiB0aGUgY3VzdG9tIGZyb250IG1hdHRlci5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tYmluZWRQYWdlPEN1c3RvbUZyb250bWF0dGVyID0gdW5rbm93bj4gPSBDb21iaW5lZEZyb250bWF0dGVyPEN1c3RvbUZyb250bWF0dGVyPiAmIFNNYXJrZG93blBhZ2U7XG5cbi8qKlxuICogRXh0ZW5kZWQgaW50ZXJmYWNlIGZvciB0aGUgRGF0YXZpZXcgSW5saW5lIEFQSSwgcHJvdmlkaW5nIGFkZGl0aW9uYWwgbWV0aG9kcyBmb3IgY3VzdG9tIHBhZ2UgdHlwZXMgYW5kIGFycmF5IGhhbmRsaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGF2aWV3SW5saW5lQXBpIGV4dGVuZHMgRGF0YXZpZXdJbmxpbmVBcGlPcmlnaW5hbCB7XG4gIC8qKlxuICAgKiBXcmFwcyBhbiBhcnJheSBvZiBpdGVtcyBpbnRvIGEge0BsaW5rIERhdGFBcnJheX0gb2JqZWN0LlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgaXRlbXMgaW4gdGhlIGFycmF5LlxuICAgKiBAcGFyYW0gYXJyYXkgLSBUaGUgYXJyYXkgb2YgaXRlbXMgdG8gd3JhcC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgRGF0YUFycmF5fSBjb250YWluaW5nIHRoZSBpdGVtcy5cbiAgICovXG4gIGFycmF5OiA8VD4oYXJyYXk6IFRbXSkgPT4gRGF0YUFycmF5PFQ+O1xuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgcGFnZSwgd2l0aCBhbiBvcHRpb25hbCBjdXN0b20gcGFnZSB0eXBlLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIEN1c3RvbVBhZ2UgLSBUaGUgdHlwZSBvZiB0aGUgY3VzdG9tIHBhZ2UuIERlZmF1bHRzIHRvIGBTTWFya2Rvd25QYWdlYC5cbiAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgcGFnZS5cbiAgICovXG4gIGN1cnJlbnQ6IDxDdXN0b21Gcm9udG1hdHRlciA9IHVua25vd24+KCkgPT4gQ29tYmluZWRQYWdlPEN1c3RvbUZyb250bWF0dGVyPjtcblxuICAvKipcbiAgICogUmV0cmlldmVzIHBhZ2VzIGJhc2VkIG9uIGFuIG9wdGlvbmFsIHF1ZXJ5LCB3aXRoIGFuIG9wdGlvbmFsIGN1c3RvbSBwYWdlIHR5cGUuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gQ3VzdG9tUGFnZSAtIFRoZSB0eXBlIG9mIHRoZSBjdXN0b20gcGFnZS4gRGVmYXVsdHMgdG8gYFNNYXJrZG93blBhZ2VgLlxuICAgKiBAcGFyYW0gcXVlcnkgLSBBbiBvcHRpb25hbCBzdHJpbmcgcXVlcnkgdG8gZmlsdGVyIHRoZSBwYWdlcy5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgRGF0YUFycmF5fSBvZiBwYWdlcyBtYXRjaGluZyB0aGUgcXVlcnkuXG4gICAqL1xuICBwYWdlczogPEN1c3RvbUZyb250bWF0dGVyID0gdW5rbm93bj4ocXVlcnk/OiBzdHJpbmcpID0+IERhdGFBcnJheTxDb21iaW5lZFBhZ2U8Q3VzdG9tRnJvbnRtYXR0ZXI+PjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHBhcmFncmFwaCBIVE1MIGVsZW1lbnQgd2l0aCB0aGUgcHJvdmlkZWQgdGV4dCBhbmQgb3B0aW9uYWwgRE9NIGVsZW1lbnQgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHRleHQgLSBUaGUgY29udGVudCBvZiB0aGUgcGFyYWdyYXBoLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIERPTSBlbGVtZW50IG9wdGlvbnMsIGluY2x1ZGluZyBhbiBvcHRpb25hbCBjb250YWluZXIuXG4gICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIEhUTUwgcGFyYWdyYXBoIGVsZW1lbnQuXG4gICAqL1xuICBwYXJhZ3JhcGg6IChcbiAgICB0ZXh0OiB1bmtub3duLFxuICAgIG9wdGlvbnM/OiBEb21FbGVtZW50SW5mb1dpdGhDb250YWluZXJcbiAgKSA9PiBIVE1MUGFyYWdyYXBoRWxlbWVudDtcbn1cblxuLyoqXG4gKiBEb21FbGVtZW50SW5mbyB3aXRoIGFuIG9wdGlvbmFsIGNvbnRhaW5lci5cbiAqL1xuZXhwb3J0IHR5cGUgRG9tRWxlbWVudEluZm9XaXRoQ29udGFpbmVyID0gQ29udGFpbmVySW5mbyAmIERvbUVsZW1lbnRJbmZvO1xuXG4vKipcbiAqIEEgY29tYmluZWQgZmlsZSB0eXBlLCB3aGljaCBpbmNsdWRlcyB0aGUgZnJvbnQgbWF0dGVyIGFuZCB0aGUgU01hcmtkb3duRmlsZS5cbiAqL1xuZXhwb3J0IHR5cGUgUGFnZUZpbGUgPSBTTWFya2Rvd25QYWdlWydmaWxlJ107XG5cbi8qKlxuICogTGlzdCBvZiBwYWdlIGZpbGVzLlxuICovXG5leHBvcnQgdHlwZSBQYWdlRmlsZXMgPSBBcnJheU9yRGF0YUFycmF5PFBhZ2VGaWxlPjtcblxuaW50ZXJmYWNlIENvbnRhaW5lckluZm8ge1xuICBjb250YWluZXI/OiBIVE1MRWxlbWVudDtcbn1cblxuLyoqXG4gKiBSZWxvYWRzIHRoZSBjdXJyZW50IGZpbGUgY2FjaGUgdXNpbmcgdGhlIERhdGF2aWV3IEFQSS5cbiAqXG4gKiBAcGFyYW0gZHYgLSBUaGUgRGF0YXZpZXdJbmxpbmVBcGkgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNhY2hlIGlzIHJlbG9hZGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVsb2FkQ3VycmVudEZpbGVDYWNoZShkdjogRGF0YXZpZXdJbmxpbmVBcGkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgYWN0aXZlV2luZG93LkRhdGF2aWV3QVBJPy5pbmRleC5yZWxvYWQoZ2V0RmlsZSh7XG4gICAgYXBwOiBkdi5hcHAsXG4gICAgcGF0aE9yRmlsZTogZHYuY3VycmVudCgpLmZpbGUucGF0aFxuICB9KSk7XG59XG5cbmNvbnN0IHBhZ2luYXRpb25Dc3MgPSBgXG4ucGFnaW5hdGlvbiAucGFnZS1saW5rLmRpc2FibGVkIHtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIGNvbG9yOiBncmF5O1xufVxuXG4ucGFnaW5hdGlvbiAucGFnZS1saW5rIHtcbiAgbWFyZ2luOiAwIDVweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGNvbG9yOiBibHVlO1xufVxuXG4ucGFnaW5hdGlvbiAucGFnZS1saW5rOmhvdmVyOm5vdCguZGlzYWJsZWQpIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4ucGFnaW5hdGlvbiAucGFnZS1saW5rLmN1cnJlbnQge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbi5wYWdpbmF0aW9uIHNlbGVjdCxcbi5wYWdpbmF0aW9uIGlucHV0IHtcbiAgbWFyZ2luOiAwIDVweDtcbn1cbmA7XG5cbi8qKlxuICogQXJyYXkgb3IgRGF0YUFycmF5IHR5cGUuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIGVsZW1lbnRzLlxuICovXG5leHBvcnQgdHlwZSBBcnJheU9yRGF0YUFycmF5PFQ+ID0gRGF0YUFycmF5PFQ+IHwgVFtdO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpbnNlcnRDb2RlQmxvY2t9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluc2VydENvZGVCbG9ja1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgY29kZSBjb250ZW50IHRvIGJlIGluc2VydGVkIGludG8gdGhlIGNvZGUgYmxvY2suXG4gICAqL1xuICByZWFkb25seSBjb2RlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBEYXRhdmlld0lubGluZUFwaSBpbnN0YW5jZSB0byBpbnNlcnQgdGhlIGNvZGUgYmxvY2sgaW50by5cbiAgICovXG4gIHJlYWRvbmx5IGR2OiBEYXRhdmlld0lubGluZUFwaTtcblxuICAvKipcbiAgICogVGhlIGxhbmd1YWdlIGlkZW50aWZpZXIgZm9yIHRoZSBjb2RlIGJsb2NrLlxuICAgKi9cbiAgcmVhZG9ubHkgbGFuZ3VhZ2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcmVuZGVySWZyYW1lfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJJZnJhbWVQYXJhbXMge1xuICAvKipcbiAgICogQSB7QGxpbmsgRGF0YXZpZXdJbmxpbmVBcGl9IGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZHY6IERhdGF2aWV3SW5saW5lQXBpO1xuXG4gIC8qKlxuICAgKiBBIGhlaWdodCBvZiB0aGUgaWZyYW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJzYwMHB4J2BcbiAgICovXG4gIHJlYWRvbmx5IGhlaWdodD86IHN0cmluZztcblxuICAvKipcbiAgICogQSByZWxhdGl2ZSBwYXRoIHRvIHRoZSByZXNvdXJjZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGlmcmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IHJlbGF0aXZlUGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogQSB3aWR0aCBvZiB0aGUgaWZyYW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJzEwMCUnYFxuICAgKi9cbiAgcmVhZG9ubHkgd2lkdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHJlbmRlclBhZ2luYXRlZExpc3R9LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBsaXN0IGl0ZW1zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlclBhZ2luYXRlZExpc3RQYXJhbXM8VD4ge1xuICAvKipcbiAgICogQSB7QGxpbmsgRGF0YXZpZXdJbmxpbmVBcGl9IGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZHY6IERhdGF2aWV3SW5saW5lQXBpO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBpdGVtcyBwZXIgcGFnZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYFsxMCwgMjAsIDUwLCAxMDBdYFxuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXNQZXJQYWdlT3B0aW9ucz86IG51bWJlcltdO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgaXRlbXMgdG8gcGFnaW5hdGUuXG4gICAqL1xuICByZWFkb25seSByb3dzOiBBcnJheU9yRGF0YUFycmF5PFQ+O1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayByZW5kZXJQYWdpbmF0ZWR9LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBpdGVtcyB0byBwYWdpbmF0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJQYWdpbmF0ZWRQYXJhbXM8VD4ge1xuICAvKipcbiAgICogQSB7QGxpbmsgRGF0YXZpZXdJbmxpbmVBcGl9IGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZHY6IERhdGF2aWV3SW5saW5lQXBpO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBpdGVtcyBwZXIgcGFnZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYFsxMCwgMjAsIDUwLCAxMDBdYFxuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXNQZXJQYWdlT3B0aW9ucz86IG51bWJlcltdO1xuXG4gIC8qKlxuICAgKiBEaXNwbGF5IHRoZSBwYWdpbmF0ZWQgY29udGVudC5cbiAgICpcbiAgICogQHBhcmFtIHJvd3NGb3JPbmVQYWdlIC0gVGhlIHJvd3MgdG8gcmVuZGVyLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNvbnRlbnQgaXMgcmVuZGVyZWQuXG4gICAqL1xuICByZWFkb25seSByZW5kZXJlcjogKHJvd3NGb3JPbmVQYWdlOiBBcnJheU9yRGF0YUFycmF5PFQ+KSA9PiBQcm9taXNhYmxlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBSb3dzIHRvIHBhZ2luYXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcm93czogQXJyYXlPckRhdGFBcnJheTxUPjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcmVuZGVyUGFnaW5hdGVkVGFibGV9LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB0YWJsZSByb3cgZGF0YS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJQYWdpbmF0ZWRUYWJsZVBhcmFtczxUPiB7XG4gIC8qKlxuICAgKiBBIHtAbGluayBEYXRhdmlld0lubGluZUFwaX0gaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBkdjogRGF0YXZpZXdJbmxpbmVBcGk7XG5cbiAgLyoqXG4gICAqIEEgaGVhZGVycyBvZiB0aGUgdGFibGUuXG4gICAqL1xuICByZWFkb25seSBoZWFkZXJzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgaXRlbXMgcGVyIHBhZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBbMTAsIDIwLCA1MCwgMTAwXWBcbiAgICovXG4gIHJlYWRvbmx5IGl0ZW1zUGVyUGFnZU9wdGlvbnM/OiBudW1iZXJbXTtcblxuICAvKipcbiAgICogUm93cyBvZiB0aGUgdGFibGUgdG8gcGFnaW5hdGUuXG4gICAqL1xuICByZWFkb25seSByb3dzOiBBcnJheU9yRGF0YUFycmF5PFQ+O1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjcmVhdGVQYWdlTGlua30uXG4gKi9cbmludGVyZmFjZSBDcmVhdGVQYWdlTGlua1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgcGFnZSBudW1iZXIgdGhlIGxpbmsgcG9pbnRzIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgY3VycmVudFBhZ2VOdW1iZXI6IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgbGluayBpcyBkaXNhYmxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGRpc2FibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHRleHQgdG8gZGlzcGxheSBmb3IgdGhlIGxpbmsuXG4gICAqL1xuICByZWFkb25seSB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVuZGVycyB0aGUgY29udGVudCB1c2luZyB0aGUgcHJvdmlkZWQgcmVuZGVyZXIgZnVuY3Rpb24gaW4gYSB0ZW1wb3JhcnkgY29udGFpbmVyLFxuICogYW5kIHRoZW4gcmV0dXJucyB0aGUgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBkdiAtIFRoZSBEYXRhdmlld0lubGluZUFwaSBpbnN0YW5jZS5cbiAqIEBwYXJhbSByZW5kZXJlciAtIFRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgcmVuZGVyaW5nIHRoZSBjb250ZW50LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgSFRNTCBwYXJhZ3JhcGggZWxlbWVudFxuICogdGhhdCB3YXMgdXNlZCBhcyB0aGUgdGVtcG9yYXJ5IGNvbnRhaW5lci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFJlbmRlcmVkQ29udGFpbmVyKGR2OiBEYXRhdmlld0lubGluZUFwaSwgcmVuZGVyZXI6ICgpID0+IFByb21pc2FibGU8dm9pZD4pOiBQcm9taXNlPEhUTUxQYXJhZ3JhcGhFbGVtZW50PiB7XG4gIGNvbnN0IG9sZENvbnRhaW5lciA9IGR2LmNvbnRhaW5lcjtcbiAgY29uc3QgdGVtcG9yYXJ5Q29udGFpbmVyID0gZHYucGFyYWdyYXBoKCcnKTtcbiAgZHYuY29udGFpbmVyID0gdGVtcG9yYXJ5Q29udGFpbmVyO1xuICBkdi5jb250YWluZXIuZW1wdHkoKTtcblxuICB0cnkge1xuICAgIGF3YWl0IHJlbmRlcmVyKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZHYucGFyYWdyYXBoKGBcdTI3NEMke2Vycm9yVG9TdHJpbmcoZXJyb3IpfWApO1xuICB9IGZpbmFsbHkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZXF1aXJlLWF0b21pYy11cGRhdGVzIC0tIFllcywgaXQgaXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24sIGJ1dCBJIGRvbid0IGFuIGVsZWdhbnQgd2F5IHRvIGZpeCBpdC5cbiAgICBkdi5jb250YWluZXIgPSBvbGRDb250YWluZXI7XG4gICAgdGVtcG9yYXJ5Q29udGFpbmVyLnJlbW92ZSgpO1xuICB9XG5cbiAgcmV0dXJuIHRlbXBvcmFyeUNvbnRhaW5lcjtcbn1cblxuLyoqXG4gKiBJbnNlcnRzIGEgY29kZSBibG9jayBpbnRvIHRoZSBzcGVjaWZpZWQgRGF0YXZpZXcgaW5zdGFuY2UgdXNpbmcgdGhlIHByb3ZpZGVkIGxhbmd1YWdlIGFuZCBjb2RlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgaW5zZXJ0aW5nIHRoZSBjb2RlIGJsb2NrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0Q29kZUJsb2NrKHBhcmFtczogSW5zZXJ0Q29kZUJsb2NrUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHtcbiAgICBjb2RlLFxuICAgIGR2LFxuICAgIGxhbmd1YWdlXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IE1JTl9GRU5DRV9MRU5HVEggPSAzO1xuICBjb25zdCBmZW5jZVJlZ0V4cCA9IG5ldyBSZWdFeHAoYF5cXGB7JHtTdHJpbmcoTUlOX0ZFTkNFX0xFTkdUSCl9LH1gLCAnZ20nKTtcbiAgY29uc3QgZmVuY2VNYXRjaGVzID0gY29kZS5tYXRjaEFsbChmZW5jZVJlZ0V4cCk7XG4gIGNvbnN0IGZlbmNlTGVuZ3RocyA9IFsuLi5mZW5jZU1hdGNoZXNdLm1hcCgoZmVuY2VNYXRjaCkgPT4gZmVuY2VNYXRjaFswXS5sZW5ndGgpO1xuICBjb25zdCBtYXhGZW5jZUxlbmd0aCA9IE1hdGgubWF4KDAsIC4uLmZlbmNlTGVuZ3Rocyk7XG4gIGNvbnN0IHJlc3VsdEZlbmNlTGVuZ3RoID0gTWF0aC5tYXgoTUlOX0ZFTkNFX0xFTkdUSCwgbWF4RmVuY2VMZW5ndGggKyAxKTtcbiAgY29uc3QgcmVzdWx0RmVuY2UgPSAnYCcucmVwZWF0KHJlc3VsdEZlbmNlTGVuZ3RoKTtcblxuICBkdi5wYXJhZ3JhcGgoYCR7cmVzdWx0RmVuY2V9JHtsYW5ndWFnZX1cbiR7Y29kZX1cbiR7cmVzdWx0RmVuY2V9YCk7XG59XG5cbi8qKlxuICogUmVuZGVycyBhbiBpZnJhbWUgaW4gdGhlIERhdGF2aWV3IGNvbnRhaW5lciB3aXRoIHRoZSBzcGVjaWZpZWQgcmVsYXRpdmUgcGF0aCwgd2lkdGgsIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciByZW5kZXJpbmcgdGhlIGlmcmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlcklmcmFtZShwYXJhbXM6IFJlbmRlcklmcmFtZVBhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7XG4gICAgZHYsXG4gICAgaGVpZ2h0ID0gJzYwMHB4JyxcbiAgICByZWxhdGl2ZVBhdGhPckZpbGUsXG4gICAgd2lkdGggPSAnMTAwJSdcbiAgfSA9IHBhcmFtcztcbiAgZHYuZWwoJ2lmcmFtZScsICcnLCB7XG4gICAgYXR0cjoge1xuICAgICAgaGVpZ2h0LFxuICAgICAgc3JjOiByZWxhdGl2ZVBhdGhUb1Jlc291cmNlVXJsKHtcbiAgICAgICAgYXBwOiBkdi5hcHAsXG4gICAgICAgIG5vdGVQYXRoOiBkdi5jdXJyZW50KCkuZmlsZS5wYXRoLFxuICAgICAgICByZWxhdGl2ZVBhdGg6IGdldFBhdGgoZHYuYXBwLCByZWxhdGl2ZVBhdGhPckZpbGUpXG4gICAgICB9KSxcbiAgICAgIHdpZHRoXG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgcGFnaW5hdGVkIGxpc3QgdXNpbmcgdGhlIHByb3ZpZGVkIERhdGF2aWV3SW5saW5lQXBpIGluc3RhbmNlLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIGl0ZW1zIGluIHRoZSBsaXN0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcmVuZGVyaW5nIHRoZSBwYWdpbmF0ZWQgbGlzdC5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGxpc3QgaXMgcmVuZGVyZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5kZXJQYWdpbmF0ZWRMaXN0PFQ+KHBhcmFtczogUmVuZGVyUGFnaW5hdGVkTGlzdFBhcmFtczxUPik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7XG4gICAgZHYsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnMgLS0gRXh0cmFjdGluZyBtYWdpYyBudW1iZXIgYXMgYSBjb25zdGFudCB3b3VsZCBiZSByZXBldGl0aXZlLCBhcyB0aGUgdmFsdWUgaXMgdXNlZCBvbmx5IG9uY2UgYW5kIGl0cyBuYW1lIHdvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBwcm9wZXJ0eS5cbiAgICBpdGVtc1BlclBhZ2VPcHRpb25zID0gWzEwLCAyMCwgNTAsIDEwMF0sXG4gICAgcm93c1xuICB9ID0gcGFyYW1zO1xuICBhd2FpdCByZW5kZXJQYWdpbmF0ZWQoe1xuICAgIGR2LFxuICAgIGl0ZW1zUGVyUGFnZU9wdGlvbnMsXG4gICAgcmVuZGVyZXI6IGFzeW5jIChyb3dzRm9yT25lUGFnZTogQXJyYXlPckRhdGFBcnJheTxUPik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgYXdhaXQgZHYubGlzdChyb3dzRm9yT25lUGFnZSk7XG4gICAgfSxcbiAgICByb3dzXG4gIH0pO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYSBwYWdpbmF0ZWQgdGFibGUgdXNpbmcgdGhlIHByb3ZpZGVkIERhdGF2aWV3SW5saW5lQXBpIGluc3RhbmNlLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIGl0ZW1zIGluIHRoZSB0YWJsZSByb3dzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcmVuZGVyaW5nIHRoZSBwYWdpbmF0ZWQgdGFibGUuXG4gKlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSB0YWJsZSBpcyByZW5kZXJlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlclBhZ2luYXRlZFRhYmxlPFQgZXh0ZW5kcyB1bmtub3duW10+KHBhcmFtczogUmVuZGVyUGFnaW5hdGVkVGFibGVQYXJhbXM8VD4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qge1xuICAgIGR2LFxuICAgIGhlYWRlcnMsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnMgLS0gRXh0cmFjdGluZyBtYWdpYyBudW1iZXIgYXMgYSBjb25zdGFudCB3b3VsZCBiZSByZXBldGl0aXZlLCBhcyB0aGUgdmFsdWUgaXMgdXNlZCBvbmx5IG9uY2UgYW5kIGl0cyBuYW1lIHdvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBwcm9wZXJ0eS5cbiAgICBpdGVtc1BlclBhZ2VPcHRpb25zID0gWzEwLCAyMCwgNTAsIDEwMF0sXG4gICAgcm93c1xuICB9ID0gcGFyYW1zO1xuICBhd2FpdCByZW5kZXJQYWdpbmF0ZWQoe1xuICAgIGR2LFxuICAgIGl0ZW1zUGVyUGFnZU9wdGlvbnMsXG4gICAgcmVuZGVyZXI6IGFzeW5jIChyb3dzRm9yT25lUGFnZTogQXJyYXlPckRhdGFBcnJheTxUPik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgYXdhaXQgZHYudGFibGUoaGVhZGVycywgcm93c0Zvck9uZVBhZ2UpO1xuICAgIH0sXG4gICAgcm93c1xuICB9KTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVuZGVyIHBhZ2luYXRlZCBjb250ZW50IHVzaW5nIHRoZSBzcGVjaWZpZWQgcmVuZGVyZXIuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgaXRlbXMgdG8gcGFnaW5hdGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciByZW5kZXJpbmcgdGhlIHBhZ2luYXRlZCBjb250ZW50LlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY29udGVudCBpcyByZW5kZXJlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVuZGVyUGFnaW5hdGVkPFQ+KHBhcmFtczogUmVuZGVyUGFnaW5hdGVkUGFyYW1zPFQ+KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IFNFQ09ORF9QQUdFX05VTUJFUiA9IDI7XG4gIGNvbnN0IE1PUkVfUEFHRV9OVU1CRVIgPSAzO1xuICBjb25zdCB7XG4gICAgZHYsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnMgLS0gRXh0cmFjdGluZyBtYWdpYyBudW1iZXIgYXMgYSBjb25zdGFudCB3b3VsZCBiZSByZXBldGl0aXZlLCBhcyB0aGUgdmFsdWUgaXMgdXNlZCBvbmx5IG9uY2UgYW5kIGl0cyBuYW1lIHdvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBwcm9wZXJ0eS5cbiAgICBpdGVtc1BlclBhZ2VPcHRpb25zID0gWzEwLCAyMCwgNTAsIDEwMF0sXG4gICAgcm93c1xuICB9ID0gcGFyYW1zO1xuICBpZiAocm93cy5sZW5ndGggPT09IDApIHtcbiAgICBkdi5wYXJhZ3JhcGgoJ05vIGl0ZW1zIGZvdW5kJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGNvbnRhaW5lciA9IGR2LmNvbnRhaW5lcjtcbiAgbGV0IGl0ZW1zUGVyUGFnZSA9IGVuc3VyZU5vbk51bGxhYmxlKGl0ZW1zUGVyUGFnZU9wdGlvbnNbMF0sICdJdGVtcyBwZXIgcGFnZSBvcHRpb25zIGFyZSBlbXB0eScpO1xuICBsZXQgdG90YWxQYWdlcyA9IE1hdGguY2VpbChyb3dzLmxlbmd0aCAvIGl0ZW1zUGVyUGFnZSk7XG4gIGF3YWl0IHJlbmRlclBhZ2UoMSk7XG5cbiAgZnVuY3Rpb24gY3JlYXRlUGFnaW5hdGlvbkNvbnRyb2xzKHBhZ2VOdW1iZXI6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHBhZ2luYXRpb25EaXYgPSBjb250YWluZXIuY3JlYXRlRGl2KHsgY2xzOiAncGFnaW5hdGlvbicgfSk7XG4gICAgY29uc3QgcGFnaW5hdGlvblJvdzFEaXYgPSBwYWdpbmF0aW9uRGl2LmNyZWF0ZURpdigpO1xuXG4gICAgY3JlYXRlUGFnZUxpbmsoeyBjdXJyZW50UGFnZU51bWJlcjogMSwgZGlzYWJsZWQ6IHBhZ2VOdW1iZXIgPT09IDEsIHRleHQ6ICdGaXJzdCcgfSk7XG4gICAgY3JlYXRlUGFnZUxpbmsoeyBjdXJyZW50UGFnZU51bWJlcjogcGFnZU51bWJlciAtIDEsIGRpc2FibGVkOiBwYWdlTnVtYmVyID09PSAxLCB0ZXh0OiAnUHJldicgfSk7XG5cbiAgICBpZiAocGFnZU51bWJlciA+IE1PUkVfUEFHRV9OVU1CRVIpIHtcbiAgICAgIHBhZ2luYXRpb25Sb3cxRGl2LmNyZWF0ZVNwYW4oeyB0ZXh0OiAnLi4uJyB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IE1hdGgubWF4KDEsIHBhZ2VOdW1iZXIgLSBTRUNPTkRfUEFHRV9OVU1CRVIpOyBpbmRleCA8PSBNYXRoLm1pbih0b3RhbFBhZ2VzLCBwYWdlTnVtYmVyICsgU0VDT05EX1BBR0VfTlVNQkVSKTsgaW5kZXgrKykge1xuICAgICAgY29uc3QgcGFnZUxpbmsgPSBjcmVhdGVQYWdlTGluayh7IGN1cnJlbnRQYWdlTnVtYmVyOiBpbmRleCwgZGlzYWJsZWQ6IGluZGV4ID09PSBwYWdlTnVtYmVyLCB0ZXh0OiBTdHJpbmcoaW5kZXgpIH0pO1xuICAgICAgaWYgKGluZGV4ID09PSBwYWdlTnVtYmVyKSB7XG4gICAgICAgIHBhZ2VMaW5rLmFkZENsYXNzKCdjdXJyZW50Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhZ2VOdW1iZXIgPCB0b3RhbFBhZ2VzIC0gU0VDT05EX1BBR0VfTlVNQkVSKSB7XG4gICAgICBwYWdpbmF0aW9uUm93MURpdi5jcmVhdGVTcGFuKHsgdGV4dDogJy4uLicgfSk7XG4gICAgfVxuXG4gICAgY3JlYXRlUGFnZUxpbmsoeyBjdXJyZW50UGFnZU51bWJlcjogcGFnZU51bWJlciArIDEsIGRpc2FibGVkOiBwYWdlTnVtYmVyID09PSB0b3RhbFBhZ2VzLCB0ZXh0OiAnTmV4dCcgfSk7XG4gICAgY3JlYXRlUGFnZUxpbmsoeyBjdXJyZW50UGFnZU51bWJlcjogdG90YWxQYWdlcywgZGlzYWJsZWQ6IHBhZ2VOdW1iZXIgPT09IHRvdGFsUGFnZXMsIHRleHQ6ICdMYXN0JyB9KTtcblxuICAgIGNvbnN0IHBhZ2luYXRpb25Sb3cyRGl2ID0gcGFnaW5hdGlvbkRpdi5jcmVhdGVEaXYoKTtcblxuICAgIHBhZ2luYXRpb25Sb3cyRGl2LmNyZWF0ZVNwYW4oeyB0ZXh0OiBgICR7dCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLmRhdGF2aWV3Lml0ZW1zUGVyUGFnZSl9IGAgfSk7XG5cbiAgICBjb25zdCBpdGVtc1BlclBhZ2VTZWxlY3QgPSBwYWdpbmF0aW9uUm93MkRpdi5jcmVhdGVFbCgnc2VsZWN0Jyk7XG4gICAgZm9yIChjb25zdCBvcHRpb24gb2YgaXRlbXNQZXJQYWdlT3B0aW9ucykge1xuICAgICAgaXRlbXNQZXJQYWdlU2VsZWN0LmNyZWF0ZUVsKCdvcHRpb24nLCB7IHRleHQ6IFN0cmluZyhvcHRpb24pLCB2YWx1ZTogU3RyaW5nKG9wdGlvbikgfSk7XG4gICAgfVxuICAgIGl0ZW1zUGVyUGFnZVNlbGVjdC52YWx1ZSA9IFN0cmluZyhpdGVtc1BlclBhZ2UpO1xuICAgIGl0ZW1zUGVyUGFnZVNlbGVjdC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2NoYW5nZScsXG4gICAgICBjb252ZXJ0QXN5bmNUb1N5bmMoYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBpdGVtc1BlclBhZ2UgPSBwYXJzZUludChpdGVtc1BlclBhZ2VTZWxlY3QudmFsdWUsIDEwKTtcbiAgICAgICAgdG90YWxQYWdlcyA9IE1hdGguY2VpbChyb3dzLmxlbmd0aCAvIGl0ZW1zUGVyUGFnZSk7XG4gICAgICAgIGF3YWl0IHJlbmRlclBhZ2UoMSk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBwYWdpbmF0aW9uUm93MkRpdi5jcmVhdGVTcGFuKHsgdGV4dDogYCAke3QoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5kYXRhdmlldy5qdW1wVG9QYWdlKX0gYCB9KTtcblxuICAgIGNvbnN0IGp1bXBUb1BhZ2VJbnB1dCA9IHBhZ2luYXRpb25Sb3cyRGl2LmNyZWF0ZUVsKCdpbnB1dCcsIHsgYXR0cjogeyBtYXg6IHRvdGFsUGFnZXMsIG1pbjogMSB9LCB0eXBlOiAnbnVtYmVyJyB9KTtcbiAgICBqdW1wVG9QYWdlSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdrZXlkb3duJyxcbiAgICAgIGNvbnZlcnRBc3luY1RvU3luYyhhc3luYyAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSAhPT0gJ0VudGVyJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhZ2UgPSBwYXJzZUludChqdW1wVG9QYWdlSW5wdXQudmFsdWUsIDEwKTtcbiAgICAgICAgaWYgKHBhZ2UgPj0gMSAmJiBwYWdlIDw9IHRvdGFsUGFnZXMpIHtcbiAgICAgICAgICBhd2FpdCByZW5kZXJQYWdlKHBhZ2UpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBwYWdpbmF0aW9uUm93MkRpdi5jcmVhdGVTcGFuKHsgdGV4dDogdCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLmRhdGF2aWV3LnBhZ2VIZWFkZXIsIHsgcGFnZU51bWJlciwgdG90YWxJdGVtczogcm93cy5sZW5ndGgsIHRvdGFsUGFnZXMgfSkgfSk7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVQYWdlTGluayhwYXJhbXMyOiBDcmVhdGVQYWdlTGlua1BhcmFtcyk6IEhUTUxBbmNob3JFbGVtZW50IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY3VycmVudFBhZ2VOdW1iZXIsXG4gICAgICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgICAgIHRleHRcbiAgICAgIH0gPSBwYXJhbXMyO1xuICAgICAgY29uc3QgbGluayA9IHBhZ2luYXRpb25Sb3cxRGl2LmNyZWF0ZUVsKCdhJywgeyBjbHM6ICdwYWdlLWxpbmsnLCBocmVmOiBgIyR7U3RyaW5nKGN1cnJlbnRQYWdlTnVtYmVyKX1gLCB0ZXh0IH0pO1xuICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgIGxpbmsuYWRkQ2xhc3MoJ2Rpc2FibGVkJyk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL3ByZWZlci1hZGQtZXZlbnQtbGlzdGVuZXIgLS0gVGhlIGhhbmRsZXIgaXMgYXNzaWduZWQgdG8gYG9uY2xpY2tgIHNvIGl0IHN0YXlzIHJlYWRhYmxlIGJhY2sgb2ZmIHRoZSBlbGVtZW50LCB3aGljaCBpcyBob3cgaXQgaXMgaW52b2tlZCBpbiB0ZXN0cyBhbmQgaG93IGEgbGF0ZXIgYXNzaWdubWVudCBjYW4gcmVwbGFjZSBpdC5cbiAgICAgICAgbGluay5vbmNsaWNrID0gKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCA9PiB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL3ByZWZlci1hZGQtZXZlbnQtbGlzdGVuZXIgLS0gVGhlIGhhbmRsZXIgaXMgYXNzaWduZWQgdG8gYG9uY2xpY2tgIHNvIGl0IHN0YXlzIHJlYWRhYmxlIGJhY2sgb2ZmIHRoZSBlbGVtZW50LCB3aGljaCBpcyBob3cgaXQgaXMgaW52b2tlZCBpbiB0ZXN0cyBhbmQgaG93IGEgbGF0ZXIgYXNzaWdubWVudCBjYW4gcmVwbGFjZSBpdC5cbiAgICAgICAgbGluay5vbmNsaWNrID0gY29udmVydEFzeW5jVG9TeW5jKGFzeW5jIChldmVudDogTW91c2VFdmVudCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgYXdhaXQgcmVuZGVyUGFnZShjdXJyZW50UGFnZU51bWJlcik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxpbms7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcmVuZGVyUGFnZShwYWdlTnVtYmVyOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb250YWluZXIuZW1wdHkoKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JzaWRpYW5tZC9uby1mb3JiaWRkZW4tZWxlbWVudHMgLS0gV2UgbmVlZCB0byBjcmVhdGUgYSBzdHlsZSBlbGVtZW50IHRvIGFwcGx5IHRoZSBwYWdpbmF0aW9uIENTUy5cbiAgICBjb250YWluZXIuY3JlYXRlRWwoJ3N0eWxlJywgeyB0ZXh0OiBwYWdpbmF0aW9uQ3NzIH0pO1xuXG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IChwYWdlTnVtYmVyIC0gMSkgKiBpdGVtc1BlclBhZ2U7XG4gICAgY29uc3QgZW5kSW5kZXggPSBzdGFydEluZGV4ICsgaXRlbXNQZXJQYWdlO1xuICAgIGNvbnN0IHJvd3NGb3JDdXJyZW50UGFnZSA9IHJvd3Muc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuXG4gICAgY29uc3Qgb2xkQ29udGFpbmVyID0gZHYuY29udGFpbmVyO1xuXG4gICAgZHYuY29udGFpbmVyID0gY29udGFpbmVyO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBwYXJhbXMucmVuZGVyZXIocm93c0ZvckN1cnJlbnRQYWdlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZHYucGFyYWdyYXBoKGBcdTI3NEMke2Vycm9yVG9TdHJpbmcoZXJyb3IpfWApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hdG9taWMtdXBkYXRlcyAtLSBZZXMsIGl0IGlzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLCBidXQgSSBkb24ndCBhbiBlbGVnYW50IHdheSB0byBmaXggaXQuXG4gICAgICBkdi5jb250YWluZXIgPSBvbGRDb250YWluZXI7XG4gICAgfVxuXG4gICAgY3JlYXRlUGFnaW5hdGlvbkNvbnRyb2xzKHBhZ2VOdW1iZXIpO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
379
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RhdGF2aWV3LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCBEYXRhdmlldyBpbiBPYnNpZGlhbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBjb252ZXJ0QXN5bmNUb1N5bmMgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXN5bmMnO1xuaW1wb3J0IHsgZXJyb3JUb1N0cmluZyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9lcnJvcic7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5cbmltcG9ydCB0eXBlIHsgRGF0YXZpZXdJbmxpbmVBcGkgYXMgRGF0YXZpZXdJbmxpbmVBcGlPcmlnaW5hbCB9IGZyb20gJy4vQHR5cGVzL2RhdGF2aWV3L2FwaS9pbmxpbmUtYXBpLmQudHMnO1xuaW1wb3J0IHR5cGUge1xuICBEYXRhQXJyYXksXG4gIERhdGF2aWV3QXBpLFxuICBTTWFya2Rvd25QYWdlXG59IGZyb20gJy4vQHR5cGVzL2RhdGF2aWV3L2luZGV4LmQudHMnO1xuaW1wb3J0IHR5cGUgeyBQYXRoT3JGaWxlIH0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkRnJvbnRtYXR0ZXIgfSBmcm9tICcuL2Zyb250bWF0dGVyLnRzJztcblxuaW1wb3J0IHtcbiAgZ2V0RmlsZSxcbiAgZ2V0UGF0aFxufSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcbmltcG9ydCB7IHQgfSBmcm9tICcuL2kxOG4vaTE4bi50cyc7XG5pbXBvcnQgeyByZWxhdGl2ZVBhdGhUb1Jlc291cmNlVXJsIH0gZnJvbSAnLi9yZXNvdXJjZS11cmwudHMnO1xuXG4vKipcbiAqIEV4cG9ydCBEYXRlVGltZSBhbmQgTGluayB0eXBlcyBmcm9tIHRoZSBEYXRhdmlldyBBUEkuXG4gKi9cbmV4cG9ydCB0eXBlIHtcbiAgRGF0ZVRpbWUsXG4gIExpbmtcbn0gZnJvbSAnLi9AdHlwZXMvZGF0YXZpZXcvaW5kZXguZC50cyc7XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgLyoqXG4gICAqIEEge0BsaW5rIERhdGF2aWV3QXBpfSBvYmplY3QgcmVwcmVzZW50cyB0aGUgQVBJIGZvciBpbnRlcmFjdGluZyB3aXRoIERhdGF2aWV3IGluIE9ic2lkaWFuLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZhcnMtb24tdG9wIC0tIEl0IGlzIGEgYHZhcmAgaW4gbW9kdWxlIGRlY2xhcmF0aW9uLiBFU0xpbnQgbWlzdGFrZW5seSBjb25mdXNlcyBpdCB3aXRoIGB2YXJgIGFzIGEgdmFyaWFibGUgZGVjbGFyYXRpb24uXG4gIHZhciBEYXRhdmlld0FQSTogRGF0YXZpZXdBcGkgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQSBjb21iaW5lZCBwYWdlIHR5cGUsIHdoaWNoIGluY2x1ZGVzIHRoZSBmcm9udCBtYXR0ZXIgYW5kIHRoZSBTTWFya2Rvd25QYWdlLlxuICpcbiAqIEB0eXBlUGFyYW0gQ3VzdG9tRnJvbnRtYXR0ZXIgLSBUaGUgdHlwZSBvZiB0aGUgY3VzdG9tIGZyb250IG1hdHRlci5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tYmluZWRQYWdlPEN1c3RvbUZyb250bWF0dGVyID0gdW5rbm93bj4gPSBDb21iaW5lZEZyb250bWF0dGVyPEN1c3RvbUZyb250bWF0dGVyPiAmIFNNYXJrZG93blBhZ2U7XG5cbi8qKlxuICogRXh0ZW5kZWQgaW50ZXJmYWNlIGZvciB0aGUgRGF0YXZpZXcgSW5saW5lIEFQSSwgcHJvdmlkaW5nIGFkZGl0aW9uYWwgbWV0aG9kcyBmb3IgY3VzdG9tIHBhZ2UgdHlwZXMgYW5kIGFycmF5IGhhbmRsaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGF2aWV3SW5saW5lQXBpIGV4dGVuZHMgRGF0YXZpZXdJbmxpbmVBcGlPcmlnaW5hbCB7XG4gIC8qKlxuICAgKiBXcmFwcyBhbiBhcnJheSBvZiBpdGVtcyBpbnRvIGEge0BsaW5rIERhdGFBcnJheX0gb2JqZWN0LlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgaXRlbXMgaW4gdGhlIGFycmF5LlxuICAgKiBAcGFyYW0gYXJyYXkgLSBUaGUgYXJyYXkgb2YgaXRlbXMgdG8gd3JhcC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgRGF0YUFycmF5fSBjb250YWluaW5nIHRoZSBpdGVtcy5cbiAgICovXG4gIGFycmF5OiA8VD4oYXJyYXk6IFRbXSkgPT4gRGF0YUFycmF5PFQ+O1xuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgcGFnZSwgd2l0aCBhbiBvcHRpb25hbCBjdXN0b20gcGFnZSB0eXBlLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIEN1c3RvbVBhZ2UgLSBUaGUgdHlwZSBvZiB0aGUgY3VzdG9tIHBhZ2UuIERlZmF1bHRzIHRvIGBTTWFya2Rvd25QYWdlYC5cbiAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgcGFnZS5cbiAgICovXG4gIGN1cnJlbnQ6IDxDdXN0b21Gcm9udG1hdHRlciA9IHVua25vd24+KCkgPT4gQ29tYmluZWRQYWdlPEN1c3RvbUZyb250bWF0dGVyPjtcblxuICAvKipcbiAgICogUmV0cmlldmVzIHBhZ2VzIGJhc2VkIG9uIGFuIG9wdGlvbmFsIHF1ZXJ5LCB3aXRoIGFuIG9wdGlvbmFsIGN1c3RvbSBwYWdlIHR5cGUuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gQ3VzdG9tUGFnZSAtIFRoZSB0eXBlIG9mIHRoZSBjdXN0b20gcGFnZS4gRGVmYXVsdHMgdG8gYFNNYXJrZG93blBhZ2VgLlxuICAgKiBAcGFyYW0gcXVlcnkgLSBBbiBvcHRpb25hbCBzdHJpbmcgcXVlcnkgdG8gZmlsdGVyIHRoZSBwYWdlcy5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgRGF0YUFycmF5fSBvZiBwYWdlcyBtYXRjaGluZyB0aGUgcXVlcnkuXG4gICAqL1xuICBwYWdlczogPEN1c3RvbUZyb250bWF0dGVyID0gdW5rbm93bj4ocXVlcnk/OiBzdHJpbmcpID0+IERhdGFBcnJheTxDb21iaW5lZFBhZ2U8Q3VzdG9tRnJvbnRtYXR0ZXI+PjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHBhcmFncmFwaCBIVE1MIGVsZW1lbnQgd2l0aCB0aGUgcHJvdmlkZWQgdGV4dCBhbmQgb3B0aW9uYWwgRE9NIGVsZW1lbnQgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHRleHQgLSBUaGUgY29udGVudCBvZiB0aGUgcGFyYWdyYXBoLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIERPTSBlbGVtZW50IG9wdGlvbnMsIGluY2x1ZGluZyBhbiBvcHRpb25hbCBjb250YWluZXIuXG4gICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIEhUTUwgcGFyYWdyYXBoIGVsZW1lbnQuXG4gICAqL1xuICBwYXJhZ3JhcGg6IChcbiAgICB0ZXh0OiB1bmtub3duLFxuICAgIG9wdGlvbnM/OiBEb21FbGVtZW50SW5mb1dpdGhDb250YWluZXJcbiAgKSA9PiBIVE1MUGFyYWdyYXBoRWxlbWVudDtcbn1cblxuLyoqXG4gKiBEb21FbGVtZW50SW5mbyB3aXRoIGFuIG9wdGlvbmFsIGNvbnRhaW5lci5cbiAqL1xuZXhwb3J0IHR5cGUgRG9tRWxlbWVudEluZm9XaXRoQ29udGFpbmVyID0gQ29udGFpbmVySW5mbyAmIERvbUVsZW1lbnRJbmZvO1xuXG4vKipcbiAqIEEgY29tYmluZWQgZmlsZSB0eXBlLCB3aGljaCBpbmNsdWRlcyB0aGUgZnJvbnQgbWF0dGVyIGFuZCB0aGUgU01hcmtkb3duRmlsZS5cbiAqL1xuZXhwb3J0IHR5cGUgUGFnZUZpbGUgPSBTTWFya2Rvd25QYWdlWydmaWxlJ107XG5cbi8qKlxuICogTGlzdCBvZiBwYWdlIGZpbGVzLlxuICovXG5leHBvcnQgdHlwZSBQYWdlRmlsZXMgPSBBcnJheU9yRGF0YUFycmF5PFBhZ2VGaWxlPjtcblxuaW50ZXJmYWNlIENvbnRhaW5lckluZm8ge1xuICBjb250YWluZXI/OiBIVE1MRWxlbWVudDtcbn1cblxuLyoqXG4gKiBSZWxvYWRzIHRoZSBjdXJyZW50IGZpbGUgY2FjaGUgdXNpbmcgdGhlIERhdGF2aWV3IEFQSS5cbiAqXG4gKiBAcGFyYW0gZHYgLSBUaGUgRGF0YXZpZXdJbmxpbmVBcGkgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNhY2hlIGlzIHJlbG9hZGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVsb2FkQ3VycmVudEZpbGVDYWNoZShkdjogRGF0YXZpZXdJbmxpbmVBcGkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgYWN0aXZlV2luZG93LkRhdGF2aWV3QVBJPy5pbmRleC5yZWxvYWQoZ2V0RmlsZSh7XG4gICAgYXBwOiBkdi5hcHAsXG4gICAgcGF0aE9yRmlsZTogZHYuY3VycmVudCgpLmZpbGUucGF0aFxuICB9KSk7XG59XG5cbmNvbnN0IHBhZ2luYXRpb25Dc3MgPSBgXG4ucGFnaW5hdGlvbiAucGFnZS1saW5rLmRpc2FibGVkIHtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIGNvbG9yOiBncmF5O1xufVxuXG4ucGFnaW5hdGlvbiAucGFnZS1saW5rIHtcbiAgbWFyZ2luOiAwIDVweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGNvbG9yOiBibHVlO1xufVxuXG4ucGFnaW5hdGlvbiAucGFnZS1saW5rOmhvdmVyOm5vdCguZGlzYWJsZWQpIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4ucGFnaW5hdGlvbiAucGFnZS1saW5rLmN1cnJlbnQge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbi5wYWdpbmF0aW9uIHNlbGVjdCxcbi5wYWdpbmF0aW9uIGlucHV0IHtcbiAgbWFyZ2luOiAwIDVweDtcbn1cbmA7XG5cbi8qKlxuICogQXJyYXkgb3IgRGF0YUFycmF5IHR5cGUuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIGVsZW1lbnRzLlxuICovXG5leHBvcnQgdHlwZSBBcnJheU9yRGF0YUFycmF5PFQ+ID0gRGF0YUFycmF5PFQ+IHwgVFtdO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpbnNlcnRDb2RlQmxvY2t9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluc2VydENvZGVCbG9ja1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgY29kZSBjb250ZW50IHRvIGJlIGluc2VydGVkIGludG8gdGhlIGNvZGUgYmxvY2suXG4gICAqL1xuICByZWFkb25seSBjb2RlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBEYXRhdmlld0lubGluZUFwaSBpbnN0YW5jZSB0byBpbnNlcnQgdGhlIGNvZGUgYmxvY2sgaW50by5cbiAgICovXG4gIHJlYWRvbmx5IGR2OiBEYXRhdmlld0lubGluZUFwaTtcblxuICAvKipcbiAgICogVGhlIGxhbmd1YWdlIGlkZW50aWZpZXIgZm9yIHRoZSBjb2RlIGJsb2NrLlxuICAgKi9cbiAgcmVhZG9ubHkgbGFuZ3VhZ2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcmVuZGVySWZyYW1lfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJJZnJhbWVQYXJhbXMge1xuICAvKipcbiAgICogQSB7QGxpbmsgRGF0YXZpZXdJbmxpbmVBcGl9IGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZHY6IERhdGF2aWV3SW5saW5lQXBpO1xuXG4gIC8qKlxuICAgKiBBIGhlaWdodCBvZiB0aGUgaWZyYW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJzYwMHB4J2BcbiAgICovXG4gIHJlYWRvbmx5IGhlaWdodD86IHN0cmluZztcblxuICAvKipcbiAgICogQSByZWxhdGl2ZSBwYXRoIHRvIHRoZSByZXNvdXJjZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGlmcmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IHJlbGF0aXZlUGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogQSB3aWR0aCBvZiB0aGUgaWZyYW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJzEwMCUnYFxuICAgKi9cbiAgcmVhZG9ubHkgd2lkdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHJlbmRlclBhZ2luYXRlZExpc3R9LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBsaXN0IGl0ZW1zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlclBhZ2luYXRlZExpc3RQYXJhbXM8VD4ge1xuICAvKipcbiAgICogQSB7QGxpbmsgRGF0YXZpZXdJbmxpbmVBcGl9IGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZHY6IERhdGF2aWV3SW5saW5lQXBpO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBpdGVtcyBwZXIgcGFnZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYFsxMCwgMjAsIDUwLCAxMDBdYFxuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXNQZXJQYWdlT3B0aW9ucz86IG51bWJlcltdO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgaXRlbXMgdG8gcGFnaW5hdGUuXG4gICAqL1xuICByZWFkb25seSByb3dzOiBBcnJheU9yRGF0YUFycmF5PFQ+O1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayByZW5kZXJQYWdpbmF0ZWR9LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBpdGVtcyB0byBwYWdpbmF0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJQYWdpbmF0ZWRQYXJhbXM8VD4ge1xuICAvKipcbiAgICogQSB7QGxpbmsgRGF0YXZpZXdJbmxpbmVBcGl9IGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZHY6IERhdGF2aWV3SW5saW5lQXBpO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBpdGVtcyBwZXIgcGFnZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYFsxMCwgMjAsIDUwLCAxMDBdYFxuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXNQZXJQYWdlT3B0aW9ucz86IG51bWJlcltdO1xuXG4gIC8qKlxuICAgKiBEaXNwbGF5IHRoZSBwYWdpbmF0ZWQgY29udGVudC5cbiAgICpcbiAgICogQHBhcmFtIHJvd3NGb3JPbmVQYWdlIC0gVGhlIHJvd3MgdG8gcmVuZGVyLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNvbnRlbnQgaXMgcmVuZGVyZWQuXG4gICAqL1xuICByZWFkb25seSByZW5kZXJlcjogKHJvd3NGb3JPbmVQYWdlOiBBcnJheU9yRGF0YUFycmF5PFQ+KSA9PiBQcm9taXNhYmxlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBSb3dzIHRvIHBhZ2luYXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcm93czogQXJyYXlPckRhdGFBcnJheTxUPjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcmVuZGVyUGFnaW5hdGVkVGFibGV9LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB0YWJsZSByb3cgZGF0YS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJQYWdpbmF0ZWRUYWJsZVBhcmFtczxUPiB7XG4gIC8qKlxuICAgKiBBIHtAbGluayBEYXRhdmlld0lubGluZUFwaX0gaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBkdjogRGF0YXZpZXdJbmxpbmVBcGk7XG5cbiAgLyoqXG4gICAqIEEgaGVhZGVycyBvZiB0aGUgdGFibGUuXG4gICAqL1xuICByZWFkb25seSBoZWFkZXJzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgaXRlbXMgcGVyIHBhZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBbMTAsIDIwLCA1MCwgMTAwXWBcbiAgICovXG4gIHJlYWRvbmx5IGl0ZW1zUGVyUGFnZU9wdGlvbnM/OiBudW1iZXJbXTtcblxuICAvKipcbiAgICogUm93cyBvZiB0aGUgdGFibGUgdG8gcGFnaW5hdGUuXG4gICAqL1xuICByZWFkb25seSByb3dzOiBBcnJheU9yRGF0YUFycmF5PFQ+O1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjcmVhdGVQYWdlTGlua30uXG4gKi9cbmludGVyZmFjZSBDcmVhdGVQYWdlTGlua1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgcGFnZSBudW1iZXIgdGhlIGxpbmsgcG9pbnRzIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgY3VycmVudFBhZ2VOdW1iZXI6IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgbGluayBpcyBkaXNhYmxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGRpc2FibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHRleHQgdG8gZGlzcGxheSBmb3IgdGhlIGxpbmsuXG4gICAqL1xuICByZWFkb25seSB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVuZGVycyB0aGUgY29udGVudCB1c2luZyB0aGUgcHJvdmlkZWQgcmVuZGVyZXIgZnVuY3Rpb24gaW4gYSB0ZW1wb3JhcnkgY29udGFpbmVyLFxuICogYW5kIHRoZW4gcmV0dXJucyB0aGUgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBkdiAtIFRoZSBEYXRhdmlld0lubGluZUFwaSBpbnN0YW5jZS5cbiAqIEBwYXJhbSByZW5kZXJlciAtIFRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgcmVuZGVyaW5nIHRoZSBjb250ZW50LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgSFRNTCBwYXJhZ3JhcGggZWxlbWVudFxuICogdGhhdCB3YXMgdXNlZCBhcyB0aGUgdGVtcG9yYXJ5IGNvbnRhaW5lci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFJlbmRlcmVkQ29udGFpbmVyKGR2OiBEYXRhdmlld0lubGluZUFwaSwgcmVuZGVyZXI6ICgpID0+IFByb21pc2FibGU8dm9pZD4pOiBQcm9taXNlPEhUTUxQYXJhZ3JhcGhFbGVtZW50PiB7XG4gIGNvbnN0IG9sZENvbnRhaW5lciA9IGR2LmNvbnRhaW5lcjtcbiAgY29uc3QgdGVtcG9yYXJ5Q29udGFpbmVyID0gZHYucGFyYWdyYXBoKCcnKTtcbiAgZHYuY29udGFpbmVyID0gdGVtcG9yYXJ5Q29udGFpbmVyO1xuICBkdi5jb250YWluZXIuZW1wdHkoKTtcblxuICB0cnkge1xuICAgIGF3YWl0IHJlbmRlcmVyKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZHYucGFyYWdyYXBoKGBcdTI3NEMke2Vycm9yVG9TdHJpbmcoZXJyb3IpfWApO1xuICB9IGZpbmFsbHkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZXF1aXJlLWF0b21pYy11cGRhdGVzIC0tIFllcywgaXQgaXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24sIGJ1dCBJIGRvbid0IGFuIGVsZWdhbnQgd2F5IHRvIGZpeCBpdC5cbiAgICBkdi5jb250YWluZXIgPSBvbGRDb250YWluZXI7XG4gICAgdGVtcG9yYXJ5Q29udGFpbmVyLnJlbW92ZSgpO1xuICB9XG5cbiAgcmV0dXJuIHRlbXBvcmFyeUNvbnRhaW5lcjtcbn1cblxuLyoqXG4gKiBJbnNlcnRzIGEgY29kZSBibG9jayBpbnRvIHRoZSBzcGVjaWZpZWQgRGF0YXZpZXcgaW5zdGFuY2UgdXNpbmcgdGhlIHByb3ZpZGVkIGxhbmd1YWdlIGFuZCBjb2RlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgaW5zZXJ0aW5nIHRoZSBjb2RlIGJsb2NrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0Q29kZUJsb2NrKHBhcmFtczogSW5zZXJ0Q29kZUJsb2NrUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHtcbiAgICBjb2RlLFxuICAgIGR2LFxuICAgIGxhbmd1YWdlXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IE1JTl9GRU5DRV9MRU5HVEggPSAzO1xuICBjb25zdCBmZW5jZVJlZ0V4cCA9IG5ldyBSZWdFeHAoYF5cXGB7JHtTdHJpbmcoTUlOX0ZFTkNFX0xFTkdUSCl9LH1gLCAnZ20nKTtcbiAgY29uc3QgZmVuY2VNYXRjaGVzID0gY29kZS5tYXRjaEFsbChmZW5jZVJlZ0V4cCk7XG4gIGNvbnN0IGZlbmNlTGVuZ3RocyA9IFsuLi5mZW5jZU1hdGNoZXNdLm1hcCgoZmVuY2VNYXRjaCkgPT4gZmVuY2VNYXRjaFswXS5sZW5ndGgpO1xuICBjb25zdCBtYXhGZW5jZUxlbmd0aCA9IE1hdGgubWF4KDAsIC4uLmZlbmNlTGVuZ3Rocyk7XG4gIGNvbnN0IHJlc3VsdEZlbmNlTGVuZ3RoID0gTWF0aC5tYXgoTUlOX0ZFTkNFX0xFTkdUSCwgbWF4RmVuY2VMZW5ndGggKyAxKTtcbiAgY29uc3QgcmVzdWx0RmVuY2UgPSAnYCcucmVwZWF0KHJlc3VsdEZlbmNlTGVuZ3RoKTtcblxuICBkdi5wYXJhZ3JhcGgoYCR7cmVzdWx0RmVuY2V9JHtsYW5ndWFnZX1cbiR7Y29kZX1cbiR7cmVzdWx0RmVuY2V9YCk7XG59XG5cbi8qKlxuICogUmVuZGVycyBhbiBpZnJhbWUgaW4gdGhlIERhdGF2aWV3IGNvbnRhaW5lciB3aXRoIHRoZSBzcGVjaWZpZWQgcmVsYXRpdmUgcGF0aCwgd2lkdGgsIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciByZW5kZXJpbmcgdGhlIGlmcmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlcklmcmFtZShwYXJhbXM6IFJlbmRlcklmcmFtZVBhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7XG4gICAgZHYsXG4gICAgaGVpZ2h0ID0gJzYwMHB4JyxcbiAgICByZWxhdGl2ZVBhdGhPckZpbGUsXG4gICAgd2lkdGggPSAnMTAwJSdcbiAgfSA9IHBhcmFtcztcbiAgZHYuZWwoJ2lmcmFtZScsICcnLCB7XG4gICAgYXR0cjoge1xuICAgICAgaGVpZ2h0LFxuICAgICAgc3JjOiByZWxhdGl2ZVBhdGhUb1Jlc291cmNlVXJsKHtcbiAgICAgICAgYXBwOiBkdi5hcHAsXG4gICAgICAgIG5vdGVQYXRoOiBkdi5jdXJyZW50KCkuZmlsZS5wYXRoLFxuICAgICAgICByZWxhdGl2ZVBhdGg6IGdldFBhdGgoZHYuYXBwLCByZWxhdGl2ZVBhdGhPckZpbGUpXG4gICAgICB9KSxcbiAgICAgIHdpZHRoXG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgcGFnaW5hdGVkIGxpc3QgdXNpbmcgdGhlIHByb3ZpZGVkIERhdGF2aWV3SW5saW5lQXBpIGluc3RhbmNlLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIGl0ZW1zIGluIHRoZSBsaXN0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcmVuZGVyaW5nIHRoZSBwYWdpbmF0ZWQgbGlzdC5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGxpc3QgaXMgcmVuZGVyZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5kZXJQYWdpbmF0ZWRMaXN0PFQ+KHBhcmFtczogUmVuZGVyUGFnaW5hdGVkTGlzdFBhcmFtczxUPik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7XG4gICAgZHYsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnMgLS0gRXh0cmFjdGluZyBtYWdpYyBudW1iZXIgYXMgYSBjb25zdGFudCB3b3VsZCBiZSByZXBldGl0aXZlLCBhcyB0aGUgdmFsdWUgaXMgdXNlZCBvbmx5IG9uY2UgYW5kIGl0cyBuYW1lIHdvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBwcm9wZXJ0eS5cbiAgICBpdGVtc1BlclBhZ2VPcHRpb25zID0gWzEwLCAyMCwgNTAsIDEwMF0sXG4gICAgcm93c1xuICB9ID0gcGFyYW1zO1xuICBhd2FpdCByZW5kZXJQYWdpbmF0ZWQoe1xuICAgIGR2LFxuICAgIGl0ZW1zUGVyUGFnZU9wdGlvbnMsXG4gICAgcmVuZGVyZXI6IGFzeW5jIChyb3dzRm9yT25lUGFnZTogQXJyYXlPckRhdGFBcnJheTxUPik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgYXdhaXQgZHYubGlzdChyb3dzRm9yT25lUGFnZSk7XG4gICAgfSxcbiAgICByb3dzXG4gIH0pO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYSBwYWdpbmF0ZWQgdGFibGUgdXNpbmcgdGhlIHByb3ZpZGVkIERhdGF2aWV3SW5saW5lQXBpIGluc3RhbmNlLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIGl0ZW1zIGluIHRoZSB0YWJsZSByb3dzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcmVuZGVyaW5nIHRoZSBwYWdpbmF0ZWQgdGFibGUuXG4gKlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSB0YWJsZSBpcyByZW5kZXJlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlclBhZ2luYXRlZFRhYmxlPFQgZXh0ZW5kcyB1bmtub3duW10+KHBhcmFtczogUmVuZGVyUGFnaW5hdGVkVGFibGVQYXJhbXM8VD4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qge1xuICAgIGR2LFxuICAgIGhlYWRlcnMsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnMgLS0gRXh0cmFjdGluZyBtYWdpYyBudW1iZXIgYXMgYSBjb25zdGFudCB3b3VsZCBiZSByZXBldGl0aXZlLCBhcyB0aGUgdmFsdWUgaXMgdXNlZCBvbmx5IG9uY2UgYW5kIGl0cyBuYW1lIHdvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBwcm9wZXJ0eS5cbiAgICBpdGVtc1BlclBhZ2VPcHRpb25zID0gWzEwLCAyMCwgNTAsIDEwMF0sXG4gICAgcm93c1xuICB9ID0gcGFyYW1zO1xuICBhd2FpdCByZW5kZXJQYWdpbmF0ZWQoe1xuICAgIGR2LFxuICAgIGl0ZW1zUGVyUGFnZU9wdGlvbnMsXG4gICAgcmVuZGVyZXI6IGFzeW5jIChyb3dzRm9yT25lUGFnZTogQXJyYXlPckRhdGFBcnJheTxUPik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgYXdhaXQgZHYudGFibGUoaGVhZGVycywgcm93c0Zvck9uZVBhZ2UpO1xuICAgIH0sXG4gICAgcm93c1xuICB9KTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVuZGVyIHBhZ2luYXRlZCBjb250ZW50IHVzaW5nIHRoZSBzcGVjaWZpZWQgcmVuZGVyZXIuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgaXRlbXMgdG8gcGFnaW5hdGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciByZW5kZXJpbmcgdGhlIHBhZ2luYXRlZCBjb250ZW50LlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY29udGVudCBpcyByZW5kZXJlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVuZGVyUGFnaW5hdGVkPFQ+KHBhcmFtczogUmVuZGVyUGFnaW5hdGVkUGFyYW1zPFQ+KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IFNFQ09ORF9QQUdFX05VTUJFUiA9IDI7XG4gIGNvbnN0IE1PUkVfUEFHRV9OVU1CRVIgPSAzO1xuICBjb25zdCB7XG4gICAgZHYsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnMgLS0gRXh0cmFjdGluZyBtYWdpYyBudW1iZXIgYXMgYSBjb25zdGFudCB3b3VsZCBiZSByZXBldGl0aXZlLCBhcyB0aGUgdmFsdWUgaXMgdXNlZCBvbmx5IG9uY2UgYW5kIGl0cyBuYW1lIHdvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBwcm9wZXJ0eS5cbiAgICBpdGVtc1BlclBhZ2VPcHRpb25zID0gWzEwLCAyMCwgNTAsIDEwMF0sXG4gICAgcm93c1xuICB9ID0gcGFyYW1zO1xuICBpZiAocm93cy5sZW5ndGggPT09IDApIHtcbiAgICBkdi5wYXJhZ3JhcGgoJ05vIGl0ZW1zIGZvdW5kJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGNvbnRhaW5lciA9IGR2LmNvbnRhaW5lcjtcbiAgbGV0IGl0ZW1zUGVyUGFnZSA9IGVuc3VyZU5vbk51bGxhYmxlKGl0ZW1zUGVyUGFnZU9wdGlvbnNbMF0sICdJdGVtcyBwZXIgcGFnZSBvcHRpb25zIGFyZSBlbXB0eScpO1xuICBsZXQgdG90YWxQYWdlcyA9IE1hdGguY2VpbChyb3dzLmxlbmd0aCAvIGl0ZW1zUGVyUGFnZSk7XG4gIGF3YWl0IHJlbmRlclBhZ2UoMSk7XG5cbiAgZnVuY3Rpb24gY3JlYXRlUGFnaW5hdGlvbkNvbnRyb2xzKHBhZ2VOdW1iZXI6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHBhZ2luYXRpb25EaXYgPSBjb250YWluZXIuY3JlYXRlRGl2KHsgY2xzOiAncGFnaW5hdGlvbicgfSk7XG4gICAgY29uc3QgcGFnaW5hdGlvblJvdzFEaXYgPSBwYWdpbmF0aW9uRGl2LmNyZWF0ZURpdigpO1xuXG4gICAgY3JlYXRlUGFnZUxpbmsoeyBjdXJyZW50UGFnZU51bWJlcjogMSwgZGlzYWJsZWQ6IHBhZ2VOdW1iZXIgPT09IDEsIHRleHQ6ICdGaXJzdCcgfSk7XG4gICAgY3JlYXRlUGFnZUxpbmsoeyBjdXJyZW50UGFnZU51bWJlcjogcGFnZU51bWJlciAtIDEsIGRpc2FibGVkOiBwYWdlTnVtYmVyID09PSAxLCB0ZXh0OiAnUHJldicgfSk7XG5cbiAgICBpZiAocGFnZU51bWJlciA+IE1PUkVfUEFHRV9OVU1CRVIpIHtcbiAgICAgIHBhZ2luYXRpb25Sb3cxRGl2LmNyZWF0ZVNwYW4oeyB0ZXh0OiAnLi4uJyB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IE1hdGgubWF4KDEsIHBhZ2VOdW1iZXIgLSBTRUNPTkRfUEFHRV9OVU1CRVIpOyBpbmRleCA8PSBNYXRoLm1pbih0b3RhbFBhZ2VzLCBwYWdlTnVtYmVyICsgU0VDT05EX1BBR0VfTlVNQkVSKTsgaW5kZXgrKykge1xuICAgICAgY29uc3QgcGFnZUxpbmsgPSBjcmVhdGVQYWdlTGluayh7IGN1cnJlbnRQYWdlTnVtYmVyOiBpbmRleCwgZGlzYWJsZWQ6IGluZGV4ID09PSBwYWdlTnVtYmVyLCB0ZXh0OiBTdHJpbmcoaW5kZXgpIH0pO1xuICAgICAgaWYgKGluZGV4ID09PSBwYWdlTnVtYmVyKSB7XG4gICAgICAgIHBhZ2VMaW5rLmFkZENsYXNzKCdjdXJyZW50Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhZ2VOdW1iZXIgPCB0b3RhbFBhZ2VzIC0gU0VDT05EX1BBR0VfTlVNQkVSKSB7XG4gICAgICBwYWdpbmF0aW9uUm93MURpdi5jcmVhdGVTcGFuKHsgdGV4dDogJy4uLicgfSk7XG4gICAgfVxuXG4gICAgY3JlYXRlUGFnZUxpbmsoeyBjdXJyZW50UGFnZU51bWJlcjogcGFnZU51bWJlciArIDEsIGRpc2FibGVkOiBwYWdlTnVtYmVyID09PSB0b3RhbFBhZ2VzLCB0ZXh0OiAnTmV4dCcgfSk7XG4gICAgY3JlYXRlUGFnZUxpbmsoeyBjdXJyZW50UGFnZU51bWJlcjogdG90YWxQYWdlcywgZGlzYWJsZWQ6IHBhZ2VOdW1iZXIgPT09IHRvdGFsUGFnZXMsIHRleHQ6ICdMYXN0JyB9KTtcblxuICAgIGNvbnN0IHBhZ2luYXRpb25Sb3cyRGl2ID0gcGFnaW5hdGlvbkRpdi5jcmVhdGVEaXYoKTtcblxuICAgIHBhZ2luYXRpb25Sb3cyRGl2LmNyZWF0ZVNwYW4oeyB0ZXh0OiBgICR7dCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLmRhdGF2aWV3Lml0ZW1zUGVyUGFnZSl9IGAgfSk7XG5cbiAgICBjb25zdCBpdGVtc1BlclBhZ2VTZWxlY3QgPSBwYWdpbmF0aW9uUm93MkRpdi5jcmVhdGVFbCgnc2VsZWN0Jyk7XG4gICAgZm9yIChjb25zdCBvcHRpb24gb2YgaXRlbXNQZXJQYWdlT3B0aW9ucykge1xuICAgICAgaXRlbXNQZXJQYWdlU2VsZWN0LmNyZWF0ZUVsKCdvcHRpb24nLCB7IHRleHQ6IFN0cmluZyhvcHRpb24pLCB2YWx1ZTogU3RyaW5nKG9wdGlvbikgfSk7XG4gICAgfVxuICAgIGl0ZW1zUGVyUGFnZVNlbGVjdC52YWx1ZSA9IFN0cmluZyhpdGVtc1BlclBhZ2UpO1xuICAgIGl0ZW1zUGVyUGFnZVNlbGVjdC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2NoYW5nZScsXG4gICAgICBjb252ZXJ0QXN5bmNUb1N5bmMoYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBpdGVtc1BlclBhZ2UgPSBwYXJzZUludChpdGVtc1BlclBhZ2VTZWxlY3QudmFsdWUsIDEwKTtcbiAgICAgICAgdG90YWxQYWdlcyA9IE1hdGguY2VpbChyb3dzLmxlbmd0aCAvIGl0ZW1zUGVyUGFnZSk7XG4gICAgICAgIGF3YWl0IHJlbmRlclBhZ2UoMSk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBwYWdpbmF0aW9uUm93MkRpdi5jcmVhdGVTcGFuKHsgdGV4dDogYCAke3QoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5kYXRhdmlldy5qdW1wVG9QYWdlKX0gYCB9KTtcblxuICAgIGNvbnN0IGp1bXBUb1BhZ2VJbnB1dCA9IHBhZ2luYXRpb25Sb3cyRGl2LmNyZWF0ZUVsKCdpbnB1dCcsIHsgYXR0cjogeyBtYXg6IHRvdGFsUGFnZXMsIG1pbjogMSB9LCB0eXBlOiAnbnVtYmVyJyB9KTtcbiAgICBqdW1wVG9QYWdlSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdrZXlkb3duJyxcbiAgICAgIGNvbnZlcnRBc3luY1RvU3luYyhhc3luYyAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSAhPT0gJ0VudGVyJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhZ2UgPSBwYXJzZUludChqdW1wVG9QYWdlSW5wdXQudmFsdWUsIDEwKTtcbiAgICAgICAgaWYgKHBhZ2UgPj0gMSAmJiBwYWdlIDw9IHRvdGFsUGFnZXMpIHtcbiAgICAgICAgICBhd2FpdCByZW5kZXJQYWdlKHBhZ2UpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBwYWdpbmF0aW9uUm93MkRpdi5jcmVhdGVTcGFuKHsgdGV4dDogdCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLmRhdGF2aWV3LnBhZ2VIZWFkZXIsIHsgcGFnZU51bWJlciwgdG90YWxJdGVtczogcm93cy5sZW5ndGgsIHRvdGFsUGFnZXMgfSkgfSk7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVQYWdlTGluayhwYXJhbXMyOiBDcmVhdGVQYWdlTGlua1BhcmFtcyk6IEhUTUxBbmNob3JFbGVtZW50IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY3VycmVudFBhZ2VOdW1iZXIsXG4gICAgICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgICAgIHRleHRcbiAgICAgIH0gPSBwYXJhbXMyO1xuICAgICAgY29uc3QgbGluayA9IHBhZ2luYXRpb25Sb3cxRGl2LmNyZWF0ZUVsKCdhJywgeyBjbHM6ICdwYWdlLWxpbmsnLCBocmVmOiBgIyR7U3RyaW5nKGN1cnJlbnRQYWdlTnVtYmVyKX1gLCB0ZXh0IH0pO1xuICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgIGxpbmsuYWRkQ2xhc3MoJ2Rpc2FibGVkJyk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL3ByZWZlci1hZGQtZXZlbnQtbGlzdGVuZXIgLS0gVGhlIGhhbmRsZXIgaXMgYXNzaWduZWQgdG8gYG9uY2xpY2tgIHNvIGl0IHN0YXlzIHJlYWRhYmxlIGJhY2sgb2ZmIHRoZSBlbGVtZW50LCB3aGljaCBpcyBob3cgaXQgaXMgaW52b2tlZCBpbiB0ZXN0cyBhbmQgaG93IGEgbGF0ZXIgYXNzaWdubWVudCBjYW4gcmVwbGFjZSBpdC5cbiAgICAgICAgbGluay5vbmNsaWNrID0gKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCA9PiB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL3ByZWZlci1hZGQtZXZlbnQtbGlzdGVuZXIgLS0gVGhlIGhhbmRsZXIgaXMgYXNzaWduZWQgdG8gYG9uY2xpY2tgIHNvIGl0IHN0YXlzIHJlYWRhYmxlIGJhY2sgb2ZmIHRoZSBlbGVtZW50LCB3aGljaCBpcyBob3cgaXQgaXMgaW52b2tlZCBpbiB0ZXN0cyBhbmQgaG93IGEgbGF0ZXIgYXNzaWdubWVudCBjYW4gcmVwbGFjZSBpdC5cbiAgICAgICAgbGluay5vbmNsaWNrID0gY29udmVydEFzeW5jVG9TeW5jKGFzeW5jIChldmVudDogTW91c2VFdmVudCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgYXdhaXQgcmVuZGVyUGFnZShjdXJyZW50UGFnZU51bWJlcik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxpbms7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcmVuZGVyUGFnZShwYWdlTnVtYmVyOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb250YWluZXIuZW1wdHkoKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JzaWRpYW5tZC9uby1mb3JiaWRkZW4tZWxlbWVudHMgLS0gV2UgbmVlZCB0byBjcmVhdGUgYSBzdHlsZSBlbGVtZW50IHRvIGFwcGx5IHRoZSBwYWdpbmF0aW9uIENTUy5cbiAgICBjb250YWluZXIuY3JlYXRlRWwoJ3N0eWxlJywgeyB0ZXh0OiBwYWdpbmF0aW9uQ3NzIH0pO1xuXG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IChwYWdlTnVtYmVyIC0gMSkgKiBpdGVtc1BlclBhZ2U7XG4gICAgY29uc3QgZW5kSW5kZXggPSBzdGFydEluZGV4ICsgaXRlbXNQZXJQYWdlO1xuICAgIGNvbnN0IHJvd3NGb3JDdXJyZW50UGFnZSA9IHJvd3Muc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuXG4gICAgY29uc3Qgb2xkQ29udGFpbmVyID0gZHYuY29udGFpbmVyO1xuXG4gICAgZHYuY29udGFpbmVyID0gY29udGFpbmVyO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBwYXJhbXMucmVuZGVyZXIocm93c0ZvckN1cnJlbnRQYWdlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZHYucGFyYWdyYXBoKGBcdTI3NEMke2Vycm9yVG9TdHJpbmcoZXJyb3IpfWApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hdG9taWMtdXBkYXRlcyAtLSBZZXMsIGl0IGlzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLCBidXQgSSBkb24ndCBhbiBlbGVnYW50IHdheSB0byBmaXggaXQuXG4gICAgICBkdi5jb250YWluZXIgPSBvbGRDb250YWluZXI7XG4gICAgfVxuXG4gICAgY3JlYXRlUGFnaW5hdGlvbkNvbnRyb2xzKHBhZ2VOdW1iZXIpO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
@@ -5,40 +5,32 @@ if you want to view the source, please visit the github repository of this plugi
5
5
 
6
6
  (function () {
7
7
  function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
- symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
- symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
8
+ symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
9
+ symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
10
10
  }
11
11
 
12
12
  function ensureBrowserProcess() {
13
13
  const browserProcess = {
14
14
  browser: true,
15
15
  cwd() {
16
- return '/';
16
+ return "/";
17
17
  },
18
18
  env: {},
19
- platform: 'android'
19
+ platform: "android"
20
20
  };
21
-
22
- // eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
23
21
  const existingProcess = globalThis.process;
24
-
25
22
  if (!existingProcess) {
26
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
27
23
  globalThis.process = browserProcess;
28
24
  return;
29
25
  }
30
-
31
26
  if (existingProcess.versions?.node) {
32
27
  return;
33
28
  }
34
-
35
29
  const existingProcessRecord = existingProcess;
36
-
37
30
  for (const [key, value] of Object.entries(browserProcess)) {
38
31
  existingProcessRecord[key] ??= value;
39
32
  }
40
-
41
- existingProcessRecord['browser'] = true;
33
+ existingProcessRecord["browser"] = true;
42
34
  }
43
35
 
44
36
  function keepName($unknown) {
@@ -46,17 +38,13 @@ function keepName($unknown) {
46
38
  }
47
39
 
48
40
  (function initCjs() {
49
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
50
41
  const globalThisRecord = globalThis;
51
42
  ensureDisposeSymbols();
52
- globalThisRecord['__name'] ??= keepName;
53
- globalThisRecord['__extractDefault'] ??= extractDefault;
54
-
43
+ globalThisRecord["__name"] ??= keepName;
44
+ globalThisRecord["__extractDefault"] ??= extractDefault;
55
45
  ensureBrowserProcess();
56
-
57
- // eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized with initCjs into the banner; at module scope it would be left out of it.
58
46
  function extractDefault(module) {
59
- return module && module.__esModule && 'default' in module ? module.default : module;
47
+ return module && module.__esModule && "default" in module ? module.default : module;
60
48
  }
61
49
  })();
62
50
  })();
@@ -65,8 +53,6 @@ function keepName($unknown) {
65
53
  if (!originalRequire || originalRequire.__isPatched) {
66
54
  return;
67
55
  }
68
-
69
- // eslint-disable-next-line no-global-assign, no-implicit-globals -- We need to patch the `require()` function.
70
56
  require = Object.assign(
71
57
  (id) => requirePatched(id),
72
58
  originalRequire,
@@ -74,53 +60,45 @@ function keepName($unknown) {
74
60
  __isPatched: true
75
61
  }
76
62
  );
77
-
78
63
  function extractDefault(module) {
79
- return module && module.__esModule && 'default' in module ? module.default : module;
64
+ return module && module.__esModule && "default" in module ? module.default : module;
80
65
  }
81
-
82
- const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
83
- '@codemirror/autocomplete',
84
- '@codemirror/collab',
85
- '@codemirror/commands',
86
- '@codemirror/language',
87
- '@codemirror/lint',
88
- '@codemirror/search',
89
- '@codemirror/state',
90
- '@codemirror/text',
91
- '@codemirror/view',
92
- '@lezer/common',
93
- '@lezer/highlight',
94
- '@lezer/lr',
95
- 'obsidian']
96
- );
97
-
98
- const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
99
- '@codemirror/closebrackets',
100
- '@codemirror/comment',
101
- '@codemirror/fold',
102
- '@codemirror/gutter',
103
- '@codemirror/highlight',
104
- '@codemirror/history',
105
- '@codemirror/matchbrackets',
106
- '@codemirror/panel',
107
- '@codemirror/rangeset',
108
- '@codemirror/rectangular-selection',
109
- '@codemirror/stream-parser',
110
- '@codemirror/tooltip']
111
- );
112
-
66
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
67
+ "@codemirror/autocomplete",
68
+ "@codemirror/collab",
69
+ "@codemirror/commands",
70
+ "@codemirror/language",
71
+ "@codemirror/lint",
72
+ "@codemirror/search",
73
+ "@codemirror/state",
74
+ "@codemirror/text",
75
+ "@codemirror/view",
76
+ "@lezer/common",
77
+ "@lezer/highlight",
78
+ "@lezer/lr",
79
+ "obsidian"
80
+ ]);
81
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
82
+ "@codemirror/closebrackets",
83
+ "@codemirror/comment",
84
+ "@codemirror/fold",
85
+ "@codemirror/gutter",
86
+ "@codemirror/highlight",
87
+ "@codemirror/history",
88
+ "@codemirror/matchbrackets",
89
+ "@codemirror/panel",
90
+ "@codemirror/rangeset",
91
+ "@codemirror/rectangular-selection",
92
+ "@codemirror/stream-parser",
93
+ "@codemirror/tooltip"
94
+ ]);
113
95
  function requirePatched(id) {
114
96
  if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
115
97
  return originalRequire?.(id);
116
98
  }
117
-
118
- // eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
119
99
  if (globalThis.app.isMobile) {
120
- if (id === 'process' || id === 'node:process') {
121
- // eslint-disable-next-line no-console -- Valid usage.
100
+ if (id === "process" || id === "node:process") {
122
101
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
123
-
124
102
  return process;
125
103
  }
126
104
  } else {
@@ -129,8 +107,6 @@ function keepName($unknown) {
129
107
  return extractDefault(module);
130
108
  }
131
109
  }
132
-
133
- // eslint-disable-next-line no-console -- Valid usage.
134
110
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
135
111
  return {};
136
112
  }
@@ -169,4 +145,4 @@ function getObsidianLibDebugger(namespace) {
169
145
  0 && (module.exports = {
170
146
  getObsidianLibDebugger
171
147
  });
172
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RlYnVnLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIGRlYnVnZ2VycyBvZiBgQG1uYW91bW92L29ic2lkaWFuLWxpYmAncyBvd24gbW9kdWxlcy5cbiAqL1xuXG5pbXBvcnQgeyBnZXREZWJ1Z2dlciB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9kZWJ1Zyc7XG5pbXBvcnQgeyBMaWJyYXJ5IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2xpYnJhcnknO1xuXG5pbXBvcnQgeyBPQlNJRElBTl9MSUJSQVJZX05BTUUgfSBmcm9tICcuL2xpYnJhcnkudHMnO1xuXG4vKipcbiAqIFJldHVybnMgYSBkZWJ1Z2dlciBmb3Igb25lIG9mIHRoaXMgbGlicmFyeSdzIG93biBtb2R1bGVzLlxuICpcbiAqIFRoZSBuYW1lc3BhY2UgaXMgYWx3YXlzIHVuZGVyIHtAbGluayBPQlNJRElBTl9MSUJSQVJZX05BTUV9LCB3aGV0aGVyIG9yIG5vdCBgaW5pdFBsdWdpbkNvbnRleHRgIGhhcyBydW4geWV0LCBzb1xuICogYSBuYW1lc3BhY2UgYSBndWlkZSB0ZWxscyB1c2VycyB0byBlbmFibGUgKGBvYnNpZGlhbi1kZXYtdXRpbHM6UGx1Z2luQXBpYCkgbWVhbnMgdGhlIHNhbWUgdGhpbmcgaW4gYSB0ZXN0LCBpbiBhXG4gKiBzY3JpcHQgYW5kIGluIGEgcGx1Z2luLiBUaGUgZ2VuZXJpYyBtb2R1bGVzIG9mIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWJgIGxvZyB1bmRlciB0aGUgbmFtZXNwYWNlXG4gKiBgaW5pdFBsdWdpbkNvbnRleHRgIGluamVjdHMgaW50byB0aGUgZ2VuZXJpYyBgTGlicmFyeWAsIHdoaWNoIGlzIHRoZSBzYW1lIG9uZSBvbmNlIGEgcGx1Z2luIGlzIHVwLlxuICpcbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIHdpdGhpbiB0aGUgbGlicmFyeSdzLlxuICogQHJldHVybnMgVGhlIGRlYnVnZ2VyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T2JzaWRpYW5MaWJEZWJ1Z2dlcihuYW1lc3BhY2U6IHN0cmluZyk6IFJldHVyblR5cGU8dHlwZW9mIGdldERlYnVnZ2VyPiB7XG4gIHJldHVybiBnZXREZWJ1Z2dlcihgJHtMaWJyYXJ5LmRlYnVnUHJlZml4TmFtZXNwYWNlfSR7T0JTSURJQU5fTElCUkFSWV9OQU1FfToke25hbWVzcGFjZX1gKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQSxtQkFBNEI7QUFDNUIscUJBQXdCO0FBRXhCLElBQUFBLGtCQUFzQztBQWEvQixTQUFTLHVCQUF1QixXQUFtRDtBQUN4RixhQUFPLDBCQUFZLEdBQUcsdUJBQVEsb0JBQW9CLEdBQUcscUNBQXFCLElBQUksU0FBUyxFQUFFO0FBQzNGOyIsCiAgIm5hbWVzIjogWyJpbXBvcnRfbGlicmFyeSJdCn0K
148
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RlYnVnLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIGRlYnVnZ2VycyBvZiBgQG1uYW91bW92L29ic2lkaWFuLWxpYmAncyBvd24gbW9kdWxlcy5cbiAqL1xuXG5pbXBvcnQgeyBnZXREZWJ1Z2dlciB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9kZWJ1Zyc7XG5pbXBvcnQgeyBMaWJyYXJ5IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2xpYnJhcnknO1xuXG5pbXBvcnQgeyBPQlNJRElBTl9MSUJSQVJZX05BTUUgfSBmcm9tICcuL2xpYnJhcnkudHMnO1xuXG4vKipcbiAqIFJldHVybnMgYSBkZWJ1Z2dlciBmb3Igb25lIG9mIHRoaXMgbGlicmFyeSdzIG93biBtb2R1bGVzLlxuICpcbiAqIFRoZSBuYW1lc3BhY2UgaXMgYWx3YXlzIHVuZGVyIHtAbGluayBPQlNJRElBTl9MSUJSQVJZX05BTUV9LCB3aGV0aGVyIG9yIG5vdCBgaW5pdFBsdWdpbkNvbnRleHRgIGhhcyBydW4geWV0LCBzb1xuICogYSBuYW1lc3BhY2UgYSBndWlkZSB0ZWxscyB1c2VycyB0byBlbmFibGUgKGBvYnNpZGlhbi1kZXYtdXRpbHM6UGx1Z2luQXBpYCkgbWVhbnMgdGhlIHNhbWUgdGhpbmcgaW4gYSB0ZXN0LCBpbiBhXG4gKiBzY3JpcHQgYW5kIGluIGEgcGx1Z2luLiBUaGUgZ2VuZXJpYyBtb2R1bGVzIG9mIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWJgIGxvZyB1bmRlciB0aGUgbmFtZXNwYWNlXG4gKiBgaW5pdFBsdWdpbkNvbnRleHRgIGluamVjdHMgaW50byB0aGUgZ2VuZXJpYyBgTGlicmFyeWAsIHdoaWNoIGlzIHRoZSBzYW1lIG9uZSBvbmNlIGEgcGx1Z2luIGlzIHVwLlxuICpcbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIHdpdGhpbiB0aGUgbGlicmFyeSdzLlxuICogQHJldHVybnMgVGhlIGRlYnVnZ2VyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T2JzaWRpYW5MaWJEZWJ1Z2dlcihuYW1lc3BhY2U6IHN0cmluZyk6IFJldHVyblR5cGU8dHlwZW9mIGdldERlYnVnZ2VyPiB7XG4gIHJldHVybiBnZXREZWJ1Z2dlcihgJHtMaWJyYXJ5LmRlYnVnUHJlZml4TmFtZXNwYWNlfSR7T0JTSURJQU5fTElCUkFSWV9OQU1FfToke25hbWVzcGFjZX1gKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQSxtQkFBNEI7QUFDNUIscUJBQXdCO0FBRXhCLElBQUFBLGtCQUFzQztBQWEvQixTQUFTLHVCQUF1QixXQUFtRDtBQUN4RixhQUFPLDBCQUFZLEdBQUcsdUJBQVEsb0JBQW9CLEdBQUcscUNBQXFCLElBQUksU0FBUyxFQUFFO0FBQzNGOyIsCiAgIm5hbWVzIjogWyJpbXBvcnRfbGlicmFyeSJdCn0K