@mnaoumov/obsidian-lib 1.0.0 → 1.0.1

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 (386) hide show
  1. package/README.md +9 -1
  2. package/dist/lib/cjs/__merged.cjs +40 -64
  3. package/dist/lib/cjs/active-file-provider.cjs +40 -64
  4. package/dist/lib/cjs/app.cjs +40 -64
  5. package/dist/lib/cjs/async-with-notice.cjs +40 -64
  6. package/dist/lib/cjs/attachment-path.cjs +40 -64
  7. package/dist/lib/cjs/attachment-unit-folder.cjs +40 -64
  8. package/dist/lib/cjs/backlink-index.cjs +41 -65
  9. package/dist/lib/cjs/backlink.cjs +40 -64
  10. package/dist/lib/cjs/bases-view-registrar.cjs +40 -64
  11. package/dist/lib/cjs/callout.cjs +40 -64
  12. package/dist/lib/cjs/canvas.cjs +40 -64
  13. package/dist/lib/cjs/case-insensitive-file-index.cjs +40 -64
  14. package/dist/lib/cjs/code-block-markdown-information.cjs +40 -64
  15. package/dist/lib/cjs/code-block-reg-exp.cjs +40 -64
  16. package/dist/lib/cjs/codemirror/index.cjs +40 -64
  17. package/dist/lib/cjs/codemirror/state-field-spec.cjs +40 -64
  18. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +40 -64
  19. package/dist/lib/cjs/command-handlers/command-handler-component.cjs +40 -64
  20. package/dist/lib/cjs/command-handlers/command-handler.cjs +40 -64
  21. package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +40 -64
  22. package/dist/lib/cjs/command-handlers/file-command-handler.cjs +40 -64
  23. package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +40 -64
  24. package/dist/lib/cjs/command-handlers/global-command-handler.cjs +40 -64
  25. package/dist/lib/cjs/command-handlers/index.cjs +40 -64
  26. package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +40 -64
  27. package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +40 -64
  28. package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +40 -64
  29. package/dist/lib/cjs/command-registrar.cjs +40 -64
  30. package/dist/lib/cjs/community-plugins.cjs +40 -64
  31. package/dist/lib/cjs/components/abort-signal-component.cjs +40 -64
  32. package/dist/lib/cjs/components/all-windows-event-component.cjs +40 -64
  33. package/dist/lib/cjs/components/async-error-handler-component.cjs +40 -64
  34. package/dist/lib/cjs/components/async-events-component.cjs +40 -64
  35. package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +40 -64
  36. package/dist/lib/cjs/components/component-ex.cjs +41 -65
  37. package/dist/lib/cjs/components/console-debug-component.cjs +40 -64
  38. package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +40 -64
  39. package/dist/lib/cjs/components/disposable-component.cjs +40 -64
  40. package/dist/lib/cjs/components/embed-extensions-component.cjs +40 -64
  41. package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +40 -64
  42. package/dist/lib/cjs/components/index.cjs +40 -64
  43. package/dist/lib/cjs/components/layout-ready-component.cjs +40 -64
  44. package/dist/lib/cjs/components/menu-event-registrar-component.cjs +40 -64
  45. package/dist/lib/cjs/components/monkey-around-component.cjs +40 -64
  46. package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +40 -64
  47. package/dist/lib/cjs/components/plugin-context-component.cjs +40 -64
  48. package/dist/lib/cjs/components/plugin-gate-component.cjs +41 -65
  49. package/dist/lib/cjs/components/plugin-notice-component.cjs +40 -64
  50. package/dist/lib/cjs/components/plugin-settings-component.cjs +41 -65
  51. package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +40 -64
  52. package/dist/lib/cjs/components/plugin-suggestion-component.cjs +40 -64
  53. package/dist/lib/cjs/components/pointer-position-component.cjs +40 -64
  54. package/dist/lib/cjs/components/registry-component.cjs +40 -64
  55. package/dist/lib/cjs/components/release-notes-component.cjs +40 -64
  56. package/dist/lib/cjs/components/rename-delete-handler-component.cjs +40 -64
  57. package/dist/lib/cjs/components/rmdir-guard-component.cjs +40 -64
  58. package/dist/lib/cjs/components/settings-migration-component.cjs +40 -64
  59. package/dist/lib/cjs/components/syntax-highlighting-component.cjs +40 -64
  60. package/dist/lib/cjs/components/templates-language-component.cjs +40 -64
  61. package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +40 -64
  62. package/dist/lib/cjs/constructors/index.cjs +40 -64
  63. package/dist/lib/cjs/css-class.cjs +40 -64
  64. package/dist/lib/cjs/data-handler.cjs +40 -64
  65. package/dist/lib/cjs/dataview-link.cjs +40 -64
  66. package/dist/lib/cjs/dataview.cjs +40 -64
  67. package/dist/lib/cjs/debug.cjs +40 -64
  68. package/dist/lib/cjs/demo-vault-helper-settings.cjs +40 -64
  69. package/dist/lib/cjs/demo-vault-helper.cjs +40 -64
  70. package/dist/lib/cjs/demo-vault-naming.cjs +40 -64
  71. package/dist/lib/cjs/desktop-demo-vault-opener.cjs +40 -64
  72. package/dist/lib/cjs/desktop-trusted-input.cjs +40 -64
  73. package/dist/lib/cjs/editor-extension-registrar.cjs +40 -64
  74. package/dist/lib/cjs/editor-suggest-registrar.cjs +40 -64
  75. package/dist/lib/cjs/editor.cjs +40 -64
  76. package/dist/lib/cjs/events.cjs +40 -64
  77. package/dist/lib/cjs/extensions-registrar.cjs +40 -64
  78. package/dist/lib/cjs/file-change.cjs +40 -64
  79. package/dist/lib/cjs/file-explorer.cjs +40 -64
  80. package/dist/lib/cjs/file-manager.cjs +40 -64
  81. package/dist/lib/cjs/file-system.cjs +40 -64
  82. package/dist/lib/cjs/folder-note.cjs +40 -64
  83. package/dist/lib/cjs/frontmatter-formatting.cjs +41 -65
  84. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +40 -64
  85. package/dist/lib/cjs/frontmatter.cjs +40 -64
  86. package/dist/lib/cjs/generated-during-build.cjs +41 -65
  87. package/dist/lib/cjs/generated-during-build.d.cts +8 -2
  88. package/dist/lib/cjs/hover-link-source-registrar.cjs +40 -64
  89. package/dist/lib/cjs/html-element.cjs +40 -64
  90. package/dist/lib/cjs/i18n/custom-type-options.cjs +40 -64
  91. package/dist/lib/cjs/i18n/default-translations.cjs +40 -64
  92. package/dist/lib/cjs/i18n/i18n.cjs +40 -64
  93. package/dist/lib/cjs/i18n/index.cjs +40 -64
  94. package/dist/lib/cjs/i18n/locales/en.cjs +40 -64
  95. package/dist/lib/cjs/i18n/locales/index.cjs +40 -64
  96. package/dist/lib/cjs/i18n/locales/translations-map.cjs +40 -64
  97. package/dist/lib/cjs/index.cjs +40 -64
  98. package/dist/lib/cjs/is-in-obsidian.cjs +40 -64
  99. package/dist/lib/cjs/library-styles.cjs +40 -64
  100. package/dist/lib/cjs/library.cjs +40 -64
  101. package/dist/lib/cjs/link-name.cjs +40 -64
  102. package/dist/lib/cjs/link-update-progress.cjs +40 -64
  103. package/dist/lib/cjs/link.cjs +40 -64
  104. package/dist/lib/cjs/logger.cjs +40 -64
  105. package/dist/lib/cjs/loop.cjs +40 -64
  106. package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +40 -64
  107. package/dist/lib/cjs/markdown-code-block-processor.cjs +40 -64
  108. package/dist/lib/cjs/markdown-post-processor-registrar.cjs +40 -64
  109. package/dist/lib/cjs/markdown-view.cjs +40 -64
  110. package/dist/lib/cjs/markdown.cjs +40 -64
  111. package/dist/lib/cjs/menu-event-registrar.cjs +40 -64
  112. package/dist/lib/cjs/metadata-cache.cjs +40 -64
  113. package/dist/lib/cjs/mobile-trusted-input.cjs +40 -64
  114. package/dist/lib/cjs/modals/alert.cjs +40 -64
  115. package/dist/lib/cjs/modals/confirm.cjs +40 -64
  116. package/dist/lib/cjs/modals/index.cjs +40 -64
  117. package/dist/lib/cjs/modals/minimizable-modal.cjs +40 -64
  118. package/dist/lib/cjs/modals/modal-command-builder.cjs +40 -64
  119. package/dist/lib/cjs/modals/modal.cjs +40 -64
  120. package/dist/lib/cjs/modals/prompt.cjs +40 -64
  121. package/dist/lib/cjs/modals/select-item.cjs +40 -64
  122. package/dist/lib/cjs/modals/select-option.cjs +40 -64
  123. package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +40 -64
  124. package/dist/lib/cjs/note-priority.cjs +41 -65
  125. package/dist/lib/cjs/notebook-navigator.cjs +40 -64
  126. package/dist/lib/cjs/obsidian-dev-utils-state.cjs +40 -64
  127. package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +40 -64
  128. package/dist/lib/cjs/obsidian-settings.cjs +40 -64
  129. package/dist/lib/cjs/parse-link.cjs +40 -64
  130. package/dist/lib/cjs/path-settings.cjs +40 -64
  131. package/dist/lib/cjs/pdf.cjs +40 -64
  132. package/dist/lib/cjs/plugin/index.cjs +40 -64
  133. package/dist/lib/cjs/plugin/plugin-api.cjs +40 -64
  134. package/dist/lib/cjs/plugin/plugin-context.cjs +40 -64
  135. package/dist/lib/cjs/plugin/plugin-event-source.cjs +40 -64
  136. package/dist/lib/cjs/plugin/plugin-install-state.cjs +40 -64
  137. package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +40 -64
  138. package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +41 -65
  139. package/dist/lib/cjs/plugin/plugin.cjs +41 -65
  140. package/dist/lib/cjs/plugin/settings-migration-api.cjs +40 -64
  141. package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +40 -64
  142. package/dist/lib/cjs/popovers/field-popover.cjs +40 -64
  143. package/dist/lib/cjs/popovers/index.cjs +40 -64
  144. package/dist/lib/cjs/popovers/popover-anchor.cjs +40 -64
  145. package/dist/lib/cjs/popovers/popover.cjs +40 -64
  146. package/dist/lib/cjs/property-entry.cjs +40 -64
  147. package/dist/lib/cjs/queue.cjs +40 -64
  148. package/dist/lib/cjs/react/app-context.cjs +40 -64
  149. package/dist/lib/cjs/react/index.cjs +40 -64
  150. package/dist/lib/cjs/reference.cjs +40 -64
  151. package/dist/lib/cjs/resource-lock.cjs +40 -64
  152. package/dist/lib/cjs/resource-url.cjs +40 -64
  153. package/dist/lib/cjs/ribbon-icon-registrar.cjs +40 -64
  154. package/dist/lib/cjs/setting-components/checkbox-component.cjs +40 -64
  155. package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +40 -64
  156. package/dist/lib/cjs/setting-components/date-component.cjs +40 -64
  157. package/dist/lib/cjs/setting-components/date-time-component.cjs +40 -64
  158. package/dist/lib/cjs/setting-components/email-component.cjs +40 -64
  159. package/dist/lib/cjs/setting-components/file-component.cjs +40 -64
  160. package/dist/lib/cjs/setting-components/index.cjs +40 -64
  161. package/dist/lib/cjs/setting-components/month-component.cjs +40 -64
  162. package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +41 -65
  163. package/dist/lib/cjs/setting-components/multiple-email-component.cjs +40 -64
  164. package/dist/lib/cjs/setting-components/multiple-file-component.cjs +40 -64
  165. package/dist/lib/cjs/setting-components/multiple-text-component.cjs +40 -64
  166. package/dist/lib/cjs/setting-components/number-component.cjs +40 -64
  167. package/dist/lib/cjs/setting-components/password-component.cjs +40 -64
  168. package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +40 -64
  169. package/dist/lib/cjs/setting-components/telephone-component.cjs +40 -64
  170. package/dist/lib/cjs/setting-components/text-based-component.cjs +40 -64
  171. package/dist/lib/cjs/setting-components/time-component.cjs +40 -64
  172. package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +40 -64
  173. package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +40 -64
  174. package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +40 -64
  175. package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +40 -64
  176. package/dist/lib/cjs/setting-components/typed-text-component.cjs +41 -65
  177. package/dist/lib/cjs/setting-components/url-component.cjs +40 -64
  178. package/dist/lib/cjs/setting-components/validator-component.cjs +41 -65
  179. package/dist/lib/cjs/setting-components/value-component-with-change-tracking.cjs +40 -64
  180. package/dist/lib/cjs/setting-components/week-component.cjs +40 -64
  181. package/dist/lib/cjs/setting-ex.cjs +40 -64
  182. package/dist/lib/cjs/setting-group-ex.cjs +40 -64
  183. package/dist/lib/cjs/status-bar-item-registrar.cjs +40 -64
  184. package/dist/lib/cjs/templater.cjs +40 -64
  185. package/dist/lib/cjs/transformers/duration-transformer.cjs +40 -64
  186. package/dist/lib/cjs/transformers/index.cjs +40 -64
  187. package/dist/lib/cjs/trusted-input.cjs +40 -64
  188. package/dist/lib/cjs/validation.cjs +40 -64
  189. package/dist/lib/cjs/vault-delete.cjs +40 -64
  190. package/dist/lib/cjs/vault-transaction.cjs +40 -64
  191. package/dist/lib/cjs/vault.cjs +41 -65
  192. package/dist/lib/cjs/view-registrar.cjs +40 -64
  193. package/dist/lib/cjs/workspace.cjs +40 -64
  194. package/dist/lib/esm/__merged.mjs +6 -14
  195. package/dist/lib/esm/active-file-provider.mjs +6 -14
  196. package/dist/lib/esm/app.mjs +6 -14
  197. package/dist/lib/esm/async-with-notice.mjs +6 -14
  198. package/dist/lib/esm/attachment-path.mjs +6 -14
  199. package/dist/lib/esm/attachment-unit-folder.mjs +6 -14
  200. package/dist/lib/esm/backlink-index.mjs +6 -14
  201. package/dist/lib/esm/backlink.mjs +6 -14
  202. package/dist/lib/esm/bases-view-registrar.mjs +6 -14
  203. package/dist/lib/esm/callout.mjs +6 -14
  204. package/dist/lib/esm/canvas.mjs +6 -14
  205. package/dist/lib/esm/case-insensitive-file-index.mjs +6 -14
  206. package/dist/lib/esm/code-block-markdown-information.mjs +5 -13
  207. package/dist/lib/esm/code-block-reg-exp.mjs +6 -14
  208. package/dist/lib/esm/codemirror/index.mjs +6 -14
  209. package/dist/lib/esm/codemirror/state-field-spec.mjs +5 -13
  210. package/dist/lib/esm/command-handlers/abstract-file-command-handler.mjs +6 -14
  211. package/dist/lib/esm/command-handlers/command-handler-component.mjs +6 -14
  212. package/dist/lib/esm/command-handlers/command-handler.mjs +6 -14
  213. package/dist/lib/esm/command-handlers/editor-command-handler.mjs +6 -14
  214. package/dist/lib/esm/command-handlers/file-command-handler.mjs +6 -14
  215. package/dist/lib/esm/command-handlers/folder-command-handler.mjs +6 -14
  216. package/dist/lib/esm/command-handlers/global-command-handler.mjs +6 -14
  217. package/dist/lib/esm/command-handlers/index.mjs +6 -14
  218. package/dist/lib/esm/command-handlers/open-demo-vault-command-handler.mjs +6 -14
  219. package/dist/lib/esm/command-handlers/open-settings-command-handler.mjs +6 -14
  220. package/dist/lib/esm/command-handlers/unlock-active-note-command-handler.mjs +6 -14
  221. package/dist/lib/esm/command-registrar.mjs +6 -14
  222. package/dist/lib/esm/community-plugins.mjs +6 -14
  223. package/dist/lib/esm/components/abort-signal-component.mjs +6 -14
  224. package/dist/lib/esm/components/all-windows-event-component.mjs +6 -14
  225. package/dist/lib/esm/components/async-error-handler-component.mjs +6 -14
  226. package/dist/lib/esm/components/async-events-component.mjs +6 -14
  227. package/dist/lib/esm/components/case-insensitive-file-index-component.mjs +6 -14
  228. package/dist/lib/esm/components/component-ex.mjs +6 -14
  229. package/dist/lib/esm/components/console-debug-component.mjs +6 -14
  230. package/dist/lib/esm/components/core-plugin-toggle-component.mjs +6 -14
  231. package/dist/lib/esm/components/disposable-component.mjs +6 -14
  232. package/dist/lib/esm/components/embed-extensions-component.mjs +6 -14
  233. package/dist/lib/esm/components/generate-markdown-link-default-params-component.mjs +6 -14
  234. package/dist/lib/esm/components/index.mjs +6 -14
  235. package/dist/lib/esm/components/layout-ready-component.mjs +6 -14
  236. package/dist/lib/esm/components/menu-event-registrar-component.mjs +6 -14
  237. package/dist/lib/esm/components/monkey-around-component.mjs +6 -14
  238. package/dist/lib/esm/components/notebook-navigator-menu-event-registrar-component.mjs +6 -14
  239. package/dist/lib/esm/components/plugin-context-component.mjs +6 -14
  240. package/dist/lib/esm/components/plugin-gate-component.mjs +6 -14
  241. package/dist/lib/esm/components/plugin-notice-component.mjs +6 -14
  242. package/dist/lib/esm/components/plugin-settings-component.mjs +6 -14
  243. package/dist/lib/esm/components/plugin-settings-tab-component.mjs +6 -14
  244. package/dist/lib/esm/components/plugin-suggestion-component.mjs +6 -14
  245. package/dist/lib/esm/components/pointer-position-component.mjs +6 -14
  246. package/dist/lib/esm/components/registry-component.mjs +6 -14
  247. package/dist/lib/esm/components/release-notes-component.mjs +6 -14
  248. package/dist/lib/esm/components/rename-delete-handler-component.mjs +6 -14
  249. package/dist/lib/esm/components/rmdir-guard-component.mjs +6 -14
  250. package/dist/lib/esm/components/settings-migration-component.mjs +6 -14
  251. package/dist/lib/esm/components/syntax-highlighting-component.mjs +6 -14
  252. package/dist/lib/esm/components/templates-language-component.mjs +6 -14
  253. package/dist/lib/esm/constructors/get-dom-events-handlers-constructor.mjs +6 -14
  254. package/dist/lib/esm/constructors/index.mjs +6 -14
  255. package/dist/lib/esm/css-class.mjs +6 -14
  256. package/dist/lib/esm/data-handler.mjs +6 -14
  257. package/dist/lib/esm/dataview-link.mjs +6 -14
  258. package/dist/lib/esm/dataview.mjs +6 -14
  259. package/dist/lib/esm/debug.mjs +6 -14
  260. package/dist/lib/esm/demo-vault-helper-settings.mjs +5 -13
  261. package/dist/lib/esm/demo-vault-helper.mjs +6 -14
  262. package/dist/lib/esm/demo-vault-naming.mjs +6 -14
  263. package/dist/lib/esm/desktop-demo-vault-opener.mjs +6 -14
  264. package/dist/lib/esm/desktop-trusted-input.mjs +6 -14
  265. package/dist/lib/esm/editor-extension-registrar.mjs +6 -14
  266. package/dist/lib/esm/editor-suggest-registrar.mjs +6 -14
  267. package/dist/lib/esm/editor.mjs +6 -14
  268. package/dist/lib/esm/events.mjs +6 -14
  269. package/dist/lib/esm/extensions-registrar.mjs +6 -14
  270. package/dist/lib/esm/file-change.mjs +6 -14
  271. package/dist/lib/esm/file-explorer.mjs +6 -14
  272. package/dist/lib/esm/file-manager.mjs +6 -14
  273. package/dist/lib/esm/file-system.mjs +6 -14
  274. package/dist/lib/esm/folder-note.mjs +6 -14
  275. package/dist/lib/esm/frontmatter-formatting.mjs +6 -14
  276. package/dist/lib/esm/frontmatter-link-cache-with-offsets.mjs +6 -14
  277. package/dist/lib/esm/frontmatter.mjs +6 -14
  278. package/dist/lib/esm/generated-during-build.d.mts +8 -2
  279. package/dist/lib/esm/generated-during-build.mjs +7 -15
  280. package/dist/lib/esm/hover-link-source-registrar.mjs +6 -14
  281. package/dist/lib/esm/html-element.mjs +6 -14
  282. package/dist/lib/esm/i18n/custom-type-options.mjs +6 -14
  283. package/dist/lib/esm/i18n/default-translations.mjs +6 -14
  284. package/dist/lib/esm/i18n/i18n.mjs +6 -14
  285. package/dist/lib/esm/i18n/index.mjs +6 -14
  286. package/dist/lib/esm/i18n/locales/en.mjs +6 -14
  287. package/dist/lib/esm/i18n/locales/index.mjs +6 -14
  288. package/dist/lib/esm/i18n/locales/translations-map.mjs +6 -14
  289. package/dist/lib/esm/index.mjs +6 -14
  290. package/dist/lib/esm/is-in-obsidian.mjs +6 -14
  291. package/dist/lib/esm/library-styles.mjs +6 -14
  292. package/dist/lib/esm/library.mjs +6 -14
  293. package/dist/lib/esm/link-name.mjs +6 -14
  294. package/dist/lib/esm/link-update-progress.mjs +5 -13
  295. package/dist/lib/esm/link.mjs +6 -14
  296. package/dist/lib/esm/logger.mjs +6 -14
  297. package/dist/lib/esm/loop.mjs +6 -14
  298. package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +6 -14
  299. package/dist/lib/esm/markdown-code-block-processor.mjs +6 -14
  300. package/dist/lib/esm/markdown-post-processor-registrar.mjs +6 -14
  301. package/dist/lib/esm/markdown-view.mjs +6 -14
  302. package/dist/lib/esm/markdown.mjs +6 -14
  303. package/dist/lib/esm/menu-event-registrar.mjs +5 -13
  304. package/dist/lib/esm/metadata-cache.mjs +6 -14
  305. package/dist/lib/esm/mobile-trusted-input.mjs +6 -14
  306. package/dist/lib/esm/modals/alert.mjs +6 -14
  307. package/dist/lib/esm/modals/confirm.mjs +6 -14
  308. package/dist/lib/esm/modals/index.mjs +6 -14
  309. package/dist/lib/esm/modals/minimizable-modal.mjs +6 -14
  310. package/dist/lib/esm/modals/modal-command-builder.mjs +6 -14
  311. package/dist/lib/esm/modals/modal.mjs +6 -14
  312. package/dist/lib/esm/modals/prompt.mjs +6 -14
  313. package/dist/lib/esm/modals/select-item.mjs +6 -14
  314. package/dist/lib/esm/modals/select-option.mjs +6 -14
  315. package/dist/lib/esm/modals/suggest-modal-command-builder.mjs +6 -14
  316. package/dist/lib/esm/note-priority.mjs +6 -14
  317. package/dist/lib/esm/notebook-navigator.mjs +6 -14
  318. package/dist/lib/esm/obsidian-dev-utils-state.mjs +6 -14
  319. package/dist/lib/esm/obsidian-protocol-handler-registrar.mjs +6 -14
  320. package/dist/lib/esm/obsidian-settings.mjs +6 -14
  321. package/dist/lib/esm/parse-link.mjs +6 -14
  322. package/dist/lib/esm/path-settings.mjs +6 -14
  323. package/dist/lib/esm/pdf.mjs +6 -14
  324. package/dist/lib/esm/plugin/index.mjs +6 -14
  325. package/dist/lib/esm/plugin/plugin-api.mjs +6 -14
  326. package/dist/lib/esm/plugin/plugin-context.mjs +6 -14
  327. package/dist/lib/esm/plugin/plugin-event-source.mjs +6 -14
  328. package/dist/lib/esm/plugin/plugin-install-state.mjs +6 -14
  329. package/dist/lib/esm/plugin/plugin-lifecycle-events.mjs +6 -14
  330. package/dist/lib/esm/plugin/plugin-settings-tab.mjs +6 -14
  331. package/dist/lib/esm/plugin/plugin.mjs +6 -14
  332. package/dist/lib/esm/plugin/settings-migration-api.mjs +5 -13
  333. package/dist/lib/esm/plugin-cli-handler-registrar.mjs +6 -14
  334. package/dist/lib/esm/popovers/field-popover.mjs +6 -14
  335. package/dist/lib/esm/popovers/index.mjs +6 -14
  336. package/dist/lib/esm/popovers/popover-anchor.mjs +6 -14
  337. package/dist/lib/esm/popovers/popover.mjs +6 -14
  338. package/dist/lib/esm/property-entry.mjs +6 -14
  339. package/dist/lib/esm/queue.mjs +6 -14
  340. package/dist/lib/esm/react/app-context.mjs +6 -14
  341. package/dist/lib/esm/react/index.mjs +6 -14
  342. package/dist/lib/esm/reference.mjs +6 -14
  343. package/dist/lib/esm/resource-lock.mjs +6 -14
  344. package/dist/lib/esm/resource-url.mjs +6 -14
  345. package/dist/lib/esm/ribbon-icon-registrar.mjs +6 -14
  346. package/dist/lib/esm/setting-components/checkbox-component.mjs +6 -14
  347. package/dist/lib/esm/setting-components/code-highlighter-component.mjs +6 -14
  348. package/dist/lib/esm/setting-components/date-component.mjs +6 -14
  349. package/dist/lib/esm/setting-components/date-time-component.mjs +6 -14
  350. package/dist/lib/esm/setting-components/email-component.mjs +6 -14
  351. package/dist/lib/esm/setting-components/file-component.mjs +6 -14
  352. package/dist/lib/esm/setting-components/index.mjs +6 -14
  353. package/dist/lib/esm/setting-components/month-component.mjs +6 -14
  354. package/dist/lib/esm/setting-components/multiple-dropdown-component.mjs +6 -14
  355. package/dist/lib/esm/setting-components/multiple-email-component.mjs +6 -14
  356. package/dist/lib/esm/setting-components/multiple-file-component.mjs +6 -14
  357. package/dist/lib/esm/setting-components/multiple-text-component.mjs +6 -14
  358. package/dist/lib/esm/setting-components/number-component.mjs +6 -14
  359. package/dist/lib/esm/setting-components/password-component.mjs +6 -14
  360. package/dist/lib/esm/setting-components/setting-component-wrapper.mjs +6 -14
  361. package/dist/lib/esm/setting-components/telephone-component.mjs +6 -14
  362. package/dist/lib/esm/setting-components/text-based-component.mjs +6 -14
  363. package/dist/lib/esm/setting-components/time-component.mjs +6 -14
  364. package/dist/lib/esm/setting-components/tri-state-checkbox-component.mjs +6 -14
  365. package/dist/lib/esm/setting-components/typed-dropdown-component.mjs +6 -14
  366. package/dist/lib/esm/setting-components/typed-multiple-dropdown-component.mjs +6 -14
  367. package/dist/lib/esm/setting-components/typed-range-text-component.mjs +6 -14
  368. package/dist/lib/esm/setting-components/typed-text-component.mjs +6 -14
  369. package/dist/lib/esm/setting-components/url-component.mjs +6 -14
  370. package/dist/lib/esm/setting-components/validator-component.mjs +6 -14
  371. package/dist/lib/esm/setting-components/value-component-with-change-tracking.mjs +5 -13
  372. package/dist/lib/esm/setting-components/week-component.mjs +6 -14
  373. package/dist/lib/esm/setting-ex.mjs +6 -14
  374. package/dist/lib/esm/setting-group-ex.mjs +6 -14
  375. package/dist/lib/esm/status-bar-item-registrar.mjs +6 -14
  376. package/dist/lib/esm/templater.mjs +6 -14
  377. package/dist/lib/esm/transformers/duration-transformer.mjs +6 -14
  378. package/dist/lib/esm/transformers/index.mjs +6 -14
  379. package/dist/lib/esm/trusted-input.mjs +6 -14
  380. package/dist/lib/esm/validation.mjs +6 -14
  381. package/dist/lib/esm/vault-delete.mjs +6 -14
  382. package/dist/lib/esm/vault-transaction.mjs +6 -14
  383. package/dist/lib/esm/vault.mjs +6 -14
  384. package/dist/lib/esm/view-registrar.mjs +6 -14
  385. package/dist/lib/esm/workspace.mjs +6 -14
  386. package/package.json +69 -24
@@ -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
  }
@@ -433,4 +409,4 @@ class VaultTransaction {
433
409
  0 && (module.exports = {
434
410
  VaultTransaction
435
411
  });
436
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3ZhdWx0LXRyYW5zYWN0aW9uLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQSByZXZlcnNpYmxlLCB0cmFuc2FjdGlvbmFsIGxvZyBvZiB2YXVsdCBtdXRhdGlvbnMuIEVhY2ggbXV0YXRpb24gcmVjb3JkcyBob3cgdG8gdW5kbyBpdHNlbGY7XG4gKiB7QGxpbmsgVmF1bHRUcmFuc2FjdGlvbi5yb2xsYmFja30gcmV2ZXJzZXMgdGhlIGNvbXBsZXRlZCBzdGVwcyBpbiByZXZlcnNlIG9yZGVyIGFuZFxuICoge0BsaW5rIFZhdWx0VHJhbnNhY3Rpb24uY29tbWl0fSBmaW5hbGl6ZXMgdGhlbS4gSXQgaXMgYnVpbHQgb24gdGhlIGAqU2FmZWAgdmF1bHQgd3JhcHBlcnMgc28gaXRcbiAqIGluaGVyaXRzIHRoZWlyIGNhc2UtaW5zZW5zaXRpdmUgLyByZXRyeSAvIG1pc3NpbmctZmlsZSBoYW5kbGluZy5cbiAqXG4gKiBBIGRlbGV0aW9uIGlzIHBlcmZvcm1lZCBhcyBhICoqc29mdC1kZWxldGUqKjogdGhlIHJlc291cmNlIGlzIG1vdmVkIGFzaWRlIGludG8gYSBkb3QtcHJlZml4ZWRcbiAqIHN0YWdpbmcgZm9sZGVyIChhIGZvbGRlciBtb3ZlcyBpdHMgd2hvbGUgc3VidHJlZSBpbiBhIHNpbmdsZSByZW5hbWUsIHNvIHN1YnRyZWUgcm9sbGJhY2sgaXMgY2hlYXBcbiAqIGFuZCBmYWl0aGZ1bCkuIEJlY2F1c2UgT2JzaWRpYW4ncyB2YXVsdCBmaWxlLXRyZWUgYW5kIGZpbGUgd2F0Y2hlciBpZ25vcmUgYW55IGAuYC1wcmVmaXhlZCBwYXRoLFxuICogc3RhZ2VkIHJlc291cmNlcyBhcmUgKip1bnRyYWNrZWQqKiBcdTIwMTQgdGhleSBkbyBub3QgY2h1cm4gdGhlIG1ldGFkYXRhIGNhY2hlLCBmbGFzaCBpbiB0aGUgZmlsZVxuICogZXhwbG9yZXIsIG9yIGdldCBwcm9wYWdhdGVkIGJ5IHN5bmMgd2hpbGUgdGhlIHRyYW5zYWN0aW9uIGlzIGluIGZsaWdodC4gVGhlIGZsaXAgc2lkZSBpcyB0aGF0XG4gKiBgdmF1bHQuKmAgbWV0aG9kcyBjYW5ub3Qgc2VlIHRoZSBzdGFnaW5nIGFyZWEsIHNvIEFMTCBzdGFnaW5nIEkvTyBnb2VzIHRocm91Z2hcbiAqIHtAbGluayBBcHAudmF1bHQuYWRhcHRlcn0gKGBta2RpcmAvYHJlbmFtZWAvYGV4aXN0c2AvYHRyYXNoU3lzdGVtYC9gcm1kaXJgKS5cbiAqIHtAbGluayBWYXVsdFRyYW5zYWN0aW9uLmNvbW1pdH0gdGhlbiB0cmFzaGVzIHRoZSBzdGFnZWQgcmVzb3VyY2VzIGZvciByZWFsOyB7QGxpbmsgVmF1bHRUcmFuc2FjdGlvbi5yb2xsYmFja31cbiAqIG1vdmVzIHRoZW0gYmFjay5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgVEZpbGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBkaXNwb3NlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Rpc3Bvc2FibGUnO1xuaW1wb3J0IHsgYXNzZXJ0Tm9uTnVsbGFibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuXG5pbXBvcnQgdHlwZSB7IFBhdGhPckFic3RyYWN0RmlsZSB9IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuXG5pbXBvcnQgeyBzeW5jT3BlbkVkaXRvckJ1ZmZlcnNGb3JQYXRoIH0gZnJvbSAnLi9lZGl0b3IudHMnO1xuaW1wb3J0IHtcbiAgZ2V0QWJzdHJhY3RGaWxlT3JOdWxsLFxuICBnZXRQYXRoXG59IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuaW1wb3J0IHtcbiAgY29weVNhZmUsXG4gIGNyZWF0ZUZvbGRlclNhZmUsXG4gIENyZWF0ZUZvbGRlclNhZmVSZXN1bHQsXG4gIHByb2Nlc3MsXG4gIHJlYWRTYWZlLFxuICByZW5hbWVTYWZlXG59IGZyb20gJy4vdmF1bHQudHMnO1xuXG5jb25zdCBERUZBVUxUX1NUQUdJTkdfRk9MREVSX1BBVEggPSAnLm9ic2lkaWFuLWRldi11dGlscy10ZW1wJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB0aGUge0BsaW5rIFZhdWx0VHJhbnNhY3Rpb259IGNvbnN0cnVjdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZhdWx0VHJhbnNhY3Rpb25Db25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogT3BlbnMgYW4gYW1iaWVudCBtdXRhdGlvbi1ieXBhc3Mgc2NvcGUgY292ZXJpbmcgdGhlIHBhdGhzIHRoaXMgdHJhbnNhY3Rpb24gdG91Y2hlcywgc28gdGhlXG4gICAqIHRyYW5zYWN0aW9uJ3Mgb3duIHdyaXRlcyBwYXNzIGEgYHNob3VsZEJsb2NrTXV0YXRpb25zYCBsb2NrIHRoYXQgdGhlIG93bmluZyBvcGVyYXRpb24gaG9sZHMuIEl0IGlzXG4gICAqIGNhbGxlZCBvbmNlIHdoZW4gdGhlIHRyYW5zYWN0aW9uIGlzIGNvbnN0cnVjdGVkLCBhbmQgdGhlIHJldHVybmVkIHtAbGluayBEaXNwb3NhYmxlfSBpcyBkaXNwb3NlZFxuICAgKiB3aGVuIHRoZSB0cmFuc2FjdGlvbiBzZXR0bGVzIChvbiBgY29tbWl0YCwgYHJvbGxiYWNrYCwgb3IgYGF3YWl0IHVzaW5nYCBkaXNwb3NhbCkgXHUyMDE0IHNvIHRoZSBieXBhc3NcbiAgICogc3RheXMgYWN0aXZlIHRocm91Z2ggcm9sbGJhY2ssIGluY2x1ZGluZyBhdXRvLXJvbGxiYWNrLCB3aGljaCBhIGNhbGxlciBtYW5hZ2luZyB0aGUgc2NvcGUgaXRzZWxmXG4gICAqIGNvdWxkIGVhc2lseSBnZXQgd3JvbmcuIFR5cGljYWxseVxuICAgKiBgKCkgPT4gcmVzb3VyY2VMb2NrQ29tcG9uZW50LmJ5cGFzc0Jsb2NrZWRNdXRhdGlvbnMobG9ja2VkUGF0aHNPckZpbGVzKWAuIE9taXQgaXQgZm9yIHRoZSBjb21tb25cbiAgICogc3RhbmRhbG9uZSBjYXNlIHdoZXJlIHRoZSB0cmFuc2FjdGlvbiBvcGVyYXRlcyBvbiB1bmxvY2tlZCBwYXRocy5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgRGlzcG9zYWJsZX0gdGhhdCBlbmRzIHRoZSBieXBhc3Mgc2NvcGUuXG4gICAqL1xuICByZWFkb25seSBvcGVuTXV0YXRpb25CeXBhc3M/OiAoKSA9PiBEaXNwb3NhYmxlO1xuXG4gIC8qKlxuICAgKiBUaGUgZG90LXByZWZpeGVkIGZvbGRlciB0aGF0IHNvZnQtZGVsZXRlZCByZXNvdXJjZXMgYXJlIG1vdmVkIGludG8gdW50aWwgdGhlIHRyYW5zYWN0aW9uIGlzXG4gICAqIGNvbW1pdHRlZCBvciByb2xsZWQgYmFjay4gSXQgbXVzdCBzdGF5IGAuYC1wcmVmaXhlZCBzbyBPYnNpZGlhbiBsZWF2ZXMgdGhlIHN0YWdlZCByZXNvdXJjZXNcbiAgICogdW50cmFja2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJy5vYnNpZGlhbi1kZXYtdXRpbHMtdGVtcCdgXG4gICAqL1xuICByZWFkb25seSBzdGFnaW5nRm9sZGVyUGF0aD86IHN0cmluZztcbn1cblxudHlwZSBUcmFuc2FjdGlvblN0YXRlID0gJ2NvbW1pdHRlZCcgfCAnb3BlbicgfCAncm9sbGVkQmFjayc7XG5cbmludGVyZmFjZSBVbmRvU3RlcCB7XG4gIHVuZG86ICgpID0+IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogQSByZXZlcnNpYmxlIGxvZyBvZiB2YXVsdCBtdXRhdGlvbnMuIFBlcmZvcm0gbXV0YXRpb25zIHRocm91Z2ggaXRzIG1ldGhvZHMsIHRoZW4gY2FsbFxuICoge0BsaW5rIFZhdWx0VHJhbnNhY3Rpb24uY29tbWl0fSBvbiBzdWNjZXNzIG9yIHtAbGluayBWYXVsdFRyYW5zYWN0aW9uLnJvbGxiYWNrfSBvbiBmYWlsdXJlLiBJdCBpc1xuICogYGF3YWl0IHVzaW5nYC1mcmllbmRseTogaWYgbmVpdGhlciBpcyBjYWxsZWQsIGRpc3Bvc2FsIHJvbGxzIGJhY2suXG4gKi9cbmV4cG9ydCBjbGFzcyBWYXVsdFRyYW5zYWN0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZSB0aGUgdHJhbnNhY3Rpb24gbXV0YXRlcy5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBhcHA6IEFwcDtcbiAgcHJpdmF0ZSBoYXNTdGFnaW5nRm9sZGVyID0gZmFsc2U7XG4gIHByaXZhdGUgbXV0YXRpb25CeXBhc3M6IERpc3Bvc2FibGUgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFnZWRUcmFzaFBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YWdpbmdGb2xkZXJQYXRoOiBzdHJpbmc7XG4gIHByaXZhdGUgc3RhdGU6IFRyYW5zYWN0aW9uU3RhdGUgPSAnb3Blbic7XG4gIHByaXZhdGUgcmVhZG9ubHkgdW5kb1N0ZXBzOiBVbmRvU3RlcFtdID0gW107XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgdmF1bHQgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IFZhdWx0VHJhbnNhY3Rpb25Db25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHRoaXMuYXBwID0gcGFyYW1zLmFwcDtcbiAgICB0aGlzLnN0YWdpbmdGb2xkZXJQYXRoID0gcGFyYW1zLnN0YWdpbmdGb2xkZXJQYXRoID8/IERFRkFVTFRfU1RBR0lOR19GT0xERVJfUEFUSDtcbiAgICB0aGlzLm11dGF0aW9uQnlwYXNzID0gcGFyYW1zLm9wZW5NdXRhdGlvbkJ5cGFzcz8uKCkgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21taXRzIHRoZSB0cmFuc2FjdGlvbjogZmluYWxpemVzIHNvZnQtZGVsZXRlcyBieSB0cmFzaGluZyB0aGUgc3RhZ2VkIHJlc291cmNlcyBmb3IgcmVhbCBhbmRcbiAgICogcmVtb3ZlcyB0aGUgc3RhZ2luZyBmb2xkZXIuIEFmdGVyIHRoaXMgdGhlIHRyYW5zYWN0aW9uIGNhbiBubyBsb25nZXIgYmUgbXV0YXRlZCBvciByb2xsZWQgYmFjay5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb21taXQgY29tcGxldGVzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNvbW1pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmFzc2VydE9wZW4oKTtcbiAgICB0aGlzLnN0YXRlID0gJ2NvbW1pdHRlZCc7XG4gICAgY29uc3QgYWRhcHRlciA9IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXI7XG4gICAgZm9yIChjb25zdCBzdGFnZWRQYXRoIG9mIHRoaXMuc3RhZ2VkVHJhc2hQYXRocykge1xuICAgICAgY29uc3Qgd2FzVHJhc2hlZFRvU3lzdGVtID0gYXdhaXQgYWRhcHRlci50cmFzaFN5c3RlbShzdGFnZWRQYXRoKTtcbiAgICAgIGlmICghd2FzVHJhc2hlZFRvU3lzdGVtKSB7XG4gICAgICAgIGF3YWl0IGFkYXB0ZXIudHJhc2hMb2NhbChzdGFnZWRQYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgdGhpcy5yZW1vdmVTdGFnaW5nRm9sZGVyKCk7XG4gICAgdGhpcy5kaXNwb3NlTXV0YXRpb25CeXBhc3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3BpZXMgYSBmaWxlIG9yIGZvbGRlciwgcmVjb3JkaW5nIHRoZSByZW1vdmFsIG9mIHRoZSBjb3B5IGFzIHRoZSBpbnZlcnNlLiBBIGZvbGRlciBpcyBjb3BpZWQgd2l0aFxuICAgKiBpdHMgd2hvbGUgc3VidHJlZSwgc28gdGhlIHNpbmdsZSByZWNvcmRlZCByZW1vdmFsIHVuZG9lcyB0aGUgd2hvbGUgdHJlZS4gVW5saWtlXG4gICAqIHtAbGluayBWYXVsdFRyYW5zYWN0aW9uLmNyZWF0ZX0sIHRoZSBjb250ZW50IGlzIGNvcGllZCBieXRlIGZvciBieXRlLCBzbyBhIGJpbmFyeSByZXNvdXJjZVxuICAgKiByb3VuZC10cmlwcyBmYWl0aGZ1bGx5LlxuICAgKlxuICAgKiBQYXJlbnQgZm9sZGVycyB0aGF0IGhhZCB0byBiZSBjcmVhdGVkIGZvciB0aGUgZGVzdGluYXRpb24gYXJlIE5PVCB1bmRvbmUgaW5kaXZpZHVhbGx5LCBtYXRjaGluZ1xuICAgKiB7QGxpbmsgVmF1bHRUcmFuc2FjdGlvbi5jcmVhdGV9IGFuZCB7QGxpbmsgVmF1bHRUcmFuc2FjdGlvbi5yZW5hbWV9LlxuICAgKlxuICAgKiBAcGFyYW0gb2xkUGF0aE9yRmlsZSAtIFRoZSBwYXRoLCBmaWxlIG9yIGZvbGRlciB0byBjb3B5LlxuICAgKiBAcGFyYW0gbmV3UGF0aCAtIFRoZSBkZXNpcmVkIG5ldyBwYXRoIChhbiBhdmFpbGFibGUgcGF0aCBpcyBjaG9zZW4gaWYgaXQgaXMgdGFrZW4pLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSByZXNvbHZpbmcgdG8gdGhlIGFjdHVhbCBwYXRoIG9mIHRoZSBjb3B5LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNvcHkob2xkUGF0aE9yRmlsZTogUGF0aE9yQWJzdHJhY3RGaWxlLCBuZXdQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHRoaXMuYXNzZXJ0T3BlbigpO1xuICAgIGNvbnN0IG9sZFBhdGggPSBnZXRQYXRoKHRoaXMuYXBwLCBvbGRQYXRoT3JGaWxlKTtcbiAgICBjb25zdCBhY3R1YWxOZXdQYXRoID0gYXdhaXQgY29weVNhZmUoeyBhcHA6IHRoaXMuYXBwLCBuZXdQYXRoLCBvbGRQYXRoT3JGaWxlIH0pO1xuICAgIC8vIFdoZW4gc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgaWRlbnRpY2FsLCBgY29weVNhZmVgIHJldHVybnMgdGhlIHNvdXJjZSBwYXRoIGFuZCBjb3BpZXMgbm90aGluZy5cbiAgICAvLyBSZWNvcmRpbmcgYW4gdW5kbyBoZXJlIHdvdWxkIG1ha2UgYHJvbGxiYWNrYCBkZWxldGUgdGhlIGNhbGxlcidzIE9SSUdJTkFMIHJlc291cmNlLlxuICAgIGlmIChhY3R1YWxOZXdQYXRoICE9PSBvbGRQYXRoKSB7XG4gICAgICB0aGlzLnB1c2hVbmRvKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5oYXJkRGVsZXRlKGFjdHVhbE5ld1BhdGgpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhY3R1YWxOZXdQYXRoO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmaWxlIHdpdGggdGhlIGdpdmVuIGNvbnRlbnQsIHJlY29yZGluZyBpdHMgcmVtb3ZhbCBhcyB0aGUgaW52ZXJzZS5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSB0byBjcmVhdGUuXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyB0byB0aGUgY3JlYXRlZCB7QGxpbmsgVEZpbGV9LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNyZWF0ZShwYXRoOiBzdHJpbmcsIGRhdGE6IHN0cmluZyk6IFByb21pc2U8VEZpbGU+IHtcbiAgICB0aGlzLmFzc2VydE9wZW4oKTtcbiAgICBjb25zdCBmaWxlID0gYXdhaXQgdGhpcy5hcHAudmF1bHQuY3JlYXRlKHBhdGgsIGRhdGEpO1xuICAgIGNvbnN0IGNyZWF0ZWRQYXRoID0gZmlsZS5wYXRoO1xuICAgIHRoaXMucHVzaFVuZG8oYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5oYXJkRGVsZXRlKGNyZWF0ZWRQYXRoKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZmlsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZm9sZGVyIChpbmNsdWRpbmcgbWlzc2luZyBhbmNlc3RvcnMpLCByZWNvcmRpbmcgaXRzIHJlbW92YWwgYXMgdGhlIGludmVyc2UuIEEgbm8tb3AgaWZcbiAgICogdGhlIGZvbGRlciBhbHJlYWR5IGV4aXN0cy5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZm9sZGVyIHRvIGNyZWF0ZS5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmb2xkZXIgZXhpc3RzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNyZWF0ZUZvbGRlcihwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmFzc2VydE9wZW4oKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjcmVhdGVGb2xkZXJTYWZlKHRoaXMuYXBwLCBwYXRoKTtcbiAgICBpZiAocmVzdWx0ID09PSBDcmVhdGVGb2xkZXJTYWZlUmVzdWx0LkNyZWF0ZWQpIHtcbiAgICAgIHRoaXMucHVzaFVuZG8oYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmhhcmREZWxldGUocGF0aCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZXMgdGhlIGNvbnRlbnQgb2YgYSBmaWxlLCBjYXB0dXJpbmcgdGhlIG9sZCBjb250ZW50IHNvIGl0IGNhbiBiZSByZXN0b3JlZCBvbiByb2xsYmFjay5cbiAgICpcbiAgICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIHRvIG1vZGlmeS5cbiAgICogQHBhcmFtIG5ld0NvbnRlbnQgLSBUaGUgbmV3IGNvbnRlbnQuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZmlsZSBpcyBtb2RpZmllZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBtb2RpZnkocGF0aE9yRmlsZTogUGF0aE9yQWJzdHJhY3RGaWxlLCBuZXdDb250ZW50OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnByb2Nlc3MocGF0aE9yRmlsZSwgKCkgPT4gbmV3Q29udGVudCk7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtcyB0aGUgY29udGVudCBvZiBhIGZpbGUsIGNhcHR1cmluZyB0aGUgb2xkIGNvbnRlbnQgc28gaXQgY2FuIGJlIHJlc3RvcmVkIG9uIHJvbGxiYWNrLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgdG8gcHJvY2Vzcy5cbiAgICogQHBhcmFtIG5ld0NvbnRlbnRQcm92aWRlciAtIE1hcHMgdGhlIGN1cnJlbnQgY29udGVudCB0byB0aGUgbmV3IGNvbnRlbnQuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZmlsZSBpcyBwcm9jZXNzZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcHJvY2VzcyhwYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGUsIG5ld0NvbnRlbnRQcm92aWRlcjogKGNvbnRlbnQ6IHN0cmluZykgPT4gc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5hc3NlcnRPcGVuKCk7XG4gICAgY29uc3QgcGF0aCA9IGdldFBhdGgodGhpcy5hcHAsIHBhdGhPckZpbGUpO1xuICAgIGNvbnN0IG9sZENvbnRlbnQgPSBhd2FpdCByZWFkU2FmZSh0aGlzLmFwcCwgcGF0aCk7XG4gICAgYXdhaXQgcHJvY2Vzcyh7XG4gICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgbmV3Q29udGVudFByb3ZpZGVyOiAoeyBjb250ZW50IH0pID0+IG5ld0NvbnRlbnRQcm92aWRlcihjb250ZW50KSxcbiAgICAgIHBhdGhPckZpbGU6IHBhdGgsXG4gICAgICBwbHVnaW5Ob3RpY2VDb21wb25lbnQ6IG51bGwsXG4gICAgICByZXNvdXJjZUxvY2tDb21wb25lbnQ6IG51bGxcbiAgICB9KTtcbiAgICAvLyBSZWFjaGluZyB0aGlzIGxpbmUgbWVhbnMgYHByb2Nlc3NgIHN1Y2NlZWRlZC4gQSBtaXNzaW5nIGZpbGUgd291bGQgaGF2ZSB0aHJvd24gYWJvdmUgKGl0c1xuICAgIC8vIGBzaG91bGRGYWlsT25NaXNzaW5nRmlsZWAgZGVmYXVsdCksIHNvIHRoZSBwcmUtaW1hZ2Ugd2FzIGNhcHR1cmVkIGFuZCBjYW4gYmUgcmVzdG9yZWQgb24gcm9sbGJhY2suXG4gICAgYXNzZXJ0Tm9uTnVsbGFibGUob2xkQ29udGVudCk7XG4gICAgdGhpcy5wdXNoVW5kbyhhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBwcm9jZXNzKHtcbiAgICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgICAgbmV3Q29udGVudFByb3ZpZGVyOiBvbGRDb250ZW50LFxuICAgICAgICBwYXRoT3JGaWxlOiBwYXRoLFxuICAgICAgICBwbHVnaW5Ob3RpY2VDb21wb25lbnQ6IG51bGwsXG4gICAgICAgIHJlc291cmNlTG9ja0NvbXBvbmVudDogbnVsbFxuICAgICAgfSk7XG4gICAgICAvLyBBIGNvbnN1bWVyIG1heSBoYXZlIGVkaXRlZCB0aGlzIG5vdGUgdGhyb3VnaCB0aGUgZWRpdG9yLCBsZWF2aW5nIGEgZGlydHkgYnVmZmVyLlxuICAgICAgLy8gSXRzIHBlbmRpbmcgYXV0b3NhdmUgY291bGQgcmUtd3JpdGUgdGhhdCBzdGFsZSBidWZmZXIgb3ZlciB0aGUgZGlzayByZXN0b3JlIGFib3ZlIGFuZCBjbG9iYmVyIGl0LlxuICAgICAgLy8gUmVzZXR0aW5nIHRoZSBvcGVuIGVkaXRvcidzIGJ1ZmZlciB0byB0aGUgcmVzdG9yZWQgY29udGVudCBrZWVwcyBpdHMgbmV4dCBzYXZlIGEgbm8tb3AuXG4gICAgICAvLyBPbmx5IHRoZSB2aWV3IHN0aWxsIHNob3dpbmcgdGhpcyBwYXRoIGlzIHRvdWNoZWQuXG4gICAgICAvLyBWYXVsdFRyYW5zYWN0aW9uIGFscmVhZHkgZmx1c2hlcyB2aWEgYHNhdmVOb3RlYCwgc28gdGhpcyByZXNldCBpcyBiZWx0LWFuZC1zdXNwZW5kZXJzLlxuICAgICAgc3luY09wZW5FZGl0b3JCdWZmZXJzRm9yUGF0aCh0aGlzLmFwcCwgcGF0aCwgb2xkQ29udGVudCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuYW1lcyBvciBtb3ZlcyBhIHJlc291cmNlLCByZWNvcmRpbmcgdGhlIHJldmVyc2UgcmVuYW1lIGFzIHRoZSBpbnZlcnNlLlxuICAgKlxuICAgKiBAcGFyYW0gb2xkUGF0aE9yRmlsZSAtIFRoZSByZXNvdXJjZSB0byByZW5hbWUuXG4gICAqIEBwYXJhbSBuZXdQYXRoIC0gVGhlIGRlc2lyZWQgbmV3IHBhdGggKGFuIGF2YWlsYWJsZSBwYXRoIGlzIGNob3NlbiBpZiBpdCBpcyB0YWtlbikuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyB0byB0aGUgYWN0dWFsIG5ldyBwYXRoLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlbmFtZShvbGRQYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGUsIG5ld1BhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgdGhpcy5hc3NlcnRPcGVuKCk7XG4gICAgY29uc3Qgb2xkUGF0aCA9IGdldFBhdGgodGhpcy5hcHAsIG9sZFBhdGhPckZpbGUpO1xuICAgIGNvbnN0IGFjdHVhbE5ld1BhdGggPSBhd2FpdCByZW5hbWVTYWZlKHsgYXBwOiB0aGlzLmFwcCwgbmV3UGF0aCwgb2xkUGF0aE9yQWJzdHJhY3RGaWxlOiBvbGRQYXRoT3JGaWxlIH0pO1xuICAgIHRoaXMucHVzaFVuZG8oYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgcmVuYW1lU2FmZSh7IGFwcDogdGhpcy5hcHAsIG5ld1BhdGg6IG9sZFBhdGgsIG9sZFBhdGhPckFic3RyYWN0RmlsZTogYWN0dWFsTmV3UGF0aCB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWN0dWFsTmV3UGF0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSb2xscyBiYWNrIHRoZSB0cmFuc2FjdGlvbjogdW5kb2VzIHRoZSBjb21wbGV0ZWQgc3RlcHMgaW4gcmV2ZXJzZSBvcmRlciBhbmQgcmVtb3ZlcyB0aGUgc3RhZ2luZ1xuICAgKiBmb2xkZXIuIElkZW1wb3RlbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgcm9sbGJhY2sgY29tcGxldGVzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJvbGxiYWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAncm9sbGVkQmFjaycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5hc3NlcnROb3RDb21taXR0ZWQoKTtcbiAgICB0aGlzLnN0YXRlID0gJ3JvbGxlZEJhY2snO1xuICAgIGZvciAoY29uc3Qgc3RlcCBvZiBbLi4udGhpcy51bmRvU3RlcHNdLnJldmVyc2UoKSkge1xuICAgICAgYXdhaXQgc3RlcC51bmRvKCk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMucmVtb3ZlU3RhZ2luZ0ZvbGRlcigpO1xuICAgIHRoaXMuZGlzcG9zZU11dGF0aW9uQnlwYXNzKCk7XG4gIH1cblxuICAvKipcbiAgICogUm9sbHMgYmFjayB0aGUgdHJhbnNhY3Rpb24gb24gZGlzcG9zYWwgdW5sZXNzIGl0IHdhcyBhbHJlYWR5IGNvbW1pdHRlZCBvciByb2xsZWQgYmFjay5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdvcGVuJykge1xuICAgICAgYXdhaXQgdGhpcy5yb2xsYmFjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTb2Z0LWRlbGV0ZXMgYSByZXNvdXJjZSBieSBtb3ZpbmcgaXQgaW50byB0aGUgc3RhZ2luZyBmb2xkZXIsIHJlY29yZGluZyB0aGUgbW92ZS1iYWNrIGFzIHRoZVxuICAgKiBpbnZlcnNlLiBUaGUgcmVhbCB0cmFzaCBoYXBwZW5zIG9uIHtAbGluayBWYXVsdFRyYW5zYWN0aW9uLmNvbW1pdH0uIEEgbm8tb3AgaWYgdGhlIHJlc291cmNlIGRvZXNcbiAgICogbm90IGV4aXN0LlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIHJlc291cmNlIHRvIHRyYXNoLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHJlc291cmNlIGhhcyBiZWVuIHN0YWdlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB0cmFzaChwYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmFzc2VydE9wZW4oKTtcbiAgICBjb25zdCBmaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKHsgYXBwOiB0aGlzLmFwcCwgcGF0aE9yRmlsZSB9KTtcbiAgICBpZiAoIWZpbGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb3JpZ2luYWxQYXRoID0gZmlsZS5wYXRoO1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlU3RhZ2luZ0ZvbGRlcigpO1xuICAgIGNvbnN0IHN0YWdlZFBhdGggPSBhd2FpdCB0aGlzLmdldEF2YWlsYWJsZVN0YWdlZFBhdGgoZmlsZS5uYW1lKTtcbiAgICBjb25zdCBhZGFwdGVyID0gdGhpcy5hcHAudmF1bHQuYWRhcHRlcjtcbiAgICAvLyBNb3ZlIHRocm91Z2ggdGhlIGFkYXB0ZXIsIG5vdCBgdmF1bHQucmVuYW1lYDogdGhlIHN0YWdpbmcgZm9sZGVyIGlzIGRvdC1wcmVmaXhlZCBhbmQgdGhlcmVmb3JlXG4gICAgLy8gdW50cmFja2VkLCBzbyBhIGB2YXVsdC4qYCBtb3ZlIGNhbm5vdCB0YXJnZXQgaXQgKG5vciBzaG91bGQgaXQgcmV3cml0ZSBsaW5rcyB0byBhIHNvZnQtZGVsZXRlKS5cbiAgICBhd2FpdCBhZGFwdGVyLnJlbmFtZShvcmlnaW5hbFBhdGgsIHN0YWdlZFBhdGgpO1xuICAgIHRoaXMuc3RhZ2VkVHJhc2hQYXRocy5wdXNoKHN0YWdlZFBhdGgpO1xuICAgIHRoaXMucHVzaFVuZG8oYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKGF3YWl0IGFkYXB0ZXIuZXhpc3RzKHN0YWdlZFBhdGgpKSB7XG4gICAgICAgIGF3YWl0IGFkYXB0ZXIucmVuYW1lKHN0YWdlZFBhdGgsIG9yaWdpbmFsUGF0aCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzc2VydE5vdENvbW1pdHRlZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ2NvbW1pdHRlZCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHJvbGwgYmFjayBhIGNvbW1pdHRlZCB0cmFuc2FjdGlvbi4nKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzc2VydE9wZW4oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvcGVuJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgbXV0YXRlIGEgJHt0aGlzLnN0YXRlfSB0cmFuc2FjdGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRpc3Bvc2VNdXRhdGlvbkJ5cGFzcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tdXRhdGlvbkJ5cGFzcykge1xuICAgICAgZGlzcG9zZSh0aGlzLm11dGF0aW9uQnlwYXNzKTtcbiAgICB9XG4gICAgdGhpcy5tdXRhdGlvbkJ5cGFzcyA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVuc3VyZVN0YWdpbmdGb2xkZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaGFzU3RhZ2luZ0ZvbGRlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhZGFwdGVyID0gdGhpcy5hcHAudmF1bHQuYWRhcHRlcjtcbiAgICBpZiAoIWF3YWl0IGFkYXB0ZXIuZXhpc3RzKHRoaXMuc3RhZ2luZ0ZvbGRlclBhdGgpKSB7XG4gICAgICBhd2FpdCBhZGFwdGVyLm1rZGlyKHRoaXMuc3RhZ2luZ0ZvbGRlclBhdGgpO1xuICAgIH1cbiAgICB0aGlzLmhhc1N0YWdpbmdGb2xkZXIgPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRBdmFpbGFibGVTdGFnZWRQYXRoKG5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgYWRhcHRlciA9IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXI7XG4gICAgY29uc3QgZG90SW5kZXggPSBuYW1lLmxhc3RJbmRleE9mKCcuJyk7XG4gICAgY29uc3QgaGFzRXh0ZW5zaW9uID0gZG90SW5kZXggPiAwO1xuICAgIGNvbnN0IGJhc2VOYW1lID0gaGFzRXh0ZW5zaW9uID8gbmFtZS5zbGljZSgwLCBkb3RJbmRleCkgOiBuYW1lO1xuICAgIGNvbnN0IGV4dGVuc2lvbiA9IGhhc0V4dGVuc2lvbiA/IG5hbWUuc2xpY2UoZG90SW5kZXgpIDogJyc7XG4gICAgbGV0IGNhbmRpZGF0ZSA9IGAke3RoaXMuc3RhZ2luZ0ZvbGRlclBhdGh9LyR7bmFtZX1gO1xuICAgIGxldCBjb3VudGVyID0gMTtcbiAgICB3aGlsZSAoYXdhaXQgYWRhcHRlci5leGlzdHMoY2FuZGlkYXRlKSkge1xuICAgICAgY2FuZGlkYXRlID0gYCR7dGhpcy5zdGFnaW5nRm9sZGVyUGF0aH0vJHtiYXNlTmFtZX0gJHtjb3VudGVyLnRvU3RyaW5nKCl9JHtleHRlbnNpb259YDtcbiAgICAgIGNvdW50ZXIrKztcbiAgICB9XG4gICAgcmV0dXJuIGNhbmRpZGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFyZERlbGV0ZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKHsgYXBwOiB0aGlzLmFwcCwgcGF0aE9yRmlsZTogcGF0aCB9KTtcbiAgICBpZiAoZmlsZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFubWQvcHJlZmVyLWZpbGUtbWFuYWdlci10cmFzaC1maWxlIC0tIFVuZG9pbmcgYSB0cmFuc2FjdGlvbi1sb2NhbCBjcmVhdGUgbXVzdCB2YW5pc2ggaXQgZW50aXJlbHksIG5vdCBsYW5kIGl0IGluIHRoZSB1c2VyJ3MgdHJhc2guXG4gICAgICBhd2FpdCB0aGlzLmFwcC52YXVsdC5kZWxldGUoZmlsZSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwdXNoVW5kbyh1bmRvOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG4gICAgdGhpcy51bmRvU3RlcHMucHVzaCh7IHVuZG8gfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlbW92ZVN0YWdpbmdGb2xkZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmhhc1N0YWdpbmdGb2xkZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5oYXNTdGFnaW5nRm9sZGVyID0gZmFsc2U7XG4gICAgY29uc3QgYWRhcHRlciA9IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXI7XG4gICAgaWYgKGF3YWl0IGFkYXB0ZXIuZXhpc3RzKHRoaXMuc3RhZ2luZ0ZvbGRlclBhdGgpKSB7XG4gICAgICBhd2FpdCBhZGFwdGVyLnJtZGlyKHRoaXMuc3RhZ2luZ0ZvbGRlclBhdGgsIHRydWUpO1xuICAgIH1cbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXdCQSx3QkFBd0I7QUFDeEIseUJBQWtDO0FBSWxDLG9CQUE2QztBQUM3Qyx5QkFHTztBQUNQLG1CQU9PO0FBRVAsTUFBTSw4QkFBOEI7QUE4QzdCLE1BQU0saUJBQWlCO0FBQUE7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
412
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3ZhdWx0LXRyYW5zYWN0aW9uLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQSByZXZlcnNpYmxlLCB0cmFuc2FjdGlvbmFsIGxvZyBvZiB2YXVsdCBtdXRhdGlvbnMuIEVhY2ggbXV0YXRpb24gcmVjb3JkcyBob3cgdG8gdW5kbyBpdHNlbGY7XG4gKiB7QGxpbmsgVmF1bHRUcmFuc2FjdGlvbi5yb2xsYmFja30gcmV2ZXJzZXMgdGhlIGNvbXBsZXRlZCBzdGVwcyBpbiByZXZlcnNlIG9yZGVyIGFuZFxuICoge0BsaW5rIFZhdWx0VHJhbnNhY3Rpb24uY29tbWl0fSBmaW5hbGl6ZXMgdGhlbS4gSXQgaXMgYnVpbHQgb24gdGhlIGAqU2FmZWAgdmF1bHQgd3JhcHBlcnMgc28gaXRcbiAqIGluaGVyaXRzIHRoZWlyIGNhc2UtaW5zZW5zaXRpdmUgLyByZXRyeSAvIG1pc3NpbmctZmlsZSBoYW5kbGluZy5cbiAqXG4gKiBBIGRlbGV0aW9uIGlzIHBlcmZvcm1lZCBhcyBhICoqc29mdC1kZWxldGUqKjogdGhlIHJlc291cmNlIGlzIG1vdmVkIGFzaWRlIGludG8gYSBkb3QtcHJlZml4ZWRcbiAqIHN0YWdpbmcgZm9sZGVyIChhIGZvbGRlciBtb3ZlcyBpdHMgd2hvbGUgc3VidHJlZSBpbiBhIHNpbmdsZSByZW5hbWUsIHNvIHN1YnRyZWUgcm9sbGJhY2sgaXMgY2hlYXBcbiAqIGFuZCBmYWl0aGZ1bCkuIEJlY2F1c2UgT2JzaWRpYW4ncyB2YXVsdCBmaWxlLXRyZWUgYW5kIGZpbGUgd2F0Y2hlciBpZ25vcmUgYW55IGAuYC1wcmVmaXhlZCBwYXRoLFxuICogc3RhZ2VkIHJlc291cmNlcyBhcmUgKip1bnRyYWNrZWQqKiBcdTIwMTQgdGhleSBkbyBub3QgY2h1cm4gdGhlIG1ldGFkYXRhIGNhY2hlLCBmbGFzaCBpbiB0aGUgZmlsZVxuICogZXhwbG9yZXIsIG9yIGdldCBwcm9wYWdhdGVkIGJ5IHN5bmMgd2hpbGUgdGhlIHRyYW5zYWN0aW9uIGlzIGluIGZsaWdodC4gVGhlIGZsaXAgc2lkZSBpcyB0aGF0XG4gKiBgdmF1bHQuKmAgbWV0aG9kcyBjYW5ub3Qgc2VlIHRoZSBzdGFnaW5nIGFyZWEsIHNvIEFMTCBzdGFnaW5nIEkvTyBnb2VzIHRocm91Z2hcbiAqIHtAbGluayBBcHAudmF1bHQuYWRhcHRlcn0gKGBta2RpcmAvYHJlbmFtZWAvYGV4aXN0c2AvYHRyYXNoU3lzdGVtYC9gcm1kaXJgKS5cbiAqIHtAbGluayBWYXVsdFRyYW5zYWN0aW9uLmNvbW1pdH0gdGhlbiB0cmFzaGVzIHRoZSBzdGFnZWQgcmVzb3VyY2VzIGZvciByZWFsOyB7QGxpbmsgVmF1bHRUcmFuc2FjdGlvbi5yb2xsYmFja31cbiAqIG1vdmVzIHRoZW0gYmFjay5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgVEZpbGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBkaXNwb3NlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Rpc3Bvc2FibGUnO1xuaW1wb3J0IHsgYXNzZXJ0Tm9uTnVsbGFibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuXG5pbXBvcnQgdHlwZSB7IFBhdGhPckFic3RyYWN0RmlsZSB9IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuXG5pbXBvcnQgeyBzeW5jT3BlbkVkaXRvckJ1ZmZlcnNGb3JQYXRoIH0gZnJvbSAnLi9lZGl0b3IudHMnO1xuaW1wb3J0IHtcbiAgZ2V0QWJzdHJhY3RGaWxlT3JOdWxsLFxuICBnZXRQYXRoXG59IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuaW1wb3J0IHtcbiAgY29weVNhZmUsXG4gIGNyZWF0ZUZvbGRlclNhZmUsXG4gIENyZWF0ZUZvbGRlclNhZmVSZXN1bHQsXG4gIHByb2Nlc3MsXG4gIHJlYWRTYWZlLFxuICByZW5hbWVTYWZlXG59IGZyb20gJy4vdmF1bHQudHMnO1xuXG5jb25zdCBERUZBVUxUX1NUQUdJTkdfRk9MREVSX1BBVEggPSAnLm9ic2lkaWFuLWRldi11dGlscy10ZW1wJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB0aGUge0BsaW5rIFZhdWx0VHJhbnNhY3Rpb259IGNvbnN0cnVjdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZhdWx0VHJhbnNhY3Rpb25Db25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogT3BlbnMgYW4gYW1iaWVudCBtdXRhdGlvbi1ieXBhc3Mgc2NvcGUgY292ZXJpbmcgdGhlIHBhdGhzIHRoaXMgdHJhbnNhY3Rpb24gdG91Y2hlcywgc28gdGhlXG4gICAqIHRyYW5zYWN0aW9uJ3Mgb3duIHdyaXRlcyBwYXNzIGEgYHNob3VsZEJsb2NrTXV0YXRpb25zYCBsb2NrIHRoYXQgdGhlIG93bmluZyBvcGVyYXRpb24gaG9sZHMuIEl0IGlzXG4gICAqIGNhbGxlZCBvbmNlIHdoZW4gdGhlIHRyYW5zYWN0aW9uIGlzIGNvbnN0cnVjdGVkLCBhbmQgdGhlIHJldHVybmVkIHtAbGluayBEaXNwb3NhYmxlfSBpcyBkaXNwb3NlZFxuICAgKiB3aGVuIHRoZSB0cmFuc2FjdGlvbiBzZXR0bGVzIChvbiBgY29tbWl0YCwgYHJvbGxiYWNrYCwgb3IgYGF3YWl0IHVzaW5nYCBkaXNwb3NhbCkgXHUyMDE0IHNvIHRoZSBieXBhc3NcbiAgICogc3RheXMgYWN0aXZlIHRocm91Z2ggcm9sbGJhY2ssIGluY2x1ZGluZyBhdXRvLXJvbGxiYWNrLCB3aGljaCBhIGNhbGxlciBtYW5hZ2luZyB0aGUgc2NvcGUgaXRzZWxmXG4gICAqIGNvdWxkIGVhc2lseSBnZXQgd3JvbmcuIFR5cGljYWxseVxuICAgKiBgKCkgPT4gcmVzb3VyY2VMb2NrQ29tcG9uZW50LmJ5cGFzc0Jsb2NrZWRNdXRhdGlvbnMobG9ja2VkUGF0aHNPckZpbGVzKWAuIE9taXQgaXQgZm9yIHRoZSBjb21tb25cbiAgICogc3RhbmRhbG9uZSBjYXNlIHdoZXJlIHRoZSB0cmFuc2FjdGlvbiBvcGVyYXRlcyBvbiB1bmxvY2tlZCBwYXRocy5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgRGlzcG9zYWJsZX0gdGhhdCBlbmRzIHRoZSBieXBhc3Mgc2NvcGUuXG4gICAqL1xuICByZWFkb25seSBvcGVuTXV0YXRpb25CeXBhc3M/OiAoKSA9PiBEaXNwb3NhYmxlO1xuXG4gIC8qKlxuICAgKiBUaGUgZG90LXByZWZpeGVkIGZvbGRlciB0aGF0IHNvZnQtZGVsZXRlZCByZXNvdXJjZXMgYXJlIG1vdmVkIGludG8gdW50aWwgdGhlIHRyYW5zYWN0aW9uIGlzXG4gICAqIGNvbW1pdHRlZCBvciByb2xsZWQgYmFjay4gSXQgbXVzdCBzdGF5IGAuYC1wcmVmaXhlZCBzbyBPYnNpZGlhbiBsZWF2ZXMgdGhlIHN0YWdlZCByZXNvdXJjZXNcbiAgICogdW50cmFja2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJy5vYnNpZGlhbi1kZXYtdXRpbHMtdGVtcCdgXG4gICAqL1xuICByZWFkb25seSBzdGFnaW5nRm9sZGVyUGF0aD86IHN0cmluZztcbn1cblxudHlwZSBUcmFuc2FjdGlvblN0YXRlID0gJ2NvbW1pdHRlZCcgfCAnb3BlbicgfCAncm9sbGVkQmFjayc7XG5cbmludGVyZmFjZSBVbmRvU3RlcCB7XG4gIHVuZG86ICgpID0+IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogQSByZXZlcnNpYmxlIGxvZyBvZiB2YXVsdCBtdXRhdGlvbnMuIFBlcmZvcm0gbXV0YXRpb25zIHRocm91Z2ggaXRzIG1ldGhvZHMsIHRoZW4gY2FsbFxuICoge0BsaW5rIFZhdWx0VHJhbnNhY3Rpb24uY29tbWl0fSBvbiBzdWNjZXNzIG9yIHtAbGluayBWYXVsdFRyYW5zYWN0aW9uLnJvbGxiYWNrfSBvbiBmYWlsdXJlLiBJdCBpc1xuICogYGF3YWl0IHVzaW5nYC1mcmllbmRseTogaWYgbmVpdGhlciBpcyBjYWxsZWQsIGRpc3Bvc2FsIHJvbGxzIGJhY2suXG4gKi9cbmV4cG9ydCBjbGFzcyBWYXVsdFRyYW5zYWN0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZSB0aGUgdHJhbnNhY3Rpb24gbXV0YXRlcy5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBhcHA6IEFwcDtcbiAgcHJpdmF0ZSBoYXNTdGFnaW5nRm9sZGVyID0gZmFsc2U7XG4gIHByaXZhdGUgbXV0YXRpb25CeXBhc3M6IERpc3Bvc2FibGUgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFnZWRUcmFzaFBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YWdpbmdGb2xkZXJQYXRoOiBzdHJpbmc7XG4gIHByaXZhdGUgc3RhdGU6IFRyYW5zYWN0aW9uU3RhdGUgPSAnb3Blbic7XG4gIHByaXZhdGUgcmVhZG9ubHkgdW5kb1N0ZXBzOiBVbmRvU3RlcFtdID0gW107XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgdmF1bHQgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IFZhdWx0VHJhbnNhY3Rpb25Db25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHRoaXMuYXBwID0gcGFyYW1zLmFwcDtcbiAgICB0aGlzLnN0YWdpbmdGb2xkZXJQYXRoID0gcGFyYW1zLnN0YWdpbmdGb2xkZXJQYXRoID8/IERFRkFVTFRfU1RBR0lOR19GT0xERVJfUEFUSDtcbiAgICB0aGlzLm11dGF0aW9uQnlwYXNzID0gcGFyYW1zLm9wZW5NdXRhdGlvbkJ5cGFzcz8uKCkgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21taXRzIHRoZSB0cmFuc2FjdGlvbjogZmluYWxpemVzIHNvZnQtZGVsZXRlcyBieSB0cmFzaGluZyB0aGUgc3RhZ2VkIHJlc291cmNlcyBmb3IgcmVhbCBhbmRcbiAgICogcmVtb3ZlcyB0aGUgc3RhZ2luZyBmb2xkZXIuIEFmdGVyIHRoaXMgdGhlIHRyYW5zYWN0aW9uIGNhbiBubyBsb25nZXIgYmUgbXV0YXRlZCBvciByb2xsZWQgYmFjay5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb21taXQgY29tcGxldGVzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNvbW1pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmFzc2VydE9wZW4oKTtcbiAgICB0aGlzLnN0YXRlID0gJ2NvbW1pdHRlZCc7XG4gICAgY29uc3QgYWRhcHRlciA9IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXI7XG4gICAgZm9yIChjb25zdCBzdGFnZWRQYXRoIG9mIHRoaXMuc3RhZ2VkVHJhc2hQYXRocykge1xuICAgICAgY29uc3Qgd2FzVHJhc2hlZFRvU3lzdGVtID0gYXdhaXQgYWRhcHRlci50cmFzaFN5c3RlbShzdGFnZWRQYXRoKTtcbiAgICAgIGlmICghd2FzVHJhc2hlZFRvU3lzdGVtKSB7XG4gICAgICAgIGF3YWl0IGFkYXB0ZXIudHJhc2hMb2NhbChzdGFnZWRQYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgdGhpcy5yZW1vdmVTdGFnaW5nRm9sZGVyKCk7XG4gICAgdGhpcy5kaXNwb3NlTXV0YXRpb25CeXBhc3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3BpZXMgYSBmaWxlIG9yIGZvbGRlciwgcmVjb3JkaW5nIHRoZSByZW1vdmFsIG9mIHRoZSBjb3B5IGFzIHRoZSBpbnZlcnNlLiBBIGZvbGRlciBpcyBjb3BpZWQgd2l0aFxuICAgKiBpdHMgd2hvbGUgc3VidHJlZSwgc28gdGhlIHNpbmdsZSByZWNvcmRlZCByZW1vdmFsIHVuZG9lcyB0aGUgd2hvbGUgdHJlZS4gVW5saWtlXG4gICAqIHtAbGluayBWYXVsdFRyYW5zYWN0aW9uLmNyZWF0ZX0sIHRoZSBjb250ZW50IGlzIGNvcGllZCBieXRlIGZvciBieXRlLCBzbyBhIGJpbmFyeSByZXNvdXJjZVxuICAgKiByb3VuZC10cmlwcyBmYWl0aGZ1bGx5LlxuICAgKlxuICAgKiBQYXJlbnQgZm9sZGVycyB0aGF0IGhhZCB0byBiZSBjcmVhdGVkIGZvciB0aGUgZGVzdGluYXRpb24gYXJlIE5PVCB1bmRvbmUgaW5kaXZpZHVhbGx5LCBtYXRjaGluZ1xuICAgKiB7QGxpbmsgVmF1bHRUcmFuc2FjdGlvbi5jcmVhdGV9IGFuZCB7QGxpbmsgVmF1bHRUcmFuc2FjdGlvbi5yZW5hbWV9LlxuICAgKlxuICAgKiBAcGFyYW0gb2xkUGF0aE9yRmlsZSAtIFRoZSBwYXRoLCBmaWxlIG9yIGZvbGRlciB0byBjb3B5LlxuICAgKiBAcGFyYW0gbmV3UGF0aCAtIFRoZSBkZXNpcmVkIG5ldyBwYXRoIChhbiBhdmFpbGFibGUgcGF0aCBpcyBjaG9zZW4gaWYgaXQgaXMgdGFrZW4pLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSByZXNvbHZpbmcgdG8gdGhlIGFjdHVhbCBwYXRoIG9mIHRoZSBjb3B5LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNvcHkob2xkUGF0aE9yRmlsZTogUGF0aE9yQWJzdHJhY3RGaWxlLCBuZXdQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHRoaXMuYXNzZXJ0T3BlbigpO1xuICAgIGNvbnN0IG9sZFBhdGggPSBnZXRQYXRoKHRoaXMuYXBwLCBvbGRQYXRoT3JGaWxlKTtcbiAgICBjb25zdCBhY3R1YWxOZXdQYXRoID0gYXdhaXQgY29weVNhZmUoeyBhcHA6IHRoaXMuYXBwLCBuZXdQYXRoLCBvbGRQYXRoT3JGaWxlIH0pO1xuICAgIC8vIFdoZW4gc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgaWRlbnRpY2FsLCBgY29weVNhZmVgIHJldHVybnMgdGhlIHNvdXJjZSBwYXRoIGFuZCBjb3BpZXMgbm90aGluZy5cbiAgICAvLyBSZWNvcmRpbmcgYW4gdW5kbyBoZXJlIHdvdWxkIG1ha2UgYHJvbGxiYWNrYCBkZWxldGUgdGhlIGNhbGxlcidzIE9SSUdJTkFMIHJlc291cmNlLlxuICAgIGlmIChhY3R1YWxOZXdQYXRoICE9PSBvbGRQYXRoKSB7XG4gICAgICB0aGlzLnB1c2hVbmRvKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5oYXJkRGVsZXRlKGFjdHVhbE5ld1BhdGgpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhY3R1YWxOZXdQYXRoO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmaWxlIHdpdGggdGhlIGdpdmVuIGNvbnRlbnQsIHJlY29yZGluZyBpdHMgcmVtb3ZhbCBhcyB0aGUgaW52ZXJzZS5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSB0byBjcmVhdGUuXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyB0byB0aGUgY3JlYXRlZCB7QGxpbmsgVEZpbGV9LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNyZWF0ZShwYXRoOiBzdHJpbmcsIGRhdGE6IHN0cmluZyk6IFByb21pc2U8VEZpbGU+IHtcbiAgICB0aGlzLmFzc2VydE9wZW4oKTtcbiAgICBjb25zdCBmaWxlID0gYXdhaXQgdGhpcy5hcHAudmF1bHQuY3JlYXRlKHBhdGgsIGRhdGEpO1xuICAgIGNvbnN0IGNyZWF0ZWRQYXRoID0gZmlsZS5wYXRoO1xuICAgIHRoaXMucHVzaFVuZG8oYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5oYXJkRGVsZXRlKGNyZWF0ZWRQYXRoKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZmlsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZm9sZGVyIChpbmNsdWRpbmcgbWlzc2luZyBhbmNlc3RvcnMpLCByZWNvcmRpbmcgaXRzIHJlbW92YWwgYXMgdGhlIGludmVyc2UuIEEgbm8tb3AgaWZcbiAgICogdGhlIGZvbGRlciBhbHJlYWR5IGV4aXN0cy5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZm9sZGVyIHRvIGNyZWF0ZS5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmb2xkZXIgZXhpc3RzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNyZWF0ZUZvbGRlcihwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmFzc2VydE9wZW4oKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjcmVhdGVGb2xkZXJTYWZlKHRoaXMuYXBwLCBwYXRoKTtcbiAgICBpZiAocmVzdWx0ID09PSBDcmVhdGVGb2xkZXJTYWZlUmVzdWx0LkNyZWF0ZWQpIHtcbiAgICAgIHRoaXMucHVzaFVuZG8oYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmhhcmREZWxldGUocGF0aCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZXMgdGhlIGNvbnRlbnQgb2YgYSBmaWxlLCBjYXB0dXJpbmcgdGhlIG9sZCBjb250ZW50IHNvIGl0IGNhbiBiZSByZXN0b3JlZCBvbiByb2xsYmFjay5cbiAgICpcbiAgICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIHRvIG1vZGlmeS5cbiAgICogQHBhcmFtIG5ld0NvbnRlbnQgLSBUaGUgbmV3IGNvbnRlbnQuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZmlsZSBpcyBtb2RpZmllZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBtb2RpZnkocGF0aE9yRmlsZTogUGF0aE9yQWJzdHJhY3RGaWxlLCBuZXdDb250ZW50OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnByb2Nlc3MocGF0aE9yRmlsZSwgKCkgPT4gbmV3Q29udGVudCk7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtcyB0aGUgY29udGVudCBvZiBhIGZpbGUsIGNhcHR1cmluZyB0aGUgb2xkIGNvbnRlbnQgc28gaXQgY2FuIGJlIHJlc3RvcmVkIG9uIHJvbGxiYWNrLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgdG8gcHJvY2Vzcy5cbiAgICogQHBhcmFtIG5ld0NvbnRlbnRQcm92aWRlciAtIE1hcHMgdGhlIGN1cnJlbnQgY29udGVudCB0byB0aGUgbmV3IGNvbnRlbnQuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZmlsZSBpcyBwcm9jZXNzZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcHJvY2VzcyhwYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGUsIG5ld0NvbnRlbnRQcm92aWRlcjogKGNvbnRlbnQ6IHN0cmluZykgPT4gc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5hc3NlcnRPcGVuKCk7XG4gICAgY29uc3QgcGF0aCA9IGdldFBhdGgodGhpcy5hcHAsIHBhdGhPckZpbGUpO1xuICAgIGNvbnN0IG9sZENvbnRlbnQgPSBhd2FpdCByZWFkU2FmZSh0aGlzLmFwcCwgcGF0aCk7XG4gICAgYXdhaXQgcHJvY2Vzcyh7XG4gICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgbmV3Q29udGVudFByb3ZpZGVyOiAoeyBjb250ZW50IH0pID0+IG5ld0NvbnRlbnRQcm92aWRlcihjb250ZW50KSxcbiAgICAgIHBhdGhPckZpbGU6IHBhdGgsXG4gICAgICBwbHVnaW5Ob3RpY2VDb21wb25lbnQ6IG51bGwsXG4gICAgICByZXNvdXJjZUxvY2tDb21wb25lbnQ6IG51bGxcbiAgICB9KTtcbiAgICAvLyBSZWFjaGluZyB0aGlzIGxpbmUgbWVhbnMgYHByb2Nlc3NgIHN1Y2NlZWRlZC4gQSBtaXNzaW5nIGZpbGUgd291bGQgaGF2ZSB0aHJvd24gYWJvdmUgKGl0c1xuICAgIC8vIGBzaG91bGRGYWlsT25NaXNzaW5nRmlsZWAgZGVmYXVsdCksIHNvIHRoZSBwcmUtaW1hZ2Ugd2FzIGNhcHR1cmVkIGFuZCBjYW4gYmUgcmVzdG9yZWQgb24gcm9sbGJhY2suXG4gICAgYXNzZXJ0Tm9uTnVsbGFibGUob2xkQ29udGVudCk7XG4gICAgdGhpcy5wdXNoVW5kbyhhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBwcm9jZXNzKHtcbiAgICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgICAgbmV3Q29udGVudFByb3ZpZGVyOiBvbGRDb250ZW50LFxuICAgICAgICBwYXRoT3JGaWxlOiBwYXRoLFxuICAgICAgICBwbHVnaW5Ob3RpY2VDb21wb25lbnQ6IG51bGwsXG4gICAgICAgIHJlc291cmNlTG9ja0NvbXBvbmVudDogbnVsbFxuICAgICAgfSk7XG4gICAgICAvLyBBIGNvbnN1bWVyIG1heSBoYXZlIGVkaXRlZCB0aGlzIG5vdGUgdGhyb3VnaCB0aGUgZWRpdG9yLCBsZWF2aW5nIGEgZGlydHkgYnVmZmVyLlxuICAgICAgLy8gSXRzIHBlbmRpbmcgYXV0b3NhdmUgY291bGQgcmUtd3JpdGUgdGhhdCBzdGFsZSBidWZmZXIgb3ZlciB0aGUgZGlzayByZXN0b3JlIGFib3ZlIGFuZCBjbG9iYmVyIGl0LlxuICAgICAgLy8gUmVzZXR0aW5nIHRoZSBvcGVuIGVkaXRvcidzIGJ1ZmZlciB0byB0aGUgcmVzdG9yZWQgY29udGVudCBrZWVwcyBpdHMgbmV4dCBzYXZlIGEgbm8tb3AuXG4gICAgICAvLyBPbmx5IHRoZSB2aWV3IHN0aWxsIHNob3dpbmcgdGhpcyBwYXRoIGlzIHRvdWNoZWQuXG4gICAgICAvLyBWYXVsdFRyYW5zYWN0aW9uIGFscmVhZHkgZmx1c2hlcyB2aWEgYHNhdmVOb3RlYCwgc28gdGhpcyByZXNldCBpcyBiZWx0LWFuZC1zdXNwZW5kZXJzLlxuICAgICAgc3luY09wZW5FZGl0b3JCdWZmZXJzRm9yUGF0aCh0aGlzLmFwcCwgcGF0aCwgb2xkQ29udGVudCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuYW1lcyBvciBtb3ZlcyBhIHJlc291cmNlLCByZWNvcmRpbmcgdGhlIHJldmVyc2UgcmVuYW1lIGFzIHRoZSBpbnZlcnNlLlxuICAgKlxuICAgKiBAcGFyYW0gb2xkUGF0aE9yRmlsZSAtIFRoZSByZXNvdXJjZSB0byByZW5hbWUuXG4gICAqIEBwYXJhbSBuZXdQYXRoIC0gVGhlIGRlc2lyZWQgbmV3IHBhdGggKGFuIGF2YWlsYWJsZSBwYXRoIGlzIGNob3NlbiBpZiBpdCBpcyB0YWtlbikuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyB0byB0aGUgYWN0dWFsIG5ldyBwYXRoLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlbmFtZShvbGRQYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGUsIG5ld1BhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgdGhpcy5hc3NlcnRPcGVuKCk7XG4gICAgY29uc3Qgb2xkUGF0aCA9IGdldFBhdGgodGhpcy5hcHAsIG9sZFBhdGhPckZpbGUpO1xuICAgIGNvbnN0IGFjdHVhbE5ld1BhdGggPSBhd2FpdCByZW5hbWVTYWZlKHsgYXBwOiB0aGlzLmFwcCwgbmV3UGF0aCwgb2xkUGF0aE9yQWJzdHJhY3RGaWxlOiBvbGRQYXRoT3JGaWxlIH0pO1xuICAgIHRoaXMucHVzaFVuZG8oYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgcmVuYW1lU2FmZSh7IGFwcDogdGhpcy5hcHAsIG5ld1BhdGg6IG9sZFBhdGgsIG9sZFBhdGhPckFic3RyYWN0RmlsZTogYWN0dWFsTmV3UGF0aCB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWN0dWFsTmV3UGF0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSb2xscyBiYWNrIHRoZSB0cmFuc2FjdGlvbjogdW5kb2VzIHRoZSBjb21wbGV0ZWQgc3RlcHMgaW4gcmV2ZXJzZSBvcmRlciBhbmQgcmVtb3ZlcyB0aGUgc3RhZ2luZ1xuICAgKiBmb2xkZXIuIElkZW1wb3RlbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgcm9sbGJhY2sgY29tcGxldGVzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJvbGxiYWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAncm9sbGVkQmFjaycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5hc3NlcnROb3RDb21taXR0ZWQoKTtcbiAgICB0aGlzLnN0YXRlID0gJ3JvbGxlZEJhY2snO1xuICAgIGZvciAoY29uc3Qgc3RlcCBvZiBbLi4udGhpcy51bmRvU3RlcHNdLnJldmVyc2UoKSkge1xuICAgICAgYXdhaXQgc3RlcC51bmRvKCk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMucmVtb3ZlU3RhZ2luZ0ZvbGRlcigpO1xuICAgIHRoaXMuZGlzcG9zZU11dGF0aW9uQnlwYXNzKCk7XG4gIH1cblxuICAvKipcbiAgICogUm9sbHMgYmFjayB0aGUgdHJhbnNhY3Rpb24gb24gZGlzcG9zYWwgdW5sZXNzIGl0IHdhcyBhbHJlYWR5IGNvbW1pdHRlZCBvciByb2xsZWQgYmFjay5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdvcGVuJykge1xuICAgICAgYXdhaXQgdGhpcy5yb2xsYmFjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTb2Z0LWRlbGV0ZXMgYSByZXNvdXJjZSBieSBtb3ZpbmcgaXQgaW50byB0aGUgc3RhZ2luZyBmb2xkZXIsIHJlY29yZGluZyB0aGUgbW92ZS1iYWNrIGFzIHRoZVxuICAgKiBpbnZlcnNlLiBUaGUgcmVhbCB0cmFzaCBoYXBwZW5zIG9uIHtAbGluayBWYXVsdFRyYW5zYWN0aW9uLmNvbW1pdH0uIEEgbm8tb3AgaWYgdGhlIHJlc291cmNlIGRvZXNcbiAgICogbm90IGV4aXN0LlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIHJlc291cmNlIHRvIHRyYXNoLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHJlc291cmNlIGhhcyBiZWVuIHN0YWdlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB0cmFzaChwYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmFzc2VydE9wZW4oKTtcbiAgICBjb25zdCBmaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKHsgYXBwOiB0aGlzLmFwcCwgcGF0aE9yRmlsZSB9KTtcbiAgICBpZiAoIWZpbGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb3JpZ2luYWxQYXRoID0gZmlsZS5wYXRoO1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlU3RhZ2luZ0ZvbGRlcigpO1xuICAgIGNvbnN0IHN0YWdlZFBhdGggPSBhd2FpdCB0aGlzLmdldEF2YWlsYWJsZVN0YWdlZFBhdGgoZmlsZS5uYW1lKTtcbiAgICBjb25zdCBhZGFwdGVyID0gdGhpcy5hcHAudmF1bHQuYWRhcHRlcjtcbiAgICAvLyBNb3ZlIHRocm91Z2ggdGhlIGFkYXB0ZXIsIG5vdCBgdmF1bHQucmVuYW1lYDogdGhlIHN0YWdpbmcgZm9sZGVyIGlzIGRvdC1wcmVmaXhlZCBhbmQgdGhlcmVmb3JlXG4gICAgLy8gdW50cmFja2VkLCBzbyBhIGB2YXVsdC4qYCBtb3ZlIGNhbm5vdCB0YXJnZXQgaXQgKG5vciBzaG91bGQgaXQgcmV3cml0ZSBsaW5rcyB0byBhIHNvZnQtZGVsZXRlKS5cbiAgICBhd2FpdCBhZGFwdGVyLnJlbmFtZShvcmlnaW5hbFBhdGgsIHN0YWdlZFBhdGgpO1xuICAgIHRoaXMuc3RhZ2VkVHJhc2hQYXRocy5wdXNoKHN0YWdlZFBhdGgpO1xuICAgIHRoaXMucHVzaFVuZG8oYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKGF3YWl0IGFkYXB0ZXIuZXhpc3RzKHN0YWdlZFBhdGgpKSB7XG4gICAgICAgIGF3YWl0IGFkYXB0ZXIucmVuYW1lKHN0YWdlZFBhdGgsIG9yaWdpbmFsUGF0aCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzc2VydE5vdENvbW1pdHRlZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ2NvbW1pdHRlZCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHJvbGwgYmFjayBhIGNvbW1pdHRlZCB0cmFuc2FjdGlvbi4nKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzc2VydE9wZW4oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvcGVuJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgbXV0YXRlIGEgJHt0aGlzLnN0YXRlfSB0cmFuc2FjdGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRpc3Bvc2VNdXRhdGlvbkJ5cGFzcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tdXRhdGlvbkJ5cGFzcykge1xuICAgICAgZGlzcG9zZSh0aGlzLm11dGF0aW9uQnlwYXNzKTtcbiAgICB9XG4gICAgdGhpcy5tdXRhdGlvbkJ5cGFzcyA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVuc3VyZVN0YWdpbmdGb2xkZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaGFzU3RhZ2luZ0ZvbGRlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhZGFwdGVyID0gdGhpcy5hcHAudmF1bHQuYWRhcHRlcjtcbiAgICBpZiAoIWF3YWl0IGFkYXB0ZXIuZXhpc3RzKHRoaXMuc3RhZ2luZ0ZvbGRlclBhdGgpKSB7XG4gICAgICBhd2FpdCBhZGFwdGVyLm1rZGlyKHRoaXMuc3RhZ2luZ0ZvbGRlclBhdGgpO1xuICAgIH1cbiAgICB0aGlzLmhhc1N0YWdpbmdGb2xkZXIgPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRBdmFpbGFibGVTdGFnZWRQYXRoKG5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgYWRhcHRlciA9IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXI7XG4gICAgY29uc3QgZG90SW5kZXggPSBuYW1lLmxhc3RJbmRleE9mKCcuJyk7XG4gICAgY29uc3QgaGFzRXh0ZW5zaW9uID0gZG90SW5kZXggPiAwO1xuICAgIGNvbnN0IGJhc2VOYW1lID0gaGFzRXh0ZW5zaW9uID8gbmFtZS5zbGljZSgwLCBkb3RJbmRleCkgOiBuYW1lO1xuICAgIGNvbnN0IGV4dGVuc2lvbiA9IGhhc0V4dGVuc2lvbiA/IG5hbWUuc2xpY2UoZG90SW5kZXgpIDogJyc7XG4gICAgbGV0IGNhbmRpZGF0ZSA9IGAke3RoaXMuc3RhZ2luZ0ZvbGRlclBhdGh9LyR7bmFtZX1gO1xuICAgIGxldCBjb3VudGVyID0gMTtcbiAgICB3aGlsZSAoYXdhaXQgYWRhcHRlci5leGlzdHMoY2FuZGlkYXRlKSkge1xuICAgICAgY2FuZGlkYXRlID0gYCR7dGhpcy5zdGFnaW5nRm9sZGVyUGF0aH0vJHtiYXNlTmFtZX0gJHtjb3VudGVyLnRvU3RyaW5nKCl9JHtleHRlbnNpb259YDtcbiAgICAgIGNvdW50ZXIrKztcbiAgICB9XG4gICAgcmV0dXJuIGNhbmRpZGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFyZERlbGV0ZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKHsgYXBwOiB0aGlzLmFwcCwgcGF0aE9yRmlsZTogcGF0aCB9KTtcbiAgICBpZiAoZmlsZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFubWQvcHJlZmVyLWZpbGUtbWFuYWdlci10cmFzaC1maWxlIC0tIFVuZG9pbmcgYSB0cmFuc2FjdGlvbi1sb2NhbCBjcmVhdGUgbXVzdCB2YW5pc2ggaXQgZW50aXJlbHksIG5vdCBsYW5kIGl0IGluIHRoZSB1c2VyJ3MgdHJhc2guXG4gICAgICBhd2FpdCB0aGlzLmFwcC52YXVsdC5kZWxldGUoZmlsZSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwdXNoVW5kbyh1bmRvOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG4gICAgdGhpcy51bmRvU3RlcHMucHVzaCh7IHVuZG8gfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlbW92ZVN0YWdpbmdGb2xkZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmhhc1N0YWdpbmdGb2xkZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5oYXNTdGFnaW5nRm9sZGVyID0gZmFsc2U7XG4gICAgY29uc3QgYWRhcHRlciA9IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXI7XG4gICAgaWYgKGF3YWl0IGFkYXB0ZXIuZXhpc3RzKHRoaXMuc3RhZ2luZ0ZvbGRlclBhdGgpKSB7XG4gICAgICBhd2FpdCBhZGFwdGVyLnJtZGlyKHRoaXMuc3RhZ2luZ0ZvbGRlclBhdGgsIHRydWUpO1xuICAgIH1cbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXdCQSx3QkFBd0I7QUFDeEIseUJBQWtDO0FBSWxDLG9CQUE2QztBQUM3Qyx5QkFHTztBQUNQLG1CQU9PO0FBRVAsTUFBTSw4QkFBOEI7QUE4QzdCLE1BQU0saUJBQWlCO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJVDtBQUFB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